Repository: julep-ai/julep Branch: dev Commit: 5371a620af25 Files: 984 Total size: 13.1 MB Directory structure: gitextract_2v2u36g9/ ├── .agentignore ├── .codex/ │ └── setup.sh ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── feature_request.yml │ │ └── refactor.yml │ ├── LICENSE │ ├── README-CN.md │ ├── README-FR.md │ ├── README-JA.md │ ├── SUPPORT.md │ ├── dependabot.yml │ └── workflows/ │ ├── bake-push-to-hub.yml │ ├── bandit-security-check-python-agents-api.yml │ ├── changelog-ci.yml │ ├── changelog-sync.yml │ ├── claude-changelog-pr.yml │ ├── claude-code-review.yml │ ├── claude-docs-manual.yml │ ├── claude-docs-pr.yml │ ├── claude.yml │ ├── docker-bake-on-pr.yml │ ├── doctoc-on-push.yml │ ├── generate-changelog.yml │ ├── generate-openapi-code-from-typespec.yml │ ├── latest-push-to-hub.yml │ ├── lint-agents-api-pr.yml │ ├── lint-integrations-service-pr.yml │ ├── publish-cli-prerelease.yml │ ├── sync-model-docs.yml │ ├── test-agents-api-pr.yml │ ├── test-integrations-service-pr.yml │ ├── translate-readme.yml │ └── typecheck-agents-api-pr.yml ├── .gitignore ├── .gitmodules ├── .mcp.json ├── AGENTS.md ├── CHANGELOG.md ├── README.md ├── changelog/ │ ├── Templates/ │ │ ├── JulepCustom/ │ │ │ ├── entries.html │ │ │ ├── entry.html │ │ │ ├── footer.html │ │ │ ├── head.html │ │ │ ├── header.html │ │ │ ├── package.json │ │ │ └── style.css │ │ └── index-template/ │ │ ├── archives.html │ │ ├── entries.html │ │ ├── entry.html │ │ ├── error.html │ │ ├── feed.rss │ │ ├── footer.html │ │ ├── head.html │ │ ├── header.html │ │ ├── home-summary.html │ │ ├── package.json │ │ ├── public.html │ │ ├── robots.txt │ │ ├── script.js │ │ ├── search.html │ │ ├── sitemap.xml │ │ ├── style.css │ │ └── tagged.html │ ├── dev/ │ │ ├── 2025-06-17.md │ │ ├── 2025-06-23.md │ │ ├── 2025-06-25.md │ │ ├── 2025-06-26.md │ │ ├── 2025-06-30.md │ │ ├── 2025-07-02.md │ │ ├── 2025-07-03.md │ │ ├── 2025-07-04.md │ │ ├── 2025-07-05.md │ │ ├── 2025-07-08.md │ │ ├── 2025-07-09.md │ │ ├── 2025-07-18.md │ │ ├── 2025-07-31.md │ │ ├── 2025-08-06.md │ │ ├── 2025-08-07.md │ │ ├── 2025-08-08.md │ │ └── 2025-08-15.md │ └── stable (main)/ │ ├── 2025-01-31.md │ ├── 2025-02-14.md │ ├── 2025-04-11.md │ ├── 2025-05-09.md │ ├── 2025-05-21.md │ ├── 2025-06-23.md │ ├── 2025-06-30.md │ ├── 2025-07-04.md │ ├── 2025-07-05.md │ ├── 2025-07-08.md │ └── 2025-07-18.md ├── cookbooks/ │ ├── IDEAS.md │ ├── README.md │ ├── __init__.py │ ├── advanced/ │ │ ├── 00-Devfest-Email-Assistant.ipynb │ │ ├── 01-website-crawler.ipynb │ │ ├── 02-sarcastic-news-headline-generator.ipynb │ │ ├── 03-trip-planning-assistant.ipynb │ │ ├── 04-hook-generator-trending-reels.ipynb │ │ ├── 05-video-processing-with-natural-language.ipynb │ │ ├── 06-browser-use.ipynb │ │ ├── 07-personalized-research-assistant.ipynb │ │ ├── 08-rag-chatbot.ipynb │ │ ├── 09-companion-agent.ipynb │ │ ├── 10-reel-generator.ipynb │ │ └── 11-hacker-news-personalized-generator.ipynb │ └── basics/ │ ├── 01-Hello-Agent.ipynb │ ├── 02-Simple-Task.ipynb │ ├── 03-Adding-Tools.ipynb │ ├── 04-Parallel-Steps.ipynb │ └── 05-RAG-and-Docs.ipynb ├── deploy/ │ ├── responses-build-docker-compose.yaml │ ├── simple-docker-compose.yaml │ └── standalone-docker-compose.yaml ├── docker-bake.hcl ├── docker-compose.yml ├── documentation/ │ ├── AGENTS.md │ ├── FAQ.mdx │ ├── README.md │ ├── advanced/ │ │ ├── agentic-patterns.mdx │ │ ├── architecture-deep-dive.mdx │ │ ├── chat.mdx │ │ ├── files.mdx │ │ ├── lifecycle.mdx │ │ ├── localsetup.mdx │ │ ├── multi-agent-multi-user-sessions.mdx │ │ ├── new-syntax.mdx │ │ ├── python-expression.mdx │ │ ├── render.mdx │ │ ├── secrets-management.mdx │ │ ├── system-templates.mdx │ │ └── types-of-task-steps.mdx │ ├── concepts/ │ │ ├── agents.mdx │ │ ├── docs.mdx │ │ ├── execution.mdx │ │ ├── files.mdx │ │ ├── projects.mdx │ │ ├── secrets.mdx │ │ ├── sessions.mdx │ │ ├── tasks.mdx │ │ ├── tools.mdx │ │ └── users.mdx │ ├── docs.json │ ├── guides/ │ │ ├── adding-tool-integration.mdx │ │ ├── advanced/ │ │ │ ├── complex-workflows.mdx │ │ │ ├── integration-patterns.mdx │ │ │ └── multi-agent-systems.mdx │ │ ├── cookbooks/ │ │ │ ├── community-examples.mdx │ │ │ ├── industry-solutions.mdx │ │ │ └── quick-solutions.mdx │ │ ├── getting-started/ │ │ │ ├── chat-with-an-agent.mdx │ │ │ ├── create-and-execute-julep-task.mdx │ │ │ └── tool-integration-demo.mdx │ │ ├── modifying-agent-workflow.mdx │ │ ├── use-cases/ │ │ │ ├── customer-service.mdx │ │ │ ├── data-analysis.mdx │ │ │ ├── document-processing.mdx │ │ │ └── research-assistant.mdx │ │ └── using-secrets.mdx │ ├── integrations/ │ │ ├── communicationdata/ │ │ │ ├── email.mdx │ │ │ ├── google-sheets.mdx │ │ │ └── weather.mdx │ │ ├── contributing-integrations.mdx │ │ ├── extensibility/ │ │ │ └── mcp.mdx │ │ ├── mediafile/ │ │ │ ├── cloudinary.mdx │ │ │ ├── ffmpeg.mdx │ │ │ ├── llamaparse.mdx │ │ │ └── unstructured.mdx │ │ ├── search/ │ │ │ ├── algolia.mdx │ │ │ ├── arxiv.mdx │ │ │ ├── brave.mdx │ │ │ └── wikipedia.mdx │ │ ├── supported-integrations.mdx │ │ ├── supported-models.mdx │ │ └── webbrowser/ │ │ ├── browserbase.mdx │ │ ├── remote-browser.mdx │ │ └── spider.mdx │ ├── introduction/ │ │ ├── developer-orientation.mdx │ │ ├── install.mdx │ │ ├── julep.mdx │ │ └── quickstart.mdx │ ├── julepcli/ │ │ ├── commands.mdx │ │ └── introduction.mdx │ ├── llms.txt │ ├── responses/ │ │ ├── cli.mdx │ │ ├── concepts.mdx │ │ ├── examples.mdx │ │ ├── quickstart.mdx │ │ └── roadmap.mdx │ ├── scripts/ │ │ └── julep-chat-widget.js │ ├── sdks/ │ │ ├── common/ │ │ │ ├── authentication.mdx │ │ │ ├── error-handling.mdx │ │ │ ├── secrets.mdx │ │ │ └── testing.mdx │ │ ├── index.mdx │ │ ├── nodejs/ │ │ │ ├── advanced-usage.mdx │ │ │ ├── agents.mdx │ │ │ ├── installation.mdx │ │ │ ├── reference.mdx │ │ │ ├── secrets.mdx │ │ │ ├── sessions.mdx │ │ │ ├── tasks.mdx │ │ │ └── tools-integration.mdx │ │ └── python/ │ │ ├── advanced-usage.mdx │ │ ├── agents.mdx │ │ ├── installation.mdx │ │ ├── reference.mdx │ │ ├── secrets.mdx │ │ ├── sessions.mdx │ │ ├── tasks.mdx │ │ └── tools-integration.mdx │ ├── snippets/ │ │ └── integrations-slider.jsx │ ├── style.css │ └── tutorials/ │ ├── browser-use.mdx │ ├── hacker-news-newsletter.mdx │ ├── julep-assistant.mdx │ ├── rag-chatbot.mdx │ ├── trip-planning-input.mdx │ ├── trip-planning-running.mdx │ ├── trip-planning-tools.mdx │ ├── trip-planning-workflow.mdx │ ├── trip-planning.mdx │ └── video-processing.mdx ├── ruff.toml └── src/ ├── agents-api/ │ ├── .dockerignore │ ├── .gitignore │ ├── .python-version │ ├── .tool-versions │ ├── AGENTS.md │ ├── Dockerfile │ ├── Dockerfile.worker │ ├── README.md │ ├── agents_api/ │ │ ├── __init__.py │ │ ├── activities/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── demo.py │ │ │ ├── execute_api_call.py │ │ │ ├── execute_integration.py │ │ │ ├── execute_system.py │ │ │ ├── logger.py │ │ │ ├── pg_query_step.py │ │ │ ├── sync_items_remote.py │ │ │ ├── task_steps/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base_evaluate.py │ │ │ │ ├── get_value_step.py │ │ │ │ ├── prompt_step.py │ │ │ │ ├── raise_complete_async.py │ │ │ │ ├── tool_call_step.py │ │ │ │ └── transition_step.py │ │ │ └── tool_executor.py │ │ ├── app.py │ │ ├── autogen/ │ │ │ ├── .ignore │ │ │ ├── AGENTS.md │ │ │ ├── Agents.py │ │ │ ├── Chat.py │ │ │ ├── Common.py │ │ │ ├── Docs.py │ │ │ ├── Entries.py │ │ │ ├── Executions.py │ │ │ ├── Files.py │ │ │ ├── Jobs.py │ │ │ ├── Projects.py │ │ │ ├── Responses.py │ │ │ ├── Secrets.py │ │ │ ├── Sessions.py │ │ │ ├── Tasks.py │ │ │ ├── Tools.py │ │ │ ├── Users.py │ │ │ ├── __init__.py │ │ │ └── openapi_model.py │ │ ├── clients/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── async_s3.py │ │ │ ├── feature_flags.py │ │ │ ├── integrations.py │ │ │ ├── litellm.py │ │ │ ├── pg.py │ │ │ ├── sync_s3.py │ │ │ └── temporal.py │ │ ├── common/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── exceptions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── agents.py │ │ │ │ ├── executions.py │ │ │ │ ├── secrets.py │ │ │ │ ├── sessions.py │ │ │ │ ├── tasks.py │ │ │ │ ├── tools.py │ │ │ │ ├── users.py │ │ │ │ └── validation.py │ │ │ ├── interceptors.py │ │ │ ├── nlp.py │ │ │ ├── protocol/ │ │ │ │ ├── __init__.py │ │ │ │ ├── agents.py │ │ │ │ ├── developers.py │ │ │ │ ├── models.py │ │ │ │ ├── sessions.py │ │ │ │ ├── state_machine.py │ │ │ │ └── tasks.py │ │ │ ├── retry_policies.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── checks.py │ │ │ ├── datetime.py │ │ │ ├── db_exceptions.py │ │ │ ├── evaluator.py │ │ │ ├── expressions.py │ │ │ ├── feature_flags.py │ │ │ ├── get_doc_search.py │ │ │ ├── humanization_utils.py │ │ │ ├── json.py │ │ │ ├── llm_providers.py │ │ │ ├── memory.py │ │ │ ├── messages.py │ │ │ ├── mmr.py │ │ │ ├── model_validation.py │ │ │ ├── secrets.py │ │ │ ├── task_validation.py │ │ │ ├── template.py │ │ │ ├── tool_runner.py │ │ │ ├── types.py │ │ │ ├── usage.py │ │ │ ├── workflows.py │ │ │ └── yaml.py │ │ ├── dependencies/ │ │ │ ├── __init__.py │ │ │ ├── auth.py │ │ │ ├── content_length.py │ │ │ ├── developer_id.py │ │ │ ├── exceptions.py │ │ │ └── query_filter.py │ │ ├── env.py │ │ ├── exceptions.py │ │ ├── metrics/ │ │ │ ├── __init__.py │ │ │ └── counters.py │ │ ├── model_registry.py │ │ ├── queries/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── agents/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_agent.py │ │ │ │ ├── create_or_update_agent.py │ │ │ │ ├── delete_agent.py │ │ │ │ ├── get_agent.py │ │ │ │ ├── list_agents.py │ │ │ │ ├── patch_agent.py │ │ │ │ └── update_agent.py │ │ │ ├── chat/ │ │ │ │ ├── __init__.py │ │ │ │ ├── gather_messages.py │ │ │ │ └── prepare_chat_context.py │ │ │ ├── developers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_developer.py │ │ │ │ ├── get_developer.py │ │ │ │ ├── patch_developer.py │ │ │ │ └── update_developer.py │ │ │ ├── docs/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bulk_delete_docs.py │ │ │ │ ├── create_doc.py │ │ │ │ ├── delete_doc.py │ │ │ │ ├── get_doc.py │ │ │ │ ├── list_docs.py │ │ │ │ ├── search_docs_by_embedding.py │ │ │ │ ├── search_docs_by_text.py │ │ │ │ ├── search_docs_hybrid.py │ │ │ │ └── utils.py │ │ │ ├── entries/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_entries.py │ │ │ │ ├── delete_entries.py │ │ │ │ ├── get_history.py │ │ │ │ └── list_entries.py │ │ │ ├── executions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── count_executions.py │ │ │ │ ├── create_execution.py │ │ │ │ ├── create_execution_transition.py │ │ │ │ ├── create_temporal_lookup.py │ │ │ │ ├── get_execution.py │ │ │ │ ├── get_execution_status.py │ │ │ │ ├── get_execution_transition.py │ │ │ │ ├── get_paused_execution_token.py │ │ │ │ ├── get_temporal_workflow_data.py │ │ │ │ ├── list_execution_inputs_data.py │ │ │ │ ├── list_execution_state_data.py │ │ │ │ ├── list_execution_transitions.py │ │ │ │ ├── list_executions.py │ │ │ │ ├── lookup_temporal_data.py │ │ │ │ └── prepare_execution_input.py │ │ │ ├── files/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_file.py │ │ │ │ ├── delete_file.py │ │ │ │ ├── get_file.py │ │ │ │ └── list_files.py │ │ │ ├── projects/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_project.py │ │ │ │ ├── list_projects.py │ │ │ │ └── project_exists.py │ │ │ ├── secrets/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create.py │ │ │ │ ├── delete.py │ │ │ │ ├── get_by_name.py │ │ │ │ ├── list.py │ │ │ │ └── update.py │ │ │ ├── sessions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── count_sessions.py │ │ │ │ ├── create_or_update_session.py │ │ │ │ ├── create_session.py │ │ │ │ ├── delete_session.py │ │ │ │ ├── get_session.py │ │ │ │ ├── list_sessions.py │ │ │ │ ├── patch_session.py │ │ │ │ └── update_session.py │ │ │ ├── tasks/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_or_update_task.py │ │ │ │ ├── create_task.py │ │ │ │ ├── delete_task.py │ │ │ │ ├── get_task.py │ │ │ │ ├── list_tasks.py │ │ │ │ ├── patch_task.py │ │ │ │ └── update_task.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_tools.py │ │ │ │ ├── delete_tool.py │ │ │ │ ├── get_tool.py │ │ │ │ ├── get_tool_args_from_metadata.py │ │ │ │ ├── list_tools.py │ │ │ │ ├── patch_tool.py │ │ │ │ └── update_tool.py │ │ │ ├── usage/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_usage_record.py │ │ │ │ └── get_user_cost.py │ │ │ ├── users/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_or_update_user.py │ │ │ │ ├── create_user.py │ │ │ │ ├── delete_user.py │ │ │ │ ├── get_user.py │ │ │ │ ├── list_users.py │ │ │ │ ├── patch_user.py │ │ │ │ └── update_user.py │ │ │ └── utils.py │ │ ├── rec_sum/ │ │ │ ├── __init__.py │ │ │ ├── data.py │ │ │ ├── entities.py │ │ │ ├── entities_example_chat.json │ │ │ ├── generate.py │ │ │ ├── summarize.py │ │ │ ├── summarize_example_chat.json │ │ │ ├── summarize_example_result.json │ │ │ ├── trim.py │ │ │ ├── trim_example_chat.json │ │ │ ├── trim_example_result.json │ │ │ └── utils.py │ │ ├── routers/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── agents/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_agent.py │ │ │ │ ├── create_agent_tool.py │ │ │ │ ├── create_or_update_agent.py │ │ │ │ ├── delete_agent.py │ │ │ │ ├── delete_agent_tool.py │ │ │ │ ├── get_agent_details.py │ │ │ │ ├── list_agent_tools.py │ │ │ │ ├── list_agents.py │ │ │ │ ├── list_models.py │ │ │ │ ├── patch_agent.py │ │ │ │ ├── patch_agent_tool.py │ │ │ │ ├── router.py │ │ │ │ ├── update_agent.py │ │ │ │ └── update_agent_tool.py │ │ │ ├── docs/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bulk_delete_docs.py │ │ │ │ ├── create_doc.py │ │ │ │ ├── delete_doc.py │ │ │ │ ├── embed.py │ │ │ │ ├── get_doc.py │ │ │ │ ├── list_docs.py │ │ │ │ ├── router.py │ │ │ │ └── search_docs.py │ │ │ ├── files/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_file.py │ │ │ │ ├── delete_file.py │ │ │ │ ├── get_file.py │ │ │ │ ├── list_files.py │ │ │ │ └── router.py │ │ │ ├── healthz/ │ │ │ │ ├── __init__.py │ │ │ │ ├── check_health.py │ │ │ │ └── router.py │ │ │ ├── internal/ │ │ │ │ ├── __init__.py │ │ │ │ └── router.py │ │ │ ├── jobs/ │ │ │ │ ├── __init__.py │ │ │ │ └── routers.py │ │ │ ├── projects/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_project.py │ │ │ │ ├── list_projects.py │ │ │ │ └── router.py │ │ │ ├── responses/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_response.py │ │ │ │ ├── get_response.py │ │ │ │ └── router.py │ │ │ ├── secrets/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_secret.py │ │ │ │ ├── delete_secret.py │ │ │ │ ├── list_secrets.py │ │ │ │ ├── router.py │ │ │ │ └── update_secret.py │ │ │ ├── sessions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── auto_tools/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── chat.py │ │ │ │ │ └── render.py │ │ │ │ ├── chat.py │ │ │ │ ├── create_or_update_session.py │ │ │ │ ├── create_session.py │ │ │ │ ├── delete_session.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── get_session.py │ │ │ │ ├── get_session_history.py │ │ │ │ ├── legacy/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── chat.py │ │ │ │ │ └── render.py │ │ │ │ ├── list_sessions.py │ │ │ │ ├── metrics.py │ │ │ │ ├── patch_session.py │ │ │ │ ├── render.py │ │ │ │ ├── router.py │ │ │ │ └── update_session.py │ │ │ ├── tasks/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_or_update_task.py │ │ │ │ ├── create_task.py │ │ │ │ ├── create_task_execution.py │ │ │ │ ├── get_execution_details.py │ │ │ │ ├── get_task_details.py │ │ │ │ ├── list_execution_transitions.py │ │ │ │ ├── list_task_executions.py │ │ │ │ ├── list_tasks.py │ │ │ │ ├── router.py │ │ │ │ ├── stream_execution_status.py │ │ │ │ ├── stream_transitions_events.py │ │ │ │ └── update_execution.py │ │ │ ├── users/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_or_update_user.py │ │ │ │ ├── create_user.py │ │ │ │ ├── delete_user.py │ │ │ │ ├── get_user_details.py │ │ │ │ ├── list_users.py │ │ │ │ ├── patch_user.py │ │ │ │ ├── router.py │ │ │ │ └── update_user.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── model_converters.py │ │ │ └── model_validation.py │ │ ├── web.py │ │ ├── worker/ │ │ │ ├── AGENTS.md │ │ │ ├── __init__.py │ │ │ ├── __main__.py │ │ │ ├── codec.py │ │ │ └── worker.py │ │ └── workflows/ │ │ ├── AGENTS.md │ │ ├── __init__.py │ │ ├── demo.py │ │ └── task_execution/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ └── transition.py │ ├── docker-compose-api.yml │ ├── docker-compose.yml │ ├── gunicorn_conf.py │ ├── poe_tasks.toml │ ├── pyproject.toml │ ├── pytype.toml │ ├── tests/ │ │ ├── __init__.py │ │ ├── fixtures.py │ │ ├── sample_tasks/ │ │ │ ├── __init__.py │ │ │ ├── find_selector.yaml │ │ │ ├── integration_example.yaml │ │ │ ├── reclaim-example.yaml │ │ │ ├── screenshot.base64 │ │ │ ├── simple_multi_step.yaml │ │ │ ├── simple_parameter_extractor.yaml │ │ │ ├── simple_prompt.yaml │ │ │ └── test_find_selector.py │ │ ├── test_activities.py │ │ ├── test_activities_utils.py │ │ ├── test_agent_metadata_filtering.py │ │ ├── test_agent_queries.py │ │ ├── test_agent_routes.py │ │ ├── test_base_evaluate.py │ │ ├── test_chat_auto_tools.py │ │ ├── test_chat_metadata.py │ │ ├── test_chat_routes.py │ │ ├── test_chat_streaming.py │ │ ├── test_developer_queries.py │ │ ├── test_docs_metadata_filtering.py │ │ ├── test_docs_queries.py │ │ ├── test_docs_routes.py │ │ ├── test_entry_queries.py │ │ ├── test_execution_queries.py │ │ ├── test_execution_workflow.py │ │ ├── test_expression_validation.py │ │ ├── test_file_routes.py │ │ ├── test_files_queries.py │ │ ├── test_get_doc_search.py │ │ ├── test_litellm_utils.py │ │ ├── test_memory_utils.py │ │ ├── test_messages_truncation.py │ │ ├── test_metadata_filter_utils.py │ │ ├── test_middleware.py │ │ ├── test_mmr.py │ │ ├── test_model_validation.py │ │ ├── test_nlp_utilities.py │ │ ├── test_pg_query_step.py │ │ ├── test_prepare_for_step.py │ │ ├── test_prompt_step_auto_tools.py │ │ ├── test_query_utils.py │ │ ├── test_secrets_queries.py │ │ ├── test_secrets_routes.py │ │ ├── test_secrets_usage.py │ │ ├── test_session_queries.py │ │ ├── test_session_routes.py │ │ ├── test_task_execution_workflow.py │ │ ├── test_task_queries.py │ │ ├── test_task_routes.py │ │ ├── test_task_validation.py │ │ ├── test_tool_call_step.py │ │ ├── test_tool_queries.py │ │ ├── test_tool_runner.py │ │ ├── test_transitions_queries.py │ │ ├── test_usage_cost.py │ │ ├── test_usage_tracking.py │ │ ├── test_user_queries.py │ │ ├── test_user_routes.py │ │ ├── test_validation_errors.py │ │ ├── test_workflow_helpers.py │ │ ├── test_workflow_routes.py │ │ └── utils.py │ └── uuid_extensions.pyi ├── analytics/ │ ├── AGENTS.md │ ├── README.md │ └── docker-compose.yml ├── blob-store/ │ ├── .gitignore │ ├── AGENTS.md │ ├── Dockerfile │ ├── docker-compose-ha.yml │ ├── docker-compose.yml │ ├── entrypoint.sh │ └── s3.json.template ├── cli/ │ ├── .gitignore │ ├── AGENTS.md │ ├── README.md │ ├── cli-reference.md │ ├── poe_tasks.toml │ ├── pyproject.toml │ ├── spec.md │ ├── src/ │ │ └── julep_cli/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── agents.py │ │ ├── app.py │ │ ├── auth.py │ │ ├── chat.py │ │ ├── executions.py │ │ ├── importt.py │ │ ├── init.py │ │ ├── logs.py │ │ ├── ls.py │ │ ├── models.py │ │ ├── run.py │ │ ├── sync.py │ │ ├── tasks.py │ │ ├── tools.py │ │ ├── utils.py │ │ └── wrapper.py │ └── tests/ │ ├── __init__.py │ └── test_auth.py ├── feature-flags/ │ ├── docker-compose.yml │ └── env.example ├── gateway/ │ ├── AGENTS.md │ ├── Dockerfile │ ├── docker-compose.yml │ ├── entrypoint.sh │ ├── letsencrypt/ │ │ ├── .gitignore │ │ └── .gitkeep │ └── traefik.yml.template ├── hasura/ │ ├── docker-compose.yml │ └── metadata/ │ ├── hasura_metadata_2025_04_07_16_21_57_118.json │ └── hasura_metadata_2025_04_24_14_57_23_154.json ├── integrations-service/ │ ├── .dockerignore │ ├── .python-version │ ├── AGENTS.md │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yml │ ├── gunicorn_conf.py │ ├── integrations/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── autogen/ │ │ │ ├── Agents.py │ │ │ ├── Chat.py │ │ │ ├── Common.py │ │ │ ├── Docs.py │ │ │ ├── Entries.py │ │ │ ├── Executions.py │ │ │ ├── Files.py │ │ │ ├── Jobs.py │ │ │ ├── Projects.py │ │ │ ├── Responses.py │ │ │ ├── Secrets.py │ │ │ ├── Sessions.py │ │ │ ├── Tasks.py │ │ │ ├── Tools.py │ │ │ ├── Users.py │ │ │ └── __init__.py │ │ ├── env.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── algolia.py │ │ │ ├── arxiv.py │ │ │ ├── base_models.py │ │ │ ├── brave.py │ │ │ ├── browserbase.py │ │ │ ├── cloudinary.py │ │ │ ├── email.py │ │ │ ├── execution.py │ │ │ ├── ffmpeg.py │ │ │ ├── google_sheets.py │ │ │ ├── llama_parse.py │ │ │ ├── mailgun.py │ │ │ ├── mcp.py │ │ │ ├── remote_browser.py │ │ │ ├── spider.py │ │ │ ├── unstructured.py │ │ │ ├── weather.py │ │ │ └── wikipedia.py │ │ ├── providers.py │ │ ├── routers/ │ │ │ ├── __init__.py │ │ │ ├── execution/ │ │ │ │ ├── __init__.py │ │ │ │ ├── execute.py │ │ │ │ └── router.py │ │ │ └── integrations/ │ │ │ ├── __init__.py │ │ │ ├── get_integration.py │ │ │ ├── get_integration_tool.py │ │ │ ├── get_integrations.py │ │ │ └── router.py │ │ ├── utils/ │ │ │ ├── __init__.py │ │ │ ├── execute_integration.py │ │ │ └── integrations/ │ │ │ ├── __init__.py │ │ │ ├── algolia.py │ │ │ ├── arxiv.py │ │ │ ├── brave.py │ │ │ ├── browserbase.py │ │ │ ├── cloudinary.py │ │ │ ├── email.py │ │ │ ├── ffmpeg.py │ │ │ ├── google_sheets.py │ │ │ ├── llama_parse.py │ │ │ ├── mailgun.py │ │ │ ├── mcp.py │ │ │ ├── remote_browser.py │ │ │ ├── spider.py │ │ │ ├── unstructured.py │ │ │ ├── weather.py │ │ │ └── wikipedia.py │ │ └── web.py │ ├── poe_tasks.toml │ ├── pyproject.toml │ ├── pytest.ini │ ├── pytype.toml │ └── tests/ │ ├── __init__.py │ ├── conftest.py │ ├── mocks/ │ │ ├── __init__.py │ │ ├── brave.py │ │ ├── email.py │ │ ├── llama_parse.py │ │ ├── spider.py │ │ ├── weather.py │ │ └── wikipedia.py │ ├── test_mcp.py │ ├── test_mcp_sse_server.py │ ├── test_provider_execution.py │ ├── test_providers.py │ └── working_mcp_sse_server.py ├── llm-proxy/ │ ├── .dockerignore │ ├── .gitignore │ ├── AGENTS.md │ ├── docker-compose.yml │ └── litellm-config.yaml ├── memory-store/ │ ├── .gitignore │ ├── AGENTS.md │ ├── Dockerfile.migrations │ ├── README.md │ ├── docker-compose.yml │ └── migrations/ │ ├── 000001_initial.down.sql │ ├── 000001_initial.up.sql │ ├── 000002_developers.down.sql │ ├── 000002_developers.up.sql │ ├── 000003_users.down.sql │ ├── 000003_users.up.sql │ ├── 000004_agents.down.sql │ ├── 000004_agents.up.sql │ ├── 000005_files.down.sql │ ├── 000005_files.up.sql │ ├── 000006_docs.down.sql │ ├── 000006_docs.up.sql │ ├── 000007_ann.down.sql │ ├── 000007_ann.up.sql │ ├── 000008_tools.down.sql │ ├── 000008_tools.up.sql │ ├── 000009_sessions.down.sql │ ├── 000009_sessions.up.sql │ ├── 000010_tasks.down.sql │ ├── 000010_tasks.up.sql │ ├── 000011_executions.down.sql │ ├── 000011_executions.up.sql │ ├── 000012_transitions.down.sql │ ├── 000012_transitions.up.sql │ ├── 000013_executions_continuous_view.down.sql │ ├── 000013_executions_continuous_view.up.sql │ ├── 000014_temporal_lookup.down.sql │ ├── 000014_temporal_lookup.up.sql │ ├── 000015_entries.down.sql │ ├── 000015_entries.up.sql │ ├── 000016_entry_relations.down.sql │ ├── 000016_entry_relations.up.sql │ ├── 000017_compression.down.sql │ ├── 000017_compression.up.sql │ ├── 000018_doc_search.down.sql │ ├── 000018_doc_search.up.sql │ ├── 000019_system_developer.down.sql │ ├── 000019_system_developer.up.sql │ ├── 000020_executions_task_cascade.down.sql │ ├── 000020_executions_task_cascade.up.sql │ ├── 000021_fix_toolname_contraint.down.sql │ ├── 000021_fix_toolname_contraint.up.sql │ ├── 000022_vector_search.down.sql │ ├── 000022_vector_search.up.sql │ ├── 000023_update_strings_length_constraints.down.sql │ ├── 000023_update_strings_length_constraints.up.sql │ ├── 000024_hybrid_search.down.sql │ ├── 000024_hybrid_search.up.sql │ ├── 000025_default_system_template.down.sql │ ├── 000025_default_system_template.up.sql │ ├── 000026_transition_cursor.down.sql │ ├── 000026_transition_cursor.up.sql │ ├── 000027_add_postgraphile.down.sql │ ├── 000027_add_postgraphile.up.sql │ ├── 000028_new_hybrid_search_implementation.down.sql │ ├── 000028_new_hybrid_search_implementation.up.sql │ ├── 000029_duplicate_doc_prevention.down.sql │ ├── 000029_duplicate_doc_prevention.up.sql │ ├── 000030_add_unaccent_search_config.down.sql │ ├── 000030_add_unaccent_search_config.up.sql │ ├── 000031_add_trigram_search.down.sql │ ├── 000031_add_trigram_search.up.sql │ ├── 000032_enhance_trigram_search.down.sql │ ├── 000032_enhance_trigram_search.up.sql │ ├── 000033_fix_latest_transitions.down.sql │ ├── 000033_fix_latest_transitions.up.sql │ ├── 000034_switch_to_hypercore.down.sql │ ├── 000034_switch_to_hypercore.up.sql │ ├── 000035_enhanced_indices.down.sql │ ├── 000035_enhanced_indices.up.sql │ ├── 000036_usage.down.sql │ ├── 000036_usage.up.sql │ ├── 000037_speed_up_search.down.sql │ ├── 000037_speed_up_search.up.sql │ ├── 000038_usage_cost_monthly.down.sql │ ├── 000038_usage_cost_monthly.up.sql │ ├── 000039_projects.down.sql │ ├── 000039_projects.up.sql │ ├── 000040_add_secrets.down.sql │ ├── 000040_add_secrets.up.sql │ ├── 000041_non_null_forward_tool_calls.down.sql │ ├── 000041_non_null_forward_tool_calls.up.sql │ ├── 000042_add_api_keys.down.sql │ ├── 000042_add_api_keys.up.sql │ ├── 000043_optional_trigram_search.down.sql │ ├── 000043_optional_trigram_search.up.sql │ ├── 000044_search_optimize.down.sql │ └── 000044_search_optimize.up.sql ├── monitoring/ │ ├── AGENTS.md │ ├── README.md │ ├── docker-compose.yml │ ├── grafana/ │ │ ├── dashboard.yaml │ │ └── provisioning/ │ │ ├── dashboards/ │ │ │ ├── advanced-visibility-specific.json │ │ │ ├── clustermonitoring-kubernetes.json │ │ │ ├── frontend-service-specific.json │ │ │ ├── history-service-specific.json │ │ │ ├── main.yaml │ │ │ ├── matching-service-specific.json │ │ │ ├── queries-metrics.json │ │ │ ├── requests-metrics.json │ │ │ ├── sdk-general.json │ │ │ ├── sdk-java.json │ │ │ ├── server-general.json │ │ │ ├── temporal_cloud.json │ │ │ └── worker-service-specific.json │ │ └── datasources/ │ │ └── datasource.yml │ └── prometheus/ │ └── config/ │ └── prometheus.yml ├── scheduler/ │ ├── AGENTS.md │ ├── cert/ │ │ └── .gitignore │ ├── docker-compose.yml │ └── dynamicconfig/ │ └── temporal-postgres.yaml ├── schemas/ │ ├── create_agent_request.json │ ├── create_task_request.json │ └── walk.jq ├── scripts/ │ ├── __init__.py │ ├── generate_changelog.py │ ├── generate_jwt.py │ ├── generate_openapi_code.sh │ ├── readme_translator.py │ ├── sync_model_docs.py │ └── templates/ │ ├── changelog.yaml │ └── header.html └── typespec/ ├── .gitignore ├── AGENTS.md ├── agents/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── chat/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── common/ │ ├── constants.tsp │ ├── interfaces.tsp │ ├── main.tsp │ ├── mixins.tsp │ ├── scalars.tsp │ └── types.tsp ├── docs/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── entries/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── executions/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── files/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── jobs/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── main.tsp ├── package.json ├── projects/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── responses/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── secrets/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── sessions/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp ├── tasks/ │ ├── endpoints.tsp │ ├── main.tsp │ ├── models.tsp │ ├── step_kind.tsp │ └── steps.tsp ├── tools/ │ ├── algolia.tsp │ ├── anthropic.tsp │ ├── arxiv.tsp │ ├── brave.tsp │ ├── browserbase/ │ │ ├── contexts.tsp │ │ ├── extensions.tsp │ │ ├── main.tsp │ │ └── sessions.tsp │ ├── cloudinary.tsp │ ├── email.tsp │ ├── endpoints.tsp │ ├── ffmpeg.tsp │ ├── google_sheets.tsp │ ├── llama_parse.tsp │ ├── mailgun.tsp │ ├── main.tsp │ ├── mcp.tsp │ ├── models.tsp │ ├── remote_browser.tsp │ ├── spider.tsp │ ├── unstructured.tsp │ ├── weather.tsp │ └── wikipedia.tsp ├── tsp-output/ │ └── @typespec/ │ └── openapi3/ │ └── openapi-1.0.0.yaml ├── tspconfig.yaml ├── users/ │ ├── endpoints.tsp │ ├── main.tsp │ └── models.tsp └── versions.tsp ================================================ FILE CONTENTS ================================================ ================================================ FILE: .agentignore ================================================ # Git .git/ .codex/ # Build and distribution directories **/dist/ **/build/ **/.ruff_cache/ **/node_modules/ **/__pycache__/ **/.pytest_cache/ **/.mypy_cache/ **/.tox/ **/.coverage/ **/.venv/ **/venv/ **/.next/ **/.nuxt/ **/out/ **/coverage/ # Environment and configuration files .env .env.* **/.env.local **/.env.development.local **/.env.test.local **/.env.production.local # Large data files **/*.parquet **/*.arrow **/*.pickle **/*.pkl **/*.db **/*.sqlite **/*.sqlite3 # Generated documentation **/docs/_build/ **/site/ **/public/ documentation/openapi.yaml # Package-manager files **/yarn-error.log **/npm-debug.log **/package-lock.json **/yarn.lock **/pnpm-lock.yaml **/pnpm-workspace.yaml **/poetry.lock **/Pipfile.lock **/requirements-frozen.txt **/uv.lock # Logs **/logs/ **/*.log # Cache directories **/.cache/ **/.npm/ **/.pnpm/ **/.yarn/ **/.pnp/ # IDE and editor files **/.vscode/ **/.idea/ **/.DS_Store **/.ipynb_checkpoints/ **/*.swp # Compiled binaries **/*.so **/*.dll **/*.dylib **/*.exe **/*.whl **/*.egg-info/ **/*.egg # Large media files **/*.mp4 **/*.mp3 **/*.wav **/*.avi **/*.mov **/*.png **/*.jpg **/*.jpeg **/*.gif **/*.svg **/*.ico # Container and deployment files **/*.tfvars **/*.tfstate **/*.tfstate.backup # Temporary files **/tmp/ **/temp/ **/*.tmp **/*.temp # Large generated files gaga.json openapi.yaml openapi*.yaml openapi*.yml openapi*.json # Julep-specific # TypeSpec generated outputs **/tsp-output/ typespec/node_modules/ # Local database data data/ # Testing fixtures and large example files **/tests/sample_tasks/*.base64 **/tests/sample_tasks/*.png # Temporal scheduler certificates scheduler/cert/ # Docker and container configuration **/.docker/ **/docker-compose.override.yml # Generated files in gateway gateway/letsencrypt/ # Monitoring data monitoring/grafana/dashboards/ monitoring/prometheus/data/ monitoring/grafana/storage/ ================================================ FILE: .codex/setup.sh ================================================ #!/usr/bin/env bash # # setup-all.sh ─ one-shot bootstrap for the whole julep monorepo # # › run from repo root: ./setup-all.sh # # It will: # • ensure Poetry + TypeSpec compiler are available # • iterate over each top-level directory and install deps: # – pyproject.toml ➜ poetry install # – package.json ➜ npm install (uses pnpm if present) # – requirements.txt➜ pip install -r # • install root pre-commit hooks (if .pre-commit-config.yaml exists) # • stop on first error (set -e) set -euo pipefail ### 1. Globals -------------------------------------------------------------- IGNORE_DIRS_DEFAULT="sdks deploy scripts monitoring .git .venv node_modules" IGNORE_DIRS="${IGNORE_DIRS:-$IGNORE_DIRS_DEFAULT}" ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # cd "$ROOT_DIR" RED="\033[0;31m"; GREEN="\033[0;32m"; CYAN="\033[0;36m"; NC="\033[0m" announce() { echo -e "${CYAN}==>$1${NC}"; } ### 3. Ensure TypeSpec compiler -------------------------------------------- if ! command -v tsp &> /dev/null; then announce "Installing TypeSpec compiler globally (npm)…" npm install -g @typespec/compiler > /dev/null else announce "TypeSpec compiler present → $(tsp --version)" fi announce "Installing hasura-cli globally (npm)…" curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash ### 4. Walk directories ----------------------------------------------------- curl -LsSf https://astral.sh/uv/install.sh | sh if [[ -f "pyproject.toml" ]]; then announce "Installing root deps" uv sync echo -e "${GREEN}✓ root deps installed${NC}" fi OIFS=$IFS; IFS=$'\n' for dir in $(git ls-tree --name-only -d HEAD | sort); do d="${dir#./}" if [[ " $IGNORE_DIRS " =~ [[:space:]]"$d"[[:space:]] ]]; then echo -e "· skipping $d (ignored)" continue fi announce "Processing $d/" # uv project? if [[ -f "$d/pyproject.toml" ]]; then pushd "$d" > /dev/null announce "[uv] installing in $d …" uv sync uv pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl popd > /dev/null echo -e "${GREEN}✓ uv install done for $d${NC}" continue fi # Node project? if [[ -f "$d/package.json" ]]; then pushd "$d" > /dev/null announce "[npm] installing in $d …" if command -v pnpm &> /dev/null; then pnpm install --silent else npm install --silent fi popd > /dev/null echo -e "${GREEN}✓ npm install done for $d${NC}" continue fi # Plain requirements.txt? if [[ -f "$d/requirements.txt" ]]; then pushd "$d" > /dev/null announce "[pip] installing requirements in $d …" pip install -r requirements.txt pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl popd > /dev/null echo -e "${GREEN}✓ pip install done for $d${NC}" continue fi echo -e "· no recognised manifest in $d – nothing to install" done IFS=$OIFS ### 5. Pre-commit ----------------------------------------------------------- if [[ -f ".pre-commit-config.yaml" ]]; then announce "Installing git pre-commit hooks…" pip install --quiet pre-commit pre-commit install echo -e "${GREEN}✓ pre-commit hooks installed${NC}" fi echo -e "${GREEN}\nAll done – monorepo dependencies ready!${NC}" ================================================ FILE: .github/CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [INSERT EMAIL ADDRESS]. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ================================================ FILE: .github/CONTRIBUTING.md ================================================
julep

Get API Key Documentation

Docker Version NPM Version NPM Downloads PyPI Version PyPI Downloads

Discord · 𝕏 · LinkedIn

# Contributing to Julep 👋 Welcome! We're excited that you're interested in contributing to Julep. This guide will help you get started. --- ## 🚀 Quick Start 1. Fork the repository 2. Create a new branch for your changes 3. Make your changes and test them 4. Submit a pull request --- ## 📝 Ways to Contribute ### 🐛 Reporting Issues Found a bug? Have a feature request? [Submit an issue](https://github.com/julep-ai/julep/issues) with: - [ ] Steps to reproduce - [ ] Expected behavior - [ ] Actual behavior - [ ] Screenshots (if applicable) ### 💻 Contributing Code 1. Fork the repository 2. Create a feature branch: `git checkout -b feature/your-feature-name` 3. Make your changes 4. Write/update tests 5. Push to your fork 6. Open a pull request > 💡 **Tip:** Make sure your code follows our style guide and passes all tests. --- ## 🏗 Project Architecture ### Core Services | Service | Description | |---------|-------------| | `agents-api` | Core API service | | `memory-store` | PostgreSQL database with TimescaleDB for persistent storage | | `blob-store` | Object storage for files and binary data | | `integrations-service` | Adapters for external services and tools | | `scheduler` | Temporal workflow engine for task scheduling and orchestration | | `gateway` | API gateway for routing and request handling | | `llm-proxy` | LiteLLM proxy for language model interactions | | `monitoring` | Prometheus and Grafana monitoring infrastructure | | `typespec` | API specifications in TypeSpec format | | `sdks` | Node.js and Python client SDKs | | `cli` | Command-line interface for Julep | ### Supporting Modules - `deploy`: Deployment configs - `documentation`: Project documentation assets - `scripts`: Utility scripts and tools - `cookbooks`: Usage examples and recipes ### Tech Stack - **FastAPI**: Web framework for building APIs - **TypeSpec**: API specification language - **Timescale**: Database system - **SeaweedFS**: Blob storage system - **Grafana**: Monitoring and observability platform - **Prometheus**: Monitoring and observability platform - **LiteLLM**: LLM framework - **Temporal**: Workflow engine - **Docker**: Containerization > To understand the relationships between the components, please refer to the [System Architecture](https://docs.julep.ai/docs/advanced/architecture-deep-dive) section. ## Understanding the Codebase To get a comprehensive understanding of Julep, we recommend exploring the codebase in the following order: 1. **Project Overview** - Read `README.md` in the root directory - Explore `docs/` for detailed documentation 2. **System Architecture** - Examine `docker-compose.yml` in the root directory - Review `deploy/` directory for different deployment configurations 3. **API Specifications** - Learn about TypeSpec: https://typespec.io/docs/ - Explore `typespec/` directory: - Start with `common/` folder - Review `main.tsp` - Examine each module sequentially 4. **Core API Implementation** - Learn about FastAPI: https://fastapi.tiangolo.com/ - Explore `agents-api/` directory: - Review `README.md` for an overview - Examine `routers/` for API endpoints - Look into `models/` for data models 5. **Database and Storage** - Learn about Cozo: https://docs.cozodb.org/en/latest/tutorial.html - Review `agents-api/README.md` for database schema - Explore `agents-api/models/` for database queries 6. **Workflow Management** - Learn about Temporal: https://docs.temporal.io/develop/python - Explore `agents-api/activities/` for individual workflow steps - Review `agents-api/workflows/task_execution/` for main workflow logic 7. **Testing** - Examine `agents-api/tests/` for test cases 8. **Additional Services** - Explore other service directories (`integrations-service/`, `embedding-service/`, etc.) to understand their specific roles and implementations ## Contributing Guidelines 1. **Set Up Development Environment** - Clone the repository - Install Docker and Docker Compose - Set up necessary API keys and environment variables > You can check our [Local Setup](https://docs.julep.ai/docs/advanced/localsetup) section in the docs for more information. 2. **Choose an Area to Contribute** - Check the issue tracker for open issues - Look for "good first issue" labels for newcomers 3. **Make Changes** - Create a new branch for your changes - Write clean, well-documented code - Ensure your changes adhere to the project's coding standards 4. **Test Your Changes** - Run existing tests - Add new tests for new functionality - Ensure all tests pass before submitting your changes 5. **Submit a Pull Request** - Provide a clear description of your changes - Reference any related issues - Be prepared to respond to feedback and make adjustments 6. **Code Review** - Address any comments or suggestions from reviewers - Make necessary changes and push updates to your branch 7. **Merge** - Once approved, your changes will be merged into the main branch ### Adding a New Integration The integration service is a crucial part of Julep, and we welcome contributions from the community to enhance its functionality and capabilities. To contribute to the integration service, you can follow these steps: 1. **Add a new integration provider to our TypeSpec:** You can do so by: 1. Adding the provider name to the `integrationProvider` alias in `typespec/tools/models.tsp` 2. Adding a new file in `typespec/tools/` with the provider name. Take a look at the other integration files in the `typespec/tools/` directory for examples. > If the integration needs an API key or other form of authentication, you would have to add a `Setup` model to the integration definition file, where you would define the authentication parameters (`spider.tsp` is an example of this). Otherwise, you can omit the `Setup` model (`wikipedia.tsp` is an example of this). 2. **Generate the new OpenAPI schema and Pydantic models:** You need to `cd` into the root directory of the project and run `./scripts/generate_openapi_code.sh` to generate the new OpenAPI schema along with Pydantic models for the new changes. > The new OpenAPI schema will be generated in `./openapi.yaml` and the Pydantic models will be generated in `./integrations-service/integrations/autogen`. 3. **Add the new integration logic in the integration service:** You need to add the new integration logic in the integration service by adding a new file in `integration-service/integrations/utils/integrations` with the provider name. Take a look at the other integration files in the same directory for examples. 4. **Add the new integration provider to the providers registry:** You need to add the new integration provider to the providers registry by adding a new entry to the `available_providers` dictionary in `integrations-service/integrations/providers.py`. ### Documentation Improvements Improvements to documentation are always appreciated! If you see areas that could be clarified or expanded, feel free to make the changes and submit a pull request. ### Sharing Feedback and Ideas We'd love to hear your feedback and ideas for the project! Feel free to submit an issue or contact the maintainers directly to share your thoughts. Your input is very valuable in shaping the future direction of the project. Remember, contributions aren't limited to code. Documentation improvements, bug reports, and feature suggestions are also valuable contributions to the project. ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: "🐛 Bug Report" description: "Submit a bug report to help us improve" title: "[Bug]: " labels: ["bug"] body: - type: textarea id: description attributes: label: "📜 Description" placeholder: "A clear and concise description of what the bug is." - type: textarea id: steps-to-reproduce attributes: label: "👟 Reproduction steps" placeholder: "1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error" - type: checkboxes id: no-duplicate-issues attributes: label: "👀 Have you searched previous issues to see if this has been raised before?" options: - label: "I checked and didn't find similar issue" required: true ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Have Question? url: https://discord.com/invite/JTSBGRZrzj about: Join Official Discord server ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yml ================================================ name: 🚀 Feature description: "Submit a proposal for a new feature" title: "[Feature]: " labels: ["enhancement"] body: - type: textarea id: feature-description validations: required: true attributes: label: "🔖 Feature description" placeholder: "A clear and concise description of what the feature is." - type: textarea id: pitch attributes: label: "🎤 Why is this feature needed ?" placeholder: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable." - type: textarea id: solution attributes: label: "✌️ How do you aim to achieve this?" placeholder: "A clear and concise description of what you want to happen." - type: checkboxes id: no-duplicate-issues attributes: label: "👀 Have you searched issues and PRs to see if this feature request has been raised before?" options: - label: "I checked and didn't find similar issue" required: true ================================================ FILE: .github/ISSUE_TEMPLATE/refactor.yml ================================================ name: "🛠️ Refactor" description: "Submit a bug report to help us improve" title: "[Refactor]: " labels: ["refactor"] body: - type: textarea id: description attributes: label: "📜 Description" placeholder: "A clear and concise description of what should be refactored." - type: textarea id: relevant-files attributes: label: "👟 Relevant files" placeholder: "1. `agents-api/Dockerfile` needs to change 2. `integrations/**/*.py` files need to be reformatted" ================================================ FILE: .github/LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: .github/README-CN.md ================================================
[Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
julep

NPM Version   PyPI - Version   Docker Image Version   GitHub License

· ·

**立即试用Julep:** 访问 **[Julep网站](https://julep.ai)** · 在 **[Julep控制台](https://dashboard.julep.ai)** 开始使用 (免费API密钥) · 阅读 **[文档](https://docs.julep.ai/introduction/julep)**

📖 目录

- [为什么选择Julep?](#为什么选择julep) - [开始使用](#开始使用) - [文档和示例](#文档和示例) - [社区和贡献](#社区和贡献) - [许可证](#许可证) ## 为什么选择Julep? Julep是一个构建**基于智能代理的AI工作流**的开源平台,远超简单的提示链。它让你能够使用大型语言模型(LLM)和工具编排复杂的多步骤流程,**无需管理任何基础设施**。使用Julep,你可以创建**记住过往交互**并处理具有分支逻辑、循环、并行执行和外部API集成等复杂任务的AI代理。简而言之,Julep就像*"AI代理的Firebase"*,为规模化的智能工作流提供强大的后端。 **主要功能和优势:** * **持久记忆:** 构建在对话中维持上下文和长期记忆的AI代理,让它们能够随时间学习和改进。 * **模块化工作流:** 将复杂任务定义为模块化步骤(YAML或代码),具有条件逻辑、循环和错误处理。Julep的工作流引擎自动管理多步骤流程和决策。 * **工具编排:** 轻松集成外部工具和API(网页搜索、数据库、第三方服务等)作为代理工具箱的一部分。Julep的代理可以调用这些工具来增强其能力,实现检索增强生成等功能。 * **并行和可扩展:** 并行运行多个操作以提高效率,让Julep处理后台的扩展和并发。平台是无服务器的,因此可以无缝扩展工作流,无需额外的DevOps开销。 * **可靠执行:** 不用担心故障 - Julep提供内置重试、自愈步骤和强大的错误处理,让长时间运行的任务保持正轨。你还能获得实时监控和日志记录来跟踪进展。 * **易于集成:** 通过我们的**Python**和**Node.js** SDK快速开始,或使用Julep CLI进行脚本编写。如果你想直接集成到其他系统中,Julep的REST API也可以使用。 *专注于你的AI逻辑和创意,而把繁重的工作交给Julep!* ## 开始使用

获取API密钥   文档

使用Julep简单易行: 1. **注册和API密钥:** 首先,在 [Julep控制台](https://dashboard.julep.ai) 注册以获取你的API密钥(用于验证SDK调用)。 2. **安装SDK:** 为你首选的语言安装Julep SDK: * **Python:** `pip install julep` * **Node.js:** `npm install @julep/sdk` (或 `yarn add @julep/sdk`) 3. **定义你的代理:** 使用SDK或YAML定义代理及其任务工作流。例如,你可以指定代理的记忆、可使用的工具以及逐步的任务逻辑。(详细演练请参见我们文档中的**[快速开始](https://docs.julep.ai/introduction/quick-start)**。) 4. **运行工作流:** 通过SDK调用你的代理来执行任务。Julep平台将在云端编排整个工作流,并为你管理状态、工具调用和LLM交互。你可以检查代理的输出,在控制台上监控执行,并根据需要进行迭代。 就是这样!你的第一个AI代理可以在几分钟内启动并运行。要获得完整教程,请查看文档中的**[快速开始指南](https://docs.julep.ai/introduction/quick-start)**。 > **注意:** Julep还提供命令行界面(CLI)(当前为Python的beta版)来管理工作流和代理。如果你喜欢无代码方法或想要脚本化常见任务,请参见 [Julep CLI文档](https://docs.julep.ai/responses/quickstart#cli-installation) 了解详情。 ## 文档和示例 想要深入了解?**[Julep文档](https://docs.julep.ai)**涵盖了掌握平台所需的一切 - 从核心概念(代理、任务、会话、工具)到高级主题如代理记忆管理和架构内部。关键资源包括: * **[概念指南](https://docs.julep.ai/concepts/):** 了解Julep的架构、会话和记忆的工作原理、工具使用、管理长对话等等。 * **[API和SDK参考](https://docs.julep.ai/api-reference/):** 查找所有SDK方法和REST API端点的详细参考,以将Julep集成到你的应用程序中。 * **[教程](https://docs.julep.ai/tutorials/):** 构建真实应用程序的分步指南(例如搜索网络的研究代理、旅行规划助手或具有自定义知识的聊天机器人)。 * **[Cookbook食谱](https://github.com/julep-ai/julep/tree/dev/cookbooks):** 探索**Julep Cookbook**以获取现成的示例工作流和代理。这些食谱展示了常见模式和用例 - 通过示例学习的绝佳方式。*浏览此存储库中的 [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) 目录以获取示例代理定义。* * **[IDE集成](https://context7.com/julep-ai/julep):** 直接在IDE中访问Julep文档!在编码时获得即时答案的完美解决方案。 ## 社区和贡献 加入我们不断壮大的开发者和AI爱好者社区!以下是一些参与和获得支持的方式: * **Discord社区:** 有问题或想法?加入我们 [官方Discord服务器](https://discord.gg/7H5peSN9QP) 上的对话,与Julep团队和其他用户聊天。我们很乐意帮助故障排除或头脑风暴新的用例。 * **GitHub讨论和问题:** 请随时使用GitHub报告错误、请求功能或讨论实现细节。如果你想贡献,请查看 [**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) - 我们欢迎各种类型的贡献。 * **贡献:** 如果你想贡献代码或改进,请查看我们的 [贡献指南](CONTRIBUTING.md) 了解如何开始。我们感谢所有的PR和反馈。通过协作,我们可以让Julep变得更好! *专业提示: 给我们的仓库点星以保持更新 - 我们正在不断添加新功能和示例。*
你的贡献,无论大小,对我们都很有价值。让我们一起构建令人惊叹的东西!

我们杰出的贡献者:


## 许可证 Julep采用**Apache 2.0许可证**提供,这意味着你可以在自己的项目中自由使用。详情请参见 [LICENSE](LICENSE) 文件。享受使用Julep构建的乐趣! ================================================ FILE: .github/README-FR.md ================================================
[Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
julep

NPM Version   PyPI - Version   Docker Image Version   GitHub License

· ·

**Essayez Julep dès aujourd'hui :** Visitez le **[Site Web de Julep](https://julep.ai)** · Commencez sur le **[Tableau de Bord Julep](https://dashboard.julep.ai)** (clé API gratuite) · Lisez la **[Documentation](https://docs.julep.ai/introduction/julep)**

📖 Table des matières

- [Pourquoi Julep ?](#pourquoi-julep-) - [Commencer](#commencer) - [Documentation et exemples](#documentation-et-exemples) - [Communauté et contributions](#communauté-et-contributions) - [Licence](#licence) ## Pourquoi Julep ? Julep est une plateforme open-source pour construire des **flux de travail d'IA basés sur des agents** qui vont bien au-delà de simples chaînes de prompts. Elle vous permet d'orchestrer des processus complexes en plusieurs étapes avec des modèles de langage de grande taille (LLM) et des outils **sans gérer d'infrastructure**. Avec Julep, vous pouvez créer des agents d'IA qui **se souviennent des interactions passées** et gèrent des tâches sophistiquées avec une logique de branchement, des boucles, une exécution parallèle et l'intégration d'APIs externes. En bref, Julep agit comme un *"Firebase pour les agents d'IA,"* fournissant un backend robuste pour les flux de travail intelligents à grande échelle. **Caractéristiques clés et avantages :** * **Mémoire persistante :** Construisez des agents d'IA qui maintiennent le contexte et la mémoire à long terme à travers les conversations, afin qu'ils puissent apprendre et s'améliorer au fil du temps. * **Flux de travail modulaires :** Définissez des tâches complexes comme des étapes modulaires (en YAML ou code) avec une logique conditionnelle, des boucles et la gestion d'erreurs. Le moteur de flux de travail de Julep gère automatiquement les processus multi-étapes et les décisions. * **Orchestration d'outils :** Intégrez facilement des outils externes et des APIs (recherche web, bases de données, services tiers, etc.) dans la boîte à outils de votre agent. Les agents de Julep peuvent invoquer ces outils pour augmenter leurs capacités, permettant la génération augmentée par récupération et plus. * **Parallèle et extensible :** Exécutez plusieurs opérations en parallèle pour l'efficacité, et laissez Julep gérer la mise à l'échelle et la concurrence en arrière-plan. La plateforme est sans serveur, donc elle met à l'échelle les flux de travail de manière transparente sans surcharge DevOps supplémentaire. * **Exécution fiable :** Ne vous inquiétez pas des problèmes - Julep fournit des réessais intégrés, des étapes d'auto-guérison et une gestion d'erreurs robuste pour maintenir les tâches de longue durée sur la bonne voie. Vous obtenez également une surveillance et une journalisation en temps réel pour suivre les progrès. * **Intégration facile :** Commencez rapidement avec nos SDKs pour **Python** et **Node.js**, ou utilisez le CLI Julep pour les scripts. L'API REST de Julep est disponible si vous voulez intégrer directement dans d'autres systèmes. *Concentrez-vous sur votre logique et créativité d'IA, pendant que Julep s'occupe du gros travail !* ## Commencer

Obtenir la clé API   Documentation

Démarrer avec Julep est simple : 1. **Inscription et clé API :** D'abord, inscrivez-vous sur le [Tableau de Bord Julep](https://dashboard.julep.ai) pour obtenir votre clé API (nécessaire pour authentifier vos appels SDK). 2. **Installer le SDK :** Installez le SDK Julep pour votre langage préféré : * **Python :** `pip install julep` * **Node.js :** `npm install @julep/sdk` (ou `yarn add @julep/sdk`) 3. **Définir votre agent :** Utilisez le SDK ou YAML pour définir un agent et son flux de travail de tâches. Par exemple, vous pouvez spécifier la mémoire de l'agent, les outils qu'il peut utiliser, et une logique de tâche étape par étape. (Voir le **[Guide de démarrage rapide](https://docs.julep.ai/introduction/quick-start)** dans notre documentation pour une procédure détaillée.) 4. **Exécuter un flux de travail :** Invoquez votre agent via le SDK pour exécuter la tâche. La plateforme Julep orchestrera l'ensemble du flux de travail dans le cloud et gérera l'état, les appels d'outils et les interactions LLM pour vous. Vous pouvez vérifier la sortie de l'agent, surveiller l'exécution sur le tableau de bord, et itérer selon les besoins. C'est tout ! Votre premier agent d'IA peut être opérationnel en quelques minutes. Pour un tutoriel complet, consultez le **[Guide de démarrage rapide](https://docs.julep.ai/introduction/quick-start)** dans la documentation. > **Note :** Julep offre également une interface en ligne de commande (CLI) (actuellement en bêta pour Python) pour gérer les flux de travail et les agents. Si vous préférez une approche sans code ou voulez scripter des tâches communes, voir les [documents CLI Julep](https://docs.julep.ai/responses/quickstart#cli-installation) pour plus de détails. ## Documentation et exemples Vous voulez plonger plus profondément ? La **[Documentation Julep](https://docs.julep.ai)** couvre tout ce dont vous avez besoin pour maîtriser la plateforme - des concepts fondamentaux (Agents, Tâches, Sessions, Outils) aux sujets avancés comme la gestion de la mémoire des agents et les éléments internes de l'architecture. Les ressources clés incluent : * **[Guides de concepts](https://docs.julep.ai/concepts/) :** Apprenez sur l'architecture de Julep, comment fonctionnent les sessions et la mémoire, l'utilisation d'outils, la gestion de longues conversations, et plus. * **[Référence API et SDK](https://docs.julep.ai/api-reference/) :** Trouvez une référence détaillée pour toutes les méthodes SDK et les points de terminaison de l'API REST pour intégrer Julep dans vos applications. * **[Tutoriels](https://docs.julep.ai/tutorials/) :** Guides étape par étape pour construire des applications réelles (ex. un agent de recherche qui parcourt le web, un assistant de planification de voyage, ou un chatbot avec des connaissances personnalisées). * **[Recettes de livre de cuisine](https://github.com/julep-ai/julep/tree/dev/cookbooks) :** Explorez le **Livre de cuisine Julep** pour des exemples de flux de travail et d'agents prêts à l'emploi. Ces recettes démontrent des modèles communs et des cas d'usage - un excellent moyen d'apprendre par l'exemple. *Parcourez le répertoire [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) dans ce dépôt pour des définitions d'agents d'exemple.* * **[Intégration IDE](https://context7.com/julep-ai/julep) :** Accédez à la documentation Julep directement dans votre IDE ! Parfait pour obtenir des réponses instantanées pendant que vous codez. ## Communauté et contributions Rejoignez notre communauté grandissante de développeurs et d'enthousiastes de l'IA ! Voici quelques façons de s'impliquer et d'obtenir du soutien : * **Communauté Discord :** Vous avez des questions ou des idées ? Rejoignez la conversation sur notre [serveur Discord officiel](https://discord.gg/7H5peSN9QP) pour discuter avec l'équipe Julep et d'autres utilisateurs. Nous sommes heureux d'aider avec le dépannage ou de réfléchir à de nouveaux cas d'usage. * **Discussions et issues GitHub :** N'hésitez pas à utiliser GitHub pour signaler des bugs, demander des fonctionnalités, ou discuter des détails d'implémentation. Consultez les [**bonnes premières issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) si vous souhaitez contribuer - nous accueillons les contributions de toutes sortes. * **Contribuer :** Si vous voulez contribuer du code ou des améliorations, veuillez voir notre [Guide de contribution](CONTRIBUTING.md) pour comment commencer. Nous apprécions toutes les PR et les retours. En collaborant, nous pouvons rendre Julep encore meilleur ! *Conseil de pro : Mettez une étoile à notre dépôt pour rester à jour - nous ajoutons constamment de nouvelles fonctionnalités et exemples.*
Vos contributions, grandes ou petites, nous sont précieuses. Construisons quelque chose d'incroyable ensemble !

Nos contributeurs extraordinaires :


## Licence Julep est offert sous la **Licence Apache 2.0**, ce qui signifie qu'il est libre d'utilisation dans vos propres projets. Voir le fichier [LICENSE](LICENSE) pour plus de détails. Amusez-vous à construire avec Julep ! ================================================ FILE: .github/README-JA.md ================================================
[Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
julep

NPM Version   PyPI - Version   Docker Image Version   GitHub License

· ·

**今すぐJulepを試す:** **[Julepウェブサイト](https://julep.ai)** をご覧ください · **[Julepダッシュボード](https://dashboard.julep.ai)** で始める (無料APIキー) · **[ドキュメント](https://docs.julep.ai/introduction/julep)** を読む

📖 目次

- [なぜJulepなのか?](#なぜjulepなのか) - [はじめに](#はじめに) - [ドキュメントと例](#ドキュメントと例) - [コミュニティと貢献](#コミュニティと貢献) - [ライセンス](#ライセンス) ## なぜJulepなのか? Julepは、単純なプロンプトのチェーンをはるかに超えた**エージェントベースのAIワークフロー**を構築するためのオープンソースプラットフォームです。大規模言語モデル(LLM)とツールを使用して複雑な多段階プロセスを**インフラストラクチャの管理なしに**オーケストレーションできます。Julepを使用すると、**過去のやり取りを記憶し**、分岐ロジック、ループ、並列実行、外部APIとの統合を備えた洗練されたタスクを処理するAIエージェントを作成できます。要するに、Julepは*「AIエージェントのためのFirebase」*として機能し、スケールでのインテリジェントワークフローのための堅牢なバックエンドを提供します。 **主要機能と利点:** * **永続メモリ:** 会話を通じてコンテキストと長期記憶を維持するAIエージェントを構築し、時間をかけて学習と改善ができます。 * **モジュラーワークフロー:** 条件ロジック、ループ、エラーハンドリングを備えたモジュラーステップとして複雑なタスクを定義します(YAMLまたはコード)。Julepのワークフローエンジンが多段階プロセスと決定を自動的に管理します。 * **ツールオーケストレーション:** 外部ツールとAPI(Web検索、データベース、サードパーティサービスなど)をエージェントのツールキットの一部として簡単に統合します。Julepのエージェントはこれらのツールを呼び出して機能を拡張し、検索拡張生成などを可能にします。 * **並列・スケーラブル:** 効率性のために複数の操作を並列で実行し、Julepにスケーリングと並行処理を任せます。プラットフォームはサーバーレスなので、追加のDevOpsオーバーヘッドなしにワークフローをシームレスにスケールします。 * **信頼性のある実行:** 不具合を心配する必要はありません - Julepは組み込まれた再試行、自己修復ステップ、堅牢なエラーハンドリングを提供し、長時間実行タスクを軌道に乗せ続けます。また、進捗を追跡するためのリアルタイム監視とログも提供します。 * **簡単な統合:** **Python**と**Node.js**向けのSDK、またはスクリプト用のJulep CLIですぐに始められます。他のシステムに直接統合したい場合は、JulepのREST APIが利用可能です。 *AIロジックと創造性に集中し、重労働はJulepにお任せください!* ## はじめに

APIキーを取得   ドキュメント

Julepの起動と実行は簡単です: 1. **サインアップとAPIキー:** まず、[Julepダッシュボード](https://dashboard.julep.ai)にサインアップしてAPIキーを取得します(SDK呼び出しの認証に必要)。 2. **SDKのインストール:** お好みの言語でJulep SDKをインストールします: * **Python:** `pip install julep` * **Node.js:** `npm install @julep/sdk` (または `yarn add @julep/sdk`) 3. **エージェントの定義:** SDKまたはYAMLを使用してエージェントとそのタスクワークフローを定義します。例えば、エージェントのメモリ、使用できるツール、ステップバイステップのタスクロジックを指定できます。(詳細なウォークスルーについては、ドキュメントの**[クイックスタート](https://docs.julep.ai/introduction/quick-start)**を参照してください。) 4. **ワークフローの実行:** SDKを通じてエージェントを呼び出してタスクを実行します。Julepプラットフォームがクラウドでワークフロー全体をオーケストレーションし、状態、ツール呼び出し、LLMインタラクションを管理します。エージェントの出力を確認し、ダッシュボードで実行を監視し、必要に応じて反復できます。 これで完了です!最初のAIエージェントを数分で起動して実行できます。完全なチュートリアルについては、ドキュメント内の**[クイックスタートガイド](https://docs.julep.ai/introduction/quick-start)**をご確認ください。 > **注意:** Julepはワークフローとエージェントを管理するためのコマンドラインインターface(CLI)も提供しています(現在Pythonのベータ版)。ノーコードアプローチを好む場合や一般的なタスクをスクリプト化したい場合は、詳細について[Julep CLIドキュメント](https://docs.julep.ai/responses/quickstart#cli-installation)を参照してください。 ## ドキュメントと例 さらに深く学びたいですか?**[Julepドキュメント](https://docs.julep.ai)**は、コアコンセプト(エージェント、タスク、セッション、ツール)から高度なトピック(エージェントメモリ管理やアーキテクチャの内部構造)まで、プラットフォームを習得するために必要なすべてをカバーしています。主要なリソースには以下があります: * **[コンセプトガイド](https://docs.julep.ai/concepts/):** Julepのアーキテクチャ、セッションとメモリの仕組み、ツールの使用、長い会話の管理などについて学びます。 * **[API・SDK リファレンス](https://docs.julep.ai/api-reference/):** JulepをアプリケーションNに統合するためのすべてのSDKメソッドとREST APIエンドポイントの詳細なリファレンスを見つけます。 * **[チュートリアル](https://docs.julep.ai/tutorials/):** 実際のアプリケーション構築のためのステップバイステップガイド(例:Webを検索するリサーチエージェント、旅行計画アシスタント、カスタム知識を持つチャットボット)。 * **[クックブックレシピ](https://github.com/julep-ai/julep/tree/dev/cookbooks):** 既製のワークフローとエージェントの例については**Julep Cookbook**を探索してください。これらのレシピは一般的なパターンと使用例を示しています - 例から学ぶ素晴らしい方法です。*サンプルエージェント定義については、このリポジトリの[`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks)ディレクトリを参照してください。* * **[IDE統合](https://context7.com/julep-ai/julep):** IDE内でJulepドキュメントに直接アクセス!コーディング中に即座に答えを得るのに最適です。 ## コミュニティと貢献 成長する開発者とAI愛好家のコミュニティに参加しましょう!参加とサポートを得る方法をいくつか紹介します: * **Discordコミュニティ:** 質問やアイデアがありますか?[公式Discordサーバー](https://discord.gg/7H5peSN9QP)での会話に参加して、Julepチームや他のユーザーとチャットしましょう。トラブルシューティングのお手伝いや新しい使用例のブレインストーミングを喜んでサポートします。 * **GitHub ディスカッションとイシュー:** バグ報告、機能要求、実装詳細の議論には、GitHubを自由にご利用ください。貢献したい場合は[**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)をチェックしてください - あらゆる種類の貢献を歓迎します。 * **貢献:** コードや改善を貢献したい場合は、始め方について[貢献ガイド](CONTRIBUTING.md)を参照してください。すべてのPRとフィードバックを感謝します。協力することで、Julepをさらに良くすることができます! *プロのヒント: リポジトリにスターを付けて最新情報を入手してください - 新機能と例を継続的に追加しています。*
あなたの貢献は、大きいものも小さいものも、私たちにとって価値があります。一緒に素晴らしいものを構築しましょう!

素晴らしい貢献者たち:


## ライセンス Julepは**Apache 2.0ライセンス**の下で提供されており、これは自分のプロジェクトで自由に使用できることを意味します。詳細については[LICENSE](LICENSE)ファイルを参照してください。Julepでの構築をお楽しみください! ================================================ FILE: .github/SUPPORT.md ================================================ # Support for Julep Welcome to the Julep support page! We're here to help you with any questions or issues you may encounter while using our platform. This document outlines the various ways you can get support and engage with our community. ## Getting Help ### Documentation Our comprehensive documentation is the first place to look for answers: - [Explore Docs](https://docs.julep.ai) Here you'll find detailed guides, API references, and tutorials to help you make the most of Julep. ### Community Support Join our vibrant community to get help from other users and the Julep team: - [Discord](https://discord.com/invite/JTSBGRZrzj): Join our Discord server to ask questions, share ideas, and discuss Julep with other developers. - [GitHub](https://github.com/julep-ai/julep): Report issues and feature requests. ### Social Media Follow us on social media for updates, tips, and community highlights: - [𝕏 (Twitter)](https://x.com/julep_ai) - [LinkedIn](https://www.linkedin.com/company/julep-ai) ## Reporting Issues If you encounter a bug or have a feature request, please open an issue on our GitHub repository: - [GitHub Issues](https://github.com/julep-ai/julep/issues) When reporting issues, please provide as much detail as possible, including: - Steps to reproduce the issue - Expected behavior - Actual behavior - Any error messages or logs - Your environment (Julep version, operating system, etc.) ## Contributing We welcome contributions to Julep! If you're interested in contributing, please check out our: - [Contributing Guidelines](https://github.com/julep-ai/julep/blob/dev/.github/CONTRIBUTING.md) - [Code of Conduct](https://github.com/julep-ai/julep/blob/main/.github/CODE_OF_CONDUCT.md) ## API Keys While we are in beta, you can reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get your API key. ## Staying Updated To stay informed about the latest updates, features, and community news: - Watch our [GitHub repository](https://github.com/julep-ai/julep) - Follow us on [𝕏 (Twitter)](https://x.com/julep_ai) - Join our [Discord](https://discord.com/invite/JTSBGRZrzj) for announcements Thank you for using Julep! We're excited to see what you build with our platform. ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file version: 2 updates: - package-ecosystem: "" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "weekly" ================================================ FILE: .github/workflows/bake-push-to-hub.yml ================================================ name: Build and push images to docker hub on merge to dev run-name: ${{ github.actor }} is building and pushing images to docker hub on: push: branches: - "dev" tags: - "v*" release: types: [published, released, prereleased] jobs: Bake-Push-Images: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: julepai password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - name: Build and push agent images uses: docker/bake-action@v5 with: files: | ./docker-bake.hcl targets: agents-api push: true set: | *.cache-from=type=gha *.cache-to=type=gha,mode=max env: TAG: ${{ github.ref_name }} GIT_SHA: ${{ github.sha }} concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true ================================================ FILE: .github/workflows/bandit-security-check-python-agents-api.yml ================================================ name: Bandit security check python agents-api run-name: ${{ github.actor }} is checking the security of the code on: workflow_dispatch: pull_request: paths: - 'src/agents-api/**' push: paths: - 'src/agents-api/**' jobs: bandit_check: name: bandit check security of python code in agents-api runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Run Bandit scan uses: PyCQA/bandit-action@v1 with: targets: "./src/agents-api/agents_api" confidence: high severity: high ================================================ FILE: .github/workflows/changelog-ci.yml ================================================ name: Changelog on release on: release: types: [published] jobs: changelog: runs-on: ubuntu-latest steps: # Checks-out your repository - uses: actions/checkout@v4 with: fetch-depth: 0 ref: dev # Generate changelog from release notes - uses: rhysd/changelog-from-release/action@v3 with: file: CHANGELOG.md github_token: ${{ secrets.GITHUB_TOKEN }} pull_request: true ================================================ FILE: .github/workflows/changelog-sync.yml ================================================ name: Sync changelog with Blot on: pull_request: types: [opened, synchronize, reopened] paths: ["changelog/**"] push: branches: - main - dev paths: - "changelog/**" workflow_run: workflows: ["Claude Changelog (PR)"] types: [completed] workflow_dispatch: jobs: sync: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 with: fetch-depth: 0 - name: Configure git identity run: | git config --global user.name "${{ secrets.BLOT_GIT_USERNAME }}" git config --global user.email "${{ secrets.BLOT_GIT_USERNAME }}" - name: Clone Blot repo env: BLOT_USERNAME: ${{ secrets.BLOT_GIT_USERNAME }} BLOT_PASSWORD: ${{ secrets.BLOT_GIT_PASSWORD }} run: | # URL-encode the username (replace @ with %40) export ENCODED_USERNAME=${BLOT_USERNAME//@/%40} # Clone into a directory outside the current git repo to avoid conflicts cd ${{ runner.temp }} if ! git clone \ "https://${ENCODED_USERNAME}:${BLOT_PASSWORD}@blot.im/clients/git/end/julepchangelog.git" ; then echo "Error: Failed to clone Blot repository" exit 1 fi # Get the default branch and ensure we're on it cd julepchangelog git checkout -B master origin/master cd ${{ github.workspace }} - name: Copy updated files into Blot working tree run: | if [ ! -d "changelog" ]; then echo "Error: changelog directory not found" exit 1 fi if ! rsync -a --delete --exclude='.git/' --exclude='.gitignore' changelog/ ${{ runner.temp }}/julepchangelog/; then echo "Error: Failed to sync files" exit 1 fi - name: Commit & push if there are changes env: BLOT_USERNAME: ${{ secrets.BLOT_GIT_USERNAME }} BLOT_PASSWORD: ${{ secrets.BLOT_GIT_PASSWORD }} run: | cd ${{ runner.temp }}/julepchangelog if [ -z "$(git status --porcelain)" ]; then echo "No changes to publish" exit 0 fi if ! git add -A; then echo "Error: Failed to stage changes" exit 1 fi if ! git commit -m "chore: publish updates"; then echo "Error: Failed to commit changes" exit 1 fi # URL-encode the username (replace @ with %40) export ENCODED_USERNAME=${BLOT_USERNAME//@/%40} if ! git push "https://${ENCODED_USERNAME}:${BLOT_PASSWORD}@blot.im/clients/git/end/julepchangelog.git" master; then echo "Error: Failed to push changes to branch master" exit 1 fi echo "Successfully synced changelog to Blot" ================================================ FILE: .github/workflows/claude-changelog-pr.yml ================================================ name: Claude Changelog (PR) on: pull_request: branches: [main, dev] types: [opened, synchronize, reopened] paths-ignore: - "changelog/**" jobs: changelog: name: Update Changelog runs-on: ubuntu-latest if: ${{ github.event.sender.login != 'github-actions[bot]' && github.event.pull_request.user.login != 'claude-doc-bot' && contains(github.event.pull_request.title, '[skip-claude]') == false }} permissions: contents: write pull-requests: write issues: write actions: read id-token: write steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-Changelog-${{ github.run_id }} aws-region: us-east-1 - name: Save PR patch run: gh pr diff ${{ github.event.pull_request.number }} --patch > diff.patch env: GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - name: Set changelog directory id: set_cl_dir run: | if [[ "${{ github.event.pull_request.base.ref }}" == "dev" ]]; then echo "CHANGELOG_DIR=changelog/dev" >> "$GITHUB_ENV" echo "CHANGELOG_TAG=dev" >> "$GITHUB_ENV" else echo "CHANGELOG_DIR=changelog/main" >> "$GITHUB_ENV" echo "CHANGELOG_TAG=main" >> "$GITHUB_ENV" fi - name: Claude updates changelog & home summary uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" track_progress: true github_token: ${{ secrets.GITHUB_TOKEN }} claude_args: | --model us.anthropic.claude-sonnet-4-20250514-v1:0 --max-turns 5 --allowedTools Read,Edit,MultiEdit prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.pull_request.number }} You are the team's *changelog* bot. Follow these rules strictly: 1. Read the unified diff in *diff.patch*. 2. Decide if the patch introduces any user-visible change (new feature, behaviour change, deprecation, bug fix). • If **no user-visible change** – *do nothing*: exit without writing, committing, or replying. 3. If **yes**: a. **Create or update** file in *${{ env.CHANGELOG_DIR }}* named `{YYYY}-{MM}-{DD}.md` with a concise bullet list of the changes. • Begin each bullet with a past-tense verb (e.g. "Added", "Fixed"). • Keep bullets short (< 100 chars). • Ensure the file contains YAML front-matter: ``` --- title: "Julep AI Changelog" date: {YYYY}-{MM}-{DD} tags: [${{ env.CHANGELOG_TAG }}] --- ``` b. **Update** `Templates/index-template/home-summary.html` so the home page shows the newest entry's title, date and bullet list (only if the PR is on main). 4. Finally, stage, commit and push the edits with a clear message. ================================================ FILE: .github/workflows/claude-code-review.yml ================================================ name: Claude Code Review on: pull_request: types: [opened, synchronize] # Optional: Only run on specific file changes # paths: # - "src/**/*.ts" # - "src/**/*.tsx" # - "src/**/*.js" # - "src/**/*.jsx" jobs: claude-review: # Optional: Filter by PR author # if: | # github.event.pull_request.user.login == 'external-contributor' || # github.event.pull_request.user.login == 'new-developer' || # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' runs-on: ubuntu-latest permissions: contents: read pull-requests: read issues: read actions: read id-token: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 1 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-${{ github.run_id }} aws-region: us-east-1 - name: Run Claude Code Review id: claude-review uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.pull_request.number }} This is a monorepo with multiple different services. The repo uses AGENTS.md as the file that contains instructions for AI agents (instead of CLAUDE.md files). CLAUDE.md still exists but is just a symlink to the corresponding AGENTS.md (usually in the same dir). Please review this pull request and provide feedback on: - Code quality and best practices - Potential bugs or issues - Performance considerations - Security concerns - Test coverage Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback. Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR. # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md # or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options claude_args: | --model us.anthropic.claude-opus-4-1-20250805-v1:0 --allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)" ================================================ FILE: .github/workflows/claude-docs-manual.yml ================================================ name: Claude Docs (Manual) on: workflow_dispatch: inputs: pr_number: description: "PR number" required: true jobs: update-docs: name: Manual Doc Update runs-on: ubuntu-latest permissions: contents: write pull-requests: write issues: write actions: read id-token: write steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-Docs-${{ github.run_id }} aws-region: us-east-1 - name: Save PR patch run: gh pr diff ${{ github.event.inputs.pr_number }} --patch > diff.patch env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Determine PR base branch id: pr_base run: | base=$(gh pr view ${{ github.event.inputs.pr_number }} --json baseRefName -q .baseRefName) echo "BASE_BRANCH=$base" >> "$GITHUB_OUTPUT" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Set changelog directory id: set_cl_dir run: | if [[ "${{ steps.pr_base.outputs.BASE_BRANCH }}" == "dev" ]]; then echo "CHANGELOG_DIR=changelog/dev" >> "$GITHUB_ENV" echo "CHANGELOG_TAG=dev" >> "$GITHUB_ENV" else echo "CHANGELOG_DIR=changelog/main" >> "$GITHUB_ENV" echo "CHANGELOG_TAG=main" >> "$GITHUB_ENV" fi - name: Claude changes docs uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" track_progress: true github_token: ${{ secrets.GITHUB_TOKEN }} claude_args: | --model us.anthropic.claude-sonnet-4-20250514-v1:0 --max-turns 10 --allowedTools Read,Edit,MultiEdit,Write prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.inputs.pr_number }} You are the team's documentation bot. 1. Read *diff.patch*. 2. For any change that affects users: 1. **edit** files under *documentation/*** (Mintlify structure) so docs stay accurate. 2. **create** new file in *${{ env.CHANGELOG_DIR }}*** named `{YYYY}-{MM}-{DD}.md`** containing a bulleted list of the changes (don't include unnecessary details). - File front-matter: ``` --- title: "Julep AI Changelog – {human-readable-date}" date: {YYYY}-{MM}-{DD} tags: [${{ env.CHANGELOG_TAG }}] --- ``` - If the file already exists, append to its bullet list. 3. **update** `Templates/index-template/home-summary.html` so the home page summarises the latest entry from the changelog (same title/date and bullet list). 3. Commit the edits. If diff.patch has no user-visible change, do nothing. 4. Finally, stage, commit and push the edits with a clear message. Note: AGENTS.md replaces CLAUDE.md (CLAUDE.md is a symlink). ================================================ FILE: .github/workflows/claude-docs-pr.yml ================================================ name: Claude Docs (PR) on: pull_request: branches: [main] types: [opened, synchronize, reopened] paths-ignore: - "changelog/**" jobs: docs-gate: name: Documentation Gate runs-on: ubuntu-latest if: ${{ github.event.sender.login != 'github-actions[bot]' && github.event.pull_request.user.login != 'claude-doc-bot' && contains(github.event.pull_request.title, '[skip-claude]') == false }} outputs: pr_number: ${{ steps.resolve.outputs.number }} should_update: ${{ steps.gate.outputs.result }} permissions: contents: read pull-requests: read actions: read id-token: write steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-DocsGate-${{ github.run_id }} aws-region: us-east-1 - name: PR number id: resolve run: echo "number=${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT" - name: Save PR patch run: gh pr diff ${{ steps.resolve.outputs.number }} --patch > diff.patch env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Gate id: gate uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" track_progress: true github_token: ${{ secrets.GITHUB_TOKEN }} claude_args: | --model us.anthropic.claude-sonnet-4-20250514-v1:0 --max-turns 2 --allowedTools Read prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.pull_request.number }} You are a senior technical-writer. Read *diff.patch* (unified diff). Reply with the single word **UPDATE** if the patch a) adds new user-visible functionality, b) changes or removes existing behaviour, c) deprecates anything, otherwise reply **SKIP**. update-docs: name: Update Documentation needs: docs-gate if: ${{ github.event.sender.login != 'github-actions[bot]' && needs.docs-gate.result == 'success' && needs.docs-gate.outputs.should_update == 'UPDATE' }} runs-on: ubuntu-latest permissions: contents: write pull-requests: write issues: write actions: read id-token: write steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-DocsUpdate-${{ github.run_id }} aws-region: us-east-1 - name: Save PR patch run: gh pr diff ${{ needs.docs-gate.outputs.pr_number }} --patch > diff.patch env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Claude changes docs uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" track_progress: true github_token: ${{ secrets.GITHUB_TOKEN }} claude_args: | --model us.anthropic.claude-opus-4-1-20250805-v1:0 --max-turns 10 --allowedTools Read,Edit,MultiEdit prompt: | REPO: ${{ github.repository }} PR NUMBER: ${{ needs.docs-gate.outputs.pr_number }} You are the team's documentation bot. 1. Read *diff.patch*. 2. For any change that affects users, **edit** files under *documentation/*** (Mintlify structure) so docs stay accurate. 3. Commit the edits. If diff.patch has no user-visible change, do nothing. 4. Finally, stage, commit and push the edits with a clear message. Note: AGENTS.md replaces CLAUDE.md (CLAUDE.md is a symlink). ================================================ FILE: .github/workflows/claude.yml ================================================ name: Claude Code on: issue_comment: types: [created] pull_request_review_comment: types: [created] issues: types: [opened, assigned] pull_request_review: types: [submitted] jobs: claude: if: | (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) runs-on: ubuntu-latest permissions: contents: read pull-requests: read issues: read id-token: write actions: read # Required for Claude to read CI results on PRs steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 1 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} role-session-name: GitHubActions-Claude-${{ github.run_id }} aws-region: us-east-1 - name: Run Claude Code id: claude uses: anthropics/claude-code-action@v1 with: use_bedrock: "true" # This is an optional setting that allows Claude to read CI results on PRs additional_permissions: | actions: read # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. # prompt: 'Update the pull request description to include a summary of changes.' # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md # or https://docs.anthropic.com/en/docs/claude-code/sdk#command-line for available options claude_args: | --model us.anthropic.claude-opus-4-1-20250805-v1:0 --allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)" ================================================ FILE: .github/workflows/docker-bake-on-pr.yml ================================================ name: Bake images on PR run-name: ${{ github.actor }} is baking images on: pull_request: jobs: Bake-Images: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: julepai password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - name: Bake images uses: docker/bake-action@v5 with: files: | ./docker-bake.hcl targets: agents-api push: false set: | *.cache-from=type=gha *.cache-to=type=gha,mode=max env: TAG: pr-run-${{ github.run_number }}-${{ github.run_attempt }} GIT_SHA: ${{ github.sha }} concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} ================================================ FILE: .github/workflows/doctoc-on-push.yml ================================================ on: push name: TOC Generator jobs: generateTOC: name: TOC Generator runs-on: ubuntu-latest steps: - uses: technote-space/toc-generator@v4 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} MAX_HEADER_LEVEL: 3 TOC_TITLE: '

📖 Table of Contents

' FOLDING: false CREATE_PR: true CHECK_ONLY_DEFAULT_BRANCH: true ================================================ FILE: .github/workflows/generate-changelog.yml ================================================ name: Julep Changelog Generation run-name: ${{ github.actor }} is generating changelog for the last two weeks using Julep on: workflow_dispatch: jobs: changelog_generation: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 ref: dev - name: Setup GitHub CLI run: | echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token - name: Collect merged PRs from the last two weeks id: collect_prs run: | date_threshold=$(date -d '-14 days' +"%Y-%m-%d") echo "Fetching merged PRs since $date_threshold..." merged_prs=$( gh pr list --state merged --json number,title,body,author \ --search "merged:>=$date_threshold" \ --jq 'map({number, title, body, author: .author.login})' ) if [ -z "$merged_prs" ] || [ "$merged_prs" = "null" ]; then echo "No merged PRs found in the last two weeks." echo "has_prs=false" >> $GITHUB_OUTPUT exit 0 fi echo "$merged_prs" > pr_data.json echo "has_prs=true" >> $GITHUB_OUTPUT - name: Setup Python v3.10.12 uses: actions/setup-python@v5 with: python-version: "3.10.12" - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install PyYAML julep - name: Send PR data to Python script if: steps.collect_prs.outputs.has_prs == 'true' id: generate_changelog run: | if ! python src/scripts/generate_changelog.py; then echo "Error: Failed to generate changelog" exit 1 fi env: JULEP_API_KEY: ${{ secrets.JULEP_API_KEY }} TASK_UUID: ${{ secrets.TASK_UUID }} AGENT_UUID: ${{ secrets.AGENT_UUID }} - name: Create Pull Request if: success() && steps.collect_prs.outputs.has_prs == 'true' uses: peter-evans/create-pull-request@v7 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: "chore(changelog): update CHANGELOG.md" title: "Update CHANGELOG.md" body: "This PR updates the changelog with PRs from the last 2 weeks." branch: "update-changelog" delete-branch: true add-paths: | CHANGELOG.md ================================================ FILE: .github/workflows/generate-openapi-code-from-typespec.yml ================================================ name: Generate OpenAPI code run-name: ${{ github.actor }} is generating openapi code on: pull_request: paths: - 'src/typespec/**' push: paths: - 'src/typespec/**' jobs: Typecheck: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 'latest' cache: npm cache-dependency-path: 'src/typespec/package-lock.json' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Generate openapi code run: | cd src/typespec; npm ci; cd - export PATH=$PATH:$PWD/src/typespec/node_modules/.bin bash src/scripts/generate_openapi_code.sh concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .github/workflows/latest-push-to-hub.yml ================================================ name: Build and push images to docker hub on merge to main run-name: ${{ github.actor }} is building and pushing images to docker hub on: push: branches: - "main" jobs: Bake-Push-Images: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: julepai password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - name: Build and push agent images uses: docker/bake-action@v5 with: files: | ./docker-bake.hcl targets: agents-api push: true set: | *.cache-from=type=gha *.cache-to=type=gha,mode=max env: TAG: latest GIT_SHA: ${{ github.sha }} concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .github/workflows/lint-agents-api-pr.yml ================================================ name: Lint agents-api run-name: ${{ github.actor }} is linting the code on: pull_request: paths: - 'src/agents-api/**' push: paths: - 'src/agents-api/**' jobs: Lint-And-Format: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install libboost run: sudo apt-get install -y libboost-all-dev - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install Go migrate uses: jaxxstorm/action-install-gh-release@v1.10.0 with: # Grab the latest version repo: golang-migrate/migrate - name: Set up python and install dependencies run: | cd src/agents-api uv python install uv sync --all-extras --dev - name: Lint and format run: | cd src/agents-api uv run poe format uv run poe lint - uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "refactor: Lint agents-api (CI)" branch: ${{ github.head_ref }} concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .github/workflows/lint-integrations-service-pr.yml ================================================ name: Lint integrations-service run-name: ${{ github.actor }} is linting the code on: pull_request: paths: - 'src/integrations-service/**' push: paths: - 'src/integrations-service/**' jobs: Lint-And-Format: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Set up python and install dependencies run: | cd src/integrations-service uv python install uv sync --all-extras --dev - name: Lint and format run: | cd src/integrations-service uv run poe format uv run poe lint - uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "refactor: Lint integrations-service (CI)" branch: ${{ github.head_ref }} concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .github/workflows/publish-cli-prerelease.yml ================================================ name: Publish CLI Prerelease to PyPI # AIDEV-NOTE: Auto-publish CLI package to PyPI for prerelease versions only permissions: contents: write packages: write on: push: branches: - dev - main paths: - 'src/cli/**' workflow_dispatch: jobs: check-and-publish: runs-on: ubuntu-latest defaults: run: working-directory: ./src/cli steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies run: | uv sync --dev - name: Extract version from pyproject.toml id: version run: | # Extract version using grep and sed (no additional dependencies needed) VERSION=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/') echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Extracted version: $VERSION" - name: Check if version is prerelease id: prerelease run: | VERSION="${{ steps.version.outputs.version }}" echo "Checking version: $VERSION" # Check if version contains prerelease indicators if echo "$VERSION" | grep -E "(alpha|beta|rc|pre|dev)" > /dev/null; then echo "is_prerelease=true" >> $GITHUB_OUTPUT echo "✅ Version $VERSION is a prerelease" else echo "is_prerelease=false" >> $GITHUB_OUTPUT echo "❌ Version $VERSION is NOT a prerelease" fi - name: Run linting and type checking if: steps.prerelease.outputs.is_prerelease == 'true' run: | uv run poe check - name: Run tests if: steps.prerelease.outputs.is_prerelease == 'true' run: | uv run poe test - name: Build package if: steps.prerelease.outputs.is_prerelease == 'true' run: | uv build - name: Check if version already exists on PyPI if: steps.prerelease.outputs.is_prerelease == 'true' id: check_pypi run: | VERSION="${{ steps.version.outputs.version }}" # Check if this version already exists on PyPI if pip index versions julep-cli | grep "$VERSION" > /dev/null 2>&1; then echo "version_exists=true" >> $GITHUB_OUTPUT echo "⚠️ Version $VERSION already exists on PyPI" else echo "version_exists=false" >> $GITHUB_OUTPUT echo "✅ Version $VERSION does not exist on PyPI, proceeding with publish" fi - name: Publish to PyPI if: steps.prerelease.outputs.is_prerelease == 'true' && steps.check_pypi.outputs.version_exists == 'false' uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} packages-dir: src/cli/dist/ verbose: true - name: Create GitHub Release if: steps.check_pypi.outputs.version_exists == 'false' uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: cli-v${{ steps.version.outputs.version }} release_name: CLI v${{ steps.version.outputs.version }} body: | 🚀 **Julep CLI Prerelease v${{ steps.version.outputs.version }}** This is a prerelease version of the Julep CLI. ## Installation ```bash pip install julep-cli==${{ steps.version.outputs.version }} ``` ## Changes See the [changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md) for detailed changes. --- *This release was automatically generated by GitHub Actions.* prerelease: true draft: false - name: Summary run: | echo "## Workflow Summary" >> $GITHUB_STEP_SUMMARY echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY echo "- **Is Prerelease**: ${{ steps.prerelease.outputs.is_prerelease }}" >> $GITHUB_STEP_SUMMARY echo "- **Version Exists on PyPI**: ${{ steps.check_pypi.outputs.version_exists }}" >> $GITHUB_STEP_SUMMARY if [ "${{ steps.prerelease.outputs.is_prerelease }}" == "true" ] && [ "${{ steps.check_pypi.outputs.version_exists }}" == "false" ]; then echo "- **Action**: ✅ Published to PyPI and created GitHub release" >> $GITHUB_STEP_SUMMARY elif [ "${{ steps.prerelease.outputs.is_prerelease }}" == "true" ] && [ "${{ steps.check_pypi.outputs.version_exists }}" == "true" ]; then echo "- **Action**: ⚠️ Skipped (version already exists on PyPI)" >> $GITHUB_STEP_SUMMARY else echo "- **Action**: ❌ Skipped (not a prerelease version)" >> $GITHUB_STEP_SUMMARY fi ================================================ FILE: .github/workflows/sync-model-docs.yml ================================================ name: Sync Model Documentation on: push: branches: - dev paths: - 'src/llm-proxy/litellm-config.yaml' - 'src/scripts/sync_model_docs.py' workflow_dispatch: jobs: sync-model-docs: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.12' - name: Install dependencies run: | pip install pyyaml - name: Run sync script run: | python src/scripts/sync_model_docs.py - name: Check for changes id: check_changes run: | if git diff --quiet documentation/integrations/supported-models.mdx; then echo "changed=false" >> $GITHUB_OUTPUT else echo "changed=true" >> $GITHUB_OUTPUT fi - name: Commit and push changes if: steps.check_changes.outputs.changed == 'true' run: | git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' git add documentation/integrations/supported-models.mdx git commit -m "chore: sync model documentation from litellm-config.yaml [skip ci]" git push ================================================ FILE: .github/workflows/test-agents-api-pr.yml ================================================ name: Test agents-api run-name: ${{ github.actor }} is testing the code on: pull_request: paths: - 'src/agents-api/**' push: paths: - 'src/agents-api/**' jobs: Test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install libboost run: sudo apt-get install -y libboost-all-dev - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install Go migrate uses: jaxxstorm/action-install-gh-release@v1.10.0 with: # Grab the latest version repo: golang-migrate/migrate - name: Set up python and install dependencies run: | cd src/agents-api uv python install uv sync --all-extras --dev - name: Run tests env: SECRETS_MASTER_KEY: ${{ secrets.SECRETS_MASTER_KEY }} run: | cd src/agents-api uv run poe test --fail-limit 3 concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .github/workflows/test-integrations-service-pr.yml ================================================ name: Test integrations-service run-name: ${{ github.actor }} is testing the code on: pull_request: paths: - 'src/integrations-service/**' push: paths: - 'src/integrations-service/**' jobs: Test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Set up python and install dependencies run: | cd src/integrations-service uv python install uv sync --all-extras --dev - name: Run tests run: | cd src/integrations-service uv run poe test concurrency: group: ${{ github.workflow }}-${{ github.ref }} ================================================ FILE: .github/workflows/translate-readme.yml ================================================ name: Translate README on: pull_request: paths: - "README.md" - ".github/README-*.md" jobs: translate_readme: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: anthropics/claude-code-action@beta with: direct_prompt: >- Use the root README.md to review the .github/README-{lang}.md files to see if they are correctly translated and if needed make changes as necessary. Keep the contents exactly the same, just translated to the target languages. custom_instructions: >- This is a monorepo with multiple different services. The repo uses AGENTS.md as the file that contains instructions for AI agents (instead of CLAUDE.md files). CLAUDE.md still exists but is just a symlink to the corresponding AGENTS.md (usually in the same dir). anthropic_model: ${{ vars.TRANSLATOR_CLAUDE_MODEL }} anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} allowed_tools: "Bash(npm install),Bash(npm run test),Edit,Replace,NotebookEditCell" disallowed_tools: "TaskOutput,KillTask" ================================================ FILE: .github/workflows/typecheck-agents-api-pr.yml ================================================ name: Typecheck agents-api run-name: ${{ github.actor }} is typechecking the code on: pull_request: paths: - 'src/agents-api/**' push: paths: - 'src/agents-api/**' jobs: Typecheck: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install libboost run: sudo apt-get install -y libboost-all-dev - name: Cache pytype uses: actions/cache@v4 with: path: src/agents-api/.pytype key: ${{ runner.os }}-agents-api-pytype-${{ github.base_ref }} restore-keys: | ${{ runner.os }}-agents-api-pytype- - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install Go migrate uses: jaxxstorm/action-install-gh-release@v1.10.0 with: # Grab the latest version repo: golang-migrate/migrate - name: Set up python and install dependencies run: | cd src/integrations-service uv python install uv sync --all-extras --dev - name: Typecheck run: | cd src/agents-api uv run poe typecheck concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} ================================================ FILE: .gitignore ================================================ # BECAUSE DIWANK IS OBSESSED *gaga* .DS_Store *.swp ngrok* .env* .env *.env *.pyc **/node_modules/ .aider* .vscode/ schema.sql *.egg-info/ **/*.egg-info/ **/.claude/settings.local.json ================================================ FILE: .gitmodules ================================================ # [submodule "code-interpreter/vendor/cohere-ai/cohere-terrarium"] # path = code-interpreter/vendor/cohere-ai/cohere-terrarium # url = https://github.com/cohere-ai/cohere-terrarium.git [submodule "sdks/python-sdk"] path = sdks/python-sdk url = https://github.com/julep-ai/python-sdk.git [submodule "sdks/node-sdk"] path = sdks/node-sdk url = https://github.com/julep-ai/node-sdk.git ================================================ FILE: .mcp.json ================================================ { "mcpServers": { "deepwiki": { "type": "http", "url": "https://mcp.deepwiki.com/mcp" }, "linear": { "type": "sse", "url": "https://mcp.linear.app/sse" }, "fetch": { "type": "stdio", "command": "uvx", "args": [ "mcp-server-fetch" ], "env": {} }, "firecrawl": { "type": "stdio", "command": "npx", "args": [ "-y", "firecrawl-mcp" ], "env": {} } } } ================================================ FILE: AGENTS.md ================================================ # AGENTS.md. Julep AI *Last updated 2025-05-09* > **purpose** – This file is the onboarding manual for every AI assistant (Claude, Cursor, GPT, etc.) and every human who edits this repository. > It encodes our coding standards, guard-rails, and workflow tricks so the *human 30 %* (architecture, tests, domain judgment) stays in human hands.[^1] --- ## 0. Project overview Julep is a serverless platform for building AI workflows and agents. It helps data and ML teams orchestrate complex AI operations, manage state across interactions, and integrate with existing data infrastructure and tools. Key components: - **src/ts-api**: Core service for agent definitions and task execution - **src/memory-store**: Persistent storage with PostgreSQL and vector capabilities - **src/scheduler**: Temporal-based workflow engine for execution - **src/integrations-service**: Connectors to external services and tools - **src/**: All core service modules are now organized under the src/ directory **Golden rule**: When unsure about implementation details or requirements, ALWAYS consult the developer rather than making assumptions. --- ## 1. Non-negotiable golden rules | #: | AI *may* do | AI *must NOT* do | |---|------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | G-0 | Whenever unsure about something that's related to the project, ask the developer for clarification before making changes. | ❌ Write changes or use tools when you are not sure about something project specific, or if you don't have context for a particular feature/decision. | | G-1 | Generate code **only inside** relevant source directories (e.g., `src/agents-api/agents_api/` for the main API, `src/cli/src/` for the CLI, `src/integrations-service/` for integration-specific code) or explicitly pointed files. | ❌ Touch `tests/`, `SPEC.md`, or any `*_spec.py` / `*.ward` files (humans own tests & specs). | | G-2 | Add/update **`AIDEV-NOTE:` anchor comments** near non-trivial edited code. | ❌ Delete or mangle existing `AIDEV-` comments. | | G-3 | Follow lint/style configs (`pyproject.toml`, `.ruff.toml`, `.pre-commit-config.yaml`). Use the project's configured linter, if available, instead of manually re-formatting code. | ❌ Re-format code to any other style. | | G-4 | For changes >300 LOC or >3 files, **ask for confirmation**. | ❌ Refactor large modules without human guidance. | | G-5 | Stay within the current task context. Inform the dev if it'd be better to start afresh. | ❌ Continue work from a prior prompt after "new task" – start a fresh session. | --- ## 2. Build, test & utility commands Use `poe` tasks for consistency (they ensure correct environment variables and configuration). ```bash # Format, lint, type-check, test, codegen poe format # ruff format poe lint # ruff check poe typecheck # pytype --config pytype.toml (for agents-api) / pyright (for cli) poe test # ward test --exclude .venv (pytest for integrations-service) poe test --search "pattern" # Run specific tests by Ward pattern poe check # format + lint + type + SQL validation poe codegen # generate API code (e.g., OpenAPI from TypeSpec) ``` For simple, quick Python script tests: `PYTHONPATH=$PWD python tests/test_file.py` (ensure correct CWD). --- ## 3. Coding standards * **Python**: 3.12+, FastAPI, `async/await` preferred. * **Formatting**: `ruff` enforces 96-char lines, double quotes, sorted imports. Standard `ruff` linter rules. * **Typing**: Strict (Pydantic v2 models preferred); `from __future__ import annotations`. * **Naming**: `snake_case` (functions/variables), `PascalCase` (classes), `SCREAMING_SNAKE` (constants). * **Error Handling**: Typed exceptions; context managers for resources. * **Documentation**: Google-style docstrings for public functions/classes. * **Testing**: Separate test files matching source file patterns. **Error handling patterns**: - Use typed, hierarchical exceptions defined in `exceptions.py` - Catch specific exceptions, not general `Exception` - Use context managers for resources (database connections, file handles) - For async code, use `try/finally` to ensure cleanup Example: ```python from agents_api.common.exceptions import ValidationError async def process_data(data: dict) -> Result: try: # Process data return result except KeyError as e: raise ValidationError(f"Missing required field: {e}") from e ``` --- ## 4. Project layout & Core Components | Directory | Description | | --------------------------------- | ------------------------------------------------- | | `src/agents-api/` | FastAPI service & Temporal activities | | `src/memory-store/` | PostgreSQL + TimescaleDB schemas & migrations | | `src/blob-store/` | S3-compatible object storage for files | | `src/integrations-service/` | Adapters for external services (browsers, APIs) | | `src/scheduler/` | Temporal workflow engine for execution | | `src/gateway/` | API gateway (routing, request handling) | | `src/llm-proxy/` | LiteLLM proxy for language models | | `src/monitoring/` | Prometheus & Grafana | | `src/typespec/` | **Source-of-truth** API specifications (TypeSpec) | | `sdks/` | Node.js & Python client SDKs | See `.github/CONTRIBUTING.md` for a full architecture diagram. **Key domain models**: - **Agents**: AI agent definitions with instructions and tools - **Tasks**: Workflow definitions with individual steps - **Tools**: Integrations and capabilities for agents to use - **Sessions**: Conversation containers with context - **Entries**: Message history tracking - **Executions**: Task execution state tracking --- ## 5. Anchor comments Add specially formatted comments throughout the codebase, where appropriate, for yourself as inline knowledge that can be easily `grep`ped for. ### Guidelines: - Use `AIDEV-NOTE:`, `AIDEV-TODO:`, or `AIDEV-QUESTION:` (all-caps prefix) for comments aimed at AI and developers. - Keep them concise (≤ 120 chars). - **Important:** Before scanning files, always first try to **locate existing anchors** `AIDEV-*` in relevant subdirectories. - **Update relevant anchors** when modifying associated code. - **Do not remove `AIDEV-NOTE`s** without explicit human instruction. - Make sure to add relevant anchor comments, whenever a file or piece of code is: * too long, or * too complex, or * very important, or * confusing, or * could have a bug unrelated to the task you are currently working on. Example: ```python # AIDEV-NOTE: perf-hot-path; avoid extra allocations (see ADR-24) async def render_feed(...): ... ``` --- ## 6. Commit discipline * **Granular commits**: One logical change per commit. * **Tag AI-generated commits**: e.g., `feat: optimise feed query [AI]`. * **Clear commit messages**: Explain the *why*; link to issues/ADRs if architectural. * **Use `git worktree`** for parallel/long-running AI branches (e.g., `git worktree add ../wip-foo -b wip-foo`). * **Review AI-generated code**: Never merge code you don't understand. --- ## 7. API models & codegen * To modify API models (e.g., in `src/agents-api/agents_api/autogen/`), **edit TypeSpec files** in `src/typespec/`. * **Regenerate code** after TypeSpec changes: `bash src/scripts/generate_openapi_code.sh` (from project root). * **Do NOT manually edit** generated files (e.g., in `autogen/` directories) as they will be overwritten. **API pattern examples**: ```python # Route definition @router.post("/sessions/{session_id}/entries", response_model=EntryResponse) async def create_entry( session_id: str, entry_create: EntryCreate, current_user: User = Depends(get_current_user), ) -> EntryResponse: """Create a new entry in a session.""" # Implementation... ``` --- ## 8. Python expressions in tasks (agents-api) * Evaluated using `simpleeval` in a sandboxed environment. * Use `validate_py_expression()` from `agents_api.activities.task_steps.base_evaluate` for static checks (syntax, undefined names, safety). * Expressions have access to `_` (current input) and standard library modules. * Test expressions: `PYTHONPATH=$PWD python -c "from agents_api.activities.task_steps.base_evaluate import validate_py_expression; print(validate_py_expression('$ your_expr_here'))"` * Task validation handles raw task dictionaries and Pydantic models (after `task_to_spec` conversion). * In `task_to_spec` converted tasks, `kind_` field denotes step type. Raw tasks use step type keys. * For "if_else" steps, condition is in `if_` field (aliased as "if"). **Expression example**: ```python # Simple expression example "$_['customer']['total_orders'] > 5" # Checks if customer has more than 5 orders # More complex example with dict access and function calls "$len([x for x in _['items'] if x['category'] == 'electronics']) > 0" ``` --- ## 9. Ward testing framework * Use descriptive test names: `@test("Descriptive name of what is being tested")`. * Activate virtual environment: `source .venv/bin/activate`. * Ensure correct working directory (e.g., `src/agents-api/`) and `PYTHONPATH=$PWD` for script-based tests. * Filter tests: `poe test --search "pattern_to_match"` (do NOT use `-p`). * Limit failures for faster feedback: `poe test --fail-limit 1 --search "pattern_to_match"`. --- ## 10. Directory-Specific AGENTS.md Files * **Always check for `AGENTS.md` files in specific directories** before working on code within them. These files contain targeted context. * If a directory's `AGENTS.md` is outdated or incorrect, **update it**. * If you make significant changes to a directory's structure, patterns, or critical implementation details, **document these in its `AGENTS.md`**. * If a directory lacks a `AGENTS.md` but contains complex logic or patterns worth documenting for AI/humans, **suggest creating one**. --- ## 11. Common pitfalls * Mixing pytest & ward syntax (ward uses `@test()` decorator, not pytest fixtures/classes). * Forgetting to `source .venv/bin/activate`. * Wrong current working directory (CWD) or `PYTHONPATH` for commands/tests (e.g., ensure you are in `agents-api/` not root for some `agents-api` tasks). * Large AI refactors in a single commit (makes `git bisect` difficult). * Delegating test/spec writing entirely to AI (can lead to false confidence). * **Note about `src/`**: Only the `cli` component has a `src/` directory. For `src/agents-api`, code is directly in `agents_api/`. Follow the existing pattern for each component. --- ## 12. Versioning conventions Components (e.g., `agents-api`, `julep-cli`, `integrations-service`) are versioned independently. Semantic Versioning (SemVer: `MAJOR.MINOR.PATCH`) is generally followed, as specified in each component's `pyproject.toml` file. * **MAJOR** version update: For incompatible API changes. * **MINOR** version update: For adding functionality in a backward-compatible manner. * **PATCH** version update: For backward-compatible bug fixes. --- ## 13. Key File & Pattern References This section provides pointers to important files and common patterns within the codebase. * **API Route Definitions**: * Location: `src/agents-api/agents_api/routers/` (e.g., `src/agents-api/agents_api/routers/sessions.py`) * Pattern: FastAPI routers, Pydantic models for request/response, dependency injection. * **Typed Exceptions**: * Location: `src/agents-api/agents_api/common/exceptions/` * Pattern: Custom exception classes inheriting from base exceptions. * **Pydantic Models**: * Location: Used extensively across services, often in `models.py` files within component directories (e.g., `agents_api/common/protocol/`), or directly in router/activity files. * Pattern: Data validation, serialization, and settings management. * **Temporal Workflows & Activities**: * Location: `src/agents-api/agents_api/workflows/` (workflow definitions) and `src/agents-api/agents_api/activities/` (activity implementations). * Pattern: Define complex, stateful operations using Temporal's primitives. * **Database Queries & Models (Memory Store)**: * Location: `src/agents-api/agents_api/queries/` (for SQL query builders/files) and `src/memory-store/` (for schema migrations). * Pattern: Asyncpg for database interaction, often with helper functions for CRUD operations. --- ## 14. Domain-Specific Terminology * **Agent**: An AI entity with specific instructions, tools, and capabilities, defined via API. Core model in `src/typespec/agents/models.tsp`. * **Task**: A definition of a workflow composed of multiple steps that an agent can execute. Core model in `src/typespec/tasks/models.tsp`. * **Tool**: A specific capability or integration an agent can use (e.g., web search, API call). Defined in `src/typespec/tools/`. * **Session**: A container for a sequence of interactions (entries) with an agent, maintaining context. Core model in `src/typespec/sessions/models.tsp`. * **Entry**: A single message or event within a session (e.g., user input, agent response). Core model in `src/typespec/entries/models.tsp`. * **Execution**: The runtime instance and state of a task being performed by an agent. Core model in `src/typespec/executions/models.tsp`. * **POE (PoeThePoet)**: The task runner used in this project for development tasks like formatting, linting, testing, and code generation (configured in `pyproject.toml`). * **TypeSpec**: The language used to define API schemas. It is the source of truth for API models, which are then generated into Python Pydantic models in `autogen/` directories. * **Ward**: The primary Python testing framework used for unit and integration tests in most components (e.g., `agents-api`, `cli`). * **Temporal**: The distributed workflow engine used to orchestrate complex, long-running tasks and ensure their reliable execution. * **AIDEV-NOTE/TODO/QUESTION**: Specially formatted comments to provide inline context or tasks for AI assistants and developers. --- ## 15. Meta: Guidelines for updating AGENTS.md files ### Elements that would be helpful to add: 1. **Decision flowchart**: A simple decision tree for "when to use X vs Y" for key architectural choices would guide my recommendations. 2. **Reference links**: Links to key files or implementation examples that demonstrate best practices. 3. **Domain-specific terminology**: A small glossary of project-specific terms would help me understand domain language correctly. 4. **Versioning conventions**: How the project handles versioning, both for APIs and internal components. ### Format preferences: 1. **Consistent syntax highlighting**: Ensure all code blocks have proper language tags (`python`, `bash`, etc.). 2. **Hierarchical organization**: Consider using hierarchical numbering for subsections to make referencing easier. 3. **Tabular format for key facts**: The tables are very helpful - more structured data in tabular format would be valuable. 4. **Keywords or tags**: Adding semantic markers (like `#performance` or `#security`) to certain sections would help me quickly locate relevant guidance. [^1]: This principle emphasizes human oversight for critical aspects like architecture, testing, and domain-specific decisions, ensuring AI assists rather than fully dictates development. --- ## 16. Files to NOT modify These files control which files should be ignored by AI tools and indexing systems: * @.agentignore : Specifies files that should be ignored by the Cursor IDE, including: * Build and distribution directories * Environment and configuration files * Large data files (parquet, arrow, pickle, etc.) * Generated documentation * Package-manager files (lock files) * Logs and cache directories * IDE and editor files * Compiled binaries and media files * @.agentindexignore : Controls which files are excluded from Cursor's indexing to improve performance, including: * All files in `.agentignore` * Files that may contain sensitive information * Large JSON data files * Generated TypeSpec outputs * Memory-store migration files * Docker templates and configuration files **Never modify these ignore files** without explicit permission, as they're carefully configured to optimize IDE performance while ensuring all relevant code is properly indexed. **When adding new files or directories**, check these ignore patterns to ensure your files will be properly included in the IDE's indexing and AI assistance features. --- ## AI Assistant Workflow: Step-by-Step Methodology When responding to user instructions, the AI assistant (Claude, Cursor, GPT, etc.) should follow this process to ensure clarity, correctness, and maintainability: 1. **Consult Relevant Guidance**: When the user gives an instruction, consult the relevant instructions from `AGENTS.md` files (both root and directory-specific) for the request. 2. **Clarify Ambiguities**: Based on what you could gather, see if there's any need for clarifications. If so, ask the user targeted questions before proceeding. 3. **Break Down & Plan**: Break down the task at hand and chalk out a rough plan for carrying it out, referencing project conventions and best practices. 4. **Trivial Tasks**: If the plan/request is trivial, go ahead and get started immediately. 5. **Non-Trivial Tasks**: Otherwise, present the plan to the user for review and iterate based on their feedback. 6. **Track Progress**: Use a to-do list (internally, or optionally in a `TODOS.md` file) to keep track of your progress on multi-step or complex tasks. 7. **If Stuck, Re-plan**: If you get stuck or blocked, return to step 3 to re-evaluate and adjust your plan. 8. **Update Documentation**: Once the user's request is fulfilled, update relevant anchor comments (`AIDEV-NOTE`, etc.) and `AGENTS.md` files in the files and directories you touched. 9. **User Review**: After completing the task, ask the user to review what you've done, and repeat the process as needed. 10. **Session Boundaries**: If the user's request isn't directly related to the current context and can be safely started in a fresh session, suggest starting from scratch to avoid context confusion. ================================================ FILE: CHANGELOG.md ================================================
julep

Get API Key   Documentation

NPM Version   PyPI - Version   Docker Image Version   GitHub License

Discord · 𝕏 · LinkedIn

# **Julep AI Changelog for 21 May 2025** ✨ - **Major Feature**: Introduced first-class **Projects**! Adds `projects` table, association tables, CRUD endpoints, canonical-name support, and project-aware validation across agents, users, files, and sessions - **Major Feature**: Landed encrypted **Secrets Vault** with full CRUD API, master-key encryption, and transparent secret-reference substitution in tool & API definitions ([#1312](https://github.com/julep-ai/julep/pull/1312)) - **Enhancement**: Added **custom-key aliasing** for secrets plus numerous workflow & cost-tracking refactors ([#1356](https://github.com/julep-ai/julep/pull/1356)) - **Enhancement**: Added `decrypt` flag to secrets queries—retrieve values encrypted or in plaintext as needed ([#1369](https://github.com/julep-ai/julep/pull/1369)) - **Enhancement**: Implemented **monthly cost aggregation** + middleware that enforces free-tier usage caps and active-developer checks ([#1351](https://github.com/julep-ai/julep/pull/1351)) - **Fix**: Re-wrote project-resource SQL views for accurate mapping and removed weak default secrets key in production ([#1362](https://github.com/julep-ai/julep/pull/1362)) - **Fix**: Hardened secrets endpoints & models, fixed insert/delete logic, and expanded expression-evaluator edge-cases ([#1343](https://github.com/julep-ai/julep/pull/1343)) - **Enhancement**: New GitHub Actions workflow automatically translates README files via Anthropic Claude, replacing the old Python job ([#1433](https://github.com/julep-ai/julep/pull/1433)) - **Other Breaking**: Removed fallback for `DEMO_*` placeholder credentials 💥 - **Minor Docs**: Updated docs and cookbooks to remove `DEMO_API_KEY` references. - **Minor Docs**: Updated footer use-case links to the new `cookbooks/advanced` paths. > _This list covers the most significant code-related PRs merged to **main** on 21 May 2025. > For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-04-21)._ # **Julep AI Changelog for 15 May 2025** ✨ - **Minor Feature**: Updated `julep run` to execute tasks via the API with clearer error reporting ✨ - **Minor Docs**: Added examples for task execution and error handling in CLI docs 📚 # **Julep AI Changelog for 9 May 2025** ✨ - **Minor Docs**: Added links to cookbooks for Quick, Community, and Industry pages. - **Minor Docs**: Updated cookbook links to use absolute GitHub URLs. # **Julep AI Changelog for 11 April 2025** ✨ - **Major Feature**: Introduced support for Gemini models in `litellm-config.yaml` ✨ - **Minor Feature**: Added environment configuration for Open Responses API ✨ - **Critical Fix**: Corrected cardinality violations in SQL queries across agents-api 🔧 - **Minor Fix**: Resolved documentation formatting issues in 21 files 🔧 - **Minor Fix**: `get_live_urls` now uses `asyncio.to_thread` to avoid blocking the event loop 🔧 - **Major Enhancement**: Refactored API calls to include developer ID for better tracking 📈 - **Minor Enhancement**: Improved Gunicorn worker configurability via environment variables 📈 - **Secondary Performance**: Integrated OpenAPI model and TyeSpecs for expanded functionality 🚀 - **Critical Breaking**: Replaced Postgraphile with Hasura for GraphQL services 💥 - **Other Breaking**: Updated Docker configurations to adhere to new deployment requirements 💥 # **Julep AI Changelog for 14 February 2025** ✨ - **Major Feature**: Default `parallelism` in MapReduce now set to `task_max_parallelism` for optimized processing ✨ - **Minor Feature**: Backward compatibility support added for older syntax in `base_evaluate` ➕ - **Critical Fix**: Resolved data inconsistencies in subworkflow validations for smoother operations 🔧 - **Minor Fix**: Addressed hotfixes in `workflows.py` for robust workflow handling 🔧 - **Major Enhancement**: Introduced `backwards_compatibility` to refine evaluation logic 📈 - **Minor Enhancement**: Enhanced CLI documentation and guides for improved user understanding 📈 - **Key Performance**: Implemented Prometheus metrics for advanced monitoring and streamlined performance 🚀 - **Secondary Performance**: Enhanced task evaluation functions with efficient expression handling 🚀 - **Critical Breaking**: Deprecated legacy API with a migration guide for users 💥 - **Other Breaking**: Updated agent settings to be untyped, affecting configuration handling 💥 # **Julep AI Changelog for 31 January 2025** ✨ - **Major Feature**: Added experimental CLI with comprehensive management commands for agents and tasks ✨ - **Minor Feature**: Introduced new import functionality for agents in CLI ✨ - **Critical Fix**: Replaced `GITHUB_ENV` with `GITHUB_OUTPUT` for environment variable handling 🔧 - **Minor Fix**: Fixed CLI documentation by removing `pipx` installation 🔧 - **Major Enhancement**: Refactored task execution workflow for modularity 📈 - **Minor Enhancement**: Improved documentation with updated quickstart and lifecycle guides 📈 - **Key Performance**: Enhanced CLI with rich text and progress indicators 🚀 - **Secondary Performance**: Reduced API response times by 15% 🚀 - **Critical Breaking**: Removed `previous_inputs` parameter in workflows 💥 - **Other Breaking**: Deprecated legacy API (v1) to be removed next month 💥 ================================================ FILE: README.md ================================================
[Deutsch](https://www.readme-i18n.com/julep-ai/julep?lang=de) | [Español](https://www.readme-i18n.com/julep-ai/julep?lang=es) | [français](https://www.readme-i18n.com/julep-ai/julep?lang=fr) | [日本語](https://www.readme-i18n.com/julep-ai/julep?lang=ja) | [한국어](https://www.readme-i18n.com/julep-ai/julep?lang=ko) | [Português](https://www.readme-i18n.com/julep-ai/julep?lang=pt) | [Русский](https://www.readme-i18n.com/julep-ai/julep?lang=ru) | [中文](https://www.readme-i18n.com/julep-ai/julep?lang=zh)
``` ██╗ ██╗ ██╗ ██╗ ███████╗ ██████╗ █████╗ ██╗ ██║ ██║ ██║ ██║ ██╔════╝ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██║ ██║ █████╗ ██████╔╝ ███████║ ██║ ██ ██║ ██║ ██║ ██║ ██╔══╝ ██╔═══╝ ██╔══██║ ██║ ╚█████╔╝ ╚██████╔╝ ███████╗ ███████╗ ██║ ██║ ██║ ██║ ╚════╝ ╚═════╝ ╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ```

NPM Version   PyPI - Version   Docker Image Version   GitHub License

· ·

--- ## ⚠️ Important Notice: Julep is Shutting Down **The Julep backend and dashboard will shut down on December 31, 2025.** Julep is open source and you can continue using it by self-hosting. See the [Self-Hosting Guide](https://docs.julep.ai/advanced/localsetup) for instructions. **We're now working on [memory.store](https://memory.store/)** — check it out! ---

📖 Table of Contents

- [Why Julep?](#why-julep) - [Self-Hosting](#self-hosting) - [Documentation and Examples](#documentation-and-examples) - [Community and Contributions](#community-and-contributions) - [License](#license) ## Why Julep? Julep is an open-source platform for building **agent-based AI workflows** that go far beyond simple chains of prompts. It lets you orchestrate complex, multi-step processes with Large Language Models (LLMs) and tools **without managing any infrastructure**. With Julep, you can create AI agents that **remember past interactions** and handle sophisticated tasks with branching logic, loops, parallel execution, and integration of external APIs. In short, Julep acts like a *“Firebase for AI agents,”* providing a robust backend for intelligent workflows at scale. **Key Features and Benefits:** * **Persistent Memory:** Build AI agents that maintain context and long-term memory across conversations, so they can learn and improve over time. * **Modular Workflows:** Define complex tasks as modular steps (in YAML or code) with conditional logic, loops, and error handling. Julep’s workflow engine manages multi-step processes and decisions automatically. * **Tool Orchestration:** Easily integrate external tools and APIs (web search, databases, third-party services, etc.) as part of your agent’s toolkit. Julep’s agents can invoke these tools to augment their capabilities, enabling Retrieval-Augmented Generation and more. * **Parallel & Scalable:** Run multiple operations in parallel for efficiency, and let Julep handle scaling and concurrency under the hood. The platform is serverless, so it seamlessly scales workflows without extra devops overhead. * **Reliable Execution:** Don’t worry about glitches – Julep provides built-in retries, self-healing steps, and robust error handling to keep long-running tasks on track. You also get real-time monitoring and logging to track progress. * **Easy Integration:** Get started quickly with our SDKs for **Python** and **Node.js**, or use the Julep CLI for scripting. Julep’s REST API is available if you want to integrate directly into other systems. *Focus on your AI logic and creativity, while Julep takes care of the heavy lifting!* ## Self-Hosting Since the hosted version is shutting down, you can self-host Julep to continue using it. 1. **Install the SDK:** Install the Julep SDK for your preferred language: * **Python:** `pip install julep` * **Node.js:** `npm install @julep/sdk` (or `yarn add @julep/sdk`) 2. **Self-Host Julep:** Follow the [Self-Hosting Guide](https://docs.julep.ai/advanced/localsetup) to run Julep on your own infrastructure. 3. **Define Your Agent:** Use the SDK or YAML to define an agent and its task workflow. For example, you can specify the agent's memory, tools it can use, and a step-by-step task logic. (See the **[Quick Start](https://docs.julep.ai/introduction/quick-start)** in our docs for a detailed walkthrough.) 4. **Run a Workflow:** Invoke your agent through the SDK to execute the task. Julep will orchestrate the entire workflow and manage the state, tool calls, and LLM interactions for you. That's it! For a complete tutorial, check out the **[Quick Start Guide](https://docs.julep.ai/introduction/quick-start)** in the documentation. > **Note:** Julep also offers a command-line interface (CLI) to manage workflows and agents. See the [Julep CLI docs](https://docs.julep.ai/responses/quickstart#cli-installation) for details. ## Documentation and Examples Looking to dive deeper? The **[Julep Documentation](https://docs.julep.ai)** covers everything you need to master the platform – from core concepts (Agents, Tasks, Sessions, Tools) to advanced topics like agent memory management and architecture internals. Key resources include: * **[Concept Guides](https://docs.julep.ai/concepts/):** Learn about Julep’s architecture, how sessions and memory work, using tools, managing long conversations, and more. * **[API & SDK Reference](https://docs.julep.ai/api-reference/):** Find detailed reference for all SDK methods and REST API endpoints to integrate Julep into your applications. * **[Tutorials](https://docs.julep.ai/tutorials/):** Step-by-step guides for building real applications (e.g. a research agent that searches the web, a trip-planning assistant, or a chatbot with custom knowledge). * **[Cookbook Recipes](https://github.com/julep-ai/julep/tree/dev/cookbooks):** Explore the **Julep Cookbook** for ready-made example workflows and agents. These recipes demonstrate common patterns and use cases – a great way to learn by example. *Browse the [`cookbooks/`](https://github.com/julep-ai/julep/tree/dev/cookbooks) directory in this repository for sample agent definitions.* * **[IDE Integration](https://context7.com/julep-ai/julep):** Access Julep documentation directly in your IDE! Perfect for getting instant answers while coding. ## Community and Contributions Join our growing community of developers and AI enthusiasts! Here are some ways to get involved and get support: * **Discord Community:** Have questions or ideas? Join the conversation on our [official Discord server](https://discord.gg/7H5peSN9QP) to chat with other users. * **GitHub Discussions and Issues:** Feel free to use GitHub for reporting bugs, requesting features, or discussing implementation details. Check out the [**good first issues**](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) if you'd like to contribute – we welcome contributions of all kinds. * **Contributing:** If you want to contribute code or improvements, please see our [Contributing Guide](.github/CONTRIBUTING.md) for how to get started. We appreciate all PRs and feedback. *Pro tip: Star our repo to stay updated.*
Your contributions, big or small, are valuable to us. Let's build something amazing together!

Our Amazing Contributors:


## License Julep is offered under the **Apache 2.0 License**, which means it’s free to use in your own projects. See the [LICENSE](.github/LICENSE) file for details. Enjoy building with Julep! ================================================ FILE: changelog/Templates/JulepCustom/entries.html ================================================ {{> head}} {{> header}}
{{#entries}}

{{title}}

{{#summary}}

{{summary}}

{{/summary}}
{{/entries tagged "main"}}
{{> footer}} ================================================ FILE: changelog/Templates/JulepCustom/entry.html ================================================ {{> head}} {{> header}}

{{title}}

{{{html}}} {{#tags}} {{/tags}}
{{> footer}} ================================================ FILE: changelog/Templates/JulepCustom/footer.html ================================================ ================================================ FILE: changelog/Templates/JulepCustom/head.html ================================================ {{title}} ================================================ FILE: changelog/Templates/JulepCustom/header.html ================================================ ================================================ FILE: changelog/Templates/JulepCustom/package.json ================================================ { "name": "JulepCustom", "author": "Julep AI", "version": "0.1.0", "description": "Custom minimal template with main/dev channels", "locals": { "site": { "title": "Julep Changelog" } } } ================================================ FILE: changelog/Templates/JulepCustom/style.css ================================================ /* ────────────────────────────────────────────────────────── Julep Custom Template – CSS Simple, responsive, dark-mode aware styling for changelog ────────────────────────────────────────────────────────── */ :root{ --body-bg:#ffffff; --text-color:#111111; --link-color:#0077cc; --link-hover-color:#005fa3; --border-color:#e5e5e5; --container-width:680px; --stable-green:#28a745; --dev-orange:#d49144; } @media (prefers-color-scheme: dark){ :root{ --body-bg:#1e1e1e; --text-color:#f5f5f5; --link-color:#8ab4ff; --link-hover-color:#a8c6ff; --border-color:#333333; } } *{box-sizing:border-box;} body{ margin:0; background:var(--body-bg); color:var(--text-color); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif; line-height:1.6; font-size:17px; } a{color:var(--link-color);text-decoration:none;} a:hover{color:var(--link-hover-color);text-decoration:underline;} .container{ width:100%; max-width:var(--container-width); margin:0 auto; padding:0 1rem; } /* ── Header ─────────────────────────────── */ .site-header{ border-bottom:1px solid var(--border-color); padding:1rem 0; } .logo{margin:0;font-size:1.5rem;} .logo a{color:var(--text-color);text-decoration:none;} nav.channels{margin-top:.5rem;} nav.channels a{font-weight:600;margin-right:1rem;} nav.channels a.stable{color:var(--stable-green);} nav.channels a.dev{color:var(--dev-orange);} /* ── Entries list ───────────────────────── */ .entries-list .entry-list-item{ border-bottom:1px solid var(--border-color); padding:1.5rem 0; } .entries-list .entry-title{ margin:0; font-size:1.25rem; } .entry-meta{ margin:.3rem 0 .8rem; font-size:.9rem; color:var(--border-color); } .entry-summary{margin:.2rem 0 0;} /* ── Single entry page ──────────────────── */ .entry-page .entry-title{ margin-top:0; font-size:2rem; } .entry-tag{ display:inline-block; margin-right:.5rem; font-size:.85rem; opacity:.75; } /* ── Footer ─────────────────────────────── */ .site-footer{ border-top:1px solid var(--border-color); padding:1.5rem 0; font-size:.9rem; text-align:center; } ================================================ FILE: changelog/Templates/index-template/archives.html ================================================ {{> head}} {{> header}}

Archives

{{#archives}} {{#months}}

{{month}} {{year}}  {{entries.length}} post{{s}}

{{#entries}} {{title}}{{^last}}  · {{/last}} {{/entries}}
{{/months}} {{/archives}} {{> footer}} ================================================ FILE: changelog/Templates/index-template/entries.html ================================================ {{> head}} {{> header}} {{^pagination.previous}} {{> home-summary}}
{{/pagination.previous}} {{#pagination.previous}}Page {{pagination.current}} of {{pagination.total}}{{/pagination.previous}} {{^pagination.previous}}Latest posts:{{/pagination.previous}}

{{#entries}} {{title}} {{#date}} ·  {{date}}{{/date}} {{/entries}}


{{#pagination}} {{#previous}} ← Newer posts         {{/previous}} {{#next}} Next page → {{/next}}
Page {{current}} of {{total}}
{{/pagination}}
{{> footer}} ================================================ FILE: changelog/Templates/index-template/entry.html ================================================ {{> head}} {{> header}} {{#entry}}
{{#tags.length}}
{{#tags}} {{name}} {{/tags}}
{{/tags.length}} {{{html}}} {{#date}} Posted on {{date}} {{/date}} {{#tags.length}} {{#tags}}   #{{name}}   {{/tags}} {{/tags.length}} {{> pluginHTML}}





{{#adjacent}}
{{/adjacent}} {{#next}} ← Next post {{/next}} {{#next}}{{#previous}}   ·   {{/previous}}{{/next}} {{#previous}} Previous post → {{/previous}}
{{/entry}} {{> footer}} ================================================ FILE: changelog/Templates/index-template/error.html ================================================ {{> head}} {{> header}}

{{error.title}}

{{error.message}}

{{> footer}} ================================================ FILE: changelog/Templates/index-template/feed.rss ================================================ <![CDATA[ {{{title}}}]]> {{{blogURL}}} {{#recentEntries}} <![CDATA[ {{{title}}} ]]> {{{absoluteURL}}} {{{absoluteURL}}} {{! RSS feeds need a RFC 822 date}} {{#formatDate}}ddd, DD MMM YYYY HH:mm:ss ZZ{{/formatDate}} {{/recentEntries}} ================================================ FILE: changelog/Templates/index-template/footer.html ================================================ ================================================ FILE: changelog/Templates/index-template/head.html ================================================ {{> title}} {{#avatar}} {{/avatar}} ================================================ FILE: changelog/Templates/index-template/header.html ================================================
Website Dashboard Docs


================================================ FILE: changelog/Templates/index-template/home-summary.html ================================================

✨ Latest Highlights

15 August 2025 Release main ================================================ FILE: changelog/Templates/index-template/package.json ================================================ { "name": "Index", "locals": { "page_size": 20 }, "views": { "search.html": { "partials": { "title": "Search - {{{title}}}", "description": "Search all the entries posted on {{{title}}}" } }, "archives.html": { "url": "/archives", "partials": { "title": "Archives - {{{title}}}", "description": "All the entries posted on {{{title}}}" } }, "public.html": { "partials": { "title": "Index of {{{path}}}", "description": "All the files and folders inside {{{path}}}" } }, "entries.html": { "partials": { "title": "{{{title}}}", "description": "The latest entries posted on {{{title}}}" } }, "entry.html": { "partials": { "title": "{{{entry.title}}} - {{{title}}}", "description": "{{{entry.summary}}}" } }, "error.html": { "partials": { "title": "{{{error.title}}} - {{{title}}}", "description": "Error on {{{title}}}" } }, "tagged.html": { "partials": { "title": "Entries tagged {{{tag}}} from {{{title}}}", "description": "All of the entries posted on {{{title}}} tagged {{{tag}}}" } } } } ================================================ FILE: changelog/Templates/index-template/public.html ================================================ {{> head}}

{{#breadcrumbs}} {{name}} / {{/breadcrumbs}} {{dirname}}

{{#contents}} {{/contents}}
{{name}}
================================================ FILE: changelog/Templates/index-template/robots.txt ================================================ User-agent: * Allow: / Sitemap: {{{blogURL}}}/sitemap.xml ================================================ FILE: changelog/Templates/index-template/script.js ================================================ {{{appJS}}} // This script is embedded in the footer of every page ================================================ FILE: changelog/Templates/index-template/search.html ================================================ {{> head}} {{> header}}

{{#query}} {{^entries}}

Sorry, nothing found for “{{query}}”

{{/entries}} {{/query}} {{#entries}} {{title}} {{#date}} ·  {{date}}{{/date}} {{/entries}} {{> footer}} ================================================ FILE: changelog/Templates/index-template/sitemap.xml ================================================ {{blogURL}} {{blogURL}}/archives/ {{#menu}} {{#isPage}} {{blogURL}}{{url}}/ {{/isPage}} {{/menu}} {{#allEntries}} {{blogURL}}{{url}}/ {{/allEntries}} ================================================ FILE: changelog/Templates/index-template/style.css ================================================ /* This template tag is replaced by CSS when this file is rendered */ {{{appCSS}}} body { font: 1.125rem / 1.4 -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; word-wrap: break-word; max-width: 32em; margin: 0 auto; padding: 2.5em 1.25em 10em; color: #333; } /* Text */ a {color: inherit;text-decoration: none;padding: 0.25em 0.5em;background: none;margin: -0.25em -0.5em;border-radius: 4px;transition: background 0.2s ease;} a:hover {background: rgba(0,0,0,0.02);color: #468CC7;} a:active {opacity: 0.9} h1 {font-size: 2.25em;line-height:1.2;} h2 {font-size: 1.25em;} h3, h4, h5, h6 {font-size: 1em} hr {margin: 1.25em 0;border: 0;border-top: 1px solid #eee;} br {width: 100%;clear: both;float: none;} blockquote {padding: 0 0 0 0.75em;color: #777} small, .menu, .caption {color: #9e9e9e;font-weight: 400;} sup {font-size: 0.83;line-height: 0;vertical-align: super;} .entry {position: relative;} .entry a {text-decoration: underline;} .caption {font-size: smaller;} .caption {max-width: 36rem;display: block;margin: .625em auto 1.25em auto;} /* Theme specific styles */ #logo {font-weight: bold;display: inline-block;line-height: 1.75} #logo img {max-width: 8em;max-height:8em;margin-bottom: 0.25em} #logo img.rounded {border-radius: 50%;margin-left: -1em} #logo:hover {opacity: 0.8;background: none;color: inherit;} #logo:active {opacity: 0.75} a.menu {margin-right: 0em;line-height: 1.75} a.row { display: inline-block; position: relative; margin-top: 0.25em; margin-bottom: 0.25em; padding-right: 16em; width: 50vw; left: 50%; margin-left: -16.5em; } /* This allows the horizontal rules and full-width links on the index page to fill the entire screen without triggering a scrollbar */ hr.full { width: 50vw; padding-left: 16em; position: relative; left: 50%; margin-left: -16em; } .archive {color: black;line-height: 1.75;margin-bottom: 0} input[name=q] { display: inline-block; font-size: inherit; box-sizing: border-box; width: 70%; padding: 0.444em 0.666em; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); box-shadow: inset 0 1px 1px rgba(0,0,0,.075); -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; font-family: inherit; } input[type=submit] { display: inline-block; padding: 0.444em 0.666em; font-size: inherit; cursor: pointer; text-align: center; white-space: nowrap; border: 1px solid transparent; border-radius: 4px; padding-left: 2em; border: 1px solid #ccc; background: url(data:image/svg+xml;base64,PHN2ZyBpZD0iaWNvbi1zZWFyY2giIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGlkPSJzZWFyY2giIGQ9Ik03Ljk5LDYuOTI4TDUuODQ3LDQuNzg0YzAuMjg5LTAuNDc2LDAuNDU4LTEuMDMzLDAuNDU4LTEuNjNDNi4zMDUsMS40MTIsNC44OTUsMCwzLjE1MiwwDQoJQzEuNDExLDAsMCwxLjQxMiwwLDMuMTU0YzAsMS43NDEsMS40MTIsMy4xNTEsMy4xNTMsMy4xNTFjMC41OTcsMCwxLjE1NC0wLjE2OSwxLjYzLTAuNDU4bDIuMTQ1LDIuMTQ2TDcuOTksNi45Mjh6IE0xLjIwMywzLjE1NA0KCWMwLjAwMi0xLjA3NywwLjg3NC0xLjk0OSwxLjk1MS0xLjk1MWMxLjA3NiwwLjAwMiwxLjk0OCwwLjg3NCwxLjk0OSwxLjk1MUM1LjEwMSw0LjIzLDQuMjI5LDUuMTAzLDMuMTUzLDUuMTAzDQoJQzIuMDc1LDUuMTAzLDEuMjA1LDQuMjMsMS4yMDMsMy4xNTR6Ii8+DQo8L3N2Zz4=) 0.8em center/0.8em no-repeat; } input#search:focus { outline: none; } :-moz-placeholder {color: #ccc;} ::-moz-placeholder {color: #ccc;} :-ms-input-placeholder {color: #ccc;} ::-webkit-input-placeholder {color: #ccc;} a.footnote-ref {margin-left: 0;margin-right: 0;text-decoration: none;} /* CODE */ code { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; background: rgba(0,0,0,.03); border-radius: 4px; font-size: smaller; line-height: inherit; margin: 0; } p code { line-height: 1em; padding: 2px; margin-left: -2px; display: inline-block; } pre code { display: block;padding: 12px 18px; margin: 0 0 0 -18px; background-color: rgba(0,0,0,.02) } /* TABLES */ table { display: block; width: auto; overflow: auto; word-break: normal; word-break: keep-all; border-collapse: collapse; border-spacing: 0; box-sizing: border-box; font-size: inherit; line-height: inherit; } tr {box-sizing: border-box;border-top: 1px solid #ccc;padding: 0} th, td {box-sizing: border-box;border: 1px solid #ddd;padding: 5px 12px 6px} /* LISTS */ ul, ol { margin-left: 0; padding-left: 0; list-style-position: outside; margin-bottom: 1.25em; } ul {list-style: circle;} ul ul, ol ul, ol ol, ul ol {margin-left: 1.25em;margin-bottom: 0} li {margin: 0} /* IMAGES */ img {vertical-align: middle;max-width: 100%;height: auto;} /* VIDEOS & tweets */ /* Only apply vertical margin to direct descendants, prevents multi margins */ iframe {width: 100%;} .entry > iframe {margin: 1.25em 0!important;} /* Small caps */ .small-caps {} /* Double quote (") marks */ .pull-double{margin-left:-.45em} .push-double{margin-right:.45em} /* Single quote (') marks */ .pull-single{margin-left:-.20em} .push-single{margin-right:.20em} /* Optical margin alignment for particular letters */ .pull-T, .pull-V, .pull-W, .pull-Y {margin-left: -0.1em} .push-T, .push-V, .push-W, .push-Y {margin-right: 0.1em} .pull-O, .pull-C, .pull-o, .pull-c {margin-left: -0.06em} .push-O, .push-C, .push-o, .push-c {margin-right: 0.06em} .pull-A {margin-left: -0.04em} .push-A {margin-right: 0.04em} /* Layout tags */ .wide.left .caption {margin-left: 22.680412113%} .wide.right .caption {margin-right: 22.680412113%} .right {float: right;} .left {float: left;} .margin, .inside { box-sizing: border-box; width: 29.3333%; } .margin { position: absolute;} .left.inside {margin-right: 2em} .right.inside {margin-left: 2em} .margin blockquote {margin: 3px 0;color:#232323;padding: 3px 6px;font-size: smaller;} .margin blockquote p {margin: 0} .margin h1, .margin h2, .margin h3 {margin-top:0} .margin img, .column img {margin-top: 6px} .margin p, .inside p {font-style: italic;margin-top: 0} .left.margin { left: -29.3333%; padding-right: 2em; text-align: right; } .right.margin { right: -29.3333%; padding-left: 2em; } .wide { width: 158.6666667%; margin-left: -29.3333333%; overflow: auto; /* collapse internal margins */ } .wide.left, .wide.right {width: 129.3333333%;float: none;} .wide.left {margin: 0 0 0 -29.3333333%} .wide.right {margin: 0 -29.3333333% 0 0} .column { box-sizing: border-box; float: left; } .column .caption {margin-bottom: 6px} .column.two { width: 50%; padding-right: 12px; } .column.three { width: 33%; padding-right: 24px; } .column.two + .column.two { padding: 0 0 0 12px; } .column h1, .column h2, .column h3 {margin-bottom: -12px} /* The theme used by the syntax highlighting app */ .hljs {display: block;overflow-x: auto;} .hljs-comment, .hljs-quote, .hljs-variable {color: #008000;} .hljs-keyword, .hljs-selector-tag, .hljs-built_in, .hljs-name, .hljs-tag {color: #00f;} .hljs-string, .hljs-title, .hljs-section, .hljs-attribute, .hljs-literal, .hljs-template-tag, .hljs-template-variable, .hljs-type, .hljs-addition {color: #a31515;} .hljs-deletion, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-meta {color: #2b91af;} .hljs-doctag {color: #808080;} .hljs-attr {color: #f00;} .hljs-symbol, .hljs-bullet, .hljs-link {color: #00b0e8;} .hljs-emphasis {font-style: italic;} .hljs-strong {font-weight: bold;} @media screen and (max-width: 952px) { .entry .margin {position: relative;top: auto;left: auto;right: auto;bottom: auto;} .entry .margin.right {float: right;} .entry .margin.left {text-align: left;display: block;float: left;} .entry .margin .caption, .entry .margin p {margin-bottom: 6px;text-align: left;} .wide, .wide.left, .wide.right {width: 100%;margin: 0} .wide.left .caption {margin-left: 0} } @media screen and (max-width: 34em) { hr.full, a.row {width: 100%;margin-left: 0;margin-right:0;padding-right: 0;padding-left:0;position: relative;left: 0;} } @media screen and (max-width: 730px) { ul, li {margin-left: 24px} ul ul, ol ul, ol ol, ul ol {margin-left: 0} .nav .right {clear: both;float: none;margin-top: 3px} a.search {margin-left: 0} body {font-size: 1rem;padding: 1rem} } @media screen and (max-width: 400px) { body {font-size: 0.9rem;padding: 0.5rem;margin: 0} } /* ───────────────────────────────────────────── Julep Custom – Channel navigation styles ------------------------------------------------------------------ */ nav.channels{ margin-top:.5rem; } nav.channels a{ font-weight:600; margin-right:1rem; } nav.channels a.stable{ color:#28a745; } nav.channels a.dev{ color:#d49144; } /* ───────────────────────────────────────────── Tag badges for entry pages ------------------------------------------------------------------ */ .tag-badges{ margin-bottom:1rem; } .tag{ display:inline-block; font-size:0.75rem; font-weight:600; padding:0.2em 0.6em; border-radius:4px; margin-right:0.4rem; text-transform:uppercase; } .tag a{color:#fff;text-decoration:none;} .tag.main{background:#28a745;color:#fff;} .tag.dev{background:#d49144;color:#fff;} /* ───────────────────────────────────────────── Footer styles ------------------------------------------------------------------ */ .container{ width:100%; max-width:32em; margin:0 auto; padding:0 1rem; } .site-footer{ border-top:1px solid #eee; padding:2rem 0; text-align:center; font-size:.85rem; color:#9e9e9e; } .site-footer a{color:inherit;text-decoration:none;} .site-footer a:hover{text-decoration:underline;} ================================================ FILE: changelog/Templates/index-template/tagged.html ================================================ {{> head}} {{> header}}

{{tag}}


All posts tagged {{tag}}: {{#entries}} {{title}} {{#date}} ·  {{date}}{{/date}} {{/entries}} {{> footer}} ================================================ FILE: changelog/dev/2025-06-17.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-17 tags: [dev] --- - Added automated Claude-driven documentation update workflows for PR events - Added manual workflow dispatch for on-demand documentation updates - Added automated changelog generation for PRs targeting main and dev branches - Added changelog synchronization with external Blot blog platform - Added skip logic with `[skip-claude]` tag to prevent infinite automation loops - Added changelog templates and infrastructure for automated publishing ================================================ FILE: changelog/dev/2025-06-23.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-23 tags: [dev] --- ## Development Updates - Added automated Claude-driven documentation update workflows - Introduced changelog sync automation with Blot blog platform - Implemented manual trigger workflows for documentation updates - Added gating logic to determine when documentation updates are needed - Created templates for changelog presentation and styling - Added `include_embeddings` parameter to document APIs for bandwidth optimization ================================================ FILE: changelog/dev/2025-06-25.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-25 tags: [dev] --- ## Julep AI Changelog - June 25, 2025 - Extended `include_embeddings` parameter to document search endpoints for additional bandwidth optimization ================================================ FILE: changelog/dev/2025-06-26.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-26 tags: [dev] --- ## Julep AI Changelog - June 26, 2025 - Added `include_embeddings` parameter to document APIs for bandwidth optimization - Added JWT allowed skew configuration option for improved token validation flexibility - Pinned vectorizer worker to version v0.10.5 for improved stability ================================================ FILE: changelog/dev/2025-06-30.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-30 tags: [dev] --- ## Julep AI Changelog - June 30, 2025 ### Tool Calling Enhancements - Added comprehensive tool calling functionality in tasks and sessions for enhanced agent capabilities - Added integration tools conversion to OpenAI-compatible format for better tool interoperability - Added new tool runner system for improved tool execution and management ### New API Parameters - Added prompt step parameters: `tool_choice`, `unwrap`, `auto_run_tools`, and `disable_cache` for granular control - Added session parameters: `auto_run_tools` and `forward_tool_calls` for enhanced session behavior ### Anthropic Tool Support - Added support for new Anthropic tool types: `computer_20241022`, `text_editor_20241022`, and `bash_20241022` ### Infrastructure & Platform - Added feature flags integration using Unleash with OpenFeature for controlled feature rollouts - Refactored prompt steps to integrate with tool runner functionalities for better performance ================================================ FILE: changelog/dev/2025-07-02.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-02 tags: [dev] --- ## Julep AI Changelog - July 2, 2025 ### Tool Calling Updates - Changed default value of `auto_run_tools` from `true` to `false` in PromptStep for safer defaults - Fixed tool call prevention when `auto_run_tools` is disabled by passing empty tools list to model - Added comprehensive test coverage for `auto_run_tools` behavior in both enabled and disabled states ### API Schema Enhancements - Renamed `ApiCallDef` to separate `ApiCallDef-Input` and `ApiCallDef-Output` variants for better type safety - Added new parameter schema definitions: `ParameterSchema-Input`, `ParameterSchema-Output`, and `ParameterSchemaUpdate` - Added property definition types: `PropertyDefinition-Input`, `PropertyDefinition-Output`, and `PropertyDefinitionUpdate` ================================================ FILE: changelog/dev/2025-07-03.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-03 tags: [dev] --- ## Julep AI Changelog - July 3, 2025 ### Chat API Enhancements - Added `auto_run_tools` property to ChatInput with default value of `false` - Added `recall_tools` property to ChatInput with default value of `true` for controlling tool recall - Implemented automatic tool execution when `auto_run_tools=true` - tools are executed automatically and results fed back to the model - Added new chat implementation that supports automatic tool calling workflow - Separated legacy and new chat code for better maintainability ### API Architecture Improvements - Refactored `execute_integration` and `execute_system` functions to accept explicit parameters instead of context objects - Added context-free tool execution capability for use in chat endpoints - Improved code organization with dedicated auto-tools and legacy directories ================================================ FILE: changelog/dev/2025-07-04.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-04 tags: [dev] --- ## Julep AI Changelog - July 4, 2025 ### Chat API Enhancements - Added `recall_tools` property to ChatInput with default value of `true` - Enhanced chat session control over tool request/response recall behavior - Improved automatic tool execution workflow with better message history management ================================================ FILE: changelog/dev/2025-07-05.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-05 tags: [dev] --- ## Julep AI Changelog - July 5, 2025 ### Documentation Enhancements - Enhanced documentation for automatic tool execution across chat, sessions, and tools - Added comprehensive examples and usage patterns for `auto_run_tools` and `recall_tools` - Added documentation for `params_schema` in API call tools with JSON Schema validation - Updated SDK documentation with new tool integration examples for Python and Node.js ================================================ FILE: changelog/dev/2025-07-08.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-08 tags: [dev] --- ## Julep AI Changelog - July 8, 2025 ### Model Additions - Added gemini-2.5-pro model to LiteLLM configuration - Added gemini-2.5-flash model to LiteLLM configuration ================================================ FILE: changelog/dev/2025-07-09.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-09 tags: [dev] --- ## Julep AI Changelog - July 9, 2025 ### Features - Enhanced LLM client to support custom API keys from user secrets - Added model name conversion utility for LiteLLM integration - Added automated workflow to sync model documentation from configuration - Enhanced supported models page with transparent feature comparison tables - Added comprehensive model capability tracking (context window, max output, tool calling, vision, audio, caching, cost tiers) ### Bug Fixes - Fixed cartesian product bug in get_task query that caused duplicate tools - Re-enabled model validation in session chat rendering ================================================ FILE: changelog/dev/2025-07-18.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-18 tags: [dev] --- ## Julep AI Changelog - July 18, 2025 ### Documentation - Added explanatory note about dollar expressions (`$`) in task definitions for dynamic variable referencing ================================================ FILE: changelog/dev/2025-07-31.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-31 tags: [dev] --- - Added secrets support to task definitions for secure access in task expressions - Removed support for claude-3-sonnet model from LLM proxy configuration ================================================ FILE: changelog/dev/2025-08-06.md ================================================ --- title: "Julep AI Changelog" date: 2025-08-06 tags: [dev] --- - Added gemini-2.5-pro-preview-06-05 model to LLM proxy configuration ================================================ FILE: changelog/dev/2025-08-07.md ================================================ --- title: "Julep AI Changelog" date: 2025-08-07 tags: [dev] --- - Added Llama model cost multiplier with LLAMA_MODEL_MULTIPLIER environment variable - Enhanced usage tracking with automatic Llama model detection - Deprecated discontinued Groq models (llama-3.1-70b, mistral-saba-24b, qwen-qwq-32b) - Migrated Cerebras models to OpenRouter endpoints - Updated model configurations in LLM proxy ================================================ FILE: changelog/dev/2025-08-08.md ================================================ --- title: "Julep AI Changelog" date: 2025-08-08 tags: [dev] --- - Migrated Anthropic models from direct API to AWS Bedrock endpoints - Updated LiteLLM version from 1.57.0 to 1.74.9 for improved compatibility - Added Bedrock API key support and AWS region configuration - Re-enabled claude-3-sonnet model via Bedrock integration - Added new claude-opus-4-1 model support - Updated dependency versions for enhanced Bedrock integration ================================================ FILE: changelog/dev/2025-08-15.md ================================================ --- title: "Julep AI Changelog" date: 2025-08-15 tags: [dev] --- - Added support for GPT-5 model family with 8 variants (gpt-5, gpt-5-mini, gpt-5-nano) - Added comprehensive GPT-5 documentation including capabilities, pricing, and parameters - Added GPT-5 models to LiteLLM proxy configuration with appropriate tags and API keys ================================================ FILE: changelog/stable (main)/2025-01-31.md ================================================ --- title: "Julep AI Changelog" date: 2025-01-31 tags: [main] --- - **Major Feature**: Added experimental CLI with comprehensive management commands for agents and tasks ✨ - **Minor Feature**: Introduced new import functionality for agents in CLI ✨ - **Critical Fix**: Replaced `GITHUB_ENV` with `GITHUB_OUTPUT` for environment variable handling 🔧 - **Minor Fix**: Fixed CLI documentation by removing `pipx` installation 🔧 - **Major Enhancement**: Refactored task execution workflow for modularity 📈 - **Minor Enhancement**: Improved documentation with updated quickstart and lifecycle guides 📈 - **Key Performance**: Enhanced CLI with rich text and progress indicators 🚀 - **Secondary Performance**: Reduced API response times by 15% 🚀 - **Critical Breaking**: Removed `previous_inputs` parameter in workflows 💥 - **Other Breaking**: Deprecated legacy API (v1) to be removed next month 💥 ================================================ FILE: changelog/stable (main)/2025-02-14.md ================================================ --- title: "Julep AI Changelog" date: 2025-02-14 tags: [main] --- - **Major Feature**: Default `parallelism` in MapReduce now set to `task_max_parallelism` for optimized processing ✨ - **Minor Feature**: Backward compatibility support added for older syntax in `base_evaluate` ➕ - **Critical Fix**: Resolved data inconsistencies in subworkflow validations for smoother operations 🔧 - **Minor Fix**: Addressed hotfixes in `workflows.py` for robust workflow handling 🔧 - **Major Enhancement**: Introduced `backwards_compatibility` to refine evaluation logic 📈 - **Minor Enhancement**: Enhanced CLI documentation and guides for improved user understanding 📈 - **Key Performance**: Implemented Prometheus metrics for advanced monitoring and streamlined performance 🚀 - **Secondary Performance**: Enhanced task evaluation functions with efficient expression handling 🚀 - **Critical Breaking**: Deprecated legacy API with a migration guide for users 💥 - **Other Breaking**: Updated agent settings to be untyped, affecting configuration handling 💥 ================================================ FILE: changelog/stable (main)/2025-04-11.md ================================================ --- title: "Julep AI Changelog" date: 2025-04-11 tags: [main] --- - **Major Feature**: Introduced support for Gemini models in `litellm-config.yaml` ✨ - **Minor Feature**: Added environment configuration for Open Responses API ✨ - **Critical Fix**: Corrected cardinality violations in SQL queries across agents-api 🔧 - **Minor Fix**: Resolved documentation formatting issues in 21 files 🔧 - **Minor Fix**: `get_live_urls` now uses `asyncio.to_thread` to avoid blocking the event loop 🔧 - **Major Enhancement**: Refactored API calls to include developer ID for better tracking 📈 - **Minor Enhancement**: Improved Gunicorn worker configurability via environment variables 📈 - **Secondary Performance**: Integrated OpenAPI model and TyeSpecs for expanded functionality 🚀 - **Critical Breaking**: Replaced Postgraphile with Hasura for GraphQL services 💥 - **Other Breaking**: Updated Docker configurations to adhere to new deployment requirements 💥 ================================================ FILE: changelog/stable (main)/2025-05-09.md ================================================ --- title: "Julep AI Changelog" date: 2025-05-09 tags: [main] --- - **Minor Docs**: Added links to cookbooks for Quick, Community, and Industry pages. - **Minor Docs**: Updated cookbook links to use absolute GitHub URLs. ================================================ FILE: changelog/stable (main)/2025-05-21.md ================================================ --- title: "Julep AI Changelog" date: 2025-05-21 tags: [main] --- - **Major Feature**: Introduced first-class **Projects**! Adds `projects` table, association tables, CRUD endpoints, canonical-name support, and project-aware validation across agents, users, files, and sessions - **Major Feature**: Landed encrypted **Secrets Vault** with full CRUD API, master-key encryption, and transparent secret-reference substitution in tool & API definitions ([#1312](https://github.com/julep-ai/julep/pull/1312)) - **Enhancement**: Added **custom-key aliasing** for secrets plus numerous workflow & cost-tracking refactors ([#1356](https://github.com/julep-ai/julep/pull/1356)) - **Enhancement**: Added `decrypt` flag to secrets queries—retrieve values encrypted or in plaintext as needed ([#1369](https://github.com/julep-ai/julep/pull/1369)) - **Enhancement**: Implemented **monthly cost aggregation** + middleware that enforces free-tier usage caps and active-developer checks ([#1351](https://github.com/julep-ai/julep/pull/1351)) - **Fix**: Re-wrote project-resource SQL views for accurate mapping and removed weak default secrets key in production ([#1362](https://github.com/julep-ai/julep/pull/1362)) - **Fix**: Hardened secrets endpoints & models, fixed insert/delete logic, and expanded expression-evaluator edge-cases ([#1343](https://github.com/julep-ai/julep/pull/1343)) - **Enhancement**: New GitHub Actions workflow automatically translates README files via Anthropic Claude, replacing the old Python job ([#1433](https://github.com/julep-ai/julep/pull/1433)) - **Other Breaking**: Removed fallback for `DEMO_*` placeholder credentials 💥 - **Minor Docs**: Updated docs and cookbooks to remove `DEMO_API_KEY` references. - **Minor Docs**: Updated footer use-case links to the new `cookbooks/advanced` paths. > _This list covers the most significant code-related PRs merged to **main** on 21 May 2025. > For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-04-21)._ --- ================================================ FILE: changelog/stable (main)/2025-06-23.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-23 tags: [main] --- - **Major Feature**: Added **metadata support** to chat functionality - enables dynamic system template variables at message level - **Major Feature**: Extended **agent and task schemas** with project fields and secret references for enhanced configuration management - **Major Feature**: Added **encrypted API keys infrastructure** with PostgreSQL storage, AES256 encryption, and soft delete functionality - **Major Feature**: Added **comprehensive system templates documentation** covering template hierarchy, variables, Jinja2 features, and best practices - **Enhancement**: Refactored **analytics service** setup - switched to official Metabase image with dedicated PostgreSQL database - **Enhancement**: Added **new LLM model configurations** - extended Groq support with Llama 4, DeepSeek, and other latest models - **Enhancement**: Added **optional trigram search** capabilities for improved document search performance - **Documentation**: Updated chat API docs with metadata parameter examples and usage patterns - **Documentation**: Enhanced agent and session documentation with system template references - **Documentation**: Added advanced guide for system templates with debugging techniques and best practices - **Enhancement**: Code formatting improvements with consistent multi-line type annotations across autogenerated models - **Enhancement**: Added comprehensive test coverage for chat metadata functionality with edge case handling > _This list covers the most significant code-related changes merged to **main** on 23 June 2025. > For everything else, see the full list of [recent pull requests](https://github.com/julep-ai/julep/pulls?q=is:pr+created:>=2025-05-23)._ --- ================================================ FILE: changelog/stable (main)/2025-06-30.md ================================================ --- title: "Julep AI Changelog" date: 2025-06-30 tags: [main] --- # Changes for June 30, 2025 - Added IDE Integration documentation for Context7 MCP server access - Enhanced integrations documentation with visual slider component and new asset logos - Restructured documentation navigation from versions to tabs layout - Added custom CSS styling for documentation CTA buttons - Fixed JSON serialization mode in tool creation API ================================================ FILE: changelog/stable (main)/2025-07-04.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-04 tags: [main] --- # Changes for July 4, 2025 - Added automatic tool execution with `auto_run_tools` parameter for enhanced agent workflows - Added tool recall control with `recall_tools` parameter for better conversation management - Implemented OpenAI-compatible tool format conversion for improved integration compatibility - Added support for new Anthropic tool types: computer, text editor, and bash tools - Enhanced tool calling system with dedicated tool runner for better performance - Added feature flags integration using Unleash for controlled feature rollouts - Improved API schema with separate input/output type definitions for better type safety - Enhanced prompt step parameters with tool choice, unwrap, and caching control options - Refactored chat API with auto-tools support and legacy code separation - Added comprehensive tool execution capabilities for both tasks and sessions ================================================ FILE: changelog/stable (main)/2025-07-05.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-05 tags: [main] --- # Changes for July 5, 2025 - Added feature flags infrastructure with Unleash integration for controlled feature rollouts - Added auto-tools chat implementation with automatic tool execution capabilities - Added enhanced tool runner utilities for improved tool execution performance - Added parameter schema support for API call tools with JSON Schema validation - Added `auto_run_tools` and `recall_tools` fields to chat input for better control - Changed `auto_run_tools` default from `true` to `false` in prompt step definitions - Enhanced tool execution system with support for all tool types - Added modular architecture separating legacy and auto-tools implementations - Added comprehensive test coverage for new auto-tools functionality - Fixed tool metadata query column alias and improved error handling ================================================ FILE: changelog/stable (main)/2025-07-08.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-08 tags: [main] --- # Changes for July 8, 2025 - Added gemini-2.5-pro model to LiteLLM configuration with paid tier access - Added gemini-2.5-flash model to LiteLLM configuration with paid tier access - Added comprehensive customer support tutorial showing how to build RAG-powered AI assistants - Added new architecture diagram SVG for improved system visualization - Enhanced documentation structure with new tutorial navigation - Updated architecture deep-dive documentation with latest system design ================================================ FILE: changelog/stable (main)/2025-07-18.md ================================================ --- title: "Julep AI Changelog" date: 2025-07-18 tags: [main] --- ## Julep AI Changelog - July 18, 2025 ### Features - Enhanced LLM client to support custom API keys from user secrets - Added model name conversion utility for LiteLLM integration - Added automated workflow to sync model documentation from configuration - Enhanced supported models page with transparent feature comparison tables - Added comprehensive model capability tracking (context window, max output, tool calling, vision, audio, caching, cost tiers) ### Bug Fixes - Fixed cartesian product bug in get_task query that caused duplicate tools - Re-enabled model validation in session chat rendering ================================================ FILE: cookbooks/IDEAS.md ================================================
julep

Get API Key   Documentation

NPM Version   PyPI - Version   Docker Image Version   GitHub License

Discord · 𝕏 · LinkedIn

# Expanded Implementation Scenarios for Julep Below are detailed implementation plans for each of the 50 scenarios using Julep's **docs**, **sessions**, **tasks**, and **executions** features. Each scenario includes a complexity rating from **1 (easiest)** to **5 (most complex)**. --- ### 1. Automated Customer Support Agent **Implementation Using Julep:** - **Docs:** - Store customer data, FAQs, and troubleshooting guides. - Integrate CRM documentation for accessing and updating customer information. - **Sessions:** - Create a persistent session for each customer to maintain conversation context. - Track interaction history to personalize support. - **Tasks:** - Define tasks for handling common inquiries (e.g., order status, billing issues). - Implement escalation tasks for complex issues that require human intervention. - Automate ticket creation and update processes. - **Executions:** - Execute tasks based on customer inputs. - Monitor task executions to ensure timely responses and issue resolutions. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integrating with external CRM systems, handling diverse query types, and maintaining contextual sessions, which increases complexity. --- ### 2. Smart Research Assistant **Implementation Using Julep:** - **Docs:** - Store access to academic databases and research papers. - Include summarization templates and research methodologies. - **Sessions:** - Manage user-specific research sessions to track ongoing projects and queries. - Maintain context for multi-step research tasks. - **Tasks:** - Create tasks for searching databases, summarizing articles, and compiling reports. - Implement conditional steps based on research findings. - **Executions:** - Execute research tasks sequentially or in parallel. - Stream execution results to provide real-time updates to the user. **Complexity Rating:** ★★★★☆ **Explanation:** Requires integration with academic databases, advanced summarization capabilities, and managing complex multi-step workflows. --- ### 3. Personal Finance Manager **Implementation Using Julep:** - **Docs:** - Store user financial data, budgeting templates, and investment information. - Integrate banking API documentation for transaction fetching. - **Sessions:** - Create persistent sessions to track user financial activities over time. - Maintain context for budgeting goals and financial plans. - **Tasks:** - Define tasks for expense tracking, budget creation, and investment monitoring. - Automate alerts for budget limits and investment opportunities. - **Executions:** - Execute financial tasks based on user interactions and predefined schedules. - Monitor executions to provide real-time financial advice and updates. **Complexity Rating:** ★★★☆☆ **Explanation:** Needs secure integration with banking APIs, real-time data processing, and robust budgeting logic. --- ### 4. Content Creation Workflow **Implementation Using Julep:** - **Docs:** - Store SEO guidelines, content templates, and style guides. - Include access to keyword research tools. - **Sessions:** - Manage content creation sessions to track progress and drafts. - Maintain context for ongoing content projects. - **Tasks:** - Create multi-step tasks for topic ideation, content drafting, SEO optimization, and scheduling. - Integrate tools for grammar checking and SEO analysis. - **Executions:** - Automate the execution of content creation tasks. - Schedule publishing according to editorial calendars. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves coordinating multiple tools and steps but remains manageable with clear task definitions. --- ### 5. E-commerce Order Processing System **Implementation Using Julep:** - **Docs:** - Store product catalogs, inventory data, and order processing guidelines. - Integrate with shipping provider APIs. - **Sessions:** - Create sessions for each order to track its lifecycle. - Maintain context for customer preferences and order history. - **Tasks:** - Define tasks for order validation, inventory updates, payment processing, and shipment tracking. - Automate customer notifications at each stage. - **Executions:** - Execute order processing tasks in sequence. - Monitor executions to handle exceptions like payment failures or inventory shortages. **Complexity Rating:** ★★★★☆ **Explanation:** Requires robust integrations with payment gateways, inventory systems, and shipping providers, along with handling various order states. --- ### 6. AI-Powered Personal Trainer **Implementation Using Julep:** - **Docs:** - Store workout routines, nutritional plans, and progress tracking templates. - Include integration details for fitness tracking APIs. - **Sessions:** - Create individual sessions for each user to track their fitness journey. - Maintain context for user goals and progress. - **Tasks:** - Define tasks for generating personalized workout plans, tracking progress, and adjusting routines. - Automate reminders and motivational messages. - **Executions:** - Execute fitness tasks based on user inputs and scheduled routines. - Monitor executions to provide real-time feedback and adjustments. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves personalization and integration with fitness data sources, but achievable with well-defined task workflows. --- ### 7. Automated Email Marketing Campaigns **Implementation Using Julep:** - **Docs:** - Store email templates, segmentation criteria, and campaign schedules. - Integrate with email marketing platforms (e.g., SendGrid, Mailchimp). - **Sessions:** - Manage campaign-specific sessions to track interactions and responses. - Maintain context for ongoing and past campaigns. - **Tasks:** - Create tasks for email creation, scheduling, sending, and performance analysis. - Automate A/B testing and content personalization. - **Executions:** - Execute email campaigns based on predefined schedules and triggers. - Monitor execution performance and adjust strategies accordingly. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with email platforms and managing dynamic content delivery, but is straightforward with clear task definitions. --- ### 8. Intelligent Recruitment Assistant **Implementation Using Julep:** - **Docs:** - Store job descriptions, candidate profiles, and evaluation criteria. - Integrate with HR systems and job boards. - **Sessions:** - Create sessions for each recruitment process to track candidate interactions. - Maintain context for candidate status and feedback. - **Tasks:** - Define tasks for resume screening, interview scheduling, and candidate communications. - Automate feedback collection and report generation. - **Executions:** - Execute recruitment tasks based on candidate actions and application stages. - Monitor executions to ensure timely processing and compliance. **Complexity Rating:** ★★★★★ **Explanation:** Involves complex integrations with HR systems, handling diverse candidate data, and ensuring compliance with recruitment processes. --- ### 9. Smart Home Automation Controller **Implementation Using Julep:** - **Docs:** - Store device configurations, automation rules, and user preferences. - Integrate with smart home device APIs (e.g., Philips Hue, Nest). - **Sessions:** - Manage user-specific sessions to track home automation settings. - Maintain context for user routines and preferences. - **Tasks:** - Create tasks for device control, routine scheduling, and energy monitoring. - Automate actions based on triggers like time, occupancy, or environmental changes. - **Executions:** - Execute home automation tasks in real-time or based on schedules. - Monitor executions to ensure devices respond correctly and adjust settings as needed. **Complexity Rating:** ★★★★☆ **Explanation:** Requires integration with multiple smart devices and managing dynamic automation rules, increasing system complexity. --- ### 10. Automated Legal Document Analyzer **Implementation Using Julep:** - **Docs:** - Store legal templates, compliance guidelines, and case studies. - Integrate with legal databases and document repositories. - **Sessions:** - Create sessions for each document analysis to track progress and findings. - Maintain context for specific legal requirements and clauses. - **Tasks:** - Define tasks for document ingestion, key information extraction, compliance checking, and summarization. - Automate flagging of non-compliant sections and suggest necessary amendments. - **Executions:** - Execute document analysis tasks sequentially or in parallel. - Monitor executions to ensure accuracy and compliance with legal standards. **Complexity Rating:** ★★★★★ **Explanation:** Involves advanced natural language processing, integration with legal databases, and ensuring compliance with intricate legal standards. --- ### 11. Personalized Learning Assistant **Implementation Using Julep:** - **Docs:** - Store educational content, learning paths, and assessment criteria. - Integrate with educational platforms and resources. - **Sessions:** - Create individual learning sessions to track user progress and preferences. - Maintain context for personalized learning paths and goals. - **Tasks:** - Define tasks for content recommendation, quiz generation, progress tracking, and feedback provision. - Automate adjustments to learning paths based on performance. - **Executions:** - Execute learning tasks based on user interactions and progress. - Monitor executions to provide real-time feedback and adjust learning strategies. **Complexity Rating:** ★★★★☆ **Explanation:** Requires personalization algorithms, integration with educational content sources, and dynamic adaptation to user progress. --- ### 12. AI-Driven Social Media Manager **Implementation Using Julep:** - **Docs:** - Store social media strategies, content calendars, and engagement guidelines. - Integrate with social media APIs (e.g., Twitter, Facebook, LinkedIn). - **Sessions:** - Manage campaign-specific sessions to track posts, engagements, and analytics. - Maintain context for ongoing and scheduled campaigns. - **Tasks:** - Create tasks for content creation, scheduling, posting, and performance analysis. - Automate engagement responses and A/B testing of content. - **Executions:** - Execute social media tasks based on schedules and real-time engagement triggers. - Monitor executions to optimize performance and adjust strategies. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integration with multiple social media platforms, dynamic content management, and real-time engagement handling. --- ### 13. Automated Travel Itinerary Planner **Implementation Using Julep:** - **Docs:** - Store travel guides, destination information, and booking APIs. - Integrate with flight, hotel, and transportation service APIs. - **Sessions:** - Create travel-specific sessions to track itinerary progress and user preferences. - Maintain context for personalized travel plans and updates. - **Tasks:** - Define tasks for destination research, booking accommodations and transportation, and itinerary scheduling. - Automate real-time updates and notifications during trips. - **Executions:** - Execute travel planning tasks based on user inputs and predefined schedules. - Monitor executions to handle changes and provide timely updates. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with travel service APIs and managing dynamic itinerary changes, which adds moderate complexity. --- ### 14. AI-Powered Inventory Management System **Implementation Using Julep:** - **Docs:** - Store inventory data, supplier information, and reordering guidelines. - Integrate with inventory tracking systems and supplier APIs. - **Sessions:** - Manage inventory sessions to monitor stock levels and reorder statuses. - Maintain context for inventory forecasts and demand trends. - **Tasks:** - Create tasks for stock monitoring, demand forecasting, automatic reordering, and supplier communication. - Automate alerts for low stock levels and order confirmations. - **Executions:** - Execute inventory management tasks in real-time or based on schedules. - Monitor executions to ensure accurate stock levels and timely reorders. **Complexity Rating:** ★★★★☆ **Explanation:** Requires real-time inventory tracking, predictive analytics for demand forecasting, and reliable integration with supplier systems. --- ### 15. Intelligent Health Monitoring System **Implementation Using Julep:** - **Docs:** - Store health metrics templates, medical guidelines, and user health data. - Integrate with health tracking devices and APIs (e.g., Fitbit, Apple Health). - **Sessions:** - Create sessions for each user to track their health metrics and progress. - Maintain context for personalized health goals and alerts. - **Tasks:** - Define tasks for data collection, health metric analysis, trend monitoring, and alert notifications. - Automate health insights and recommendations based on data. - **Executions:** - Execute health monitoring tasks continuously or at scheduled intervals. - Monitor executions to provide real-time health alerts and advice. **Complexity Rating:** ★★★★☆ **Explanation:** Requires integration with diverse health tracking devices, real-time data processing, and ensuring data privacy and accuracy. --- ### 16. Automated Content Moderation Tool **Implementation Using Julep:** - **Docs:** - Store community guidelines, content policies, and moderation rules. - Integrate with content platforms (e.g., forums, social media). - **Sessions:** - Manage moderation sessions to track content reviews and decisions. - Maintain context for specific moderation cases and user histories. - **Tasks:** - Create tasks for content ingestion, automated screening, manual review, and action enforcement. - Automate flagging of inappropriate content and notifying users of violations. - **Executions:** - Execute content moderation tasks in real-time or batch processing. - Monitor executions to ensure compliance and handle escalations. **Complexity Rating:** ★★★★★ **Explanation:** Involves sophisticated content analysis, balancing automation with manual oversight, and ensuring adherence to diverse content policies. --- ### 17. AI-Powered Resume Builder **Implementation Using Julep:** - **Docs:** - Store resume templates, industry-specific keywords, and formatting guidelines. - Integrate with LinkedIn and other professional platforms for data fetching. - **Sessions:** - Create user-specific sessions to track resume building progress. - Maintain context for personalized content and formatting preferences. - **Tasks:** - Define tasks for data collection, content suggestion, resume formatting, and final export. - Automate style checks and consistency validations. - **Executions:** - Execute resume building tasks based on user inputs and selections. - Monitor executions to provide real-time feedback and suggestions. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with professional data sources and implementing dynamic content generation and formatting. --- ### 18. Smart Event Management System **Implementation Using Julep:** - **Docs:** - Store event templates, scheduling guidelines, and registration forms. - Integrate with calendar and email platforms. - **Sessions:** - Manage event-specific sessions to track registrations, schedules, and attendee interactions. - Maintain context for event updates and follow-ups. - **Tasks:** - Create tasks for event creation, attendee registration, schedule management, and post-event follow-ups. - Automate reminders, notifications, and feedback collection. - **Executions:** - Execute event management tasks based on schedules and attendee actions. - Monitor executions to handle registrations and event logistics seamlessly. **Complexity Rating:** ★★★★☆ **Explanation:** Involves coordinating multiple aspects of event planning, handling real-time registrations, and ensuring smooth execution logistics. --- ### 19. Automated Survey Analyzer **Implementation Using Julep:** - **Docs:** - Store survey templates, question types, and analysis methodologies. - Integrate with survey distribution platforms (e.g., SurveyMonkey, Google Forms). - **Sessions:** - Create sessions for each survey to track responses and analysis progress. - Maintain context for specific survey objectives and parameters. - **Tasks:** - Define tasks for survey distribution, data collection, sentiment analysis, and report generation. - Automate data visualization and trend identification. - **Executions:** - Execute survey analysis tasks upon survey completion. - Monitor executions to provide timely and accurate insights. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with survey platforms and implementing effective data analysis and visualization techniques. --- ### 20. AI-Driven Project Management Assistant **Implementation Using Julep:** - **Docs:** - Store project templates, task guidelines, and progress tracking tools. - Integrate with project management platforms (e.g., Jira, Trello). - **Sessions:** - Manage project-specific sessions to track tasks, milestones, and team interactions. - Maintain context for project goals and progress updates. - **Tasks:** - Create tasks for task breakdown, assignment, progress tracking, and status reporting. - Automate notifications for deadlines and task completions. - **Executions:** - Execute project management tasks based on project timelines and team inputs. - Monitor executions to ensure projects stay on track and within scope. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integration with diverse project management tools, handling dynamic task assignments, and ensuring effective progress tracking. --- ### 21. Intelligent Document Summarizer **Implementation Using Julep:** - **Docs:** - Store access to large documents, research papers, and reports. - Include summarization algorithms and templates. - **Sessions:** - Create sessions for each document summarization task. - Maintain context for document sections and summarization preferences. - **Tasks:** - Define tasks for document ingestion, key point extraction, and summary generation. - Automate quality checks and user-specific summary adjustments. - **Executions:** - Execute document summarization tasks efficiently. - Monitor executions to ensure accurate and concise summaries. **Complexity Rating:** ★★★★☆ **Explanation:** Requires advanced natural language processing capabilities and efficient handling of large document data. --- ### 22. Automated Feedback Collection and Analysis **Implementation Using Julep:** - **Docs:** - Store feedback forms, analysis templates, and reporting guidelines. - Integrate with feedback collection platforms (e.g., Typeform, Google Forms). - **Sessions:** - Manage feedback-specific sessions to track responses and analysis progress. - Maintain context for feedback sources and analysis objectives. - **Tasks:** - Create tasks for feedback distribution, data collection, sentiment analysis, and insight generation. - Automate categorization and prioritization of feedback. - **Executions:** - Execute feedback analysis tasks promptly upon data collection. - Monitor executions to provide actionable insights and improvement strategies. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves integrating with feedback platforms and implementing effective sentiment analysis and categorization. --- ### 23. AI-Powered Language Translator **Implementation Using Julep:** - **Docs:** - Store language dictionaries, translation models, and formatting guidelines. - Integrate with translation APIs (e.g., Google Translate, DeepL). - **Sessions:** - Create translation-specific sessions to track user preferences and translation history. - Maintain context for ongoing translation projects. - **Tasks:** - Define tasks for text ingestion, language detection, translation processing, and quality assurance. - Automate post-translation formatting and localization adjustments. - **Executions:** - Execute translation tasks in real-time or batch mode. - Monitor executions to ensure accuracy and contextual relevance. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with robust translation APIs and handling nuances of different languages and contexts. --- ### 24. Smart Appointment Scheduler **Implementation Using Julep:** - **Docs:** - Store scheduling templates, availability guidelines, and notification templates. - Integrate with calendar platforms (e.g., Google Calendar, Outlook). - **Sessions:** - Manage appointment-specific sessions to track scheduling progress and attendee interactions. - Maintain context for user availability and preferences. - **Tasks:** - Create tasks for availability checking, meeting scheduling, sending reminders, and handling cancellations. - Automate conflict detection and resolution. - **Executions:** - Execute scheduling tasks based on user inputs and calendar data. - Monitor executions to ensure appointments are set correctly and notifications are sent. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves integration with calendar systems and implementing conflict resolution logic, which adds moderate complexity. --- ### 25. Automated Inventory Auditor **Implementation Using Julep:** - **Docs:** - Store inventory audit templates, reconciliation guidelines, and reporting formats. - Integrate with inventory management systems and databases. - **Sessions:** - Create auditing sessions to track audit schedules and findings. - Maintain context for different inventory categories and audit criteria. - **Tasks:** - Define tasks for data extraction, discrepancy detection, reconciliation processes, and report generation. - Automate audit scheduling and notification of audit results. - **Executions:** - Execute inventory audit tasks periodically or on-demand. - Monitor executions to ensure accurate and timely audits. **Complexity Rating:** ★★★★☆ **Explanation:** Requires reliable data integration and robust discrepancy detection mechanisms to handle complex inventory data. --- ### 26. AI-Driven Competitive Analysis Tool **Implementation Using Julep:** - **Docs:** - Store competitor profiles, market analysis frameworks, and data sources. - Integrate with market research APIs and competitor websites. - **Sessions:** - Manage competitive analysis sessions to track data collection and analysis progress. - Maintain context for specific market segments and competitive factors. - **Tasks:** - Create tasks for data scraping, trend analysis, SWOT analysis, and report generation. - Automate the aggregation and visualization of competitive data. - **Executions:** - Execute competitive analysis tasks on a scheduled basis. - Monitor executions to provide up-to-date insights and strategic recommendations. **Complexity Rating:** ★★★★☆ **Explanation:** Involves complex data scraping, accurate trend analysis, and maintaining up-to-date competitive insights, increasing overall complexity. --- ### 27. Smart Recipe Generator **Implementation Using Julep:** - **Docs:** - Store ingredient databases, recipe templates, and dietary guidelines. - Integrate with nutrition APIs and grocery databases. - **Sessions:** - Create user-specific sessions to track dietary preferences and past recipes. - Maintain context for ingredient availability and nutritional goals. - **Tasks:** - Define tasks for ingredient analysis, recipe generation, nutritional calculation, and grocery list creation. - Automate recipe suggestions based on user inputs and constraints. - **Executions:** - Execute recipe generation tasks in real-time based on user requests. - Monitor executions to ensure recipe accuracy and adherence to dietary needs. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with nutrition and grocery APIs and implementing intelligent recipe generation logic. --- ### 28. Automated Video Content Creator **Implementation Using Julep:** - **Docs:** - Store video script templates, editing guidelines, and publishing schedules. - Integrate with video editing and hosting platforms (e.g., Adobe Premiere, YouTube). - **Sessions:** - Manage video creation sessions to track script development, editing stages, and publishing. - Maintain context for ongoing video projects and collaboration. - **Tasks:** - Create tasks for script generation, video editing, thumbnail creation, and publishing. - Automate content review and approval workflows. - **Executions:** - Execute video creation tasks based on project timelines. - Monitor executions to ensure timely releases and quality standards. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integration with multiple video tools, managing creative workflows, and ensuring high-quality content production. --- ### 29. AI-Powered News Aggregator **Implementation Using Julep:** - **Docs:** - Store news source lists, categorization templates, and summarization guidelines. - Integrate with news APIs (e.g., NewsAPI, RSS feeds). - **Sessions:** - Create user-specific sessions to track news preferences and reading history. - Maintain context for personalized news feeds and topics of interest. - **Tasks:** - Define tasks for news scraping, categorization, summarization, and personalization. - Automate feed generation and delivery based on user preferences. - **Executions:** - Execute news aggregation tasks periodically. - Monitor executions to ensure timely and relevant news delivery. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires efficient news scraping, accurate categorization, and personalized summarization, but is manageable with clear task workflows. --- ### 30. Intelligent Appointment Follow-Up System **Implementation Using Julep:** - **Docs:** - Store follow-up templates, feedback forms, and communication guidelines. - Integrate with CRM and email platforms. - **Sessions:** - Manage follow-up sessions to track appointments and subsequent communications. - Maintain context for previous interactions and follow-up actions. - **Tasks:** - Create tasks for sending follow-up emails, collecting feedback, and scheduling future appointments. - Automate reminder notifications and feedback analysis. - **Executions:** - Execute follow-up tasks based on appointment completions. - Monitor executions to ensure timely and effective communications. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves integration with CRM systems and implementing automated communication workflows, adding moderate complexity. --- ### 31. Automated Compliance Monitoring Tool **Implementation Using Julep:** - **Docs:** - Store regulatory guidelines, compliance checklists, and reporting templates. - Integrate with internal systems and regulatory databases. - **Sessions:** - Create compliance-specific sessions to track monitoring activities and audit trails. - Maintain context for various compliance standards and organizational policies. - **Tasks:** - Define tasks for continuous monitoring, policy enforcement, and compliance reporting. - Automate detection of non-compliant activities and trigger corrective actions. - **Executions:** - Execute compliance monitoring tasks in real-time. - Monitor executions to ensure ongoing adherence to regulations and standards. **Complexity Rating:** ★★★★★ **Explanation:** Requires comprehensive integration with organizational systems, robust monitoring mechanisms, and ensuring adherence to multifaceted regulatory requirements. --- ### 32. AI-Powered Personal Shopper **Implementation Using Julep:** - **Docs:** - Store product catalogs, user preference data, and recommendation algorithms. - Integrate with e-commerce APIs (e.g., Amazon, Shopify). - **Sessions:** - Manage shopping sessions to track user preferences and purchase history. - Maintain context for personalized product recommendations. - **Tasks:** - Create tasks for product suggestion, wishlist management, and deal notifications. - Automate price comparisons and availability checks. - **Executions:** - Execute personal shopping tasks based on user inputs and behavior. - Monitor executions to provide timely recommendations and alerts. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integration with multiple e-commerce platforms, implementing personalized recommendation logic, and handling real-time deal tracking. --- ### 33. Smart Content Personalization Engine **Implementation Using Julep:** - **Docs:** - Store content variants, personalization rules, and user segmentation data. - Integrate with website CMS and analytics platforms. - **Sessions:** - Create user-specific sessions to track interactions and preferences. - Maintain context for personalized content delivery. - **Tasks:** - Define tasks for content analysis, user behavior tracking, and personalized content delivery. - Automate A/B testing and content optimization based on performance metrics. - **Executions:** - Execute content personalization tasks in real-time. - Monitor executions to adjust personalization strategies dynamically. **Complexity Rating:** ★★★★☆ **Explanation:** Requires real-time user behavior tracking, dynamic content delivery, and continuous optimization based on analytics, increasing system complexity. --- ### 34. Automated Debt Collection Agent **Implementation Using Julep:** - **Docs:** - Store debt agreements, payment schedules, and communication templates. - Integrate with financial systems and payment gateways. - **Sessions:** - Manage debt collection sessions to track debtor interactions and payment statuses. - Maintain context for individual debtors and their payment histories. - **Tasks:** - Create tasks for sending payment reminders, negotiating payment plans, and issuing notifications. - Automate follow-ups and escalation procedures for delinquent accounts. - **Executions:** - Execute debt collection tasks based on payment statuses and schedules. - Monitor executions to ensure effective communication and resolution. **Complexity Rating:** ★★★★☆ **Explanation:** Involves sensitive financial data handling, integration with payment systems, and implementing automated negotiation workflows. --- ### 35. AI-Driven Talent Matching System **Implementation Using Julep:** - **Docs:** - Store job descriptions, candidate profiles, and matching criteria. - Integrate with job boards and professional networking platforms. - **Sessions:** - Create sessions for each matching process to track candidate-job pairings. - Maintain context for specific job requirements and candidate qualifications. - **Tasks:** - Define tasks for candidate screening, skills matching, and recommendation generation. - Automate notifications to both candidates and employers regarding match statuses. - **Executions:** - Execute talent matching tasks based on incoming job postings and candidate applications. - Monitor executions to ensure accurate and timely matches. **Complexity Rating:** ★★★★★ **Explanation:** Requires sophisticated matching algorithms, integration with diverse data sources, and handling dynamic job and candidate data. --- ### 36. Intelligent Expense Reporting Tool **Implementation Using Julep:** - **Docs:** - Store expense categories, reimbursement policies, and reporting templates. - Integrate with financial systems and expense tracking APIs. - **Sessions:** - Manage expense reporting sessions to track submissions and approvals. - Maintain context for individual employee expenses and budget limits. - **Tasks:** - Create tasks for expense submission, approval workflows, and reimbursement processing. - Automate validation checks and compliance with policies. - **Executions:** - Execute expense reporting tasks based on submission triggers and approval workflows. - Monitor executions to ensure timely reimbursements and policy adherence. **Complexity Rating:** ★★★★☆ **Explanation:** Requires integration with financial systems, implementing approval workflows, and ensuring compliance with expense policies. --- ### 37. Automated Meeting Minutes Recorder **Implementation Using Julep:** - **Docs:** - Store meeting agendas, transcription templates, and summary guidelines. - Integrate with audio transcription services (e.g., Otter.ai, Google Speech-to-Text). - **Sessions:** - Create meeting-specific sessions to track transcription and summarization progress. - Maintain context for meeting topics and participant interactions. - **Tasks:** - Define tasks for audio ingestion, transcription, summary generation, and distribution. - Automate the extraction of action items and key decisions. - **Executions:** - Execute transcription and summarization tasks in real-time or post-meeting. - Monitor executions to ensure accurate recordings and timely distribution. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires reliable audio transcription integration and effective summarization techniques, but manageable with clear task definitions. --- ### 38. AI-Driven Content Recommendation System **Implementation Using Julep:** - **Docs:** - Store user profiles, content metadata, and recommendation algorithms. - Integrate with content management systems and user behavior analytics. - **Sessions:** - Manage user-specific sessions to track interactions and preference changes. - Maintain context for personalized content delivery. - **Tasks:** - Define tasks for content analysis, user behavior tracking, and recommendation generation. - Automate personalization based on real-time user interactions. - **Executions:** - Execute content recommendation tasks in real-time. - Monitor executions to refine recommendation accuracy and relevance. **Complexity Rating:** ★★★★☆ **Explanation:** Involves real-time data processing, advanced recommendation algorithms, and integration with multiple content sources. --- ### 39. Smart Time Tracking Assistant **Implementation Using Julep:** - **Docs:** - Store time tracking templates, productivity guidelines, and reporting formats. - Integrate with productivity tools (e.g., Toggl, Clockify). - **Sessions:** - Create user-specific sessions to track time spent on tasks and projects. - Maintain context for task prioritization and productivity goals. - **Tasks:** - Define tasks for time logging, productivity analysis, and report generation. - Automate reminders for time tracking and productivity tips based on usage patterns. - **Executions:** - Execute time tracking tasks continuously or based on user actions. - Monitor executions to provide real-time productivity insights and suggestions. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with time tracking tools and implementing effective productivity analysis logic. --- ### 40. Automated Webinar Hosting Assistant **Implementation Using Julep:** - **Docs:** - Store webinar schedules, registration forms, and hosting guidelines. - Integrate with webinar platforms (e.g., Zoom, WebinarJam). - **Sessions:** - Manage webinar-specific sessions to track registrations, attendee interactions, and follow-ups. - Maintain context for webinar topics and participant engagement. - **Tasks:** - Create tasks for webinar scheduling, participant management, live interactions, and post-webinar follow-ups. - Automate reminders, thank-you emails, and feedback collection. - **Executions:** - Execute webinar hosting tasks based on schedules and participant actions. - Monitor executions to ensure smooth webinar operations and effective follow-ups. **Complexity Rating:** ★★★★☆ **Explanation:** Involves integration with webinar platforms, managing live interactions, and handling post-event processes seamlessly. --- ### 41. AI-Powered Inventory Forecasting Tool **Implementation Using Julep:** - **Docs:** - Store sales data, forecasting models, and inventory guidelines. - Integrate with sales and inventory tracking systems. - **Sessions:** - Create forecasting sessions to track sales trends and inventory predictions. - Maintain context for seasonal factors and market conditions affecting inventory. - **Tasks:** - Define tasks for data collection, trend analysis, prediction model execution, and report generation. - Automate alerts for predicted stock shortages or surpluses. - **Executions:** - Execute forecasting tasks periodically based on sales data updates. - Monitor executions to refine prediction accuracy and adjust inventory strategies. **Complexity Rating:** ★★★★☆ **Explanation:** Requires advanced predictive analytics, integration with sales systems, and handling dynamic market conditions influencing inventory. --- ### 42. Smart Contract Management System **Implementation Using Julep:** - **Docs:** - Store smart contract templates, execution guidelines, and compliance rules. - Integrate with blockchain platforms (e.g., Ethereum, Hyperledger). - **Sessions:** - Manage contract-specific sessions to track creation, execution, and monitoring. - Maintain context for contract terms and participant interactions. - **Tasks:** - Create tasks for contract creation, deployment, execution monitoring, and compliance checks. - Automate notifications for contract milestones and compliance alerts. - **Executions:** - Execute smart contract tasks based on blockchain events and predefined triggers. - Monitor executions to ensure contract integrity and compliance. **Complexity Rating:** ★★★★★ **Explanation:** Involves blockchain integration, ensuring smart contract security, and managing complex execution and compliance workflows. --- ### 43. Automated Knowledge Base Updater **Implementation Using Julep:** - **Docs:** - Store knowledge base articles, update guidelines, and categorization rules. - Integrate with content management systems and information sources. - **Sessions:** - Create knowledge base sessions to track updates, revisions, and user queries. - Maintain context for content accuracy and relevance. - **Tasks:** - Define tasks for content ingestion, information extraction, categorization, and publishing. - Automate periodic reviews and updates based on new information sources. - **Executions:** - Execute knowledge base update tasks as new content becomes available. - Monitor executions to ensure timely and accurate information updates. **Complexity Rating:** ★★★★☆ **Explanation:** Requires efficient content ingestion, accurate information extraction, and seamless integration with knowledge management systems. --- ### 44. AI-Driven Fraud Detection System **Implementation Using Julep:** - **Docs:** - Store fraud detection algorithms, monitoring guidelines, and incident response protocols. - Integrate with financial transaction systems and security APIs. - **Sessions:** - Manage fraud detection sessions to track suspicious activities and investigations. - Maintain context for user behavior patterns and anomaly detection. - **Tasks:** - Create tasks for real-time transaction monitoring, anomaly detection, incident logging, and alerting. - Automate response actions like freezing accounts or notifying security teams. - **Executions:** - Execute fraud detection tasks continuously based on transaction flows. - Monitor executions to ensure timely detection and response to fraudulent activities. **Complexity Rating:** ★★★★★ **Explanation:** Involves real-time data processing, sophisticated anomaly detection algorithms, and ensuring robust security measures. --- ### 45. Intelligent Personal Diary Assistant **Implementation Using Julep:** - **Docs:** - Store diary templates, emotional analysis guidelines, and reflection prompts. - Integrate with sentiment analysis APIs. - **Sessions:** - Create user-specific sessions to track daily entries and emotional states. - Maintain context for personal growth and mood trends. - **Tasks:** - Define tasks for daily entry prompts, sentiment analysis, and insight generation. - Automate privacy controls and data encryption for secure diary storage. - **Executions:** - Execute diary assistant tasks daily based on user inputs. - Monitor executions to provide personalized insights and growth tracking. **Complexity Rating:** ★★★☆☆ **Explanation:** Requires integration with sentiment analysis tools and ensuring secure data handling, but manageable with well-defined workflows. --- ### 46. Automated Language Learning Tutor **Implementation Using Julep:** - **Docs:** - Store language lessons, exercise templates, and feedback guidelines. - Integrate with language processing APIs and educational resources. - **Sessions:** - Manage learning sessions to track user progress and performance. - Maintain context for personalized lesson plans and feedback. - **Tasks:** - Create tasks for lesson delivery, exercise generation, progress tracking, and feedback provision. - Automate adaptive learning paths based on user performance. - **Executions:** - Execute language learning tasks based on user interactions and learning schedules. - Monitor executions to adjust learning strategies and provide real-time feedback. **Complexity Rating:** ★★★★☆ **Explanation:** Involves adaptive learning algorithms, integration with language processing tools, and personalized content delivery. --- ### 47. AI-Powered Budgeting Tool for Businesses **Implementation Using Julep:** - **Docs:** - Store budgeting templates, financial guidelines, and reporting formats. - Integrate with accounting systems and financial data sources. - **Sessions:** - Create budgeting sessions to track financial planning and expenditure. - Maintain context for organizational financial goals and constraints. - **Tasks:** - Define tasks for budget creation, expenditure tracking, financial forecasting, and report generation. - Automate alerts for budget overruns and financial goal assessments. - **Executions:** - Execute budgeting tasks based on financial data updates and planning cycles. - Monitor executions to ensure accurate financial tracking and reporting. **Complexity Rating:** ★★★★☆ **Explanation:** Requires integration with accounting systems, accurate financial forecasting, and robust budgeting logic to handle business complexities. --- ### 48. Smart Compliance Documentation Generator **Implementation Using Julep:** - **Docs:** - Store compliance templates, regulatory guidelines, and documentation standards. - Integrate with regulatory databases and internal policy systems. - **Sessions:** - Manage compliance documentation sessions to track document creation and updates. - Maintain context for specific regulatory requirements and organizational policies. - **Tasks:** - Create tasks for document generation, compliance checking, format validation, and publishing. - Automate updates based on regulatory changes and policy revisions. - **Executions:** - Execute compliance documentation tasks as needed or on a schedule. - Monitor executions to ensure documents meet all compliance standards. **Complexity Rating:** ★★★★☆ **Explanation:** Involves dynamic document generation, adherence to detailed regulatory standards, and ensuring continuous updates based on regulatory changes. --- ### 49. Automated Product Recommendation Engine **Implementation Using Julep:** - **Docs:** - Store product catalogs, user behavior data, and recommendation algorithms. - Integrate with e-commerce platforms and user analytics tools. - **Sessions:** - Create user-specific sessions to track interactions and preferences. - Maintain context for personalized recommendation accuracy. - **Tasks:** - Define tasks for data collection, behavior analysis, recommendation generation, and user feedback integration. - Automate real-time recommendations based on user actions and trends. - **Executions:** - Execute recommendation tasks in real-time to provide instant suggestions. - Monitor executions to refine algorithms and improve recommendation relevance. **Complexity Rating:** ★★★★☆ **Explanation:** Requires sophisticated recommendation algorithms, real-time data processing, and continuous refinement based on user feedback. --- ### 50. Intelligent Event Feedback Analyzer **Implementation Using Julep:** - **Docs:** - Store feedback forms, analysis templates, and reporting standards. - Integrate with event platforms and feedback collection tools. - **Sessions:** - Manage feedback-specific sessions to track responses and analysis progress. - Maintain context for event-specific feedback and improvement areas. - **Tasks:** - Create tasks for feedback collection, sentiment analysis, trend identification, and report generation. - Automate the extraction of actionable insights and improvement suggestions. - **Executions:** - Execute feedback analysis tasks post-event. - Monitor executions to ensure accurate and timely feedback processing and reporting. **Complexity Rating:** ★★★☆☆ **Explanation:** Involves integrating with feedback collection tools and implementing effective sentiment analysis and trend identification mechanisms. --- # Complexity and Difficulty Ratings The scenarios have been rated based on the number of integrated features, required integrations, and overall system complexity. Here's a quick overview: - **★☆☆☆☆ (1/5): Easiest** - **★★☆☆☆ (2/5): Low Complexity** - **★★★☆☆ (3/5): Moderate Complexity** - **★★★★☆ (4/5): High Complexity** - **★★★★★ (5/5): Most Complex** | **Scenario** | **Complexity Rating** | |---------------------------------------------------|-----------------------| | 1. Automated Customer Support Agent | ★★★★☆ | | 2. Smart Research Assistant | ★★★★☆ | | 3. Personal Finance Manager | ★★★☆☆ | | 4. Content Creation Workflow | ★★★☆☆ | | 5. E-commerce Order Processing System | ★★★★☆ | | 6. AI-Powered Personal Trainer | ★★★☆☆ | | 7. Automated Email Marketing Campaigns | ★★★☆☆ | | 8. Intelligent Recruitment Assistant | ★★★★★ | | 9. Smart Home Automation Controller | ★★★★☆ | | 10. Automated Legal Document Analyzer | ★★★★★ | | 11. Personalized Learning Assistant | ★★★★☆ | | 12. AI-Driven Social Media Manager | ★★★★☆ | | 13. Automated Travel Itinerary Planner | ★★★☆☆ | | 14. AI-Powered Inventory Management System | ★★★★☆ | | 15. Intelligent Health Monitoring System | ★★★★☆ | | 16. Automated Content Moderation Tool | ★★★★★ | | 17. AI-Powered Resume Builder | ★★★☆☆ | | 18. Smart Event Management System | ★★★★☆ | | 19. Automated Survey Analyzer | ★★★☆☆ | | 20. AI-Driven Project Management Assistant | ★★★★☆ | | 21. Intelligent Document Summarizer | ★★★★☆ | | 22. Automated Feedback Collection and Analysis | ★★★☆☆ | | 23. AI-Powered Language Translator | ★★★☆☆ | | 24. Smart Appointment Scheduler | ★★★☆☆ | | 25. Automated Inventory Auditor | ★★★★☆ | | 26. AI-Driven Competitive Analysis Tool | ★★★★☆ | | 27. Smart Recipe Generator | ★★★☆☆ | | 28. Automated Video Content Creator | ★★★★☆ | | 29. AI-Powered News Aggregator | ★★★☆☆ | | 30. Intelligent Appointment Follow-Up System | ★★★☆☆ | | 31. Automated Compliance Monitoring Tool | ★★★★★ | | 32. AI-Powered Personal Shopper | ★★★★☆ | | 33. Smart Content Personalization Engine | ★★★★☆ | | 34. Automated Debt Collection Agent | ★★★★☆ | | 35. AI-Driven Talent Matching System | ★★★★★ | | 36. Intelligent Expense Reporting Tool | ★★★★☆ | | 37. Automated Meeting Minutes Recorder | ★★★☆☆ | | 38. AI-Driven Content Recommendation System | ★★★★☆ | | 39. Smart Time Tracking Assistant | ★★★☆☆ | | 40. Automated Webinar Hosting Assistant | ★★★★☆ | | 41. AI-Powered Inventory Forecasting Tool | ★★★★☆ | | 42. Smart Contract Management System | ★★★★★ | | 43. Automated Knowledge Base Updater | ★★★★☆ | | 44. AI-Driven Fraud Detection System | ★★★★★ | | 45. Intelligent Personal Diary Assistant | ★★★☆☆ | | 46. Automated Language Learning Tutor | ★★★★☆ | | 47. AI-Powered Budgeting Tool for Businesses | ★★★★☆ | | 48. Smart Compliance Documentation Generator | ★★★★☆ | | 49. Automated Product Recommendation Engine | ★★★★☆ | | 50. Intelligent Event Feedback Analyzer | ★★★☆☆ | --- # Conclusion These 50 scenarios showcase the versatility and power of Julep's **docs**, **sessions**, **tasks**, and **executions** features in automating and enhancing various business and personal workflows. Depending on your specific needs and available integrations, these scenarios can be tailored to create efficient, intelligent, and scalable solutions. Feel free to explore these scenarios, adapt them to your use cases, and contribute to expanding Julep's capabilities further! ================================================ FILE: cookbooks/README.md ================================================
julep

Get API Key   Documentation

NPM Version   PyPI - Version   Docker Image Version   GitHub License

Discord · 𝕏 · LinkedIn

# Julep AI - Notebook Overview Welcome to the **Julep AI Notebook Collection**! This directory contains a set of Jupyter notebooks designed to showcase various AI and automation tasks using Julep's features. Each notebook explores a unique use case, demonstrating different aspects of Julep's capabilities. Below is a quick overview of the notebooks, their purpose, and a link to run each of them on Google Colab. ## Basics Series | **Notebook Name** | **Colab Link** | **Description** | **Implemented** | |------------------ |--------------- |----------------- |----------------- | | `01-Hello-Agent.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/basics/01-Hello-Agent.ipynb) | Create a simple agent and chat with it | Yes | | `02-Simple-Task.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/basics/02-Simple-Task.ipynb) | Define and run a basic task | Yes | | `03-Adding-Tools.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/basics/03-Adding-Tools.ipynb) | Attach a tool to the agent | Yes | | `04-Parallel-Steps.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/basics/04-Parallel-Steps.ipynb) | Execute steps in parallel | Yes | | `05-RAG-and-Docs.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/basics/05-RAG-and-Docs.ipynb) | Use documents for RAG style responses | Yes | ## Advanced Examples | **Notebook Name** | **Colab Link** | **Description** | **Implemented** | |------------------ |--------------- |----------------- |----------------- | | `00-Devfest-Email-Assistant.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/00-Devfest-Email-Assistant.ipynb) | Email assistant for managing DevFest communications | Yes | | `01-website-crawler.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/01-website-crawler.ipynb) | Implements a web crawler using a spider to extract website content | Yes | | `02-sarcastic-news-headline-generator.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/02-sarcastic-news-headline-generator.ipynb) | Generates sarcastic news headlines using a Brave Search Tool | Yes | | `03-trip-planning-assistant.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/03-trip-planning-assistant.ipynb) | Plans trips using weather data and location information | Yes | | `04-hook-generator-trending-reels.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/04-hook-generator-trending-reels.ipynb) | Generates engaging hooks for trending social media reels | Yes | | `05-video-processing-with-natural-language.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/05-video-processing-with-natural-language.ipynb) | Processes videos using natural language commands | Yes | | `06-browser-use.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/06-browser-use.ipynb) | Demonstrates browser automation capabilities | Yes | | `07-personalized-research-assistant.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/07-personalized-research-assistant.ipynb) | Demonstrates personalized research assistant capabilities | Yes | | `08-rag-chatbot.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/08-rag-chatbot.ipynb) | Demonstrates RAG chatbot capabilities | Yes | | `09-companion-agent.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/09-companion-agent.ipynb) | Demonstrates companion agent capabilities like story generation, user persona management, and more | Yes | | `10-reel-generator.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/advanced/10-reel-generator.ipynb) | Demonstrates reel generator capabilities | Yes | ## Potential Cookbooks for Contributors We welcome contributions to expand our cookbook collection. Here are some ideas for new cookbooks that showcase various Julep features and use cases: | **Potential Cookbook Name** | **Description** | **Key Features** | |---------------------------- |----------------- |------------------| | Daily News Aggregator | Collects and summarizes news articles, emails summaries to subscribers | Scheduled tasks, Email integration, Content summarization | | Social Media Monitoring System | Monitors social platforms for keywords and sends alerts | API integration, Real-time monitoring, Alert system | | Weather-Based Notification Service | Checks weather forecasts and notifies users of severe conditions | Weather API integration, Conditional alerts, Scheduling | | Automated Financial Report Generator | Gathers financial data and generates reports for stakeholders | Data aggregation, Report generation, Scheduling | | Task Management and Reminder System | Manages user tasks, sets reminders, and sends notifications | User management, Scheduling, Notifications | | Interactive Story Generator | Creates stories based on user input with corresponding images | Natural language processing, Image generation, User interaction | | Automated Meeting Scheduler | Finds optimal meeting times and manages calendar entries | Calendar integration, Conflict resolution, Invitations | | Email Categorization and Response | Categorizes incoming emails and sends automated responses | Email processing, Content categorization, Automated responses | | E-commerce Order Processing | Handles order placements, inventory, and shipment tracking | Workflow automation, Inventory management, Notifications | | Content Moderation System | Reviews and classifies user-generated content | Content analysis, Classification, Moderation actions | | Personalized Learning Assistant | Provides tailored learning materials and tracks progress | Personalization, Progress tracking, Content recommendation | | Automated Backup and Recovery | Regularly backs up data and initiates recovery procedures | Scheduled tasks, Error handling, Data management | | Smart Home Automation Workflow | Manages smart home devices based on user commands and conditions | IoT integration, Conditional logic, User interaction | | Inventory Management System | Tracks inventory levels and automates reordering | Stock management, Predictive analysis, Automated ordering | | Event-Driven Notification System | Triggers notifications based on specific events or thresholds | Event monitoring, Conditional alerts, Multi-channel notifications | | Data Cleaning and Transformation | Cleans and transforms raw data for analysis | Data processing, ETL operations, Quality assurance | | Project Management Assistant | Breaks down projects into tasks and tracks progress | Task decomposition, Progress monitoring, Reporting | | Parallel Data Processing Pipeline | Processes large datasets in parallel and aggregates results | Parallel execution, Data aggregation, Scalable processing | | Dynamic Content Recommendation | Analyzes user behavior and recommends personalized content | User profiling, Content analysis, Personalized recommendations | | Compliance Monitoring System | Monitors activities for regulatory compliance and generates reports | Rule-based monitoring, Violation detection, Compliance reporting | | Intelligent Resume Screening | Evaluates resumes based on criteria and forwards qualified candidates | Document analysis, Candidate scoring, Automated screening | | Automated Code Review Pipeline | Reviews code commits, runs tests, and manages deployments | Code analysis, Automated testing, Deployment management | | Personal Finance Tracker | Tracks expenses, analyzes patterns, and provides financial advice | Financial data analysis, Pattern recognition, Personalized advice | | Automated Content Publishing | Schedules and publishes content across various platforms | Content management, Multi-platform publishing, Scheduling | | AI-Powered Personal Assistant | Manages personal tasks, schedules, and provides information | Task management, Scheduling, Information retrieval | | Bug Tracking and Reporting | Monitors repositories, categorizes issues, and assigns to developers | Issue tracking, Categorization, Automated assignment | | Multi-Stage Data Validation | Validates data through multiple stages with different rules | Data validation, Multi-step processing, Error handling | | Document Summarization and Archiving | Summarizes documents and archives them for easy retrieval | Text summarization, Document classification, Archiving | | Real-Time Stock Market Analyzer | Analyzes market data and alerts users about significant changes | Real-time data processing, Financial analysis, Alert system | | Webinar Management System | Schedules webinars, manages participants, and handles follow-ups | Event scheduling, Participant management, Automated follow-ups | | Smart Content Filtering | Filters and recommends content based on user preferences | Content analysis, User profiling, Recommendation system | | Automated Translation Workflow | Translates content into multiple languages and localizes it | Language translation, Localization, Content management | | AI-Driven Survey Analysis | Analyzes survey responses and generates insight reports | Survey processing, Sentiment analysis, Report generation | | Compliance Documentation Generator | Creates compliance documents based on regulatory standards | Document generation, Compliance checking, Template management | | Task Prioritization and Allocation | Prioritizes tasks and allocates them to team members | Task analysis, Resource allocation, Team management | | Webinar Feedback Analyzer | Collects and analyzes feedback from webinar participants | Feedback collection, Sentiment analysis, Improvement suggestions | | Health and Fitness Tracker | Tracks health metrics and provides personalized fitness recommendations | Health data analysis, Personalized recommendations, Progress tracking | | Incident Response System | Detects incidents, initiates response workflows, and notifies personnel | Incident detection, Workflow automation, Alert system | | Content Optimization Workflow | Analyzes content performance and optimizes for better engagement | Performance analysis, Content optimization, A/B testing | | Legal Document Processor | Extracts key information from legal documents and ensures compliance | Document analysis, Information extraction, Compliance checking | | Job Application Tracker | Tracks job applications and provides application improvement suggestions | Application tracking, Status updates, Improvement recommendations | | Content Rescheduling System | Monitors content performance and reschedules for better visibility | Performance monitoring, Content scheduling, Optimization | | AI-Powered Investment Advisor | Analyzes financial data and suggests investment opportunities | Financial analysis, Risk assessment, Investment recommendations | | Intelligent Document Version Control | Manages document versions and notifies users about updates | Version control, Change tracking, Notification system | | Marketing Campaign Manager | Creates, schedules, and optimizes marketing campaigns | Campaign planning, Performance tracking, Optimization strategies | | Competitive Analysis Workflow | Gathers data on competitors and generates analysis reports | Data collection, Comparative analysis, Report generation | | Health Monitoring and Alerting | Monitors health metrics and alerts users and healthcare providers | Health data analysis, Anomaly detection, Alert system | | Travel Itinerary Planner | Plans travel itineraries based on preferences and conditions | Trip planning, Preference matching, Dynamic scheduling | | AI-Powered Personal Diary | Helps maintain a diary and provides insights into emotions and growth | Natural language processing, Sentiment analysis, Personal growth tracking | | Language Learning Tutor | Provides exercises and personalized feedback for language learners | Language processing, Progress tracking, Personalized lessons | | Knowledge Base Maintenance | Updates and maintains a knowledge base with new information | Information extraction, Knowledge management, Consistency checking | | Feedback Loop for Improvement | Collects user feedback, analyzes it, and implements improvements | Feedback analysis, Improvement tracking, Stakeholder notifications | | Grant Application Processor | Reviews grant applications, evaluates eligibility, and notifies applicants | Application processing, Eligibility checking, Automated notifications | | AI-Powered Resume Builder | Assists in building resumes and provides improvement suggestions | Resume analysis, Content generation, Personalized recommendations | | Vendor Management System | Manages vendor information, monitors performance, and handles communications | Vendor tracking, Performance monitoring, Communication automation | | Meeting Minutes Recorder | Records meetings, transcribes audio, and distributes summaries | Audio transcription, Summary generation, Automated distribution | | Personal Shopping Assistant | Finds products based on preferences and notifies about deals | Product matching, Price comparison, Deal notifications | | Environmental Monitoring Reporter | Monitors environmental data and generates reports for stakeholders | Data monitoring, Anomaly detection, Report generation | | Data Sync and Integration Workflow | Syncs data between platforms and handles conflicts | Data synchronization, Conflict resolution, Integration management | | Competitive Pricing Strategy | Analyzes competitor pricing and adjusts prices dynamically | Price analysis, Dynamic pricing, Market monitoring | | User Onboarding Workflow | Manages the user onboarding process and sets up accounts | User registration, Account setup, Welcome communications | | Content Curation and Distribution | Curates content based on interests and tracks engagement | Content curation, Distribution scheduling, Engagement tracking | We encourage contributors to choose from these ideas or propose their own to showcase Julep's capabilities in solving real-world problems. ## Julep Features Demonstrated These notebooks showcase various features of Julep. Here's an overview of the key features you can explore: 1. **Agent Management** - Creating and updating agents - Configuring agent settings (name, model, about) 2. **Task Definition and Execution** - Creating multi-step tasks - Executing tasks with specific inputs - Various step types (Prompt, Tool Call, Evaluate, Conditional Logic, Loops, etc.) 3. **Tool Integration** - Adding custom tools to agents - Integrating external APIs (e.g., web search, image generation) 4. **Session Management** - Creating and managing persistent sessions - Handling context overflow 5. **User Management** - Creating and managing users - Associating users with sessions 6. **Document Management** - Uploading and managing documents - Document search functionality 7. **Chat Functionality** - Interacting with agents through chat sessions 8. **Execution Monitoring** - Streaming execution progress - Monitoring task lifecycle 9. **Authentication** - API Key authentication We encourage contributors to create new notebooks that demonstrate these features in various combinations and use cases. ### Additional Information For more details about the tasks or if you have any questions, please don't hesitate to contact the author: **Author:** Julep AI **Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord --- If you have feedback or would like to contribute to the notebooks, feel free to open an issue(s) in the [repository](https://github.com/julep-ai/julep). ================================================ FILE: cookbooks/__init__.py ================================================ ================================================ FILE: cookbooks/advanced/00-Devfest-Email-Assistant.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: julep in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (1.73.0)\n", "Requirement already satisfied: anyio<5,>=3.5.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (4.8.0)\n", "Requirement already satisfied: distro<2,>=1.7.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (1.9.0)\n", "Requirement already satisfied: httpx<1,>=0.23.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (0.28.1)\n", "Requirement already satisfied: pydantic<3,>=1.9.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (2.10.6)\n", "Requirement already satisfied: python-dotenv<1.1,>=1.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (1.0.1)\n", "Requirement already satisfied: ruamel-yaml<0.19,>=0.18.6 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (0.18.10)\n", "Requirement already satisfied: sniffio in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (1.3.1)\n", "Requirement already satisfied: typing-extensions<5,>=4.10 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (4.12.2)\n", "Requirement already satisfied: idna>=2.8 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from anyio<5,>=3.5.0->julep) (3.10)\n", "Requirement already satisfied: certifi in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->julep) (2025.1.31)\n", "Requirement already satisfied: httpcore==1.* in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->julep) (1.0.7)\n", "Requirement already satisfied: h11<0.15,>=0.13 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->julep) (0.14.0)\n", "Requirement already satisfied: annotated-types>=0.6.0 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->julep) (0.7.0)\n", "Requirement already satisfied: pydantic-core==2.27.2 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->julep) (2.27.2)\n", "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /home/xmtosx/Work/Julep/julep/agents-api/.venv/lib/python3.12/site-packages (from ruamel-yaml<0.19,>=0.18.6->julep) (0.2.12)\n" ] } ], "source": [ "!pip install julep" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "import uuid\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create Julep Client\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "\n", "JULEP_API_KEY = \"YOUR_JULEP_API_KEY\"\n", "\n", "# Create a Julep client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"Julep Email Assistant\",\n", " about=(\n", " \"You are an agent that handles emails for julep users.\"\n", " + \" Julep is a platform for creating kick-ass AI agents.\"\n", " ),\n", " model=\"gpt-4o-mini\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "\n", "MAILGUN_PASSWORD = \"YOUR_MAILGUN_PASSWORD\"\n", "\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Julep Email Assistant\n", "description: A Julep agent that can send emails and search the documentation.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " from:\n", " type: string\n", " to:\n", " type: string\n", " subject:\n", " type: string\n", " body:\n", " type: string\n", "\n", " \n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow\n", "tools:\n", "- name: send_email\n", " type: integration\n", " integration:\n", " provider: email\n", " setup:\n", " host: smtp.mailgun.org\n", " password: {MAILGUN_PASSWORD}\n", " port: 587\n", " user: postmaster@email.julep.ai\n", "\n", "- name: search_docs\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: search\n", " \n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Prompt the user for the email details\n", "- prompt: |-\n", " $ f'''You are {{ agent.name }}. {{ agent.about }}\n", "\n", " A user with email address {{ _['from'] }} has sent the following inquiry:\n", " ------\n", " Subject: {{ _.subject }}\n", "\n", " {{ _.body }}\n", " ------\n", "\n", " Can you generate a query to search the documentation based on this email?\n", " Just respond with the query as is and nothing else.'''\n", "\n", " unwrap: true\n", "\n", "# Step 1: Search the documentation\n", "- tool: search_docs\n", " arguments:\n", " agent_id: {agent.id}\n", " text: $ _\n", " \n", "- prompt: >-\n", " $ f'''You are {{ agent.name }}. {{ agent.about }}\n", "\n", " A user with email address {{ steps[0].input['from'] }} has sent the following inquiry:\n", " ------\n", " Subject: {{ steps[0].input.subject }}\n", "\n", " {{ steps[0].input.body }}\n", " ------\n", "\n", " Here are some possibly relevant snippets from the julep documentation:\n", " {{ '\\\\n'.join([snippet.content for doc in _.docs for snippet in doc.snippets]) }}\n", " \n", " ========\n", "\n", " Based on the above info, craft an email body to respond with as a json object.\n", " The json object must have `subject` and `body` fields.'''\n", " response_format:\n", " type: json_object\n", " \n", " unwrap: true\n", "\n", "# Step 3: Extract the email\n", "- evaluate:\n", " subject: $ extract_json(_)['subject']\n", " body: $ extract_json(_)['body']\n", "\n", "# Step 4: Send the email\n", "- tool: send_email\n", " arguments:\n", " body: $ _.body\n", " from: postmaster@email.julep.ai\n", " subject: $ _.subject\n", " to: $ steps[0].input['from']\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "task = client.tasks.create_or_update(\n", " agent_id=AGENT_UUID,\n", " task_id=TASK_UUID,\n", " **task_def,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "execution = client.executions.create(\n", " task_id=task.id,\n", " input={\"from\": \"diwank@julep.ai\", \"to\": \"help@agents.new\", \"subject\": \"what's up\", \"body\": \"sup\"},\n", ")" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Execution(id='067fd065-3722-7af4-8000-817a972d8c7f', created_at=datetime.datetime(2025, 4, 14, 12, 57, 55, 446101, tzinfo=datetime.timezone.utc), input={'to': 'help@agents.new', 'body': 'sup', 'from': 'diwank@julep.ai', 'subject': \"what's up\"}, status='running', task_id='fdab8052-df0d-4f36-9c5e-01dcd5e0ba3c', updated_at=datetime.datetime(2025, 4, 14, 12, 57, 56, 742329, tzinfo=datetime.timezone.utc), error=None, metadata={}, output={'docs': [], 'time': 0.01}, transition_count=3)" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "client.executions.get(execution.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Type: init\n", "output: {'to': 'help@agents.new', 'body': 'sup', 'from': 'diwank@julep.ai', 'subject': \"what's up\"}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: \"what's up\" OR \"sup\" OR \"general inquiry\"\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'docs': [], 'time': 0.01}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: ```json\n", "{\n", " \"subject\": \"Hello from Julep!\",\n", " \"body\": \"Hi there! Thanks for reaching out. We're here to help you create amazing AI agents. If you have any specific questions or need assistance with the platform, feel free to ask. Looking forward to hearing from you!\"\n", "}\n", "```\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'body': \"Hi there! Thanks for reaching out. We're here to help you create amazing AI agents. If you have any specific questions or need assistance with the platform, feel free to ask. Looking forward to hearing from you!\", 'subject': 'Hello from Julep!'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish\n", "output: {'success': True}\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "execution_transitions = client.executions.transitions.list(\n", " execution_id=execution.id).items\n", "\n", "for transition in reversed(execution_transitions):\n", " print(\"Type: \", transition.type)\n", " print(\"output: \", transition.output)\n", " print(\"-\" * 100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 4 } ================================================ FILE: cookbooks/advanced/01-website-crawler.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "!pip install --upgrade julep --quiet" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "import uuid\n", "\n", "# NOTE: these UUIDs are used in order not to use the `create_or_update` methods instead of\n", "# the `create` methods for the sake of not creating new resources every time a cell is run.\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "JULEP_API_KEY = os.environ['JULEP_API_KEY']\n", "\n", "# Create a Julep client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# Create agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"Spiderman\",\n", " about=\"AI that can crawl the web and extract data\",\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "\n", "SPIDER_API_KEY = \"YOUR_SPIDER_API_KEY\"\n", "\n", "# Define the task\n", "task_def = yaml.safe_load(f\"\"\" \n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json \n", "name: Julep Crawling Task\n", "description: Crawl a website and create a summary of the results\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " url:\n", " type: string\n", " description: The URL of the website to crawl\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow\n", "tools:\n", "- name: spider_crawler\n", " type: integration\n", " integration:\n", " provider: spider\n", " setup:\n", " spider_api_key: \"{SPIDER_API_KEY}\"\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step 0: Call the spider_crawler tool with the url input\n", "- tool: spider_crawler\n", " arguments:\n", " url: $ _['url'] # You can also use 'steps[0].input.url'\n", " params:\n", " request: smart_mode\n", " limit: $ 2 # limit to 2 pages\n", " return_format: markdown\n", " proxy_enabled: $ True\n", " filter_output_images: $ True\n", " filter_output_svg: $ True\n", " readability: $ True\n", "\n", "# Step 1: Evaluate step to create a summary of the results\n", "- evaluate:\n", " documents: |\n", " $ \" \".join(\n", " list(\n", " page['content'] for page in _['result']\n", " )\n", " )\n", " \n", "# Step 2: Prompt step to create a summary of the results\n", "- prompt: |\n", " $ f'''\n", " You are {{agent.about}}\n", " I have given you this url: {{steps[0].input.url}}\n", " And you have crawled that website. Here are the results you found:\n", " {{_['documents']}}\n", " I want you to create a short summary (no longer than 100 words) of the results you found while crawling that website.\n", " '''\n", " unwrap: true\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "# creating an execution object\n", "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"url\": \"https://docs.julep.ai\"\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking execution details and output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Julep is a platform for creating sophisticated AI agents that manage complex tasks using long-term memory and multi-step processes. The documentation offers guidance on getting started, using the Julep CLI, understanding core concepts like agents and tasks, and integrating external tools and APIs. Key features include persistent AI agents, stateful sessions, and support for Retrieval-Augmented Generation (RAG). Users can explore tutorials, API references, and SDKs, with additional resources for developers, enterprises, and researchers. The site emphasizes robust task management, easy integration, and extensive support through community links and detailed guides.\n" ] } ], "source": [ "# Get execution details\n", "execution = client.executions.get(execution.id)\n", "# Print the output\n", "print(execution.output)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition type: init\n", "Transition output: {'url': 'https://docs.julep.ai'}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'result': [{'url': 'https://docs.julep.ai/', 'costs': {'ai_cost': 0, 'file_cost': 0.0002, 'total_cost': 0.0004, 'compute_cost': 0.0001, 'transform_cost': 0.0001, 'bytes_transferred_cost': 0}, 'error': None, 'status': 200, 'content': '[Julephome page](https://docs.julep.ai/)v1\\nSearch Julep docs\\n* [Community](https://discord.gg/p4c7ehs4vD)\\n* [Changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md)\\n##### Get Started\\n* [\\nWelcome to Julep\\n](https://docs.julep.ai/introduction/julep)\\n* [\\nInstallation\\n](https://docs.julep.ai/introduction/install)\\n* [\\nQuick Start\\n](https://docs.julep.ai/introduction/quickstart)\\n##### Julep CLI\\n* [\\nGetting Started\\n](https://docs.julep.ai/julepcli/introduction)\\n* [\\nCommand Reference\\n](https://docs.julep.ai/julepcli/commands)\\n##### Core Concepts\\n* [\\nAgents\\n](https://docs.julep.ai/concepts/agents)\\n* [\\nTasks\\n](https://docs.julep.ai/concepts/tasks)\\n* [\\nSessions\\n](https://docs.julep.ai/concepts/sessions)\\n* [\\nTools\\n](https://docs.julep.ai/concepts/tools)\\n* [\\nUsers\\n](https://docs.julep.ai/concepts/users)\\n* [\\nDocuments (RAG)\\n](https://docs.julep.ai/concepts/docs)\\n* [\\nExecutions\\n](https://docs.julep.ai/concepts/execution)\\n##### Tutorials\\n* [\\nBrowser Use\\n](https://docs.julep.ai/tutorials/browser-use)\\n* [\\nRAG Chatbot for Website\\n](https://docs.julep.ai/tutorials/rag-chatbot)\\n* [\\nTrip Planning\\n](https://docs.julep.ai/tutorials/trip-planning)\\n* [\\nVideo Processing\\n](https://docs.julep.ai/tutorials/video-processing)\\n##### Integrations\\n* [\\nSupported Models\\n](https://docs.julep.ai/integrations/supported-models)\\n* [\\nSupported Integrations\\n](https://docs.julep.ai/integrations/supported-integrations)\\n* [\\nAdd New Integrations\\n](https://docs.julep.ai/integrations/contributing-integrations)\\n* Communication & Data\\n* Media & File Processing\\n* Search\\n* Web & Browser Automation\\n##### Advanced Topics\\n* [\\nNew Syntax (Important)\\n](https://docs.julep.ai/advanced/new-syntax)\\n* [\\nPython Expression\\n](https://docs.julep.ai/advanced/python-expression)\\n* [\\nTypes of Task Steps\\n](https://docs.julep.ai/advanced/types-of-task-steps)\\n* [\\nChat Features in Julep\\n](https://docs.julep.ai/advanced/chat)\\n* [\\nRender Endpoint in Julep\\n](https://docs.julep.ai/advanced/render)\\n* [\\nFiles (Multimedia)\\n](https://docs.julep.ai/advanced/files)\\n* [\\nArchitecture Deep Dive\\n](https://docs.julep.ai/advanced/architecture-deep-dive)\\n* [\\nAgentic Patterns\\n](https://docs.julep.ai/advanced/agentic-patterns)\\n* [\\nExecution Lifecycle\\n](https://docs.julep.ai/advanced/lifecycle)\\n* [\\nMulti-Agent Multi-User Sessions\\n](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n* [\\nLocal Setup\\n](https://docs.julep.ai/advanced/localsetup)\\n[Julephome page](https://docs.julep.ai/)\\nv1\\nSearch Julep docs\\nSearch...\\nNavigation\\nGet Started\\nWelcome to Julep\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n* [Support](mailto:developers@julep.ai)\\n* [GitHub](https://github.com/julep-ai/julep)\\n* [\\nGet API Key\\n](https://dashboard.julep.ai)\\nGet Started\\n# Welcome to Julep\\nJulep is a platform for creating AI agents that remember past interactions and can perform complex tasks. It offers long-term memory and manages multi-step processes.\\nJulep enables the creation of multi-step tasks incorporating decision-making, loops, parallel processing, and integration with numerous external tools and APIs.\\nWhile many AI applications are limited to simple, linear chains of prompts and API calls with minimal branching, Julep is built to handle more complex scenarios which:\\n* Have multiple steps,\\n* Make decisions based on model outputs,\\n* Spawn parallel branches,\\n* Use lots of tools, and\\n* Run for a long time.\\nJulep offers a comprehensive set of features designed to help you build sophisticated AI workflows.\\n#### Imagine you want to build an AI agent that can do more than just answer simple questions —it needs to handle complex tasks, remember past interactions, and maybe even use other tools or APIs.\\nNow since you understand the problem Julep is solving, let’s explore the key features that make Julep stand out.\\n## [\\u200b\\n](#core-features)\\nCore Features\\n## Persistent AI Agents\\nCreate agents that maintain context and remember information across multiple interactions. Agents can learn from past conversations and apply that knowledge to future tasks.\\n## Stateful Sessions\\nKeep track of conversation history and context across multiple interactions. Sessions can be paused, resumed, and maintain their state indefinitely.\\n## Multi-Step Tasks\\nBuild complex workflows with decision-making capabilities, loops, and conditional logic. Tasks can be as simple or as sophisticated as needed.\\n## Task Management\\nHandle long-running tasks that can run indefinitely. Tasks are automatically managed, with built-in support for retries and error handling.\\n## [\\u200b\\n](#advanced-capabilities)\\nAdvanced Capabilities\\nBuilt-in Tools\\nAccess a wide range of built-in tools and easily integrate with external APIs. Tools can be added to agents to extend their capabilities.\\nSelf-Healing\\nAutomatic retry mechanisms for failed steps, message resending, and robust task management keep your workflows running smoothly.\\nRAG Support\\nBuilt-in support for Retrieval-Augmented Generation. Use Julep’s document store to build systems that can retrieve and utilize your own data.\\nEasy Integration\\nSeamlessly integrate with your existing infrastructure using our comprehensive SDKs for Python and Node.js.\\n## [\\u200b\\n](#exploring-the-documentation)\\nExploring the Documentation\\nDepending on your use case, here are different ways to explore our documentation:\\n[\\n## For AI Developers\\nStart with the Quick Start guide, then dive into Core Concepts and Task Management to build AI-powered applications.\\n](https://docs.julep.ai/introduction/quickstart)[\\n## For Enterprise Solutions\\nFocus on Architecture Deep Dive, Security Features, and Integration Guides to understand enterprise-grade deployment.\\n](https://docs.julep.ai/advanced/architecture-deep-dive)[\\n## For Researchers & Experimenters\\nExplore our Model Configuration, RAG Implementation, and Advanced Features sections to experiment with AI capabilities.\\n](https://docs.julep.ai/integrations/supported-models)[\\n## For System Integrators\\nCheck out our API Reference, SDK Documentation, and Integration Tutorials to connect Julep with existing systems.\\n](https://docs.julep.ai/api-reference)\\n## [\\u200b\\n](#next-steps)\\nNext Steps\\n[\\n## Installation\\nDetailed setup instructions\\n](https://docs.julep.ai/introduction/install)[\\n## Quick Start\\nEssential concepts and terminology\\n](https://docs.julep.ai/introduction/quickstart)[\\n## Tutorials\\nLearn from practical tutorials\\n](https://docs.julep.ai/tutorials)\\n## [\\u200b\\n](#need-help?)\\nNeed Help?\\n[\\n## Join our Community\\nGet help and share ideas with other Julep developers\\n](https://discord.gg/p4c7ehs4vD)[\\n## Contact Support\\nReach out to our team for assistance\\n](mailto:developers@julep.ai)\\n[Installation](https://docs.julep.ai/introduction/install)\\n[x](https://x.com/julepai)[github](https://github.com/julep-ai/julep)[linkedin](https://www.linkedin.com/company/julep-ai)\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.julep.ai)\\nOn this page\\n* [Core Features](#core-features)\\n* [Advanced Capabilities](#advanced-capabilities)\\n* [Exploring the Documentation](#exploring-the-documentation)\\n* [Next Steps](#next-steps)\\n* [Need Help?](#need-help?)\\n'}, {'url': 'https://docs.julep.ai/advanced/lifecycle', 'costs': {'ai_cost': 0, 'file_cost': 0.0003, 'total_cost': 0.0005, 'compute_cost': 0.0001, 'transform_cost': 0.0001, 'bytes_transferred_cost': 0}, 'error': None, 'status': 200, 'content': '[Julephome page](https://docs.julep.ai/)v1\\nSearch Julep docs\\n* [Community](https://discord.gg/p4c7ehs4vD)\\n* [Changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md)\\n##### Get Started\\n* [\\nWelcome to Julep\\n](https://docs.julep.ai/introduction/julep)\\n* [\\nInstallation\\n](https://docs.julep.ai/introduction/install)\\n* [\\nQuick Start\\n](https://docs.julep.ai/introduction/quickstart)\\n##### Julep CLI\\n* [\\nGetting Started\\n](https://docs.julep.ai/julepcli/introduction)\\n* [\\nCommand Reference\\n](https://docs.julep.ai/julepcli/commands)\\n##### Core Concepts\\n* [\\nAgents\\n](https://docs.julep.ai/concepts/agents)\\n* [\\nTasks\\n](https://docs.julep.ai/concepts/tasks)\\n* [\\nSessions\\n](https://docs.julep.ai/concepts/sessions)\\n* [\\nTools\\n](https://docs.julep.ai/concepts/tools)\\n* [\\nUsers\\n](https://docs.julep.ai/concepts/users)\\n* [\\nDocuments (RAG)\\n](https://docs.julep.ai/concepts/docs)\\n* [\\nExecutions\\n](https://docs.julep.ai/concepts/execution)\\n##### Tutorials\\n* [\\nBrowser Use\\n](https://docs.julep.ai/tutorials/browser-use)\\n* [\\nRAG Chatbot for Website\\n](https://docs.julep.ai/tutorials/rag-chatbot)\\n* [\\nTrip Planning\\n](https://docs.julep.ai/tutorials/trip-planning)\\n* [\\nVideo Processing\\n](https://docs.julep.ai/tutorials/video-processing)\\n##### Integrations\\n* [\\nSupported Models\\n](https://docs.julep.ai/integrations/supported-models)\\n* [\\nSupported Integrations\\n](https://docs.julep.ai/integrations/supported-integrations)\\n* [\\nAdd New Integrations\\n](https://docs.julep.ai/integrations/contributing-integrations)\\n* Communication & Data\\n* Media & File Processing\\n* Search\\n* Web & Browser Automation\\n##### Advanced Topics\\n* [\\nNew Syntax (Important)\\n](https://docs.julep.ai/advanced/new-syntax)\\n* [\\nPython Expression\\n](https://docs.julep.ai/advanced/python-expression)\\n* [\\nTypes of Task Steps\\n](https://docs.julep.ai/advanced/types-of-task-steps)\\n* [\\nChat Features in Julep\\n](https://docs.julep.ai/advanced/chat)\\n* [\\nRender Endpoint in Julep\\n](https://docs.julep.ai/advanced/render)\\n* [\\nFiles (Multimedia)\\n](https://docs.julep.ai/advanced/files)\\n* [\\nArchitecture Deep Dive\\n](https://docs.julep.ai/advanced/architecture-deep-dive)\\n* [\\nAgentic Patterns\\n](https://docs.julep.ai/advanced/agentic-patterns)\\n* [\\nExecution Lifecycle\\n](https://docs.julep.ai/advanced/lifecycle)\\n* [\\nMulti-Agent Multi-User Sessions\\n](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n* [\\nLocal Setup\\n](https://docs.julep.ai/advanced/localsetup)\\n[Julephome page](https://docs.julep.ai/)\\nv1\\nSearch Julep docs\\nSearch...\\nNavigation\\nAdvanced Topics\\nExecution Lifecycle\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n* [Support](mailto:developers@julep.ai)\\n* [GitHub](https://github.com/julep-ai/julep)\\n* [\\nGet API Key\\n](https://dashboard.julep.ai)\\nAdvanced Topics\\n# Execution Lifecycle\\nUnderstanding the Lifecycle of Task when executed in Julep\\n## [\\u200b\\n](#overview)\\nOverview\\nUnderstanding the lifecycle of a Julep task is crucial for building effective workflows.\\nLet’s explore this through the lens of a[Trip Plan task](https://docs.julep.ai/tutorials/trip-planning)- a practical example that showcases key aspects of task execution.\\nThe Trip Plan task is an ideal example because it demonstrates:\\n1. Parallel execution of workflow steps\\n2. Integration with multiple external APIs:\\n* [Weather API](https://docs.julep.ai/integrations/communicationdata/weather)for current conditions\\n* [Brave Search API](https://docs.julep.ai/integrations/search/brave)for attractions\\n* Data aggregation from various sources\\n* AI-powered personalization of results\\nBelow is a visual representation of how this task flows through Julep’s execution lifecycle:\\nLifecycle of the Trip Plan Task\\nLet’s examine each phase of the execution lifecycle using this task as our guide.\\nThis is a simplified representation of the execution lifecycle. In practice, Julephandles many more details and edge cases to ensure robust and efficient task execution.\\nOut here in this section, we will be focusing on the main workflow steps of the Trip Plan task and how these steps are executed in Julep.\\n### [\\u200b\\n](#1-input-schema)\\n1. Input Schema\\nFirst, we define what inputs our task expects:\\n```\\n`input\\\\_schema:type:objectproperties:locations:type:arrayitems:type:string`\\n```\\nThis schema specifies that our task expects an array of location strings (e.g.,`["New York", "London", "Paris"]`).\\n### [\\u200b\\n](#2-tools-configuration)\\n2. Tools Configuration\\nNext, we define the external tools our task will use:\\n```\\n`-name:weathertype:integrationintegration:provider:weathersetup:openweathermap\\\\_api\\\\_key:{openweathermap\\\\_api\\\\_key}-name:internet\\\\_searchtype:integrationintegration:provider:bravesetup:api\\\\_key:{brave\\\\_api\\\\_key}`\\n```\\nWe’re using two integrations:\\n* The`weather`integration to fetch current weather conditions\\n* The`brave`search integration to find tourist attractions### [\\u200b\\n](#3-main-workflow-steps)\\n3. Main Workflow Steps\\n#### [\\u200b\\n](#step-1:-fetch-weather-data)\\nStep 1: Fetch Weather Data\\n```\\n`-over:$ steps[0].input.locationsmap:tool:weatherarguments:location:$ \\\\_`\\n```\\nThis step:\\n* Iterates over each location in the input array\\n* Calls the weather API for each location\\n* The`\\\\_`represents the current location in the iteration#### [\\u200b\\n](#step-2:-search-for-tourist-attractions)\\nStep 2: Search for Tourist Attractions\\n```\\n`-over:$ steps[0].input.locationsmap:tool:internet\\\\_searcharguments:query:$ ''tourist attractions in '' + \\\\_`\\n```\\nThis step:\\n* Iterates over the locations again\\n* Searches for tourist attractions in each location\\n* Constructs a search query by concatenating “tourist attractions in ”with the location#### [\\u200b\\n](#step-3:-combine-data)\\nStep 3: Combine Data\\n```\\n`-evaluate:zipped:|-$ list(zip(steps[0].input.locations,[output['result']for output in steps[0].output],steps[1].output))`\\n```\\nThis step:\\n* Combines the data from previous steps into tuples\\n* Each tuple contains: (location, weather\\\\_data, attractions\\\\_data)\\n* Uses Python’s`zip`function to align the data#### [\\u200b\\n](#step-4:-generate-itineraries)\\nStep 4: Generate Itineraries\\n```\\n`-over:$ \\\\_['zipped']parallelism:3# Inside the map step, each `\\\\_` represents the current element in the list# which is a tuple of (location, weather, attractions)map:prompt:-role:systemcontent:>-$ f'''You are{agent.name}. Your task is to create a detailed itineraryfor visiting tourist attractions in some locations.The user will give you the following information for each location:-The location-The current weather condition-The top tourist attractions'''-role:usercontent:>-$ f'''Location:{\\\\_[0]}Weather:{\\\\_[1]}Attractions:{\\\\_[2]}'''unwrap:true`\\n```\\nThis step:\\n* Processes up to 3 locations in parallel\\n* For each location tuple:\\n* Sends a prompt to the AI model\\n* Includes location, weather, and attraction data\\n* Generates a personalized itinerary#### [\\u200b\\n](#step-5:-format-final-output)\\nStep 5: Format Final Output\\n```\\n`-evaluate:final\\\\_plan:|-$ ''\\\\\\\\\\\\\\\\n---------------\\\\\\\\\\\\\\\\n''.join(activity for activity in \\\\_)`\\n```\\nThis step:\\n* Combines all itineraries into a single output\\n* Separates each itinerary with a divider## [\\u200b\\n](#example-output)\\nExample Output\\nAn example output when running this task with an input of`["New York", "London", "Paris", "Tokyo", "Sydney"]`:\\nHere’s a detailed itinerary for visiting top tourist attractions in New York, considering the current weather conditions.\\n### [\\u200b\\n](#day-1:-iconic-landmarks-and-observation-decks)\\nDay 1: Iconic Landmarks and Observation Decks\\n* **Morning:**\\n* **Top of the Rock Observation Deck:**Start your day with a visit to the Top of the Rock Observation Deck at Rockefeller Plaza. The panoramic 360-degree views from the 70th floor are a must-see. Dress warmly as it feels like 5.2°C outside, and it’s quite windy.\\n* **Link for more info:**[Tripadvisor - Top of the Rock](https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html)\\n* **Afternoon:**\\n* **St. Patrick’s Cathedral:**Just a short walk from Rockefeller Plaza, explore the stunning architecture of St. Patrick’s Cathedral. The overcast skies will provide a dramatic backdrop for photos.\\n* **Fifth Avenue:**Enjoy a leisurely stroll along Fifth Avenue, visiting iconic stores and landmarks.\\n* **Evening:**\\n* **Times Square:**Experience the vibrant lights and energy of Times Square. The overcast clouds might enhance the brightness of the neon lights.### [\\u200b\\n](#day-2:-culture-and-history)\\nDay 2: Culture and History\\n* **Morning:**\\n* **The Museum of Modern Art (MoMA):**Spend your morning exploring MoMA’s vast collection of modern and contemporary art. This indoor activity is perfect for a cloudy day.\\n* **Afternoon:**\\n* **Central Park:**Head to Central Park for a refreshing walk. With 100% cloud cover, it’s a great day to explore the park without the harsh sun. Consider visiting the Central Park Zoo or taking a guided tour.\\n* **Evening:**\\n* **Broadway Show:**End your day with a Broadway show. It’s an ideal indoor activity to avoid the chilly weather outside. Book tickets in advance for popular shows.### [\\u200b\\n](#day-3:-historical-and-educational)\\nDay 3: Historical and Educational\\n* **Morning:**\\n* **Statue of Liberty and Ellis Island:**Take a ferry to visit these iconic sites. Dress warmly for the ferry ride. The cloud cover will provide a unique perspective for photos.\\n* **Afternoon:**\\n* **9/11 Memorial and Museum:**Spend your afternoon reflecting at the 9/11 Memorial and exploring the museum exhibits.\\n* **Evening:**\\n* **Brooklyn Bridge:**Walk across the Brooklyn Bridge and enjoy the city skyline. With the wind speed at 5.81 m/s, be prepared for breezy conditions.### [\\u200b\\n](#additional-tips:)\\nAdditional Tips:\\n* **Clothing:**Wear layers to keep warm, as the temperature feels colder than it actually is.\\n* **Dining:**New York offers a plethora of dining options. Consider trying some local favorites like a classic New York bagel or pizza.\\n* **Transportation:**Utilize the subway for efficient travel across the city. Taxis and ride-sharing services are also readily available.\\nFor more details on attractions and guided tours, you can visit[USA Guided Tours](https://usaguidedtours.com/nyc/attraction/)and[I Love NY](https://www.iloveny.com/places-to-go/new-york-city/attractions/).\\n## [\\u200b\\n](#enjoy-your-trip-to-new-york-city)\\nEnjoy your trip to New York City!\\n**Day 1: Exploring Iconic London Landmarks**\\n**Morning:**\\n1. **Buckingham Palace**\\n* Start your day early with a visit to Buckingham Palace. Arrive by 9:30 AM to catch the Changing of the Guard ceremony, which typically starts at 11:00 AM. Enjoy the majestic architecture and the surrounding gardens.\\n* Weather Tip: With the overcast clouds, it might feel chilly, so dress warmly and bring an umbrella just in case.\\n**Midday:**2.**Westminster Abbey**\\n* Head towards Westminster Abbey, a short walk from Buckingham Palace. This historic church has been the site of many significant events, including royal weddings and coronations. Spend about 1.5 hours exploring.\\n1. **Lunch at Borough Market**\\n* Take a tube or walk to Borough Market for a variety of food options. It’s a great place to warm up with some hot street food and explore the diverse culinary offerings.\\n**Afternoon:**4.**London Eye**\\n* After lunch, head to the London Eye. The overcast sky might not offer the clearest views, but the experience is still worthwhile. Pre-book your tickets to avoid long lines and enjoy a 30-minute ride on this iconic Ferris wheel.\\n**Evening:**5.**The Globe Theatre**\\n* As the day winds down, visit Shakespeare’s Globe Theatre. If there’s a performance, consider attending or simply take a guided tour to learn about the history of this famous theater.\\n**Day 2: Museums and Cultural Exploration**\\n**Morning:**\\n1. **The British Museum**\\n* Start your second day at the British Museum. Spend a few hours exploring the vast collection of art and antiquities. Highlights include the Rosetta Stone and the Elgin Marbles.\\n**Midday:**2.**Lunch near Covent Garden**\\n* Head to Covent Garden for lunch. This area is bustling with restaurants and cafes, perfect for a cozy indoor meal.\\n**Afternoon:**3.**The Tower of London**\\n* After lunch, make your way to the Tower of London. Delve into England’s rich history and see the Crown Jewels. Allocate about 2-3 hours for this visit.\\n**Evening:**4.**Tower Bridge**\\n* Conclude your day with a walk across Tower Bridge. The views of the Thames River and the cityscape are beautiful, even on a cloudy evening.\\n**Day 3: Leisure and Local Experiences**\\n**Morning:**\\n1. **Natural History Museum**\\n* Begin your last day at the Natural History Museum. It’s a family-friendly museum with fascinating exhibits, including dinosaur skeletons and a model of a blue whale.\\n**Midday:**2.**Lunch at South Kensington**\\n* Enjoy a relaxed lunch in South Kensington. There are plenty of options, from casual cafes to high-end dining.\\n**Afternoon:**3.**Hyde Park**\\n* Spend your afternoon strolling through Hyde Park. Visit the Serpentine Galleries if you’re interested in contemporary art. The park’s natural beauty is a peaceful retreat amidst the city hustle.\\n**Evening:**4.**Dinner and a Show in the West End**\\n* End your London adventure with a memorable dinner followed by a theater show in the West End. Book your tickets in advance for popular shows.\\n**Additional Tips:**\\n* Always check the attraction websites for any specific COVID-19 guidelines or changes in operating hours.\\n* London’s public transport system is efficient; consider getting an Oyster card for convenient travel.\\n* Don’t forget to dress in layers to adapt to the chilly weather, and always have your camera ready to capture memories.\\nHere’s a detailed itinerary for your visit to Paris, considering the current snowy weather conditions and top attractions:\\n### [\\u200b\\n](#day-1:-embrace-the-iconic-landmarks)\\nDay 1: Embrace the Iconic Landmarks\\n**Morning: Eiffel Tower**\\n* **Time:**9:00 AM\\n* **Details:**Begin your day with a visit to the Eiffel Tower. Even in the snow, the tower offers stunning views of Paris. Dress warmly and enjoy hot chocolate from nearby cafes.\\n* **Link for more info:**[Tripadvisor - Things to Do in Paris](https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html)\\n**Afternoon: Louvre Museum**\\n* **Time:**1:00 PM\\n* **Details:**Spend your afternoon indoors at the Louvre Museum. With its vast collection of art and history, it’s a perfect way to escape the cold. Consider taking a guided tour to make the most of your visit.\\n* **Link for more info:**[U.S. News Travel - Things To Do](https://travel.usnews.com/Paris_France/Things_To_Do/)\\n**Evening: Seine River Cruise**\\n* **Time:**6:00 PM\\n* **Details:**End your day with a magical Seine River cruise. The snow adds a picturesque touch to the illuminated landmarks. Ensure to book a heated cruise for comfort.### [\\u200b\\n](#day-2:-explore-cultural-and-historical-treasures)\\nDay 2: Explore Cultural and Historical Treasures\\n**Morning: Notre-Dame Cathedral**\\n* **Time:**9:30 AM\\n* **Details:**Visit the iconic Notre-Dame Cathedral. Although some areas may be under restoration, its architecture and history are worth experiencing. Warm clothing is essential as the interior can be chilly.\\n**Afternoon: Musée d’Orsay**\\n* **Time:**1:30 PM\\n* **Details:**Head to the Musée d’Orsay, renowned for its Impressionist masterpieces. This indoor activity is ideal for escaping the cold and enjoying world-class art.\\n**Evening: Montmartre and Sacré-Cœur**\\n* **Time:**5:00 PM\\n* **Details:**Wander through the charming streets of Montmartre and visit the Sacré-Cœur Basilica. The view of Paris in the snow is breathtaking. Enjoy a cozy dinner at a local bistro in Montmartre.### [\\u200b\\n](#day-3:-discover-hidden-gems-and-local-flavors)\\nDay 3: Discover Hidden Gems and Local Flavors\\n**Morning: Le Marais District**\\n* **Time:**10:00 AM\\n* **Details:**Explore Le Marais, known for its vibrant street art, boutiques, and cafes. Enjoy a leisurely breakfast and shop for unique souvenirs.\\n**Afternoon: Palais Garnier (Opera House)**\\n* **Time:**2:00 PM\\n* **Details:**Tour the opulent Palais Garnier. Its stunning interiors are a must-see, especially when it’s snowy outside.\\n**Evening: Moulin Rouge Show**\\n* **Time:**8:00 PM\\n* **Details:**Conclude your trip with a classic Parisian experience at the Moulin Rouge. Book in advance to secure a good seat and enjoy the legendary cabaret performance.### [\\u200b\\n](#additional-tips:-2)\\nAdditional Tips:\\n* **Weather Preparation:**Wear layers, waterproof boots, and carry an umbrella. The snow and cold wind can be intense.\\n* **Dining:**Indulge in warm, hearty French cuisine at local cafes and restaurants. Try dishes like French onion soup, coq au vin, and tarte Tatin.\\n* **Transport:**Use public transportation to avoid the snowy streets, and consider purchasing a Paris Visite pass for unlimited travel.## [\\u200b\\n](#enjoy-your-snowy-adventure-in-paris)\\nEnjoy your snowy adventure in Paris!\\n**Tokyo Itinerary**\\n**Day 1: Arrival and Exploration of Historical and Cultural Sites**\\n* **Morning:**\\n* **Asakusa District**: Begin your day with a visit to the historic Asakusa district. Explore the iconic Senso-ji Temple, Tokyo’s oldest temple. Enjoy the traditional market streets like Nakamise Street for some shopping and snacks.\\n* **Afternoon:**\\n* **Tokyo National Museum**: Head to Ueno Park and visit the Tokyo National Museum. Discover Japan’s extensive collection of art and antiquities. This is a great spot to dive into Japanese history and culture.\\n* **Evening:**\\n* **Dinner in Ueno**: Explore the local dining options around Ueno and enjoy a traditional Japanese dinner.\\n**Day 2: Modern Tokyo and Unique Experiences**\\n* **Morning:**\\n* **Ghibli Museum**: Start your day with a magical visit to the Ghibli Museum in Mitaka. Perfect for fans of Studio Ghibli’s animated films, this museum offers a whimsical look into the creative world of Hayao Miyazaki.\\n* **Afternoon:**\\n* **Shibuya and Harajuku**: Head towards the bustling areas of Shibuya and Harajuku. Witness the famous Shibuya Crossing and explore the trendy shops of Harajuku, especially Takeshita Street.\\n* **Evening:**\\n* **Golden Gai**: Conclude your day in the vibrant Golden Gai district. This area is renowned for its narrow alleys filled with small bars and eateries. Experience the unique nightlife of Tokyo here.\\n**Day 3: Relax and Explore Green Spaces**\\n* **Morning:**\\n* **Shinjuku Gyoen National Garden**: Spend a peaceful morning strolling through the beautiful Shinjuku Gyoen, one of Tokyo’s largest and most beautiful parks. It’s a perfect spot for relaxation and enjoying nature.\\n* **Afternoon:**\\n* **Meiji Shrine**: Visit the Meiji Shrine, located in a forested area near Harajuku and Shibuya. It’s a serene place to learn about Shinto traditions and enjoy the tranquil setting.\\n* **Evening:**\\n* **Tokyo Tower or Skytree**: End your trip with a visit to either Tokyo Tower or Tokyo Skytree for a panoramic view of the city. It’s an unforgettable way to see Tokyo illuminated at night.\\n**Weather Considerations:**\\n* With the current weather of few clouds and a mild temperature around 10.32°C, it is advisable to wear layers and carry a light jacket for comfort during outdoor activities.\\n* Humidity is high (92%), so be prepared for a slightly damp feeling and consider moisture-wicking clothing.\\n**Additional Tips:**\\n* Always check the opening hours of attractions and book tickets in advance where necessary.\\n* Use Tokyo’s efficient public transport to move around easily.\\n* Consider visiting the websites linked in the attraction descriptions for more detailed information and current updates.\\nHere’s a detailed itinerary for exploring some of Sydney’s top tourist attractions with the current weather conditions in mind. With clear skies and pleasant temperatures, it’s a perfect day to explore the outdoors and enjoy what Sydney has to offer.\\n### [\\u200b\\n](#morning)\\nMorning\\n**9:00 AM - Sydney Opera House**\\n* Begin your day with a visit to the iconic Sydney Opera House. Take a guided tour to learn about its history and architecture. Tours are available in multiple languages.\\n* **Link:**[Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions)\\n**11:00 AM - Royal Botanic Garden Sydney**\\n* Just a short walk from the Opera House, enjoy a leisurely stroll through the Royal Botanic Garden. The clear skies will offer beautiful views of the diverse plant life and the Sydney Harbour.### [\\u200b\\n](#afternoon)\\nAfternoon\\n**12:30 PM - Lunch at Opera Bar**\\n* Head back to Opera Bar for lunch. Enjoy a refreshing cocktail with stunning views of the Sydney Harbour Bridge and the waterfront.\\n* **Link:**[Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions)\\n**2:00 PM - Sydney Harbour Bridge**\\n* After lunch, take a scenic walk across the Sydney Harbour Bridge. If you’re up for it, consider the BridgeClimb for breathtaking panoramic views of the city.\\n**4:00 PM - The Rocks**\\n* Explore The Rocks, one of Sydney’s most historic areas. Wander through the cobbled streets, visit the local markets, and perhaps enjoy a cup of coffee at a nearby café.### [\\u200b\\n](#evening)\\nEvening\\n**6:00 PM - Darling Harbour**\\n* Make your way to Darling Harbour for the evening. Here you can visit attractions such as the SEA LIFE Sydney Aquarium or simply enjoy the lively atmosphere by the waterfront.\\n**8:00 PM - Dinner at a Local Restaurant**\\n* Conclude your day with dinner at one of Darling Harbour’s many restaurants. Choose from a variety of cuisines while enjoying the vibrant night scene.### [\\u200b\\n](#additional-suggestions)\\nAdditional Suggestions\\n* If you’re interested in more unique experiences, consider visiting some of the attractions listed on[Time Out Sydney](https://www.timeout.com/sydney/attractions/tourist-attractions-that-dont-suck), which includes thrilling adventures and scenic tours.\\nWith clear skies and mild temperatures, this itinerary offers a balanced mix of cultural, historical, and scenic experiences. Enjoy your visit to Sydney!\\n## [\\u200b\\n](#support)\\nSupport\\nIf you need help with further questions in Julep:\\n* Join our[Discord community](https://discord.com/invite/JTSBGRZrzj)\\n* Check the[GitHub repository](https://github.com/julep-ai/julep)\\n* Contact support at[hey@julep.ai](mailto:hey@julep.ai)\\n[Agentic Patterns](https://docs.julep.ai/advanced/agentic-patterns)[Multi-Agent Multi-User Sessions](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n[x](https://x.com/julepai)[github](https://github.com/julep-ai/julep)[linkedin](https://www.linkedin.com/company/julep-ai)\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.julep.ai)\\nOn this page\\n* [Overview](#overview)\\n* [1. Input Schema](#1-input-schema)\\n* [2. Tools Configuration](#2-tools-configuration)\\n* [3. Main Workflow Steps](#3-main-workflow-steps)\\n* [Step 1: Fetch Weather Data](#step-1:-fetch-weather-data)\\n* [Step 2: Search for Tourist Attractions](#step-2:-search-for-tourist-attractions)\\n* [Step 3: Combine Data](#step-3:-combine-data)\\n* [Step 4: Generate Itineraries](#step-4:-generate-itineraries)\\n* [Step 5: Format Final Output](#step-5:-format-final-output)\\n* [Example Output](#example-output)\\n* [Support](#support)\\n'}]}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'documents': '[Julephome page](https://docs.julep.ai/)v1\\nSearch Julep docs\\n* [Community](https://discord.gg/p4c7ehs4vD)\\n* [Changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md)\\n##### Get Started\\n* [\\nWelcome to Julep\\n](https://docs.julep.ai/introduction/julep)\\n* [\\nInstallation\\n](https://docs.julep.ai/introduction/install)\\n* [\\nQuick Start\\n](https://docs.julep.ai/introduction/quickstart)\\n##### Julep CLI\\n* [\\nGetting Started\\n](https://docs.julep.ai/julepcli/introduction)\\n* [\\nCommand Reference\\n](https://docs.julep.ai/julepcli/commands)\\n##### Core Concepts\\n* [\\nAgents\\n](https://docs.julep.ai/concepts/agents)\\n* [\\nTasks\\n](https://docs.julep.ai/concepts/tasks)\\n* [\\nSessions\\n](https://docs.julep.ai/concepts/sessions)\\n* [\\nTools\\n](https://docs.julep.ai/concepts/tools)\\n* [\\nUsers\\n](https://docs.julep.ai/concepts/users)\\n* [\\nDocuments (RAG)\\n](https://docs.julep.ai/concepts/docs)\\n* [\\nExecutions\\n](https://docs.julep.ai/concepts/execution)\\n##### Tutorials\\n* [\\nBrowser Use\\n](https://docs.julep.ai/tutorials/browser-use)\\n* [\\nRAG Chatbot for Website\\n](https://docs.julep.ai/tutorials/rag-chatbot)\\n* [\\nTrip Planning\\n](https://docs.julep.ai/tutorials/trip-planning)\\n* [\\nVideo Processing\\n](https://docs.julep.ai/tutorials/video-processing)\\n##### Integrations\\n* [\\nSupported Models\\n](https://docs.julep.ai/integrations/supported-models)\\n* [\\nSupported Integrations\\n](https://docs.julep.ai/integrations/supported-integrations)\\n* [\\nAdd New Integrations\\n](https://docs.julep.ai/integrations/contributing-integrations)\\n* Communication & Data\\n* Media & File Processing\\n* Search\\n* Web & Browser Automation\\n##### Advanced Topics\\n* [\\nNew Syntax (Important)\\n](https://docs.julep.ai/advanced/new-syntax)\\n* [\\nPython Expression\\n](https://docs.julep.ai/advanced/python-expression)\\n* [\\nTypes of Task Steps\\n](https://docs.julep.ai/advanced/types-of-task-steps)\\n* [\\nChat Features in Julep\\n](https://docs.julep.ai/advanced/chat)\\n* [\\nRender Endpoint in Julep\\n](https://docs.julep.ai/advanced/render)\\n* [\\nFiles (Multimedia)\\n](https://docs.julep.ai/advanced/files)\\n* [\\nArchitecture Deep Dive\\n](https://docs.julep.ai/advanced/architecture-deep-dive)\\n* [\\nAgentic Patterns\\n](https://docs.julep.ai/advanced/agentic-patterns)\\n* [\\nExecution Lifecycle\\n](https://docs.julep.ai/advanced/lifecycle)\\n* [\\nMulti-Agent Multi-User Sessions\\n](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n* [\\nLocal Setup\\n](https://docs.julep.ai/advanced/localsetup)\\n[Julephome page](https://docs.julep.ai/)\\nv1\\nSearch Julep docs\\nSearch...\\nNavigation\\nGet Started\\nWelcome to Julep\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n* [Support](mailto:developers@julep.ai)\\n* [GitHub](https://github.com/julep-ai/julep)\\n* [\\nGet API Key\\n](https://dashboard.julep.ai)\\nGet Started\\n# Welcome to Julep\\nJulep is a platform for creating AI agents that remember past interactions and can perform complex tasks. It offers long-term memory and manages multi-step processes.\\nJulep enables the creation of multi-step tasks incorporating decision-making, loops, parallel processing, and integration with numerous external tools and APIs.\\nWhile many AI applications are limited to simple, linear chains of prompts and API calls with minimal branching, Julep is built to handle more complex scenarios which:\\n* Have multiple steps,\\n* Make decisions based on model outputs,\\n* Spawn parallel branches,\\n* Use lots of tools, and\\n* Run for a long time.\\nJulep offers a comprehensive set of features designed to help you build sophisticated AI workflows.\\n#### Imagine you want to build an AI agent that can do more than just answer simple questions —it needs to handle complex tasks, remember past interactions, and maybe even use other tools or APIs.\\nNow since you understand the problem Julep is solving, let’s explore the key features that make Julep stand out.\\n## [\\u200b\\n](#core-features)\\nCore Features\\n## Persistent AI Agents\\nCreate agents that maintain context and remember information across multiple interactions. Agents can learn from past conversations and apply that knowledge to future tasks.\\n## Stateful Sessions\\nKeep track of conversation history and context across multiple interactions. Sessions can be paused, resumed, and maintain their state indefinitely.\\n## Multi-Step Tasks\\nBuild complex workflows with decision-making capabilities, loops, and conditional logic. Tasks can be as simple or as sophisticated as needed.\\n## Task Management\\nHandle long-running tasks that can run indefinitely. Tasks are automatically managed, with built-in support for retries and error handling.\\n## [\\u200b\\n](#advanced-capabilities)\\nAdvanced Capabilities\\nBuilt-in Tools\\nAccess a wide range of built-in tools and easily integrate with external APIs. Tools can be added to agents to extend their capabilities.\\nSelf-Healing\\nAutomatic retry mechanisms for failed steps, message resending, and robust task management keep your workflows running smoothly.\\nRAG Support\\nBuilt-in support for Retrieval-Augmented Generation. Use Julep’s document store to build systems that can retrieve and utilize your own data.\\nEasy Integration\\nSeamlessly integrate with your existing infrastructure using our comprehensive SDKs for Python and Node.js.\\n## [\\u200b\\n](#exploring-the-documentation)\\nExploring the Documentation\\nDepending on your use case, here are different ways to explore our documentation:\\n[\\n## For AI Developers\\nStart with the Quick Start guide, then dive into Core Concepts and Task Management to build AI-powered applications.\\n](https://docs.julep.ai/introduction/quickstart)[\\n## For Enterprise Solutions\\nFocus on Architecture Deep Dive, Security Features, and Integration Guides to understand enterprise-grade deployment.\\n](https://docs.julep.ai/advanced/architecture-deep-dive)[\\n## For Researchers & Experimenters\\nExplore our Model Configuration, RAG Implementation, and Advanced Features sections to experiment with AI capabilities.\\n](https://docs.julep.ai/integrations/supported-models)[\\n## For System Integrators\\nCheck out our API Reference, SDK Documentation, and Integration Tutorials to connect Julep with existing systems.\\n](https://docs.julep.ai/api-reference)\\n## [\\u200b\\n](#next-steps)\\nNext Steps\\n[\\n## Installation\\nDetailed setup instructions\\n](https://docs.julep.ai/introduction/install)[\\n## Quick Start\\nEssential concepts and terminology\\n](https://docs.julep.ai/introduction/quickstart)[\\n## Tutorials\\nLearn from practical tutorials\\n](https://docs.julep.ai/tutorials)\\n## [\\u200b\\n](#need-help?)\\nNeed Help?\\n[\\n## Join our Community\\nGet help and share ideas with other Julep developers\\n](https://discord.gg/p4c7ehs4vD)[\\n## Contact Support\\nReach out to our team for assistance\\n](mailto:developers@julep.ai)\\n[Installation](https://docs.julep.ai/introduction/install)\\n[x](https://x.com/julepai)[github](https://github.com/julep-ai/julep)[linkedin](https://www.linkedin.com/company/julep-ai)\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.julep.ai)\\nOn this page\\n* [Core Features](#core-features)\\n* [Advanced Capabilities](#advanced-capabilities)\\n* [Exploring the Documentation](#exploring-the-documentation)\\n* [Next Steps](#next-steps)\\n* [Need Help?](#need-help?)\\n [Julephome page](https://docs.julep.ai/)v1\\nSearch Julep docs\\n* [Community](https://discord.gg/p4c7ehs4vD)\\n* [Changelog](https://github.com/julep-ai/julep/blob/dev/CHANGELOG.md)\\n##### Get Started\\n* [\\nWelcome to Julep\\n](https://docs.julep.ai/introduction/julep)\\n* [\\nInstallation\\n](https://docs.julep.ai/introduction/install)\\n* [\\nQuick Start\\n](https://docs.julep.ai/introduction/quickstart)\\n##### Julep CLI\\n* [\\nGetting Started\\n](https://docs.julep.ai/julepcli/introduction)\\n* [\\nCommand Reference\\n](https://docs.julep.ai/julepcli/commands)\\n##### Core Concepts\\n* [\\nAgents\\n](https://docs.julep.ai/concepts/agents)\\n* [\\nTasks\\n](https://docs.julep.ai/concepts/tasks)\\n* [\\nSessions\\n](https://docs.julep.ai/concepts/sessions)\\n* [\\nTools\\n](https://docs.julep.ai/concepts/tools)\\n* [\\nUsers\\n](https://docs.julep.ai/concepts/users)\\n* [\\nDocuments (RAG)\\n](https://docs.julep.ai/concepts/docs)\\n* [\\nExecutions\\n](https://docs.julep.ai/concepts/execution)\\n##### Tutorials\\n* [\\nBrowser Use\\n](https://docs.julep.ai/tutorials/browser-use)\\n* [\\nRAG Chatbot for Website\\n](https://docs.julep.ai/tutorials/rag-chatbot)\\n* [\\nTrip Planning\\n](https://docs.julep.ai/tutorials/trip-planning)\\n* [\\nVideo Processing\\n](https://docs.julep.ai/tutorials/video-processing)\\n##### Integrations\\n* [\\nSupported Models\\n](https://docs.julep.ai/integrations/supported-models)\\n* [\\nSupported Integrations\\n](https://docs.julep.ai/integrations/supported-integrations)\\n* [\\nAdd New Integrations\\n](https://docs.julep.ai/integrations/contributing-integrations)\\n* Communication & Data\\n* Media & File Processing\\n* Search\\n* Web & Browser Automation\\n##### Advanced Topics\\n* [\\nNew Syntax (Important)\\n](https://docs.julep.ai/advanced/new-syntax)\\n* [\\nPython Expression\\n](https://docs.julep.ai/advanced/python-expression)\\n* [\\nTypes of Task Steps\\n](https://docs.julep.ai/advanced/types-of-task-steps)\\n* [\\nChat Features in Julep\\n](https://docs.julep.ai/advanced/chat)\\n* [\\nRender Endpoint in Julep\\n](https://docs.julep.ai/advanced/render)\\n* [\\nFiles (Multimedia)\\n](https://docs.julep.ai/advanced/files)\\n* [\\nArchitecture Deep Dive\\n](https://docs.julep.ai/advanced/architecture-deep-dive)\\n* [\\nAgentic Patterns\\n](https://docs.julep.ai/advanced/agentic-patterns)\\n* [\\nExecution Lifecycle\\n](https://docs.julep.ai/advanced/lifecycle)\\n* [\\nMulti-Agent Multi-User Sessions\\n](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n* [\\nLocal Setup\\n](https://docs.julep.ai/advanced/localsetup)\\n[Julephome page](https://docs.julep.ai/)\\nv1\\nSearch Julep docs\\nSearch...\\nNavigation\\nAdvanced Topics\\nExecution Lifecycle\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n[Home\\n](https://docs.julep.ai/introduction/julep)[Guides\\n](https://docs.julep.ai/guides/getting-started/chat-with-an-agent)[SDK\\n](https://docs.julep.ai/sdks)[🚨 Open Responses API (Alpha)\\n](https://docs.julep.ai/responses/quickstart)[API Reference\\n](https://docs.julep.ai/api-reference/agents/list-agents)\\n* [Support](mailto:developers@julep.ai)\\n* [GitHub](https://github.com/julep-ai/julep)\\n* [\\nGet API Key\\n](https://dashboard.julep.ai)\\nAdvanced Topics\\n# Execution Lifecycle\\nUnderstanding the Lifecycle of Task when executed in Julep\\n## [\\u200b\\n](#overview)\\nOverview\\nUnderstanding the lifecycle of a Julep task is crucial for building effective workflows.\\nLet’s explore this through the lens of a[Trip Plan task](https://docs.julep.ai/tutorials/trip-planning)- a practical example that showcases key aspects of task execution.\\nThe Trip Plan task is an ideal example because it demonstrates:\\n1. Parallel execution of workflow steps\\n2. Integration with multiple external APIs:\\n* [Weather API](https://docs.julep.ai/integrations/communicationdata/weather)for current conditions\\n* [Brave Search API](https://docs.julep.ai/integrations/search/brave)for attractions\\n* Data aggregation from various sources\\n* AI-powered personalization of results\\nBelow is a visual representation of how this task flows through Julep’s execution lifecycle:\\nLifecycle of the Trip Plan Task\\nLet’s examine each phase of the execution lifecycle using this task as our guide.\\nThis is a simplified representation of the execution lifecycle. In practice, Julephandles many more details and edge cases to ensure robust and efficient task execution.\\nOut here in this section, we will be focusing on the main workflow steps of the Trip Plan task and how these steps are executed in Julep.\\n### [\\u200b\\n](#1-input-schema)\\n1. Input Schema\\nFirst, we define what inputs our task expects:\\n```\\n`input\\\\_schema:type:objectproperties:locations:type:arrayitems:type:string`\\n```\\nThis schema specifies that our task expects an array of location strings (e.g.,`["New York", "London", "Paris"]`).\\n### [\\u200b\\n](#2-tools-configuration)\\n2. Tools Configuration\\nNext, we define the external tools our task will use:\\n```\\n`-name:weathertype:integrationintegration:provider:weathersetup:openweathermap\\\\_api\\\\_key:{openweathermap\\\\_api\\\\_key}-name:internet\\\\_searchtype:integrationintegration:provider:bravesetup:api\\\\_key:{brave\\\\_api\\\\_key}`\\n```\\nWe’re using two integrations:\\n* The`weather`integration to fetch current weather conditions\\n* The`brave`search integration to find tourist attractions### [\\u200b\\n](#3-main-workflow-steps)\\n3. Main Workflow Steps\\n#### [\\u200b\\n](#step-1:-fetch-weather-data)\\nStep 1: Fetch Weather Data\\n```\\n`-over:$ steps[0].input.locationsmap:tool:weatherarguments:location:$ \\\\_`\\n```\\nThis step:\\n* Iterates over each location in the input array\\n* Calls the weather API for each location\\n* The`\\\\_`represents the current location in the iteration#### [\\u200b\\n](#step-2:-search-for-tourist-attractions)\\nStep 2: Search for Tourist Attractions\\n```\\n`-over:$ steps[0].input.locationsmap:tool:internet\\\\_searcharguments:query:$ ''tourist attractions in '' + \\\\_`\\n```\\nThis step:\\n* Iterates over the locations again\\n* Searches for tourist attractions in each location\\n* Constructs a search query by concatenating “tourist attractions in ”with the location#### [\\u200b\\n](#step-3:-combine-data)\\nStep 3: Combine Data\\n```\\n`-evaluate:zipped:|-$ list(zip(steps[0].input.locations,[output['result']for output in steps[0].output],steps[1].output))`\\n```\\nThis step:\\n* Combines the data from previous steps into tuples\\n* Each tuple contains: (location, weather\\\\_data, attractions\\\\_data)\\n* Uses Python’s`zip`function to align the data#### [\\u200b\\n](#step-4:-generate-itineraries)\\nStep 4: Generate Itineraries\\n```\\n`-over:$ \\\\_['zipped']parallelism:3# Inside the map step, each `\\\\_` represents the current element in the list# which is a tuple of (location, weather, attractions)map:prompt:-role:systemcontent:>-$ f'''You are{agent.name}. Your task is to create a detailed itineraryfor visiting tourist attractions in some locations.The user will give you the following information for each location:-The location-The current weather condition-The top tourist attractions'''-role:usercontent:>-$ f'''Location:{\\\\_[0]}Weather:{\\\\_[1]}Attractions:{\\\\_[2]}'''unwrap:true`\\n```\\nThis step:\\n* Processes up to 3 locations in parallel\\n* For each location tuple:\\n* Sends a prompt to the AI model\\n* Includes location, weather, and attraction data\\n* Generates a personalized itinerary#### [\\u200b\\n](#step-5:-format-final-output)\\nStep 5: Format Final Output\\n```\\n`-evaluate:final\\\\_plan:|-$ ''\\\\\\\\\\\\\\\\n---------------\\\\\\\\\\\\\\\\n''.join(activity for activity in \\\\_)`\\n```\\nThis step:\\n* Combines all itineraries into a single output\\n* Separates each itinerary with a divider## [\\u200b\\n](#example-output)\\nExample Output\\nAn example output when running this task with an input of`["New York", "London", "Paris", "Tokyo", "Sydney"]`:\\nHere’s a detailed itinerary for visiting top tourist attractions in New York, considering the current weather conditions.\\n### [\\u200b\\n](#day-1:-iconic-landmarks-and-observation-decks)\\nDay 1: Iconic Landmarks and Observation Decks\\n* **Morning:**\\n* **Top of the Rock Observation Deck:**Start your day with a visit to the Top of the Rock Observation Deck at Rockefeller Plaza. The panoramic 360-degree views from the 70th floor are a must-see. Dress warmly as it feels like 5.2°C outside, and it’s quite windy.\\n* **Link for more info:**[Tripadvisor - Top of the Rock](https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html)\\n* **Afternoon:**\\n* **St. Patrick’s Cathedral:**Just a short walk from Rockefeller Plaza, explore the stunning architecture of St. Patrick’s Cathedral. The overcast skies will provide a dramatic backdrop for photos.\\n* **Fifth Avenue:**Enjoy a leisurely stroll along Fifth Avenue, visiting iconic stores and landmarks.\\n* **Evening:**\\n* **Times Square:**Experience the vibrant lights and energy of Times Square. The overcast clouds might enhance the brightness of the neon lights.### [\\u200b\\n](#day-2:-culture-and-history)\\nDay 2: Culture and History\\n* **Morning:**\\n* **The Museum of Modern Art (MoMA):**Spend your morning exploring MoMA’s vast collection of modern and contemporary art. This indoor activity is perfect for a cloudy day.\\n* **Afternoon:**\\n* **Central Park:**Head to Central Park for a refreshing walk. With 100% cloud cover, it’s a great day to explore the park without the harsh sun. Consider visiting the Central Park Zoo or taking a guided tour.\\n* **Evening:**\\n* **Broadway Show:**End your day with a Broadway show. It’s an ideal indoor activity to avoid the chilly weather outside. Book tickets in advance for popular shows.### [\\u200b\\n](#day-3:-historical-and-educational)\\nDay 3: Historical and Educational\\n* **Morning:**\\n* **Statue of Liberty and Ellis Island:**Take a ferry to visit these iconic sites. Dress warmly for the ferry ride. The cloud cover will provide a unique perspective for photos.\\n* **Afternoon:**\\n* **9/11 Memorial and Museum:**Spend your afternoon reflecting at the 9/11 Memorial and exploring the museum exhibits.\\n* **Evening:**\\n* **Brooklyn Bridge:**Walk across the Brooklyn Bridge and enjoy the city skyline. With the wind speed at 5.81 m/s, be prepared for breezy conditions.### [\\u200b\\n](#additional-tips:)\\nAdditional Tips:\\n* **Clothing:**Wear layers to keep warm, as the temperature feels colder than it actually is.\\n* **Dining:**New York offers a plethora of dining options. Consider trying some local favorites like a classic New York bagel or pizza.\\n* **Transportation:**Utilize the subway for efficient travel across the city. Taxis and ride-sharing services are also readily available.\\nFor more details on attractions and guided tours, you can visit[USA Guided Tours](https://usaguidedtours.com/nyc/attraction/)and[I Love NY](https://www.iloveny.com/places-to-go/new-york-city/attractions/).\\n## [\\u200b\\n](#enjoy-your-trip-to-new-york-city)\\nEnjoy your trip to New York City!\\n**Day 1: Exploring Iconic London Landmarks**\\n**Morning:**\\n1. **Buckingham Palace**\\n* Start your day early with a visit to Buckingham Palace. Arrive by 9:30 AM to catch the Changing of the Guard ceremony, which typically starts at 11:00 AM. Enjoy the majestic architecture and the surrounding gardens.\\n* Weather Tip: With the overcast clouds, it might feel chilly, so dress warmly and bring an umbrella just in case.\\n**Midday:**2.**Westminster Abbey**\\n* Head towards Westminster Abbey, a short walk from Buckingham Palace. This historic church has been the site of many significant events, including royal weddings and coronations. Spend about 1.5 hours exploring.\\n1. **Lunch at Borough Market**\\n* Take a tube or walk to Borough Market for a variety of food options. It’s a great place to warm up with some hot street food and explore the diverse culinary offerings.\\n**Afternoon:**4.**London Eye**\\n* After lunch, head to the London Eye. The overcast sky might not offer the clearest views, but the experience is still worthwhile. Pre-book your tickets to avoid long lines and enjoy a 30-minute ride on this iconic Ferris wheel.\\n**Evening:**5.**The Globe Theatre**\\n* As the day winds down, visit Shakespeare’s Globe Theatre. If there’s a performance, consider attending or simply take a guided tour to learn about the history of this famous theater.\\n**Day 2: Museums and Cultural Exploration**\\n**Morning:**\\n1. **The British Museum**\\n* Start your second day at the British Museum. Spend a few hours exploring the vast collection of art and antiquities. Highlights include the Rosetta Stone and the Elgin Marbles.\\n**Midday:**2.**Lunch near Covent Garden**\\n* Head to Covent Garden for lunch. This area is bustling with restaurants and cafes, perfect for a cozy indoor meal.\\n**Afternoon:**3.**The Tower of London**\\n* After lunch, make your way to the Tower of London. Delve into England’s rich history and see the Crown Jewels. Allocate about 2-3 hours for this visit.\\n**Evening:**4.**Tower Bridge**\\n* Conclude your day with a walk across Tower Bridge. The views of the Thames River and the cityscape are beautiful, even on a cloudy evening.\\n**Day 3: Leisure and Local Experiences**\\n**Morning:**\\n1. **Natural History Museum**\\n* Begin your last day at the Natural History Museum. It’s a family-friendly museum with fascinating exhibits, including dinosaur skeletons and a model of a blue whale.\\n**Midday:**2.**Lunch at South Kensington**\\n* Enjoy a relaxed lunch in South Kensington. There are plenty of options, from casual cafes to high-end dining.\\n**Afternoon:**3.**Hyde Park**\\n* Spend your afternoon strolling through Hyde Park. Visit the Serpentine Galleries if you’re interested in contemporary art. The park’s natural beauty is a peaceful retreat amidst the city hustle.\\n**Evening:**4.**Dinner and a Show in the West End**\\n* End your London adventure with a memorable dinner followed by a theater show in the West End. Book your tickets in advance for popular shows.\\n**Additional Tips:**\\n* Always check the attraction websites for any specific COVID-19 guidelines or changes in operating hours.\\n* London’s public transport system is efficient; consider getting an Oyster card for convenient travel.\\n* Don’t forget to dress in layers to adapt to the chilly weather, and always have your camera ready to capture memories.\\nHere’s a detailed itinerary for your visit to Paris, considering the current snowy weather conditions and top attractions:\\n### [\\u200b\\n](#day-1:-embrace-the-iconic-landmarks)\\nDay 1: Embrace the Iconic Landmarks\\n**Morning: Eiffel Tower**\\n* **Time:**9:00 AM\\n* **Details:**Begin your day with a visit to the Eiffel Tower. Even in the snow, the tower offers stunning views of Paris. Dress warmly and enjoy hot chocolate from nearby cafes.\\n* **Link for more info:**[Tripadvisor - Things to Do in Paris](https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html)\\n**Afternoon: Louvre Museum**\\n* **Time:**1:00 PM\\n* **Details:**Spend your afternoon indoors at the Louvre Museum. With its vast collection of art and history, it’s a perfect way to escape the cold. Consider taking a guided tour to make the most of your visit.\\n* **Link for more info:**[U.S. News Travel - Things To Do](https://travel.usnews.com/Paris_France/Things_To_Do/)\\n**Evening: Seine River Cruise**\\n* **Time:**6:00 PM\\n* **Details:**End your day with a magical Seine River cruise. The snow adds a picturesque touch to the illuminated landmarks. Ensure to book a heated cruise for comfort.### [\\u200b\\n](#day-2:-explore-cultural-and-historical-treasures)\\nDay 2: Explore Cultural and Historical Treasures\\n**Morning: Notre-Dame Cathedral**\\n* **Time:**9:30 AM\\n* **Details:**Visit the iconic Notre-Dame Cathedral. Although some areas may be under restoration, its architecture and history are worth experiencing. Warm clothing is essential as the interior can be chilly.\\n**Afternoon: Musée d’Orsay**\\n* **Time:**1:30 PM\\n* **Details:**Head to the Musée d’Orsay, renowned for its Impressionist masterpieces. This indoor activity is ideal for escaping the cold and enjoying world-class art.\\n**Evening: Montmartre and Sacré-Cœur**\\n* **Time:**5:00 PM\\n* **Details:**Wander through the charming streets of Montmartre and visit the Sacré-Cœur Basilica. The view of Paris in the snow is breathtaking. Enjoy a cozy dinner at a local bistro in Montmartre.### [\\u200b\\n](#day-3:-discover-hidden-gems-and-local-flavors)\\nDay 3: Discover Hidden Gems and Local Flavors\\n**Morning: Le Marais District**\\n* **Time:**10:00 AM\\n* **Details:**Explore Le Marais, known for its vibrant street art, boutiques, and cafes. Enjoy a leisurely breakfast and shop for unique souvenirs.\\n**Afternoon: Palais Garnier (Opera House)**\\n* **Time:**2:00 PM\\n* **Details:**Tour the opulent Palais Garnier. Its stunning interiors are a must-see, especially when it’s snowy outside.\\n**Evening: Moulin Rouge Show**\\n* **Time:**8:00 PM\\n* **Details:**Conclude your trip with a classic Parisian experience at the Moulin Rouge. Book in advance to secure a good seat and enjoy the legendary cabaret performance.### [\\u200b\\n](#additional-tips:-2)\\nAdditional Tips:\\n* **Weather Preparation:**Wear layers, waterproof boots, and carry an umbrella. The snow and cold wind can be intense.\\n* **Dining:**Indulge in warm, hearty French cuisine at local cafes and restaurants. Try dishes like French onion soup, coq au vin, and tarte Tatin.\\n* **Transport:**Use public transportation to avoid the snowy streets, and consider purchasing a Paris Visite pass for unlimited travel.## [\\u200b\\n](#enjoy-your-snowy-adventure-in-paris)\\nEnjoy your snowy adventure in Paris!\\n**Tokyo Itinerary**\\n**Day 1: Arrival and Exploration of Historical and Cultural Sites**\\n* **Morning:**\\n* **Asakusa District**: Begin your day with a visit to the historic Asakusa district. Explore the iconic Senso-ji Temple, Tokyo’s oldest temple. Enjoy the traditional market streets like Nakamise Street for some shopping and snacks.\\n* **Afternoon:**\\n* **Tokyo National Museum**: Head to Ueno Park and visit the Tokyo National Museum. Discover Japan’s extensive collection of art and antiquities. This is a great spot to dive into Japanese history and culture.\\n* **Evening:**\\n* **Dinner in Ueno**: Explore the local dining options around Ueno and enjoy a traditional Japanese dinner.\\n**Day 2: Modern Tokyo and Unique Experiences**\\n* **Morning:**\\n* **Ghibli Museum**: Start your day with a magical visit to the Ghibli Museum in Mitaka. Perfect for fans of Studio Ghibli’s animated films, this museum offers a whimsical look into the creative world of Hayao Miyazaki.\\n* **Afternoon:**\\n* **Shibuya and Harajuku**: Head towards the bustling areas of Shibuya and Harajuku. Witness the famous Shibuya Crossing and explore the trendy shops of Harajuku, especially Takeshita Street.\\n* **Evening:**\\n* **Golden Gai**: Conclude your day in the vibrant Golden Gai district. This area is renowned for its narrow alleys filled with small bars and eateries. Experience the unique nightlife of Tokyo here.\\n**Day 3: Relax and Explore Green Spaces**\\n* **Morning:**\\n* **Shinjuku Gyoen National Garden**: Spend a peaceful morning strolling through the beautiful Shinjuku Gyoen, one of Tokyo’s largest and most beautiful parks. It’s a perfect spot for relaxation and enjoying nature.\\n* **Afternoon:**\\n* **Meiji Shrine**: Visit the Meiji Shrine, located in a forested area near Harajuku and Shibuya. It’s a serene place to learn about Shinto traditions and enjoy the tranquil setting.\\n* **Evening:**\\n* **Tokyo Tower or Skytree**: End your trip with a visit to either Tokyo Tower or Tokyo Skytree for a panoramic view of the city. It’s an unforgettable way to see Tokyo illuminated at night.\\n**Weather Considerations:**\\n* With the current weather of few clouds and a mild temperature around 10.32°C, it is advisable to wear layers and carry a light jacket for comfort during outdoor activities.\\n* Humidity is high (92%), so be prepared for a slightly damp feeling and consider moisture-wicking clothing.\\n**Additional Tips:**\\n* Always check the opening hours of attractions and book tickets in advance where necessary.\\n* Use Tokyo’s efficient public transport to move around easily.\\n* Consider visiting the websites linked in the attraction descriptions for more detailed information and current updates.\\nHere’s a detailed itinerary for exploring some of Sydney’s top tourist attractions with the current weather conditions in mind. With clear skies and pleasant temperatures, it’s a perfect day to explore the outdoors and enjoy what Sydney has to offer.\\n### [\\u200b\\n](#morning)\\nMorning\\n**9:00 AM - Sydney Opera House**\\n* Begin your day with a visit to the iconic Sydney Opera House. Take a guided tour to learn about its history and architecture. Tours are available in multiple languages.\\n* **Link:**[Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions)\\n**11:00 AM - Royal Botanic Garden Sydney**\\n* Just a short walk from the Opera House, enjoy a leisurely stroll through the Royal Botanic Garden. The clear skies will offer beautiful views of the diverse plant life and the Sydney Harbour.### [\\u200b\\n](#afternoon)\\nAfternoon\\n**12:30 PM - Lunch at Opera Bar**\\n* Head back to Opera Bar for lunch. Enjoy a refreshing cocktail with stunning views of the Sydney Harbour Bridge and the waterfront.\\n* **Link:**[Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions)\\n**2:00 PM - Sydney Harbour Bridge**\\n* After lunch, take a scenic walk across the Sydney Harbour Bridge. If you’re up for it, consider the BridgeClimb for breathtaking panoramic views of the city.\\n**4:00 PM - The Rocks**\\n* Explore The Rocks, one of Sydney’s most historic areas. Wander through the cobbled streets, visit the local markets, and perhaps enjoy a cup of coffee at a nearby café.### [\\u200b\\n](#evening)\\nEvening\\n**6:00 PM - Darling Harbour**\\n* Make your way to Darling Harbour for the evening. Here you can visit attractions such as the SEA LIFE Sydney Aquarium or simply enjoy the lively atmosphere by the waterfront.\\n**8:00 PM - Dinner at a Local Restaurant**\\n* Conclude your day with dinner at one of Darling Harbour’s many restaurants. Choose from a variety of cuisines while enjoying the vibrant night scene.### [\\u200b\\n](#additional-suggestions)\\nAdditional Suggestions\\n* If you’re interested in more unique experiences, consider visiting some of the attractions listed on[Time Out Sydney](https://www.timeout.com/sydney/attractions/tourist-attractions-that-dont-suck), which includes thrilling adventures and scenic tours.\\nWith clear skies and mild temperatures, this itinerary offers a balanced mix of cultural, historical, and scenic experiences. Enjoy your visit to Sydney!\\n## [\\u200b\\n](#support)\\nSupport\\nIf you need help with further questions in Julep:\\n* Join our[Discord community](https://discord.com/invite/JTSBGRZrzj)\\n* Check the[GitHub repository](https://github.com/julep-ai/julep)\\n* Contact support at[hey@julep.ai](mailto:hey@julep.ai)\\n[Agentic Patterns](https://docs.julep.ai/advanced/agentic-patterns)[Multi-Agent Multi-User Sessions](https://docs.julep.ai/advanced/multi-agent-multi-user-sessions)\\n[x](https://x.com/julepai)[github](https://github.com/julep-ai/julep)[linkedin](https://www.linkedin.com/company/julep-ai)\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.julep.ai)\\nOn this page\\n* [Overview](#overview)\\n* [1. Input Schema](#1-input-schema)\\n* [2. Tools Configuration](#2-tools-configuration)\\n* [3. Main Workflow Steps](#3-main-workflow-steps)\\n* [Step 1: Fetch Weather Data](#step-1:-fetch-weather-data)\\n* [Step 2: Search for Tourist Attractions](#step-2:-search-for-tourist-attractions)\\n* [Step 3: Combine Data](#step-3:-combine-data)\\n* [Step 4: Generate Itineraries](#step-4:-generate-itineraries)\\n* [Step 5: Format Final Output](#step-5:-format-final-output)\\n* [Example Output](#example-output)\\n* [Support](#support)\\n'}\n", "--------------------------------------------------\n", "Transition type: finish\n", "Transition output: Julep is a platform for creating sophisticated AI agents that manage complex tasks using long-term memory and multi-step processes. The documentation offers guidance on getting started, using the Julep CLI, understanding core concepts like agents and tasks, and integrating external tools and APIs. Key features include persistent AI agents, stateful sessions, and support for Retrieval-Augmented Generation (RAG). Users can explore tutorials, API references, and SDKs, with additional resources for developers, enterprises, and researchers. The site emphasizes robust task management, easy integration, and extensive support through community links and detailed guides.\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for transition in reversed(transitions):\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the same task with a different URL\n", "\n", "We will use the same code to run the same task, but with a different URL" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [], "source": [ "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"url\": \"https://www.producthunt.com/\"\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execution status: running\n", "--------------------------------------------------\n", "Execution status: succeeded\n", "--------------------------------------------------\n", "Product Hunt is a platform to discover and launch new tech products\n", "It features daily, weekly, and monthly top product lists, showcasing innovations in AI, productivity, developer tools, and more\n", "Today's top product is \"Boxo,\" a tool for deploying AI features in mobile apps\n", "Other highlights include AI-powered email and research tools like Mailgo and Claude Research\n", "Promoted products include discounts on Intercom and tools like Sider for AI research\n", "The site also offers community forums, newsletters, and a marketplace for the latest tech launches and discussions in various tech categories.\n" ] } ], "source": [ "import time\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "while execution.status != \"succeeded\":\n", " time.sleep(5)\n", " execution = client.executions.get(execution.id)\n", " print(\"Execution status: \", execution.status)\n", " print(\"-\"*50)\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "print(\"\\n\".join(execution.output.split(\". \")))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: you can get the output of the crawling step by accessing the corresponding transition's output from the transitions list.\n", "\n", "Example:" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'documents': '[](https://www.producthunt.com/)\\n[Subscribe](https://www.producthunt.com/newsletters?ref=header_nav&campaign=weekly_newsletter&source=header_nav)\\nSign in\\nWelcome to Product Hunt!\\nThe place to launch and discover new tech products.Take a tour.\\n# Top Products Launching Today\\n[](https://www.producthunt.com/posts/boxo-2)\\n[1. Boxo](https://www.producthunt.com/posts/boxo-2)[Quickly deploy AI-generated features in your mobile app](https://www.producthunt.com/posts/boxo-2)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n56\\n254\\n[](https://www.producthunt.com/posts/mailgo-3)\\n[2. Mailgo](https://www.producthunt.com/posts/mailgo-3)[AI-powered cold email platform that boosts deliverability](https://www.producthunt.com/posts/mailgo-3)\\n[Email](https://www.producthunt.com/topics/email)•[Sales](https://www.producthunt.com/topics/sales)•[Marketing](https://www.producthunt.com/topics/marketing)\\n28\\n210\\n[](https://www.producthunt.com/posts/claude-research)\\n[3. Claude Research](https://www.producthunt.com/posts/claude-research)[Claude takes research to new places](https://www.producthunt.com/posts/claude-research)\\n[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Bots](https://www.producthunt.com/topics/bots)\\n2\\n170\\n[](https://www.producthunt.com/posts/sparkles)\\n[4. Sparkles](https://www.producthunt.com/posts/sparkles)[Resurface Wisdom with Widgets & Notifications](https://www.producthunt.com/posts/sparkles)\\n[Android](https://www.producthunt.com/topics/android)•[iOS](https://www.producthunt.com/topics/ios)•[Health & Fitness](https://www.producthunt.com/topics/health-fitness)\\n21\\n155\\n[](https://www.producthunt.com/posts/kling-ai-2-0)\\n[5. Kling AI 2.0](https://www.producthunt.com/posts/kling-ai-2-0)[Next-level AI video & image generation + editing](https://www.producthunt.com/posts/kling-ai-2-0)\\n[Design Tools](https://www.producthunt.com/topics/design-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Video](https://www.producthunt.com/topics/video)\\n2\\n147\\nGet the best of Product Hunt, directly in your inbox.\\n[Sign Up](https://www.producthunt.com/newsletters?campaign=weekly_newsletter&source=newsletter_homepage)\\n[](https://www.producthunt.com/posts/acedit)\\n[6. Acedit](https://www.producthunt.com/posts/acedit)[Ace Interviews: AI Prep & Live Assist](https://www.producthunt.com/posts/acedit)\\n[Chrome Extensions](https://www.producthunt.com/topics/chrome-extensions)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Career](https://www.producthunt.com/topics/career)\\n31\\n140\\n[](https://www.producthunt.com/posts/guidemaker)\\n[7. Guidemaker](https://www.producthunt.com/posts/guidemaker)[Free How-to Guide & SOP Creator](https://www.producthunt.com/posts/guidemaker)\\n[Chrome Extensions](https://www.producthunt.com/topics/chrome-extensions)•[Productivity](https://www.producthunt.com/topics/productivity)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n9\\n133\\n[](https://www.producthunt.com/posts/why-my-wife-yelling-at-me)\\n[8. Why My Wife Yelling At Me](https://www.producthunt.com/posts/why-my-wife-yelling-at-me)[AI wife simulator: helping you survive marriage... virtually](https://www.producthunt.com/posts/why-my-wife-yelling-at-me)\\n[Funny](https://www.producthunt.com/topics/funny)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Tech](https://www.producthunt.com/topics/tech)\\n15\\n133\\n[](https://www.producthunt.com/posts/gamma-2-0)\\n[9. Gamma 2.0](https://www.producthunt.com/posts/gamma-2-0)[Presentations, websites, and socials created instantly](https://www.producthunt.com/posts/gamma-2-0)\\n[Design Tools](https://www.producthunt.com/topics/design-tools)•[Social Media](https://www.producthunt.com/topics/social-media)•[Marketing](https://www.producthunt.com/topics/marketing)\\n3\\n126\\n[](https://www.producthunt.com/posts/deeptrue)\\n[10. Deeptrue](https://www.producthunt.com/posts/deeptrue)[Video conferencing with real-time video translation](https://www.producthunt.com/posts/deeptrue)\\n[Languages](https://www.producthunt.com/topics/languages)•[Meetings](https://www.producthunt.com/topics/meetings)•[Video](https://www.producthunt.com/topics/video)\\n11\\n119\\nIntercom\\nStartups get 90% off Intercom, the complete AI first customer service platform\\n[Promoted](https://www.producthunt.com/sponsor)\\n[Sales](https://www.producthunt.com/topics/sales)•[Customer Communication](https://www.producthunt.com/topics/customer-communication)•[Growth Hacking](https://www.producthunt.com/topics/growth-hacking)\\n[Andrew Luisi](https://www.producthunt.com/@andrew_luisi)\\nalways love reading about Intercom and learning better ways to bring success to our customers! :)\\n23\\n1,451\\n[](https://www.producthunt.com/posts/errsole)\\n[11. errsole](https://www.producthunt.com/posts/errsole)[First open-source Node.js logger with a built-in log viewer](https://www.producthunt.com/posts/errsole)\\n[Open Source](https://www.producthunt.com/topics/open-source)•[SaaS](https://www.producthunt.com/topics/saas)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)\\n6\\n119\\n[](https://www.producthunt.com/posts/software-prices-by-vendr)\\n[12. Software Prices by Vendr](https://www.producthunt.com/posts/software-prices-by-vendr)[Get the price, without sitting through the sales pitch.](https://www.producthunt.com/posts/software-prices-by-vendr)\\n[Chrome Extensions](https://www.producthunt.com/topics/chrome-extensions)•[SaaS](https://www.producthunt.com/topics/saas)•[Money](https://www.producthunt.com/topics/money)\\n7\\n118\\n[](https://www.producthunt.com/posts/agent-development-kit)\\n[13. Agent Development Kit](https://www.producthunt.com/posts/agent-development-kit)[Build multi-agent systems with Google's open framework](https://www.producthunt.com/posts/agent-development-kit)\\n[Open Source](https://www.producthunt.com/topics/open-source)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[GitHub](https://www.producthunt.com/topics/github)\\n1\\n117\\n[](https://www.producthunt.com/posts/super-builder-2-0)\\n[14. Super Builder 2.0](https://www.producthunt.com/posts/super-builder-2-0)[A drag-and-drop website builder for Notion](https://www.producthunt.com/posts/super-builder-2-0)\\n[Website Builder](https://www.producthunt.com/topics/website-builder)•[No-Code](https://www.producthunt.com/topics/no-code)•[Notion](https://www.producthunt.com/topics/notion)\\n6\\n115\\n[](https://www.producthunt.com/posts/dropshare-6)\\n[15. Dropshare 6](https://www.producthunt.com/posts/dropshare-6)[No frills way to upload files, share a link and be done](https://www.producthunt.com/posts/dropshare-6)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Storage](https://www.producthunt.com/topics/storage)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)\\n6\\n105\\nIdentifAI\\nDiscern human from AI creations\\n[Promoted](https://www.producthunt.com/sponsor)\\n[](https://www.producthunt.com/posts/cerebro-4)\\n[16. Cerebro](https://www.producthunt.com/posts/cerebro-4)[Cerebro turns information into connected insights](https://www.producthunt.com/posts/cerebro-4)\\n[Notes](https://www.producthunt.com/topics/notes)•[Education](https://www.producthunt.com/topics/education)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n5\\n105\\n[](https://www.producthunt.com/posts/star-wars-intro-creator-2)\\n[17. Star Wars Intro Creator](https://www.producthunt.com/posts/star-wars-intro-creator-2)[Create your own Star Wars opening crawl in seconds](https://www.producthunt.com/posts/star-wars-intro-creator-2)\\n[Design Tools](https://www.producthunt.com/topics/design-tools)•[Entertainment](https://www.producthunt.com/topics/entertainment)•[Video](https://www.producthunt.com/topics/video)\\n5\\n105\\n[](https://www.producthunt.com/posts/capwords)\\n[18. CapWords](https://www.producthunt.com/posts/capwords)[Learn a new language with AI-powered object recognition](https://www.producthunt.com/posts/capwords)\\n[Languages](https://www.producthunt.com/topics/languages)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Tech](https://www.producthunt.com/topics/tech)\\n12\\n101\\n[](https://www.producthunt.com/posts/phare-status-pages)\\n[19. Phare Status Pages](https://www.producthunt.com/posts/phare-status-pages)[Get a sleek status pages with your own domain name](https://www.producthunt.com/posts/phare-status-pages)\\n[Analytics](https://www.producthunt.com/topics/analytics)•[Website Builder](https://www.producthunt.com/topics/website-builder)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)\\n8\\n101\\n[](https://www.producthunt.com/posts/prmptvault)\\n[20. PrmptVault](https://www.producthunt.com/posts/prmptvault)[Save your best AI prompts. Access and share them anywhere](https://www.producthunt.com/posts/prmptvault)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Tech](https://www.producthunt.com/topics/tech)\\n3\\n67\\nAuth0 by Okta\\nMake login our problem. Not yours. Get started today.\\n[Promoted](https://www.producthunt.com/sponsor)\\nSee all of today's products\\n## Yesterday's Top Products\\n[](https://www.producthunt.com/posts/extrovert-2)\\n[1. Extrovert](https://www.producthunt.com/posts/extrovert-2)[Warm-up and nurture prospects at scale on linkedin](https://www.producthunt.com/posts/extrovert-2)\\n[Sales](https://www.producthunt.com/topics/sales)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[LinkedIn](https://www.producthunt.com/topics/linkedin)\\n115\\n595\\n[](https://www.producthunt.com/posts/aqua-voice)\\n[2. Aqua Voice](https://www.producthunt.com/posts/aqua-voice)[Incredibly fast voice input for Macand Windows](https://www.producthunt.com/posts/aqua-voice)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n88\\n473\\n[](https://www.producthunt.com/posts/potpie-ai)\\n[3. Potpie AI](https://www.producthunt.com/posts/potpie-ai)[Create custom AI agents for your code](https://www.producthunt.com/posts/potpie-ai)\\n[Developer Tools](https://www.producthunt.com/topics/developer-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[GitHub](https://www.producthunt.com/topics/github)\\n51\\n365\\n[](https://www.producthunt.com/posts/gpt-4-1-in-the-api)\\n[4. GPT-4.1 in the API](https://www.producthunt.com/posts/gpt-4-1-in-the-api)[Announcing GPT-4.1, GPT-4.1 mini, & GPT-4.1 nano in the API](https://www.producthunt.com/posts/gpt-4-1-in-the-api)\\n[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n10\\n335\\n[](https://www.producthunt.com/posts/notion-mail)\\n[5. Notion Mail](https://www.producthunt.com/posts/notion-mail)[The first inbox that thinks like you](https://www.producthunt.com/posts/notion-mail)\\n[Email](https://www.producthunt.com/topics/email)•[Productivity](https://www.producthunt.com/topics/productivity)•[Notion](https://www.producthunt.com/topics/notion)\\n18\\n327\\nAirtable AI Assistant\\nBuild apps through conversation, not clicks\\n[Promoted](https://www.producthunt.com/sponsor)\\n[Design Tools](https://www.producthunt.com/topics/design-tools)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)•[Data & Analytics](https://www.producthunt.com/topics/data-analytics)\\n8\\n221\\nSee all of yesterday's top products\\n## Last Week's Top Products\\n[](https://www.producthunt.com/posts/pippit-ai)\\n[1. Pippit AI](https://www.producthunt.com/posts/pippit-ai)[Your smart video & image creator for marketing success](https://www.producthunt.com/posts/pippit-ai)\\n[Design Tools](https://www.producthunt.com/topics/design-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Video Art](https://www.producthunt.com/topics/video-art)\\n85\\n1,322\\n[](https://www.producthunt.com/posts/evertutor-live)\\n[2. EverTutor Live](https://www.producthunt.com/posts/evertutor-live)[Your very own AI Tutor that teaches, adapts, and interacts](https://www.producthunt.com/posts/evertutor-live)\\n[Education](https://www.producthunt.com/topics/education)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Online Learning](https://www.producthunt.com/topics/online-learning)\\n128\\n961\\n[](https://www.producthunt.com/posts/sherlock-22ca6fdc-45ee-48ff-8169-955198c7e247)\\n[3. Sherlock](https://www.producthunt.com/posts/sherlock-22ca6fdc-45ee-48ff-8169-955198c7e247)[Stop AI-assisted cheating in remote interviews](https://www.producthunt.com/posts/sherlock-22ca6fdc-45ee-48ff-8169-955198c7e247)\\n[Hiring](https://www.producthunt.com/topics/hiring)\\n75\\n856\\n[](https://www.producthunt.com/posts/the-swarm)\\n[4. The Swarm](https://www.producthunt.com/posts/the-swarm)[Relationships. Are. Back.](https://www.producthunt.com/posts/the-swarm)\\n[Sales](https://www.producthunt.com/topics/sales)•[API](https://www.producthunt.com/topics/api-1)•[Social Networking](https://www.producthunt.com/topics/social-networking)\\n113\\n772\\n[](https://www.producthunt.com/posts/voicenotes-pages)\\n[5. Voicenotes Pages](https://www.producthunt.com/posts/voicenotes-pages)[What if publishing felt like talking to a friend?](https://www.producthunt.com/posts/voicenotes-pages)\\n[Notes](https://www.producthunt.com/topics/notes)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Audio](https://www.producthunt.com/topics/audio)\\n86\\n751\\nBebop.ai\\nSales Teams, Stop Wasting Time on Cold Leads!\\n[Promoted](https://www.producthunt.com/sponsor)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Sales](https://www.producthunt.com/topics/sales)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n22\\n206\\nGet the best of Product Hunt, directly in your inbox.\\n[Sign Up](https://www.producthunt.com/newsletters?campaign=weekly_newsletter&source=newsletter_homepage)\\nSee all of last week's top products\\n## Last Month's Top Products\\n[](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)\\n[1. Sider 5.0: Deep Research with Wisebase](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)[Mimic Human Research & Save Findings in AI Knowledge Base](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)\\n[Web App](https://www.producthunt.com/topics/web-app)•[Productivity](https://www.producthunt.com/topics/productivity)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n356\\n2,250\\n[](https://www.producthunt.com/products/metagpt-x#mgx)\\n[2. MGX](https://www.producthunt.com/products/metagpt-x#mgx)[The first AI dev team](https://www.producthunt.com/products/metagpt-x#mgx)\\n[Productivity](https://www.producthunt.com/topics/productivity)•[Developer Tools](https://www.producthunt.com/topics/developer-tools)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)\\n415\\n2,196\\n[](https://www.producthunt.com/products/aha-3#aha-6)\\n[3. Aha](https://www.producthunt.com/products/aha-3#aha-6)[The world's first AI influencer marketing team](https://www.producthunt.com/products/aha-3#aha-6)\\n[Marketing](https://www.producthunt.com/topics/marketing)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Influencer marketing](https://www.producthunt.com/topics/influencer-marketing)\\n379\\n1,864\\n[](https://www.producthunt.com/products/kintsugi#kintsugi)\\n[4. Kintsugi](https://www.producthunt.com/products/kintsugi#kintsugi)[Put your sales tax on autopilot](https://www.producthunt.com/products/kintsugi#kintsugi)\\n[Payments](https://www.producthunt.com/topics/payments)•[SaaS](https://www.producthunt.com/topics/saas)•[E-Commerce](https://www.producthunt.com/topics/e-commerce)\\n51\\n1,146\\n[](https://www.producthunt.com/products/skarbe#skarbe)\\n[5. Skarbe](https://www.producthunt.com/products/skarbe#skarbe)[The pro-active sales engine that is CRM-free](https://www.producthunt.com/products/skarbe#skarbe)\\n[Sales](https://www.producthunt.com/topics/sales)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[CRM](https://www.producthunt.com/topics/crm)\\n183\\n1,140\\nAha\\nThe world's first AI influencer marketing team\\n[Promoted](https://www.producthunt.com/sponsor)\\n[Marketing](https://www.producthunt.com/topics/marketing)•[Artificial Intelligence](https://www.producthunt.com/topics/artificial-intelligence)•[Influencer marketing](https://www.producthunt.com/topics/influencer-marketing)\\n379\\n1,864\\nSee all of last month's top products\\n[\\nBEST PRODUCTS OF2024\\nGolden Kitty\\nAwards\\n2024\\nSee the best of2024\\n](https://www.producthunt.com/golden-kitty-awards/hall-of-fame?year=2024)\\n* [Blog](https://www.producthunt.com/stories)•\\n* [Newsletter](https://www.producthunt.com/newsletters)•\\n* [Questions](https://www.producthunt.com/questions)•\\n* [Forums](https://www.producthunt.com/p/general)•\\n* [Product Categories](https://www.producthunt.com/categories)•\\n* [Apps](https://www.producthunt.com/apps)•\\n* [About](https://www.producthunt.com/about)•\\n* [FAQ](https://help.producthunt.com)•\\n* [Terms](https://www.producthunt.com/legal#terms)•\\n* [Privacy and Cookies](https://www.producthunt.com/legal#privacy)•\\n* [X.com](https://x.com/ProductHunt)•\\n* [Facebook](https://www.facebook.com/producthunt)•\\n* [Instagram](https://www.instagram.com/producthunt)•\\n* [LinkedIn](https://www.linkedin.com/company/producthunt)•\\n* [YouTube](https://www.youtube.com/channel/UCOtU18DT8csQVqHPT1wtYzw)•\\n* [Advertise](https://www.producthunt.com/sponsor?utm_content=sf)\\n©2025Product Hunt\\n[Trending Forum Threads](https://www.producthunt.com/p/general)\\n[p/general](https://www.producthunt.com/p/general)[Maker''s Corner: Sh\\\\*t that sells: From toilet tracker to business breakthrough](https://www.producthunt.com/p/general/maker-s-corner-sh-t-that-sells-from-toilet-tracker-to-business-breakthrough)\\nUpvote(7)•[0](https://www.producthunt.com/p/general/maker-s-corner-sh-t-that-sells-from-toilet-tracker-to-business-breakthrough)\\n[p/producthunt](https://www.producthunt.com/p/producthunt)[Show your 404 page (yes, really)](https://www.producthunt.com/p/producthunt/show-your-404-page-yes-really)\\nUpvote(46)•[22](https://www.producthunt.com/p/producthunt/show-your-404-page-yes-really)\\n[p/producthunt](https://www.producthunt.com/p/producthunt)[I was asked to delete a featured launch, but it's actually missing the point.](https://www.producthunt.com/p/producthunt/i-was-asked-to-delete-a-featured-launch-but-it-s-actually-missing-the-point)\\nUpvote(25)•[17](https://www.producthunt.com/p/producthunt/i-was-asked-to-delete-a-featured-launch-but-it-s-actually-missing-the-point)\\n[p/superads](https://www.producthunt.com/p/superads)[We just launched a free Facebook Ads benchmarking tool](https://www.producthunt.com/p/superads/we-just-launched-a-free-facebook-ads-benchmarking-tool)\\nUpvote(20)•[7](https://www.producthunt.com/p/superads/we-just-launched-a-free-facebook-ads-benchmarking-tool)\\n[View all](https://www.producthunt.com/p/general)[Start new thread](https://www.producthunt.com/p/new)\\n* [Blog](https://www.producthunt.com/stories)•\\n* [Newsletter](https://www.producthunt.com/newsletters)•\\n* [Questions](https://www.producthunt.com/questions)•\\n* [Forums](https://www.producthunt.com/p/general)•\\n* [Product Categories](https://www.producthunt.com/categories)•\\n* [Apps](https://www.producthunt.com/apps)•\\n* [About](https://www.producthunt.com/about)•\\n* [FAQ](https://help.producthunt.com)•\\n* [Terms](https://www.producthunt.com/legal#terms)•\\n* [Privacy and Cookies](https://www.producthunt.com/legal#privacy)•\\n* [X.com](https://x.com/ProductHunt)•\\n* [Facebook](https://www.facebook.com/producthunt)•\\n* [Instagram](https://www.instagram.com/producthunt)•\\n* [LinkedIn](https://www.linkedin.com/company/producthunt)•\\n* [YouTube](https://www.youtube.com/channel/UCOtU18DT8csQVqHPT1wtYzw)•\\n* [Advertise](https://www.producthunt.com/sponsor?utm_content=sf)\\n©2025Product Hunt [](https://www.producthunt.com/)\\n[Subscribe](https://www.producthunt.com/newsletters?ref=header_nav&campaign=weekly_newsletter&source=header_nav)\\nSign in\\n# Sider: AI Research Agent & Extension\\nDeep Research Agent & AI Research Browser Extension\\n•[77 reviews](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/reviews)•\\n3.7K followers\\n[Visit website](https://sider.ai/?ref=producthunt)Follow\\n* [Overview](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension)\\n* [Launches](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/launches)\\n* [Forums](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/forums)\\n* [Shoutouts](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/shoutouts)\\n* [Reviews](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/reviews)\\n* [Team](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/makers)\\n* [Awards](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/awards)\\n* [Alternatives](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/alternatives)\\n* [More](#)\\n* * [Blog](https://www.producthunt.com/stories)•\\n* [Newsletter](https://www.producthunt.com/newsletters)•\\n* [Questions](https://www.producthunt.com/questions)•\\n* [Forums](https://www.producthunt.com/p/general)•\\n* [Product Categories](https://www.producthunt.com/categories)•\\n* [Apps](https://www.producthunt.com/apps)•\\n* [About](https://www.producthunt.com/about)•\\n* [FAQ](https://help.producthunt.com)•\\n* [Terms](https://www.producthunt.com/legal#terms)•\\n* [Privacy and Cookies](https://www.producthunt.com/legal#privacy)•\\n* [X.com](https://x.com/ProductHunt)•\\n* [Facebook](https://www.facebook.com/producthunt)•\\n* [Instagram](https://www.instagram.com/producthunt)•\\n* [LinkedIn](https://www.linkedin.com/company/producthunt)•\\n* [YouTube](https://www.youtube.com/channel/UCOtU18DT8csQVqHPT1wtYzw)•\\n* [Advertise](https://www.producthunt.com/sponsor?utm_content=sf)\\n©2025Product Hunt\\nProduct status\\nClaimed\\nAwards\\n[All Awards](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/awards)\\nLinks\\n[sider.ai](https://sider.ai/?ref=producthunt)\\nSocial\\n[Facebook](https://www.facebook.com/SiderAIApp)[LinkedIn](https://www.linkedin.com/company/sider-ai/)[X.com](https://x.com/sider_ai)\\nMakers\\n[All Makers](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/makers)\\n## What isSider: AI Research Agent & Extension?\\nSider Deep Research Agent mimics human research process: scanning 100+ relevant sources and creating visualized reports. It automatically reflects on findings, highlights key information, takes inspirational notes, and saves above all materials to Wisebase—an evolving AI knowledge base that grows with you. For on-the-go research, Sider AI browser extension brings powerful tools anywhere you browse online, putting instant research assistance at your fingertips.\\n### Do you use Sider: AI Research Agent & Extension?\\nI use thisI use something else\\n[AI Chatbots](https://www.producthunt.com/categories/ai-chatbots)•[Writing assistants](https://www.producthunt.com/categories/writing-assistants)•[ChatGPT Prompts](https://www.producthunt.com/categories/chatgpt-prompts)•[Chrome Extensions](https://www.producthunt.com/categories/chrome-extensions)\\n## RecentSider: AI Research Agent & ExtensionLaunches\\n[](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)\\n[Sider 5.0: Deep Research with Wisebase](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)[Mimic Human Research & Save Findings in AI Knowledge Base](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-5-0-deep-research-with-wisebase)\\nLaunched onMarch 19th, 2025\\n356\\n2,250\\n[](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-4-0)\\n[Sider 4.0](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-4-0)[Group chat with multiple AI bots to reduce hallucinations](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#sider-4-0)\\nLaunched onNovember 30th, 2023\\n112\\n281\\n[](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#chatgpt-sidebar-chrome-extension)\\n[ChatGPT Sidebar Chrome Extension](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#chatgpt-sidebar-chrome-extension)[AI & you work side by side on any page](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension#chatgpt-sidebar-chrome-extension)\\nLaunched onMarch 2nd, 2023\\n56\\n237\\n## Forum Threads\\n[](https://www.producthunt.com/@benln)\\n[Ben Lang](https://www.producthunt.com/@benln)\\n•28d ago\\n[### Sider 5.0: Deep Research with Wisebase - Mimic Human Research & Save Findings in AI Knowledge Base\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/sider-5-0-deep-research-with-wisebase)[\\nSider 5.0 Deep Research mimics human research by auto-scanning 100+ sources, reflecting, noting and highlighting insights. It crafts expert-level, interactive reports in mintues. All findings are auto-saved to Wisebase—AI knowledge base that evolves with you.\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/sider-5-0-deep-research-with-wisebase)\\n356\\n2,250\\n[](https://www.producthunt.com/@joel_sider)\\n[Joel](https://www.producthunt.com/@joel_sider)\\n•1yr ago\\n[### Sider 4.0 - Group chat with multiple AI bots to reduce hallucinations\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/sider-4-0)[\\nSider 4.0 introduces group AI chat to reduce hallucination by comparing answers from different AIs like ChatGPT, GPT-4.0, Claude, Bard in a group. You can also chat with webpage, image, PDF in every tab without switch tabs between ChatGPT and the current tab.\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/sider-4-0)\\n112\\n281\\n[](https://www.producthunt.com/@joel_sider)\\n[Joel](https://www.producthunt.com/@joel_sider)\\n•2yr ago\\n[### ChatGPT Sidebar Chrome Extension - AI & you work side by side on any page\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/chatgpt-sidebar-chrome-extension)[\\nChatGPT works alongside you on any webpage with the ChatGPT sidebar. Whether you are reading or writing on the web, the sidebar is always by your side.\\n](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension/chatgpt-sidebar-chrome-extension)\\n56\\n237\\n[View all](https://www.producthunt.com/p/chatgpt-sidebar-chrome-extension)\\n## Sider: AI Research Agent & ExtensionAlternatives\\n[](https://www.producthunt.com/products/chatgpt-for-chrome-extension)\\n[ChatGPT for Chrome Extension](https://www.producthunt.com/products/chatgpt-for-chrome-extension)\\n62 reviews\\n[AI Chatbots](https://www.producthunt.com/categories/ai-chatbots)\\n[](https://www.producthunt.com/products/unrobot)\\n[Unrobot](https://www.producthunt.com/products/unrobot)\\n0 reviews\\n[](https://www.producthunt.com/products/luna-chatgpt-assistant-for-chrome)\\n[Luna - ChatGPT Assistant for Chrome](https://www.producthunt.com/products/luna-chatgpt-assistant-for-chrome)\\n0 reviews\\n[View all Sider: AI Research Agent & Extension alternatives](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/alternatives)\\n### Review Sider: AI Research Agent & Extension?\\n4.75/5 based on77 reviews\\n[View all reviews](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/reviews)Leave a review\\n## Maker reviews ofSider: AI Research Agent & Extension\\n[Kate Prasniak](https://www.producthunt.com/@kate_prasniak)\\nused this to build[Migroot](https://www.producthunt.com/posts/migroot)\\n(722 points)\\nFaster than going to GPT\\nHelpful(1)[\\nShare\\n](#)[\\nReport\\n](#)\\n5mo ago\\n[Kevin Jaspal](https://www.producthunt.com/@kevinjaspal)\\nused this to build[SigmaRemote](https://www.producthunt.com/posts/sigmaremote)\\n(505 points)\\nSuper useful for gathering insights while doing deep work.\\nHelpful(1)[\\nShare\\n](#)[\\nReport\\n](#)\\n6mo ago\\n[View all Sider: AI Research Agent & Extension reviews](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/shoutouts)\\n## Reviews\\n[](https://www.producthunt.com/@kellypoly)\\n[Kelly Kim](https://www.producthunt.com/@kellypoly)\\n[\\nSunrise: Guided Journaling & Mindfulness\\n](https://www.producthunt.com/products/sunrise-guided-journaling-mindfulness)\\n•5 reviews\\nI used to have a high switching cost, constantly going back and forth between multiple open windows, but thanks to Sider, I\\'ve been able to save a lot of time! It\\'s an essential product for people who frequently use ChatGPT.\\nHelpful(1)[\\nShare\\n](#)[\\nReport\\n](#)\\n7mo ago\\n[](#)\\n[](https://www.producthunt.com/@oleg_gavryliuk)\\n[Oleg Gavryliuk](https://www.producthunt.com/@oleg_gavryliuk)\\n•7 reviews\\nNice extension, but \"ChatGPT Webapp\" feature - not working.\\nHelpful(2)[\\nShare\\n](#)[\\nReport\\n](#)\\n2yr ago\\n[](#)\\n[](https://www.producthunt.com/@xinrun_han)\\n[Xinrun Han](https://www.producthunt.com/@xinrun_han)\\n•1 review\\nDefinitely help me generate more ideas. Another helpful feature is scanning relevant sources, which is quite important for reliable content creators like me.\\nHelpful(8)[\\nShare\\n](#)[\\nReport\\n](#)\\n19d ago\\n[](#)\\n[](https://www.producthunt.com/@lucky__angi)\\n[Angi Bowman](https://www.producthunt.com/@lucky__angi)\\n[\\nLucky Orange\\n](https://www.producthunt.com/products/lucky-orange)\\n•3 reviews\\nI would give this a 10 star rating if I could! I use Sider every single day to do just about everything - checking my grammar, creating email/review responses, simplifying technical jargon, etc. It\\'s the secret sauce to my success, and I can\\'t imagine my tech stack without it.\\nHelpful(1)[\\nShare\\n](#)[\\nReport\\n](#)\\n1yr ago\\n[](#)\\n[](https://www.producthunt.com/@bilal_asif)\\n[Bilal Asif](https://www.producthunt.com/@bilal_asif)\\n•4 reviews\\nThe ChatGPT Sidebar Chrome Extension is an impressive tool that enhances productivity by integrating AI assistance into your browsing experience. Adding features like Claude v2 in Full-Page-Chat mode could make it even more versatile and impactful for users.\\nHelpful(2)[\\nShare\\n](#)[\\nReport\\n](#)\\n3mo ago\\n[](#)\\n[View all](https://www.producthunt.com/products/chatgpt-sidebar-chrome-extension/reviews)'}" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "transitions[1].output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tools](https://docs.julep.ai/concepts/tools)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/02-sarcastic-news-headline-generator.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "!pip install --upgrade julep --quiet" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "JULEP_API_KEY = os.environ['JULEP_API_KEY']\n", "\n", "# Create a client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Defining the agent\n", "name = \"Chad\"\n", "about = \"Sarcastic news headline reporter.\"\n", "\n", "# Create the agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=name,\n", " about=about,\n", " model=\"claude-3.5-sonnet\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "\n", "BRAVE_API_KEY = \"YOUR_BRAVE_API_KEY\"\n", "\n", "# Define the task\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Julep Sarcasm Headline Generator\n", "description: This task generates a sarcastic news headline on a user-provided topic.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " topic:\n", " type: string\n", " description: The topic of the news headline\n", "\n", "########################################################\n", "####################### TOOLS ###########################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow\n", "tools:\n", "- name: brave_search\n", " type: integration\n", " integration:\n", " provider: brave\n", " setup:\n", " brave_api_key: \"{BRAVE_API_KEY}\"\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Call the brave_search tool with the topic input\n", "- tool: brave_search\n", " arguments:\n", " query: $ _.topic + ' funny news'\n", "\n", "# Step 1: Evaluate step to create a summary of the results\n", "- evaluate:\n", " search_results: |-\n", " $ [\n", " {{\n", " 'snippet': r['snippet'],\n", " 'title': r['title']\n", " }}\n", " for r in _['result']\n", " ]\n", "\n", "# Step 2: Prompt step to create a summary of the results\n", "- prompt:\n", " - role: system\n", " content: >-\n", " $ f'''You are {{agent.about}}.\n", " The user will send you a topic and search results for that topic.\n", " Your goal is to write a sarcastic news headlines based on that topic and search results.'''\n", " - role: user\n", " content: >-\n", " $ f'''My topic is: {{steps[0].input.topic}}.\n", " Here are the search results: {{_}}'''\n", " unwrap: true\n", "\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# creating an execution object\n", "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"topic\": \"Elon Musk\"\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking execution details and output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"Genius Billionaire Desperately Attempts Comedy, Proves Money Can't Buy Sense of Humor\"\n", "\n", "\"Breaking: World's Richest Man Still Can't Figure Out How to Make People Genuinely Like Him\"\n", "\n", "\"Shocking Report: Man Who Named Child 'X \u00c6 A-12' May Not Be Most Stable CEO\"\n", "\n", "\"Former Trump Officials Suggest Drug Tests for Musk; Musk Agrees, Proving He Might Actually Need One\"\n", "\n", "\"Billionaire Space Enthusiast Too Busy Being 'Funny' on Twitter to Notice Everyone's Cringing\"\n", "\n", "\"Studies Show Being Worth $180 Billion Still Won't Make Your Memes Any Better\"\n", "\n", "\"Man Who Could End World Hunger Chooses to Post Dad Jokes on Social Media Instead\"\n", "\n", "\"Breaking: Local Attention-Seeking Billionaire Still Seeking Attention, More at 11\"\n" ] } ], "source": [ "import time\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "while execution.status != \"succeeded\":\n", " time.sleep(5)\n", " execution = client.executions.get(execution.id)\n", " print(\"Execution status: \", execution.status)\n", " print(\"-\"*50)\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "print(execution.output)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition type: init\n", "Transition output: {'topic': 'Elon Musk'}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'result': [{'link': 'https://9gag.com/tag/elon-musk', 'title': 'Best Elon Musk Memes and Images - 9GAG', 'snippet': 'Enjoy the best of new funny cursed meme images about Elon Musk, Twitter, $8 verified badge, Tesla, the Boring Company and more on 9GAG. Never run out of hilarious cursed memes to share.'}, {'link': 'https://www.youtube.com/watch?v=ukxf9AqLsPY', 'title': 'Elon FINALLY Gets the HUMILIATION He Deserves in Front of MILLIONS - YouTube', 'snippet': 'Comedian Bill Burr roasts Elon Musk, MAGA melts down over SNL, and protesters hit Trump where it hurts\u2014his billionaire bestie's wallet. Gabe Sanchez reports ...'}, {'link': 'https://gizmodo.com/elon-musk-is-annoying-unfunny-and-should-probably-take-a-drug-test-trump-officials-reportedly-say-2000587948', 'title': 'Elon Musk Is Annoying, Unfunny, and Should Probably Take a Drug Test, Trump Officials Reportedly Say', 'snippet': 'Administration officials joked to one another about subjecting Musk to mandatory drug testing, which Musk himself has said would be a \u201cgreat idea\u201d for federal employees. It gets worse. \u201cI have been in the same room with Elon, and he always tries to be funny.'}]}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'search_results': [{'title': 'Best Elon Musk Memes and Images - 9GAG', 'snippet': 'Enjoy the best of new funny cursed meme images about Elon Musk, Twitter, $8 verified badge, Tesla, the Boring Company and more on 9GAG. Never run out of hilarious cursed memes to share.'}, {'title': 'Elon FINALLY Gets the HUMILIATION He Deserves in Front of MILLIONS - YouTube', 'snippet': 'Comedian Bill Burr roasts Elon Musk, MAGA melts down over SNL, and protesters hit Trump where it hurts\u2014his billionaire bestie's wallet. Gabe Sanchez reports ...'}, {'title': 'Elon Musk Is Annoying, Unfunny, and Should Probably Take a Drug Test, Trump Officials Reportedly Say', 'snippet': 'Administration officials joked to one another about subjecting Musk to mandatory drug testing, which Musk himself has said would be a \u201cgreat idea\u201d for federal employees. It gets worse. \u201cI have been in the same room with Elon, and he always tries to be funny.'}]}\n", "--------------------------------------------------\n", "Transition type: finish\n", "Transition output: \"Genius Billionaire Desperately Attempts Comedy, Proves Money Can't Buy Sense of Humor\"\n", "\n", "\"Breaking: World's Richest Man Still Can't Figure Out How to Make People Genuinely Like Him\"\n", "\n", "\"Shocking Report: Man Who Named Child 'X \u00c6 A-12' May Not Be Most Stable CEO\"\n", "\n", "\"Former Trump Officials Suggest Drug Tests for Musk; Musk Agrees, Proving He Might Actually Need One\"\n", "\n", "\"Billionaire Space Enthusiast Too Busy Being 'Funny' on Twitter to Notice Everyone's Cringing\"\n", "\n", "\"Studies Show Being Worth $180 Billion Still Won't Make Your Memes Any Better\"\n", "\n", "\"Man Who Could End World Hunger Chooses to Post Dad Jokes on Social Media Instead\"\n", "\n", "\"Breaking: Local Attention-Seeking Billionaire Still Seeking Attention, More at 11\"\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for transition in reversed(transitions):\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running the same task with a different topic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the same code to run the same task, but with a different topic" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"topic\": \"Tottenham Hotspur\"\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execution status: succeeded\n", "--------------------------------------------------\n", "\"In Shocking Display of Stockholm Syndrome, Former Arsenal Executive Defects to Tottenham\"\n", "\n", "\"Desperate Spurs Hire Ex-Arsenal CEO, Proving There's No Rock Bottom They Won't Explore\"\n", "\n", "\"Local Man Voluntarily Leaves Success to Join Eternal Trophy Drought: A London Tale\"\n", "\n", "\"Tottenham Finally Wins Something: The Heart of Arsenal's Former CEO\"\n", "\n", "\"North London Rivalry Takes Bizarre Turn as Spurs Resort to Executive Poaching Instead of Trophy Hunting\"\n", "\n", "Pick any of these sarcastic headlines that capture the irony of Tottenham hiring their rival Arsenal's former CEO, while playfully jabbing at Spurs' notorious trophy drought and the historic rivalry between the two clubs! \ud83d\ude0f\n" ] } ], "source": [ "import time\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "while execution.status != \"succeeded\":\n", " time.sleep(5)\n", " execution = client.executions.get(execution.id)\n", " print(\"Execution status: \", execution.status)\n", " print(\"-\"*50)\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "print(execution.output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: you can get the output of the search step by accessing the corresponding transition's output from the transitions list.\n", "\n", "Example:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'search_results': [{'title': 'Tottenham Hotspur FC - latest news, pictures, video comment - Football.london',\n", " 'snippet': 'The latest Tottenham news, transfers, fixtures and more. Including Live blogs, pictures, video, podcasts, polls and indepth analysis from our dedicated Spurs writers.'},\n", " {'title': 'Spurs Media Watch, News and Stories',\n", " 'snippet': 'These stories have been specially selected from today's media. They do not necessarily represent the views or position of Tottenham Hotspur Football Club. For total Spurs news coverage, visit NewsNow.co.uk, the UK's #1 football news aggregator.'},\n", " {'title': 'Tottenham Hotspur FC - Transfer news, results, fixtures, video and audio',\n", " 'snippet': 'Having left Arsenal at the end of the 2023-24 campaign, Venkatesham has bided his time before returning to football. Tottenham confirmed Venkatesham's appointment as their next CEO on Friday, in news that arrived with an element of surprise given his previous ties with Spurs' rivals.'}]}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "transitions[1].output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tools](https://docs.julep.ai/concepts/tools)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/03-trip-planning-assistant.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "!pip install julep -U --quiet" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "JULEP_API_KEY = os.environ[\"JULEP_API_KEY\"]\n", "\n", "# Create a Julep client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "# Defining the agent\n", "name = \"Jacob\"\n", "about = \"A travel assistant that helps plan the perfect trip.\"\n", "\n", "# Create the agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=name,\n", " about=about,\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "\n", "openweathermap_api_key = \"YOUR_API_KEY\"\n", "brave_api_key = \"YOUR_API_KEY\"\n", "\n", "# Defining the task\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Julep Tourist Plan With Weather And Attractions\n", "description: A task that plans a trip with weather and attractions.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ##################\n", "######################################################## \n", "input_schema:\n", " type: object\n", " properties:\n", " locations:\n", " type: array\n", " items:\n", " type: string\n", " description: The locations to search for.\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow\n", "tools:\n", "- name: wikipedia\n", " type: integration\n", " integration:\n", " provider: wikipedia\n", "\n", "- name: weather\n", " type: integration\n", " integration:\n", " provider: weather\n", " setup:\n", " openweathermap_api_key: {openweathermap_api_key}\n", "\n", "- name: internet_search\n", " type: integration\n", " integration:\n", " provider: brave\n", " setup:\n", " brave_api_key: {brave_api_key}\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##########################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Fetch weather data for each location\n", "- over: $ steps[0].input.locations\n", " map:\n", " tool: weather\n", " arguments:\n", " location: $ _\n", "\n", "# Step 1: Search Wikipedia for tourist attractions for each location\n", "- over: $ steps[0].input.locations\n", " map:\n", " tool: internet_search\n", " arguments:\n", " query: $ 'tourist attractions in ' + _\n", "\n", "# Step 2: Zip locations, weather, and attractions into a list of tuples [(location, weather, attractions)]\n", "- evaluate:\n", " zipped: |-\n", " $ list(\n", " zip(\n", " steps[0].input.locations,\n", " [output['result'] for output in steps[0].output],\n", " steps[1].output\n", " )\n", " )\n", "\n", "# Step 3: Create an itinerary for each location\n", "- over: $ _['zipped']\n", " parallelism: 3\n", " # Inside the map step, each `_` represents the current element in the list\n", " # which is a tuple of (location, weather, attractions)\n", " map:\n", " prompt:\n", " - role: system\n", " content: >-\n", " $ f'''You are {{agent.name}}. Your task is to create a detailed itinerary\n", " for visiting tourist attractions in some locations.\n", " The user will give you the following information for each location:\n", "\n", " - The location\n", " - The current weather condition\n", " - The top tourist attractions'''\n", " - role: user\n", " content: >-\n", " $ f'''Location: \"{{_[0]}}\"\n", " Weather: \"{{_[1]}}\"\n", " Attractions: \"{{_[2]}}\"'''\n", " unwrap: true\n", "\n", "# Step 4: Create a final plan by joining the activities for each location\n", "- evaluate:\n", " final_plan: |-\n", " $ '\\\\n---------------\\\\n'.join(activity for activity in _)\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Started an execution. Execution ID: 067ffa47-3b83-79b7-8000-eaaa1a013f0e\n" ] } ], "source": [ "execution = client.executions.create(\n", " task_id=task.id,\n", " input={\n", " \"locations\": [\"New York\", \"London\", \"Paris\", \"Tokyo\", \"Sydney\"]\n", " }\n", ")\n", "\n", "print(\"Started an execution. Execution ID:\", execution.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking execution details and output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: running\n", "--------------------------------------------------\n", "Execution status: succeeded\n", "--------------------------------------------------\n", "Here's a detailed itinerary for exploring New York, tailored to the current weather and top attractions:\n", "\n", "### Day 1: Arrival and Exploration\n", "\n", "**Morning:**\n", "- **Central Park:**\n", " - Begin your day with a brisk walk through Central Park. It's a perfect way to enjoy the morning with temperatures around 7.74\u00b0C, and a chance to see the iconic landscapes.\n", " - Address: New York, NY\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html)\n", "\n", "**Mid-Morning:**\n", "- **Metropolitan Museum of Art:**\n", " - Escape the wind and immerse yourself in art and culture at The Met. Spend a couple of hours exploring its vast collections.\n", " - Address: 1000 5th Ave, New York, NY 10028\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105125-Reviews-The_Metropolitan_Museum_of_Art-New_York_City_New_York.html)\n", "\n", "**Afternoon:**\n", "- **Lunch near the Upper East Side:**\n", " - Choose from numerous cozy cafes with indoor seating to stay warm and enjoy a delicious meal.\n", "- **Museum of Modern Art (MoMA):**\n", " - After lunch, take a short walk to MoMA for a dose of contemporary art.\n", " - Address: 11 W 53rd St, New York, NY 10019\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d104365-Reviews-The_Museum_of_Modern_Art_MoMA-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Times Square:**\n", " - End your day in the bustling vibrancy of Times Square. Experience the dazzling lights and energetic atmosphere.\n", " - Address: Manhattan, NY 10036\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d143361-Reviews-Times_Square-New_York_City_New_York.html)\n", "\n", "### Day 2: Iconic Landmarks\n", "\n", "**Morning:**\n", "- **Statue of Liberty and Ellis Island:**\n", " - Start with a ferry ride to these iconic landmarks. Dress warmly as it might feel colder on the water.\n", " - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\n", "\n", "**Afternoon:**\n", "- **Lunch in Lower Manhattan:**\n", " - Explore dining options in the Financial District.\n", "- **9/11 Memorial and Museum:**\n", " - Visit this poignant site to pay respects and learn about the events of 9/11.\n", " - Address: 180 Greenwich St, New York, NY 10007\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1687489-Reviews-The_National_9_11_Memorial_Museum-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Broadway Show:**\n", " - Treat yourself to a memorable Broadway show. Be sure to book tickets in advance.\n", " - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\n", "\n", "### Day 3: Adventure and Relaxation\n", "\n", "**Morning:**\n", "- **High Line Park:**\n", " - Enjoy a unique stroll along this elevated linear park on a former rail track.\n", " - Address: New York, NY 10011\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d519474-Reviews-The_High_Line-New_York_City_New_York.html)\n", "\n", "**Afternoon:**\n", "- **Chelsea Market:**\n", " - Experience an array of food options in this historic marketplace for lunch.\n", " - Address: 75 9th Ave, New York, NY 10011\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1912932-Reviews-Chelsea_Market-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Brooklyn Bridge Walk:**\n", " - Cap off your trip with an evening walk across the Brooklyn Bridge for beautiful skyline views.\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d619722-Reviews-Brooklyn_Bridge-New_York_City_New_York.html)\n", "\n", "With the current few clouds in the sky and comfortable daytime temperatures, this itinerary balances must-see attractions and relaxation, ideal for a memorable visit to New York City. Also consider checking out various passes like the New York Pass for potential savings. Enjoy your trip!\n", "---------------\n", "Sure, let's create a detailed itinerary for a day in London, factoring in the weather conditions:\n", "\n", "---\n", "\n", "**London Day Itinerary**\n", "\n", "**Morning:**\n", "\n", "1. **Breakfast at Borough Market**\n", " - Kick off your day with a hearty breakfast at Borough Market, which opens early. Enjoy a variety of local foods and fresh pastries to fuel your day.\n", "\n", "2. **Tower of London**\n", " - After breakfast, head to the Tower of London, one of the most iconic attractions. Spend a couple of hours exploring this historic castle and its exhibits. Given the cool weather, dress in layers to stay comfortable outdoors.\n", "\n", "**Midday:**\n", "\n", "3. **Walk Along the Thames & Tower Bridge**\n", " - Take a short walk along the Thames River, taking in the views and crossing the iconic Tower Bridge. The scattered clouds make for perfect photographic conditions without the harsh sunlight.\n", "\n", "4. **Lunch at a Pub in Covent Garden**\n", " - Head over to Covent Garden for a traditional British lunch at one of the local pubs. This area offers vibrant street performances and boutique shops.\n", "\n", "**Afternoon:**\n", "\n", "5. **British Museum**\n", " - Spend a couple of hours at the British Museum, exploring its vast collection of global artifacts. This indoor activity provides a respite from any nippy outdoor temperatures.\n", "\n", "6. **Stroll through Leadenhall Market**\n", " - If time allows, explore Leadenhall Market. The market features stunning architecture and historic ambiance, perfect for browsing or enjoying a coffee.\n", "\n", "**Evening:**\n", "\n", "7. **Dinner and Evening at The Sky Garden**\n", " - Conclude your day with a visit to the Sky Garden, especially recommended on clear days for panoramic views of London. Enjoy dinner at their renowned restaurant under the 360\u00b0 views of London's skyline.\n", "\n", "8. **Walk Around South Bank**\n", " - If you're up for it, finish the evening with a leisurely stroll along the South Bank, where you'll find lively street performers and beautiful views of the Twinkling London Eye.\n", "\n", "**Tips:**\n", "- Carry an umbrella or a light waterproof jacket just in case.\n", "- Ensure comfortable walking shoes as you'll be spending a lot of time exploring on foot.\n", "- Your smartphone/camera will come in handy for capturing the charming scenes of London under those scattered clouds.\n", "\n", "Have a fantastic day exploring London!\n", "---------------\n", "### Paris Itinerary\n", "\n", "#### **Day 1: Arrival and Evening River Cruise**\n", "\n", "- **Morning:**\n", " - **Arrival in Paris:** Check-in at your hotel and take some time to freshen up. \n", " - **Breakfast at a Local Caf\u00e9:** Start your day with a classic Parisian breakfast: a croissant and caf\u00e9 au lait at a nearby caf\u00e9.\n", "\n", "- **Afternoon:**\n", " - **Leisure Walk:** Enjoy a leisurely stroll in the neighborhood. Consider walking along the Seine to take in the iconic architecture.\n", " - **Visit a Local Market:** Experience local life by exploring one of Paris's charming markets. Try the March\u00e9 Bastille on Boulevard Richard Lenoir for fresh produce and artisan products.\n", "\n", "- **Evening:**\n", " - **Seine River Cruise:** In the evening, enjoy a Seine River cruise. This is an excellent way to see the city lights and major attractions like the Eiffel Tower.\n", " - **Dinner at a Bistro:** Conclude your day with dinner at a traditional Parisian bistro. Taste local specialties like duck confit or coq au vin.\n", "\n", "#### **Day 2: Classic Paris Sights**\n", "\n", "- **Morning:**\n", " - **Eiffel Tower Visit:** Start early to beat the crowds at the Eiffel Tower. Enjoy a coffee at the top with a breathtaking view of the city.\n", " - **Louvre Museum:** Spend a few hours exploring the world-renowned Louvre Museum. Don\u2019t miss iconic pieces like the Mona Lisa and the Venus de Milo.\n", "\n", "- **Afternoon:**\n", " - **Lunch at a Caf\u00e9:** Enjoy lunch at a caf\u00e9 near the Louvre. Try classic French dishes like quiche or salade ni\u00e7oise.\n", " - **Walk along the Champs-\u00c9lys\u00e9es:** Take a leisurely walk down this famous avenue towards the Arc de Triomphe.\n", "\n", "- **Evening:**\n", " - **Dinner in Montmartre:** Head to Montmartre for dinner. Wander through its charming streets and enjoy a meal at one of its quaint restaurants.\n", "\n", "#### **Day 3: Art, Culture, and Relaxation**\n", "\n", "- **Morning:**\n", " - **Mus\u00e9e d'Orsay:** Visit the Mus\u00e9e d'Orsay to admire its impressive collection of impressionist and post-impressionist masterpieces.\n", " - **Explore Saint-Germain-des-Pr\u00e9s:** Discover the boutiques and caf\u00e9s in this historic district.\n", "\n", "- **Afternoon:**\n", " - **Lunch in Le Marais:** Head to the Le Marais district, known for its historic charm and trendy vibe. Enjoy lunch at a local eatery.\n", " - **Explore Local Shops:** Take time to browse in unique shops and art galleries.\n", "\n", "- **Evening:**\n", " - **Dinner at a Michelin Star Restaurant:** Treat yourself to an exquisite dining experience at a Michelin Star restaurant to cap off your trip.\n", "\n", "#### **Tips:**\n", "- **Weather Preparation:** Pack an umbrella and a light jacket due to the cloud cover and mild temperatures (around 13-14\u00b0C).\n", "- **Travel Consideration:** Use public transport like the M\u00e9tro to navigate efficiently.\n", "- **Pass Options:** Consider purchasing the Paris Pass\u00ae for discounts and ease of access at major attractions.\n", "\n", "With this itinerary, you'll experience the essence of Paris, from its iconic landmarks to its vibrant local culture. Enjoy your visit!\n", "---------------\n", "**Detailed Itinerary for a Day in Tokyo**\n", "\n", "*Weather Overview:*\n", "- Expect clear skies, perfect for exploring the city. The temperature is comfortable at 15.37\u00b0C with a light wind. Dress in layers to adjust to the mild weather, especially for evening activities.\n", "\n", "**Morning:**\n", "\n", "1. **Visit Asakusa and Sens\u014d-ji Temple:**\n", " - Start your day in the historical district of Asakusa. Explore Sens\u014d-ji, Tokyo's oldest temple, and take in the vibrant atmosphere of Nakamise Shopping Street.\n", " - *Time: 9:00 AM - 11:00 AM*\n", "\n", "2. **Breakfast at Asakusa:**\n", " - Enjoy a traditional Japanese breakfast at one of the local caf\u00e9s. Try some fresh sushi or a hearty bowl of ramen.\n", "\n", "**Midday:**\n", "\n", "1. **Ueno Park and Museums:**\n", " - Head over to Ueno Park, a large public park with museums and beautiful gardens.\n", " - Visit the Tokyo National Museum to explore Japanese art and history.\n", " - *Time: 11:30 AM - 1:30 PM*\n", "\n", "2. **Lunch in Ueno:**\n", " - Choose from various dining options in Ueno, from traditional Japanese meals to international cuisine. Ueno offers an array of options for everyone.\n", "\n", "**Afternoon:**\n", "\n", "1. **Tokyo Skytree:**\n", " - Ascend to the observation deck for breathtaking views of Tokyo from the Tokyo Skytree, one of the tallest structures in the world.\n", " - *Time: 2:30 PM - 4:00 PM*\n", "\n", "2. **Shibuya & Harajuku:**\n", " - Head to Shibuya Crossing, the world's busiest pedestrian crossing, and then wander around the trendy Harajuku area, famous for unique fashion and vibrant culture.\n", " - Don\u2019t miss a walk through Yoyogi Park, a large urban park that\u2019s perfect for relaxing.\n", " - *Time: 4:30 PM - 6:00 PM*\n", "\n", "**Evening:**\n", "\n", "1. **Dinner in Shinjuku:**\n", " - Make your way to Shinjuku for dinner in one of the many izakayas or sushi bars. Explore the buzzing streets and maybe try some yakitori.\n", " - *Time: 7:00 PM - 8:30 PM*\n", "\n", "2. **Explore Shinjuku Nightlife:**\n", " - After dinner, explore the nightlife in Shinjuku. Consider visiting the Robot Restaurant for a unique show or wander through the entertainment district of Kabukicho.\n", " - *Time: 8:30 PM onward*\n", "\n", "*Note:* For additional resources and more must-see attractions, consider referring to the following links for inspiration and up-to-date information:\n", "- [Tripadvisor's Best Things to Do in Tokyo](https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html)\n", "- [The Official Tokyo Travel Guide](https://www.gotokyo.org/en/see-and-do/attractions/index.html)\n", "- [Japan-Guide for Exploring Tokyo](https://www.japan-guide.com/e/e2164.html)\n", "\n", "Enjoy your day exploring the vibrant and diverse city of Tokyo!\n", "---------------\n", "### Sydney Itinerary - Exploring with Light Rain\n", "\n", "#### **Day 1: Arrival and Iconic Landmarks**\n", "\n", "**Morning:**\n", "- **Sydney Opera House** \n", " Start your day early with a tour of the iconic Sydney Opera House. Book a guided tour to learn about the history and architecture of this world-famous landmark. Don\u2019t forget to bring a light raincoat as there\u2019s some rain expected.\n", "\n", "**Afternoon:**\n", "- **Sydney Harbour Bridge** \n", " Take a stroll across Sydney Harbour Bridge. The slight drizzle and the fresh air will make for a refreshing walk. Consider the BridgeClimb experience for spectacular views of the city, even more mesmerizing when it\u2019s cloudy.\n", "\n", "**Evening:**\n", "- **The Rocks District** \n", " Delve into the historic Rocks area, where you can enjoy a cozy dinner at one of the local pubs. The gentle rain makes for a charming atmosphere in the cobblestone streets.\n", "\n", "#### **Day 2: Culture and Relaxation**\n", "\n", "**Morning:**\n", "- **Art Gallery of New South Wales** \n", " Immerse yourself in Australian art and culture at the Art Gallery of New South Wales. It\u2019s a perfect indoor activity to escape the rain while enjoying beautiful art pieces.\n", "\n", "**Afternoon:**\n", "- **Sydney Royal Botanic Garden** \n", " Walk through the lush greenery of the Royal Botanic Garden. While the light rain adds to the beauty of the gardens, keep an umbrella or a waterproof jacket handy.\n", "\n", "**Evening:**\n", "- **Dinner in Darling Harbour** \n", " Head to Darling Harbour for a diverse culinary experience. Choose from cafes and restaurants with a view of the harbour, perfect for a calming evening. The rain reflection off the water creates an enchanting setting.\n", "\n", "#### **Day 3: Exploration and Adventure**\n", "\n", "**Morning:**\n", "- **Taronga Zoo** \n", " Visit Taronga Zoo, which offers views of Sydney Harbour along with a variety of animal species. Since there might be light rain, focus on the indoor animal enclosures and exhibits.\n", "\n", "**Afternoon:** \n", "- **Bondi Beach & Coastal Walk** \n", " Take a trip to the famous Bondi Beach, where you can enjoy the overcast skies at Australia\u2019s most famous beach. If weather permits, try a short walk on the Bondi to Coogee coastal walk and enjoy the dramatic coastline views.\n", "\n", "**Evening:**\n", "- **Sydney Observatory** \n", " Conclude your day with a visit to the Sydney Observatory. If the clouds clear up, stargazing is an incredible experience, allowing a unique glimpse into the southern skies.\n", "\n", "### **Notes:**\n", "- **Weather Precautions**: Remember to always check the current weather on the day and be prepared with rain-appropriate gear.\n", "- **Bookings**: It\u2019s highly recommended to book indoor activities in advance, particularly for popular attractions, to ensure a spot.\n", "- **Transportation**: Utilize Sydney\u2019s efficient public transport, including ferries, buses, and trains, to make the most out of your visit under weather-friendly conditions.\n", "\n", "Enjoy your time in Sydney, where even a little rain adds its magic to the vibrant cityscape!\n" ] } ], "source": [ "import time\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "while execution.status != \"succeeded\":\n", " time.sleep(5)\n", " execution = client.executions.get(execution.id)\n", " print(\"Execution status: \", execution.status)\n", " print(\"-\"*50)\n", "\n", "execution = client.executions.get(execution.id)\n", "\n", "if 'final_plan' in execution.output:\n", " print(execution.output['final_plan'])\n", "else:\n", " print(execution.output)\n" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition type: init\n", "Transition output: {'locations': ['New York', 'London', 'Paris', 'Tokyo', 'Sydney']}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Sydney\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: London\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Tokyo\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Paris\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: New York\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': 'In London, the current weather is as follows:\\nDetailed status: scattered clouds\\nWind speed: 8.05 m/s, direction: 222\u00b0\\nHumidity: 45%\\nTemperature: \\n - Current: 14.87\u00b0C\\n - High: 15.83\u00b0C\\n - Low: 13.86\u00b0C\\n - Feels like: 13.59\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 27%'}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': \"In Sydney, the current weather is as follows:\\nDetailed status: light rain\\nWind speed: 5.66 m/s, direction: 250\u00b0\\nHumidity: 79%\\nTemperature: \\n - Current: 17.29\u00b0C\\n - High: 18.17\u00b0C\\n - Low: 16.53\u00b0C\\n - Feels like: 17.14\u00b0C\\nRain: {'1h': 0.11}\\nHeat index: None\\nCloud cover: 40%\"}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': 'In Paris, the current weather is as follows:\\nDetailed status: broken clouds\\nWind speed: 3.09 m/s, direction: 200\u00b0\\nHumidity: 51%\\nTemperature: \\n - Current: 13.43\u00b0C\\n - High: 14.49\u00b0C\\n - Low: 12.43\u00b0C\\n - Feels like: 12.16\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 75%'}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': 'In Tokyo, the current weather is as follows:\\nDetailed status: clear sky\\nWind speed: 4.63 m/s, direction: 20\u00b0\\nHumidity: 30%\\nTemperature: \\n - Current: 15.37\u00b0C\\n - High: 15.91\u00b0C\\n - Low: 13.67\u00b0C\\n - Feels like: 13.75\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 0%'}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': 'In New York, the current weather is as follows:\\nDetailed status: few clouds\\nWind speed: 10.29 m/s, direction: 270\u00b0\\nHumidity: 52%\\nTemperature: \\n - Current: 7.74\u00b0C\\n - High: 8.45\u00b0C\\n - Low: 6.64\u00b0C\\n - Feels like: 3.15\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 20%'}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: [{'result': 'In New York, the current weather is as follows:\\nDetailed status: few clouds\\nWind speed: 10.29 m/s, direction: 270\u00b0\\nHumidity: 52%\\nTemperature: \\n - Current: 7.74\u00b0C\\n - High: 8.45\u00b0C\\n - Low: 6.64\u00b0C\\n - Feels like: 3.15\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 20%'}, {'result': 'In London, the current weather is as follows:\\nDetailed status: scattered clouds\\nWind speed: 8.05 m/s, direction: 222\u00b0\\nHumidity: 45%\\nTemperature: \\n - Current: 14.87\u00b0C\\n - High: 15.83\u00b0C\\n - Low: 13.86\u00b0C\\n - Feels like: 13.59\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 27%'}, {'result': 'In Paris, the current weather is as follows:\\nDetailed status: broken clouds\\nWind speed: 3.09 m/s, direction: 200\u00b0\\nHumidity: 51%\\nTemperature: \\n - Current: 13.43\u00b0C\\n - High: 14.49\u00b0C\\n - Low: 12.43\u00b0C\\n - Feels like: 12.16\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 75%'}, {'result': 'In Tokyo, the current weather is as follows:\\nDetailed status: clear sky\\nWind speed: 4.63 m/s, direction: 20\u00b0\\nHumidity: 30%\\nTemperature: \\n - Current: 15.37\u00b0C\\n - High: 15.91\u00b0C\\n - Low: 13.67\u00b0C\\n - Feels like: 13.75\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 0%'}, {'result': \"In Sydney, the current weather is as follows:\\nDetailed status: light rain\\nWind speed: 5.66 m/s, direction: 250\u00b0\\nHumidity: 79%\\nTemperature: \\n - Current: 17.29\u00b0C\\n - High: 18.17\u00b0C\\n - Low: 16.53\u00b0C\\n - Feels like: 17.14\u00b0C\\nRain: {'1h': 0.11}\\nHeat index: None\\nCloud cover: 40%\"}]\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Sydney\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: New York\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: London\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Tokyo\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: Paris\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html', 'title': 'Things to Do in New York City', 'snippet': 'Things to Do in New York City, New York: See Tripadvisor's 4,251,245 traveler reviews and photos of New York City tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in New York City. Visit top-rated & must-see attractions.'}, {'link': 'https://www.iloveny.com/places-to-go/new-york-city/attractions/', 'title': 'NYC Attractions | Museums, Parks, Zoos & Landmarks', 'snippet': 'Whether you're into architecture, Broadway theater, restaurants or other cultural hotspots, New York City has something for you. Plan your trip today!'}, {'link': 'https://newyorkpass.com/en/new-york-attractions', 'title': 'New York Attractions | The New York Pass\u00ae', 'snippet': 'Save up to 50% at top New York attractions with The New York Pass\u00ae. Our passes offer great savings, freedom to choose and 100+ attractions for everyone.'}]}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g186338-Activities-London_England.html', 'title': 'THE 15 BEST Things to Do in London (2025) - Must-See Attractions', 'snippet': 'Things to Do in London, England: See Tripadvisor's 7,344,050 traveler reviews and photos of London tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in London. Visit top-rated & must-see attractions.'}, {'link': 'https://www.visitlondon.com/things-to-do/sightseeing/london-attraction', 'title': \"London attractions | Visit London's top tourist attractions\", 'snippet': 'See world-famous London attractions and iconic landmarks, like the Tower of London, Buckingham Palace and the London Eye, to the lesser-known London sights and gems including Leadenhall Market, historical museums and Royal residences. Gain a unique glimpse into the city's rich history and vibrant ...'}, {'link': 'https://www.reddit.com/r/london/comments/1cn05i9/inspired_by_the_recent_askreddit_what_tourist/', 'title': 'r/london on Reddit: Inspired by the recent AskReddit, What tourist attractions in London are NOT overrated?', 'snippet': '732 votes, 608 comments. I went to the Sky Garden recently and it was actually quite nice for a free entry, great views especially in this sunny 20c\u2026'}]}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html', 'title': 'THE 15 BEST Things to Do in Paris (2025) - Must-See Attractions', 'snippet': 'Things to Do in Paris, France: See Tripadvisor's 5,086,085 traveler reviews and photos of Paris tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Paris. Visit top-rated & must-see attractions.'}, {'link': 'https://parispass.com/en/paris-attractions', 'title': 'Paris Attractions | The Paris Pass\u00ae', 'snippet': 'Save up to 50% at top Paris attractions with The Paris Pass\u00ae. Our passes offer great savings, freedom to choose and attractions for everyone.'}, {'link': 'https://travel.usnews.com/Paris_France/Things_To_Do/', 'title': '34 Best Things to Do in Paris, France (Updated 2025) | U.S. News Travel', 'snippet': 'If you've been dreaming of a visit to the Eiffel Tower, Louvre Museum and Moulin Rouge, plan your trip with these expert recommendations for things to do in Paris.'}]}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html', 'title': 'THE 15 BEST Things to Do in Tokyo (2025) - Must-See Attractions', 'snippet': 'Things to Do in Tokyo, Japan: See Tripadvisor's 1,688,470 traveler reviews and photos of Tokyo tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Tokyo. Visit top-rated & must-see attractions.'}, {'link': 'https://www.gotokyo.org/en/see-and-do/attractions/index.html', 'title': 'Top tourist attractions in Tokyo: the best sightseeing spots | The Official Tokyo Travel Guide, GO TOKYO', 'snippet': 'Check out our Tokyo tourism guide, complete to find our recommendations for famous places and must-visit locations. From historical sites to the Tokyo of the future, there is lots to see and do.'}, {'link': 'https://www.japan-guide.com/e/e2164.html', 'title': 'Tokyo City Guide - What to do in Tokyo', 'snippet': 'The city's history can be appreciated in districts such as Asakusa and in many excellent museums, historic temples and gardens. Contrary to common perception, Tokyo also offers a number of attractive green spaces in the city center and within relatively short train rides at its outskirts.'}]}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.sydney.com/things-to-do/attractions', 'title': 'Top attractions in Sydney | Sydney.com', 'snippet': 'Discover the top attractions in Sydney. Explore Sydney's many attractions, sightseeing spots & landmarks that you must not miss.'}, {'link': 'https://www.tripadvisor.com/Attractions-g255060-Activities-Sydney_New_South_Wales.html', 'title': 'THE 15 BEST Things to Do in Sydney (2025) - Must-See Attractions', 'snippet': 'Things to Do in Sydney, Australia: See Tripadvisor's 1,011,795 traveler reviews and photos of Sydney tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Sydney. Visit top-rated & must-see attractions.'}, {'link': 'https://www.australia.com/en-us/places/sydney-and-surrounds/guide-to-sydney.html', 'title': 'Travel guide to Sydney, NSW - Tourism Australia', 'snippet': 'Find our guide to Sydney, Australia. Explore the city's natural beauty from famous landmarks such as the Harbour Bridge to picturesque beaches and world-class restaurants.'}]}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: [{'result': [{'link': 'https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html', 'title': 'Things to Do in New York City', 'snippet': 'Things to Do in New York City, New York: See Tripadvisor's 4,251,245 traveler reviews and photos of New York City tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in New York City. Visit top-rated & must-see attractions.'}, {'link': 'https://www.iloveny.com/places-to-go/new-york-city/attractions/', 'title': 'NYC Attractions | Museums, Parks, Zoos & Landmarks', 'snippet': 'Whether you're into architecture, Broadway theater, restaurants or other cultural hotspots, New York City has something for you. Plan your trip today!'}, {'link': 'https://newyorkpass.com/en/new-york-attractions', 'title': 'New York Attractions | The New York Pass\u00ae', 'snippet': 'Save up to 50% at top New York attractions with The New York Pass\u00ae. Our passes offer great savings, freedom to choose and 100+ attractions for everyone.'}]}, {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g186338-Activities-London_England.html', 'title': 'THE 15 BEST Things to Do in London (2025) - Must-See Attractions', 'snippet': 'Things to Do in London, England: See Tripadvisor's 7,344,050 traveler reviews and photos of London tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in London. Visit top-rated & must-see attractions.'}, {'link': 'https://www.visitlondon.com/things-to-do/sightseeing/london-attraction', 'title': \"London attractions | Visit London's top tourist attractions\", 'snippet': 'See world-famous London attractions and iconic landmarks, like the Tower of London, Buckingham Palace and the London Eye, to the lesser-known London sights and gems including Leadenhall Market, historical museums and Royal residences. Gain a unique glimpse into the city's rich history and vibrant ...'}, {'link': 'https://www.reddit.com/r/london/comments/1cn05i9/inspired_by_the_recent_askreddit_what_tourist/', 'title': 'r/london on Reddit: Inspired by the recent AskReddit, What tourist attractions in London are NOT overrated?', 'snippet': '732 votes, 608 comments. I went to the Sky Garden recently and it was actually quite nice for a free entry, great views especially in this sunny 20c\u2026'}]}, {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html', 'title': 'THE 15 BEST Things to Do in Paris (2025) - Must-See Attractions', 'snippet': 'Things to Do in Paris, France: See Tripadvisor's 5,086,085 traveler reviews and photos of Paris tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Paris. Visit top-rated & must-see attractions.'}, {'link': 'https://parispass.com/en/paris-attractions', 'title': 'Paris Attractions | The Paris Pass\u00ae', 'snippet': 'Save up to 50% at top Paris attractions with The Paris Pass\u00ae. Our passes offer great savings, freedom to choose and attractions for everyone.'}, {'link': 'https://travel.usnews.com/Paris_France/Things_To_Do/', 'title': '34 Best Things to Do in Paris, France (Updated 2025) | U.S. News Travel', 'snippet': 'If you've been dreaming of a visit to the Eiffel Tower, Louvre Museum and Moulin Rouge, plan your trip with these expert recommendations for things to do in Paris.'}]}, {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html', 'title': 'THE 15 BEST Things to Do in Tokyo (2025) - Must-See Attractions', 'snippet': 'Things to Do in Tokyo, Japan: See Tripadvisor's 1,688,470 traveler reviews and photos of Tokyo tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Tokyo. Visit top-rated & must-see attractions.'}, {'link': 'https://www.gotokyo.org/en/see-and-do/attractions/index.html', 'title': 'Top tourist attractions in Tokyo: the best sightseeing spots | The Official Tokyo Travel Guide, GO TOKYO', 'snippet': 'Check out our Tokyo tourism guide, complete to find our recommendations for famous places and must-visit locations. From historical sites to the Tokyo of the future, there is lots to see and do.'}, {'link': 'https://www.japan-guide.com/e/e2164.html', 'title': 'Tokyo City Guide - What to do in Tokyo', 'snippet': 'The city's history can be appreciated in districts such as Asakusa and in many excellent museums, historic temples and gardens. Contrary to common perception, Tokyo also offers a number of attractive green spaces in the city center and within relatively short train rides at its outskirts.'}]}, {'result': [{'link': 'https://www.sydney.com/things-to-do/attractions', 'title': 'Top attractions in Sydney | Sydney.com', 'snippet': 'Discover the top attractions in Sydney. Explore Sydney's many attractions, sightseeing spots & landmarks that you must not miss.'}, {'link': 'https://www.tripadvisor.com/Attractions-g255060-Activities-Sydney_New_South_Wales.html', 'title': 'THE 15 BEST Things to Do in Sydney (2025) - Must-See Attractions', 'snippet': 'Things to Do in Sydney, Australia: See Tripadvisor's 1,011,795 traveler reviews and photos of Sydney tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Sydney. Visit top-rated & must-see attractions.'}, {'link': 'https://www.australia.com/en-us/places/sydney-and-surrounds/guide-to-sydney.html', 'title': 'Travel guide to Sydney, NSW - Tourism Australia', 'snippet': 'Find our guide to Sydney, Australia. Explore the city's natural beauty from famous landmarks such as the Harbour Bridge to picturesque beaches and world-class restaurants.'}]}]\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'zipped': [['New York', 'In New York, the current weather is as follows:\\nDetailed status: few clouds\\nWind speed: 10.29 m/s, direction: 270\u00b0\\nHumidity: 52%\\nTemperature: \\n - Current: 7.74\u00b0C\\n - High: 8.45\u00b0C\\n - Low: 6.64\u00b0C\\n - Feels like: 3.15\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 20%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html', 'title': 'Things to Do in New York City', 'snippet': 'Things to Do in New York City, New York: See Tripadvisor's 4,251,245 traveler reviews and photos of New York City tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in New York City. Visit top-rated & must-see attractions.'}, {'link': 'https://www.iloveny.com/places-to-go/new-york-city/attractions/', 'title': 'NYC Attractions | Museums, Parks, Zoos & Landmarks', 'snippet': 'Whether you're into architecture, Broadway theater, restaurants or other cultural hotspots, New York City has something for you. Plan your trip today!'}, {'link': 'https://newyorkpass.com/en/new-york-attractions', 'title': 'New York Attractions | The New York Pass\u00ae', 'snippet': 'Save up to 50% at top New York attractions with The New York Pass\u00ae. Our passes offer great savings, freedom to choose and 100+ attractions for everyone.'}]}], ['London', 'In London, the current weather is as follows:\\nDetailed status: scattered clouds\\nWind speed: 8.05 m/s, direction: 222\u00b0\\nHumidity: 45%\\nTemperature: \\n - Current: 14.87\u00b0C\\n - High: 15.83\u00b0C\\n - Low: 13.86\u00b0C\\n - Feels like: 13.59\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 27%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g186338-Activities-London_England.html', 'title': 'THE 15 BEST Things to Do in London (2025) - Must-See Attractions', 'snippet': 'Things to Do in London, England: See Tripadvisor's 7,344,050 traveler reviews and photos of London tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in London. Visit top-rated & must-see attractions.'}, {'link': 'https://www.visitlondon.com/things-to-do/sightseeing/london-attraction', 'title': \"London attractions | Visit London's top tourist attractions\", 'snippet': 'See world-famous London attractions and iconic landmarks, like the Tower of London, Buckingham Palace and the London Eye, to the lesser-known London sights and gems including Leadenhall Market, historical museums and Royal residences. Gain a unique glimpse into the city's rich history and vibrant ...'}, {'link': 'https://www.reddit.com/r/london/comments/1cn05i9/inspired_by_the_recent_askreddit_what_tourist/', 'title': 'r/london on Reddit: Inspired by the recent AskReddit, What tourist attractions in London are NOT overrated?', 'snippet': '732 votes, 608 comments. I went to the Sky Garden recently and it was actually quite nice for a free entry, great views especially in this sunny 20c\u2026'}]}], ['Paris', 'In Paris, the current weather is as follows:\\nDetailed status: broken clouds\\nWind speed: 3.09 m/s, direction: 200\u00b0\\nHumidity: 51%\\nTemperature: \\n - Current: 13.43\u00b0C\\n - High: 14.49\u00b0C\\n - Low: 12.43\u00b0C\\n - Feels like: 12.16\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 75%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html', 'title': 'THE 15 BEST Things to Do in Paris (2025) - Must-See Attractions', 'snippet': 'Things to Do in Paris, France: See Tripadvisor's 5,086,085 traveler reviews and photos of Paris tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Paris. Visit top-rated & must-see attractions.'}, {'link': 'https://parispass.com/en/paris-attractions', 'title': 'Paris Attractions | The Paris Pass\u00ae', 'snippet': 'Save up to 50% at top Paris attractions with The Paris Pass\u00ae. Our passes offer great savings, freedom to choose and attractions for everyone.'}, {'link': 'https://travel.usnews.com/Paris_France/Things_To_Do/', 'title': '34 Best Things to Do in Paris, France (Updated 2025) | U.S. News Travel', 'snippet': 'If you've been dreaming of a visit to the Eiffel Tower, Louvre Museum and Moulin Rouge, plan your trip with these expert recommendations for things to do in Paris.'}]}], ['Tokyo', 'In Tokyo, the current weather is as follows:\\nDetailed status: clear sky\\nWind speed: 4.63 m/s, direction: 20\u00b0\\nHumidity: 30%\\nTemperature: \\n - Current: 15.37\u00b0C\\n - High: 15.91\u00b0C\\n - Low: 13.67\u00b0C\\n - Feels like: 13.75\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 0%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html', 'title': 'THE 15 BEST Things to Do in Tokyo (2025) - Must-See Attractions', 'snippet': 'Things to Do in Tokyo, Japan: See Tripadvisor's 1,688,470 traveler reviews and photos of Tokyo tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Tokyo. Visit top-rated & must-see attractions.'}, {'link': 'https://www.gotokyo.org/en/see-and-do/attractions/index.html', 'title': 'Top tourist attractions in Tokyo: the best sightseeing spots | The Official Tokyo Travel Guide, GO TOKYO', 'snippet': 'Check out our Tokyo tourism guide, complete to find our recommendations for famous places and must-visit locations. From historical sites to the Tokyo of the future, there is lots to see and do.'}, {'link': 'https://www.japan-guide.com/e/e2164.html', 'title': 'Tokyo City Guide - What to do in Tokyo', 'snippet': 'The city's history can be appreciated in districts such as Asakusa and in many excellent museums, historic temples and gardens. Contrary to common perception, Tokyo also offers a number of attractive green spaces in the city center and within relatively short train rides at its outskirts.'}]}], ['Sydney', \"In Sydney, the current weather is as follows:\\nDetailed status: light rain\\nWind speed: 5.66 m/s, direction: 250\u00b0\\nHumidity: 79%\\nTemperature: \\n - Current: 17.29\u00b0C\\n - High: 18.17\u00b0C\\n - Low: 16.53\u00b0C\\n - Feels like: 17.14\u00b0C\\nRain: {'1h': 0.11}\\nHeat index: None\\nCloud cover: 40%\", {'result': [{'link': 'https://www.sydney.com/things-to-do/attractions', 'title': 'Top attractions in Sydney | Sydney.com', 'snippet': 'Discover the top attractions in Sydney. Explore Sydney's many attractions, sightseeing spots & landmarks that you must not miss.'}, {'link': 'https://www.tripadvisor.com/Attractions-g255060-Activities-Sydney_New_South_Wales.html', 'title': 'THE 15 BEST Things to Do in Sydney (2025) - Must-See Attractions', 'snippet': 'Things to Do in Sydney, Australia: See Tripadvisor's 1,011,795 traveler reviews and photos of Sydney tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Sydney. Visit top-rated & must-see attractions.'}, {'link': 'https://www.australia.com/en-us/places/sydney-and-surrounds/guide-to-sydney.html', 'title': 'Travel guide to Sydney, NSW - Tourism Australia', 'snippet': 'Find our guide to Sydney, Australia. Explore the city's natural beauty from famous landmarks such as the Harbour Bridge to picturesque beaches and world-class restaurants.'}]}]]}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: ['Paris', 'In Paris, the current weather is as follows:\\nDetailed status: broken clouds\\nWind speed: 3.09 m/s, direction: 200\u00b0\\nHumidity: 51%\\nTemperature: \\n - Current: 13.43\u00b0C\\n - High: 14.49\u00b0C\\n - Low: 12.43\u00b0C\\n - Feels like: 12.16\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 75%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html', 'title': 'THE 15 BEST Things to Do in Paris (2025) - Must-See Attractions', 'snippet': 'Things to Do in Paris, France: See Tripadvisor's 5,086,085 traveler reviews and photos of Paris tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Paris. Visit top-rated & must-see attractions.'}, {'link': 'https://parispass.com/en/paris-attractions', 'title': 'Paris Attractions | The Paris Pass\u00ae', 'snippet': 'Save up to 50% at top Paris attractions with The Paris Pass\u00ae. Our passes offer great savings, freedom to choose and attractions for everyone.'}, {'link': 'https://travel.usnews.com/Paris_France/Things_To_Do/', 'title': '34 Best Things to Do in Paris, France (Updated 2025) | U.S. News Travel', 'snippet': 'If you've been dreaming of a visit to the Eiffel Tower, Louvre Museum and Moulin Rouge, plan your trip with these expert recommendations for things to do in Paris.'}]}]\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: ['London', 'In London, the current weather is as follows:\\nDetailed status: scattered clouds\\nWind speed: 8.05 m/s, direction: 222\u00b0\\nHumidity: 45%\\nTemperature: \\n - Current: 14.87\u00b0C\\n - High: 15.83\u00b0C\\n - Low: 13.86\u00b0C\\n - Feels like: 13.59\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 27%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g186338-Activities-London_England.html', 'title': 'THE 15 BEST Things to Do in London (2025) - Must-See Attractions', 'snippet': 'Things to Do in London, England: See Tripadvisor's 7,344,050 traveler reviews and photos of London tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in London. Visit top-rated & must-see attractions.'}, {'link': 'https://www.visitlondon.com/things-to-do/sightseeing/london-attraction', 'title': \"London attractions | Visit London's top tourist attractions\", 'snippet': 'See world-famous London attractions and iconic landmarks, like the Tower of London, Buckingham Palace and the London Eye, to the lesser-known London sights and gems including Leadenhall Market, historical museums and Royal residences. Gain a unique glimpse into the city's rich history and vibrant ...'}, {'link': 'https://www.reddit.com/r/london/comments/1cn05i9/inspired_by_the_recent_askreddit_what_tourist/', 'title': 'r/london on Reddit: Inspired by the recent AskReddit, What tourist attractions in London are NOT overrated?', 'snippet': '732 votes, 608 comments. I went to the Sky Garden recently and it was actually quite nice for a free entry, great views especially in this sunny 20c\u2026'}]}]\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: ['New York', 'In New York, the current weather is as follows:\\nDetailed status: few clouds\\nWind speed: 10.29 m/s, direction: 270\u00b0\\nHumidity: 52%\\nTemperature: \\n - Current: 7.74\u00b0C\\n - High: 8.45\u00b0C\\n - Low: 6.64\u00b0C\\n - Feels like: 3.15\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 20%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html', 'title': 'Things to Do in New York City', 'snippet': 'Things to Do in New York City, New York: See Tripadvisor's 4,251,245 traveler reviews and photos of New York City tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in New York City. Visit top-rated & must-see attractions.'}, {'link': 'https://www.iloveny.com/places-to-go/new-york-city/attractions/', 'title': 'NYC Attractions | Museums, Parks, Zoos & Landmarks', 'snippet': 'Whether you're into architecture, Broadway theater, restaurants or other cultural hotspots, New York City has something for you. Plan your trip today!'}, {'link': 'https://newyorkpass.com/en/new-york-attractions', 'title': 'New York Attractions | The New York Pass\u00ae', 'snippet': 'Save up to 50% at top New York attractions with The New York Pass\u00ae. Our passes offer great savings, freedom to choose and 100+ attractions for everyone.'}]}]\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: Sure, let's create a detailed itinerary for a day in London, factoring in the weather conditions:\n", "\n", "---\n", "\n", "**London Day Itinerary**\n", "\n", "**Morning:**\n", "\n", "1. **Breakfast at Borough Market**\n", " - Kick off your day with a hearty breakfast at Borough Market, which opens early. Enjoy a variety of local foods and fresh pastries to fuel your day.\n", "\n", "2. **Tower of London**\n", " - After breakfast, head to the Tower of London, one of the most iconic attractions. Spend a couple of hours exploring this historic castle and its exhibits. Given the cool weather, dress in layers to stay comfortable outdoors.\n", "\n", "**Midday:**\n", "\n", "3. **Walk Along the Thames & Tower Bridge**\n", " - Take a short walk along the Thames River, taking in the views and crossing the iconic Tower Bridge. The scattered clouds make for perfect photographic conditions without the harsh sunlight.\n", "\n", "4. **Lunch at a Pub in Covent Garden**\n", " - Head over to Covent Garden for a traditional British lunch at one of the local pubs. This area offers vibrant street performances and boutique shops.\n", "\n", "**Afternoon:**\n", "\n", "5. **British Museum**\n", " - Spend a couple of hours at the British Museum, exploring its vast collection of global artifacts. This indoor activity provides a respite from any nippy outdoor temperatures.\n", "\n", "6. **Stroll through Leadenhall Market**\n", " - If time allows, explore Leadenhall Market. The market features stunning architecture and historic ambiance, perfect for browsing or enjoying a coffee.\n", "\n", "**Evening:**\n", "\n", "7. **Dinner and Evening at The Sky Garden**\n", " - Conclude your day with a visit to the Sky Garden, especially recommended on clear days for panoramic views of London. Enjoy dinner at their renowned restaurant under the 360\u00b0 views of London's skyline.\n", "\n", "8. **Walk Around South Bank**\n", " - If you're up for it, finish the evening with a leisurely stroll along the South Bank, where you'll find lively street performers and beautiful views of the Twinkling London Eye.\n", "\n", "**Tips:**\n", "- Carry an umbrella or a light waterproof jacket just in case.\n", "- Ensure comfortable walking shoes as you'll be spending a lot of time exploring on foot.\n", "- Your smartphone/camera will come in handy for capturing the charming scenes of London under those scattered clouds.\n", "\n", "Have a fantastic day exploring London!\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ### Paris Itinerary\n", "\n", "#### **Day 1: Arrival and Evening River Cruise**\n", "\n", "- **Morning:**\n", " - **Arrival in Paris:** Check-in at your hotel and take some time to freshen up. \n", " - **Breakfast at a Local Caf\u00e9:** Start your day with a classic Parisian breakfast: a croissant and caf\u00e9 au lait at a nearby caf\u00e9.\n", "\n", "- **Afternoon:**\n", " - **Leisure Walk:** Enjoy a leisurely stroll in the neighborhood. Consider walking along the Seine to take in the iconic architecture.\n", " - **Visit a Local Market:** Experience local life by exploring one of Paris's charming markets. Try the March\u00e9 Bastille on Boulevard Richard Lenoir for fresh produce and artisan products.\n", "\n", "- **Evening:**\n", " - **Seine River Cruise:** In the evening, enjoy a Seine River cruise. This is an excellent way to see the city lights and major attractions like the Eiffel Tower.\n", " - **Dinner at a Bistro:** Conclude your day with dinner at a traditional Parisian bistro. Taste local specialties like duck confit or coq au vin.\n", "\n", "#### **Day 2: Classic Paris Sights**\n", "\n", "- **Morning:**\n", " - **Eiffel Tower Visit:** Start early to beat the crowds at the Eiffel Tower. Enjoy a coffee at the top with a breathtaking view of the city.\n", " - **Louvre Museum:** Spend a few hours exploring the world-renowned Louvre Museum. Don\u2019t miss iconic pieces like the Mona Lisa and the Venus de Milo.\n", "\n", "- **Afternoon:**\n", " - **Lunch at a Caf\u00e9:** Enjoy lunch at a caf\u00e9 near the Louvre. Try classic French dishes like quiche or salade ni\u00e7oise.\n", " - **Walk along the Champs-\u00c9lys\u00e9es:** Take a leisurely walk down this famous avenue towards the Arc de Triomphe.\n", "\n", "- **Evening:**\n", " - **Dinner in Montmartre:** Head to Montmartre for dinner. Wander through its charming streets and enjoy a meal at one of its quaint restaurants.\n", "\n", "#### **Day 3: Art, Culture, and Relaxation**\n", "\n", "- **Morning:**\n", " - **Mus\u00e9e d'Orsay:** Visit the Mus\u00e9e d'Orsay to admire its impressive collection of impressionist and post-impressionist masterpieces.\n", " - **Explore Saint-Germain-des-Pr\u00e9s:** Discover the boutiques and caf\u00e9s in this historic district.\n", "\n", "- **Afternoon:**\n", " - **Lunch in Le Marais:** Head to the Le Marais district, known for its historic charm and trendy vibe. Enjoy lunch at a local eatery.\n", " - **Explore Local Shops:** Take time to browse in unique shops and art galleries.\n", "\n", "- **Evening:**\n", " - **Dinner at a Michelin Star Restaurant:** Treat yourself to an exquisite dining experience at a Michelin Star restaurant to cap off your trip.\n", "\n", "#### **Tips:**\n", "- **Weather Preparation:** Pack an umbrella and a light jacket due to the cloud cover and mild temperatures (around 13-14\u00b0C).\n", "- **Travel Consideration:** Use public transport like the M\u00e9tro to navigate efficiently.\n", "- **Pass Options:** Consider purchasing the Paris Pass\u00ae for discounts and ease of access at major attractions.\n", "\n", "With this itinerary, you'll experience the essence of Paris, from its iconic landmarks to its vibrant local culture. Enjoy your visit!\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: Here's a detailed itinerary for exploring New York, tailored to the current weather and top attractions:\n", "\n", "### Day 1: Arrival and Exploration\n", "\n", "**Morning:**\n", "- **Central Park:**\n", " - Begin your day with a brisk walk through Central Park. It's a perfect way to enjoy the morning with temperatures around 7.74\u00b0C, and a chance to see the iconic landscapes.\n", " - Address: New York, NY\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html)\n", "\n", "**Mid-Morning:**\n", "- **Metropolitan Museum of Art:**\n", " - Escape the wind and immerse yourself in art and culture at The Met. Spend a couple of hours exploring its vast collections.\n", " - Address: 1000 5th Ave, New York, NY 10028\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105125-Reviews-The_Metropolitan_Museum_of_Art-New_York_City_New_York.html)\n", "\n", "**Afternoon:**\n", "- **Lunch near the Upper East Side:**\n", " - Choose from numerous cozy cafes with indoor seating to stay warm and enjoy a delicious meal.\n", "- **Museum of Modern Art (MoMA):**\n", " - After lunch, take a short walk to MoMA for a dose of contemporary art.\n", " - Address: 11 W 53rd St, New York, NY 10019\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d104365-Reviews-The_Museum_of_Modern_Art_MoMA-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Times Square:**\n", " - End your day in the bustling vibrancy of Times Square. Experience the dazzling lights and energetic atmosphere.\n", " - Address: Manhattan, NY 10036\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d143361-Reviews-Times_Square-New_York_City_New_York.html)\n", "\n", "### Day 2: Iconic Landmarks\n", "\n", "**Morning:**\n", "- **Statue of Liberty and Ellis Island:**\n", " - Start with a ferry ride to these iconic landmarks. Dress warmly as it might feel colder on the water.\n", " - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\n", "\n", "**Afternoon:**\n", "- **Lunch in Lower Manhattan:**\n", " - Explore dining options in the Financial District.\n", "- **9/11 Memorial and Museum:**\n", " - Visit this poignant site to pay respects and learn about the events of 9/11.\n", " - Address: 180 Greenwich St, New York, NY 10007\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1687489-Reviews-The_National_9_11_Memorial_Museum-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Broadway Show:**\n", " - Treat yourself to a memorable Broadway show. Be sure to book tickets in advance.\n", " - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\n", "\n", "### Day 3: Adventure and Relaxation\n", "\n", "**Morning:**\n", "- **High Line Park:**\n", " - Enjoy a unique stroll along this elevated linear park on a former rail track.\n", " - Address: New York, NY 10011\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d519474-Reviews-The_High_Line-New_York_City_New_York.html)\n", "\n", "**Afternoon:**\n", "- **Chelsea Market:**\n", " - Experience an array of food options in this historic marketplace for lunch.\n", " - Address: 75 9th Ave, New York, NY 10011\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1912932-Reviews-Chelsea_Market-New_York_City_New_York.html)\n", "\n", "**Evening:**\n", "- **Brooklyn Bridge Walk:**\n", " - Cap off your trip with an evening walk across the Brooklyn Bridge for beautiful skyline views.\n", " - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d619722-Reviews-Brooklyn_Bridge-New_York_City_New_York.html)\n", "\n", "With the current few clouds in the sky and comfortable daytime temperatures, this itinerary balances must-see attractions and relaxation, ideal for a memorable visit to New York City. Also consider checking out various passes like the New York Pass for potential savings. Enjoy your trip!\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: ['Sydney', \"In Sydney, the current weather is as follows:\\nDetailed status: light rain\\nWind speed: 5.66 m/s, direction: 250\u00b0\\nHumidity: 79%\\nTemperature: \\n - Current: 17.29\u00b0C\\n - High: 18.17\u00b0C\\n - Low: 16.53\u00b0C\\n - Feels like: 17.14\u00b0C\\nRain: {'1h': 0.11}\\nHeat index: None\\nCloud cover: 40%\", {'result': [{'link': 'https://www.sydney.com/things-to-do/attractions', 'title': 'Top attractions in Sydney | Sydney.com', 'snippet': 'Discover the top attractions in Sydney. Explore Sydney's many attractions, sightseeing spots & landmarks that you must not miss.'}, {'link': 'https://www.tripadvisor.com/Attractions-g255060-Activities-Sydney_New_South_Wales.html', 'title': 'THE 15 BEST Things to Do in Sydney (2025) - Must-See Attractions', 'snippet': 'Things to Do in Sydney, Australia: See Tripadvisor's 1,011,795 traveler reviews and photos of Sydney tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Sydney. Visit top-rated & must-see attractions.'}, {'link': 'https://www.australia.com/en-us/places/sydney-and-surrounds/guide-to-sydney.html', 'title': 'Travel guide to Sydney, NSW - Tourism Australia', 'snippet': 'Find our guide to Sydney, Australia. Explore the city's natural beauty from famous landmarks such as the Harbour Bridge to picturesque beaches and world-class restaurants.'}]}]\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: ['Tokyo', 'In Tokyo, the current weather is as follows:\\nDetailed status: clear sky\\nWind speed: 4.63 m/s, direction: 20\u00b0\\nHumidity: 30%\\nTemperature: \\n - Current: 15.37\u00b0C\\n - High: 15.91\u00b0C\\n - Low: 13.67\u00b0C\\n - Feels like: 13.75\u00b0C\\nRain: {}\\nHeat index: None\\nCloud cover: 0%', {'result': [{'link': 'https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html', 'title': 'THE 15 BEST Things to Do in Tokyo (2025) - Must-See Attractions', 'snippet': 'Things to Do in Tokyo, Japan: See Tripadvisor's 1,688,470 traveler reviews and photos of Tokyo tourist attractions. Find what to do today, this weekend, or in April. We have reviews of the best places to see in Tokyo. Visit top-rated & must-see attractions.'}, {'link': 'https://www.gotokyo.org/en/see-and-do/attractions/index.html', 'title': 'Top tourist attractions in Tokyo: the best sightseeing spots | The Official Tokyo Travel Guide, GO TOKYO', 'snippet': 'Check out our Tokyo tourism guide, complete to find our recommendations for famous places and must-visit locations. From historical sites to the Tokyo of the future, there is lots to see and do.'}, {'link': 'https://www.japan-guide.com/e/e2164.html', 'title': 'Tokyo City Guide - What to do in Tokyo', 'snippet': 'The city's history can be appreciated in districts such as Asakusa and in many excellent museums, historic temples and gardens. Contrary to common perception, Tokyo also offers a number of attractive green spaces in the city center and within relatively short train rides at its outskirts.'}]}]\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ### Sydney Itinerary - Exploring with Light Rain\n", "\n", "#### **Day 1: Arrival and Iconic Landmarks**\n", "\n", "**Morning:**\n", "- **Sydney Opera House** \n", " Start your day early with a tour of the iconic Sydney Opera House. Book a guided tour to learn about the history and architecture of this world-famous landmark. Don\u2019t forget to bring a light raincoat as there\u2019s some rain expected.\n", "\n", "**Afternoon:**\n", "- **Sydney Harbour Bridge** \n", " Take a stroll across Sydney Harbour Bridge. The slight drizzle and the fresh air will make for a refreshing walk. Consider the BridgeClimb experience for spectacular views of the city, even more mesmerizing when it\u2019s cloudy.\n", "\n", "**Evening:**\n", "- **The Rocks District** \n", " Delve into the historic Rocks area, where you can enjoy a cozy dinner at one of the local pubs. The gentle rain makes for a charming atmosphere in the cobblestone streets.\n", "\n", "#### **Day 2: Culture and Relaxation**\n", "\n", "**Morning:**\n", "- **Art Gallery of New South Wales** \n", " Immerse yourself in Australian art and culture at the Art Gallery of New South Wales. It\u2019s a perfect indoor activity to escape the rain while enjoying beautiful art pieces.\n", "\n", "**Afternoon:**\n", "- **Sydney Royal Botanic Garden** \n", " Walk through the lush greenery of the Royal Botanic Garden. While the light rain adds to the beauty of the gardens, keep an umbrella or a waterproof jacket handy.\n", "\n", "**Evening:**\n", "- **Dinner in Darling Harbour** \n", " Head to Darling Harbour for a diverse culinary experience. Choose from cafes and restaurants with a view of the harbour, perfect for a calming evening. The rain reflection off the water creates an enchanting setting.\n", "\n", "#### **Day 3: Exploration and Adventure**\n", "\n", "**Morning:**\n", "- **Taronga Zoo** \n", " Visit Taronga Zoo, which offers views of Sydney Harbour along with a variety of animal species. Since there might be light rain, focus on the indoor animal enclosures and exhibits.\n", "\n", "**Afternoon:** \n", "- **Bondi Beach & Coastal Walk** \n", " Take a trip to the famous Bondi Beach, where you can enjoy the overcast skies at Australia\u2019s most famous beach. If weather permits, try a short walk on the Bondi to Coogee coastal walk and enjoy the dramatic coastline views.\n", "\n", "**Evening:**\n", "- **Sydney Observatory** \n", " Conclude your day with a visit to the Sydney Observatory. If the clouds clear up, stargazing is an incredible experience, allowing a unique glimpse into the southern skies.\n", "\n", "### **Notes:**\n", "- **Weather Precautions**: Remember to always check the current weather on the day and be prepared with rain-appropriate gear.\n", "- **Bookings**: It\u2019s highly recommended to book indoor activities in advance, particularly for popular attractions, to ensure a spot.\n", "- **Transportation**: Utilize Sydney\u2019s efficient public transport, including ferries, buses, and trains, to make the most out of your visit under weather-friendly conditions.\n", "\n", "Enjoy your time in Sydney, where even a little rain adds its magic to the vibrant cityscape!\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: **Detailed Itinerary for a Day in Tokyo**\n", "\n", "*Weather Overview:*\n", "- Expect clear skies, perfect for exploring the city. The temperature is comfortable at 15.37\u00b0C with a light wind. Dress in layers to adjust to the mild weather, especially for evening activities.\n", "\n", "**Morning:**\n", "\n", "1. **Visit Asakusa and Sens\u014d-ji Temple:**\n", " - Start your day in the historical district of Asakusa. Explore Sens\u014d-ji, Tokyo's oldest temple, and take in the vibrant atmosphere of Nakamise Shopping Street.\n", " - *Time: 9:00 AM - 11:00 AM*\n", "\n", "2. **Breakfast at Asakusa:**\n", " - Enjoy a traditional Japanese breakfast at one of the local caf\u00e9s. Try some fresh sushi or a hearty bowl of ramen.\n", "\n", "**Midday:**\n", "\n", "1. **Ueno Park and Museums:**\n", " - Head over to Ueno Park, a large public park with museums and beautiful gardens.\n", " - Visit the Tokyo National Museum to explore Japanese art and history.\n", " - *Time: 11:30 AM - 1:30 PM*\n", "\n", "2. **Lunch in Ueno:**\n", " - Choose from various dining options in Ueno, from traditional Japanese meals to international cuisine. Ueno offers an array of options for everyone.\n", "\n", "**Afternoon:**\n", "\n", "1. **Tokyo Skytree:**\n", " - Ascend to the observation deck for breathtaking views of Tokyo from the Tokyo Skytree, one of the tallest structures in the world.\n", " - *Time: 2:30 PM - 4:00 PM*\n", "\n", "2. **Shibuya & Harajuku:**\n", " - Head to Shibuya Crossing, the world's busiest pedestrian crossing, and then wander around the trendy Harajuku area, famous for unique fashion and vibrant culture.\n", " - Don\u2019t miss a walk through Yoyogi Park, a large urban park that\u2019s perfect for relaxing.\n", " - *Time: 4:30 PM - 6:00 PM*\n", "\n", "**Evening:**\n", "\n", "1. **Dinner in Shinjuku:**\n", " - Make your way to Shinjuku for dinner in one of the many izakayas or sushi bars. Explore the buzzing streets and maybe try some yakitori.\n", " - *Time: 7:00 PM - 8:30 PM*\n", "\n", "2. **Explore Shinjuku Nightlife:**\n", " - After dinner, explore the nightlife in Shinjuku. Consider visiting the Robot Restaurant for a unique show or wander through the entertainment district of Kabukicho.\n", " - *Time: 8:30 PM onward*\n", "\n", "*Note:* For additional resources and more must-see attractions, consider referring to the following links for inspiration and up-to-date information:\n", "- [Tripadvisor's Best Things to Do in Tokyo](https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html)\n", "- [The Official Tokyo Travel Guide](https://www.gotokyo.org/en/see-and-do/attractions/index.html)\n", "- [Japan-Guide for Exploring Tokyo](https://www.japan-guide.com/e/e2164.html)\n", "\n", "Enjoy your day exploring the vibrant and diverse city of Tokyo!\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: [\"Here's a detailed itinerary for exploring New York, tailored to the current weather and top attractions:\\n\\n### Day 1: Arrival and Exploration\\n\\n**Morning:**\\n- **Central Park:**\\n - Begin your day with a brisk walk through Central Park. It's a perfect way to enjoy the morning with temperatures around 7.74\u00b0C, and a chance to see the iconic landscapes.\\n - Address: New York, NY\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html)\\n\\n**Mid-Morning:**\\n- **Metropolitan Museum of Art:**\\n - Escape the wind and immerse yourself in art and culture at The Met. Spend a couple of hours exploring its vast collections.\\n - Address: 1000 5th Ave, New York, NY 10028\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105125-Reviews-The_Metropolitan_Museum_of_Art-New_York_City_New_York.html)\\n\\n**Afternoon:**\\n- **Lunch near the Upper East Side:**\\n - Choose from numerous cozy cafes with indoor seating to stay warm and enjoy a delicious meal.\\n- **Museum of Modern Art (MoMA):**\\n - After lunch, take a short walk to MoMA for a dose of contemporary art.\\n - Address: 11 W 53rd St, New York, NY 10019\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d104365-Reviews-The_Museum_of_Modern_Art_MoMA-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Times Square:**\\n - End your day in the bustling vibrancy of Times Square. Experience the dazzling lights and energetic atmosphere.\\n - Address: Manhattan, NY 10036\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d143361-Reviews-Times_Square-New_York_City_New_York.html)\\n\\n### Day 2: Iconic Landmarks\\n\\n**Morning:**\\n- **Statue of Liberty and Ellis Island:**\\n - Start with a ferry ride to these iconic landmarks. Dress warmly as it might feel colder on the water.\\n - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\\n\\n**Afternoon:**\\n- **Lunch in Lower Manhattan:**\\n - Explore dining options in the Financial District.\\n- **9/11 Memorial and Museum:**\\n - Visit this poignant site to pay respects and learn about the events of 9/11.\\n - Address: 180 Greenwich St, New York, NY 10007\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1687489-Reviews-The_National_9_11_Memorial_Museum-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Broadway Show:**\\n - Treat yourself to a memorable Broadway show. Be sure to book tickets in advance.\\n - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\\n\\n### Day 3: Adventure and Relaxation\\n\\n**Morning:**\\n- **High Line Park:**\\n - Enjoy a unique stroll along this elevated linear park on a former rail track.\\n - Address: New York, NY 10011\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d519474-Reviews-The_High_Line-New_York_City_New_York.html)\\n\\n**Afternoon:**\\n- **Chelsea Market:**\\n - Experience an array of food options in this historic marketplace for lunch.\\n - Address: 75 9th Ave, New York, NY 10011\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1912932-Reviews-Chelsea_Market-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Brooklyn Bridge Walk:**\\n - Cap off your trip with an evening walk across the Brooklyn Bridge for beautiful skyline views.\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d619722-Reviews-Brooklyn_Bridge-New_York_City_New_York.html)\\n\\nWith the current few clouds in the sky and comfortable daytime temperatures, this itinerary balances must-see attractions and relaxation, ideal for a memorable visit to New York City. Also consider checking out various passes like the New York Pass for potential savings. Enjoy your trip!\", \"Sure, let's create a detailed itinerary for a day in London, factoring in the weather conditions:\\n\\n---\\n\\n**London Day Itinerary**\\n\\n**Morning:**\\n\\n1. **Breakfast at Borough Market**\\n - Kick off your day with a hearty breakfast at Borough Market, which opens early. Enjoy a variety of local foods and fresh pastries to fuel your day.\\n\\n2. **Tower of London**\\n - After breakfast, head to the Tower of London, one of the most iconic attractions. Spend a couple of hours exploring this historic castle and its exhibits. Given the cool weather, dress in layers to stay comfortable outdoors.\\n\\n**Midday:**\\n\\n3. **Walk Along the Thames & Tower Bridge**\\n - Take a short walk along the Thames River, taking in the views and crossing the iconic Tower Bridge. The scattered clouds make for perfect photographic conditions without the harsh sunlight.\\n\\n4. **Lunch at a Pub in Covent Garden**\\n - Head over to Covent Garden for a traditional British lunch at one of the local pubs. This area offers vibrant street performances and boutique shops.\\n\\n**Afternoon:**\\n\\n5. **British Museum**\\n - Spend a couple of hours at the British Museum, exploring its vast collection of global artifacts. This indoor activity provides a respite from any nippy outdoor temperatures.\\n\\n6. **Stroll through Leadenhall Market**\\n - If time allows, explore Leadenhall Market. The market features stunning architecture and historic ambiance, perfect for browsing or enjoying a coffee.\\n\\n**Evening:**\\n\\n7. **Dinner and Evening at The Sky Garden**\\n - Conclude your day with a visit to the Sky Garden, especially recommended on clear days for panoramic views of London. Enjoy dinner at their renowned restaurant under the 360\u00b0 views of London's skyline.\\n\\n8. **Walk Around South Bank**\\n - If you're up for it, finish the evening with a leisurely stroll along the South Bank, where you'll find lively street performers and beautiful views of the Twinkling London Eye.\\n\\n**Tips:**\\n- Carry an umbrella or a light waterproof jacket just in case.\\n- Ensure comfortable walking shoes as you'll be spending a lot of time exploring on foot.\\n- Your smartphone/camera will come in handy for capturing the charming scenes of London under those scattered clouds.\\n\\nHave a fantastic day exploring London!\", \"### Paris Itinerary\\n\\n#### **Day 1: Arrival and Evening River Cruise**\\n\\n- **Morning:**\\n - **Arrival in Paris:** Check-in at your hotel and take some time to freshen up. \\n - **Breakfast at a Local Caf\u00e9:** Start your day with a classic Parisian breakfast: a croissant and caf\u00e9 au lait at a nearby caf\u00e9.\\n\\n- **Afternoon:**\\n - **Leisure Walk:** Enjoy a leisurely stroll in the neighborhood. Consider walking along the Seine to take in the iconic architecture.\\n - **Visit a Local Market:** Experience local life by exploring one of Paris's charming markets. Try the March\u00e9 Bastille on Boulevard Richard Lenoir for fresh produce and artisan products.\\n\\n- **Evening:**\\n - **Seine River Cruise:** In the evening, enjoy a Seine River cruise. This is an excellent way to see the city lights and major attractions like the Eiffel Tower.\\n - **Dinner at a Bistro:** Conclude your day with dinner at a traditional Parisian bistro. Taste local specialties like duck confit or coq au vin.\\n\\n#### **Day 2: Classic Paris Sights**\\n\\n- **Morning:**\\n - **Eiffel Tower Visit:** Start early to beat the crowds at the Eiffel Tower. Enjoy a coffee at the top with a breathtaking view of the city.\\n - **Louvre Museum:** Spend a few hours exploring the world-renowned Louvre Museum. Don\u2019t miss iconic pieces like the Mona Lisa and the Venus de Milo.\\n\\n- **Afternoon:**\\n - **Lunch at a Caf\u00e9:** Enjoy lunch at a caf\u00e9 near the Louvre. Try classic French dishes like quiche or salade ni\u00e7oise.\\n - **Walk along the Champs-\u00c9lys\u00e9es:** Take a leisurely walk down this famous avenue towards the Arc de Triomphe.\\n\\n- **Evening:**\\n - **Dinner in Montmartre:** Head to Montmartre for dinner. Wander through its charming streets and enjoy a meal at one of its quaint restaurants.\\n\\n#### **Day 3: Art, Culture, and Relaxation**\\n\\n- **Morning:**\\n - **Mus\u00e9e d'Orsay:** Visit the Mus\u00e9e d'Orsay to admire its impressive collection of impressionist and post-impressionist masterpieces.\\n - **Explore Saint-Germain-des-Pr\u00e9s:** Discover the boutiques and caf\u00e9s in this historic district.\\n\\n- **Afternoon:**\\n - **Lunch in Le Marais:** Head to the Le Marais district, known for its historic charm and trendy vibe. Enjoy lunch at a local eatery.\\n - **Explore Local Shops:** Take time to browse in unique shops and art galleries.\\n\\n- **Evening:**\\n - **Dinner at a Michelin Star Restaurant:** Treat yourself to an exquisite dining experience at a Michelin Star restaurant to cap off your trip.\\n\\n#### **Tips:**\\n- **Weather Preparation:** Pack an umbrella and a light jacket due to the cloud cover and mild temperatures (around 13-14\u00b0C).\\n- **Travel Consideration:** Use public transport like the M\u00e9tro to navigate efficiently.\\n- **Pass Options:** Consider purchasing the Paris Pass\u00ae for discounts and ease of access at major attractions.\\n\\nWith this itinerary, you'll experience the essence of Paris, from its iconic landmarks to its vibrant local culture. Enjoy your visit!\", \"**Detailed Itinerary for a Day in Tokyo**\\n\\n*Weather Overview:*\\n- Expect clear skies, perfect for exploring the city. The temperature is comfortable at 15.37\u00b0C with a light wind. Dress in layers to adjust to the mild weather, especially for evening activities.\\n\\n**Morning:**\\n\\n1. **Visit Asakusa and Sens\u014d-ji Temple:**\\n - Start your day in the historical district of Asakusa. Explore Sens\u014d-ji, Tokyo's oldest temple, and take in the vibrant atmosphere of Nakamise Shopping Street.\\n - *Time: 9:00 AM - 11:00 AM*\\n\\n2. **Breakfast at Asakusa:**\\n - Enjoy a traditional Japanese breakfast at one of the local caf\u00e9s. Try some fresh sushi or a hearty bowl of ramen.\\n\\n**Midday:**\\n\\n1. **Ueno Park and Museums:**\\n - Head over to Ueno Park, a large public park with museums and beautiful gardens.\\n - Visit the Tokyo National Museum to explore Japanese art and history.\\n - *Time: 11:30 AM - 1:30 PM*\\n\\n2. **Lunch in Ueno:**\\n - Choose from various dining options in Ueno, from traditional Japanese meals to international cuisine. Ueno offers an array of options for everyone.\\n\\n**Afternoon:**\\n\\n1. **Tokyo Skytree:**\\n - Ascend to the observation deck for breathtaking views of Tokyo from the Tokyo Skytree, one of the tallest structures in the world.\\n - *Time: 2:30 PM - 4:00 PM*\\n\\n2. **Shibuya & Harajuku:**\\n - Head to Shibuya Crossing, the world's busiest pedestrian crossing, and then wander around the trendy Harajuku area, famous for unique fashion and vibrant culture.\\n - Don\u2019t miss a walk through Yoyogi Park, a large urban park that\u2019s perfect for relaxing.\\n - *Time: 4:30 PM - 6:00 PM*\\n\\n**Evening:**\\n\\n1. **Dinner in Shinjuku:**\\n - Make your way to Shinjuku for dinner in one of the many izakayas or sushi bars. Explore the buzzing streets and maybe try some yakitori.\\n - *Time: 7:00 PM - 8:30 PM*\\n\\n2. **Explore Shinjuku Nightlife:**\\n - After dinner, explore the nightlife in Shinjuku. Consider visiting the Robot Restaurant for a unique show or wander through the entertainment district of Kabukicho.\\n - *Time: 8:30 PM onward*\\n\\n*Note:* For additional resources and more must-see attractions, consider referring to the following links for inspiration and up-to-date information:\\n- [Tripadvisor's Best Things to Do in Tokyo](https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html)\\n- [The Official Tokyo Travel Guide](https://www.gotokyo.org/en/see-and-do/attractions/index.html)\\n- [Japan-Guide for Exploring Tokyo](https://www.japan-guide.com/e/e2164.html)\\n\\nEnjoy your day exploring the vibrant and diverse city of Tokyo!\", '### Sydney Itinerary - Exploring with Light Rain\\n\\n#### **Day 1: Arrival and Iconic Landmarks**\\n\\n**Morning:**\\n- **Sydney Opera House** \\n Start your day early with a tour of the iconic Sydney Opera House. Book a guided tour to learn about the history and architecture of this world-famous landmark. Don\u2019t forget to bring a light raincoat as there\u2019s some rain expected.\\n\\n**Afternoon:**\\n- **Sydney Harbour Bridge** \\n Take a stroll across Sydney Harbour Bridge. The slight drizzle and the fresh air will make for a refreshing walk. Consider the BridgeClimb experience for spectacular views of the city, even more mesmerizing when it\u2019s cloudy.\\n\\n**Evening:**\\n- **The Rocks District** \\n Delve into the historic Rocks area, where you can enjoy a cozy dinner at one of the local pubs. The gentle rain makes for a charming atmosphere in the cobblestone streets.\\n\\n#### **Day 2: Culture and Relaxation**\\n\\n**Morning:**\\n- **Art Gallery of New South Wales** \\n Immerse yourself in Australian art and culture at the Art Gallery of New South Wales. It\u2019s a perfect indoor activity to escape the rain while enjoying beautiful art pieces.\\n\\n**Afternoon:**\\n- **Sydney Royal Botanic Garden** \\n Walk through the lush greenery of the Royal Botanic Garden. While the light rain adds to the beauty of the gardens, keep an umbrella or a waterproof jacket handy.\\n\\n**Evening:**\\n- **Dinner in Darling Harbour** \\n Head to Darling Harbour for a diverse culinary experience. Choose from cafes and restaurants with a view of the harbour, perfect for a calming evening. The rain reflection off the water creates an enchanting setting.\\n\\n#### **Day 3: Exploration and Adventure**\\n\\n**Morning:**\\n- **Taronga Zoo** \\n Visit Taronga Zoo, which offers views of Sydney Harbour along with a variety of animal species. Since there might be light rain, focus on the indoor animal enclosures and exhibits.\\n\\n**Afternoon:** \\n- **Bondi Beach & Coastal Walk** \\n Take a trip to the famous Bondi Beach, where you can enjoy the overcast skies at Australia\u2019s most famous beach. If weather permits, try a short walk on the Bondi to Coogee coastal walk and enjoy the dramatic coastline views.\\n\\n**Evening:**\\n- **Sydney Observatory** \\n Conclude your day with a visit to the Sydney Observatory. If the clouds clear up, stargazing is an incredible experience, allowing a unique glimpse into the southern skies.\\n\\n### **Notes:**\\n- **Weather Precautions**: Remember to always check the current weather on the day and be prepared with rain-appropriate gear.\\n- **Bookings**: It\u2019s highly recommended to book indoor activities in advance, particularly for popular attractions, to ensure a spot.\\n- **Transportation**: Utilize Sydney\u2019s efficient public transport, including ferries, buses, and trains, to make the most out of your visit under weather-friendly conditions.\\n\\nEnjoy your time in Sydney, where even a little rain adds its magic to the vibrant cityscape!']\n", "--------------------------------------------------\n", "Transition type: finish\n", "Transition output: {'final_plan': \"Here's a detailed itinerary for exploring New York, tailored to the current weather and top attractions:\\n\\n### Day 1: Arrival and Exploration\\n\\n**Morning:**\\n- **Central Park:**\\n - Begin your day with a brisk walk through Central Park. It's a perfect way to enjoy the morning with temperatures around 7.74\u00b0C, and a chance to see the iconic landscapes.\\n - Address: New York, NY\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html)\\n\\n**Mid-Morning:**\\n- **Metropolitan Museum of Art:**\\n - Escape the wind and immerse yourself in art and culture at The Met. Spend a couple of hours exploring its vast collections.\\n - Address: 1000 5th Ave, New York, NY 10028\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d105125-Reviews-The_Metropolitan_Museum_of_Art-New_York_City_New_York.html)\\n\\n**Afternoon:**\\n- **Lunch near the Upper East Side:**\\n - Choose from numerous cozy cafes with indoor seating to stay warm and enjoy a delicious meal.\\n- **Museum of Modern Art (MoMA):**\\n - After lunch, take a short walk to MoMA for a dose of contemporary art.\\n - Address: 11 W 53rd St, New York, NY 10019\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d104365-Reviews-The_Museum_of_Modern_Art_MoMA-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Times Square:**\\n - End your day in the bustling vibrancy of Times Square. Experience the dazzling lights and energetic atmosphere.\\n - Address: Manhattan, NY 10036\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d143361-Reviews-Times_Square-New_York_City_New_York.html)\\n\\n### Day 2: Iconic Landmarks\\n\\n**Morning:**\\n- **Statue of Liberty and Ellis Island:**\\n - Start with a ferry ride to these iconic landmarks. Dress warmly as it might feel colder on the water.\\n - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\\n\\n**Afternoon:**\\n- **Lunch in Lower Manhattan:**\\n - Explore dining options in the Financial District.\\n- **9/11 Memorial and Museum:**\\n - Visit this poignant site to pay respects and learn about the events of 9/11.\\n - Address: 180 Greenwich St, New York, NY 10007\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1687489-Reviews-The_National_9_11_Memorial_Museum-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Broadway Show:**\\n - Treat yourself to a memorable Broadway show. Be sure to book tickets in advance.\\n - [More Info](https://www.iloveny.com/places-to-go/new-york-city/attractions/)\\n\\n### Day 3: Adventure and Relaxation\\n\\n**Morning:**\\n- **High Line Park:**\\n - Enjoy a unique stroll along this elevated linear park on a former rail track.\\n - Address: New York, NY 10011\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d519474-Reviews-The_High_Line-New_York_City_New_York.html)\\n\\n**Afternoon:**\\n- **Chelsea Market:**\\n - Experience an array of food options in this historic marketplace for lunch.\\n - Address: 75 9th Ave, New York, NY 10011\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d1912932-Reviews-Chelsea_Market-New_York_City_New_York.html)\\n\\n**Evening:**\\n- **Brooklyn Bridge Walk:**\\n - Cap off your trip with an evening walk across the Brooklyn Bridge for beautiful skyline views.\\n - [More Info](https://www.tripadvisor.com/Attraction_Review-g60763-d619722-Reviews-Brooklyn_Bridge-New_York_City_New_York.html)\\n\\nWith the current few clouds in the sky and comfortable daytime temperatures, this itinerary balances must-see attractions and relaxation, ideal for a memorable visit to New York City. Also consider checking out various passes like the New York Pass for potential savings. Enjoy your trip!\\n---------------\\nSure, let's create a detailed itinerary for a day in London, factoring in the weather conditions:\\n\\n---\\n\\n**London Day Itinerary**\\n\\n**Morning:**\\n\\n1. **Breakfast at Borough Market**\\n - Kick off your day with a hearty breakfast at Borough Market, which opens early. Enjoy a variety of local foods and fresh pastries to fuel your day.\\n\\n2. **Tower of London**\\n - After breakfast, head to the Tower of London, one of the most iconic attractions. Spend a couple of hours exploring this historic castle and its exhibits. Given the cool weather, dress in layers to stay comfortable outdoors.\\n\\n**Midday:**\\n\\n3. **Walk Along the Thames & Tower Bridge**\\n - Take a short walk along the Thames River, taking in the views and crossing the iconic Tower Bridge. The scattered clouds make for perfect photographic conditions without the harsh sunlight.\\n\\n4. **Lunch at a Pub in Covent Garden**\\n - Head over to Covent Garden for a traditional British lunch at one of the local pubs. This area offers vibrant street performances and boutique shops.\\n\\n**Afternoon:**\\n\\n5. **British Museum**\\n - Spend a couple of hours at the British Museum, exploring its vast collection of global artifacts. This indoor activity provides a respite from any nippy outdoor temperatures.\\n\\n6. **Stroll through Leadenhall Market**\\n - If time allows, explore Leadenhall Market. The market features stunning architecture and historic ambiance, perfect for browsing or enjoying a coffee.\\n\\n**Evening:**\\n\\n7. **Dinner and Evening at The Sky Garden**\\n - Conclude your day with a visit to the Sky Garden, especially recommended on clear days for panoramic views of London. Enjoy dinner at their renowned restaurant under the 360\u00b0 views of London's skyline.\\n\\n8. **Walk Around South Bank**\\n - If you're up for it, finish the evening with a leisurely stroll along the South Bank, where you'll find lively street performers and beautiful views of the Twinkling London Eye.\\n\\n**Tips:**\\n- Carry an umbrella or a light waterproof jacket just in case.\\n- Ensure comfortable walking shoes as you'll be spending a lot of time exploring on foot.\\n- Your smartphone/camera will come in handy for capturing the charming scenes of London under those scattered clouds.\\n\\nHave a fantastic day exploring London!\\n---------------\\n### Paris Itinerary\\n\\n#### **Day 1: Arrival and Evening River Cruise**\\n\\n- **Morning:**\\n - **Arrival in Paris:** Check-in at your hotel and take some time to freshen up. \\n - **Breakfast at a Local Caf\u00e9:** Start your day with a classic Parisian breakfast: a croissant and caf\u00e9 au lait at a nearby caf\u00e9.\\n\\n- **Afternoon:**\\n - **Leisure Walk:** Enjoy a leisurely stroll in the neighborhood. Consider walking along the Seine to take in the iconic architecture.\\n - **Visit a Local Market:** Experience local life by exploring one of Paris's charming markets. Try the March\u00e9 Bastille on Boulevard Richard Lenoir for fresh produce and artisan products.\\n\\n- **Evening:**\\n - **Seine River Cruise:** In the evening, enjoy a Seine River cruise. This is an excellent way to see the city lights and major attractions like the Eiffel Tower.\\n - **Dinner at a Bistro:** Conclude your day with dinner at a traditional Parisian bistro. Taste local specialties like duck confit or coq au vin.\\n\\n#### **Day 2: Classic Paris Sights**\\n\\n- **Morning:**\\n - **Eiffel Tower Visit:** Start early to beat the crowds at the Eiffel Tower. Enjoy a coffee at the top with a breathtaking view of the city.\\n - **Louvre Museum:** Spend a few hours exploring the world-renowned Louvre Museum. Don\u2019t miss iconic pieces like the Mona Lisa and the Venus de Milo.\\n\\n- **Afternoon:**\\n - **Lunch at a Caf\u00e9:** Enjoy lunch at a caf\u00e9 near the Louvre. Try classic French dishes like quiche or salade ni\u00e7oise.\\n - **Walk along the Champs-\u00c9lys\u00e9es:** Take a leisurely walk down this famous avenue towards the Arc de Triomphe.\\n\\n- **Evening:**\\n - **Dinner in Montmartre:** Head to Montmartre for dinner. Wander through its charming streets and enjoy a meal at one of its quaint restaurants.\\n\\n#### **Day 3: Art, Culture, and Relaxation**\\n\\n- **Morning:**\\n - **Mus\u00e9e d'Orsay:** Visit the Mus\u00e9e d'Orsay to admire its impressive collection of impressionist and post-impressionist masterpieces.\\n - **Explore Saint-Germain-des-Pr\u00e9s:** Discover the boutiques and caf\u00e9s in this historic district.\\n\\n- **Afternoon:**\\n - **Lunch in Le Marais:** Head to the Le Marais district, known for its historic charm and trendy vibe. Enjoy lunch at a local eatery.\\n - **Explore Local Shops:** Take time to browse in unique shops and art galleries.\\n\\n- **Evening:**\\n - **Dinner at a Michelin Star Restaurant:** Treat yourself to an exquisite dining experience at a Michelin Star restaurant to cap off your trip.\\n\\n#### **Tips:**\\n- **Weather Preparation:** Pack an umbrella and a light jacket due to the cloud cover and mild temperatures (around 13-14\u00b0C).\\n- **Travel Consideration:** Use public transport like the M\u00e9tro to navigate efficiently.\\n- **Pass Options:** Consider purchasing the Paris Pass\u00ae for discounts and ease of access at major attractions.\\n\\nWith this itinerary, you'll experience the essence of Paris, from its iconic landmarks to its vibrant local culture. Enjoy your visit!\\n---------------\\n**Detailed Itinerary for a Day in Tokyo**\\n\\n*Weather Overview:*\\n- Expect clear skies, perfect for exploring the city. The temperature is comfortable at 15.37\u00b0C with a light wind. Dress in layers to adjust to the mild weather, especially for evening activities.\\n\\n**Morning:**\\n\\n1. **Visit Asakusa and Sens\u014d-ji Temple:**\\n - Start your day in the historical district of Asakusa. Explore Sens\u014d-ji, Tokyo's oldest temple, and take in the vibrant atmosphere of Nakamise Shopping Street.\\n - *Time: 9:00 AM - 11:00 AM*\\n\\n2. **Breakfast at Asakusa:**\\n - Enjoy a traditional Japanese breakfast at one of the local caf\u00e9s. Try some fresh sushi or a hearty bowl of ramen.\\n\\n**Midday:**\\n\\n1. **Ueno Park and Museums:**\\n - Head over to Ueno Park, a large public park with museums and beautiful gardens.\\n - Visit the Tokyo National Museum to explore Japanese art and history.\\n - *Time: 11:30 AM - 1:30 PM*\\n\\n2. **Lunch in Ueno:**\\n - Choose from various dining options in Ueno, from traditional Japanese meals to international cuisine. Ueno offers an array of options for everyone.\\n\\n**Afternoon:**\\n\\n1. **Tokyo Skytree:**\\n - Ascend to the observation deck for breathtaking views of Tokyo from the Tokyo Skytree, one of the tallest structures in the world.\\n - *Time: 2:30 PM - 4:00 PM*\\n\\n2. **Shibuya & Harajuku:**\\n - Head to Shibuya Crossing, the world's busiest pedestrian crossing, and then wander around the trendy Harajuku area, famous for unique fashion and vibrant culture.\\n - Don\u2019t miss a walk through Yoyogi Park, a large urban park that\u2019s perfect for relaxing.\\n - *Time: 4:30 PM - 6:00 PM*\\n\\n**Evening:**\\n\\n1. **Dinner in Shinjuku:**\\n - Make your way to Shinjuku for dinner in one of the many izakayas or sushi bars. Explore the buzzing streets and maybe try some yakitori.\\n - *Time: 7:00 PM - 8:30 PM*\\n\\n2. **Explore Shinjuku Nightlife:**\\n - After dinner, explore the nightlife in Shinjuku. Consider visiting the Robot Restaurant for a unique show or wander through the entertainment district of Kabukicho.\\n - *Time: 8:30 PM onward*\\n\\n*Note:* For additional resources and more must-see attractions, consider referring to the following links for inspiration and up-to-date information:\\n- [Tripadvisor's Best Things to Do in Tokyo](https://www.tripadvisor.com/Attractions-g298184-Activities-Tokyo_Tokyo_Prefecture_Kanto.html)\\n- [The Official Tokyo Travel Guide](https://www.gotokyo.org/en/see-and-do/attractions/index.html)\\n- [Japan-Guide for Exploring Tokyo](https://www.japan-guide.com/e/e2164.html)\\n\\nEnjoy your day exploring the vibrant and diverse city of Tokyo!\\n---------------\\n### Sydney Itinerary - Exploring with Light Rain\\n\\n#### **Day 1: Arrival and Iconic Landmarks**\\n\\n**Morning:**\\n- **Sydney Opera House** \\n Start your day early with a tour of the iconic Sydney Opera House. Book a guided tour to learn about the history and architecture of this world-famous landmark. Don\u2019t forget to bring a light raincoat as there\u2019s some rain expected.\\n\\n**Afternoon:**\\n- **Sydney Harbour Bridge** \\n Take a stroll across Sydney Harbour Bridge. The slight drizzle and the fresh air will make for a refreshing walk. Consider the BridgeClimb experience for spectacular views of the city, even more mesmerizing when it\u2019s cloudy.\\n\\n**Evening:**\\n- **The Rocks District** \\n Delve into the historic Rocks area, where you can enjoy a cozy dinner at one of the local pubs. The gentle rain makes for a charming atmosphere in the cobblestone streets.\\n\\n#### **Day 2: Culture and Relaxation**\\n\\n**Morning:**\\n- **Art Gallery of New South Wales** \\n Immerse yourself in Australian art and culture at the Art Gallery of New South Wales. It\u2019s a perfect indoor activity to escape the rain while enjoying beautiful art pieces.\\n\\n**Afternoon:**\\n- **Sydney Royal Botanic Garden** \\n Walk through the lush greenery of the Royal Botanic Garden. While the light rain adds to the beauty of the gardens, keep an umbrella or a waterproof jacket handy.\\n\\n**Evening:**\\n- **Dinner in Darling Harbour** \\n Head to Darling Harbour for a diverse culinary experience. Choose from cafes and restaurants with a view of the harbour, perfect for a calming evening. The rain reflection off the water creates an enchanting setting.\\n\\n#### **Day 3: Exploration and Adventure**\\n\\n**Morning:**\\n- **Taronga Zoo** \\n Visit Taronga Zoo, which offers views of Sydney Harbour along with a variety of animal species. Since there might be light rain, focus on the indoor animal enclosures and exhibits.\\n\\n**Afternoon:** \\n- **Bondi Beach & Coastal Walk** \\n Take a trip to the famous Bondi Beach, where you can enjoy the overcast skies at Australia\u2019s most famous beach. If weather permits, try a short walk on the Bondi to Coogee coastal walk and enjoy the dramatic coastline views.\\n\\n**Evening:**\\n- **Sydney Observatory** \\n Conclude your day with a visit to the Sydney Observatory. If the clouds clear up, stargazing is an incredible experience, allowing a unique glimpse into the southern skies.\\n\\n### **Notes:**\\n- **Weather Precautions**: Remember to always check the current weather on the day and be prepared with rain-appropriate gear.\\n- **Bookings**: It\u2019s highly recommended to book indoor activities in advance, particularly for popular attractions, to ensure a spot.\\n- **Transportation**: Utilize Sydney\u2019s efficient public transport, including ferries, buses, and trains, to make the most out of your visit under weather-friendly conditions.\\n\\nEnjoy your time in Sydney, where even a little rain adds its magic to the vibrant cityscape!\"}\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for transition in reversed(transitions):\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/04-hook-generator-trending-reels.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"julep\"\n", "\n", "
\n", "

\n", " \n", " \"Get\n", " \n", "  \n", " \n", " \"Documentation\"\n", " \n", "

\n", "

\n", " \"NPM\n", "  \n", " \"PyPI\n", "  \n", " \"Docker\n", "  \n", " \"GitHub\n", "

\n", " \n", "

\n", " Discord\n", " ·\n", " 𝕏\n", " ·\n", " LinkedIn\n", "

\n", "
\n", " \n", "## Task Definition: Generating Hooks for Trending Instagram Reels\n", " \n", "### Overview\n", " \n", " This task involves creating engaging hooks for trending Instragram reels using a structured approach that leverages data extracted from various social media APIs. The goal is to enhance the visibility and engagement of these reels through compelling introductory statements.\n", " \n", "### Task Tools:\n", " \n", "**API Tool Call**: Utilizes API calls to fetch trending data from social media platforms.\n", " \n", "**System Tool**: Manages document retrieval that contains templates for generating hooks.\n", " \n", "### Task Input:\n", " \n", "**query**: The search query or topic for which trending reels need to be analyzed.\n", " \n", "### Task Output:\n", " \n", "**output**: A JSON object that includes the original reel data along with the newly generated hooks, aimed at maximizing engagement.\n", " \n", "#### Task Flow\n", " \n", "1. **Input**: The user provides a topic or query.\n", " \n", "2. **API Tool Integration**: The `api_tool_call` is used to fetch trending reels based on the input query.\n", "\n", "3. **Document Retrieval**: Retrieves a document containing hook templates from the system tool.\n", "\n", "4. **Hook Generation**: Utilizes the retrieved templates to generate three unique hooks for each reel.\n", " \n", "5. **Output**: The final output includes the original reel data along with its engagement metrics and the generated hooks.\n", "\n", "### Key Feature:\n", "- Utilizes dynamic hook templates and social media trends to generate engaging content for TikTok reels, enhancing viewer interaction and reel visibility.\n", "\n", "```plaintext\n", "+----------+ +------------+ +------------+ +------------+ +-----------+\n", "| User | | API | | Prompt | | System | | Output |\n", "| Input | --> | Tool | --> | Step | --> | Tool | --> | Step |\n", "| (Query) | | Call | | (Scores) | | | | |\n", "+----------+ +------------+ +------------+ +------------+ +-----------+\n", " | | | | |\n", " | | | | |\n", " v v v v v\n", " \"trending\" Fetch data Calculate Retrieve hooks \"Here are the\n", " topics from API engagement & from document trending hooks...\"\n", " virality scores\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementation\n", "\n", "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", "\n", "\n", " \"Open\n", "\n", "\n", "### Additional Information\n", "\n", "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", "\n", "**Author:** Julep AI \n", "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install julep" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### NOTE:\n", "\n", "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", "- Once created, these UUIDs should remain unchanged for simplicity.\n", "- Altering a UUID will result in the system treating it as a new agent or task.\n", "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\n", "Wall time: 2.62 μs\n" ] } ], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "load_dotenv(override=True)\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating Julep Client with the API Key\n", "\n", "Get your API key from [here](https://dashboard.julep.ai/)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1 μs, sys: 0 ns, total: 1 μs\n", "Wall time: 2.62 μs\n" ] } ], "source": [ "from julep import Client\n", "\n", "JULEP_API_KEY = \"YOUR_JULEP_API_KEY\"\n", "\n", "# Initialize the client\n", "client = Client(api_key=JULEP_API_KEY,environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1 μs, sys: 0 ns, total: 1 μs\n", "Wall time: 2.38 μs\n" ] } ], "source": [ "# Creating an agent for handling persistent sessions\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"Session Manager\",\n", " about=\"An AI agent specialized in managing persistent sessions and context.\",\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"docs\"\n", "\n", "Document im Julep is a vector database that can be used to store and retrieve information.\n", "\n", "To learn more about the Document, please refer to the Document section in [Julep Concepts](https://docs.julep.ai/docs/concepts/docs)." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "<>:145: SyntaxWarning: invalid escape sequence '\\%'\n", "<>:145: SyntaxWarning: invalid escape sequence '\\%'\n", "/tmp/ipykernel_819695/2293527858.py:145: SyntaxWarning: invalid escape sequence '\\%'\n", " \"99\\% of your [target audience] don't. To be the 1% you need to [X].\",\n" ] }, { "data": { "text/plain": [ "'067a604a-6cf6-75b4-8000-a0cb0181a664'" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hooks_data = [\n", " {\"categories\": \"Price-Focused\",\n", " \"content\": [\n", " \"Save both time and money with [product].\",\n", " \"Save both time and money on [task].\",\n", " \"Is [product] worth the price? Let’s find out!\",\n", " \"Why is it challenging and costly to find a good [product category]?\",\n", " \"Searching for an affordable [product type]? Check this out!\",\n", " \"How to locate an affordable [service].\",\n", " \"I can’t believe this costs only [price].\",\n", " \"Don't waste your money on [X]; instead buy [X].\"\n", " ]},\n", " {\"categories\": \"Informative\",\n", " \"content\": [\n", " \"What’s inside [product]?\",\n", " \"Common questions I get about [product].\",\n", " \"Now you can get X delivered right to your door.\",\n", " \"Thinking of trying [product type]?\",\n", " \"Allow me to introduce you to [product].\",\n", " \"[category] Tip #X.\",\n", " \"Here’s how to achieve [value prop].\",\n", " \"I know this sounds unbelievable, but…\",\n", " \"How to get X done in just 10 minutes.\",\n", " \"How to find time for X.\",\n", " \"Here’s my biggest life hack for X.\",\n", " \"Add more [value prop] to your day.\"\n", " ]},\n", " {\"categories\": \"Versus the Alternative (or Competition)\",\n", " \"content\": [\"Before you try [product type], watch this first.\",\n", " \"Hate [the worse alternative]? Give this a try!\",\n", " \"Thinking about [worse alternative]?\",\n", " \"Instead of [worse alternative], try this.\",\n", " \"Still using [the worse alternative to the product]? Watch this.\",\n", " \"Something that’s always annoyed me about X.\",\n", " \"Don’t buy X that doesn’t work. Try this instead.\",\n", " \"I tested every [product category] so you don’t have to: here’s what I found.\",\n", " \"Stop doing [worse alternative]. Try [product] instead.\",\n", " \"Dealing with [negative experience]? I used [product] to help.\",\n", " \"Why millennials are switching to [product].\",\n", " \"How to do X without [worse alternative].\",\n", " \"I only get my [product category] from [brand name].\",\n", " \"I no longer buy my [product category] from [worse alternative].\",\n", " \"[Worse alternative] can be difficult to deal with.\",\n", " \"Your new X alternative.\",\n", " \"[value prop] without the [negative side effect].\",\n", " \"I kept experiencing [pain point], so I tried this instead!\",\n", " \"If you have [pain point] — you need to see this!\",\n", " \"I wanted to stop doing X, so I tried this instead.\",\n", " \"Your X isn't [adverb]; you just need X.\",\n", " \"My secret to [popular trend] revealed!\"\n", " ]},\n", " {\"categories\": \"User Experience\",\n", " \"content\": [\n", " \"Guys, it’s here…\",\n", " \"What I ordered vs. what I received.\",\n", " \"[Product] unboxing.\",\n", " \"Let’s create X with [product].\",\n", " \"POV: You tried [product].\",\n", " \"A day in the life of X.\",\n", " \"Get ready with me to do [task].\",\n", " \"“Put a finger down” [product category] edition.\",\n", " \"Trying home remedies for X.\",\n", " \"[Product category] ASMR.\"\n", " ]},\n", " {\"categories\": \"Responding to Hype\",\n", " \"content\": [\n", " \"TikTok made me try [product].\",\n", " \"Things TikTok made me try #13.\",\n", " \"This [product type] is going viral on [social media platform].\",\n", " \"I tested the viral [product type] to see if it lives up to the hype.\",\n", " \"This [product type] has over 5,000 reviews… let’s see if it’s worth it.\",\n", " \"[Publication] can’t stop raving about us.\",\n", " \"It’s so good it sold out in a week.\"\n", " ]},\n", " {\"categories\": \"It’s Easier\",\n", " \"content\": [\n", " \"Are you [accomplishing the goal optimally]?\",\n", " \"Life Hack: Try [product] for [pain point].\",\n", " \"My go-to [product] for [pain point].\",\n", " \"How to easily [task].\",\n", " \"[Task] has never been easier than with [product].\",\n", " \"My favorite [product] to make [hard task] simpler.\",\n", " \"Here’s my top product for [task].\",\n", " \"Struggling to do [task]?\",\n", " \"I’ve been struggling with [task], but [product] has really helped.\",\n", " \"Easiest way to do [task]?\",\n", " \"Make your week easier.\",\n", " \"Why adults avoid [task]… [product] makes it easy.\",\n", " \"[Product] made [task] so much easier! You’ve got to try it.\",\n", " \"When I use [product], it’s one less thing I have to worry about.\",\n", " \"How to do [X] in half the time.\",\n", " \"This trick/hack/method will save you hours...\",\n", " \"Easy hack to [X]...\",\n", " \"Simple [X] that will make you [X].\"\n", " ]},\n", " {\"categories\": \"Lists\",\n", " \"content\": [\n", " \"5 Ways [product] Helps with [pain point].\",\n", " \"3 reasons to buy [product].\",\n", " \"3 reasons to try [service].\",\n", " \"Get [value prop] in 3 steps.\",\n", " \"Here are 3 ways [worse alternative] affects your life.\",\n", " \"5 things you didn’t know about [topic].\",\n", " \"The ultimate [X] checklist to [action].\",\n", " \"Reasons why [X].\",\n", " \"Here are the 3 best ways to [X].\",\n", " \"Here are [X] mistakes you might be making...\",\n", " \"If you want [X], do these 5 things...\"\n", " ]},\n", " {\"categories\": \"The Best\",\n", " \"content\": [\n", " \"The internet’s #1 [product type].\",\n", " \"The best way to [accomplish the goal of the product].\",\n", " \"What makes [the product type] the best?\",\n", " \"My skin has never looked better with [product].\",\n", " \"The best way to find X in 2022.\",\n", " \"[Product] changed how I do [task], and I’m never going back.\",\n", " \"Why is [product] so good though?\",\n", " \"After hours of researching, I found the best [product type] for [task].\",\n", " \"I found the best [product category] for [value prop].\",\n", " \"This is going to blow your mind.\",\n", " \"How I got [X] in 24 hours.\",\n", " \"Must-have [products] for [X].\",\n", " \"The best [target audience] know something that you don't.\"\n", " ]},\n", " {\"categories\": \"Other Video Hooks that Address Viewers Directly\",\n", " \"content\": [\n", " \"Hey, [customer type], you’ve got to try this.\",\n", " \"People looking for [product category], stop scrolling.\",\n", " \"Wait, have you tried X?\",\n", " \"Take control of your X with [product].\",\n", " \"Imagine if X was also X.\",\n", " \"Watch this if you X.\"\n", " ]},\n", " {\"categories\": \"Facts & Stats\",\n", " \"content\": [\n", " \"PSA: [statement about product category].\",\n", " \"Did you know? [fact about product category].\",\n", " \"I just found out [fact about product category].\",\n", " \"Are you one of [fact about product category] people who do X?\",\n", " \"New customers get [discount].\",\n", " \"Take [discount] off when you try [product].\",\n", " \"I didn’t know X could be related to X.\",\n", " \"Why is it important to [do product-related task]?\",\n", " \"99\\% of your [target audience] don't. To be the 1% you need to [X].\",\n", " \"This [product] is the secret to [X].\"\n", " ]},\n", " {\"categories\": \"Curiosity & Engagement\",\n", " \"content\": [\n", " \"Is there anything worse than [X]?\",\n", " \"I will never [adjective] from learning this.\",\n", " \"X people start scrolling. I have the perfect [X] for you.\",\n", " \"Here's a challenge for you...\",\n", " \"There's nothing more painful than [X].\",\n", " \"What would you do if...\",\n", " \"Watch till the end…\"\n", " ]},\n", " {\"categories\": \"Negative Hooks\",\n", " \"content\": [\n", " \"Why you're failing at [activity].\",\n", " \"The worst mistake you can make in [subject].\",\n", " \"Avoid these common pitfalls in [topic].\",\n", " \"The dark side of [popular trend].\",\n", " \"Don't be fooled by [misconception].\",\n", " \"Why [common practice] is ruining your [outcome].\",\n", " \"What no one tells you about [issue].\",\n", " \"The hidden dangers of [activity].\",\n", " \"Stop doing this if you want to succeed in [field].\",\n", " \"The ugly truth about [common belief].\",\n", " \"Why [habit] is wasting your time.\",\n", " \"Exposing the myths about [topic].\",\n", " \"The biggest regret you'll have in [situation].\",\n", " \"How [action] is destroying your [goal].\",\n", " \"The shocking reality of [popular topic].\",\n", " \"Why [trend] is a bad idea.\",\n", " \"The real reason you're not seeing results in [field].\",\n", " \"The downside of [seemingly positive aspect].\",\n", " \"What you should never do in [activity].\",\n", " \"Why [common advice] is actually harmful.\"\n", " ]}\n", "]\n", "\n", "hooks_doc_content = []\n", "\n", "for category in hooks_data:\n", " hooks_doc_content.extend(category['content'])\n", "\n", "doc = client.agents.docs.create(\n", " agent_id=AGENT_UUID, title=\"hooks_doc\", content=hooks_doc_content)\n", "\n", "doc.id" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Save both time and money with [product].', 'Save both time and money on [task].', 'Is [product] worth the price? Let’s find out!', 'Why is it challenging and costly to find a good [product category]?', 'Searching for an affordable [product type]? Check this out!', 'How to locate an affordable [service].', 'I can’t believe this costs only [price].', \"Don't waste your money on [X]; instead buy [X].\", 'What’s inside [product]?', 'Common questions I get about [product].', 'Now you can get X delivered right to your door.', 'Thinking of trying [product type]?', 'Allow me to introduce you to [product].', '[category] Tip #X.', 'Here’s how to achieve [value prop].', 'I know this sounds unbelievable, but…', 'How to get X done in just 10 minutes.', 'How to find time for X.', 'Here’s my biggest life hack for X.', 'Add more [value prop] to your day.', 'Before you try [product type], watch this first.', 'Hate [the worse alternative]? Give this a try!', 'Thinking about [worse alternative]?', 'Instead of [worse alternative], try this.', 'Still using [the worse alternative to the product]? Watch this.', 'Something that’s always annoyed me about X.', 'Don’t buy X that doesn’t work. Try this instead.', 'I tested every [product category] so you don’t have to: here’s what I found.', 'Stop doing [worse alternative]. Try [product] instead.', 'Dealing with [negative experience]? I used [product] to help.', 'Why millennials are switching to [product].', 'How to do X without [worse alternative].', 'I only get my [product category] from [brand name].', 'I no longer buy my [product category] from [worse alternative].', '[Worse alternative] can be difficult to deal with.', 'Your new X alternative.', '[value prop] without the [negative side effect].', 'I kept experiencing [pain point], so I tried this instead!', 'If you have [pain point] — you need to see this!', 'I wanted to stop doing X, so I tried this instead.', \"Your X isn't [adverb]; you just need X.\", 'My secret to [popular trend] revealed!', 'Guys, it’s here…', 'What I ordered vs. what I received.', '[Product] unboxing.', 'Let’s create X with [product].', 'POV: You tried [product].', 'A day in the life of X.', 'Get ready with me to do [task].', '“Put a finger down” [product category] edition.', 'Trying home remedies for X.', '[Product category] ASMR.', 'TikTok made me try [product].', 'Things TikTok made me try #13.', 'This [product type] is going viral on [social media platform].', 'I tested the viral [product type] to see if it lives up to the hype.', 'This [product type] has over 5,000 reviews… let’s see if it’s worth it.', '[Publication] can’t stop raving about us.', 'It’s so good it sold out in a week.', 'Are you [accomplishing the goal optimally]?', 'Life Hack: Try [product] for [pain point].', 'My go-to [product] for [pain point].', 'How to easily [task].', '[Task] has never been easier than with [product].', 'My favorite [product] to make [hard task] simpler.', 'Here’s my top product for [task].', 'Struggling to do [task]?', 'I’ve been struggling with [task], but [product] has really helped.', 'Easiest way to do [task]?', 'Make your week easier.', 'Why adults avoid [task]… [product] makes it easy.', '[Product] made [task] so much easier! You’ve got to try it.', 'When I use [product], it’s one less thing I have to worry about.', 'How to do [X] in half the time.', 'This trick/hack/method will save you hours...', 'Easy hack to [X]...', 'Simple [X] that will make you [X].', '5 Ways [product] Helps with [pain point].', '3 reasons to buy [product].', '3 reasons to try [service].', 'Get [value prop] in 3 steps.', 'Here are 3 ways [worse alternative] affects your life.', '5 things you didn’t know about [topic].', 'The ultimate [X] checklist to [action].', 'Reasons why [X].', 'Here are the 3 best ways to [X].', 'Here are [X] mistakes you might be making...', 'If you want [X], do these 5 things...', 'The internet’s #1 [product type].', 'The best way to [accomplish the goal of the product].', 'What makes [the product type] the best?', 'My skin has never looked better with [product].', 'The best way to find X in 2022.', '[Product] changed how I do [task], and I’m never going back.', 'Why is [product] so good though?', 'After hours of researching, I found the best [product type] for [task].', 'I found the best [product category] for [value prop].', 'This is going to blow your mind.', 'How I got [X] in 24 hours.', 'Must-have [products] for [X].', \"The best [target audience] know something that you don't.\", 'Hey, [customer type], you’ve got to try this.', 'People looking for [product category], stop scrolling.', 'Wait, have you tried X?', 'Take control of your X with [product].', 'Imagine if X was also X.', 'Watch this if you X.', 'PSA: [statement about product category].', 'Did you know? [fact about product category].', 'I just found out [fact about product category].', 'Are you one of [fact about product category] people who do X?', 'New customers get [discount].', 'Take [discount] off when you try [product].', 'I didn’t know X could be related to X.', 'Why is it important to [do product-related task]?', \"99\\\\% of your [target audience] don't. To be the 1% you need to [X].\", 'This [product] is the secret to [X].', 'Is there anything worse than [X]?', 'I will never [adjective] from learning this.', 'X people start scrolling. I have the perfect [X] for you.', \"Here's a challenge for you...\", \"There's nothing more painful than [X].\", 'What would you do if...', 'Watch till the end…', \"Why you're failing at [activity].\", 'The worst mistake you can make in [subject].', 'Avoid these common pitfalls in [topic].', 'The dark side of [popular trend].', \"Don't be fooled by [misconception].\", 'Why [common practice] is ruining your [outcome].', 'What no one tells you about [issue].', 'The hidden dangers of [activity].', 'Stop doing this if you want to succeed in [field].', 'The ugly truth about [common belief].', 'Why [habit] is wasting your time.', 'Exposing the myths about [topic].', \"The biggest regret you'll have in [situation].\", 'How [action] is destroying your [goal].', 'The shocking reality of [popular topic].', 'Why [trend] is a bad idea.', \"The real reason you're not seeing results in [field].\", 'The downside of [seemingly positive aspect].', 'What you should never do in [activity].', 'Why [common advice] is actually harmful.']\n" ] } ], "source": [ "# Listing the Documents\n", "for doc in client.agents.docs.list(agent_id=AGENT_UUID):\n", " print(doc.content)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# Defining a Task\n", "import yaml\n", "\n", "RAPID_API_KEY = \"YOUR_RAPID_API_KEY\"\n", "RAPID_API_HOST = \"YOUR_RAPID_API_HOST\"\n", "\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/schemas/create_task_request.json\n", "name: Julep Reel Hook Generator\n", "description: This gets the trending reels from Instagram and generates hooks for them.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " topic:\n", " type: string\n", " description: The topic to generate hooks for.\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Defining the tools that the task will use in this workflow\n", "tools:\n", "- name: api_tool_call\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: \"https://instagram-scraper-api2.p.rapidapi.com/v1/hashtag\"\n", " headers: \n", " x-rapidapi-key: \"{RAPID_API_KEY}\"\n", " x-rapidapi-host: \"{RAPID_API_HOST}\"\n", " follow_redirects: true\n", "\n", "- name: get_hooks_doc\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: list\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step 0: Get the trending reels from Instagram\n", "- tool: api_tool_call\n", " arguments:\n", " params:\n", " hashtag: $ steps[0].input.topic\n", "\n", "# Step 1: Extract the caption, virality score, engagement score and one-liner description for each reel\n", "- evaluate:\n", " summary: >-\n", " $ list({{\n", " 'caption': ((response.get('caption') or {{}}).get('text') or 'No Caption Available'),\n", " 'code': (response.get('code') or 'No Code Available'),\n", " 'play_count': (response.get('play_count') or 0),\n", " 'like_count': (response.get('like_count') or 0),\n", " 'media_id': ((response.get('caption') or {{}}).get('id') or 0),\n", " 'hashtags': ((response.get('caption') or {{}}).get('hashtags') or 'No Hashtag Available'),\n", " 'video_duration': (response.get('video_duration') or 0),\n", " 'comment_count': (response.get('comment_count') or 0),\n", " 'reshare_count': (response.get('reshare_count') or 0),\n", " 'has_audio': (response.get('has_audio') or False),\n", " 'audio_type': (((response.get('clips_metadata') or {{}}).get('audio_type')) or 'No Audio Type Available'),\n", " 'username': (((response.get('user') or {{}}).get('username')) or 'No Username Available'),\n", " 'full_name': (((response.get('user') or {{}}).get('full_name')) or 'No Full Name Available'),\n", " 'profile_pic_url': (((response.get('user') or {{}}).get('profile_pic_url')) or 'No Profile Pic URL Available'),\n", " 'virality_score': (((response.get('reshare_count') or 0) / (response.get('play_count') or 1)) if (response.get('play_count') or 0) > 0 else 0),\n", " 'engagement_score': (((response.get('like_count') or 0) / (response.get('play_count') or 1)) if (response.get('play_count') or 0) > 0 else 0),\n", " 'video_duration': (response.get('video_duration') or 0)\n", " }} for response in _['json']['data']['items']) \n", "\n", "# Step 2: Generate a description for each reel\n", "- over: $ _['summary']\n", " parallelism: 4\n", " map:\n", " prompt:\n", " - role: system\n", " content: >-\n", " $ f'''You are a skilled agent tasked with creating a single description for each trending real estate reel for the given topic: {{steps[0].input.topic}}.\n", " Use information gathered from the following data sources to gather the most relevant information:\n", "\n", " Search Results: {{_['caption']}}\n", " Virality Score: {{_['virality_score']}}\n", " Engagement Score: {{_['engagement_score']}}\n", "\n", " Provide a json repsonse containing the caption, virality score, enagement score and one-liner description for the reel.'''\n", " unwrap: true \n", "\n", "# Step 3: Get the description and summary\n", "- evaluate:\n", " summary: $ steps[1].output['summary']\n", " description: $ list(load_json(res.replace(\"```json\", \"\").replace(\"```\", \"\")) for res in _)\n", "\n", "# Step 4: Get the hooks document\n", "- tool: get_hooks_doc\n", " arguments:\n", " agent_id: {AGENT_UUID}\n", "\n", "# Step 5: Extract the hooks document\n", "- evaluate:\n", " content: $ _[0]['content']\n", " label: hooks_doc\n", "\n", "# Step 6: Generate hooks for each reel\n", "- over: $ steps[3].output['description']\n", " parallelism: 4\n", " map:\n", " prompt:\n", " - role: system\n", " content: >-\n", " $ f'''You are a skilled content creator tasked with generating 3 engaging video hooks for each reel having its description and caption. Use the following document containing hook templates to create effective hooks:\n", " \n", " {{steps[\"hooks_doc\"].output.content}}\n", " \n", " Here are the caption and description to create hooks for:\n", "\n", " Caption: {{_['caption']}}\n", " Description: {{_['description']}}\n", " Virality Score: {{_['virality_score']}}\n", " Engagement Score: {{_['engagement_score']}}\n", "\n", " Your task is to generate 3 hooks (for the reel) by adapting the most suitable templates from the document. Each hook should be no more than 1 sentence long and directly relate to its corresponding idea.\n", " \n", " Basically, all the ideas are taken from a search about this topic, which is {{steps[0].input.topic}}. You should focus on this while writing the hooks.\n", "\n", " Ensure that each hook is creative, engaging, and relevant to its idea while following the structure of the chosen template.\n", "\n", " Provide a json repsonse containing the caption, virality score, enagement score, description and the list of 3 hooks for the reel.'''\n", " unwrap: true\n", "\n", "# Step 7: Get the hooks\n", "- evaluate:\n", " summary: $ steps[3].output['summary']\n", " hooks: $ list(load_json(res.replace(\"```json\", \"\").replace(\"```\", \"\")) for res in _)\n", "\"\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notes:\n", "- The `unwrap: True` in the prompt step is used to unwrap the output of the prompt step (to unwrap the `choices[0].message.content` from the output of the model).\n", "- The `$` sign is used to differentiate between a Python expression and a string.\n", "- The `_` refers to the output of the previous step.\n", "- The `steps[index].input` refers to the input of the step at `index`.\n", "- The `steps[index].output` refers to the output of the step at `index`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Creating/Updating a task\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs." ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1e+03 ns, sys: 0 ns, total: 1e+03 ns\n", "Wall time: 2.38 μs\n" ] } ], "source": [ "%time\n", "# Creating an execution of the task\n", "execution = client.executions.create(\n", " task_id=task.id,\n", " input={\n", " \"topic\": \"halloween_snacks\"\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition type: init\n", "Transition output: {'topic': 'halloween_snacks'}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'json': {'data': {'count': 5, 'items': [{'id': '3490900471793734792_68049134599', 'pk': 3490900471793734792, 'code': 'DByK3vHglSI', 'fbid': '17922186413889128', 'user': {'id': '68049134599', 'fbid_v2': 17841468117986141, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '3424550057394195718_68049134599', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'owner': {'id': '68049134599', 'fbid_v2': 17841468117986141, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '3424550057394195718_68049134599', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'caption': {'id': 3490900471793734792, 'pk': '17922186698889128', 'text': 'خوراکی هالوینی به مناسبت هالوین👻🎃\\n\\nاگه توهم عاشق ای\\u200cاس\\u200cام\\u200cآری پیجمو از دست نده😉👇🏻\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #ایاسامار #ای_اس_ام_آر #ایاسمار #هالووین', 'type': 1, 'user': {'id': '68049134599', 'fbid_v2': 17841468117986141, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'is_private': False, 'is_verified': False, 'is_unpublished': False, 'profile_pic_id': '3424550057394195718_68049134599', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad'}, 'user_id': 68049134599, 'hashtags': ['#asmr', '#asmrartist', '#asmrfood', '#mukbang', '#halloween', '#halloween_snacks', '#happy', '#ایاسامار', '#ای_اس_ام_آر', '#ایاسمار', '#هالووین'], 'mentions': ['@khatisaw_asmr'], 'created_at': 1730368002, 'is_covered': False, 'share_enabled': False, 'created_at_utc': 1730368002, 'has_translation': True, 'is_ranked_comment': False, 'did_report_as_spam': False, 'private_reply_status': 0}, 'can_save': True, 'is_video': True, 'taken_at': 1730368001, 'can_reply': False, 'feed_type': 'clips', 'has_audio': True, 'has_liked': False, 'is_pinned': False, 'video_url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m86/AQNgqTX-85WhiT5HWkV3-efjkZBdM-eZeQjKjMC2i4h5OAjFmVwuLvtKdqAZRu_LV9jWMCfuowUFAKL5O7MeTdyU1fmS7czmdteCu7Q.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjEyNTA2OTAwMTk0NDEwNTEsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5DTElQUy5DMy43MjAuZGFzaF9iYXNlbGluZV8xX3YxIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=AdiytHUzDdOv2LAPKxHWwjGFGlv21uxw8dzzXoBHtHcYFvUWeyLR31BCmOjLyjxt4ok&vs=6a4e0a97efa05e0f&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85MzQ4MjUxNEM2RjlFNTlGNDE2QTA5NjE2MzIwMkFCNl92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dJb3R1QnNvZ0RuLTE1a2RBUGpHZVZxRV9IWnVicV9FQUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJrbmqeXe37gEFQIoAkMzLBdAQndsi0OVgRgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gcA&ccb=9-4&oh=00_AYA3gmTJ-8o7tL9yO8L7HLErwXfFABdLkicpsE6RlpxtHg&oe=67A7CC05&_nc_sid=1d576d', 'like_count': 15, 'media_name': 'reel', 'media_type': 2, 'play_count': 274, 'top_likers': [], 'can_reshare': True, 'filter_type': 0, 'layout_type': 'one_by_two_left', 'media_notes': {'items': []}, 'video_codec': 'avc1.64001f', 'fb_user_tags': {'in': []}, 'product_type': 'clips', 'tagged_users': {'in': [{'user': {'id': '26478650928', 'username': 'mcbang.asmr', 'full_name': 'McBang Asmr', 'is_private': False, 'is_verified': False, 'profile_pic_id': '2221201883610313048_26478650928', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/81881391_465263030829306_4218106627150053376_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=106&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=ne2lCyOThy8Q7kNvgED_b4Q&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCOA3D7TCgasIBLCE0xXPPKwa4hf3Y3geVHtqxnz-sGiQ&oe=67ABCEF4&_nc_sid=2011ad'}, 'position': [0.0, 0.0], 'show_category_of_user': False}]}, 'comment_count': 0, 'ig_play_count': 274, 'igbio_product': None, 'reshare_count': 0, 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/465163430_1346152509708875_7287770939532393895_n.jpg?stp=dst-jpg_e15_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi40ODB4ODU0LnNkci5mMjkzNTAuZGVmYXVsdF9jb3Zlcl9mcmFtZSJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=bQk7Sp4xTPIQ7kNvgGgQEHl&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MzQ5MDkwMDQ3MTc5MzczNDc5MjkwODk1MDMyNDAyNjEzMw%3D%3D.3-ccb7-5&oh=00_AYAG9htVmBgw_QuVxQcPZiT8cc4tjM2H56nduiCcKhi4uw&oe=67ABD173&_nc_sid=2011ad', 'clips_metadata': {'nux_info': None, 'show_tips': None, 'audio_type': 'original_sounds', 'music_info': None, 'mashup_info': {'mashup_type': None, 'original_media': None, 'mashups_allowed': True, 'is_reuse_allowed': True, 'has_been_mashed_up': False, 'is_light_weight_check': True, 'formatted_mashups_count': None, 'is_pivot_page_available': False, 'can_toggle_mashups_allowed': False, 'is_creator_requesting_mashup': False, 'has_nonmimicable_additional_audio': False, 'is_light_weight_reuse_allowed_check': False, 'privacy_filtered_mashups_media_count': None, 'non_privacy_filtered_mashups_media_count': 0}, 'shopping_info': None, 'template_info': None, 'challenge_info': None, 'featured_label': None, 'is_shared_to_fb': False, 'originality_info': None, 'achievements_info': {'show_achievements': False, 'num_earned_achievements': None}, 'show_achievements': False, 'audio_canonical_id': '18462935767030405', 'audio_ranking_info': {'best_audio_cluster_id': '1979266769247994'}, 'reusable_text_info': None, 'cutout_sticker_info': [], 'external_media_info': None, 'original_sound_info': {'audio_id': 1159485065763677, 'ig_artist': {'id': '68049134599', 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'is_private': False, 'is_verified': False, 'profile_pic_id': '3424550057394195718_68049134599', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad'}, 'trend_rank': None, 'audio_parts': [], 'is_explicit': False, 'time_created': 1730368004, 'hide_remixing': False, 'duration_in_ms': 36942, 'consumption_info': {'is_bookmarked': False, 'display_media_id': None, 'is_trending_in_clips': False, 'should_mute_audio_reason': '', 'should_mute_audio_reason_type': None}, 'is_xpost_from_fb': False, 'is_reuse_disabled': False, 'original_media_id': 3490900471793734792, 'should_mute_audio': False, 'audio_filter_infos': [], 'previous_trend_rank': None, 'original_audio_title': 'Original audio', 'audio_parts_by_filter': [], 'xpost_fb_creator_info': None, 'original_audio_subtype': 'default', 'overlap_duration_in_ms': None, 'allow_creator_to_rename': True, 'oa_owner_is_music_artist': False, 'progressive_download_url': 'https://scontent-ber1-1.xx.fbcdn.net/o1/v/t2/f2/m69/AQMrc3KDZGsYjFjVisYlHp9Rf7_1emB2jy_0-UKelgMx6pQ1n--CBux7H25-n_H1Lw7-hgwQnugZtAkO9ecznQ3R.mp4?strext=1&_nc_cat=109&_nc_sid=8bf8fe&_nc_ht=scontent-ber1-1.xx.fbcdn.net&_nc_ohc=cNa17rtcwyQQ7kNvgGmG06y&efg=eyJ2ZW5jb2RlX3RhZyI6Inhwdl9wcm9ncmVzc2l2ZS5BVURJT19PTkxZLi5DMy4wLnByb2dyZXNzaXZlX2F1ZGlvIiwieHB2X2Fzc2V0X2lkIjoxMjUwNjkwMDE5NDQxMDUxLCJ1cmxnZW5fc291cmNlIjoid3d3In0%3D&ccb=9-4&_nc_zt=28&oh=00_AYCTgT42WOtRJ8geekXj-ge-hMj1XYj1eagw_3Xe7X1WAg&oe=67ABD7E8', 'can_remix_be_shared_to_fb': False, 'formatted_clips_media_count': None, 'audio_asset_start_time_in_ms': None, 'is_eligible_for_audio_effects': True, 'is_eligible_for_vinyl_sticker': True, 'attributed_custom_audio_asset_id': None, 'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}, 'is_audio_automatically_attributed': False, 'can_remix_be_shared_to_fb_expansion': False, 'is_original_audio_download_eligible': True}, 'additional_audio_info': {'audio_reattribution_info': {'should_allow_restore': False}, 'additional_audio_username': None}, 'breaking_content_info': None, 'breaking_creator_info': None, 'reels_on_the_rise_info': None, 'is_fan_club_promo_video': False, 'merchandising_pill_info': None, 'branded_content_tag_info': {'can_add_tag': False}, 'asset_recommendation_info': None, 'content_appreciation_info': {'enabled': False, 'entry_point_container': None}, 'contextual_highlight_info': None, 'clips_creation_entry_point': 'clips', 'viewer_interaction_settings': None, 'is_public_chat_welcome_video': False, 'professional_clips_upsell_type': 0, 'reusable_text_attribute_string': None, 'disable_use_in_clips_client_cache': False}, 'deleted_reason': 0, 'fundraiser_tag': {'has_standalone_fundraiser': False}, 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/465163430_1346152509708875_7287770939532393895_n.jpg?stp=dst-jpg_e15_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi40ODB4ODU0LnNkci5mMjkzNTAuZGVmYXVsdF9jb3Zlcl9mcmFtZSJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=bQk7Sp4xTPIQ7kNvgGgQEHl&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MzQ5MDkwMDQ3MTc5MzczNDc5MjkwODk1MDMyNDAyNjEzMw%3D%3D.3-ccb7-5&oh=00_AYAG9htVmBgw_QuVxQcPZiT8cc4tjM2H56nduiCcKhi4uw&oe=67ABD173&_nc_sid=2011ad', 'width': 480, 'height': 854}], 'additional_items': {'first_frame': {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/465153824_1273044356969721_4803164493660430045_n.jpg?stp=dst-jpg_e15_p480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi42NDB4MTEzNi5zZHIuZjcxODc4LmFkZGl0aW9uYWxfY292ZXJfZnJhbWUifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6e3_lgPON8QQ7kNvgHRYbBD&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCPhknLpwYb5jx32gh3q94obuloT1x4cd_QfZYKkc7yNg&oe=67ABE110&_nc_sid=2011ad', 'width': 480, 'height': 852}, 'smart_frame': None, 'igtv_first_frame': {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/465153824_1273044356969721_4803164493660430045_n.jpg?stp=dst-jpg_e15_p480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi42NDB4MTEzNi5zZHIuZjcxODc4LmFkZGl0aW9uYWxfY292ZXJfZnJhbWUifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=109&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6e3_lgPON8QQ7kNvgHRYbBD&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCPhknLpwYb5jx32gh3q94obuloT1x4cd_QfZYKkc7yNg&oe=67ABE110&_nc_sid=2011ad', 'width': 480, 'height': 852}}, 'scrubber_spritesheet_info_candidates': {'default': {'sprite_urls': ['https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/464892946_537755282216610_8587870216843700171_n.jpg?_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=106&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=XSBKeXe_NWgQ7kNvgFRvAdj&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYC9xQj8tilSa4sWQ33Kz5Dplal_HimvC-Z0yMH3ZAVQ9w&oe=67ABE86F&_nc_sid=2011ad'], 'file_size_kb': 384, 'sprite_width': 1500, 'video_length': 36.942, 'sprite_height': 1246, 'rendered_width': 96, 'thumbnail_width': 100, 'thumbnail_height': 178, 'thumbnail_duration': 0.35182857142857143, 'thumbnails_per_row': 15, 'max_thumbnails_per_sprite': 105, 'total_thumbnail_num_per_sprite': 105}}}, 'is_artist_pick': False, 'music_metadata': None, 'original_width': 1080, 'social_context': [], 'video_duration': 36.942, 'video_versions': [{'id': '1548848032501223v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m86/AQNgqTX-85WhiT5HWkV3-efjkZBdM-eZeQjKjMC2i4h5OAjFmVwuLvtKdqAZRu_LV9jWMCfuowUFAKL5O7MeTdyU1fmS7czmdteCu7Q.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjEyNTA2OTAwMTk0NDEwNTEsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5DTElQUy5DMy43MjAuZGFzaF9iYXNlbGluZV8xX3YxIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=AdiytHUzDdOv2LAPKxHWwjGFGlv21uxw8dzzXoBHtHcYFvUWeyLR31BCmOjLyjxt4ok&vs=6a4e0a97efa05e0f&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85MzQ4MjUxNEM2RjlFNTlGNDE2QTA5NjE2MzIwMkFCNl92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dJb3R1QnNvZ0RuLTE1a2RBUGpHZVZxRV9IWnVicV9FQUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJrbmqeXe37gEFQIoAkMzLBdAQndsi0OVgRgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gcA&ccb=9-4&oh=00_AYA3gmTJ-8o7tL9yO8L7HLErwXfFABdLkicpsE6RlpxtHg&oe=67A7CC05&_nc_sid=1d576d', 'type': 101, 'width': 720, 'height': 1280, 'bandwidth': 1047090}, {'id': '1548848032501223v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m86/AQNgqTX-85WhiT5HWkV3-efjkZBdM-eZeQjKjMC2i4h5OAjFmVwuLvtKdqAZRu_LV9jWMCfuowUFAKL5O7MeTdyU1fmS7czmdteCu7Q.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjEyNTA2OTAwMTk0NDEwNTEsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5DTElQUy5DMy43MjAuZGFzaF9iYXNlbGluZV8xX3YxIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=AdiytHUzDdOv2LAPKxHWwjGFGlv21uxw8dzzXoBHtHcYFvUWeyLR31BCmOjLyjxt4ok&vs=6a4e0a97efa05e0f&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85MzQ4MjUxNEM2RjlFNTlGNDE2QTA5NjE2MzIwMkFCNl92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dJb3R1QnNvZ0RuLTE1a2RBUGpHZVZxRV9IWnVicV9FQUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJrbmqeXe37gEFQIoAkMzLBdAQndsi0OVgRgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gcA&ccb=9-4&oh=00_AYA3gmTJ-8o7tL9yO8L7HLErwXfFABdLkicpsE6RlpxtHg&oe=67A7CC05&_nc_sid=1d576d', 'type': 102, 'width': 720, 'height': 1280, 'bandwidth': 1047090}, {'id': '1548848032501223v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m86/AQNgqTX-85WhiT5HWkV3-efjkZBdM-eZeQjKjMC2i4h5OAjFmVwuLvtKdqAZRu_LV9jWMCfuowUFAKL5O7MeTdyU1fmS7czmdteCu7Q.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjEyNTA2OTAwMTk0NDEwNTEsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5DTElQUy5DMy43MjAuZGFzaF9iYXNlbGluZV8xX3YxIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=AdiytHUzDdOv2LAPKxHWwjGFGlv21uxw8dzzXoBHtHcYFvUWeyLR31BCmOjLyjxt4ok&vs=6a4e0a97efa05e0f&_nc_vs=HBksFQIYUmlnX3hwdl9yZWVsc19wZXJtYW5lbnRfc3JfcHJvZC85MzQ4MjUxNEM2RjlFNTlGNDE2QTA5NjE2MzIwMkFCNl92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dJb3R1QnNvZ0RuLTE1a2RBUGpHZVZxRV9IWnVicV9FQUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJrbmqeXe37gEFQIoAkMzLBdAQndsi0OVgRgSZGFzaF9iYXNlbGluZV8xX3YxEQB1_gcA&ccb=9-4&oh=00_AYA3gmTJ-8o7tL9yO8L7HLErwXfFABdLkicpsE6RlpxtHg&oe=67A7CC05&_nc_sid=1d576d', 'type': 103, 'width': 720, 'height': 1280, 'bandwidth': 1047090}], 'avatar_stickers': [], 'original_height': 1920, 'device_timestamp': 481462064529310, 'has_shared_to_fb': 0, 'inventory_source': 'recommended_clips_chaining_model', 'is_dash_eligible': 1, 'is_reuse_allowed': False, 'is_unified_video': False, 'preview_comments': [], 'caption_is_edited': False, 'has_more_comments': False, 'coauthor_producers': [], 'crosspost_metadata': {'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}}, 'has_views_fetching': True, 'is_in_profile_grid': False, 'has_privately_liked': False, 'is_paid_partnership': False, 'media_cropping_info': {'square_crop': {'crop_top': 0.0, 'crop_left': 0.0, 'crop_right': 0.0, 'crop_bottom': 0.0}}, 'number_of_qualities': 2, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'share_count_disabled': False, 'shop_routing_user_id': None, 'view_state_item_type': 128, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'subscribe_cta_visible': False, 'video_sticker_locales': [], 'is_social_ufi_disabled': False, 'creator_viewer_insights': [], 'gen_ai_detection_method': {'detection_method': 'NONE'}, 'boost_unavailable_reason': None, 'comment_inform_treatment': {'url': None, 'text': '', 'action_type': None, 'should_have_inform_treatment': False}, 'fb_aggregated_like_count': 0, 'is_post_live_clips_media': False, 'timeline_pinned_user_ids': [], 'are_remixes_crosspostable': True, 'clips_tab_pinned_user_ids': [], 'comment_threading_enabled': True, 'ig_media_sharing_disabled': False, 'integrity_review_decision': 'pending', 'is_cutout_sticker_allowed': False, 'meta_ai_suggested_prompts': [], 'invited_coauthor_producers': [], 'boost_unavailable_reason_v2': None, 'fb_aggregated_comment_count': 0, 'boost_unavailable_identifier': None, 'is_open_to_public_submission': False, 'is_eligible_for_meta_ai_share': False, 'like_and_view_counts_disabled': False, 'is_comments_gif_composer_enabled': True, 'max_num_visible_preview_comments': 0, 'open_carousel_show_follow_button': False, 'is_third_party_downloads_eligible': True, 'is_eligible_for_media_note_recs_nux': False, 'is_organic_product_tagging_eligible': True, 'is_eligible_content_for_post_roll_ad': True, 'has_high_risk_gen_ai_inform_treatment': False, 'is_reshare_of_text_post_app_media_in_ig': False, 'coauthor_producer_can_see_organic_insights': False, 'is_tagged_media_shared_to_viewer_profile_grid': False, 'should_show_author_pog_for_tagged_media_shared_to_profile_grid': False}, {'id': '2430607689442503878_43860578779', 'pk': 2430607689442503878, 'code': 'CG7QNDNjazG', 'fbid': '17868186233082932', 'user': {'id': '43860578779', 'fbid_v2': 17841443763392572, 'username': '4crazy_hands', 'full_name': '', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 1, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '2426465052288607558_43860578779', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 0, 'show_account_transparency_details': True}, 'owner': {'id': '43860578779', 'fbid_v2': 17841443763392572, 'username': '4crazy_hands', 'full_name': '', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 1, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '2426465052288607558_43860578779', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 0, 'show_account_transparency_details': True}, 'likers': [{'id': '1696622401', 'pk': 1696622401, 'username': 'kika0702', 'full_name': 'Karolina Czajkowska', 'is_private': True, 'is_verified': False, 'profile_pic_id': '1582068033168352877_1696622401', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/20837400_167467057147416_8905032488259158016_a.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=OHnF2E1S1tUQ7kNvgFgmy8W&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCqfj-yhqDYLInwvBJXQmb9gBwpFfzSJhmAA7GJ8OVzQw&oe=67ABEC08&_nc_sid=2011ad'}, {'id': '1501224027', 'pk': 1501224027, 'username': 'od.nova.fashion', 'full_name': 'od.nova.fashion', 'is_private': False, 'is_verified': False, 'profile_pic_id': '3345590763071362359_1501224027', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/437147810_446348127872059_8592682395589487452_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=107&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6aKdh8q_RYwQ7kNvgG3pWYV&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYBuI0CQhquvP9CvsR1p4UFQnymvQlyTfJwFSV2dT416ZA&oe=67ABD3C8&_nc_sid=2011ad'}, {'id': '8109187268', 'pk': 8109187268, 'username': 'zkraszewska', 'full_name': 'Żaneta Kraszewska', 'is_private': False, 'is_verified': False, 'profile_pic_id': '3006044825446502435_8109187268', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/323066773_530010829077490_8809611194090286362_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=hBhM8w553lgQ7kNvgFLDBm5&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYBnWAEQR3MjorfCubsB32S9yLzD30PjLeR3AatVudSNyA&oe=67ABC3F1&_nc_sid=2011ad'}, {'id': '34937255053', 'pk': 34937255053, 'username': 'agnieszka.kru', 'full_name': 'Agnieszka Kru', 'is_private': False, 'is_verified': False, 'profile_pic_id': '2307712412966799263_34937255053', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/97263237_852152705288347_8338614872732336128_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=107&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=rH3_fiUqjXEQ7kNvgEgWArj&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYDVrKfvarMEVLXWKdCbwwks0veCeJZx6ojdUOk1VT_8bw&oe=67ABCB9E&_nc_sid=2011ad'}, {'id': '2094359694', 'pk': 2094359694, 'username': 'caroline_karo22', 'full_name': 'Karo♦️', 'is_private': True, 'is_verified': False, 'profile_pic_id': '3281525572902363700_2094359694', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/419513583_1039386577334256_7017239868157824412_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=VxihswWT-eMQ7kNvgGYRh3S&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYA2fH9rYfhBhQjEBVqWkGJjbWyK4uAf0lO7dQKtbPhDZA&oe=67ABEC1B&_nc_sid=2011ad'}], 'caption': {'id': 2430607689442503878, 'pk': '17868186239082932', 'text': 'Ready! Set! Film!\\nKolejny filmik już w przygotowaniu 👻\\n\\nNa planie nawet straszna Chupa czacha 💕 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'type': 1, 'user': {'id': '43860578779', 'fbid_v2': 17841443763392572, 'username': '4crazy_hands', 'full_name': '', 'is_private': False, 'is_verified': False, 'is_unpublished': False, 'profile_pic_id': '2426465052288607558_43860578779', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad'}, 'user_id': 43860578779, 'hashtags': ['#halloween', '#ytchannel', '#diy', '#chupachups', '#halloween_snacks', '#halloween_party', '#pumpkin'], 'mentions': ['@chupachupspl'], 'created_at': 1603971038, 'is_covered': False, 'share_enabled': False, 'created_at_utc': 1603971038, 'has_translation': True, 'is_ranked_comment': False, 'did_report_as_spam': False, 'private_reply_status': 0}, 'can_save': True, 'is_video': False, 'taken_at': 1603971037, 'can_reply': False, 'feed_type': 'media', 'has_liked': False, 'is_pinned': False, 'like_count': 5, 'media_name': 'post', 'media_type': 1, 'top_likers': [], 'can_reshare': True, 'filter_type': 112, 'layout_type': 'media_grid', 'mashup_info': {'mashup_type': None, 'original_media': None, 'mashups_allowed': False, 'is_reuse_allowed': False, 'has_been_mashed_up': False, 'is_light_weight_check': True, 'formatted_mashups_count': None, 'is_pivot_page_available': False, 'can_toggle_mashups_allowed': False, 'is_creator_requesting_mashup': False, 'has_nonmimicable_additional_audio': False, 'is_light_weight_reuse_allowed_check': False, 'privacy_filtered_mashups_media_count': None, 'non_privacy_filtered_mashups_media_count': 0}, 'media_notes': {'items': []}, 'fb_user_tags': {'in': []}, 'product_type': 'feed', 'comment_count': 0, 'igbio_product': None, 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122885201_279406056658052_253258248180892580_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDEwODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=xUFDN-pUZnEQ7kNvgH5-GXm&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMDYwNzY4OTQ0MjUwMzg3OA%3D%3D.3-ccb7-5&oh=00_AYCvoAapMHHY3LrQFJ1W3DL62-AklQ-2J4qdd6T79i4uRw&oe=67ABC1EC&_nc_sid=2011ad', 'deleted_reason': 0, 'fundraiser_tag': {'has_standalone_fundraiser': False}, 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122885201_279406056658052_253258248180892580_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDEwODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=xUFDN-pUZnEQ7kNvgH5-GXm&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMDYwNzY4OTQ0MjUwMzg3OA%3D%3D.3-ccb7-5&oh=00_AYCvoAapMHHY3LrQFJ1W3DL62-AklQ-2J4qdd6T79i4uRw&oe=67ABC1EC&_nc_sid=2011ad', 'width': 1080, 'height': 1080}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122885201_279406056658052_253258248180892580_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDEwODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=xUFDN-pUZnEQ7kNvgH5-GXm&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMDYwNzY4OTQ0MjUwMzg3OA%3D%3D.3-ccb7-5&oh=00_AYBID8beF9A9UxMOvvpJaP8csOAkKBh3qzUgSU8bFpdgZw&oe=67ABC1EC&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'music_metadata': {'audio_type': None, 'music_info': None, 'pinned_media_ids': None, 'audio_canonical_id': '0', 'original_sound_info': None}, 'original_width': 1080, 'original_height': 1080, 'device_timestamp': 129962195146203, 'has_shared_to_fb': 0, 'is_unified_video': False, 'preview_comments': [], 'caption_is_edited': False, 'featured_products': [], 'has_more_comments': False, 'coauthor_producers': [], 'crosspost_metadata': {'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}}, 'has_views_fetching': True, 'is_in_profile_grid': False, 'has_privately_liked': False, 'is_paid_partnership': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'share_count_disabled': False, 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'subscribe_cta_visible': False, 'video_sticker_locales': [], 'is_social_ufi_disabled': False, 'gen_ai_detection_method': {'detection_method': 'NONE'}, 'boost_unavailable_reason': None, 'comment_inform_treatment': {'url': None, 'text': '', 'action_type': None, 'should_have_inform_treatment': False}, 'fb_aggregated_like_count': 0, 'is_post_live_clips_media': False, 'timeline_pinned_user_ids': [], 'clips_tab_pinned_user_ids': [], 'comment_threading_enabled': True, 'ig_media_sharing_disabled': False, 'integrity_review_decision': 'pending', 'is_cutout_sticker_allowed': False, 'meta_ai_suggested_prompts': [], 'invited_coauthor_producers': [], 'boost_unavailable_reason_v2': None, 'fb_aggregated_comment_count': 0, 'boost_unavailable_identifier': None, 'is_open_to_public_submission': False, 'is_eligible_for_meta_ai_share': False, 'like_and_view_counts_disabled': False, 'is_comments_gif_composer_enabled': True, 'max_num_visible_preview_comments': 2, 'open_carousel_show_follow_button': False, 'is_eligible_for_media_note_recs_nux': False, 'is_organic_product_tagging_eligible': True, 'is_eligible_content_for_post_roll_ad': False, 'has_high_risk_gen_ai_inform_treatment': False, 'is_reshare_of_text_post_app_media_in_ig': False, 'coauthor_producer_can_see_organic_insights': False, 'is_tagged_media_shared_to_viewer_profile_grid': False, 'should_show_author_pog_for_tagged_media_shared_to_profile_grid': False}, {'id': '1884261582018203623_1630876867', 'pk': 1884261582018203623, 'code': 'BomPez0HE_n', 'fbid': '17986470538043870', 'user': {'id': '1630876867', 'fbid_v2': 17841400866035482, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '3556466093800655009_1630876867', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 2, 'show_account_transparency_details': True}, 'owner': {'id': '1630876867', 'fbid_v2': 17841400866035482, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '3556466093800655009_1630876867', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 2, 'show_account_transparency_details': True}, 'caption': {'id': 1884261582018203623, 'pk': '17986470544043870', 'text': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'type': 1, 'user': {'id': '1630876867', 'fbid_v2': 17841400866035482, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'is_private': False, 'is_verified': False, 'is_unpublished': False, 'profile_pic_id': '3556466093800655009_1630876867', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad'}, 'user_id': 1630876867, 'hashtags': ['#halloween_kids', '#halloween_snacks', '#spider_donuts', '#cute_food', '#kids_snacks', '#donuts', '#για_ενα_νικολα_γινονται_ολα', '#greekmombloggerscommunity', '#greekbloggerscommunity', '#momblogger'], 'mentions': [], 'created_at': 1538841506, 'is_covered': False, 'share_enabled': False, 'created_at_utc': 1538841506, 'has_translation': True, 'is_ranked_comment': False, 'did_report_as_spam': False, 'private_reply_status': 0}, 'can_save': True, 'is_video': False, 'taken_at': 1538841506, 'can_reply': False, 'feed_type': 'media', 'has_liked': False, 'is_pinned': False, 'like_count': 77, 'media_name': 'post', 'media_type': 1, 'top_likers': [], 'can_reshare': True, 'filter_type': 112, 'layout_type': 'media_grid', 'mashup_info': {'mashup_type': None, 'original_media': None, 'mashups_allowed': False, 'is_reuse_allowed': False, 'has_been_mashed_up': False, 'is_light_weight_check': True, 'formatted_mashups_count': None, 'is_pivot_page_available': False, 'can_toggle_mashups_allowed': False, 'is_creator_requesting_mashup': False, 'has_nonmimicable_additional_audio': False, 'is_light_weight_reuse_allowed_check': False, 'privacy_filtered_mashups_media_count': None, 'non_privacy_filtered_mashups_media_count': 0}, 'media_notes': {'items': []}, 'fb_user_tags': {'in': []}, 'product_type': 'feed', 'comment_count': 6, 'igbio_product': None, 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/42406109_286763258595430_5882308072797072002_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDgxMC5zZHIuZjI4ODUuZGVmYXVsdF9pbWFnZSJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6wH3W2z4CDgQ7kNvgGnbLKz&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MTg4NDI2MTU4MjAxODIwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYCpfXsfmL7AViJjnbHLmS-3m9TRugRJsSG6RKF-C9557w&oe=67ABD0FB&_nc_sid=2011ad', 'deleted_reason': 0, 'fundraiser_tag': {'has_standalone_fundraiser': False}, 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/42406109_286763258595430_5882308072797072002_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDgxMC5zZHIuZjI4ODUuZGVmYXVsdF9pbWFnZSJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6wH3W2z4CDgQ7kNvgGnbLKz&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MTg4NDI2MTU4MjAxODIwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYCpfXsfmL7AViJjnbHLmS-3m9TRugRJsSG6RKF-C9557w&oe=67ABD0FB&_nc_sid=2011ad', 'width': 1080, 'height': 810}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/42406109_286763258595430_5882308072797072002_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDgxMC5zZHIuZjI4ODUuZGVmYXVsdF9pbWFnZSJ9&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6wH3W2z4CDgQ7kNvgGnbLKz&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MTg4NDI2MTU4MjAxODIwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYDQ_vZrewpwc1CGe_gVMWmpwjAkH58QbytjmZq_GO2I1g&oe=67ABD0FB&_nc_sid=2011ad', 'width': 480, 'height': 360}]}, 'music_metadata': {'audio_type': None, 'music_info': None, 'pinned_media_ids': None, 'audio_canonical_id': '0', 'original_sound_info': None}, 'original_width': 1080, 'original_height': 810, 'device_timestamp': 1078996970871814, 'has_shared_to_fb': 0, 'is_unified_video': False, 'preview_comments': [], 'caption_is_edited': False, 'featured_products': [], 'has_more_comments': True, 'coauthor_producers': [], 'crosspost_metadata': {'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}}, 'has_views_fetching': True, 'is_in_profile_grid': False, 'has_privately_liked': False, 'is_paid_partnership': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'share_count_disabled': False, 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'subscribe_cta_visible': False, 'video_sticker_locales': [], 'is_social_ufi_disabled': False, 'gen_ai_detection_method': {'detection_method': 'NONE'}, 'boost_unavailable_reason': None, 'comment_inform_treatment': {'url': None, 'text': '', 'action_type': None, 'should_have_inform_treatment': False}, 'fb_aggregated_like_count': 0, 'is_post_live_clips_media': False, 'timeline_pinned_user_ids': [], 'clips_tab_pinned_user_ids': [], 'comment_threading_enabled': True, 'ig_media_sharing_disabled': False, 'integrity_review_decision': 'pending', 'is_cutout_sticker_allowed': False, 'meta_ai_suggested_prompts': [], 'invited_coauthor_producers': [], 'boost_unavailable_reason_v2': None, 'fb_aggregated_comment_count': 0, 'boost_unavailable_identifier': None, 'is_open_to_public_submission': False, 'is_eligible_for_meta_ai_share': False, 'like_and_view_counts_disabled': False, 'is_comments_gif_composer_enabled': True, 'max_num_visible_preview_comments': 2, 'open_carousel_show_follow_button': False, 'is_eligible_for_media_note_recs_nux': False, 'is_organic_product_tagging_eligible': True, 'is_eligible_content_for_post_roll_ad': False, 'has_high_risk_gen_ai_inform_treatment': False, 'is_reshare_of_text_post_app_media_in_ig': False, 'coauthor_producer_can_see_organic_insights': False, 'is_tagged_media_shared_to_viewer_profile_grid': False, 'should_show_author_pog_for_tagged_media_shared_to_profile_grid': False}, {'id': '2431253037789232840_43849166596', 'pk': 2431253037789232840, 'code': 'CG9i8GshD7I', 'fbid': '17875683067935977', 'user': {'id': '43849166596', 'fbid_v2': 17841443877901145, 'username': 'life.by_a', 'full_name': '', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 2, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '2633372573725432083_43849166596', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'owner': {'id': '43849166596', 'fbid_v2': 17841443877901145, 'username': 'life.by_a', 'full_name': '', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 2, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '2633372573725432083_43849166596', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'caption': {'id': 2431253037789232840, 'pk': '17875683070935977', 'text': 'There are just so cute!! 🎃🦇\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks', 'type': 1, 'user': {'id': '43849166596', 'fbid_v2': 17841443877901145, 'username': 'life.by_a', 'full_name': '', 'is_private': False, 'is_verified': False, 'is_unpublished': False, 'profile_pic_id': '2633372573725432083_43849166596', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad'}, 'user_id': 43849166596, 'hashtags': ['#halloween', '#halloween_costume', '#halloween_snacks'], 'mentions': [], 'created_at': 1604047969, 'is_covered': False, 'share_enabled': False, 'created_at_utc': 1604047969, 'is_ranked_comment': False, 'did_report_as_spam': False, 'private_reply_status': 0}, 'can_save': True, 'is_video': False, 'taken_at': 1604047969, 'can_reply': False, 'feed_type': 'media', 'has_liked': False, 'is_pinned': False, 'like_count': 46, 'media_name': 'album', 'media_type': 8, 'top_likers': [], 'can_reshare': True, 'filter_type': 0, 'layout_type': 'media_grid', 'media_notes': {'items': []}, 'fb_user_tags': {'in': []}, 'product_type': 'carousel_container', 'comment_count': 8, 'igbio_product': None, 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYD3hAI0WdDyJfRk9-wUCxOtxd4EuEKJZDIdTQE1iPDVpw&oe=67ABCE96&_nc_sid=2011ad', 'carousel_media': [{'id': '2431253034173903623_43849166596', 'pk': 2431253034173903623, 'is_video': False, 'taken_at': 1604047968, 'media_name': 'album_item', 'media_type': 1, 'fb_user_tags': {'in': []}, 'product_type': 'carousel_item', 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYD3hAI0WdDyJfRk9-wUCxOtxd4EuEKJZDIdTQE1iPDVpw&oe=67ABCE96&_nc_sid=2011ad', 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYD3hAI0WdDyJfRk9-wUCxOtxd4EuEKJZDIdTQE1iPDVpw&oe=67ABCE96&_nc_sid=2011ad', 'width': 1280, 'height': 1280}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYBSVXbHUCoC0wuAHsptkL1ttV5ZklErPfzlVNi8A0rihA&oe=67ABCE96&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'original_width': 1280, 'original_height': 1280, 'featured_products': [], 'carousel_parent_id': '2431253037789232840_43849166596', 'explore_pivot_grid': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'video_sticker_locales': []}, {'id': '2431253034157126309_43849166596', 'pk': 2431253034157126309, 'is_video': False, 'taken_at': 1604047968, 'media_name': 'album_item', 'media_type': 1, 'fb_user_tags': {'in': []}, 'product_type': 'carousel_item', 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/123028506_805463246898616_2642055155364201156_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=TZjWMXexaGwQ7kNvgGZ_XeL&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE1NzEyNjMwOQ%3D%3D.3-ccb7-5&oh=00_AYC9MvCMGb-ahiql8nu8VCOwwmuJT72LI9DNCTl_FwSluQ&oe=67ABEAE4&_nc_sid=2011ad', 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/123028506_805463246898616_2642055155364201156_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=TZjWMXexaGwQ7kNvgGZ_XeL&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE1NzEyNjMwOQ%3D%3D.3-ccb7-5&oh=00_AYC9MvCMGb-ahiql8nu8VCOwwmuJT72LI9DNCTl_FwSluQ&oe=67ABEAE4&_nc_sid=2011ad', 'width': 1280, 'height': 1280}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/123028506_805463246898616_2642055155364201156_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=104&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=TZjWMXexaGwQ7kNvgGZ_XeL&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE1NzEyNjMwOQ%3D%3D.3-ccb7-5&oh=00_AYAFPUuLCAKcyyjc6FwA7SKbxYvORi-2xn-a80vANfz9KA&oe=67ABEAE4&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'original_width': 1280, 'original_height': 1280, 'featured_products': [], 'carousel_parent_id': '2431253037789232840_43849166596', 'explore_pivot_grid': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'video_sticker_locales': []}, {'id': '2431253034752662160_43849166596', 'pk': 2431253034752662160, 'is_video': False, 'taken_at': 1604047968, 'media_name': 'album_item', 'media_type': 1, 'fb_user_tags': {'in': []}, 'product_type': 'carousel_item', 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122825655_186368676449184_161950596199673542_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=RIqEmeqRsncQ7kNvgEDcghW&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDc1MjY2MjE2MA%3D%3D.3-ccb7-5&oh=00_AYBN02I9OImeHBbluvbiFzN16jSHc9UqmKN1yGkQmtlgFA&oe=67ABE3B9&_nc_sid=2011ad', 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122825655_186368676449184_161950596199673542_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=RIqEmeqRsncQ7kNvgEDcghW&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDc1MjY2MjE2MA%3D%3D.3-ccb7-5&oh=00_AYBN02I9OImeHBbluvbiFzN16jSHc9UqmKN1yGkQmtlgFA&oe=67ABE3B9&_nc_sid=2011ad', 'width': 1280, 'height': 1280}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122825655_186368676449184_161950596199673542_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=RIqEmeqRsncQ7kNvgEDcghW&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDc1MjY2MjE2MA%3D%3D.3-ccb7-5&oh=00_AYAmaY34caRoBF9NBDXgJzWcp6gjzMPRBWybFEN1fBN0ow&oe=67ABE3B9&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'original_width': 1280, 'original_height': 1280, 'featured_products': [], 'carousel_parent_id': '2431253037789232840_43849166596', 'explore_pivot_grid': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'video_sticker_locales': []}, {'id': '2431253034182177319_43849166596', 'pk': 2431253034182177319, 'is_video': False, 'taken_at': 1604047968, 'media_name': 'album_item', 'media_type': 1, 'fb_user_tags': {'in': []}, 'product_type': 'carousel_item', 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122912849_1279442432435525_8441111983093743403_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=uqpiK2uJoJMQ7kNvgFuc6qV&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE4MjE3NzMxOQ%3D%3D.3-ccb7-5&oh=00_AYAhK1f1qZ_2g06R66OTIaOZm1CBZ8S1zoXtlCakTMBm7Q&oe=67ABCA9D&_nc_sid=2011ad', 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122912849_1279442432435525_8441111983093743403_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=uqpiK2uJoJMQ7kNvgFuc6qV&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE4MjE3NzMxOQ%3D%3D.3-ccb7-5&oh=00_AYAhK1f1qZ_2g06R66OTIaOZm1CBZ8S1zoXtlCakTMBm7Q&oe=67ABCA9D&_nc_sid=2011ad', 'width': 1280, 'height': 1280}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122912849_1279442432435525_8441111983093743403_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=uqpiK2uJoJMQ7kNvgFuc6qV&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE4MjE3NzMxOQ%3D%3D.3-ccb7-5&oh=00_AYCVYrch8XtCbk-h9BwkMGuM06AZ0PjMtN4Q6SDhcTGMFQ&oe=67ABCA9D&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'original_width': 1280, 'original_height': 1280, 'featured_products': [], 'carousel_parent_id': '2431253037789232840_43849166596', 'explore_pivot_grid': False, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'video_sticker_locales': []}], 'deleted_reason': 0, 'fundraiser_tag': {'has_standalone_fundraiser': False}, 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYD3hAI0WdDyJfRk9-wUCxOtxd4EuEKJZDIdTQE1iPDVpw&oe=67ABCE96&_nc_sid=2011ad', 'width': 1280, 'height': 1280}, {'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122819147_820387748538325_6402003752626116228_n.jpg?stp=dst-jpg_e35_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMjgweDEyODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=Q0ajq4UqDmQQ7kNvgHoi76_&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMTI1MzAzNDE3MzkwMzYyMw%3D%3D.3-ccb7-5&oh=00_AYBSVXbHUCoC0wuAHsptkL1ttV5ZklErPfzlVNi8A0rihA&oe=67ABCE96&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'music_metadata': {'audio_type': None, 'music_info': None, 'pinned_media_ids': None, 'audio_canonical_id': '0', 'original_sound_info': None}, 'original_width': 612, 'original_height': 612, 'device_timestamp': 165099129949286, 'has_shared_to_fb': 0, 'is_unified_video': False, 'preview_comments': [], 'caption_is_edited': False, 'featured_products': [], 'has_more_comments': True, 'carousel_media_ids': [2431253034173903623, 2431253034157126309, 2431253034752662160, 2431253034182177319], 'coauthor_producers': [], 'crosspost_metadata': {'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}}, 'has_views_fetching': True, 'is_in_profile_grid': False, 'can_modify_carousel': False, 'has_privately_liked': False, 'is_paid_partnership': False, 'product_suggestions': [], 'carousel_media_count': 4, 'commerciality_status': 'not_commercial', 'share_count_disabled': False, 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'subscribe_cta_visible': False, 'video_sticker_locales': [], 'is_social_ufi_disabled': False, 'gen_ai_detection_method': {'detection_method': 'NONE'}, 'boost_unavailable_reason': None, 'comment_inform_treatment': {'url': None, 'text': '', 'action_type': None, 'should_have_inform_treatment': False}, 'fb_aggregated_like_count': 0, 'is_post_live_clips_media': False, 'timeline_pinned_user_ids': [], 'clips_tab_pinned_user_ids': [], 'comment_threading_enabled': True, 'ig_media_sharing_disabled': False, 'integrity_review_decision': 'pending', 'is_cutout_sticker_allowed': False, 'meta_ai_suggested_prompts': [], 'invited_coauthor_producers': [], 'boost_unavailable_reason_v2': None, 'fb_aggregated_comment_count': 0, 'boost_unavailable_identifier': None, 'is_open_to_public_submission': False, 'is_eligible_for_meta_ai_share': False, 'like_and_view_counts_disabled': False, 'open_carousel_submission_state': 'closed', 'is_comments_gif_composer_enabled': True, 'max_num_visible_preview_comments': 2, 'open_carousel_show_follow_button': False, 'carousel_media_pending_post_count': 0, 'commerce_integrity_review_decision': '', 'is_eligible_for_media_note_recs_nux': False, 'is_organic_product_tagging_eligible': True, 'is_eligible_content_for_post_roll_ad': False, 'has_high_risk_gen_ai_inform_treatment': False, 'is_reshare_of_text_post_app_media_in_ig': False, 'coauthor_producer_can_see_organic_insights': False, 'is_tagged_media_shared_to_viewer_profile_grid': False, 'should_show_author_pog_for_tagged_media_shared_to_profile_grid': False}, {'id': '2164733753633455172_6077611846', 'pk': 2164733753633455172, 'lat': 31.918, 'lng': -106.6, 'code': 'B4KreEynrxE', 'fbid': '17848419778718369', 'user': {'id': '6077611846', 'fbid_v2': 17841406115389701, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '1611057477900701492_6077611846', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'owner': {'id': '6077611846', 'fbid_v2': 17841406115389701, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'is_private': False, 'is_favorite': False, 'is_verified': False, 'account_type': 3, 'fan_club_info': {'fan_club_id': None, 'fan_club_name': None, 'has_created_ssc': None, 'subscriber_count': None, 'largest_public_bc_id': None, 'connected_member_count': None, 'is_free_trial_eligible': None, 'is_fan_club_gifting_eligible': None, 'is_fan_club_referral_eligible': None, 'has_enough_subscribers_for_ssc': None, 'autosave_to_exclusive_highlight': None, 'fan_consideration_page_revamp_eligiblity': None}, 'account_badges': [], 'is_unpublished': False, 'profile_pic_id': '1611057477900701492_6077611846', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'feed_post_reshare_disabled': False, 'transparency_product_enabled': False, 'has_anonymous_profile_picture': False, 'third_party_downloads_enabled': 1, 'show_account_transparency_details': True}, 'likers': [{'id': '47005162385', 'pk': 47005162385, 'username': 'yeganam.2003', 'full_name': 'yeganam.2003', 'is_private': False, 'is_verified': False, 'profile_pic_id': '3346232457153303630_47005162385', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/437523825_778818490848023_9220459350897976248_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=GIFF9R1hxKwQ7kNvgFO3wVE&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYBG2-qxwmg1yzsfwo-94iv5LiR2wt4bMS7W9RZqmNecsQ&oe=67ABECED&_nc_sid=2011ad'}, {'id': '2285057098', 'pk': 2285057098, 'username': 'ballenger_maria', 'full_name': 'Maria Ballenger', 'is_private': False, 'is_verified': False, 'profile_pic_id': '3516889082933784484_2285057098', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/469619063_2491376451052394_8326167744427256447_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=AX1mi9g1p1cQ7kNvgEQraNV&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYBOjUr5Kz7KJ8UImNr21aftLGtGFSOx5WNi6zHjHtCfxA&oe=67ABC186&_nc_sid=2011ad'}, {'id': '2966830002', 'pk': 2966830002, 'username': 'mymiracles_76', 'full_name': 'Hazeleyez♡', 'is_private': True, 'is_verified': False, 'profile_pic_id': '2387236214875272287_2966830002', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/118566002_745024469651689_6888125582841655204_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=0Fb7H7nqyXQQ7kNvgHmBj7b&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYADksk_EuuN1Yvd3sYn-LeoFJxP5itKHR163q2h4yXW8g&oe=67ABDFEA&_nc_sid=2011ad'}, {'id': '20717110271', 'pk': 20717110271, 'username': 'avcomputerservicesep', 'full_name': 'A&V Computer Services', 'is_private': False, 'is_verified': False, 'profile_pic_id': '2137235703778989200_20717110271', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/70704923_367387674215870_4615639729096884224_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=EMHTZhMrEJ8Q7kNvgGUlCAI&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAWn0Rw0Djz544I7LOwzoUvtfAPXoSs75ovcTzRKU6Q7g&oe=67ABE1CA&_nc_sid=2011ad'}, {'id': '10937696290', 'pk': 10937696290, 'username': 'urbanart915', 'full_name': 'urbanart915', 'is_private': False, 'is_verified': False, 'profile_pic_id': '2593396908924288058_10937696290', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/198815734_193340032567046_1822644754353600274_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=_TxpkjHB1WsQ7kNvgH90KXK&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYDROipayYiB4W7i3CtQzBYiu9rAUfyjue7wb_cIQTxZ6A&oe=67ABEE36&_nc_sid=2011ad'}, {'id': '12123142051', 'pk': 12123142051, 'username': 'hikofoods', 'full_name': 'On the happy side of life❤️', 'is_private': False, 'is_verified': False, 'profile_pic_id': '2312201077491250514_12123142051', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/97875679_291337508548933_3750413185723662336_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=p5tz994N1VsQ7kNvgHFMg-P&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYDWhEWagF5ebGOWGyQFM2lgRpdF8hrHqJTNB8h8bxUzqQ&oe=67ABCDD5&_nc_sid=2011ad'}, {'id': '8477102266', 'pk': 8477102266, 'username': 'castlevnc86', 'full_name': 'Ceci Castillo', 'is_private': True, 'is_verified': False, 'profile_pic_id': '1852013995478122393_8477102266', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/39327926_1897804646962985_1527646174138335232_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=105&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=gl90WJUyzI4Q7kNvgHbJir9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYC1ej8Jw7HpjnBWskidq99xHkjSgRx2jefl2el7uJHzhw&oe=67ABE7AF&_nc_sid=2011ad'}], 'caption': {'id': 2164733753633455172, 'pk': '17848419793718369', 'text': 'Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70¢\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay’s or Wavy Lay’s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween', 'type': 1, 'user': {'id': '6077611846', 'fbid_v2': 17841406115389701, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'is_private': False, 'is_verified': False, 'is_unpublished': False, 'profile_pic_id': '1611057477900701492_6077611846', 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad'}, 'user_id': 6077611846, 'hashtags': ['#mondaymorning', '#happymonday', '#mondaymood', '#riograndesupermarket', '#canutillosupermarket', '#grocerystore', '#canutillobusiness', '#iamelpaso', '#elpasotx', '#itsallgoodep', '#recipeshoppinglist', '#halloweensnackideas', '#snackideasforkids', '#halloweentime', '#halloweenpartyideas', '#halloween_cupcakes', '#halloween_snacks', '#snacksforhalloween'], 'mentions': [], 'created_at': 1572276400, 'is_covered': False, 'share_enabled': False, 'created_at_utc': 1572276400, 'is_ranked_comment': False, 'did_report_as_spam': False, 'private_reply_status': 0}, 'can_save': True, 'is_video': True, 'location': {'pk': 237398833, 'lat': 31.918, 'lng': -106.6, 'city': '', 'name': 'Canutillo, Texas', 'address': '', 'short_name': 'Canutillo', 'external_source': 'facebook_places', 'facebook_places_id': 113168842030654}, 'taken_at': 1572276400, 'can_reply': False, 'feed_type': 'media', 'has_audio': True, 'has_liked': False, 'is_pinned': False, 'video_url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m84/AQMf95No3WAGIKsYeUhoxV7rsgMTqHOqTNjkfUwg_8S8yRhOUnMkNI2o6Di5VqNKoPkkpkcinkGnnot_sYLm2DZc1ZGHCLl-nGnkZLc.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjY0MDYwMzI2ODYxOTE2OTQsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5GRUVELkMzLjcyMC5kYXNoX2Jhc2VsaW5lXzFfdjEifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=AdgG9HgWWgo-CZIu61rSDK_i770vn3dhzqXyF_CrOLvJBBhadKHNhnsMKrtVWRjuAMY&vs=1b3ebb1bb7762106&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC8xMTRGNUI1RjcwNjlENEExQkZGMUNDNEU0MEE2NTY4Ml92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dId1V4QmE2dV9iRUlEb0ZBS3c3MEEzdC1IUkticGt3QUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJpzR8OqWkOEWFQIoAkMzLBdALgAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16gcA&ccb=9-4&oh=00_AYCAp0eqzZHST3H0jWPEdTCUEA84O1Q2yKlAbA0TU06URw&oe=67A7DB33&_nc_sid=1d576d', 'like_count': 8, 'media_name': 'reel', 'media_type': 2, 'top_likers': [], 'can_reshare': True, 'filter_type': 0, 'layout_type': 'media_grid', 'mashup_info': {'mashup_type': None, 'original_media': None, 'mashups_allowed': False, 'is_reuse_allowed': False, 'has_been_mashed_up': False, 'is_light_weight_check': True, 'formatted_mashups_count': None, 'is_pivot_page_available': False, 'can_toggle_mashups_allowed': False, 'is_creator_requesting_mashup': False, 'has_nonmimicable_additional_audio': False, 'is_light_weight_reuse_allowed_check': False, 'privacy_filtered_mashups_media_count': None, 'non_privacy_filtered_mashups_media_count': 0}, 'media_notes': {'items': []}, 'video_codec': 'avc1.4d401f', 'fb_user_tags': {'in': []}, 'product_type': 'feed', 'comment_count': 0, 'igbio_product': None, 'thumbnail_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/71886514_549564092253491_1295329350167932030_n.jpg?stp=dst-jpg_e15_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi43MjB4NzIwLnNkci5mMjg4NS5kZWZhdWx0X2NvdmVyX2ZyYW1lIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=rC6eCtEnKb0Q7kNvgHmtiJp&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjE2NDczMzc1MzYzMzQ1NTE3Mg%3D%3D.3-ccb7-5&oh=00_AYAqZJrGZVt7qZP9bPr_OlzF_rURQ8BdtGLfKqdKq7MO8g&oe=67ABC6EB&_nc_sid=2011ad', 'deleted_reason': 0, 'fundraiser_tag': {'has_standalone_fundraiser': False}, 'image_versions': {'items': [{'url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-15/71886514_549564092253491_1295329350167932030_n.jpg?stp=dst-jpg_e15_s480x480_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi43MjB4NzIwLnNkci5mMjg4NS5kZWZhdWx0X2NvdmVyX2ZyYW1lIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=111&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=rC6eCtEnKb0Q7kNvgHmtiJp&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjE2NDczMzc1MzYzMzQ1NTE3Mg%3D%3D.3-ccb7-5&oh=00_AYAqZJrGZVt7qZP9bPr_OlzF_rURQ8BdtGLfKqdKq7MO8g&oe=67ABC6EB&_nc_sid=2011ad', 'width': 480, 'height': 480}]}, 'music_metadata': {'audio_type': None, 'music_info': None, 'pinned_media_ids': None, 'audio_canonical_id': '0', 'original_sound_info': None}, 'original_width': 720, 'video_duration': 15.0, 'video_versions': [{'id': '335485682377481v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m84/AQMf95No3WAGIKsYeUhoxV7rsgMTqHOqTNjkfUwg_8S8yRhOUnMkNI2o6Di5VqNKoPkkpkcinkGnnot_sYLm2DZc1ZGHCLl-nGnkZLc.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjY0MDYwMzI2ODYxOTE2OTQsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5GRUVELkMzLjcyMC5kYXNoX2Jhc2VsaW5lXzFfdjEifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=AdgG9HgWWgo-CZIu61rSDK_i770vn3dhzqXyF_CrOLvJBBhadKHNhnsMKrtVWRjuAMY&vs=1b3ebb1bb7762106&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC8xMTRGNUI1RjcwNjlENEExQkZGMUNDNEU0MEE2NTY4Ml92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dId1V4QmE2dV9iRUlEb0ZBS3c3MEEzdC1IUkticGt3QUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJpzR8OqWkOEWFQIoAkMzLBdALgAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16gcA&ccb=9-4&oh=00_AYCAp0eqzZHST3H0jWPEdTCUEA84O1Q2yKlAbA0TU06URw&oe=67A7DB33&_nc_sid=1d576d', 'type': 101, 'width': 720, 'height': 720, 'bandwidth': 484001}, {'id': '335485682377481v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m84/AQMf95No3WAGIKsYeUhoxV7rsgMTqHOqTNjkfUwg_8S8yRhOUnMkNI2o6Di5VqNKoPkkpkcinkGnnot_sYLm2DZc1ZGHCLl-nGnkZLc.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjY0MDYwMzI2ODYxOTE2OTQsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5GRUVELkMzLjcyMC5kYXNoX2Jhc2VsaW5lXzFfdjEifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=AdgG9HgWWgo-CZIu61rSDK_i770vn3dhzqXyF_CrOLvJBBhadKHNhnsMKrtVWRjuAMY&vs=1b3ebb1bb7762106&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC8xMTRGNUI1RjcwNjlENEExQkZGMUNDNEU0MEE2NTY4Ml92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dId1V4QmE2dV9iRUlEb0ZBS3c3MEEzdC1IUkticGt3QUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJpzR8OqWkOEWFQIoAkMzLBdALgAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16gcA&ccb=9-4&oh=00_AYCAp0eqzZHST3H0jWPEdTCUEA84O1Q2yKlAbA0TU06URw&oe=67A7DB33&_nc_sid=1d576d', 'type': 102, 'width': 720, 'height': 720, 'bandwidth': 484001}, {'id': '335485682377481v', 'url': 'https://scontent-ber1-1.cdninstagram.com/o1/v/t16/f2/m84/AQMf95No3WAGIKsYeUhoxV7rsgMTqHOqTNjkfUwg_8S8yRhOUnMkNI2o6Di5VqNKoPkkpkcinkGnnot_sYLm2DZc1ZGHCLl-nGnkZLc.mp4?efg=eyJ4cHZfYXNzZXRfaWQiOjY0MDYwMzI2ODYxOTE2OTQsInZlbmNvZGVfdGFnIjoieHB2X3Byb2dyZXNzaXZlLklOU1RBR1JBTS5GRUVELkMzLjcyMC5kYXNoX2Jhc2VsaW5lXzFfdjEifQ&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=AdgG9HgWWgo-CZIu61rSDK_i770vn3dhzqXyF_CrOLvJBBhadKHNhnsMKrtVWRjuAMY&vs=1b3ebb1bb7762106&_nc_vs=HBksFQIYTGlnX2JhY2tmaWxsX3RpbWVsaW5lX3ZvZC8xMTRGNUI1RjcwNjlENEExQkZGMUNDNEU0MEE2NTY4Ml92aWRlb19kYXNoaW5pdC5tcDQVAALIAQAVAhg6cGFzc3Rocm91Z2hfZXZlcnN0b3JlL0dId1V4QmE2dV9iRUlEb0ZBS3c3MEEzdC1IUkticGt3QUFBRhUCAsgBACgAGAAbAogHdXNlX29pbAExEnByb2dyZXNzaXZlX3JlY2lwZQExFQAAJpzR8OqWkOEWFQIoAkMzLBdALgAAAAAAABgSZGFzaF9iYXNlbGluZV8xX3YxEQB16gcA&ccb=9-4&oh=00_AYCAp0eqzZHST3H0jWPEdTCUEA84O1Q2yKlAbA0TU06URw&oe=67A7DB33&_nc_sid=1d576d', 'type': 103, 'width': 720, 'height': 720, 'bandwidth': 484001}], 'original_height': 720, 'device_timestamp': 157227639454, 'has_shared_to_fb': 0, 'is_dash_eligible': 1, 'is_unified_video': False, 'preview_comments': [], 'caption_is_edited': False, 'featured_products': [], 'has_more_comments': False, 'coauthor_producers': [], 'crosspost_metadata': {'fb_downstream_use_xpost_metadata': {'downstream_use_xpost_deny_reason': 'NONE'}}, 'has_views_fetching': True, 'is_in_profile_grid': False, 'has_privately_liked': False, 'is_paid_partnership': False, 'number_of_qualities': 1, 'product_suggestions': [], 'commerciality_status': 'not_commercial', 'share_count_disabled': False, 'shop_routing_user_id': None, 'sharing_friction_info': {'bloks_app_url': None, 'sharing_friction_payload': None, 'should_have_sharing_friction': False}, 'subscribe_cta_visible': False, 'video_sticker_locales': [], 'is_social_ufi_disabled': False, 'gen_ai_detection_method': {'detection_method': 'NONE'}, 'boost_unavailable_reason': None, 'comment_inform_treatment': {'url': None, 'text': '', 'action_type': None, 'should_have_inform_treatment': False}, 'fb_aggregated_like_count': 0, 'is_post_live_clips_media': False, 'timeline_pinned_user_ids': [], 'clips_tab_pinned_user_ids': [], 'comment_threading_enabled': True, 'ig_media_sharing_disabled': False, 'integrity_review_decision': 'approved', 'is_cutout_sticker_allowed': False, 'meta_ai_suggested_prompts': [], 'invited_coauthor_producers': [], 'boost_unavailable_reason_v2': None, 'fb_aggregated_comment_count': 0, 'boost_unavailable_identifier': None, 'is_open_to_public_submission': False, 'is_eligible_for_meta_ai_share': False, 'like_and_view_counts_disabled': False, 'is_comments_gif_composer_enabled': True, 'max_num_visible_preview_comments': 2, 'open_carousel_show_follow_button': False, 'is_eligible_for_media_note_recs_nux': False, 'is_organic_product_tagging_eligible': True, 'is_eligible_content_for_post_roll_ad': False, 'has_high_risk_gen_ai_inform_treatment': False, 'is_reshare_of_text_post_app_media_in_ig': False, 'coauthor_producer_can_see_organic_insights': False, 'is_tagged_media_shared_to_viewer_profile_grid': False, 'should_show_author_pog_for_tagged_media_shared_to_profile_grid': False}], 'total': 10, 'additional_data': {'id': 17841525121103468, 'name': 'halloween_snacks', 'subtitle': 'See a few top posts each week', 'is_trending': False, 'media_count': 10, 'social_context': '', 'allow_following': 1, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.29350-15/122885201_279406056658052_253258248180892580_n.jpg?se=7&stp=dst-jpg_e35_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6ImltYWdlX3VybGdlbi4xMDgweDEwODAuc2RyLmYyOTM1MC5kZWZhdWx0X2ltYWdlIn0&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=108&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=xUFDN-pUZnEQ7kNvgH5-GXm&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&ig_cache_key=MjQzMDYwNzY4OTQ0MjUwMzg3OA%3D%3D.3-ccb7-5&oh=00_AYCvoAapMHHY3LrQFJ1W3DL62-AklQ-2J4qdd6T79i4uRw&oe=67ABC1EC&_nc_sid=2011ad', 'warning_message': None, 'content_advisory': None, 'allow_muting_story': True, 'follow_button_text': None, 'formatted_media_count': 'Fewer than 100', 'show_follow_drop_down': False, 'hide_use_hashtag_button': False, 'social_context_profile_links': []}}, 'pagination_token': 'HE1lBBspCRZVZVRWfQEMERxALUAZEwFHBQ5GZ1RSfRocWhkTOj4BUxZGGk1RRlQOfQAcTAdeJjwWEzMBQQRJAwEQChJGPl4xRwAXHQZbPFQUfRAKSgNfXhRBAEMWFRkHPFYQOg1FUk5eUDwLE1UWXBsXEAIbbQlKTEpCW30MESdGAEYI'}, 'content': 'eyJkYXRhIjp7ImFkZGl0aW9uYWxfZGF0YSI6eyJhbGxvd19mb2xsb3dpbmciOjEsImFsbG93X211dGluZ19zdG9yeSI6dHJ1ZSwiY29udGVudF9hZHZpc29yeSI6bnVsbCwiZm9sbG93X2J1dHRvbl90ZXh0IjpudWxsLCJmb3JtYXR0ZWRfbWVkaWFfY291bnQiOiJGZXdlciB0aGFuIDEwMCIsImhpZGVfdXNlX2hhc2h0YWdfYnV0dG9uIjpmYWxzZSwiaWQiOjE3ODQxNTI1MTIxMTAzNDY4LCJpc190cmVuZGluZyI6ZmFsc2UsIm1lZGlhX2NvdW50IjoxMCwibmFtZSI6ImhhbGxvd2Vlbl9zbmFja3MiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjg4NTIwMV8yNzk0MDYwNTY2NTgwNTJfMjUzMjU4MjQ4MTgwODkyNTgwX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1EZ3dlREV3T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwOCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz14VUZETi1wVVpuRVE3a052Z0g1LUdYbSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1EWXdOelk0T1RRME1qVXdNemczT0ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlDdm9BYXBNSEhZM0xyUUZKMVczREw2Mi1Ba2xRLTJKNHFkZDZUNzlpNHVSdyZvZT02N0FCQzFFQyZfbmNfc2lkPTIwMTFhZCIsInNob3dfZm9sbG93X2Ryb3BfZG93biI6ZmFsc2UsInNvY2lhbF9jb250ZXh0IjoiIiwic29jaWFsX2NvbnRleHRfcHJvZmlsZV9saW5rcyI6W10sInN1YnRpdGxlIjoiU2VlIGEgZmV3IHRvcCBwb3N0cyBlYWNoIHdlZWsiLCJ3YXJuaW5nX21lc3NhZ2UiOm51bGx9LCJjb3VudCI6NSwiaXRlbXMiOlt7ImFyZV9yZW1peGVzX2Nyb3NzcG9zdGFibGUiOnRydWUsImF2YXRhcl9zdGlja2VycyI6W10sImJvb3N0X3VuYXZhaWxhYmxlX2lkZW50aWZpZXIiOm51bGwsImJvb3N0X3VuYXZhaWxhYmxlX3JlYXNvbiI6bnVsbCwiYm9vc3RfdW5hdmFpbGFibGVfcmVhc29uX3YyIjpudWxsLCJjYW5fcmVwbHkiOmZhbHNlLCJjYW5fcmVzaGFyZSI6dHJ1ZSwiY2FuX3NhdmUiOnRydWUsImNhcHRpb24iOnsiY3JlYXRlZF9hdCI6MTczMDM2ODAwMiwiY3JlYXRlZF9hdF91dGMiOjE3MzAzNjgwMDIsImRpZF9yZXBvcnRfYXNfc3BhbSI6ZmFsc2UsImhhc190cmFuc2xhdGlvbiI6dHJ1ZSwiaGFzaHRhZ3MiOlsiI2FzbXIiLCIjYXNtcmFydGlzdCIsIiNhc21yZm9vZCIsIiNtdWtiYW5nIiwiI2hhbGxvd2VlbiIsIiNoYWxsb3dlZW5fc25hY2tzIiwiI2hhcHB5IiwiI9in24zYp9iz2KfZhdin2LEiLCIj2KfbjF/Yp9izX9in2YVf2KLYsSIsIiPYp9uM2KfYs9mF2KfYsSIsIiPZh9in2YTZiNmI24zZhiJdLCJpZCI6MzQ5MDkwMDQ3MTc5MzczNDc5MiwiaXNfY292ZXJlZCI6ZmFsc2UsImlzX3JhbmtlZF9jb21tZW50IjpmYWxzZSwibWVudGlvbnMiOlsiQGtoYXRpc2F3X2FzbXIiXSwicGsiOiIxNzkyMjE4NjY5ODg4OTEyOCIsInByaXZhdGVfcmVwbHlfc3RhdHVzIjowLCJzaGFyZV9lbmFibGVkIjpmYWxzZSwidGV4dCI6Itiu2YjYsdin2qnbjCDZh9in2YTZiNuM2YbbjCDYqNmHINmF2YbYp9iz2KjYqiDZh9in2YTZiNuM2Ybwn5G78J+Og1xuXG7Yp9qv2Ycg2KrZiNmH2YUg2LnYp9i02YIg2KfbjOKAjNin2LPigIzYp9mF4oCM2KLYsduMINm+24zYrNmF2Ygg2KfYsiDYr9iz2Kog2YbYr9mH8J+YifCfkYfwn4+7XG5Aa2hhdGlzYXdfYXNtciBcbkBraGF0aXNhd19hc21yIFxuQGtoYXRpc2F3X2FzbXIgXG5cbiNhc21yICNhc21yYXJ0aXN0ICNhc21yZm9vZCAjbXVrYmFuZyAjaGFsbG93ZWVuICNoYWxsb3dlZW5fc25hY2tzICNoYXBweSAj2KfbjNin2LPYp9mF2KfYsSAj2KfbjF/Yp9izX9in2YVf2KLYsSAj2KfbjNin2LPZhdin2LEgI9mH2KfZhNmI2YjbjNmGIiwidHlwZSI6MSwidXNlciI6eyJmYmlkX3YyIjoxNzg0MTQ2ODExNzk4NjE0MSwiZnVsbF9uYW1lIjoiQVNNUiB8INiu2KfZsNi32JXduuCjruKAjNir2Znbm9in2bAgfCDYp9uMINin2LMg2KfZhSDYotixIiwiaWQiOiI2ODA0OTEzNDU5OSIsImlzX3ByaXZhdGUiOmZhbHNlLCJpc191bnB1Ymxpc2hlZCI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicHJvZmlsZV9waWNfaWQiOiIzNDI0NTUwMDU3Mzk0MTk1NzE4XzY4MDQ5MTM0NTk5IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzQ1MzczMzk4NF80NTIyNjk0NTQzMTQxMjlfMzY2MDA0NTM2OTU2NTg2ODY4MF9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAxJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPU50dEpMOVNKcXhnUTdrTnZnR1FpcUQ5Jl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQUZZYnVKQmRWTThoVEYzSTFzUVJDR0pEU1d5MXJ0R2tuQ2xNeE5CN1diOGcmb2U9NjdBQkU5QUQmX25jX3NpZD0yMDExYWQiLCJ1c2VybmFtZSI6ImtoYXRpc2F3X2FzbXIifSwidXNlcl9pZCI6NjgwNDkxMzQ1OTl9LCJjYXB0aW9uX2lzX2VkaXRlZCI6ZmFsc2UsImNsaXBzX21ldGFkYXRhIjp7ImFjaGlldmVtZW50c19pbmZvIjp7Im51bV9lYXJuZWRfYWNoaWV2ZW1lbnRzIjpudWxsLCJzaG93X2FjaGlldmVtZW50cyI6ZmFsc2V9LCJhZGRpdGlvbmFsX2F1ZGlvX2luZm8iOnsiYWRkaXRpb25hbF9hdWRpb191c2VybmFtZSI6bnVsbCwiYXVkaW9fcmVhdHRyaWJ1dGlvbl9pbmZvIjp7InNob3VsZF9hbGxvd19yZXN0b3JlIjpmYWxzZX19LCJhc3NldF9yZWNvbW1lbmRhdGlvbl9pbmZvIjpudWxsLCJhdWRpb19jYW5vbmljYWxfaWQiOiIxODQ2MjkzNTc2NzAzMDQwNSIsImF1ZGlvX3JhbmtpbmdfaW5mbyI6eyJiZXN0X2F1ZGlvX2NsdXN0ZXJfaWQiOiIxOTc5MjY2NzY5MjQ3OTk0In0sImF1ZGlvX3R5cGUiOiJvcmlnaW5hbF9zb3VuZHMiLCJicmFuZGVkX2NvbnRlbnRfdGFnX2luZm8iOnsiY2FuX2FkZF90YWciOmZhbHNlfSwiYnJlYWtpbmdfY29udGVudF9pbmZvIjpudWxsLCJicmVha2luZ19jcmVhdG9yX2luZm8iOm51bGwsImNoYWxsZW5nZV9pbmZvIjpudWxsLCJjbGlwc19jcmVhdGlvbl9lbnRyeV9wb2ludCI6ImNsaXBzIiwiY29udGVudF9hcHByZWNpYXRpb25faW5mbyI6eyJlbmFibGVkIjpmYWxzZSwiZW50cnlfcG9pbnRfY29udGFpbmVyIjpudWxsfSwiY29udGV4dHVhbF9oaWdobGlnaHRfaW5mbyI6bnVsbCwiY3V0b3V0X3N0aWNrZXJfaW5mbyI6W10sImRpc2FibGVfdXNlX2luX2NsaXBzX2NsaWVudF9jYWNoZSI6ZmFsc2UsImV4dGVybmFsX21lZGlhX2luZm8iOm51bGwsImZlYXR1cmVkX2xhYmVsIjpudWxsLCJpc19mYW5fY2x1Yl9wcm9tb192aWRlbyI6ZmFsc2UsImlzX3B1YmxpY19jaGF0X3dlbGNvbWVfdmlkZW8iOmZhbHNlLCJpc19zaGFyZWRfdG9fZmIiOmZhbHNlLCJtYXNodXBfaW5mbyI6eyJjYW5fdG9nZ2xlX21hc2h1cHNfYWxsb3dlZCI6ZmFsc2UsImZvcm1hdHRlZF9tYXNodXBzX2NvdW50IjpudWxsLCJoYXNfYmVlbl9tYXNoZWRfdXAiOmZhbHNlLCJoYXNfbm9ubWltaWNhYmxlX2FkZGl0aW9uYWxfYXVkaW8iOmZhbHNlLCJpc19jcmVhdG9yX3JlcXVlc3RpbmdfbWFzaHVwIjpmYWxzZSwiaXNfbGlnaHRfd2VpZ2h0X2NoZWNrIjp0cnVlLCJpc19saWdodF93ZWlnaHRfcmV1c2VfYWxsb3dlZF9jaGVjayI6ZmFsc2UsImlzX3Bpdm90X3BhZ2VfYXZhaWxhYmxlIjpmYWxzZSwiaXNfcmV1c2VfYWxsb3dlZCI6dHJ1ZSwibWFzaHVwX3R5cGUiOm51bGwsIm1hc2h1cHNfYWxsb3dlZCI6dHJ1ZSwibm9uX3ByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6MCwib3JpZ2luYWxfbWVkaWEiOm51bGwsInByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6bnVsbH0sIm1lcmNoYW5kaXNpbmdfcGlsbF9pbmZvIjpudWxsLCJtdXNpY19pbmZvIjpudWxsLCJudXhfaW5mbyI6bnVsbCwib3JpZ2luYWxfc291bmRfaW5mbyI6eyJhbGxvd19jcmVhdG9yX3RvX3JlbmFtZSI6dHJ1ZSwiYXR0cmlidXRlZF9jdXN0b21fYXVkaW9fYXNzZXRfaWQiOm51bGwsImF1ZGlvX2Fzc2V0X3N0YXJ0X3RpbWVfaW5fbXMiOm51bGwsImF1ZGlvX2ZpbHRlcl9pbmZvcyI6W10sImF1ZGlvX2lkIjoxMTU5NDg1MDY1NzYzNjc3LCJhdWRpb19wYXJ0cyI6W10sImF1ZGlvX3BhcnRzX2J5X2ZpbHRlciI6W10sImNhbl9yZW1peF9iZV9zaGFyZWRfdG9fZmIiOmZhbHNlLCJjYW5fcmVtaXhfYmVfc2hhcmVkX3RvX2ZiX2V4cGFuc2lvbiI6ZmFsc2UsImNvbnN1bXB0aW9uX2luZm8iOnsiZGlzcGxheV9tZWRpYV9pZCI6bnVsbCwiaXNfYm9va21hcmtlZCI6ZmFsc2UsImlzX3RyZW5kaW5nX2luX2NsaXBzIjpmYWxzZSwic2hvdWxkX211dGVfYXVkaW9fcmVhc29uIjoiIiwic2hvdWxkX211dGVfYXVkaW9fcmVhc29uX3R5cGUiOm51bGx9LCJkdXJhdGlvbl9pbl9tcyI6MzY5NDIsImZiX2Rvd25zdHJlYW1fdXNlX3hwb3N0X21ldGFkYXRhIjp7ImRvd25zdHJlYW1fdXNlX3hwb3N0X2RlbnlfcmVhc29uIjoiTk9ORSJ9LCJmb3JtYXR0ZWRfY2xpcHNfbWVkaWFfY291bnQiOm51bGwsImhpZGVfcmVtaXhpbmciOmZhbHNlLCJpZ19hcnRpc3QiOnsiZnVsbF9uYW1lIjoiQVNNUiB8INiu2KfZsNi32JXduuCjruKAjNir2Znbm9in2bAgfCDYp9uMINin2LMg2KfZhSDYotixIiwiaWQiOiI2ODA0OTEzNDU5OSIsImlzX3ByaXZhdGUiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMzQyNDU1MDA1NzM5NDE5NTcxOF82ODA0OTEzNDU5OSIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS80NTM3MzM5ODRfNDUyMjY5NDU0MzE0MTI5XzM2NjAwNDUzNjk1NjU4Njg2ODBfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1OdHRKTDlTSnF4Z1E3a052Z0dRaXFEOSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUFGWWJ1SkJkVk04aFRGM0kxc1FSQ0dKRFNXeTFydEdrbkNsTXhOQjdXYjhnJm9lPTY3QUJFOUFEJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJraGF0aXNhd19hc21yIn0sImlzX2F1ZGlvX2F1dG9tYXRpY2FsbHlfYXR0cmlidXRlZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9hdWRpb19lZmZlY3RzIjp0cnVlLCJpc19lbGlnaWJsZV9mb3JfdmlueWxfc3RpY2tlciI6dHJ1ZSwiaXNfZXhwbGljaXQiOmZhbHNlLCJpc19vcmlnaW5hbF9hdWRpb19kb3dubG9hZF9lbGlnaWJsZSI6dHJ1ZSwiaXNfcmV1c2VfZGlzYWJsZWQiOmZhbHNlLCJpc194cG9zdF9mcm9tX2ZiIjpmYWxzZSwib2Ffb3duZXJfaXNfbXVzaWNfYXJ0aXN0IjpmYWxzZSwib3JpZ2luYWxfYXVkaW9fc3VidHlwZSI6ImRlZmF1bHQiLCJvcmlnaW5hbF9hdWRpb190aXRsZSI6Ik9yaWdpbmFsIGF1ZGlvIiwib3JpZ2luYWxfbWVkaWFfaWQiOjM0OTA5MDA0NzE3OTM3MzQ3OTIsIm92ZXJsYXBfZHVyYXRpb25faW5fbXMiOm51bGwsInByZXZpb3VzX3RyZW5kX3JhbmsiOm51bGwsInByb2dyZXNzaXZlX2Rvd25sb2FkX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLnh4LmZiY2RuLm5ldC9vMS92L3QyL2YyL202OS9BUU1yYzNLRFpHc1lqRmpWaXNZbEhwOVJmN18xZW1CMmp5XzAtVUtlbGdNeDZwUTFuLS1DQnV4N0gyNS1uX0gxTHc3LWhnd1FudWdadEFrTzllY3puUTNSLm1wND9zdHJleHQ9MSZfbmNfY2F0PTEwOSZfbmNfc2lkPThiZjhmZSZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLnh4LmZiY2RuLm5ldCZfbmNfb2hjPWNOYTE3cnRjd3lRUTdrTnZnR21HMDZ5JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkluaHdkbDl3Y205bmNtVnpjMmwyWlM1QlZVUkpUMTlQVGt4WkxpNURNeTR3TG5CeWIyZHlaWE56YVhabFgyRjFaR2x2SWl3aWVIQjJYMkZ6YzJWMFgybGtJam94TWpVd05qa3dNREU1TkRReE1EVXhMQ0oxY214blpXNWZjMjkxY21ObElqb2lkM2QzSW4wJTNEJmNjYj05LTQmX25jX3p0PTI4Jm9oPTAwX0FZQ1RnVDQyV090Uko4Z2Vla1hqLWdlLWhNajFYWWoxZWFnd18zWGU3WDFXQWcmb2U9NjdBQkQ3RTgiLCJzaG91bGRfbXV0ZV9hdWRpbyI6ZmFsc2UsInRpbWVfY3JlYXRlZCI6MTczMDM2ODAwNCwidHJlbmRfcmFuayI6bnVsbCwieHBvc3RfZmJfY3JlYXRvcl9pbmZvIjpudWxsfSwib3JpZ2luYWxpdHlfaW5mbyI6bnVsbCwicHJvZmVzc2lvbmFsX2NsaXBzX3Vwc2VsbF90eXBlIjowLCJyZWVsc19vbl90aGVfcmlzZV9pbmZvIjpudWxsLCJyZXVzYWJsZV90ZXh0X2F0dHJpYnV0ZV9zdHJpbmciOm51bGwsInJldXNhYmxlX3RleHRfaW5mbyI6bnVsbCwic2hvcHBpbmdfaW5mbyI6bnVsbCwic2hvd19hY2hpZXZlbWVudHMiOmZhbHNlLCJzaG93X3RpcHMiOm51bGwsInRlbXBsYXRlX2luZm8iOm51bGwsInZpZXdlcl9pbnRlcmFjdGlvbl9zZXR0aW5ncyI6bnVsbH0sImNsaXBzX3RhYl9waW5uZWRfdXNlcl9pZHMiOltdLCJjb2F1dGhvcl9wcm9kdWNlcl9jYW5fc2VlX29yZ2FuaWNfaW5zaWdodHMiOmZhbHNlLCJjb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJjb2RlIjoiREJ5SzN2SGdsU0kiLCJjb21tZW50X2NvdW50IjowLCJjb21tZW50X2luZm9ybV90cmVhdG1lbnQiOnsiYWN0aW9uX3R5cGUiOm51bGwsInNob3VsZF9oYXZlX2luZm9ybV90cmVhdG1lbnQiOmZhbHNlLCJ0ZXh0IjoiIiwidXJsIjpudWxsfSwiY29tbWVudF90aHJlYWRpbmdfZW5hYmxlZCI6dHJ1ZSwiY29tbWVyY2lhbGl0eV9zdGF0dXMiOiJub3RfY29tbWVyY2lhbCIsImNyZWF0b3Jfdmlld2VyX2luc2lnaHRzIjpbXSwiY3Jvc3Nwb3N0X21ldGFkYXRhIjp7ImZiX2Rvd25zdHJlYW1fdXNlX3hwb3N0X21ldGFkYXRhIjp7ImRvd25zdHJlYW1fdXNlX3hwb3N0X2RlbnlfcmVhc29uIjoiTk9ORSJ9fSwiZGVsZXRlZF9yZWFzb24iOjAsImRldmljZV90aW1lc3RhbXAiOjQ4MTQ2MjA2NDUyOTMxMCwiZmJfYWdncmVnYXRlZF9jb21tZW50X2NvdW50IjowLCJmYl9hZ2dyZWdhdGVkX2xpa2VfY291bnQiOjAsImZiX3VzZXJfdGFncyI6eyJpbiI6W119LCJmYmlkIjoiMTc5MjIxODY0MTM4ODkxMjgiLCJmZWVkX3R5cGUiOiJjbGlwcyIsImZpbHRlcl90eXBlIjowLCJmdW5kcmFpc2VyX3RhZyI6eyJoYXNfc3RhbmRhbG9uZV9mdW5kcmFpc2VyIjpmYWxzZX0sImdlbl9haV9kZXRlY3Rpb25fbWV0aG9kIjp7ImRldGVjdGlvbl9tZXRob2QiOiJOT05FIn0sImhhc19hdWRpbyI6dHJ1ZSwiaGFzX2hpZ2hfcmlza19nZW5fYWlfaW5mb3JtX3RyZWF0bWVudCI6ZmFsc2UsImhhc19saWtlZCI6ZmFsc2UsImhhc19tb3JlX2NvbW1lbnRzIjpmYWxzZSwiaGFzX3ByaXZhdGVseV9saWtlZCI6ZmFsc2UsImhhc19zaGFyZWRfdG9fZmIiOjAsImhhc192aWV3c19mZXRjaGluZyI6dHJ1ZSwiaWQiOiIzNDkwOTAwNDcxNzkzNzM0NzkyXzY4MDQ5MTM0NTk5IiwiaWdfbWVkaWFfc2hhcmluZ19kaXNhYmxlZCI6ZmFsc2UsImlnX3BsYXlfY291bnQiOjI3NCwiaWdiaW9fcHJvZHVjdCI6bnVsbCwiaW1hZ2VfdmVyc2lvbnMiOnsiYWRkaXRpb25hbF9pdGVtcyI6eyJmaXJzdF9mcmFtZSI6eyJoZWlnaHQiOjg1MiwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE1LzQ2NTE1MzgyNF8xMjczMDQ0MzU2OTY5NzIxXzQ4MDMxNjQ0OTM2NjA0MzAwNDVfbi5qcGc/c3RwPWRzdC1qcGdfZTE1X3A0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0Mk5EQjRNVEV6Tmk1elpISXVaamN4T0RjNExtRmtaR2wwYVc5dVlXeGZZMjkyWlhKZlpuSmhiV1VpZlEmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA5Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPTZlM19sZ1BPTjhRUTdrTnZnSFJZYkJEJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQ1Boa25McHdZYjVqeDMyZ2gzcTk0b2J1bG9UMXg0Y2RfUWZaWUtrYzd5Tmcmb2U9NjdBQkUxMTAmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6NDgwfSwiaWd0dl9maXJzdF9mcmFtZSI6eyJoZWlnaHQiOjg1MiwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE1LzQ2NTE1MzgyNF8xMjczMDQ0MzU2OTY5NzIxXzQ4MDMxNjQ0OTM2NjA0MzAwNDVfbi5qcGc/c3RwPWRzdC1qcGdfZTE1X3A0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0Mk5EQjRNVEV6Tmk1elpISXVaamN4T0RjNExtRmtaR2wwYVc5dVlXeGZZMjkyWlhKZlpuSmhiV1VpZlEmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA5Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPTZlM19sZ1BPTjhRUTdrTnZnSFJZYkJEJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQ1Boa25McHdZYjVqeDMyZ2gzcTk0b2J1bG9UMXg0Y2RfUWZaWUtrYzd5Tmcmb2U9NjdBQkUxMTAmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6NDgwfSwic21hcnRfZnJhbWUiOm51bGx9LCJpdGVtcyI6W3siaGVpZ2h0Ijo4NTQsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvNDY1MTYzNDMwXzEzNDYxNTI1MDk3MDg4NzVfNzI4Nzc3MDkzOTUzMjM5Mzg5NV9uLmpwZz9zdHA9ZHN0LWpwZ19lMTVfdHQ2JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkltbHRZV2RsWDNWeWJHZGxiaTQwT0RCNE9EVTBMbk5rY2k1bU1qa3pOVEF1WkdWbVlYVnNkRjlqYjNabGNsOW1jbUZ0WlNKOSZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMTEmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9YlFrN1NwNHhUUElRN2tOdmdHZ1FFSGwmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU16UTVNRGt3TURRM01UYzVNemN6TkRjNU1qa3dPRGsxTURNeU5EQXlOakV6TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlBRzlodFZtQmd3X1F1VnhRY1BaaVQ4Y2M0dGpNMkg1Nm5kdWlDY0toaTR1dyZvZT02N0FCRDE3MyZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XSwic2NydWJiZXJfc3ByaXRlc2hlZXRfaW5mb19jYW5kaWRhdGVzIjp7ImRlZmF1bHQiOnsiZmlsZV9zaXplX2tiIjozODQsIm1heF90aHVtYm5haWxzX3Blcl9zcHJpdGUiOjEwNSwicmVuZGVyZWRfd2lkdGgiOjk2LCJzcHJpdGVfaGVpZ2h0IjoxMjQ2LCJzcHJpdGVfdXJscyI6WyJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTUvNDY0ODkyOTQ2XzUzNzc1NTI4MjIxNjYxMF84NTg3ODcwMjE2ODQzNzAwMTcxX24uanBnP19uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNiZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1YU0JLZVhlX05XZ1E3a052Z0ZSdkFkaiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUM5eFFqOHRpbFNhNHNXUTMzS3o1RHBsYWxfSGltdkMtWjB5TUgzWkFWUTl3Jm9lPTY3QUJFODZGJl9uY19zaWQ9MjAxMWFkIl0sInNwcml0ZV93aWR0aCI6MTUwMCwidGh1bWJuYWlsX2R1cmF0aW9uIjowLjM1MTgyODU3MTQyODU3MTQzLCJ0aHVtYm5haWxfaGVpZ2h0IjoxNzgsInRodW1ibmFpbF93aWR0aCI6MTAwLCJ0aHVtYm5haWxzX3Blcl9yb3ciOjE1LCJ0b3RhbF90aHVtYm5haWxfbnVtX3Blcl9zcHJpdGUiOjEwNSwidmlkZW9fbGVuZ3RoIjozNi45NDJ9fX0sImludGVncml0eV9yZXZpZXdfZGVjaXNpb24iOiJwZW5kaW5nIiwiaW52ZW50b3J5X3NvdXJjZSI6InJlY29tbWVuZGVkX2NsaXBzX2NoYWluaW5nX21vZGVsIiwiaW52aXRlZF9jb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJpc19hcnRpc3RfcGljayI6ZmFsc2UsImlzX2NvbW1lbnRzX2dpZl9jb21wb3Nlcl9lbmFibGVkIjp0cnVlLCJpc19jdXRvdXRfc3RpY2tlcl9hbGxvd2VkIjpmYWxzZSwiaXNfZGFzaF9lbGlnaWJsZSI6MSwiaXNfZWxpZ2libGVfY29udGVudF9mb3JfcG9zdF9yb2xsX2FkIjp0cnVlLCJpc19lbGlnaWJsZV9mb3JfbWVkaWFfbm90ZV9yZWNzX251eCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9tZXRhX2FpX3NoYXJlIjpmYWxzZSwiaXNfaW5fcHJvZmlsZV9ncmlkIjpmYWxzZSwiaXNfb3Blbl90b19wdWJsaWNfc3VibWlzc2lvbiI6ZmFsc2UsImlzX29yZ2FuaWNfcHJvZHVjdF90YWdnaW5nX2VsaWdpYmxlIjp0cnVlLCJpc19wYWlkX3BhcnRuZXJzaGlwIjpmYWxzZSwiaXNfcGlubmVkIjpmYWxzZSwiaXNfcG9zdF9saXZlX2NsaXBzX21lZGlhIjpmYWxzZSwiaXNfcmVzaGFyZV9vZl90ZXh0X3Bvc3RfYXBwX21lZGlhX2luX2lnIjpmYWxzZSwiaXNfcmV1c2VfYWxsb3dlZCI6ZmFsc2UsImlzX3NvY2lhbF91ZmlfZGlzYWJsZWQiOmZhbHNlLCJpc190YWdnZWRfbWVkaWFfc2hhcmVkX3RvX3ZpZXdlcl9wcm9maWxlX2dyaWQiOmZhbHNlLCJpc190aGlyZF9wYXJ0eV9kb3dubG9hZHNfZWxpZ2libGUiOnRydWUsImlzX3VuaWZpZWRfdmlkZW8iOmZhbHNlLCJpc192aWRlbyI6dHJ1ZSwibGF5b3V0X3R5cGUiOiJvbmVfYnlfdHdvX2xlZnQiLCJsaWtlX2FuZF92aWV3X2NvdW50c19kaXNhYmxlZCI6ZmFsc2UsImxpa2VfY291bnQiOjE1LCJtYXhfbnVtX3Zpc2libGVfcHJldmlld19jb21tZW50cyI6MCwibWVkaWFfY3JvcHBpbmdfaW5mbyI6eyJzcXVhcmVfY3JvcCI6eyJjcm9wX2JvdHRvbSI6MC4wLCJjcm9wX2xlZnQiOjAuMCwiY3JvcF9yaWdodCI6MC4wLCJjcm9wX3RvcCI6MC4wfX0sIm1lZGlhX25hbWUiOiJyZWVsIiwibWVkaWFfbm90ZXMiOnsiaXRlbXMiOltdfSwibWVkaWFfdHlwZSI6MiwibWV0YV9haV9zdWdnZXN0ZWRfcHJvbXB0cyI6W10sIm11c2ljX21ldGFkYXRhIjpudWxsLCJudW1iZXJfb2ZfcXVhbGl0aWVzIjoyLCJvcGVuX2Nhcm91c2VsX3Nob3dfZm9sbG93X2J1dHRvbiI6ZmFsc2UsIm9yaWdpbmFsX2hlaWdodCI6MTkyMCwib3JpZ2luYWxfd2lkdGgiOjEwODAsIm93bmVyIjp7ImFjY291bnRfYmFkZ2VzIjpbXSwiYWNjb3VudF90eXBlIjozLCJmYW5fY2x1Yl9pbmZvIjp7ImF1dG9zYXZlX3RvX2V4Y2x1c2l2ZV9oaWdobGlnaHQiOm51bGwsImNvbm5lY3RlZF9tZW1iZXJfY291bnQiOm51bGwsImZhbl9jbHViX2lkIjpudWxsLCJmYW5fY2x1Yl9uYW1lIjpudWxsLCJmYW5fY29uc2lkZXJhdGlvbl9wYWdlX3JldmFtcF9lbGlnaWJsaXR5IjpudWxsLCJoYXNfY3JlYXRlZF9zc2MiOm51bGwsImhhc19lbm91Z2hfc3Vic2NyaWJlcnNfZm9yX3NzYyI6bnVsbCwiaXNfZmFuX2NsdWJfZ2lmdGluZ19lbGlnaWJsZSI6bnVsbCwiaXNfZmFuX2NsdWJfcmVmZXJyYWxfZWxpZ2libGUiOm51bGwsImlzX2ZyZWVfdHJpYWxfZWxpZ2libGUiOm51bGwsImxhcmdlc3RfcHVibGljX2JjX2lkIjpudWxsLCJzdWJzY3JpYmVyX2NvdW50IjpudWxsfSwiZmJpZF92MiI6MTc4NDE0NjgxMTc5ODYxNDEsImZlZWRfcG9zdF9yZXNoYXJlX2Rpc2FibGVkIjpmYWxzZSwiZnVsbF9uYW1lIjoiQVNNUiB8INiu2KfZsNi32JXduuCjruKAjNir2Znbm9in2bAgfCDYp9uMINin2LMg2KfZhSDYotixIiwiaGFzX2Fub255bW91c19wcm9maWxlX3BpY3R1cmUiOmZhbHNlLCJpZCI6IjY4MDQ5MTM0NTk5IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMzQyNDU1MDA1NzM5NDE5NTcxOF82ODA0OTEzNDU5OSIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS80NTM3MzM5ODRfNDUyMjY5NDU0MzE0MTI5XzM2NjAwNDUzNjk1NjU4Njg2ODBfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1OdHRKTDlTSnF4Z1E3a052Z0dRaXFEOSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUFGWWJ1SkJkVk04aFRGM0kxc1FSQ0dKRFNXeTFydEdrbkNsTXhOQjdXYjhnJm9lPTY3QUJFOUFEJl9uY19zaWQ9MjAxMWFkIiwic2hvd19hY2NvdW50X3RyYW5zcGFyZW5jeV9kZXRhaWxzIjp0cnVlLCJ0aGlyZF9wYXJ0eV9kb3dubG9hZHNfZW5hYmxlZCI6MSwidHJhbnNwYXJlbmN5X3Byb2R1Y3RfZW5hYmxlZCI6ZmFsc2UsInVzZXJuYW1lIjoia2hhdGlzYXdfYXNtciJ9LCJwayI6MzQ5MDkwMDQ3MTc5MzczNDc5MiwicGxheV9jb3VudCI6Mjc0LCJwcmV2aWV3X2NvbW1lbnRzIjpbXSwicHJvZHVjdF9zdWdnZXN0aW9ucyI6W10sInByb2R1Y3RfdHlwZSI6ImNsaXBzIiwicmVzaGFyZV9jb3VudCI6MCwic2hhcmVfY291bnRfZGlzYWJsZWQiOmZhbHNlLCJzaGFyaW5nX2ZyaWN0aW9uX2luZm8iOnsiYmxva3NfYXBwX3VybCI6bnVsbCwic2hhcmluZ19mcmljdGlvbl9wYXlsb2FkIjpudWxsLCJzaG91bGRfaGF2ZV9zaGFyaW5nX2ZyaWN0aW9uIjpmYWxzZX0sInNob3Bfcm91dGluZ191c2VyX2lkIjpudWxsLCJzaG91bGRfc2hvd19hdXRob3JfcG9nX2Zvcl90YWdnZWRfbWVkaWFfc2hhcmVkX3RvX3Byb2ZpbGVfZ3JpZCI6ZmFsc2UsInNvY2lhbF9jb250ZXh0IjpbXSwic3Vic2NyaWJlX2N0YV92aXNpYmxlIjpmYWxzZSwidGFnZ2VkX3VzZXJzIjp7ImluIjpbeyJwb3NpdGlvbiI6WzAuMCwwLjBdLCJzaG93X2NhdGVnb3J5X29mX3VzZXIiOmZhbHNlLCJ1c2VyIjp7ImZ1bGxfbmFtZSI6Ik1jQmFuZyBBc21yIiwiaWQiOiIyNjQ3ODY1MDkyOCIsImlzX3ByaXZhdGUiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMjIyMTIwMTg4MzYxMDMxMzA0OF8yNjQ3ODY1MDkyOCIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS84MTg4MTM5MV80NjUyNjMwMzA4MjkzMDZfNDIxODEwNjYyNzE1MDA1MzM3Nl9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA2Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPW5lMmxDeU9UaHk4UTdrTnZnRURfYjRRJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQ09BM0Q3VENnYXNJQkxDRTB4WFBQS3dhNGhmM1kzZ2VWSHRxeG56LXNHaVEmb2U9NjdBQkNFRjQmX25jX3NpZD0yMDExYWQiLCJ1c2VybmFtZSI6Im1jYmFuZy5hc21yIn19XX0sInRha2VuX2F0IjoxNzMwMzY4MDAxLCJ0aHVtYm5haWxfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yOTM1MC0xNS80NjUxNjM0MzBfMTM0NjE1MjUwOTcwODg3NV83Mjg3NzcwOTM5NTMyMzkzODk1X24uanBnP3N0cD1kc3QtanBnX2UxNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNDBPREI0T0RVMExuTmtjaTVtTWprek5UQXVaR1ZtWVhWc2RGOWpiM1psY2w5bWNtRnRaU0o5Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1iUWs3U3A0eFRQSVE3a052Z0dnUUVIbCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TXpRNU1Ea3dNRFEzTVRjNU16Y3pORGM1TWprd09EazFNRE15TkRBeU5qRXpNdyUzRCUzRC4zLWNjYjctNSZvaD0wMF9BWUFHOWh0Vm1CZ3dfUXVWeFFjUFppVDhjYzR0ak0ySDU2bmR1aUNjS2hpNHV3Jm9lPTY3QUJEMTczJl9uY19zaWQ9MjAxMWFkIiwidGltZWxpbmVfcGlubmVkX3VzZXJfaWRzIjpbXSwidG9wX2xpa2VycyI6W10sInVzZXIiOnsiYWNjb3VudF9iYWRnZXMiOltdLCJhY2NvdW50X3R5cGUiOjMsImZhbl9jbHViX2luZm8iOnsiYXV0b3NhdmVfdG9fZXhjbHVzaXZlX2hpZ2hsaWdodCI6bnVsbCwiY29ubmVjdGVkX21lbWJlcl9jb3VudCI6bnVsbCwiZmFuX2NsdWJfaWQiOm51bGwsImZhbl9jbHViX25hbWUiOm51bGwsImZhbl9jb25zaWRlcmF0aW9uX3BhZ2VfcmV2YW1wX2VsaWdpYmxpdHkiOm51bGwsImhhc19jcmVhdGVkX3NzYyI6bnVsbCwiaGFzX2Vub3VnaF9zdWJzY3JpYmVyc19mb3Jfc3NjIjpudWxsLCJpc19mYW5fY2x1Yl9naWZ0aW5nX2VsaWdpYmxlIjpudWxsLCJpc19mYW5fY2x1Yl9yZWZlcnJhbF9lbGlnaWJsZSI6bnVsbCwiaXNfZnJlZV90cmlhbF9lbGlnaWJsZSI6bnVsbCwibGFyZ2VzdF9wdWJsaWNfYmNfaWQiOm51bGwsInN1YnNjcmliZXJfY291bnQiOm51bGx9LCJmYmlkX3YyIjoxNzg0MTQ2ODExNzk4NjE0MSwiZmVlZF9wb3N0X3Jlc2hhcmVfZGlzYWJsZWQiOmZhbHNlLCJmdWxsX25hbWUiOiJBU01SIHwg2K7Yp9mw2LfYld264KOu4oCM2KvZmdub2KfZsCB8INin24wg2KfYsyDYp9mFINii2LEiLCJoYXNfYW5vbnltb3VzX3Byb2ZpbGVfcGljdHVyZSI6ZmFsc2UsImlkIjoiNjgwNDkxMzQ1OTkiLCJpc19mYXZvcml0ZSI6ZmFsc2UsImlzX3ByaXZhdGUiOmZhbHNlLCJpc191bnB1Ymxpc2hlZCI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicHJvZmlsZV9waWNfaWQiOiIzNDI0NTUwMDU3Mzk0MTk1NzE4XzY4MDQ5MTM0NTk5IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzQ1MzczMzk4NF80NTIyNjk0NTQzMTQxMjlfMzY2MDA0NTM2OTU2NTg2ODY4MF9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAxJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPU50dEpMOVNKcXhnUTdrTnZnR1FpcUQ5Jl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQUZZYnVKQmRWTThoVEYzSTFzUVJDR0pEU1d5MXJ0R2tuQ2xNeE5CN1diOGcmb2U9NjdBQkU5QUQmX25jX3NpZD0yMDExYWQiLCJzaG93X2FjY291bnRfdHJhbnNwYXJlbmN5X2RldGFpbHMiOnRydWUsInRoaXJkX3BhcnR5X2Rvd25sb2Fkc19lbmFibGVkIjoxLCJ0cmFuc3BhcmVuY3lfcHJvZHVjdF9lbmFibGVkIjpmYWxzZSwidXNlcm5hbWUiOiJraGF0aXNhd19hc21yIn0sInZpZGVvX2NvZGVjIjoiYXZjMS42NDAwMWYiLCJ2aWRlb19kdXJhdGlvbiI6MzYuOTQyLCJ2aWRlb19zdGlja2VyX2xvY2FsZXMiOltdLCJ2aWRlb191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL28xL3YvdDE2L2YyL204Ni9BUU5ncVRYLTg1V2hpVDVIV2tWMy1lZmprWkJkTS1lWmVRaktqTUMyaTRoNU9BakZtVnd1THZ0S2RxQVpSdV9MVjlqV01DZnVvd1VGQUtMNU83TWVUZHlVMWZtUzdjem1kdGVDdTdRLm1wND9lZmc9ZXlKNGNIWmZZWE56WlhSZmFXUWlPakV5TlRBMk9UQXdNVGswTkRFd05URXNJblpsYm1OdlpHVmZkR0ZuSWpvaWVIQjJYM0J5YjJkeVpYTnphWFpsTGtsT1UxUkJSMUpCVFM1RFRFbFFVeTVETXk0M01qQXVaR0Z6YUY5aVlYTmxiR2x1WlY4eFgzWXhJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1BZGl5dEhVekRkT3YyTEFQS3hIV3dqR0ZHbHYyMXV4dzhkenpYb0JIdEhjWUZ2VVdleUxSMzFCQ21Pakx5anh0NG9rJnZzPTZhNGUwYTk3ZWZhMDVlMGYmX25jX3ZzPUhCa3NGUUlZVW1sblgzaHdkbDl5WldWc2MxOXdaWEp0WVc1bGJuUmZjM0pmY0hKdlpDODVNelE0TWpVeE5FTTJSamxGTlRsR05ERTJRVEE1TmpFMk16SXdNa0ZDTmw5MmFXUmxiMTlrWVhOb2FXNXBkQzV0Y0RRVkFBTElBUUFWQWhnNmNHRnpjM1JvY205MVoyaGZaWFpsY25OMGIzSmxMMGRKYjNSMVFuTnZaMFJ1TFRFMWEyUkJVR3BIWlZaeFJWOUlXblZpY1Y5RlFVRkJSaFVDQXNnQkFDZ0FHQUFiQW9nSGRYTmxYMjlwYkFFeEVuQnliMmR5WlhOemFYWmxYM0psWTJsd1pRRXhGUUFBSnJibXFlWGUzN2dFRlFJb0FrTXpMQmRBUW5kc2kwT1ZnUmdTWkdGemFGOWlZWE5sYkdsdVpWOHhYM1l4RVFCMV9nY0EmY2NiPTktNCZvaD0wMF9BWUEzZ21USi04bzd0TDl5TzhMN0hMRXJ3WGZGQUJkTGtpY3BzRTZSbHB4dEhnJm9lPTY3QTdDQzA1Jl9uY19zaWQ9MWQ1NzZkIiwidmlkZW9fdmVyc2lvbnMiOlt7ImJhbmR3aWR0aCI6MTA0NzA5MCwiaGVpZ2h0IjoxMjgwLCJpZCI6IjE1NDg4NDgwMzI1MDEyMjN2IiwidHlwZSI6MTAxLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL28xL3YvdDE2L2YyL204Ni9BUU5ncVRYLTg1V2hpVDVIV2tWMy1lZmprWkJkTS1lWmVRaktqTUMyaTRoNU9BakZtVnd1THZ0S2RxQVpSdV9MVjlqV01DZnVvd1VGQUtMNU83TWVUZHlVMWZtUzdjem1kdGVDdTdRLm1wND9lZmc9ZXlKNGNIWmZZWE56WlhSZmFXUWlPakV5TlRBMk9UQXdNVGswTkRFd05URXNJblpsYm1OdlpHVmZkR0ZuSWpvaWVIQjJYM0J5YjJkeVpYTnphWFpsTGtsT1UxUkJSMUpCVFM1RFRFbFFVeTVETXk0M01qQXVaR0Z6YUY5aVlYTmxiR2x1WlY4eFgzWXhJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1BZGl5dEhVekRkT3YyTEFQS3hIV3dqR0ZHbHYyMXV4dzhkenpYb0JIdEhjWUZ2VVdleUxSMzFCQ21Pakx5anh0NG9rJnZzPTZhNGUwYTk3ZWZhMDVlMGYmX25jX3ZzPUhCa3NGUUlZVW1sblgzaHdkbDl5WldWc2MxOXdaWEp0WVc1bGJuUmZjM0pmY0hKdlpDODVNelE0TWpVeE5FTTJSamxGTlRsR05ERTJRVEE1TmpFMk16SXdNa0ZDTmw5MmFXUmxiMTlrWVhOb2FXNXBkQzV0Y0RRVkFBTElBUUFWQWhnNmNHRnpjM1JvY205MVoyaGZaWFpsY25OMGIzSmxMMGRKYjNSMVFuTnZaMFJ1TFRFMWEyUkJVR3BIWlZaeFJWOUlXblZpY1Y5RlFVRkJSaFVDQXNnQkFDZ0FHQUFiQW9nSGRYTmxYMjlwYkFFeEVuQnliMmR5WlhOemFYWmxYM0psWTJsd1pRRXhGUUFBSnJibXFlWGUzN2dFRlFJb0FrTXpMQmRBUW5kc2kwT1ZnUmdTWkdGemFGOWlZWE5sYkdsdVpWOHhYM1l4RVFCMV9nY0EmY2NiPTktNCZvaD0wMF9BWUEzZ21USi04bzd0TDl5TzhMN0hMRXJ3WGZGQUJkTGtpY3BzRTZSbHB4dEhnJm9lPTY3QTdDQzA1Jl9uY19zaWQ9MWQ1NzZkIiwid2lkdGgiOjcyMH0seyJiYW5kd2lkdGgiOjEwNDcwOTAsImhlaWdodCI6MTI4MCwiaWQiOiIxNTQ4ODQ4MDMyNTAxMjIzdiIsInR5cGUiOjEwMiwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS9vMS92L3QxNi9mMi9tODYvQVFOZ3FUWC04NVdoaVQ1SFdrVjMtZWZqa1pCZE0tZVplUWpLak1DMmk0aDVPQWpGbVZ3dUx2dEtkcUFaUnVfTFY5aldNQ2Z1b3dVRkFLTDVPN01lVGR5VTFmbVM3Y3ptZHRlQ3U3US5tcDQ/ZWZnPWV5SjRjSFpmWVhOelpYUmZhV1FpT2pFeU5UQTJPVEF3TVRrME5ERXdOVEVzSW5abGJtTnZaR1ZmZEdGbklqb2llSEIyWDNCeWIyZHlaWE56YVhabExrbE9VMVJCUjFKQlRTNURURWxRVXk1RE15NDNNakF1WkdGemFGOWlZWE5sYkdsdVpWOHhYM1l4SW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMCZfbmNfb2M9QWRpeXRIVXpEZE92MkxBUEt4SFd3akdGR2x2MjF1eHc4ZHp6WG9CSHRIY1lGdlVXZXlMUjMxQkNtT2pMeWp4dDRvayZ2cz02YTRlMGE5N2VmYTA1ZTBmJl9uY192cz1IQmtzRlFJWVVtbG5YM2h3ZGw5eVpXVnNjMTl3WlhKdFlXNWxiblJmYzNKZmNISnZaQzg1TXpRNE1qVXhORU0yUmpsRk5UbEdOREUyUVRBNU5qRTJNekl3TWtGQ05sOTJhV1JsYjE5a1lYTm9hVzVwZEM1dGNEUVZBQUxJQVFBVkFoZzZjR0Z6YzNSb2NtOTFaMmhmWlhabGNuTjBiM0psTDBkSmIzUjFRbk52WjBSdUxURTFhMlJCVUdwSFpWWnhSVjlJV25WaWNWOUZRVUZCUmhVQ0FzZ0JBQ2dBR0FBYkFvZ0hkWE5sWDI5cGJBRXhFbkJ5YjJkeVpYTnphWFpsWDNKbFkybHdaUUV4RlFBQUpyYm1xZVhlMzdnRUZRSW9Ba016TEJkQVFuZHNpME9WZ1JnU1pHRnphRjlpWVhObGJHbHVaVjh4WDNZeEVRQjFfZ2NBJmNjYj05LTQmb2g9MDBfQVlBM2dtVEotOG83dEw5eU84TDdITEVyd1hmRkFCZExraWNwc0U2UmxweHRIZyZvZT02N0E3Q0MwNSZfbmNfc2lkPTFkNTc2ZCIsIndpZHRoIjo3MjB9LHsiYmFuZHdpZHRoIjoxMDQ3MDkwLCJoZWlnaHQiOjEyODAsImlkIjoiMTU0ODg0ODAzMjUwMTIyM3YiLCJ0eXBlIjoxMDMsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vbzEvdi90MTYvZjIvbTg2L0FRTmdxVFgtODVXaGlUNUhXa1YzLWVmamtaQmRNLWVaZVFqS2pNQzJpNGg1T0FqRm1Wd3VMdnRLZHFBWlJ1X0xWOWpXTUNmdW93VUZBS0w1TzdNZVRkeVUxZm1TN2N6bWR0ZUN1N1EubXA0P2VmZz1leUo0Y0haZllYTnpaWFJmYVdRaU9qRXlOVEEyT1RBd01UazBOREV3TlRFc0luWmxibU52WkdWZmRHRm5Jam9pZUhCMlgzQnliMmR5WlhOemFYWmxMa2xPVTFSQlIxSkJUUzVEVEVsUVV5NURNeTQzTWpBdVpHRnphRjlpWVhObGJHbHVaVjh4WDNZeEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDAmX25jX29jPUFkaXl0SFV6RGRPdjJMQVBLeEhXd2pHRkdsdjIxdXh3OGR6elhvQkh0SGNZRnZVV2V5TFIzMUJDbU9qTHlqeHQ0b2smdnM9NmE0ZTBhOTdlZmEwNWUwZiZfbmNfdnM9SEJrc0ZRSVlVbWxuWDNod2RsOXlaV1ZzYzE5d1pYSnRZVzVsYm5SZmMzSmZjSEp2WkM4NU16UTRNalV4TkVNMlJqbEZOVGxHTkRFMlFUQTVOakUyTXpJd01rRkNObDkyYVdSbGIxOWtZWE5vYVc1cGRDNXRjRFFWQUFMSUFRQVZBaGc2Y0dGemMzUm9jbTkxWjJoZlpYWmxjbk4wYjNKbEwwZEpiM1IxUW5OdlowUnVMVEUxYTJSQlVHcEhaVlp4UlY5SVduVmljVjlGUVVGQlJoVUNBc2dCQUNnQUdBQWJBb2dIZFhObFgyOXBiQUV4RW5CeWIyZHlaWE56YVhabFgzSmxZMmx3WlFFeEZRQUFKcmJtcWVYZTM3Z0VGUUlvQWtNekxCZEFRbmRzaTBPVmdSZ1NaR0Z6YUY5aVlYTmxiR2x1WlY4eFgzWXhFUUIxX2djQSZjY2I9OS00Jm9oPTAwX0FZQTNnbVRKLThvN3RMOXlPOEw3SExFcndYZkZBQmRMa2ljcHNFNlJscHh0SGcmb2U9NjdBN0NDMDUmX25jX3NpZD0xZDU3NmQiLCJ3aWR0aCI6NzIwfV0sInZpZXdfc3RhdGVfaXRlbV90eXBlIjoxMjh9LHsiYm9vc3RfdW5hdmFpbGFibGVfaWRlbnRpZmllciI6bnVsbCwiYm9vc3RfdW5hdmFpbGFibGVfcmVhc29uIjpudWxsLCJib29zdF91bmF2YWlsYWJsZV9yZWFzb25fdjIiOm51bGwsImNhbl9yZXBseSI6ZmFsc2UsImNhbl9yZXNoYXJlIjp0cnVlLCJjYW5fc2F2ZSI6dHJ1ZSwiY2FwdGlvbiI6eyJjcmVhdGVkX2F0IjoxNjAzOTcxMDM4LCJjcmVhdGVkX2F0X3V0YyI6MTYwMzk3MTAzOCwiZGlkX3JlcG9ydF9hc19zcGFtIjpmYWxzZSwiaGFzX3RyYW5zbGF0aW9uIjp0cnVlLCJoYXNodGFncyI6WyIjaGFsbG93ZWVuIiwiI3l0Y2hhbm5lbCIsIiNkaXkiLCIjY2h1cGFjaHVwcyIsIiNoYWxsb3dlZW5fc25hY2tzIiwiI2hhbGxvd2Vlbl9wYXJ0eSIsIiNwdW1wa2luIl0sImlkIjoyNDMwNjA3Njg5NDQyNTAzODc4LCJpc19jb3ZlcmVkIjpmYWxzZSwiaXNfcmFua2VkX2NvbW1lbnQiOmZhbHNlLCJtZW50aW9ucyI6WyJAY2h1cGFjaHVwc3BsIl0sInBrIjoiMTc4NjgxODYyMzkwODI5MzIiLCJwcml2YXRlX3JlcGx5X3N0YXR1cyI6MCwic2hhcmVfZW5hYmxlZCI6ZmFsc2UsInRleHQiOiJSZWFkeSEgU2V0ISBGaWxtIVxuS29sZWpueSBmaWxtaWsganXFvCB3IHByenlnb3Rvd2FuaXUg8J+Ru1xuXG5OYSBwbGFuaWUgbmF3ZXQgc3RyYXN6bmEgQ2h1cGEgY3phY2hhIPCfkpUgQGNodXBhY2h1cHNwbFxuXG4jaGFsbG93ZWVuICN5dGNoYW5uZWwgI2RpeSAjY2h1cGFjaHVwcyAjaGFsbG93ZWVuX3NuYWNrcyAjaGFsbG93ZWVuX3BhcnR5ICNwdW1wa2luIiwidHlwZSI6MSwidXNlciI6eyJmYmlkX3YyIjoxNzg0MTQ0Mzc2MzM5MjU3MiwiZnVsbF9uYW1lIjoiIiwiaWQiOiI0Mzg2MDU3ODc3OSIsImlzX3ByaXZhdGUiOmZhbHNlLCJpc191bnB1Ymxpc2hlZCI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicHJvZmlsZV9waWNfaWQiOiIyNDI2NDY1MDUyMjg4NjA3NTU4XzQzODYwNTc4Nzc5IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzEyMjI3MTQwNV8zNjc2OTQ5NjYyMzY5Mjk0XzUzNTIwOTYxMTg4NzM4NTE2NjJfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1kTzhmRThaSU4zTVE3a052Z0V3X0wxMCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUQ2ODhPOU1xTnZDM0FXaE8zWVdBTnJfSUplRGluQlg4cW92dzd3RWFpaWpRJm9lPTY3QUJERTAwJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiI0Y3JhenlfaGFuZHMifSwidXNlcl9pZCI6NDM4NjA1Nzg3Nzl9LCJjYXB0aW9uX2lzX2VkaXRlZCI6ZmFsc2UsImNsaXBzX3RhYl9waW5uZWRfdXNlcl9pZHMiOltdLCJjb2F1dGhvcl9wcm9kdWNlcl9jYW5fc2VlX29yZ2FuaWNfaW5zaWdodHMiOmZhbHNlLCJjb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJjb2RlIjoiQ0c3UU5ETmphekciLCJjb21tZW50X2NvdW50IjowLCJjb21tZW50X2luZm9ybV90cmVhdG1lbnQiOnsiYWN0aW9uX3R5cGUiOm51bGwsInNob3VsZF9oYXZlX2luZm9ybV90cmVhdG1lbnQiOmZhbHNlLCJ0ZXh0IjoiIiwidXJsIjpudWxsfSwiY29tbWVudF90aHJlYWRpbmdfZW5hYmxlZCI6dHJ1ZSwiY29tbWVyY2lhbGl0eV9zdGF0dXMiOiJub3RfY29tbWVyY2lhbCIsImNyb3NzcG9zdF9tZXRhZGF0YSI6eyJmYl9kb3duc3RyZWFtX3VzZV94cG9zdF9tZXRhZGF0YSI6eyJkb3duc3RyZWFtX3VzZV94cG9zdF9kZW55X3JlYXNvbiI6Ik5PTkUifX0sImRlbGV0ZWRfcmVhc29uIjowLCJkZXZpY2VfdGltZXN0YW1wIjoxMjk5NjIxOTUxNDYyMDMsImZiX2FnZ3JlZ2F0ZWRfY29tbWVudF9jb3VudCI6MCwiZmJfYWdncmVnYXRlZF9saWtlX2NvdW50IjowLCJmYl91c2VyX3RhZ3MiOnsiaW4iOltdfSwiZmJpZCI6IjE3ODY4MTg2MjMzMDgyOTMyIiwiZmVhdHVyZWRfcHJvZHVjdHMiOltdLCJmZWVkX3R5cGUiOiJtZWRpYSIsImZpbHRlcl90eXBlIjoxMTIsImZ1bmRyYWlzZXJfdGFnIjp7Imhhc19zdGFuZGFsb25lX2Z1bmRyYWlzZXIiOmZhbHNlfSwiZ2VuX2FpX2RldGVjdGlvbl9tZXRob2QiOnsiZGV0ZWN0aW9uX21ldGhvZCI6Ik5PTkUifSwiaGFzX2hpZ2hfcmlza19nZW5fYWlfaW5mb3JtX3RyZWF0bWVudCI6ZmFsc2UsImhhc19saWtlZCI6ZmFsc2UsImhhc19tb3JlX2NvbW1lbnRzIjpmYWxzZSwiaGFzX3ByaXZhdGVseV9saWtlZCI6ZmFsc2UsImhhc19zaGFyZWRfdG9fZmIiOjAsImhhc192aWV3c19mZXRjaGluZyI6dHJ1ZSwiaWQiOiIyNDMwNjA3Njg5NDQyNTAzODc4XzQzODYwNTc4Nzc5IiwiaWdfbWVkaWFfc2hhcmluZ19kaXNhYmxlZCI6ZmFsc2UsImlnYmlvX3Byb2R1Y3QiOm51bGwsImltYWdlX3ZlcnNpb25zIjp7Iml0ZW1zIjpbeyJoZWlnaHQiOjEwODAsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvMTIyODg1MjAxXzI3OTQwNjA1NjY1ODA1Ml8yNTMyNTgyNDgxODA4OTI1ODBfbi5qcGc/c2U9NyZzdHA9ZHN0LWpwZ19lMzVfdHQ2JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkltbHRZV2RsWDNWeWJHZGxiaTR4TURnd2VERXdPREF1YzJSeUxtWXlPVE0xTUM1a1pXWmhkV3gwWDJsdFlXZGxJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA4Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPXhVRkROLXBVWm5FUTdrTnZnSDUtR1htJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01JmlnX2NhY2hlX2tleT1NalF6TURZd056WTRPVFEwTWpVd016ZzNPQSUzRCUzRC4zLWNjYjctNSZvaD0wMF9BWUN2b0FhcE1ISFkzTHJRRkoxVzNETDYyLUFrbFEtMko0cWRkNlQ3OWk0dVJ3Jm9lPTY3QUJDMUVDJl9uY19zaWQ9MjAxMWFkIiwid2lkdGgiOjEwODB9LHsiaGVpZ2h0Ijo0ODAsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvMTIyODg1MjAxXzI3OTQwNjA1NjY1ODA1Ml8yNTMyNTgyNDgxODA4OTI1ODBfbi5qcGc/c3RwPWRzdC1qcGdfZTM1X3M0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1EZ3dlREV3T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwOCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz14VUZETi1wVVpuRVE3a052Z0g1LUdYbSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1EWXdOelk0T1RRME1qVXdNemczT0ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlCSUQ4YmVGOUE5VXhNT3Z2cEphUDhjc09Ba0tCaDNxelVnU1U4YkZwZGdadyZvZT02N0FCQzFFQyZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XX0sImludGVncml0eV9yZXZpZXdfZGVjaXNpb24iOiJwZW5kaW5nIiwiaW52aXRlZF9jb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJpc19jb21tZW50c19naWZfY29tcG9zZXJfZW5hYmxlZCI6dHJ1ZSwiaXNfY3V0b3V0X3N0aWNrZXJfYWxsb3dlZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2NvbnRlbnRfZm9yX3Bvc3Rfcm9sbF9hZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9tZWRpYV9ub3RlX3JlY3NfbnV4IjpmYWxzZSwiaXNfZWxpZ2libGVfZm9yX21ldGFfYWlfc2hhcmUiOmZhbHNlLCJpc19pbl9wcm9maWxlX2dyaWQiOmZhbHNlLCJpc19vcGVuX3RvX3B1YmxpY19zdWJtaXNzaW9uIjpmYWxzZSwiaXNfb3JnYW5pY19wcm9kdWN0X3RhZ2dpbmdfZWxpZ2libGUiOnRydWUsImlzX3BhaWRfcGFydG5lcnNoaXAiOmZhbHNlLCJpc19waW5uZWQiOmZhbHNlLCJpc19wb3N0X2xpdmVfY2xpcHNfbWVkaWEiOmZhbHNlLCJpc19yZXNoYXJlX29mX3RleHRfcG9zdF9hcHBfbWVkaWFfaW5faWciOmZhbHNlLCJpc19zb2NpYWxfdWZpX2Rpc2FibGVkIjpmYWxzZSwiaXNfdGFnZ2VkX21lZGlhX3NoYXJlZF90b192aWV3ZXJfcHJvZmlsZV9ncmlkIjpmYWxzZSwiaXNfdW5pZmllZF92aWRlbyI6ZmFsc2UsImlzX3ZpZGVvIjpmYWxzZSwibGF5b3V0X3R5cGUiOiJtZWRpYV9ncmlkIiwibGlrZV9hbmRfdmlld19jb3VudHNfZGlzYWJsZWQiOmZhbHNlLCJsaWtlX2NvdW50Ijo1LCJsaWtlcnMiOlt7ImZ1bGxfbmFtZSI6Ikthcm9saW5hIEN6YWprb3dza2EiLCJpZCI6IjE2OTY2MjI0MDEiLCJpc19wcml2YXRlIjp0cnVlLCJpc192ZXJpZmllZCI6ZmFsc2UsInBrIjoxNjk2NjIyNDAxLCJwcm9maWxlX3BpY19pZCI6IjE1ODIwNjgwMzMxNjgzNTI4NzdfMTY5NjYyMjQwMSIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8yMDgzNzQwMF8xNjc0NjcwNTcxNDc0MTZfODkwNTAzMjQ4ODI1OTE1ODAxNl9hLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPU9IbkYyRTFTMXRVUTdrTnZnRmdteThXJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQ3Fmai15aHFEWUxJbnd2QkpYUW1iOWdCd3BGZnpTSmhtQUE3R0o4T1Z6UXcmb2U9NjdBQkVDMDgmX25jX3NpZD0yMDExYWQiLCJ1c2VybmFtZSI6Imtpa2EwNzAyIn0seyJmdWxsX25hbWUiOiJvZC5ub3ZhLmZhc2hpb24iLCJpZCI6IjE1MDEyMjQwMjciLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwayI6MTUwMTIyNDAyNywicHJvZmlsZV9waWNfaWQiOiIzMzQ1NTkwNzYzMDcxMzYyMzU5XzE1MDEyMjQwMjciLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvNDM3MTQ3ODEwXzQ0NjM0ODEyNzg3MjA1OV84NTkyNjgyMzk1NTg5NDg3NDUyX24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDcmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9NmFLZGg4cV9SWXdRN2tOdmdHM3BXWVYmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlCdUkwQ1FocXV2UDlDdnNSMXA0VUZRbnltdlFseVRmSndGU1YyZFQ0MTZaQSZvZT02N0FCRDNDOCZfbmNfc2lkPTIwMTFhZCIsInVzZXJuYW1lIjoib2Qubm92YS5mYXNoaW9uIn0seyJmdWxsX25hbWUiOiLFu2FuZXRhIEtyYXN6ZXdza2EiLCJpZCI6IjgxMDkxODcyNjgiLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwayI6ODEwOTE4NzI2OCwicHJvZmlsZV9waWNfaWQiOiIzMDA2MDQ0ODI1NDQ2NTAyNDM1XzgxMDkxODcyNjgiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvMzIzMDY2NzczXzUzMDAxMDgyOTA3NzQ5MF84ODA5NjExMTk0MDkwMjg2MzYyX24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMTAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9aEJoTTh3NTUzbGdRN2tOdmdGTERCbTUmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlCbldBRVFSM01qb3JmQ3Vic0IzMlM5eUx6RDMwUGpMZVIzQWF0VnVkU055QSZvZT02N0FCQzNGMSZfbmNfc2lkPTIwMTFhZCIsInVzZXJuYW1lIjoiemtyYXN6ZXdza2EifSx7ImZ1bGxfbmFtZSI6IkFnbmllc3prYSBLcnUiLCJpZCI6IjM0OTM3MjU1MDUzIiwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicGsiOjM0OTM3MjU1MDUzLCJwcm9maWxlX3BpY19pZCI6IjIzMDc3MTI0MTI5NjY3OTkyNjNfMzQ5MzcyNTUwNTMiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvOTcyNjMyMzdfODUyMTUyNzA1Mjg4MzQ3XzgzMzg2MTQ4NzI3MzIzMzYxMjhfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNyZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1ySDNfZmlVcWpYRVE3a052Z0VnV0FyaiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWURWcktmdmFyTUVWTFhXS2RDYnd3a3MwdmVDZUpaeDZvamRVT2sxVlRfOGJ3Jm9lPTY3QUJDQjlFJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJhZ25pZXN6a2Eua3J1In0seyJmdWxsX25hbWUiOiJLYXJv4pmm77iPIiwiaWQiOiIyMDk0MzU5Njk0IiwiaXNfcHJpdmF0ZSI6dHJ1ZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwayI6MjA5NDM1OTY5NCwicHJvZmlsZV9waWNfaWQiOiIzMjgxNTI1NTcyOTAyMzYzNzAwXzIwOTQzNTk2OTQiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvNDE5NTEzNTgzXzEwMzkzODY1NzczMzQyNTZfNzAxNzIzOTg2ODE1NzgyNDQxMl9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPVZ4aWhzd1dULWVNUTdrTnZnR1lSaDNTJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQTJmSDlyWWZoQmhRakVCVnFXa0dKamJXeUs0dUFmMGxPN2RRS3RiUGhEWkEmb2U9NjdBQkVDMUImX25jX3NpZD0yMDExYWQiLCJ1c2VybmFtZSI6ImNhcm9saW5lX2thcm8yMiJ9XSwibWFzaHVwX2luZm8iOnsiY2FuX3RvZ2dsZV9tYXNodXBzX2FsbG93ZWQiOmZhbHNlLCJmb3JtYXR0ZWRfbWFzaHVwc19jb3VudCI6bnVsbCwiaGFzX2JlZW5fbWFzaGVkX3VwIjpmYWxzZSwiaGFzX25vbm1pbWljYWJsZV9hZGRpdGlvbmFsX2F1ZGlvIjpmYWxzZSwiaXNfY3JlYXRvcl9yZXF1ZXN0aW5nX21hc2h1cCI6ZmFsc2UsImlzX2xpZ2h0X3dlaWdodF9jaGVjayI6dHJ1ZSwiaXNfbGlnaHRfd2VpZ2h0X3JldXNlX2FsbG93ZWRfY2hlY2siOmZhbHNlLCJpc19waXZvdF9wYWdlX2F2YWlsYWJsZSI6ZmFsc2UsImlzX3JldXNlX2FsbG93ZWQiOmZhbHNlLCJtYXNodXBfdHlwZSI6bnVsbCwibWFzaHVwc19hbGxvd2VkIjpmYWxzZSwibm9uX3ByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6MCwib3JpZ2luYWxfbWVkaWEiOm51bGwsInByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6bnVsbH0sIm1heF9udW1fdmlzaWJsZV9wcmV2aWV3X2NvbW1lbnRzIjoyLCJtZWRpYV9uYW1lIjoicG9zdCIsIm1lZGlhX25vdGVzIjp7Iml0ZW1zIjpbXX0sIm1lZGlhX3R5cGUiOjEsIm1ldGFfYWlfc3VnZ2VzdGVkX3Byb21wdHMiOltdLCJtdXNpY19tZXRhZGF0YSI6eyJhdWRpb19jYW5vbmljYWxfaWQiOiIwIiwiYXVkaW9fdHlwZSI6bnVsbCwibXVzaWNfaW5mbyI6bnVsbCwib3JpZ2luYWxfc291bmRfaW5mbyI6bnVsbCwicGlubmVkX21lZGlhX2lkcyI6bnVsbH0sIm9wZW5fY2Fyb3VzZWxfc2hvd19mb2xsb3dfYnV0dG9uIjpmYWxzZSwib3JpZ2luYWxfaGVpZ2h0IjoxMDgwLCJvcmlnaW5hbF93aWR0aCI6MTA4MCwib3duZXIiOnsiYWNjb3VudF9iYWRnZXMiOltdLCJhY2NvdW50X3R5cGUiOjEsImZhbl9jbHViX2luZm8iOnsiYXV0b3NhdmVfdG9fZXhjbHVzaXZlX2hpZ2hsaWdodCI6bnVsbCwiY29ubmVjdGVkX21lbWJlcl9jb3VudCI6bnVsbCwiZmFuX2NsdWJfaWQiOm51bGwsImZhbl9jbHViX25hbWUiOm51bGwsImZhbl9jb25zaWRlcmF0aW9uX3BhZ2VfcmV2YW1wX2VsaWdpYmxpdHkiOm51bGwsImhhc19jcmVhdGVkX3NzYyI6bnVsbCwiaGFzX2Vub3VnaF9zdWJzY3JpYmVyc19mb3Jfc3NjIjpudWxsLCJpc19mYW5fY2x1Yl9naWZ0aW5nX2VsaWdpYmxlIjpudWxsLCJpc19mYW5fY2x1Yl9yZWZlcnJhbF9lbGlnaWJsZSI6bnVsbCwiaXNfZnJlZV90cmlhbF9lbGlnaWJsZSI6bnVsbCwibGFyZ2VzdF9wdWJsaWNfYmNfaWQiOm51bGwsInN1YnNjcmliZXJfY291bnQiOm51bGx9LCJmYmlkX3YyIjoxNzg0MTQ0Mzc2MzM5MjU3MiwiZmVlZF9wb3N0X3Jlc2hhcmVfZGlzYWJsZWQiOmZhbHNlLCJmdWxsX25hbWUiOiIiLCJoYXNfYW5vbnltb3VzX3Byb2ZpbGVfcGljdHVyZSI6ZmFsc2UsImlkIjoiNDM4NjA1Nzg3NzkiLCJpc19mYXZvcml0ZSI6ZmFsc2UsImlzX3ByaXZhdGUiOmZhbHNlLCJpc191bnB1Ymxpc2hlZCI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicHJvZmlsZV9waWNfaWQiOiIyNDI2NDY1MDUyMjg4NjA3NTU4XzQzODYwNTc4Nzc5IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzEyMjI3MTQwNV8zNjc2OTQ5NjYyMzY5Mjk0XzUzNTIwOTYxMTg4NzM4NTE2NjJfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1kTzhmRThaSU4zTVE3a052Z0V3X0wxMCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUQ2ODhPOU1xTnZDM0FXaE8zWVdBTnJfSUplRGluQlg4cW92dzd3RWFpaWpRJm9lPTY3QUJERTAwJl9uY19zaWQ9MjAxMWFkIiwic2hvd19hY2NvdW50X3RyYW5zcGFyZW5jeV9kZXRhaWxzIjp0cnVlLCJ0aGlyZF9wYXJ0eV9kb3dubG9hZHNfZW5hYmxlZCI6MCwidHJhbnNwYXJlbmN5X3Byb2R1Y3RfZW5hYmxlZCI6ZmFsc2UsInVzZXJuYW1lIjoiNGNyYXp5X2hhbmRzIn0sInBrIjoyNDMwNjA3Njg5NDQyNTAzODc4LCJwcmV2aWV3X2NvbW1lbnRzIjpbXSwicHJvZHVjdF9zdWdnZXN0aW9ucyI6W10sInByb2R1Y3RfdHlwZSI6ImZlZWQiLCJzaGFyZV9jb3VudF9kaXNhYmxlZCI6ZmFsc2UsInNoYXJpbmdfZnJpY3Rpb25faW5mbyI6eyJibG9rc19hcHBfdXJsIjpudWxsLCJzaGFyaW5nX2ZyaWN0aW9uX3BheWxvYWQiOm51bGwsInNob3VsZF9oYXZlX3NoYXJpbmdfZnJpY3Rpb24iOmZhbHNlfSwic2hvcF9yb3V0aW5nX3VzZXJfaWQiOm51bGwsInNob3VsZF9zaG93X2F1dGhvcl9wb2dfZm9yX3RhZ2dlZF9tZWRpYV9zaGFyZWRfdG9fcHJvZmlsZV9ncmlkIjpmYWxzZSwic3Vic2NyaWJlX2N0YV92aXNpYmxlIjpmYWxzZSwidGFrZW5fYXQiOjE2MDM5NzEwMzcsInRodW1ibmFpbF91cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjg4NTIwMV8yNzk0MDYwNTY2NTgwNTJfMjUzMjU4MjQ4MTgwODkyNTgwX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1EZ3dlREV3T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwOCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz14VUZETi1wVVpuRVE3a052Z0g1LUdYbSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1EWXdOelk0T1RRME1qVXdNemczT0ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlDdm9BYXBNSEhZM0xyUUZKMVczREw2Mi1Ba2xRLTJKNHFkZDZUNzlpNHVSdyZvZT02N0FCQzFFQyZfbmNfc2lkPTIwMTFhZCIsInRpbWVsaW5lX3Bpbm5lZF91c2VyX2lkcyI6W10sInRvcF9saWtlcnMiOltdLCJ1c2VyIjp7ImFjY291bnRfYmFkZ2VzIjpbXSwiYWNjb3VudF90eXBlIjoxLCJmYW5fY2x1Yl9pbmZvIjp7ImF1dG9zYXZlX3RvX2V4Y2x1c2l2ZV9oaWdobGlnaHQiOm51bGwsImNvbm5lY3RlZF9tZW1iZXJfY291bnQiOm51bGwsImZhbl9jbHViX2lkIjpudWxsLCJmYW5fY2x1Yl9uYW1lIjpudWxsLCJmYW5fY29uc2lkZXJhdGlvbl9wYWdlX3JldmFtcF9lbGlnaWJsaXR5IjpudWxsLCJoYXNfY3JlYXRlZF9zc2MiOm51bGwsImhhc19lbm91Z2hfc3Vic2NyaWJlcnNfZm9yX3NzYyI6bnVsbCwiaXNfZmFuX2NsdWJfZ2lmdGluZ19lbGlnaWJsZSI6bnVsbCwiaXNfZmFuX2NsdWJfcmVmZXJyYWxfZWxpZ2libGUiOm51bGwsImlzX2ZyZWVfdHJpYWxfZWxpZ2libGUiOm51bGwsImxhcmdlc3RfcHVibGljX2JjX2lkIjpudWxsLCJzdWJzY3JpYmVyX2NvdW50IjpudWxsfSwiZmJpZF92MiI6MTc4NDE0NDM3NjMzOTI1NzIsImZlZWRfcG9zdF9yZXNoYXJlX2Rpc2FibGVkIjpmYWxzZSwiZnVsbF9uYW1lIjoiIiwiaGFzX2Fub255bW91c19wcm9maWxlX3BpY3R1cmUiOmZhbHNlLCJpZCI6IjQzODYwNTc4Nzc5IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMjQyNjQ2NTA1MjI4ODYwNzU1OF80Mzg2MDU3ODc3OSIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8xMjIyNzE0MDVfMzY3Njk0OTY2MjM2OTI5NF81MzUyMDk2MTE4ODczODUxNjYyX24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMTAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9ZE84ZkU4WklOM01RN2tOdmdFd19MMTAmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlENjg4TzlNcU52QzNBV2hPM1lXQU5yX0lKZURpbkJYOHFvdnc3d0VhaWlqUSZvZT02N0FCREUwMCZfbmNfc2lkPTIwMTFhZCIsInNob3dfYWNjb3VudF90cmFuc3BhcmVuY3lfZGV0YWlscyI6dHJ1ZSwidGhpcmRfcGFydHlfZG93bmxvYWRzX2VuYWJsZWQiOjAsInRyYW5zcGFyZW5jeV9wcm9kdWN0X2VuYWJsZWQiOmZhbHNlLCJ1c2VybmFtZSI6IjRjcmF6eV9oYW5kcyJ9LCJ2aWRlb19zdGlja2VyX2xvY2FsZXMiOltdfSx7ImJvb3N0X3VuYXZhaWxhYmxlX2lkZW50aWZpZXIiOm51bGwsImJvb3N0X3VuYXZhaWxhYmxlX3JlYXNvbiI6bnVsbCwiYm9vc3RfdW5hdmFpbGFibGVfcmVhc29uX3YyIjpudWxsLCJjYW5fcmVwbHkiOmZhbHNlLCJjYW5fcmVzaGFyZSI6dHJ1ZSwiY2FuX3NhdmUiOnRydWUsImNhcHRpb24iOnsiY3JlYXRlZF9hdCI6MTUzODg0MTUwNiwiY3JlYXRlZF9hdF91dGMiOjE1Mzg4NDE1MDYsImRpZF9yZXBvcnRfYXNfc3BhbSI6ZmFsc2UsImhhc190cmFuc2xhdGlvbiI6dHJ1ZSwiaGFzaHRhZ3MiOlsiI2hhbGxvd2Vlbl9raWRzIiwiI2hhbGxvd2Vlbl9zbmFja3MiLCIjc3BpZGVyX2RvbnV0cyIsIiNjdXRlX2Zvb2QiLCIja2lkc19zbmFja3MiLCIjZG9udXRzIiwiI86zzrnOsV/Otc69zrFfzr3Ouc66zr/Ou86xX86zzrnOvc6/zr3PhM6xzrlfzr/Ou86xIiwiI2dyZWVrbW9tYmxvZ2dlcnNjb21tdW5pdHkiLCIjZ3JlZWtibG9nZ2Vyc2NvbW11bml0eSIsIiNtb21ibG9nZ2VyIl0sImlkIjoxODg0MjYxNTgyMDE4MjAzNjIzLCJpc19jb3ZlcmVkIjpmYWxzZSwiaXNfcmFua2VkX2NvbW1lbnQiOmZhbHNlLCJtZW50aW9ucyI6W10sInBrIjoiMTc5ODY0NzA1NDQwNDM4NzAiLCJwcml2YXRlX3JlcGx5X3N0YXR1cyI6MCwic2hhcmVfZW5hYmxlZCI6ZmFsc2UsInRleHQiOiLOms6xzrkgzrrOrM+Az4nPgiDOrc+Ez4POuSDPhM6/IM6yzrHPgc61z4TPjCDOsc+Azr/Os861z4XOvM6xz4TOuc69z4wgz4POvc6xzrouLi4gzrzOtc+EzrHOvM6/z4HPhs+Ozr3Otc+EzrHOuSDPg861IM6xz4HOsc+Hzr3Ovy3Ovc+Ezr/Ovc6xz4QhISEgzqPOv8+Nz4DOtc+BIM69z4zPg8+EzrnOvM6/IM66zrHOuSDOtM65zrHPg866zrXOtM6xz4PPhM65zrrPjCEhICNoYWxsb3dlZW5fa2lkcyAjaGFsbG93ZWVuX3NuYWNrcyAjc3BpZGVyX2RvbnV0cyAjY3V0ZV9mb29kICNraWRzX3NuYWNrcyAjZG9udXRzICAjzrPOuc6xX861zr3OsV/Ovc65zrrOv867zrFfzrPOuc69zr/Ovc+EzrHOuV/Ov867zrEgI2dyZWVrbW9tYmxvZ2dlcnNjb21tdW5pdHkgI2dyZWVrYmxvZ2dlcnNjb21tdW5pdHkgI21vbWJsb2dnZXIiLCJ0eXBlIjoxLCJ1c2VyIjp7ImZiaWRfdjIiOjE3ODQxNDAwODY2MDM1NDgyLCJmdWxsX25hbWUiOiJFbHBpZGEgVG91dmUiLCJpZCI6IjE2MzA4NzY4NjciLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMzU1NjQ2NjA5MzgwMDY1NTAwOV8xNjMwODc2ODY3IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzQ3NTgyMDY0MV80MDU5MjIyMzU5MDAzNDBfMzM1NDU0OTE2NzUwMzkxNzY1MV9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPUJKNWpqZ0kxUzF3UTdrTnZnRWE4Y2lzJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQVEyUGxkQlNrZ0lpbF92ZWl4YVZTNmE2WlJnczFrX2ZtZzktMkplcjNsWVEmb2U9NjdBQkM2MUUmX25jX3NpZD0yMDExYWQiLCJ1c2VybmFtZSI6ImVscGlkYV90b3V2ZSJ9LCJ1c2VyX2lkIjoxNjMwODc2ODY3fSwiY2FwdGlvbl9pc19lZGl0ZWQiOmZhbHNlLCJjbGlwc190YWJfcGlubmVkX3VzZXJfaWRzIjpbXSwiY29hdXRob3JfcHJvZHVjZXJfY2FuX3NlZV9vcmdhbmljX2luc2lnaHRzIjpmYWxzZSwiY29hdXRob3JfcHJvZHVjZXJzIjpbXSwiY29kZSI6IkJvbVBlejBIRV9uIiwiY29tbWVudF9jb3VudCI6NiwiY29tbWVudF9pbmZvcm1fdHJlYXRtZW50Ijp7ImFjdGlvbl90eXBlIjpudWxsLCJzaG91bGRfaGF2ZV9pbmZvcm1fdHJlYXRtZW50IjpmYWxzZSwidGV4dCI6IiIsInVybCI6bnVsbH0sImNvbW1lbnRfdGhyZWFkaW5nX2VuYWJsZWQiOnRydWUsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJjcm9zc3Bvc3RfbWV0YWRhdGEiOnsiZmJfZG93bnN0cmVhbV91c2VfeHBvc3RfbWV0YWRhdGEiOnsiZG93bnN0cmVhbV91c2VfeHBvc3RfZGVueV9yZWFzb24iOiJOT05FIn19LCJkZWxldGVkX3JlYXNvbiI6MCwiZGV2aWNlX3RpbWVzdGFtcCI6MTA3ODk5Njk3MDg3MTgxNCwiZmJfYWdncmVnYXRlZF9jb21tZW50X2NvdW50IjowLCJmYl9hZ2dyZWdhdGVkX2xpa2VfY291bnQiOjAsImZiX3VzZXJfdGFncyI6eyJpbiI6W119LCJmYmlkIjoiMTc5ODY0NzA1MzgwNDM4NzAiLCJmZWF0dXJlZF9wcm9kdWN0cyI6W10sImZlZWRfdHlwZSI6Im1lZGlhIiwiZmlsdGVyX3R5cGUiOjExMiwiZnVuZHJhaXNlcl90YWciOnsiaGFzX3N0YW5kYWxvbmVfZnVuZHJhaXNlciI6ZmFsc2V9LCJnZW5fYWlfZGV0ZWN0aW9uX21ldGhvZCI6eyJkZXRlY3Rpb25fbWV0aG9kIjoiTk9ORSJ9LCJoYXNfaGlnaF9yaXNrX2dlbl9haV9pbmZvcm1fdHJlYXRtZW50IjpmYWxzZSwiaGFzX2xpa2VkIjpmYWxzZSwiaGFzX21vcmVfY29tbWVudHMiOnRydWUsImhhc19wcml2YXRlbHlfbGlrZWQiOmZhbHNlLCJoYXNfc2hhcmVkX3RvX2ZiIjowLCJoYXNfdmlld3NfZmV0Y2hpbmciOnRydWUsImlkIjoiMTg4NDI2MTU4MjAxODIwMzYyM18xNjMwODc2ODY3IiwiaWdfbWVkaWFfc2hhcmluZ19kaXNhYmxlZCI6ZmFsc2UsImlnYmlvX3Byb2R1Y3QiOm51bGwsImltYWdlX3ZlcnNpb25zIjp7Iml0ZW1zIjpbeyJoZWlnaHQiOjgxMCwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE1LzQyNDA2MTA5XzI4Njc2MzI1ODU5NTQzMF81ODgyMzA4MDcyNzk3MDcyMDAyX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1EZ3dlRGd4TUM1elpISXVaakk0T0RVdVpHVm1ZWFZzZEY5cGJXRm5aU0o5Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz02d0gzVzJ6NENEZ1E3a052Z0duYkxLeiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TVRnNE5ESTJNVFU0TWpBeE9ESXdNell5TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlDcGZYc2ZtTDdBVmlKam5iSExtUy0zbTlUUnVnUkpzU0c2UktGLUM5NTU3dyZvZT02N0FCRDBGQiZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjoxMDgwfSx7ImhlaWdodCI6MzYwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTUvNDI0MDYxMDlfMjg2NzYzMjU4NTk1NDMwXzU4ODIzMDgwNzI3OTcwNzIwMDJfbi5qcGc/c3RwPWRzdC1qcGdfZTM1X3M0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1EZ3dlRGd4TUM1elpISXVaakk0T0RVdVpHVm1ZWFZzZEY5cGJXRm5aU0o5Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz02d0gzVzJ6NENEZ1E3a052Z0duYkxLeiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TVRnNE5ESTJNVFU0TWpBeE9ESXdNell5TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlEUV92WnJld3B3YzFDR2VfZ1ZNV21wd2pBa0g1OFFieXRqbVpxX0dPMkkxZyZvZT02N0FCRDBGQiZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XX0sImludGVncml0eV9yZXZpZXdfZGVjaXNpb24iOiJwZW5kaW5nIiwiaW52aXRlZF9jb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJpc19jb21tZW50c19naWZfY29tcG9zZXJfZW5hYmxlZCI6dHJ1ZSwiaXNfY3V0b3V0X3N0aWNrZXJfYWxsb3dlZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2NvbnRlbnRfZm9yX3Bvc3Rfcm9sbF9hZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9tZWRpYV9ub3RlX3JlY3NfbnV4IjpmYWxzZSwiaXNfZWxpZ2libGVfZm9yX21ldGFfYWlfc2hhcmUiOmZhbHNlLCJpc19pbl9wcm9maWxlX2dyaWQiOmZhbHNlLCJpc19vcGVuX3RvX3B1YmxpY19zdWJtaXNzaW9uIjpmYWxzZSwiaXNfb3JnYW5pY19wcm9kdWN0X3RhZ2dpbmdfZWxpZ2libGUiOnRydWUsImlzX3BhaWRfcGFydG5lcnNoaXAiOmZhbHNlLCJpc19waW5uZWQiOmZhbHNlLCJpc19wb3N0X2xpdmVfY2xpcHNfbWVkaWEiOmZhbHNlLCJpc19yZXNoYXJlX29mX3RleHRfcG9zdF9hcHBfbWVkaWFfaW5faWciOmZhbHNlLCJpc19zb2NpYWxfdWZpX2Rpc2FibGVkIjpmYWxzZSwiaXNfdGFnZ2VkX21lZGlhX3NoYXJlZF90b192aWV3ZXJfcHJvZmlsZV9ncmlkIjpmYWxzZSwiaXNfdW5pZmllZF92aWRlbyI6ZmFsc2UsImlzX3ZpZGVvIjpmYWxzZSwibGF5b3V0X3R5cGUiOiJtZWRpYV9ncmlkIiwibGlrZV9hbmRfdmlld19jb3VudHNfZGlzYWJsZWQiOmZhbHNlLCJsaWtlX2NvdW50Ijo3NywibWFzaHVwX2luZm8iOnsiY2FuX3RvZ2dsZV9tYXNodXBzX2FsbG93ZWQiOmZhbHNlLCJmb3JtYXR0ZWRfbWFzaHVwc19jb3VudCI6bnVsbCwiaGFzX2JlZW5fbWFzaGVkX3VwIjpmYWxzZSwiaGFzX25vbm1pbWljYWJsZV9hZGRpdGlvbmFsX2F1ZGlvIjpmYWxzZSwiaXNfY3JlYXRvcl9yZXF1ZXN0aW5nX21hc2h1cCI6ZmFsc2UsImlzX2xpZ2h0X3dlaWdodF9jaGVjayI6dHJ1ZSwiaXNfbGlnaHRfd2VpZ2h0X3JldXNlX2FsbG93ZWRfY2hlY2siOmZhbHNlLCJpc19waXZvdF9wYWdlX2F2YWlsYWJsZSI6ZmFsc2UsImlzX3JldXNlX2FsbG93ZWQiOmZhbHNlLCJtYXNodXBfdHlwZSI6bnVsbCwibWFzaHVwc19hbGxvd2VkIjpmYWxzZSwibm9uX3ByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6MCwib3JpZ2luYWxfbWVkaWEiOm51bGwsInByaXZhY3lfZmlsdGVyZWRfbWFzaHVwc19tZWRpYV9jb3VudCI6bnVsbH0sIm1heF9udW1fdmlzaWJsZV9wcmV2aWV3X2NvbW1lbnRzIjoyLCJtZWRpYV9uYW1lIjoicG9zdCIsIm1lZGlhX25vdGVzIjp7Iml0ZW1zIjpbXX0sIm1lZGlhX3R5cGUiOjEsIm1ldGFfYWlfc3VnZ2VzdGVkX3Byb21wdHMiOltdLCJtdXNpY19tZXRhZGF0YSI6eyJhdWRpb19jYW5vbmljYWxfaWQiOiIwIiwiYXVkaW9fdHlwZSI6bnVsbCwibXVzaWNfaW5mbyI6bnVsbCwib3JpZ2luYWxfc291bmRfaW5mbyI6bnVsbCwicGlubmVkX21lZGlhX2lkcyI6bnVsbH0sIm9wZW5fY2Fyb3VzZWxfc2hvd19mb2xsb3dfYnV0dG9uIjpmYWxzZSwib3JpZ2luYWxfaGVpZ2h0Ijo4MTAsIm9yaWdpbmFsX3dpZHRoIjoxMDgwLCJvd25lciI6eyJhY2NvdW50X2JhZGdlcyI6W10sImFjY291bnRfdHlwZSI6MywiZmFuX2NsdWJfaW5mbyI6eyJhdXRvc2F2ZV90b19leGNsdXNpdmVfaGlnaGxpZ2h0IjpudWxsLCJjb25uZWN0ZWRfbWVtYmVyX2NvdW50IjpudWxsLCJmYW5fY2x1Yl9pZCI6bnVsbCwiZmFuX2NsdWJfbmFtZSI6bnVsbCwiZmFuX2NvbnNpZGVyYXRpb25fcGFnZV9yZXZhbXBfZWxpZ2libGl0eSI6bnVsbCwiaGFzX2NyZWF0ZWRfc3NjIjpudWxsLCJoYXNfZW5vdWdoX3N1YnNjcmliZXJzX2Zvcl9zc2MiOm51bGwsImlzX2Zhbl9jbHViX2dpZnRpbmdfZWxpZ2libGUiOm51bGwsImlzX2Zhbl9jbHViX3JlZmVycmFsX2VsaWdpYmxlIjpudWxsLCJpc19mcmVlX3RyaWFsX2VsaWdpYmxlIjpudWxsLCJsYXJnZXN0X3B1YmxpY19iY19pZCI6bnVsbCwic3Vic2NyaWJlcl9jb3VudCI6bnVsbH0sImZiaWRfdjIiOjE3ODQxNDAwODY2MDM1NDgyLCJmZWVkX3Bvc3RfcmVzaGFyZV9kaXNhYmxlZCI6ZmFsc2UsImZ1bGxfbmFtZSI6IkVscGlkYSBUb3V2ZSIsImhhc19hbm9ueW1vdXNfcHJvZmlsZV9waWN0dXJlIjpmYWxzZSwiaWQiOiIxNjMwODc2ODY3IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMzU1NjQ2NjA5MzgwMDY1NTAwOV8xNjMwODc2ODY3IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzQ3NTgyMDY0MV80MDU5MjIyMzU5MDAzNDBfMzM1NDU0OTE2NzUwMzkxNzY1MV9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPUJKNWpqZ0kxUzF3UTdrTnZnRWE4Y2lzJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQVEyUGxkQlNrZ0lpbF92ZWl4YVZTNmE2WlJnczFrX2ZtZzktMkplcjNsWVEmb2U9NjdBQkM2MUUmX25jX3NpZD0yMDExYWQiLCJzaG93X2FjY291bnRfdHJhbnNwYXJlbmN5X2RldGFpbHMiOnRydWUsInRoaXJkX3BhcnR5X2Rvd25sb2Fkc19lbmFibGVkIjoyLCJ0cmFuc3BhcmVuY3lfcHJvZHVjdF9lbmFibGVkIjpmYWxzZSwidXNlcm5hbWUiOiJlbHBpZGFfdG91dmUifSwicGsiOjE4ODQyNjE1ODIwMTgyMDM2MjMsInByZXZpZXdfY29tbWVudHMiOltdLCJwcm9kdWN0X3N1Z2dlc3Rpb25zIjpbXSwicHJvZHVjdF90eXBlIjoiZmVlZCIsInNoYXJlX2NvdW50X2Rpc2FibGVkIjpmYWxzZSwic2hhcmluZ19mcmljdGlvbl9pbmZvIjp7ImJsb2tzX2FwcF91cmwiOm51bGwsInNoYXJpbmdfZnJpY3Rpb25fcGF5bG9hZCI6bnVsbCwic2hvdWxkX2hhdmVfc2hhcmluZ19mcmljdGlvbiI6ZmFsc2V9LCJzaG9wX3JvdXRpbmdfdXNlcl9pZCI6bnVsbCwic2hvdWxkX3Nob3dfYXV0aG9yX3BvZ19mb3JfdGFnZ2VkX21lZGlhX3NoYXJlZF90b19wcm9maWxlX2dyaWQiOmZhbHNlLCJzdWJzY3JpYmVfY3RhX3Zpc2libGUiOmZhbHNlLCJ0YWtlbl9hdCI6MTUzODg0MTUwNiwidGh1bWJuYWlsX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xNS80MjQwNjEwOV8yODY3NjMyNTg1OTU0MzBfNTg4MjMwODA3Mjc5NzA3MjAwMl9uLmpwZz9zZT03JnN0cD1kc3QtanBnX2UzNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNRGd3ZURneE1DNXpaSEl1WmpJNE9EVXVaR1ZtWVhWc2RGOXBiV0ZuWlNKOSZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMTAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9NndIM1cyejRDRGdRN2tOdmdHbmJMS3omX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1UZzROREkyTVRVNE1qQXhPREl3TXpZeU13JTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZQ3BmWHNmbUw3QVZpSmpuYkhMbVMtM205VFJ1Z1JKc1NHNlJLRi1DOTU1N3cmb2U9NjdBQkQwRkImX25jX3NpZD0yMDExYWQiLCJ0aW1lbGluZV9waW5uZWRfdXNlcl9pZHMiOltdLCJ0b3BfbGlrZXJzIjpbXSwidXNlciI6eyJhY2NvdW50X2JhZGdlcyI6W10sImFjY291bnRfdHlwZSI6MywiZmFuX2NsdWJfaW5mbyI6eyJhdXRvc2F2ZV90b19leGNsdXNpdmVfaGlnaGxpZ2h0IjpudWxsLCJjb25uZWN0ZWRfbWVtYmVyX2NvdW50IjpudWxsLCJmYW5fY2x1Yl9pZCI6bnVsbCwiZmFuX2NsdWJfbmFtZSI6bnVsbCwiZmFuX2NvbnNpZGVyYXRpb25fcGFnZV9yZXZhbXBfZWxpZ2libGl0eSI6bnVsbCwiaGFzX2NyZWF0ZWRfc3NjIjpudWxsLCJoYXNfZW5vdWdoX3N1YnNjcmliZXJzX2Zvcl9zc2MiOm51bGwsImlzX2Zhbl9jbHViX2dpZnRpbmdfZWxpZ2libGUiOm51bGwsImlzX2Zhbl9jbHViX3JlZmVycmFsX2VsaWdpYmxlIjpudWxsLCJpc19mcmVlX3RyaWFsX2VsaWdpYmxlIjpudWxsLCJsYXJnZXN0X3B1YmxpY19iY19pZCI6bnVsbCwic3Vic2NyaWJlcl9jb3VudCI6bnVsbH0sImZiaWRfdjIiOjE3ODQxNDAwODY2MDM1NDgyLCJmZWVkX3Bvc3RfcmVzaGFyZV9kaXNhYmxlZCI6ZmFsc2UsImZ1bGxfbmFtZSI6IkVscGlkYSBUb3V2ZSIsImhhc19hbm9ueW1vdXNfcHJvZmlsZV9waWN0dXJlIjpmYWxzZSwiaWQiOiIxNjMwODc2ODY3IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMzU1NjQ2NjA5MzgwMDY1NTAwOV8xNjMwODc2ODY3IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzQ3NTgyMDY0MV80MDU5MjIyMzU5MDAzNDBfMzM1NDU0OTE2NzUwMzkxNzY1MV9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPUJKNWpqZ0kxUzF3UTdrTnZnRWE4Y2lzJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQVEyUGxkQlNrZ0lpbF92ZWl4YVZTNmE2WlJnczFrX2ZtZzktMkplcjNsWVEmb2U9NjdBQkM2MUUmX25jX3NpZD0yMDExYWQiLCJzaG93X2FjY291bnRfdHJhbnNwYXJlbmN5X2RldGFpbHMiOnRydWUsInRoaXJkX3BhcnR5X2Rvd25sb2Fkc19lbmFibGVkIjoyLCJ0cmFuc3BhcmVuY3lfcHJvZHVjdF9lbmFibGVkIjpmYWxzZSwidXNlcm5hbWUiOiJlbHBpZGFfdG91dmUifSwidmlkZW9fc3RpY2tlcl9sb2NhbGVzIjpbXX0seyJib29zdF91bmF2YWlsYWJsZV9pZGVudGlmaWVyIjpudWxsLCJib29zdF91bmF2YWlsYWJsZV9yZWFzb24iOm51bGwsImJvb3N0X3VuYXZhaWxhYmxlX3JlYXNvbl92MiI6bnVsbCwiY2FuX21vZGlmeV9jYXJvdXNlbCI6ZmFsc2UsImNhbl9yZXBseSI6ZmFsc2UsImNhbl9yZXNoYXJlIjp0cnVlLCJjYW5fc2F2ZSI6dHJ1ZSwiY2FwdGlvbiI6eyJjcmVhdGVkX2F0IjoxNjA0MDQ3OTY5LCJjcmVhdGVkX2F0X3V0YyI6MTYwNDA0Nzk2OSwiZGlkX3JlcG9ydF9hc19zcGFtIjpmYWxzZSwiaGFzaHRhZ3MiOlsiI2hhbGxvd2VlbiIsIiNoYWxsb3dlZW5fY29zdHVtZSIsIiNoYWxsb3dlZW5fc25hY2tzIl0sImlkIjoyNDMxMjUzMDM3Nzg5MjMyODQwLCJpc19jb3ZlcmVkIjpmYWxzZSwiaXNfcmFua2VkX2NvbW1lbnQiOmZhbHNlLCJtZW50aW9ucyI6W10sInBrIjoiMTc4NzU2ODMwNzA5MzU5NzciLCJwcml2YXRlX3JlcGx5X3N0YXR1cyI6MCwic2hhcmVfZW5hYmxlZCI6ZmFsc2UsInRleHQiOiJUaGVyZSBhcmUganVzdCBzbyBjdXRlISEg8J+Og/CfpodcblxuI2hhbGxvd2VlblxuI2hhbGxvd2Vlbl9jb3N0dW1lXG4jaGFsbG93ZWVuX3NuYWNrcyIsInR5cGUiOjEsInVzZXIiOnsiZmJpZF92MiI6MTc4NDE0NDM4Nzc5MDExNDUsImZ1bGxfbmFtZSI6IiIsImlkIjoiNDM4NDkxNjY1OTYiLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMjYzMzM3MjU3MzcyNTQzMjA4M180Mzg0OTE2NjU5NiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8yMzE3MzQzMzZfMTAyNTAzMDU3ODI1NjM4OF8yMzU2NDQ1NTU4MjEzNTg4NDM4X24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9NldzWW5qa2lBeVlRN2tOdmdHXzNVdkYmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlDVEwyWmF0aU5YR1lzaDRiMDBuUWhVeEFBbWZWTVVaMmdlZXhYSnZENXNrdyZvZT02N0FCRTNFMyZfbmNfc2lkPTIwMTFhZCIsInVzZXJuYW1lIjoibGlmZS5ieV9hIn0sInVzZXJfaWQiOjQzODQ5MTY2NTk2fSwiY2FwdGlvbl9pc19lZGl0ZWQiOmZhbHNlLCJjYXJvdXNlbF9tZWRpYSI6W3siY2Fyb3VzZWxfcGFyZW50X2lkIjoiMjQzMTI1MzAzNzc4OTIzMjg0MF80Mzg0OTE2NjU5NiIsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJleHBsb3JlX3Bpdm90X2dyaWQiOmZhbHNlLCJmYl91c2VyX3RhZ3MiOnsiaW4iOltdfSwiZmVhdHVyZWRfcHJvZHVjdHMiOltdLCJpZCI6IjI0MzEyNTMwMzQxNzM5MDM2MjNfNDM4NDkxNjY1OTYiLCJpbWFnZV92ZXJzaW9ucyI6eyJpdGVtcyI6W3siaGVpZ2h0IjoxMjgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgxOTE0N184MjAzODc3NDg1MzgzMjVfNjQwMjAwMzc1MjYyNjExNjIyOF9uLmpwZz9zZT03JnN0cD1kc3QtanBnX2UzNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNamd3ZURFeU9EQXVjMlJ5TG1ZeU9UTTFNQzVrWldaaGRXeDBYMmx0WVdkbEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDEmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9UTBhanE0VXFEbVFRN2tOdmdIb2k3Nl8mX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1qUXpNVEkxTXpBek5ERTNNemt3TXpZeU13JTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZRDNoQUkwV2REeUpmUms5LXdVQ3hPdHhkNEV1RUtKWkRJZFRRRTFpUERWcHcmb2U9NjdBQkNFOTYmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6MTI4MH0seyJoZWlnaHQiOjQ4MCwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yOTM1MC0xNS8xMjI4MTkxNDdfODIwMzg3NzQ4NTM4MzI1XzY0MDIwMDM3NTI2MjYxMTYyMjhfbi5qcGc/c3RwPWRzdC1qcGdfZTM1X3M0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1RMGFqcTRVcURtUVE3a052Z0hvaTc2XyZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFM016a3dNell5TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlCU1ZYYkhVQ29DMHd1QUhzcHRrTDF0dFY1WmtsRXJQZnpsVk5pOEEwcmloQSZvZT02N0FCQ0U5NiZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XX0sImlzX3ZpZGVvIjpmYWxzZSwibWVkaWFfbmFtZSI6ImFsYnVtX2l0ZW0iLCJtZWRpYV90eXBlIjoxLCJvcmlnaW5hbF9oZWlnaHQiOjEyODAsIm9yaWdpbmFsX3dpZHRoIjoxMjgwLCJwayI6MjQzMTI1MzAzNDE3MzkwMzYyMywicHJvZHVjdF9zdWdnZXN0aW9ucyI6W10sInByb2R1Y3RfdHlwZSI6ImNhcm91c2VsX2l0ZW0iLCJzaGFyaW5nX2ZyaWN0aW9uX2luZm8iOnsiYmxva3NfYXBwX3VybCI6bnVsbCwic2hhcmluZ19mcmljdGlvbl9wYXlsb2FkIjpudWxsLCJzaG91bGRfaGF2ZV9zaGFyaW5nX2ZyaWN0aW9uIjpmYWxzZX0sInNob3Bfcm91dGluZ191c2VyX2lkIjpudWxsLCJ0YWtlbl9hdCI6MTYwNDA0Nzk2OCwidGh1bWJuYWlsX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvMTIyODE5MTQ3XzgyMDM4Nzc0ODUzODMyNV82NDAyMDAzNzUyNjI2MTE2MjI4X24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1RMGFqcTRVcURtUVE3a052Z0hvaTc2XyZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFM016a3dNell5TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlEM2hBSTBXZER5SmZSazktd1VDeE90eGQ0RXVFS0paRElkVFFFMWlQRFZwdyZvZT02N0FCQ0U5NiZfbmNfc2lkPTIwMTFhZCIsInZpZGVvX3N0aWNrZXJfbG9jYWxlcyI6W119LHsiY2Fyb3VzZWxfcGFyZW50X2lkIjoiMjQzMTI1MzAzNzc4OTIzMjg0MF80Mzg0OTE2NjU5NiIsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJleHBsb3JlX3Bpdm90X2dyaWQiOmZhbHNlLCJmYl91c2VyX3RhZ3MiOnsiaW4iOltdfSwiZmVhdHVyZWRfcHJvZHVjdHMiOltdLCJpZCI6IjI0MzEyNTMwMzQxNTcxMjYzMDlfNDM4NDkxNjY1OTYiLCJpbWFnZV92ZXJzaW9ucyI6eyJpdGVtcyI6W3siaGVpZ2h0IjoxMjgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMzAyODUwNl84MDU0NjMyNDY4OTg2MTZfMjY0MjA1NTE1NTM2NDIwMTE1Nl9uLmpwZz9zZT03JnN0cD1kc3QtanBnX2UzNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNamd3ZURFeU9EQXVjMlJ5TG1ZeU9UTTFNQzVrWldaaGRXeDBYMmx0WVdkbEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDQmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9VFpqV01YZXhhR3dRN2tOdmdHWl9YZUwmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1qUXpNVEkxTXpBek5ERTFOekV5TmpNd09RJTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZQzlNdkNNR2ItYWhpcWw4bnU4VkNPd3dtdUpUNzJMSTlETkNUbF9Gd1NsdVEmb2U9NjdBQkVBRTQmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6MTI4MH0seyJoZWlnaHQiOjQ4MCwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yOTM1MC0xNS8xMjMwMjg1MDZfODA1NDYzMjQ2ODk4NjE2XzI2NDIwNTUxNTUzNjQyMDExNTZfbi5qcGc/c3RwPWRzdC1qcGdfZTM1X3M0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1UWmpXTVhleGFHd1E3a052Z0daX1hlTCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFMU56RXlOak13T1ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlBRlBVdUxDQUtjeXlqYzZGd0E3U0tieFl2T1JpLTJ4bi1hODB2QU5mejlLQSZvZT02N0FCRUFFNCZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XX0sImlzX3ZpZGVvIjpmYWxzZSwibWVkaWFfbmFtZSI6ImFsYnVtX2l0ZW0iLCJtZWRpYV90eXBlIjoxLCJvcmlnaW5hbF9oZWlnaHQiOjEyODAsIm9yaWdpbmFsX3dpZHRoIjoxMjgwLCJwayI6MjQzMTI1MzAzNDE1NzEyNjMwOSwicHJvZHVjdF9zdWdnZXN0aW9ucyI6W10sInByb2R1Y3RfdHlwZSI6ImNhcm91c2VsX2l0ZW0iLCJzaGFyaW5nX2ZyaWN0aW9uX2luZm8iOnsiYmxva3NfYXBwX3VybCI6bnVsbCwic2hhcmluZ19mcmljdGlvbl9wYXlsb2FkIjpudWxsLCJzaG91bGRfaGF2ZV9zaGFyaW5nX2ZyaWN0aW9uIjpmYWxzZX0sInNob3Bfcm91dGluZ191c2VyX2lkIjpudWxsLCJ0YWtlbl9hdCI6MTYwNDA0Nzk2OCwidGh1bWJuYWlsX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvMTIzMDI4NTA2XzgwNTQ2MzI0Njg5ODYxNl8yNjQyMDU1MTU1MzY0MjAxMTU2X24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1UWmpXTVhleGFHd1E3a052Z0daX1hlTCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFMU56RXlOak13T1ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlDOU12Q01HYi1haGlxbDhudThWQ093d211SlQ3MkxJOUROQ1RsX0Z3U2x1USZvZT02N0FCRUFFNCZfbmNfc2lkPTIwMTFhZCIsInZpZGVvX3N0aWNrZXJfbG9jYWxlcyI6W119LHsiY2Fyb3VzZWxfcGFyZW50X2lkIjoiMjQzMTI1MzAzNzc4OTIzMjg0MF80Mzg0OTE2NjU5NiIsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJleHBsb3JlX3Bpdm90X2dyaWQiOmZhbHNlLCJmYl91c2VyX3RhZ3MiOnsiaW4iOltdfSwiZmVhdHVyZWRfcHJvZHVjdHMiOltdLCJpZCI6IjI0MzEyNTMwMzQ3NTI2NjIxNjBfNDM4NDkxNjY1OTYiLCJpbWFnZV92ZXJzaW9ucyI6eyJpdGVtcyI6W3siaGVpZ2h0IjoxMjgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgyNTY1NV8xODYzNjg2NzY0NDkxODRfMTYxOTUwNTk2MTk5NjczNTQyX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1SSXFFbWVxUnNuY1E3a052Z0VEY2doVyZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRjMU1qWTJNakUyTUElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlCTjAySTlPSW1lSEJibHV2YmlGek4xNmpTSGM5VXFtS04xeUdrUW10bGdGQSZvZT02N0FCRTNCOSZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjoxMjgwfSx7ImhlaWdodCI6NDgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgyNTY1NV8xODYzNjg2NzY0NDkxODRfMTYxOTUwNTk2MTk5NjczNTQyX24uanBnP3N0cD1kc3QtanBnX2UzNV9zNDgweDQ4MF90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNamd3ZURFeU9EQXVjMlJ5TG1ZeU9UTTFNQzVrWldaaGRXeDBYMmx0WVdkbEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9UklxRW1lcVJzbmNRN2tOdmdFRGNnaFcmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1qUXpNVEkxTXpBek5EYzFNalkyTWpFMk1BJTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZQW1hWTM0Y2FSb0JGOU5CRFhnSnpXY3A2Z2p6TVBSQld5YkZFTjFmQk4wb3cmb2U9NjdBQkUzQjkmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6NDgwfV19LCJpc192aWRlbyI6ZmFsc2UsIm1lZGlhX25hbWUiOiJhbGJ1bV9pdGVtIiwibWVkaWFfdHlwZSI6MSwib3JpZ2luYWxfaGVpZ2h0IjoxMjgwLCJvcmlnaW5hbF93aWR0aCI6MTI4MCwicGsiOjI0MzEyNTMwMzQ3NTI2NjIxNjAsInByb2R1Y3Rfc3VnZ2VzdGlvbnMiOltdLCJwcm9kdWN0X3R5cGUiOiJjYXJvdXNlbF9pdGVtIiwic2hhcmluZ19mcmljdGlvbl9pbmZvIjp7ImJsb2tzX2FwcF91cmwiOm51bGwsInNoYXJpbmdfZnJpY3Rpb25fcGF5bG9hZCI6bnVsbCwic2hvdWxkX2hhdmVfc2hhcmluZ19mcmljdGlvbiI6ZmFsc2V9LCJzaG9wX3JvdXRpbmdfdXNlcl9pZCI6bnVsbCwidGFrZW5fYXQiOjE2MDQwNDc5NjgsInRodW1ibmFpbF91cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgyNTY1NV8xODYzNjg2NzY0NDkxODRfMTYxOTUwNTk2MTk5NjczNTQyX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMCZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1SSXFFbWVxUnNuY1E3a052Z0VEY2doVyZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRjMU1qWTJNakUyTUElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlCTjAySTlPSW1lSEJibHV2YmlGek4xNmpTSGM5VXFtS04xeUdrUW10bGdGQSZvZT02N0FCRTNCOSZfbmNfc2lkPTIwMTFhZCIsInZpZGVvX3N0aWNrZXJfbG9jYWxlcyI6W119LHsiY2Fyb3VzZWxfcGFyZW50X2lkIjoiMjQzMTI1MzAzNzc4OTIzMjg0MF80Mzg0OTE2NjU5NiIsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJleHBsb3JlX3Bpdm90X2dyaWQiOmZhbHNlLCJmYl91c2VyX3RhZ3MiOnsiaW4iOltdfSwiZmVhdHVyZWRfcHJvZHVjdHMiOltdLCJpZCI6IjI0MzEyNTMwMzQxODIxNzczMTlfNDM4NDkxNjY1OTYiLCJpbWFnZV92ZXJzaW9ucyI6eyJpdGVtcyI6W3siaGVpZ2h0IjoxMjgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjkxMjg0OV8xMjc5NDQyNDMyNDM1NTI1Xzg0NDExMTE5ODMwOTM3NDM0MDNfbi5qcGc/c2U9NyZzdHA9ZHN0LWpwZ19lMzVfdHQ2JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkltbHRZV2RsWDNWeWJHZGxiaTR4TWpnd2VERXlPREF1YzJSeUxtWXlPVE0xTUM1a1pXWmhkV3gwWDJsdFlXZGxJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA1Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPXVxcGlLMnVKb0pNUTdrTnZnRnVjNnFWJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01JmlnX2NhY2hlX2tleT1NalF6TVRJMU16QXpOREU0TWpFM056TXhPUSUzRCUzRC4zLWNjYjctNSZvaD0wMF9BWUFoSzFmMXFaXzJnMDZSNjZPVElhT1ptMUNCWjhTMXpvWHRsQ2FrVE1CbTdRJm9lPTY3QUJDQTlEJl9uY19zaWQ9MjAxMWFkIiwid2lkdGgiOjEyODB9LHsiaGVpZ2h0Ijo0ODAsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjkzNTAtMTUvMTIyOTEyODQ5XzEyNzk0NDI0MzI0MzU1MjVfODQ0MTExMTk4MzA5Mzc0MzQwM19uLmpwZz9zdHA9ZHN0LWpwZ19lMzVfczQ4MHg0ODBfdHQ2JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkltbHRZV2RsWDNWeWJHZGxiaTR4TWpnd2VERXlPREF1YzJSeUxtWXlPVE0xTUM1a1pXWmhkV3gwWDJsdFlXZGxJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTA1Jl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPXVxcGlLMnVKb0pNUTdrTnZnRnVjNnFWJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01JmlnX2NhY2hlX2tleT1NalF6TVRJMU16QXpOREU0TWpFM056TXhPUSUzRCUzRC4zLWNjYjctNSZvaD0wMF9BWUNWWXJjaDhYdENiay1oOUJ3a01HdU0wNkFaMFBqTXRONFE2U0RoY1RHTUZRJm9lPTY3QUJDQTlEJl9uY19zaWQ9MjAxMWFkIiwid2lkdGgiOjQ4MH1dfSwiaXNfdmlkZW8iOmZhbHNlLCJtZWRpYV9uYW1lIjoiYWxidW1faXRlbSIsIm1lZGlhX3R5cGUiOjEsIm9yaWdpbmFsX2hlaWdodCI6MTI4MCwib3JpZ2luYWxfd2lkdGgiOjEyODAsInBrIjoyNDMxMjUzMDM0MTgyMTc3MzE5LCJwcm9kdWN0X3N1Z2dlc3Rpb25zIjpbXSwicHJvZHVjdF90eXBlIjoiY2Fyb3VzZWxfaXRlbSIsInNoYXJpbmdfZnJpY3Rpb25faW5mbyI6eyJibG9rc19hcHBfdXJsIjpudWxsLCJzaGFyaW5nX2ZyaWN0aW9uX3BheWxvYWQiOm51bGwsInNob3VsZF9oYXZlX3NoYXJpbmdfZnJpY3Rpb24iOmZhbHNlfSwic2hvcF9yb3V0aW5nX3VzZXJfaWQiOm51bGwsInRha2VuX2F0IjoxNjA0MDQ3OTY4LCJ0aHVtYm5haWxfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yOTM1MC0xNS8xMjI5MTI4NDlfMTI3OTQ0MjQzMjQzNTUyNV84NDQxMTExOTgzMDkzNzQzNDAzX24uanBnP3NlPTcmc3RwPWRzdC1qcGdfZTM1X3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz11cXBpSzJ1Sm9KTVE3a052Z0Z1YzZxViZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFNE1qRTNOek14T1ElM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlBaEsxZjFxWl8yZzA2UjY2T1RJYU9abTFDQlo4UzF6b1h0bENha1RNQm03USZvZT02N0FCQ0E5RCZfbmNfc2lkPTIwMTFhZCIsInZpZGVvX3N0aWNrZXJfbG9jYWxlcyI6W119XSwiY2Fyb3VzZWxfbWVkaWFfY291bnQiOjQsImNhcm91c2VsX21lZGlhX2lkcyI6WzI0MzEyNTMwMzQxNzM5MDM2MjMsMjQzMTI1MzAzNDE1NzEyNjMwOSwyNDMxMjUzMDM0NzUyNjYyMTYwLDI0MzEyNTMwMzQxODIxNzczMTldLCJjYXJvdXNlbF9tZWRpYV9wZW5kaW5nX3Bvc3RfY291bnQiOjAsImNsaXBzX3RhYl9waW5uZWRfdXNlcl9pZHMiOltdLCJjb2F1dGhvcl9wcm9kdWNlcl9jYW5fc2VlX29yZ2FuaWNfaW5zaWdodHMiOmZhbHNlLCJjb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJjb2RlIjoiQ0c5aThHc2hEN0kiLCJjb21tZW50X2NvdW50Ijo4LCJjb21tZW50X2luZm9ybV90cmVhdG1lbnQiOnsiYWN0aW9uX3R5cGUiOm51bGwsInNob3VsZF9oYXZlX2luZm9ybV90cmVhdG1lbnQiOmZhbHNlLCJ0ZXh0IjoiIiwidXJsIjpudWxsfSwiY29tbWVudF90aHJlYWRpbmdfZW5hYmxlZCI6dHJ1ZSwiY29tbWVyY2VfaW50ZWdyaXR5X3Jldmlld19kZWNpc2lvbiI6IiIsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJjcm9zc3Bvc3RfbWV0YWRhdGEiOnsiZmJfZG93bnN0cmVhbV91c2VfeHBvc3RfbWV0YWRhdGEiOnsiZG93bnN0cmVhbV91c2VfeHBvc3RfZGVueV9yZWFzb24iOiJOT05FIn19LCJkZWxldGVkX3JlYXNvbiI6MCwiZGV2aWNlX3RpbWVzdGFtcCI6MTY1MDk5MTI5OTQ5Mjg2LCJmYl9hZ2dyZWdhdGVkX2NvbW1lbnRfY291bnQiOjAsImZiX2FnZ3JlZ2F0ZWRfbGlrZV9jb3VudCI6MCwiZmJfdXNlcl90YWdzIjp7ImluIjpbXX0sImZiaWQiOiIxNzg3NTY4MzA2NzkzNTk3NyIsImZlYXR1cmVkX3Byb2R1Y3RzIjpbXSwiZmVlZF90eXBlIjoibWVkaWEiLCJmaWx0ZXJfdHlwZSI6MCwiZnVuZHJhaXNlcl90YWciOnsiaGFzX3N0YW5kYWxvbmVfZnVuZHJhaXNlciI6ZmFsc2V9LCJnZW5fYWlfZGV0ZWN0aW9uX21ldGhvZCI6eyJkZXRlY3Rpb25fbWV0aG9kIjoiTk9ORSJ9LCJoYXNfaGlnaF9yaXNrX2dlbl9haV9pbmZvcm1fdHJlYXRtZW50IjpmYWxzZSwiaGFzX2xpa2VkIjpmYWxzZSwiaGFzX21vcmVfY29tbWVudHMiOnRydWUsImhhc19wcml2YXRlbHlfbGlrZWQiOmZhbHNlLCJoYXNfc2hhcmVkX3RvX2ZiIjowLCJoYXNfdmlld3NfZmV0Y2hpbmciOnRydWUsImlkIjoiMjQzMTI1MzAzNzc4OTIzMjg0MF80Mzg0OTE2NjU5NiIsImlnX21lZGlhX3NoYXJpbmdfZGlzYWJsZWQiOmZhbHNlLCJpZ2Jpb19wcm9kdWN0IjpudWxsLCJpbWFnZV92ZXJzaW9ucyI6eyJpdGVtcyI6W3siaGVpZ2h0IjoxMjgwLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgxOTE0N184MjAzODc3NDg1MzgzMjVfNjQwMjAwMzc1MjYyNjExNjIyOF9uLmpwZz9zZT03JnN0cD1kc3QtanBnX2UzNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNamd3ZURFeU9EQXVjMlJ5TG1ZeU9UTTFNQzVrWldaaGRXeDBYMmx0WVdkbEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDEmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9UTBhanE0VXFEbVFRN2tOdmdIb2k3Nl8mX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1qUXpNVEkxTXpBek5ERTNNemt3TXpZeU13JTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZRDNoQUkwV2REeUpmUms5LXdVQ3hPdHhkNEV1RUtKWkRJZFRRRTFpUERWcHcmb2U9NjdBQkNFOTYmX25jX3NpZD0yMDExYWQiLCJ3aWR0aCI6MTI4MH0seyJoZWlnaHQiOjQ4MCwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yOTM1MC0xNS8xMjI4MTkxNDdfODIwMzg3NzQ4NTM4MzI1XzY0MDIwMDM3NTI2MjYxMTYyMjhfbi5qcGc/c3RwPWRzdC1qcGdfZTM1X3M0ODB4NDgwX3R0NiZlZmc9ZXlKMlpXNWpiMlJsWDNSaFp5STZJbWx0WVdkbFgzVnliR2RsYmk0eE1qZ3dlREV5T0RBdWMyUnlMbVl5T1RNMU1DNWtaV1poZFd4MFgybHRZV2RsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1RMGFqcTRVcURtUVE3a052Z0hvaTc2XyZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpRek1USTFNekF6TkRFM016a3dNell5TXclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlCU1ZYYkhVQ29DMHd1QUhzcHRrTDF0dFY1WmtsRXJQZnpsVk5pOEEwcmloQSZvZT02N0FCQ0U5NiZfbmNfc2lkPTIwMTFhZCIsIndpZHRoIjo0ODB9XX0sImludGVncml0eV9yZXZpZXdfZGVjaXNpb24iOiJwZW5kaW5nIiwiaW52aXRlZF9jb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJpc19jb21tZW50c19naWZfY29tcG9zZXJfZW5hYmxlZCI6dHJ1ZSwiaXNfY3V0b3V0X3N0aWNrZXJfYWxsb3dlZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2NvbnRlbnRfZm9yX3Bvc3Rfcm9sbF9hZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9tZWRpYV9ub3RlX3JlY3NfbnV4IjpmYWxzZSwiaXNfZWxpZ2libGVfZm9yX21ldGFfYWlfc2hhcmUiOmZhbHNlLCJpc19pbl9wcm9maWxlX2dyaWQiOmZhbHNlLCJpc19vcGVuX3RvX3B1YmxpY19zdWJtaXNzaW9uIjpmYWxzZSwiaXNfb3JnYW5pY19wcm9kdWN0X3RhZ2dpbmdfZWxpZ2libGUiOnRydWUsImlzX3BhaWRfcGFydG5lcnNoaXAiOmZhbHNlLCJpc19waW5uZWQiOmZhbHNlLCJpc19wb3N0X2xpdmVfY2xpcHNfbWVkaWEiOmZhbHNlLCJpc19yZXNoYXJlX29mX3RleHRfcG9zdF9hcHBfbWVkaWFfaW5faWciOmZhbHNlLCJpc19zb2NpYWxfdWZpX2Rpc2FibGVkIjpmYWxzZSwiaXNfdGFnZ2VkX21lZGlhX3NoYXJlZF90b192aWV3ZXJfcHJvZmlsZV9ncmlkIjpmYWxzZSwiaXNfdW5pZmllZF92aWRlbyI6ZmFsc2UsImlzX3ZpZGVvIjpmYWxzZSwibGF5b3V0X3R5cGUiOiJtZWRpYV9ncmlkIiwibGlrZV9hbmRfdmlld19jb3VudHNfZGlzYWJsZWQiOmZhbHNlLCJsaWtlX2NvdW50Ijo0NiwibWF4X251bV92aXNpYmxlX3ByZXZpZXdfY29tbWVudHMiOjIsIm1lZGlhX25hbWUiOiJhbGJ1bSIsIm1lZGlhX25vdGVzIjp7Iml0ZW1zIjpbXX0sIm1lZGlhX3R5cGUiOjgsIm1ldGFfYWlfc3VnZ2VzdGVkX3Byb21wdHMiOltdLCJtdXNpY19tZXRhZGF0YSI6eyJhdWRpb19jYW5vbmljYWxfaWQiOiIwIiwiYXVkaW9fdHlwZSI6bnVsbCwibXVzaWNfaW5mbyI6bnVsbCwib3JpZ2luYWxfc291bmRfaW5mbyI6bnVsbCwicGlubmVkX21lZGlhX2lkcyI6bnVsbH0sIm9wZW5fY2Fyb3VzZWxfc2hvd19mb2xsb3dfYnV0dG9uIjpmYWxzZSwib3Blbl9jYXJvdXNlbF9zdWJtaXNzaW9uX3N0YXRlIjoiY2xvc2VkIiwib3JpZ2luYWxfaGVpZ2h0Ijo2MTIsIm9yaWdpbmFsX3dpZHRoIjo2MTIsIm93bmVyIjp7ImFjY291bnRfYmFkZ2VzIjpbXSwiYWNjb3VudF90eXBlIjoyLCJmYW5fY2x1Yl9pbmZvIjp7ImF1dG9zYXZlX3RvX2V4Y2x1c2l2ZV9oaWdobGlnaHQiOm51bGwsImNvbm5lY3RlZF9tZW1iZXJfY291bnQiOm51bGwsImZhbl9jbHViX2lkIjpudWxsLCJmYW5fY2x1Yl9uYW1lIjpudWxsLCJmYW5fY29uc2lkZXJhdGlvbl9wYWdlX3JldmFtcF9lbGlnaWJsaXR5IjpudWxsLCJoYXNfY3JlYXRlZF9zc2MiOm51bGwsImhhc19lbm91Z2hfc3Vic2NyaWJlcnNfZm9yX3NzYyI6bnVsbCwiaXNfZmFuX2NsdWJfZ2lmdGluZ19lbGlnaWJsZSI6bnVsbCwiaXNfZmFuX2NsdWJfcmVmZXJyYWxfZWxpZ2libGUiOm51bGwsImlzX2ZyZWVfdHJpYWxfZWxpZ2libGUiOm51bGwsImxhcmdlc3RfcHVibGljX2JjX2lkIjpudWxsLCJzdWJzY3JpYmVyX2NvdW50IjpudWxsfSwiZmJpZF92MiI6MTc4NDE0NDM4Nzc5MDExNDUsImZlZWRfcG9zdF9yZXNoYXJlX2Rpc2FibGVkIjpmYWxzZSwiZnVsbF9uYW1lIjoiIiwiaGFzX2Fub255bW91c19wcm9maWxlX3BpY3R1cmUiOmZhbHNlLCJpZCI6IjQzODQ5MTY2NTk2IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMjYzMzM3MjU3MzcyNTQzMjA4M180Mzg0OTE2NjU5NiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8yMzE3MzQzMzZfMTAyNTAzMDU3ODI1NjM4OF8yMzU2NDQ1NTU4MjEzNTg4NDM4X24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDAmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9NldzWW5qa2lBeVlRN2tOdmdHXzNVdkYmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlDVEwyWmF0aU5YR1lzaDRiMDBuUWhVeEFBbWZWTVVaMmdlZXhYSnZENXNrdyZvZT02N0FCRTNFMyZfbmNfc2lkPTIwMTFhZCIsInNob3dfYWNjb3VudF90cmFuc3BhcmVuY3lfZGV0YWlscyI6dHJ1ZSwidGhpcmRfcGFydHlfZG93bmxvYWRzX2VuYWJsZWQiOjEsInRyYW5zcGFyZW5jeV9wcm9kdWN0X2VuYWJsZWQiOmZhbHNlLCJ1c2VybmFtZSI6ImxpZmUuYnlfYSJ9LCJwayI6MjQzMTI1MzAzNzc4OTIzMjg0MCwicHJldmlld19jb21tZW50cyI6W10sInByb2R1Y3Rfc3VnZ2VzdGlvbnMiOltdLCJwcm9kdWN0X3R5cGUiOiJjYXJvdXNlbF9jb250YWluZXIiLCJzaGFyZV9jb3VudF9kaXNhYmxlZCI6ZmFsc2UsInNoYXJpbmdfZnJpY3Rpb25faW5mbyI6eyJibG9rc19hcHBfdXJsIjpudWxsLCJzaGFyaW5nX2ZyaWN0aW9uX3BheWxvYWQiOm51bGwsInNob3VsZF9oYXZlX3NoYXJpbmdfZnJpY3Rpb24iOmZhbHNlfSwic2hvcF9yb3V0aW5nX3VzZXJfaWQiOm51bGwsInNob3VsZF9zaG93X2F1dGhvcl9wb2dfZm9yX3RhZ2dlZF9tZWRpYV9zaGFyZWRfdG9fcHJvZmlsZV9ncmlkIjpmYWxzZSwic3Vic2NyaWJlX2N0YV92aXNpYmxlIjpmYWxzZSwidGFrZW5fYXQiOjE2MDQwNDc5NjksInRodW1ibmFpbF91cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI5MzUwLTE1LzEyMjgxOTE0N184MjAzODc3NDg1MzgzMjVfNjQwMjAwMzc1MjYyNjExNjIyOF9uLmpwZz9zZT03JnN0cD1kc3QtanBnX2UzNV90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNHhNamd3ZURFeU9EQXVjMlJ5TG1ZeU9UTTFNQzVrWldaaGRXeDBYMmx0WVdkbEluMCZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDEmX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9UTBhanE0VXFEbVFRN2tOdmdIb2k3Nl8mX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmaWdfY2FjaGVfa2V5PU1qUXpNVEkxTXpBek5ERTNNemt3TXpZeU13JTNEJTNELjMtY2NiNy01Jm9oPTAwX0FZRDNoQUkwV2REeUpmUms5LXdVQ3hPdHhkNEV1RUtKWkRJZFRRRTFpUERWcHcmb2U9NjdBQkNFOTYmX25jX3NpZD0yMDExYWQiLCJ0aW1lbGluZV9waW5uZWRfdXNlcl9pZHMiOltdLCJ0b3BfbGlrZXJzIjpbXSwidXNlciI6eyJhY2NvdW50X2JhZGdlcyI6W10sImFjY291bnRfdHlwZSI6MiwiZmFuX2NsdWJfaW5mbyI6eyJhdXRvc2F2ZV90b19leGNsdXNpdmVfaGlnaGxpZ2h0IjpudWxsLCJjb25uZWN0ZWRfbWVtYmVyX2NvdW50IjpudWxsLCJmYW5fY2x1Yl9pZCI6bnVsbCwiZmFuX2NsdWJfbmFtZSI6bnVsbCwiZmFuX2NvbnNpZGVyYXRpb25fcGFnZV9yZXZhbXBfZWxpZ2libGl0eSI6bnVsbCwiaGFzX2NyZWF0ZWRfc3NjIjpudWxsLCJoYXNfZW5vdWdoX3N1YnNjcmliZXJzX2Zvcl9zc2MiOm51bGwsImlzX2Zhbl9jbHViX2dpZnRpbmdfZWxpZ2libGUiOm51bGwsImlzX2Zhbl9jbHViX3JlZmVycmFsX2VsaWdpYmxlIjpudWxsLCJpc19mcmVlX3RyaWFsX2VsaWdpYmxlIjpudWxsLCJsYXJnZXN0X3B1YmxpY19iY19pZCI6bnVsbCwic3Vic2NyaWJlcl9jb3VudCI6bnVsbH0sImZiaWRfdjIiOjE3ODQxNDQzODc3OTAxMTQ1LCJmZWVkX3Bvc3RfcmVzaGFyZV9kaXNhYmxlZCI6ZmFsc2UsImZ1bGxfbmFtZSI6IiIsImhhc19hbm9ueW1vdXNfcHJvZmlsZV9waWN0dXJlIjpmYWxzZSwiaWQiOiI0Mzg0OTE2NjU5NiIsImlzX2Zhdm9yaXRlIjpmYWxzZSwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3VucHVibGlzaGVkIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwcm9maWxlX3BpY19pZCI6IjI2MzMzNzI1NzM3MjU0MzIwODNfNDM4NDkxNjY1OTYiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvMjMxNzM0MzM2XzEwMjUwMzA1NzgyNTYzODhfMjM1NjQ0NTU1ODIxMzU4ODQzOF9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAwJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPTZXc1luamtpQXlZUTdrTnZnR18zVXZGJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQ1RMMlphdGlOWEdZc2g0YjAwblFoVXhBQW1mVk1VWjJnZWV4WEp2RDVza3cmb2U9NjdBQkUzRTMmX25jX3NpZD0yMDExYWQiLCJzaG93X2FjY291bnRfdHJhbnNwYXJlbmN5X2RldGFpbHMiOnRydWUsInRoaXJkX3BhcnR5X2Rvd25sb2Fkc19lbmFibGVkIjoxLCJ0cmFuc3BhcmVuY3lfcHJvZHVjdF9lbmFibGVkIjpmYWxzZSwidXNlcm5hbWUiOiJsaWZlLmJ5X2EifSwidmlkZW9fc3RpY2tlcl9sb2NhbGVzIjpbXX0seyJib29zdF91bmF2YWlsYWJsZV9pZGVudGlmaWVyIjpudWxsLCJib29zdF91bmF2YWlsYWJsZV9yZWFzb24iOm51bGwsImJvb3N0X3VuYXZhaWxhYmxlX3JlYXNvbl92MiI6bnVsbCwiY2FuX3JlcGx5IjpmYWxzZSwiY2FuX3Jlc2hhcmUiOnRydWUsImNhbl9zYXZlIjp0cnVlLCJjYXB0aW9uIjp7ImNyZWF0ZWRfYXQiOjE1NzIyNzY0MDAsImNyZWF0ZWRfYXRfdXRjIjoxNTcyMjc2NDAwLCJkaWRfcmVwb3J0X2FzX3NwYW0iOmZhbHNlLCJoYXNodGFncyI6WyIjbW9uZGF5bW9ybmluZyIsIiNoYXBweW1vbmRheSIsIiNtb25kYXltb29kIiwiI3Jpb2dyYW5kZXN1cGVybWFya2V0IiwiI2NhbnV0aWxsb3N1cGVybWFya2V0IiwiI2dyb2NlcnlzdG9yZSIsIiNjYW51dGlsbG9idXNpbmVzcyIsIiNpYW1lbHBhc28iLCIjZWxwYXNvdHgiLCIjaXRzYWxsZ29vZGVwIiwiI3JlY2lwZXNob3BwaW5nbGlzdCIsIiNoYWxsb3dlZW5zbmFja2lkZWFzIiwiI3NuYWNraWRlYXNmb3JraWRzIiwiI2hhbGxvd2VlbnRpbWUiLCIjaGFsbG93ZWVucGFydHlpZGVhcyIsIiNoYWxsb3dlZW5fY3VwY2FrZXMiLCIjaGFsbG93ZWVuX3NuYWNrcyIsIiNzbmFja3Nmb3JoYWxsb3dlZW4iXSwiaWQiOjIxNjQ3MzM3NTM2MzM0NTUxNzIsImlzX2NvdmVyZWQiOmZhbHNlLCJpc19yYW5rZWRfY29tbWVudCI6ZmFsc2UsIm1lbnRpb25zIjpbXSwicGsiOiIxNzg0ODQxOTc5MzcxODM2OSIsInByaXZhdGVfcmVwbHlfc3RhdHVzIjowLCJzaGFyZV9lbmFibGVkIjpmYWxzZSwidGV4dCI6IkhhbGxvd2VlbiBpcyBqdXN0IGFyb3VuZCB0aGUgY29ybmVyIGFuZCB5b3UgY291bGQgY3JlYXRlIHNvbWUgZnVuIHBhcnR5IHNuYWNrcyB3aXRoIHRoZSBraWRzIG9yIGZvciB5b3VyIGd1ZXN0cy4gXG5Db21lIGluIHRvIFJpbyBHcmFuZGUgU3VwZXJtYXJrZXQgYW5kIGdldCB5b3VyIGluZ3JlZGllbnRzIGZvciBhbGwgdGhlIHNwb29rdGFjdWxhciBzbmFja3MuIEJ1eSBleHRyYSBjYW5keSBmb3IgdGhlIHRyaWNrLW9yLXRyZWF0ZXJzLlxuXG5TaHVyZmluZSBDYWtlIE1peCBBU1NPUlRFRCAxNi41IE9aLiA3MMKiXG5NYXpvbGEgQ29va2luZyBPaWwgU0VMRUNUIFZBUklFVFkgNDAgT1ouIDIgRk9SICQ1XG5MYXnigJlzIG9yIFdhdnkgTGF54oCZcyAyIEZPUiAkNFxuQnVmZmFsbyBTdHlsZSBXaW5nIFNlY3Rpb25zICQzLjM4IExCIC5cbi5cbi5cbi5cbi5cbi5cbi5cblxuI21vbmRheW1vcm5pbmcgI2hhcHB5bW9uZGF5ICNtb25kYXltb29kICNyaW9ncmFuZGVzdXBlcm1hcmtldCAjY2FudXRpbGxvc3VwZXJtYXJrZXQgI2dyb2NlcnlzdG9yZSAjY2FudXRpbGxvYnVzaW5lc3MgI2lhbWVscGFzbyAjZWxwYXNvdHggI2l0c2FsbGdvb2RlcCAjcmVjaXBlc2hvcHBpbmdsaXN0ICNoYWxsb3dlZW5zbmFja2lkZWFzICNzbmFja2lkZWFzZm9ya2lkcyAjaGFsbG93ZWVudGltZSAjaGFsbG93ZWVucGFydHlpZGVhcyAjaGFsbG93ZWVuX2N1cGNha2VzICNoYWxsb3dlZW5fc25hY2tzICNzbmFja3Nmb3JoYWxsb3dlZW4iLCJ0eXBlIjoxLCJ1c2VyIjp7ImZiaWRfdjIiOjE3ODQxNDA2MTE1Mzg5NzAxLCJmdWxsX25hbWUiOiJSaW8gR3JhbmRlIFN1cGVybWFya2V0IiwiaWQiOiI2MDc3NjExODQ2IiwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3VucHVibGlzaGVkIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwcm9maWxlX3BpY19pZCI6IjE2MTEwNTc0Nzc5MDA3MDE0OTJfNjA3NzYxMTg0NiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8yMTkwOTUwNV8yMDEyMDY0NTI1NjkzNTY2XzM0NTUxMTEzMzkxOTI2MTQ5MTJfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMiZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1teUEzYzZKaktja1E3a052Z0hpSHdmQiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUF4N2RTWnFjRG1uZW1MZ0RhV1I0WWhWRlJ6OWJsQlAtbGNaVTJnYmtUaUJRJm9lPTY3QUJENkQzJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJyaW9ncmFuZGVzdXBlcm1hcmtldCJ9LCJ1c2VyX2lkIjo2MDc3NjExODQ2fSwiY2FwdGlvbl9pc19lZGl0ZWQiOmZhbHNlLCJjbGlwc190YWJfcGlubmVkX3VzZXJfaWRzIjpbXSwiY29hdXRob3JfcHJvZHVjZXJfY2FuX3NlZV9vcmdhbmljX2luc2lnaHRzIjpmYWxzZSwiY29hdXRob3JfcHJvZHVjZXJzIjpbXSwiY29kZSI6IkI0S3JlRXlucnhFIiwiY29tbWVudF9jb3VudCI6MCwiY29tbWVudF9pbmZvcm1fdHJlYXRtZW50Ijp7ImFjdGlvbl90eXBlIjpudWxsLCJzaG91bGRfaGF2ZV9pbmZvcm1fdHJlYXRtZW50IjpmYWxzZSwidGV4dCI6IiIsInVybCI6bnVsbH0sImNvbW1lbnRfdGhyZWFkaW5nX2VuYWJsZWQiOnRydWUsImNvbW1lcmNpYWxpdHlfc3RhdHVzIjoibm90X2NvbW1lcmNpYWwiLCJjcm9zc3Bvc3RfbWV0YWRhdGEiOnsiZmJfZG93bnN0cmVhbV91c2VfeHBvc3RfbWV0YWRhdGEiOnsiZG93bnN0cmVhbV91c2VfeHBvc3RfZGVueV9yZWFzb24iOiJOT05FIn19LCJkZWxldGVkX3JlYXNvbiI6MCwiZGV2aWNlX3RpbWVzdGFtcCI6MTU3MjI3NjM5NDU0LCJmYl9hZ2dyZWdhdGVkX2NvbW1lbnRfY291bnQiOjAsImZiX2FnZ3JlZ2F0ZWRfbGlrZV9jb3VudCI6MCwiZmJfdXNlcl90YWdzIjp7ImluIjpbXX0sImZiaWQiOiIxNzg0ODQxOTc3ODcxODM2OSIsImZlYXR1cmVkX3Byb2R1Y3RzIjpbXSwiZmVlZF90eXBlIjoibWVkaWEiLCJmaWx0ZXJfdHlwZSI6MCwiZnVuZHJhaXNlcl90YWciOnsiaGFzX3N0YW5kYWxvbmVfZnVuZHJhaXNlciI6ZmFsc2V9LCJnZW5fYWlfZGV0ZWN0aW9uX21ldGhvZCI6eyJkZXRlY3Rpb25fbWV0aG9kIjoiTk9ORSJ9LCJoYXNfYXVkaW8iOnRydWUsImhhc19oaWdoX3Jpc2tfZ2VuX2FpX2luZm9ybV90cmVhdG1lbnQiOmZhbHNlLCJoYXNfbGlrZWQiOmZhbHNlLCJoYXNfbW9yZV9jb21tZW50cyI6ZmFsc2UsImhhc19wcml2YXRlbHlfbGlrZWQiOmZhbHNlLCJoYXNfc2hhcmVkX3RvX2ZiIjowLCJoYXNfdmlld3NfZmV0Y2hpbmciOnRydWUsImlkIjoiMjE2NDczMzc1MzYzMzQ1NTE3Ml82MDc3NjExODQ2IiwiaWdfbWVkaWFfc2hhcmluZ19kaXNhYmxlZCI6ZmFsc2UsImlnYmlvX3Byb2R1Y3QiOm51bGwsImltYWdlX3ZlcnNpb25zIjp7Iml0ZW1zIjpbeyJoZWlnaHQiOjQ4MCwidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE1LzcxODg2NTE0XzU0OTU2NDA5MjI1MzQ5MV8xMjk1MzI5MzUwMTY3OTMyMDMwX24uanBnP3N0cD1kc3QtanBnX2UxNV9zNDgweDQ4MF90dDYmZWZnPWV5SjJaVzVqYjJSbFgzUmhaeUk2SW1sdFlXZGxYM1Z5YkdkbGJpNDNNakI0TnpJd0xuTmtjaTVtTWpnNE5TNWtaV1poZFd4MFgyTnZkbVZ5WDJaeVlXMWxJbjAmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTExJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPXJDNmVDdEVuS2IwUTdrTnZnSG10aUpwJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01JmlnX2NhY2hlX2tleT1NakUyTkRjek16YzFNell6TXpRMU5URTNNZyUzRCUzRC4zLWNjYjctNSZvaD0wMF9BWUFxWkpyR1pWdDdxWlA5YlByX09sekZfclVSUThCZHRHTGZLcWRLcTdNTzhnJm9lPTY3QUJDNkVCJl9uY19zaWQ9MjAxMWFkIiwid2lkdGgiOjQ4MH1dfSwiaW50ZWdyaXR5X3Jldmlld19kZWNpc2lvbiI6ImFwcHJvdmVkIiwiaW52aXRlZF9jb2F1dGhvcl9wcm9kdWNlcnMiOltdLCJpc19jb21tZW50c19naWZfY29tcG9zZXJfZW5hYmxlZCI6dHJ1ZSwiaXNfY3V0b3V0X3N0aWNrZXJfYWxsb3dlZCI6ZmFsc2UsImlzX2Rhc2hfZWxpZ2libGUiOjEsImlzX2VsaWdpYmxlX2NvbnRlbnRfZm9yX3Bvc3Rfcm9sbF9hZCI6ZmFsc2UsImlzX2VsaWdpYmxlX2Zvcl9tZWRpYV9ub3RlX3JlY3NfbnV4IjpmYWxzZSwiaXNfZWxpZ2libGVfZm9yX21ldGFfYWlfc2hhcmUiOmZhbHNlLCJpc19pbl9wcm9maWxlX2dyaWQiOmZhbHNlLCJpc19vcGVuX3RvX3B1YmxpY19zdWJtaXNzaW9uIjpmYWxzZSwiaXNfb3JnYW5pY19wcm9kdWN0X3RhZ2dpbmdfZWxpZ2libGUiOnRydWUsImlzX3BhaWRfcGFydG5lcnNoaXAiOmZhbHNlLCJpc19waW5uZWQiOmZhbHNlLCJpc19wb3N0X2xpdmVfY2xpcHNfbWVkaWEiOmZhbHNlLCJpc19yZXNoYXJlX29mX3RleHRfcG9zdF9hcHBfbWVkaWFfaW5faWciOmZhbHNlLCJpc19zb2NpYWxfdWZpX2Rpc2FibGVkIjpmYWxzZSwiaXNfdGFnZ2VkX21lZGlhX3NoYXJlZF90b192aWV3ZXJfcHJvZmlsZV9ncmlkIjpmYWxzZSwiaXNfdW5pZmllZF92aWRlbyI6ZmFsc2UsImlzX3ZpZGVvIjp0cnVlLCJsYXQiOjMxLjkxOCwibGF5b3V0X3R5cGUiOiJtZWRpYV9ncmlkIiwibGlrZV9hbmRfdmlld19jb3VudHNfZGlzYWJsZWQiOmZhbHNlLCJsaWtlX2NvdW50Ijo4LCJsaWtlcnMiOlt7ImZ1bGxfbmFtZSI6InllZ2FuYW0uMjAwMyIsImlkIjoiNDcwMDUxNjIzODUiLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwayI6NDcwMDUxNjIzODUsInByb2ZpbGVfcGljX2lkIjoiMzM0NjIzMjQ1NzE1MzMwMzYzMF80NzAwNTE2MjM4NSIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS80Mzc1MjM4MjVfNzc4ODE4NDkwODQ4MDIzXzkyMjA0NTkzNTA4OTc5NzYyNDhfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1HSUZGOVIxaHhLd1E3a052Z0ZPM3dWRSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUJHMi1xeHdtZzF5enNmd28tOTRpdjVMaVIyd3Q0Yk1TN1c5UlpxbU5lY3NRJm9lPTY3QUJFQ0VEJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJ5ZWdhbmFtLjIwMDMifSx7ImZ1bGxfbmFtZSI6Ik1hcmlhIEJhbGxlbmdlciIsImlkIjoiMjI4NTA1NzA5OCIsImlzX3ByaXZhdGUiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInBrIjoyMjg1MDU3MDk4LCJwcm9maWxlX3BpY19pZCI6IjM1MTY4ODkwODI5MzM3ODQ0ODRfMjI4NTA1NzA5OCIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS80Njk2MTkwNjNfMjQ5MTM3NjQ1MTA1MjM5NF84MzI2MTY3NzQ0NDI3MjU2NDQ3X24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDImX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9QVgxbWk5ZzFwMWNRN2tOdmdFUXJhTlYmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlCT2pVcjVLejdLSjhVSW1OcjIxYWZ0TEd0R0ZTT3g1V05pNnpIakh0Q2Z4QSZvZT02N0FCQzE4NiZfbmNfc2lkPTIwMTFhZCIsInVzZXJuYW1lIjoiYmFsbGVuZ2VyX21hcmlhIn0seyJmdWxsX25hbWUiOiJIYXplbGV5ZXrimaEiLCJpZCI6IjI5NjY4MzAwMDIiLCJpc19wcml2YXRlIjp0cnVlLCJpc192ZXJpZmllZCI6ZmFsc2UsInBrIjoyOTY2ODMwMDAyLCJwcm9maWxlX3BpY19pZCI6IjIzODcyMzYyMTQ4NzUyNzIyODdfMjk2NjgzMDAwMiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8xMTg1NjYwMDJfNzQ1MDI0NDY5NjUxNjg5XzY4ODgxMjU1ODI4NDE2NTUyMDRfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz0wRmI3SDducXlYUVE3a052Z0htQmo3YiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUFEa3NrX0V1dU4xWXZkM3NZbi1MZW9GSnhQNWl0S0hSMTYzcTJoNHlYVzhnJm9lPTY3QUJERkVBJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJteW1pcmFjbGVzXzc2In0seyJmdWxsX25hbWUiOiJBJlYgQ29tcHV0ZXIgU2VydmljZXMiLCJpZCI6IjIwNzE3MTEwMjcxIiwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicGsiOjIwNzE3MTEwMjcxLCJwcm9maWxlX3BpY19pZCI6IjIxMzcyMzU3MDM3Nzg5ODkyMDBfMjA3MTcxMTAyNzEiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvNzA3MDQ5MjNfMzY3Mzg3Njc0MjE1ODcwXzQ2MTU2Mzk3MjkwOTY4ODQyMjRfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMiZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1FTUhUWmhNckVKOFE3a052Z0dVbENBSSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUFXbjBSdzBEano1NDRJN0xPd3pvVXZ0ZkFQWG9Tczc1b3ZjVHpSS1U2UTdnJm9lPTY3QUJFMUNBJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJhdmNvbXB1dGVyc2VydmljZXNlcCJ9LHsiZnVsbF9uYW1lIjoidXJiYW5hcnQ5MTUiLCJpZCI6IjEwOTM3Njk2MjkwIiwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicGsiOjEwOTM3Njk2MjkwLCJwcm9maWxlX3BpY19pZCI6IjI1OTMzOTY5MDg5MjQyODgwNThfMTA5Mzc2OTYyOTAiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvMTk4ODE1NzM0XzE5MzM0MDAzMjU2NzA0Nl8xODIyNjQ0NzU0MzUzNjAwMjc0X24uanBnP3N0cD1kc3QtanBnX2UwX3MxNTB4MTUwX3R0NiZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMDImX25jX29jPVE2Y1oyQUVLZGktSTZRQjhTSFdCN0JMRDJmMUNxVTdCeVZSazhMZnJBejBmQy12cUVnQXJYRkp3dkRNWGVmc2VnUl9OR2pBJl9uY19vaGM9X1R4cGtqSEIxV3NRN2tOdmdIOTBLWEsmX25jX2dpZD0xMzkzNDA3NTJmN2M0MzQyOGE5MThiZTk5NDU5ZmNlOSZlZG09QUd5S1U0Z0JBQUFBJmNjYj03LTUmb2g9MDBfQVlEUk9pcGF5WWlCNFc3aTNDdFF6QllpdTlyQVVmeWp1ZTd3Yl9jSVFUeFo2QSZvZT02N0FCRUUzNiZfbmNfc2lkPTIwMTFhZCIsInVzZXJuYW1lIjoidXJiYW5hcnQ5MTUifSx7ImZ1bGxfbmFtZSI6Ik9uIHRoZSBoYXBweSBzaWRlIG9mIGxpZmXinaTvuI8iLCJpZCI6IjEyMTIzMTQyMDUxIiwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3ZlcmlmaWVkIjpmYWxzZSwicGsiOjEyMTIzMTQyMDUxLCJwcm9maWxlX3BpY19pZCI6IjIzMTIyMDEwNzc0OTEyNTA1MTRfMTIxMjMxNDIwNTEiLCJwcm9maWxlX3BpY191cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL3YvdDUxLjI4ODUtMTkvOTc4NzU2NzlfMjkxMzM3NTA4NTQ4OTMzXzM3NTA0MTMxODU3MjM2NjIzMzZfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1wNXR6OTk0TjFWc1E3a052Z0hGTWctUCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWURXaEVXYWdGNWViR09XR3lRRk0ybGdScGRGOGhySHFKVE5COGg4YnhVenFRJm9lPTY3QUJDREQ1Jl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJoaWtvZm9vZHMifSx7ImZ1bGxfbmFtZSI6IkNlY2kgQ2FzdGlsbG8iLCJpZCI6Ijg0NzcxMDIyNjYiLCJpc19wcml2YXRlIjp0cnVlLCJpc192ZXJpZmllZCI6ZmFsc2UsInBrIjo4NDc3MTAyMjY2LCJwcm9maWxlX3BpY19pZCI6IjE4NTIwMTM5OTU0NzgxMjIzOTNfODQ3NzEwMjI2NiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8zOTMyNzkyNl8xODk3ODA0NjQ2OTYyOTg1XzE1Mjc2NDYxNzQxMzgzMzUyMzJfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwNSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1nbDkwV0pVeXpJNFE3a052Z0hiSmlyOSZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUMxZWo4Snc3SHBqbkJXc2tpZHE5OXhIa2pTZ1J4MmplZmwyZWw3dUpIemh3Jm9lPTY3QUJFN0FGJl9uY19zaWQ9MjAxMWFkIiwidXNlcm5hbWUiOiJjYXN0bGV2bmM4NiJ9XSwibG5nIjotMTA2LjYsImxvY2F0aW9uIjp7ImFkZHJlc3MiOiIiLCJjaXR5IjoiIiwiZXh0ZXJuYWxfc291cmNlIjoiZmFjZWJvb2tfcGxhY2VzIiwiZmFjZWJvb2tfcGxhY2VzX2lkIjoxMTMxNjg4NDIwMzA2NTQsImxhdCI6MzEuOTE4LCJsbmciOi0xMDYuNiwibmFtZSI6IkNhbnV0aWxsbywgVGV4YXMiLCJwayI6MjM3Mzk4ODMzLCJzaG9ydF9uYW1lIjoiQ2FudXRpbGxvIn0sIm1hc2h1cF9pbmZvIjp7ImNhbl90b2dnbGVfbWFzaHVwc19hbGxvd2VkIjpmYWxzZSwiZm9ybWF0dGVkX21hc2h1cHNfY291bnQiOm51bGwsImhhc19iZWVuX21hc2hlZF91cCI6ZmFsc2UsImhhc19ub25taW1pY2FibGVfYWRkaXRpb25hbF9hdWRpbyI6ZmFsc2UsImlzX2NyZWF0b3JfcmVxdWVzdGluZ19tYXNodXAiOmZhbHNlLCJpc19saWdodF93ZWlnaHRfY2hlY2siOnRydWUsImlzX2xpZ2h0X3dlaWdodF9yZXVzZV9hbGxvd2VkX2NoZWNrIjpmYWxzZSwiaXNfcGl2b3RfcGFnZV9hdmFpbGFibGUiOmZhbHNlLCJpc19yZXVzZV9hbGxvd2VkIjpmYWxzZSwibWFzaHVwX3R5cGUiOm51bGwsIm1hc2h1cHNfYWxsb3dlZCI6ZmFsc2UsIm5vbl9wcml2YWN5X2ZpbHRlcmVkX21hc2h1cHNfbWVkaWFfY291bnQiOjAsIm9yaWdpbmFsX21lZGlhIjpudWxsLCJwcml2YWN5X2ZpbHRlcmVkX21hc2h1cHNfbWVkaWFfY291bnQiOm51bGx9LCJtYXhfbnVtX3Zpc2libGVfcHJldmlld19jb21tZW50cyI6MiwibWVkaWFfbmFtZSI6InJlZWwiLCJtZWRpYV9ub3RlcyI6eyJpdGVtcyI6W119LCJtZWRpYV90eXBlIjoyLCJtZXRhX2FpX3N1Z2dlc3RlZF9wcm9tcHRzIjpbXSwibXVzaWNfbWV0YWRhdGEiOnsiYXVkaW9fY2Fub25pY2FsX2lkIjoiMCIsImF1ZGlvX3R5cGUiOm51bGwsIm11c2ljX2luZm8iOm51bGwsIm9yaWdpbmFsX3NvdW5kX2luZm8iOm51bGwsInBpbm5lZF9tZWRpYV9pZHMiOm51bGx9LCJudW1iZXJfb2ZfcXVhbGl0aWVzIjoxLCJvcGVuX2Nhcm91c2VsX3Nob3dfZm9sbG93X2J1dHRvbiI6ZmFsc2UsIm9yaWdpbmFsX2hlaWdodCI6NzIwLCJvcmlnaW5hbF93aWR0aCI6NzIwLCJvd25lciI6eyJhY2NvdW50X2JhZGdlcyI6W10sImFjY291bnRfdHlwZSI6MywiZmFuX2NsdWJfaW5mbyI6eyJhdXRvc2F2ZV90b19leGNsdXNpdmVfaGlnaGxpZ2h0IjpudWxsLCJjb25uZWN0ZWRfbWVtYmVyX2NvdW50IjpudWxsLCJmYW5fY2x1Yl9pZCI6bnVsbCwiZmFuX2NsdWJfbmFtZSI6bnVsbCwiZmFuX2NvbnNpZGVyYXRpb25fcGFnZV9yZXZhbXBfZWxpZ2libGl0eSI6bnVsbCwiaGFzX2NyZWF0ZWRfc3NjIjpudWxsLCJoYXNfZW5vdWdoX3N1YnNjcmliZXJzX2Zvcl9zc2MiOm51bGwsImlzX2Zhbl9jbHViX2dpZnRpbmdfZWxpZ2libGUiOm51bGwsImlzX2Zhbl9jbHViX3JlZmVycmFsX2VsaWdpYmxlIjpudWxsLCJpc19mcmVlX3RyaWFsX2VsaWdpYmxlIjpudWxsLCJsYXJnZXN0X3B1YmxpY19iY19pZCI6bnVsbCwic3Vic2NyaWJlcl9jb3VudCI6bnVsbH0sImZiaWRfdjIiOjE3ODQxNDA2MTE1Mzg5NzAxLCJmZWVkX3Bvc3RfcmVzaGFyZV9kaXNhYmxlZCI6ZmFsc2UsImZ1bGxfbmFtZSI6IlJpbyBHcmFuZGUgU3VwZXJtYXJrZXQiLCJoYXNfYW5vbnltb3VzX3Byb2ZpbGVfcGljdHVyZSI6ZmFsc2UsImlkIjoiNjA3NzYxMTg0NiIsImlzX2Zhdm9yaXRlIjpmYWxzZSwiaXNfcHJpdmF0ZSI6ZmFsc2UsImlzX3VucHVibGlzaGVkIjpmYWxzZSwiaXNfdmVyaWZpZWQiOmZhbHNlLCJwcm9maWxlX3BpY19pZCI6IjE2MTEwNTc0Nzc5MDA3MDE0OTJfNjA3NzYxMTg0NiIsInByb2ZpbGVfcGljX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xOS8yMTkwOTUwNV8yMDEyMDY0NTI1NjkzNTY2XzM0NTUxMTEzMzkxOTI2MTQ5MTJfbi5qcGc/c3RwPWRzdC1qcGdfZTBfczE1MHgxNTBfdHQ2Jl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTEwMiZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1teUEzYzZKaktja1E3a052Z0hpSHdmQiZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZvaD0wMF9BWUF4N2RTWnFjRG1uZW1MZ0RhV1I0WWhWRlJ6OWJsQlAtbGNaVTJnYmtUaUJRJm9lPTY3QUJENkQzJl9uY19zaWQ9MjAxMWFkIiwic2hvd19hY2NvdW50X3RyYW5zcGFyZW5jeV9kZXRhaWxzIjp0cnVlLCJ0aGlyZF9wYXJ0eV9kb3dubG9hZHNfZW5hYmxlZCI6MSwidHJhbnNwYXJlbmN5X3Byb2R1Y3RfZW5hYmxlZCI6ZmFsc2UsInVzZXJuYW1lIjoicmlvZ3JhbmRlc3VwZXJtYXJrZXQifSwicGsiOjIxNjQ3MzM3NTM2MzM0NTUxNzIsInByZXZpZXdfY29tbWVudHMiOltdLCJwcm9kdWN0X3N1Z2dlc3Rpb25zIjpbXSwicHJvZHVjdF90eXBlIjoiZmVlZCIsInNoYXJlX2NvdW50X2Rpc2FibGVkIjpmYWxzZSwic2hhcmluZ19mcmljdGlvbl9pbmZvIjp7ImJsb2tzX2FwcF91cmwiOm51bGwsInNoYXJpbmdfZnJpY3Rpb25fcGF5bG9hZCI6bnVsbCwic2hvdWxkX2hhdmVfc2hhcmluZ19mcmljdGlvbiI6ZmFsc2V9LCJzaG9wX3JvdXRpbmdfdXNlcl9pZCI6bnVsbCwic2hvdWxkX3Nob3dfYXV0aG9yX3BvZ19mb3JfdGFnZ2VkX21lZGlhX3NoYXJlZF90b19wcm9maWxlX2dyaWQiOmZhbHNlLCJzdWJzY3JpYmVfY3RhX3Zpc2libGUiOmZhbHNlLCJ0YWtlbl9hdCI6MTU3MjI3NjQwMCwidGh1bWJuYWlsX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vdi90NTEuMjg4NS0xNS83MTg4NjUxNF81NDk1NjQwOTIyNTM0OTFfMTI5NTMyOTM1MDE2NzkzMjAzMF9uLmpwZz9zdHA9ZHN0LWpwZ19lMTVfczQ4MHg0ODBfdHQ2JmVmZz1leUoyWlc1amIyUmxYM1JoWnlJNkltbHRZV2RsWDNWeWJHZGxiaTQzTWpCNE56SXdMbk5rY2k1bU1qZzROUzVrWldaaGRXeDBYMk52ZG1WeVgyWnlZVzFsSW4wJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMSZfbmNfb2M9UTZjWjJBRUtkaS1JNlFCOFNIV0I3QkxEMmYxQ3FVN0J5VlJrOExmckF6MGZDLXZxRWdBclhGSnd2RE1YZWZzZWdSX05HakEmX25jX29oYz1yQzZlQ3RFbktiMFE3a052Z0htdGlKcCZfbmNfZ2lkPTEzOTM0MDc1MmY3YzQzNDI4YTkxOGJlOTk0NTlmY2U5JmVkbT1BR3lLVTRnQkFBQUEmY2NiPTctNSZpZ19jYWNoZV9rZXk9TWpFMk5EY3pNemMxTXpZek16UTFOVEUzTWclM0QlM0QuMy1jY2I3LTUmb2g9MDBfQVlBcVpKckdaVnQ3cVpQOWJQcl9PbHpGX3JVUlE4QmR0R0xmS3FkS3E3TU84ZyZvZT02N0FCQzZFQiZfbmNfc2lkPTIwMTFhZCIsInRpbWVsaW5lX3Bpbm5lZF91c2VyX2lkcyI6W10sInRvcF9saWtlcnMiOltdLCJ1c2VyIjp7ImFjY291bnRfYmFkZ2VzIjpbXSwiYWNjb3VudF90eXBlIjozLCJmYW5fY2x1Yl9pbmZvIjp7ImF1dG9zYXZlX3RvX2V4Y2x1c2l2ZV9oaWdobGlnaHQiOm51bGwsImNvbm5lY3RlZF9tZW1iZXJfY291bnQiOm51bGwsImZhbl9jbHViX2lkIjpudWxsLCJmYW5fY2x1Yl9uYW1lIjpudWxsLCJmYW5fY29uc2lkZXJhdGlvbl9wYWdlX3JldmFtcF9lbGlnaWJsaXR5IjpudWxsLCJoYXNfY3JlYXRlZF9zc2MiOm51bGwsImhhc19lbm91Z2hfc3Vic2NyaWJlcnNfZm9yX3NzYyI6bnVsbCwiaXNfZmFuX2NsdWJfZ2lmdGluZ19lbGlnaWJsZSI6bnVsbCwiaXNfZmFuX2NsdWJfcmVmZXJyYWxfZWxpZ2libGUiOm51bGwsImlzX2ZyZWVfdHJpYWxfZWxpZ2libGUiOm51bGwsImxhcmdlc3RfcHVibGljX2JjX2lkIjpudWxsLCJzdWJzY3JpYmVyX2NvdW50IjpudWxsfSwiZmJpZF92MiI6MTc4NDE0MDYxMTUzODk3MDEsImZlZWRfcG9zdF9yZXNoYXJlX2Rpc2FibGVkIjpmYWxzZSwiZnVsbF9uYW1lIjoiUmlvIEdyYW5kZSBTdXBlcm1hcmtldCIsImhhc19hbm9ueW1vdXNfcHJvZmlsZV9waWN0dXJlIjpmYWxzZSwiaWQiOiI2MDc3NjExODQ2IiwiaXNfZmF2b3JpdGUiOmZhbHNlLCJpc19wcml2YXRlIjpmYWxzZSwiaXNfdW5wdWJsaXNoZWQiOmZhbHNlLCJpc192ZXJpZmllZCI6ZmFsc2UsInByb2ZpbGVfcGljX2lkIjoiMTYxMTA1NzQ3NzkwMDcwMTQ5Ml82MDc3NjExODQ2IiwicHJvZmlsZV9waWNfdXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS92L3Q1MS4yODg1LTE5LzIxOTA5NTA1XzIwMTIwNjQ1MjU2OTM1NjZfMzQ1NTExMTMzOTE5MjYxNDkxMl9uLmpwZz9zdHA9ZHN0LWpwZ19lMF9zMTUweDE1MF90dDYmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTAyJl9uY19vYz1RNmNaMkFFS2RpLUk2UUI4U0hXQjdCTEQyZjFDcVU3QnlWUms4TGZyQXowZkMtdnFFZ0FyWEZKd3ZETVhlZnNlZ1JfTkdqQSZfbmNfb2hjPW15QTNjNkpqS2NrUTdrTnZnSGlId2ZCJl9uY19naWQ9MTM5MzQwNzUyZjdjNDM0MjhhOTE4YmU5OTQ1OWZjZTkmZWRtPUFHeUtVNGdCQUFBQSZjY2I9Ny01Jm9oPTAwX0FZQXg3ZFNacWNEbW5lbUxnRGFXUjRZaFZGUno5YmxCUC1sY1pVMmdia1RpQlEmb2U9NjdBQkQ2RDMmX25jX3NpZD0yMDExYWQiLCJzaG93X2FjY291bnRfdHJhbnNwYXJlbmN5X2RldGFpbHMiOnRydWUsInRoaXJkX3BhcnR5X2Rvd25sb2Fkc19lbmFibGVkIjoxLCJ0cmFuc3BhcmVuY3lfcHJvZHVjdF9lbmFibGVkIjpmYWxzZSwidXNlcm5hbWUiOiJyaW9ncmFuZGVzdXBlcm1hcmtldCJ9LCJ2aWRlb19jb2RlYyI6ImF2YzEuNGQ0MDFmIiwidmlkZW9fZHVyYXRpb24iOjE1LjAsInZpZGVvX3N0aWNrZXJfbG9jYWxlcyI6W10sInZpZGVvX3VybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vbzEvdi90MTYvZjIvbTg0L0FRTWY5NU5vM1dBR0lLc1llVWhveFY3cnNnTVRxSE9xVE5qa2ZVd2dfOFM4eVJoT1VuTWtOSTJvNkRpNVZxTktvUGtrcGtjaW5rR25ub3Rfc1lMbTJEWmMxWkdIQ0xsLW5HbmtaTGMubXA0P2VmZz1leUo0Y0haZllYTnpaWFJmYVdRaU9qWTBNRFl3TXpJMk9EWXhPVEUyT1RRc0luWmxibU52WkdWZmRHRm5Jam9pZUhCMlgzQnliMmR5WlhOemFYWmxMa2xPVTFSQlIxSkJUUzVHUlVWRUxrTXpMamN5TUM1a1lYTm9YMkpoYzJWc2FXNWxYekZmZGpFaWZRJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9QWRnRzlIZ1dXZ28tQ1pJdTYxclNES19pNzcwdm4zZGh6cVh5Rl9Dck9MdkpCQmhhZEtITmhuc01LcnRWV1JqdUFNWSZ2cz0xYjNlYmIxYmI3NzYyMTA2Jl9uY192cz1IQmtzRlFJWVRHbG5YMkpoWTJ0bWFXeHNYM1JwYldWc2FXNWxYM1p2WkM4eE1UUkdOVUkxUmpjd05qbEVORUV4UWtaR01VTkRORVUwTUVFMk5UWTRNbDkyYVdSbGIxOWtZWE5vYVc1cGRDNXRjRFFWQUFMSUFRQVZBaGc2Y0dGemMzUm9jbTkxWjJoZlpYWmxjbk4wYjNKbEwwZElkMVY0UW1FMmRWOWlSVWxFYjBaQlMzYzNNRUV6ZEMxSVVrdGljR3QzUVVGQlJoVUNBc2dCQUNnQUdBQWJBb2dIZFhObFgyOXBiQUV4RW5CeWIyZHlaWE56YVhabFgzSmxZMmx3WlFFeEZRQUFKcHpSOE9xV2tPRVdGUUlvQWtNekxCZEFMZ0FBQUFBQUFCZ1NaR0Z6YUY5aVlYTmxiR2x1WlY4eFgzWXhFUUIxNmdjQSZjY2I9OS00Jm9oPTAwX0FZQ0FwMGVxelpIU1QzSDBqV1BFZFRDVUVBODRPMVEyeUtsQWJBMFRVMDZVUncmb2U9NjdBN0RCMzMmX25jX3NpZD0xZDU3NmQiLCJ2aWRlb192ZXJzaW9ucyI6W3siYmFuZHdpZHRoIjo0ODQwMDEsImhlaWdodCI6NzIwLCJpZCI6IjMzNTQ4NTY4MjM3NzQ4MXYiLCJ0eXBlIjoxMDEsInVybCI6Imh0dHBzOi8vc2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20vbzEvdi90MTYvZjIvbTg0L0FRTWY5NU5vM1dBR0lLc1llVWhveFY3cnNnTVRxSE9xVE5qa2ZVd2dfOFM4eVJoT1VuTWtOSTJvNkRpNVZxTktvUGtrcGtjaW5rR25ub3Rfc1lMbTJEWmMxWkdIQ0xsLW5HbmtaTGMubXA0P2VmZz1leUo0Y0haZllYTnpaWFJmYVdRaU9qWTBNRFl3TXpJMk9EWXhPVEUyT1RRc0luWmxibU52WkdWZmRHRm5Jam9pZUhCMlgzQnliMmR5WlhOemFYWmxMa2xPVTFSQlIxSkJUUzVHUlVWRUxrTXpMamN5TUM1a1lYTm9YMkpoYzJWc2FXNWxYekZmZGpFaWZRJl9uY19odD1zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbSZfbmNfY2F0PTExMCZfbmNfb2M9QWRnRzlIZ1dXZ28tQ1pJdTYxclNES19pNzcwdm4zZGh6cVh5Rl9Dck9MdkpCQmhhZEtITmhuc01LcnRWV1JqdUFNWSZ2cz0xYjNlYmIxYmI3NzYyMTA2Jl9uY192cz1IQmtzRlFJWVRHbG5YMkpoWTJ0bWFXeHNYM1JwYldWc2FXNWxYM1p2WkM4eE1UUkdOVUkxUmpjd05qbEVORUV4UWtaR01VTkRORVUwTUVFMk5UWTRNbDkyYVdSbGIxOWtZWE5vYVc1cGRDNXRjRFFWQUFMSUFRQVZBaGc2Y0dGemMzUm9jbTkxWjJoZlpYWmxjbk4wYjNKbEwwZElkMVY0UW1FMmRWOWlSVWxFYjBaQlMzYzNNRUV6ZEMxSVVrdGljR3QzUVVGQlJoVUNBc2dCQUNnQUdBQWJBb2dIZFhObFgyOXBiQUV4RW5CeWIyZHlaWE56YVhabFgzSmxZMmx3WlFFeEZRQUFKcHpSOE9xV2tPRVdGUUlvQWtNekxCZEFMZ0FBQUFBQUFCZ1NaR0Z6YUY5aVlYTmxiR2x1WlY4eFgzWXhFUUIxNmdjQSZjY2I9OS00Jm9oPTAwX0FZQ0FwMGVxelpIU1QzSDBqV1BFZFRDVUVBODRPMVEyeUtsQWJBMFRVMDZVUncmb2U9NjdBN0RCMzMmX25jX3NpZD0xZDU3NmQiLCJ3aWR0aCI6NzIwfSx7ImJhbmR3aWR0aCI6NDg0MDAxLCJoZWlnaHQiOjcyMCwiaWQiOiIzMzU0ODU2ODIzNzc0ODF2IiwidHlwZSI6MTAyLCJ1cmwiOiJodHRwczovL3Njb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tL28xL3YvdDE2L2YyL204NC9BUU1mOTVObzNXQUdJS3NZZVVob3hWN3JzZ01UcUhPcVROamtmVXdnXzhTOHlSaE9Vbk1rTkkybzZEaTVWcU5Lb1Bra3BrY2lua0dubm90X3NZTG0yRFpjMVpHSENMbC1uR25rWkxjLm1wND9lZmc9ZXlKNGNIWmZZWE56WlhSZmFXUWlPalkwTURZd016STJPRFl4T1RFMk9UUXNJblpsYm1OdlpHVmZkR0ZuSWpvaWVIQjJYM0J5YjJkeVpYTnphWFpsTGtsT1UxUkJSMUpCVFM1R1JVVkVMa016TGpjeU1DNWtZWE5vWDJKaGMyVnNhVzVsWHpGZmRqRWlmUSZfbmNfaHQ9c2NvbnRlbnQtYmVyMS0xLmNkbmluc3RhZ3JhbS5jb20mX25jX2NhdD0xMTAmX25jX29jPUFkZ0c5SGdXV2dvLUNaSXU2MXJTREtfaTc3MHZuM2RoenFYeUZfQ3JPTHZKQkJoYWRLSE5obnNNS3J0VldSanVBTVkmdnM9MWIzZWJiMWJiNzc2MjEwNiZfbmNfdnM9SEJrc0ZRSVlUR2xuWDJKaFkydG1hV3hzWDNScGJXVnNhVzVsWDNadlpDOHhNVFJHTlVJMVJqY3dOamxFTkVFeFFrWkdNVU5ETkVVME1FRTJOVFk0TWw5MmFXUmxiMTlrWVhOb2FXNXBkQzV0Y0RRVkFBTElBUUFWQWhnNmNHRnpjM1JvY205MVoyaGZaWFpsY25OMGIzSmxMMGRJZDFWNFFtRTJkVjlpUlVsRWIwWkJTM2MzTUVFemRDMUlVa3RpY0d0M1FVRkJSaFVDQXNnQkFDZ0FHQUFiQW9nSGRYTmxYMjlwYkFFeEVuQnliMmR5WlhOemFYWmxYM0psWTJsd1pRRXhGUUFBSnB6UjhPcVdrT0VXRlFJb0FrTXpMQmRBTGdBQUFBQUFBQmdTWkdGemFGOWlZWE5sYkdsdVpWOHhYM1l4RVFCMTZnY0EmY2NiPTktNCZvaD0wMF9BWUNBcDBlcXpaSFNUM0gwaldQRWRUQ1VFQTg0TzFRMnlLbEFiQTBUVTA2VVJ3Jm9lPTY3QTdEQjMzJl9uY19zaWQ9MWQ1NzZkIiwid2lkdGgiOjcyMH0seyJiYW5kd2lkdGgiOjQ4NDAwMSwiaGVpZ2h0Ijo3MjAsImlkIjoiMzM1NDg1NjgyMzc3NDgxdiIsInR5cGUiOjEwMywidXJsIjoiaHR0cHM6Ly9zY29udGVudC1iZXIxLTEuY2RuaW5zdGFncmFtLmNvbS9vMS92L3QxNi9mMi9tODQvQVFNZjk1Tm8zV0FHSUtzWWVVaG94Vjdyc2dNVHFIT3FUTmprZlV3Z184Uzh5UmhPVW5Na05JMm82RGk1VnFOS29Qa2twa2NpbmtHbm5vdF9zWUxtMkRaYzFaR0hDTGwtbkdua1pMYy5tcDQ/ZWZnPWV5SjRjSFpmWVhOelpYUmZhV1FpT2pZME1EWXdNekkyT0RZeE9URTJPVFFzSW5abGJtTnZaR1ZmZEdGbklqb2llSEIyWDNCeWIyZHlaWE56YVhabExrbE9VMVJCUjFKQlRTNUdSVVZFTGtNekxqY3lNQzVrWVhOb1gySmhjMlZzYVc1bFh6RmZkakVpZlEmX25jX2h0PXNjb250ZW50LWJlcjEtMS5jZG5pbnN0YWdyYW0uY29tJl9uY19jYXQ9MTEwJl9uY19vYz1BZGdHOUhnV1dnby1DWkl1NjFyU0RLX2k3NzB2bjNkaHpxWHlGX0NyT0x2SkJCaGFkS0hOaG5zTUtydFZXUmp1QU1ZJnZzPTFiM2ViYjFiYjc3NjIxMDYmX25jX3ZzPUhCa3NGUUlZVEdsblgySmhZMnRtYVd4c1gzUnBiV1ZzYVc1bFgzWnZaQzh4TVRSR05VSTFSamN3TmpsRU5FRXhRa1pHTVVORE5FVTBNRUUyTlRZNE1sOTJhV1JsYjE5a1lYTm9hVzVwZEM1dGNEUVZBQUxJQVFBVkFoZzZjR0Z6YzNSb2NtOTFaMmhmWlhabGNuTjBiM0psTDBkSWQxVjRRbUUyZFY5aVJVbEViMFpCUzNjM01FRXpkQzFJVWt0aWNHdDNRVUZCUmhVQ0FzZ0JBQ2dBR0FBYkFvZ0hkWE5sWDI5cGJBRXhFbkJ5YjJkeVpYTnphWFpsWDNKbFkybHdaUUV4RlFBQUpwelI4T3FXa09FV0ZRSW9Ba016TEJkQUxnQUFBQUFBQUJnU1pHRnphRjlpWVhObGJHbHVaVjh4WDNZeEVRQjE2Z2NBJmNjYj05LTQmb2g9MDBfQVlDQXAwZXF6WkhTVDNIMGpXUEVkVENVRUE4NE8xUTJ5S2xBYkEwVFUwNlVSdyZvZT02N0E3REIzMyZfbmNfc2lkPTFkNTc2ZCIsIndpZHRoIjo3MjB9XX1dLCJ0b3RhbCI6MTB9LCJwYWdpbmF0aW9uX3Rva2VuIjoiSEUxbEJCc3BDUlpWWlZSV2ZRRU1FUnhBTFVBWkV3RkhCUTVHWjFSU2ZSb2NXaGtUT2o0QlV4WkdHazFSUmxRT2ZRQWNUQWRlSmp3V0V6TUJRUVJKQXdFUUNoSkdQbDR4UndBWEhRWmJQRlFVZlJBS1NnTmZYaFJCQUVNV0ZSa0hQRllRT2cxRlVrNWVVRHdMRTFVV1hCc1hFQUliYlFsS1RFcENXMzBNRVNkR0FFWUkifQ==', 'headers': {'via': '1.1 google', 'date': 'Fri, 07 Feb 2025 13:10:35 GMT', 'vary': 'Accept-Encoding', 'server': 'RapidAPI-1.2.8', 'alt-svc': 'h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000', 'connection': 'keep-alive', 'content-type': 'application/json', 'x-request-id': 'YrT8XhojQfuqnp7P57VbNw', 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'x-rapidapi-region': 'AWS - us-east-1', 'x-rapidapi-version': '1.2.8', 'x-rapidapi-request-id': 'abe75f2b0f5c856fa3e74a56aae69f381d8e65a1f41aa243defaf6c91e4218df', 'x-ratelimit-requests-limit': '500', 'x-ratelimit-requests-reset': '563284', 'x-ratelimit-requests-remaining': '259', 'x-ratelimit-rapid-free-plans-hard-limit-limit': '500000', 'x-ratelimit-rapid-free-plans-hard-limit-reset': '563284', 'x-ratelimit-rapid-free-plans-hard-limit-remaining': '499993'}, 'status_code': 200}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'summary': [{'code': 'DByK3vHglSI', 'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃\\n\\nاگه توهم عاشق ای\\u200cاس\\u200cام\\u200cآری پیجمو از دست نده😉👇🏻\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #ایاسامار #ای_اس_ام_آر #ایاسمار #هالووین', 'hashtags': ['#asmr', '#asmrartist', '#asmrfood', '#mukbang', '#halloween', '#halloween_snacks', '#happy', '#ایاسامار', '#ای_اس_ام_آر', '#ایاسمار', '#هالووین'], 'media_id': 3490900471793734792, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'has_audio': True, 'audio_type': 'original_sounds', 'like_count': 15, 'play_count': 274, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 36.942, 'virality_score': 0.0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'engagement_score': 0.05474452554744526}, {'code': 'CG7QNDNjazG', 'caption': 'Ready! Set! Film!\\nKolejny filmik już w przygotowaniu 👻\\n\\nNa planie nawet straszna Chupa czacha 💕 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'hashtags': ['#halloween', '#ytchannel', '#diy', '#chupachups', '#halloween_snacks', '#halloween_party', '#pumpkin'], 'media_id': 2430607689442503878, 'username': '4crazy_hands', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 5, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'BomPez0HE_n', 'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'hashtags': ['#halloween_kids', '#halloween_snacks', '#spider_donuts', '#cute_food', '#kids_snacks', '#donuts', '#για_ενα_νικολα_γινονται_ολα', '#greekmombloggerscommunity', '#greekbloggerscommunity', '#momblogger'], 'media_id': 1884261582018203623, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 77, 'play_count': 0, 'comment_count': 6, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'CG9i8GshD7I', 'caption': 'There are just so cute!! 🎃🦇\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks', 'hashtags': ['#halloween', '#halloween_costume', '#halloween_snacks'], 'media_id': 2431253037789232840, 'username': 'life.by_a', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 46, 'play_count': 0, 'comment_count': 8, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'B4KreEynrxE', 'caption': 'Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70¢\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay’s or Wavy Lay’s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween', 'hashtags': ['#mondaymorning', '#happymonday', '#mondaymood', '#riograndesupermarket', '#canutillosupermarket', '#grocerystore', '#canutillobusiness', '#iamelpaso', '#elpasotx', '#itsallgoodep', '#recipeshoppinglist', '#halloweensnackideas', '#snackideasforkids', '#halloweentime', '#halloweenpartyideas', '#halloween_cupcakes', '#halloween_snacks', '#snacksforhalloween'], 'media_id': 2164733753633455172, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'has_audio': True, 'audio_type': 'No Audio Type Available', 'like_count': 8, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 15.0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'engagement_score': 0}]}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'code': 'CG9i8GshD7I', 'caption': 'There are just so cute!! 🎃🦇\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks', 'hashtags': ['#halloween', '#halloween_costume', '#halloween_snacks'], 'media_id': 2431253037789232840, 'username': 'life.by_a', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 46, 'play_count': 0, 'comment_count': 8, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'code': 'DByK3vHglSI', 'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃\\n\\nاگه توهم عاشق ای\\u200cاس\\u200cام\\u200cآری پیجمو از دست نده😉👇🏻\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #ایاسامار #ای_اس_ام_آر #ایاسمار #هالووین', 'hashtags': ['#asmr', '#asmrartist', '#asmrfood', '#mukbang', '#halloween', '#halloween_snacks', '#happy', '#ایاسامار', '#ای_اس_ام_آر', '#ایاسمار', '#هالووین'], 'media_id': 3490900471793734792, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'has_audio': True, 'audio_type': 'original_sounds', 'like_count': 15, 'play_count': 274, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 36.942, 'virality_score': 0.0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'engagement_score': 0.05474452554744526}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'code': 'CG7QNDNjazG', 'caption': 'Ready! Set! Film!\\nKolejny filmik już w przygotowaniu 👻\\n\\nNa planie nawet straszna Chupa czacha 💕 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'hashtags': ['#halloween', '#ytchannel', '#diy', '#chupachups', '#halloween_snacks', '#halloween_party', '#pumpkin'], 'media_id': 2430607689442503878, 'username': '4crazy_hands', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 5, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'code': 'BomPez0HE_n', 'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'hashtags': ['#halloween_kids', '#halloween_snacks', '#spider_donuts', '#cute_food', '#kids_snacks', '#donuts', '#για_ενα_νικολα_γινονται_ολα', '#greekmombloggerscommunity', '#greekbloggerscommunity', '#momblogger'], 'media_id': 1884261582018203623, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 77, 'play_count': 0, 'comment_count': 6, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"خوراکی هالوینی به مناسبت هالوین👻🎃\",\n", " \"virality_score\": 0.0,\n", " \"engagement_score\": 0.05474452554744526,\n", " \"description\": \"Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!\"\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!\"\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!\"\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"There are just so cute!! 🎃🦇\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇\"\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'code': 'B4KreEynrxE', 'caption': 'Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70¢\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay’s or Wavy Lay’s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween', 'hashtags': ['#mondaymorning', '#happymonday', '#mondaymood', '#riograndesupermarket', '#canutillosupermarket', '#grocerystore', '#canutillobusiness', '#iamelpaso', '#elpasotx', '#itsallgoodep', '#recipeshoppinglist', '#halloweensnackideas', '#snackideasforkids', '#halloweentime', '#halloweenpartyideas', '#halloween_cupcakes', '#halloween_snacks', '#snacksforhalloween'], 'media_id': 2164733753633455172, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'has_audio': True, 'audio_type': 'No Audio Type Available', 'like_count': 8, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 15.0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.\"\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: ['```json\\n{\\n \"caption\": \"خوراکی هالوینی به مناسبت هالوین👻🎃\",\\n \"virality_score\": 0.0,\\n \"engagement_score\": 0.05474452554744526,\\n \"description\": \"Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!\"\\n}\\n```', '```json\\n{\\n \"caption\": \"Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!\"\\n}\\n```', '```json\\n{\\n \"caption\": \"Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!\"\\n}\\n```', '```json\\n{\\n \"caption\": \"There are just so cute!! 🎃🦇\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇\"\\n}\\n```', '```json\\n{\\n \"caption\": \"Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.\"\\n}\\n```']\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'summary': [{'code': 'DByK3vHglSI', 'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃\\n\\nاگه توهم عاشق ای\\u200cاس\\u200cام\\u200cآری پیجمو از دست نده😉👇🏻\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #ایاسامار #ای_اس_ام_آر #ایاسمار #هالووین', 'hashtags': ['#asmr', '#asmrartist', '#asmrfood', '#mukbang', '#halloween', '#halloween_snacks', '#happy', '#ایاسامار', '#ای_اس_ام_آر', '#ایاسمار', '#هالووین'], 'media_id': 3490900471793734792, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'has_audio': True, 'audio_type': 'original_sounds', 'like_count': 15, 'play_count': 274, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 36.942, 'virality_score': 0.0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'engagement_score': 0.05474452554744526}, {'code': 'CG7QNDNjazG', 'caption': 'Ready! Set! Film!\\nKolejny filmik już w przygotowaniu 👻\\n\\nNa planie nawet straszna Chupa czacha 💕 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'hashtags': ['#halloween', '#ytchannel', '#diy', '#chupachups', '#halloween_snacks', '#halloween_party', '#pumpkin'], 'media_id': 2430607689442503878, 'username': '4crazy_hands', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 5, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'BomPez0HE_n', 'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'hashtags': ['#halloween_kids', '#halloween_snacks', '#spider_donuts', '#cute_food', '#kids_snacks', '#donuts', '#για_ενα_νικολα_γινονται_ολα', '#greekmombloggerscommunity', '#greekbloggerscommunity', '#momblogger'], 'media_id': 1884261582018203623, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 77, 'play_count': 0, 'comment_count': 6, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'CG9i8GshD7I', 'caption': 'There are just so cute!! 🎃🦇\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks', 'hashtags': ['#halloween', '#halloween_costume', '#halloween_snacks'], 'media_id': 2431253037789232840, 'username': 'life.by_a', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 46, 'play_count': 0, 'comment_count': 8, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'B4KreEynrxE', 'caption': 'Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70¢\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay’s or Wavy Lay’s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween', 'hashtags': ['#mondaymorning', '#happymonday', '#mondaymood', '#riograndesupermarket', '#canutillosupermarket', '#grocerystore', '#canutillobusiness', '#iamelpaso', '#elpasotx', '#itsallgoodep', '#recipeshoppinglist', '#halloweensnackideas', '#snackideasforkids', '#halloweentime', '#halloweenpartyideas', '#halloween_cupcakes', '#halloween_snacks', '#snacksforhalloween'], 'media_id': 2164733753633455172, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'has_audio': True, 'audio_type': 'No Audio Type Available', 'like_count': 8, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 15.0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'engagement_score': 0}], 'description': [{'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃', 'description': 'Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!', 'virality_score': 0.0, 'engagement_score': 0.05474452554744526}, {'caption': 'Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'description': 'Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!', 'virality_score': 0, 'engagement_score': 0}, {'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'description': 'Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!', 'virality_score': 0, 'engagement_score': 0}, {'caption': 'There are just so cute!! 🎃🦇', 'description': 'Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇', 'virality_score': 0, 'engagement_score': 0}, {'caption': 'Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket', 'description': 'Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.', 'virality_score': 0, 'engagement_score': 0}]}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: [{'id': '067a604a-6cf6-75b4-8000-a0cb0181a664', 'title': 'hooks_doc', 'content': ['Save both time and money with [product].', 'Save both time and money on [task].', 'Is [product] worth the price? Let’s find out!', 'Why is it challenging and costly to find a good [product category]?', 'Searching for an affordable [product type]? Check this out!', 'How to locate an affordable [service].', 'I can’t believe this costs only [price].', \"Don't waste your money on [X]; instead buy [X].\", 'What’s inside [product]?', 'Common questions I get about [product].', 'Now you can get X delivered right to your door.', 'Thinking of trying [product type]?', 'Allow me to introduce you to [product].', '[category] Tip #X.', 'Here’s how to achieve [value prop].', 'I know this sounds unbelievable, but…', 'How to get X done in just 10 minutes.', 'How to find time for X.', 'Here’s my biggest life hack for X.', 'Add more [value prop] to your day.', 'Before you try [product type], watch this first.', 'Hate [the worse alternative]? Give this a try!', 'Thinking about [worse alternative]?', 'Instead of [worse alternative], try this.', 'Still using [the worse alternative to the product]? Watch this.', 'Something that’s always annoyed me about X.', 'Don’t buy X that doesn’t work. Try this instead.', 'I tested every [product category] so you don’t have to: here’s what I found.', 'Stop doing [worse alternative]. Try [product] instead.', 'Dealing with [negative experience]? I used [product] to help.', 'Why millennials are switching to [product].', 'How to do X without [worse alternative].', 'I only get my [product category] from [brand name].', 'I no longer buy my [product category] from [worse alternative].', '[Worse alternative] can be difficult to deal with.', 'Your new X alternative.', '[value prop] without the [negative side effect].', 'I kept experiencing [pain point], so I tried this instead!', 'If you have [pain point] — you need to see this!', 'I wanted to stop doing X, so I tried this instead.', \"Your X isn't [adverb]; you just need X.\", 'My secret to [popular trend] revealed!', 'Guys, it’s here…', 'What I ordered vs. what I received.', '[Product] unboxing.', 'Let’s create X with [product].', 'POV: You tried [product].', 'A day in the life of X.', 'Get ready with me to do [task].', '“Put a finger down” [product category] edition.', 'Trying home remedies for X.', '[Product category] ASMR.', 'TikTok made me try [product].', 'Things TikTok made me try #13.', 'This [product type] is going viral on [social media platform].', 'I tested the viral [product type] to see if it lives up to the hype.', 'This [product type] has over 5,000 reviews… let’s see if it’s worth it.', '[Publication] can’t stop raving about us.', 'It’s so good it sold out in a week.', 'Are you [accomplishing the goal optimally]?', 'Life Hack: Try [product] for [pain point].', 'My go-to [product] for [pain point].', 'How to easily [task].', '[Task] has never been easier than with [product].', 'My favorite [product] to make [hard task] simpler.', 'Here’s my top product for [task].', 'Struggling to do [task]?', 'I’ve been struggling with [task], but [product] has really helped.', 'Easiest way to do [task]?', 'Make your week easier.', 'Why adults avoid [task]… [product] makes it easy.', '[Product] made [task] so much easier! You’ve got to try it.', 'When I use [product], it’s one less thing I have to worry about.', 'How to do [X] in half the time.', 'This trick/hack/method will save you hours...', 'Easy hack to [X]...', 'Simple [X] that will make you [X].', '5 Ways [product] Helps with [pain point].', '3 reasons to buy [product].', '3 reasons to try [service].', 'Get [value prop] in 3 steps.', 'Here are 3 ways [worse alternative] affects your life.', '5 things you didn’t know about [topic].', 'The ultimate [X] checklist to [action].', 'Reasons why [X].', 'Here are the 3 best ways to [X].', 'Here are [X] mistakes you might be making...', 'If you want [X], do these 5 things...', 'The internet’s #1 [product type].', 'The best way to [accomplish the goal of the product].', 'What makes [the product type] the best?', 'My skin has never looked better with [product].', 'The best way to find X in 2022.', '[Product] changed how I do [task], and I’m never going back.', 'Why is [product] so good though?', 'After hours of researching, I found the best [product type] for [task].', 'I found the best [product category] for [value prop].', 'This is going to blow your mind.', 'How I got [X] in 24 hours.', 'Must-have [products] for [X].', \"The best [target audience] know something that you don't.\", 'Hey, [customer type], you’ve got to try this.', 'People looking for [product category], stop scrolling.', 'Wait, have you tried X?', 'Take control of your X with [product].', 'Imagine if X was also X.', 'Watch this if you X.', 'PSA: [statement about product category].', 'Did you know? [fact about product category].', 'I just found out [fact about product category].', 'Are you one of [fact about product category] people who do X?', 'New customers get [discount].', 'Take [discount] off when you try [product].', 'I didn’t know X could be related to X.', 'Why is it important to [do product-related task]?', \"99\\\\% of your [target audience] don't. To be the 1% you need to [X].\", 'This [product] is the secret to [X].', 'Is there anything worse than [X]?', 'I will never [adjective] from learning this.', 'X people start scrolling. I have the perfect [X] for you.', \"Here's a challenge for you...\", \"There's nothing more painful than [X].\", 'What would you do if...', 'Watch till the end…', \"Why you're failing at [activity].\", 'The worst mistake you can make in [subject].', 'Avoid these common pitfalls in [topic].', 'The dark side of [popular trend].', \"Don't be fooled by [misconception].\", 'Why [common practice] is ruining your [outcome].', 'What no one tells you about [issue].', 'The hidden dangers of [activity].', 'Stop doing this if you want to succeed in [field].', 'The ugly truth about [common belief].', 'Why [habit] is wasting your time.', 'Exposing the myths about [topic].', \"The biggest regret you'll have in [situation].\", 'How [action] is destroying your [goal].', 'The shocking reality of [popular topic].', 'Why [trend] is a bad idea.', \"The real reason you're not seeing results in [field].\", 'The downside of [seemingly positive aspect].', 'What you should never do in [activity].', 'Why [common advice] is actually harmful.'], 'language': 'english', 'metadata': {}, 'modality': 'text', 'created_at': '2025-02-07T13:03:34.810520Z', 'embeddings': [[-0.03269297, -0.088817045, -0.028254973, -0.055885196, 0.018105982, 0.01028099, -0.0032610595, -0.0059282444, 0.0052157454, 0.044513956, 0.0131679885, 0.017239483, -0.06836993, -0.020213982, -0.026776975, 0.015886985, 0.025463976, -0.030177971, 0.038457215, 0.034246966, -0.029054973, 0.020792982, -0.016729984, 0.011711989, -0.014857987, 0.029045973, 0.015278986, 0.019400982, 0.0064209937, 0.028700974, -0.036928963, -0.04234896, 0.005201745, -0.0038489962, 0.013669987, 0.0008044992, 0.018153483, -0.0001154999, -0.04274396, -0.02128298, -0.07332793, 0.03257747, 0.0031719971, 0.0068839937, -0.0035944968, 0.048983954, 0.004112746, 0.021680292, -0.007140993, -0.059139945, 0.037079964, -0.0153399855, -0.03232297, 0.014046487, 0.004216996, 0.036721963, 0.034679968, -0.0078664925, -0.02130698, -0.027523974, -0.009597991, -0.0038564964, -0.06848594, -0.0039302465, 0.03239797, 0.025395976, -0.020009981, 0.0147979865, 0.0007919992, -0.04535196, -0.01148899, 0.017204484, 0.017727984, -0.016297828, 0.016887985, -0.0009012492, -0.08598067, -0.004065496, -0.023006978, -0.0069064936, 0.029894972, 0.02128698, -0.01078799, -0.04308596, -0.03946709, 0.006539994, -0.028476972, -0.008015992, 0.04476246, 0.029986471, -0.056279946, -0.007252993, 0.04109171, -0.001006374, -0.018230233, 0.005138495, 0.012639988, 0.021055229, 0.029785974, 0.024880977, 0.04906795, -0.045007955, -0.016519483, -0.027185975, 0.0051759947, -0.024001976, 0.014979986, -0.03298347, -0.023459978, 0.0070529934, 0.0003959996, -0.000266656, 0.016116235, -0.05046795, -0.0054059946, -0.017807983, 0.035699967, -0.016185734, -0.024279978, 0.0047647455, 0.0065679937, 0.022038573, 0.033201218, 0.011457489, -0.03318922, -0.023506977, 0.009829241, 0.0054121823, -0.07077593, 0.012124114, 0.024171976, -0.004271871, 0.050586954, -0.009768991, -0.024437977, 0.019854981, 0.003052997, 0.031974345, -0.017777983, 0.043033957, -0.052764453, 0.011385989, 0.018090546, -0.014796985, 0.019180233, -0.023723977, -0.023490978, -0.034887843, -0.023940478, -0.005116745, -0.006681494, 0.0064979936, 0.015339485, 0.0060139946, 0.018414984, -0.037868183, -0.00038899964, 0.028680222, -0.048039954, 0.034171592, -0.0014739985, -0.012539988, 0.014058112, 0.018112984, -0.00071354624, -0.06791994, 0.007662493, -0.010105491, -0.023262478, 0.0012319988, 0.09317591, 0.0037879962, 0.015703985, 0.025068976, -0.060817942, 0.0026044976, 0.016858984, -0.021567728, 0.022263978, 0.034703467, 0.011223365, -0.011373989, -0.019937482, -0.005519495, -0.025614977, 0.044457957, -0.01065599, -0.008929991, 0.021723978, 0.03165697, 0.034048967, -0.013257988, 0.013229988, -0.019810481, -0.012459989, 0.017384483, -0.027505975, 5.2999952e-05, -0.0038294964, 0.049045954, 0.018073983, 0.007100493, 0.027412975, -0.038823962, -0.029842036, -0.042615335, 0.04036546, 3.5999965e-05, 0.037253466, -0.016149236, -0.009792522, 0.026657976, 0.02176598, 0.043798957, 0.018160015, 0.044447333, 0.030477973, -0.04157296, 0.037858464, 0.049118955, -0.019378982, 0.02103898, 0.049049955, -0.020512233, -0.0026472476, 0.02281873, -0.009386491, -0.0011924988, 0.009898991, -0.0026392473, 0.06598794, -0.017265983, -0.03105772, -0.046443954, -0.01079899, -0.024625478, -0.022555979, 0.031245971, -0.029797973, 0.041310962, -0.025773974, 0.03285097, 0.021942355, -0.0011902489, -0.004498121, -0.004153746, -0.027690975, 0.0032899969, -0.04084796, -0.017330734, 0.064158626, -0.0008942492, -0.026795976, 0.028406972, 0.006697556, 0.017389484, -0.0048184954, -0.0070699933, 0.04156196, 0.024466977, 0.03194997, -0.02154198, 0.006226744, -0.05446013, 0.030408971, 0.028629472, 0.03244297, -0.023947978, -0.013720986, -0.04191596, -0.024592478, -0.065713935, 0.027452976, -0.0039569964, -0.017444484, 0.03855484, 0.01013499, 0.014106487, 0.05340495, 0.019405982, -0.06152394, -0.018425357, 0.02084623, -0.025712976, 0.017915107, 0.021021979, 0.026945475, -0.036064968, -0.013427956, -0.015015236, -0.017890733, -0.007967993, 0.014662987, 0.03247297, 0.026669286, -0.03083897, 0.019020982, -0.007202243, -0.07435193, -0.01018199, 0.015391985, -0.0014219986, 0.012913488, -0.0077886176, -0.00049899955, -0.06742344, -0.05028995, 0.016510485, 0.006129994, 0.012141988, -0.023343977, -0.013014487, -0.07917392, 0.01086849, 0.019197982, -0.011218989, 0.040531963, 0.08943416, -0.035869967, -0.022699479, -0.026549974, -0.0038389964, -0.008711992, -0.060985945, 0.035591967, 0.047955956, 0.026285475, 0.0060239946, -0.049665954, -0.009199116, 0.059845947, 0.047006957, -0.0038334965, -0.04203746, 0.025341475, 0.030718971, -0.046373956, 0.04379846, 0.014149987, 0.02061498, -0.0007539993, -0.060412195, -0.026553225, 0.008673992, 0.036703963, -0.08791992, 0.017268233, -0.06703194, 0.005354995, 0.026911974, 0.039307214, -0.007095993, -0.008333492, 0.027458724, -0.018191982, -0.002023498, -0.017312422, -0.008295992, -0.0135239875, 0.0049819956, 0.0027407475, -0.017404983, -0.024903975, 0.034670092, 0.013015987, -0.013997487, 0.07826392, -0.002241748, 0.04010396, -0.02291598, 0.06980393, 0.019018982, 0.0034689966, 0.018805983, 0.016588923, 0.067977935, -0.047401454, -0.01142374, 0.017420234, 0.0026169976, 0.04419496, -0.037841965, 0.05249495, 0.05551195, 0.024163976, 0.045592956, 0.027096225, 0.016072234, -0.03126697, 0.039819963, -0.008607866, 0.02940897, 0.029529972, 0.033236466, 0.013497456, 0.013403487, 0.030413222, 0.026079975, 0.019644981, 0.019003483, -0.031191971, 0.024995977, 0.0018199983, 0.00503712, 0.0026569976, -0.035271965, -0.017107485, 0.006050432, -0.008861992, 0.028648973, 0.047585957, -0.003962996, -0.0073294933, 0.046262953, 0.038820963, -0.022181477, -0.04189696, 0.06134894, 0.018974982, 0.015414485, 0.009624991, 0.046441957, -0.056283448, 0.02074698, 0.03188197, -0.014916985, 0.0131134875, -0.036927965, -0.036622968, 0.028238973, 0.02195748, 0.030455973, -0.008085992, 0.097987905, 0.044792958, -0.05402295, 0.004058996, 0.0027639973, -0.072639935, -0.011452114, -0.042015962, -0.054257948, -0.005470745, -0.017360983, 0.00051199953, -0.009541991, -0.045114957, 0.01597936, 0.01992698, -0.049383204, 0.023419978, -0.014997986, -0.019167092, -0.015499986, -0.043019958, 0.033470716, 0.06795794, -0.06676556, -0.009835397, -0.019084731, -0.027897974, -0.0049825422, 0.016151486, -0.015861984, 0.018106734, -0.016193986, 0.024321977, -0.05719195, 0.01103799, 0.047855955, 0.014372987, -0.026505977, -0.03141397, -0.047757234, -0.009324991, -0.008208993, 0.058423944, -0.002151998, -0.0037896214, 0.019123482, -0.0014458736, 0.010444489, 0.018847294, -0.011514489, 0.04240496, 0.0133069875, -0.026590977, -0.016380236, -0.025423976, -0.012986238, 0.02057898, 0.028315974, 0.0070779934, 0.05409345, -0.016933985, -0.03130197, 0.03488597, 0.035322968, -0.031140972, -0.00014212486, 0.05273395, 0.04119546, -0.05551995, -0.006435494, 0.010033991, -0.061471943, 0.033408217, 0.057991948, 0.0007359993, 0.012167989, -0.015938751, -0.05024395, 0.001207999, -0.04400196, 0.027374974, 0.04148896, 0.017190984, -0.050821953, -0.013406987, -0.027455974, -0.019048983, -0.0048524956, -0.007392743, 0.04447196, 0.0059068385, -0.03338372, 0.022121478, -0.035123967, 0.0019699982, 0.0051739956, -0.036132965, -0.027231473, -0.045123957, 0.006950306, -0.009865491, -0.009075804, 0.020381793, 0.017618984, -0.012251988, -0.007305493, -0.024679853, 0.025634976, 0.03295547, 0.015225985, -0.04339596, 0.00037949966, -0.01165674, 0.014035987, 0.015520735, -0.02259798, 0.0015239986, -0.021250982, -0.097903915, -0.053095512, 0.060611192, -0.0004429996, -0.019799981, 0.030441971, 0.038887963, 0.007967242, -0.05514995, 0.0010317491, 0.014463986, 0.02136698, -0.011432489, 0.028942974, -0.0070209308, -0.06298394, -0.06537594, 0.047357704, -0.018755982, -0.05395995, -0.05151145, -0.034519468, 0.030219972, -0.025694976, 0.013643487, -0.029597973, 0.005121995, -0.027715975, -0.013883486, -0.022569979, -0.017054984, -0.027052475, 0.023536978, 0.02115998, -0.0018664981, 0.011228864, 0.04594996, -0.003991246, 0.05148845, -0.005621495, 0.044627957, 0.025126975, -0.010414241, -0.01910323, -0.037565965, 0.024159728, 0.010767991, -0.033481967, -0.023365978, -0.034553967, 0.015297987, -0.019233279, 0.011897864, -0.010750989, -0.0030269972, 0.038949464, -0.00066324935, 0.009081491, -0.0076924926, -0.0017679983, -0.025411475, -0.02162998, -0.008137993, 0.016108986, -0.040148523, -0.029765973, -0.02295998, 0.0032148408, 0.029791972, 0.014357987, -0.01112899, 0.038809963, -0.018305108, 0.018163232, 0.0070964308, 0.06916094, 0.02241298, -0.016283985, 0.05090395, -0.016937984, 0.05520095, -0.019432612, -0.060631946, 0.06987368, -0.026860476, -0.028025724, -0.02031698, -0.0006503744, 0.002242998, 0.03357197, 0.0032899969, -0.018112905, 0.023183977, -0.000992249, -0.00017899984, -0.021185981, -0.04281196, 0.015278986, 0.04961795, -0.003210997, -0.00048699955, -0.07195193, 0.03135022, 0.0017109985, 0.0067774937, -0.012333488, -0.017915983, -0.048596703, 0.049995955, -0.025047977, 0.048571955, 0.037143715, 0.033513967, -0.03443397, 0.03129522, -0.01021599, -0.03109197, -0.024024477, 0.039852962, 0.0072229933, 0.02001198, -0.018795483, -0.013791237, 0.0035789965, -0.025639975, -0.025357476, 0.0030409973, 0.029300097, -0.012371489, -0.023633977, 0.03474597, 0.018140983, 0.046573706, 0.018260483, -0.02143673, 0.05777595, -0.042421963, -0.04223096, -0.0050091203, 0.027394975, 0.006472681, -0.0036929965, -0.019830106, 0.003281997, 0.047545955, 0.035611965, 0.06624394, 0.023654478, 0.057291947, 0.060513943, 0.020351732, 0.029836722, 0.023068978, -0.022521978, 0.024175478, -0.0065799938, -0.051361952, -0.046907954, -0.0003139997, 0.013886986, -0.0038839963, 0.039141964, 0.062339943, 0.0100961, 0.036269967, -0.057184946, 0.006334994, 0.005364495, -0.01077599, -0.012370489, -0.050604954, -0.03330397, 0.013414987, -0.03477797, -0.051681954, -0.06182794, -0.026909538, -0.016317734, -0.020384481, -0.030262347, -0.038737964, -0.001025999, -0.0057764947, -0.008109618, -0.026550977, -0.065897934, 0.036582965, 0.019696482, 0.009087991, -0.03027947, 0.019797983, 0.0060419943, 0.0035199968, -0.07591743, -0.0027542473, -0.006653994, -0.0041834335, 0.009608991, -0.0051539955, 0.035857968, 0.008055743, -0.008584241, -0.015200486, -0.011721988, 0.044172958, -0.054912947, 0.006795244, 0.039454214, 0.0029659972, -0.0575532, -0.008514492, 0.0050509954, -0.03142697, 0.010801865, -0.021660011, 0.03596347, -0.018941982, 0.008986492, 0.025803976, -0.0036979965, -0.015767986, -0.008577992, 0.008787491, -0.010090491, -0.07893193, -0.04348696, 0.0071901185, -0.043779958, -0.06369394, 0.0044269958, 0.024741976, -0.016441984, -0.023191104, 0.059608944, -0.013145424, -0.013507987, 0.018080484, -0.064191945, 0.007109993, -0.03748578, -0.042139962, 0.019531872, -0.034404967, 0.02281904, 0.023561977, 0.02322598, -0.06553994, -0.008404242, 0.0020799981, -0.009254991, 0.060268942, -0.00081299926, 0.017283984, -0.0046099955, 0.0026462476, 0.005168495, -0.030119972, -0.057576444, -0.034029968, -0.0026379975, -0.013533362, 0.023270478, 0.02233098, 0.012108114, 0.0069899936, -0.00070899935, 0.035111967, 0.002091998, 0.0085714925, 0.012208989, 0.0064129937, 0.018219482, 0.004343996, 0.0066891187, 0.0037509964, -0.003068997, -0.048235957, 0.008063743, 0.047023956, 0.03551797, 0.01089999, 0.037103966, 0.029356472, -0.016012484, -0.02435829, 0.0030476844, 0.005044245, -0.086663924, 0.0030428737, 0.06358794, -0.0038359964, -0.028411973, 0.025973974, -0.011212614, 0.027090976, -0.06251194, -0.011235513, -0.050256453, -0.06539194, -0.009423491, 0.0068674935, 0.017988984, -0.004615871, 0.015394798, 0.0036189966, 0.03381997, 0.03360447, 0.04141896, 0.023504978, 0.00390509, 0.03987196, -0.028833972, -0.014244987, 0.06094519, -0.0059274943, 0.008872491, 0.030932972, -0.059317943, 0.024991475, 0.022413353, -0.038469963, 0.05144795, -0.00039943712, -0.062211942, -0.010070991, -0.02136548, -0.0025309976, 0.0050819954, -0.027082976, 0.05072395, 0.03066447, -0.0054159947, -0.06185544, -0.014281986, -0.02102998, -0.012694551, 0.039185964, 0.0052729947, 0.0034924967, -0.01068899, -0.02175973, 0.029275974, -0.04649196, -0.051141955, 0.057762943, 0.023516977, 0.05547195, 0.03513597, -0.039162964, 0.075947925, 0.023449978, -0.028116973, -0.030393971, -0.003077997, 0.006227494, -0.04446396, 0.024741976, -0.023347478, 0.044719957, 0.05342195, 0.058285948, -0.000381443, -0.08321192, -0.020332731, -0.022836978, -0.006935993, -0.039894715, -0.039514963, 0.0014939986, 0.0024469977, 0.040790025, 0.0049007456, -0.012165489, 0.060835943, 0.007366993, 0.0045739957, 0.0073607434, -0.0071519935, -0.061524943, 0.024877477, -0.02131773, 0.067633934, 0.027185723, 0.044574957, -0.034639966, 0.006829994, -0.03421797, 0.0037519967, 0.010084678, 0.019502982, -0.016979733, 0.001074999, -0.0151269855, 0.011866989, 0.035804965, 0.045441456, -0.053081952, 0.05913294, 0.002174998, -0.033701967, -0.0107647395, 0.052780952, -0.030155974, 0.03320947, 0.022385728, -0.008033993, -0.00995299, -0.029995972, 0.093159914, 0.018513357, 0.0037647465, -0.0035939966, -0.02124248, 0.023609977, 0.023353977, -0.027160475, -0.02040948, 0.012904988, -0.014337737, -0.005768932, 0.015433986, -0.006537994, 0.007664993, 0.022745227, 0.050483953, -0.021753978, -0.042018462, -0.027424974, 0.046635956, -0.030855972, -0.045651704, -0.026547976, 0.0042576212, -0.035729043, -0.023963977, 0.028345974, -0.01980723, -0.011007164, -0.07391993, -0.004460996, -0.0013789986, 0.01996598, 0.012000864, 0.03624097, 0.017837483, -0.018466357, -0.018368984, 0.0035974965, -0.0034739967, 0.046342954, 0.007582743, 0.038388215, 0.040667962, 0.014204737, 0.0045407456, 0.0005184995, -0.037038963, 0.04229996, 0.059512943, 0.016103985, -0.007576993, 0.006431931, 0.038346462, -0.0009159991, 0.005441995, -0.038746964, -0.021703979, 0.037249964, 0.021892728, -0.046325456, 0.031191971, 0.004075996], [-0.014330006, -0.09299673, -0.023406554, -0.056500778, -0.004509834, 0.015919283, 0.015248476, -0.017741937, 0.010512532, 0.020088485, 0.013509991, 0.0353603, -0.09210096, -0.034513626, -0.03259201, 0.04079549, -0.0011448982, -0.016487045, 0.03130906, 0.04476396, -0.03844295, 0.010786976, 0.0050144056, -0.0011945711, -0.015429824, 0.052412942, -0.005097874, 0.014904401, 0.017130814, 0.033355657, -0.031969156, -0.035054866, 0.018679537, -0.012532603, 0.012306109, 0.0071783937, 0.029754218, -0.010340877, -0.03807936, -0.02294464, -0.06925835, 0.02606708, 0.0033081216, 0.0021645625, -0.00083149393, 0.044821095, 0.012690229, 0.015869036, -0.01904376, -0.03223952, 0.028937008, -0.016566625, -0.011978613, 0.013347518, -0.011412381, 0.037673306, 0.036777537, -0.013962976, 0.008471035, -0.010821663, 0.021393528, -0.011502672, -0.04823685, 0.017398117, 0.04124618, 0.040868692, -0.019161088, 0.014160902, 0.007812217, -0.045011878, -0.016248692, 0.0072896, -0.005647527, -0.011241109, 0.031585544, -0.020784287, -0.069612876, 0.018196963, -0.028966594, -0.031417206, 0.0041442066, 0.011162934, 0.00089474866, -0.029530788, -0.055427484, -0.009450336, -0.009980988, 0.0051669953, 0.06042257, 0.021292366, -0.05543361, -0.0035565495, 0.0025146953, -0.007874196, -0.024384197, -0.00430923, 0.0033657649, 0.02765457, 0.01410683, 0.039218713, 0.045397017, -0.04406191, -0.026186287, -0.031149903, -0.014275169, -0.017099315, 0.045900505, -0.0257253, -0.028528914, -0.0134844845, -0.013241413, 0.00029994996, 0.0019843946, -0.05567234, -0.0075885295, -0.0120163625, 0.052658305, -0.029320616, -0.02505934, -0.0063984226, 0.0014405759, 0.017161421, 0.029679744, 0.00492166, -0.020772718, -0.03623375, -0.004947134, 0.02632214, -0.06424234, 0.0036213347, 0.04554444, -0.009478265, 0.04235824, 0.0019442547, -0.05056095, 0.0035006914, -0.016307482, 0.034484044, -0.025999742, 0.04801163, -0.037109625, 0.02290128, 0.01831021, -0.0052940147, 0.008182309, -0.021254618, -0.02720439, -0.036808398, -0.012197582, -0.011415952, -0.005916742, 0.0074814046, 0.009524177, 0.006171802, -0.0067009227, -0.039075114, -0.010467131, 0.013009564, -0.028967297, 0.02053994, 0.005561317, -0.011338414, 0.023631262, 0.006037768, -0.03193957, -0.053097263, 0.004714671, -0.02067525, -0.0011161403, 0.038119406, 0.07242873, 0.0056613004, 0.0067641777, 0.026812874, -0.07171865, -0.014955668, 0.004489812, -0.035157397, 0.00240164, 0.03335872, -0.009183161, 0.008730559, -0.01196331, -0.013061086, -0.02748929, 0.021772388, -0.015266713, -0.0075681247, 0.010331949, 0.02916908, 0.0381569, -0.0076471935, 0.007716059, -0.020427203, -0.0154841505, 0.02542178, -0.03405248, 0.002087917, 0.013022318, 0.04711051, -0.00045515364, 0.006119387, 0.019353913, -0.037217133, -0.0151071735, -0.04671874, 0.037228484, -0.0046461634, 0.058193352, -0.007886695, 0.019944632, 0.04436938, 0.02912958, 0.04850007, 0.02351355, 0.043248333, 0.031954873, -0.046879932, 0.03563334, 0.050418116, -0.048402637, 0.007915515, 0.04734567, -0.051186867, -0.018921437, 0.034573313, -0.013091693, -0.0047589, 0.00795046, -0.00025633478, 0.079772405, -0.017242022, -0.032399695, -0.046619773, -0.015872862, -0.029964387, -0.025794942, 0.033309747, -0.020771949, 0.018030155, -0.030680085, 0.02101588, 0.024036806, -0.0074757934, -0.014172125, 0.011654179, -0.01886777, 0.0057306765, -0.041027848, 0.006319354, 0.046280034, -0.033022553, -0.026427478, 0.026229296, -0.0033025104, 0.018873908, -0.037104014, 0.008688371, 0.014700625, 0.020875089, 0.031046351, -0.026036473, 0.0057561826, -0.02648155, 0.050097764, 0.03882898, 0.009159696, -0.020806734, 0.0018101572, -0.019737013, -0.032530285, -0.070655555, 0.02864012, 0.014640414, -0.0113848355, 0.065238096, 0.0324604, 0.010438692, 0.055378515, 0.038150776, -0.052543383, -0.028448313, 0.037147373, -0.011729675, 0.022194002, 0.026934281, 0.009108684, -0.05663341, -0.034969676, -0.045809705, -0.020032883, 0.007830326, 0.013049401, 0.010646183, 0.033210784, -0.028289158, 0.019489095, -0.005990582, -0.05428482, -0.010112088, 0.0279586, -0.009888656, -0.011436356, -0.022823233, -0.009145157, -0.055481046, -0.0483552, 0.015167814, 0.00910945, 0.00887709, -0.0074090958, 0.011208334, -0.07795026, -7.345713e-05, 0.03299271, 0.0017170605, 0.044996575, 0.07934391, -0.044837415, -0.015082178, -0.030636724, -0.01835, 0.021662585, -0.046549376, 0.02856054, 0.02709752, 0.03490591, -0.0022631427, -0.051415913, -0.01089002, 0.062189624, 0.01994157, 0.014552674, -0.009837135, 0.032506566, 0.04660702, -0.03653115, 0.05037374, 0.01018529, 0.028681068, -0.0058587166, -0.05909524, -0.03104992, -0.003330248, 0.014641434, -0.08676308, 0.009087259, -0.067996815, 0.013188934, 0.020385884, 0.029280828, -0.019914024, 0.0067782057, 0.03992242, -0.021267882, -0.022841109, -0.00052669784, -0.022304442, -0.016444195, 0.025501868, -0.0047017667, -0.02215485, -0.027695889, 0.043928616, -0.009455821, -0.000977388, 0.08181084, -0.0034765245, 0.021366844, -0.030076614, 0.04996411, 0.010031107, 0.00034841127, 0.007232467, -0.017102104, 0.023780726, -0.02748674, -0.007214102, 0.03169063, -0.00027546423, 0.025028476, -0.04390084, 0.031976297, 0.038771592, 0.053531885, 0.034110636, 0.027837193, 0.044319645, -0.018637707, 0.028531209, 0.00082001626, 0.0036958118, 0.011438907, 0.029092085, 0.016993083, 0.006423673, 0.03297103, 0.030513277, 0.039464843, 0.008956669, -0.018986627, 0.04246026, 0.007389583, -0.010616086, -0.01783886, -0.040633272, -0.032275226, 0.0012242856, -0.0076851975, 0.023289481, 0.033606637, -0.027896367, -0.0014698441, 0.030979525, 0.022973718, -0.029661657, -0.04462725, 0.044738453, 0.019111097, 0.007560473, 0.0033953518, 0.062703826, -0.057183567, 0.030568369, 0.008254745, -0.013627828, -0.008745479, -0.024648916, -0.047786925, 0.039454643, 0.026016578, -0.0035096186, 0.0041397433, 0.07770132, 0.026856743, -0.0326318, -0.00025812018, 0.018867644, -0.053916518, -0.025189675, -0.033153653, -0.07272664, -0.004172773, 0.009522901, -0.017178511, -0.0064550457, -0.026454005, 0.021267882, 0.020193474, -0.054684754, -0.010171263, -0.005657729, -0.03100401, -0.040752385, -0.035865318, 0.025359035, 0.048893373, -0.084645055, -0.023437927, -0.016645182, -0.04812768, 0.0019588568, 0.04108396, -0.041562963, 0.037552472, 0.009280595, 0.013976878, -0.060818426, 0.004236028, 0.063623056, 0.008983705, -0.03611859, -0.023851123, -0.05505408, -0.012570862, -0.0030469405, 0.0498325, 0.018379586, -0.005211375, 0.03349033, 0.021137033, 0.0006176903, 0.0067759105, -0.0062152897, 0.016561586, 0.0050267125, -0.019202918, -0.0008631213, 0.012043398, -0.018142127, 0.033420954, 0.046265747, -0.002727606, 0.05716725, -0.013949203, -0.008528169, 0.023547603, 0.049375437, -0.025358524, 0.0023215516, 0.061167344, 0.020482296, -0.056627285, 0.020921, 0.011088966, -0.059757378, 0.012919018, 0.033821907, -0.01339955, -0.00037748803, -0.045465883, -0.04720845, 0.006931497, -0.04556995, 0.020695526, 0.059079938, 0.0025919145, -0.05273814, -0.015815727, -0.026343053, -0.026952136, 0.006957513, -0.015091359, 0.048518438, 0.004831847, -0.027083237, 0.04737169, -0.044151817, -0.00403096, -0.024689758, -0.03757077, -0.045412835, -0.050061032, -0.0031657983, 0.0056664017, 0.007563024, 0.035949104, 0.010701595, -0.0020297633, -0.0039429646, -0.037589647, 0.016451592, 0.032340523, -0.00024230652, -0.042605136, 0.014935263, -0.0056468975, 0.014016029, 0.02607422, -0.053362522, -0.0007406927, -0.016259277, -0.05716189, -0.050864983, 0.07024542, 0.010092194, -0.015979987, 0.03271087, 0.031915084, 0.02272529, -0.030947896, -0.003620155, 0.010133513, 0.025626337, 0.020575138, 0.039383225, -0.02542382, -0.066180795, -0.050750714, 0.066286385, -0.006458744, -0.043935526, -0.055851903, -0.026486905, 0.031855907, -0.006306856, -0.017846256, -0.034547295, 0.010150348, -0.026997792, -0.02242381, 0.019993601, -0.033510737, -0.025325878, 0.020045636, 0.029576443, 0.018859098, 0.025871195, 0.038249742, -0.008624199, 0.041522536, -0.03140586, 0.059243176, 0.025749784, -0.042941492, 0.0095542725, -0.031833462, 0.01854716, -0.021211768, -0.013645172, -0.034599967, -0.05043597, 0.029997036, 0.011497062, -0.010984901, -0.0071294224, 0.0031578913, 0.024968157, 0.0070350505, -0.009851928, -0.008092782, -0.007323268, -0.030630603, -0.016301872, -0.024562992, 0.016456949, -0.03670102, -0.023974316, -0.042253662, 0.021302568, 0.030888725, 0.0124367, -0.0102891, 0.023691965, -0.030882603, -0.001346204, -0.0044497037, 0.07547312, 0.03336586, 0.0031160617, 0.050709907, 0.007830326, 0.06875409, -0.03455648, -0.04074116, 0.07473039, -0.0060464405, -0.035731792, -0.017310377, 0.0052266787, 0.029439988, 0.0027179138, 0.029856242, -0.022162383, 0.018617302, 0.004360497, -0.0174476, -0.0086608, -0.04304792, -0.01260759, 0.046431027, 0.002413628, -0.014891775, -0.051913787, 0.03152943, -0.02838812, 0.009395371, 0.01458124, -0.0028416177, -0.06147393, 0.030977486, -0.028972717, 0.047750194, 0.055802934, 0.020204792, -0.019046823, 0.043652922, 0.0029887392, -0.021747394, -0.012329065, 0.054129746, -0.01895194, 0.023530766, -0.032106888, -0.012456595, 0.00083404453, -0.02276457, -0.019387454, 0.034612335, 0.036206204, -0.03314549, -0.0105921095, 0.024491834, 0.0063417987, 0.054662306, 0.031682596, -0.013705111, 0.05196837, -0.05415015, -0.057639364, 0.009162119, 0.02954201, -0.0053769094, -0.0036004195, -0.014917409, -0.0029535887, 0.023165777, 0.021212276, 0.07282892, 0.028581966, 0.030189862, 0.044286486, 0.03155188, 0.021581093, 0.008633253, -0.048877556, 0.021800445, -0.0011895974, -0.041523684, -0.08104158, -0.005607993, 0.008144559, 0.012247956, 0.031581465, 0.034701355, 0.0033627043, 0.027021512, -0.05489951, 0.017035423, 0.0010748206, -0.00495147, -0.0024313545, -0.057279218, -0.019786494, 0.04999064, -0.04604946, -0.04334583, -0.04344479, -0.016793627, -0.013132502, -0.021495137, -0.015029125, -0.013995624, 0.015960092, 0.014463913, -0.018742282, -0.047051333, -0.033038877, 0.05232596, 0.025802838, 0.0018817013, -0.04012545, 0.008782208, 0.019884437, 0.018121753, -0.042572487, -0.014967655, -0.014361889, 0.003450445, 0.013129442, 0.000454516, 0.0337136, 0.028673787, -0.030848933, -0.02663229, -0.04979169, 0.039635222, -0.052153543, 0.011113453, 0.029603224, 0.008002348, -0.079680584, -0.028450357, 0.0075857244, -0.03125652, 0.001478516, -0.043501925, 0.030348731, -0.002036395, 0.002520498, 0.01968549, -0.010917566, -0.030334735, -0.03581443, 0.013526315, -0.012535663, -0.064201534, -0.04293569, -0.013972414, -0.033066932, -0.045508735, -0.020493519, 0.027864737, -0.013250851, -0.019929329, 0.038437337, -0.018896338, -0.01594683, 0.033639286, -0.063328214, 0.017202232, -0.031185612, -0.043874312, 0.033725493, -0.037412126, 0.024624335, 0.013914388, 0.0393567, -0.06512791, 0.0040666685, -0.0033249555, -0.010575372, 0.029454269, 0.02702572, 0.0072526163, -0.0047818553, 0.0052123955, 0.0230283, -0.022459773, -0.091021545, -0.036505133, 0.0012783582, -0.016120015, 0.012144913, 0.044588476, -0.0010677108, -0.0036458203, 0.008114973, 0.012289786, 0.018381562, 0.025067246, 0.038096707, 0.0075896773, 0.00030626266, -0.0072648595, 0.004506901, 0.026102787, -0.009365976, -0.03511659, -0.00094193465, 0.051754627, 0.029396117, 0.018099021, 0.052256588, 0.028183052, -0.015549446, -0.022239147, 0.0013788515, 0.010649499, -0.069266, 0.004377841, 0.03756516, 0.0076834117, -0.01916619, 0.021554057, -0.01101755, 0.009544835, -0.050575238, -0.018069945, -0.041052334, -0.0597033, -0.027847648, -0.018067393, 0.019901399, 0.0060941363, 0.014040514, 0.00016425831, 0.056444664, 0.04056874, 0.031575345, 0.031076448, -0.012414256, 0.034398343, -0.0020312937, 5.6113087e-05, 0.037491705, -0.037183594, -0.012133179, 0.026173184, -0.06598402, 0.01880002, 0.0338821, -0.023125222, 0.0079429345, 0.004257963, -0.075497605, -0.0029414734, -0.020407055, -0.0092558535, 0.025895806, -0.028762037, 0.050769083, 0.020142047, 0.00135054, -0.058955472, -0.037675347, -0.030983604, -0.015308159, 0.04042999, 0.010043733, -0.025276395, -0.013608572, -0.012163276, 0.01710531, -0.047185495, -0.027775979, 0.08527964, -0.0016107644, 0.04120537, 0.051730912, -0.027564278, 0.06616651, 0.02917902, -0.03686681, -0.03181867, -0.011192137, -0.0020653442, -0.04330706, 0.02933388, -0.0037392997, 0.06650319, 0.060936768, 0.0439294, -0.00514608, -0.07060659, 0.0029552467, -0.016285038, -0.039448522, -0.023861324, -0.038236476, -0.0031529178, -0.0018167887, 0.01224158, -0.0073125553, -0.03069488, 0.048131768, 0.016008554, 0.010196258, -0.0025781412, -0.009188039, -0.037128497, 0.0357448, -0.0029097188, 0.058137238, 0.025693672, 0.032651693, -0.029531298, -0.009463217, -0.036635723, 0.013084551, 0.008241227, 0.030229777, -0.016278917, 0.020122154, -0.027248004, 0.022780892, -0.0002713833, 0.046937067, -0.041472673, 0.03803804, 0.0021282164, -0.032470092, 0.0056616194, 0.030472467, -0.0108033, 0.039326094, 0.006334658, -0.013858593, 0.00111461, -0.016750267, 0.09539633, 0.010513041, -0.011730186, 0.010601356, -0.014694488, 0.021081941, 0.04575155, -0.006568037, -0.038907796, 0.007209001, -0.022587556, -0.0008156802, 0.02338972, -0.022737531, 0.004652285, 0.030588645, 0.0778462, -0.009248329, -0.03562977, -0.041802205, 0.046022933, -0.016202142, -0.030226845, -0.030764764, -0.014404739, -0.028016755, -0.022084836, 0.023209902, -0.002469996, -0.005711802, -0.07982342, -0.017768463, 0.011369787, 0.03443099, 0.010355415, 0.046277486, 0.012041869, -0.03962196, -0.018751973, 0.0045390506, 0.003240403, 0.056810927, 0.010967558, 0.036289863, 0.035703227, 0.030250054, -0.009577993, -0.003283636, -0.03924753, 0.02855646, 0.045393445, 0.02611299, -0.018621381, 0.009474233, 0.03447805, -0.014226963, 0.009213769, -0.01526684, -0.009499435, 0.04074014, 0.014261906, -0.034995183, 0.0031714097, 0.0002632214], [0.008147786, -0.09156627, -0.029634379, -0.04650597, 0.00015921706, 0.04468998, -0.01873718, -0.03867224, -0.0008248444, 0.063793525, 0.025279667, 0.01860026, -0.034367543, -0.004759006, -0.011664942, -0.0038808116, 0.02697984, -0.042301722, 0.061074328, 0.051474627, -0.013288958, -0.0055217477, -0.013347974, 0.01311165, -0.016394563, 0.025040217, 0.010457059, 0.048922148, -0.009834362, 0.01685617, -0.002514129, -0.0361231, 0.0025400748, -0.01944407, 0.0057234783, -0.027747113, 0.020176385, -0.013863971, -0.03477267, -0.055760983, -0.05125622, 0.034387134, -0.0056042736, 0.013650205, -0.0075065424, 0.059652213, -0.02044845, 0.021406567, -0.023630917, -0.033840086, 0.0254889, -0.0076881363, -0.03201638, -0.004398892, 0.0041846577, 0.015399405, 0.040665787, 0.019495336, 0.0060377438, 0.0023974255, 0.0011009735, 0.0075421007, -0.07306729, -0.004528933, 0.0016159281, 0.025809001, -0.0033129235, -0.007428184, -0.042600147, -0.05392373, -0.011505933, 0.025393037, 0.023128206, -0.006048581, 0.020864936, 0.014385386, -0.07532717, -0.020043844, -0.020796582, 0.00879049, 0.009178322, 0.018290788, -0.017112082, -0.045765735, -0.047361653, 0.0015531739, 0.0041188034, -0.00706682, 0.03843133, 0.03455427, -0.043588795, 0.0026281234, 0.06517396, 0.00078045536, -0.00952739, 0.008206764, 0.024546102, 0.043051124, 0.0023790863, 0.032657314, 0.05507243, -0.026613317, -0.016390188, -0.022200359, 0.00047442096, -0.002327768, 0.023950912, -0.0056209457, -0.015782183, 0.002797552, 0.005283339, -0.0055592074, 0.012049647, -0.07912171, 0.017328193, -0.013127071, 0.05057184, -0.007918339, -0.037220947, 0.0027164847, 0.035314508, 0.039252423, 0.024815354, 0.052609984, -0.035452053, -0.0060154456, 0.004994497, -0.009416522, -0.06265941, 0.017799383, 0.011934611, 0.016986417, 0.03721761, -0.00932962, -0.04752754, 0.03313382, -0.008050048, 0.055504233, -0.02195945, 0.03580008, -0.04153981, 0.013012452, 0.017717483, 0.0043797195, 0.024322385, -0.014979324, 0.0056680436, -0.03538953, -0.0038028702, -0.0040462282, -0.017868364, -0.0050645196, -0.0137726925, 0.0029617709, 0.023235686, -0.044071447, -0.0026546423, 0.018299125, -0.05682465, 0.0056984704, 0.0018080722, 0.0117907105, 0.0014062783, 0.007981015, -0.011620865, -0.05744414, -0.0008777778, -0.0048515876, -0.009891463, -0.012868657, 0.0761441, 0.005357216, 0.015593269, 0.01509238, -0.0688868, 0.0005223528, 0.039289515, -0.019856494, 0.033774856, 0.0034315025, 0.0029285308, -0.0012520629, -0.01219386, 0.00020225151, -0.024381883, 0.04548773, -0.0041604834, -0.025767894, 0.029123174, 0.028260611, 0.0069751246, -0.004556442, 0.00078295614, -0.008229792, -0.006416093, -0.0034727657, -0.046836488, 0.011365681, 0.010577098, 0.042682413, -0.0044922554, -0.0064249504, 0.029619373, -0.04170591, -0.024475507, -0.0126790125, 0.06441122, 0.0033902396, 0.062468104, -0.007650468, -0.010831762, 0.017137924, 0.01214426, 0.042323396, 0.025367688, 0.034896877, -0.011742623, -0.023601219, 0.038853858, 0.051859748, -0.03112183, -0.0006802983, 0.050039172, -0.038891476, -0.061209373, 0.008878018, -0.024751166, -0.0077997604, 0.011528604, 0.0004493089, 0.05769826, -0.01022136, -0.0133392215, -0.05860021, -0.0023555371, -0.030077437, -0.009564694, 0.046451785, -0.05516402, 0.01691702, -0.0024949564, 0.045905363, 0.008631899, -0.0043142303, 0.0014579614, -0.02313649, -0.02176022, 0.0015375699, -0.035311174, 0.00027842144, 0.057238113, -0.008390156, -0.043718625, 0.029051486, 0.015835846, -0.006831329, 0.018326946, -0.01872301, 0.025264664, 0.037468825, 0.035154458, -0.04209332, 0.01142695, -0.050543495, 0.03913728, 0.015025171, 0.026867671, -0.023808785, -0.012186357, -0.037752364, -0.032901663, -0.05182755, 0.038317125, 0.00150631, -0.029265929, 0.037625864, 0.012982859, 0.03726596, 0.05077732, 0.024126124, -0.057481527, -0.0002582067, 0.022934759, -0.046824194, 0.008656072, -0.0041604834, 0.026106594, -0.037102055, -0.0035026711, -0.040892944, -0.026995212, -0.008766942, 0.02342877, 0.020121368, 0.033681493, -0.021101678, 0.05275787, -0.006663984, -0.053261857, -0.017579105, 0.02071989, -0.009813106, 0.030849764, 0.041399144, -0.0041213045, -0.04999916, -0.03639652, 0.03812707, 0.0069126044, 0.00888724, 0.0012362245, -0.030521743, -0.071611, 0.011193543, 0.016877426, 0.013571586, 0.028797708, 0.07807805, -0.035973884, -0.009901467, -0.0034836025, 0.010905951, 0.0038228764, -0.059547182, 0.03656949, 0.05162634, 0.016086634, 0.01838832, -0.047575682, -0.023799982, 0.04941564, 0.047721565, -0.0013575652, -0.0055938535, 0.02462196, 0.014035067, -0.010984414, 0.012656975, 0.0026852249, 0.025197037, -0.010734335, -0.08006534, 0.0010084441, -0.011845415, 0.058226764, -0.07968856, 0.0029983448, -0.07136925, 0.0018639232, 0.007990862, 0.030817566, -0.0287622, 0.013477599, 0.005615944, -0.021942778, 0.0305157, 0.010242408, -0.009039528, -0.013907162, 0.008923657, -0.0075858384, -0.019700088, -0.022314144, 0.041037988, -0.0010486653, -0.013157498, 0.070062175, -0.02668928, 0.024365628, -0.028680744, 0.063653484, 0.014978186, 0.01310175, 0.018314963, 0.020532018, 0.060644194, -0.05619445, -0.00022603507, 0.029657718, 0.00067708927, 0.028325215, -0.019910468, 0.059271675, 0.030145373, 0.008417664, 0.044284016, 0.025830258, 0.003417201, -0.05158466, 0.045817837, -0.008795179, 0.050435964, 0.017117083, 0.014928371, 0.028970836, 0.027090656, 0.054248005, 0.022663357, 0.013212515, 0.00085964706, -0.026045118, 0.03160667, 0.005968556, 0.023659987, -0.049292266, -0.023340719, 0.0010136542, -0.026836826, -0.012822808, 0.029627709, 0.02224704, -0.02382379, -0.0005677839, 0.03649155, 0.02852903, -0.019922867, -0.014411227, 0.028546534, 0.013810621, 0.013345473, -0.0024474412, 0.05160133, -0.061344415, 0.044245668, 0.034928974, -0.010545003, 0.038002025, -0.0522532, -0.017850649, 0.020405624, 0.040085185, 0.037829474, 0.038671408, 0.084986895, 0.020524621, -0.03813957, -0.0014985993, -0.015840013, -0.059345447, -0.011058084, -0.052039806, -0.05783997, -0.01352428, 0.0042194603, -0.008228021, 0.0029355125, -0.049532343, 0.03199763, 0.021814404, -0.05728313, 0.009423399, -0.011039328, -0.02095262, 0.0019261304, -0.023754185, 0.04072789, 0.081659175, -0.0403461, -0.027503911, -0.0215414, -0.03310673, 0.010134249, 0.011802069, -0.041788124, 0.01455471, -0.0072281207, 0.030083796, -0.038167913, 0.02453641, 0.03339807, 0.02602907, -0.056047738, -0.04444198, -0.043249726, -0.020203372, -0.011792898, 0.050112735, 0.019014351, -0.010750903, -0.0019339453, 0.00213776, 0.027935924, 0.041728206, -0.014172819, 0.02503459, 0.0047842227, -0.017283805, 0.0038814368, -0.046310905, -0.014437903, 0.010349525, -0.00647705, -0.005315015, 0.07264966, -0.03352561, -0.035601266, 0.026490884, 0.01415448, -0.04232256, 0.0010186557, 0.035385367, 0.03609559, -0.037310977, -0.0016359345, 2.2298726e-05, -0.06136442, 0.030340696, 0.03228876, 0.0008991387, -0.0013020788, -0.011138525, -0.03833729, -0.008096208, -0.028694082, 0.059715565, 0.012810721, -0.004525599, -0.054899875, 0.006496639, -0.028163081, -0.04844742, 0.0022609239, 0.0031697531, 0.036976703, -0.0133448485, -0.039605867, 0.019557856, -0.03172504, 0.021270774, 0.006362326, -0.006412628, -0.020913493, -0.040850222, 0.030386284, 0.014505425, 0.011711206, -0.014838915, 0.019666849, -0.022228703, 0.0066245967, -0.024637798, 0.043050084, 0.022907667, 0.008893022, -0.016943697, -0.03748603, -0.015272333, 0.018920364, 0.015360695, -0.0145587735, 0.019545352, -0.020558069, -0.08511361, -0.041412584, 0.046629757, -0.017704353, -0.012284304, 0.04010269, 0.035657953, -0.003742226, -0.052180678, -0.012788214, 0.029117133, 0.0064586583, 0.007223119, 0.030238738, 0.009002016, -0.042512618, -0.06375893, 0.03890731, -0.007495289, -0.03473266, -0.048690826, -0.03153206, 0.03798452, -0.0032487365, 0.02003905, -0.009789556, -0.013703751, -0.036920853, -0.004768593, -0.025201308, -0.008754021, -0.023986029, 0.015812166, 0.0129674375, -0.003731181, -0.018243326, 0.0412616, 0.007364831, 0.044560768, -0.009769759, 0.04027608, 0.024907883, -0.03114819, -0.009128722, -0.026640931, 0.026989792, 0.007256359, -0.040116027, -0.030765362, -0.03384738, 0.01470257, -0.006528316, 0.0009423816, -0.034984406, -0.009367548, 0.034573026, -0.0033008363, 0.027459523, 0.023448018, 0.010700887, -0.017486628, 0.002932178, -0.013741979, 0.013753312, -0.02854841, -0.0070962566, -0.045476057, -0.025396788, 0.008118611, 0.012572313, 0.0058660232, 0.03446424, -0.031601667, 0.02127986, 0.0007125171, 0.042426344, 0.008062552, -0.016765514, 0.048018534, -0.003715616, 0.051462952, -0.017687682, -0.0750921, 0.08622521, -0.033944074, -0.03819042, -0.03297877, -0.022067191, 0.0136882905, 0.019103287, 0.002128382, -0.034675974, 0.01907687, 0.036114763, 0.026713455, -0.031651475, -0.029498503, 0.0043860106, 0.068032935, 0.009814981, 0.021216715, -0.028695332, 0.025558922, 0.016878676, -0.008543069, 0.0009842699, 0.013660157, -0.0293868, 0.041180532, -0.025244657, 0.015571907, 0.041378096, 0.0402394, -0.02310398, 0.008381194, -0.05606941, -0.00076284556, 1.4171152e-05, 0.026278941, 0.030650534, 0.026265863, -0.026651768, -0.009903134, 0.0077357814, -0.040901277, -0.050402615, 0.0013477183, 0.01693661, 0.0028367313, -0.021709265, 0.025678126, -0.002082586, 0.03173004, 0.01600048, -0.018409159, 0.044939224, -0.046861496, -0.034792263, -0.028805366, 0.0352845, 0.0418621, 0.002375752, -0.020525245, -0.0014487918, 0.068244934, 0.0441794, 0.03500441, 0.027321354, 0.036316305, 0.056246135, -0.0069121877, 0.03137493, 0.04691735, -0.007961687, -0.00025424713, 0.02087744, -0.027571226, -0.04526349, 0.0019064366, 0.009842698, -0.01697829, 0.05363864, 0.044522427, 0.004977669, 0.057518203, -0.042967763, -0.0052181096, -0.0013129155, -0.03344663, 0.008681915, -0.062196348, -0.04419899, 0.015754987, -0.009863955, -0.04286023, -0.048443247, -0.019221917, -0.021314453, -0.031153401, -0.014816773, -0.04127869, 0.017277969, 0.011395481, 0.01455294, -0.01050494, -0.05736357, 0.014804164, 0.005545505, -0.006922816, -0.04289274, 0.04670478, -0.014971404, 0.02083201, -0.08497022, 0.006963975, 0.008391405, 0.028224764, 0.0067042047, -0.01584668, 0.031106513, 0.025294177, 0.027462129, -0.0055221645, 0.00019078955, 0.02935846, -0.024223827, 0.0077111903, 0.016372683, -0.015881693, -0.037800297, -0.017243791, 0.019028522, -0.019998413, 0.022635497, -0.022493368, 0.004266142, -0.008775694, 0.008634191, 0.034993157, 0.017828142, -0.0011203546, 0.012845731, 0.008004513, 0.013374962, -0.06786981, -0.018143712, -0.014820471, -0.06161432, -0.02670512, 0.0062636747, 0.029879456, -0.03798619, -0.041939937, 0.052012295, -0.013767691, -0.037347473, 0.011053914, -0.045349143, -0.006454126, 0.008063047, 0.008135492, 0.02330946, -0.026527146, 0.038151033, 0.0038112062, 0.029240504, -0.04697153, 0.012887413, -0.02224871, -0.03334889, 0.05722186, 0.01904436, 0.02487433, 0.0044914214, 0.011499369, -0.008442881, -0.026892262, -0.061733756, 0.017191274, -0.0047123246, 0.001838238, 0.032681175, -0.0029649488, 0.032069944, -0.00038772688, -0.003719719, 0.03906903, -0.023133779, 0.006950533, 0.013023288, 0.008137471, 0.011050113, -0.022640498, -0.015612493, 0.00522457, -0.010724228, -0.021140441, 0.030059513, 0.04783764, 0.03630941, -0.007006527, 0.057013042, 0.011469464, 0.01815189, -0.022327898, 0.0008644923, -0.027635414, -0.065130614, -0.0041171364, 0.06787482, -0.01930215, -0.0040462804, 0.027760454, 0.006749428, 0.0412864, -0.06178622, -0.026814736, -0.05439055, -0.056537893, -0.029115047, -0.011385269, 0.0013637649, 0.0104462225, -0.008620229, -0.021796899, 0.055471096, 0.03644445, 0.048807945, 0.0016271817, -0.019266931, 0.058766935, -0.040701006, -0.015344856, 0.05742651, 0.0036961697, 0.026514433, 0.042810213, -0.03208599, 0.026219966, 0.019006016, -0.046398018, 0.062069643, 0.018351927, -0.06003671, 0.019150851, -0.01623097, 0.0052304054, -0.006654606, -0.045118865, 0.019133555, 0.017342154, 0.011490303, -0.0662393, 0.0013658489, -0.01150114, -0.026352117, 0.049362287, -0.00014254512, 0.0070566083, -0.010588664, -0.0033587713, 0.028008344, -0.0053660735, -0.011150404, 0.04740667, 0.00811215, 0.08746101, 0.019846281, -0.06952534, 0.072132826, 0.006190631, -0.032034304, -0.01998966, -0.00081275724, 0.020153878, -0.022431605, -0.010278774, -0.0068900976, 0.019381968, 0.054742325, 0.066215955, -0.005509973, -0.102112316, -0.039516464, -0.011974702, -0.016102597, -0.038938574, -0.025346773, 0.009462162, 0.006075621, 0.048761472, -0.006661952, -0.012473947, 0.05698137, 0.010128413, -0.029209452, -0.0034448402, -0.009900216, -0.06629765, 0.02032143, -0.035364054, 0.058931988, 0.037513852, 0.052578617, -0.050652698, -0.0063115805, -0.032434434, 0.030128703, 0.017317146, 0.015201477, -0.013347453, 0.06232056, -0.036030464, -0.010394853, 0.047050618, 0.046594333, -0.050020833, 0.064221054, -0.011042114, -0.040119365, -0.018185755, 0.04801686, -0.038835727, 0.05918873, 0.0018180754, 0.011248769, 0.02775743, -0.035383698, 0.09126888, -0.006831745, 0.020574898, 0.029100042, -0.026864752, 0.009721827, 0.014894714, -0.03696378, -0.011409705, 0.007345658, -0.013024539, -0.013343807, -0.0024741164, -0.012078406, -0.02345284, -0.003259365, 0.047771785, -0.033974085, -0.035658818, -0.032899994, 0.06366348, -0.025452638, -0.03754855, -0.035036817, 0.012252212, -0.051229127, -0.011992754, 0.0006260314, -0.032738484, 0.023324883, -0.070135534, 0.026140774, -0.015974222, 0.018377066, -0.007818933, 0.023347182, 0.01293451, -0.02072489, -0.011978375, 0.010454975, -0.019737601, 0.017904833, 0.021662688, 0.035746314, 0.023784194, 0.023808265, 0.0009746835, -0.0047106575, -0.046224628, 0.029159905, 0.0633513, 0.0042142505, 0.0068765515, -0.000523499, 0.034484245, -0.014464161, 0.02712942, -0.0068338295, -0.0041729873, 0.048842125, 0.031370867, -0.0112211425, -0.0059972624, 0.005818925], [-0.018510899, -0.0727343, -0.029168453, -0.056703947, -0.00031309275, 0.061519884, 0.014507174, -0.029292474, 0.031482495, 0.038508784, -0.0044103386, 0.042851828, -0.044449415, -0.023650449, -0.02111526, 0.020133898, 0.0032088961, -0.04098913, 0.06440034, 0.019024452, 0.003349076, 0.012329349, -0.049347486, 0.025994629, -0.007382128, 0.02309791, -0.014158502, 0.045622088, -0.010205605, -0.011411571, -0.006265922, -0.03286661, 0.009833553, 0.02287773, 0.0033464332, 0.0026149345, 0.011516121, -0.017442927, -0.04438598, -0.061897628, -0.057570033, 0.011372791, -0.018061794, 0.025030345, -0.0076477993, 0.015501752, -0.0040384904, 0.037288535, -0.011791857, -0.04669108, 0.03225303, -0.039319776, -0.021231554, 0.01790484, 0.0034264855, 0.022060841, 0.017042108, 0.03092035, 0.024013141, -0.006158576, 0.0069008493, -0.005136755, -0.033907745, 0.009225055, 0.02408507, -0.01535415, 0.00372926, 0.0012274152, -0.031919148, -0.042513933, 0.001754946, 0.034423534, 0.043177526, -0.009231154, 0.023308944, 0.016717933, -0.058680907, 0.001829763, 0.0026893448, 0.022558207, 0.019476365, 0.015568793, -0.0017982504, -0.039901845, -0.05793558, -0.005340468, 0.007591483, -0.0019753308, 0.029050944, 0.026759367, -0.027411884, -0.009448896, 0.069112174, 0.023129424, 0.004860664, 0.013206009, -0.0023494156, -0.00929113, 0.01144049, 0.014192455, 0.014614317, -0.023830019, -0.023557587, 0.0044874935, -0.00015746127, -0.01765518, 0.007380857, 0.02576306, -0.024348045, 0.006457437, 0.0060510263, 0.007826506, -9.026831e-05, -0.06828462, 0.007904169, -0.043529958, 0.05275125, 0.014074537, -0.049845997, -0.029690955, -0.025257234, -0.0015063015, 0.0044831224, 0.029913777, -0.0373662, -0.012309324, 0.006415403, -0.03768336, -0.08989422, -0.0051587117, 0.036762375, 0.010782386, 0.026795162, -0.013620349, -0.03505582, 0.026338829, -0.0167773, 0.041885003, -0.02281267, 0.0329951, -0.0637587, -0.008103817, 0.016410941, 0.013603678, 0.03589629, -0.018697942, 0.04388178, -0.02795715, -0.05643314, -0.011712923, -0.0013076706, -0.026301013, 0.0044324994, -0.020705597, 0.0060254093, -0.05171159, 0.006267548, 0.02422606, -0.05181238, 0.0033285422, -0.021080699, -0.0010016935, 0.031578455, 0.031824864, -0.019597167, -0.046819158, 0.002980379, 0.023585238, 0.025627254, -0.0029918659, 0.027054874, -0.020524248, 0.011938999, 0.00498956, -0.06184924, 0.00055817934, 0.041424207, -0.013733795, 0.01829763, 0.024905106, 0.0012743282, -0.0012631464, 0.010836263, -0.014484811, -0.015846051, 0.03129952, -0.028924486, -0.02875325, 0.01036703, 0.015018491, -0.0054771667, -0.021134984, 0.033904083, -0.028858207, -0.022738261, 0.011476273, -0.05046974, 0.028457897, -0.017635254, 0.04674109, -0.008420163, 0.009851482, 0.057840027, -0.018497022, -0.04507804, -0.038132258, 0.048211865, -0.0063740807, 0.07746159, -0.046105962, 0.008303057, 0.04451122, 0.03136168, 0.034856983, 0.022254797, 0.032341264, 0.025667507, -0.05484918, 0.032283526, 0.05144216, -0.008468143, -0.016018152, 0.048718862, -0.031462163, -0.040292192, 0.010459738, -0.011638181, 0.028397107, 0.014301428, -0.020022487, 0.04812195, 0.018141286, -0.020865802, -0.04167468, 0.024494428, -0.013531504, -0.016707921, 0.009768342, -0.07256759, 0.01816426, -0.02557236, 0.030152053, 0.02212956, -0.007125097, -0.021309013, -0.013756463, -0.02796203, -0.012248026, -0.011855034, -0.012132142, 0.040397912, 0.007998256, -0.049907804, 0.012481626, -0.023582594, 0.029758452, 0.013424157, -0.018287871, 0.02452045, 0.03810827, 0.03284465, -0.058401156, 0.038625076, -0.024074394, 0.045734316, 0.001130641, 0.05210921, -0.01822891, -0.014018119, -0.015177071, -0.01314339, -0.041570995, 0.009581452, -0.016214952, -0.039007295, 0.027269568, 0.002206694, 0.0008840805, 0.033378944, 0.003971983, -0.04250743, -0.0038366064, 0.0147942435, -0.036271594, 0.030088214, -0.004366221, -0.004615882, -0.021875832, -0.021749783, -0.029469756, 0.0017827991, 0.008664944, 0.009730209, -0.00046577633, 0.058562174, -0.04207723, 0.0106329555, -0.011985456, -0.049228754, -0.038382024, 0.04440469, 0.000717877, 0.008628349, 0.048179694, 0.00014007851, -0.01803013, -0.021339916, 0.047336377, -0.0070307627, 0.019101912, -0.03159553, -0.02107663, -0.07266598, 0.020593371, 0.015290465, 0.009340152, 0.027074596, 0.059827555, 0.015134376, -0.004817969, -0.022170627, -0.019903755, 0.021850215, -0.05987147, 0.036331773, 0.09128891, 0.012681885, -0.013536179, -0.039138325, -0.02756599, 0.014940624, 0.027071953, 0.0018143116, 0.01281322, 0.0007977767, 0.022347504, -0.014972849, 0.0075548883, 0.0016259477, 0.028202644, 0.0019850894, -0.10921326, -0.026152598, -0.0067065894, 0.08797419, -0.06618497, -0.023184622, -0.07319296, 0.01775358, -0.006093111, 0.021121971, 0.0025842353, -0.0075857905, 0.021278923, -0.009890122, 0.031075882, 0.03575252, -0.008363237, -0.020965423, -0.03478786, -0.008798313, -0.048019484, -0.08062017, 0.04821303, 0.029917846, 0.008412844, 0.048413903, -0.041009866, 0.02747328, -0.013332669, 0.039156266, 0.009748164, 0.0025125695, 0.0022380035, -0.009924939, 0.054499283, -0.057366725, 0.01019422, 0.032107662, -0.020994294, 0.020655992, -0.03266005, 0.052481867, 0.027888026, 0.0051471232, 0.05632498, 0.021594457, 0.00046577633, -0.031895995, 0.058910236, -0.0069160974, 0.03477688, 0.04177796, -0.009629839, 0.027244763, 0.006577795, 0.040983234, 0.032494962, 0.0018037397, -0.0047477265, -0.03577634, 0.0019460546, -0.0033407407, 0.030756688, -9.29113e-05, -0.028840318, -0.013613233, -0.05291024, -0.008854019, 0.051944938, 0.040902115, -0.013362963, -0.01441101, 0.020112349, 0.0253212, -0.027750693, -0.006749386, 0.02326808, 0.04398506, -0.0012663739, 0.011740166, 0.019948483, -0.013932629, 0.032550264, 0.031505264, -0.005459606, 0.041365247, -0.040899675, -0.048578985, 0.0020603829, 0.004900512, 0.039889645, 0.014312, 0.07786333, 0.014810102, -0.0094310045, 0.03001238, 0.012631463, -0.042122766, 0.00062943844, -0.029490901, -0.05654659, 0.031097027, -0.008662352, -0.015312472, 0.029243272, -0.021583477, 0.037635174, 0.02320058, -0.038146086, 0.0064724814, -0.024962846, -0.0019879357, -0.001420506, -0.04533746, 0.041872285, 0.070376754, -0.0071803965, -0.01250033, -0.018846761, -0.046193432, 0.01758382, 0.008519884, 0.002731633, -0.0049236887, -0.02704664, 0.050927587, -0.04641824, 0.007814308, 0.061688222, 0.025254793, -0.033266716, 0.0010181614, -0.037365183, -0.015957972, 0.00038724902, 0.021285428, 0.017252631, -0.019794375, 0.024434043, 0.0052355616, -0.003195986, 0.041773893, 0.016022827, -0.007107917, 0.0142725585, -0.017941436, 0.012252296, -0.040111046, -0.04494711, 0.021593438, 0.029703965, -0.017818639, 0.056470145, -0.010366623, -0.047816176, 0.017736502, 0.031973686, -0.009502569, -0.017003784, 0.03243072, 0.043938708, -0.047697447, 0.029557176, 0.019877732, -0.06446133, 0.04095091, 0.022180794, -0.008745759, -0.035057038, -0.019477421, -0.054609887, -0.0018021131, 0.013792753, 0.051789355, 0.029219687, -0.0123342285, -0.06130926, -0.015301291, -0.009845141, -0.015197605, -0.038795445, 0.006514363, 0.041489266, -0.042902656, -0.01607467, 0.028876098, -0.05597936, -0.013167787, -0.014753582, 0.012907554, -0.015066268, -0.030554602, -0.0011106661, 0.0024717047, 0.018275673, 0.003583489, 0.011287045, -0.036828045, -0.02114962, -0.019832626, 0.038798295, 0.029677942, 0.024733262, -0.015859572, -0.0043360805, -0.0042801206, 0.04084031, 0.019683776, -0.0053307097, -0.015496872, -0.038967747, -0.051825397, -0.06944316, 0.034724835, -0.029129827, 0.001893398, 0.040197045, 0.037101086, 0.0070506865, -0.035529118, 0.021158159, 0.04260827, 0.022913106, -0.024149617, 0.013978575, -0.0059975563, -0.057014603, -0.080678724, 0.0050916206, 0.014209126, -0.011227832, -0.032548636, -0.023623817, 0.022472132, -0.013954789, 0.016464004, -0.034946848, -0.0061248266, -0.010510159, 0.0055646137, -0.024008524, -0.017505342, -0.02420492, 0.04206666, 0.023967454, -0.0077967215, -0.009406608, 0.05624348, -0.005865254, 0.015391152, -0.013742536, 0.051429756, 0.018637558, -0.076819144, -0.023314433, -0.048909564, 0.017707633, -0.03671526, -0.029373795, -0.02541988, -0.04703711, 0.013080009, -0.0021135795, 0.0030512314, -0.018320348, -0.013316201, 0.013906606, 0.00046679284, -0.009002433, -0.0033952268, -0.00013418261, -0.05399183, -0.030858545, 0.01313038, 0.0015112825, -0.014521609, -0.02334249, -0.024008116, -0.0056176265, 0.000784765, 0.025160866, -0.010498773, 0.0041647437, -0.018251479, 0.033708706, 0.030167403, 0.027627796, -0.019490227, 0.012063423, 0.05660839, -0.008377061, 0.02046732, 0.0132503295, -0.060901016, 0.090587094, -0.010143697, -0.03455792, -0.04945077, 0.0039025794, 0.026497407, 0.006312276, 0.018347643, -0.026928011, 0.037699267, 0.014696656, 0.007160879, -0.03559336, -0.026270313, 0.02010147, 0.06432308, -0.013549191, 0.0021290309, -0.039312456, 0.05381028, 0.0121276695, 0.0067562982, 0.019377278, -0.02646447, -0.035198133, 0.06375463, -0.022917373, 0.038390055, 0.0065009445, 0.019885661, -0.03321223, -0.004607807, -0.04437826, -0.014753582, -0.028971653, 0.043088075, 0.022952545, 0.030656459, -0.00041474626, -0.022225115, -0.026040372, -0.038730796, -0.048182335, 0.019107604, 0.021143114, -0.008128214, -0.021119531, 0.0033870947, -0.022126306, 0.021260219, 0.014843037, -0.009222819, 0.052062042, -0.033004858, -0.01900839, -0.0027686346, 0.073532075, 0.04466858, -0.022667916, -0.0433788, 0.021805082, 0.019449262, 0.0345382, 0.010980611, -0.0018830295, 0.02622556, 0.017891016, 0.013619942, 0.02157819, 0.024960406, -0.021353334, 0.042336646, 0.010221463, -0.0012190287, -0.023882067, -0.012897796, 0.015596899, -0.011123638, 0.027295185, 0.021172391, 0.049143773, -0.0017614518, -0.03739222, 0.0010197879, 0.01762265, 0.009333215, 0.023383355, -0.049289744, -0.052654885, -0.006851446, -0.012558679, -0.03783543, -0.046885844, -0.01485784, -0.0034269427, -0.010682562, -0.055104326, -0.033780575, 0.00897458, 0.0007937105, -0.02243208, -0.019791529, -0.032273967, 0.032788664, 0.012356186, 0.020868143, -0.04199235, 0.054884758, 0.010887496, 0.0016695317, -0.06971641, -0.014275811, 0.022456478, -0.005374217, -0.00049932196, 0.00908335, 0.068596594, 0.04174909, 0.038094826, -0.017687608, -0.028629286, 0.056786086, -0.028853327, 0.025690278, -0.01638939, 0.004360122, -0.05166844, -0.010709806, 0.011425243, 0.0010287333, 0.013441032, -0.045559675, 0.011350833, -0.0142436875, 0.012772151, -0.0035188375, 0.022333274, -0.02219787, -0.008242574, -0.029037118, 0.0035616336, -0.07056542, -0.055252332, 0.000357617, -0.040345866, -0.055385705, -0.006977496, 0.030427331, -0.010979645, -0.03100696, 0.0019084428, 0.0039457823, -0.04026048, 0.030185396, -0.061973665, 0.032331176, -0.024983127, -0.04988666, 0.02618289, -0.06243883, 0.06252422, 0.025943598, 0.025745578, -0.025013672, -0.007123064, 0.0040864707, -0.011221733, 0.073227115, 0.014111132, -0.011700114, -0.0042287856, 0.055330407, 0.016962308, -0.051464323, -0.08203844, -0.017166024, 0.020256696, -0.009308208, 0.011065796, 0.015159586, 0.03294407, 0.030949017, 0.030875014, 0.017742602, -0.029402256, 0.022451801, 0.01952619, -0.0028926518, 0.034681734, -0.0135105625, 0.014904893, 0.010463601, -0.00073393824, -0.0019202345, 0.014597849, 0.038382735, -0.010155998, -0.024238719, 0.07167141, -0.014014358, -0.014522931, -0.049566247, -0.016898878, 0.03286742, -0.08246132, -0.015543582, 0.0630336, 0.0012043907, 0.00024152872, 0.04073784, -0.017217154, 0.055937886, -0.06462154, -0.012415959, -0.0638937, -0.01772898, -0.01828055, 0.012709127, -0.016658975, -0.035198946, 0.00241915, -0.031755738, 0.02522308, 0.036577165, 0.050373577, 0.019945228, 0.0056470553, 0.060256127, -0.010512192, 0.017068028, 0.052089695, -0.008358255, 0.020832054, 0.02994224, -0.033723343, -0.020112755, 0.043679286, -0.023213593, 0.016222272, 0.023806537, -0.05572889, 0.02699429, -0.0099779, 0.04002383, 0.025058808, -0.031357665, 0.0058317594, 0.022075783, 0.0054953876, -0.023163985, -0.024884775, -0.018787904, -0.008355409, 0.028380843, 0.0015821096, -0.0072466745, 0.0035851155, 0.014270575, 0.057881907, 0.016460141, -0.09139869, 0.049121413, 0.029650902, 0.06458982, 0.00036005667, -0.031727277, 0.07578004, -0.015766865, -0.034054127, -0.033399273, -0.020142438, -0.028371185, 0.0040810574, -0.0085421465, -0.0342247, 0.038893443, 0.009715584, 0.016132817, 0.0012340734, -0.05967467, -0.023817822, -0.008825963, -0.021968136, -0.06626873, -0.037191354, 0.019641286, 0.020429913, 0.07530572, 0.0030382199, -0.016614247, 0.058639634, 0.014917243, -0.02143547, 0.0005262602, -0.017438455, -0.04261884, 0.037684172, -0.034724835, 0.04013422, 0.042643644, 0.020575888, -0.023251409, 0.03429545, -0.055083185, 0.038869858, -0.005190021, 0.017093036, -0.035717685, 0.036401354, -0.026245307, -0.003114968, 0.0031593905, 0.04029382, -0.035351023, 0.06440847, 0.0043589016, -0.015061896, 0.008084706, 0.0297308, -0.076024614, 0.033090245, -0.025396297, 0.002295309, 0.039682273, -0.038442913, 0.063300446, 0.018044513, -0.003908882, 0.005433989, -0.026260352, -0.022633761, 0.012149423, -0.00481309, -0.0156769, 0.009124418, -0.047194876, -0.01622471, 0.036735136, 0.019451194, 0.004419894, 0.025035897, 0.041186742, -0.036421634, -0.05828115, -0.020879222, 0.06320733, -0.015166702, -0.034777693, -0.024829477, 0.009228512, -0.045306556, -0.0145860575, 0.029426655, -0.03236078, 0.028289037, -0.06267385, 0.057878252, 0.0031597973, 0.024110178, -0.0047325804, 0.02462251, 0.027068295, -0.003478786, -0.008155457, -0.0091691455, -0.021452142, -0.0058418233, 0.015618856, 0.0055486546, 0.024692856, 0.011673481, -0.028032985, 0.009991116, -0.024460679, 0.034168586, 0.050300993, 0.017402468, -0.022702072, 0.008007043, 0.062520154, -0.0023583611, -0.027580729, 0.02183629, -0.04355649, 0.050146483, 0.022589745, -0.024725739, 0.021442885, 0.010198082], [-0.02630582, -0.08194618, -0.027649147, -0.046629902, 0.033399817, 0.03354211, 0.012182545, 0.007386103, 0.023351716, 0.06656954, 0.019514907, 0.0074859047, -0.040207975, -0.011323145, -0.021039078, 0.0055984254, 0.01421751, -0.025015585, 0.03147471, 0.034326687, -0.015618846, 0.0148126455, -0.027138134, 0.03775823, -0.027159978, 0.047963336, 0.009146748, 0.03647324, 0.006058834, -0.005978387, -0.04055842, -0.06248144, -0.0012436861, -0.031269267, 0.0140644, -0.0135458205, 0.0103419935, -0.00811391, -0.038240913, -0.024843447, -0.04259544, 0.037071403, -0.0034968534, 0.022818862, -0.02231931, 0.05269371, 0.009944785, 0.035707265, -0.009976304, -0.03217365, 0.03273678, -0.04041731, -0.043159433, 0.042307384, -0.0043683634, 0.015394157, 0.02777652, 0.011602546, 0.019203499, -0.007849214, -0.03640058, -0.008973311, -0.084232435, 0.0023889758, 0.03311825, 0.033204753, -0.013981359, 0.026402216, -0.02962356, -0.061274737, -0.015621008, 0.042616848, 0.02145472, -0.02107076, 0.045506243, 0.015036092, -0.075845174, -0.00045543435, -0.022466365, -0.017296124, 0.0013987413, 0.015800068, -0.0006081108, -0.028636679, -0.029095897, 0.012873264, 0.0032137749, -0.0073911846, 0.023691451, 0.032524846, -0.047074955, -0.032052543, 0.06360164, -0.0050595165, -0.0038484852, 0.0019290001, 0.024879344, 0.04382204, 0.008517228, 0.018574629, 0.04700965, -0.040050972, -0.02930891, -0.032817222, -0.004195359, -0.008718129, 0.0012519038, -0.018274898, 0.005949192, 0.04066644, -0.010140658, -0.0015492553, 0.013798839, -0.028985282, -0.012359495, -0.009478051, 0.0295855, -0.011205502, -0.025926456, 0.031032681, -0.0018060589, 0.0345663, 0.025330454, 0.05032333, -0.0704284, 0.02057283, 0.006114844, 0.0029138285, -0.07347155, 0.0072938697, 0.03078961, -0.019906113, 0.056493104, -0.024466297, -0.019134298, 0.016827716, 0.0016015891, 0.017383708, 0.003929314, 0.05119376, -0.015635606, 0.0058267917, 0.0069833267, -0.0057599684, 0.008828419, -0.0049366835, 0.0031413294, -0.025119608, -0.0042827735, 0.004637602, -0.025865901, 0.0020494545, -0.014286928, -0.0052649593, 0.010519539, -0.039954957, -0.012324841, 0.0098552015, -0.048309773, 0.017867904, -0.00071148097, -0.0031607922, 0.0021262253, 0.02160491, 0.011595627, -0.06189409, 0.025493294, -0.004124427, -0.031551693, -0.01286029, 0.08102493, -0.015245156, 0.037066214, -0.0079426365, -0.08459271, 0.007389022, 0.010327504, -0.008528041, 0.033869956, 0.005224736, 0.004306082, -0.014570439, -0.028300941, -0.024687309, -0.010306743, 0.026446048, -0.007119568, -0.034867328, 0.015715728, 0.025695926, 0.03693473, -0.016852368, -0.0034029984, -0.047193572, -0.04238956, 0.034888085, -0.03813711, -0.023444707, -0.011048933, 0.061828345, -0.010002255, 0.023220446, 0.023019439, -0.046368666, -0.033732526, -0.027109804, 0.07462943, -0.0077782823, 0.030718679, -0.019641202, -0.0080611445, 0.021430608, 0.033710793, 0.03693565, 0.016596429, 0.008553343, 0.00051187706, -0.037453312, 0.018341072, 0.053567383, -0.00114875, 0.012008025, 0.025121983, -0.027012382, -0.025814867, 0.017735556, -0.002112385, 0.00423342, 0.023180008, -0.013144449, 0.09465076, 0.016281912, -0.01871633, -0.044381708, -0.005171105, -0.028331216, -0.017923482, 0.037818782, -0.036287695, 0.045450013, -0.010360833, 0.02862446, 0.01405575, -0.011416784, 0.026004305, -0.007824778, 0.0029488618, 0.030668508, -0.04575969, 0.004823798, 0.068159014, 0.048565824, -0.02306669, 0.027887028, 0.016087689, 0.039880134, -0.008919301, -0.017129824, 0.03633354, 0.025314668, 0.035311084, -0.025273362, 0.0024026001, -0.056214135, 0.042804774, 0.012441619, 0.031711727, -0.011501231, -0.022438683, -0.022612121, -0.04092119, -0.04467495, 0.04369921, -0.014787334, -0.039958417, 0.0142199965, 0.015425947, 0.025948945, 0.050541535, 0.029460937, -0.055723023, -0.013873664, 0.024922164, -0.0086130295, 0.0067108446, 0.010598904, 0.037030317, -0.042041823, 0.024767758, -0.04537389, 0.006519242, -0.021058973, 0.018362697, 0.028829036, 0.024817929, -0.038709756, 0.006223837, -0.004361443, -0.072405845, -0.0038943314, 0.050209366, 0.020409124, 0.0231307, 0.0141383605, 0.0029190185, -0.051150512, -0.06625727, 0.035855617, -0.017831182, 0.0043649036, -0.003621849, -0.032325026, -0.06029899, 0.014127615, -0.014586009, -0.007770389, 0.013719257, 0.073866, -0.025387654, -0.0047429185, -0.0015328199, 0.015403456, -0.0011818369, -0.037573818, 0.027825179, 0.05835442, 0.024821172, 0.026606144, -0.04778817, -0.022869466, 0.05256915, 0.045553815, -0.015851105, -0.03825778, 0.015156275, 0.0035950334, -0.02091365, 0.008345737, -0.015211961, 0.0054755923, -0.0006959106, -0.06393295, -0.010635452, -0.0045223376, 0.06272278, -0.07784684, 0.015643068, -0.06353071, 0.005568204, 0.029632645, 0.03946038, -0.014288441, 0.0024004374, 0.017021047, 0.009760049, 0.008724185, 0.004011974, -0.0036292018, -0.016004646, -0.0115428595, 0.037323125, -0.0013939501, -0.058406316, 0.03800909, 0.018277168, -0.010474611, 0.06271067, -0.015987346, 0.024205925, -0.00080620096, 0.06281361, 0.043921515, -0.0107337395, 0.023937495, -0.012656576, 0.056212623, -0.03918552, 0.0052327914, 0.039778925, 0.023656635, 0.033244547, -0.019588435, 0.08629118, 0.0603457, -0.0013269446, 0.05655474, 0.037455257, 0.014769441, -0.033301637, 0.04651053, -0.0038817883, 0.025616776, 0.030349746, 0.026748227, 0.019366123, 0.036334407, 0.027555292, 0.024026865, 0.039406966, 0.01268296, -0.01867789, 0.04166424, -0.0040833657, 0.045734603, 0.009098306, -0.028644355, 0.006482046, 0.019144895, -0.010458122, 0.038715813, 0.03420645, -0.007171902, -0.025152693, 0.029848697, 0.046313304, -0.008332628, -0.037747853, 0.04495003, 0.02181284, 0.0014928125, 0.01059793, 0.030688634, -0.031446163, 0.028973928, 0.053123843, -0.013360704, 0.0065118894, -0.023165086, -0.010876793, 0.042279273, 0.037813593, 0.06351081, 0.011799825, 0.09994124, 0.039964903, -0.0376354, 0.0014964889, 4.844126e-05, -0.0752708, 0.0021872094, -0.049417008, -0.044608343, -0.0035426996, -0.020143347, -0.0029159908, 0.004869212, -0.031115724, 0.009119999, -0.0035914655, -0.0675695, 0.031093232, 0.002305285, -0.016035179, 0.009631918, -0.057620876, 0.03949952, 0.06341307, -0.05837431, -0.016797006, -0.02062084, -0.018518401, 0.0067480407, 0.00019381911, -0.03141397, 0.039603323, -0.03408232, 0.02471672, -0.041955106, 0.016468622, 0.036445126, 0.039464206, -0.05475333, -0.014186511, -0.03526351, -0.011554213, -0.008235771, 0.05691675, -0.013074382, -0.0017670246, 0.0045154174, -0.011392275, -0.0008955145, 0.016102826, -0.0030665046, 0.04457115, 0.016563019, -0.025594287, -0.018391242, -0.055513687, -0.009317158, 0.03109064, 0.035118617, 0.027910816, 0.0465261, -0.03378259, -0.0070568533, 0.028282775, 0.025613317, -0.050178222, 0.025512757, 0.04457634, 0.040624917, -0.035004865, -0.0022533836, 0.03556291, -0.05138926, 0.015059609, 0.028489517, 0.015991671, 0.015125783, 0.0015743409, -0.051219713, 0.0279851, -0.02173196, 0.018623069, 0.015605871, 0.023424594, -0.022010064, 0.004316462, -0.016310865, 0.00058302516, -0.026155036, 0.0042913766, 0.026342746, 0.009008452, -0.033309422, 0.03686034, -0.040369518, 0.005570745, 0.008230743, -0.0066904896, -0.03195912, -0.03131018, 0.037293714, 0.010923072, -0.01597437, 0.016513279, 0.024352977, -0.00078660285, 0.01580223, -0.019392075, 0.0379693, 0.0077903927, 0.024266476, -0.030380456, -0.018992867, -0.022867844, 0.042804774, 0.00058216014, 0.02428464, 0.010586145, -0.023378963, -0.08655761, -0.041249193, 0.024656601, 0.0068873093, 0.0072744065, 0.017299585, 0.049234483, -0.012475779, -0.026691997, -0.010179558, 0.019247616, 0.007429246, -0.008162893, 0.016877454, 0.00052074355, -0.060816273, -0.06788783, 0.008526905, 0.0033671001, -0.0658905, -0.03644167, -0.04179659, 0.0034038636, -0.007727571, 0.024037246, -0.014134467, -0.0039299596, -0.03274975, -0.017938836, -0.028338136, -0.0032030423, -0.008333843, 0.026538892, 0.009274771, 0.004959174, 0.008956876, 0.013249982, -0.0073826425, 0.035696883, -0.021910371, 0.042658582, 0.005904644, -0.021485753, -0.030707002, -0.051342543, 0.009584449, 0.014249948, -0.032052543, -0.03354817, -0.031991344, 0.014658671, -0.032206517, 0.019264033, -0.020812009, -0.0070471256, 0.04760738, -0.0064152232, 0.014218374, 0.0009351163, 0.01760537, -0.0012731239, -0.03587767, 0.011253078, 0.02214025, -0.02676639, -0.008064605, -0.017738152, 0.0039912136, 0.021200188, 0.008291241, -0.0028169458, 0.04152108, -0.013262525, 0.02364647, 0.017529234, 0.05068599, 0.0069094757, 0.0075101256, 0.047977608, -0.01418464, 0.018554246, -0.0043620924, -0.055254176, 0.0742345, -0.055768, -0.03218342, -0.03229648, 0.009710742, 0.01769382, 0.007560729, -0.0050478927, -0.039679665, 0.037868954, -0.015133568, 0.0315212, 0.0043952065, -0.0424925, 0.029344592, 0.04815926, -0.0006487669, 0.004396477, -0.03463723, 0.05041351, 0.0034773904, 0.015472658, -0.013612427, -0.02861781, -0.023793958, 0.041191507, -0.014892227, 0.031121453, 0.02251113, 0.032255217, -0.047420535, 0.023613492, -0.01090642, -0.035055038, -0.016367957, 0.034137245, 0.021818463, 0.0418792, -0.01646125, -0.013332591, -0.008578428, -0.023534236, -0.02608854, 0.012383013, 0.05906547, -0.032009292, -0.023065824, 0.02463238, 0.034000143, 0.021601342, 0.0029497265, -0.023635875, 0.05996336, -0.02704666, -0.046322823, -0.021364326, 0.017622238, 0.021729365, -0.00042245537, -0.016049195, 0.012701125, 0.041249465, 0.05167774, 0.028956277, 0.024218062, 0.060603477, 0.033366513, 0.03135274, 0.035173763, 0.026350748, -0.009446478, 0.010264141, 0.0056810356, -0.0438601, -0.022940395, -0.0024860746, 0.011644068, -0.019825451, 0.03997961, 0.033237625, 0.039925978, 0.046033036, -0.032195706, 0.015416431, -0.0041322126, -0.029210081, -0.005123528, -0.056302585, -0.045354858, 0.00815154, -0.0007560297, -0.057444416, -0.068940565, -0.031943116, -0.007995403, -0.0015404968, -0.028366575, -0.039695017, 0.016014269, 0.0023554564, 0.007792122, -0.03958646, -0.06267261, 0.0322861, 0.020530446, 0.019180143, -0.026873654, 0.010340019, 0.0048216353, 0.009955544, -0.04007649, 0.0022492746, -0.0025483563, 0.013282853, 1.730045e-06, -0.0086699445, 0.041294444, 0.01959276, 0.026593495, -0.027190253, 0.0034624687, 0.03776429, -0.027772414, 0.021326266, 0.051686823, 0.017661814, -0.043899026, -0.015554835, 0.0063272067, -0.0076018176, 0.019879298, -0.029052645, 0.030025797, 0.018382594, 0.0149147175, 0.01834453, 0.02522319, -0.02105162, -0.02023293, 0.0135783665, -0.002824839, -0.05808799, -0.024955899, 0.0065203235, -0.0373188, -0.045538247, 0.038285032, 0.0079344185, -0.020822821, -0.029461153, 0.04779228, -0.016333733, -0.015655177, 0.02114991, -0.060414035, 0.0030536375, -0.038732894, -0.04967305, 0.027071556, -0.0061044637, 0.03258713, 0.030305415, 0.023650581, -0.06671053, -0.0040037567, -0.017086789, -0.017461345, 0.044604886, -0.0053475695, 0.00020414531, -0.014278061, 0.010601716, -0.032697417, -0.027300326, -0.056450285, -0.012060143, 0.009701019, -0.014875792, 0.04098606, 0.027047092, 0.008227013, -0.024137588, -0.0024477434, 0.060074084, -0.0041832486, -0.008282591, 0.030102782, 0.013420905, 0.018468663, -0.011637797, 0.012918245, -0.013660436, -0.004104532, -0.041623153, -0.0031417618, 0.048963733, 0.031489845, 0.015598086, 0.036220223, 0.034318794, 0.0028690635, -0.029199049, -0.007638149, 0.00923152, -0.09410536, -0.0016495979, 0.06847518, -0.019900275, -0.023912683, 0.046432678, -0.00041650832, 0.04765582, -0.05303453, -0.01879291, -0.051314864, -0.08203181, -0.0024462836, 0.0031762547, -0.011053907, -0.001072628, -0.018937074, -0.020879913, 0.028178323, 0.020746699, 0.023311775, 0.015928524, -0.02157366, 0.052081272, -0.013042376, -0.030640826, 0.057956506, 0.004519743, 0.02051898, 0.029184127, -0.044508435, 0.011406997, 0.014579088, -0.040214896, 0.076561406, 0.01768798, -0.043175, 0.005452561, -0.02284957, 0.010929288, -0.0027732623, -0.013157858, 0.04025642, 0.02323184, -0.0064114383, -0.052717928, -0.011477118, 0.0016495979, -0.01578931, 0.020521794, 0.010696435, 0.025925372, -0.018639073, -0.0194217, 0.067431964, -0.02100015, -0.028089873, 0.04578737, 0.04526382, 0.054792687, 0.030289412, -0.051318325, 0.05667022, -0.013732556, -0.03564758, -0.0060196915, 0.0026381023, 0.002135308, -0.024496356, -0.008006648, -0.0010881983, 0.03215548, 0.052000824, 0.07840564, -0.0281288, -0.09963675, -0.02788242, -0.033942617, -0.026197532, -0.03501568, -0.021513974, 0.0057692677, -0.008605244, 0.037295662, 0.008290376, -0.0012066794, 0.059548147, 0.019221881, -0.012891322, -0.0044297804, -0.015481929, -0.05940196, 0.0174501, -0.039170813, 0.04677177, 0.045112114, 0.04687557, -0.0499464, -0.028757673, -0.037599068, 0.00931705, 0.027023302, 0.02394512, -0.027826909, 0.035924386, -0.033554222, 0.010413141, 0.033126254, 0.012948522, -0.062061906, 0.068927586, 0.0008812417, -0.0059389872, -0.007378642, 0.04883225, -0.02885023, 0.020738048, -0.004784791, 0.007555539, -0.0047299433, -0.02560034, 0.10723511, 0.028689768, 0.021235436, 0.017634997, 0.0061174394, 0.028712692, 0.022473283, -0.042474337, -0.013601018, -0.0007150492, -0.038893793, -0.010936263, 0.01019429, -0.029102817, 0.0031435997, 0.025522921, 0.027679855, -0.04453698, -0.05228888, -0.036054138, 0.041608017, -0.023840452, -0.032090604, -0.002185047, 0.007729841, -0.024385417, -0.0035950874, 0.018960427, -0.03130376, 0.019883623, -0.06253075, 0.007029173, -0.0023292894, -0.010565818, -0.006507909, 0.041136794, 0.005139531, -0.0044213464, -0.014271574, 0.010248355, -0.017423283, 0.0031936632, 0.030413328, 0.024645789, 0.052304722, 0.0010419196, -0.0018563382, 0.020124748, -0.039096422, 0.017488807, 0.09095366, -0.00013083465, -0.009540766, 0.0071604396, 0.041892607, 0.008906704, 0.01821348, -0.026097728, -0.0361095, 0.026416058, 0.04309423, -0.045288254, 0.02270165, -0.0043244637], [-0.036442805, -0.07627715, -0.015509602, -0.026279127, 0.0034450628, 0.011296784, 0.014332132, 0.014011599, 0.019766485, 0.031652924, -0.007691193, 0.029946586, -0.07406543, -0.028462816, -0.01480847, 0.012720816, -0.00444561, -0.035028737, 0.037853196, 0.046849072, -0.01595735, -0.010697688, -0.011826633, 0.036268897, 0.0034267013, 0.07077303, -0.007153869, 0.047547318, 0.02406455, 0.0021990996, -0.019051453, -0.036114663, 0.030216562, 0.0068644197, 0.017436728, -0.0035828352, 0.048206743, -0.029068468, -0.0066813333, -0.036655005, -0.036286537, 0.028840005, 0.0016884649, 0.0060262363, 0.0024957948, 0.004774142, -0.0076686344, 0.008506949, 0.00028590817, -0.0460926, 0.032737277, -0.007444105, -0.013993763, 0.032588813, -0.012549009, 0.0021262127, 0.042312317, 0.02292354, 0.034611154, 0.0004301738, 0.008010938, -0.024749683, -0.07604214, -0.0077730305, 0.014719288, 0.041007105, 0.019827865, 0.007974609, -0.030464174, -0.05029466, -0.013659592, 0.033554606, 0.015742786, -0.04626152, 0.04395674, 0.0007968707, -0.058371436, -0.022043783, -0.027539516, -0.010913824, 0.013782177, 0.019733435, -0.035155263, -0.015405205, -0.059384964, -0.011448918, -0.027609812, 0.016357096, 0.022874752, 0.018445276, -0.060547486, -0.028739806, 0.07309387, 0.009999442, -0.017207082, -0.006320932, 0.0047203703, -0.013389946, 0.022939084, 0.046197783, 0.03552291, -0.060809787, -0.021905027, -0.020838248, -0.0050909366, -0.03081356, 0.03555334, -0.01971901, -0.022429889, -0.04336309, -0.0037742504, 0.0123305125, -0.012688029, -0.031390097, -0.0010180562, -0.017349118, 0.043666117, -0.000238694, -0.018091954, 0.016040236, -0.011862567, 0.042243067, 0.019343393, 0.052116077, -0.06563613, -0.0070804246, 0.021949355, 0.007908903, -0.07652897, 0.014664992, 0.031679675, -4.1968175e-05, 0.06230569, -0.024008943, -0.026614644, 0.01962012, 0.014828462, 0.045749504, 0.0013655395, 0.04238051, -0.019837832, 0.006449984, 0.015805215, -0.008164909, 0.00041758333, -0.023597656, 0.007650798, -0.0016034466, 0.019474281, 0.0028517374, 0.011493247, 0.005395009, 0.013733036, -0.0033884053, 0.026936747, -0.03951828, -0.017208396, 0.0073591196, -0.03158315, 0.009285393, -0.008306551, -0.016114075, -0.0042694747, 0.046882648, -0.0063184397, -0.024226392, 0.04499231, -0.011243274, -0.016093204, -0.047612894, 0.06881732, -0.010302465, 0.011098484, -0.0031727941, -0.048943285, 0.01218546, 0.026190238, -0.04433518, 0.04396376, 0.03690891, 0.018215762, -0.0118345, 0.00020564406, 0.0077133575, 0.011329309, 0.012049588, -0.023120267, -0.02364697, -0.004185276, 0.012788752, 0.0248247, 0.004872505, 0.006577462, -0.021670792, -0.033693623, 0.020216595, -0.054098815, 0.011893781, -0.0055009783, 0.072833665, 0.0028412456, -0.0015795771, 0.036774613, -0.08442318, -0.016835796, -0.031129895, 0.042111915, -0.005372451, 0.059166733, -0.025397418, 0.02916998, 0.053314537, 0.028787546, 0.040868606, 0.035937347, 0.014589187, -0.0018014839, -0.04846065, 0.02302594, 0.023055218, 0.013533686, -0.00069457333, 0.022908326, -0.037404135, -0.019311655, 0.028672658, -0.031225897, -0.013407782, 0.024877686, 0.010445879, 0.03526061, 0.010256497, -0.018726528, -0.029744944, 0.0063938517, -0.039883208, -0.027885623, 0.017929329, -0.031593904, 0.06189388, -0.025592718, 0.040932607, 0.012256806, -0.009354182, 0.005159987, -0.030168299, -0.045199726, -0.005388976, -0.01035932, 0.0017280438, 0.04487237, 0.0022190672, -0.036237814, 0.021552755, -0.021044942, 0.0066687427, -0.012120409, -0.045483533, 0.044723384, 0.036101025, 0.01678517, -0.0025808704, 0.0048242416, -0.036006596, 0.055037063, 0.010322073, 0.035198707, -0.0018355831, -0.028726872, -0.015701344, -0.039690353, -0.041206453, 0.036625627, -0.022798162, -0.042874686, 0.03127678, 0.02400055, 0.028055202, 0.062045753, 0.017540338, -0.036600444, -0.022406809, 0.014824209, -0.02786477, 0.0333045, 0.0117623685, 0.014824209, -0.049151026, 0.016388573, -0.03550088, -0.016947798, -0.031992342, 0.025457894, 0.008734757, 0.034014158, -0.021684956, 0.0058540357, -0.011417441, -0.050766803, -0.033895597, 0.047382068, 0.015152085, 0.037907753, 0.021535182, 0.012731571, -0.033545163, -0.05100812, 0.020239152, 0.006904814, 0.026224865, -0.0017804998, -0.013809103, -0.051414162, -0.00948166, 0.036625627, -0.0014552465, 0.030766869, 0.080221646, -0.01694983, -0.02334742, -0.035643835, 0.0072216736, 0.0044801026, -0.073889166, 0.025003064, 0.07801045, 0.061063696, 0.013502473, -0.027644962, -0.04143662, 0.06654054, 0.034410756, -0.007454597, -0.010599652, 0.003959697, 0.03328496, -0.0056447196, 0.024645548, 0.03609132, 0.03467227, -0.011654562, -0.04798641, -0.03526376, 0.0051222155, 0.049953144, -0.07272036, 0.00204385, -0.057748206, 0.03423108, 0.016059121, -0.0072594453, -0.0065764133, 0.0013230467, 0.021177141, -0.005064903, -0.0063702445, 0.0035776228, 0.015572816, -0.024891848, -0.020796673, 0.008141826, -0.033177942, -0.010343581, 0.071279794, 0.022873703, -0.009464348, 0.06837875, -0.0041254717, 0.014419609, 0.013678477, 0.07047506, 0.033463325, -0.018833218, 0.0022883147, -0.0021569019, 0.044509348, -0.018537343, -0.0061900434, 0.016797762, 0.012993871, 0.046504933, -0.018883089, 0.0562447, 0.03195247, 0.031037925, 0.023063086, 0.011879617, -0.00055017654, -0.015318384, 0.06098815, 0.024072945, 0.037624467, 0.053530406, -0.009462774, 0.021412162, 0.045732718, 0.040268462, -0.0042230473, 0.021641938, 0.003586443, -0.042941574, 0.0402522, 0.0087045925, 0.0221891, -0.010184627, -0.039982032, -0.009274966, -0.015396025, -0.014014223, 0.042564124, 0.024909161, -0.015620554, -0.0112034045, 0.035395958, 0.045492455, -0.001640431, -0.023452865, 0.040291544, -0.0004616499, -0.012012866, 0.000811035, 0.045513436, -0.035827182, 0.015593275, -0.0040856516, -0.0356698, -0.011026089, 0.008514031, -0.0126597, 0.03753581, 0.013211581, 0.04777447, 0.018898532, 0.09346732, 0.06863895, -0.032248344, -0.012156082, 0.037849914, -0.09100379, 0.0013736709, -0.074216515, -0.045734815, 0.0029062962, -0.04711977, -0.02506864, 0.007166066, -0.026109844, 0.023610245, 0.013704708, -0.07788034, -0.00063935894, 0.019764911, 0.0042713108, 0.025657244, -0.03924969, 0.067438655, 0.06468975, -0.04081746, -0.031872403, -0.038519442, -0.063504145, 0.03998308, 0.026091876, -0.013462866, 0.029843569, 0.0046673855, 0.023847366, -0.038815316, 0.02873666, 0.058973677, 0.029629532, -0.05760552, 0.013730938, -0.028213369, -0.011219929, -0.011996078, 0.042147983, 0.0015599045, -0.039239194, 0.059063908, 0.0020102756, -0.0013650149, -0.01724297, 0.00429859, 0.016182141, 0.020126363, -0.000299679, -0.016466213, -0.032126095, -0.016740581, 0.03385153, 0.021338195, 0.01044483, 0.055842854, -0.030626277, -0.016566936, 0.050097413, 0.039742287, -0.015606719, -0.021354195, 0.049694516, 0.032263033, -0.048749186, 0.011408917, 0.013583, -0.06411898, -0.013427717, 0.007737817, -0.025454223, -0.016150404, -0.03946687, -0.0020370304, 0.02509592, -0.005967874, 0.068043, 0.021210585, 0.008509572, -0.04727374, -0.005177824, -0.06625201, -0.0021928372, -0.0080646435, -0.0098772105, 0.0067201536, -0.012024341, -0.023305977, 0.01278849, -0.044240225, -0.0022862162, 0.018190056, -0.0005107002, -0.051524065, -0.056659132, 0.0031680726, -0.011784663, -0.0063256533, 0.00920362, 0.022787277, -0.015709475, -0.03230684, -0.026459951, 0.014730305, 0.038870923, 0.018089334, -0.03717121, -0.023986384, -0.01425449, 0.038279172, -0.01813235, 0.026348574, 0.03913106, -0.01778926, -0.07216847, -0.04059162, 0.01123593, 0.0108340345, -0.0022358545, 0.039989375, 0.008761905, 0.015364024, -0.055813476, 0.0036299848, 0.01657166, -0.0021986077, -0.005663605, 0.024691977, -0.02075746, -0.044637877, -0.058549803, 0.029700352, 0.04459748, -0.04323299, -0.02773047, 0.006968563, 0.006865993, -0.016699137, 0.028589508, -0.0046540084, 0.005079198, -0.034165245, 0.0042130803, -0.004229736, -0.011173765, -0.0014584924, 0.032485466, 0.016652972, -0.0012619306, 0.023020273, -0.008406226, 0.0029664286, 0.0044780043, -0.002006341, 0.058871385, 0.010586997, -0.024697222, -0.026450444, -0.04969242, -0.018888958, -0.0125012705, -0.029478446, -0.032683767, -0.06443688, 0.005282744, -0.014653188, 0.0045808265, -0.025815673, 0.01509805, 0.05055906, 0.016119976, 0.01209208, 0.0020302103, 0.008534753, -0.04882787, -0.016646218, 0.011152518, -0.00043804283, -0.02333011, -0.033079315, -0.02313076, -0.0019934883, 0.0049396544, 0.04460168, -0.053144827, 0.02179827, -0.016544117, 0.030313613, 0.042701043, 0.027118653, 0.007961363, 0.022217426, 0.060612537, -0.0117507605, 0.014012123, 0.026872221, -0.03482834, 0.084113665, -0.035527896, -0.039712384, -0.043298565, -0.022073163, 0.012326185, 0.0040226495, 0.029819962, -0.02034722, 0.02032204, 0.029251818, 0.022248248, -0.024044616, -0.049061846, 0.010267514, 0.053610146, -0.019874291, 0.021165077, -0.06065031, 0.018539442, -0.008083071, 0.00902001, 0.015423304, -0.04151072, -0.032092016, 0.04847954, -0.015793674, 0.034050878, 0.0075256806, 0.03276665, -0.041742593, -0.0020763755, -0.03398714, -0.03899683, -0.016135976, 0.018321207, -0.019660983, 0.05321145, -0.0150602795, -0.013870087, -0.038971648, -0.039571792, -0.05990957, 0.021650331, 0.01513261, -0.017404726, -0.024124354, 0.0070123575, 0.012429792, 0.058578655, -0.0017077768, -0.03166866, 0.04763388, -0.04752686, -0.019374337, -0.0016923011, 0.030241217, 0.009027354, 0.0030920054, -0.012638453, -0.017834114, 0.033461228, 0.033304892, 0.03819812, 0.03757096, 0.03595099, 0.044404425, -0.029636875, 0.03993062, -0.018653804, 0.0116115445, 0.014981589, 0.022708718, -0.008503441, -0.048715986, 0.0054757977, 0.014981065, -0.006104566, 0.033487193, 0.005766427, 0.042006996, 0.029575627, -0.038710397, -0.0057580336, -0.009590777, -0.013684773, -0.0040079607, -0.03523648, -0.043881923, -0.02062526, 0.0026051744, -0.0362466, -0.047331706, -0.039780583, -0.017279347, -0.007876246, -0.036365423, -0.04591738, -0.016967732, -0.002044637, -0.027853949, -0.029382968, -0.015633145, 0.057248, 0.0447685, 0.031511802, -0.016728515, 0.035027426, -0.012167491, 0.041528035, -0.050831854, -0.01639841, -0.019746551, -0.01848803, -0.020110626, 0.026299357, 0.048731346, 0.012506516, -0.028760266, -0.02313863, -0.011572331, 0.026415817, -0.019776978, -0.003501195, -0.013862088, 0.0077861454, -0.03163246, -0.01132721, 0.032273527, -0.021211764, 0.015797347, -0.008655411, 0.0062423395, -0.024218785, 0.015013, 0.03303682, 0.018827185, -0.022935083, -0.012649207, -0.01182873, -0.010151053, -0.035806198, -0.0522252, -0.025372908, -0.041602004, -0.04149603, -0.0005046673, 0.0217584, -0.02317889, -0.032014634, 0.057280265, -0.017765652, -0.018876031, 0.022262018, -0.058277007, 0.01614306, -0.034433838, -0.013289747, 0.018723182, -0.041990735, 0.019905506, 0.010731262, 0.025875479, -0.040788345, 0.0031790892, -0.04181499, -0.0021734268, 0.027418334, 0.009340017, 0.035195563, -0.017967625, 0.025034016, 0.0019411593, -0.02080782, -0.06327542, -0.009571367, 0.01709626, -0.022896262, 0.018062053, 0.016890962, 0.033087708, -0.010772181, 0.01312135, 0.018967517, -0.010687196, -0.0040373383, 0.0041029137, -0.012525402, 0.018116612, -0.0035114246, 0.024033884, -0.0023790707, -0.030425878, -0.01590174, -0.013178007, 0.047325414, 0.04121065, -0.008042151, 0.06315476, 0.011074615, -0.018788103, -0.039781634, 0.0016902683, 0.019181553, -0.0870252, -0.01567026, 0.08985387, -0.015311499, -0.024038322, 0.04460652, -0.049965214, 0.04804307, -0.0588163, -0.020004787, -0.047850013, -0.022183852, -0.021701744, 0.018661149, 0.0021856239, 0.004764437, -0.030503517, -0.0006924093, 0.0030899069, 0.019525694, 0.03238684, 0.023119546, -0.01314522, 0.049566515, 0.02645359, -0.004287049, 0.050233282, -0.026986849, 0.03034509, 0.03736217, -0.06145085, -0.014357051, 0.018392554, -0.03985088, 0.054294225, -0.019886618, -0.07419973, 0.02399819, -0.013322798, 0.0023402504, 0.0044381344, -0.03868469, 0.028537834, 0.007109409, -0.00048473245, -0.04028735, -0.015274317, -0.030257875, -0.0025742229, 0.032188542, -0.0011079599, 0.023255615, -0.010467912, -0.007882672, 0.011820337, -0.007909033, -0.042876784, 0.029956883, 0.032594584, 0.077061966, -0.00720646, -0.03827078, 0.059246473, -0.003333847, -0.032722585, -0.024901815, -0.0068827807, -0.021666072, -0.0046521723, 0.019362018, -0.0041357013, 0.021480884, 0.051748857, 0.03360841, -0.015763246, -0.06849626, -0.026766384, -0.006015351, -0.02293482, -0.05507903, -0.025328089, -0.0003819104, 0.002853836, 0.048788004, 0.042299725, -0.041605674, 0.03807353, 0.021943059, 0.01720774, 0.013097087, -0.02518615, -0.036986552, 0.0044178064, -0.014670894, 0.0643519, 0.052299164, 0.064654075, -0.010759853, 0.00219546, -0.017279347, 0.0048074545, 0.015532422, 0.03438872, -0.028009297, 0.04027161, -0.05527366, -0.007519648, 0.010322073, 0.04228294, -0.055046506, 0.08246484, -0.004319574, -0.014953261, 0.0069598975, 0.0775362, -0.00950789, 0.032241, -0.029493134, 0.0044015436, 0.016091844, -0.04838406, 0.072208345, -0.017569976, -0.0048953253, -0.012583632, -0.00584197, 0.0030458402, 0.023422027, -0.041426785, -0.0034010122, 0.033676706, -0.009993934, -0.016893765, 0.015404943, -0.0035831642, 0.012947182, 0.020756671, 0.053882938, -0.027489418, -0.046317734, -0.02868577, 0.05110727, -0.04413583, -0.035215497, -0.013285026, 0.009737273, -0.047466006, -0.048892923, 0.0054747486, -0.044590138, 0.01964163, -0.05857918, 0.0034529315, -0.013868383, 0.012925412, 0.017490236, -0.0014360985, 0.0024580236, -0.025360318, -0.021378588, 0.013798087, 0.021712234, 0.021141207, 0.0054810434, 0.024218785, 0.029507825, 0.010343056, -0.0329681, -0.010848773, -0.011537576, 0.06569383, 0.10315148, 0.02233861, 0.005138544, 0.009757601, 0.025357302, 0.0038579246, -0.010093871, -0.015044541, -0.023956483, 0.041342128, 0.0269698, -0.023991106, 0.0066650705, 0.016501887], [-0.034572866, -0.08973981, -0.029117683, -0.025785483, -0.0047849384, 0.031191213, 0.020806817, -0.015469434, 0.03908973, 0.032923456, -0.01270982, 0.013973356, -0.0851555, -0.021547556, -0.01863532, 0.036205076, 0.00085955765, -0.061935224, 0.043170705, 0.031335153, -0.02922496, -0.012847422, -1.3126472e-05, 0.042218357, -0.027664946, 0.06651229, -0.020074902, 0.005695984, 0.029573489, -0.014163916, -0.034548875, -0.021634238, 0.012217578, -0.0072648237, 0.023516074, 0.005228636, 0.029774686, -0.033211786, -0.015447594, -0.023214392, -0.07042805, 0.014997674, -0.0069244406, 0.01706713, 0.0005970282, 0.03522059, 0.0058385646, 0.026595138, -0.008423122, -0.0345362, 0.026259735, -0.008307925, -0.028820982, 0.023506569, -0.016122477, 0.04460602, 0.027518066, 0.01988686, 0.01875094, -0.016195776, 0.0102348, -0.0015390789, -0.06730893, 0.02434825, 0.015904758, 0.030844156, -0.011388913, 0.0046150866, 0.0024170815, -0.04901877, 0.00067623967, 0.009449249, 0.01565943, -0.02710741, 0.074065894, -0.007922052, -0.07584657, -0.0021124568, -0.03724297, -0.02610448, -0.0034122039, 0.00073327194, -0.0019880948, -0.04270539, -0.048102636, 0.006913577, -0.020938082, -0.00034898313, 0.04175033, 0.018907214, -0.04409046, -0.008377858, 0.029573489, -0.017495098, 0.0068968297, -0.0054492964, 0.016095093, 0.05316131, 0.025608389, 0.045601368, 0.041337524, -0.022622796, -0.017153356, -0.027644802, -0.03744213, -0.0068601663, 0.012912828, -0.034981143, -0.01464009, 0.0069832834, 0.007823378, -0.0018229955, 0.014502984, -0.05120207, 0.016963024, -0.024244595, 0.019599406, -0.017270816, -0.031125356, -0.0076604285, -0.02429099, 0.040444016, 0.031401493, 0.014709797, -0.033326585, 0.00462595, 0.017059434, 0.022060622, -0.05505333, -1.7200206e-05, 0.044411607, -0.009900076, 0.03951883, -0.023259657, -0.054506544, 0.024775537, 0.0030660497, 0.05689511, -0.0030387216, 0.053512555, -0.01561575, 0.03565308, 0.015065569, -0.002644984, 0.038517594, -0.00080388325, 0.0107207075, -0.016877022, -0.017026845, 0.0016249667, 0.0049554696, -0.026321037, 0.009773337, 0.009907318, 0.041438915, -0.05461156, 0.014133024, 0.016236315, -0.043187, 0.0005033323, -0.0109900255, 0.00636815, 0.011182849, 0.009360532, 0.0014117747, -0.053651966, -0.0039144047, -0.0033400082, -0.021128414, 0.03998052, 0.077636294, -0.00118953, 0.01616231, 0.020050911, -0.058879018, -0.007136727, 0.0071183955, -0.037839092, 0.01942865, 0.014835631, 0.011663125, -0.00086182076, 0.011483853, -0.004850458, -0.024229204, 0.036620144, -0.025057077, -0.009801401, -0.012464718, 0.03159044, 0.040862255, -0.03544962, 0.0012833673, -0.024294272, -0.033771697, 0.0016376406, -0.030187266, -0.00980491, 0.034503613, 0.05819644, -0.013379949, -0.0042326082, 0.035504844, -0.038210258, -0.012631853, -0.044725966, 0.05426665, -0.02923039, 0.032058466, -0.025634643, 0.01004492, 0.05000552, 0.0374195, 0.048046507, 0.019675564, 0.017548736, 0.005845354, -0.043087415, 0.022038443, 0.06962281, -0.03324268, -0.0018701828, 0.031311616, -0.03379569, -0.029528225, 0.021126151, -0.017836614, 0.007838767, 0.009518503, -0.00502246, 0.075952485, 0.0041380073, -0.024256477, -0.0469113, -0.006093399, 0.0015991664, -0.02172748, 0.02779553, -0.039979275, 0.03391541, -0.028546909, 0.00951194, 0.01654657, -0.020516336, -0.015880655, -0.0016251649, -0.028135914, -0.0036799386, -0.040052943, 0.015113548, 0.06480675, 0.0045444756, -0.0135374665, 0.004497854, 0.021864628, 0.008173662, -0.008756715, -0.0013178525, 0.0062651164, 0.042958643, 0.022028938, -0.020955283, -0.015875788, -0.06340539, 0.061976865, 0.019650782, 0.033578422, -0.0054434123, 0.00819635, -0.016907802, -0.037920114, -0.053800885, 0.029463047, 0.007842614, -0.016967097, 0.037393246, 0.009011097, 0.01178033, 0.059199486, 0.016672205, -0.0602324, -0.024730274, -0.0017906319, 0.0025284302, 0.008208797, 0.026720066, 0.021840073, -0.046689194, 0.00800579, -0.048729084, -0.02192732, -0.011091417, 0.022406662, 0.018644502, 0.02975862, -0.0488341, 0.033484273, -0.03724297, -0.061612945, -0.020069612, 0.0067922706, 0.0034485843, -0.000935148, 0.010231406, 0.006671869, -0.04797409, -0.06588844, 0.029125832, 0.002980954, 0.007226003, -0.02204342, -0.020242322, -0.08408321, 0.022455772, 0.010154911, -0.019420842, 0.016112065, 0.07531291, -0.03167463, -0.018454915, -0.0083443625, -0.012770699, -0.0031164621, -0.07781011, 0.018710429, 0.07378888, 0.029807221, 0.00020187609, -0.052623574, -0.017860377, 0.065357044, 0.03606566, -0.005331158, -0.013967472, 0.020609014, 0.008469743, -0.0054026754, 0.02186961, 0.0194323, 0.04203911, -0.017678417, -0.06972782, -0.024497846, -0.007563564, 0.014642807, -0.093582235, -0.017600335, -0.056054566, 0.0056838756, 0.009617404, 0.029043905, -0.041639436, 0.0054868655, 0.032222323, 0.0036665574, -0.004247602, 0.0049183536, -0.0029421402, -0.0026101312, -0.017919218, 0.0012827732, 0.0067935153, -0.034121588, 0.031724423, 0.012860322, -0.020330869, 0.056613117, 0.0043389783, 0.047684398, -0.03865882, 0.041792877, 0.008550765, -0.00051351666, 0.02280204, -0.011224945, 0.03171265, -0.058133073, -0.0068925293, 0.035443287, 0.020230157, 0.020613994, -0.021148106, 0.054122936, 0.030005233, 0.0103040375, 0.037395056, 0.04213898, 0.021610247, -0.026553497, 0.038220216, 0.016686914, 0.028666405, 0.0506193, 0.0048350682, 0.008710546, 0.016482776, 0.022527743, 0.041812792, 0.010551646, 0.008674787, -0.030837703, 0.023533955, 0.009574517, 0.015218787, -0.019843087, -0.052585553, -0.027468728, 0.0179543, -0.0285881, 0.038255975, 0.025063416, -0.03901097, -0.018880393, 0.037366994, 0.04220297, -0.019148128, -0.031546988, 0.051216777, 0.015667576, 0.012171974, 0.008169871, 0.041121162, -0.027530344, 0.03879823, 0.032563835, -0.0063991556, 0.0052879173, -0.022058811, -0.036266178, 0.06283688, 0.031384945, 0.020773321, 0.00036165694, 0.09168252, 0.030514069, -0.03414207, 0.014890399, -0.004551944, -0.06727634, -0.022962274, -0.04403977, -0.046900433, -0.021594858, -0.007931106, -0.015615071, -0.018747319, -0.024281258, 0.039330535, 0.04502561, -0.058249965, 0.00010682233, -0.0096599525, -0.013530225, -0.016421966, -0.034230217, 0.045104373, 0.0709083, -0.056264136, -0.03421381, -0.033372924, -0.05690654, 0.0069113136, 0.02005725, -0.01533172, 0.034861535, -0.006123273, 0.045327295, -0.031016272, 0.0004506001, 0.020168599, 0.028565014, -0.03727177, -0.024833024, -0.044980347, -0.008489659, 0.013446939, 0.052529424, 0.014365793, -0.00048610382, 0.030979155, 0.0089690015, 0.0007079242, 0.009858999, -0.007029905, 0.045448374, 0.018190574, -0.01774518, -0.011274056, -0.0027165008, 0.007472131, 0.030045139, 0.022731429, 0.006856545, 0.07054257, -0.054077446, -0.008793378, 0.016806072, 0.042117868, -0.045367803, -0.0022017395, 0.06966083, 0.010646927, -0.06406081, 0.024828043, 0.020391805, -0.069894396, 0.01708252, 0.04781657, -0.01926061, -0.009110677, -0.0308583, -0.054683976, 0.0058274744, -0.026883015, 0.048189543, 0.024332859, -0.035332844, -0.053374954, -0.008466914, -0.012290904, -0.008847695, 0.0017222837, -0.0074310545, 0.050275296, 0.0135374665, -0.0401145, 0.031580932, -0.05917957, 0.01473967, -0.024532925, -0.00801688, -0.03164838, -0.047262542, -0.0049898704, -0.000210165, 0.021939429, 0.02731302, 0.020177526, -0.010035528, -0.017442366, -0.030786557, 0.0069579356, 0.017479936, 0.014653896, -0.023686493, -0.010057028, -0.007510945, 0.013212473, 0.013286819, -0.032237712, -0.0060019665, -0.011252556, -0.056642994, -0.061752357, 0.038882423, -0.0055020284, -0.023712294, 0.033031635, 0.034849655, 0.021517005, -0.039578125, -0.012469414, 0.02634121, 0.021727933, 0.017821224, 0.017518861, -0.031775117, -0.08740601, -0.07208878, 0.046197146, -0.021831587, -0.046704896, -0.029826062, -0.04383699, 0.023283647, -0.003269397, 0.021774894, -0.02706226, 0.025528727, -0.050086096, -0.0028309615, -0.0075155846, -0.006204295, -0.031436544, 0.007071095, 0.0072901715, 0.009857528, 0.025215048, 0.008009864, -0.012460191, 0.03261838, -0.0089690015, 0.057593532, 0.013055861, -0.014448965, -0.028343901, -0.049109302, -0.019440984, -0.0091561675, -0.023492767, 0.0023420004, -0.04831447, 0.020638436, -0.015529069, -0.0032784496, -0.023255583, -0.017179271, 0.032260343, 0.015419192, 0.009612199, -0.0033133593, 0.0010110779, -0.020441085, -0.0141182, -0.02613526, 0.021487584, -0.039643306, 0.00547736, -0.025964389, 0.010272143, 0.014332298, -0.017421093, -0.029271128, 0.014489816, -0.0073064663, 0.023195835, 0.017957013, 0.072844684, 0.019757716, -0.028177556, 0.030506374, -0.017852908, 0.06592567, -0.018626465, -0.06502311, 0.0833015, -0.019534906, -0.01822407, -0.040281978, -0.0049148453, 0.017789992, 0.012825922, 0.0066700587, -0.017791463, 0.0031214978, 0.0069140303, 0.029088618, -0.011619192, -0.018152554, 0.009513297, 0.063051425, 0.012455891, -0.012348842, -0.04213507, 0.027997296, -0.0150921615, 0.01907684, -0.0140471365, -0.022094795, -0.031623937, 0.027055018, -0.035194337, 0.043648235, 0.046572726, 0.020725794, -0.033504188, 0.016426763, -6.272559e-05, -0.044751313, -0.021342285, 0.03692341, 0.0047993097, 0.02144594, -0.020803874, -0.0026719163, -0.002531429, -0.019340273, -0.025907584, 0.008558064, 0.022893019, -0.03804097, -0.0071725985, 0.0363214, -0.0036031033, 0.06771449, 0.01927464, -0.013317485, 0.035996407, -0.040789835, -0.037009183, -0.03245475, 0.007155837, -0.00738468, 0.010056236, -0.02350589, -0.001867467, 0.021481246, 0.055793844, 0.05313732, 0.0319616, 0.02410111, 0.06209093, 0.018002616, 0.023035651, 0.0010388019, -0.026867174, 0.014910767, 0.008783873, -0.033979457, -0.060170393, 0.003491868, 0.00076586177, 0.009383617, 0.053051773, 0.017826656, 0.01205327, 0.052907832, -0.035135493, 0.02233492, 0.0018675802, -0.0060110195, 0.002650416, -0.06340539, -0.023053253, 0.021853313, -0.015378795, -0.045996062, -0.054540947, -0.027454017, -0.0063170013, -0.035589714, -0.025832899, 0.0023361442, -0.0016530302, 0.020966146, 0.0013644176, -0.03635535, -0.04131127, 0.046416115, 0.020317063, 0.02365911, -0.038750026, 0.015550796, 0.00022688428, 0.0018748224, -0.06448538, -0.008908348, -0.009303501, 0.041869823, 0.0046440554, 0.008909027, 0.027671508, 0.015453479, 0.00828337, -0.012531708, -0.046312682, 0.04514692, -0.032772277, 0.017986719, 0.019999312, 0.0033151133, -0.0750798, -0.0052396124, 0.005237236, -0.0037550763, 0.008236862, -0.008836379, 0.025573084, 0.007871923, 0.0006783331, 0.025808455, -0.00042909986, -0.002355523, -0.024905898, 0.014164821, -0.0066091786, -0.06622984, -0.030631982, -0.008822545, -0.07116178, -0.054660894, 0.0049900394, -0.0047508776, -0.022862261, -0.025756855, 0.057657804, -0.02706045, -0.025267612, 0.0071882713, -0.06387975, -0.014062978, -0.041579686, -0.043306425, 0.029516004, -0.027834317, 0.021861462, 0.018551325, 0.05793663, -0.072997674, -0.013915871, 0.012925955, -0.014497736, 0.03821614, 0.0050125015, -0.006906335, -0.0064944355, -0.016230447, 0.0064767827, -0.034035586, -0.07862485, -0.030380994, -0.0010702602, -0.022212708, 0.019070162, 0.02309037, 0.0039144047, 0.007169317, 0.009461018, 0.0076758177, 0.0040755435, 0.02434825, 0.042583182, 0.02007083, -0.0027239695, -0.014181569, 0.009682573, 0.012883124, -0.012711857, -0.009274758, -0.0013298474, 0.044159263, 0.042373158, 0.014666175, 0.04340336, 0.044873074, -0.00091370434, -0.014153619, 0.00075499853, 0.015543327, -0.09233795, -0.0014251275, 0.055942312, 0.0018367161, -0.00019734973, -0.00729549, -0.038820863, 0.011159454, -0.051196862, -0.013478327, -0.05702864, -0.060595416, -0.015777115, -0.028309727, -0.008839095, 0.009751611, 0.0144103775, 0.011130343, 0.03180997, 0.04029193, 0.03446559, -0.013913609, -0.023410894, 0.046304766, -0.006402097, -0.009666289, 0.026138881, -0.01556777, -0.0046845665, 0.045535278, -0.03919836, 0.0075513427, 0.025665874, -0.021538844, 0.032727465, 0.043707192, -0.04242295, -0.008518628, -0.028245455, -0.012632193, -0.008605534, -0.008884359, 0.034512267, 0.029491112, -0.0014896282, -0.03200234, -0.0052159624, -0.02991161, -0.0070004836, 0.02448223, 0.008570002, -0.0011770825, -0.022304595, 0.03207974, 0.044552155, -0.027042344, -0.06321709, 0.071063556, 0.028930746, 0.055845898, 0.03793007, -0.05141413, 0.07769423, 0.006863787, -0.024897382, -0.016313037, -0.013486772, -0.0024582716, -0.04139999, 0.03366533, -0.006913577, 0.03685551, 0.0633728, 0.0531432, 0.006572063, -0.090458594, -0.020663783, -0.0116074225, -0.022397835, -0.038416207, -0.020874713, 0.0048323525, 0.0010445163, 0.009798629, -0.0023410385, -0.029813386, 0.050566792, 0.02205123, -0.006493077, 0.022194602, -0.022767415, -0.01792533, 0.02072806, -0.031952552, 0.080053374, 0.035219684, 0.037880283, -0.044208147, 0.009016076, -0.044213127, -0.0055669826, 0.005593744, 0.041153755, -0.029439509, 0.01749442, -0.019809205, -0.0018929278, 0.019113954, 0.039918963, -0.052819114, 0.056662004, -0.004362515, -0.037309054, -0.006448493, 0.061066158, -0.021743776, 0.038098905, -0.011759508, 0.008211061, 0.006011472, -0.04329676, 0.08130254, 0.026959624, 0.03033573, 0.007839446, -0.031353258, 0.026559832, 0.021759616, -0.026267428, -0.019758565, 0.002558474, -0.019878585, -0.0037201103, 0.018585911, 0.0006730712, 0.026126094, 0.008948181, 0.044683415, -0.016067933, -0.037976243, -0.03581626, 0.04419276, -0.022767639, -0.048022974, -0.025753234, -0.013631756, -0.020563072, -0.020341506, 0.01117787, -0.014230002, 0.018528922, -0.08162131, -0.0077244765, 0.017919898, 0.020247357, -0.0008165571, 0.05440244, 0.004259314, -0.03741497, -0.025528727, 0.004052459, 0.0087630525, 0.03529482, 0.014893115, 0.028500287, 0.051075105, 0.018770857, -0.034484077, 0.007110927, -0.046291184, 0.03573569, 0.06903166, 0.015182802, 0.01718753, 0.025063416, 0.019503223, -0.011252556, -0.0014475331, -0.010623164, -0.030127518, 0.03046066, 0.01942582, -0.047472566, 0.00659311, -0.0150313955], [-0.024301115, -0.09300662, -0.030840324, -0.049003005, -0.011861965, 0.048733957, 0.0035318595, -0.023116982, 0.009439673, 0.07227666, 0.01019723, 0.039969992, -0.06657946, -0.018363848, -0.005653588, 0.04846, 0.015580077, -0.06334345, 0.04619055, 0.016094593, -0.014144775, -0.009265024, -0.023243008, 0.018070344, -0.0020576718, 0.053546127, 0.013699116, 0.031668287, 0.018314341, -0.015745493, -0.0017060662, -0.04910516, 0.0037156555, -0.00096302346, 0.018910386, -0.017574435, 0.022608457, -0.040747304, -0.024049262, -0.043077912, -0.072366826, 0.031975836, -0.028675782, 0.018484667, -0.038692642, 0.040138945, 0.018000405, 0.020241173, -0.0069725886, -0.04896273, 0.028777348, 0.001383634, -0.03547421, 0.011901846, 0.004068391, 0.01694603, 0.032144, 0.006039819, -0.011086361, -0.015826924, 0.0069156163, -0.01435125, -0.06681363, -0.0035397299, 0.02046965, -0.00829591, 0.0098910285, -0.010673927, -0.018435357, -0.027433006, -0.022073707, 0.020346474, 0.04043677, -0.013081953, 0.029276935, 0.0038737038, -0.07204877, 0.009011008, -0.021234708, 0.0018554704, 0.036694102, 0.027738689, -0.0013661495, -0.034065727, -0.039029755, 0.02785558, -0.0014734141, 0.0076225605, 0.043422498, 0.012149196, -0.02502724, -0.014249093, 0.033324305, 0.014359083, 0.008401407, -0.0117185535, -0.002328387, 0.039232105, 0.021104004, 0.018309232, 0.046396825, -0.036303353, -0.030084759, -0.017585492, 0.025503814, -0.016141154, -0.00074093085, -0.018664423, 0.015903663, 0.013343042, -0.0026635397, -0.0040015965, 0.0017059679, -0.06661541, -0.010418217, 0.0002842707, 0.042128716, -0.031005347, -0.02586765, -0.0029212737, 0.010434914, 0.04074324, 0.011449803, 0.04991102, -0.038948033, -0.011233308, 0.012630498, 0.0013241081, -0.05474028, 0.0049970346, 0.036604125, 0.01053108, 0.035689626, -0.03248583, -0.038316626, 0.033941176, 0.015797062, 0.034872763, -0.010849337, 0.02086256, -0.04757418, -0.00010687164, 0.0026696299, -0.018023783, 0.029191673, -0.028138282, 0.01384636, -0.0154716335, -0.011122889, -0.01788764, -0.02352276, 0.013099535, -0.009356376, 0.008295813, 0.002223873, -0.08239174, 0.0056998534, 0.02277714, -0.030287303, -0.0030199096, -0.0049821776, -0.0012746013, 0.021549957, 0.019588942, 0.015661998, -0.064387016, 0.0041613146, 0.0063978587, -0.022781929, 0.007884337, 0.062218152, 0.014398546, 0.015645104, 0.0025692412, -0.05004343, 0.0043255505, 0.040800653, -0.019362036, 0.029578296, 0.019491108, -0.005118837, -0.0019149963, 0.009598163, -0.024838224, -0.008559947, 0.040111635, -0.015432637, -0.011689871, 0.021026406, 0.00055853446, 0.025591828, -0.0004919239, 0.01913238, -0.018793298, -0.007609496, 0.042288166, -0.042264592, -0.011287727, 0.0027000804, 0.04126463, 0.011304819, 0.0082434565, 0.045699608, -0.03760349, -0.03403783, -0.033359274, 0.04648071, -0.0012856029, 0.047927607, -0.0154413795, -0.0366444, 0.032283485, 0.026604751, 0.050228488, 0.0023600655, 0.036374077, 0.008457397, -0.04332702, 0.0008742257, 0.0503334, -0.049902372, -0.008155249, 0.040913764, -0.022903534, -0.023802906, 0.0017023826, -0.010751405, 0.009129274, 0.0148715, -0.019797971, 0.05457683, 0.010517034, -0.022932155, -0.041231234, -0.0141677605, -0.019726263, -0.036970906, 0.055629827, -0.06156435, 0.00871711, -0.006737677, 0.024325084, 0.021924598, -0.017599244, -0.013691848, -0.007802415, -0.024588726, -0.0010920946, -0.044539537, -0.021179147, 0.07343967, -0.005667856, -0.044760354, 0.013274282, 0.0023700357, 0.019482855, 0.009657235, -0.005582079, 0.03270115, 0.041934546, 0.02234796, -0.027346369, 0.015708165, -0.04220958, 0.04370421, 0.0009288402, 0.025306575, -0.042133212, -0.0035249223, -0.04130707, -0.018993879, -0.05797865, 0.015329204, 0.025172984, -0.023169141, 0.02403217, -0.006358371, 0.013193931, 0.035697926, 0.019405846, -0.060466554, 0.010066561, 0.026727337, -0.028174035, 0.00032690147, 0.016714163, 0.001745308, -0.021155082, 0.0032222585, -0.016952513, 0.0020887118, -0.0018840055, 0.026482949, 0.05146655, 0.050060716, -0.043751363, 0.036985446, -0.021988053, -0.049187277, -0.027579363, 0.016642898, -0.003065487, 0.027774053, 0.013739292, -0.003301347, -0.040356614, -0.025473956, 0.040760625, -0.0019488634, 0.021435227, -0.011495381, -0.036009453, -0.06285938, 0.030035645, 0.0037200758, -0.014734337, 0.014474427, 0.069680996, 0.0013095705, 0.018512368, -0.007006379, -0.027737904, -0.009780129, -0.05471199, 0.03148784, 0.07067987, 0.027799983, 0.0064311577, -0.061664067, -0.022634292, 0.050558142, 0.054667983, 0.0056372825, -0.014653594, 0.008279016, 0.0089015085, -0.039788075, 0.016635828, -0.0005041041, 0.033318017, -0.0067168036, -0.07743793, 0.005852106, -0.025120728, 0.037289117, -0.08835298, 0.007083389, -0.08613854, 0.015974559, 0.011772972, 0.023148319, -0.033675566, -0.00067344843, -0.0092161065, 0.01097163, 0.03634736, 0.015058685, -0.030445056, 0.010911908, -0.03542991, -0.016491434, -0.0049193366, -0.029067513, 0.050407264, 0.01493924, -0.0018388208, 0.07431664, -0.006655902, 0.059736528, -0.046211176, 0.060581286, 0.009364627, 0.003947964, 0.013930516, 0.016000098, 0.05897804, -0.059124377, -0.0038497364, 0.027066814, 0.008567018, 0.037959863, -0.006429488, 0.04584479, 0.03166642, 0.0046863407, 0.041067783, 0.03791055, 0.004225752, -0.038170166, 0.03905215, -0.0047872206, 0.027093925, 0.022160148, 0.007910073, 0.009167386, 0.0075757056, 0.046999943, 0.031049352, 0.0040448164, 0.026210269, -0.017293656, 0.012918502, 0.0056034923, 0.005329437, -0.017562728, -0.013740078, -0.025268855, -0.010433466, -0.019342193, 0.032592706, 0.037249185, -0.0069906623, 0.004502373, 0.0471134, 0.02196448, -0.01342732, -0.014543972, 0.043921098, 0.014315298, 0.014391719, -0.00090683723, 0.041155007, -0.05052828, 0.03819875, 0.033032175, -0.0068472503, 0.022847544, -0.05030825, -0.030081222, 0.045417305, 0.026057819, 0.019719781, 0.023538478, 0.094823435, 0.031475857, -0.043930527, 0.0049982136, 0.012021095, -0.080763526, -0.0076648965, -0.018497732, -0.044042118, -0.0025321112, 0.012199083, -0.03697513, -0.009387023, -0.039264273, 0.028597984, 0.050973054, -0.023566768, 0.02495767, -0.024644913, -0.034681417, -0.007082701, -0.043741934, 0.03207308, 0.06674763, -0.05772483, -0.03101075, -0.018248333, -0.044918697, -0.00084328395, 0.022943022, -0.017903749, 0.024270667, 0.0047314274, 0.033010762, -0.04270465, 0.02004786, 0.004001989, 0.0118839685, -0.03815946, -0.025176128, -0.039265897, -0.018810187, 0.0103618335, 0.051367536, 0.0018623954, 0.0031265358, 0.011281441, 0.026712408, 0.017470762, 0.025008159, -0.007262556, 0.026714372, 0.0014129059, -0.021793956, 0.006985554, -0.024043957, -0.019994427, 0.01115561, 0.018166998, -0.0052372995, 0.063830264, -0.02715011, -0.023452824, 0.027285272, 0.040146016, -0.041888967, -0.017339222, 0.04863052, 0.05865681, -0.035771742, 0.006198457, 0.003102617, -0.077412784, 0.023499971, 0.042090137, -0.02121402, -0.032372676, -0.021800242, -0.030139374, -0.018990245, -0.019552795, 0.036979157, 0.034287967, 0.0026914363, -0.06786349, 0.00033711715, -0.018269647, -0.003194362, -0.035648763, 0.02414965, 0.022560524, 0.012686686, -0.034286935, 0.03729506, -0.04760974, 0.01709126, 0.00043617352, -0.019291509, -0.0067973505, -0.009902914, 0.0143714845, 0.014308619, 0.00049290614, 0.00014812723, 0.0028812122, -0.015601294, -0.027167363, -0.01710732, 0.039678253, 0.022189222, 0.00634845, -0.027915498, -0.0072849523, -0.025661962, 0.0025325534, 0.026548171, 0.012390037, -0.00808531, -0.012521171, -0.069378555, -0.043257866, 0.031047782, -0.023985513, -0.02242772, 0.0634126, 0.042142194, 0.004071338, -0.037960254, -0.0013830448, 0.028777545, 0.0143194245, 0.023431016, 0.015358378, 0.0042175003, -0.06796329, -0.05631192, 0.046031028, -0.008270765, -0.029977886, -0.05589072, -0.033631757, 0.034326226, -0.017171757, 0.016142724, 0.013760951, -0.011821889, -0.030395549, 0.004733195, -0.026464088, 0.0049978206, -0.023225721, 0.0084410915, 0.03132714, -0.0017659359, 0.005477171, 0.048405778, -0.0101213725, 0.03682199, -0.014795435, 0.060091723, 0.029379731, -0.033733718, -0.017054768, -0.042567916, 0.0036340284, -0.012250357, -0.043983962, -0.026542278, -0.011282423, 0.016974123, -0.03143018, 0.0068083517, -0.019231394, -0.0009023188, 0.01611414, -0.008494724, 0.009367414, -0.0023091345, 0.014267363, -0.04112741, -0.014230429, -0.023624133, 9.2726856e-05, -0.037952103, -0.020109942, -0.02792984, -0.014366769, 0.032775015, 8.801193e-05, -0.016983233, 0.014345945, -0.04064737, 0.033446107, 0.0096542025, 0.0592006, 0.019817617, -0.012057242, 0.039458007, 0.0026505736, 0.048786905, 0.0067015416, -0.056214478, 0.0797176, -0.012296524, -0.0425852, -0.030757027, -0.0039577866, 0.007276701, 0.007030936, -0.0010954342, -0.020216811, 0.0057032914, 0.004726516, 0.007417363, -0.012946792, -0.035303786, 0.01232285, 0.069922335, -0.032723445, 0.011452554, -0.03999985, 0.047864344, -0.00608854, 0.016095575, -0.0070003867, 0.004145893, -0.03133156, 0.050213166, -0.040457204, 0.043801263, 0.023083488, 0.010086403, -0.03305084, 0.012779608, -0.035541795, -0.03638822, -0.011208949, 0.03409215, 0.024097983, 0.00969752, -0.021688852, -0.021223448, -0.015073321, -0.033971034, -0.04282881, 0.021723822, 0.012548282, -0.029979458, -0.031506702, 0.02708646, 0.006219772, 0.02460189, 0.042940393, -0.019744143, 0.025518158, -0.031157207, -0.04964266, -0.029201888, 0.033242185, 0.013704912, -0.012105962, -0.043822084, -0.008652673, 0.045804493, 0.0536307, 0.0548668, 0.004203356, 0.055123758, 0.052162785, 0.015496731, 0.018527495, 0.008152891, -0.003210864, 0.017573139, -0.005877547, -0.021575497, -0.055821568, 0.006270556, 0.005149877, 0.005986383, 0.033538047, 0.026189838, 0.0101778535, 0.041776154, -0.04285887, 0.024841761, 0.008391977, -0.014757716, 0.016679196, -0.06330101, -0.030939339, 0.016803011, -0.009785827, -0.036864426, -0.061297167, -0.034230947, -0.018568553, -0.023019738, -0.019662809, -0.018363848, 0.00017857779, 0.02239118, 0.006241775, -0.038601093, -0.03763119, 0.02355223, 0.014257147, 0.02443549, -0.035783138, 0.025468454, -0.0006302284, 0.014736892, -0.063536756, -0.031860515, -0.009755966, 0.02792984, 0.0024385985, -0.011161799, 0.07151127, 0.02328881, 0.021371184, -0.005968113, -0.015130194, 0.04512969, -0.0113982335, 0.026396902, 0.024593836, 0.0009816868, -0.082985826, -0.01872611, 0.016732091, -0.0036678188, -0.0032542804, -0.0073218616, 0.007534254, -0.0016977659, 0.00013113386, 0.019107627, 0.047564168, 0.033475183, 0.009967351, -0.012193975, 0.030975485, -0.058491793, -0.04644987, -0.021843266, -0.030274535, -0.04471537, -0.0032466187, 0.0116507765, -0.0015196793, -0.04104028, 0.047307987, -0.005316766, -0.01389292, 0.014298797, -0.050487023, 0.0047263196, -0.012661145, -0.030683467, 0.020220349, -0.039368052, 0.042395823, -0.0023097731, 0.01879988, -0.039413888, 0.01699102, 0.0013186075, -0.042408787, 0.068502165, 0.027390473, 0.012809101, 0.0040127942, 0.018208256, -0.014927453, -0.024081482, -0.06338745, -0.0047400715, -0.007997692, -0.01671048, 0.02829031, 0.01867356, 0.00859688, -0.0032914104, -0.009806848, 0.033313107, -0.0041865585, 0.026947858, 0.038382635, 0.03584797, -0.006444517, -0.018701358, 0.01921057, -0.009456961, -0.014143989, -0.03048199, 0.01874497, 0.05039469, 0.040429696, -0.009866177, 0.047360636, 0.016374279, 0.0050056786, -0.018823553, 0.0013795085, 0.0062213433, -0.11166199, -0.00036333164, 0.080788665, -0.0050107865, 0.007521877, 0.035746988, -0.02113858, 0.04335924, -0.04888277, 0.013453646, -0.065506026, -0.07190575, -0.012342889, -0.019729996, 0.009515504, -0.010357119, 0.012693069, -0.0012337387, 0.059544, 0.02913195, 0.050377402, 0.015002695, -0.011425786, 0.050219454, -0.03263828, -0.009418421, 0.05347334, -0.017757978, -0.015093358, 0.033976536, -0.045560323, 0.02258292, 0.019673025, -0.03454822, 0.030852897, 0.0065152408, -0.039925985, 0.01060701, -0.033222932, 0.013436751, 0.0053447606, -0.028483648, 0.009499395, 0.028596807, 0.0026156048, -0.058370773, -0.015900299, -0.0035629116, -0.005084261, 0.024547473, -0.0143069, -0.0009804097, -0.018568357, -0.002306777, 0.039134666, 0.009926489, -0.043584768, 0.03767009, 0.041744567, 0.077101596, 0.016395759, -0.063910715, 0.06858644, 0.03474998, -0.0357242, 0.011164943, -0.024584306, -0.025147839, -0.020310128, 0.014116486, -0.013622205, 0.025699485, 0.06258169, 0.066524446, -0.001264975, -0.08511559, -0.02935295, -0.044350844, -0.027264839, -0.05118994, -0.028558303, 0.014597604, -0.008391781, 0.023772651, 0.006845531, -0.023632776, 0.07997142, 0.018781118, -0.0014160492, 0.0025708128, -0.000745351, -0.06319179, 0.008127942, -0.04161707, 0.0559363, 0.029346481, 0.021382187, -0.024565937, -0.0015360833, -0.05816017, 0.018143425, 0.0026647185, 0.02004786, -0.025668837, 0.043318965, -0.008411034, -0.021485915, 0.067890994, 0.037921358, -0.04452068, 0.06494515, -0.01610697, -0.033400528, -0.020005427, 0.041450478, -0.041729692, 0.038586162, 0.00025382012, 0.0005453597, 0.019298386, -0.045428693, 0.09545523, 0.015683413, 0.012693327, 0.017408682, -0.048414815, 0.0022572705, 0.022713562, -0.045164265, -0.0068690563, 0.021711444, -0.012348979, 0.020963736, 0.010688539, -0.0029892626, 0.008517905, 0.008397085, 0.0358185, -0.048641328, -0.051177368, -0.04409712, 0.075105615, -0.008194992, -0.06104492, -0.024751294, -0.004780934, -0.025279857, -0.0012447402, 0.026809065, -0.03499098, 0.00980174, -0.09518491, 0.020956714, -0.012185067, 0.010660446, 0.0024156133, 0.034672577, 0.0046838853, -0.013658549, -0.016938368, -0.003674891, -0.028167356, 0.02630771, -0.005349279, 0.04582789, 0.039448205, 0.040043075, -0.028654173, 0.004053264, -0.03440795, 0.020674553, 0.06118637, -0.014062264, -0.011891827, -0.005633795, 0.027483298, -0.004054246, 0.027987402, -0.0022395893, -0.029827403, 0.033956103, 0.012448974, -0.05195455, 0.011502256, -0.002081541], [-0.031008307, -0.0881895, -0.037844244, -0.03614768, -0.01923583, 0.040641893, 0.021605346, -0.04953334, 0.043842245, 0.013384186, 0.0021524923, 0.010122923, -0.023606455, -0.016425172, -0.041351806, -0.012169565, 0.017393794, -0.029751701, 0.036477353, 0.04293158, -0.02091702, 0.0059941593, -0.031221783, 0.038033772, -0.024129203, 0.036089726, 0.01543881, 0.018912366, -0.0049587158, -0.0069709113, 0.0019821853, -0.053438578, 0.008628893, -0.030365221, 0.0015546436, -0.007174186, -0.010331963, 0.030126318, -0.056553777, -0.056661993, -0.069040604, 0.039112087, -0.021258818, 0.019245587, 0.030546283, 0.050415628, 0.022875553, 0.01483978, -0.03504778, -0.03576035, 0.043021463, -0.020138223, -0.03435916, 0.022885606, 0.008080421, 0.032395013, 0.03371607, 0.023284467, 0.050232314, -0.011304133, 0.013966512, 0.025735587, -0.07396058, 0.008465682, 0.0156854, 0.004232841, -0.009644231, -0.0021524923, 0.0061032623, -0.04625966, -0.03321698, 0.011834569, -0.0019183202, -0.0050110496, 0.02556617, 0.02263665, -0.06778695, -0.001232361, -0.016311634, -0.023403032, 0.0012039766, 0.007659236, 0.017619688, -0.049630325, -0.040654313, 0.026544547, 0.029153261, -0.011882467, 0.038230393, 0.019445758, -0.02808411, 0.013766489, 0.06927477, -0.013584946, -0.0102181295, 0.028447196, 0.024836449, 0.03300173, 0.01707565, 0.0200986, 0.045393933, 0.0039946768, -0.020746123, 0.0041595143, -0.039215572, 0.018580733, 0.022902755, 0.00546875, 0.0017527437, 0.029347224, 0.0202012, 0.009878994, 0.020655647, -0.059768327, 0.011930144, 0.00010762461, 0.03506197, -0.012181687, -0.032807767, -0.018213397, -0.014778871, -0.0016321095, 0.006035775, 0.020973792, -0.021407837, -0.007293638, 0.0042440766, -0.009381082, -0.059134405, -0.012278076, 0.02194123, 0.015841812, 0.050771024, -0.033536304, -0.022996187, 0.02530834, -0.02627933, 0.056423686, -0.03034896, 0.020820042, -0.02869438, -0.00016557633, 0.043119624, -0.0070606484, 0.016578922, -0.037984394, 0.03362146, -0.06561029, -0.004003399, -0.015822, -0.013065156, 0.0037372943, -0.0071026334, 0.0026101926, 0.03494607, -0.028155517, 0.030566573, 0.020898098, -0.025525957, 0.022901572, -0.024278814, 0.019441027, 0.02415404, -0.0077046216, -0.017697744, -0.061594393, -0.0015824366, -0.0034144206, -0.0060092383, 0.010771924, 0.073269896, -0.00927464, 0.030812573, 0.035629664, -0.058379848, -0.011491885, 0.027013779, -0.021759097, 0.026759207, 0.020482384, 0.013907969, 0.01913412, -0.0053835963, 0.0022146574, -0.06308222, 0.03354636, -0.0393433, -0.02610784, -0.022184271, 0.044998918, 0.008530729, -0.04415448, -0.0008065933, 0.0017938422, -0.026109023, 0.025532462, -0.03721358, -0.0010287908, 0.030158326, 0.04932046, -0.015110615, 0.0075437757, 0.03895538, -0.011742024, -0.048965655, -0.04447144, 0.035207145, -0.008673835, 0.050594218, -0.029562471, -0.00061026704, 0.0080375485, 0.04193014, 0.039133966, 0.03510248, 0.027698556, 0.03591587, -0.036140583, 0.032559108, 0.05763712, -0.010599103, 0.0031985801, 0.022446975, -0.045083184, -0.035974413, 0.026773695, 0.0065402654, 0.03503477, -0.0023542885, -0.011962003, 0.05555796, -0.004034297, -0.010431901, -0.041254528, -0.0073823393, -0.004037106, -0.017327564, 0.019500753, -0.058234382, 0.039750148, -0.030435294, 0.025133824, 0.022233352, 0.010544847, -0.016844584, 0.02699456, -0.040816933, 0.014308752, -0.018658679, 0.02960978, 0.040646624, -0.0047431705, -0.03302775, -0.019144764, 0.016366038, 0.0032476617, 0.018704507, 0.0064279097, -0.007783418, 0.043444864, 0.02235517, -0.06616903, -0.007049117, -0.029650584, 0.02442724, 0.017651916, -0.008335586, -0.002096906, -0.0054309038, -0.023181869, -0.016464792, -0.062382065, 0.038555633, -0.0035894585, -0.02431725, -0.011030489, 0.045036763, 0.011190595, 0.08001121, 0.037012223, -0.06197049, -0.00084503065, 0.037254676, -0.021983806, 0.039625965, -0.0015397121, 0.013380934, -0.056442607, -0.014454814, -0.044563692, 0.0032260776, -0.016900022, 0.021176621, 0.049460016, 0.043075867, -0.008864247, 0.056901492, -0.0015848022, -0.07590019, -0.023430234, 0.034205705, 0.013534978, -0.0013998268, 0.051460795, 0.009839965, -0.019365188, -0.056716215, 0.043362074, 0.015220013, 0.0024676786, -0.020208592, -0.034034215, -0.036837187, 0.026350586, -0.009829321, -0.003304135, 0.022475805, 0.067933604, -0.018516757, -0.01825893, -0.0411469, -0.001641571, -0.013605644, -0.040470403, 0.018263957, 0.043632913, 0.0076534706, -0.0021252905, -0.037404876, -0.053935308, 0.065923035, 0.0046739834, -0.0017148978, 0.005350481, 0.023421217, 0.0057993107, -0.016145172, 0.0034558147, 0.013306129, 0.027697966, 0.00058306527, -0.099615455, -0.0075736386, -0.030015146, 0.08055643, -0.06826003, -0.0023026937, -0.03772775, -0.009146909, 0.008009164, 0.02974638, -0.018541, 0.0025140992, 0.027140327, -0.040967133, 0.011107806, 0.018440472, 0.010540117, -0.0235213, 0.01037454, -0.018202754, -0.0017391428, -0.067205064, 0.036092684, 0.0044260626, -0.021738991, 0.068392485, -0.018982735, 0.021503635, -0.018622607, 0.03996377, 0.03775377, -0.011117268, 0.01111372, -0.017063824, 0.04126044, -0.04477184, -0.015679635, 0.02178955, -0.013654135, 0.018947845, -0.010596885, 0.05707298, 0.03467878, 0.017776245, 0.05243566, 0.020984435, 0.03071116, -0.02663177, 0.02489322, 0.0005273311, 0.023518048, 0.036138218, 0.037566904, 0.021071363, 0.018659862, 0.039970126, 0.022238085, 0.009743872, -0.008492883, -0.019553382, 0.027031519, -0.017940195, 0.0073778303, 0.0068510165, -0.06365405, -0.022879101, -0.0023624194, 0.0013671875, 0.015849795, 0.05217665, 0.0030531092, -0.026515275, 0.024027787, 0.03226846, -0.0110888835, -0.02023816, 0.0155298775, 0.014610337, 0.03034541, 0.022035142, 0.07438162, -0.040087212, 0.033290304, 0.06199651, 0.02204649, 0.01636249, -0.02516169, -0.044474985, 0.054337125, 0.013134639, 0.05273429, 0.0021383, 0.098853804, 0.043383364, -0.033104625, 0.020278888, -0.029631067, -0.06527315, 0.0024848278, -0.031762272, -0.048686538, -0.0030063933, -0.012883318, -0.016103776, 0.0014110947, -0.02998824, 0.022914583, -0.0022701698, -0.066750914, 0.008419557, -0.012307643, -0.0012897953, -0.03527249, -0.046872295, 0.025815716, 0.07128298, -0.042470332, -0.03580588, -0.0043209507, -0.047260214, -0.018005244, -0.0076659624, -0.02567616, 0.0023381745, -0.017034257, 0.061201744, -0.04715141, 0.036794312, 0.028954571, 0.039484635, -0.034288492, -0.028462572, -0.040791802, -0.013387881, 0.00031873444, 0.021633731, -0.0065840245, -0.0019431565, 0.030394087, -0.0042340234, 0.017527835, 0.04022204, -0.021754365, 0.021641124, 0.022499459, -0.026920347, -0.02000517, -0.048300985, -0.010525406, 0.000147836, 0.052802294, 0.011041576, 0.051636163, -0.040783815, -0.022641381, 0.013110098, 0.028690536, -0.054178942, 0.016435966, 0.032609813, 0.005814686, -0.05174024, 0.028824475, 0.006746053, -0.059027962, 0.028593998, 0.05100224, -0.00289936, 0.01699996, -0.014516905, -0.029511023, -0.009203679, -0.006514246, 0.04692611, 0.054872, -0.010112131, -0.040928107, -0.015068037, -0.018924728, -0.016690096, -0.014166239, -0.016938902, 0.049691822, 0.003002845, -0.020609967, 0.05212343, -0.026697706, 0.010778798, 0.0064279097, -0.017386697, -0.031882904, -0.043213133, 0.002559337, 0.01151613, -0.018049004, 0.024424873, 0.026983103, 0.009592191, 0.022157736, -0.009227776, 0.020551572, 0.02821974, 0.0017956162, -0.0151493475, -0.042789064, -0.025922157, 0.06981408, 0.018700665, -0.010824553, -0.027853487, -0.026372762, -0.08672415, -0.06529976, 0.062105317, -0.005007501, -0.030577218, 0.009184755, 0.06234895, -0.015105293, -0.02964526, -0.013616288, 0.0062747514, 0.0017107583, 0.0014949178, 0.035121106, 0.0005180174, -0.08164747, -0.08954368, 0.034394935, -0.07720115, -0.022693567, -0.042710118, -0.036445126, -0.013633881, -0.012177547, 0.018622607, -0.06990633, -0.011185865, 0.0057549602, 0.027909074, -0.017108766, 0.0025670244, -0.008559705, 0.0035046006, -0.013692793, 0.009146909, -0.0021579992, 0.03986132, -0.018663261, 0.039429046, 0.00072498777, 0.037602387, 0.006749897, -0.03232523, -0.018599546, -0.036968466, 0.016153509, 0.0028937422, -0.0150757255, -0.015651694, -0.07018189, 0.0023256084, -0.031253714, 0.035040684, -0.010177918, -0.008518903, 0.06175524, 0.0025965918, 0.04132959, 0.00033884015, 0.044947177, -0.0048794756, 0.0005806999, -0.0056291516, 0.000515652, -0.023051035, 0.028259741, -0.017394977, -0.0044303495, 0.031785924, -0.018019067, 0.014370621, -0.006351035, 0.014185753, 0.0028077017, -0.007914549, 0.042959962, 0.010933212, -0.022380007, 0.049237672, -0.016641604, 0.052322123, -0.011114903, -0.07179863, 0.08618485, -0.016774066, -0.05274316, -0.02604989, 0.023918685, 0.025099006, 0.036317986, -0.014636948, -0.022529174, 0.013179877, -0.013910322, 0.010875409, -0.0027796128, -0.013621611, 0.03437365, 0.043787844, 0.009145875, 0.0110362535, -0.023122735, 0.02999297, 0.0039856588, 0.0074326037, -0.013825181, -0.00031562988, -0.035921343, 0.029307306, -0.039998513, 0.038874958, 0.027852895, 0.03877088, -0.01646361, 0.040813383, -0.0015658791, -0.048187718, -0.04186716, 0.03283072, 0.026362857, 0.03501703, -0.016236054, 0.015876405, 0.026119076, -0.06911156, -0.013949215, 0.000515652, 0.036239043, -0.005991498, -0.011649477, 0.0033801226, -0.01220741, 0.045931466, 0.041064113, -0.020103332, 0.06241755, -0.055853628, -0.03228502, -0.009485676, 0.019800564, 0.023453888, -0.018110503, -0.020870306, 0.0037715924, 0.02424274, 0.04127818, 0.019505484, 0.034468263, 0.032750998, 0.048037246, 0.009019179, 0.011611336, 0.032819595, -0.03176582, 0.0139131425, -0.015167679, -0.03373736, -0.03384144, -0.027469115, 0.027880691, -0.03686424, 0.069534965, 0.057052873, 0.001156669, 0.055624183, -0.028971128, 0.013279389, 0.0048543434, 0.017986322, -0.030582357, -0.06718615, -0.029900722, 0.034037765, -0.01805137, -0.024770219, -0.061958663, -0.015005503, -0.0022695786, -0.016214062, -0.010954058, -0.010761722, 0.038877323, 0.040986057, 0.003297852, -0.02780618, -0.040638346, -0.009987949, -0.0003997486, 0.007643418, -0.012385109, 0.04994965, 0.014880583, 0.0048561175, -0.038021058, -0.00052585267, -0.019483604, 0.016172964, -0.0030773545, -0.01862379, 0.041734695, 0.038142283, 0.029711489, -0.02816217, -0.04923989, 0.04790478, -0.037254676, 0.015256677, 0.0017973902, 0.015132198, -0.04378548, 0.00084325665, -0.02363484, 0.007821117, 0.027760057, -0.031410716, 0.030028451, 0.0049093384, 0.005305095, -0.00047189256, -0.01329578, -0.02044158, -0.01891828, 0.034487776, -0.011645783, -0.081402056, -0.042723425, 0.01678471, -0.04840033, -0.05182611, 0.024855375, -0.0002105185, -0.034435887, -0.03299552, 0.016747769, -0.03892936, -0.016240673, 0.0067850817, -0.046351913, 0.0043147416, 0.0009278189, -0.052283686, 0.026716923, -0.03635465, 0.07484051, 0.02032213, 0.04656953, -0.035184972, -0.02577639, 0.023492916, -0.01601005, 0.027859401, -0.024811614, -0.021656867, -0.005115126, 0.0064701913, -0.0056185075, -0.06803768, -0.046758756, -0.0110528115, 0.012432861, 0.014764679, 0.014735111, 0.022479463, 0.014564638, -0.0012359091, 0.0055159093, 0.032850344, -0.01635303, -0.0065948903, 0.032928992, -0.017319284, 0.012848724, -0.019294374, 0.032750998, 0.010397011, 0.015377458, -0.015772328, 0.027090654, 0.024849312, 0.010310675, 0.0010218425, 0.0504792, 0.0025214911, 0.01564933, -0.03346002, -0.011396974, 0.0339739, -0.034548685, -0.021768559, 0.04742579, -0.0056053507, -0.0073610507, -0.0065733804, -0.006154709, 0.009932214, -0.052958407, -0.077016644, -0.050737318, -0.048992854, 0.007427872, -0.0057277586, -0.008183019, 0.006832094, 0.0053401324, -0.01250811, 0.05003813, 0.024588086, 0.020065486, 0.016919537, -0.023091247, 0.045076974, -0.07057337, 0.015413753, 0.04677295, 0.011318325, 0.039426092, 0.0112392325, -0.03094267, 0.008651364, 0.018228771, -0.005123996, 0.03800923, 0.034468263, -0.05171659, -0.012346673, -0.01080149, 0.019372432, 0.0071727815, -0.0038425536, 0.04213326, 0.037403103, -0.010221973, -0.022171779, 0.009591601, -0.02254854, 0.004009904, 0.012618986, -0.004694089, -0.01402668, -0.0329899, 0.0025155775, 0.054063037, -0.03475684, -0.045177504, 0.08855909, -0.0012113682, 0.062121876, 0.04794233, -0.016733263, 0.061963394, -0.0028464347, -0.0059481817, -0.018461762, 0.0059985938, -0.012828027, -0.042098377, -0.012841627, -0.00519274, 0.029571932, 0.043214243, 0.036646776, 0.0034676413, -0.09241052, -0.0045548277, -0.014196988, -0.037356388, -0.04051653, -0.05505827, 0.018973568, -0.0077749914, 0.035022944, -0.0127221765, 0.0042418586, 0.053552113, 0.008402999, -0.008916581, 0.025624711, -0.008437297, -0.029868789, 0.05210865, -0.008738883, 0.06173203, 0.025082745, 0.0053481157, -0.033214614, -0.003563735, -0.026072064, 0.04254129, 0.015194586, 0.01757711, 0.0042221965, 0.014401002, -0.019813573, 0.015956828, 0.002892855, 0.042896096, -0.019437479, 0.023949435, -0.015675737, -0.0235434, -0.0274975, 0.027601574, -0.025093094, 0.029657088, 0.02872631, -0.010648333, 0.018505521, -0.028864687, 0.06249915, 0.014366283, 0.024221454, 0.012083525, 0.028213026, 0.016334696, -0.006057581, -0.001118823, 0.008400633, -0.012561626, -0.027238194, 0.005514283, 0.0001626196, -0.019628778, 0.014679525, 0.03879335, 0.02143149, -0.0019141807, -0.05602985, -0.03899086, 0.033718437, -0.039336205, -0.012117804, 0.0030507438, -0.0026421251, -0.0031163832, 0.025026862, -0.020105697, 0.0030531092, -0.004678714, -0.060764153, 0.03475211, -0.012259745, 0.026081823, -0.032677673, 0.06377764, -0.00079003564, -0.059316542, -0.02221443, 0.010454075, 0.003863842, 0.027521152, 0.045058608, 0.044945993, 0.047872495, 0.006936466, -0.013008387, 0.0028400037, -0.035735365, 0.023905674, 0.05422137, 0.011915694, -0.018536493, 0.0028597398, 0.043645922, -0.0014274676, -0.001251284, -0.0042288494, -0.015216465, 0.03641142, 0.023484638, -0.038134597, 0.018694898, 0.0033594258], [-0.05243516, -0.078638166, -0.03103335, -0.04346035, 0.03551508, 0.03277816, -0.00017351526, -0.030862069, 0.036136273, 0.07552616, 0.00076115725, 0.028972374, -0.05811194, -0.0011020007, -0.015303167, -0.0054851514, 0.009214183, 0.0026134534, 0.03888172, 0.053084124, 0.007162798, 0.008726911, -0.040210444, 0.032712165, -0.018036788, 0.027766842, 0.0171523, 0.03638156, -0.0030902766, 0.005628384, 0.0074394327, -0.049627155, 0.0020947638, 0.006901013, -0.013331803, 0.029825926, -0.0057199537, 0.011332389, -0.0450169, -0.054569587, -0.011900233, -0.01836897, -0.015925456, 0.01784155, -0.0040719714, 0.044472706, -0.00064758863, 0.012160643, -0.032478977, -0.03290933, 0.046347003, -0.017395524, -0.038216256, 0.020103848, 0.005586587, 0.017952092, 0.044499654, 0.030890666, 0.0053863977, -0.0019807138, 0.007144099, 0.0043923287, -0.08976376, 0.0100413365, 0.032008205, 0.021744922, -0.032346983, -0.007816162, -0.0147787705, -0.044154823, -0.045713436, -0.0020979948, -0.015220947, -0.017532982, 0.046227105, -0.016022252, -0.0553203, 0.0074214214, -0.0014343195, -0.024478028, -0.006009925, 0.0014541184, 0.01210812, -0.054732926, -0.044635497, 0.030173233, -0.0023296694, -0.0046780375, 0.042736866, 0.026908891, -0.018356044, 0.016215289, 0.05400917, -0.0071451995, -0.017264837, 0.013607337, -0.0037727884, 0.04615011, 0.00032338186, 0.019144425, 0.042601984, -0.051408917, -0.009008495, -0.0153819835, 0.0028246415, -0.0027591954, -0.0046851872, -0.026937488, -0.013661921, 0.01514835, 0.013271306, 0.022168156, -0.009759752, -0.03883882, 0.003869583, -0.016879654, 0.014834592, -0.023058692, -0.049554974, -0.02263013, -0.037849702, 0.026524186, -0.009333389, 0.0231548, -0.021356402, -0.035044584, 0.014205703, -0.0040049357, -0.083331324, 0.023369428, 0.025942044, 0.018990297, 0.05094584, -0.022894666, -0.014246951, 0.007534577, -0.015725818, 0.060289815, -0.0108607905, 0.030259304, -0.024937319, 0.0059026815, 0.027210273, -0.010793145, 0.033947945, -0.0017775004, 0.03940295, -0.07445482, 0.015843237, -0.0026448017, -0.015269344, 0.022937562, -0.004463275, -0.008716461, -0.0058090496, -0.024674365, 0.013301554, 0.0070387805, -0.03082907, 0.030943464, -0.015533329, 0.010805793, 0.019539578, 0.018503161, -0.034546863, -0.049350657, 0.010904789, -0.002439113, -0.018971736, 0.009633259, 0.070536844, 0.00030248304, 0.021911046, 0.023111077, -0.04045903, -0.020214666, 0.023314293, -0.017133841, 0.042868994, 0.01735572, -0.0066986238, 0.006571031, -0.005242306, -0.0007595074, -0.031074082, 0.021805177, 0.0016434797, -0.034002945, -0.013416498, 0.030815871, -0.0027894434, -0.052838832, 0.02980063, -0.028049525, -0.040959504, 0.034071688, -0.041788857, 0.0126668895, 0.043087605, 0.035540108, 0.014191403, 0.0083292825, 0.015560277, -0.010090971, -0.028437255, -0.028172718, 0.044295616, -0.022061463, 0.04694423, -0.037384704, 0.0018602707, 0.01886174, 0.02210436, 0.04705536, 0.03476685, 0.027741132, 0.054244556, -0.021895371, 0.053794686, 0.06100698, -0.035059433, 0.0034997975, 0.014664377, -0.039583202, -0.030571066, 0.03353712, 0.012478456, 0.027551254, 0.0043590553, 0.005143174, 0.078702785, -0.0036627944, -0.027793746, -0.055377495, -0.005954447, -0.002622253, -0.011468507, 0.023043707, -0.05782816, 0.048142098, -0.040691115, 0.035688598, 0.037727885, 0.0065440834, -0.0026996783, 0.016109696, -0.05189949, 0.00046197406, -0.0054094964, 0.03248778, 0.040046554, -0.01594168, -0.03654435, -0.015261918, -0.014041262, -0.0071109296, 0.0026115284, -0.015577326, 0.022338647, 0.054424945, 0.028198225, -0.0890334, 0.0061628856, -0.05147051, 0.025528468, 0.017966427, 0.00038277853, -0.018046688, 0.0092308195, -0.044980872, -0.02587715, -0.056413636, 0.0090942895, 0.011251818, -0.023128401, 0.02994252, 0.024243465, 0.008624616, 0.049303636, 0.048188496, -0.071984366, 0.005244506, 0.064100005, -0.025656061, 2.3098703e-05, 0.011368962, 0.02621153, -0.06624269, -0.027457623, -0.069559276, -0.0063056713, 0.0015201147, 0.018791415, 0.05365059, 0.03990576, -0.017890222, 0.067373425, -0.028282713, -0.079230756, -0.0064549875, -0.005221407, 0.010673801, 0.011173999, 0.027890585, 0.011242539, -0.027243271, -0.041809756, 0.037661612, 0.01267019, 0.021624787, -0.03261977, -0.033419974, -0.043163776, 0.017584851, -0.0003514303, -0.02059332, 0.03100066, 0.083410524, -0.015455782, -0.025531767, -0.024423305, -0.03620117, 0.0059077684, -0.07253433, 0.03220729, 0.07215595, -0.01820666, 0.025868075, -0.057830356, -0.059687052, 0.038625434, 0.026499437, 0.002890638, 0.015127451, -0.009287879, 0.018858442, -0.02122991, -7.314589e-05, -0.0030385794, 0.038187657, 0.010289922, -0.07114841, -0.016985798, -0.029592637, 0.021538991, -0.061530545, 0.011989327, -0.07535017, 0.0041431924, 0.013721867, 0.018316174, -0.03975617, 0.02193442, 0.018067585, -0.03185971, 0.009186478, 0.011716267, 0.008925174, -0.022566333, 0.010093033, 0.0017945494, -0.01710844, -0.05138582, 0.06690512, 0.008445464, -0.01852516, 0.056387234, 0.00044877484, 0.040698815, -0.03336388, 0.030989662, 0.023311956, -0.030058015, 0.026598707, -0.009072291, 0.061583344, -0.042897593, -0.024623219, -0.015986504, -0.0109289875, -0.006846016, -0.026963888, 0.05490617, 0.022924947, 0.017379025, 0.03422843, 0.023467185, 0.019409511, -0.034366332, 0.036548752, -0.014800289, -0.002562856, 0.041825153, 0.019902283, 0.012267062, -0.0060881586, 0.011725342, 0.021414148, 0.024569321, 0.014594532, -0.016121795, 0.0057504773, 0.0014483439, -0.0169242, 0.0026816498, -0.03496264, -0.012897876, -0.004715435, -0.019994678, 0.028767787, 0.029370552, -0.018002003, -0.023785064, 0.03220729, 0.024420831, -0.005007469, -0.018674202, -0.008987596, 0.00980485, 0.030076712, 0.018778147, 0.060567003, -0.054943018, 0.02619778, 0.027199823, -0.005985864, 0.0053566997, -0.015093353, -0.044637695, 0.035345837, -0.014513136, 0.039671473, 0.013127764, 0.088100664, 0.034644756, -0.010490111, -0.0019317666, -0.03147016, -0.049348045, -0.032335985, -0.04074171, -0.05295887, -0.0016885428, -0.0022515736, -0.017745305, -0.0026896242, -0.033991806, 0.01587541, 0.0075627123, -0.058702607, 0.020517148, -0.012803282, -0.007725279, -0.024018802, -0.05293343, 0.033782404, 0.053818878, -0.011157224, -0.008829205, -0.013957942, -0.03176292, 0.0028818382, 0.03343936, -0.018986035, -0.012954523, -0.00073475874, 0.02602234, -0.053485047, 0.029149463, 0.0050663156, 0.02373117, -0.0049550845, -0.0029434348, -0.0641671, -0.03826025, -0.013876271, 0.045695838, 0.018555684, 0.00071495987, 0.011829836, 0.012645991, 0.021454573, 0.03365701, -0.003262142, 0.014518773, 0.010774514, -0.017864099, -0.015173614, -0.049668815, -0.025020298, 0.020423654, 0.046322804, 0.013194859, 0.06556402, -0.030444091, -0.039543606, -0.0076357713, 0.024953682, -0.027482672, 0.031399388, 0.040510725, 0.055175103, -0.043454163, 0.030128995, -0.010366368, -0.0747518, 0.025548266, 0.030792497, 0.0024165644, 0.022890816, -0.008891901, -0.035375115, -0.001743952, -0.024548372, 0.060703393, 0.038940016, -0.025071442, -0.046061017, -0.0142848985, -0.023605777, -0.034248777, 0.012905026, -0.023364889, 0.0037469398, 0.00012559921, -0.041239988, 0.047908913, -0.031157678, 0.009351125, 0.022293996, -0.030006316, -0.027529942, -0.02798573, 0.0013100265, -0.0025276581, -0.02248494, 0.027366463, 0.024198644, 0.0040923203, 0.0044844486, -0.01855816, 0.026215928, 0.041964844, 0.022509964, -0.008036149, -0.04551875, -0.013830211, 0.030395694, -0.00552554, -0.015077954, 0.0051818094, -0.015226445, -0.073436834, -0.08040549, 0.081132546, -0.021802977, -0.016010426, 0.01887604, 0.037719633, -0.027031947, -0.05098221, 0.016158782, 0.016028302, 0.011186373, 0.0125282975, 0.049799707, 0.020078273, -0.057817157, -0.104714125, 0.007176548, -0.01693465, -0.016061299, -0.056591827, -0.023247195, -0.021575565, -0.018243577, 0.047260225, -0.034924965, -0.018763848, -0.014122383, 0.01550693, -0.003777738, 0.010296935, -0.012813455, 0.034135483, 0.020815233, 0.0033950282, 0.013708531, 0.032692365, -0.01802579, 0.016992947, -0.01190666, 0.03707562, 0.009899445, -0.0071295253, -0.013071048, -0.041259237, -0.0035912984, -0.0017838937, -0.043704398, -0.027744845, -0.051076736, -0.016806507, -0.02332639, 0.016250487, -0.014049649, -0.018635154, 0.033783507, -0.0055205906, 0.030072313, 0.027208075, 0.02068984, 0.00057279284, -0.008038349, -0.025943145, -0.0010735397, -0.057052698, 0.011155575, -0.0059105186, -0.03200958, 0.02440763, -0.0053017023, 0.0067290785, 0.0032712165, -0.013332352, 0.007766114, 0.009694582, 0.048801787, 0.0019160926, -0.012150468, 0.042150185, -0.007126775, 0.043902937, -0.000998744, -0.042110518, 0.09070971, -0.009396773, -0.040355086, -0.020468753, -0.007950354, 0.028138071, 0.03012511, 0.011343114, -0.020551728, 0.040578924, 0.02439223, 0.024712864, -0.03197328, -0.042663306, -0.022854518, 0.060709685, 0.00730799, 0.01319706, -0.052801438, 0.030280203, 0.016558472, 0.0032890905, -0.0035572003, -0.0068944134, -0.021449758, 0.033835202, -0.026860494, 0.06320686, 0.023791254, 0.049493924, -0.019761492, 0.050544642, -0.02425584, -0.03993717, -0.023048142, 0.032306287, 0.036075503, 0.01318496, -0.022968773, 0.0051595354, -0.0047176355, -0.062344503, -0.027462848, -0.021149613, 0.03582609, -0.046988815, -0.01634034, 0.018956335, -0.008085647, 0.057539973, 0.022756074, 0.0038504715, 0.057081643, -0.056629226, -0.0575905, -0.016446277, 0.008526722, 0.026712, -0.009672857, 0.00020238865, -0.008307284, 0.029854113, 0.02124201, -0.007752365, 0.022990085, 0.05059056, 0.060483407, -0.0023384688, 0.03456996, 0.017421924, -0.011991528, -0.008096096, -0.010284423, -0.031096356, -0.046441592, -0.013682682, 0.027160777, -0.029063946, 0.05592966, 0.045728832, -0.010198628, 0.03777023, -0.041367304, -0.023235647, -0.01765841, -0.0014486187, -0.01567852, -0.08000951, -0.015424434, 0.026237927, 0.0046579638, -0.028092973, -0.029701635, -0.016544104, 0.0075081787, -0.011084078, -0.00961731, 0.004404153, 0.036465157, 0.033202738, -0.006227713, -0.018620305, -0.038533036, -0.008922699, 0.019068532, -0.011009833, -0.02616753, 0.020442354, -0.019974604, -0.0034472067, -0.0516751, -0.022342497, 0.0067833196, 0.021246409, -0.025610963, 0.010030887, 0.024638617, 0.050706606, 0.0037003297, -0.023863163, -0.02725207, 0.019087229, -0.034189794, 0.03316974, -0.0011103189, 0.007041255, -0.07053904, 0.012107519, -0.004062347, -0.014866216, 0.0356743, -0.0418587, 0.01728443, 0.0044272514, -0.009116564, -0.01871655, 0.0037161417, -0.0049926196, -0.01390872, 0.010989483, -0.009428121, -0.07907127, -0.014156068, 0.009440496, -0.028755963, -0.046832073, 0.003906981, 0.016774058, -0.05570968, -0.051205706, 0.04796886, -0.035235424, 0.0069531226, -0.001390322, -0.06612461, 0.019390812, -0.00836008, -0.042574212, 0.026488712, -0.053406954, 0.06443562, 0.019830238, 0.030360496, -0.034132186, -0.009945642, 0.012074023, 0.0032948651, 0.006724198, 0.009866721, 0.006449488, 0.00040917704, 0.008484374, 0.01164784, -0.037265908, -0.066053495, -0.020762436, -0.013197609, 0.036589447, 0.024190117, 0.025452573, 0.033414476, -0.0014486187, 0.012307073, 0.04258301, -0.0041134944, 0.004505622, 0.04952802, 0.010734298, 0.019306391, -0.033584416, -0.005651483, 0.014379493, -0.0054402947, -0.035198025, -0.014634679, 0.03775318, 0.028484551, 0.01265149, 0.08094226, 0.008608049, -0.029988717, -0.037225213, 0.0028466403, 0.038625706, -0.030443544, -0.0012921526, 0.07760285, 0.010977109, 0.002155604, 0.00047847317, -0.011568051, 0.023781767, -0.064957954, -0.03485952, -0.04007735, -0.032967348, -0.0041158316, 0.013437396, -0.0004495998, -0.0026036913, -0.017396607, -0.013119514, 0.04315663, 0.012288373, 0.024504561, 0.01773018, -0.021612138, 0.04714473, -0.029312532, -0.01196781, 0.037789483, 0.010919088, 0.0129060745, 0.013222083, -0.018996485, -0.008311409, 0.007256735, -0.012554421, 0.034910392, 0.025582502, -0.09117169, -0.005749928, -0.0015377138, 0.026420519, 0.008603717, -0.032896955, 0.013659033, 0.019427042, 0.0036295212, -0.025391662, -0.006674425, -0.03756729, 0.015713718, 0.012782933, -0.0021157314, -0.0029627525, -0.018441565, 0.032365132, 0.034797646, -0.0032932153, -0.049967993, 0.08993962, 0.016083572, 0.037371505, 0.031717822, -0.057561968, 0.07062373, 0.022540072, -0.007778764, -0.027861435, -0.013434647, -0.032575224, -0.038997762, 0.029729133, -0.020368658, 0.03355032, 0.06010063, 0.023477083, -0.00020431353, -0.08340612, -0.0073082647, -0.02314009, -0.0374529, -0.04739854, -0.040222544, 0.02350018, 0.024542922, 0.04317698, 0.008957623, 0.0028537898, 0.036602646, 0.0010416416, 0.0042358623, 0.016442427, -0.021256307, -0.017674118, -0.0071869968, -0.034876846, 0.095252454, 0.008193441, 0.046712182, -0.019826114, -0.013311453, -0.023699546, 0.010250875, -0.0018832318, 0.013846023, -0.013897764, 0.023244996, -0.028591795, 0.017437322, 0.031173628, 0.051018987, -0.035554405, 0.039786693, -0.002105007, -0.039100606, -0.025333779, 0.029354602, -0.026223628, 0.04256321, 0.027364265, 0.0101967715, 0.036686793, -0.025984941, 0.100903936, 0.025000773, 0.008267686, 0.014338796, 0.0007820561, 0.02034336, 0.016892852, -0.014354744, 0.024389207, 0.014722125, -0.0070984517, -0.019871484, -0.006578181, -0.042934444, 0.020612843, 0.006560307, 0.041013297, -0.020984072, -0.06607989, -0.058290683, 0.052251466, -0.02976103, -0.01903993, 0.005762027, 0.015365038, -0.023927644, 0.014534585, 0.007987753, 0.00810242, -0.006187153, -0.06008743, 0.0043197325, -0.029962732, 0.029756906, -0.030248303, 0.03582719, -0.003277816, -0.0154071795, -0.01780305, -0.022779722, -0.033188436, 0.039417937, 0.01746262, 0.0468065, 0.02012447, 0.018088484, 0.0025870549, 0.0059187682, -0.033422243, 0.05487592, 0.044638794, 0.00015839112, -0.0007703693, 0.017322928, 0.0356798, -0.008464025, 0.0049502724, 0.003189821, 0.00759736, 0.03836585, 0.015371775, -0.043536656, 0.010469212, 0.033885524], [-0.023394642, -0.066890515, -0.039124966, -0.015006572, 0.01124217, 0.030763056, 0.0051019173, -0.018138789, 0.049264565, 0.012496971, -0.008791084, 0.020479826, -0.10306964, -0.015270775, -0.0015425425, 0.041024987, 0.019109752, -0.025096893, 0.009300132, 0.05075519, -0.0111048985, -0.019344037, -0.02360539, 0.005317504, -0.007881662, 0.066221975, 0.008481784, -0.002182922, 0.019494727, -0.0056111855, -0.00051212765, -0.046930075, 0.015294314, -0.017850993, 0.0074654687, 0.012154672, 0.023626508, -0.019487249, -0.021572277, -0.050422575, -0.052955236, 0.039147407, -0.036651883, 0.03303575, -0.006730695, 0.026446288, 0.030606007, 0.02596188, 0.0015224689, -0.04748884, 0.03339389, 0.0011284187, -0.042941287, 0.034247436, -0.0053679906, 0.03703334, 0.006598703, 0.0070496197, -0.007684555, -0.015307953, -0.008291826, -0.024149634, -0.05714051, -0.0029181156, 0.017290028, 0.026202407, 0.025994217, 0.018716417, -0.014515563, -0.038048796, -0.020300318, 0.01819461, 0.046582498, -0.050818548, 0.029677885, -0.0048185755, -0.062101196, -0.004002867, -0.021819102, -0.029425342, 0.008619935, 0.0430922, 0.0015333031, -0.039960038, -0.03461701, 0.008957202, 0.008820123, -0.024437377, 0.03873955, 0.019186307, -0.06508069, -0.04536465, 0.035502236, -0.012171391, 0.00981369, -0.01693805, 0.005827432, 0.049473997, 0.021406407, 0.0062968824, 0.036663763, -0.057312537, -0.023763338, -0.008397749, -0.007859663, -0.015056399, -0.00079052005, -0.042515393, -0.0023969687, 0.020152487, -0.022837637, -0.02262667, -0.005781455, -0.052091278, 0.014532172, -0.014576279, 0.011514072, -0.009878256, -0.025288695, 0.018329462, -0.012407656, 0.03807739, 0.007451369, 0.018896805, -0.044384398, 0.0011795656, 0.03909351, 0.022821357, -0.03103916, -0.012240026, 0.033466265, -0.011183213, 0.03626075, -0.013217645, -0.023353724, 0.020538783, -0.012775913, 0.048020326, -0.03640154, 0.038596123, -0.018422984, 0.005504657, 0.007681035, -0.0124960905, 0.0096889995, -0.020673525, 0.0022588172, -0.014852141, -0.009686428, -0.0056122853, -0.017002285, 0.012478712, 0.008523691, 0.024976341, 0.00084856886, -0.052518602, 0.0009842177, 0.033086568, -0.016109142, 0.021959014, -0.008518797, 0.003847117, 0.022705205, 0.048819315, -0.007726572, -0.06986758, 0.036190353, -0.014106169, 0.0024937624, 0.03591801, 0.07468264, -0.00089517847, 0.026043493, 0.0038176388, -0.042981762, 0.005236109, -0.005716119, -0.019808428, 0.01778633, 0.033808343, 0.020658674, -0.008418098, -0.005241829, -0.0023327325, -0.021711748, -0.005963383, -0.037281487, 0.0006106814, -0.006850147, -0.0011800054, 0.0132000465, 0.010399623, 0.007028996, -0.00068641163, -0.026545282, 0.025049377, -0.038196627, -0.024876907, 0.009703146, 0.04339094, 0.020618858, -0.0035815937, 0.040150598, -0.03136474, -0.014418329, -0.07308202, 0.027879937, -0.009781022, 0.04086198, -0.02152872, -0.009348529, 0.030109499, 0.018077468, 0.05602518, 0.019401895, 0.02072313, 0.009556994, -0.037289843, 0.021481862, 0.019186307, -0.0029654128, 0.020313075, 0.050406735, -0.004685704, 0.01170876, 0.038036477, 0.0059546935, 0.016205056, 0.026938178, 0.019383416, 0.034117863, -0.0042642104, -0.016552083, -0.020775486, -0.01154663, -0.023527514, -0.03657555, 0.07806515, -0.022567933, 0.05405674, -0.047372684, 0.018743036, 0.052747387, -0.032230604, -0.020779887, -0.02753346, -0.02912088, 0.0006065017, -0.06095551, -0.01454988, 0.06662224, -0.012058758, -0.006990498, -0.015246137, 0.007962507, -0.016005307, -0.0009767383, 0.003894469, -0.019523766, 0.051307052, 0.039002657, -0.013057714, 0.0016650747, -0.05648451, 0.058618378, 0.011170093, 0.00585724, -0.030001704, -0.008333459, -0.056782812, -0.036111157, -0.056614302, 0.020917818, 0.019172229, -0.012237167, 0.0030184293, -0.02502298, 0.028010389, 0.068299524, 0.023530593, -0.06363439, -0.008286106, 0.010209995, 0.024134345, 0.023200614, 0.00999247, 0.004540293, -0.02566886, -0.00036297707, -0.032235883, -0.00996141, -0.027043331, 0.030357093, 0.017823273, 0.05856558, -0.015866498, 0.03788161, -0.01864778, -0.033202942, -0.029187756, 0.005776835, -0.0033809112, 0.0059554633, -0.010577812, -0.009606353, -0.048189275, -0.05993565, 0.04050912, -0.026955776, -0.008130246, -0.002759203, -0.016073944, -0.06353903, 0.00340093, 0.00489909, -0.037322786, 0.020447928, 0.0851047, -0.023592792, -0.03192614, -0.034284834, -0.017499894, -0.027586145, -0.07787156, 0.034071445, 0.06704472, 0.03794584, -0.0056315893, -0.036807634, -0.029584391, 0.038092352, 0.027755206, -0.01013872, -0.0142375, 0.020915179, 0.010257732, -0.0027260676, 0.017828114, 0.012546687, 0.030666942, -0.0013999916, -0.07028292, -0.051830705, -0.0060988944, 0.04485693, -0.05991189, -0.0021937015, -0.044210166, 0.009200699, 0.010893712, 0.033301055, -0.030192653, 0.004448229, 0.0033129908, -0.004444599, -0.014253779, -0.0067839315, 0.0030217292, 0.0028488198, -0.016936619, -0.027182363, -0.008285447, -0.022640089, 0.05442434, 0.011382081, -0.01685055, 0.075004704, 0.017378902, 0.052029356, -0.022866234, 0.058115046, 0.023173114, -0.030067699, -0.0020828284, 0.008007494, 0.06626597, -0.042694904, 0.021460082, 0.008186563, -0.008619935, 0.044048253, -0.01091967, 0.02057013, 0.03794144, 0.0027329698, 0.041128602, 0.0383009, 0.01251149, -0.027250119, 0.060286753, -0.018255986, 0.028779462, 0.053134564, 0.029533135, 0.013838557, 0.0130704185, -0.0053747003, 0.035489477, 0.034528304, 0.00045229142, 0.0022372587, 0.033028714, 0.02028272, -0.017380333, -0.004438, -0.059271295, 0.009117984, 0.00957253, -0.01012112, 0.0221515, 0.031148272, -0.009936112, 0.014261259, 0.041241232, 0.037578903, -0.005620645, -0.005903547, 0.035540514, 0.010974667, 0.025047177, 0.035739053, 0.042398363, -0.0405056, 0.021749366, 0.037597824, -0.034085527, 0.00221801, -0.014123108, -0.02757812, 0.00781016, 0.018695958, 0.034711167, 0.0040424643, 0.10423294, 0.048787415, -0.058991473, 0.023497155, 0.007256462, -0.044145048, -0.016206376, -0.042167377, -0.028689926, -0.03149849, -0.0017356903, -0.027791724, -0.0098217195, -0.05116877, 0.0111040175, 0.04746596, -0.044924684, 0.01504001, 0.0097207455, -0.018717298, -0.022523059, -0.021640033, 0.046626277, 0.059426166, -0.08502111, -0.0060184347, -0.04853773, -0.052332055, 0.00023362524, 0.018170852, -0.018579146, 0.0009353293, 0.013381315, 0.03201414, -0.069269225, 0.010490698, 0.055747997, 0.011110618, -0.028094206, 0.008901957, -0.04462913, -0.026331898, 0.021299055, 0.025990037, 0.015263254, 0.023866622, 0.018015541, 0.026675735, 0.01486182, 0.025413234, 0.006711336, 0.040912133, 0.028865697, -0.0156398, -0.0072058644, -0.02880234, 0.007820066, 0.044060577, 0.030021502, 0.026855903, 0.07256021, -0.034902114, -0.008761222, 0.050435938, 0.018949052, -0.033198543, -0.009603494, 0.075389236, 0.046121407, -0.06303218, 0.022729844, 0.004915369, -0.07401388, 0.030653743, 0.039801646, -0.020513264, -0.0049268086, -0.021950653, -0.023711422, 0.011617466, -0.02737419, 0.029010888, 0.05244117, 0.0010664926, -0.038662996, 0.001565861, -0.015955152, 0.020359714, -0.015021201, -0.004129579, 0.051490825, 0.0037869508, -0.05109122, 0.030477755, -0.051753104, 0.016364107, 0.0017702281, -0.03973829, -0.054156177, -0.04845326, 0.015009211, 0.0020427909, -0.029061044, 0.045578044, 0.005726678, -0.00073315867, -0.03342535, -0.0040539037, 0.01264887, 0.01519708, 0.035571314, -0.029087441, -0.02216184, -0.023489237, 0.027087329, -0.0055788476, 0.01800947, -0.009943372, -0.010412162, -0.07336624, -0.046042208, 0.017530253, 0.007101811, -0.028909694, 0.03502398, 0.049497172, -0.007837225, -0.07474424, 0.021477904, 0.013405513, 0.00083616714, 0.009613832, 0.0034260636, -0.03403097, -0.06828897, -0.073873095, 0.036374703, 0.010392583, -0.03814559, -0.038576763, -0.025031338, 0.031876866, -0.033036, 0.036975816, 0.020232452, 0.014457926, -0.016086861, 0.02137737, -0.034585334, -0.005465115, 0.005370741, 0.010173038, 0.051069994, 0.0020252196, -0.003986148, 0.0029988505, -0.023168167, 0.026309898, 0.007865382, 0.05146971, -0.009625821, -0.00019182789, -0.019650918, -0.037767213, -0.021115806, -0.0107516, -0.04416265, -0.024457725, -0.01234914, 0.020503584, -0.025655659, 0.022022368, -0.051165245, 0.009098625, 0.031812795, 0.009828099, 0.014166225, -0.01186132, 0.0085557, -0.05886003, -0.0113336835, -0.0075389235, 0.006601343, -0.032996595, -0.004510595, -0.04969772, -0.013303886, 0.023055425, -0.0008157085, -0.03706018, 0.004449879, 0.013487347, -0.00081587344, 0.009638911, 0.05193432, 0.020818934, -0.019147646, 0.04432808, -0.023556113, 0.03629419, -0.007182986, -0.061230052, 0.09236601, -0.014981493, -0.043055568, -0.025559746, 0.00027256276, 0.007522672, 0.0089712525, -0.014798026, -0.0020309116, 0.043106716, -0.008253879, -0.009107045, 0.0037098457, -0.044527277, 0.0030964145, 0.043133114, -0.021664232, -0.023767298, -0.05647131, 0.04242388, -0.003257994, 0.0019389575, -0.028556835, -0.0017202174, -0.029974427, 0.0383229, -0.034377668, 0.04180044, 0.03582078, 0.0024480054, -0.019002398, 0.012300632, -0.020062294, -0.021134945, -0.022106845, 0.034021758, 0.014424709, -0.009094225, -0.035531607, -0.0052928654, 0.0044701174, -0.025108334, -0.020170966, 0.006074696, 0.05306505, -0.047582556, -0.00989767, 0.016550874, 0.023601867, 0.051065594, 0.04774171, -0.029613703, 0.027027491, -0.04664057, -0.069367774, -0.049164694, 0.024226189, -0.020348715, -0.019364936, -0.021638712, -0.010614412, 0.03530546, 0.01521072, 0.0487014, 0.022706967, 0.023043985, 0.05839487, 0.029160587, 0.023821853, 0.0042092144, -0.0056877406, -0.0112414, 0.015629573, -0.006897884, -0.07528804, 0.01360482, 0.013109769, 0.028516358, 0.066214055, 0.045515567, -0.018465633, 0.033767868, -0.028130503, 0.029483417, 0.0068371682, -0.0071789166, -0.017460736, -0.06562273, -0.009376467, 0.00025518387, -0.002583077, -0.021247357, -0.049450453, -0.028389646, -0.004537213, -0.0023512114, -0.01977829, -0.028600393, 0.0014534481, 0.0046432465, -0.019549726, -0.02878914, -0.01599288, 0.053043928, -0.004934728, 0.025755532, -0.032667056, 0.028133582, -0.013906642, 0.029992025, -0.042247888, -0.023481756, -0.0180459, 0.01187485, 0.022074284, 0.002040591, 0.046098527, 0.0140813105, 0.023698442, -0.011688301, -0.034444544, 0.03926576, -0.0161373, -0.0072511816, 0.011882769, 0.0370175, -0.07094112, -0.02325341, -0.0057725245, -0.007869783, 0.0067595127, 0.011990672, 0.03211753, -0.012004201, 0.005502292, 0.033335373, 0.02294081, 0.026287459, 0.0057895943, -0.013655858, -0.00073134375, -0.07578785, -0.03419728, -0.0051679136, -0.04384235, -0.027253198, 0.031095035, 0.033598036, 0.011686212, -0.016180638, 0.07667836, -0.045369275, -0.02056958, 0.03670248, -0.0595564, 0.01692067, -0.039650735, -0.031930983, 0.029552933, -0.040102586, 0.014131027, 0.013489108, 0.05046481, -0.024756357, -0.01321352, -0.018831689, -0.03388809, 0.042855054, -0.0043612244, 0.022092765, -0.0005011283, 0.034115884, -0.014371253, -0.009215658, -0.06474983, -0.0013023177, 0.017996622, -0.03510274, 0.024396183, 0.013550484, -0.014828823, -0.002106587, -0.007670475, 0.036155157, -0.0020348716, -0.02341664, 0.014457487, 0.00926389, -0.026583118, -0.022463221, 0.03326542, -0.026070112, -0.024653403, -0.023572829, 0.019916663, 0.03592582, 0.017369444, 0.0021347452, 0.017306747, 0.01866362, -0.01488778, -0.011843171, -0.0030107296, 0.03153891, -0.10973259, -0.005979002, 0.07048443, -0.014888659, -0.020608077, 0.01976267, -0.047015432, 0.031687237, -0.035823416, 0.0065287473, -0.050892465, -0.06302514, 0.0069786743, -0.0013419152, 0.02502364, 0.009004471, 0.012565826, 0.0059561236, 0.04615523, 0.031392895, 0.018255327, 0.016405683, -0.015216218, 0.0427565, -0.0016217375, -0.00081130874, 0.04395102, -0.0035505756, -0.0030050103, 0.03403163, -0.0023322927, 0.0036825675, 0.031547766, -0.036607448, 0.05479942, 0.016824977, -0.047770422, 0.027420828, -0.034428705, 0.0010862914, -0.0032421553, -0.025922723, 0.042018224, 0.022552975, -0.011998482, -0.038069915, -0.031204587, -0.012900866, -0.0015544218, 0.0008262678, 0.014883599, 0.0011419478, -0.04240936, -0.026169548, -0.005712599, -0.022485219, -0.04575359, 0.06380433, 0.032321237, 0.055497654, -0.001931038, -0.03846061, 0.07424971, 0.020501824, -0.034082007, -0.020935638, -0.020434398, -0.044081252, -0.020846764, 0.03116367, -0.0067856913, 0.009774436, 0.08654429, 0.03224996, 0.016049746, -0.08078242, -0.011842292, -0.053099368, -0.005026242, -0.06344399, -0.025228005, 0.014114307, -0.013431031, -0.00090810267, 0.025831647, -0.041366927, 0.088775836, 0.006752253, -0.010059524, 0.0033952657, -0.034078486, -0.0021171463, -0.005412538, -0.019337054, 0.080855444, 0.025237659, 0.02138551, -0.033742018, -0.00061756285, -0.05686905, -0.010789108, 0.0058459104, 0.015723368, -0.02214996, 0.02013225, -0.013596021, -0.026166465, 0.036062982, 0.044786092, -0.051372144, 0.05535378, -0.018344201, -0.036317065, -0.017813155, 0.040289134, -0.041662067, 0.036025364, 0.006887325, -0.009094665, 0.005509717, -0.058009453, 0.06359006, 0.011900808, 0.0014690671, 0.03178535, -0.015065088, 0.0107603995, 0.032608982, -0.03356691, -0.009400446, 0.009116883, -0.010328568, 0.006116988, 0.011503514, -0.022696406, 0.03785785, 0.016802538, 0.029178297, 0.0040618232, -0.050566442, -0.015768604, 0.04337158, 0.0028299014, -0.021875419, -0.037575386, 0.028832808, -0.031213388, -0.023526194, 0.03334065, -0.036206193, 0.0059769126, -0.07102383, -0.010866214, 0.04283833, 0.018753871, -0.00092449156, 0.027476924, 0.004068203, -0.03405209, -0.0003595673, 0.027292356, -0.0053243544, 0.04636075, -0.0074360254, 0.024576407, 0.018849289, 0.0279951, -0.0053423624, -0.0056593623, -0.061441675, 0.036175393, 0.06125293, 0.002466924, 0.023774778, -0.01107014, 0.023165416, 0.021223158, -0.0031634, -0.043380823, -0.033933517, 0.041276433, 0.018367078, -0.055007085, -0.004386303, 0.015022411], [-0.047842667, -0.082154855, -0.04074153, -0.041372538, 0.01922503, 0.029131537, -0.01412318, -0.033546887, 0.018260766, 0.07238875, 0.01621986, 0.007601993, -0.03220136, -0.008406701, -0.019747535, 0.021146616, 0.023108993, -0.021388583, 0.035271183, 0.036313143, -0.005052456, 0.00774906, -0.022083407, 0.028751938, -0.024881292, 0.044584155, 0.029046074, 0.023832884, -0.0054697944, 0.020142812, -0.009725312, -0.055978816, -0.0016715727, -0.023378154, -0.00707588, -0.0102603035, -0.02289519, 0.01635999, -0.04267061, -0.06048962, -0.033369295, 0.03391095, -0.008482732, 0.029983697, 0.0068045, 0.061772715, -0.012984103, 0.024710916, -0.04598677, -0.047190294, 0.030339155, -0.03237923, -0.036553722, 0.014619602, -0.012182724, 0.035142984, 0.03768475, 0.008933368, 0.002652449, 0.0073400466, -0.026923863, 0.016997652, -0.108800955, -0.0009623198, 0.025564324, 0.010573308, -0.014203373, 0.0036461595, 0.010993975, -0.03005057, -0.031272616, 0.0141576575, 0.013190273, -0.01368836, 0.044688486, 0.016088055, -0.08359195, 0.0031339214, -0.010538899, -0.009022372, 0.016351666, 0.015388236, 0.01360456, -0.04936578, -0.038810235, 0.027533777, -0.00089086726, -0.02698047, 0.030752625, 0.019239735, -0.047589876, 0.009505544, 0.06521575, 0.003045681, -0.005978148, 0.024814975, 0.0060713827, 0.049094953, 0.008696396, 0.018349562, 0.07314185, -0.002135251, -0.008556543, -0.01835081, -0.00075864536, 0.029349087, 0.0040191, -0.0089211585, 0.012566209, 0.03829522, 0.0033430066, -0.016804522, -0.01590769, -0.042872623, 0.010830814, -0.013098425, 0.031533454, -0.010593842, -0.03542269, -0.008735244, 0.0053166226, 0.021041727, -0.0025577226, 0.023582939, -0.053321615, -0.012464093, 0.0083256755, -0.007074909, -0.063275576, 0.010254615, 0.008117318, 0.022771016, 0.041067857, -0.029688729, -0.030133678, 0.0058585517, -0.03648546, 0.03742239, -0.0033523717, 0.010299152, -0.0294691, 0.006647443, 0.03290978, -0.005148188, 0.014495843, -0.0152146, 0.019498074, -0.06805498, 0.009652333, -0.0008058179, -0.022965645, 0.0054653543, -0.005301638, 0.011250511, 0.032399207, -0.041494075, 0.019070469, 0.018830167, -0.04640446, 0.03846615, -0.016747082, 0.010835254, 0.015169578, 0.022682777, 0.006272317, -0.061749402, 0.011638852, 0.0036789028, -0.0021474604, -0.0031100577, 0.08433784, -0.024420945, 0.02950115, 0.020717623, -0.06722086, 0.008997467, 0.03963159, -0.034621313, 0.052829355, 0.030450149, -0.0058516143, 0.016270917, -0.011493728, -0.017831774, -0.04314844, 0.052755546, -0.009656808, 0.0028020486, -0.0026505417, 0.02009883, 0.0011770936, -0.04628791, 0.010347989, -0.0145868575, -0.03475173, 0.03881384, -0.054891072, 0.004173382, 0.002433548, 0.022812638, 0.011241494, 0.0050635557, 0.024235861, -0.027245538, -0.045547582, -0.03562026, 0.054558646, -0.0012409152, 0.03961161, -0.02338093, -0.037800185, 0.016332798, 0.013921448, 0.034935426, 0.023540761, 0.042379804, 0.008434172, -0.008006515, 0.007718537, 0.059448496, -0.01858376, 0.0009835474, 0.016345562, -0.021751532, -0.02112636, 0.015293892, -0.002646657, 0.029664312, -0.0007026974, -0.014134834, 0.092116304, 0.0030637176, -0.0017803471, -0.047975026, -0.009273288, -0.017187452, -0.032423627, 0.024911122, -0.06461638, 0.02397031, -0.009317963, 0.037685864, 0.023313222, -0.008021551, -0.0031350313, -0.0003951394, -0.016873892, 0.027230209, -0.03486994, -0.0024474221, 0.04051233, 0.025530888, -0.03416873, 0.01610748, 0.014548842, 0.011784393, -0.001839174, -0.019266652, 0.04423119, 0.024853822, 0.012645708, -0.06072715, -0.008619532, -0.04108506, 0.01912985, 0.024587436, 0.011462372, -0.0044397684, 0.0061046807, -0.045005932, -0.03982805, -0.025960434, 0.036153033, 0.014400942, -0.026887236, 0.021024184, 0.004715034, -0.0005033587, 0.051732175, 0.030580012, -0.06722253, -0.005856609, 0.0266495, -0.008908395, 0.002943566, 0.012277069, 0.0368079, -0.048603807, 0.001531165, -0.016456, -0.02322637, -0.02428664, 0.0047749705, 0.049498975, 0.04194249, -0.033968665, 0.05147023, -0.011397995, -0.07516527, -0.0009068226, 0.021405233, -0.0015145462, 0.024303291, 0.035303924, -0.022657247, -0.033411477, -0.0402354, 0.0653889, 0.017517105, -0.007098079, -0.021640679, -0.027940571, -0.037017677, 0.038132057, 0.002357517, -0.007670662, 0.015412656, 0.08884864, -0.01953054, -0.0093923295, -0.010238105, 0.0011265911, -0.010662658, -0.039367422, 0.04376647, 0.046483263, -0.00968147, 0.006442104, -0.051627565, -0.022954155, 0.041063413, 0.042599574, -0.028678682, -0.009838526, 0.0064831716, 0.012007353, -0.012414702, 0.0032055127, -8.8795365e-05, 0.019915689, -0.0054109674, -0.086761944, -0.0013907574, -0.010508376, 0.060800403, -0.062731706, 0.0047749705, -0.07982703, 0.0074887793, 0.0025850548, 0.01168325, -0.022323709, 0.009630412, 0.023240522, -0.020897571, 0.004067868, 0.007986033, -0.020775896, -0.014693413, -0.0027596974, -0.005479368, -0.02010771, -0.06353974, 0.050003998, 0.0120117925, -0.021492919, 0.05894236, -0.01549812, 0.061185345, -0.011354152, 0.06751999, 0.04040411, -0.0064781765, 0.015773386, 0.0108125005, 0.06707601, -0.05473124, -0.007525407, 0.024002496, -0.0023594592, 0.003618411, -0.010749788, 0.0681793, 0.039722603, 0.009546889, 0.049841944, 0.03581783, 0.020439027, -0.038390674, 0.041775998, -0.017050374, 0.021119284, 0.024657918, 0.032246035, 0.013100091, 0.018800199, 0.038324077, 0.038750295, 0.01272826, -0.015331074, -0.015986495, 0.043190066, -0.027712755, 0.009080436, 0.013659641, -0.05112282, -0.013972505, 0.0002925391, -0.016456, 0.019808026, 0.046795156, -0.0145520335, -0.034317743, 0.030716537, 0.034191765, -0.027857326, -0.025028082, 0.04480836, 0.011425744, 0.007877259, 0.02459798, 0.045323376, -0.054489274, 0.034069672, 0.04331993, -0.0009623198, 0.03243972, -0.033808835, -0.03782849, 0.030405752, 0.016304493, 0.050850917, -0.0013863175, 0.077318564, 0.035029773, -0.021022301, 0.014135112, -0.02428553, -0.06146415, -0.0009068226, -0.029040523, -0.03541825, -0.0015307488, -0.0033831033, -0.01449945, -0.0067639863, -0.03525259, 0.029890738, -0.0025206783, -0.08191816, 0.008077325, -0.034839973, -0.0060310084, 0.011143263, -0.067043826, 0.029632399, 0.07263461, -0.034137897, -0.021349734, -0.016411602, -0.029795146, -0.006851672, 0.015068573, -0.04614695, 0.010737579, -0.005802777, 0.034324955, -0.04957001, 0.032210518, 0.01745356, 0.03314953, -0.0115922345, -0.017271252, -0.03502089, -0.026170215, -0.00056607043, 0.0474367, 0.01053002, -0.0137111135, -0.0023658413, 0.013140049, 0.021854758, 0.03860281, 0.013865812, 0.041487414, 0.018325143, -0.049345803, -0.011159912, -0.038752515, -0.00050502364, 0.0050161057, 0.031065611, 0.020770622, 0.052442543, -0.053517517, -0.011738746, -0.00090904254, 0.025033632, -0.04691947, 0.024554694, 0.023718907, 0.042819344, -0.043737818, 0.016115248, 0.018695863, -0.079773754, 0.036643073, 0.052549094, -0.0075387266, 0.00593597, -0.019895988, -0.06293371, -0.011866667, -0.01663359, 0.03591828, 0.014456995, 0.018417267, -0.03372448, -0.0023297684, -0.006981536, -0.026449919, 0.005989941, 0.0008009619, 0.011461817, 0.0065605897, -0.026853938, 0.03343645, -0.032606766, -0.0077374056, 0.00078736513, 0.008060677, -0.03333156, -0.043969244, 0.012271519, 0.011934651, -0.01492174, 0.020936837, 0.022287635, -0.0012074782, 0.0011071672, -0.021931343, 0.033987813, 0.029553315, 0.0071879844, -0.018760934, -0.02220106, -0.019554542, 0.05058228, 0.0057539395, 0.026842285, -0.0039896867, -0.017113086, -0.08860001, -0.06943797, 0.06226775, -0.0060550114, -0.026119156, 0.010027771, 0.048332427, -0.012704397, -0.038199764, 0.007686626, 0.022344243, 0.031277057, 1.9978957e-05, 0.0264255, 0.02275603, -0.080539614, -0.07195088, 0.0037427244, -0.014330462, -0.031503208, -0.01588105, -0.044514187, 0.0082188435, -0.02760648, 0.04129872, -0.028259125, -0.007603103, -0.012535407, -0.0016810071, -0.004842122, 0.005813876, -0.010833034, 0.029213673, 0.018220808, -0.012803459, -0.0013249932, 0.0507521, -0.025750656, 0.047937285, -0.0127554545, 0.043407615, -0.0051862043, -0.014151345, -0.026149679, -0.03849723, 0.026352243, 0.008945023, -0.045831725, -0.038988933, -0.048041064, -0.008035703, -0.047983903, 0.035810612, -0.009053242, -0.032969717, 0.058225337, -0.014990321, 0.038168687, 0.0061401995, 0.01863565, -0.023814917, -0.011647732, 0.0038884045, -0.015933217, -0.015166247, 0.02679955, -0.0024640714, -0.031253748, 0.028829912, -0.029457862, 0.017419431, 0.021692708, -0.01267526, 0.01442231, 0.0079283165, 0.05171886, -0.010072724, -0.014180619, 0.054863326, 0.0023042397, 0.05435941, -0.020049993, -0.0735936, 0.072240576, -0.013039599, -0.04250745, -0.016367204, 0.0063111302, 0.009250535, 0.03651321, -0.031490166, -0.027310401, 0.027333433, -0.005026095, 0.031504594, -0.013827657, -0.011526437, 0.0046267933, 0.04665974, 0.0131336665, 0.02048287, -0.054120775, 0.048892945, 0.021706026, 0.0072129583, -0.009211652, -0.021932455, -0.026138026, 0.02573678, -0.04558088, 0.013942814, 0.036452163, 0.0385999, -0.044963755, 0.04613169, -0.022847047, -0.00788697, -0.03345532, 0.019035505, 0.04034639, 0.008066227, -0.010888531, 0.018125076, 0.017979952, -0.056633685, -0.013541189, 0.0019768067, 0.047206942, -0.0132327285, 0.0029612386, 0.037132, 0.028743058, 0.024704672, 0.0008785191, -0.023758309, 0.048740882, -0.04444097, -0.041247044, -0.015542657, 0.026758483, 0.03455194, -0.008109236, -0.01318833, -0.011605554, 0.037651453, 0.06367835, 0.002515406, 0.03102954, 0.07949405, 0.03306656, 0.0152696725, 0.04596714, 0.053045243, -0.020510618, 0.0057428405, -0.015593688, -0.03546709, -0.027002392, -0.036333952, 0.01406685, -0.0070348126, 0.04806604, 0.05840515, 0.015444288, 0.026482107, -0.027867315, 0.013683366, 0.010307753, 0.0034541395, -0.0028347918, -0.05641197, -0.044788383, 0.034745626, 0.010356592, -0.039511714, -0.055634737, -0.008839578, -0.023466116, -0.017688036, -0.031915274, -0.015549716, 0.032391906, 0.005877559, -0.009607104, -0.011475692, -0.0621512, -0.0005305523, -0.0015505891, 0.019606015, -0.0410501, 0.011972944, -0.018882332, 0.004258848, -0.058010012, -0.00822911, 0.025397692, 0.022922523, 0.01089075, -0.012192036, 0.03203293, 0.020063382, 0.038215306, -0.021108184, -0.0033987812, 0.021503948, -0.031837575, 0.02085137, 0.013454718, -0.0035340553, -0.050822027, -0.008309026, -0.007931091, 0.001281428, 0.040246185, -0.027867315, 0.02183811, 0.011156687, -0.0032168895, -0.00015886045, 0.02012769, -0.008136707, -0.01089075, 0.0037491065, -0.0030767594, -0.07872153, -0.01907824, 0.022165542, -0.025008313, -0.06226553, 0.024740608, 0.009046444, -0.03578009, -0.05302415, 0.02297025, -0.01962752, -0.027213559, -0.00032375622, -0.056567084, 0.008173613, -0.011325293, -0.04496153, 0.030555595, -0.017191805, 0.06360967, 0.020351343, 0.025362175, -0.037822384, 0.008457758, -0.0018502735, -0.010596617, 0.043518607, 6.548658e-05, -0.014544958, 0.0071347076, 0.022335364, -0.0020755916, -0.04763427, -0.041116692, -0.0077707046, 0.0015092436, 0.013081777, 0.030284073, 0.029266952, 0.02498202, -0.014879882, 0.0012128891, 0.032112844, -0.0027582059, 0.004008556, 0.044539753, 0.008594281, 0.0165509, -0.012093512, -0.01743497, 0.0018036558, 0.011443502, -0.024971616, 0.0063251434, 0.05052345, 0.010044975, 0.00937568, 0.06295813, 0.01725738, 0.0035495947, -0.02835791, 0.004615694, 0.016424367, -0.03807101, -0.02346192, 0.06581956, -0.015212866, -0.012224694, 0.027369782, 0.015039714, 0.047594313, -0.08211795, -0.031403035, -0.06255189, -0.049369115, 0.0071768854, -0.006064168, -0.0146456845, -0.013798522, -0.0022132245, -0.018373981, 0.04245306, 0.019012196, 0.016492924, 0.02793391, -0.019505288, 0.04745446, -0.037678093, -0.033373736, 0.037018787, 0.011172676, 0.022737196, 0.011717103, -0.0375782, 0.022320934, 0.015291672, -0.042322088, 0.05473457, 0.015360488, -0.044050824, 0.00449804, -0.003996901, 0.008819045, 0.004342648, -0.0133431675, 0.028525373, 0.027771652, -0.009268293, -0.030217063, -0.00034241713, -0.020945022, 0.019418435, 0.016267337, -0.0027806824, -0.008767501, -0.025857208, -0.014914846, 0.07784689, -0.022438588, -0.045108046, 0.041478254, 0.02482309, 0.056398377, 0.02141078, -0.05011411, 0.06843903, -0.013521869, -0.032887302, -0.018075682, -0.020366048, -0.014989491, -0.03487105, 0.0066640917, -0.018376963, 0.038432576, 0.025692798, 0.05396094, -0.016112473, -0.107704334, -0.036856458, -0.029631881, -0.032094527, -0.047937285, -0.03938962, 0.018507173, 0.018568568, 0.07117614, 0.011020926, 0.019622527, 0.04674188, 0.007833416, -0.020392686, 0.012302597, -0.019535119, -0.026307847, 0.021093061, -0.023620121, 0.07304306, 0.0329018, 0.022889223, -0.05357912, 0.006265068, -0.03027922, 0.022309834, 0.006426564, 0.014364869, -0.01532164, 0.035338473, -0.008331225, 0.016946595, 0.030979037, 0.027087027, -0.030227605, 0.065901145, 0.014127342, -0.019261934, -0.023301015, 0.031564534, -0.039864678, 0.038285233, 0.044608016, 0.013613457, 0.0033320459, -0.02761924, 0.10206139, 0.016691308, 0.049921304, 0.0009445607, 0.018082066, 0.03623961, 0.009518585, -0.035749014, 0.0056877593, -0.00650648, -0.026767364, -0.009098195, -0.0058072163, -0.02561975, 0.00125583, 0.026020925, 0.039667107, -0.028677016, -0.050120544, -0.047245238, 0.057743624, -0.03176654, -0.03221801, 0.008059567, -0.001023644, -0.020762574, 0.004147437, 0.014338232, -0.020261992, 0.015454832, -0.0627428, 0.028069325, 0.0055286214, 0.0013363701, -0.019935668, 0.049396858, 0.0059470693, -0.0322255, -0.0012514597, 0.011183776, -0.013791029, 0.02084249, 0.025887176, 0.022739382, 0.042668395, 0.026949393, -0.0116432225, 0.00455104, -0.02448754, 0.036130834, 0.046213545, 0.015519764, -0.03330714, -0.0057472796, 0.051296804, -0.011293105, 0.0071169483, -0.008179163, -0.022019446, 0.015963186, 0.013348718, -0.048140407, 0.019668173, 0.008965279], [-0.034814246, -0.07152435, -0.049750194, -0.036779687, 0.020118494, 0.015466513, -0.001980821, -0.015031247, 0.005431627, 0.06341854, 0.029475331, 0.0062623895, -0.035156105, -0.016234815, -0.016523229, -0.00088339014, -0.00257958, -0.0062623895, 0.030487929, 0.023009995, 0.0058630486, -0.0056043845, -0.016197503, 0.035144005, -0.057004884, 0.027810656, 0.021095477, 0.03138821, 0.008267664, -0.0014488709, 0.015272767, -0.02558945, 0.021825949, -0.02509998, 0.011111707, 0.023946831, 0.015540508, 0.024134401, -0.043734368, -0.03540771, -0.017895207, 0.023462279, -0.004823351, 0.018559765, 0.0022992347, 0.03961541, -0.017652677, 0.040069208, -0.019606018, -0.02408157, 0.031401698, -0.0035900332, -0.032092728, 0.03939053, -0.022851165, 0.019132305, 0.045515772, 0.019647868, 0.015952453, 0.017275522, -0.03221576, 0.023311391, -0.094868384, -0.014750397, 0.022267282, 0.025831096, -0.02215333, 0.01191543, -0.015653327, -0.02528969, -0.019031713, 0.03800973, -0.0003262291, -0.031485397, 0.050333075, -0.003034763, -0.08700788, -0.03265115, -0.018148892, -0.023392191, 0.0035164175, 0.008529858, 0.014600897, -0.035562504, -0.03435137, -0.010376304, -0.0064229826, -0.032756027, 0.017782766, 0.024525676, -0.07455167, 0.021734448, 0.04828998, -0.020091077, -0.014548206, 0.002736896, 0.021225568, 0.04172254, 0.019703206, 0.024406174, 0.061794452, -0.019606018, 0.0134626245, -0.014108024, -0.03335504, 0.0006317223, 0.017018875, -0.012208507, -0.009651744, -0.0013421025, -0.013831334, 0.02753031, -0.010804639, -0.037748795, 0.032371685, -0.010785289, 0.019254074, -0.0030857993, -0.02983963, -0.0121133365, -0.0020536804, 0.018729009, -0.017965356, 0.021386161, -0.025716135, 0.0011798705, -0.014378285, -0.0037871508, -0.085317746, -0.014450892, 0.03130993, -0.0046680355, 0.052130103, -0.012194011, -0.019762326, -0.0006575004, -0.02764729, 0.055436514, 0.00040703008, 0.048667137, -0.026048161, -0.000998352, 0.032917377, -0.0038582773, 0.03414918, -0.029180113, 0.015145705, -0.06572382, 0.009052733, -0.009781784, -0.004675111, -0.019768378, -0.020204525, -0.010757684, 0.0078153815, -0.036341634, 0.004428044, 0.006089695, -0.016274145, 0.04271736, -0.006613325, 0.009624681, 0.035356786, -0.00024378946, -0.020476298, -0.06717799, 0.020444533, 0.013032023, 0.0058363248, -0.0023113359, 0.09238889, 0.01189991, 0.016931646, 0.025988413, -0.07347064, -0.0012116992, 0.03041595, -0.041761365, 0.023601552, 0.0071059465, -0.008595406, 0.005669933, -0.030198634, -0.013311107, -0.056256626, 0.049707845, -0.01376692, -0.005760188, 0.018009664, 0.02659549, 0.0022225934, -0.041321687, 0.0074218386, 0.012486206, -0.035293255, 0.016634662, -0.0391272, -0.011377177, 0.013774735, 0.052696846, 0.0097717475, 0.005582199, 0.012714616, -0.014874435, -0.022519138, -0.032184497, 0.043838743, -0.0035865824, 0.036776662, -0.006148436, -0.025781684, 0.03481525, 0.036995493, 0.03287099, 0.019005999, 0.044629358, 0.034625165, -0.018244628, 0.020650255, 0.053463258, -0.03181818, 0.028188314, 0.03113446, -0.032229874, -0.017167872, 0.021420572, 0.0030727054, 0.023087643, -0.01789924, 0.0029368186, 0.08908122, -0.0150973, -0.015008053, -0.04872361, -0.0070263427, 0.00013916421, -0.053512167, 0.04127328, -0.02739014, 0.06062719, -0.026194133, 0.031034626, 0.021491794, -0.023087643, -0.007375703, 0.0037803755, -0.047497347, 0.017083919, -0.01621868, 0.039272543, 0.026296992, 0.031254467, -0.017242244, 0.031511616, 0.0090678595, -0.0065470836, 0.0011955012, 0.008147157, 0.014159453, 0.045391105, 0.03241921, -0.06053038, -0.0021137139, -0.05293887, 0.03977878, 0.011167424, 0.020039646, -0.0058267447, 0.015433865, -0.04955456, -0.063442744, -0.05307602, 0.043189306, 0.017940082, -0.007434444, 0.043400075, 0.047568697, -0.015381679, 0.03896497, 0.033740006, -0.05184573, -0.009135424, 0.017649904, -0.020574117, 0.017596206, 0.022322746, 0.014624973, -0.048917226, 0.017668055, -0.034134433, -0.023272693, -0.019309035, 0.01438257, 0.03294158, 0.039623477, 0.013643134, 0.05020399, -0.001985611, -0.082336806, -0.019994266, -4.941338e-05, -0.022506533, -0.016879207, 0.003336317, -0.005167732, -0.03742912, -0.034475915, 0.03324209, 0.02647851, -0.004960498, -0.031874653, -0.025771061, -0.049585313, 0.029410034, 0.012366203, 0.012411204, 0.013146983, 0.084765114, -0.02013944, -0.025047792, -0.031596325, 0.0139621785, -0.008281278, -0.047883578, 0.06436244, 0.045542747, 0.0021712894, -0.0046652784, -0.07000665, -0.030588204, 0.043342087, 0.035492923, -0.0121577075, -0.023937251, 0.034181956, 0.0058402955, -0.015154276, 0.025416628, 0.00072657835, 0.031230262, 0.013643765, -0.06374578, 0.013399219, -0.013500946, 0.035823688, -0.07174218, -0.012092159, -0.07344643, 0.00839019, 0.0015661016, 0.026633812, -0.012410321, 0.022115512, 0.027178619, -0.020232258, -0.0013099586, 0.00024404158, 0.012353722, -0.027393162, 0.015911737, -0.0018981292, -0.02277755, -0.06569357, 0.038127307, 0.007561759, -0.011789818, 0.06729093, -0.0038855048, 0.02488014, -0.005584342, 0.07219193, 0.045803174, 0.0055857287, 0.0129793305, 0.018091347, 0.062151946, -0.04405656, -0.025891602, 0.013645403, -0.011795679, 0.007927822, -0.03816528, 0.064619586, 0.027340218, 0.032198865, 0.055677786, 0.020118304, 0.010787873, -0.041023187, 0.024675427, 0.0007180066, 0.014832081, 0.04252727, 0.046562526, 0.015354451, 0.00037034822, 0.014351561, 0.013480777, 0.009863768, 0.006594165, -0.0024928544, 0.025606042, -0.020344067, -0.006806945, 0.015798919, -0.053251486, -0.009075296, -0.007262506, -0.008100265, 0.016984083, 0.043849833, -0.016793994, -0.03393993, 0.026465401, 0.038328648, -0.014582493, -0.024129864, 0.030005831, 0.0060849045, 0.016723655, 0.036610268, 0.03696322, -0.056944378, 0.02926939, 0.01718426, 0.013177237, -0.0042566094, -0.026322203, -0.022994922, 0.031704985, -0.0034249017, 0.04425775, 0.016935678, 0.08404712, 0.026803227, -0.047009267, -0.0032533414, -0.04148606, -0.0770768, -0.008169342, -0.018661618, -0.028605808, -0.008669338, -0.0052408436, -0.00352751, 0.020570084, -0.039986514, 0.006413655, -0.0047562895, -0.07583844, 0.00016941728, -0.033070657, -0.0012676044, -0.0072920024, -0.03953171, 0.02935558, 0.08284506, -0.07023809, -0.01319791, -0.02253666, -0.048937395, -0.020999676, 0.01873372, -0.045080632, -0.0063970154, -0.017633265, 0.014200799, -0.03227097, 0.027922088, 0.028716233, 0.03435137, -0.0060927197, -0.02416516, -0.025799833, -0.020570368, -0.0043539237, 0.043629996, 0.023597408, -0.001262184, -0.00021303217, -0.0020108218, 0.02296512, 0.024714503, 0.0038415357, 0.05797424, 0.03761114, -0.048210315, -0.007221412, -0.03065243, 0.017506454, -0.0075940927, 0.034102794, 0.022684773, 0.03342563, -0.04326595, -0.044239596, 0.025519991, 0.029730055, -0.061847396, 0.037893504, 0.040885158, 0.012218513, -0.05195867, 0.029589538, 0.0056805215, -0.0646206, 0.027352825, 0.06650839, -0.00502403, 0.023462279, -0.012757475, -0.05711985, 0.004288879, -0.021650117, 0.029861815, 0.05753734, -0.009999402, -0.0107787335, -0.011491636, -0.02506878, -0.013156059, 0.00044673725, -0.0101403305, 0.030234937, -0.015842535, -0.036136303, 0.027062899, -0.02199097, 0.00135433, 0.001581039, -0.029250704, -0.03060705, -0.036841203, 0.015717488, 0.017080389, -0.021937521, 0.025549743, 0.013812047, 0.009104162, 0.0174641, -0.012226282, 0.03286595, 0.021692473, -0.009114247, -0.03154288, -0.02423953, -0.015046878, 0.03948835, -0.021670286, 0.010851783, 0.0027081554, -0.003058209, -0.093542546, -0.06714572, 0.07341063, 0.010111087, -0.01564488, -0.0025183177, 0.050084997, 0.005882461, -0.04350596, 0.01059211, 0.02395137, 0.021494819, 0.008277245, 0.025690261, 0.034756765, -0.074777566, -0.08055389, -0.01114081, -0.036838178, -0.031949278, -0.027443584, -0.04509626, 0.00918572, -0.019055916, 0.02427155, -0.05029173, 0.0014866872, -0.027119372, -0.014505347, -0.004225852, -0.0074901604, -0.0090955915, 0.008161527, -0.0010760014, -0.02034621, 0.006554836, 0.053088117, 0.00638025, 0.037958045, -0.028975146, 0.02181046, 0.02837538, -0.01866023, -0.021039383, -0.059651025, 0.008329684, 0.0052862233, -0.03544452, -0.05462094, -0.065653235, -0.022170471, -0.037850644, 0.044437755, -0.013020173, -0.01236595, 0.07517287, -0.015540381, 0.027580228, 0.011928163, 0.015650742, -0.0075390693, -0.034327675, -0.0074357046, 0.009933097, -0.013387497, 0.0095362775, -0.009353247, -0.026153967, 0.041733127, -0.011526931, 0.0239191, 0.026357498, -0.016409274, 0.0041847583, -0.00044472038, 0.043830674, 0.0004588385, 0.0016268598, 0.05005878, -0.0022876377, 0.056791097, -0.027095674, -0.058860406, 0.0749258, -0.030119471, -0.054101344, 0.0064754216, 0.020113261, 0.015856652, 0.029612606, -0.026503345, 0.003881219, 0.02343858, 0.015654964, 0.0034175904, -0.014099704, -0.011832487, 0.018189164, 0.036422577, 0.01973661, -0.020569075, -0.05082922, 0.039091025, 0.005840863, -0.01254999, -0.0010194661, 0.008047448, -0.056290913, 0.0362432, -0.054867, 0.0021318342, 0.027065169, 0.017212117, -0.019047344, 0.054551862, 0.015193101, 0.006677865, -0.042760722, 0.0066668354, 0.0068785436, 0.034973074, -0.004958418, -0.0054334546, 0.034315072, -0.06693395, 0.016462974, -0.009756559, 0.04244206, -0.016255993, 0.007121577, 0.036493294, 0.021341914, 0.05221658, -0.0011687777, -0.018269839, 0.042214654, -0.025146369, -0.05093952, -0.011424953, 0.006396511, 0.03007157, 0.0060607023, 0.004679113, 0.008576751, 0.05032122, 0.047945093, 0.0040665194, 0.016158175, 0.064238906, 0.052713986, 0.022431593, 0.029337933, 0.05247096, -0.026078163, 0.0064358404, -0.015527902, -0.0475155, -0.030519314, -0.013777256, 0.027431738, -0.027009957, 0.037782326, 0.059320256, 0.006072882, 0.0017889659, -0.035367876, 0.009532244, -0.030479986, 0.010716243, -0.0025594113, -0.05707346, -0.047404572, 0.044964153, -0.012196029, -0.03553124, -0.046451095, -0.009100129, -0.0173602, -0.025461, -0.027994191, -0.0075178924, 0.035660323, 0.026431115, 0.0011914675, -0.015411932, -0.06306401, 0.0070015728, 0.015919175, -0.0044623306, -0.033131164, 0.02953987, 0.0052897525, 0.0090043275, -0.08059826, -0.008859743, 0.010268906, -0.00023093191, 0.027844565, -0.01911617, 0.024256926, 0.022678472, 0.013542291, -0.023166932, -0.022878394, 0.03245299, -0.05800538, 0.018867843, 0.022677967, 0.0045243492, -0.049359426, 0.0122267855, -0.010104531, 0.009366356, 0.016514152, -0.024414746, 0.025270404, 0.022023743, -0.0178826, -0.025810027, 0.009855447, -0.016873535, -0.012487087, -0.004773937, -0.012922103, -0.07251867, -0.047616344, 0.037618835, -0.04224945, -0.06139158, 0.019999182, 0.027849479, -0.026491622, -0.059090335, 0.042630635, -0.040391907, -0.020038133, 0.015553113, -0.057224724, 0.0027963936, -0.012200251, -0.02151902, 0.032176174, -0.023722455, 0.059215378, 0.029110784, 0.057152115, -0.04809031, -0.015752027, 0.010734804, 0.0010135415, 0.0045992257, -8.722973e-05, -0.019889893, -0.007049978, 0.025551759, 0.0012038524, -0.040444348, -0.06762977, -0.03369841, 0.021155983, 0.020979507, 0.00445628, 0.027144583, 0.020567058, -0.029466568, 0.008482966, 0.05613864, 0.00018555227, -0.02876615, 0.012066948, 0.02398616, 0.009436946, -0.023043778, 0.010232603, 0.00041245046, 0.006756019, -0.020249149, 0.01832228, 0.051637482, 0.01911409, 0.0011634834, 0.03834478, 0.02533091, -0.0023204118, -0.016912863, -0.011752002, 0.00067766913, -0.036194794, -0.031426657, 0.04040199, 0.003330865, -0.0052897525, 0.011293478, 0.006520486, 0.03717903, -0.06173647, -0.033291303, -0.05066787, -0.032052137, -0.004176943, 0.0022296526, -0.003979542, -0.0040024836, 0.002665108, -0.021923404, 0.027086347, 0.02704664, 0.025003169, 0.018151853, -0.038647313, 0.02935659, -0.043580584, -0.018313864, 0.03023191, 0.010491772, 0.019529376, 0.03473357, -0.026492631, 0.023126405, 0.017568473, -0.01639314, 0.02758628, 0.036347006, -0.054497916, -0.0021802392, -0.0053036185, 0.020253498, 0.003927796, -0.021551292, 0.018992636, 0.038051326, -0.011189609, -0.0445749, -0.022403358, -0.04548854, 0.000543169, 0.030029217, 0.03226807, -0.010510584, -0.040185682, -0.02659549, 0.04785938, -0.044172533, -0.07944461, 0.08169494, 0.007885972, 0.05340275, 0.020872694, -0.047442265, 0.056069057, 0.0070836972, -0.006976362, -0.03628404, -0.0052640373, -0.003546166, -0.047235154, 0.0070348512, -0.0022455356, 0.028617404, 0.030078629, 0.04451641, 0.0060802093, -0.08382122, -0.018939441, -0.012127581, -0.026678687, -0.05133999, -0.04229785, 0.010660809, 0.0025785714, 0.04131967, -0.006175664, 0.029392892, 0.042493742, -0.003996685, -0.018256731, 0.009154584, -0.024853922, -0.038187467, 0.023989188, -0.016935805, 0.076977976, 0.021148926, 0.023308745, -0.03863118, 0.00883844, -0.018912215, 0.033897575, 0.023243701, 0.019460676, -0.026917685, 0.01872351, -0.01062085, -0.0035970923, 0.005945236, 0.047170617, -0.02272549, 0.04835956, 0.021155482, -0.02325202, -0.019725014, 0.021955391, -0.051437434, 0.037445255, 0.033596054, -0.0148593085, 0.0015096291, -0.019082135, 0.09906878, -0.0032070794, 0.024013137, 0.022983523, 0.019735098, 0.04651009, 0.008603474, -0.00976368, 0.01474712, 0.019309537, -0.0035935626, -0.012482425, -0.011418019, -0.016968863, 0.024187345, 0.036576677, 0.038928665, -0.009639895, -0.04382866, -0.058612335, 0.04932161, -0.021316327, -0.010927668, -0.014910108, 0.006480716, -0.026667088, 0.0142108835, 0.007248892, -0.0033343944, 0.022558719, -0.044604145, 0.015810264, -0.0056583355, 0.042282723, -0.0038384867, 0.044906046, -0.006566937, -0.048628308, -0.0046357815, 0.008985167, 0.016913492, 0.038236372, 0.0217763, 0.009488629, 0.03386329, 0.03382497, 0.009263495, 0.021640033, -0.03416683, 0.05094721, 0.045333244, 0.019265167, -0.016955815, -0.017227622, 0.029709542, -0.024670385, -0.0040418124, -0.0051879007, -0.015819151, 0.051817488, 0.036365222, -0.0383831, 0.030385194, 0.035508554], [-0.033546004, -0.08309349, 0.0010513234, -0.06177842, -3.4356974e-06, 0.007258483, 0.03745139, -0.014835483, 0.04380056, 0.022727424, -0.006272724, 0.017615965, -0.05341822, -0.017438455, -0.03122018, 0.024414636, -0.00348666, -0.006795809, 0.008928768, 0.046984877, -0.028930288, 0.0109238, -0.026475484, 0.03562818, -0.020094248, 0.067041904, -0.0029661518, 0.014200883, 0.018219072, -0.009364351, 0.005045894, -0.04171366, 0.012128011, -0.01871138, 0.020030973, 0.033099506, 0.015857533, -0.007740626, -0.041846793, -0.04365254, -0.064264715, 0.00029146165, -0.015449186, 0.026806168, 0.0072825328, 0.044861045, 0.026829217, 0.007338649, -0.00649553, -0.017868489, 0.048899133, -0.022528153, -0.018419918, 0.028010096, -0.012922803, 0.013953513, 0.022687053, 0.03108161, 0.01289775, -0.00033805828, 0.015148561, 0.009988144, -0.06427617, 0.0032518874, 0.03638461, 0.043036688, -0.016729841, 0.011910131, 0.017524347, -0.03330837, -0.007253472, 0.035561755, 0.00094424415, -0.023052385, 0.04813641, -0.00069673074, -0.063602775, 0.012246257, 0.006055989, -0.04887852, -0.025657786, 0.022479767, 0.025326243, -0.055516288, -0.063267216, 0.029140439, -0.028946893, 0.027067604, 0.030537622, 0.029971877, -0.017004412, -0.005413299, 0.03630845, 0.013122645, -0.014712228, -0.009935106, -0.016717387, 0.035780497, 0.02670682, 0.044872496, 0.039127722, -0.042522483, -0.018896336, -0.027902443, -0.044804927, -0.000655073, 0.027458092, -0.055492233, -0.00684849, 0.033094354, 0.025005292, 0.009521462, -0.019760627, -0.06770843, 0.025363462, -0.00630794, -0.0038159145, -0.044459067, -0.04526932, -0.0089900745, -0.02656481, 0.013706142, 0.018568225, 0.011344959, -0.0062561543, -0.015707435, 0.014103, 0.020659992, -0.045590557, 0.0032742193, 0.05542925, 0.0107783545, 0.05171984, 0.0043221074, -0.059879623, 0.026252164, 0.0018495503, 0.05494367, -0.036819223, 0.06473769, -0.037643217, 0.0025558725, 0.03835956, 0.015068968, 0.031582072, -0.010890587, -0.0056047672, -0.06952018, -0.01988152, -0.01261588, -0.017250635, -0.017056232, -0.003522878, -0.02279127, -0.002064854, -0.02502705, -0.0055497964, 0.0138218105, -0.026355233, 0.01135956, -0.0055044526, 0.00091389543, 0.015361861, 0.0072218357, -0.044089157, -0.022318432, 0.02617715, -0.00803989, 0.006163569, 0.043967765, 0.06714726, -0.0070162667, -0.0057605193, 0.037772056, -0.045880303, -0.031454954, -0.030571979, -0.039669994, 0.025063412, 0.02074474, -0.027305776, 0.0051342202, -0.01665082, -0.0002124406, -0.019353515, 0.022333179, -0.04969086, -0.008387968, -0.010550453, 0.004411435, 0.02921198, -0.00080953614, 0.010717086, 0.008955718, -0.042156003, 0.03330565, -0.07711881, 0.0035290336, 0.022439683, 0.032335635, 0.008978622, 0.008700331, 0.019831989, -0.03754988, -0.043782234, -0.04515766, 0.015696986, 0.009385466, 0.027865795, -0.020743165, 0.017271822, 0.05007872, 0.016407173, 0.05646683, 0.046454202, 0.055981252, 0.021003563, -0.039598845, 0.048429586, 0.06322599, -0.04296912, 0.029923778, 0.0040186206, -0.045701932, -0.036122635, 0.017083433, -0.010341449, 0.016148636, 0.024793135, 0.0091778925, 0.065641284, -0.020036986, -0.02984304, -0.0475898, -0.025441337, -0.021798067, -0.06308284, 0.023319222, -0.057087544, 0.03296666, -0.04243086, 0.02440533, -0.0016331014, -0.0291977, -0.055303276, -0.017068544, -0.03822786, 0.006649219, -0.02512826, 0.02069664, 0.05834043, 0.026482353, -0.009010626, 0.0020999983, -0.008490753, -0.0063349963, -0.0076627503, 0.015677087, -0.023363886, 0.012633058, 0.008410587, -0.050633013, -0.0037582233, -0.04141733, 0.037167374, 0.030541059, 0.047774516, -0.012438943, 0.050101627, -0.024483923, -0.01591873, -0.08674105, 0.03552969, 0.019980226, -0.03874994, 0.020709237, 0.00793188, -0.000261113, 0.057527315, 0.023956545, -0.06382151, 0.005262486, 0.018545035, 0.0024659717, 0.025255239, -0.00014773497, 0.025795216, -0.053711403, -0.038330927, -0.051813178, -0.008896738, 0.024686629, -0.009668052, 0.039897606, 0.033249535, -0.011454615, 0.02369486, -0.012930819, -0.043207686, -0.020985238, 0.035031516, 0.027755853, -0.0016880725, -0.023720052, 0.009874767, -0.00778758, -0.06524332, 0.037680436, 0.007376442, 0.0018930692, -0.050035205, -0.03460692, -0.060239226, -0.0094997035, -0.0068301666, -0.0027592944, 0.047506247, 0.08562674, -0.025408126, -0.034261346, -0.01529916, -0.0137937525, 0.03625577, -0.05716771, 0.0009353686, 0.048358586, 0.01677651, -0.00335095, -0.039432645, -0.028268632, 0.0565699, -0.007918137, 0.0034130074, 0.005502269, 0.015776722, 0.017734926, -0.019293875, 0.0120386835, -0.0003332626, 0.018595425, 0.039453827, -0.07682906, -0.0046687727, -0.0049415706, 0.03439133, -0.073615536, -0.0046021165, -0.063354254, 0.026645407, -0.023791058, 0.040512025, -0.0068901475, 0.022050304, 0.037288193, -0.029837312, -0.028639399, 0.0022332033, 0.0007627248, -0.01227231, -0.0018552765, -0.005478792, -0.017542383, -0.056606546, 0.042046063, 0.031008312, -0.031402275, 0.046127673, -0.018905496, 0.01581566, -0.026406769, 0.06813618, 0.018769214, -0.010161648, 0.00684849, -0.020949451, 0.022260742, -0.03907977, 0.01636437, 0.015742937, -0.017397227, 0.009122921, -0.0443308, 0.03890927, -0.0019804647, 0.06534696, 0.052586783, 0.07307614, 0.012380535, -0.019779023, 0.029441634, 0.017320495, 0.018373823, 0.039031524, 0.03560678, 0.011219556, -0.015594058, 0.0072332877, 0.028403481, 0.025478844, -0.003853707, -0.022011368, 0.021367032, 0.0106918905, -0.014448825, -0.026211077, -0.058874108, -0.04821772, 0.0049084662, 0.0050275703, 0.0016548609, 0.0659127, 0.015451762, -0.024913099, 0.017698994, 0.0139638195, -0.03827882, -0.03566082, 0.014770206, 0.0101199895, 0.018414192, 0.036561545, 0.045351204, -0.045781236, 0.022254156, 0.01865011, 0.0059071085, -0.019307474, -0.01283691, -0.049678825, 0.033622306, 0.035097938, 0.009377664, 0.016979503, 0.088311166, 0.03310008, -0.0044847303, 0.009246177, -0.00087867957, -0.052183658, -0.019052086, -0.04769893, -0.058610562, 0.007397629, 0.017754253, -0.033171084, -0.0051259175, -0.014136177, 0.007810485, 0.0015254496, -0.04208586, 0.020339329, -0.008574069, -0.016211338, -0.044263232, -0.051299542, 0.0053176004, 0.035822872, -0.04845249, -0.026835088, -0.039261144, -0.029851628, 0.006827876, 0.03840308, -0.015494423, 0.0015157152, -0.02218888, 0.032970954, -0.033956427, 0.009282681, 0.006124703, 0.018419059, -0.024594583, -0.013299584, -0.028279224, -0.031069009, -0.00847472, 0.032669473, 0.027336225, -0.010880853, 0.037418894, 0.039752163, 0.004601472, 0.01649421, 0.046722367, 0.036941763, 0.04092488, -0.028484222, 3.6647438e-05, -0.020926833, -0.010221199, 0.002521587, 0.030016113, 0.006433916, 0.07637326, -0.031722937, 0.0035048407, 0.022992833, 0.03786711, -0.027956268, -0.01319943, 0.045746878, 0.03175157, -0.058155477, -0.0037666697, 0.016344758, -0.059171867, 0.020829488, 0.059662025, -0.016376823, 0.02626018, -0.050518494, -0.04839609, -0.005485663, -0.01864324, 0.041778076, 0.032068152, 0.006077677, -0.024695791, -0.042977136, -0.035185046, -0.021159314, -0.021105487, -0.010545299, 0.066753305, 0.007778705, -0.0030380152, 0.020607313, -0.039892454, -0.0105853835, -0.0056505767, -0.022755768, -0.04898388, -0.039546594, 0.003876898, 0.0331854, -0.008718082, 0.041187137, 0.01923677, 0.02300371, -0.017759118, -0.015967403, 0.0067056217, -0.02960884, -0.013408095, -0.026241856, -0.011574578, 0.0023024897, 0.02604602, 0.010475154, -0.013913429, -0.023117231, -0.0032123767, -0.076153375, -0.06712436, 0.061320327, 0.00911605, -0.022094397, 0.034870036, 0.048962124, 0.033940107, -0.021131828, -0.0016399729, 0.023381047, 0.012806849, -0.002217313, 0.043255426, 0.0019111066, -0.08951824, -0.0828965, 0.020966342, -0.015058661, -0.020960044, -0.046107057, -0.019617831, -0.006920067, -0.034009967, 0.023652269, -0.06902087, -0.01289632, -0.015867196, 0.0013582456, -0.0029157617, -0.016600287, -0.014349761, 0.030245587, 0.03236656, -0.0011440872, 0.019131107, 0.031187257, -0.009807197, 0.058706906, -0.016798269, 0.065163724, 0.006076603, -0.02254161, -0.015215557, -0.027577197, 0.008210171, -0.018551048, -0.019291583, -0.030444859, -0.0633199, -0.021654055, 0.0105934, 0.017842721, -0.011101024, -0.017616536, 0.056290466, 0.008380238, -0.015838563, -0.0063641993, 0.03603817, -0.014359712, -0.028247159, 0.0027680267, 0.014180268, -0.023740096, 0.0035911624, -0.026494954, 0.0063400064, 0.019307474, 0.00987992, -0.019994183, 0.041274175, -0.012822873, -0.022030264, 0.015492131, 0.06099737, 0.035974327, 0.029789785, 0.04999741, 0.0033990496, 0.08546641, 0.006972175, -0.045646314, 0.07779335, 0.007376442, -0.027217595, -0.0062667117, 0.0039914213, 0.028310556, 0.035389975, -0.004298916, -0.0025435612, 0.044716746, 0.003443714, 0.023087528, -0.0008566339, -0.03601069, 0.013215409, 0.024961486, 0.02882779, 0.013277824, -0.054849762, 0.03156375, 0.0042760116, -0.016548607, -0.018000476, 0.005351671, -0.035654422, 0.035447232, -0.060587376, 0.043287497, 0.0027288026, 0.029073728, -0.005732461, 0.028843822, -0.007833104, -0.026331184, -0.014650815, 0.055095986, -0.01874359, 0.037556753, -0.03150076, -0.023754412, 0.00901985, -0.058276296, -0.010344884, 0.023062117, 0.052470826, -0.055026125, -0.008755302, -0.005216534, -0.006645784, 0.044399515, 0.042437736, 0.022692781, 0.036434423, -0.042904984, -0.040584747, -0.021206267, 0.0010633483, -0.023458654, -0.024948316, -0.030967083, -0.0077892984, 0.04917571, 0.033624023, 0.047590133, -9.877629e-05, 0.07468747, 0.05632711, -0.0045780665, 0.019595498, 0.00484147, -0.07133596, 0.021592213, -0.021978728, -0.0460372, -0.069511026, -0.0025246649, 0.007319467, -0.040293857, 0.03736206, 0.045137044, 0.0049405326, 0.015056371, -0.002887131, -0.0049909228, -0.0057708262, 0.017539235, -0.01586376, -0.043718103, 0.015623404, 0.044254072, -0.05077388, -0.030165423, -0.0320207, -0.013975557, 0.0065570283, -0.016405169, -0.03266203, -0.00073409395, 0.009950925, 0.043653972, 0.0073678526, -0.04178495, -0.058558024, 0.018811587, -0.013481247, 0.0024762787, -0.017183067, 0.013642903, -0.011279395, -0.0072288504, -0.038869187, -0.036228996, -0.030436054, 0.014232377, 0.013188067, -0.0060479725, 0.025891988, 0.03149389, 0.034728028, -0.016758187, -0.045177698, 0.019310908, -0.047796275, 0.0022801578, -0.00078398315, 0.016150068, -0.072887175, -0.034095287, 0.02518309, -0.0010189706, 0.01152791, -0.034269936, 0.014679588, 0.004893578, -0.0048317355, -0.0022927553, -0.00042144553, -0.023494441, -0.06462947, 0.010773774, -0.0036515736, -0.07209925, -0.022534166, 0.009495694, -0.052854765, -0.047838077, -0.01793391, 0.019511897, -0.04277214, -0.021935781, 0.05035816, -0.033774067, -0.0045918096, 0.016515683, -0.07455921, 0.022343485, -0.015878862, -0.068093225, 0.0066996096, -0.038076688, 0.03432949, 0.027411137, 0.048374474, -0.023505323, -0.024113871, 0.0127238175, 0.017925177, 0.003503266, 0.040993594, -0.02310621, -0.005994146, 0.01059569, -0.010977053, -0.0411734, -0.05185154, -0.035896167, 0.010403291, 0.002749703, 0.005539883, 0.022556497, 0.010916069, -0.024136633, 0.011822234, 0.022747036, -0.005485091, 0.016076773, 0.043321855, 0.005074525, 0.012209322, -0.024099125, 0.027752418, 0.04423689, 0.0012049277, -0.034298137, -0.013734772, 0.016944285, 0.01029335, 0.020617476, 0.061517302, 0.015097026, -0.034003094, -0.012944562, -0.014652103, 0.025112655, -0.06007889, -0.020018661, 0.06194333, 0.030120756, -0.0021530369, 0.0041640652, -0.007963946, 0.021237189, -0.06165473, -0.0064847353, -0.0578663, -0.039327282, -0.012114269, -0.007236151, 0.0068942993, 0.025906876, -0.025144007, -0.0104078725, 0.03374313, 0.023354724, 0.01697807, 0.010963882, 0.005787074, 0.07568497, -0.0127693415, 0.008629469, 0.043797124, -0.003727159, 0.0044767135, 0.02576272, -0.024677468, 0.008213034, 0.013210256, -0.0027256534, 0.0023997272, 0.0073323506, -0.059284102, 0.010458263, -0.021079147, 0.01697485, 0.010431922, -0.03868953, 0.053560227, 0.026887193, -0.009952069, -0.025772309, -0.025204275, -0.027900152, -0.009631977, 0.00739906, 0.008192849, 0.006753436, -0.0068058297, -0.028195623, 0.014982503, -0.03396645, -0.06682546, 0.07802927, -0.011502715, 0.028639972, 0.045101542, -0.017238038, 0.015827684, 0.03633135, -0.01097648, -0.009414096, -0.002229016, -0.054199267, -0.061180606, 0.028343357, -0.043318417, 0.057747196, 0.06342297, 0.027219884, 0.0019646462, -0.05043718, -0.0012941126, -0.026791567, -0.010061297, -0.05960935, -0.03926773, 0.0019755259, -0.004268281, 0.015107906, 0.006354, -0.047075924, 0.056116387, 0.007938465, -0.0011681371, 0.008964593, -0.005289256, -0.014155073, 0.011356697, 0.012315257, 0.041990805, -0.005778843, 0.027671106, -0.025490582, 0.017872497, -0.030339498, -0.0016766918, 0.031867526, 0.014183418, -0.014759183, 0.040388912, -0.0027668816, 0.0011314896, 0.00023162324, 0.03703796, -0.0502528, 0.011986146, 0.0054169493, -0.04138927, 0.0013928888, 0.02553124, -0.0015237316, 0.01633674, 0.0045860833, -0.030597176, 0.013786737, -0.02424457, 0.071531214, 0.006413588, 0.024627076, 0.0064636916, 0.006249533, 0.02151405, 0.019519342, -0.037359774, -0.0010466708, 0.007697107, -0.03070826, -0.015213268, 6.9859176e-05, -0.026497815, 0.022744888, 0.03382845, 0.044493426, -0.02169786, -0.06027587, -0.0493641, 0.039780796, -0.002198846, 0.0017854174, -0.01066555, 0.031192694, -0.012891308, -0.010781218, 0.00087209453, 0.008331565, 0.024762215, -0.06046369, -0.007299139, -0.0014193724, 0.012092939, -0.0068805562, 0.022713395, -0.00487869, -0.007836252, -0.026408488, 0.0065215263, 0.0100757545, 0.017988166, 0.017226586, 0.0014157221, 0.06053355, 0.021696284, 0.0036784864, 0.02941644, -0.03102515, 0.05026196, 0.051256165, 0.0152499145, -0.018684467, 0.01020173, 0.030732596, 0.0064888867, -0.01749457, 0.0041972767, 0.011103601, 0.032006953, 0.022368966, -0.059029862, 0.026128478, 0.0031783064], [-0.02240271, -0.05699616, -0.036847763, -0.032201495, -0.019468427, 0.00021493145, 0.01437406, -0.01828319, 0.019198466, 0.005990046, -0.0009241014, -0.025421873, 0.01635971, -0.025915852, 0.01970153, 0.040584143, -0.030104937, -0.02938123, 0.047512308, 0.026294317, -0.038955547, 0.00087607926, 0.005226105, 0.037462447, -0.02066249, 0.07838612, -0.034982946, -0.013139371, 0.003154664, -0.030088326, 0.004689036, -0.07676894, -0.053236548, -0.020716483, 0.01771679, 0.046917353, 0.03368791, -0.004187529, -0.02076113, -0.041457888, -0.09628098, -0.025401365, 0.004878009, 0.044271205, 0.041075785, 0.029237427, 0.006161368, -0.043421343, 0.003765713, 0.008157011, 0.039493393, -0.0014998476, -0.023613386, -0.0034189154, 0.026752215, 0.04622895, -0.026771424, 0.051172372, 0.059975866, -0.02245151, 0.03120036, 0.013742114, -0.045224898, 0.0323612, 0.038326323, 0.01715097, 0.038506992, 0.018281186, -0.034354508, -0.019007934, -0.0034991254, -0.016128425, -0.0326335, 0.013093166, 0.0036984822, -0.010349416, -0.025295977, -0.025347373, -0.0025340104, -0.021296384, -0.015151109, 0.029508945, 0.025648484, -0.02547301, -0.06293234, 0.00463712, -0.0072757406, -0.022770273, 0.05652593, 0.029365657, -0.045132488, -0.016811183, 0.029194854, 0.02379613, 0.012778038, 0.05346913, 0.023506438, 0.04049848, 0.021488992, 0.028963828, 0.008062525, -0.028436363, -0.022491226, 0.015782665, -0.018642576, -0.00547629, 0.015943864, -0.03936568, -0.017301463, -0.021652136, -0.0039358023, -0.029847438, -0.022436585, -0.026340783, 0.026192565, 0.017167, 0.016810339, -0.021478089, 0.00082026975, -0.030170351, 0.030442651, -0.054243714, 0.014138751, 0.028595356, -0.061381098, 0.02640957, 0.035113774, 0.0067552845, -0.017044088, -0.004797929, 0.0354938, 0.0027375205, 0.047924522, -0.031674873, -0.047330603, -0.011865358, 0.0009848429, 0.044842795, -0.026283417, 0.0501434, 0.0039372947, 0.00048800858, 0.004873986, -0.012146612, 0.0039886916, -0.024254546, 0.0344939, -0.023892693, 0.014740195, -0.020224063, 0.02583019, -0.016824875, -0.035206184, -0.007864336, -0.013544315, -0.051998872, 0.020494802, 0.0019709836, -0.0042290613, 0.0163649, -0.01315235, -0.012009554, -0.013618036, 0.023042312, 0.015559102, -0.03844625, -0.011914678, -0.021178534, 0.019723853, 0.08544511, 0.07974268, -0.0026549743, 0.031877346, 0.035429683, -0.033275045, -0.037076194, 0.004344315, 0.008276418, -0.0036784944, -0.020107511, -0.011375791, -0.016482491, 0.009156911, 0.02115673, -0.027631668, 0.02547249, -0.019808866, -0.027040867, 0.035001118, 0.019504769, 0.015824197, -0.051423125, -0.023937339, -0.008940421, -0.005804187, -0.0010453248, -0.022116134, -0.021542983, 0.023315908, -0.009897229, -0.02125511, -0.038358513, -0.007513515, -0.02576945, -0.06164145, -0.030136086, 0.057376567, 0.028102156, 0.03208864, -0.03947055, -0.0011141133, 0.008224502, -0.0030401896, 0.040515028, 0.03137454, 0.018540952, 0.02893787, -0.05463204, 0.044657197, 0.05305951, -0.016226156, -0.012993488, 0.01473111, -0.024493877, -0.00948995, -0.040458508, -0.00018326279, 0.0053452514, -0.009328232, 0.024211423, 0.08274964, -0.04428989, -0.029863529, -0.06903972, -0.028637799, -0.024496993, -0.029963728, -0.047316067, -0.06730573, 0.038642883, -0.030684318, 0.0058222767, 0.0085713, -0.03734304, 0.010121766, 0.0020263388, -0.017387642, -0.04132083, 0.00077094976, 0.027214915, 0.031337097, 0.052612517, -0.038919333, 0.0019686474, 0.023717217, 0.046622474, -0.010435077, 0.03432258, -0.01655102, 0.041495264, -0.018694362, -0.049145967, -0.020027041, -0.01601395, -0.010942814, 0.028782124, 0.022162534, -0.015996298, 0.02380252, -0.020771515, -0.040773183, -0.07266551, 0.068867356, 0.0090933135, 0.0058644093, 0.0331254, 0.030090401, 0.001773444, 0.010414311, -0.0009874386, -0.056114756, -0.0069255685, -0.04040192, 0.020254953, -0.011172282, -0.06621134, 0.044099364, -0.033953458, -0.039036535, -0.047613025, 0.007009672, -0.0012385814, -0.0012792054, 0.07997734, 0.05304809, -0.025651341, 0.020167993, 0.0068196603, -0.04995962, -0.056928795, -0.027123934, -0.018860493, -0.02572636, -0.023797166, 0.027768726, -0.0061577335, -0.05792558, 0.011235619, 0.021679264, -0.007616568, 0.025097398, -0.055255033, -0.044597756, -0.015742948, 0.021223543, -0.006830952, 0.009529665, 0.07189301, -0.03986615, -0.02729785, -0.038704272, -0.0014074376, -0.01060017, -0.08452309, 0.031167135, 0.04326404, 0.0256333, 0.024497252, -0.053184632, -0.027939755, 0.02904845, 0.002340624, 0.0071160994, 0.01560706, 0.0045208284, -0.0147742005, 0.03490819, -0.04292607, -0.01906634, -0.0024078551, -0.0014889453, -0.06362905, -0.026003588, 0.0054293554, 0.029072851, -0.029457029, -0.036377925, -0.00082649966, 0.018669963, 0.017312786, 0.02739701, -0.036532115, 8.410361e-05, 0.011097523, 0.015247673, -0.034522194, 0.013162733, 0.006314, -0.024686225, -0.020988442, -0.01211092, -0.019014424, -0.10592485, -0.014960059, -0.003370561, -0.045239434, 0.078313954, 0.02965431, -0.0033034028, -0.021796852, 0.035584133, 0.003510417, -0.042043496, 0.030538695, -0.021027979, 0.045585193, -0.0062363865, 0.0023330962, 0.08919084, 0.010898166, 0.021063281, -0.015705569, 0.059987675, 0.03663906, 0.062998794, 0.07142732, 0.025403444, 0.00022427629, -0.018869838, 0.047810175, 0.0338151, 0.019656362, 0.059927456, -0.01827748, 0.0024005868, -0.011927917, 0.011031784, 0.016855245, 0.026913155, 0.024557216, -0.01796858, -0.010482839, -0.04680314, -0.00251584, 0.00652374, -0.03819342, -0.0771012, 0.008518346, -0.0471489, -0.013730693, 0.021202415, 0.0054571303, -0.006638474, 0.026874738, 0.043995533, -0.017211648, -0.0019172507, 0.0048427065, -0.018723955, -0.008923872, 0.0016301563, 0.044981413, -0.04275578, 0.03893997, 0.06867008, 0.014224411, -0.012534552, 0.006387721, -0.016923515, 0.062178522, 0.032987304, 0.03599219, -0.0066592405, 0.08038228, 0.023563027, -0.009748231, 0.028175648, -0.06264369, -0.028685039, -0.012848124, -0.0076744542, 0.0022344564, -0.026410868, 0.013316404, -0.034472223, 0.00980456, -0.00054364774, 0.059057344, 0.0434826, -0.002289487, -0.022958467, 0.018658541, -0.06515226, -0.06694024, -0.03219611, 0.056312036, 0.055229593, -0.03163957, -0.03508055, -0.02408634, -0.060488146, -0.00868863, 0.029519847, 0.0022080117, -0.064404674, -0.010946557, 0.024882207, -0.0242184, 0.008195429, 0.016002528, -0.010187179, -0.04538324, -0.023192868, -0.06811665, 0.024290366, 0.05372014, 0.048069883, 0.010846769, -0.036389478, 0.017878506, 0.032988343, -0.04560103, -0.0052502453, 0.0037677167, 0.003634366, 0.042279195, -0.012304046, 0.0011307263, -0.0029370068, 0.008124434, 0.009962854, 0.018678268, 0.044643182, 0.047255848, -0.042384066, 0.016057558, -0.010978117, 0.014325129, -0.021457842, 0.022054873, 0.024072321, 0.056953717, -0.036700323, 0.004830506, 0.02624279, -0.017612698, 0.018412719, 0.045378566, -0.039757125, 0.03683634, -0.042783815, -0.029841205, -0.028792506, -0.011821229, 0.02901289, 0.047833145, -0.0013124316, -0.012877262, 0.013272796, -0.02011997, -0.010879477, -0.028070876, -0.031383105, 0.012571413, 0.040633462, -0.047181085, 0.036267344, -0.0862903, 0.02132909, -0.02340728, -0.034862503, -0.025117386, -0.02093453, -0.039072357, 0.035743512, -0.0125733595, 0.030648496, -0.013109001, -0.016016027, 0.02598386, 0.0034804358, 0.022665597, -0.0003414113, -0.001205485, -0.026493676, -0.02842079, -0.015113211, 0.024068167, 0.0198064, -0.032752644, 0.0033730997, 0.05150048, -0.029739192, -0.030601252, 0.066024445, -0.036347296, -0.010890898, 0.009050742, 0.05414585, 0.020948548, -0.023952655, 0.008023199, 0.01283229, 0.01901676, -0.014111105, 0.00935419, -0.034575928, -0.024391344, 0.0036174934, 0.009698911, -0.058447856, 0.0042093014, -0.03253823, -0.058663823, -0.016884968, -0.014043096, -0.0064302594, -0.058093786, 0.006430811, -0.028101768, -0.0034996443, -0.034067154, -0.011165922, -0.038199652, 0.016816568, 0.03401679, 0.0074805487, 0.0023722928, -0.00024660007, 0.002686124, 0.06542638, 0.0032977895, 0.045606997, -0.0074478416, -0.02640334, -0.02128016, -0.09662829, -0.007602032, -0.032360163, 0.030616827, -0.023251014, -0.08082253, 0.008133714, -0.013635167, 0.020778783, -0.00938697, 0.0012985441, 0.029982936, 0.003701467, -0.038612902, 0.025851734, 0.018444648, -0.011798905, -0.0098528415, 0.0058096386, 0.026273033, -0.038164347, -0.0015252864, -0.016098248, 0.011178511, -0.032893077, -0.010677654, 0.0016101687, 0.0089168, 0.041346267, -0.029269354, -0.0032000905, 0.033572912, 0.022863721, 0.0068528866, 0.08040928, 0.010533977, 0.06798894, -0.0237154, -0.045674745, 0.0984656, 0.029547362, -0.0433227, -0.01640851, -0.0080555165, 0.02062615, -0.025034841, -0.010043632, -0.0037736301, 0.025847841, -0.022962362, 0.032196887, 0.03640106, -0.017403737, 0.025923638, 0.035368163, 0.024944507, 0.0089450935, -0.034378, 0.018422324, 0.05524465, -0.006323864, 0.0088755265, -0.0125854295, -0.032160804, -0.005432989, -0.065800175, 0.022538727, 0.03752267, 0.028233243, 0.01888697, 0.0083026355, -0.02544186, -0.048539724, -0.015161492, 0.061093483, -0.020047288, 0.058618654, 0.005261148, 0.0006884036, 0.0059505897, -0.0067909765, -0.024983184, -0.017174268, 0.025380598, -0.047399133, -0.008592585, 0.00074654934, 0.0352581, 0.053759858, 0.0022946787, 0.0006707522, 0.020054556, -0.032235045, -0.052021716, -0.055431545, 0.036544576, 0.021809831, 0.024655856, -0.007205395, 0.008693237, 0.048125952, -0.0068196603, 0.041279815, 0.002822143, 0.03639298, 0.022723548, 0.0035032786, 0.0062459907, -0.0044057053, 0.025097141, -0.004112511, 0.018719023, -0.026975453, -0.038604595, -0.039659522, 0.014667254, 0.0049901474, 0.03779263, 0.0010471418, 0.028816646, -0.010090356, -0.045677606, -0.01399754, -0.033029877, 0.02106951, 0.034170985, -0.0541648, -0.03493311, -0.02441263, -0.0154459905, -0.0009324079, -0.027615057, 0.0046744994, -0.025395136, -0.009047238, -0.037832215, -0.004512522, 0.04283599, 0.03676937, -0.03244738, -0.036284998, -0.069151856, -0.035423193, 0.020366572, -0.033734635, 0.0067256927, 0.009182349, -0.020377992, 0.0023590543, -0.049252525, 0.0064116023, -0.026482772, 0.00574085, -0.010070109, 0.028476859, -0.026300289, 0.0053932737, 0.051719565, -0.031695638, -0.051713202, 0.0075952825, -0.04251178, -0.006819401, 0.04620922, 0.02102123, -0.016308831, -0.009886846, 0.0019299701, 0.015651578, -0.02442431, 0.0043765027, -0.0011164495, -0.0063233455, 0.013379223, 0.003536505, 0.01245616, -0.019803284, -0.040307432, 0.05354804, 0.0152251655, -0.053390473, -0.044886407, 0.0022806614, -0.085224986, -0.04963255, -0.033552147, 0.00084986177, -0.021951042, -0.07285241, 0.023728898, 0.004892935, -0.023637267, 0.06283474, -0.05631619, -0.028068801, -0.0019229614, -0.033741124, -0.005923399, -0.031591807, -0.024520874, 0.041369367, 0.040712375, 0.023595214, -0.0017245132, 0.013126198, 0.011192919, 0.0014157441, 0.03897008, 0.01407126, -0.0017517691, -0.018637903, -0.01773869, 0.0030635516, -0.063860595, -0.017911926, 0.021395544, 0.00025127252, -0.006190441, 0.0005355115, 0.028685039, -0.016514419, 0.026933922, 0.012048621, 0.02871048, -0.013979499, 0.02040369, 0.019695818, -0.023996525, 0.041873213, -0.002321675, 0.037580814, 0.00055523956, -0.026988432, 0.019304633, -0.025295977, -0.04135042, 0.008198544, -0.010310479, -0.021165036, 0.0138014285, -0.001145425, -0.032654785, 0.0063127023, -0.045248777, -0.029337622, 0.0122394115, -0.005097613, 0.020183615, -0.031692524, 0.00945283, -0.0060866093, -0.058047064, -0.028906072, -0.058249537, -0.048654456, 0.012967271, 0.0066187466, -0.008856058, 0.025737781, 0.020730501, -0.0014204165, 0.009173263, 0.017577654, -0.018857477, -0.0035063936, -0.018847514, 0.038116585, -0.007945195, 0.029644055, 0.056794852, -0.0112309465, 0.0017861633, 0.036749642, -0.033840798, 0.0043666386, 0.027464502, -0.011157745, 0.023405852, 0.049648125, 0.0014245698, -0.010082049, -0.047281805, 0.015668191, 0.0035437727, -0.027255798, 0.031242933, 0.012936381, -0.040344812, 0.0106362505, 0.011390328, -0.016452638, -0.056608997, 0.033504386, -0.009758095, 0.0069765435, -0.03350542, 0.02035463, 0.038363706, -0.013002314, -0.071057394, 0.07222735, 0.013587925, 0.0416161, 0.051851172, -0.026356615, 0.002578139, 0.043041058, 0.013980927, -0.0034700527, -0.0081025, -0.032011807, -0.029582666, -0.009363535, 0.0025148017, 0.00083247, 0.057090774, -0.0053131282, -0.0031056036, -0.026506135, -0.018365737, -0.0002985159, -0.02819549, 0.034758672, -0.018683786, -0.052845616, 0.040958457, -0.011106349, -0.032720458, -0.025218623, 0.06119212, -0.050204664, -0.035325073, 0.01757454, 0.015645348, 0.0006998251, -0.028434288, -0.02764361, 0.02021342, -0.01139896, 0.050088372, -0.025642257, -0.003862536, -0.028072953, -0.0171426, -0.027430188, -0.030148936, -0.020171108, 0.0052040406, -0.006860674, -0.02277858, -0.020313747, 0.0089596305, 0.021117015, 0.011129451, -0.0052434965, -0.06376922, -0.0073987814, -0.0058441623, -0.011172282, 0.020123605, -0.027304599, 0.037822742, 0.035628203, -0.036675923, 0.03062721, -0.002601501, 0.030347904, 0.03057218, 0.010089318, 0.03401524, 0.021897081, -0.027777033, -0.034170985, -0.023806512, -0.024510458, 0.02578139, 0.006645223, -0.010309441, -0.002186434, -0.01305371, 0.047094908, 0.02956709, -0.027351324, -0.021829557, 0.012362711, 0.021702884, 0.0050903447, 0.04589818, 0.014657908, -0.01677763, -0.03124475, -0.010208724, -0.009579505, -0.027421929, -0.07794847, -0.011776063, 0.031741325, 0.014931246, -0.034424074, 0.041304346, -0.00454471, -0.08060137, 0.00903997, 0.008903561, -0.0013193754, -0.0076475064, 0.008488494, 0.040343773, 0.032192472, 0.018261515, 0.006725433, -0.01050776, -0.035257064, 0.028646102, 0.016860178, 0.005608465, 0.0041138087, 0.030802688, -0.023079172, -0.016896129, -0.0111450255, -9.7082564e-05, 0.024692489, 0.024012618, 0.02349917, -0.03498087, 0.035840597, -0.023621691], [-0.010765708, -0.084107, -0.024011059, -0.0033674536, -0.013026348, 0.029702913, 0.040178955, -0.028773502, 0.056639247, 0.023665577, -0.00904683, 0.028389852, -0.090367876, -0.022448352, -0.02141592, 0.047704756, -0.011578196, -0.035023324, 0.02635512, 0.039382033, -0.024983233, -0.021953981, -0.004807635, 0.02691653, -0.018487476, 0.06428994, -0.018763537, -0.020006372, 0.0416106, -0.011687163, -0.02066162, -0.04327625, 0.011839818, 0.00036155185, 0.022995701, 0.009462364, -0.0016289292, -0.005987826, -0.022722527, -0.035566658, -0.074560024, -0.008539151, -0.030848907, 0.050670486, 0.013729931, 0.030596323, 0.02746187, 0.018120652, -0.0072340495, -0.022878198, 0.029175602, 0.009144248, -0.03290925, 0.019938203, -0.03947644, 0.03454628, -0.0015375996, 0.03819594, 0.030318132, -0.028348174, 0.014215014, -0.0007504397, -0.03213292, 0.010056162, 0.0025286032, 0.024027128, 0.019919999, 0.006604347, -0.0030521, -0.038971774, 0.0040338137, 0.017926065, 0.0004192997, -0.030597327, 0.06539267, -0.0033413416, -0.07171606, 0.025350811, -0.02399499, -0.027252976, -0.011324607, 0.005866179, 0.0076724314, -0.063428245, -0.050151255, 0.0021813628, -0.031209959, 0.013478351, 0.043063838, 0.012621173, -0.051734053, -0.030866986, 0.01595787, -0.0086903, 0.02072169, 0.004224131, -0.021577613, 0.05992521, 0.025766594, 0.038860798, 0.03125867, -0.03738898, -0.017511161, -0.027847527, -0.027209789, -0.0014804167, 0.02219627, -0.034353767, -0.014629793, 0.0039547244, 0.0062271655, 0.009423447, 0.010399637, -0.06466957, 0.044065136, -0.009330045, 0.02127676, -0.015989568, -0.04267015, -0.0050607217, -0.04386126, 0.004806348, 0.021365704, 0.0025107453, -0.017920418, -0.003212476, 0.0029943523, 0.0136174485, -0.054688733, 0.0066073597, 0.06424575, 0.0036915948, 0.043611184, -0.016998962, -0.03174224, 0.024578165, 0.010883714, 0.057041332, -0.014620754, 0.04907062, -0.011467219, -0.01309345, 0.025407553, 0.017048175, 0.031458523, 0.00091392273, 0.01338947, -0.024076654, -0.012395201, -0.0065059243, 0.0067961705, -0.026132163, 0.031829618, 0.03935944, 0.030987252, -0.06596614, 0.013973476, 0.016461592, -0.028536482, 0.011420017, -0.012416293, 0.004090055, 0.047399446, 0.017335908, -0.0022572824, -0.046198294, 0.017759224, 0.015393069, -0.0026029223, 0.06158433, 0.06832125, -0.0015895728, 0.0069940193, 0.014546435, -0.057057776, -0.008807722, -0.0026011646, -0.040964577, 0.021936154, 0.03809702, 0.0055380203, -0.0013470945, 0.016383823, 0.0030113647, -0.011289385, 0.017806867, -0.03359344, -0.012005467, -0.013408552, 0.021571588, 0.029272141, -0.04544807, 0.034864645, 0.0046017515, -0.03614715, 0.0047348225, -0.031607665, 9.66649e-05, 0.024422701, 0.035647, 0.0054279226, 0.008788974, 0.037250385, -0.027216818, -0.022392863, -0.059338693, 0.029630177, -0.032165058, 0.039801333, -0.03561587, 0.029379351, 0.042452212, 0.042992532, 0.062296387, 0.008861032, 0.030563181, 0.015655572, -0.050528876, 0.027629592, 0.065505154, -0.044290103, 0.0070797624, 0.036299806, -0.032276534, -0.035288464, 0.005312803, -0.0072923, 0.019553928, 0.027586404, -0.020652644, 0.07492961, -0.0016862376, -0.026279043, -0.04717599, -0.019533843, -0.011182247, -0.029284695, 0.028517904, -0.007884466, 0.031876694, -0.020997122, 0.033069562, 0.042271435, -0.019027418, -0.031081408, -0.010956025, -0.037103254, 0.0042869, -0.007758551, 0.009909533, 0.051658727, -0.015865097, -0.021603225, -0.008349839, 0.0056783725, -0.00086672005, -0.011386277, 0.029898329, -0.00947065, 0.049063884, -0.0060381037, -0.04077903, -0.005254553, -0.04787147, 0.067116074, 0.009823539, 0.03008915, -0.031230522, 0.0220868, -0.02465884, -0.035468236, -0.047672614, 0.02747794, 0.017161503, -0.0118347965, 0.015950462, 0.014917529, 0.020545812, 0.06382997, 0.005562547, -0.06439238, -0.022887236, -0.003708417, 0.05198657, 0.018200995, 0.0026463585, -0.0064013507, -0.045868877, 0.0041086352, -0.047706764, -0.009748593, -0.0066103726, 0.02415342, 0.037685752, 0.041093882, -0.03438358, 0.031679977, -0.044121876, -0.049538627, -0.029871212, 0.0050356137, -0.014041769, 0.0074278815, 0.01379722, -0.0035211132, -0.015282595, -0.08274516, 0.019782411, -0.009160819, -0.0061383466, -0.037132878, 0.0027518112, -0.05590797, -0.00719689, 0.01871332, -0.033384793, 0.019778894, 0.072338484, -0.023753956, -0.0105022965, -0.024958625, -0.05400982, -0.003973053, -0.072458, 0.01827042, 0.070141055, 0.032895193, -0.0074042804, -0.0566391, -0.04272438, 0.043731704, 0.03557168, 0.0008335779, 0.0075885714, 0.0130459955, 0.0070236465, -0.015071942, 0.014269246, 0.024696, 0.036352593, 0.0012322892, -0.062299397, -0.032252435, -0.018342072, 0.041961104, -0.07305155, -0.03260068, -0.039706424, -0.00049713376, 0.014462199, 0.021397842, -0.023956826, 0.0065119504, 0.015565811, 0.015892714, -0.0008411102, 0.014259705, -0.00011449141, -0.016776005, -0.01599415, -0.0143917715, -0.009528146, -0.040479872, 0.03840484, 0.028828612, -0.024206901, 0.060425356, 0.014680511, 0.052391373, -0.02820506, 0.057193484, 0.0037159496, -0.041042157, -0.0001978492, -0.004213099, 0.021646911, -0.05669936, 0.0122021865, 0.031161752, 0.00045445058, 0.011594445, -0.013716373, 0.04232366, 0.036155183, 0.028938208, 0.038838703, 0.03625461, 0.018778099, -0.014068887, 0.047642488, 0.0031560462, 0.0061492687, 0.048994288, 0.019008085, 0.0018330553, -0.022921383, 0.027838487, 0.048594575, 0.024904646, 0.0059533026, -0.0041813217, 0.015117385, 0.00016194509, -0.011602298, 0.0025328717, -0.060451467, -0.038734253, 0.04416657, -0.0012943996, 0.03129834, 0.02540956, -0.013413322, -0.009474667, 0.02104031, 0.03926051, -0.017546311, -0.031477105, 0.035821754, 0.00080696365, 0.021640886, 0.024252502, 0.033869375, -0.038320478, 0.041658808, 0.025910087, -0.028250253, -0.005551829, -0.022681603, -0.0491128, 0.056965005, 0.0018414035, 0.014530367, -0.018110735, 0.08032678, 0.058940984, -0.0286103, 0.0065563438, -0.008291589, -0.05220206, -0.01152346, -0.043354083, -0.03183464, -0.032404587, 0.015820906, -0.022538738, 0.010861619, -0.04180016, 0.022561338, 0.04684708, -0.04302065, 0.006576352, -0.029090863, -0.022033853, -0.037000813, -0.04436894, 0.039598964, 0.06752182, -0.06594304, -0.029102162, -0.04252854, -0.049510006, -0.00091743784, 0.024007292, -0.0045505315, 0.006755935, -0.0039772745, 0.04318536, -0.05819378, -0.0056977053, 0.009044319, 0.012129813, -0.02867307, -0.013845426, -0.044882644, -0.014743783, 0.0016932677, 0.037304115, 0.02119196, -0.00093702186, 0.030620428, 0.021611888, 0.010911835, 0.0281561, 0.018755501, 0.04095403, 0.0023676625, -0.018970173, 0.000914927, 0.014665948, -0.012588187, 0.022730812, 0.037422623, 0.004919113, 0.058370534, -0.031740233, -0.022700435, 0.0046306252, 0.019869657, -0.053608093, 0.00013457763, 0.07478499, 0.022933936, -0.06298434, 0.019881334, 0.014216834, -0.07466447, 0.02315137, 0.056996636, -0.032615993, -0.008413613, -0.034913857, -0.032856524, 0.0012272676, -0.04930563, 0.06734505, 0.0295187, -0.03854946, -0.041308302, -0.0054649566, -0.016394116, 0.011371747, -0.03239153, 0.0038133676, 0.04513573, 0.010645692, -0.029456431, 0.017006997, -0.05945921, 0.029540794, -0.010721017, -0.007787927, -0.0471092, -0.032181125, -0.011133788, 0.012089389, 0.0066068578, 0.036329936, 0.015601465, -0.0015436255, -0.01209667, -0.018879032, -0.01786267, -0.0014731354, 0.017533256, -0.015390056, 0.010923888, -0.022760691, 0.016996954, 0.01040265, -0.033361193, 0.004037831, -0.0055001075, -0.053618137, -0.055055305, 0.041018054, -0.013873045, -0.020691311, 0.04519197, 0.046423256, 0.03597039, -0.041856658, -0.006368334, 0.024601594, 0.023677628, 0.02106893, 0.023635447, -0.014109058, -0.06916688, -0.056711413, 0.048253108, -0.033692613, -0.019059807, -0.038876865, -0.024747094, 0.004231663, -0.021261258, 0.0040127235, -0.03763353, 0.015162203, -0.026759857, 0.016790569, -0.02890406, -0.0114652105, -0.018850159, 0.015314733, 0.03627721, 0.0056140968, 0.0157501, 0.005452403, -0.016617615, 0.028383827, -0.027584398, 0.05610883, 0.017489081, -0.020685535, -0.022927409, -0.03839279, 0.017045913, -0.025998339, -0.024154676, 0.014826387, -0.065714054, -0.008492827, -0.011286945, -0.009652053, -0.01361544, -0.026142709, 0.028410945, 0.015305695, -0.0017038131, -0.002848225, -0.0028670558, -0.053566918, -0.026590127, -0.0047463723, 0.016954772, -0.02780434, 0.017438097, -0.03333508, 0.0031804007, 0.022504592, -0.022965573, -0.03624055, -0.005810439, -0.0029687423, 0.008190624, 0.021538446, 0.062036272, 0.036793925, -0.017496096, 0.03430675, -0.0096142655, 0.083216175, -0.021026248, -0.06661391, 0.09119945, 0.031668678, -0.009807094, -0.03295344, 0.00043486652, 0.012006533, 0.012013062, 0.0137696015, -0.005207351, 0.0028434545, -0.003491486, 0.0017201331, -0.0035160915, -0.032347843, 0.024149654, 0.057452593, -0.004412941, -0.012766797, -0.06029881, 0.022327835, -0.005388629, 0.010702884, -0.0045011947, -0.02069382, -0.0061599393, 0.029014032, -0.070924416, 0.026525853, 0.0337707, 0.020310175, 0.0016824714, 0.013692521, -0.0014984314, -0.045915578, -0.025923768, 0.051360447, 0.006512578, 0.026077932, -0.016999338, 0.0028652984, -0.0109346835, -0.012668374, -0.016452616, -0.0020548196, 0.013856474, -0.0615301, -0.029636705, 0.021908032, -0.0077303047, 0.066035435, 0.022935443, 0.020145467, -0.0020427366, -0.0343655, -0.052995466, -0.039521635, 0.0077974685, -0.028095089, 0.008938616, -0.015361936, -0.00019150949, 0.03920276, 0.038152758, 0.04747527, 0.026541168, 0.009682559, 0.049444225, 0.014586609, 0.0216291, -0.005580452, -0.040729314, 0.009701641, 0.00855271, -0.023956826, -0.102311134, -0.015905645, 0.030402493, 0.00942646, 0.05364425, 0.016713, -0.004642269, 0.018636491, -0.03362633, 0.011455921, 0.0059700464, 0.007242084, 0.023694701, -0.06457253, -0.010054091, 0.014705117, -0.028507108, -0.050613243, -0.039654203, -0.026846228, 0.007105749, -0.029145598, -0.043004584, 0.0052841804, 0.026739772, 0.0374869, -0.018278705, -0.032895193, -0.03947393, 0.04178736, 0.03624557, 0.036809996, -0.023958836, 0.010449853, 0.005773782, 0.013481867, -0.05018842, -0.047808204, -0.016000677, 0.02534579, 0.006528019, 0.021290507, 0.058742132, 0.008907042, -0.006528019, -0.01984342, -0.06631162, 0.049648095, -0.04153051, 0.010420728, 0.0036127565, 0.024763288, -0.08191961, 0.0008283052, 0.018523004, -0.016246984, -0.005658035, -0.035632942, 0.005845088, 0.017610084, 0.013101232, 0.0090749515, 0.011033184, 0.005312803, -0.041176736, -0.007820065, -0.00653756, -0.069552526, -0.028679095, -0.012477555, -0.06489856, -0.06125592, -0.013811281, -0.0022928412, 0.00047403463, -0.052001197, 0.07010892, -0.0349942, -0.004808828, 0.006776822, -0.05318001, 0.005285687, -0.014223801, -0.058924913, 0.030032907, -0.045724127, 0.023282932, 0.0017211373, 0.049146947, -0.039702408, -0.036969177, 0.004931919, 0.007297823, 0.021516979, 0.024997104, -0.0058953036, 0.01029569, -0.0011368797, 0.018658083, -0.04332998, -0.08970503, -0.034086306, 0.023932723, -0.008087275, -0.0023498358, 0.007318537, -0.023427553, 0.01633844, 0.025316162, 0.005140062, 0.00490907, 0.0061428663, 0.046106897, 0.00936118, 0.008726455, -0.016092196, 0.016520409, 0.0055995337, -0.02430344, -0.009039801, -0.0068514077, 0.03989323, 0.009379759, 0.029252179, 0.034466185, 0.022940213, -0.014406484, 0.0031665915, 0.0037603902, 0.042366594, -0.09343303, 0.0020663692, 0.05653867, 0.011113702, 0.010751898, -0.0041317344, -0.048873775, 0.013664901, -0.040714756, 0.00055689027, -0.047367305, -0.04992428, -0.007491153, -0.011297868, 0.002880614, 0.016452115, 0.017333899, 0.0039168117, 0.021064412, 0.028324073, 0.022940464, -0.007258467, -0.013923763, 0.06996631, -0.018956365, -0.005885527, 0.031172296, -0.006403987, 0.00084964687, 0.036978718, -0.011397042, 0.012146133, 0.045234155, 0.00095560163, 0.007129884, 0.05273334, -0.061994087, 0.0009430477, -0.041730113, 0.011029088, 0.0048859715, -0.018019343, 0.029899646, 0.019236566, -0.014380724, -0.009682685, -0.028551549, -0.019916046, -0.008081719, 0.0207468, -0.0003550238, 0.00049462303, 0.0018924586, 0.030310094, 0.012922465, -0.040467694, -0.061544158, 0.0678206, 0.0044144476, 0.040813174, 0.028860874, -0.035680145, 0.04766057, 0.0128612025, -0.008572795, -0.03732621, -0.012693482, -0.04073986, -0.052359235, 0.046164144, 0.006106209, 0.028169407, 0.06231748, 0.026321977, 0.009567063, -0.07813537, 0.00020990093, -0.020859532, -0.031001313, -0.034444842, -0.010024276, -0.008226308, -0.009131192, -0.0019051773, -0.022488525, -0.044442758, 0.06745754, 0.00075581437, -0.011631926, 0.022140281, -0.007032183, -0.0014173648, 0.008766628, -0.026915526, 0.05588085, 0.034056176, 0.025840914, 0.003523624, 0.014535891, -0.062263243, -0.0024947077, -0.013610419, 0.04453917, -0.020275025, 0.012607582, -0.001897645, 0.0006718838, -0.00823811, 0.049904197, -0.033899505, 0.046585955, -0.014294197, -0.026877362, 0.0021261256, 0.04238392, -0.061841432, 0.05126805, -0.003591007, -0.010927904, 0.035626914, -0.05380695, 0.048825566, 0.026099335, 0.014672979, 0.03547401, -0.014055139, 0.019719139, 0.014052316, -0.018965906, -0.008452781, 0.008803787, -0.015616027, 0.0016179445, 0.008252044, -0.017681392, 0.017674863, 0.019797977, 0.039449323, -0.0061890646, -0.0345631, -0.05138204, 0.05418256, -0.004513372, -0.0497184, -0.03829989, -0.004933174, -0.04136153, -0.008425916, 0.006291002, -6.779097e-05, -0.0020939878, -0.07756894, -0.020708887, 0.025978504, 0.022699805, 0.00021693109, 0.046953846, 0.0045851804, -0.03563997, -0.017116467, -0.00035326628, 0.032383714, 0.04513297, -0.0005508644, 0.0022089814, 0.0149642285, 0.00010896771, -0.016756924, 0.008571791, -0.025151674, 0.032716423, 0.050982576, 0.0070552826, 0.021560542, 0.012412276, -0.00052349694, 0.00038414882, -0.010328331, 0.0017279165, -0.020089226, 0.047596287, 0.029442372, -0.0714105, -0.0044154515, 0.0034132125], [-0.018448288, -0.090516314, -0.0545385, -0.027705437, 0.0017986568, 0.014984217, 0.008845045, -0.00652496, 0.031461414, 0.048495885, -0.00010458668, 0.025776938, -0.099457696, -0.03274879, -0.026342241, 0.03324981, -0.007837701, -0.007830844, 0.03190362, 0.058217093, -0.022788817, 0.01510196, -0.0269042, 0.0042624087, -0.015001611, 0.05424949, 0.021261645, 0.014096233, 0.013371262, -0.00035412292, 0.0115201445, -0.032420535, -0.01545965, 0.011036683, 0.029184368, -0.0048646186, 0.05134158, 0.010523784, -0.05157439, -0.046172008, -0.043207455, 0.028733017, -0.018819358, 0.006997273, 0.0092910435, 0.04841583, 0.027994664, 0.035367694, -0.023787783, -0.058522157, 0.055292234, 0.007181916, -0.038930327, 0.022110382, 0.025446897, 0.033055637, 0.035491236, 0.028396286, 0.03363811, -0.0005931782, 0.013350523, -0.008960558, -0.030802451, -0.008444092, 0.019997241, 0.03774665, -0.019964684, 0.0092402, -0.03838889, -0.052150287, -0.0250455, 0.049880937, 0.0066317767, -0.02768403, 0.03763515, -0.0016513099, -0.05336641, 0.008775755, -0.013251511, -0.023662457, -0.017955795, 0.027104676, -0.0011178398, -0.027702758, -0.05771044, 0.022805024, -0.026868297, 0.030816944, 0.042835493, 0.01180826, -0.039780624, 0.0033097558, 0.01114283, 0.004593786, -0.0066418117, -0.00067089347, 0.025311315, 0.038285863, 0.032386634, 0.019662296, 0.010187055, -0.059052896, -0.0427231, -0.021841893, -0.0031929042, -0.010596036, 0.02468335, -0.00627364, -0.022914406, -0.020933727, 0.0013990978, 0.007983236, 0.005282547, -0.044359025, 0.017893465, -0.03218594, 0.0038043684, -0.03873052, -0.026110545, -0.007238112, -0.01238003, 0.012452282, 0.0034968522, 0.024508515, -0.0039070593, -0.0058008255, -0.00823135, -7.9387755e-05, -0.040230416, -0.012344796, 0.026640836, 0.004179537, 0.050634224, 0.009934173, -0.027021272, 0.0022099232, -0.001170635, 0.075669914, -0.04771561, 0.046927087, -0.051569927, 0.007603385, 0.04571129, 0.00016858747, 0.023605814, -0.026358966, -0.0020585626, -0.040235948, -0.024250729, -0.051858045, 0.013789386, -0.017983558, -0.004956829, -0.0057774666, -0.013265784, -0.028249219, -0.01109377, 0.03699291, -0.016670983, 0.01260749, -0.012298859, 0.0011248086, 0.030770337, 0.02912371, -0.020784428, -0.054565255, 0.016288316, -0.002886503, -0.019235922, 0.030495603, 0.06446643, -0.0018689573, -0.0025435302, 0.04541872, -0.043859728, -0.0226768, 0.012392797, -0.031887118, 0.03603223, 0.0061324816, 0.022798559, 0.01243132, -0.03477942, 0.012130773, -0.029236102, 0.015888255, -0.0054197754, -0.020356493, -0.002735714, 0.023977334, 0.015837857, 0.0024922404, 0.016306184, -0.020246554, -0.05426086, 0.030781936, -0.013558359, 0.011991565, 0.013562596, 0.062246244, 0.04207551, 0.004979352, 0.033599753, -0.03544619, -0.044975393, -0.0489314, 0.03407965, 0.0028856113, 0.06364401, -0.038959388, -0.0023306774, 0.06725302, 0.049360454, 0.038101442, 0.014236276, 0.04069559, 0.016188413, -0.037482228, 0.05766428, 0.07342565, -0.014120986, 0.022716718, 0.04426269, -0.03302737, -0.02971523, 0.015643848, -0.030616244, 0.018434908, 0.034369547, 0.014958794, 0.06341387, 0.0052012363, -0.039049856, -0.018159391, -0.0038551006, -0.031011399, -0.027180048, 0.04985908, -0.04531168, 0.0531006, -0.037764713, 0.051036514, 0.035031855, -0.022458708, 0.0010240129, 0.00959633, -0.037413042, 0.009772639, -0.029312814, -0.03272738, 0.046304777, -0.023947451, -0.023706166, -0.0068978146, -0.027413752, -0.019368159, -0.003328488, -0.011107373, 0.017595984, 0.028514253, 0.017836824, -0.044028986, -0.007650884, -0.040517863, 0.050317567, 0.019040573, 0.049143698, -0.01657264, 0.010188393, -0.027991768, -0.029688973, -0.06871233, 0.031038385, -0.012897388, -0.0076155383, 0.050121326, 0.027952407, 0.01248038, 0.049774338, 0.028937284, -0.02949835, -0.01614961, 0.01556, 0.0053047077, 0.014146631, 0.006891571, 0.014633215, -0.04167411, -0.03048936, -0.032341063, -0.023064874, 0.00078495755, 0.028671468, 0.017211532, 0.050586056, -0.018587217, 0.051282708, 0.03328443, -0.07072111, -0.025582483, 0.030433943, -0.002352197, -0.010722588, -0.009114428, -0.017281778, -0.037195396, -0.05253507, 0.008682032, 0.012158369, -0.0037881453, -0.0664645, -0.009187572, -0.05399795, -0.010682058, 0.02944996, -0.009263392, 0.033382885, 0.103207655, -0.030759634, -0.05574805, -0.028208522, -0.014567655, 0.021407267, -0.068730175, 0.027748251, 0.054187384, 0.007143696, 0.01743442, -0.053031024, -0.031665124, 0.029054137, 0.030528607, 0.019483004, -0.019744806, 0.027388776, 0.035854276, -0.039401304, 0.034935962, 0.023572812, 0.026604155, 0.0344573, -0.0447408, -0.008443646, -0.018239783, 0.011209284, -0.058336623, -0.005892534, -0.045944996, 0.030051278, 0.005606203, 0.008879387, -0.0053056, 0.0062809987, 0.03259871, -0.035341825, -0.024462078, 0.023426162, -0.004292737, -0.013873234, -0.0047088536, -0.031244881, -0.02518465, -0.023529997, 0.03617562, 0.022494834, -0.0013304139, 0.05345294, -0.016856965, 0.04472296, -0.012882224, 0.052371386, -0.007217819, -0.019757738, 0.004120135, -0.009663006, 0.045035157, -0.038503952, -0.00036036692, 0.03363365, -0.018457208, 0.026151799, -0.027461028, 0.026096718, 0.009853448, 0.055140592, 0.051625237, 0.038312845, 0.04054217, -0.03401431, 0.038290318, 0.010136211, 0.024696728, 0.019367324, 0.038278725, -0.0071217064, -0.014321908, 0.03086935, 0.03762534, 0.043174006, 0.0032940344, 0.0066796658, 0.01282207, -0.025708698, -0.030159319, -0.022200922, -0.05060122, -0.015075646, 0.00020159139, 0.0054577966, 0.012411473, 0.0025109723, -0.01302383, -0.0008914398, 0.03377637, 0.038710006, -0.025839377, -0.046453435, 0.03110573, 0.00326471, 0.016461141, 0.005261, 0.04463554, -0.04093465, 0.0178201, -0.016454896, -0.022008471, -0.0040418627, -0.027282627, -0.026197515, 0.025851864, 0.00045937859, 0.008676458, 0.010324422, 0.08937813, 0.027709896, -0.041691955, -0.03465588, -0.010131305, -0.07079782, -0.025062894, -0.024571627, -0.01989399, 0.008804236, 0.011536089, -0.0018709643, 0.0028964267, -0.039615117, 0.00552715, 0.044607002, -0.045524865, -0.020019205, -0.012824719, 0.0013924078, -0.026565462, -0.036459498, 0.023698585, 0.08162846, -0.056511596, -0.014347331, -0.05112549, -0.07439793, 0.012896162, 0.043928217, -0.027006108, 0.00032702152, -0.00063019607, 0.021907452, -0.045755893, 0.0119532095, 0.05551077, 0.009163516, -0.031435322, -0.018541055, -0.046929706, -0.034502596, -0.03365149, 0.030170023, 0.009027013, 0.021370472, 0.012368434, 0.02019125, 0.003014951, 0.025673913, 0.024083927, 0.04557883, 0.0069901366, -0.008502518, 0.019434836, -0.017789993, -0.0052699232, 0.040917255, 0.024993764, 0.0028677713, 0.071880706, -0.015914124, -0.031895258, 0.021782573, 0.03064189, -0.040839203, -0.01587153, 0.04201307, 0.04760768, -0.061526403, 0.038266685, 0.015062265, -0.05878797, -0.013785707, 0.025757091, -0.037344802, 0.004939407, -0.022481008, -0.034615293, 0.013891074, -0.022265702, 0.04234668, 0.06542532, -0.008211281, -0.009672373, -0.014006476, -0.0222812, -0.026370114, 0.016895989, -0.02596069, 0.022396268, 0.010905559, -0.028788766, 0.03746032, -0.024058059, 0.012946448, -0.026831724, -0.044734556, -0.025035687, -0.043060724, 0.010324868, 0.010609415, -0.0023573257, 0.04177368, 0.028053565, -0.020398194, -0.030934019, -0.019186862, 0.028468428, 0.0057368805, 0.029091598, -0.026550746, -0.021179136, -0.013152277, 0.008375186, -0.010532703, -0.03257931, -0.00854277, -0.01867218, -0.07118495, -0.06324439, 0.060598504, 0.014593968, -0.0059723677, 0.019919442, 0.04196641, -0.0027384316, -0.047306184, 0.03102099, 0.015983142, -0.00040942675, 0.013557913, 0.015180009, -0.014028441, -0.055439416, -0.08178545, 0.015370897, -0.01317597, -0.016598284, -0.06543068, -0.014948982, 0.024614887, -0.023667363, 0.010129522, -0.014866027, -0.005698079, -0.0060620136, -0.0058122543, 0.011891216, -0.022074813, -0.013799142, 0.014585486, 0.05036306, -0.00534797, 0.011263696, 0.0077023967, -0.017367186, 0.027911486, -0.004712087, 0.04234846, 0.030610783, -0.048483618, -0.033459935, -0.012501788, 0.007039197, 0.009772861, -0.04673709, -0.007316273, -0.08467551, 0.0044898684, 0.036271285, 0.01645066, -0.03182111, -0.010224519, 0.030332368, -0.0030751608, 0.009886898, -0.0007243018, 0.019234583, -0.036045942, -0.008808919, -0.009844974, 0.0021140336, -0.057661824, -0.03440255, -0.042237855, -0.020094914, 0.022280086, 0.021990074, 0.010905559, 0.016002432, -0.014028441, -0.007437139, -0.011591504, 0.10598983, 0.040840544, 0.0032412952, 0.027732195, -0.008089948, 0.055171814, 0.00053241086, -0.04798945, 0.097402535, -0.010787816, -0.03088496, -0.04297286, -0.0012126704, 0.027505629, 0.023922864, 0.044598974, 0.018634714, 0.023421172, 0.038598508, -0.006650732, -0.01654655, -0.041972037, -0.0046407273, 0.066150516, 0.005512543, 0.008267477, -0.04492098, 0.019482851, 0.0019169021, 0.013024721, -0.0014557395, -0.00653834, -0.038525607, 0.009594992, -0.07136691, 0.04692976, 0.0168476, 0.044657286, 0.008047153, 0.0274055, -0.008178947, 0.00038266683, -0.034937777, 0.035663836, 0.002976595, 0.016104175, -0.048513502, -0.00011216866, 0.011961683, -0.034456655, -0.01910569, 0.004789356, 0.045812532, -0.006438436, -0.05191357, 0.007733616, -0.014999492, 0.055699434, 0.023343569, 0.01325285, 0.034186687, -0.047964253, -0.045429423, -0.0002361563, 0.042242315, 0.00841421, 0.00060968014, -0.016106125, -0.0012256043, 0.057705086, 0.024859965, 0.04465985, 0.035689257, 0.035475623, 0.054440375, 0.014471764, 0.018352397, 0.0111392625, -0.016346296, 0.0060026953, -0.012831381, -0.052206814, -0.07668679, 0.003079509, 0.03560318, 0.0070713083, 0.045390174, 0.02333264, -0.010856722, -0.0024790836, -0.04827545, 0.004588434, 0.012427306, -0.018517418, 0.011179402, -0.03473571, -0.03248297, 0.048003502, -0.031856343, -0.03255701, -0.065758035, -0.026503678, 0.027162237, -0.027423564, -0.035074223, -0.013285408, 0.02267903, 0.009398083, -0.019236812, -0.034740616, -0.042655755, 0.03820781, 0.00058587495, 0.014377212, -0.056219023, 0.02472661, -0.010689249, 0.010242693, -0.039696556, -0.015697924, -0.016336929, -0.011534863, -0.014619836, -0.02173329, 0.03372664, 0.025148524, -0.029361876, -0.009726338, -0.06503909, 0.034873527, -0.042301632, 0.00196953, -0.009406111, 0.01238371, -0.06894961, -0.01179488, 0.0023084888, -0.024056943, 0.0123340925, -0.006301961, 0.019474976, -0.009966286, -0.009173523, 0.0077764327, -0.014813398, -0.0016053721, -0.028745506, 0.03131981, -0.010113465, -0.07911302, -0.024386315, 0.018253833, -0.03915868, -0.046293765, -0.0003822208, 0.02933333, -0.032089632, -0.032907564, 0.044519585, -0.03298249, -0.0012470122, 0.01045064, -0.07061764, 0.01034806, -0.011587937, -0.04206124, 0.028380008, -0.04395406, 0.04412889, -0.0057529365, 0.060720928, -0.038280956, -0.029517973, -0.0025167703, -0.004501018, 0.017484931, 0.0027268357, -0.004367665, 0.000667214, 0.008552024, 0.017822105, -0.05310595, -0.067300305, -0.012408575, -0.022833792, -0.0013451319, 0.0019276061, 0.0007069078, 0.04439827, 0.0036206169, -0.008559245, -0.009706492, 0.018375589, -0.011644133, 0.00617329, 0.019099222, 0.0059107086, -0.02017497, 0.008275282, 0.004786346, -0.034249127, -0.022755744, 0.010821711, 0.05401579, 0.03631678, 0.010482195, 0.043441717, 0.026966194, -0.025098016, 0.0015409254, -0.016215172, 0.01774361, -0.072522946, -0.0049571632, 0.05807148, 0.025045944, 0.009106846, -0.007138654, -0.036366727, 0.004237433, -0.048757464, -0.010959789, -0.036611136, -0.01959495, -0.014433853, 0.012976331, -0.003179524, 0.034851447, -0.008285763, -0.017484708, 0.046892297, 0.033171594, 0.0258425, 0.04274986, -0.014982877, 0.057392444, -0.024197657, -0.021383626, 0.027172022, -0.0044002226, -0.013683239, 0.0030997184, -0.041545276, 0.0021517205, 0.0111392625, -0.033360474, 0.015786123, 0.018368455, -0.06387414, 0.009446251, -0.048135743, 0.0036069024, 0.0017608027, -0.007647985, 0.0321458, 0.03228896, 0.00079182873, -0.043502707, -0.023134843, -0.022970716, -0.016108898, 0.037855472, 0.009718199, -0.006853494, -0.0045215343, -0.018714102, -0.003977416, -0.022002896, -0.041797653, 0.031096809, -0.039104044, 0.065170884, 0.02120991, -0.054622345, 0.06165842, 0.020670252, -0.027581895, -0.036337294, -0.024000078, -0.030600635, -0.03483695, 0.015385169, -0.015766053, 0.06173803, 0.039747845, 0.0057025384, 0.02152211, -0.07016986, 0.0010496578, -0.041744582, -0.019925436, -0.04731867, -0.05100976, -0.004196067, -0.002573858, -0.003646039, 0.0047349446, -0.020292938, 0.041913614, -0.015142546, 0.037989274, -0.022182189, -0.01934586, -0.01575624, 0.011461106, -0.014193573, 0.051584203, 0.03674672, 0.036243632, -0.023064373, 0.0020067708, -0.042747185, 0.010637291, 0.002682236, 0.029584873, -0.013912927, 0.016575092, -0.020793853, -0.0022823424, 0.010871217, 0.054784246, -0.041107696, 0.03467015, -0.0037392525, -0.041359685, -0.025931532, 0.048775133, -0.026883908, 0.038182165, 0.008908489, -0.010747675, 0.014665328, -0.031705823, 0.07192887, 0.004244123, 0.011144523, 0.036440097, -0.008839693, 0.009558643, 0.011304282, -0.016557254, -0.011422917, 0.017292704, 0.016768435, 0.02080004, 0.019891651, -0.023682972, 0.03294012, 0.010520215, 0.06256603, -0.0019240382, -0.045562997, -0.04670676, 0.06262713, -0.009250904, -0.025645368, -0.032244306, 0.02009313, -0.021608634, -0.028369972, 0.008403506, -0.020583728, -0.016542088, -0.07902382, -0.0027205916, 0.008552024, 0.062204324, 0.026324399, 0.04270415, 0.0048109875, -0.037634704, -0.003566205, 0.018987723, 0.02374586, 0.057997663, 0.017092897, 0.01786269, 0.016852504, 0.029130848, -0.007304343, -0.004309232, -0.039888445, 0.04461146, 0.033635434, 0.009995721, -0.01976889, -0.008426475, 0.022446219, -0.005088454, -0.0051530683, -0.015414605, -0.0027021386, 0.044527613, 0.02350502, -0.044326913, 0.006268873, 0.035789605], [-0.014524969, -0.07988843, -0.03293501, -0.038068853, -0.03617257, 0.011759829, 0.008366173, 0.0076203784, 0.020914193, 0.03208928, -0.010177459, 0.039489966, -0.087682255, 0.009283206, 0.009156843, 0.046452373, -0.015438906, -0.0027977633, 0.039861627, 0.043640982, -0.027979838, -0.016483542, -0.029950729, 0.010111867, -0.02890045, 0.038241744, 0.01834617, 0.0017663421, -0.0069162915, -0.0057015186, -0.019466378, -0.027336454, -0.0039654598, 0.028573666, 0.028788717, 0.06092448, 0.07073517, -0.0015835409, -0.08516323, -0.07814411, -0.062130306, -0.012439276, -0.022453688, -0.009337717, -0.011385969, 0.031595662, 0.010417453, 0.040153995, 0.0065511027, -0.06575109, 0.03198136, 0.0143548325, -0.028221829, 0.011268483, -0.016595246, 0.011868071, 0.025654906, 0.021772863, 0.0025834402, -0.016649205, -0.005347204, -0.026881654, -0.04024939, -0.01155115, 0.012201414, 0.04545137, 0.011618048, 0.0067790532, 0.0043371185, -0.024559202, -0.04201229, 0.026340686, 0.0033520854, -0.036880646, -0.018915772, 0.01730883, -0.055682722, 0.04474439, -0.021252954, -0.031688437, -0.0034941414, 0.0046773925, 0.0121045085, -0.045951318, -0.034225628, 0.0038553388, -0.0048183473, -0.00441145, 0.044797253, 0.007193108, -0.050121054, -0.008325359, 0.04359143, -0.021469204, -0.006942583, 0.036050335, -0.008179517, 0.020680739, 0.028609455, 0.038769227, 0.0076640137, -0.075447254, -0.013966655, -0.009120227, 0.010617323, -0.013995563, 0.040242642, -0.021022113, -0.018978266, -0.028382605, -0.005195512, -0.0108390795, 0.015438423, -0.047539264, -0.006170634, -0.023242153, 0.058212202, -0.018428762, -0.07230109, 0.0026159603, -0.023374712, 0.047321226, -0.0028312127, 0.017156312, 0.0012193156, -0.020913092, 0.021368993, 0.014366945, -0.056417227, 0.005503851, 0.055831384, 0.019451786, 0.019768659, -0.01656799, -0.03135147, -0.012248767, -0.028235592, 0.05443945, -0.08170543, 0.05560233, -0.05549259, -0.007448589, 0.027333152, 0.0204649, 0.009393327, -0.025947278, 0.0010703768, -0.051492613, -0.02665811, -0.030587228, -0.0076660784, 0.024320582, 0.016000591, -0.010307401, 0.00774922, -0.032259144, -0.0011385831, 0.039942015, -0.039291196, 0.038732883, -0.04087694, -0.0008770455, 0.027357377, -0.003178094, -0.032859024, -0.012318144, 0.035212316, -0.01443467, 0.0378365, 0.021279795, 0.019737, -0.0082287965, 0.00035183682, 0.070904754, -0.039404623, 0.010342021, -0.009830508, -0.050065447, 0.04125466, 0.019718278, 0.0089569725, -0.00067394093, -0.0044878465, 0.018153459, -0.01967423, 0.01488534, -0.050910626, -0.021959517, -0.014890571, 0.033221323, 0.045107793, 0.022476813, 0.009267789, -0.0015973062, -0.046494216, 0.009143903, -0.03562086, -0.010463979, 0.013053752, 0.07135846, 0.0057615344, -0.007290015, 0.02764149, -0.027225232, -0.031003486, -0.054637667, 0.020567311, -0.0068247532, 0.035485413, -0.073345035, 0.02112893, 0.05289115, 0.024788804, 0.018964501, 0.018449133, 0.076503314, 0.009663882, -0.04218463, 0.049639277, 0.04703051, -0.0011606761, 0.018678736, 0.05926716, 0.00091194006, -0.022908485, 0.017912844, -0.0197253, 0.025587732, 0.024517355, 0.0045579113, 0.013641799, 7.928717e-05, -0.04337559, -0.024249762, 0.046766214, -0.027730688, -0.044125512, 0.009082786, -0.030229336, 0.05091558, 0.0016094195, 0.023717877, 0.017751517, -0.026847517, -0.04240542, -0.060467653, -0.07195751, -0.029463993, -0.022422027, 0.022789555, 0.057196885, -0.033680256, -0.029579623, 0.024468902, -0.025980864, -0.02145599, -0.015910292, -0.017704716, -0.008853734, 0.037240192, 0.019945128, -0.03133633, -0.0009778751, -0.008017915, 0.028009294, 0.01566307, 0.020599246, -0.051549878, 0.0052015684, -0.02740418, -0.021130031, -0.1125085, 0.057033904, 0.008247173, 0.013469184, 0.04190712, 0.02622203, 0.026695551, 0.080251835, 0.007010307, -0.05370054, -0.029284498, -0.0028692046, 0.0067471177, 0.010880582, 0.010191155, 0.000371108, -0.047907073, -0.022234544, -0.05706694, -0.02642245, -0.011390924, 0.020401029, 0.029818585, 0.029992025, -0.0009839318, 0.027742181, 0.0055099768, -0.028850619, -0.036800258, 0.0032628875, -0.01674391, -8.148959e-05, 0.0008550901, 0.0023670525, 0.0017112815, -0.055461377, 0.03163868, 0.03354288, -3.3036322e-05, -0.042077262, -0.013739807, -0.057582308, -0.0026674075, 0.02977894, -0.0066733365, 0.071036905, 0.061099574, -0.02668144, -0.05051942, -0.023679232, -0.030941818, 0.018575221, -0.074873514, 0.030494727, 0.06743615, 0.030825641, 0.004370843, -0.035058144, -0.012462402, 0.026681233, 0.02874931, 0.019754482, -0.0005484029, 0.025194876, 0.03353627, -0.019513454, -0.0044466886, 0.019411592, 0.050317623, 0.0156438, -0.054395404, -0.0422028, -0.016841916, 0.029745903, -0.042250153, -0.021876652, -0.07658701, 0.017607259, 0.0015785855, 0.03000166, -0.026682474, 0.0025308575, 0.013450188, -0.021687243, -0.01563444, 0.01431395, 0.0008523371, -0.03316296, -0.0089770695, 0.009773933, -0.027835786, -0.010347252, 0.058001872, 0.023077799, 0.0046900567, 0.062266856, -0.01578723, 0.030164365, -0.0055699237, 0.047100984, 0.010318344, -0.016351465, -0.027095566, -0.008394805, 0.021316137, -0.032230236, 0.008990698, 0.054725766, -0.018101702, 0.009046446, -0.023753116, 0.019047642, 0.040595032, 0.03193291, 0.031555813, 0.02523242, 0.0058187973, 0.004549652, 0.033430554, -0.009450453, -0.023997841, 0.023155708, 0.01397161, 0.020619068, -0.004170285, 0.04844446, 0.013596373, 0.0010257778, 0.032589506, -0.024914341, 0.030700654, -0.004326106, -0.036548633, -0.02922283, -0.055366673, -0.03905884, 0.012189852, -0.008855936, 0.026336554, -0.019711671, -0.023247384, 0.0137161305, 0.04214994, 0.027816582, -0.018881358, -0.027798964, -0.0050121606, 0.011120026, 0.035929203, 0.013439176, 0.026800165, -0.04366961, 0.027564405, -0.009751083, -0.03452516, -0.01763589, -0.004757919, -0.024429807, 0.009454995, 0.0063297595, 0.03185582, 0.008700666, 0.0830401, 0.03981758, -0.009812613, -0.012288685, 0.007063166, -0.055058334, -0.0036824485, -0.025210017, -0.021361284, -0.02427454, -0.002311166, -0.013935821, 0.011656315, -0.037143838, 0.0154411765, 0.01688309, -0.06281306, 0.009028001, -0.009973665, -0.018498138, -0.03170936, -0.015531476, 0.025843214, 0.06808455, -0.03148141, -0.017796803, -0.05839225, -0.03626287, 0.008953945, 0.043658603, 0.0030756816, -0.0007072526, -0.007824928, 0.0025300316, -0.061244935, 0.00038432254, 0.043193478, -0.0028559898, -0.024989225, 0.012417803, -0.02942325, -0.04521571, -0.0142689375, 0.03301843, 0.012835712, 0.0089460295, 0.016966354, 0.022589687, -0.0062372573, 0.037049685, 0.02750604, 0.0034710162, 0.02542145, -0.045563698, 0.0072459662, -0.009811788, -0.030153902, 0.03915465, 0.012800473, 0.0015783103, 0.038236238, -0.012129295, 0.004440082, 0.021288605, 0.043389905, -0.00084352744, -0.030368088, 0.036367483, -0.0029060952, -0.060095824, 0.05879584, -0.0045287292, -0.07088273, 0.017434368, 0.010466183, -0.024307575, -0.022421202, 0.00086555164, -0.023526886, -0.036239296, -0.01974691, 0.01574291, 0.060718555, -0.012122678, -0.009459401, -0.033915088, -0.021340638, -0.050448664, -0.0018547141, -0.02554809, 0.040253658, 0.009004049, -0.03657121, 0.029111605, -0.038879346, -0.0067179357, -0.026632851, 0.0029584025, -0.023546088, -0.048215408, -0.004432373, -0.01751861, -0.019382548, 0.025375197, -0.007911098, 0.0014300598, -0.019948984, -0.027838606, 0.02144718, 0.02010477, 0.030241448, -0.023852775, -0.012480847, 0.011056017, 0.025978113, -0.008179793, -0.0109350225, 0.01704509, 0.00747667, -0.038643684, -0.060923383, 0.03047931, 0.022090288, 0.023283998, 0.024309227, 0.07742392, -0.023317037, -0.03219875, 0.0073381932, 0.022591889, -0.007847915, 0.014582233, 0.03703826, -0.03822082, -0.03579348, -0.029694147, 0.032496866, -0.015020514, -0.04081968, -0.03780897, -0.037024908, 0.018220702, -0.010997791, 0.0064299693, -0.027116213, 0.013428164, -0.0061254846, 0.0020443287, -1.6518161e-05, 0.008104911, 0.0040816376, 0.02882529, 0.023099821, -0.016747763, -0.025827795, 0.027576517, -0.005851834, 0.048184577, 0.02087331, 0.06163697, 0.046079062, -0.041253556, 0.0050052777, -0.010526473, -0.03027228, -0.0010769841, -0.041995775, -0.04203982, -0.083654575, 0.0076790173, 0.017467404, -0.006841822, -0.04687854, -0.006192211, 0.01851796, -0.0025383595, -0.0044709155, -0.0225093, 0.04057576, -0.063864574, -0.013273994, -0.0056514135, 0.008266789, -0.021263829, -0.0021451584, -0.028366087, 0.022074869, 0.0019986287, 0.043592528, -0.046151705, -0.01638106, -0.014348225, 0.0016658565, -0.013454593, 0.05832012, 0.031738546, 0.028519155, 0.022587484, 0.020104254, 0.009764986, -0.014070169, -0.047021694, 0.09488913, 0.035151746, -0.0011474616, -0.019852627, 0.028230637, 0.02038341, -0.0049565495, 0.01906581, -0.0011452591, -0.01061457, 0.018889068, 0.008912099, 0.0011496639, -0.09982255, 0.017989654, 0.06484369, -0.020797465, 0.008295971, -0.06638539, 0.012463503, 0.010126596, -0.009944552, 0.048893757, -0.042434055, -0.0170996, 0.030362584, -0.03293969, 0.05438632, 0.041440763, 0.032955106, -0.008406643, 0.003690355, -0.056152936, 0.0031676327, -0.037014306, 0.03522663, 0.0040667714, 0.04380176, -0.013499329, -0.008144829, 0.009393877, -0.020240253, -0.04006067, 0.022046238, 0.058440153, -0.01446165, -0.00591653, 0.013114318, -0.03403622, 0.056699134, 0.041154444, -0.012431018, 0.023657309, -0.034049436, -0.06377772, -0.03137394, 0.03309799, 0.019445179, -0.028629001, -0.019017909, -0.016205417, 0.04996771, -5.946538e-05, 0.029406387, 0.011928245, 0.009208323, 0.030085078, 0.0053023295, 0.01980197, 0.0108171925, -0.005825955, 0.02836834, 0.015785856, 0.007762985, -0.080465466, -0.013386317, 0.01015977, 0.036643885, 0.039760314, 0.028154654, -0.011095799, -0.02231934, -0.024968302, -0.0067162844, 0.007790515, -0.016051248, -0.033901047, -0.06799756, -0.000498229, 0.025345465, -0.059470333, -0.0135608595, -0.026234142, 0.0013199387, 0.00046966638, -0.011091394, -0.06744916, -0.0067504216, 0.015659492, -0.0053744586, -0.02882529, -0.025356477, -0.042709358, 0.056459073, -0.02332612, 0.012126532, -0.019442977, 0.003834691, 0.00281965, 0.027543481, -0.03110755, -0.024643306, -0.033802766, -0.0049086465, 0.026366288, 0.010132791, 0.039951924, 0.04306174, -0.020266682, -0.019274078, -0.050514735, 0.038067754, -0.010294393, 0.009870014, 0.012760829, 0.01880868, -0.052924186, -0.034972113, 0.012052063, -0.028954132, 0.016086485, 0.020038594, 0.01192446, -0.031452782, -0.0172707, 0.012281751, -0.020828301, -0.014274444, -0.039335247, 0.019129114, 0.018713973, -0.07536686, -0.026406068, -0.030580895, -0.03973822, -0.049634323, -0.026394093, 0.06272496, -0.03130026, -0.022992179, 0.03558783, -0.022615565, 0.016071895, 0.050254956, -0.064067885, 0.041733682, -0.012363706, -0.05088034, 0.032196924, -0.080485284, 0.030169321, -0.00531169, 0.053171407, -0.014203966, -0.010322887, -0.015381712, -0.009466868, 0.02862597, 0.009316173, 0.013873603, -0.004970865, 0.0069966284, 0.03230071, -0.02180948, -0.062152334, 0.013505247, 0.019026719, -0.032220323, -0.0033102394, 0.04207038, 0.045951318, 0.002342275, 0.031146368, 0.024701808, 0.0042470256, -0.006692608, -0.0057418505, -0.008908795, -0.008314141, 0.0075382004, 0.011308333, 0.021528393, -0.025061628, -0.019233746, 0.022368893, 0.020894371, 0.019748012, 0.0021132233, 0.055275273, 0.0337444, -0.026245706, -0.0013390722, -0.036194593, 0.039031312, -0.06400677, -0.009821698, 0.07874097, 0.012703429, -0.008635694, 0.0039269174, -0.030016802, 0.05514863, -0.03217077, 0.00010681744, -0.05917686, -0.01859119, -0.007673236, 0.009909796, 0.017255971, 0.022009347, 0.03930221, -0.037858523, 0.017704165, 0.029168181, 0.034932606, 0.0515697, -0.027889814, 0.061072048, 0.010276498, -0.028206412, 0.044136528, -0.027533023, 0.020889968, 0.023682762, -0.0051863925, -0.0054542962, 0.059524845, -0.037187956, 0.016356833, -0.005286913, -0.04559453, 0.0036295906, -0.007193108, 0.003244167, 0.029527863, -0.03271303, 0.019812983, 0.018813359, -0.014777146, -0.038661856, -0.05480533, -0.018968286, -0.020543087, 0.0076379976, -0.007024623, -0.01667639, -0.051405616, -0.0007323051, 0.0035701252, -0.0071262787, -0.044416234, 0.036233135, 0.015753921, 0.059976343, 0.013366495, -0.031475905, 0.027613958, 0.02302246, -0.00025493026, -0.031266674, 0.01095925, -0.022241566, -0.028810976, 0.017120523, -0.015374554, 0.039890256, 0.09384077, -0.0010946034, 0.045995366, -0.06020759, -0.0037110802, -0.012503146, -0.026598092, -0.03979555, -0.004126237, -0.014023368, 0.01052317, -0.012112492, 0.015608285, -0.04201449, 0.069023885, 0.017237114, -0.010895379, -0.0215551, -0.043556187, -0.0039126016, -0.009162073, -0.010036435, 0.06980134, 0.031976957, 0.027322415, -0.041581716, -0.007289189, -0.03072598, -0.025379052, -0.0017960748, -0.0058124657, -0.017076474, 0.0053262813, -0.0003449543, -0.0090976525, 0.0066829724, 0.07315343, -0.0382913, 0.045632657, 0.005199091, -0.05023393, -0.004439531, 0.012901785, -0.022459192, 0.02049766, 0.0032078268, -0.017840026, 0.023282897, -0.033676125, 0.05077903, 0.013931416, -0.026925704, 0.024298765, -0.020462837, -0.0018114228, 0.025791455, -0.014921405, -0.0051411395, 0.0042099287, -0.011707522, 0.01574401, -0.00090960006, -0.021607613, 0.024678132, 0.035505787, 0.05224584, -0.012869299, -0.030165466, -0.041861426, 0.047131818, -0.025199555, -0.023988772, -0.010236855, 0.001259785, -0.0029864835, -0.022152506, 0.028305244, -0.031038726, -0.011361191, -0.067944705, -0.016778046, 0.021514354, 0.04482368, -0.007237157, 0.060236778, -0.0034622066, -0.030818485, 0.016006097, 0.02257045, 0.024778618, 0.048029307, 0.029831246, 0.008568486, 0.023798265, 0.024544196, -0.008614221, 0.010080483, -0.0363818, 0.020920802, 0.045519643, 0.023056047, -0.018575221, -0.0051184273, 0.026406482, 0.021370094, -0.032447174, 0.01925577, -0.04164589, 0.04554277, 0.024941323, -0.03357206, -0.013882964, 0.0069838786], [-0.021153752, -0.08818263, -0.029220868, -0.013104866, -0.0146482615, 0.03147567, 0.00616786, 0.004121115, 0.036406375, 0.049205497, 0.012244632, 0.021129455, -0.07580522, -0.009915414, 0.0012438131, 0.05757565, 0.03531332, -0.034687147, 0.0146079445, 0.043373868, -0.032761358, 0.001956901, -0.025392678, -0.012294406, -0.022586863, 0.022143867, 0.0036773714, 0.0010850934, 0.033372097, -0.031340282, -0.0032776787, -0.035110235, -0.008272592, 0.0031303451, 0.021129953, 0.024019388, 0.005636691, -0.014075353, -0.067256875, -0.04832548, -0.09059435, -0.014143731, -0.027453858, 0.015143522, -0.034954503, 0.04538677, 0.005065594, 0.03663758, -0.02119715, -0.031485625, 0.022808861, 0.0062338114, -0.04735636, 0.021593606, -0.007205667, 0.016465545, 0.03504055, 0.008710114, -0.014467331, -0.00745479, -0.016428713, -0.05320367, -0.061748777, 0.0016458079, 0.023341702, 0.035989262, 0.013352497, -0.010497345, -0.029382637, -0.027290594, -0.010883786, 0.014097004, 0.021940786, -0.031921905, 0.04627077, -0.004196275, -0.07690425, 0.015682522, 0.0016644734, -0.020921398, 0.008795229, 0.016340112, 0.013898154, -0.050601188, -0.044148363, 0.013573621, -0.04109716, 0.014221691, 0.04972515, -0.0024688363, -0.025046742, 0.0052241273, 0.01303207, 0.0074567813, 0.006381643, 0.01626545, -0.0044399234, 0.035095304, 0.015624598, 0.026998665, -0.006101908, -0.05527207, -0.033427842, 0.003527051, 0.011412395, -0.012297393, 0.0045524146, 0.0016933429, 0.0006567801, 0.009818601, -0.0012463641, -0.0019254807, -0.0055745426, -0.04061236, 0.0023264799, -0.012867067, 0.029640967, -0.028013328, -0.04755845, 0.011050033, 0.0018615822, 0.029598348, -0.011797653, 0.01979051, -0.010170012, -0.013282439, 0.030543884, 0.013343662, -0.060825955, 0.016714295, 0.033167522, 0.036631357, 0.02919797, -0.0033448748, -0.009962949, 0.013674043, 0.00376174, 0.05439802, -0.04231665, 0.040044922, -0.035015166, -0.02734037, 0.018130017, 0.014410338, 0.009524929, -0.036315784, 0.016893608, -0.028246272, -0.01901601, -0.027921742, -0.0039396854, -0.005158424, 0.006460536, 0.0136448005, -0.025383221, -0.051474243, 0.010516696, 0.026344376, -0.009363659, 0.006648188, -0.02112149, -0.017404549, 0.033158563, 0.0155167105, -0.026793344, -0.029438633, 0.02574359, -0.008815388, -0.01801031, 0.033838984, 0.045798402, 0.01459799, -0.01313162, 0.035524365, -0.0468616, -0.0570341, -0.011085871, -0.0058162, 0.043709353, 0.039349567, 0.0035678665, -0.012544401, -0.017302759, -0.022451477, -0.025899883, 0.020262998, -0.010094479, -0.016507605, -0.009162817, 0.008340037, 0.031234762, -0.004910545, 0.02178997, -0.0041522244, -0.041952297, 0.02304579, 0.010067476, -0.011221384, 0.025184868, 0.020200033, 0.016106667, -0.004955591, 0.01423961, -0.019588424, -0.025349373, -0.05468074, 0.019688595, 0.012395946, 0.04824733, -0.024302108, -0.016232224, 0.05739049, 0.026730131, 0.057970863, 0.035403907, 0.05671554, 0.03866118, -0.027478745, 0.032894008, 0.05396896, -0.0015071846, 0.021902708, 0.039346643, -0.037852835, -0.012038687, -0.0013628374, -0.004684816, 0.027891379, 0.03362495, 0.010147302, 0.025465848, -0.005749999, -0.05021792, -0.063399315, -0.030609587, -0.030844774, -0.06027544, 0.033997767, -0.07678877, 0.056531373, 0.010170012, 0.046156287, 0.046806347, -0.0379922, -0.013123657, -0.021498537, -0.049090024, -0.010680128, 0.001943213, -0.013641316, 0.07991464, -0.030611826, -0.0037662198, -0.00034643346, -0.009335038, -0.01061052, -0.0030138716, -0.015027921, 0.002360327, 0.04413642, 0.013045012, -0.022901442, -0.017454572, -0.055040363, 0.041395314, 0.017880147, 0.042969696, -0.03344576, 0.028234327, -0.049473815, -0.026164686, -0.094763495, 0.006863962, 0.011148588, -0.0208099, 0.040440135, -0.0036475065, 0.040646702, 0.02960264, 0.0058478694, -0.05029283, -0.029133761, 0.008418931, 0.010018199, 0.022202104, -0.013629369, 0.00033697623, -0.04309115, -0.036054965, -0.043949265, -0.010751882, 0.022496773, -0.0009009261, 0.011659278, 0.060398884, -0.026167799, 0.03397437, 0.021054545, -0.051853523, -0.027864002, 0.026941674, -0.011369588, 0.00041313187, -0.023408648, -0.010142885, -0.025550464, -0.045276266, 0.021974385, 0.018645408, 0.0026171654, -0.016377179, -0.0045889993, -0.05143716, -0.007801722, 0.004244308, -0.0030861385, 0.038012113, 0.059827216, -0.0071608694, -0.02332061, -0.023996491, -0.016205471, 0.03061357, -0.06889646, 0.032458726, 0.07340308, 0.004129701, 0.009786994, -0.039546177, -0.0071382215, 0.039653692, 0.031541374, -0.016268436, 0.020801937, 0.021523673, 0.04154489, 0.002270732, -0.0024962125, 0.025738614, 0.057120707, 0.024680462, -0.0635128, -0.00073169137, -0.026744066, 0.027337385, -0.037848853, 0.006228834, -0.07862845, 0.039327417, -0.014097004, -0.0023277244, -0.014801072, 0.016771972, 0.0016210448, -0.01988807, -0.012266035, -0.014559538, -0.0046048025, -0.01475926, -0.025697798, -0.0050312495, -0.029439878, -0.022317333, 0.06293342, 0.026370754, -0.014120648, 0.041882616, 0.011454205, 0.02579934, -0.031842016, 0.06989195, 0.0024267763, -0.015383562, -0.0033229738, -0.02977337, 0.043549076, -0.04537084, 0.022459442, 0.03021736, 0.008561287, 0.031411957, -0.026987964, 0.04144061, 0.038797066, 0.030614566, 0.05348813, 0.060924508, 0.018399782, -0.01340613, 0.04269668, 0.0062705204, -0.0024190613, 0.010481137, 0.01787318, -0.0082347635, -0.021341434, 0.044036873, 0.03175839, 0.038921002, 0.026891401, 0.0024347403, 0.030979913, 0.0052023507, -0.017460546, -0.021268576, -0.040269904, -0.022101374, 0.009866261, -0.0047089565, 0.0029781582, 0.009306915, -0.012921072, -0.016125333, 0.03675878, 0.0151544735, -0.02720797, -0.012307845, 0.016257985, 0.027269939, -0.0032308903, 0.036137592, 0.06373978, -0.062338114, 0.035636853, 0.02102642, -0.03045429, 0.02185816, 0.001615694, -0.0015094245, 0.0061203246, -0.018165857, -0.003890408, -0.00019063796, 0.08914888, 0.028333878, -0.015168659, -0.00904261, -0.022827776, -0.07097705, -0.0070384233, -0.018044157, -0.052651916, 0.019503806, 0.0049506137, -0.03482154, 0.0034314834, -0.03916092, -0.011776623, 0.035953425, -0.00988306, 0.013021618, -0.009882065, -0.04565611, -0.017740779, -0.028058125, 0.034220137, 0.04954198, -0.069135375, -0.021492423, -0.04422701, -0.041390337, -0.023746124, 0.027410055, -0.013747834, 0.0317564, 0.020037394, 0.015340632, -0.06687759, 0.010807909, 0.04604479, 0.0066071237, -0.04715079, -0.0117130345, -0.06476265, -0.03729585, -0.014084313, 0.014224678, 0.0007774843, 0.02222799, 0.023414124, 0.039871704, 0.012897367, 0.06179532, 0.007370484, 0.020786008, 0.048461862, -0.028183559, 0.014644529, -0.02666343, 0.0039859135, 0.024616687, -0.020119024, 0.0058221724, 0.06411085, -0.03506743, -0.015242077, 0.02559327, 0.06528479, -0.04035353, -0.018213144, 0.045999993, 0.029381141, -0.065602355, 0.042475928, 0.0077091404, -0.024067173, 0.018031465, 0.03973632, -0.009606561, -0.0013558689, -0.024133619, -0.039310742, -0.03222105, -0.04720803, 0.040287822, 0.037112184, 0.013765255, -0.03592356, 0.0017401314, -0.02083628, -0.032192927, -0.03032363, -0.016025536, 0.035618935, 0.009396012, -0.036238134, 0.044602312, -0.032041114, 0.023079202, -0.04363469, -0.042456016, -0.04643403, -0.0486082, -0.0015696522, 0.009552306, -0.038787857, 0.03413863, 0.014577458, -0.018411247, -0.028954074, -0.028811717, 0.026755018, 0.012679963, 0.005683799, -0.03182011, -0.022625191, 0.019038908, 0.0153728295, 0.020393783, -0.03172156, -0.01716737, -0.0016057391, -0.06703289, -0.06631015, 0.021984588, -0.0013777699, -0.011184176, 0.013583576, 0.04959967, -0.0137239415, -0.06402847, -0.006782829, 0.0365268, -0.007207409, 0.016801525, 0.023617204, 0.005034236, -0.051185917, -0.06847039, 0.027198015, -0.016266445, -0.006208302, -0.044785485, -0.045187168, 0.023840198, -0.0086379405, 0.0259407, 0.010178475, 0.025487749, 0.0036687853, 0.009960958, -0.016690528, 0.020628221, 0.010773284, 0.021685753, 0.0648398, -0.023084613, -0.012773241, 0.01957623, -0.029270642, 0.047024366, 0.0018347037, 0.043476403, 0.007924167, -0.039067343, -0.04731007, -0.006155696, 0.001810314, -0.0033294447, -0.037556175, -0.05749203, -0.056637395, 0.008258655, 0.028287088, 0.016983204, -0.051357765, -0.017277125, 0.037050463, -0.00369977, -0.018798994, -0.016503375, 0.031039642, -0.057676196, -0.027970416, -0.010098088, -0.004293336, -0.04040131, -0.011125194, -0.03602709, 0.010438797, -0.00131804, 0.028824285, -0.011947475, 0.017912004, -0.0141574815, -0.009570971, 0.016970262, 0.0922628, 0.033701606, 0.022237446, 0.019358339, 0.012769259, 0.052018777, -0.019939251, -0.074323915, 0.06582833, 0.004274546, -0.03281001, -0.02920245, 0.00096563355, 0.02530159, 0.030250212, 0.019805443, -0.011012702, 0.01581228, 0.008909213, -0.02024396, 0.004068478, -0.037269473, 0.023917848, 0.046424076, 0.0005166637, -0.003219442, -0.039071325, 0.04927419, -0.011889736, -3.0487141e-05, -0.024285186, -0.014106152, -0.037671905, 0.021292903, -0.052115344, 0.037591513, 0.034185417, 0.034197364, -0.005357773, 0.011930054, -0.02254804, -0.027286613, -0.034614477, 0.066365905, -0.010382053, 0.045263324, -0.053496595, -0.0032147134, 0.0016440657, -0.016472513, -0.050575975, 0.01578761, 0.04659331, -0.02254406, -0.01801591, -0.012470609, 0.01840953, 0.04106929, 0.047630623, -0.015152482, 0.025175037, -0.03446423, -0.05967018, 0.012273501, 0.042766616, -0.015431222, -0.00896633, -0.011885754, -0.018167349, 0.052174076, 0.0050939657, 0.050001897, 0.0332298, 0.054314397, 0.03862534, 0.0034070935, 0.019182261, 0.0039113136, -4.9774924e-05, 0.05138763, 0.009315874, -0.023828253, -0.09086511, -0.018876642, 0.010652332, 0.02035197, 0.0530083, 0.02715919, -0.024365323, 0.016953899, -0.025392678, 0.014990217, -0.014934966, -0.007936114, -0.008717581, -0.062365986, -0.00020768587, 0.052612096, -0.054851968, -0.015688062, -0.031238742, 0.007882357, -0.004952605, 0.006986408, -0.030404016, 0.0045677205, 0.019720824, 0.03269018, -0.019455027, -0.017082755, -0.04335296, 0.042740732, -0.01641328, -0.0043841754, -0.01967105, 0.009181483, -0.026196232, 0.04572474, -0.042719327, -0.019535663, -0.032947764, 0.010511469, 0.0062628053, -0.015321033, 0.05091975, 0.048134346, -0.008431872, -0.008051094, -0.031505536, 0.08168762, -0.048234887, 0.008235261, 0.009414429, 0.03557065, -0.081345044, -0.0134641165, 0.027754622, 0.0011624934, -0.0013877248, 0.006365715, 0.029068556, -0.0012199834, -0.0090976115, -0.006470717, 0.002022853, 0.011656789, -0.02280687, 0.009361668, -0.004462913, -0.057322796, -0.028916243, 0.0010930214, -0.019150902, -0.06522307, -0.037151005, 0.020262375, -0.021355433, -0.03814999, 0.064647675, -0.014341524, 0.0013715479, 0.041412488, -0.04714681, 0.014643037, -0.037633825, -0.011600046, 0.034021877, -0.042096395, 0.023186157, -0.0076414463, 0.030392569, -0.017681547, 0.0067721275, -0.019917997, -0.017641477, 0.0002384219, 0.0037607444, 0.014705006, 0.010654821, -0.003269217, 0.021685937, -0.04953003, -0.06693732, -0.014871752, 0.008165327, -0.0065175286, -0.0038844352, 0.031114304, 0.009877025, 0.019055832, 0.0199916, 0.014994945, -0.0069022574, -0.027417397, 0.015072096, -0.0036853354, -0.017263187, -0.025216972, 0.02212595, -0.0052900794, -0.03967895, -0.047890943, 0.006632073, 0.04770727, 0.0074751982, 0.035422076, 0.009174016, 0.01312266, -0.033217795, -0.024314927, 0.0017530728, 0.0038744803, -0.10258412, 0.01505567, 0.06437889, 0.023353897, 0.007193845, 0.013694077, -0.02382626, 0.037217706, -0.04683845, 0.0010592104, -0.041544143, -0.042169314, -0.02858574, 0.019472448, 0.013231917, 0.030212134, 0.02094007, -0.034129668, 0.034488298, 0.027097158, 0.0043712338, 0.022334008, -0.014466584, 0.05116862, -0.008845999, -0.0051178574, 0.054135207, -0.021275545, -0.005172361, 0.027316043, -0.013560182, 0.0185322, 0.04335993, -0.051891353, 0.011251994, 0.02798645, -0.040899057, -0.007223337, -0.023981558, -0.006319424, 0.008222817, -0.029155163, 0.04785162, 0.023003979, -0.011412892, -0.029208796, -0.032459226, -0.01142235, 0.006874477, -0.005220394, 0.0033461193, -0.0014255538, -0.010145623, -0.024977056, -0.008083448, -0.019815054, -0.063990645, 0.0703469, -0.011563214, 0.07514022, 0.030269127, -0.026476279, 0.031158604, 0.04042819, -0.033542324, -0.013343662, 0.0023389237, -0.033497527, -0.039334137, 0.043701388, -0.018153537, 0.060126115, 0.064866684, 0.05074367, 0.0039272415, -0.06164674, 0.010013221, -0.015038498, -0.007235905, -0.034249127, -0.005916745, -0.009616017, -0.0003862534, -0.020596864, -0.004184018, -0.04956114, 0.06575068, -0.011988352, 0.012865823, 0.015297327, -0.016753243, -0.0046416363, 0.0012899172, -0.0008561287, 0.05564737, 0.03183405, 0.037193812, -0.03936002, -0.011889239, -0.04880332, 0.00041313187, -0.0025258285, 0.011657786, -0.016772158, 0.022996513, -0.024256812, -0.015696522, 0.034152567, 0.050581276, -0.047335707, 0.017633265, -0.00089495315, -0.023013188, -0.018974202, 0.026223421, -0.044800416, 0.018321155, 0.007351756, -0.0046096556, 0.01726493, -0.033146117, 0.0676272, 0.024365822, -0.011058744, 0.052699696, -0.010466422, -0.014346439, 0.02326679, -0.035083357, -0.013186871, 0.01125411, -0.054931607, 0.005380669, -0.022676459, -0.040666115, -0.000103531835, 0.006436893, 0.05797385, -0.020316133, -0.019283801, -0.019746708, 0.06599377, -0.0075916713, 0.006960028, -0.026671395, 0.012882496, -0.037532285, -0.0042607337, -0.007402278, -0.026529038, -0.008589161, -0.06853808, -0.022923095, 0.037176143, 0.021857165, 0.011000258, 0.05842257, 0.017570548, -0.030742984, -0.0027376208, 0.008322367, 0.0060328455, 0.06280003, 0.03753328, 0.02366972, 0.021706844, 0.024856728, -0.0038757245, 0.018762408, -0.06490725, 0.019890059, 0.062507346, 0.0040468257, -0.000666984, -0.0047670687, 0.0073482725, 0.0067295698, -0.008785274, -0.020010825, -0.03930726, 0.04346645, 0.035115212, -0.057785448, 0.01549145, 0.020710101], [-0.0074605895, -0.06645386, -0.035392113, -0.036500245, 0.0017361597, 0.0071854177, 0.023300586, -0.003445058, 0.0022170239, 0.0193941, -0.013938753, -0.010492684, -0.0015937935, -0.03748974, 0.007155892, 0.034887772, -0.033818513, -0.01724195, 0.055374358, 0.026489813, -0.021011116, -0.00689996, 0.0010763281, 0.038821016, -0.043724567, 0.086130485, -0.03464242, -0.02681531, -0.005930659, -0.012089255, -0.010989956, -0.06263888, -0.04517852, -0.043677114, 0.019014457, 0.050510183, 0.020949021, -0.0038509527, -0.017782763, -0.034219358, -0.10109003, -0.015499731, -0.0041326554, 0.043025233, 0.031708263, 0.047810778, 0.012312499, -0.037375078, 0.009266292, -0.012215718, 0.02696424, -0.042189334, -0.033999752, -0.019913837, 0.014583438, 0.057867784, -0.019313324, 0.035999693, 0.0227705, -0.011127778, 0.045260306, 0.0035369394, -0.033499956, 0.019077059, 0.043447156, -0.006733614, 0.034750454, 0.01715234, -0.0139818685, -0.00851319, -0.033537816, -0.0048322794, -0.03615493, -0.011566489, 0.0059494483, -0.0073540676, -0.03525593, -0.039494477, -0.02607117, -0.04937261, -0.031299338, 0.048442338, 0.011062149, -0.0008703516, -0.053032886, 0.009899997, -0.021041155, -0.024618734, 0.052860986, 0.046690024, -0.061496098, 0.0014499129, 0.048800275, 0.005370534, 0.017865684, 0.052792583, 0.004349739, 0.03286032, 0.004694358, 0.030486068, 0.025201483, -0.016169658, -0.016642194, 0.0011570401, -0.02282805, -0.018212765, 0.019003604, -0.025897505, -0.026410427, -0.009032548, -0.017170765, -0.041938934, -0.0092507675, -0.04575549, 0.033396464, -0.014012459, 0.03346815, -0.016276687, 0.006641732, -0.014479441, 0.041730434, -0.024657607, 0.0020632988, 0.020961136, -0.061817177, 0.016079292, 0.014764424, 0.009361707, -0.03477166, -0.02070417, 0.028914453, -0.011412512, 0.04653049, -0.03087382, -0.049689807, -0.02603823, 0.009780728, 0.032690182, -0.022840671, 0.043676104, -0.026433649, -0.0028649915, 0.017823024, 0.012599905, 0.015844034, -0.025739994, 0.006490279, -0.04243873, -0.007081956, 0.014461771, 0.01947437, -0.033255108, -0.0015538952, 0.009358552, 0.0040382496, -0.020259907, 0.016090903, 0.03513565, -0.006954862, 0.03594239, -1.2621108e-05, -0.005403854, 0.010587595, 0.007492395, 0.0073020686, -0.034234505, 0.0006093471, -0.040462267, 0.034745406, 0.07283894, 0.07406168, -0.0030214933, 0.05214032, 0.022476679, -0.035770494, -0.019729987, 0.0027160626, 0.016553845, -0.003460203, -0.0155330505, 0.00061622565, -0.045482945, -0.0039544455, 0.014075059, -0.055488452, 0.021502329, -0.043867946, -0.031279143, 0.029499063, 0.041191258, 0.022439573, -0.048073296, -0.03973024, -0.026312487, -0.020801606, 0.032487743, -0.012574032, -0.017782638, 0.025503473, 0.003550949, -0.01750409, -0.042315044, -0.034187555, -0.01839943, -0.045753032, -0.023034533, 0.08000369, 0.012615871, 0.034960978, -0.05478571, -0.023343498, 0.0049308147, -0.023852885, 0.048741713, 0.03469997, 0.008589926, 0.032464646, -0.038604435, 0.03808243, 0.059305076, -0.023146734, -0.012835667, 0.0148272775, -0.02992919, -0.005355389, -0.038717523, 0.009035704, -0.0036805044, -0.03203035, 0.0059314477, 0.07460741, -0.03536334, -0.010823358, -0.066700034, -0.018202668, -0.0032701292, -0.021766867, -0.012899783, -0.065203674, 0.043162517, -0.029519256, -0.010648177, 0.028422736, -0.040639214, 0.03270962, 0.016920364, -0.012332337, 0.0017174174, -0.011617573, 0.033214528, 0.00798323, 0.042203978, -0.018199828, -0.022754723, 0.0069748033, 0.010676196, -0.004317429, 0.02172446, -0.022730112, 0.035647057, -0.022158626, -0.029759564, 0.023462702, -0.009967299, -0.00014716212, 0.03840856, 0.019807568, -0.024524327, 0.026291283, -0.021247888, -0.028492406, -0.08450286, 0.053828523, 0.015119267, 0.025350254, 0.020209929, 0.025253324, 0.00256991, 0.03431326, 0.005606296, -0.040456206, -0.011821435, -0.00019486992, 0.011233418, 0.024677549, -0.029238565, 0.039258715, -0.031572964, -0.040010933, -0.03784212, 0.018935196, 0.0028039054, -0.007827107, 0.070777155, 0.04823434, -0.020714773, 0.01624791, 0.007866989, -0.061277498, -0.06578323, -0.020857139, -0.0066228006, -0.023146102, -0.013790833, 0.033204623, 0.0053402437, -0.068190336, 0.015108855, 0.012537304, -0.015915785, 0.022932049, -0.051128868, -0.052515928, -0.007343466, 0.013010847, -0.03084195, 0.028081462, 0.06629111, -0.043045048, -0.005440203, -0.04686268, -0.03306705, -0.02512358, -0.067738, 0.037037652, 0.037076652, 0.00036954606, -0.0078268545, -0.061253775, -0.027183343, 0.01673862, 0.0054422216, 0.0067112744, 0.0013671184, -0.011587819, 0.0086787315, 0.02328342, -0.03915926, 0.0019205224, -0.0045446088, -0.0013378374, -0.078596815, -0.029610258, -0.009608197, 0.02753396, -0.060613632, -0.05041174, -0.012167757, 0.03166283, -0.0028662537, 0.054729164, -0.036062043, -0.0026120646, 0.019468818, -0.0013652883, -0.04217457, 0.024935989, 0.016864324, -0.01696277, 0.020795548, 0.009894948, 0.0012918966, -0.0941151, -0.016076012, -0.018466702, -0.017750831, 0.0744817, 0.020257479, 0.01485252, -0.028828884, 0.05458377, 0.020683978, -0.015413528, 0.043247994, -0.040204287, 0.036132973, -0.0016863063, 0.0053163897, 0.11256614, 0.005686819, -0.0048828544, -0.021742636, 0.04902581, 0.025612773, 0.05832164, 0.068176195, 0.008816854, 0.0013679547, -0.013642914, 0.052356396, 0.005633053, 0.014673805, 0.03428398, 0.012647361, -0.0022023835, -0.007288059, 0.009799029, 0.0070448504, 0.022696603, 0.034352638, -0.009172769, -0.014529041, -0.02906086, -0.0021027713, -0.0051860134, -0.054433834, -0.07190195, 0.0209571, -0.03707072, -0.014295173, 0.012969199, -0.024369847, 0.008893337, -0.0040905015, 0.045262326, -0.023484064, -0.016947623, 0.023130454, -0.0023228992, -0.017979274, 0.0078283055, 0.027971404, -0.051189385, 0.04044914, 0.06733412, 0.0015821821, 0.0037267609, -0.0010531053, -0.028564092, 0.066453665, 0.026708284, 0.049963687, -0.013630796, 0.07863859, 0.027466562, -0.044870563, 0.011810581, -0.04850343, -0.02882964, -0.011504392, -0.016334744, 0.0034814065, -0.020034116, 0.016592719, -0.03238728, -0.027649315, -0.009515306, 0.055889297, 0.057172608, -0.006642237, -0.0054437364, -0.008103762, -0.058047004, -0.058319617, -0.03165172, 0.033772066, 0.04981476, -0.06763703, -0.039198134, -0.025881981, -0.043144, -0.028724127, 0.021971205, -0.020943088, -0.045479283, 0.003707577, -0.0043315645, -0.013214048, 0.02287008, 0.045680333, 0.0067601185, -0.044995766, -0.008228205, -0.06312094, 0.0053432724, 0.01372167, 0.05730993, 0.005769866, -0.052176673, -4.796021e-05, 0.02709247, -0.040663194, -0.0025731914, 0.0022430234, 0.03038557, 0.038115308, -0.018672172, 0.006368359, -0.002124385, 0.01805119, 0.01192089, 0.0276921, 0.009981782, 0.020800611, -0.023102686, 0.009802057, 0.006957891, 0.01735251, -0.03256347, 0.027515657, 0.033278327, 0.040782336, -0.03373168, 0.025979288, 0.026577026, -0.0016228221, 0.036302347, 0.026303904, -0.039342016, 0.013398317, -0.034711078, -0.06581353, -0.010512721, -0.0121541275, 0.017632572, 0.04951715, 0.0014620924, -0.013863025, -0.0025858127, -0.017518982, -0.013738455, -0.03259477, -8.834776e-06, 0.040522844, 0.02377009, -0.052035313, 0.055884376, -0.07560751, 0.01751406, -0.011870941, -0.028588327, -0.01948095, -0.018047176, -0.008984715, 0.014856559, -0.02560184, 0.024731316, 0.019279752, -0.009662216, 0.022910846, 0.005551268, 0.020319479, 0.03875488, -0.0027110141, -0.013505091, -0.039042894, -0.044443466, 0.037040398, 0.04824343, -0.024414273, -0.01410737, 0.027968377, -0.054737244, -0.032845173, 0.04709087, -0.026936475, -0.017747298, 0.00622776, 0.08359616, 0.011595264, -0.016936265, 0.0014011955, 0.021521892, 0.034473296, -0.010416958, 0.021920847, -0.03014274, -0.04407089, 0.016270375, 0.014410907, -0.02290239, 0.01216022, -0.02166489, -0.04258463, -0.018208979, -0.026849642, 0.0025767256, -0.07652632, 0.006394359, -0.02603987, 0.0216659, -0.03797843, -0.016661504, -0.027294157, 0.03420699, 0.03431932, 0.011953704, 0.0035606672, 0.013848891, 0.00955115, 0.051824797, -0.008257739, 0.04534714, -0.017518668, -0.03434153, -0.019643998, -0.059206124, -0.017301679, -0.021957194, 0.01050783, -0.041158948, -0.072459295, -0.008546005, -0.04173649, 0.008247894, -0.024505142, -0.011034888, 0.025448445, 0.003011207, -0.019600077, 0.0005136791, 0.007727147, -0.023757216, -0.035626106, -0.014325462, 0.019194182, -0.012360018, -0.00010803669, -0.009531461, -0.00624341, -0.010261466, -0.015586563, -0.0014451169, 0.021391263, 0.030129615, -0.00038418654, -0.032621272, 0.018007293, 0.035630904, 0.0021885002, 0.06801869, 0.025861787, 0.06016735, -0.032016218, -0.024657607, 0.09624353, 0.00298363, -0.04790165, 0.0066730324, 0.0023480312, 0.016184047, -0.032343358, -0.0155396145, -0.02952658, 0.025530986, -0.028708478, 0.008364261, 0.01592683, -0.04190839, 0.00032814883, 0.0034790086, 0.013896346, -0.004664131, -0.012653419, 0.028405571, 0.0140195275, 0.0069416096, 0.0049414164, 0.0021577047, -0.04987862, 0.008152573, -0.06313785, 0.014642189, 0.05432851, 0.025443649, 0.02732694, 0.017974477, -0.010408754, -0.034416564, -0.018344497, 0.048189413, -0.021089368, 0.044277374, 0.014875743, -0.008093917, 0.011923413, -0.008418784, -0.027091714, -0.030950995, 0.013218844, -0.021697199, -0.016051274, 0.032015715, 0.025369437, 0.04468175, 0.0017265676, -0.0015357365, 0.033483297, -0.035881814, -0.04695355, -0.05128726, 0.01733156, 0.007869703, 0.012390394, 0.013676233, 0.007769049, 0.028272798, -0.017174805, 0.06984471, 0.000111065754, 0.017458022, 0.040275473, 0.01225762, -0.0008509151, 0.009870969, -0.0068978146, 0.018625854, -0.0011962287, -0.035226144, -0.033125866, -0.041688025, 0.039994776, -0.0044531054, 0.019622136, 0.008541335, 0.032438774, -0.0013546867, -0.08021774, 0.00028170313, -0.027436933, 0.020754151, 0.037731055, -0.07358611, -0.025125094, -0.0039726202, -0.011837085, -0.013776192, -0.039096154, -0.027139422, -0.027316118, 0.020761725, -0.021702249, 0.012900793, 0.061485495, 0.037494283, -0.033082448, -0.044753443, -0.08993701, -0.012014285, -0.0053399913, -0.0046233647, -0.01414801, 0.014921179, -0.020941574, -0.0017187425, -0.038354035, 0.007653188, -0.008614664, 0.0152646, 0.008513695, 0.025486562, -0.0065437923, 0.0064314646, 0.03661434, -0.044227395, -0.069511004, 0.019951448, -0.041164, 0.022894692, 0.045839865, 0.017132903, -0.024916591, -0.02413055, 0.011597284, 0.01347783, 0.008298631, -0.022607433, -0.0023452542, -0.02025486, 0.0003834293, 0.02689205, 0.025351262, -0.031097401, -0.045482434, 0.05196211, -0.012758426, -0.044505056, -0.029850436, 0.032887578, -0.06934946, -0.05454237, -0.042912778, 0.0019011175, -0.011280621, -0.042330187, 0.03836413, 0.005439445, -0.04552888, 0.06672427, -0.06924041, -0.0017770521, -0.0119880345, -0.038352016, 0.022280801, -0.028931115, 0.0067406814, 0.03986453, 0.082230054, 0.0007942463, -0.02484642, 0.027493065, 0.0073586744, 0.019178152, 0.032442626, 0.011155498, -0.037851207, -0.019252492, -0.026113577, 0.0084685115, -0.050801475, 0.0063257, 0.008422823, -0.0029533396, -0.022207094, 0.028342465, 0.032722242, -0.023919525, 0.0075764516, 0.00940424, 0.017945196, 0.009835882, 0.03736252, 0.022585189, -0.02749988, 0.04495033, 0.0073414464, 0.022257576, -0.0057229153, -0.048601363, 0.007928328, -0.004626898, -0.043343913, 0.01123733, 0.016698232, 0.0055578314, 0.009789942, -0.03213637, -0.037826978, -0.0037826013, -0.035722785, -0.038163707, 0.015038808, -0.012325269, 0.021317558, -0.01362089, -0.003008872, -0.022796877, -0.06531272, -0.024027942, -0.04763307, -0.044545446, 0.0018765064, -0.004582977, -0.012979801, 0.009263894, 0.02508395, 0.012253172, 0.015339191, 0.025661236, -0.02335309, -0.012918967, 0.01615098, 0.04923444, -0.023764035, 0.019721998, 0.049658507, -0.00051178597, -0.006330748, 0.03673853, -0.053085394, 0.00971371, 0.03427691, -0.010407366, 0.04449092, 0.03745541, -0.014267911, -0.03391847, -0.06500729, -0.006911319, -0.00062095857, -0.011576081, 0.036865752, 0.0045805154, -0.03912594, -0.02246835, 0.0054932116, -0.033601932, -0.022966377, 0.016342316, -0.011466529, -0.0069749295, -0.031636573, -0.016023254, 0.036605254, -0.015435616, -0.053767942, 0.065545455, 0.04946843, 0.062277596, 0.06073214, -0.031355884, 0.002001203, 0.04076719, 0.0062595652, -0.016003566, -0.019924691, -0.03482366, -0.017702872, -0.007164246, -0.010526004, 0.010211991, 0.06661926, 0.01143422, 0.0039034565, -0.034861017, -0.004517852, -0.010978092, -0.032635156, 0.0056497133, -0.021882478, -0.04567251, 0.053909294, -0.00049903867, -0.032579623, -0.03514524, 0.05006844, -0.016645728, -0.01880747, 0.025433175, -0.011250977, -0.016044458, -0.004060968, -0.017880071, 0.037483685, -0.01727855, 0.06675456, -0.023150142, -0.0037974392, -0.023541903, -0.031008044, -0.030948725, -0.02095003, -0.005263002, -0.0052948073, -0.03407901, 0.00033521664, 0.0037231005, 0.012209155, 0.024036648, -0.013890792, -0.0134787755, -0.048943646, 0.007884659, -0.00091881666, -0.01087441, -0.0022256062, -0.030996433, 0.032740165, 0.024736362, -0.04819244, 0.054984614, 0.00719908, 0.058783427, 0.031013597, 0.01910028, 0.030311864, 0.03246452, -0.013976111, -0.044135515, -0.007094325, -0.027283302, 0.009894066, 0.016523806, -0.017740324, 0.012315173, 0.0021587145, 0.051816717, 0.03629831, -0.010493189, -0.020326547, 0.026051987, 0.016764872, 0.012222912, 0.030286873, 0.018642513, -0.0024883777, -0.024688909, -0.011769435, -0.018158998, -0.019017486, -0.09119508, 0.009119887, 0.022860361, 0.024595134, -0.017592562, 0.015458333, -0.024442544, -0.06981593, 0.007953696, 0.008147178, -0.0015613573, 0.01355709, 0.0019663686, 0.034520246, 0.038468126, 0.05045212, 0.027315106, -0.028380329, -0.021010611, -0.002130443, 0.024533289, 0.007132441, -0.021246122, 0.0026867816, -0.01649011, -0.018099489, 0.0022084415, -0.03512909, 0.015461363, 0.031505316, 0.019370371, -0.05198685, 0.0012174321, -0.030317923], [-0.026623938, -0.08183273, -0.06111877, -0.030407578, 0.009311286, 0.0215558, -0.012924831, -0.027205354, 0.0110552935, 0.068118036, -0.009434169, 0.025719646, -0.05668092, -0.02274634, -0.015758578, 0.021146607, -0.015690379, -0.025969267, 0.036709905, 0.038829695, 0.004870733, 0.0074082245, -0.020900724, 0.016701626, -0.035722412, 0.029748823, 0.008804857, 0.016052533, -0.00654706, 0.017037213, 0.0008023966, -0.052312996, 0.010605505, -0.00019136992, 0.006412503, -0.0043536657, 0.00024898793, 0.021110034, -0.059002288, -0.044978146, -0.02767308, 0.016869996, -0.0032302877, 0.02527946, -0.013999446, 0.057948288, -0.02427638, 0.034606677, -0.018553682, -0.030043239, 0.03084598, -0.028189573, -0.032085743, 0.034110714, -0.004514674, 0.029453488, 0.063401185, 0.005506026, 0.021924736, -0.008374275, -0.0048284107, 0.02311712, -0.08942036, -0.027707238, 0.02585357, 0.02888306, -0.016041033, 0.007770723, 0.009945027, -0.06031028, -0.015504644, 0.013580594, 0.00066105434, -0.011589841, 0.056052987, 0.017665837, -0.067477226, 0.0077456515, -0.02697948, -0.008569325, -0.008958505, 0.01607268, 0.023797955, -0.054378502, -0.037935406, 0.013935964, -0.0014207262, -0.03585794, 0.010487624, 0.008671335, -0.039535373, 0.012066426, 0.051901735, 0.0047393385, -0.012228815, 0.022061609, 0.04321648, 0.06208482, 0.026239762, 0.015470603, 0.062784575, -0.028171401, -0.015189988, -0.022825463, -0.021716923, 0.036419168, -0.00089888665, -0.013756554, -0.024712482, 0.02962922, 0.007735934, -0.011527508, -0.00045726376, -0.04648403, 0.01581194, -0.029323762, 0.043095034, -0.02099917, -0.033837516, -0.018237187, 0.0071377303, 0.022552209, -0.0009975617, 0.017902289, -0.04351941, -0.020685432, -0.011447809, 0.003625333, -0.045500044, 0.0025538225, 0.043359093, 0.024022907, 0.027756922, -0.0079786545, -0.024213817, -0.0061074067, -0.033809915, 0.028942632, -0.027660314, 0.03796485, -0.044596095, 0.02271575, 0.023997147, -0.005214371, 0.0020535465, -0.017799474, -0.0070613665, -0.05207194, -0.013947004, -0.0075057494, -0.010519827, -0.011263224, -0.020425059, 0.008606242, 0.028181983, -0.0289194, 0.014519503, 0.03245497, -0.04289999, 0.040707972, -0.018069739, -0.004841521, 0.019884072, 0.009106632, -0.024644397, -0.062316675, 0.008169104, -0.002758533, -0.030305956, 0.016703006, 0.083128154, -0.008411076, 0.017779348, 0.010067513, -0.06935688, -0.013976675, 0.02138743, -0.017973823, 0.03971846, 0.012684698, 0.004372757, 0.041328546, 0.00037102003, -0.014929614, -0.03256969, 0.05757383, 0.0027872273, -0.020146286, 0.003077042, 0.03187321, 0.032040663, -0.025991349, 0.024192655, 0.008768457, -0.028947461, 0.046955787, -0.066677704, -0.014534454, 0.03143711, 0.047630873, 0.023214184, 0.010303155, 0.0047989693, -0.01830021, -0.027866406, -0.039655898, 0.051586155, 0.0028074682, 0.04889134, -0.038268466, -0.021657234, 0.0006803753, 0.028064216, 0.035270948, 0.031663444, 0.051139932, 0.027782682, -0.017773481, 0.023629814, 0.06669978, -0.028631885, 0.04028958, 0.04254669, -0.03895666, -0.027530013, 0.007678719, -0.02285163, 0.021119695, 0.007209271, -0.0127104595, 0.07262489, -0.009965037, -0.019305822, -0.07097616, -0.0026205548, -0.017289538, -0.05571441, 0.04382371, -0.051546596, 0.04203238, 0.011618363, 0.017814493, 0.0057005296, -0.025798138, -0.008110221, -0.01210478, -0.02253289, -0.008703652, -0.03315024, 0.02177753, 0.041587535, 0.019530542, -0.009622032, 0.012113809, -0.004390928, -0.0014757565, 0.0056580063, 0.023828316, 0.029820127, 0.031618822, 0.030097522, -0.054790687, 0.003721593, -0.05224353, 0.019030267, -0.00090624706, 0.018080778, -0.0127215, 0.02950708, -0.050572496, -0.035366636, -0.059166428, 0.056231476, 0.016713588, -0.028657649, 0.022484127, 0.00017986934, 0.011583401, 0.027708158, 0.01079216, -0.06201122, -0.0029036705, 0.019950315, -0.012746916, 0.031281106, 0.0121906325, 0.017157512, -0.060118683, 0.001059435, -0.02547888, -0.024271779, 0.012738981, 0.015398839, 0.053131837, 0.029656015, 0.008153463, 0.040046517, -0.006594902, -0.066412725, -0.0134840235, 0.0031292548, 0.013082159, -0.0014433248, 0.0022596372, -0.014206572, -0.029060628, -0.04033305, 0.039770443, 0.01136834, 0.011302556, -0.015500735, -0.007407305, -0.047157966, 0.021548439, 0.0068888576, 0.004007728, 0.027943, 0.089899704, -0.019580455, -0.018134141, 0.00018032936, 0.017760832, -0.015944429, -0.03320084, 0.031499676, 0.053482376, 0.018046737, 0.025764495, -0.04542, -0.035001203, 0.039042227, 0.06703468, -0.01733462, -0.008507294, 0.03928512, 0.018751953, -0.015840461, 0.009767227, 0.0046968437, 0.006999723, 0.0058653047, -0.060426895, 0.042695735, -0.0066606854, 0.041637678, -0.06172232, -0.005384119, -0.07954364, 0.004206918, 0.01099779, 0.01291333, -0.0215535, 0.02565645, 0.019292481, -0.020280842, 0.011872066, 0.013313443, -0.000365949, -0.034039006, 0.008539423, 0.00308124, -0.012208574, -0.041258622, 0.045218505, 0.0025361117, -0.036562696, 0.05964302, -0.021052992, 0.043687545, -0.011655395, 0.055889223, 0.03392492, -0.00809182, 0.010376298, 0.023529531, 0.049933754, -0.036892075, -0.0074128243, 0.020227134, -0.011807432, 0.012945532, -0.004292943, 0.059961926, 0.03564633, 0.03084828, 0.065454036, 0.041268744, 0.026408128, -0.040344093, 0.053285483, -0.007475388, 0.018058697, 0.02629272, 0.031689204, 0.01983071, 0.004203468, 0.05124965, 0.024929613, 0.030329833, 0.0043107686, -0.00079124107, 0.03258878, -0.011300947, -0.0063501694, -0.0016793172, -0.03666758, -0.02213865, 0.005183089, -0.013957124, 0.024882693, 0.037300576, 0.008535283, -0.045535926, 0.011844695, 0.03549452, -0.029943874, -0.013036098, 0.038049497, 0.027265614, 0.018872019, 0.032799702, 0.035327993, -0.0655626, 0.04057963, 0.015323396, 0.016803753, 0.0054494427, -0.040221956, -0.027143707, 0.036340967, 0.023581533, 0.042840183, 0.02040344, 0.085358344, 0.030469682, -0.04599043, -0.012432606, -0.015858402, -0.058638554, -0.011908178, -0.017386602, -0.029856468, 0.01947741, -0.0010396539, -0.03027647, 0.01237375, -0.03910755, 0.012407764, -0.0043325047, -0.08031453, -0.0024625077, -0.016581101, -0.013666849, 0.00017020883, -0.045266345, 0.0059228074, 0.075230464, -0.054186672, -0.024936888, -0.042465266, -0.02791494, -0.007918966, 0.01771552, -0.045895662, 0.0084787, -0.0069659115, 0.018241787, -0.048103776, 0.04238936, 0.010036801, 0.027189251, -0.027101846, -0.044809543, -0.027301854, -0.0231208, -0.00030005057, 0.05851504, 0.019104792, 0.002096789, 0.0062756455, 0.00028061456, 0.01849204, 0.055465996, 0.02696016, 0.04508533, 0.030409647, -0.044070058, 0.0059672, -0.014093291, 0.006113717, 0.0049972394, 0.029853709, 0.012582343, 0.062128983, -0.044210136, -0.03045266, 0.007828737, 0.023126319, -0.05401773, 0.015008968, 0.033097796, 0.040793538, -0.047428463, 0.009538135, 0.004465682, -0.06873861, 0.03159628, 0.047735754, -0.013752873, 0.020772837, 0.0025862542, -0.06725181, -0.011201582, -0.010468992, 0.036706224, 0.02679363, 0.011462416, -0.045816537, -0.018527921, -0.014467751, -0.044741005, -0.008845396, -0.009757106, 0.025823498, 0.009442206, 0.0006316128, 0.028649826, -0.030553866, -0.00084822654, -0.0031144768, -0.051294502, -0.041671723, -0.035359275, 0.02389778, 0.029905003, -0.020689458, 0.019625537, 0.017297357, -0.012656148, 0.023230517, -0.014394146, 0.023261568, -0.0007905511, 0.005820682, -0.037081603, -0.02640675, -0.025298553, 0.04814242, -0.02065139, 0.0014122733, -0.0067954725, -0.008186585, -0.086035505, -0.04184193, 0.06261293, -0.0075214044, -0.014170345, 0.023959424, 0.044963654, 0.0011291682, -0.046109114, 0.004281902, 0.012065506, -0.0032423416, 0.0071542915, 0.016146839, 0.020368017, -0.060599867, -0.084953524, 0.013545402, -0.02831723, -0.028453397, -0.035331443, -0.05548831, 0.025709813, -0.006684147, 0.033843957, -0.044813685, 0.013081239, -0.0063586803, -0.02545496, -0.006416413, 0.014127333, 0.0025809638, -0.0141977165, 0.012719545, -0.02218787, 6.35983e-05, 0.051776607, 0.002142101, 0.050786175, -0.016274955, 0.03682215, 0.025103733, -0.017890789, -0.016621122, -0.0339884, 0.01490368, 0.016849754, -0.041648492, -0.03701674, -0.05760971, -0.005564449, -0.03370227, 0.02829331, -0.0346743, -0.027284017, 0.042936787, -0.01771598, 0.029731343, 0.0050961445, 0.012413745, -0.00423475, -0.0012588553, -0.0070627467, 0.014106172, -0.03657742, 0.01829607, -3.6801912e-06, -0.02004485, 0.038636487, 0.0011224583, 0.012350491, 0.018843498, -0.0044741924, 0.0077592228, 0.0041172137, 0.050161004, -0.0071473913, -0.019458089, 0.041209396, 0.009404728, 0.064475104, -0.021118317, -0.0570908, 0.075605616, -0.036522217, -0.027606493, -0.029910753, 0.010038641, 0.021299334, 0.03446683, -0.02595446, -0.020671632, 0.009846351, 0.015293034, 0.013417057, -0.0015368249, 0.0007280453, 0.015685894, 0.050000913, 0.02539884, 0.012413284, -0.040368017, 0.035883013, 0.01850998, -0.027100006, 0.016728077, 0.0042699417, -0.034833927, 0.013444658, -0.035863463, 0.015061181, 0.040628906, 0.044953536, -0.015691875, 0.028446956, -0.022222374, -0.015598604, -0.046751652, 0.041535556, 0.032626044, 0.02174832, -0.034974694, -0.022324497, -0.008508141, -0.052259862, -0.011404911, -0.006146494, 0.030364335, -0.032295514, -0.022433525, 0.039433245, 0.02506118, 0.025853341, 0.016400771, -0.02560746, 0.03777348, -0.029603684, -0.059247393, -0.0035448433, 0.0067761517, 0.023477778, 0.00346628, -0.02237188, -0.0030294873, 0.0400828, 0.069993556, 0.033014074, 0.024202317, 0.06450271, 0.032994293, 0.036529575, 0.03622596, 0.035941206, -0.034756184, 0.00089865667, -0.008338623, -0.03569601, -0.029833468, 0.0026097156, 0.018093659, -0.008057318, 0.049450725, 0.06332873, -0.00090302684, -0.00035335583, -0.009548255, 0.012779463, -0.0061969813, -0.011703467, 0.0031323025, -0.051806048, -0.0358745, 0.043915723, -0.014366545, -0.054054644, -0.04084368, -0.01100653, -0.015625631, -0.033841196, -0.028304808, -0.025050601, 0.02140399, 0.02603827, -0.009568957, -0.032745417, -0.053034313, 0.005467384, 0.0113897305, -0.013737807, -0.042131748, 0.016306926, -0.03241512, 0.0031520836, -0.08032569, -0.009903854, 0.023658108, 0.019529393, 0.00520333, -0.008273414, 0.024177935, 0.026774079, 0.013063298, -0.012682398, -0.01617904, 0.044606674, -0.028254895, 0.011233323, 0.024259819, -0.017616155, -0.057591308, -0.007732081, -0.00057917007, -0.015177107, 0.053526998, -0.034196105, 0.020259911, 0.0005213221, 0.005490385, 0.009193117, 0.012856747, -0.011317047, -0.0204453, 0.0064807017, -0.015992269, -0.10287973, -0.04542805, 0.004302833, -0.035178944, -0.06607967, 0.036331765, 0.026406292, -0.02770002, -0.07619099, 0.048977822, -0.032488268, -0.02073684, -0.0008450638, -0.06462876, 0.0050933845, -0.020160086, -0.045312352, 0.024768375, -0.030240934, 0.027862726, 0.007017894, 0.042844784, -0.014717083, -0.0046577416, 0.0071800523, 0.014465451, 0.039367, 0.0017460205, -0.0068727564, 0.01562885, 0.024846809, 0.017889408, -0.06612935, -0.06187873, -0.02100469, 0.0018953559, 0.020742476, 0.050017014, 0.005644953, 0.012642146, -0.0059791603, -0.005281534, 0.041462872, -0.0033779554, -0.01600423, 0.034648273, 0.006084276, 0.006048394, -0.030683592, -0.010746159, 0.002195349, 0.013914342, -0.0300506, 0.0033245925, 0.02349802, 0.01445303, 0.037066884, 0.049480166, 0.019056719, 0.0008903762, -0.022975434, 0.0015126736, -0.004782063, -0.0401058, -0.006026773, 0.060684506, 0.003626368, 0.001907259, 0.009433709, 0.032178555, 0.046142235, -0.061002843, -0.021269664, -0.056408126, -0.060645867, 0.013140122, -0.010871284, 0.002677339, 0.010993191, 0.01848117, -0.028562423, 0.045177564, 0.03271414, 0.028246846, 0.049441062, -0.015127425, 0.06603551, -0.046144076, -0.056367643, 0.043459374, 0.005192692, 0.011230678, 0.017404543, 0.000732818, 0.03990086, 0.01502622, -0.018030636, 0.031926576, 0.026461149, -0.056105893, 0.0040422874, -0.009396448, 0.010907856, -0.0013000275, -0.03837933, 0.027788661, 0.028440056, -0.0014959975, -0.055215746, -0.009980678, -0.029919952, -0.023539536, 0.030560767, -0.004987579, 0.0003781396, -0.011854815, -0.026293125, 0.057796482, -0.036720484, -0.03145816, 0.03872826, -0.007849847, 0.05102585, 0.027104607, -0.042082064, 0.038860977, 0.0024362865, -0.024015088, -0.028647527, -0.0086611, -0.010913607, -0.06375195, 0.011508417, -0.012636626, 0.040398836, 0.043182444, 0.062305633, 0.010452663, -0.08963473, -0.02539884, -0.019213816, -0.014922715, -0.04638697, -0.019123537, -0.0017572913, 0.014374826, 0.04508602, 0.004180697, 0.008144722, 0.06782592, 0.03507866, -0.024837034, 0.014031649, -0.025954546, -0.055795375, 0.017420644, -0.026345221, 0.057716437, 0.01947005, 0.018040296, -0.043397732, -0.017565552, -0.019924555, 0.009491673, 0.030111322, 0.013732633, -0.0051554875, 0.04107277, 0.021436654, 0.0053850394, 0.029971017, 0.054430947, -0.035404358, 0.055125926, 0.02178926, -0.020171989, -0.026846074, 0.020545125, -0.028044261, 0.05130738, 0.04031281, -0.0048905136, -0.0033406934, -0.015225468, 0.09293954, 0.0043288246, 0.031171218, 0.032115072, 0.0013325167, 0.019873347, 0.025993187, -0.009473732, 0.0067112884, 0.0030619188, -0.027028244, 0.0053820494, -0.013273529, -0.039755262, 0.006529349, 0.009972858, 0.043665465, -0.01657052, -0.049779586, -0.066162474, 0.03892705, -0.0063111535, -0.039792985, -0.0072513563, 0.016885636, -0.005036341, 0.0005639893, 0.027184736, -0.010733277, 0.015652543, -0.064182535, 0.017171541, 0.0070289345, 0.007115649, -0.010575949, 0.058200378, 0.004545036, -0.033578984, -0.0062912866, 0.010342947, 0.009700652, 0.036858033, 0.030779278, -0.00078388065, 0.03352815, 0.03411537, -0.018225687, 0.0012340716, -0.009329917, 0.040978238, 0.050670706, 0.022721497, -0.016156038, 0.015356057, 0.04030729, -0.025720106, 0.00095684966, -0.008549084, -0.023015914, 0.032600973, 0.020667952, -0.041843772, 0.007618455, 0.023001654], [-0.04351483, -0.06292546, -0.036713585, -0.029353814, -0.014061016, 0.008530686, 0.020467585, -0.036991958, 0.057777625, 0.03583332, -0.0151015725, 0.033241015, -0.08317444, -0.038678087, -0.030087784, 0.043735627, -0.020675112, -0.06911028, 0.010103279, 0.015810635, -0.009110684, -0.024506304, -0.010154794, 0.020840423, -0.0029308673, 0.06399987, 0.007467609, 0.022513174, 0.03405937, -0.020176776, -0.022858422, -0.0381531, 0.019255446, -0.005359324, 0.030306805, -0.002443922, 0.022144517, 0.00974831, -0.015122472, -0.03246441, -0.066963546, 0.028105102, -0.020158282, 0.04895702, -0.002917492, 0.05108035, 0.039921157, 0.028357351, -0.022265729, -0.029957583, 0.014874611, -0.018459616, -0.020088896, 0.023725938, -0.02299803, 0.04579208, 0.021610131, 0.02159571, 0.02159362, -0.035098933, 0.017099513, -0.02362876, -0.054070987, 0.013867491, 0.017573291, 0.017809188, 0.005559118, -0.0026065158, 0.0017018006, -0.058000408, -0.0046362206, 0.005577509, -0.0061225533, -0.021292571, 0.055629633, 0.021795085, -0.07466815, 0.0052636066, -0.032608613, -0.037703358, -0.0028638209, 0.025147693, -0.0048700795, -0.03925197, -0.036446914, -0.007542009, -0.016601281, -0.011853669, 0.05873438, 0.012866222, -0.06756878, 0.0103644105, 0.02183085, -0.0020940737, 0.021480557, 0.02797783, -0.007460085, 0.07383511, 0.018060863, 0.017847694, 0.033360977, -0.039559186, -0.021990908, -0.041229427, 0.0035009903, -0.0030290922, 0.008271799, -0.03037201, -0.0091646025, -0.0010683538, -0.03641515, 0.007946195, 0.01317887, -0.04412811, 0.005696633, -0.0122380005, 0.04088376, -0.009639427, -0.030094473, 0.007340544, -0.012384085, 0.008381311, 0.018626805, 0.030076917, -0.03019813, -0.009810694, 0.0059212963, 0.005289939, -0.07438016, 0.014871059, 0.04698395, 0.020459538, 0.048186265, -0.039901927, -0.030185591, 0.014761339, 0.00938446, 0.05098756, -0.009760641, 0.04994512, -0.00085685647, 0.024194283, 0.0037321195, -0.0007621843, 0.025329148, -0.04096568, 0.025060128, -0.039447166, -0.03580323, 0.024512367, -0.007173718, -0.013562575, 0.0101247, 0.025092755, 0.016174108, -0.050768957, 0.013545439, 0.018475708, -0.023854077, 0.012863506, -0.01477192, -0.014469067, 0.01783599, 0.0048890454, -0.0015931261, -0.05103354, 0.024736194, -8.025193e-05, -0.037824363, 0.037610985, 0.0563402, 0.0042067543, 0.02068535, -0.00033772687, -0.051501673, -0.0078529855, 0.020453373, -0.03063032, 0.016407758, 0.028412107, 0.011032969, 0.004172473, 0.019926721, -0.008826876, 0.017603595, 0.033286575, -0.026907906, -0.018500578, -0.025176534, 0.018192528, 0.044755492, -0.03616603, 0.019920032, -0.026940405, -0.024951244, 0.03874705, 0.0022940766, -0.004046662, 0.032497015, 0.056005813, 0.016993867, 0.020526102, 0.032767866, -0.031541515, -0.042387333, -0.024617277, 0.0150092, -0.01607212, 0.0241865, -0.033852104, 0.009057391, 0.04581549, 0.03032018, 0.05019674, 0.023430217, 0.023617472, 0.024143394, -0.03972303, 0.020688279, 0.06138583, -0.039437134, -0.0010181962, 0.023569405, -0.033906437, -0.02013017, -0.0037087258, -0.008062811, 0.005689945, 0.0007105639, -0.0053864922, 0.06873285, 0.010371725, -0.00563101, -0.060561784, -0.016770145, 0.028807098, -0.035438333, 0.029185787, -0.018427012, 0.022355178, -0.010408977, 0.0045375256, 0.04670244, -0.02982425, -0.01044738, 0.021834794, -0.0625965, 0.012988272, -0.014965939, 0.001576616, 0.07492186, -0.018438715, -0.010543097, -0.034275096, -0.023952171, -0.0043744617, 0.002109957, 0.0031539632, 0.001635551, 0.043347113, -0.01794383, -0.042861216, -0.021009287, -0.062467765, 0.08226826, 0.017033942, 0.01381608, -0.02327891, 0.012462717, -0.02690655, -0.035259016, -0.056336433, 0.0118141705, 0.034710214, -0.028540429, 0.028478567, 0.020795595, 0.021481916, 0.044947345, 0.0266311, -0.06302786, -0.034932576, -0.010101711, 0.01588821, 0.01037554, 0.0064263716, -0.003551357, -0.05052862, -0.0037087258, -0.03782039, -0.007674613, 0.0043373657, 0.032925025, 0.04090257, 0.03343914, -0.05503276, 0.028211895, -0.04739545, -0.029828534, -0.036223713, 0.026991814, -0.0035735094, -5.9144e-05, 0.01441358, -0.011372367, -0.02216834, -0.07232705, 0.029306164, 0.0021626223, 0.016011931, -0.021482019, -0.017456675, -0.055298593, 0.019329429, 0.013197491, -0.048908114, 0.02141556, 0.08525785, -0.017955324, 0.010384265, -0.034033503, -0.03478639, -0.023822283, -0.06276286, 0.0023933465, 0.04123444, 0.025449054, -0.018701207, -0.027933104, -0.0056953784, 0.048666522, 0.036135938, -0.008078694, 0.001971188, 0.02806644, 0.013341882, -0.019385021, 0.02327217, 0.021732388, 0.03287027, 0.0054065557, -0.03624545, -0.03683062, -0.02209436, 0.03527699, -0.09325775, -0.024721773, -0.07266812, -0.008235227, 0.02400327, 0.010635052, -0.030044314, 0.012577713, 0.012188785, -0.016426567, -0.012158168, 0.0038554363, -0.010627006, -0.02228412, -0.015178063, 0.018466301, -0.0031039105, -0.019352626, 0.040915944, 0.0051327795, -0.03447907, 0.04950541, 0.003543206, 0.06071727, -0.04615719, 0.04729848, 0.014647649, -0.020521503, 0.02950094, 0.00083386764, 0.03922313, -0.061847482, -0.00708683, 0.021765409, 0.002325634, 0.018156162, -0.010471646, 0.04244909, 0.037995946, 0.054977585, 0.025508827, 0.00938237, 0.046041198, -0.007394881, 0.043563418, 0.014890912, -0.006211165, 0.042183463, -0.003307884, -0.015996885, -0.0021738033, 0.029156946, 0.050794873, 0.0149887195, 0.018408203, 0.0016956354, 0.015038876, -0.023804165, -0.015814645, 0.009968377, -0.043454744, -0.053718634, 0.03741391, -0.02121535, 0.06051873, 0.042356297, -0.008280578, -0.03161184, 0.02509555, 0.023784874, -0.017305994, -0.043339383, 0.05157691, 0.0052525303, 0.011154181, 0.014541221, 0.044221215, -0.026942076, 0.042147726, 0.038962312, -0.014799375, -0.009602853, -0.033158556, -0.052234806, 0.068026885, -0.007286206, -0.004808846, -0.015152567, 0.082137845, 0.035476368, -0.030761253, 0.0069898595, 0.0015578069, -0.07382508, -0.030286742, -0.025869751, -0.041781157, 0.0113949375, -0.0040874146, -0.019491605, -0.013981809, -0.04578085, 0.022380255, 0.026781574, -0.014620897, 0.00879093, -0.011877077, -0.02749966, -0.025840128, -0.051623307, 0.050043765, 0.0432491, -0.069893576, -0.029197907, -0.03052896, -0.0491775, -0.015921649, 0.040414426, -0.020477615, 0.009933266, 0.01640316, 0.022504397, -0.043483168, -0.0035325475, 0.012659323, -0.000516674, -0.038960066, 0.007632711, -0.048942808, -0.0038646318, -0.012582142, 0.04914427, 0.023788845, 0.009727307, 0.0072791004, 0.028564671, 0.01560064, -0.007859673, 0.00051400944, 0.034961835, 0.014411243, -0.024696069, -0.0062613217, 0.028231122, -0.0021525908, 0.030652057, 0.023164384, 0.010752295, 0.04829076, -0.04985567, -0.014980255, 0.020245638, 0.06473823, -0.052698765, -0.0007427483, 0.06488703, 0.03725194, -0.05799623, 0.05275979, -0.0105578825, -0.06607576, 0.018562123, 0.05176291, -0.020046994, -0.012429017, -0.024564091, -0.029807739, -0.011553769, -0.06324259, 0.048497245, 0.02512345, -0.0015264585, -0.06410261, -0.013807511, -0.029148169, 0.0057348777, -0.0074030315, -0.01458354, 0.044505544, 0.039963055, -0.037875567, 0.048465475, -0.044268135, 0.024593035, 0.009152691, -0.004437681, -0.056685444, -0.045551326, -0.0035561635, -0.012222536, 0.009566698, 0.033050418, 0.014681088, 0.005047512, -0.013760175, -0.03312064, -0.0063407384, 0.023584662, 0.0129331, -0.034728184, 0.0060397936, -0.039330132, 0.026580108, 0.024950199, -0.025836863, -0.007404076, -0.00802373, -0.09508515, -0.073798336, 0.024411634, 0.002270304, -0.0131588075, 0.016503789, 0.030720605, 0.022888519, -0.020959128, -0.024220303, 0.040313214, 0.026352726, 0.029742952, 0.019021379, 0.0023205136, -0.06604065, -0.05948439, 0.023939315, -0.022223094, -0.02308246, -0.056861836, -0.050679095, 0.01225472, -0.0059691546, 0.021253387, -0.020310842, 0.017822616, -0.03257434, 0.017311115, -0.003983547, -0.0032236222, -0.014881195, 0.008982364, 0.033511866, 0.008793856, 0.009362738, 0.018240595, 5.6348763e-05, 0.002136394, -0.0026127854, 0.05031161, 0.03448952, -0.014117652, -0.0052373786, -0.049758703, -1.1285427e-05, 0.005237274, -0.03782332, -0.014844098, -0.06589854, 0.013202174, 0.0026976352, 0.011886481, -0.011857327, -0.008102679, 0.03401929, 0.0056038415, 0.013785567, -0.00804233, -0.00010073289, -0.0349564, -0.016375363, -0.027792245, 0.0008493329, -0.035046685, -0.010523244, -0.02525804, 0.011915321, 0.03327226, -0.007863853, -0.020071343, 0.031353425, -0.027632996, 0.024327934, 0.016582053, 0.07241733, 0.017686354, -0.022106271, 0.027501332, -0.02167847, 0.0867958, -0.014481607, -0.031221343, 0.06484105, -0.0027620038, -0.013655576, -0.01202107, -0.006842313, 0.014861927, 0.029941909, 0.0013870626, 0.004918252, 0.003806115, 0.0021396333, -0.009139733, -0.015369498, -0.04604287, 0.019391708, 0.04552165, -0.007996771, 0.0037802, -0.042941887, 0.04521527, -0.0063211196, 0.00951803, -0.032298055, -0.020931542, -0.02699056, 0.03295345, -0.034078646, 0.044223826, 0.026933508, 0.01184531, -0.0023845166, 0.04285871, 0.008960211, -0.023100851, -0.012379487, 0.046138585, 0.024053007, 0.04348484, -0.021311903, -0.025172146, -0.0064375, -0.015176653, -0.02393639, -0.0067461776, 0.009666177, -0.036489546, -0.024202643, 0.021294765, -0.0040205377, 0.043722253, 0.004685333, 0.006420154, 0.023605352, -0.039550822, -0.04309152, -0.038057804, 0.0042784307, -0.008939312, 0.02072966, -0.013658711, -0.00669602, 0.02228245, 0.033337988, 0.05935466, 0.021393511, 0.03085859, 0.049662568, 0.016645588, 0.021079713, -0.01782805, -0.043876905, 0.029022776, -0.0025052605, -0.045212764, -0.06964864, -0.020448254, 0.0037442541, 0.0022407451, 0.028753597, 0.02897429, -0.009028969, 0.04958106, -0.018734958, 0.015725197, 0.008144108, -0.007907949, 0.030685076, -0.06836796, -0.022604294, 0.0075069987, -0.0025935585, -0.037175868, -0.049685974, -0.019789308, 0.0075041824, -0.023306524, -0.01099535, 0.019132562, 0.006682436, 0.033796094, 0.008294789, -0.03226796, -0.036171883, 0.03591859, 0.047937147, 0.027697781, -0.02168432, 0.011544757, -0.00060763664, -0.0009222963, -0.055407267, -0.036719855, -0.016194796, 0.038843185, 0.014441089, 0.013332686, 0.06419486, -0.0034031312, -0.009011831, -0.017026573, -0.05562545, 0.04299497, -0.03873472, 0.012916381, 0.022857169, 0.00311227, -0.068091266, 0.014607941, -0.0017621986, -0.02042934, 0.012116369, -0.044994578, 0.01054247, 0.024324263, 0.022791548, 0.01920926, 0.0038744542, 0.014110127, -0.037968356, 0.010994306, -0.0053738486, -0.06561933, -0.018937156, -0.017094705, -0.04536658, -0.051116508, -0.023735762, 0.008055496, 0.0078074257, -0.038674742, 0.07441694, -0.028187236, 0.007671948, 0.015905764, -0.06758884, 0.002282347, -0.02317358, -0.049904995, 0.029424872, -0.023373792, 0.029506689, 0.015180884, 0.025045287, -0.02812579, -0.03683229, 0.012643859, 0.009223094, 0.034207802, 0.012211668, 0.009497105, -0.010837981, -0.006599676, -0.022677857, -0.03958719, -0.055627957, -0.031874854, -0.0052070753, -0.0010783853, 0.01883914, 0.041716788, -0.022660302, -0.012385129, 0.00012163183, 0.00878884, 0.008134285, 0.021398842, 0.050418276, 0.026458895, 0.0028481074, -0.011052822, 0.013959655, -0.006227048, -0.025095029, -0.016274003, -0.026330156, 0.038734928, 0.036177736, 0.012207906, 0.038622495, 0.0005345949, -0.0121297445, -0.02079946, 0.012890152, 0.020553898, -0.10816956, -0.006034673, 0.06508431, 0.007012012, -0.005174734, 0.024731804, -0.041083973, 0.005107387, -0.053061567, -0.012003514, -0.05142393, -0.0599298, -0.015264585, -0.008910054, 0.009398671, 0.0014997079, 0.026846673, 0.0013751502, 0.020648362, 0.03706636, 0.01410344, 0.0048694527, -0.051929686, 0.03945887, -0.0023285598, -0.006288595, 0.022266565, -0.012417732, 0.004455654, 0.028517438, -0.032399, 0.020123169, 0.02184608, -0.008566267, 0.018142788, 0.042894237, -0.068307765, 0.011311341, -0.034436435, -0.003348787, 0.009404522, -0.014916618, 0.012674789, 0.0074136895, -0.0055049895, -0.035574593, -0.015013798, -0.02412323, 0.00461783, 0.028324751, -0.0006718094, -0.022250708, -0.016242655, 0.017453957, 0.0145169785, -0.028640741, -0.05772789, 0.06626301, 0.004041019, 0.05994265, 0.034172274, -0.027913667, 0.069718026, 0.026070591, -0.035096843, 0.0016008588, 0.003734118, -0.020778561, -0.052412033, 0.041442595, -0.00980765, 0.03355659, 0.060430747, 0.028830504, 0.026131196, -0.08733081, -0.0015518508, -0.029622367, -0.041340403, -0.038053624, -0.0072820266, -0.0041947565, -0.00764316, 0.006536352, -0.013383681, -0.02812412, 0.07442029, -0.0042792666, 0.010649264, 0.01028186, 0.0041273315, -0.03560636, -0.015000266, -0.02142225, 0.077988155, 0.010907156, 0.043016706, -0.02037312, -0.0044926447, -0.07967345, -0.010283114, -0.0028231856, 0.03389139, -0.017254164, 0.028171562, -0.013433002, 0.009404522, 0.013038952, 0.061046638, -0.04161313, 0.048788786, 0.013993251, -0.021448372, -0.039048832, 0.027421707, -0.04995683, 0.021372091, 0.0014094244, 0.0023990416, 0.027414393, -0.028236974, 0.06856503, 0.028651193, 0.04257365, 0.019327339, -0.007912861, 0.02441665, 0.039631914, -0.0296464, -0.010672253, 0.013387024, -0.030963033, 0.018132338, -0.0070787324, -0.020499352, 0.02265612, -0.002306825, 0.06348261, -0.0036273245, -0.043252446, -0.04394629, 0.07128795, -0.0144732995, -0.035522345, -0.034985658, -0.017538493, -0.03036804, 0.0004096192, 0.0011995991, -0.0046809446, -0.019053563, -0.08228163, -0.021367075, 0.0061995657, 0.010606003, 0.009987394, 0.016517842, -0.000945259, -0.051166452, -0.027513871, -0.013291307, 0.0259197, 0.060124993, 0.019785443, 0.023086641, 0.006633323, 0.030068977, -0.031801708, -0.012365693, -0.051207002, 0.016726047, 0.05706664, -0.0036343257, -0.00865122, 0.0191242, 0.01891375, 0.004524359, 0.0015820496, -0.019902479, -0.008984036, 0.023485392, 0.03704295, -0.0434397, 0.0056661204, 0.01815355], [-0.050766326, -0.076353386, -0.04335692, -0.04982638, -0.003480367, 0.026202708, 0.009355189, -0.036573384, 0.044673983, 0.038261883, 0.021011692, 0.024814084, -0.06379726, -0.023483388, -0.035020143, 0.047339916, -0.033509888, -0.05911171, 0.03349058, 0.039196152, -0.012018851, -0.014400812, -0.028711323, 0.024461957, 0.0071481555, 0.041768946, 0.020179085, 0.015791, 0.031060344, -0.009200425, -0.017994767, -0.03676904, 0.005793323, 0.005147853, 0.051157642, 0.0006159363, 0.029466689, -0.0053807106, -0.020911876, -0.049965527, -0.07228804, 0.024714125, -0.022990413, 0.045762733, 0.0026466234, 0.056090243, 0.030873489, 0.021908335, -0.025846608, -0.03639732, 0.047348436, 0.00039074614, -0.037246965, -0.0034173247, -0.028184837, 0.03485819, 0.036686976, 0.039826572, 0.03538297, -0.014861984, 0.035969373, -0.004259303, -0.061488822, -0.015210702, 0.02230547, 0.009273405, 0.020479528, -0.017887995, 0.0132603785, -0.03029532, -0.0177054, 0.025153145, 0.012332926, -0.021293392, 0.051887453, 0.019659983, -0.07162013, 0.0061207428, -0.013213808, -0.0201416, 0.0013323989, 0.012281243, -0.0017056807, -0.054699913, -0.068598665, 0.012027548, -0.013844226, -0.0014741011, 0.045844518, -0.0007133389, -0.054622676, 0.016796404, 0.03283105, 0.025435982, 0.0017540869, 0.011745102, -0.006143177, 0.058989037, 0.02720002, 0.014319028, 0.02702732, -0.032795414, -0.04449508, -0.017890267, 0.0034714218, -0.009334743, 0.006997082, -0.027267037, 0.0030539464, -0.015889965, 0.0049144276, -0.009387066, 0.018803913, -0.074037306, 0.00705842, -0.0043498906, 0.02887773, -0.017298467, -0.044588223, -0.02377872, -0.012094956, -0.0061717867, 0.0035584592, 0.022814631, -0.016830482, -0.020041643, -0.0023194873, 0.012353939, -0.0638904, 0.0057816794, 0.033943657, 0.028831158, 0.04956569, -0.0441918, -0.050836187, 0.002601472, -0.021002604, 0.07208812, -0.026186807, 0.02361146, -0.0146529805, -0.009374499, 0.010364854, 0.0039445907, 0.025932368, -0.059468664, 0.03616219, -0.03841353, -0.015169881, -0.0032255014, -0.002881327, -0.0015448104, -0.0061974153, 0.012761724, 0.01935102, -0.052564442, 0.0013085452, 0.025212212, -0.03453503, 0.020208618, -0.018538859, 0.010923853, 0.018751554, 0.020530075, -0.016306268, -0.04860814, 0.01217674, 0.004736661, -0.009509812, 0.04351367, 0.055501856, -0.003915803, 0.016272759, 0.03487466, -0.061836712, 0.00953182, 0.031716317, -0.03795463, 0.03577826, 0.038645104, 0.010748358, 0.019779252, 0.009173447, -0.011951834, -0.005232193, 0.033405956, -0.048031107, -0.040195167, 0.0040051476, 0.009687153, 0.042332344, -0.041806426, 0.010866349, -0.017801384, -0.017783493, 0.041140795, -0.026632074, 0.024804428, 0.028351812, 0.030839412, 0.005252355, 0.0058450056, 0.037759256, -0.042072795, -0.041768946, -0.022939013, 0.032884013, 0.019799128, 0.051546685, -0.046229586, -0.039074045, 0.053600375, 0.027951978, 0.047721006, 0.032384224, 0.026533252, 0.009518189, -0.037379865, 0.022420196, 0.074155435, -0.043452334, 4.373176e-05, 0.018778533, -0.02717503, -0.021692656, -0.00592821, 0.0019230617, 0.011036874, 0.0036131237, 0.011302744, 0.07694064, 0.0047627864, -0.009625531, -0.058636624, 0.0017258959, 0.008661444, -0.059884116, 0.033540558, -0.049206752, 0.041030616, -0.015556012, 0.011726927, 0.02650869, -0.025881253, -0.014372416, 0.015369941, -0.06760817, 0.0063530323, -0.013794389, 0.0017200214, 0.054910056, -0.0072702635, -0.039533906, 0.00020289833, -0.011819219, 0.0023756428, 0.0054908916, -0.0014800645, 0.008991704, 0.020921104, -0.01240619, -0.058857273, 3.4644643e-05, -0.04010827, 0.04627161, 0.021530794, 0.026758159, -0.014043574, 0.009783988, -0.03215591, -0.022327052, -0.06484341, 0.030764442, 0.022185635, -0.016752532, 0.023207366, 0.0147296535, 0.01721725, 0.05936615, 0.034771863, -0.047446124, -0.018447988, 0.0067971656, 0.0046810023, 0.018016351, 0.00505755, 0.0061871926, -0.043097936, 0.007346084, -0.029513258, -0.011969441, 0.017265031, 0.026530415, 0.039663006, 0.037995517, -0.055031598, 0.055458687, -0.027208539, -0.039300654, -0.03873839, 0.031141559, -0.009415959, 0.009516486, 0.019051146, -0.013907269, -0.020566424, -0.063237265, 0.036059678, 0.03051909, 0.01601548, -0.023805982, -0.017666496, -0.064820126, 0.010684748, 0.02335844, -0.030730082, 0.041688297, 0.10040358, -0.006966129, -0.0028397248, -0.028218912, -0.02737949, -0.007435535, -0.06922568, 0.002775831, 0.05486689, 0.027234666, -0.01629292, -0.03614572, -0.0066392766, 0.05683312, 0.029402794, -0.017133763, -0.0050348323, 0.029235536, 0.016433487, -0.025649104, 0.011722384, 0.025824457, 0.017942516, 0.02043466, -0.06776549, -0.021489335, -0.0012006357, 0.04371359, -0.0828352, -0.02546211, -0.07064327, -0.000918651, 8.97353e-05, 0.022492891, -0.033195816, 0.009471902, 0.014559269, -0.007235619, 0.009486953, 0.0006542726, -0.0085475715, -0.0045864396, -0.014723404, 0.011513811, -0.019092606, -0.045179453, 0.044255406, 0.0036910742, -0.030382784, 0.06664039, -0.022447458, 0.050319925, -0.038013693, 0.06876961, 0.014061749, -0.022651918, 0.017329136, 0.0053270394, 0.04285031, -0.051760234, -0.0036073024, 0.030131752, 0.015834305, 0.009630075, -0.015494106, 0.048674017, 0.011062716, 0.060717862, 0.03693005, 0.031626586, 0.035915703, -0.01818503, 0.049273204, 0.016129637, 0.0059509273, 0.035688527, -0.0022024906, 0.0075477045, -0.01938538, 0.04946119, 0.036674906, 0.004468094, -0.00033167985, 0.0071785403, 0.018821837, -0.021756835, -0.023113089, -0.013929418, -0.043059316, -0.057548728, 0.01807712, -0.013752929, 0.04941803, 0.06149708, -0.024412546, -0.013955544, 0.03369504, 0.02775263, -0.024142206, -0.044284374, 0.044453055, -0.0057816794, 0.014248604, 0.023249963, 0.04884781, -0.04753188, 0.033756945, 0.019670205, -0.003024875, -0.021367794, -0.030332804, -0.051628467, 0.04745521, -0.013032066, 0.005408753, -0.019073864, 0.088276826, 0.04320471, 0.006337698, 0.017618788, -0.03128695, -0.06716063, -0.011172614, -0.031258557, -0.030062463, 0.010869615, 0.013234964, -0.037568707, -0.008920809, -0.030850416, 0.048638806, 0.03538297, -0.011876865, 0.0061071124, -0.01624209, -0.026309483, -0.031477217, -0.05152851, 0.055195164, 0.07764944, -0.055368386, -0.018948916, -0.057866774, -0.042242613, -0.012549312, 0.033422, -0.017215263, 0.013522379, 0.028883409, 0.032845393, -0.033052124, 0.0020599363, 0.01793769, 0.008175568, -0.03460659, -0.020041643, -0.049441315, -0.008662296, -0.011183759, 0.06868045, 0.018332696, -0.009627235, 0.026407454, 0.035322484, 0.013932116, 0.00646293, 0.016563848, 0.028784588, 0.0067926217, -0.033663236, -0.012130168, 0.018020397, 0.0031929156, 0.008492977, 0.011683764, 0.015189262, 0.056308337, -0.03581461, -0.013565933, 0.018408231, 0.053110234, -0.047268923, 0.004571105, 0.026991015, 0.050651602, -0.05312784, 0.026541203, -0.014482596, -0.079407796, 0.028787995, 0.06998218, -0.028576719, -0.010111691, -0.03278633, -0.0153560955, -0.016517542, -0.029162839, 0.07066552, 0.026585504, 0.0016975875, -0.034356695, -0.027763989, -0.036645513, -0.014556429, -0.002942523, -0.0017254167, 0.033817716, 0.020460786, -0.025911354, 0.03464294, -0.033789318, 0.0070851133, -0.0047786892, 0.009388698, -0.048721723, -0.046870228, -0.015765868, 0.004218127, 0.011344132, 0.02698193, 0.015370294, 0.006057417, -0.02045894, -0.021604626, 0.0016020307, 0.016827641, 0.009345818, -0.020516444, -0.006757693, -0.014263654, 0.005576084, 0.026521327, -0.031963944, -0.0023808253, 0.011642872, -0.08531896, -0.06372343, 0.064259104, -0.0067957453, -0.007308884, 0.028697053, 0.035234172, 0.042918466, 0.0056158397, -0.008199989, 0.02116447, 0.039104145, 0.01372439, 0.049961835, -0.0030067007, -0.07439398, -0.057603247, 0.020755406, -0.029669445, -0.029042434, -0.039161507, -0.0391422, 0.011707334, -0.018936278, 0.0069705304, -0.025453022, 0.007845592, -0.017424267, 0.006988847, 0.013657656, -0.00856461, -0.019037515, 0.026220884, 0.019875519, -0.006406987, -0.0032009378, 0.047162153, 0.010475461, 0.031607274, -0.016010368, 0.06343718, 0.023153981, -0.035435222, -0.0053261877, -0.035773825, 0.012031347, 0.0070794164, -0.013639766, -0.033005554, -0.07884553, -0.0068965554, -0.0018111765, 0.0067664967, -0.00449358, -0.007794477, 0.050033677, 0.0009298679, 0.013741136, -0.017344471, 0.0048865983, -0.042044967, -0.02048691, 0.0012636776, 0.0033488877, -0.038265858, -0.005219414, -0.023586754, 0.003725151, 0.0146291265, -0.011162391, 0.015686711, 0.03275083, -0.025109982, 0.0348332, 0.0019173822, 0.06915411, 0.01712922, -0.0063939244, 0.033776823, 0.0071947267, 0.07034339, -0.020016937, -0.06467303, 0.093516685, 0.0014096394, -0.038953215, -0.01995077, 0.010373373, 0.008140355, 0.042309627, 0.016614094, 0.0025421218, 0.002980575, 0.017009951, 0.0032128645, -0.0009954656, -0.030362338, 0.02263715, 0.040356606, -0.008192038, 0.012417548, -0.06520008, 0.04218241, -0.00014369008, -0.0061793476, -0.020950353, -0.019637266, -0.036163326, 0.03358145, -0.045871496, 0.0040290016, 0.018410504, 0.0019153944, -0.014438013, 0.05574493, -0.011177157, -0.0094949035, -0.011246588, 0.039329052, 0.013471656, 0.017473679, -0.014696144, -0.009809049, -0.0046855463, -0.041941598, -0.022836037, 0.004239141, 0.029354801, -0.029272452, -0.032021873, -0.0019798563, -0.028379925, 0.03151867, 0.005831659, -0.0011736583, 0.025139516, -0.045889385, -0.04250699, -0.021875253, 0.03244783, 0.0036552937, 0.000918367, -0.019793734, -0.007669529, 0.03977631, 0.015517392, 0.055825584, 0.01386013, 0.03482326, 0.033482626, -0.0027164808, 0.02556292, -0.009885082, -0.024832258, 0.036191724, -0.01944743, -0.043704502, -0.061224464, -0.02205089, 0.028387593, 0.007475292, 0.029470665, 0.03655748, 0.004425995, 0.04209388, -0.039622113, 0.007286166, -0.009553828, 0.0012222176, 0.027719121, -0.07114306, -0.026230538, 0.041336168, -0.014836995, -0.018453952, -0.03757013, -0.021480247, -0.002922077, -0.0058839098, -0.018921655, 0.019780388, 0.0242734, 0.024786254, 0.00965762, -0.029886398, -0.037636578, 0.006040663, 0.027884962, 0.011082877, -0.024128573, 0.02152781, -0.014510426, 0.012212357, -0.058034886, -0.027036453, -0.02204535, 0.039115503, 0.0024680048, -0.00053273235, 0.05603345, 0.010552133, -0.0031191537, -0.0042618588, -0.036664255, 0.025026496, -0.03816136, 0.01678107, 0.0039281915, -0.0033434918, -0.06780865, -0.0036825552, 0.0063013495, -0.007904135, 0.005954335, -0.03786262, 0.016669469, 0.009394946, 0.005908332, 0.00037257187, 0.009506263, 0.0029181014, -0.01789708, 0.020570008, 0.010247786, -0.09308845, -0.03481162, 0.0014823363, -0.051001456, -0.05777704, -0.044013463, 0.0197713, -0.005421886, -0.039085973, 0.043471646, -0.018728552, -0.0065370467, 0.017717043, -0.065141015, 0.015786598, 0.0015845664, -0.027899727, 0.02099579, -0.024744226, 0.042898018, 0.016629996, 0.04579908, -0.024248978, 0.0015030663, 0.0049107363, 0.00020446019, 0.037879232, 0.017434774, 0.012827321, -0.0048729675, 0.0013406251, 0.0021195705, -0.035167154, -0.048007254, -0.022615, 0.0066915276, 0.0006957326, 0.0048252605, 0.036181502, 0.010741259, -0.005053006, 0.018520685, 0.011004502, -0.0080491295, 0.035560455, 0.05208282, 0.003232743, 0.014034204, -0.0044367863, 0.014746549, 0.011093811, -0.0014459878, -0.015064172, -0.0025929527, 0.033792727, 0.024378471, 0.0054886206, 0.050677728, -0.007015824, 0.00053273235, -0.012424365, 0.0042016567, 0.009768689, -0.07736774, -0.018749567, 0.063237265, -0.00685396, 0.024862358, 0.029156022, -0.022206081, 0.014867096, -0.06555902, -0.013831447, -0.06652453, -0.031657252, -0.024952095, -0.016341481, -0.020927139, 0.008173296, 0.012508419, -0.0027759376, 0.05086957, 0.027580544, 0.009348374, 0.010538787, -0.039110962, 0.045917217, -0.017122405, 0.007317403, 0.0201416, -0.0067639495, -0.001909431, 0.04452007, -0.051955603, 0.013402365, 0.008060275, -0.025884872, 0.010307065, 0.024992844, -0.056342416, 0.0053148293, -0.025031323, -0.0051455814, 0.04336984, -0.018445717, 0.03669194, 0.028936798, -0.0166317, -0.021311568, -0.008763959, -0.027872466, 0.014126069, 0.035303175, -0.0082193, -0.006755705, -0.032007106, 0.007441215, 0.025076615, -0.02187639, -0.05826207, 0.047631696, 0.008424328, 0.056433283, 0.027048662, -0.054155823, 0.06500471, 0.01211746, -0.026294716, 0.011386161, 0.008546436, -0.04134412, -0.058457438, 0.009650521, -0.009566464, 0.041611057, 0.04065293, 0.025130428, 0.0061786734, -0.06547383, -0.028099647, -0.012723955, -0.050038222, -0.047113307, -0.030711055, -0.0043498906, 0.014879023, 0.03551814, -0.00017577897, -0.02833591, 0.048693758, -0.0064745722, 0.0043396675, 0.01890916, 0.0065279594, -0.031166548, 0.001227897, -6.81534e-06, 0.06851347, -0.0004708397, 0.04291101, -0.038272675, 0.030780273, -0.054622676, 0.020889016, -0.0038949666, 0.012282378, -0.037675764, 0.03433966, -0.021171853, 0.018154928, 0.0029770965, 0.051951062, -0.009785692, 0.026777469, 0.005721478, -0.0514649, -0.017376844, 0.042426627, -0.037551668, 0.036636107, 0.012771946, 0.0100406995, 0.03732875, -0.012415277, 0.08224752, 0.023033576, 0.044056848, 0.012390003, 0.0011719544, 0.020150688, 0.044292327, -0.020979887, 0.0036632451, 0.014093554, -0.033461045, 0.02826719, -0.0074344, -0.0001351709, 0.0033681977, -0.011490663, 0.0679353, -0.036610868, -0.060679242, -0.04912497, 0.05703531, -0.018543404, -0.02484873, -0.026034597, 0.013991891, -0.012924155, -0.00899852, 0.016409066, -0.015718728, -0.013429059, -0.05578355, 0.0066923797, -0.01040248, 0.016512431, -0.0020684912, 0.030924033, 0.0093158055, -0.036213875, -0.033437192, 0.004713624, 0.018304015, 0.062392164, 0.016320467, 0.025357606, 0.02692201, 0.019759942, -0.0054220287, -0.010802313, -0.051983718, 0.0240661, 0.058087707, 0.016674863, -0.021243414, -0.0002464881, 0.012842371, -0.014624583, 0.008996106, 0.009298963, 0.005471582, 0.023940017, 0.026108997, -0.046221636, -0.0024660171, -0.007257485], [-0.03346905, -0.07741813, -0.037291165, -0.061201368, -0.015184571, 0.010594849, 0.031065669, -0.030911626, 0.046450164, 0.0456592, 0.0036133928, 0.017409215, -0.07352304, -0.026631655, -0.039845265, 0.030793954, -0.02914154, -0.04672022, 0.02231175, 0.033608597, -0.015464371, -0.0045043794, -0.027988106, 0.03435766, -0.0047164285, 0.045812115, -0.0071136295, 0.017813552, 0.03546355, -0.010446033, -0.02097099, -0.03724077, 0.0033733814, 0.010078871, 0.039543178, 0.007002375, 0.024776466, -0.003067105, -0.032811508, -0.044583503, -0.06969474, 0.018973166, -0.0013369553, 0.032847643, 0.0072876434, 0.051616367, 0.031952377, 0.025343196, -0.0017344286, -0.034236897, 0.045787394, 0.0046660313, -0.024943821, 0.009222472, -0.03058642, 0.031742897, 0.025052223, 0.043133453, 0.040943544, -0.030791814, 0.029921746, -0.015106122, -0.057770547, 0.0025581098, 0.023451872, 0.028367037, 0.0020491742, -0.003098009, 0.030118583, -0.057487182, -0.013423755, 0.023774698, 0.0030230072, -0.018174415, 0.06919457, 0.0047069197, -0.07629727, 0.0090653375, -0.019603608, -0.03200135, -0.017429866, 0.024392305, 0.009396426, -0.041784074, -0.07535446, 0.02432384, -0.02376733, 0.007933774, 0.05052664, 0.0022783394, -0.059856806, 0.001516793, 0.024387551, 0.020064672, 0.0034041966, 0.019907834, -0.0031265358, 0.06570289, 0.035396036, 0.034701645, 0.036302, -0.053202454, -0.02304584, -0.015666911, -0.025978394, 0.010427016, 0.015688783, -0.03996888, 0.004095971, -0.010322893, -0.0045585805, 0.0025987902, 0.016042514, -0.07239718, 0.0031980902, -0.009000202, 0.03320518, -0.028355626, -0.049849607, -0.03138517, -0.0071916026, 0.018442567, 0.02397819, 0.024956185, -0.02012232, -0.018936556, -0.0060790577, 0.011262435, -0.05483205, 0.025154918, 0.04125306, 0.02321088, 0.054122917, -0.03363118, -0.053634163, 0.016100876, -2.2345983e-05, 0.06161786, -0.008849961, 0.04532431, -0.01910201, 0.011309921, 0.011157777, -0.0054153353, 0.02919764, -0.044118103, 0.025107376, -0.060100235, -0.012350197, -0.010858246, -0.021601435, -0.0075272685, -0.0063343733, -0.0028428056, 0.025242878, -0.05981211, 0.007402226, 0.008230453, -0.03389933, 0.018395616, -0.013282072, 0.00779542, 0.012731505, 0.023873592, -0.014458802, -0.04915831, 0.017030135, 0.0035452854, -0.02515088, 0.048982393, 0.058809873, -0.017708953, 0.013913465, 0.023753779, -0.05940418, -0.0028993615, 0.018512132, -0.033338305, 0.015144872, 0.04321808, 0.0038620513, 0.016806556, 0.0074085253, -0.00930734, -0.0145068215, 0.03295795, -0.03889342, -0.036073547, 0.005254634, 0.028971566, 0.043797173, -0.039830048, 0.020072399, -0.004357229, -0.025379332, 0.039698828, -0.03786646, 0.008338141, 0.021185596, 0.047416277, 0.0026853215, 0.0072410493, 0.028576232, -0.03262846, -0.039636068, -0.039603025, 0.029955503, 0.01126808, 0.04123642, -0.028674887, -0.0011482032, 0.038867746, 0.032999787, 0.048597284, 0.030857425, 0.021218223, 0.0057486375, -0.052196413, 0.020823365, 0.069129914, -0.041702356, 0.0014712691, 0.031050457, -0.0359365, -0.015116344, 0.0037134744, -0.0035380346, 0.0045110956, 0.0026510893, 0.005470011, 0.07865406, -0.011308018, -0.017019112, -0.059974715, -0.022956455, 0.011921819, -0.059001476, 0.022230925, -0.034527496, 0.029728716, -0.018017517, 0.013651018, 0.00090810267, -0.029753914, -0.009610674, 0.015144872, -0.04805432, -0.012078717, -0.0021801598, 0.005217549, 0.04908509, -0.0007802076, -0.042024475, 0.0073912903, -0.013167014, 0.0073936675, 0.008462471, 0.0041533513, 0.01356532, 0.033293612, -0.004792025, -0.035403956, -0.0016307812, -0.05123696, 0.04128468, 0.00891367, 0.017261084, -0.0039057927, 0.031147448, -0.030540539, -0.021846289, -0.07817481, 0.03979867, 0.016913056, -0.038046177, 0.032668997, 0.035466403, 0.0048245927, 0.052922893, 0.03433199, -0.06668041, -0.01615472, -0.00954744, 0.014894786, 0.013446636, 0.013744205, 0.009690549, -0.05162112, 0.0014534397, -0.03393927, -0.009250167, 0.013701416, 0.026052326, 0.03054363, 0.03485403, -0.03435053, 0.04178033, -0.018293276, -0.033991568, -0.028483758, 0.036458187, -0.0025167756, -0.0029011744, 0.021956116, -0.012162871, -0.0074755037, -0.08043223, 0.03724267, 0.025478225, -0.0035104142, -0.019603608, -0.036114912, -0.06969284, -0.0035977033, 0.018255241, -0.034998562, 0.03917679, 0.083701394, -0.019261286, -0.009389116, -0.0226845, -0.030154714, 0.010865853, -0.061421975, 0.0028222764, 0.050118234, 0.033486646, -0.0010935268, -0.04356801, -0.0067751114, 0.044372465, 0.021263868, -0.022882523, -0.00470169, 0.02406805, 0.009541883, -0.017075183, 0.015357871, 0.023884052, 0.021124085, 0.015804553, -0.065417625, -0.013553076, -0.0047652805, 0.045247287, -0.06995529, -0.015712874, -0.07108875, 0.004395502, 0.004442096, 0.020791747, -0.04010296, 0.011046523, 0.020393323, -0.0062635313, -0.001095904, -0.00011172992, -0.007190652, -0.013776536, -0.008387825, 0.009184912, -0.014555317, -0.05548561, 0.043321725, 0.019716287, -0.022031238, 0.060264736, -0.022607002, 0.041287772, -0.03089974, 0.05360373, 0.0077245785, -0.025826488, 0.022315554, -0.0115020005, 0.044675797, -0.04480227, -0.008193368, 0.03671968, 0.009945626, 0.01868552, -0.018305877, 0.05935545, 0.023986273, 0.061376333, 0.035639465, 0.033695366, 0.03166711, -0.016181344, 0.046289466, 0.0117894085, -0.0031591037, 0.034241654, 0.0022517142, 0.0116360765, -0.013833114, 0.047270786, 0.037376747, 0.018140659, 0.014049917, 0.006573523, 0.025440188, -0.014676556, -0.01445072, -0.003573931, -0.037300676, -0.077391274, 0.020797454, -0.013587784, 0.048434682, 0.043030236, -0.01127854, -0.03068151, 0.025805332, 0.030834602, -0.025850974, -0.03970477, 0.029598441, 0.005603612, 0.010786929, 0.0114943925, 0.055566378, -0.040387273, 0.034186203, 0.016266448, 0.0020099645, -0.046683136, -0.020799119, -0.049583357, 0.060640343, -0.0023829376, 0.02041139, -0.01748692, 0.091958955, 0.045691352, -0.0088765845, 0.012330823, -0.02519343, -0.06827791, -0.02118922, -0.02360639, -0.03329076, 0.001912513, 0.015980706, -0.024652611, -0.0046325126, -0.011036018, 0.023401, 0.022678558, -0.021159267, 0.016265973, -0.0024773136, -0.037820812, -0.040826585, -0.05917216, 0.029924123, 0.06492697, -0.05887263, -0.036556125, -0.04278685, -0.041772723, -0.011588532, 0.041017685, -0.008345511, 0.023912579, 0.00019152691, 0.03467336, -0.038291506, -0.003178835, 0.006349112, -0.009593736, -0.031338576, -0.02036147, -0.039281383, -0.00043978795, -0.0019143851, 0.05713725, 0.021648027, 0.007243129, 0.027264953, 0.04214357, 0.0038035717, 0.0072862166, 0.020829784, 0.03689512, 0.023042036, -0.02844691, -0.018979821, 0.008503597, 0.0062946733, 0.012093203, 0.029482434, 0.013841673, 0.065178, -0.040335212, -0.018885208, 0.010649525, 0.061518017, -0.043626968, 0.008626025, 0.048666697, 0.043671656, -0.048602037, 0.022104457, 0.010883118, -0.06698089, 0.025519112, 0.057266574, -0.033532284, 0.013285668, -0.03229898, -0.032687895, -0.020307982, -0.026084894, 0.04426977, 0.044390533, 0.014227259, -0.03437668, -0.021203961, -0.033109855, -0.012688715, 0.0034156074, -0.010323131, 0.03776186, 0.03134428, -0.036902253, 0.044673897, -0.0369536, 0.020886123, -0.0077331364, -0.014066558, -0.05712596, -0.030973433, -0.006604902, 0.008352168, 0.0025460157, 0.035202056, -0.0018953672, 0.01808218, -0.009295928, -0.020217884, 0.0041325805, 0.008902616, 0.0029521657, -0.021913564, 0.00024889622, -0.019063262, 0.0251321, 0.024037978, -0.032440662, -0.008101608, 0.014521434, -0.08688879, -0.060433045, 0.081927024, -0.002332778, -0.0052403705, 0.023361538, 0.04808713, 0.038849678, -0.006075492, -0.0074126855, 0.015448205, 0.018766467, 0.019156212, 0.033499006, -0.0024209733, -0.08111116, -0.048995707, 0.014749418, -0.03517923, -0.039460152, -0.044585466, -0.030445095, 0.0109221935, -0.0034921542, 0.01393177, -0.047595516, 0.015335525, -0.039007053, -0.006417695, 0.007236295, -0.008259456, -0.023101468, 0.014154991, 0.025418198, 0.0025626563, 0.004117604, 0.044831745, 0.0029442022, 0.027131826, -0.020335319, 0.044851717, 0.020419473, -0.022536993, -0.010130813, -0.042538103, 0.011543363, -0.008479349, -0.0012475714, -0.021676553, -0.08464849, -0.006596715, 0.0008729197, 0.013279932, -0.004784893, -0.011185116, 0.05237138, -0.00061011664, -0.0010069956, -0.014856038, 0.017938593, -0.025508298, -0.017601978, 0.0095146345, 0.013602434, -0.046960797, -0.013996193, -0.005789868, 0.008648133, 0.025501044, -0.01439937, -0.0055724406, 0.027611107, -0.026707252, 0.024341907, 0.004429705, 0.07292968, 0.025611468, -0.0018592332, 0.04974311, -0.0024979955, 0.0661365, -0.021389978, -0.06639514, 0.082001194, 0.0036129176, -0.03707864, -0.012774603, 0.013709023, 0.020136701, 0.033483792, 0.015355019, 0.008715681, 0.002230557, 0.005549886, 0.0061380137, 0.005730081, -0.035394136, 0.025253812, 0.035896085, 0.011376482, 0.005448616, -0.0582555, 0.036583822, -0.008586562, -0.003160768, -0.005520884, -0.014105589, -0.02973561, 0.03522963, -0.047407717, 0.023249332, 0.021307131, 0.011470621, -0.013480808, 0.060862374, 0.004981728, -0.025561903, -0.0054849875, 0.053879492, -0.0033775715, 0.020462263, -0.019530984, -0.02011186, -0.016242439, -0.030101465, -0.021977391, 0.012860455, 0.028718866, -0.05125408, -0.024074825, -0.0028997478, -0.010490487, 0.036814768, 0.007414944, 0.0012886976, 0.02929129, -0.04634462, -0.042603806, -0.033633083, 0.017825438, -0.009385313, 0.001534741, -0.013991438, 0.0046068383, 0.049416002, 0.017121777, 0.047315273, 0.0032743998, 0.043297954, 0.043704942, 0.0006970045, 0.029506205, -0.010146265, -0.03418044, 0.02839018, -0.022610333, -0.04360034, -0.07186468, -0.011344152, 0.023933023, 0.0037685074, 0.032451596, 0.029450104, 0.017172175, 0.030273577, -0.026992043, 0.001321741, -0.010514854, 0.0037195957, 0.014284788, -0.050261345, -0.017917674, 0.030766614, -0.038940966, -0.0167205, -0.03733966, -0.011946305, 0.0018444945, -0.010092777, -0.033167142, 0.019910151, 0.014836782, 0.02047082, -0.004469197, -0.04597757, -0.044370506, -0.0029439644, 0.034795072, 0.0052479776, -0.026529912, 0.008771512, -0.0065457085, -0.009434046, -0.05291909, -0.022977374, -0.01955012, 0.027655173, -0.0057861833, -0.0036856607, 0.048889205, 0.018011456, 0.0023401473, -0.021365613, -0.040526103, 0.02884296, -0.04559032, 0.016798474, 0.01631086, -0.010433197, -0.07639093, -0.028696995, 0.0126887895, -0.0131898355, 0.0027592534, -0.03414252, 0.023933023, 0.0073715593, 0.012169528, -0.003373768, 0.010659984, -0.009895408, -0.04625809, 0.018771576, 0.00025305635, -0.09963076, -0.03721319, -0.0028472408, -0.03816266, -0.058175623, -0.021474015, 0.017842554, -0.01364151, -0.040744808, 0.054170467, -0.024370434, -0.006032405, 0.0048001073, -0.073185235, 0.0149247395, -0.01101027, -0.046224326, 0.011458497, -0.030796567, 0.030316366, 0.013998094, 0.044853617, -0.01773332, -0.012443623, 0.0064868126, 0.022246733, 0.016835202, 0.03957331, 0.0059480728, -0.01372709, -0.0027941987, 0.0037869308, -0.045150295, -0.06118425, -0.017144598, 0.024559187, -0.013383342, 0.01156999, 0.03860958, -0.0034232144, -0.017919578, 0.022265157, 0.025519112, 0.0037629209, 0.014489705, 0.04785416, 0.016555995, 0.0014268147, 0.0011189631, 0.01279783, 0.029673802, -0.0071564196, -0.0068140985, -0.01035142, 0.024037622, 0.020968853, 0.021316642, 0.04464157, 0.0053533483, 6.870201e-05, -0.0036171963, -0.0060904687, 0.018952722, -0.08063572, -0.016430002, 0.05794361, 0.0069629136, 0.024960939, 0.020154174, -0.00828608, 0.020183653, -0.066684216, -0.011438291, -0.07945709, -0.042813, -0.026410159, -0.021033037, -0.0069650523, 0.024289608, 0.028571716, -0.019526584, 0.033449322, 0.016395295, 0.013601572, 0.019145276, -0.035225827, 0.062977634, -0.025192719, 0.01169099, 0.036849003, -0.0014448817, -0.003825561, 0.04274311, -0.026339406, 0.018478703, 0.012022851, -0.017437473, 0.009914247, 0.048090454, -0.05773441, 0.0039502024, -0.02681518, -0.0049760225, 0.030429285, -0.02407423, 0.046898037, 0.028852943, -0.029011743, -0.025167163, -0.021688202, -0.023468034, -0.00033946877, 0.032718323, 0.007379404, -0.0069377143, -0.025097867, 0.01413217, 0.037720017, -0.027235, -0.05472579, 0.06479955, 0.004618487, 0.04686951, 0.053158715, -0.05575275, 0.04632239, 0.009279526, -0.02728492, -0.009090536, 0.008169121, -0.038624793, -0.065713115, 0.0111275865, -0.00518617, 0.05006641, 0.053191047, 0.017977996, 0.006884346, -0.057570677, -0.028702477, -0.008408271, -0.035965323, -0.04422983, -0.010687086, -0.004326087, 0.003667594, 0.024453161, -0.010943826, -0.051085766, 0.06830549, -0.002204883, 0.0012285536, 0.03480892, -0.008227601, -0.023887143, -0.00079827453, -0.015328392, 0.04468911, 0.008759625, 0.03985179, -0.02666565, 0.014825847, -0.05000175, 0.014566371, 9.5089286e-05, 0.028990824, -0.032898843, 0.010975205, -0.021495054, 0.004659375, 0.0051169624, 0.04701238, -0.026759077, 0.015348362, 0.0071863728, -0.04006397, -0.020749196, 0.023040611, -0.030400997, 0.04101201, 0.0010003393, -0.0007827632, 0.040867474, -0.006428987, 0.08609384, 0.033107236, 0.036567774, 0.015264683, 0.005962217, 0.018915636, 0.036609378, -0.025182972, -0.0017073281, 0.0055769864, -0.037460424, 0.016663447, 0.0009432857, -0.012083948, 0.014204438, 0.013493526, 0.06637042, -0.01957508, -0.05577462, -0.06735079, 0.044440933, -0.010904839, -0.0323199, -0.0069211926, 0.0020729464, -0.010059971, -7.512054e-05, 0.016786825, -0.007446561, -0.010683519, -0.064778626, -0.00023011607, 0.00406269, 0.0087810205, -0.0064384956, 0.028906073, 0.001123896, -0.037360583, -0.020706644, -0.0010402768, 0.028367037, 0.054716278, 0.02325884, 0.0160166, 0.03062731, 0.026782136, -0.007227737, -0.0072101457, -0.04937939, 0.046389308, 0.06291416, 0.017691838, -0.016827, 0.008267538, 0.009103789, -0.013948172, 0.013599283, 0.006871152, -0.00050492416, 0.042980358, 0.028611269, -0.054543212, 0.011077664, -0.0092655], [-0.06010864, -0.06724806, -0.064595535, -0.022754192, 0.0028776827, 0.008796764, 0.0060561537, -0.03532026, 0.03210698, 0.063727975, -0.010318967, 0.027980171, -0.075480625, -0.019158162, -0.02140967, 0.025469234, -0.011125723, -0.060965452, 0.03592914, 0.0152680045, -0.017972304, -0.022744738, -0.030313104, 0.0042608785, -0.012514075, 0.045437913, 0.019159773, 0.015711023, 0.023672884, -0.018891213, -0.01634053, -0.030467257, 0.0048830803, 0.012410517, 0.024014924, -0.0074977344, 0.01562895, 0.008831998, -0.031745177, -0.02740886, -0.0666873, 0.033849835, -0.0070340377, 0.040510144, -0.010449379, 0.050006453, 0.016509078, 0.028388383, -0.012983304, -0.040759366, 0.03115155, 0.014385836, -0.028039468, 0.0007201727, -0.005902322, 0.026958348, 0.04605152, 0.019256378, 0.02381898, -0.031403568, 0.012248091, -0.025508873, -0.08725262, -0.012768751, 0.009061457, 0.02559884, 0.012076213, -0.007447084, -0.0023580713, -0.06290081, -0.012642232, 0.0034328518, 0.0167496, -0.028000796, 0.055922523, 0.033194546, -0.07819825, -0.0059289634, -0.03928975, -0.0053252387, 0.010962653, 0.027402658, -0.011993818, -0.054285377, -0.03305103, -0.0042218026, -0.021539437, -0.029438347, 0.03648517, 0.0026830838, -0.047063883, 0.0067647244, 0.02032393, 0.026419507, 0.01571532, 0.037627734, 0.013071285, 0.06428959, 0.010114215, 0.019959439, 0.03825939, -0.037013266, -0.021370135, -0.02302415, 0.007744112, -0.0016620692, 0.0021198043, -0.032416362, -0.018879717, 0.0045530726, -0.023617988, -0.008584493, 0.033143412, -0.039982475, 0.014367359, -0.024450637, 0.029203463, -0.0008993968, -0.038900927, -0.0115037495, -0.006285021, 0.00030938207, 0.008694281, 0.032022763, -0.019217782, -0.0145028215, 0.0069963317, 0.0012317273, -0.053383015, 0.020175174, 0.04352576, 0.02510571, 0.02488291, -0.020886727, -0.025115808, 0.012051291, -0.007749161, 0.065276176, -0.0076065017, 0.031750333, -0.010907222, 0.030879652, 0.02013132, 0.0015030812, 0.025451832, -0.053629663, 0.008051185, -0.045757607, -0.027642239, -0.0026942021, -0.0063358867, -0.02139248, -0.007280791, 0.019248292, 0.022135695, -0.03864504, 0.021413537, 0.031236418, -0.04118563, 0.018022364, -0.022167224, 0.01768849, 0.013192567, 0.012087385, 2.7500628e-05, -0.07464014, 0.018176196, 0.011437683, -0.036741696, 0.017686717, 0.07748818, 0.009750691, 0.024682673, 0.012253463, -0.06903431, -0.0066689025, 0.042794414, -0.028635029, 0.029267542, 0.025282528, 0.0115104085, 0.0018348076, 0.014804792, 0.018547455, -0.0038019617, 0.03497564, -0.016172731, -0.0053445753, -0.0062656584, 0.018911287, 0.033293806, -0.02952966, 0.013184188, -0.013327492, -0.023632491, 0.03632661, -0.02484381, -0.0048633143, 0.032750238, 0.051754463, 0.023559874, 0.008037703, 0.029237196, -0.03411453, -0.04187485, -0.033236228, 0.034029447, 0.008931849, 0.0441428, -0.0307775, -0.011067283, 0.030148422, 0.025668612, 0.029457148, 0.029681772, 0.042055335, 0.02858948, -0.02600442, 0.03525333, 0.06482241, -0.031764943, 0.020988995, 0.038868267, -0.039194517, -0.028821947, 6.8751564e-05, -0.010508677, 0.008775279, -4.748155e-05, -0.011299212, 0.07061431, 0.0037480348, -0.015182065, -0.066764645, -0.003203823, 0.015703289, -0.032127824, 0.035092518, -0.045534167, 0.017170705, 0.009076926, 0.017798921, 0.0379629, -0.044410933, -0.005529184, 0.0036575834, -0.06452678, -0.023244692, -0.014044012, 0.0032233475, 0.07606673, 0.015919857, -0.008509725, -0.013896411, -0.02450263, -0.0060447664, 0.006030372, 0.009254337, 0.02702672, 0.051201012, -0.0039815754, -0.048650328, -0.027985327, -0.06181647, 0.03560128, -0.010420159, 0.020850632, -0.036052033, 0.022429341, -0.037074715, -0.028683154, -0.05353341, 0.021231344, 0.009113988, -0.042932346, 0.030211642, 0.020891452, 0.0047971406, 0.04381194, 0.009968011, -0.07292651, -0.02187033, -0.013964517, 0.0023633353, 0.02074235, 0.002025808, 0.01960365, -0.04024029, 0.0022536549, -0.018635113, -0.016937379, 0.01130018, 0.025173709, 0.029104259, 0.027510941, -0.0369226, 0.041546144, -0.032126963, -0.040972497, -0.033586, -0.009150189, -0.00421576, 0.008271673, 0.012163442, -0.00076142367, -0.041628644, -0.043506853, 0.036443487, -0.0009242789, 0.032132763, -0.032589965, -0.021428576, -0.046869665, 0.013528375, 0.018438311, -0.02913262, 0.04254519, 0.09018122, -0.0056488006, -0.021679088, -0.0030439757, -0.0131425075, -0.01814483, -0.06656355, 0.022596061, 0.063993104, 0.0156948, -0.0038625489, -0.045816045, -0.035709567, 0.051567115, 0.04764226, -0.007868617, -0.004487705, 0.036300827, 0.008662268, -0.023927694, 0.021271735, 0.02590946, 0.022929722, 0.014171354, -0.039391212, -0.011231429, -0.011712796, 0.037429214, -0.06719606, -0.017973809, -0.08527944, -0.0026502789, 0.018527366, 0.0047801677, -0.011572608, 0.007258447, 0.0032231594, -0.0097378, 0.017203577, -0.0041757985, -0.0058546257, -0.029320827, -0.009392431, 0.011497733, -0.02539941, -0.015525823, 0.03988708, -0.009698268, -0.023672884, 0.06671652, -0.00928694, 0.069267206, -0.03662396, 0.05631441, 0.016612956, -0.015014591, 0.021112317, 0.01178853, 0.047035526, -0.058363207, -0.00053067616, 0.020473788, -0.0013266904, 0.02552402, -0.015816728, 0.05335036, 0.03734757, 0.033284783, 0.066716954, -1.7187892e-06, 0.028967615, -0.024730153, 0.052613858, 0.014230608, 0.014363922, 0.04166861, 0.0059403502, 0.0046029175, -0.0026396306, 0.048915237, 0.037628595, 0.020842899, 0.016273497, -0.0070547704, 0.0123539055, -0.028265327, -0.0057467716, 0.015789013, -0.023413345, -0.026010865, 0.02100747, -0.019901002, 0.060877793, 0.06069732, -0.0038836044, -0.029680697, 0.041223012, 0.039595746, -0.016118053, -0.039047454, 0.045341767, 0.008133525, 0.023609074, 0.021697994, 0.03276528, -0.051181033, 0.023113849, 0.019247537, 0.0030346566, 0.017110735, -0.04298391, -0.028687451, 0.053356376, -0.012509348, 0.0043502557, 0.0011947734, 0.089328915, 0.038897917, -0.03502033, -0.010719229, -0.019749317, -0.07195453, -0.013344679, -0.023305923, -0.03361565, 0.015579858, -0.03881155, -0.02251399, -0.019025277, -0.05586409, 0.036834512, 0.033635926, -0.025290908, 0.006564486, -0.019967657, -0.039483167, 0.0051305857, -0.03295864, 0.03950379, 0.06587802, -0.052770693, -0.024659684, -0.024838222, -0.052729014, -0.020277537, 0.023964219, -0.019855453, 0.012051613, 0.022640752, 0.0150046, -0.06475882, 0.020060204, 0.012937755, 0.018418545, -0.033702876, -0.015595649, -0.03731921, 0.0038999326, -0.0026905497, 0.05211025, 0.018256549, 0.017226564, 0.015042842, 0.00476964, 0.02664596, 0.01635213, 0.011244534, 0.039137688, 0.048801582, -0.029970098, 0.017280277, 0.018850392, -0.0042694723, 0.031400558, 0.018916994, 0.0021433302, 0.06303831, -0.034759507, -0.036647163, -0.001767345, 0.061730318, -0.048856154, -0.0038505176, 0.049934264, 0.03794227, -0.043624587, 0.031682443, -0.016567625, -0.054870624, 0.009037393, 0.0644185, -0.012124339, -0.0056334394, 0.004551354, -0.048337508, -0.02081153, -0.043767247, 0.068411246, 0.04080352, 0.015929738, -0.07128163, -0.010237109, -0.029113013, -0.013052485, -0.008481795, -0.0031238992, 0.02822961, 0.0029727533, -0.024717906, 0.037639763, -0.03379827, 0.021700786, 0.0022953355, -0.01183902, -0.05351278, -0.03588429, 0.013509683, 0.0126034515, 0.015805019, 0.015470821, 0.021934757, -0.025008382, -0.013277003, -0.026905926, 0.0027504927, 0.013803812, 0.008088193, -0.0328061, -0.003693678, -0.023485132, 0.015847236, -0.0004589167, -0.012242936, -0.014106103, -0.010967164, -0.11184505, -0.054038733, 0.028913474, 0.00055345014, -0.00021334471, 0.037876956, 0.052562296, 0.013157332, -0.026269438, -0.007861742, 0.024777206, 0.03380257, 0.011851051, 0.027529847, 0.024749275, -0.05877572, -0.08669283, 0.031588554, -0.02992326, -0.027030325, -0.046970215, -0.057699755, 0.036616333, -0.006604448, 0.040317748, -0.021882849, 0.02326725, -0.03419789, -0.0030880198, -0.0068240226, 0.013178816, -0.0065380596, 0.0067880894, 0.012376142, -0.02031308, 0.009946633, 0.02531433, 0.017047167, 0.021954093, 0.020041727, 0.049506284, 0.0210672, -0.0014717132, -0.03537956, -0.0378125, 0.006957229, 0.025012465, -0.031808775, -0.018479561, -0.056502834, 0.010538971, -0.013647469, 0.011737933, -0.04275918, -0.011804644, 0.0515018, -0.009314441, 0.019472163, 0.0088212555, 0.0048184106, -0.020369371, -0.005804351, -0.026981983, 0.0012757982, -0.04082468, -0.013367454, -0.023973899, 0.007851644, 0.031105734, -0.014318373, -0.0025077136, 0.032498866, -0.026442284, 0.02689669, 0.016587444, 0.049850047, 0.0073718866, -0.03731062, 0.03459751, -0.008533359, 0.07534656, -0.02223082, -0.05433093, 0.04988184, -0.001487612, -0.026087353, -0.018291784, 0.008278334, 0.0024924593, 0.038052272, -0.008245677, -0.0018926017, -0.024756957, 0.015677936, -0.005181505, -0.017295318, -0.018626519, 0.023748081, 0.042893246, -0.012976644, 0.010144831, -0.0484372, 0.044746097, 0.011522119, -0.018817734, -0.020023894, -0.02441368, -0.036608063, 0.03381632, -0.0199603, 0.018947933, 0.027183672, 0.0354019, -0.0029735055, 0.011389234, -0.010819241, -0.026175441, -0.030707028, 0.057684284, 0.032249644, 0.02502063, -0.020573048, -0.030388195, 0.0016861323, -0.02871463, -0.035367094, -0.020048387, 0.0132379, -0.027845243, -0.029145509, 0.030331474, -0.0036038714, 0.043276966, 0.00927029, -0.00907757, 0.033490177, -0.018862637, -0.032858096, -0.029739082, 0.017073594, 0.016098825, 0.022979783, -0.008312359, -0.0055515817, 0.036531575, 0.041256096, 0.044737507, 0.010139997, 0.029800368, 0.044379137, 0.015074425, 0.04096734, 0.0019559823, -0.012643843, 0.02806611, 0.0054305145, -0.037442107, -0.051836964, -0.0008198625, 0.008334087, 0.003344764, 0.03707772, 0.040109664, -0.01701279, 0.03609887, -0.03219346, 0.029348325, -0.0035286741, -0.010652196, 0.014140478, -0.056969266, -0.022636455, 0.0031986667, -0.007856585, -0.041231174, -0.053793807, -0.009974993, -0.0040887846, -0.020808576, -0.023763657, 0.007781167, -0.0143080605, 0.033478577, -0.00053024647, -0.021670494, -0.029545343, 0.012560374, 0.040439673, 0.017478582, -0.034602664, 0.010393089, -0.020240461, 0.0057142223, -0.081034034, -0.020742778, 0.0005752707, 0.038179465, 0.0005740756, -0.0043743183, 0.040364046, -0.0005751767, -2.1484864e-06, -0.00035407057, -0.047771167, 0.042724803, -0.039176363, 0.021032609, 0.032079484, -0.0014111259, -0.067333564, 0.019603005, -0.008122998, -0.01296848, 0.019870492, -0.029313736, 0.015538714, 0.004426312, 0.017795915, 0.0005447488, 0.004778449, 0.012398271, -0.013845707, -0.012127132, 0.004106617, -0.10496302, -0.022212988, -0.004771896, -0.035000566, -0.076620184, -0.019533932, 0.015283474, -0.0067247627, -0.046286352, 0.04501509, -0.019652635, -0.0024542161, 0.004299981, -0.065008044, 0.008316791, -0.026158253, -0.03023866, 0.016395718, -0.044511482, 0.011461101, 0.0020645545, 0.010848997, -0.025547493, -0.0016839838, 0.01991733, 0.014583068, 0.066278234, 0.0048865178, 0.012461223, 0.007205809, 0.003398476, -0.010317892, -0.055041824, -0.035790347, -0.043308333, 0.0030476283, 0.008700726, 0.037399136, 0.031669553, 0.0076535535, 0.013671894, 0.0036863734, 0.020588515, -0.009678825, 0.011044079, 0.04521275, 0.024497258, 0.004255722, -0.012046135, 0.008299066, -0.008895379, -0.021519242, -0.018834492, -0.003933664, 0.03199612, 0.038301498, 0.018671207, 0.034220666, -0.0010710205, -0.0109701725, -0.018700212, -0.00031110086, -0.010429612, -0.07454045, 0.00932701, 0.058763683, -0.003202749, -0.010994236, 0.02751051, -0.025135573, 0.031149616, -0.07268416, -0.030574681, -0.062283337, -0.07487046, 0.019257663, -0.010089292, -0.019103482, 0.0073168855, 0.041601144, -0.012514505, 0.038998038, 0.037294287, 0.02291232, 0.01591384, -0.046238437, 0.036364425, -0.028311895, -0.016231386, 0.030173345, -0.008389625, 0.023593819, 0.038820572, -0.016660653, 0.029681772, 0.0077124224, -0.027545316, 0.028635029, 0.03610961, -0.05739467, 0.013307833, -0.020809382, -0.008917078, 0.008455986, -0.025151258, 0.022318048, 0.018299948, -0.016829055, -0.04538248, -0.0013831956, -0.014300756, -0.004336935, 0.030908342, -0.0044398475, 0.004100172, -0.015068196, -0.01595552, 0.039515395, -0.043524038, -0.071123496, 0.053676926, -0.003386874, 0.06179047, 0.037286554, -0.030135533, 0.0667552, 0.02160894, -0.014239094, -0.00817628, 0.0008396285, -0.0009957697, -0.044911962, 0.0045840107, -0.0053045596, 0.031490367, 0.039173357, 0.044979855, 0.014670296, -0.091913976, -0.024937052, -0.019664237, -0.03285852, -0.030322878, -0.013392805, -0.0074314005, -0.005563291, 0.02155104, -0.012238423, -0.004969879, 0.08272189, -0.0049535506, 0.006026827, 0.026514472, 0.009700565, -0.050194982, -0.0016141311, -0.030441692, 0.07920181, 0.0041669896, 0.041729085, -0.029221136, 0.011330258, -0.05421405, 0.00059749413, 0.021444043, 0.013865902, -0.009739519, 0.009529612, -0.011991777, -0.0061497204, 0.041189063, 0.0665962, -0.038179465, 0.06541003, 0.037246164, -0.038174737, -0.041996468, 0.031746037, -0.046563182, 0.048963152, 0.024622086, 0.016166931, 0.011544301, -0.021434162, 0.07680925, 0.025749128, 0.0378993, 0.029529229, -0.027779073, 0.020779302, 0.032004714, -0.027223902, -0.0073921634, 0.002956962, -0.025731994, 0.0062314705, -0.016766358, -0.004877494, -0.0038410372, -0.023879139, 0.051298983, 0.000107961445, -0.038126614, -0.052719563, 0.063151754, -0.0132683, -0.039599184, -0.020747505, -4.5118217e-05, -0.028095327, 0.0074778073, 0.023629913, -0.01777486, -0.008558281, -0.0518997, -0.014087196, 0.016759055, 0.005965058, 0.02599497, 0.033491038, 0.025970638, -0.039160892, -0.038578223, -0.013028422, 0.02360843, 0.05432163, 0.03518877, 0.027627818, 0.0126103265, 0.02594534, -0.0045434046, -0.012868789, -0.066747464, 0.0513231, 0.055719707, -0.007357868, -0.012183637, 0.011231429, 0.03293372, -0.014971513, 0.0059662666, -0.018333036, -0.023953475, 0.031279385, 0.029367797, -0.04321036, 0.011540811, 0.022095466], [-0.026106205, -0.079318985, -0.02018104, -0.025774317, -0.02165067, 0.06612412, 0.026286295, -0.042269416, 0.025584029, 0.03635268, 0.0024839058, 0.044178654, -0.06674763, -0.006109558, 0.0045264983, 0.034568194, 0.018594626, -0.045613173, 0.043013122, 0.07256163, 0.0046358146, 0.015201018, -0.006515445, 0.014202496, -0.039757676, 0.0048544467, 0.023975156, -0.010943761, 0.0049579428, -0.021002365, 0.026185518, -0.03489817, -0.014287014, 0.012320334, 0.027908007, 0.058860675, 0.0086152265, -0.01832766, -0.053326037, -0.01226011, -0.06745211, 0.004508785, -0.039479323, -0.013684763, -0.020147573, 0.067747675, 0.03366735, 0.032958817, -0.027423171, -0.031821627, 0.022139557, -0.029877724, -0.045043316, 0.023773732, -0.016840762, 0.02252925, 0.036863834, 0.019658687, 0.015523905, -0.00433975, -0.0045710346, -0.027725814, -0.036980994, -0.0041752695, -0.0052431263, 0.027405204, -0.002863982, -0.0032592406, -0.018302357, -0.044252798, -0.026649246, 0.047914382, -0.018760499, -0.017300293, 0.052220732, -0.0014727315, -0.06710797, 0.032189555, -0.010261341, -0.014923679, -0.0035340493, 0.016783193, 0.01273938, -0.054471266, -0.056589324, 0.015302237, -0.032716908, 0.0038650346, 0.040097013, -0.024098137, -0.029476896, 0.0116178775, 0.066043146, -0.021093968, 0.0098779285, 0.0007695149, -0.017465532, 0.056917276, 0.035960965, 0.021866268, 0.00940296, -0.05512545, -0.044576697, 0.009666381, 0.004089993, -0.023757536, 0.036484014, -0.033718467, 0.026956933, 0.009387335, 0.0056981044, 0.0020414537, -0.004669976, -0.057741195, 0.007606076, 0.04489351, 0.038990438, -0.044872258, -0.0465869, -0.016484471, -0.03694481, 0.022004936, -0.01542623, 0.02137991, -0.009200776, -0.023889627, 0.008122797, 0.009025162, -0.07313655, -0.0038969184, 0.052994043, -0.0060817227, 0.01371614, -0.034450527, -0.024491878, 0.013941541, -0.0021357136, 0.042368103, -0.023551557, 0.027300822, -0.037499487, -0.03383588, 0.009801002, 0.026865456, 0.01057444, -0.045166798, 0.04103202, -0.05686363, 0.018025525, -0.033660512, -0.0019613644, 0.02509413, -0.009921453, 0.013699438, 0.010028492, -0.04157253, 0.0064078686, 0.020413525, -0.027429244, -0.0041416143, -0.014079262, 0.0076379594, 0.040069427, 0.003091724, -0.0106641445, -0.042061917, 0.016584678, -0.0018695085, 0.012905379, 0.017216282, 0.019528115, 0.008121786, 0.009230129, 0.05195655, -0.016279502, -0.016533293, 0.019700505, -0.029903028, 0.04650972, 0.049466822, -0.034852464, -0.01453171, 0.0068674325, -0.031179901, 0.009664358, 0.00949431, -0.05678468, -0.03497307, -0.004038561, 0.022625659, 0.0363294, -0.023856224, 0.023564717, -0.0018485057, -0.049699888, 0.025444852, -0.03020548, 0.0132017275, 0.051270284, 0.013604799, 0.0044799377, 0.0054541994, 0.008499837, -0.025502292, -0.03890896, -0.04053605, 0.037327416, 0.015721282, 0.04630146, -0.05946234, 0.016314423, 0.05610753, 0.011751486, 0.060445756, 0.031240126, 0.019649578, 0.027395336, -0.06803715, 0.035573296, 0.06408356, -0.02124681, -0.012575279, 0.013126036, -0.034597423, -0.037562322, 0.031622734, 0.017736545, 0.02571207, 0.01961314, -0.025921084, 0.041527484, 0.0064991238, -0.032133885, -0.0357937, 0.013469673, 0.0077508185, -0.06139114, 0.018070819, -0.053734705, 0.0251913, -0.013069859, 0.010253956, 0.04727721, -0.048844077, -0.03317037, -0.027718604, -0.075816825, -0.011380014, -0.0016367056, 0.0018300334, 0.049853224, -0.00737884, -0.02831924, -0.03607939, -0.012184196, 0.004464755, -0.009016558, -0.013639467, 0.0028852378, 0.02721365, 0.008851572, -0.051437296, 0.013467649, -0.03244058, 0.03350742, 0.011027773, 0.020161744, -0.03430705, 0.04331551, -0.044305433, -0.041945517, -0.10031984, 0.023048501, 0.042904563, -0.023300534, 0.03497307, 0.007351005, 0.003732944, 0.043456204, 0.015871843, -0.03956941, -0.032466896, 0.046321705, 0.022517104, 0.01762571, -0.02808008, 0.011467062, -0.041052263, 0.010630489, -0.050815433, 0.00895937, 0.033590928, 0.012742923, 0.016880741, 0.037274785, -0.0172011, 0.058939625, 0.011962022, -0.034619313, -0.053428266, 0.0332843, -0.00784394, 0.006188509, -0.024049679, -0.011668487, -0.0007334557, -0.048764113, 0.042803343, 0.037781887, 0.008375465, -0.030333208, -0.014011572, -0.04356451, 0.010346191, 0.028670184, -0.042168103, 0.04010688, 0.06179399, 0.003433337, -0.022467505, -0.0051697427, -0.017996235, 0.02971881, -0.039822455, 0.03439005, 0.059232395, 0.016233448, -0.014440865, -0.025397785, -0.033405192, 0.050925132, 0.044590864, -0.00602251, 0.0030729985, 0.034642592, 0.02067796, 0.0054270914, -0.01138128, 0.04365662, 0.035137042, 0.012955988, -0.091631226, -0.023914425, -0.025421066, 0.02508603, -0.051002055, -0.017895458, -0.061953913, 0.004593872, -0.010658325, 0.011463013, -0.018709257, 0.036394183, -0.0037876023, -0.0017915702, 0.009804293, -0.010192718, -0.010976152, -0.016654518, -0.023620388, 0.026482848, -0.043816544, -0.040251117, 0.060451325, 0.007102513, -0.023189701, 0.035317212, -0.005754913, 0.022413323, -0.046912067, 0.06365844, -0.008131907, -0.033592194, -0.012249988, -0.016179677, 0.023056852, -0.0239663, -0.0027855376, 0.014486413, -0.008261482, 0.010634032, -0.027829057, 0.036772612, 0.010451838, 0.039175667, 0.045270044, 0.051217653, 0.035660345, -0.014641278, 0.0343111, 0.016591761, 0.011633061, 0.03338242, 0.0068838806, 0.023581924, -0.012526316, 0.052799698, 0.04315002, 0.03665532, 0.00049141655, 0.018221382, 0.031083236, 0.0027845253, 0.0046886695, -0.029226506, -0.033983152, -0.0034505439, 0.0051152506, 0.004296859, 0.014133162, -0.0022394627, -0.0072766095, -0.020954667, 0.02665998, 0.042961247, -0.008896108, -0.03545892, -0.014962141, 0.017637605, 0.013408895, 0.025135882, 0.054060884, -0.06360985, 0.031665243, 0.0337262, -0.024920285, -0.014689865, -0.041892376, -0.028393857, 0.012399032, 0.0075638173, 0.019671846, 0.016106673, 0.07205149, 0.039231844, 0.014986687, -0.0020790312, 0.0121513, -0.058066107, -0.01406332, -0.017288653, -0.020907726, 0.009202801, 0.03157617, -0.030021144, 0.007507388, -0.03916858, 0.028161054, 0.0662962, -0.0039791586, 0.03429503, -0.033676207, -0.025896193, -0.0547512, -0.039969224, 0.02838981, 0.043892965, -0.05114098, -0.004367838, -0.016749157, -0.035547994, -0.022494834, 0.04315356, -0.017497227, 0.027973484, 0.03238997, 0.03062712, -0.050309088, -0.03328082, 0.0266863, 0.0040598805, -0.0062958007, -0.00019990685, -0.04487529, -0.016484471, 0.022085404, 0.044422843, 0.010067967, 0.008848282, 0.04324061, 0.018195065, 0.01399854, 0.069717385, 0.031956755, 0.02713647, 0.025474712, -0.016259259, 0.008231102, -0.019620098, -0.001378598, 0.024631308, 0.029074047, 0.0070293825, 0.037228223, -0.0154707655, -0.02052006, 0.009732679, 0.05948013, -0.022592511, 0.0038938818, 0.02930685, 0.027114455, -0.07163852, 0.033403043, 0.005521731, -0.059488736, 0.007256366, 0.050501533, -0.006012388, -0.0025567834, -0.03952892, -0.016925784, 0.0072492803, -0.007982103, 0.07136219, 0.033205792, 0.0070281173, -0.009923478, -0.014818158, 0.009372341, -0.010420967, -0.0055098375, 0.015251628, 0.020717435, 0.017087733, -0.03976577, 0.057133883, -0.017110001, 0.025507102, -0.013179681, 0.0007624295, -0.042995658, -0.020143524, 0.0018922827, 0.015129152, 0.0024884606, 0.03497712, 0.011702901, 0.006440543, -0.018081954, -0.002864488, 0.020320658, -0.0030649009, 0.004602412, -0.007389468, -0.0064256135, 0.007943134, -0.011634072, 0.04673873, -0.026922645, -0.0029576092, -0.0042230953, -0.06422931, -0.058848526, 0.051801004, -0.0032956796, -0.016526476, 0.040270858, 0.076040514, 0.030592326, -0.03346289, 0.0196182, 0.023682635, 0.0012563766, 0.0005693549, 0.04093738, 0.00094765966, -0.09189035, -0.041238505, 0.01506121, -0.024935722, -0.040626388, -0.044880353, -0.025365237, -0.003032764, -0.024704818, 0.016030505, -0.00899429, 0.02200443, -0.025406895, 0.029609494, -0.007037733, 0.0022096033, -0.022750158, 0.007280405, 0.059277695, 0.0025248993, -0.0056550866, 0.022924002, -0.0064086593, 0.026645811, 0.004675796, 0.04293339, 0.0066804313, -0.03248866, 0.0032703748, -0.043925863, 0.00480738, -0.001988314, -0.059481144, -0.02825215, -0.04607878, 0.023391884, -0.01712063, 0.006949167, -0.008494522, -0.017769948, 0.0281732, -0.0070541813, 0.01535487, -0.03563403, 0.014397342, -0.019518754, -0.030029552, -0.0076313806, 0.00034414342, -0.026843188, 0.003924374, -0.055260327, 0.012278835, 0.012553391, -0.003953601, -0.01330823, 0.015793148, -0.03463905, 0.02241968, 0.0071126353, 0.069160685, 0.026991978, 0.014253611, 0.028435864, 0.009764058, 0.054633785, -0.02106917, -0.08131907, 0.072272144, 0.014162514, -0.04268973, -0.0039151376, 0.013231303, 0.004585205, 0.027728345, 0.0031098167, 0.009782783, 0.017977698, 0.01246204, 0.022262031, 0.003325539, -0.041859988, -0.0093232505, 0.04346076, -0.03659662, -0.001188054, -0.035269894, 0.027458597, -0.0155593315, -0.0063365414, -0.0358643, -0.015700025, -0.019410701, 0.046678502, -0.043797314, 0.028534299, -0.0043126107, 0.010726141, 0.02089811, 0.034793407, 0.009633485, -0.02909834, -0.015627654, 0.060802046, -0.0070670866, 0.041153483, -0.0243775, 0.024551598, -0.030091042, -0.031119803, -0.056133337, -0.009313508, 0.05659363, -0.037789986, -0.01080914, -0.0015041094, -0.01947194, 0.025808733, 0.008066115, 0.0036024987, 0.021507448, -0.040248584, -0.06500565, -0.025476735, 0.02708662, 0.0058666333, -0.012943336, -0.034554027, 0.01867535, 0.020401632, -0.008491675, 0.032437544, 0.028254176, 0.023009025, 0.041082628, 0.004256023, 0.033616234, -0.022568723, 0.0014803229, 0.04243592, 0.020487163, -0.0073135537, -0.07169115, -0.010443361, 0.031697635, 0.019457769, 0.05318433, 0.026399598, -0.032525603, 0.027638767, -0.020653287, 0.008365469, -0.008751364, 0.01025345, 0.032290775, -0.061949864, -0.021403698, 0.02613162, -0.065856904, -0.024070555, -0.035890114, -0.012545546, -0.005548807, -0.019181442, -0.026021292, 0.027397867, 0.018730005, 0.01786813, -0.0061257533, -0.048636068, -0.04154317, 0.016262801, -0.0017627229, 0.017668728, 0.000363375, 0.010998419, 0.0070772087, 0.007933518, -0.04058305, -0.050404865, -0.0425756, 0.02182173, -0.033312075, 0.002767318, 0.054843303, 0.019642493, 0.005691525, -0.00073535356, -0.056509364, 0.04636131, -0.021499095, 0.040968757, -0.009648163, 0.0026134658, -0.07065062, -0.029763853, -0.0045750835, 0.015451028, -0.0018312986, -0.041716255, 0.03665482, 0.009978388, -0.017547267, -0.028776465, -0.012155475, -0.020970482, -0.03648325, 0.0013705005, 0.006189521, -0.07351714, -0.037521757, 0.017792722, -0.042929865, -0.046408754, -0.0127836, 0.02684015, -0.019392863, -0.022324787, 0.050764192, -0.016814442, -0.020436047, 0.022618588, -0.053470783, -0.007064809, -0.023718568, -0.018598929, 0.028371338, -0.058437325, 0.03001943, -0.007980585, 0.03821814, -0.012741405, -0.0019995745, 0.012573888, 0.0036908118, 0.024500482, 0.023940235, -0.020505635, 0.008799951, -0.019108564, 0.01417871, -0.01694704, -0.0823596, -0.052029174, 0.01539232, -0.035592526, 0.00078950555, 0.038794708, 0.01854174, -0.0037170656, 0.028794684, 0.0256979, 0.005310991, 0.0002501366, 0.054049246, -0.0029444506, 0.00748765, -0.0032612653, 0.0024155832, 0.009417384, 0.018957242, -0.041885294, 0.02935341, 0.050520256, 0.019841895, 0.037724193, 0.04315559, -0.0044495724, -0.01280416, -0.024055626, -0.016033795, 0.014763374, -0.09070811, 0.02971729, 0.04803028, 0.00751169, 0.03225636, 0.012829465, -0.026873553, 0.01687467, -0.031539984, 0.01638692, -0.05227842, -0.04438641, -0.027126916, -0.019065546, -0.0068598413, 0.035211947, 0.038642753, -0.0035041901, 0.049943313, 0.014686321, 0.020778166, -0.0026883676, -0.039499566, 0.0750678, -0.026146803, 0.024473658, 0.03300386, -0.009079314, 0.020853573, 0.032681733, -0.014909129, -0.0067472355, 0.031434465, -0.04977326, 0.008216425, 0.017236525, -0.06574152, -0.013264705, 0.00065741513, 0.014126961, 0.028538093, -0.046580322, 0.032051902, 0.01596522, 0.008863148, -0.008025628, -0.042506777, -0.02970059, 0.022491798, 0.0052249073, 0.028365515, -0.037169516, -0.01657405, -0.031154595, 0.02151605, 0.0061824354, -0.04894175, 0.067383975, 9.312116e-05, 0.05197578, 0.03246133, -0.054757267, 0.03793068, 0.02642895, -0.022303531, -0.039695933, -0.0017768935, -0.048682507, -0.054071512, 0.00850882, 0.006053888, 0.035244588, 0.079302475, 0.02328415, 0.024155326, -0.061100643, -0.013054676, -0.00040740508, -0.030893957, -0.017085709, -0.004337725, 0.014877119, 0.0047317194, 0.0020689094, 0.009076988, -0.021565648, 0.078748114, 0.02092291, 0.015359932, -0.0014970239, -0.018724503, -0.0025891734, 0.019183973, -0.030114574, 0.042232472, 0.026723243, 0.031819098, -0.027900923, -0.014762235, -0.023681117, -0.0017989087, -0.02938833, 0.0016365792, 0.01042957, 0.01676434, -0.030162541, -0.025246939, 0.032117188, 0.06857362, -0.036014613, 0.003429288, -0.007889994, -0.047223818, -0.022387544, 0.0107899085, -0.049502753, 0.04669014, 0.0021498841, 0.009015546, 0.03881634, -0.03292871, 0.07024372, 0.06548543, -0.018875381, 0.04267935, -0.0068337778, -0.022149678, 0.030054856, -0.049103197, 0.011522732, -0.011469592, -0.026725521, 0.0025046556, -0.0017717062, -0.034923475, 0.00020740335, 0.0006462811, 0.051570144, -0.025339838, -0.03371492, -0.056998253, 0.07054131, -0.02459006, -0.028515574, 0.012547065, 0.009620201, -0.029790042, 0.0076313806, 0.013242942, -0.06406331, -0.027333591, -0.07575609, -0.03451961, 0.008282343, 0.0457812, 0.016841013, 0.022493064, 0.030322073, -0.03405704, -0.0070023066, -0.0060705887, 0.0034723058, 0.05092108, 0.025090082, 0.0326334, 0.031747233, 0.0004696546, -0.007216384, 0.002519206, -0.03552269, 0.008964431, 0.023958962, -0.00911221, -0.013088901, -0.020620264, 0.019895665, 0.01080914, -0.0026801436, -0.0021524148, -0.019866185, 0.017838428, 0.03970795, -0.056747228, 0.010536863, -0.0068444056], [-0.01226844, -0.08644383, -0.03526482, -0.03443282, -0.019437864, 0.028473852, 0.01302836, -0.012468048, 0.030881064, 0.049264338, -0.013059273, 0.0133128, -0.06716227, -0.03141457, -0.0044408906, 0.057195008, 0.013001017, -0.075578764, 0.021938248, 0.013853114, -0.012321135, -0.014738676, -0.022437753, 0.024008503, -0.0004305378, 0.062240668, 0.0031355803, 0.0065783015, 0.04295298, -0.014154287, -0.020576034, -0.03731763, 0.00877134, 0.009986233, 0.021144405, 0.0054809907, 0.008330192, -0.01894203, -0.035946794, -0.025500845, -0.08420748, 0.032831874, -0.023759974, 0.0030835485, 0.0023216393, 0.03084038, -0.0055190455, 0.028811958, 0.0017526562, -0.028022604, 0.029436952, -0.008120101, -0.030695101, 0.025672296, -0.004002573, 0.037512697, 0.028280415, 0.0137551725, -0.0010996058, -0.031008516, 0.0131879235, -0.015787475, -0.074901335, 0.008898461, 0.018205833, 0.011966911, 0.0054308213, -4.3257824e-05, 0.011924877, -0.046509508, -0.0041589746, 0.0037960785, 0.029303096, -0.025576496, 0.06911132, 0.002029445, -0.082238846, 0.0110523235, -0.028432636, -0.01241316, 0.025588227, 0.024981804, -0.0039548264, -0.044232734, -0.048412852, 0.023390243, -0.021206537, 0.004260692, 0.0546077, 0.0070371507, -0.019799842, -0.015650611, 0.035446525, -0.0012449889, 0.0019911863, 0.0035879512, 0.009241872, 0.060570754, 0.01495823, 0.050956085, 0.05795692, -0.04416869, -0.029844636, -0.023713043, -0.020021027, -0.004433111, -0.0019490507, -0.025314398, 0.009986845, -0.014903545, -0.005281536, 0.004961948, 0.012185648, -0.050042775, 0.009672613, -0.039037332, 0.027352821, -0.022910325, -0.038358267, -0.0074827876, -0.012724636, 0.01899651, 0.029277183, 0.032057315, -0.03492335, -0.010658565, 0.00816471, 0.009501673, -0.047095936, 0.010674276, 0.046596024, 0.00958773, 0.016335135, -0.018628616, -0.051871847, 0.032065477, 0.0063523706, 0.044657174, -0.00832101, 0.036693655, -0.030660005, 0.014041653, 0.013289131, -0.0068572327, 0.033837415, -0.019971445, 0.018976413, -0.037879165, -0.026440326, 0.00014201626, -0.018695237, -0.03281735, 0.02105636, 0.023676313, 0.0338972, -0.08372267, 0.02252182, 0.016725883, -0.046232007, 0.022398576, -0.026106097, -0.003646308, 0.014916604, 0.02317395, -0.007796203, -0.04710859, 0.004503073, 0.011822446, -0.017484732, 0.037884876, 0.07561795, 0.013645702, 0.022833552, 0.02279565, -0.050152957, -0.016787913, 0.031055141, -0.028282458, 0.024094328, 0.025632098, -0.00021343247, -0.016938092, 0.0146330055, -0.023528991, -0.0015050459, 0.041993964, -0.026587138, -0.007855784, -0.0072697634, 0.02936635, 0.02999318, -0.02324802, 0.04529135, -0.0054729315, -0.020945765, 0.03540712, -0.041096162, 0.010114169, 0.028995803, 0.039453585, 0.014642161, 0.01899539, 0.055255957, -0.0495751, -0.015515684, -0.05152415, 0.037049714, -0.017171318, 0.049600404, -0.0104292175, -0.005405596, 0.04587227, 0.029398998, 0.053871196, 0.022815647, 0.033337094, 0.009553042, -0.047133077, 0.019402359, 0.063440464, -0.02603305, 0.00093371613, 0.048419382, -0.02086272, -0.012127699, 0.024966294, -0.013854339, 0.01714275, 0.005130541, 0.0020576033, 0.06794499, -0.007499035, -0.01506158, -0.05389415, -0.014465866, -0.0010150286, -0.027429951, 0.028104426, -0.033395045, 0.02883277, -0.0037655479, 0.022988679, 0.024905235, -0.0051774723, -0.022658939, -0.015486353, -0.023915865, -0.014949137, -0.021842755, -0.020255681, 0.06486021, -0.01849068, -0.03662224, 0.007895982, 0.006191583, 0.021251222, -0.0051588276, -0.0145809995, 0.021624016, 0.051052395, 0.020041432, -0.03529252, -0.00069457374, -0.07661859, 0.035902366, -0.0014160817, 0.035564464, -0.015159012, 0.014938941, -0.04092435, -0.019638034, -0.056679178, 0.0073570954, 0.016952172, -0.025229108, 0.021163177, -0.006219129, 0.0042066197, 0.04054605, -0.0022252274, -0.078268915, -0.019978179, 0.012038327, 0.006347066, -0.0001171226, 0.0273316, -0.00079098565, -0.026527658, -0.0031665952, -0.025119329, -0.010239045, 0.013286274, 0.040529422, 0.0333877, 0.03832929, -0.029486688, 0.0353343, -0.026538268, -0.028477117, -0.01594663, 0.024603093, 0.0021575605, 0.012876078, 0.0012595985, 0.00470939, -0.060616456, -0.052670076, 0.04501426, -0.0061866855, 0.0004913436, -0.034215715, -0.02599061, -0.071274206, 0.019694554, 0.006418482, -0.011778575, 0.01576707, 0.08768606, -0.009980213, -0.0055696494, 0.010307197, -0.021677068, -0.01383924, -0.07620805, 0.020349262, 0.07945402, 0.025850633, 0.018620556, -0.032908596, -0.029692825, 0.044625755, 0.039904937, -0.00321776, 0.00026852498, 0.02261405, 0.018160941, -0.027182238, 0.03454913, 0.024137868, 0.049833015, -0.00825949, -0.065957576, -0.010682235, -0.0023530626, 0.02761196, -0.067996405, 0.0048331437, -0.07447202, 0.009821159, 0.012313789, 0.005019132, -0.03155791, 0.004705666, 0.00043665917, 0.017039502, 0.009175149, 0.0032206676, -0.01000832, -0.0155748585, -0.027373837, -0.010975935, -0.015844965, -0.032445002, 0.05033946, 0.022880942, -0.018924074, 0.061145347, 0.0051321737, 0.047449347, -0.037711028, 0.0444013, -0.00020567872, -0.031660646, 0.025804926, 0.009103732, 0.041597705, -0.0610572, -0.010253125, 0.02497119, -0.01643879, 0.035983983, -0.014778669, 0.047408126, 0.035384085, 0.019468877, 0.034736443, 0.040625628, 0.003864944, -0.022013439, 0.03819258, 0.013690389, 0.02161973, 0.053084698, -0.0030121321, 0.0068869726, -0.007837624, 0.03449036, 0.04849896, -0.0027444235, 0.017689187, -0.019210685, 0.019946756, -0.0025303788, -0.0027685007, -0.011036459, -0.04136591, -0.036922596, -0.003081508, -0.014781117, 0.04340596, 0.04433029, -0.019499077, -0.011609829, 0.03910773, 0.033573788, -0.033424426, -0.014288142, 0.04182787, 0.00066111016, 0.01660121, 0.017053377, 0.045688428, -0.03240909, 0.05092997, 0.02600775, -0.010494716, 0.0076011345, -0.028892148, -0.046105497, 0.047762357, 0.016527347, 0.009873879, 0.0007119177, 0.08191441, 0.038243998, -0.029497758, -0.008757873, 0.008921518, -0.09171557, -0.0028186962, -0.024994861, -0.04157934, -0.010096214, 0.005635505, -0.027225241, -0.029909113, -0.031059526, 0.01617353, 0.0557573, -0.035291854, 0.032513153, -0.019596612, -0.040917005, -0.002844406, -0.043497782, 0.0398527, 0.07841256, -0.043702237, -0.030661637, -0.031785525, -0.05052024, 0.005430082, 0.035540793, -0.009799938, 0.01289777, 0.005394169, 0.034536887, -0.058305837, 0.02036505, -0.0032512746, 0.0016666506, -0.023397382, -0.027942514, -0.044137675, -0.012309709, 0.008014533, 0.045722708, 0.007819056, 0.009368661, 0.017239468, 0.025361942, 0.008582598, 0.028573224, 0.0022575688, 0.030386992, 0.018419163, -0.03455076, -0.0047392827, -0.00013711915, -0.015941096, 0.014123068, 0.03418307, 0.0021335087, 0.085186906, -0.03932626, -0.023316376, 0.022486571, 0.05337118, -0.03769144, -0.01365519, 0.06492918, 0.035799526, -0.06699332, 0.012932457, 0.0066817016, -0.0683994, 0.030571245, 0.06380611, -0.04251772, -0.026062636, -0.008573212, -0.04766798, -0.021726854, -0.031705335, 0.04566394, 0.035661995, -0.010801652, -0.047035947, 0.0044841226, -0.029048856, -0.008247553, -0.023642749, 0.0016654264, 0.038905926, 0.02779397, -0.029558461, 0.019779436, -0.0438667, 0.012550127, -0.024581872, -0.02056624, -0.0450163, -0.02067112, -0.009213917, 0.009757496, -0.0056863637, 0.013933917, -0.0037613905, 0.010206755, -0.025867363, -0.0166763, 0.01642737, 0.028004138, 0.015541598, -0.017424742, -0.009463874, -0.029105172, 0.0082818335, 0.026400333, -0.01775387, -0.011688183, -0.008348761, -0.08520976, -0.05194367, 0.039904937, 0.0010749162, -0.029150877, 0.04671682, 0.05840092, 0.0035197996, -0.0645668, 0.006509895, 0.012404845, 0.005764367, 0.007025724, 0.009063739, -0.0027105517, -0.071306035, -0.05552509, 0.033879552, -0.02902396, -0.04116023, -0.06748221, -0.039466646, 0.033640712, -0.008138184, 0.008414259, -0.0076672453, 0.02100535, -0.031120334, 0.005320254, -0.0237412, -0.0062405537, -0.011128075, 0.011647986, 0.04450266, -0.0010985855, -0.0027050425, 0.022297777, -0.018133394, 0.030278847, 0.013244648, 0.049984828, 0.010164773, -0.013552759, -0.022136582, -0.04155363, 0.0059068864, -0.0070840814, -0.043244768, -0.006104047, -0.03914915, 0.0102982195, -0.017032566, -0.0001730313, -0.023999726, -0.026695793, 0.033259556, 0.011025441, 0.0018698808, -0.00039646207, 0.0027611551, -0.041090854, -0.010873631, -0.027576137, 0.011771639, -0.044537608, -0.018555159, -0.02634218, -0.0044288263, 0.025766972, -0.0065360125, -0.031434566, -0.00154912, -0.014617064, 0.026429307, 0.026703954, 0.06008757, 0.018659223, -0.0008680132, 0.032630686, -0.025940208, 0.071726374, 0.0034842954, -0.04536848, 0.08906542, 0.012183199, -0.02363775, -0.023078458, 0.013497614, 0.017841404, 0.033559095, 0.0065274425, -0.0018233582, -0.006041178, 0.006370531, 0.0005488847, -0.0092637045, -0.04029997, 0.005731254, 0.062556535, 0.005672489, 0.013216899, -0.034513216, 0.039793935, 0.015075556, 0.023863858, -0.0072983303, -0.015260831, -0.013807001, 0.040091027, -0.03790365, 0.051320106, 0.018457217, 0.034853972, -0.02848487, 0.01276065, -0.010936068, -0.039511748, -0.018400084, 0.051784515, 0.0052354215, 0.010225171, -0.02689739, -0.019439496, -0.008250002, -0.016972028, -0.049656924, -0.0008374062, 0.021210006, -0.036935654, -0.014616248, 0.0237059, 0.0074242265, 0.055289216, 0.031350497, -0.012005883, 0.039957173, -0.0298479, -0.050528407, -0.022600582, 0.026047537, -0.0052125677, -0.0002579146, -0.021735119, 0.0017941796, 0.05480685, 0.045350116, 0.03719112, 0.019229328, 0.04798354, 0.04051381, 0.0055704652, 0.023543684, -0.008440173, 0.0046957186, 0.009608644, -0.0017618445, -0.027079398, -0.06952267, 0.014593395, -0.005129725, 0.018415999, 0.04136897, 0.017309584, -0.00073089404, 0.033694174, -0.028768903, 0.030737542, 0.0035418365, -0.007973315, 8.10064e-05, -0.05706442, -0.009388836, 0.010361678, -0.016604884, -0.034128793, -0.06183421, -0.030149482, -0.0014515857, -0.022741375, -0.03158556, -0.013225469, -0.005963867, 0.026519904, -0.011490405, -0.028545268, -0.039869994, 0.04093496, 0.02965528, 0.030752232, -0.014990673, 0.022726683, -0.011398845, 0.0038366835, -0.0715713, -0.034820408, -0.016282082, 0.024418635, -0.0058324607, 0.005776144, 0.048710454, 0.021404156, 0.022803403, -0.004640014, -0.035897467, 0.055880133, -0.029250402, 0.0201608, 0.0072808326, -0.007664083, -0.09498439, 0.0030798758, 0.016362885, -0.013398092, 0.00020037353, -0.020858383, 0.0042802803, -0.0017640827, 0.017768355, 0.010637548, 0.010565724, 0.012468865, -0.017401889, -0.007102853, -0.00014140412, -0.089910984, -0.049321674, -0.024849376, -0.040876605, -0.050690416, -0.011464344, 0.0047738682, -0.009804835, -0.029579375, 0.06052831, -0.031300303, -0.014062875, 0.010150897, -0.05143845, -0.008939883, -0.01344867, -0.04423072, 0.023658765, -0.03755922, 0.019059561, 0.0048399796, 0.031939477, -0.036734875, 0.0059485636, 0.004498814, -0.0043641436, 0.055709552, 0.016032739, 0.006792295, 0.016473886, 0.010731002, -0.0010945046, -0.041153703, -0.06262754, -0.007619703, 0.01834499, -0.0073840297, 0.023633515, 0.022520557, 0.0017196006, 0.02384404, 0.02114461, 0.024260703, 0.0073795402, 0.027418932, 0.035292674, 0.024041558, 0.0035932562, -0.009149132, 0.010192115, 0.004130714, -0.027711127, -0.014621146, -0.0030308024, 0.035391636, 0.039657224, 0.024960581, 0.026078757, 0.017845077, -0.015243894, -0.009251972, -0.0070453123, 0.033109378, -0.10708352, 0.003382502, 0.06806007, 0.009152805, 0.017246202, 0.02017243, -0.017781416, 0.033031024, -0.062859334, 0.008301422, -0.07480829, -0.06458965, -0.015435698, -0.010763446, 0.0047665224, 0.01649021, 0.03758789, 0.0048358985, 0.05440243, 0.011814947, 0.038169727, 0.0028260418, -0.0050026043, 0.052353397, -0.0062572854, -0.010666727, 0.04650461, 0.0032848401, 0.0059557045, 0.042813823, -0.02353389, 0.013172825, 0.031910606, -0.030235996, 0.026891677, 0.032022525, -0.028077085, -0.009356137, -0.038689636, -0.009423778, 0.006273609, -0.028611073, 0.021927636, 0.031348865, 0.0030272317, -0.04177931, -0.0058089253, -0.015941733, 0.011346609, 0.013953097, -0.00062802277, -0.005748394, 0.0062691197, 0.0185168, 0.033755794, -0.028117793, -0.057351716, 0.05488357, 0.03586686, 0.040882725, 0.023045609, -0.040399548, 0.07082367, 0.015432433, -0.03138641, -0.01839478, -0.015625615, -0.009921346, -0.04509853, 0.030221306, -0.007192634, 0.0131526245, 0.06205223, 0.040102046, -0.0029488779, -0.08936904, -0.027383428, -0.018610252, -0.018982025, -0.05443018, -0.021027386, 0.018815523, -0.018345196, 0.019747606, 0.005046525, -0.035953578, 0.077916324, 0.0014168979, -0.014605638, 0.015180232, -0.022940114, -0.040402606, 0.004071541, -0.05026886, 0.08512814, 0.029424809, 0.016042735, -0.03782958, 0.0006168321, -0.053598896, 0.016172715, -0.00017894866, 0.030209063, -0.018610047, 0.020118766, -0.011935895, -0.017708775, 0.04962244, 0.048466723, -0.046964128, 0.05903959, -0.008442622, -0.021020625, -0.026845971, 0.03530614, -0.035701584, 0.044100128, -0.00058438873, -0.015218593, 0.016269432, -0.036048666, 0.06732223, 0.023258835, 0.01884817, 0.0089364145, -0.011645333, -0.0006813108, 0.022907823, -0.03483561, -0.0025456822, 0.007979029, -0.022480195, 0.00034136957, 0.0048346743, -0.014929663, 0.018030964, 0.017859768, 0.040335067, -0.018501291, -0.038600266, -0.023415951, 0.050887525, -0.015236141, -0.05789693, -0.023607755, 0.0038279097, -0.021171851, -0.021600857, 0.022238044, -0.016599987, 0.00309824, -0.09092632, -0.016778221, 0.017229674, 0.0071395817, 0.0038066886, 0.05305001, 0.02880808, -0.032009337, -0.008080644, 0.0043527167, 0.0072530317, 0.044266224, 0.011922427, 0.031943865, 0.024117054, 0.032472342, -0.027221415, 0.015363415, -0.02520503, 0.05447058, 0.07770738, -0.005792468, -0.0029815251, 0.012323991, 0.02254957, 0.0051321737, 0.0060445163, -0.0030966073, -0.02691453, 0.048171263, 0.024594113, -0.05404004, 0.009652872, 0.0072966977], [-0.04526447, -0.060152195, -0.026986655, -0.05189433, -0.010134598, 0.05771169, 0.0014964578, -0.028359538, 0.030335598, 0.021803772, -0.013515461, 0.01056712, -0.033465568, -0.01999837, -0.028482806, -0.0065944977, 0.042686556, -0.05213625, 0.036943804, 0.013841928, -0.025148362, -0.019175442, -0.029994328, 0.034822464, -0.005219562, 0.026318967, -0.002459891, 0.01884129, 0.0013754932, 0.004789096, -0.010776465, -0.053508513, -0.009782616, -0.008042847, -0.012248483, -0.015657108, -0.02492703, 0.0053139166, -0.06011285, -0.030655252, -0.041794457, 0.03339302, -0.019499449, 0.04918314, 0.0017689742, 0.02739151, -0.0137451645, 0.023321135, -0.028053666, -0.039869785, 0.024090534, -0.028215824, -0.023750888, -0.0019252141, 0.032344148, 0.04146123, 0.035450805, 0.015441828, 0.019385247, 0.016293192, 0.014436684, 0.013468236, -0.058589645, -0.0018389095, 0.030373054, 0.020193266, -0.0073657054, 0.016263068, -0.03774706, -0.05070373, -0.032306645, 0.0026873532, 0.037883162, 0.00079495483, 0.067145094, 0.026864924, -0.083930135, -0.0010928515, -0.013587395, 0.019659301, 0.008806599, 0.0017583688, -0.0033550414, -0.054339126, -0.04040006, -0.0010906805, -0.0058178334, 0.00538731, 0.056301616, 0.029073335, -0.015950127, 0.00294399, 0.08876688, 0.0034657847, 0.010148431, 0.020466398, 0.007848873, 0.051078767, 0.010083952, 0.02534639, 0.047111984, -0.021968313, -0.0046963356, -0.017489007, 0.005415284, 0.011931162, 0.014004854, 0.014710968, 0.008121235, 0.011011026, 0.0047549736, 0.021929195, 0.019820537, -0.03765691, 0.014837927, -0.04104607, 0.0028263011, 0.003309007, -0.049431525, -0.013411096, 0.012189739, 0.012528839, 0.021942412, 0.050268136, -0.035873182, -0.025184635, 0.011524693, -0.0026196083, -0.03610804, 0.021267502, 0.016537273, 0.012427548, 0.036223628, 0.00460004, -0.031244246, 0.04552085, -0.015642105, 0.045776457, -0.016928757, 0.036950953, -0.037649535, 0.011491647, 0.03908067, 0.012679776, 0.03298217, 0.009598941, 0.010068813, -0.06074242, -0.0392547, -0.0061305435, -0.028045367, -0.0152749065, 0.007405438, -0.01700338, 0.041956924, -0.043094326, 0.013936917, 0.030984178, -0.03561619, 0.024523094, -0.02637092, 0.021959761, 0.0038659521, 0.008198394, 0.010232124, -0.055527564, 0.01546473, 0.023190178, -0.00026990345, 0.014458529, 0.08040295, -0.0067967717, 0.031228874, -0.008835188, -0.042321354, 0.014577861, 0.039199326, -0.0024783546, 0.013609221, -0.008122311, -0.0036767428, -0.008133378, -0.015761377, -0.020429201, -0.03757837, 0.008133993, -0.024701392, -0.03327221, 0.0019153001, 0.015568326, -0.0020482538, -0.027695844, 0.012191151, -0.022837276, -0.03967396, 0.016082618, -0.03557438, 0.008403743, -0.012556965, 0.019932123, 0.004298935, 0.009122614, 0.040582657, -0.02192635, -0.025700467, -0.045766156, 0.0359488, 0.005628932, 0.07544017, -0.01802082, -0.018610427, 0.012871443, 0.03934811, 0.03347068, 0.04072099, 0.03432016, 0.009863158, -0.044304743, 0.049260147, 0.055543855, -0.013154105, 0.014393186, 0.04000965, -0.026098866, -0.045558967, 0.017864505, 0.0048825475, 0.013107302, 0.0148800425, -0.018179905, 0.03722393, -0.0041816593, 0.010785072, -0.04162292, 0.0075536077, -0.005689856, -0.000906851, 0.021080596, -0.058447935, 0.0066081774, -0.030548275, 0.046341624, 0.027299598, -0.0053870026, -0.0338672, -0.0034924522, 0.002177672, -0.007351949, -0.019127948, -0.0063126055, 0.035467807, 0.0074908203, -0.039720688, -0.023442868, -0.013503166, 0.026267169, 0.01886373, -0.012671322, 0.013425391, 0.049122427, 0.042820122, -0.064604685, 0.021732435, -0.04713197, 0.016118662, -0.0070433123, 0.046745557, -0.031918082, 0.029997287, -0.020804547, -0.0130906245, -0.03296296, 0.019629788, -0.023753654, -0.044228353, -0.002098976, 0.0015980559, 0.003928663, 0.05427826, 0.023864936, -0.0427548, -0.009638135, 0.023369858, -0.0070270193, 0.027739342, -0.00038764038, 0.026580572, -0.058459, -0.0055120406, -0.025175413, 0.0018303021, 0.004221545, 0.009009565, 0.03004213, 0.047019765, -0.03367645, 0.03246181, -0.01030152, -0.070418365, -0.042408656, 0.033982627, 0.021023188, 0.029466819, 0.03763524, -0.0013590469, -0.033798646, -0.04421006, 0.045419402, -0.005441106, 0.023592882, -0.030279603, -0.05468404, -0.06614909, 0.02664574, -0.0021106573, -0.012422937, 0.03376283, 0.07215153, -0.008595411, 0.002154309, -0.0061376905, -0.007825971, 0.016803795, -0.070799395, 0.025385065, 0.061747026, 0.004770344, 0.008114165, -0.054537714, -0.044398196, 0.024755573, 0.013145112, -0.012341443, 0.003442345, 9.345177e-05, 0.041556448, -0.029561576, 0.024835577, -0.0071383007, 0.045137204, 0.0017134873, -0.06809191, -0.02012533, -0.019213868, 0.052387096, -0.084286734, -0.009032851, -0.05459489, -0.019412452, -0.00095941767, 0.043736503, -0.01826859, -0.012934155, 0.037404068, -0.01285761, 0.021718007, -0.0033550414, -0.017224636, -0.023998044, -0.0008631992, 0.013525607, -0.0075443857, -0.048682302, 0.036754828, 0.021703558, -0.021105958, 0.043356698, -0.020819608, 0.016941054, -0.027189545, 0.03645787, 0.029563958, -0.009553598, 0.015638415, -0.00084752147, 0.05012273, -0.05100868, -0.015773522, 0.024940709, -0.030942142, 0.038211934, -0.014188683, 0.05367513, 0.030510772, -0.006156903, 0.04783009, -0.005462625, -0.00015708504, -0.025821276, 0.05152943, -0.030459128, 0.030448677, 0.0007539928, 0.017511062, 0.0031077324, 0.0019145316, 0.02355092, 0.037657566, 0.0042151664, 0.0061599775, -0.048351455, 0.005272032, -0.020646999, 0.03337642, -0.0039012223, -0.056929342, -0.00021702942, 0.0029577946, -0.018676136, 0.047653023, 0.048344076, -0.010127528, -0.042986892, 0.020173287, 0.038349655, -0.014091467, -0.039137233, 0.02877131, 0.010863538, 0.024467763, 0.0037474467, 0.029921819, -0.046728034, 0.036106657, 0.04726323, 0.01218316, 0.03286305, -0.056818675, -0.024932409, 0.03309791, -0.0011420368, 0.0444855, 0.018478857, 0.08331963, 0.04726815, -0.015594455, 0.022920122, -0.0132261915, -0.06631909, 0.005195913, -0.02016483, -0.06590732, 0.02170909, -0.030297969, -0.006451861, -0.009619538, -0.047906324, 0.013105841, 0.023449996, -0.0484572, -0.006729041, -0.005284943, -0.044381134, 0.017350981, -0.05322324, 0.028090863, 0.06805194, -0.04685653, -0.045652416, -0.008657123, -0.025101021, 0.0046822717, 0.009505951, -0.01381503, -0.00414477, 0.01630864, 0.04846212, -0.045322876, 0.018887708, 0.03621133, 0.034885406, -0.034846444, -0.03480279, -0.05144489, -0.016025133, 0.005509663, 0.020764353, -0.012300588, 0.013385889, -0.0032236248, -0.0035092062, 0.0107830735, 0.037224542, -0.00486295, 0.034476325, 0.013428312, -0.028877882, 0.014568024, -0.037801854, -0.025357323, 0.012518003, 0.043125145, -0.013274146, 0.08265686, -0.024618546, -0.028455717, 0.001001225, 0.02967893, -0.039995667, -0.022488674, 0.059922256, 0.052826073, -0.033966027, 0.030071793, 0.020681506, -0.05597761, 0.017017366, 0.045884818, -0.0060797445, -0.009001649, -0.028346624, -0.07850686, -0.016593836, -0.0024911505, 0.052780572, 0.03681719, -0.0023489746, -0.04634562, 0.01553943, 0.0055899676, -0.038181156, -0.04310171, -0.010201229, 0.029649723, -0.018040188, -0.013726036, 0.033404395, -0.04427523, 0.0060506943, -0.0046553737, -0.0125422105, -0.019805932, -0.06734429, 0.012355923, 0.01881662, 0.0035511383, 0.01863871, 0.01718693, 0.0013187766, -0.011318827, -0.025016563, 0.051809166, 0.020229924, 0.019159302, -0.022262424, -0.01923677, -0.01619052, 0.03801181, 0.02123553, 0.012884241, -0.01645704, -0.021556923, -0.077004254, -0.062036604, 0.035784647, -0.028821263, -0.03030604, 0.015402365, 0.044749256, -0.039869472, -0.029591471, -0.009450617, 0.030489255, 0.022475457, -0.009856241, 0.024615778, 0.02468998, -0.031751465, -0.08470665, 0.029224735, 0.014395261, -0.026101325, -0.058618847, -0.045868214, 0.026315281, -0.036494453, 0.03254304, -0.03394622, -0.007023023, -0.02834263, 0.03525468, -0.034168303, 0.012804736, -0.010121764, 0.022750739, 0.011836405, -0.019166144, 0.0074785235, 0.034036215, -0.0139570525, 0.025472984, -0.00864669, 0.041471757, -0.0088276565, -0.017493002, -0.06553674, -0.022799388, 0.030401336, 0.01160216, -0.036577757, -0.025754262, -0.038620174, -0.013731568, 0.0011404805, 0.03902134, -0.028703995, -0.04690418, 0.04617716, -0.023753349, 0.007958463, 0.011943881, 0.009139022, -0.020314539, -0.0097571025, 0.0011343323, 0.009154277, -0.03621809, -0.0009695621, -0.011986418, -0.044751715, 0.02290948, 0.0029920128, -0.0047844844, 0.023196328, -0.019801015, 0.021860797, 0.022165898, 0.027573498, 0.0028242262, 0.022505274, 0.044065833, -0.032401327, 0.04072284, 0.003581812, -0.037436694, 0.07363507, -0.0033017062, -0.019103508, -0.048399717, -0.0051780427, 0.02939135, 0.015938137, 0.016158395, -0.030933304, 0.011137361, 0.003837824, -0.012169406, -0.036119107, -0.023291778, -0.0056727757, 0.05949619, 0.003594281, 0.033498462, -0.035585143, 0.05994931, 0.010394357, 0.018273817, -0.007556067, -7.992585e-05, -0.004711629, 0.03648308, -0.036526114, 0.05200437, 0.058539078, 0.023401676, -0.006093121, 0.0134771895, -0.03869395, -0.035131715, -0.01400639, 0.04087654, 0.025921183, 0.006816138, -0.0011687619, 0.0014174542, 0.008643981, -0.045718815, -0.036057625, 0.0110795675, 0.014334664, -0.008962455, -0.013831168, 0.03791621, -0.024638068, 0.02202326, 0.009332266, -0.031923, 0.048108604, -0.049933985, -0.01777428, -0.010186242, 0.033309717, 0.025296975, -0.020301705, -0.010488117, 0.00752133, 0.031594075, 0.06715493, 0.0071450635, 0.020495601, 0.030232262, 0.045133512, 0.052259214, 0.03457892, 0.03948583, -0.01871218, -0.010997875, -0.0074666115, -0.03248863, -0.050912153, -0.044337943, 0.008555332, -0.02801278, 0.034617808, 0.029767463, -0.012979651, 0.033785272, -0.031891644, 0.023335353, 0.0053704027, 0.026415955, -0.0057417504, -0.045975808, -0.017417073, 0.0038828594, -0.00033999226, -0.03575775, -0.09298697, -0.02119157, -0.011875752, -0.016548647, -0.0029649418, -0.037246678, 0.007541158, 0.025148055, 0.021216009, -0.011796287, -0.052804243, -0.01936296, 0.037393, 0.017536348, -0.038078826, 0.0314914, 0.019104738, -0.012303048, -0.07068396, 0.0025641979, 0.01899776, 0.017883006, -0.002127872, 0.0028771672, 0.058583193, 0.006791738, 0.06993942, -0.015091231, -0.028894424, 0.0641654, -0.034940846, 0.025140215, 0.005357645, 0.0072418973, -0.091002345, -0.024339153, 0.023261497, 0.01423197, 0.02823081, -0.03975266, 0.009248036, -0.004666133, 0.016638257, 0.015728716, 0.025243506, -0.023163741, -0.003877403, 0.018659785, 0.011230505, -0.09405674, -0.020399768, -0.013610652, -0.048516527, -0.07177503, 0.0054182042, 0.0369488, -0.006551461, -0.053463016, 0.008592029, -0.016761066, -0.008079505, 0.0074466304, -0.07509588, 0.020754283, -0.028453603, -0.046102922, 0.00612232, -0.025410887, 0.037670285, -0.0055176504, 0.03305226, -0.0536666, -0.009797987, 0.006548387, -0.016042348, 0.048730988, 0.0033336764, -0.01935662, 0.013549508, 0.01539126, -0.004394308, -0.06593391, -0.04767869, -0.008965221, -0.0020670055, 0.030873513, 0.000916419, -0.008180872, -0.0071604056, 0.03585228, 0.012327544, 0.03796601, -0.0022428425, 0.034647856, 0.032936905, 0.027149737, 0.0005197486, -0.0513997, 0.0018949728, 0.011944073, 0.00076163956, 0.0017153318, 0.0020676204, 0.027686315, 0.013109684, -0.01199933, 0.06387736, 0.016201278, -0.0100963265, -0.024599949, -0.021481918, 0.029704135, -0.05007109, -0.011258104, 0.05152881, -0.009451539, -0.019791484, 0.033587918, -0.014020224, 0.053540487, -0.070568375, -0.04601408, -0.07531536, -0.03306963, -0.021533562, 0.014373305, 0.0036161838, -0.0007608326, -0.010417374, -0.011487497, 0.03476114, 0.036019508, 0.038525566, -0.015467919, 0.0010833028, 0.047350224, -0.0451495, -0.0033415155, 0.05439754, 0.019784108, 0.016897555, -0.005268958, -0.0054042176, 0.009815587, 0.04499789, -0.032912545, 0.045222048, 0.03785273, -0.043043148, 0.014341157, -0.015649173, 0.016483938, 0.0051287804, -0.022723535, 0.048922, 0.01992857, -0.017258067, -0.013020537, 0.009093103, -0.018672908, -0.00023916275, 0.011820111, -0.022364559, -0.017402165, -0.0035451727, 0.0015872967, 0.047517672, -0.024367854, -0.06312913, 0.073770635, 0.020973621, 0.052066773, 0.02737376, -0.053590283, 0.068652615, -0.021837587, -0.031054268, -0.024583349, -0.029481728, 6.1808045e-05, 0.0022360026, -0.006038936, -0.03652212, 0.016520366, 0.036012743, 0.046400644, -0.0026061975, -0.114367746, -0.016338497, -0.041356094, -0.028567037, -0.052018203, -0.016932907, 0.005231454, -0.004117411, 0.046786204, -0.00016594221, -0.040329356, 0.07283828, 0.012076297, -0.007688252, 0.012786906, -0.017976074, -0.025339916, 0.023832044, -0.035736077, 0.061485883, 0.03508622, 0.023095496, -0.03714308, 0.013259545, -0.048997622, 0.028505094, 0.013617213, 0.0142089715, -0.010949227, 0.005090662, -0.03633429, 0.0003882552, 0.02264361, 0.034684595, -0.043522086, 0.050291806, 0.015106294, -0.0069498606, -0.007471223, 0.038631085, -0.045591548, 0.0316408, -0.0067417454, 0.0002688275, 0.04426048, -0.055928115, 0.06861911, 0.013254166, 0.025858318, -0.0116993, -0.016853904, 0.004343586, -0.011233887, -0.0130837085, 0.003344311, -0.011895887, -0.055895224, -0.00024561828, 0.038991213, -0.010406346, 0.00802152, 0.009635138, -0.01042479, -0.026235968, -0.040182415, -0.020944107, 0.055561993, -0.0056535243, -0.03736472, -0.016852058, -0.01384285, -0.041061603, -0.003457408, -0.004877014, 0.0018459797, 0.036155574, -0.067649245, 0.017307637, -0.011406341, 0.022914741, 0.018450115, 0.029602269, 0.015761994, -0.021613488, -0.010944923, -0.015455816, -0.00044328108, 0.021983914, 0.0009048529, 0.021426432, 0.04729782, 0.037916824, -0.00053338497, 0.0037460632, -0.03972499, 0.034973707, 0.031212889, -0.010651042, -0.024734592, 0.007870353, 0.037271578, -0.013833167, -0.013804425, -0.0031214121, -0.039171048, 0.038259123, 0.031449288, -0.038633697, 0.019764895, 0.02937275], [-0.051254414, -0.06668799, -0.043007165, -0.06392299, 0.018269628, 0.02445042, -0.0038166384, -0.024395872, 0.016466599, 0.046762064, 0.004444992, 0.009770357, -0.05230139, -0.021902962, -0.024723934, 0.031990245, 0.004993005, -0.05412472, 0.03627117, 0.029516576, -0.016492037, 0.0060103806, -0.033388186, 0.027172351, 0.0019873918, 0.03501954, 0.02985866, 0.027447999, 0.017015457, 0.014039868, -0.01689706, -0.04609481, -0.001768356, 0.012462216, 0.015330403, -0.001611056, 0.014677524, 0.0036439043, -0.036527418, -0.020719618, -0.06293816, 0.038182452, -0.015384529, 0.020465063, -0.020549845, 0.0585122, 0.01182329, 0.016369345, -0.032623675, -0.039611258, 0.044264715, -0.009471825, -0.022674873, 0.010577576, 0.0018588458, 0.031820048, 0.05144047, 0.0010013073, 0.0052968226, -0.038926665, 0.0065490906, -0.004992371, -0.08634753, -0.017883567, 0.016083708, 0.00754321, -0.013987011, -0.009412627, 0.015714774, -0.05206544, -0.02099595, 0.024966532, 0.021231266, -0.009652593, 0.04160169, 0.027002737, -0.07603338, -0.002901592, -0.02097375, 0.0029552942, 0.018927583, 0.03404487, -0.0055444003, -0.03355056, -0.05070373, 0.020418126, -0.015591302, -0.024687637, 0.0473549, -0.007138543, -0.04765586, 0.012586956, 0.033423703, 0.030124845, 0.010609397, 0.012808371, 0.010764053, 0.054181803, 0.020916665, 0.017520763, 0.043584775, -0.041314073, -0.039427318, -0.018075963, 0.004810757, -0.006508497, -0.010344586, -0.033333212, 0.00025603527, 0.0046562054, -0.021118788, -0.0010765744, 0.033675723, -0.067079134, -0.015910976, 0.009899326, 0.038420938, -0.027025148, -0.028560301, -0.0034306296, 0.0009903132, 0.030287853, 0.017128782, 0.03326688, -0.03428653, -0.023414437, -0.010696397, 0.0067278505, -0.058295704, 0.024386568, 0.02089806, 0.019092495, 0.044328142, -0.03535285, -0.034320142, 0.018766478, 0.002841125, 0.037250068, -0.0067483587, 0.024985323, -0.03651727, 0.012025413, 0.008404871, -0.01668352, 0.010887526, -0.053838868, -0.0010854544, -0.048392992, -0.024098817, -0.003281833, -0.021589419, 0.013370496, -0.008413434, -1.3531179e-05, 0.009481128, -0.04605358, 0.00767535, 0.022499813, -0.03223465, 0.028352894, -0.013169326, -0.007809499, 0.00094284833, 0.005460254, -0.0040006572, -0.05617131, 0.0012381029, 0.0155760795, -0.015911398, 0.0021071641, 0.07263326, 0.009844778, 0.03057095, 0.026168877, -0.056015696, 0.005930885, 0.028848527, -0.023356507, 0.051825263, 0.038975716, -0.014851315, 0.0043482655, -0.0067550186, -0.021984572, -0.005832573, 0.03652911, -0.022569584, -0.0072201523, 0.028581232, 0.027026206, 0.03731223, -0.022163227, 0.013586572, -0.030490821, -0.018003235, 0.048373964, -0.038685642, 0.010372996, 0.0067918063, 0.05677091, 0.015254713, 0.010695103, 0.016528124, -0.024449889, -0.034890145, -0.018642582, 0.043680336, 0.024452917, 0.04475691, -0.013846202, -0.036755756, 0.038927723, 0.041899294, 0.040745765, 0.033675723, 0.019522533, 0.0070746923, -0.043860048, 0.028505754, 0.068044916, -0.02625979, -0.0033057635, 0.029052712, -0.041977104, -0.018779162, 0.021375563, -0.002511725, 0.016090263, -0.012889849, -0.013779815, 0.07201801, 0.0026895334, -0.00078990904, -0.06826987, -0.02090834, -0.01796983, -0.03496964, 0.030206665, -0.056454614, 0.017130474, -0.016786696, 0.017345704, 0.0201678, -0.029606642, -0.0004446261, -0.0064873546, -0.037834868, -0.003191244, -0.01873413, 0.0003537135, 0.057607725, 0.006593913, -0.030443462, 0.006603216, -0.016871689, 0.017556282, 0.010232109, -0.017952492, 0.052398644, 0.0070582014, 0.008015109, -0.04013263, -0.0034320569, -0.047333755, 0.025136704, 0.003364612, 0.0058412408, -0.031200336, 0.0033718008, -0.039610837, -0.018310223, -0.0665937, 0.03707374, 0.0067046997, -0.040380847, 0.03940195, 0.02635028, 0.026063588, 0.034569837, 0.03661791, -0.056005128, -0.016075093, 0.01214648, -0.0013408553, 0.0106356125, 0.0040542795, 0.008491026, -0.035633516, 0.009730186, -0.014546018, -0.0070446706, 0.025340939, 0.015440555, 0.022506053, 0.037070356, -0.047741383, 0.025795659, -0.0015768053, -0.049902145, -0.030358681, 0.038141012, -0.011599603, 0.015885815, 0.0011655842, -0.020032277, -0.026665725, -0.03334315, 0.040796187, 0.026744323, 0.028583825, -0.031482864, -0.040230732, -0.056249112, 0.029693432, 0.022405941, -0.02285247, 0.042041373, 0.08197823, -0.030541563, -0.011894858, -0.011990316, -0.015876725, 0.0032518173, -0.046194073, 0.033600457, 0.026105028, 0.025077926, 0.0035210666, -0.060062047, -0.0013040674, 0.051991865, 0.033153713, -0.010860463, -0.014724883, 0.041970335, 0.022375496, -0.038087733, 0.02730067, 0.03309388, 0.03922858, 0.009376737, -0.05807244, -0.0073888693, -0.016292386, 0.041516356, -0.07620422, 0.03351504, -0.07511665, 0.003055298, -0.004725976, 0.018532641, -0.015288555, 0.006127721, -0.0077504055, -0.019829521, 0.033620752, 0.006809566, -0.02314339, 0.00040234113, -0.013976863, 0.0004812026, -0.023165802, -0.045430932, 0.05605714, 0.009968674, -0.020154057, 0.0559824, -0.02541832, 0.03991201, -0.03746276, 0.07492954, 0.0003712617, -0.01798509, 0.034014847, 0.01668479, 0.07058455, -0.03435228, -0.014802265, 0.022594692, -0.011823608, 0.028911054, -0.036696557, 0.053244345, 0.041836716, 0.04668933, 0.04451927, 0.03868057, 0.03416147, -0.024745144, 0.029812358, 0.0056363703, 0.018845445, 0.022200014, 0.009523413, 0.023958644, 0.006163452, 0.06325657, 0.026248796, 0.019914936, 0.019961873, 0.00062687416, 0.02253195, -0.031352166, -0.013545661, -0.007589723, -0.014755751, -0.051367737, 0.0028905983, -0.017939806, 0.05819422, 0.051484443, 0.007478302, -0.019306244, 0.042421937, 0.031195924, -0.0316841, -0.049067438, 0.029579159, 0.0037901045, 0.0012600911, -0.01636596, 0.061422884, -0.058141362, 0.019069448, 0.011650768, -0.007119409, 0.00025899522, -0.04948606, -0.052306462, 0.033417784, 0.025545703, 0.019922547, -0.02086677, 0.09643672, 0.036248337, -0.01828147, 0.002152726, -0.020313682, -0.077615425, -0.0041253185, -0.014870554, -0.03527071, 0.032304846, -0.009112827, -0.01875654, -0.026829977, -0.036973946, 0.035619136, 0.022623338, -0.02120801, 0.040907715, -0.009781351, -0.03715662, -0.012491498, -0.047958728, 0.022674873, 0.060927514, -0.056515507, -0.009532928, -0.02973984, -0.033621598, -0.027463641, 0.02663359, -0.023367925, 0.010645655, 0.00954075, 0.028044216, -0.047830183, -0.00049600226, 0.009089147, 0.0072501753, -0.022615675, -0.021115405, -0.025120633, -0.0032703169, -0.004616881, 0.06918492, -0.0031383878, 0.005706299, 0.006785887, 0.010654112, 0.032634668, 0.02468732, 0.0159651, 0.03120417, 0.03274038, -0.030648122, 0.011487971, -0.019132137, -0.006469172, 0.009975016, 0.023693096, 0.008479186, 0.050931357, -0.04745173, -0.036481433, 0.028621826, 0.052583005, -0.036790006, 0.012238951, 0.032422397, 0.052640937, -0.035381496, 0.007738143, 0.009272241, -0.0492907, 0.027724963, 0.071786284, -0.011444841, -0.0014440306, -0.0024212354, -0.03956686, -0.011306886, -0.041072205, 0.042348363, 0.037996396, 0.017891603, -0.041117873, -0.020235032, -0.04552227, -0.0228734, 0.0036483442, 0.016115634, 0.03094919, 0.0216279, -0.015592992, 0.03882518, -0.022460911, 0.011726036, 0.021630699, -0.011540827, -0.040199444, -0.034068126, 0.002961637, 0.005136351, 0.015781583, 0.0054244176, 0.0046462687, 0.006414202, -0.009916768, -0.027303383, 0.03972141, 0.015634008, -0.0025527417, -0.047853015, -0.0057230545, -0.019554589, -0.0069651743, 0.026055977, 0.008337744, -0.0073289303, -0.020300152, -0.11176754, -0.051347442, 0.07515365, -0.006061968, -0.018638354, 0.029130938, 0.024640277, 0.017180793, -0.022289183, 0.01212436, 0.026837826, 0.031188257, 0.0074818963, 0.036142625, 0.039155003, -0.08301379, -0.043858144, 0.020316644, -0.017180158, -0.049684376, -0.06303838, -0.03148991, 0.017923739, -0.013395867, 0.013389842, -0.03082149, 0.0055666002, -0.020006694, -0.010773145, 0.0060530882, 0.0030267558, -0.013798843, -0.0004429347, 0.018154614, -0.005657724, -0.0066383914, 0.058296442, 0.017658189, 0.037377875, 0.010466368, 0.038404025, 0.013344069, -0.012305339, -0.022611445, -0.027227271, 0.024694402, 0.010979284, -0.036239248, -0.03723696, -0.055857554, 0.0014601516, -0.011105716, 0.025632283, -0.017498987, -0.00094802823, 0.061580397, -0.019195668, 0.02376794, -0.0149032455, 0.0062247654, -0.009333131, -0.019635696, -0.0075652506, -0.0025607757, -0.042594884, -0.020106487, -0.014717694, 0.0050090733, 0.031111142, -0.0045942585, 0.01747137, 0.053507358, -0.03874315, 0.026154924, -0.004364228, 0.07502447, 0.02384786, -0.014159533, 0.054110337, 0.0009471826, 0.06657679, -0.01761252, -0.04747753, 0.05484446, -0.011455835, -0.027097031, -0.0036246646, 0.032040987, 0.0013590378, 0.057937976, 0.0007332208, 0.009200356, -0.01315039, 0.01564437, -0.00033087964, 0.004852196, -0.04083583, 0.014403941, 0.027139423, -0.018829904, 0.02529654, -0.04214709, 0.03739764, 0.021140777, -0.004407359, -0.02709661, -0.0035743457, -0.048971877, 0.03720398, -0.03304652, 0.04312556, 0.010121322, 0.02064562, -0.023267709, 0.04654895, -0.0008106022, -0.019503504, -0.018350182, 0.048460227, 0.0056518046, 0.0110701965, 0.0047896146, -0.045611914, -0.015849557, -0.04132052, -0.038923282, 0.01655841, 0.03353153, -0.024349356, -0.02512317, 0.0074514514, 0.010037597, 0.016327905, 0.007683067, -0.024798423, 0.051027767, -0.042345826, -0.0419623, -0.017702166, 0.030196518, 0.019821486, 0.0049697487, -0.019112157, 0.0064355554, 0.047562093, 0.037657693, 0.046676647, -4.3976335e-05, 0.05031569, 0.03396495, 0.013224191, 0.030366292, 0.021281373, -0.009438421, 0.02954829, -0.03269006, -0.055975106, -0.045847017, -0.01008316, 0.013520185, -0.0033134476, 0.03237784, 0.035680875, 0.0010094472, 0.041819375, -0.041620642, 0.021555169, 0.0022419472, -0.0040407483, 0.014027605, -0.05440295, -0.031922165, 0.020184714, -0.031673532, -0.049568094, -0.051687412, -0.010961946, -0.03301608, -0.0092921145, -0.019395255, 0.00987311, 0.015767206, 0.00878385, 0.0055114185, -0.029013807, -0.046767775, -0.011581236, 0.024147237, 0.007949567, -0.030541986, -0.0043185605, -0.016743565, 0.0018199435, -0.08753489, -0.03330615, -0.024093216, 0.032124817, -0.015898712, -0.008693783, 0.060859863, 0.0025840325, -0.0037350282, -0.003950312, -0.011367037, 0.037457265, -0.055380583, 0.021300402, 0.017568544, -0.011933654, -0.0632904, -0.011904901, 0.0026427028, -0.01396978, 0.016548209, -0.044720124, 0.013349353, 0.01016403, 0.0036343902, -0.0037868274, 0.029453149, 0.005499579, -0.018337708, 0.016702972, 0.0014195052, -0.094867095, -0.03471424, 0.0083681885, -0.02404829, -0.046981946, -0.015378186, 0.025794232, -0.011275067, -0.034562014, 0.055697717, -0.00417162, -0.0048087486, 0.00825275, -0.055533253, 0.006152617, -0.022639778, -0.043303158, 0.011837456, -0.04077367, 0.042211358, 0.0061237044, 0.014824253, -0.031504393, 0.006932192, 0.008712547, 0.00093280565, 0.04645169, 0.015960872, 0.0071529197, 0.007486759, 0.025934197, -0.006076768, -0.047506277, -0.043966185, -0.043047756, 0.0066435975, 0.0045142337, 0.018634971, 0.034348898, 0.014858398, -0.016797267, -0.0047561037, 0.02080588, 0.0032324719, 0.028811263, 0.026012002, 0.023058584, 0.01693089, 0.006427944, 0.010511744, 0.009369707, -0.014644965, -0.027483411, -0.0041870545, 0.03731984, 0.0514485, 0.022792002, 0.034314543, 0.017617596, -0.011152228, -0.008255711, -0.0048499233, 0.008517877, -0.08147462, 0.0021523032, 0.0644693, 0.00131929, 0.007113172, 0.04839088, 0.009643238, 0.036216203, -0.06414118, 0.00059917755, -0.065041, -0.05512264, -0.008274316, -0.012985492, 0.0045256508, 0.005137408, 0.019449616, -0.0076756673, 0.06389026, 0.012566237, 0.021003773, 0.024098184, -0.04185532, 0.030595686, -0.036216203, -0.013740912, 0.022348436, 0.0038496207, 0.013551265, 0.023610216, -0.035540067, 0.027848858, 0.0004397633, -0.041759122, 0.025117252, 0.01043423, -0.062037073, -0.0026470372, -0.009621303, 0.0070795557, 0.028476367, -0.015914358, 0.025515785, 0.03496129, -0.012866461, -0.054653276, -0.010178777, -0.029193096, 0.010802109, 0.026982863, -0.0019814193, -0.007968596, -0.019906903, -0.026222581, 0.053881157, -0.032293852, -0.037643738, 0.03379412, -0.004378605, 0.054583974, 0.038871855, -0.047703855, 0.050231118, 0.023293924, -0.050366748, -0.011764514, 0.00046386573, -0.019500121, -0.04246253, 0.003234586, -0.014486819, 0.06533191, 0.044935357, 0.06256394, 0.018530844, -0.08335545, -0.041689985, -0.014988635, -0.049457304, -0.04596626, -0.039549097, -0.0014855756, 0.016031064, 0.037897874, 0.0014833555, -0.019820642, 0.07081374, -0.0017979555, -0.0031375422, 0.0058504376, -0.009865498, -0.054134868, 0.013742603, -0.043128945, 0.057718936, 0.008531408, 0.03578997, -0.030355087, -0.013112135, -0.038119026, 0.02526694, 0.0153223695, -0.0016607408, -0.017113559, 0.02795309, -0.025843285, 0.000654148, 0.047452997, 0.05289338, -0.050210822, 0.039481446, 0.015208966, -0.027375268, -0.01624714, 0.03980281, -0.019971175, 0.050960325, 0.025179833, -0.00033531955, 0.03516221, -0.013478746, 0.09901441, 0.040536877, 0.03666146, 0.022468524, -0.010422391, 0.027690712, 0.03315139, -0.036144316, -0.009489797, 0.01111375, -0.0320579, 0.013175563, -0.0030085733, -0.007698818, -0.0010681174, -0.024976866, 0.05253142, -0.035390798, -0.07378214, -0.048580736, 0.0669861, -0.038291547, -0.049439546, -0.01349566, 0.0070688254, -0.023614867, -0.013197128, 0.028042948, -0.02418656, -0.013633508, -0.069036074, 0.0042745844, -0.007897135, -0.004715616, 0.014463139, 0.024996316, 0.025484286, -0.028904501, -0.028515691, 0.002594498, -4.1862088e-05, 0.06893013, 0.022387125, 0.036390945, 0.02862098, 0.016820947, -0.009919623, -0.01523003, -0.038478024, 0.034635592, 0.049525067, 0.0047798892, -0.039176993, 0.0019226959, 0.0087149255, -0.023323525, 0.028907673, -0.020596992, -0.013878338, 0.025180679, 0.02355905, -0.038371466, 0.01303729, 0.015136632], [-0.044177886, -0.05869127, -0.027778367, -0.03787703, 0.016384305, 0.023777846, -0.025153406, -0.036645968, 0.015384438, 0.027542852, 0.0053744763, 0.01422391, -0.041658126, -0.017359182, -0.010359744, 0.005870199, 0.045374155, -0.04693805, 0.040642373, 0.048103094, -0.0030026634, 0.0073906705, -0.04147534, 0.014214035, 0.016432729, 0.04507421, 0.034918018, 0.024331754, 0.0072400398, 0.008546145, 0.018735256, -0.05395607, 0.0017855586, 0.023266431, 0.014711863, -0.0069405003, -0.015999785, 0.004174789, -0.04025345, -0.038751736, -0.050065313, 0.021905968, -0.017935593, 0.011014231, -0.00015388458, 0.06577685, -0.003405749, 0.034579623, -0.042522673, -0.039802898, 0.030864578, -0.016255973, -0.02360827, 0.022672711, 0.0076712607, 0.012187505, 0.048840363, 0.0006222612, 0.024529662, 0.012894149, -0.021802993, 0.011523352, -0.09612886, -0.0156445, 0.020618238, 0.019561334, -0.004795687, -0.008611052, -0.0076333643, -0.051350746, -0.038309604, 0.028005844, 0.016345453, -0.038543493, 0.041049667, 0.035819024, -0.078035556, -0.010171694, -0.0023519075, -0.02335524, 0.017335366, 0.00629319, -0.018049186, -0.048787344, -0.06478771, 0.009634246, -0.024346683, -0.020348221, 0.054430354, 0.0031098467, -0.048073236, 0.024391662, 0.07672486, 0.03277665, -0.0055495105, 0.008307853, -0.003095683, 0.03491725, 0.01213353, 0.024235673, 0.04645783, -0.031523287, -0.026552457, -0.028367972, -0.005044505, 0.002870981, -0.008726825, -0.018679941, 0.009102923, -0.0052382, -0.010122121, -0.004487128, 0.025693366, -0.037603725, 0.0038213474, 0.029464303, 0.03369613, -0.019884797, -0.029299317, 0.011370616, 0.008153778, 0.020573832, 0.00085481064, 0.047112364, -0.046272557, -0.02190214, 0.017243937, -0.016864792, -0.05617859, 0.023244226, 0.025972042, 0.016321719, 0.023229681, -0.035791755, -0.030023187, 0.034488518, 0.015874993, 0.047393005, -0.009636543, 0.036109094, -0.01851132, 0.0051067397, 0.012451636, 0.01140277, 0.021877054, -0.019942217, -0.0021921853, -0.06109218, -0.007822849, 0.01046951, -0.014607168, 0.0075740307, 0.012201286, 0.009606111, 0.01140124, -0.0588191, 0.014137284, 0.007252481, -0.04350876, 0.02881929, 0.00696567, 0.013210531, 0.016602691, 0.0036735157, 0.009318798, -0.05475535, 0.015017527, 0.012845151, -0.007940751, -0.037619803, 0.0688668, 0.008607967, 0.0004921818, 0.030393735, -0.024631485, 0.0023794689, 0.026348714, -0.025320139, 0.03616211, 0.013224503, 0.013140862, -0.009450886, 0.0046404623, -0.0147349145, -0.0052290135, 0.047233377, -0.029869206, -0.0076459963, 0.023083452, 0.0082931155, 0.013790661, -0.030486468, 0.05008742, -0.011043945, -0.022911958, 0.03176396, -0.018618502, -0.010723688, 0.01724072, 0.042519756, 0.031550165, 0.0035898746, 0.00090722996, -0.039021987, -0.04510962, -0.04006205, 0.037842546, 0.030686574, 0.050823253, -0.016726144, -0.0051897764, 0.045232877, 0.015435159, 0.035879605, 0.03618814, 0.029315777, 0.017984733, -0.03397155, 0.053729065, 0.06015126, 0.0010128821, -0.0037043071, 0.028986953, -0.035324167, -0.040897314, 0.02909969, 0.0002873852, 0.025861794, 0.0016338753, 0.007599391, 0.08228614, 0.0064309975, -0.016084384, -0.052934, -0.015268069, -0.00049093773, -0.02420103, 0.02751821, -0.05511969, 0.017852142, -0.018175988, 0.029709676, 0.049644236, -0.03638413, -0.005984273, -0.04325688, -0.052604027, 0.012658346, -0.0068799234, -0.003364024, 0.049233876, -0.01189677, -0.027869185, 0.007714709, -0.028989011, -0.006810158, 0.011683362, 0.0037887967, 0.022454899, 0.018180965, 0.010736895, -0.046480034, 0.002772602, -0.07583716, 0.028379455, -0.0009939336, 0.01694874, -0.009559983, 0.02579132, -0.0632324, -0.037596837, -0.045114975, 0.02412873, 0.000402033, -0.045132585, 0.03161792, 0.015042409, 0.008341922, 0.042600285, 0.019574732, -0.045098137, -0.037218247, -0.0049191387, 0.0063322354, 0.009887945, -0.005405866, 0.012238991, -0.054805875, -0.006884995, -0.020156583, -0.014318156, 0.0031561651, 0.007841845, 0.0193974, 0.040219188, -0.021224396, 0.03602813, -0.007859598, -0.05539424, -0.030846585, 0.038074184, 0.0029628524, 0.065213375, 0.0026679067, -0.011376358, -0.028778713, -0.037306674, 0.040905736, 0.015100594, 0.022623522, -0.050797984, -0.03294283, -0.049276676, 0.031806257, 0.022404753, -0.010435633, 0.052152324, 0.0817575, -0.010043744, -0.0104136225, -0.013985887, 0.0028342323, 0.0034007728, -0.028677654, 0.043717768, 0.05577359, 0.024768528, 0.015206629, -0.04810386, -0.027131345, 0.056102794, 0.04769044, 0.007968551, -0.007691932, 0.023024501, 0.008344697, -0.024925856, 0.018932205, 0.035371825, 0.052959263, 0.02299292, -0.054842625, 0.0054774485, -0.021726724, 0.03993037, -0.058372784, 0.014414812, -0.0676916, 0.012254782, 0.0016743562, 0.010571144, -0.009658506, 0.020275824, 0.0065041115, -0.031152416, 0.0208093, 0.0051749907, -0.036298387, -0.02751261, 0.0021932381, 0.0051951357, -0.049835637, -0.05433427, 0.06779506, 0.017775582, -0.01650412, 0.05373634, -0.018410644, 0.023421366, -0.018460408, 0.058367547, 0.011856002, -0.012824863, 0.03157792, 0.025832705, 0.059645966, -0.035676725, -0.00890406, 0.0076249423, -0.013430832, 0.013008223, -0.03039474, 0.043674894, 0.01057411, 0.037859816, 0.05640444, 0.03642007, 0.03884577, -0.03867862, 0.017002333, 0.027371168, 0.032316145, 0.039866824, 0.027422844, 0.022153636, -0.019485157, 0.04074362, -0.00015465017, 0.008252778, 0.012094055, 0.00014508024, 0.045598835, -0.028043743, -0.020351427, -0.0035600164, -0.0069833286, -0.012682846, -0.014289638, -0.004525623, 0.030423211, 0.046426058, 0.0084648, -0.031913057, 0.022337763, 0.03284096, -0.01737556, -0.03618029, 0.025364159, 0.0070017483, 0.01876856, 0.013370924, 0.03466633, -0.04296777, 0.02935444, -0.0042622583, 0.0012984489, 0.0028988295, -0.03154251, -0.04590048, 0.028555924, 0.022838078, 0.029079974, 0.01375353, 0.052153856, 0.048688773, -0.04550696, 0.01557086, -0.0036488255, -0.08008199, -0.0055618556, -0.030055726, -0.04819956, 0.02898083, -0.006842122, -0.01649436, 0.018509405, -0.044011295, 0.020805806, 0.0017479489, -0.03941589, 0.033375345, -0.019126091, -0.028462522, 0.0052328412, -0.060307443, 0.048263106, 0.04078018, -0.020887343, -0.012479197, -0.0049427766, -0.04908478, -0.018260587, 0.02538732, -0.02151903, -0.0102056675, 0.008219044, 0.02788756, -0.042187724, -0.011512156, 0.01530118, 0.015090593, -0.0015147296, -0.016143335, -0.030885248, -0.017547436, -0.025082994, 0.041228816, 0.00032537783, 0.011648526, -0.0039657815, 0.009478448, 0.04703739, 0.026908366, 0.025142903, 0.028082022, -0.005230544, -0.024114946, 0.016959172, -0.039774187, -0.016703751, 0.008157413, 0.0149700595, 0.005575445, 0.06145124, -0.04172416, -0.03380867, 0.015539303, 0.05552154, -0.026391588, 0.0047071166, 0.021492355, 0.046259537, -0.033725988, 0.012473838, -0.006137392, -0.0687443, 0.002946392, 0.052871983, -0.009575678, 0.011624028, -0.027383799, -0.02059814, 0.0059176655, -0.056878727, 0.066617094, 0.037592623, 0.014729281, -0.046473145, -0.0019185808, -0.035698924, -0.039805576, -0.0052753314, 0.015425972, 0.012528769, 0.015245579, -0.031053942, 0.030753182, -0.010495541, 0.03402227, 0.0015723406, -0.00025494312, -0.020632783, -0.023425769, 0.042450707, 0.017588394, 0.017287899, 0.017111931, 0.0029872316, 0.0015443007, -0.01147531, -0.036568627, 0.034388993, 0.016526131, 0.0059146034, -0.03200646, -0.008760942, -0.010366107, 0.019540088, 0.019378522, 0.005030724, 0.022311732, -0.027853874, -0.13243568, -0.050516248, 0.05571483, -0.03191581, -0.03213738, 0.024007143, 0.039875243, -0.003367852, -0.04390945, 0.018196851, 0.019840583, 0.034599148, -0.0052979165, 0.025508856, 0.016864907, -0.05751532, -0.035805345, 0.018626194, -0.011858682, -0.066784374, -0.06690687, -0.032385048, 0.02140297, -0.04577339, 0.058839735, -0.030474506, 0.019593105, -0.025706762, 0.014016512, -0.02686932, 0.018273985, 0.007528083, 0.02173524, 0.029675415, -0.004312979, -0.0015166434, 0.028839195, -0.01881611, 0.02171189, 0.019085301, 0.027356239, -0.012525898, -0.014698358, -0.02371239, -0.031874012, 0.037491184, 0.020048441, -0.06314015, -0.046197336, -0.04951715, 0.013537631, -0.01756734, 0.051767997, -0.004695585, -0.0022717116, 0.0633425, -0.01128372, 0.04144127, 0.011947874, 0.026872382, -0.007522161, -0.0065416256, -0.008921861, 0.00557889, -0.049647298, 0.0060571954, -0.025683414, -0.011750925, 0.041680135, -0.003694761, 0.009290087, 0.052597135, -0.032703917, 0.025838828, -0.009044762, 0.06607314, 0.025307698, 0.0010890588, 0.04442288, -0.001930639, 0.063657686, -0.005928767, -0.047316063, 0.044705383, -0.012266841, -0.03426803, -0.009453949, 0.008948656, -0.0057926825, 0.05449045, -0.03116507, 0.007289325, 0.009984314, 0.038446646, 0.012306938, -0.014226285, -0.05078727, 0.029718097, 0.03461025, -0.012381009, 0.020614408, -0.041705783, 0.0355971, -0.0008249285, -0.0029364391, -0.022986509, -0.0020764847, -0.038369704, 0.0437415, -0.042435396, 0.03938986, -0.012162241, 0.031700224, -0.043582637, 0.02834462, -0.0045148088, -0.036625102, -0.019290311, 0.053513363, 0.0017728307, 0.025565034, -0.009218528, -0.0071573555, -0.008095783, -0.041447014, -0.03887021, -0.0028487786, 0.02485437, -0.011628621, -0.007429237, 0.020558903, 0.020688672, 0.0340684, -0.0021552455, -0.0032139674, 0.04350072, -0.04802424, -0.049593706, -0.02623043, 0.008527579, 0.030855771, 0.0020556224, -0.000847705, 0.009292792, 0.04511268, 0.055872686, 0.007316791, 0.028745025, 0.062459625, 0.065504305, 0.0013818989, 0.051836137, 0.040763095, -0.0014654443, 0.02186271, -0.0041211974, -0.04318453, -0.052565552, -0.0023356387, 0.013170481, -0.018329874, 0.050967183, 0.04322434, -0.013470642, 0.030016296, -0.033702254, -0.004144165, -0.009809568, -0.000592068, -0.011897345, -0.03909893, -0.04882505, 0.012447041, -0.022130333, -0.02921357, -0.042009722, -0.008198182, -0.0225105, -0.01647254, -0.03375661, 0.0013244791, 0.0068168575, 0.023889624, -0.011513017, -0.023565013, -0.055211645, -0.006738192, 0.0016744996, 0.0033020107, -0.032316145, 0.010396013, -0.0098899305, 0.022271922, -0.07133967, -0.05206045, 0.007083667, 0.025010835, -0.026226984, 0.003360196, 0.06395168, 0.007862277, 0.009774924, 0.0049625863, -0.0031277423, 0.020840451, -0.057413876, 0.03812433, 0.018748462, -0.012623093, -0.05003316, 0.0018412558, -0.00023542045, -0.009929766, 0.009625537, -0.031404417, 0.0054556294, -0.0024338262, -0.004790997, -0.018271018, 0.018504428, -0.027713772, -0.011177064, -0.004227615, -0.014090583, -0.077821195, -0.0074438797, 0.013609703, -0.038576797, -0.07613076, -0.0046015126, 0.010035418, -0.023920631, -0.029643834, 0.07873378, 0.0019204948, 0.011694175, -0.012042808, -0.034286402, 0.0088350605, -0.013232542, -0.025254678, 0.008082002, -0.027263984, 0.045392122, -0.016942998, 0.022795828, -0.020291328, -0.0060175755, -0.0004651946, 0.007237169, 0.048848785, 0.017136311, 0.01662566, 0.009533571, 0.018314082, -0.0051983893, -0.04459208, -0.027328867, -0.031886645, 0.0015066908, 0.0060903076, 0.00468946, 0.058773194, 0.026003957, 0.001130018, 0.008617536, 0.012835964, -0.029867388, -0.008624284, -0.004287714, 0.0062579727, 0.005999202, 0.015152655, -0.00033839294, -0.0053913193, -0.008261284, -0.01908831, -0.0021918982, 0.05053845, 0.037749954, 0.015929732, 0.04892764, 0.014646596, -0.010324239, -0.004051145, 0.0026328808, -0.012849744, -0.0715571, -0.006455879, 0.07538354, -0.015616509, -0.027989384, 0.050743245, 0.022817027, 0.04911138, -0.07176533, -0.00085708353, -0.06302186, -0.046444047, 0.0017536908, 0.018621948, 0.015801113, 0.016192332, 0.0017118702, -0.0090447385, 0.036733244, 0.01156546, 0.019836947, 0.02225033, -0.018615441, 0.029923279, -0.033361565, -0.010017044, 0.026002666, 0.028477833, 0.028789813, 0.006800445, 0.0014140537, 0.01594581, 0.0061456216, -0.046944845, 0.04302337, 0.0028449506, -0.068300255, -0.022972345, 1.5311899e-06, 0.0067908266, -0.0012490681, -0.01162819, 0.021285452, 0.032672912, -0.02918218, -0.028284904, -0.03794958, -0.046380885, 0.0014444862, 0.034608718, -0.013722714, 0.0034689824, -0.005484339, -0.01610295, 0.059281543, -0.004734678, -0.047270894, 0.04081846, -0.0046565398, 0.048988886, 0.034880504, -0.021130513, 0.043822654, 0.0010794889, -0.03040273, -0.030199656, -0.012591931, -0.012561307, -0.0067912093, 0.03326127, -0.0029653406, 0.037649997, 0.04499248, 0.04563443, 0.014383231, -0.10671168, -0.021645952, -0.0334787, -0.030102726, -0.055937424, -0.040374413, 0.015859298, 0.0041160295, 0.048519578, -0.008213613, -0.025135055, 0.08122043, -0.0061004036, 0.0039045338, -0.022581222, 0.002841123, -0.081101, -0.01005073, -0.028725313, 0.06715186, 0.0132302465, 0.04412889, -0.0031657352, -0.02115645, -0.042607654, 0.029911792, 0.03006874, 0.030044243, 0.0009129719, 0.029256156, -0.034284487, -0.02215402, 0.038133707, 0.04846216, -0.050239485, 0.07560977, 0.019132983, -0.031252734, -0.043298986, 0.038650293, -0.053717203, 0.05055204, 0.03961035, 0.009169147, 0.029879445, -0.044077788, 0.10385755, -0.0012636144, 0.013424611, 0.0098044, -0.008998803, 0.010016948, 0.0006147727, -0.05078038, -0.0019752348, -0.0017222058, -0.0012567241, -0.01819757, -0.003971141, -0.012224062, -0.004673, -0.026206698, 0.040700175, -0.02814607, -0.040743046, -0.034485072, 0.06639038, -0.030034289, -0.029434826, -0.008788168, -0.002702933, -0.045229815, -0.013533805, -0.0037384, -0.019302944, -0.0014079768, -0.07404834, 0.024458459, -0.01205965, 0.012073431, 0.010879103, 0.025613744, 0.028170064, -0.0118177235, -0.025858209, -0.007133813, 0.005519413, 0.056986865, 0.006728144, 0.038428463, 0.024918774, 0.0040683714, -0.012479388, -0.0032151158, -0.03356751, 0.046796225, 0.06337978, -0.015756708, -0.0127555765, -0.016497038, 0.035118986, -0.025691833, 0.021902474, -0.00952778, -0.013011669, 0.058323022, 0.039671622, -0.04470596, 0.014057854, 0.010879869], [-0.04493753, -0.09917237, 0.007793054, -0.024657601, 0.020190557, 0.02334179, 0.012279016, -0.042818025, 0.033173665, 0.076094165, -0.0024528187, 0.017265076, -0.017135661, -0.02088818, -0.018966692, 0.015998654, 0.018879335, -0.025296757, 0.038263656, 0.048293613, -0.006366183, 0.0034271323, -0.049829695, 0.0150935715, 0.014063364, -0.008457233, 0.0356764, 0.044835847, 0.014826783, -0.01774682, -0.0011220847, -0.029503552, -0.022840505, -0.01789492, 0.016308986, -0.0042030965, 0.022594087, 0.0027224782, -0.028113259, -0.060037144, -0.07126195, 0.042485237, -0.015526683, 0.03543071, -0.013045075, 0.018636748, 0.024600025, 0.06011426, -0.0074342564, -0.04462878, 0.026262486, 0.0007379321, -0.04635027, 0.017799642, -0.02843178, 0.030614939, 0.00796618, 0.017074915, -0.027751952, 0.007152184, -0.015257816, -0.004131522, -0.080987655, 0.011334547, 0.016229223, -0.020141928, 0.028505202, 0.009027915, -0.027755914, -0.05708964, -0.00830649, 0.044246342, 0.039661344, -0.0051480937, 0.033811666, 0.050800577, -0.043044105, -0.01785035, 0.014893075, 0.011289781, 0.027423397, 0.008063902, -0.03260985, -0.06797427, -0.04267223, 0.01575382, -0.011084037, 0.01756458, 0.034866467, 0.012114869, -0.045897186, 0.0003210295, 0.05069493, 0.0171832, 0.004230036, 0.04342231, 0.0046176882, 0.0084969485, 0.0005757666, -0.01155906, 0.0376076, -0.0043758266, -0.004983815, -0.013412193, -0.0022417924, -0.021630337, 0.015178846, -0.011792123, -0.025773216, 0.029620817, 0.015402285, -0.027766742, -0.005079424, -0.050291367, 0.0080353785, -0.017034242, 0.006482525, 0.012302389, -0.013140157, -0.012791528, 0.016199643, 0.026295103, 0.010892158, 0.026118148, -0.032625895, -0.0026984068, -0.003483124, -0.0071970834, -0.05389651, 0.02755545, -0.00999721, 0.008566245, 0.07993437, 0.01791321, -0.0114946, 0.04096923, 0.04223486, 0.06430627, 0.02931466, 0.013632464, -0.037683662, -0.04526371, 0.01907742, 0.013589414, 0.026409201, -0.03973582, -0.0002493228, -0.042927895, -0.014318102, -0.0036748701, -0.016825989, 0.0074089016, 0.018066395, 0.005628383, 0.013776934, -0.050451946, -0.02733888, 0.005386323, -0.06564532, 0.009984005, -0.0069058985, 0.016001822, 0.02757711, 0.004024556, 0.0022228092, -0.048157334, -0.0057365373, 0.0010374364, -0.019149259, -0.0022843147, 0.07050342, 0.020664211, -0.021330833, 0.037343483, -0.07213722, -0.00688226, 0.0627892, -0.000642059, 0.02091776, 0.016108789, -0.016574683, -0.015097235, -0.009576347, 0.017652266, 0.011328605, 0.045778204, -0.009625339, -0.018188944, 0.012759834, -0.023067642, 0.012992254, -0.0049267667, 0.020191185, 0.0013733883, -0.016115127, 0.010628969, -0.003354237, 0.0061823605, 0.017340085, 0.015211861, -0.011904107, -0.012021902, 0.014254186, -0.038731664, -0.038201325, -0.053843163, 0.0036796243, -0.0019988082, 0.03770268, -0.024825051, -0.011765316, 0.035062604, 0.016041836, 0.028986417, 0.001190622, 0.04608616, 0.0058096964, -0.01439051, 0.05213382, 0.018518029, -0.010036827, 0.019932356, 0.061684154, -0.022651399, -0.018923178, 0.009067533, -0.02079944, 0.003786326, 0.023218714, -0.0105881635, 0.07510955, -0.0022145887, -0.009626396, -0.033200078, -0.026452053, -0.000361835, -0.022697883, 0.011953628, -0.056966033, 0.010505364, 0.0011799254, 0.039207067, 0.044232346, -0.0070452844, -0.016104035, -0.011960099, -0.019664807, 0.021463947, -0.0101863155, -0.032388724, 0.07133801, -0.0009818076, -0.019165106, 0.008867995, -0.016259598, 0.0076994263, -0.0038810766, -0.0004932313, 0.030894898, 0.039990295, -0.023764966, -0.04228768, 0.0010616027, -0.02727338, 0.01610377, 0.0023273649, 0.047451623, -0.013647254, -0.030214544, -0.06939626, -0.024710424, -0.038829386, 0.019628888, 0.010620121, -0.05258281, 0.026222209, 0.019662695, 0.031298462, 0.042150743, 0.028977437, -0.046113096, 0.0037398422, -0.011426591, -0.015408888, 0.023893919, -0.0003765428, 0.03718713, -0.017997727, -0.035179872, -0.028011179, -0.021411125, -0.013888124, 0.030030653, 0.042367972, 0.02552921, -0.0054841773, 0.023346543, 0.0188693, -0.07843104, -0.017692411, 0.041834995, -0.041926377, 0.001981905, 0.034743555, -0.00092122663, -0.03003072, -0.040874414, 0.013972642, -0.01676379, -0.010877235, -0.04193483, -0.03111464, -0.055484362, 0.01169493, 0.014082512, -0.043622907, 0.031926, 0.07578146, -0.027274964, -0.030132009, -0.04074209, -0.03569753, 0.016741471, -0.034577694, 0.05720189, 0.061242558, 0.0066989656, 0.008312878, -0.05565577, -0.028889354, 0.05387109, 0.023435287, -0.007160702, -0.009204343, -0.002765793, 0.021452324, -0.014245735, -0.008556738, 0.002467873, 0.020789204, -0.006660933, -0.06697909, -0.004110393, -0.011985586, 0.024463214, -0.050821707, 0.017266, -0.0716951, 0.0051496783, 0.01617693, 0.027679058, -0.0059165307, 0.019364774, 0.022508778, -0.015034772, -0.043304652, -0.0071516554, -0.027590578, -0.031068156, 0.025757898, -0.033641145, -0.0064887316, 0.003018021, 0.03878871, -0.011686478, -0.0068648285, 0.09607802, -0.01713652, 0.055148937, 0.00950464, 0.07935227, 0.028139671, 0.02799969, 0.010462577, -0.02817242, 0.067934126, -0.0750673, 0.036650453, 0.046363477, 0.03797313, 0.04168339, -0.012465084, 0.066421285, 0.03394382, 0.028519994, 0.0436822, 0.02776608, 0.026157238, -0.04565288, 0.032760594, -0.009430688, 0.047815043, 0.038523544, 0.020430736, 0.006685281, -0.010185787, 0.044068333, 0.013724837, 0.025126666, -0.0059932554, -0.0073402324, -0.0026696557, -0.013555078, -0.028745018, -0.0023965295, -0.01649862, 0.011962741, -0.024600554, 0.004619867, 0.0033510677, 0.046896454, -0.021966292, 0.016216546, -0.012584991, 0.023290552, -0.025933664, -0.0037894952, 0.022820564, 0.02718675, 0.013793045, 0.024525018, 0.034955375, -0.06278286, 0.017854048, 0.026322572, -0.044825282, 0.043124396, -0.040812876, 0.0030376972, 0.025105538, -0.028323228, 0.038089342, 0.011910446, 0.070271, 0.021232056, -0.05317284, -0.010712429, -0.036915094, -0.05937052, -0.026168859, -0.041193195, -0.015344049, -0.0143783195, 0.02127537, -0.020308187, 0.04472386, -0.012607308, 0.019941598, -0.009104508, -0.017250285, 0.005859878, -0.038993895, -0.014630811, -0.016843023, -0.034023054, 0.059600826, 0.04339062, -0.03798528, -0.03181335, -0.034749895, -0.049137723, -0.0011473075, 0.0364698, -0.027370574, 0.00553251, -0.0004378996, 0.024987217, -0.03749086, -0.0074136555, 0.017076103, -0.0039136284, -0.010999784, -0.0072609987, -0.04292367, -0.044054072, -0.037686303, -0.011998263, 0.0054538706, 0.005373943, 0.010246534, 0.02484103, 0.017889308, -0.0005442877, 0.009472418, 0.061399966, 0.01788046, -0.017342726, 0.0160248, -0.041113965, -0.031706255, -0.00047698835, -0.008971395, 0.029075688, 0.08979002, -0.06277864, -0.016776467, 0.025789062, 0.011749337, -0.06871801, -0.0053712027, 0.036929354, 0.05005842, -0.026737757, 0.0009893678, 0.003657967, -0.056063827, 0.022265794, 0.0308706, -0.021959422, -0.0024847763, -0.040717795, -0.01550661, -0.015318858, -0.03457558, 0.062594816, 0.04867077, 0.026931088, -0.04678923, 0.0059274915, -0.007896323, -0.025871994, -0.027608935, 0.047553044, 0.025138289, -0.010057429, -0.042477842, 0.014501397, -0.037735496, 0.042807456, 0.0019766227, 0.017494854, -0.037242066, -0.014121601, 0.039667152, 0.008285757, -0.008184338, 0.012738705, 0.039610367, -0.014982611, 0.0032348577, -0.026457798, 0.027387476, 0.013223617, -0.0078457445, -0.0052146497, -0.011637221, -0.017184258, 0.022885405, 0.01078506, 0.011225865, -0.022746481, -0.012883967, -0.06015441, -0.074277066, 0.05065267, -0.044954166, -0.0046601444, 0.031836726, 0.038304858, 0.062303897, -0.052564852, 0.0062182792, 0.036233153, 0.0004281274, -0.005623761, 0.023301646, 0.0055358773, -0.046021186, -0.08405982, 0.058008302, -0.007301144, -0.028297346, -0.027194144, 0.010262116, 0.016331963, 0.0014061384, 0.026619567, -0.008302661, -0.053700536, -0.028700648, -0.009579912, -0.041003037, -0.011001633, -0.024413563, 0.06443938, 0.0572297, -0.031111471, 0.004813594, 0.01719799, -0.0059193037, 0.03835451, -0.008035907, 0.03169569, 0.038865834, -0.008305302, -0.03453332, -0.008464297, 0.04177847, 0.020272268, -0.019563388, -0.0323528, -0.030131083, 0.001580453, -0.02458365, 0.03375049, -0.029525736, 0.015799511, 0.050160363, -0.012354156, -0.0023004254, 0.0082561765, 0.036646225, -0.041922152, -0.023966683, 0.011915464, -0.0061081448, -0.05202184, -0.008886879, -0.031799223, -0.02580491, 0.036895547, 0.023689892, 0.022549847, 0.035702284, -0.034535434, -0.003417624, -0.0035702814, 0.08847157, 0.0353526, -0.022238327, 0.0345629, 0.006986321, 0.051916193, -0.019702807, -0.080463655, 0.06522115, -0.014941408, -0.036438104, -0.019772565, -0.011444155, -0.03209186, 0.012891494, -0.0413411, -0.03838409, 0.009858947, 0.015678814, 0.014817803, -0.022574013, -0.0073085385, 0.023636013, 0.043188836, 0.009767961, 0.0010860332, -0.05182187, 0.021917691, -0.0035900238, 0.0027295433, -0.013296643, 0.025988467, -0.051068913, 0.028786218, -0.052522596, 0.015018529, -0.006274536, 0.04456117, 0.0025270346, 0.022022808, -0.0352253, -0.007241982, -0.023019044, 0.025946476, 0.029974729, 0.012963729, -0.024841426, -0.017697793, 0.0009994041, -0.046470176, -0.012239532, 0.018544968, 0.009397079, -0.030408401, -0.043567047, 0.047841456, 0.0078129945, -0.0042828587, 0.006491373, 0.008691963, 0.027918871, -0.019965896, -0.03738363, -0.015118892, 0.04168339, 0.04196652, 0.0028814743, 0.026542313, -0.012412526, 0.06262069, 0.046116002, -0.0029020752, 0.01976702, 0.06854687, 0.029136961, 0.0009788033, 0.03566161, 0.05540037, -0.025467373, 0.02902709, -0.003995768, -0.04795238, -0.05785134, -0.002810164, 0.0033056398, -0.05424435, 0.03581691, 0.048026334, -0.0140243415, 0.029278526, -0.03435095, 0.008261459, 0.027096951, 0.016307402, 0.018000895, -0.026651127, -0.049606785, 0.028986944, 0.0059647313, -0.0155008, -0.06791617, -0.013340355, -0.0152663, -0.022278473, -0.048257697, -0.007369549, -0.0034983107, -7.923394e-05, -0.029078856, -0.024406167, -0.03703711, 0.028490413, 0.029927189, 0.0027676416, -0.030163832, -0.007009563, -0.026941653, 0.020497292, -0.02898886, -0.039904326, -0.013389479, 0.00028101637, 0.026821218, -0.010999388, 0.02591478, 0.03353286, 0.008248254, 0.010045015, 0.0033214868, 0.023641823, -0.05619694, -0.000592934, 0.0022544698, 0.01496782, -0.041896798, 0.015428433, 0.028329434, 0.0130915595, 0.0026205305, -0.026429273, 0.010740161, 0.014906776, -0.0103410855, -0.022575865, 0.019849686, 0.00010307015, -0.008715734, -0.032448675, -0.029922962, -0.0855304, 0.0086157005, 0.010475783, -0.014615807, -0.08488596, 0.025643801, 0.014042366, -0.027719729, -0.045372527, 0.044905573, -0.030008534, -0.025150966, -0.01546673, -0.057990797, 0.02122149, -0.0058527472, -0.012083705, 0.01699753, -0.05048998, 0.02692475, 0.005248192, 0.039955035, -0.039564148, -0.015345502, -0.018138763, -0.017018262, 0.057143517, 0.022546811, 0.00927222, 0.0013665215, 0.009244489, -0.01618591, -0.027976975, -0.06577896, -0.019468704, -0.0057967547, -0.001491711, 0.010260267, 0.007406789, 0.027050335, -0.039933905, 0.0050065285, 0.037364613, -0.054975677, -0.016395615, 0.0076254746, 0.031510282, 0.016497562, 0.01508403, -0.013695851, 0.014963066, -0.016805783, 0.010331578, -0.0044011814, 0.048050366, 0.009564989, -0.003550737, 0.029142246, 0.034747254, -0.005206198, -0.041287225, 0.0014996344, -0.04617543, -0.071789116, -0.011801285, 0.04571059, -0.00083459757, -0.007409958, 0.049830753, 0.006443238, 0.044380516, -0.038332324, -0.001863054, -0.072481096, -0.02850309, -0.032211237, -0.009977139, -0.0030969908, -0.035232693, 0.0097975405, -0.020778308, 0.011266011, 0.040088676, 0.006997942, 0.013645141, 0.00072050066, 0.049966775, -0.026913658, -0.05340685, 0.053937186, 0.0026485266, 0.0006579719, 0.013780367, 0.0013501464, 0.02503687, 0.01484844, -0.067518145, 0.02665377, -0.0030286515, -0.045147497, 0.016835628, -0.0029456539, 0.04702059, 0.0013681061, -0.022564769, 0.030977568, 0.03253636, -0.041126642, -0.054109517, 0.0034922361, -0.005188767, -0.01563233, 0.022128455, -0.0038993664, 0.030558154, -0.015510175, -0.014209815, 0.0055852006, -0.00868952, -0.060619246, -0.01606706, -0.0144665325, 0.052683175, 0.026848685, -0.024684807, 0.08506556, 0.01747531, -0.013056169, -0.021902373, -0.02921197, 0.023494381, -0.033839438, 0.012797866, -0.0019026711, 0.028076282, 0.039384816, 0.019229317, 0.003991278, -0.07097347, -0.020074712, -0.026771365, -0.03437644, -0.02394027, -0.026761528, -0.010443165, 0.014795618, 0.07326076, -0.019755134, 0.012082417, 0.026821218, -0.00965492, -0.028192494, -0.037691057, 0.001729479, -0.026616266, -0.01519126, -0.01993526, 0.045448586, 0.012573634, 0.048972916, -0.019814825, 0.023352357, -0.041374907, 0.017653322, 0.011446135, 0.017483233, -0.007822503, 0.009963403, -0.029163934, 0.0046956674, 0.022437997, 0.03099513, -0.05025122, 0.037122685, 0.02059158, -0.023631522, -0.04021704, 0.04082872, -0.095950186, 0.024133999, 0.0597033, 0.024362653, 0.0015128402, -0.048246074, 0.063621685, 0.020817397, 0.0023247239, 0.015122854, -0.002516536, 0.0129256975, -0.008137326, -0.032957096, 0.0025671797, 0.0048686615, -0.027948452, -0.031398825, 0.021017596, -0.03112263, -0.016108789, -0.0054988354, 0.07734923, -0.039047543, -0.04056725, -0.06899269, 0.06397243, 0.0028397443, -0.028326925, -0.023584774, 0.001181114, -0.059777256, 0.01793764, 0.0035451907, -0.018166758, 0.015096707, -0.045902863, 0.016729983, 0.0021836874, -4.648391e-05, 0.002448857, 0.042816434, 0.0085916, -0.015806643, -0.007033333, 0.029542638, -0.012179049, 0.03167773, 0.038751736, 0.027190976, 0.0042701815, 0.021247637, -0.0021822348, 0.012563598, -0.03335696, 0.030583434, 0.04406569, 0.018768936, -0.0094357, -0.03698429, 0.010920682, -0.0017378645, 0.008695926, -0.013572246, -0.022061704, 0.07853668, 0.02552112, -0.049210615, 0.028013423, 0.017193764], [-0.02622874, -0.06867917, -0.038251296, -0.040371273, -0.0073354333, 0.02375014, 0.031816952, -0.025595805, 0.04884104, 0.023895992, 0.00929452, 0.02278497, -0.07047543, -0.018610118, -0.03489848, 0.03860243, -0.018652817, -0.064611815, 0.023663653, 0.040380456, -0.018374518, 0.008855329, -0.037234128, 0.03597598, -0.013886941, 0.038428493, 0.0071120933, 0.018402299, 0.03902157, -0.0128158545, 0.0059853676, -0.026683878, -0.0062303287, 0.01950076, 0.046240203, 0.011769741, 0.022329653, -0.012409925, -0.038297072, -0.05248647, -0.0747968, 0.028487025, -0.013223081, 0.017614026, -0.002945334, 0.055122584, 0.031816952, 0.026610438, -0.019096356, -0.035162583, 0.038787965, -0.013044554, -0.021811707, 0.0201738, 0.002929873, 0.027095526, 0.027328711, 0.032684706, 0.04416842, -0.029111264, 0.03256295, -0.016270844, -0.051206224, -0.011084576, 0.01848202, 0.016490199, 0.0057486193, -0.014802044, 0.0068876054, -0.048013274, -0.01581716, 0.026123896, 0.006673385, -0.017600015, 0.051585864, 0.019400263, -0.061855882, 0.010898244, -0.012167863, -0.026880765, -0.006873654, 0.033642326, 0.010701599, -0.03827775, -0.084425665, 0.016678631, -0.01914902, 0.0126626175, 0.0583153, -0.010805115, -0.03959774, 0.016914412, 0.029848566, 0.029845668, -0.0023875276, 0.008257662, -0.014749862, 0.038559914, 0.026705137, 0.035803977, 0.018074838, -0.047077697, -0.048466593, -0.026174748, 0.0022104501, 0.000472529, 0.01697046, -0.039850913, 0.007730173, -0.013684015, 0.0099617615, 0.003956102, 0.018864924, -0.08618775, 0.0068062535, 0.007187466, 0.043977086, -0.03532082, -0.049081173, -0.020681117, -0.0048670974, 0.0032901282, 0.010433567, 0.036086142, -0.02522812, -0.030280508, -0.016467974, -0.0036149917, -0.06120845, 0.018955274, 0.040149502, 0.02069996, 0.04475445, -0.021382844, -0.05090171, 0.016728487, 0.00042034787, 0.05715765, -0.030916618, 0.03471397, -0.028690193, -0.008111265, 0.012645224, -0.014921866, 0.020374311, -0.06942093, 0.028069574, -0.04318277, -0.0363857, -0.013986955, -0.011224738, 0.0040377253, -0.014497654, -0.0050586695, 0.0015122861, -0.067346975, -0.022953892, 0.016991718, -0.032920487, 0.012362576, -0.012371274, 0.0087102605, 0.014097357, 0.028270569, -0.020290725, -0.047380455, 0.023276644, -0.0014900608, -0.010235999, 0.03784653, 0.047763117, -0.00013335174, -0.020083932, 0.040215697, -0.059237164, -0.028825236, 0.0060174973, -0.031952236, 0.034371413, 0.040152766, -0.006589316, 0.0042208727, 0.0074162413, -0.003193436, 0.002972693, 0.02432691, -0.047980536, -0.043602157, 0.0079054395, 0.02497108, 0.05318802, -0.02514985, 0.023983987, -0.0063052187, -0.013684558, 0.036780924, -0.04221259, 0.025813708, 0.020901436, 0.038604364, -0.002267463, 0.0040947683, 0.02030232, -0.03284584, -0.048128385, -0.026481917, 0.015832137, 0.029222874, 0.042324685, -0.05049779, -0.00070251245, 0.045779265, 0.03677996, 0.05142642, 0.028637769, 0.02242725, 0.01309746, -0.04991704, 0.049814608, 0.061453894, -0.03126325, 0.008279766, 0.024041967, -0.044645656, -0.023805203, 0.010680218, -0.022539342, 0.009556876, 0.010024316, -0.0006464661, 0.06399628, -0.008634707, -0.018290447, -0.054395188, -0.01598385, 0.0041512977, -0.057221428, 0.03868656, -0.055122104, 0.030129764, -0.019086692, 0.025620325, 0.01982206, -0.019863129, -0.024799075, 0.009190309, -0.06894865, -0.011630592, -0.011210243, 0.0011702098, 0.054471288, -0.005637493, -0.036567368, 0.007611679, -0.017627554, 0.0045186193, -0.0005126312, -0.011647985, 0.0040517673, 0.023770068, 0.012726153, -0.056916073, 0.0043397294, -0.050386667, 0.052273884, 0.008726869, 0.04323109, -0.016408062, 0.010104777, -0.03644368, -0.027636666, -0.08236693, 0.03569575, 0.007285788, -0.032971703, 0.04320983, 0.033331655, 0.009639978, 0.06372667, 0.03839419, -0.05583911, -0.019191297, 0.004656682, -0.0014299076, 0.012150591, -0.000989267, 0.015379599, -0.035728604, -0.02418788, -0.033595942, -0.005843802, 0.03457482, 0.023301769, 0.023788793, 0.041563224, -0.022462038, 0.055898055, -0.013263184, -0.022199713, -0.04710602, 0.033581447, 0.0015150642, -0.0055220183, -0.0039599063, -0.014800111, -0.018363887, -0.055626035, 0.02764488, 0.020316694, 0.014996273, -0.0141666895, -0.031527057, -0.054336973, -0.0009349268, 0.027174765, -0.018936407, 0.053046938, 0.07595541, -0.004513244, -0.0010764771, -0.018383699, -0.03005439, 0.013857952, -0.04824217, 0.013380592, 0.05247874, 0.026097322, 0.0017756075, -0.02929603, -0.014202445, 0.038333915, 0.03544354, 0.0042979363, 0.0012199752, 0.034238543, 0.017436223, -0.025432497, 0.010940641, 0.025953341, 0.03612673, 0.023850637, -0.07604045, -0.013216317, -0.0045656064, 0.051469907, -0.06273717, -0.016589005, -0.056778852, 0.0034067505, -0.0072295005, 0.019446163, -0.024515944, 0.0034265602, 0.010593733, -0.011123759, 0.010165655, 0.0015651919, -0.019039344, -0.005314743, -0.023599634, -0.015026229, -0.030288361, -0.045313504, 0.051347066, -0.00018794865, -0.011538791, 0.054645225, -0.030668486, 0.034891654, -0.033594977, 0.052263014, 0.004914688, -0.02114984, 0.024244893, -0.0078288885, 0.048872445, -0.04191146, -0.008654335, 0.017654128, 0.004242373, 0.01301629, -0.03361782, 0.048065573, 0.007707102, 0.066937745, 0.041049145, 0.0394238, 0.03377785, -0.028593803, 0.033644743, 0.019923523, 0.00540751, 0.030906683, -0.014372032, 0.008619789, -0.023327375, 0.049770158, 0.047896467, 0.009720182, 0.021315021, 0.012956137, 0.01111482, -0.010863335, -0.023782993, -0.034110025, -0.04431723, -0.0634561, 0.006759568, -0.009064053, 0.037612922, 0.034275264, -0.009559291, -0.02316141, 0.024691332, 0.020726534, -0.014090803, -0.020287342, 0.0128462175, -0.0071536447, 0.0043247514, 0.016509525, 0.04796411, -0.038312536, 0.026972804, 0.011730605, 0.00416386, -0.038141258, -0.033020016, -0.062161237, 0.04730339, 0.009693125, 0.0017367132, -0.0017200442, 0.094513535, 0.047770847, -0.003948371, 0.0015235498, -0.00872234, -0.07304487, -0.012005402, -0.019814933, -0.04365772, 0.0122355055, 0.012964169, -0.041298937, -0.014497896, -0.021393895, 0.027654544, 0.034796108, -0.0065987525, 0.009799179, -0.012193713, -0.022411127, -0.037491165, -0.053004418, 0.0389131, 0.067617424, -0.06408614, -0.033777006, -0.04602568, -0.039937276, 0.0024882662, 0.03666424, -0.0053161927, 0.012072681, 0.024913583, 0.03800911, -0.049139153, -0.016466042, 0.03866331, -0.003259387, -0.025804527, -0.0022416138, -0.052892324, 0.016547212, 0.009895086, 0.052973494, 0.009288722, 0.013238544, 0.020944437, 0.031911045, -0.002376113, 0.015525814, 0.014883215, 0.0073568127, 0.02737093, -0.03321425, -0.006038515, -0.0002140392, -0.017286444, 0.00088997796, 0.02713708, -0.012782925, 0.05340834, -0.020378659, -0.037626572, 0.018058773, 0.059067093, -0.024785548, -0.0031393222, 0.029407924, 0.045942575, -0.06010105, 0.024861403, -0.008383102, -0.07259747, -0.005955532, 0.05417753, -0.039988007, -0.004203479, -0.041235644, -0.029524606, -0.010085329, -0.02801353, 0.063749865, 0.028100498, 0.014083103, -0.047917724, -0.023560258, -0.034091663, -0.016077582, 0.00013238542, -0.0023579341, 0.036167312, 0.018092353, -0.025017947, 0.047798507, -0.03400566, 0.029778024, 0.0005841386, 0.00174082, -0.0399746, -0.02659594, -0.018701375, 0.008248361, 0.022339195, 0.016106889, 0.0062317783, 0.010341162, -0.032297213, -0.014013529, 0.006254004, 0.0017345389, 0.01015116, -0.039278854, -0.00076933927, 0.0019247826, 0.016215764, 0.042958587, -0.027902646, -0.009726947, 0.0018630591, -0.108320266, -0.068422005, 0.07636996, -0.00451415, -0.00702597, 0.050567366, 0.032377418, 0.033411376, -0.007487024, 0.002924528, 0.02701919, 0.015004004, -0.00080735784, 0.04832938, -0.0061535067, -0.07202105, -0.06225787, 0.010172902, -0.040960245, -0.038269777, -0.06993284, -0.018827477, 0.0064145783, -0.014106296, 0.006418277, -0.024953686, 0.009124448, -0.024577305, 0.016902817, 0.0063061845, -0.0003116372, -0.013948302, 0.0033218353, 0.015974669, 0.011543139, 0.009639254, 0.041350637, 0.010931581, 0.024287412, -0.007761458, 0.048740063, 0.028136494, -0.05400939, -0.012390116, -0.030400814, 0.01422322, 0.0023351049, -0.013543899, -0.026513806, -0.08546688, 0.0033637492, 0.019243237, 0.012828998, -0.0010011044, -0.0061310395, 0.028769523, -0.008676561, 0.0014828134, -0.018515538, 0.009789274, -0.044655442, -0.020782579, 0.0035415515, -0.012236472, -0.044255387, -0.030215766, -0.04337555, -0.0037913446, -0.0024462314, 0.008797833, -0.00024037134, 0.038887493, -0.0308545, 0.024541553, -0.008594242, 0.07217035, 0.02472636, 0.0053674076, 0.040097322, 0.0010523192, 0.06216184, -0.0012709483, -0.06767698, 0.0877783, 0.007080386, -0.041064605, -0.014320818, 0.002898951, 0.024268748, 0.050433047, 0.01625493, 0.019348323, 0.0055493466, 0.01972422, 0.005934636, -0.0034801906, -0.043895494, 0.018248232, 0.045962382, -0.016568713, 0.016677665, -0.05089688, 0.03320507, 0.008097736, 0.002334622, -0.02509525, -0.012035478, -0.038863335, 0.046088006, -0.05382192, 0.02109446, -0.004704031, 0.003157924, 0.016806427, 0.04012148, -0.013597046, -0.019102154, -0.011552199, 0.066043906, -0.014067642, 0.025655234, -0.033212315, -0.02471259, -0.01840713, -0.041997585, -0.04076553, 0.016797489, 0.044785406, -0.0330664, -0.036563504, -0.02215475, -0.014177803, 0.031674843, 0.017204307, 0.004438777, 0.034403782, -0.059001867, -0.039994895, -0.027554046, 0.026523469, 0.010902471, -0.021065831, -0.019149987, 0.005032579, 0.04779452, 0.004673109, 0.056330483, 0.016286789, 0.028229017, 0.038462315, -0.014390393, 0.030633215, 0.0031134733, -0.029957034, 0.040299285, -0.011267981, -0.0454971, -0.065779135, -0.00083441474, 0.022852913, 4.2759526e-05, 0.036681633, 0.016590938, 0.006724751, 0.03638473, -0.031621274, -0.008532579, -0.022467595, -0.022024298, 0.029297885, -0.068136945, -0.018112645, 0.029771259, -0.04112452, -0.017422212, -0.036615685, -0.008535538, 0.00578534, -0.009198371, -0.020576755, 0.024690608, 0.029223358, 0.011851878, 0.008908477, -0.036059085, -0.033766013, 0.02001339, 0.026324287, -0.0025133905, -0.011809843, 0.033007696, -0.007615544, 0.002883973, -0.06567211, -0.030268839, -0.03893678, 0.030255264, -0.01811941, -0.019579515, 0.05002816, 0.026813727, -0.004994409, -0.009456831, -0.030105121, 0.013899262, -0.024062261, 0.023649642, -0.0074068196, -0.010015876, -0.064491995, -0.01767273, 0.012884267, -0.018240198, 0.00549931, -0.034063157, -0.0028663378, -0.0014378796, 0.0124152405, -0.014591628, 0.009874794, -0.0071062953, -0.013511678, 0.023739027, 0.01850654, -0.09448261, -0.040670346, 0.00066289346, -0.038332827, -0.04617739, -0.029637668, 0.02143726, -0.016816815, -0.027685948, 0.04478369, -0.018196164, 0.0017630453, 0.023331724, -0.05809498, 0.017973255, -0.0032047904, -0.037861265, 0.010296107, -0.047705136, 0.04630591, 0.013405112, 0.036271673, -0.012364025, -0.003285961, 0.00042034787, 0.0071543693, 0.026581153, 0.024665724, 0.016421229, -0.00674296, 0.00990958, -0.0061155786, -0.042137217, -0.049885146, -0.0069724605, 0.016032165, 0.0038889425, 0.006729552, 0.035855193, 0.01828151, -0.011795711, 0.030610325, 0.021583294, -0.007328004, 0.030897502, 0.043725844, 0.012109522, 0.016760286, -0.0007827168, 0.033261355, 0.010169656, -0.00861073, -0.02930936, -0.0059080618, 0.032508835, 0.029487163, -0.0067932084, 0.05106768, -0.003392739, -0.019679045, -0.020673385, 0.00034980674, 0.019902265, -0.09368636, -0.015176975, 0.066494204, 0.006569385, 0.029993512, 0.007575291, -0.013526505, 0.00174082, -0.06340392, -0.017822146, -0.06581972, -0.027814467, -0.009696991, -0.01250994, -0.009813371, 0.015974278, 0.015917657, -0.010499035, 0.04346011, 0.033162065, 0.011114578, 0.023319887, -0.02729169, 0.058774296, -0.02281719, 0.018268222, 0.036596358, -0.0072520883, -0.0028554664, 0.03397522, -0.042990554, 0.006469492, 0.0030864165, -0.0417217, 0.005166172, 0.026622033, -0.056219354, -0.0060216044, -0.03436948, -0.0063525676, 0.045977842, -0.04348813, 0.038339593, 0.012496411, -0.0072878418, -0.015272156, -0.013935982, -0.01342021, 0.012265945, 0.04007558, -0.0045518363, -0.013710105, -0.02634528, 0.010417864, 0.012568915, -0.019113991, -0.04623247, 0.07025704, 0.0007918968, 0.05536803, 0.037390668, -0.041876316, 0.05067173, 0.011687604, -0.026307015, 0.0025771675, 0.010809706, -0.045120724, -0.04438004, -0.00050586695, -0.030381972, 0.03853044, 0.059714764, 0.012016635, 0.008918139, -0.053179987, -0.019614302, -0.016216248, -0.050619546, -0.06574048, -0.021890946, -0.0013436638, 0.008136389, 0.015821025, -0.0014332896, -0.036480397, 0.0720254, -0.0048800516, 0.016569437, 0.016123965, 0.010927595, -0.02475704, 0.0010924214, -0.01194706, 0.052535757, -0.0063057616, 0.034938157, -0.028269572, -0.0006590281, -0.047842357, 0.038702928, 0.0042161616, 0.023654472, -0.035744067, 0.0074155163, -0.031025043, -0.007616873, 0.008011492, 0.056546938, -0.028674489, 0.012634594, 0.0073874933, -0.03601874, -0.03251536, 0.041038033, -0.025380315, 0.040776644, -0.0038213006, 0.0028001452, 0.032628417, -0.007815088, 0.07031309, 0.03363647, 0.01720769, 0.007179252, 0.0012185257, 0.009216007, 0.04422253, -0.014316952, 0.00034775335, 0.020010492, -0.029104017, 0.022798317, 0.00051166484, -0.009275194, 0.0007595251, -0.024530923, 0.065145224, -0.025884733, -0.07423851, -0.055545833, 0.055791274, -0.02042021, -0.026805634, -0.01706709, 0.013989855, -0.013901316, -0.0025752347, 0.008941331, -0.018625759, -0.018915655, -0.07085423, -0.010072647, -0.011678907, 0.016456861, 0.001585243, 0.017597718, 0.017630212, -0.024971563, -0.023969492, 0.00040681945, 0.022882868, 0.05036251, 0.013993477, 0.021141686, 0.044839043, 0.025396986, -0.018157097, -0.00051408063, -0.05633918, 0.02554024, 0.058161106, 0.0011508835, -0.0066028438, 0.0059660412, 0.006554528, 0.0005324406, 0.010470528, 0.017501934, 0.0073307524, 0.033857815, 0.012242994, -0.04339011, 0.021412617, 0.017650746], [-0.031804953, -0.08002784, -0.0049991, -0.050405424, 0.02200546, 0.044869952, 0.00062759314, -0.008064952, 0.035067506, 0.04821233, 0.01393544, 0.018421294, -0.005400004, -0.021726716, -0.013883914, 0.010972743, 0.023518799, 0.021612262, 0.03793945, 0.031172711, -0.009355615, 0.005122106, -0.03096999, 0.056762125, -0.019787977, 0.019846471, -0.0024385753, 0.062134255, 0.009951638, -0.012671806, -0.021935351, -0.04452617, 0.006793294, -0.029500257, 0.011303433, -0.012398765, 0.005959179, 0.012343228, -0.030996174, -0.05950225, -0.039764848, 0.010008548, -0.014653413, 0.07214766, 0.0052777375, 0.055701215, 0.0045088725, 0.0162773, -0.035653498, -0.04936531, 0.03269788, -0.02577862, -0.0414997, 0.040287595, 0.016686544, 0.050020143, -0.01213565, 0.017197572, 0.033770088, -0.010336492, 0.003513529, -0.00906758, -0.06531391, 0.031647418, 0.036893692, 0.03038505, 0.0051970575, 0.052202255, -0.01327406, -0.05583087, -0.0220724, 0.04871238, 0.010137994, 0.01161174, 0.022534227, 0.013891094, -0.07086143, 0.016441273, 0.018885866, 0.0076855347, -0.020100296, -0.008521921, 0.0057004965, -0.03923006, -0.06876833, 0.015971104, 0.0032710284, -0.004420604, 0.024147026, 0.017749567, -0.04174339, -0.047545034, 0.065817036, -0.0072637782, -0.0054633543, 0.00067024917, 0.017109726, 0.02634455, 0.011740976, -0.0149004795, 0.03771303, -0.030491903, -0.013108081, -0.008761175, 0.010171993, -0.008028631, 0.004580247, -0.006650967, 0.01991658, 0.030875385, 0.024335917, 0.022728499, -0.023630826, -0.017866554, -0.020463085, 0.009405345, -0.005228535, 0.0019157217, -0.031621233, -0.018216249, -0.009856506, 0.0019195228, 0.0011356648, 0.03181878, -0.03765559, 0.015011133, 0.020958064, -0.02901119, -0.051041987, 0.009595819, 0.037622962, -0.0057638474, 0.06635763, -0.028477356, -0.030355066, 0.045990836, 0.00386787, 0.00660224, -0.0035814198, 0.048997875, -0.03542734, -0.0070957933, 0.010769388, -0.007870994, 0.01714214, 0.014226007, 0.009036855, -0.035423115, -0.0020517143, -0.0074544367, -0.03307154, 0.015910499, 0.019687673, -0.0049375445, -0.00890213, -0.0347233, 0.0154579645, -0.0042942194, -0.042865645, 0.01645257, -0.016393442, 0.029391294, -0.018020602, 0.020027654, -0.022342484, -0.06774627, 0.009022179, 0.016552662, -0.008862324, 0.0015799636, 0.05406254, -0.020100085, 0.03333761, -2.8296596e-05, -0.07179057, 0.013906932, 0.029799271, -0.0029384114, 0.01849816, -0.025204241, 0.0009521065, -0.0069263303, -0.00942171, -0.017801514, 0.005880624, 0.035182174, -0.029604996, -0.003928792, 0.0058496874, 0.013539709, 0.009461199, -0.026989039, 0.021187814, -0.03638211, -0.009141067, 0.040869363, -0.0546403, -0.014943136, -0.013293487, 0.026245303, -0.0009141489, 0.008195005, 0.06374758, -0.005594279, -0.033082202, -0.053047247, 0.034371495, -0.010071899, 0.037282243, -0.0070272232, 0.0039328043, -0.003367506, 0.02276102, 0.031730406, 0.021725873, 0.036085762, -0.00078005693, -0.04266535, 0.026293451, 0.049687132, -0.009377576, 0.0047738887, 0.04829173, -0.016039947, -0.027857311, -0.012045058, 0.022930248, 0.024822026, 0.004543293, -0.030094486, 0.0470754, -0.0105749015, -0.014938438, -0.024108382, -0.020992061, -0.011967771, -0.031046854, 0.012883821, -0.037965585, 0.037554227, -0.06449258, 0.015100245, 0.017630046, -0.007464731, -0.04170327, 0.00053393986, -0.0015297055, -0.012450079, -0.044558268, 0.0060246405, 0.05056559, 0.034299698, -0.04239404, 0.0039893975, -0.008486181, 0.03960932, -0.008388884, -0.008635318, 0.014494719, 0.030560745, 0.0489075, -0.058830522, 0.024321133, -0.052243114, 0.052557334, 0.013910944, 0.023653843, -0.03156633, -0.007460165, -0.034351222, -0.0046870983, -0.035210256, 0.009743215, 0.0041983486, -0.033138268, 0.023069749, 0.0104047, 0.02086684, 0.018750928, 0.054883145, -0.047274742, -4.2972817e-05, 0.030567423, -0.015037317, 0.019071404, 0.034211006, 0.032221097, -0.03438754, 0.0023292955, -0.038720936, 0.019508075, -0.016881242, -0.002161733, 0.036271587, 0.050398346, -0.029530665, 0.009108337, 0.0049751326, -0.06567344, -0.0031464123, 0.048616927, 0.008300722, 0.008181517, 0.07334139, -0.0014122956, -0.04561749, -0.050818153, 0.028615037, 0.0150909545, -0.022011425, -0.05547484, -0.042029314, -0.048511345, 0.0020602667, -0.0035584024, -0.018045414, 0.04458192, 0.065348245, -0.005147869, 0.00025889272, -0.021209776, 0.0022148683, 0.0013450385, -0.043884005, 0.049991213, 0.06929878, 0.022052761, -0.014541494, -0.076187946, -0.031141458, 0.021843283, 0.023397483, -0.011321171, -0.020759564, -0.007799513, 0.0043890076, -0.022604333, 0.025358817, -0.0046820305, 0.011442383, -0.0069508264, -0.10843002, -0.018362379, -0.01825616, 0.04178098, -0.06147372, 0.0035250378, -0.05070412, -0.004149041, 0.010333087, 0.050759025, -0.0046593826, 0.009568472, 0.03619557, 0.024162756, 0.00051250623, 0.018451808, -0.024020009, 0.0022113486, -0.011511013, 0.0078081707, -0.017353838, -0.08341329, 0.03790899, 0.018327324, -0.013254209, 0.072875135, -0.016164113, 0.05351604, -0.014421787, 0.055954617, 0.046047006, -0.0065669217, -0.003794172, -0.0155236395, 0.049154986, -0.056660764, -0.0079217795, 0.01667567, -0.0049920264, 0.00886317, -0.02026712, 0.0665046, 0.04477788, 0.0055921674, 0.049329832, 0.022077257, 0.01834464, -0.037000965, 0.04644105, -0.007928114, 0.016894545, 0.04238239, 0.04407765, 0.016786216, 0.013259806, 0.02308643, 0.051993728, 0.010366868, -0.0096124485, -0.027033173, -0.013437926, -0.015436849, 0.007393436, 0.014942291, -0.044335272, -0.013584478, -0.016889688, -0.0041370047, 0.028114146, 0.056762125, -0.0024402644, -0.017758014, 0.027933383, 0.040976003, -0.020219818, -0.018070966, 0.00095490454, 0.02950279, 0.028180031, -0.025890961, 0.03516929, -0.0315317, 0.030033246, 0.053946406, -0.019973172, 0.004441298, -0.037830014, -0.045616437, 0.048543442, 0.031417668, 0.058990166, 0.011703809, 0.07778438, 0.05326855, -0.011468568, 0.026502717, 0.032591235, -0.044055685, 0.009950265, -0.056860104, -0.02620687, -0.0011774761, -0.010718497, -0.030089838, 0.054980285, -0.03743597, 0.012800831, 0.011270491, -0.05309624, 0.013487551, 0.009981519, -0.022437934, -0.018333238, -0.081595555, 0.034597866, 0.05104875, -0.026755486, -0.011678468, -0.016803915, -0.023148304, -0.02487619, 0.018466273, -0.007240549, 0.009312325, -0.041522086, 0.04377779, -0.00839691, 0.0015042596, 0.03424585, 0.029570363, -0.045141093, -0.0074990196, -0.01564803, -0.046862543, 0.01852709, 0.024345206, 0.00507945, 0.0099617215, 0.009163029, 0.01761991, -0.034805655, 0.019664234, -0.008261339, 0.015638066, 0.0073351534, -0.012646466, -0.016755808, -0.056049217, -0.02069389, 0.0072582876, 0.029819544, 0.01624816, 0.060858794, -0.024737136, -0.022839047, -0.024098035, 0.048016362, -0.028987538, -0.016733846, 0.04954903, 0.04970883, -0.026178572, 0.015130865, 0.034485526, -0.03859529, 0.048332274, 0.033416167, -0.027495528, -0.0013897007, -0.027785143, -0.05802745, 0.021556094, 0.0017522903, 0.008505238, 0.03421903, 0.0043015047, -0.025369799, 0.03535686, -0.027575243, 0.00082693633, -0.06257369, 0.008654535, 0.017347079, 0.013645927, -0.029418321, 0.029814897, -0.06330202, -0.0041422835, 0.021070512, -0.036366194, -0.024797427, -0.0070802723, 0.009534263, -0.0020241567, -0.020182652, 0.02441785, 0.010318966, -0.018041402, 0.029947933, -0.00922733, 0.04430999, 0.0035763518, 0.016975423, -0.026516128, -0.04496033, -0.043512564, 0.050925422, 0.00012332248, 0.023909355, 0.009828633, -0.002955727, -0.06315462, -0.05697963, 0.042595245, -0.016051034, -0.012207658, 0.02815733, 0.058041595, -0.0034169194, -0.06239663, -0.004160972, 0.03152494, 0.020896824, -0.01588516, 0.031997956, 0.03137459, -0.07655791, -0.04675442, 0.042252306, -0.02063202, -0.038858406, -0.038777318, -0.034971, 0.012827649, -0.025351213, 0.033601996, -0.047191117, -0.012321267, -0.033217564, 0.012651534, -0.04307671, -0.0028522545, -0.027582001, 0.043678116, 0.018341262, 0.009355087, -0.011037889, 0.033858355, -0.0070040408, 0.04981172, -0.020161746, 0.04980201, -0.0045578633, -0.032296974, -0.034893185, -0.03386905, 0.050293185, -0.00564496, -0.0119627025, -0.009899373, -0.03388509, 0.0044265166, -0.0061686574, 0.018860314, -0.024946194, 0.00840694, 0.027136013, -0.012749727, -0.012568756, -0.0063012717, 0.018891145, -0.047532365, -0.037848175, 0.0046144566, 0.0026404525, -0.040888157, 0.0022033334, -0.0034749908, -0.0022160034, 0.023271628, 0.0055503557, -0.0017687484, 0.022386407, -0.009909298, 0.015749378, 0.0026784628, 0.033668302, 0.02504291, 0.025199173, 0.06310732, -0.01924047, 0.04857723, 0.03235441, -0.07954806, 0.06373238, -0.033148404, -0.06520211, -0.04895818, 0.009480626, 0.016393602, 0.028750606, -0.019645438, -0.021722073, 0.05706959, -0.013778753, -0.009295642, 0.0118423365, -0.022124136, 0.003542987, 0.046330396, 0.008410001, 0.0011048343, -0.041188862, 0.047784925, 0.0073583815, -0.010138522, 0.009826099, -0.0127644045, -0.010622838, 0.044695526, -0.042366832, 0.027720526, 0.004551106, 0.042245552, 0.0017883871, 0.04545616, -0.040222555, -0.026619073, -0.025269281, 0.050584175, 0.035884306, 0.010406389, -0.013370141, 0.024742205, -0.0011200383, -0.024937535, -0.028478095, 0.022510573, 0.028742583, -0.05234617, 0.010475653, 0.026445068, 0.035386793, 0.029066939, 0.0246003, -0.010301966, 0.061227076, -0.03541044, -0.036508996, -0.050455786, 0.0336569, 0.031084022, -0.017178567, -0.010042758, 0.024449948, 0.05488526, 0.07558485, -0.00030703915, -0.021902092, 0.05573933, 0.014759072, 0.021165853, -0.00048315382, 0.01535576, -0.043452587, 0.016171291, 0.01496193, -0.033464737, -0.022921085, -0.016099919, 0.017298933, -0.006849888, 0.0521029, 0.039245263, 0.009043719, 0.035472102, -0.022960363, -0.007973727, -0.0018809317, 0.015705032, 0.006786167, -0.06562952, -0.053800274, -0.025302224, -0.028039392, -0.019985104, -0.07440738, -0.0331332, -0.011965975, -0.0076791868, -0.0322824, -0.04925297, -0.0177918, 0.023430848, -0.0011104302, -0.023160763, -0.047338936, -0.0010946981, 0.02277918, -0.0035856431, -0.050839692, 0.0023790256, 0.022231832, -0.015305501, -0.045504306, -0.02666553, -0.009455286, -0.0013565471, -0.0159559, -0.01331038, 0.05902923, 0.038883638, 0.05315938, -0.01099006, 0.0045798253, 0.045268215, -0.04525639, 0.022711609, 0.026076792, 0.020946475, -0.0559411, -0.019657793, 0.0062284186, 0.012929855, -0.0045004254, -0.0017590347, 0.034186404, 0.023690585, 0.013700619, 0.002772644, 0.0070285364, -0.025649386, -0.01681747, 0.0023659333, -0.015083774, -0.04354503, -0.050914444, -0.012395597, -0.0336721, -0.040602658, 0.038860515, 0.030227099, -0.027144458, -0.01746977, 0.038333017, 0.00646007, -0.033867646, 0.016269697, -0.078091845, 0.0050663576, -0.016371481, -0.0354096, 0.030367313, -0.051135745, 0.02780415, 0.015295999, 0.034719713, -0.035616543, -0.009484427, 0.017006677, -0.050131854, 0.03925371, 0.021567497, -0.010348899, 0.0032579093, 0.003502337, 0.012302262, -0.02830644, -0.053883474, -0.009576075, -0.0071628396, 0.0055402196, 0.0043703457, 0.0083253225, -0.021406163, 0.008307373, 0.008462794, 0.06489296, 0.02084361, -0.002917928, 0.03117493, -0.0066695497, 0.026801309, -0.012926899, 0.0104529, -0.007554768, 0.0026514332, 0.003797234, 0.0019433849, 0.025362883, 0.008694604, -0.00056424254, 0.046315193, -0.0100904815, -0.009186258, -0.017603332, 0.0051375213, 0.044154093, -0.08195539, 0.005272036, 0.057424612, 0.0021799994, -0.0004975133, 0.042472348, -0.021837156, 0.029599505, -0.02602273, -0.010618404, -0.06027597, -0.05068807, -0.04649426, 0.0019562661, -0.012044214, -0.0065331873, 0.012828915, -0.010577014, 0.004517319, 0.007854575, 0.028169895, 0.0020348208, -0.01752784, 0.061814968, -0.040193837, 0.008934966, 0.06727325, 0.0013459888, 0.020549769, 0.003871143, -0.0062134257, 0.03984836, 0.03225643, -0.022810118, 0.036709554, 0.033846952, -0.033690684, 0.055794127, 0.005797291, 0.056197885, 0.013900438, -0.023230132, -0.0127376905, 0.017370308, -0.023397906, -0.042846113, 0.004441298, 0.01795989, -0.013198461, 0.017528685, 0.0036156292, 0.0067965677, -0.020054262, -0.010711739, 0.064049974, -0.017421411, -0.05988362, 0.08781236, 0.025640305, 0.034159902, 0.026263885, -0.025929922, 0.08220879, -0.0062404554, -0.04102584, -0.031127945, -0.026894964, -0.014606533, 0.013562938, -0.0071746646, -0.00646792, 0.020012872, 0.04606179, 0.019103158, -0.019796636, -0.08709438, -0.016088357, -0.033957604, -0.020424228, -0.016131489, -0.03055441, 0.008532901, 0.012242079, 0.03552342, 0.021165272, -0.025418788, 0.06431858, -0.04402866, 0.008028526, -0.0014173638, -0.0077298274, -0.040133018, 0.010883472, -0.02159104, 0.019156743, 0.035587825, 0.039284967, -0.0153933475, 0.03684766, -0.042026993, 0.012651323, 0.00097284064, 0.012788371, -0.018888611, 0.00859034, -0.019744266, 0.026423529, 0.02275553, -0.0016065709, -0.02903315, 0.0768299, 0.02159157, 0.010529713, -0.006369268, 0.0076881745, -0.044244047, -0.006802586, -0.0074686115, 0.0023710013, 0.0029037795, -0.03483184, 0.08107777, 0.016576527, 0.010551462, 0.008477998, 0.00047164512, 0.02127587, -0.0011254231, -0.021043375, -0.008062418, -0.011678468, -0.056072872, -0.011695891, 0.031355742, -0.011279783, 0.013249563, 0.038713966, 0.052483846, -0.022883499, -0.052670944, -0.04557103, 0.03777388, -0.019395838, -0.021412497, 0.034564923, 0.0053003323, -0.02640579, -0.013243652, 0.024834907, -0.032322314, 0.03883095, -0.08107861, 0.026009217, 0.008319199, 0.0041291914, -0.03313278, 0.026282048, -0.0018392786, -0.025218178, 0.0029960605, 0.007862441, -0.01218274, -0.025154406, 0.0063109854, 0.03846183, 0.067540176, 0.008244577, -0.0068156784, 0.01621226, -0.037530947, 0.035475485, 0.07117079, -0.009167252, -0.023831433, 0.014335816, 0.05044417, 0.046453718, 0.0018794008, 0.0009282973, -0.037904765, 0.06765336, 0.02979716, -0.03499064, 0.04582191, -4.64571e-06], [-0.03270953, -0.046135485, -0.0029154958, -0.037828498, 0.033931423, 0.05683583, -0.01747223, -0.0390073, -0.0003995407, 0.09782373, 0.026130516, 0.02906542, -0.027264137, -0.0060296445, -0.01662991, 0.017694056, 0.023747701, -0.027366983, 0.057832353, 0.025264489, 0.0028929778, 0.006591499, -0.050483894, 0.016549848, 0.03270404, 0.025833532, 0.019888422, 0.07843901, -0.00015896124, -0.0058065546, -0.023345148, -0.040385872, -0.0071479115, -0.009922373, 0.02051863, -0.02136299, -0.0028189386, -0.009009099, -0.017172478, -0.047692455, -0.052633658, 0.026634557, -0.020343928, 0.033933368, -0.02615476, 0.026417613, 0.030377045, 0.010252417, -0.046606734, -0.054202676, 0.03520156, -0.00519092, -0.03289332, 0.020356366, 0.00804202, 0.042985797, -0.005377282, 0.014583624, -0.015610849, -0.019966057, -0.011711342, -0.028282663, -0.05790153, -0.0127682015, 0.011939971, -0.014705274, 0.01839986, 0.024142288, -0.027856695, -0.062132467, -0.025855882, 0.043033607, 0.022366896, 0.009799193, 0.030582353, 0.03226194, -0.061304238, 0.010157196, 0.0019343523, 0.022568803, 0.015683139, 0.00067199016, -0.00966632, -0.043927908, -0.058317784, 0.014204489, 0.0036495011, -0.0076247957, 0.048352197, 0.00193066, -0.05153531, -0.025272798, 0.06555577, 0.039198034, 0.0056768404, 0.00872907, 0.023827376, 0.02862235, 0.016892254, -0.008893667, 0.010565675, -0.037826557, -0.043988347, -0.022292856, 0.049689088, -0.036745306, 0.0031575207, -0.020900486, 0.010189066, 0.021991117, -0.0022248744, 0.008339247, 0.020662338, -0.035749763, -0.035865385, 0.022388272, 0.018799402, -0.009781752, -0.024001397, 0.0025534849, 0.0058792336, 0.023946792, 0.022854768, 0.07265889, -0.03195354, -0.0039975448, 0.02522295, -0.024459042, -0.068792515, -0.0011045669, 0.021183044, 0.01291424, 0.04718778, -0.03475849, -0.014517966, 0.05441624, 0.008997245, 0.014841305, -0.0025672822, 0.025578769, -0.032449078, 0.0180524, -0.013028797, -0.028324638, -0.0061081536, -0.020575812, -0.01867853, 0.00841212, -0.0055718054, -0.0064120116, -0.038900033, 0.017455226, -0.014264148, 0.011383412, 0.0021978626, -0.04979417, -0.022689063, -0.0064400677, -0.02232453, 0.003084392, -0.008174844, 0.02188768, -0.010197786, 0.007895204, 0.00536844, -0.06034464, -0.00069142313, 0.0015450624, -0.024145396, -0.03227496, 0.03673287, 0.005230326, 0.011448318, 0.015013577, -0.055920154, 0.040822625, 0.024921546, -0.0014325944, 0.019945167, -0.032540027, -0.0039639743, -0.027854946, 0.0017490594, -0.02129381, 0.031548463, 0.017424718, -0.04253515, -0.013884429, 0.029513156, 0.0119671775, 0.021980762, -0.017294904, 0.02616292, -0.029908033, -0.018793182, 0.05426146, -0.0403129, 0.0007703207, 0.0047175344, 0.034419578, -0.0035896478, 0.032413322, 0.048651658, -0.04257985, -0.024875686, -0.035329036, 0.05910404, 0.010100646, 0.026094517, -0.015759218, -0.052764248, 0.009013763, 0.03001569, 0.053381436, 0.0071559767, 0.014355871, -0.028348735, -0.046883073, 0.024433002, 0.063755505, -0.005290514, -0.0057899756, 0.044678602, -0.029703597, -0.02785436, -0.025385022, 0.007739158, -0.0014566426, -0.018199313, -0.022352103, 0.0683611, 0.01770494, -0.016280118, -0.026570234, 0.0050630514, -0.016996488, -0.032933347, 0.028490983, -0.06653363, 0.004113559, -0.026851622, 0.010282732, 0.02465104, -0.032068584, -0.02124795, -0.021454327, -0.033027027, -0.0052173487, -0.02939345, 0.0093769645, 0.04672605, 0.005784207, -0.055233587, 0.003348874, -0.015974438, 0.04270577, -0.008847028, -0.027804615, 0.026560906, 0.025683705, 0.04039403, -0.051119443, 0.016761277, -0.043173715, 0.039336104, 0.0010897978, 0.008290859, -0.052848198, -0.0214415, -0.039325513, -0.021365711, -0.041504044, -0.0024221183, 0.00071707455, -0.049250778, 0.017475242, 0.0011793836, 0.022822013, 0.018274713, 0.025429327, -0.048750963, -0.006817066, 0.014101299, -0.02220162, -0.021934707, -0.001237488, 0.038745828, -0.017631484, 0.009327798, -0.027571613, 0.011141667, 0.012465437, 0.00471015, 0.02494992, 0.04604512, -0.0648935, 0.020029116, -0.013613145, -0.041753557, -0.030428056, 0.041452736, -0.008621995, 0.042904764, 0.037400585, 0.0016140979, -0.044135254, -0.020266391, 0.04780808, 0.010820247, 0.04071662, -0.04274969, -0.0432188, -0.029052984, 0.03586694, 0.009819112, -0.0021545272, 0.016572777, 0.0740565, 0.010315379, -0.003854713, -0.019040368, -0.014161323, 0.0009211201, -0.06169717, 0.020121811, 0.06827152, 0.032611344, -0.0030680685, -0.074433304, 0.009698579, 0.06097582, 0.035841677, -0.025600143, -0.05507443, 0.00032122608, -0.008617526, -0.026106661, 0.019982282, 0.010803922, 0.01278365, -0.0009870948, -0.072806574, -0.03614386, -0.022723198, 0.020886496, -0.08568671, 0.005705115, -0.053824507, -0.01427231, 0.021213163, 0.03682537, -0.010928487, -0.015850263, -0.004889321, 0.0031178165, 0.07174554, 0.010351525, -0.04824872, -0.0007132851, -0.018160058, 0.030092256, -0.025670491, -0.039313078, 0.054384176, -0.008543097, -0.0055749146, 0.07362587, -0.008696229, 0.054323547, -0.048927415, 0.07718987, 0.01980673, -0.009128417, 0.016795868, 0.03271648, 0.04958969, -0.04203106, -0.011740395, -0.0042320997, -0.0013188603, 0.029826801, -0.019061478, 0.04060449, 0.034435123, -0.013027048, 0.051968273, 0.043862417, 0.023155872, -0.032670613, 0.026387565, 0.0050131087, 0.034470636, 0.022852719, 0.012939406, 0.0031702856, 0.013876655, 0.041693315, 0.030812632, 0.009546808, 0.0037855317, -0.03292402, 0.019566612, -0.04019854, -0.0033852137, -0.0030610724, 0.007992102, -0.0072937557, -0.001773059, -0.022982141, 0.057824578, 0.052501515, 0.005353379, -0.0059091602, 0.040407248, 0.02114923, -0.022714939, -0.030530175, 0.039593395, 0.024750536, 0.024286672, -0.040227685, 0.050908018, -0.024427561, 0.035871945, 0.03468989, -0.016138744, -0.0049468423, -0.06772759, -0.017952126, 0.059566546, 0.030278478, 0.030317435, 0.007365172, 0.06730629, 0.04602064, -0.018685136, 0.032946855, 0.026958894, -0.07838149, -0.011945558, -0.032986205, -0.0033284696, 0.008072335, 0.0051745963, -0.024572141, 0.018555323, -0.04655038, 0.024713613, 0.033907324, -0.019601034, 0.04829779, -0.0036907475, -0.048632033, -0.016647205, -0.0317767, 0.06287092, 0.058465865, -0.045069203, -0.0014668936, -0.010295169, -0.0146209365, -0.02066535, 0.0020361564, -0.010582873, 0.019915627, -0.0038858054, 0.03904539, -0.008489852, -0.009875564, 0.0053121815, -0.005807332, -0.03662249, -0.020378519, -0.0034553665, 0.0073771225, 0.006264394, 0.041621804, 0.015599967, 0.0055282754, 0.0062186057, -0.005049254, 0.0073479735, 0.020819938, -0.0070838802, 0.008401091, 0.0056522572, -0.014102077, 0.016348716, -0.041166686, -0.017590674, 0.01729918, -0.011245439, 0.013018498, 0.04072828, -0.022337357, -0.030189227, 0.0037328685, 0.052874625, -0.02245551, -0.01642227, 0.020759014, 0.05864708, -0.020840634, 0.007144705, 0.0031310313, -0.06305281, 0.030954884, 0.056974195, -0.00906322, -0.036013078, -0.0014446428, -0.02041311, -0.0061660637, -0.020197405, 0.022003498, 0.018282194, 0.015952867, -0.045922305, 0.0080969175, -0.019094003, 0.009102182, -0.035055034, 0.030324284, 0.011544705, 0.023005461, -0.04570777, 0.018939463, -0.022718243, 0.010568396, 0.008523664, 0.003665825, 0.0009972971, 0.0030781736, 0.0138169965, 0.010838125, 0.030891338, 0.0003513471, 0.00075972977, -0.020573432, 0.013321652, -0.026090145, 0.039125454, 0.013221183, 0.026436536, -0.020721706, -0.0066466397, -0.03774105, 0.016917517, -0.00830485, 0.023094075, 0.017906263, -0.013745288, -0.09041746, -0.0424959, 0.035101477, -0.035669502, -0.0014553309, 0.04025373, 0.053970642, 0.008678351, -0.025069479, 0.0030817688, 0.020944018, 0.037067894, -0.004797598, 0.034521405, 0.01753393, -0.028900897, -0.02645111, 0.015568873, -0.0063254135, -0.046068348, -0.05915418, -0.045641698, 0.019248301, -0.011107076, 0.021157974, 0.015268634, -0.009964032, -0.014855637, 0.008844308, -0.021714339, -0.0073020146, -0.03817829, 0.008150941, 0.015081884, -0.00023902486, -0.0143325515, 0.046626557, 0.016846782, 0.0401826, -0.0003641728, 0.043887295, 0.02286399, -0.028898686, -0.006047523, -0.022147303, 0.042257257, 0.024050016, -0.022623021, -0.038240865, -0.027403519, 0.031526987, -0.024544159, 0.0055927928, -0.025120344, 0.00717728, 0.04640191, -0.022705417, 0.018450387, 0.005925873, 0.0108571695, -0.031179529, -0.04874319, 0.0043350942, 8.939141e-05, -0.04287017, -0.007815918, -0.020422049, -5.441216e-05, 0.011873705, -0.0016521864, 0.0060626804, 0.065793626, -0.03934621, 0.030086813, 0.020372689, 0.057356052, 0.009078669, -0.018862946, 0.059722785, -0.022490878, 0.028372055, 0.023934355, -0.05328661, 0.04047468, -0.02364597, -0.044573665, -0.04410533, 0.010101666, -0.0134365, 0.026213009, 0.0044925013, -0.003824446, 0.01907457, 0.015052735, 0.011027402, -0.008546304, -0.031206928, 0.024449715, 0.029212333, -0.047322255, 0.009530678, -0.023413116, 0.06298285, -0.01300917, -0.013854842, -0.0010478228, -0.0063522304, -0.0070964145, 0.06007258, -0.023807893, 0.030402794, 0.009152514, -0.002073103, -0.013605177, 0.036053497, -0.01663302, -0.032647297, -0.014365587, 0.038459677, 0.031156015, 0.015239875, -0.007817472, -0.022735927, -0.014968323, -0.05161343, -0.040637333, 0.007218744, 0.026866004, -0.02421652, -0.012191433, 0.013311158, 0.012025865, 0.011864183, 0.0014252099, -0.006936773, 0.050245743, -0.022393597, -0.0520977, -0.037046906, 0.024272487, 0.05138373, 0.0026930133, -0.0140430005, 0.034280315, 0.01538018, 0.06610222, 0.019391328, -0.024366153, 0.034899183, 0.038116496, -0.00011280807, -0.00047112672, -0.002847699, -0.007119977, 0.017467275, 0.018633833, -0.022497095, -0.011163674, 0.00086589425, 0.024029965, 0.0041430974, 0.040549498, 0.035706036, 0.0065986402, 0.056302592, -0.023357634, 0.01643286, -0.0032417986, -0.026850458, 0.014722085, -0.06572678, -0.054296337, -0.0373796, -0.021607067, -0.036048833, -0.08256345, -0.048719093, -0.014800302, -0.009448672, -0.022761382, -0.025837613, -0.010998253, 0.020081975, -0.0020278245, -0.037568074, -0.04699345, 0.007526756, 0.04748938, 0.009456056, -0.039125454, -0.0021523896, 0.015749259, -0.016186258, -0.05661352, -0.021953363, -0.0076775555, 0.03362322, 0.0026027474, -0.02056595, 0.08890053, -0.0058524166, 0.03141447, -0.0004265525, 0.019535908, 0.056293264, -0.0421943, 0.02522159, 0.042575184, 0.013363967, -0.053828005, -0.0043422845, 0.0005126403, -0.006115392, -0.02093056, -0.0015771752, 0.024514183, 0.030420283, 0.0027384863, -0.0052036485, 0.035542022, -0.0010913524, -0.011594454, 0.008254324, 0.011525151, -0.05065461, -0.0139835365, -0.018906938, -0.015986681, -0.041954592, 0.0023661514, 0.014580709, -0.007177741, -0.019414648, 0.03508632, 0.020719081, -0.009234326, 0.026587335, -0.06619628, 0.00074155995, 0.0044957073, -0.01176935, 0.018926105, -0.03514287, 0.008686804, -0.005255437, -0.0046149287, -0.027390305, 0.007072026, 0.00063273567, -0.032030106, 0.07885721, 0.02714467, 0.0130348215, -0.0060708425, 0.01312499, -0.021150783, -0.009947709, -0.043965314, -0.01577292, -0.013618294, -0.003671655, 0.032524187, 0.04192068, 0.0033995938, 0.004858034, 0.00278085, 0.04615084, -0.006645279, 0.006946878, 0.035943117, 0.025892803, 0.030324673, 0.017257983, 0.0045286464, -0.03174697, -0.00975027, -0.012013719, 0.010426148, 0.03746666, 0.06352969, -0.028261676, 0.026894374, -0.004164862, 0.0036384244, -0.014492096, 0.021030689, 0.004629697, -0.110209495, 0.009899369, 0.094266735, -0.026998924, -0.015074111, 0.065254174, 0.015446058, 0.012185603, -0.056763347, 0.00856292, -0.06689276, -0.082908586, -0.025499092, 0.0054346086, -0.002752478, -0.0049328506, 0.018410742, 0.010325096, 0.036937304, 0.016323648, 0.031797398, 0.012260615, -0.023711363, 0.034594085, -0.02755898, -0.018581558, 0.041745204, -0.0035231872, 0.012199596, 0.030813996, -0.028583486, 0.03442424, 0.013330978, -0.052693125, 0.02758026, 0.010800814, -0.042907875, 0.03529328, 0.010788571, 0.031253956, -0.003427966, -0.047672827, 0.00016790038, 0.024367392, -0.013761224, -0.053744446, -0.0069733066, 0.010570727, -0.011376806, 0.042564787, 0.004778942, 0.026490755, -0.020461595, -0.024134124, 0.04042357, 0.00409879, -0.037517864, 0.04365036, 0.041966736, 0.060242034, 0.026785553, -0.0497537, 0.08923595, 0.009932162, -0.052388027, -0.010171964, -0.020205177, -0.007753927, -0.00091188954, -0.027578805, -0.0023587672, 0.021179544, 0.050609525, 0.06449357, -0.00729978, -0.09522283, -0.04293897, -0.03772162, -0.04729194, -0.0105441045, -0.03776826, 0.0383596, 0.006395809, 0.02379055, 0.03798746, -0.015374544, 0.050842725, -0.014168149, 0.0046959636, -0.015906714, -0.0064186915, -0.07475298, -0.006538787, -0.04255808, 0.056302592, 0.017517217, 0.040306974, -0.027387971, 0.016954051, -0.050733894, 0.008082343, 0.024229735, 0.00084173674, -0.02866277, 0.009596167, -0.0130348215, 0.002067662, 0.057996076, 0.019926898, -0.056983523, 0.07498695, -0.0014015017, -0.008230616, -0.0018662399, 0.022245245, -0.05606486, 0.02485392, 0.018304251, 0.003949837, 0.026754847, -0.028713103, 0.09948408, 0.015484147, 0.013067468, 0.015386326, -0.042928666, 0.0063034543, 0.006518237, -0.060876712, -0.001403445, -0.0014186027, -0.03439781, -0.012498084, -0.011332303, -0.0024775993, 0.005220458, 0.006380215, 0.059835497, -0.039162375, -0.067998104, -0.048111234, 0.06447996, -0.039993715, -0.053092565, 0.011135837, -0.002377204, -0.036707997, 0.0032853284, 0.03739048, -0.045584176, 0.017920256, -0.079062425, 0.025782911, -0.015624062, -0.006322693, 0.0012950093, 0.019594984, -0.0021088598, -0.026204119, -0.035521813, 0.0070572575, -0.036286693, -0.0013649679, -0.012740996, 0.071217746, 0.03555752, 0.007442806, -0.02046208, 0.002047452, -0.04645205, 0.011216678, 0.063436806, -0.037551384, -0.036241606, -0.011399104, 0.019502483, 0.0041722464, 0.027160218, -0.021956181, -0.016182467, 0.044461343, 0.02045839, -0.011271868, 0.024796922, 0.010582291], [-0.051069863, -0.059045263, -0.03539442, -0.053593908, -0.012924711, 0.031259257, 0.030573007, -0.017781917, 0.05168644, 0.044332385, 0.012001757, 0.030724764, -0.08988265, -0.03315766, -0.030609753, 0.050967734, -0.030324074, -0.08835171, 0.04526966, 0.03953913, -0.0068950807, -0.018288136, -0.022632444, 0.0209884, 0.0154506685, 0.031406242, 0.014146529, 0.023920475, 0.023095828, -0.02300993, -0.022798518, -0.037060417, 0.00175476, 0.029640269, 0.04736373, 0.012089566, 0.02967773, -0.006025456, -0.012950005, -0.06590872, -0.07250399, 0.0059983805, -0.024957966, 0.019268477, 0.0032422733, 0.058941226, 0.03399281, 0.026796836, -0.0014426542, -0.03797502, 0.025625126, 0.0006701222, -0.028372785, 0.007421282, -0.046875045, 0.030266149, 0.03204286, 0.018682444, 0.044040803, -0.049357697, 0.03723365, -0.020290218, -0.03567169, -0.02491072, 0.017473808, 0.008700784, 0.013392513, -0.00537261, 0.02763902, -0.038099814, -0.0061488184, 0.01622139, 0.009528771, -0.01929902, 0.046624027, 0.01830639, -0.075228, 0.005423673, 0.002523571, -0.014857, -0.0013180982, 0.02064957, -0.0077315387, -0.055054225, -0.06941538, -0.004372345, -0.0037438974, 0.0026991903, 0.033670202, -0.002272588, -0.05404584, 0.0028423578, 0.025236664, 0.03502624, 0.022502398, 0.0008131931, -0.031733382, 0.057606906, 0.021923287, 0.028350087, 0.035412196, -0.037739508, -0.022284545, -0.008917445, 0.000980938, -0.021408835, 0.0012641717, -0.03319537, 0.007897136, -0.027001446, -0.002220294, 0.005766441, 0.00790668, -0.074966475, -0.009082565, -0.016629895, 0.033077486, -0.0126033, -0.042844158, -0.018429514, -0.014446585, -0.010648821, 0.020672714, 0.012837379, -0.012712704, -0.028498026, 0.0046252743, 0.000183732, -0.079494394, 0.004749353, 0.041545384, 0.014301031, 0.037551958, -0.055318605, -0.037786752, 0.02417773, -0.00052017637, 0.07361879, -0.014625128, 0.011398066, -0.0098886, 0.0038741205, -0.0058707297, 0.0068515334, 0.035278454, -0.049220134, 0.055552926, -0.017097337, -0.045461502, 0.009615149, -0.02290494, 0.013951225, -0.003775812, 0.005772764, 0.02781273, -0.03975197, 0.0017413977, 0.0055870633, -0.03322006, 0.010475946, -0.013438684, 0.019291384, 0.024484556, 0.021120114, -0.010691771, -0.04272151, 0.021058075, 0.00024195357, -0.0027364136, 0.028333861, 0.024042169, -0.012223428, 0.010604439, 0.016177962, -0.039746244, 0.017044125, 0.037793435, -0.027556937, 0.027190428, 0.062505156, 0.025128812, 0.012087179, 0.017141959, -0.02407462, 0.030209003, 0.0065790373, -0.05649592, -0.031928327, 0.0089594405, 0.014941469, 0.044589132, -0.037682243, 0.0345273, -0.017679792, -0.02732596, 0.03213067, -0.014310337, 0.011687025, 0.01636742, 0.03542687, 0.011189518, 0.028658377, 0.05148314, -0.044827268, -0.042323504, -0.019303314, 0.031640086, 0.00703801, 0.051057454, -0.04469317, -0.01718968, 0.04087918, 0.04714993, 0.05029198, 0.028639523, 0.0058021136, 0.001533685, -0.058086038, 0.032263342, 0.067043565, -0.036970936, -0.007879478, 0.019572947, -0.022654872, -0.027624704, -0.012012613, 0.011897244, 0.015794272, 0.0011281623, 0.003334915, 0.0739853, 0.0021513347, -0.0164433, -0.04770542, -0.00650125, 0.024207765, -0.05137815, 0.022591284, -0.028444577, 0.023228498, -0.006412963, -0.011662523, 0.037126273, -0.01620254, -0.027868567, 0.00835909, -0.05570945, 0.008570024, -0.0036155053, -0.0074113198, 0.042412505, -0.022788495, -0.045099765, -0.011388522, -0.027868088, -0.01826511, 0.018718712, -0.0010966653, 0.011566049, 0.027690262, -0.007795964, -0.050461877, 0.009953979, -0.05707098, 0.05364688, 0.012856886, 0.011672709, -0.027275853, 0.009120982, -0.019207332, -0.033268914, -0.06370657, 0.03589694, 0.014314155, -0.036174208, 0.015635831, 0.014118254, -0.009130765, 0.055347715, 0.025762567, -0.049700703, -0.015501494, -0.0020210522, 0.023961516, 0.022396216, -0.0020561877, -0.009013845, -0.062499426, 0.008217832, -0.01691623, -0.016328765, 0.027549243, 0.0049827164, 0.003163054, 0.023189366, -0.055186417, 0.021095894, -0.03336955, -0.016393667, -0.053327143, 0.030139685, -0.009669792, 0.010762401, 0.021851223, 0.005637948, -0.007269822, -0.0894016, 0.035483185, -0.000783963, 0.02012468, -0.01595462, -0.0064581204, -0.05593089, 0.0025167705, 0.03549416, -0.036934428, 0.04415295, 0.09216571, 0.009032456, -0.003841908, -0.0041470937, -0.048423164, 0.012131086, -0.0679188, -0.009291933, 0.06261205, 0.032639872, -0.016903345, -0.026797673, 0.00037396624, 0.061001893, 0.018636152, -0.0043766396, -0.009964478, 0.027500624, 0.022870578, -0.024590502, 0.012090043, 0.04878777, 0.018296726, 0.021052347, -0.06156979, -0.02134441, -0.004182528, 0.047107458, -0.07064663, -0.029233312, -0.054493483, 0.0020115075, 0.01390732, 0.015704075, -0.02856675, -0.0140824625, -0.0086354045, 0.0034617973, 0.023786495, 0.0042797625, -0.0166151, -0.011100276, -0.03655408, 0.0064587765, -0.023452794, -0.024588592, 0.043570735, 0.013409096, -0.021390224, 0.046142027, -0.016704341, 0.041684736, -0.04446792, 0.05073485, -0.009849944, -0.042083696, 0.018743528, 0.0064024637, 0.026102353, -0.043565005, 0.009622069, 0.02325045, 0.0022594265, 0.026739689, -0.017059874, 0.058231115, 0.004807336, 0.063552186, 0.028876707, 0.018177537, 0.041926272, -0.014856164, 0.044303752, 0.005610269, -0.01093611, 0.045402326, -0.011396158, -0.0017077532, -0.021370657, 0.039692797, 0.048164934, 0.0024104684, 0.014703333, -0.010764309, 0.0091288565, -0.02290494, -0.031153312, -0.015208477, -0.024641087, -0.059401277, 0.0044711307, -0.018780394, 0.062955655, 0.06195443, -0.01443036, -0.0105897635, 0.034929127, 0.026526367, -0.034528255, -0.05184965, 0.03469194, 0.003002706, 0.013114409, 0.009323564, 0.04799277, -0.030072872, 0.028188607, 0.017702341, 0.0034159839, -0.035423294, -0.02816755, -0.050697863, 0.052377462, -0.025023108, -0.0016956435, -0.025414672, 0.0790396, 0.043772597, -0.000268201, 0.02446344, -0.013285853, -0.057102956, -0.017258402, -0.011083096, -0.010972381, 0.022890622, 0.024577139, -0.02141981, 0.0051211123, -0.048898485, 0.037170894, 0.052758288, 0.002873855, 0.012610935, -0.009894446, -0.02958658, -0.03484895, -0.060557116, 0.06633823, 0.061999295, -0.061363865, -0.008842282, -0.053489394, -0.03175104, -0.008839657, 0.039323185, 0.0062058466, 0.011556982, 0.012829743, 0.049554672, -0.046014126, -0.024507405, 0.016757075, -0.01053035, -0.0416981, -0.012007066, -0.040620998, 0.012081454, 0.0047560344, 0.0609933, 0.020857997, 0.007709586, 0.030885588, 0.031852208, 0.0017876885, -0.002389948, 0.014164783, 0.03594359, 0.003121058, -0.019505896, 0.0029969793, 0.014053112, -0.008844906, 0.042228773, -0.001051806, 0.0030789427, 0.048118696, -0.024838658, -0.018993596, 0.0025837016, 0.06052848, -0.01657573, -0.001678881, 0.049187683, 0.046252742, -0.03754671, 0.03986173, -0.028673645, -0.08900074, 0.03229961, 0.061084926, -0.01649484, -0.045418076, -0.025858492, -0.031242076, -0.01443036, -0.037915602, 0.06940393, 0.027938718, 0.016785469, -0.04559656, -0.026287517, -0.038480643, -0.006863524, -0.01258946, 0.013416612, 0.033316102, 0.020125574, -0.033471677, 0.028019845, -0.03646293, 0.0080274185, 0.011029647, 0.009567307, -0.052533034, -0.00846408, -0.015944717, 0.004194936, 0.015254051, 0.02484677, 0.018039977, -0.0026509904, -0.02291496, -0.024354275, -0.0011278044, 0.019936593, 0.021525756, -0.037151087, -0.0013529357, -0.011596591, -0.0032680437, 0.0373792, -0.019761927, 0.0008093753, -0.006359545, -0.074985564, -0.054094523, 0.039643165, -0.01249139, -0.015717916, 0.034894764, 0.034805045, 0.032317746, -0.0017409204, -0.021288814, 0.021426493, 0.049732678, 0.014277647, 0.028847834, -0.005177663, -0.055475615, -0.058809515, 0.015857741, -0.01916635, -0.030227017, -0.037763547, -0.03821626, 0.0050978474, -0.013081481, 0.01850065, -0.021709964, 0.019414507, -0.010794851, 0.029349877, 0.00049822393, 0.002779245, -0.029578943, 0.030308623, 0.0068340553, -0.0004569439, -0.012315786, 0.050831247, 0.0037459852, 0.012450825, -0.00845798, 0.047672965, 0.03696688, -0.033085123, -0.009301224, -0.052965406, 0.010203569, 0.0020146393, -0.019768609, -0.022640973, -0.06816792, 0.008876046, 0.013087445, -0.012474687, 0.00018206172, 0.0025780941, 0.024915013, -0.004627183, 0.010651207, -0.033511765, -0.018600598, -0.042998537, -0.012846208, 0.015664943, 0.009685779, -0.040273104, -0.008067505, -0.033594325, 0.014192701, 0.024474056, -0.008212821, -0.01130262, 0.032916185, -0.032797355, 0.03672445, 0.012229394, 0.03368643, 0.007575962, -0.0075802575, 0.03899032, -0.008637314, 0.044528853, -0.019063389, -0.041105386, 0.080849715, -0.020258242, -0.032971546, -0.02583606, 0.016457615, 0.0047724983, 0.021566797, 0.024321826, 0.0032355923, 0.009400398, 0.01580286, -0.011134637, -0.002619732, -0.037604332, 0.0233144, 0.049555622, -0.010485968, 0.008399177, -0.06344433, 0.031342532, -0.006278385, -0.000632742, -0.011754076, -0.03087843, -0.038783204, 0.047865767, -0.035123833, 0.011599456, 0.00029200266, 0.0027154158, -0.0020062581, 0.045774564, -0.0045715864, -0.015771365, -0.013118704, 0.039469514, 0.009956843, 0.009009072, -0.0064979093, -0.0302609, -0.019509953, -0.0315036, -0.042465717, 0.007302273, 0.018901013, -0.05223525, -0.04681778, -0.004174296, -0.026307084, 0.029929705, 0.0019507806, 0.009794825, 0.013812233, -0.038362768, -0.0531038, -0.02661203, 0.037139636, -1.7895975e-07, 0.005348749, -0.029120332, 0.02149569, 0.037194993, 0.0033260265, 0.049836714, 0.006030228, 0.01093802, 0.037301656, -0.006262756, 0.029018681, -0.026013559, -0.029627115, 0.030515738, -0.013751745, -0.025460843, -0.049679227, -0.01357875, 0.031106902, 0.023679478, 0.005663718, 0.022747932, 0.023357825, 0.034970883, -0.05080536, 0.021136338, -0.0043224148, -0.012700415, 0.032529153, -0.06667038, -0.018437626, 0.01214063, -0.016365988, -0.01226614, -0.016753735, -0.028080774, -0.00884252, -0.016038612, -0.012951913, 0.018972596, 0.0034837497, 0.014937293, -0.0008561434, -0.028874082, -0.03580722, 0.020185944, 0.033643004, 0.051408455, -0.01915251, 0.023134723, -0.00054785545, 0.0026552854, -0.060304187, -0.04241871, -0.020577509, 0.0401328, -0.0009950908, 0.012918627, 0.09237186, -0.0026166302, -0.005587124, -0.005034257, -0.0595788, 0.03356915, -0.035673596, 0.028515207, 0.008107399, -0.023907112, -0.069228314, -0.0138193015, 0.0120294355, -0.011254302, -0.018252939, -0.05795862, 0.012386878, 0.002102777, 0.02323779, -0.0017447383, 0.009674802, 0.00053353864, -0.009167511, 0.004563712, -0.005349703, -0.09723957, -0.027825138, -0.024769938, -0.045952093, -0.0571125, -0.055060428, 0.0110516, 0.00044662386, -0.04171337, 0.04381889, -0.031546548, -0.0034851816, 0.009063715, -0.056760307, 0.029080719, -0.0132654505, -0.027506948, 0.014991219, -0.02845293, 0.035797678, 0.032723147, 0.019337913, -0.008941545, -0.006586673, 0.004595925, -0.00040802822, 0.058670163, 0.022140363, 0.032704536, -0.016496867, 0.006252138, -0.009216665, -0.027246503, -0.064868376, -0.038636215, 0.004250175, -0.013939772, 0.00972348, 0.04765388, 0.0041645127, -0.008650199, 0.01600592, 0.014667541, -0.00068529655, 0.031725984, 0.058538925, -0.014818344, 0.01736327, 0.0072299736, 0.025826994, -0.010298537, -0.026956586, 0.00964951, -0.0074724047, 0.016834863, 0.01158132, 0.0052547352, 0.03904949, -0.015139279, 0.012058069, -0.006058861, 0.0059531555, 0.001891724, -0.076369524, -4.4859247e-05, 0.0884128, -0.0012140629, 0.021643989, 0.054831356, -0.025749205, 0.006022592, -0.050612085, -0.0036307352, -0.060145743, -0.03409016, -0.030727627, -0.008162473, -0.018348385, 0.009641874, 0.030250043, 0.0018389904, 0.038504504, 0.033997104, 0.022054523, 0.0054582017, -0.02874729, 0.05923377, -0.0051941276, 0.03114186, 0.015120428, -0.007788537, 0.012348699, 0.040595707, -0.024692269, 0.00092963624, 0.02130814, -0.027809868, -0.0022264977, 0.029610917, -0.0851333, 0.0106328335, -0.02734988, -0.022143764, 0.05082075, -0.017548556, 0.021730961, 0.03847539, -0.0059658024, -0.022931186, -0.017477447, -0.023937656, 0.014259513, 0.040776573, -0.005103455, -0.011453424, -0.018823463, 0.012037071, 0.017063692, 0.0012505408, -0.05284395, 0.053764313, 0.021394996, 0.04370054, 0.023345897, -0.040869635, 0.04817883, 0.0062788627, -0.031847198, 0.010375847, 0.009354225, -0.05837619, -0.061200414, 0.019634748, -0.002168515, 0.030268535, 0.03771672, 0.0073521435, 0.018121703, -0.058175758, -0.03585685, -0.011527394, -0.050725423, -0.051899284, -0.015238303, 0.003889869, 0.010838757, 0.027264876, 0.0021246101, -0.050560184, 0.05962271, -0.0118075255, 0.011596591, 0.030322941, 0.0057150195, -0.034803137, -0.0038633829, 0.001889815, 0.05658564, 0.004315793, 0.024277918, -0.026197799, 0.01920262, -0.057651762, 0.009496082, -0.011478717, 0.027751645, -0.02810861, 0.017754717, -0.028684624, 0.004634819, 0.00024529416, 0.052250516, -0.013963632, 0.015225896, -0.017691722, -0.032507204, -0.016818875, 0.027862838, -0.055599455, 0.058114674, -0.013101762, 0.015857413, 0.06316945, -0.009716082, 0.059924312, 0.019227436, 0.0359004, 0.011797743, -0.013845281, -0.009255082, 0.052987356, -0.022051657, -0.012975536, 0.009083042, -0.03814181, 0.025300257, -0.024705991, 0.010901751, 0.02996162, -0.025551634, 0.06914432, -0.024242247, -0.050851293, -0.043351207, 0.062117644, -0.02781273, -0.03448101, -0.032464013, 0.0073912763, -0.020138936, -0.013076946, 0.02983784, -0.007825075, -0.025435193, -0.06668947, -0.012083303, -0.021969039, 0.01453177, -0.00052065356, 0.023760516, 0.030821165, -0.02497228, -0.025843697, -0.010792943, 0.019866917, 0.061628964, 0.026402274, 0.017877124, 0.010412833, 0.012706619, -0.02650558, -0.017734015, -0.036575824, 0.036033187, 0.070538536, 0.012685144, -0.010630687, 0.0013328922, 0.00410987, -0.021758165, 0.027318325, 0.016779803, -0.0035825355, 0.025756365, 0.026753051, -0.043171056, 0.0041843173, -0.00674893], [-0.04329845, -0.07967149, -0.018201439, -0.019131973, -0.01948884, 0.03229586, 0.024476454, -0.0142064765, 0.045025237, 0.039798595, -0.0095050875, 0.0032593047, -0.08673453, -0.0029858404, -0.014387955, 0.062092435, 0.00019792115, -0.0469944, -0.0017258725, 0.02840321, -0.033135045, -0.020749446, -0.011956874, 0.01558279, -0.026589641, 0.06697408, 0.010501392, 0.0050354186, 0.02228105, -0.04052938, 0.004284232, -0.027831217, -0.011456895, -0.004750717, 0.0104703335, 0.024517864, 0.021398017, -0.017820213, -0.039635386, -0.030517615, -0.0814339, 0.03648083, -0.035217788, 0.022382142, 0.0015200345, 0.038444206, 0.023488065, 0.03459114, -0.015587966, -0.056796674, 0.026150256, -0.005971738, -0.038727995, 0.013193729, -0.02752931, 0.042178523, 0.036474127, 0.019138671, 0.011139916, -0.003484326, -0.016045012, -0.034557644, -0.055271767, 0.017397575, 0.02215499, 0.013317215, 0.0019907823, 0.0048012626, 0.00462222, -0.037669573, -0.022631219, 0.0055807675, 0.008984098, -0.029292675, 0.054935604, -0.00664094, -0.06849899, -0.014484175, -0.027981788, -0.023657972, -0.0020279307, 0.028529802, 0.021844406, -0.06500583, -0.05165194, 0.006489987, -0.029183932, -0.007502734, 0.049837157, 0.025565324, -0.04574232, 0.0123947365, 0.012586568, -0.03434937, 0.0017721556, 0.022529518, -0.009043475, 0.06953427, 0.02263, 0.022192746, 0.036616024, -0.055283945, -0.011659687, 0.0035568764, 0.012984541, 0.011161535, 0.011305257, -0.031794056, -0.0056550642, 0.01328934, -0.0044687553, 0.0057447376, 0.011689909, -0.055039134, 0.013721721, -0.024557449, 0.012961704, -0.018611897, -0.025494073, 0.00031758734, -0.01562694, 0.03532984, 0.009375982, 0.018300096, -0.018002909, 0.004367663, 0.02205877, 0.027146257, -0.049284194, 0.004459925, 0.03352754, 0.016418321, 0.03822204, -0.024136638, -0.040317453, 0.01567292, 0.017618941, 0.055165805, -0.022781944, 0.048870083, -0.029951256, -0.0022593462, 0.014742386, 0.005463842, 0.025100056, -0.03133853, 0.006483897, -0.045710653, -0.00016199086, -0.013218697, -0.0010986147, -0.008509696, 0.003491938, 0.00050302426, 0.006077702, -0.05696719, 0.015538942, 0.023780989, -0.029976834, 0.035370644, -0.0076342947, 0.00041411197, 0.02999145, 0.013648643, -0.005614871, -0.050024725, 0.046139684, -0.014591966, -0.014294171, 0.063133195, 0.0676391, 0.017024873, 0.021044195, 0.043993305, -0.03465173, -0.025270574, 0.00771314, -0.015467234, 0.0101859365, 0.02006616, -0.0046697212, 0.0040412457, -0.013029759, -0.0187544, -0.024381451, 0.010919767, -0.03342675, -0.009435358, -0.028320996, 0.007406514, 0.05821927, -0.009709707, -0.0042458656, -0.0007181493, -0.030505436, 0.02158924, -0.040552523, 0.000109617875, 0.023024624, 0.057800286, 0.0026606694, 0.0137355765, 0.01059883, -0.03969872, -0.024087919, -0.06831386, 0.019029662, -0.020834703, 0.034110647, -0.038379043, -0.0053834557, 0.04277533, 0.024235293, 0.04355727, 0.037057236, 0.024654277, 0.027696783, -0.041116446, 0.019390794, 0.054273028, -0.027313728, 0.015481964, 0.021712864, -0.030169275, -0.019457782, 0.008875393, -0.011459939, 0.014364813, 0.017330281, 0.0073701274, 0.057222966, 0.011163362, -0.039437465, -0.05366952, -0.0033963271, 0.020385271, -0.04815026, 0.03658192, -0.041351516, 0.041051894, -0.030507872, 0.009200745, 0.052119642, -0.043795995, -0.03722501, -0.0069609634, -0.05374686, -0.010617709, -0.025506862, 0.015700324, 0.077067755, -0.0329828, -0.004944984, 0.0039405343, -0.017609501, -0.008002104, -0.020475704, -0.00931082, -0.0114489775, 0.06153582, -0.0044029844, -0.03568914, -0.025498943, -0.04544635, 0.054238923, 0.026269315, 0.015145536, -0.032870747, 0.0100236405, -0.03683891, -0.017415235, -0.06656241, 0.023180526, 0.04884694, -0.015364772, 0.026276622, 0.022927187, 0.016543163, 0.053478904, 0.017635688, -0.070416085, -0.03408933, 0.0124739045, 0.016182033, 0.024744503, 0.0050692176, 0.008254225, -0.029795203, -0.023768809, -0.04228692, 0.0008501475, 0.00414112, 0.03943442, 0.0362869, 0.049308553, -0.03248221, 0.061994996, -0.0188561, -0.029055739, -0.046917666, 0.010411262, 0.0016363512, -0.0013093246, -0.01584039, -0.0010894799, -0.035367597, -0.06412402, 0.018919436, 0.008635452, 0.0022431698, -0.031645462, -0.016415885, -0.077145405, 0.008512436, -0.007880916, -0.02606104, 0.020949194, 0.11279679, -0.024090355, -0.027494142, -0.023972211, -0.032588176, -0.019918177, -0.072260104, 0.009314017, 0.06803129, 0.032848824, 0.009406432, -0.036561213, -0.019762885, 0.045642447, 0.024650624, 0.010670691, 0.008384854, 0.015977414, 0.013017427, -0.001029742, 0.022946674, 0.017306225, 0.052324265, 0.014597751, -0.04852418, -0.025786996, -0.011134283, 0.019744614, -0.0821519, -0.024310809, -0.06642843, -0.00406865, 0.01039048, 0.014346391, -0.037234146, 0.013584395, 0.019087516, -0.017654568, -0.022795646, -0.0056701936, 0.01669267, 0.0076781227, -0.013232932, 0.02496608, -0.015333713, -0.029617608, 0.03463803, -0.0049254964, -0.008818758, 0.06863784, 0.0147350775, 0.049118552, -0.028412953, 0.05433149, 0.028301964, -0.00545897, 0.015035918, -0.025705542, 0.05162271, -0.0420348, 0.007949998, 0.04103606, -0.0008605003, 0.02152484, -0.017910343, 0.033124086, 0.029689392, 0.037396748, 0.049442533, 0.033189856, 0.04315024, -0.024997156, 0.044217415, 0.021037497, 0.0074922293, 0.029131558, 0.022846801, -0.00990367, -0.015876018, 0.023984391, 0.019559026, 0.017585143, 0.014002466, 1.644268e-05, 0.023007574, 0.0047245305, -0.019329285, 0.009515136, -0.057266813, -0.035069194, 0.022790773, -0.0147289885, 0.03395718, 0.033209343, -0.012870356, -0.023158602, 0.033944696, 0.03306075, -0.016128443, -0.015674138, 0.024733447, -0.00036295695, 0.018465435, 0.037723165, 0.054911245, -0.055557992, 0.028815493, 0.026485201, -0.007904971, -0.0072219907, -0.0052117207, -0.033525407, 0.028331349, 0.015680227, 0.0096439365, 0.0021509463, 0.09990329, 0.046191145, -0.036839828, -0.018021787, -0.021137979, -0.056138966, -0.017483061, -0.023938715, -0.04387638, -0.013875186, -0.006080138, -0.021460744, -0.0001808695, -0.036307268, 0.03883152, 0.048399944, -0.022839492, 0.014531676, -0.014152276, -0.030909805, -0.02997927, -0.020929705, 0.031711232, 0.05878441, -0.064639226, -0.03697837, -0.035707414, -0.04854123, -0.016238062, 0.046603125, 0.0037854705, 0.014223375, 0.020479664, 0.013356329, -0.06874259, -0.0014359942, 0.006499122, -0.0010989192, -0.025514169, 0.011149355, -0.04248545, -0.016525503, -0.00088425085, 0.017115366, 0.014463469, 0.008326391, 0.012633003, 0.03077339, 0.02164953, 0.031113205, 0.023601945, 0.03192742, 0.037086237, -0.04139049, 0.009228607, 0.0015772794, 0.0029179668, 0.012979974, 0.015860792, 0.020701183, 0.05259709, -0.052917417, -0.016251458, 0.037626334, 0.048777517, -0.053171977, 0.005100276, 0.065575846, 0.022157425, -0.07826716, 0.04598835, -0.0056399917, -0.0578621, 0.008542277, 0.059476223, -0.026132673, -0.0020309757, -0.017528506, -0.04273818, -0.031248402, -0.039083567, 0.046258744, 0.04514064, 0.0013586526, -0.046115022, -0.036139794, 0.00092337833, -0.025952108, -0.010214406, -0.032612536, 0.046429258, 0.025606735, -0.024761992, 0.045279488, -0.040446557, 0.028461672, -0.01581664, 0.0013568257, -0.056087203, -0.04701876, 0.004906009, -0.017647259, -0.030254534, 0.01801387, 0.023433866, 0.018111309, -0.04949369, -0.018509587, 0.00564121, 0.0079643475, 0.011913027, -0.03064672, -0.007982617, -0.01776784, 0.025036722, 0.013773791, -0.007530139, -0.019214796, 0.002119431, -0.091699004, -0.06827976, 0.035124004, 0.007049647, -0.01965517, 0.023967948, 0.06433351, 0.00529637, -0.007344702, 0.010625473, 0.022488715, 0.018799769, 0.04117247, 0.02943727, -0.01954852, -0.09230068, -0.06105959, 0.03952577, -0.04213711, -0.025333907, -0.037391875, -0.055953834, 0.00978743, -0.015814053, 0.02939055, -0.021868462, 0.010335138, -0.016576733, 0.018884115, -0.024637835, 0.013443071, -0.004807657, 0.0001957897, 0.032550417, -0.011560346, 0.014990853, 0.008220122, 0.002731921, 0.034161497, 0.008540451, 0.043939713, 0.022057856, -0.016684448, -0.007999669, -0.03660019, -0.018719688, 0.010954175, -0.039242588, -0.020590499, -0.06301079, 0.0061002346, -0.0009329699, 0.026081746, -0.02839651, -0.017291002, 0.028235128, 0.011994936, 0.0069278497, -0.013762523, 0.03128372, -0.022259736, -0.021593045, -0.022032583, -0.011959614, -0.037559956, -0.0049595996, -0.03223131, -0.010601266, 0.020116402, -0.013998202, -0.014392827, 0.028070701, -0.0059010955, 0.015139446, 0.0088236295, 0.06358933, 0.014733251, -0.0064138635, 0.02369965, -0.021530168, 0.0808444, -0.011751036, -0.060328804, 0.09184516, 0.012239444, -0.03322396, -0.015784973, -0.00017660657, 0.004741582, 0.040436815, -0.018914564, 0.01351223, -0.0017624118, -0.0069412473, -0.00017143018, 0.004195624, -0.040093347, 0.023295473, 0.031643637, -0.0033658776, 0.0065441867, -0.0267527, 0.041109137, -0.016492618, 0.00045978607, -0.03324984, -0.030270366, -0.028400773, 0.02595264, -0.04982254, 0.033234313, 0.04134786, -0.0011165799, 0.004153299, 0.00652409, 0.00047265095, -0.026082963, -0.015586748, 0.047479153, 0.018252442, 0.020625211, -0.028230561, 0.006744544, 0.012333533, -0.028936516, -0.020513006, -0.010835727, 0.04529045, -0.038746264, -0.017931048, 0.007881678, 0.010988583, 0.054034304, 0.0340668, -0.007854044, 0.03944051, -0.050648328, -0.049386505, -0.035603885, 0.014791105, -0.024337603, -0.015110214, -0.014614498, -0.018722733, 0.0150523605, 0.014214697, 0.045274615, 0.030941166, 0.035285383, 0.06650394, 0.022427207, 0.041983645, 0.023128154, -0.024556383, 0.024649406, 0.0009591564, -0.030914675, -0.09359174, -0.017763576, 0.004608061, -0.007352923, 0.059710074, 0.029661987, -0.031365328, 0.037540466, -0.024384495, 0.020557614, 0.006700088, 0.00012118865, 0.010525143, -0.08376754, 0.01085491, 0.03668423, -0.013210172, -0.021052722, -0.047761723, -0.02380413, 0.023784643, -0.008517917, -0.014626069, 0.015568783, 0.004848307, 0.015915506, 0.014386737, -0.03432623, -0.05071288, 0.033182546, -0.00034225135, -0.006284149, -0.021478403, 0.027086576, 0.00032154575, 0.015194255, -0.036858402, -0.024807742, -0.04359868, 0.03353363, 0.008231084, -0.009730414, 0.034146577, 0.035382517, -0.00017112568, 0.002835449, -0.03402478, 0.030288637, -0.019196525, 0.0033570474, 0.018438945, 0.022423554, -0.06814334, -0.0050463807, -0.00782702, 0.0022045372, 0.0028258574, 0.00036006427, 0.02211571, 0.0068588816, 0.0014067627, 0.017516935, -0.005134227, 0.013967144, -0.008160441, 0.011299167, 0.011111598, -0.07779337, -0.033689227, 0.0028277605, -0.034510143, -0.06365205, -0.001187527, 0.033119213, 0.0035284774, -0.011914245, 0.057995163, -0.01674352, -0.017422942, 0.028846553, -0.06394376, 0.0083875945, -0.039863147, -0.034322575, 0.017913997, -0.042207144, 0.018118616, 0.013799672, 0.07644994, -0.054604314, -0.022454003, 0.004934022, 0.0025346088, 0.018345997, 0.0028148957, 0.001652794, -0.0018516285, 0.0018528466, -0.0062652705, -0.017817777, -0.061532166, -0.002111971, 0.02085541, -0.009759949, -0.00050058827, 0.025436219, -0.015296794, -0.00046526696, 0.018532729, 0.037991118, -0.011499067, 0.005877954, 0.029158354, 0.027866995, -0.026806442, -0.014167349, 0.012872487, 0.017183363, -0.018559067, -0.04307008, -0.005662524, 0.03653929, 0.018843312, 0.01517964, 0.021703996, 0.03078283, -0.021801777, -0.008326086, -0.008516091, 0.02680766, -0.095801145, -0.017614374, 0.04721851, 0.0024676202, 0.006238475, 0.0012240662, -0.040495276, 0.018855492, -0.048609436, -0.005038159, -0.05827286, -0.05615358, 0.0115318, -0.018311057, -0.0010182282, 0.00602472, 0.021617861, 0.006948251, 0.025734318, 0.020531427, 0.006178794, -0.009854646, -0.034994897, 0.036357813, -0.002055335, -0.010672746, 0.04685555, -0.023111407, 0.011431621, 0.031521227, -0.02028296, 0.028118202, 0.034532066, -0.031085193, 0.027518958, 0.030814802, -0.030299598, -0.01846513, -0.036541726, -0.005806093, 0.016778842, -0.023186617, 0.039506283, 0.032938953, -0.020023532, -0.02946574, -0.026442267, -0.029675994, -0.004075349, 0.016838523, 0.0003395109, -0.02028905, -0.03427142, -0.0013014077, 0.002887822, -0.03740984, -0.059200957, 0.07395857, 0.013196774, 0.048948035, 0.039054718, -0.03020825, 0.047466975, 0.03318133, -0.008435096, 0.0023771091, -0.015532852, -0.030108375, -0.05031582, 0.025589075, -0.005919898, 0.031040736, 0.09433958, 0.039827827, 0.0012910549, -0.07076686, 0.0011260192, -0.019343292, -0.020973857, -0.044264916, -0.013579219, -0.014632159, -0.0062147244, -0.028417824, -0.009351546, -0.036169026, 0.07946078, 0.010528796, 0.0063459612, 0.0039498974, -0.0140542295, -0.011161688, 0.008981966, -0.0052671386, 0.0717047, 0.023288926, 0.031209426, -0.038872935, 0.0050789616, -0.04576668, 0.0030158616, 0.009239568, 0.009487731, -0.009231652, 0.010560464, -0.028495776, 0.0052811457, 0.028487707, 0.06394376, -0.040111616, 0.02140228, 0.016907947, -0.041546393, -0.0037221357, 0.031377506, -0.04439798, 0.02278103, 0.021059362, -0.005256177, 0.024755979, -0.046132073, 0.06523466, 0.024761459, 0.021869984, 0.030796114, -0.007929026, 0.012835035, 0.03037146, -0.029577337, -0.00030430377, 0.0048548537, -0.02465915, 0.017053496, -0.007155611, -0.024180485, 0.037404053, 0.0041746045, 0.033949874, -0.013325879, -0.06271604, -0.015654955, 0.06336293, -0.02091448, -0.01174015, -0.016260594, 0.0043210755, -0.024951464, 0.0016105834, 0.0006004624, -0.017894508, -0.0029006107, -0.07410168, -0.045215547, 0.01446286, 0.028573269, 0.012318613, 0.05206118, -0.01472168, -0.03986977, -0.017797984, -0.0021436384, 0.018710857, 0.05676257, 0.024780948, 0.048465714, 0.036393132, 0.029694872, -0.0037367514, 0.0105695985, -0.053380553, 0.015829772, 0.059562087, -0.011549613, -0.0040360694, -0.00032763564, -0.0058316328, 0.007673708, 0.0045747194, -0.015578336, -0.021725958, 0.039545257, 0.024441741, -0.047851857, -0.009860736, -0.0033603967], [-0.038578644, -0.036153734, 0.0014732399, -0.025592435, -0.010029757, 0.039650977, 0.018567786, -0.041994147, 0.012564381, 0.0033206283, 0.004362308, -0.011650174, 0.029526344, 0.002415666, 0.033040617, 0.058563598, -0.020486452, -0.039903004, 0.046381757, 0.031995285, -0.023910226, -0.016881928, 0.025032427, 0.04073596, -0.015779918, 0.08096069, -0.016166717, -0.036147896, -0.024911765, -0.0043516043, 0.006852901, -0.0900749, -0.07645667, -0.038276017, 0.006882093, 0.03920239, 0.008876416, -0.00859325, 0.0064038252, -0.002451183, -0.11265127, -0.019404389, -0.019851761, 0.051018957, 0.033034045, 0.04422444, 0.04021317, -0.057476792, -0.006251052, -0.018275375, 0.044931382, -0.027358085, -0.013897011, -0.00081543927, 0.028346123, 0.051039882, -0.01076808, 0.034911115, 0.046482958, -0.0183576, 0.03654686, 0.012922474, -0.06379693, 0.031352084, 0.020347545, 0.009376578, 0.026726557, 0.010978265, -0.047922138, -0.014265807, -0.016100546, 0.013554127, -0.06648092, 0.009385822, -0.020533888, 0.015200936, -0.046298556, -0.015400538, 0.008458966, 0.0020162172, -0.0061807474, 0.03568082, 0.013748131, -0.015709369, -0.029184947, -1.5569247e-05, -0.025266873, -0.03641549, 0.06369184, 0.005060005, -0.049725376, -0.010531865, 0.03613038, 0.029180903, 0.027121626, 0.044971768, 0.0066256872, 0.018452475, 0.050175544, 0.028626796, 0.020090653, -0.042557564, -0.035618544, 0.009119443, -0.0063191676, -0.019863924, 0.0170347, -0.06373076, 0.01788444, -0.022733046, -0.006998072, -0.035616595, -0.013054812, -0.035214283, 0.024215043, 0.04469152, 0.027715234, -0.05955042, 0.000112390495, -0.012658284, 0.036163464, -0.05407491, -0.010264998, -0.0036711793, -0.063371696, 0.014380874, 0.025464473, -0.011142837, -0.037465446, 0.00939896, 0.030501612, -0.005418462, 0.035780072, -0.048058372, -0.055924732, 0.0057445653, 0.015726397, 0.03235776, -0.022505345, 0.024100462, 0.014384038, -0.018560367, -0.028392466, -0.0006787218, 0.0121007785, -0.010829748, 0.04392425, 0.006496754, -0.00073078147, 0.006794516, 0.016266942, -0.017135901, -0.033810563, 0.021578124, -0.019943232, -0.04564319, -0.0033051807, 0.00077165075, -0.018645024, 0.038387194, 0.010590979, -0.0031943712, -0.0076016844, -0.019794837, 0.024418902, -0.02839879, -0.00046805045, -0.009852899, 0.035778128, 0.06456453, 0.038363595, 0.024957502, 0.041193306, 0.038453344, -0.048140593, -0.03691114, 0.024914198, -0.008611739, 0.0027465122, -0.018462693, -0.011752835, -0.02315536, -0.003591144, 0.027824188, -0.007155528, 0.02218715, -0.031465933, -0.032024357, 0.06609242, 0.008046867, 0.037633453, -0.02694623, -0.038117405, 0.0107055595, -0.008624876, 0.009018485, -0.024646116, -0.010496408, -0.00063736597, -0.0330529, 0.005283813, -0.033999097, 0.000543464, -0.046024635, -0.04948539, -0.0037336997, 0.02319842, 0.045910787, 0.0394875, -0.05088808, -0.017000644, 0.009728346, -0.008913393, 0.031396843, 0.015182205, 0.018459773, 0.024662172, -0.06788471, 0.029276265, 0.043033395, -0.023354841, -0.004679775, 0.028413873, -0.02399902, 4.3788503e-05, -0.029056106, 0.010599251, 0.006074925, -0.02130992, -0.0048449547, 0.08760426, -0.044839427, -0.0027917605, -0.08472005, -0.036614973, -0.019621143, -0.03325299, -0.04036796, -0.068620965, 0.03579175, -0.021938285, -0.006402001, 0.030062754, -0.033763856, -0.012833803, -0.012021161, -0.036744393, -0.045917597, -0.0022585138, 0.039656814, 0.044652596, 0.045507934, -0.028205391, -0.0021906414, 0.042270504, 0.039671414, -0.0038816074, 0.010516539, 0.0052139945, 0.01605092, -0.030475095, -0.048569236, 7.687315e-05, -0.017377226, 0.01128965, 0.021566812, 0.022018319, -0.016619561, -0.00711028, -0.047209844, 0.002857443, -0.058260117, 0.064779736, 0.022643521, 0.004462535, 0.014444367, 0.03558351, 0.023235153, 0.030279629, 0.011227494, -0.047634106, -0.0052828398, -0.03351572, 0.04817319, -0.0007443741, -0.055862457, 0.027936092, -0.016606547, -0.0054088538, -0.021349695, 0.03330748, 0.0024626167, -0.0078358315, 0.06263897, 0.039914683, -0.03149123, 0.019840328, -0.0069526415, -0.022693148, -0.06051766, -0.017940758, -0.009299219, 0.008237226, -0.059824828, 0.022197854, -0.0056234174, -0.03291509, -0.0137590775, 0.026763046, 0.0054755094, 0.046532582, -0.03873507, -0.031916223, -0.008234185, 0.02919769, -0.015406742, -0.0077267247, 0.064090796, -0.008790785, -0.010437233, -0.031022452, -0.015619602, -0.030479718, -0.057525933, 0.028548889, 0.054235466, 0.035707094, -0.009788677, -0.044369124, -0.023362141, 0.008982482, 0.047091126, 0.004086927, -0.0038283318, 0.0003590657, -0.012150033, 0.011589358, -0.03362811, -0.024954703, -0.007002755, -0.005213751, -0.07929222, -0.045511823, 0.006492376, 0.0268533, -0.024364986, -0.03955525, 0.002595077, 0.027363436, -0.028327847, 0.032347053, -0.03243986, -0.004319979, -0.01462536, 0.02445734, -0.008585025, 0.012217966, -0.02775364, 0.00045442735, -0.022811865, -0.0125760585, -0.021805216, -0.060924403, -0.021541024, -0.021617899, -0.054011658, 0.07016962, 0.04051507, -0.013389551, -0.009190964, 0.043109298, 0.023344867, -0.06690105, -0.0010975748, -0.013724837, 0.048810072, -0.018214557, 0.018554162, 0.05994666, 0.01354719, 0.021131845, -0.026922146, 0.049698006, 0.016411932, 0.05228542, 0.046812832, 0.026132006, 0.02629159, 0.015265645, 0.04449593, 0.013029512, 0.014892074, 0.04560816, -0.03190528, 0.017382577, -0.03630067, 0.033848513, 0.018362952, 0.034392465, 0.029334892, 0.023630224, -0.0055826697, -0.047973715, 0.01741554, 0.0048270747, -0.02507427, -0.05089976, -0.010707749, -0.03654491, 0.018957503, 0.012842682, -0.003960427, -0.002718715, 0.023557242, 0.039700605, -0.009121936, -0.009368884, 0.020885656, -0.00039409654, -0.0032260267, 0.019458639, 0.029147575, -0.043254286, 0.024197526, 0.067936406, 0.035510045, -0.029822892, 0.004554491, -0.0043970956, 0.06372687, 0.031188544, 0.04271435, -0.0060895826, 0.062603936, 0.026915332, -0.011478427, 0.019373069, -0.04187385, 0.006412583, -0.020358978, -0.0110132955, -0.029098434, -0.050808284, 0.0056457976, -0.023521237, -0.011325654, -0.028898101, 0.07513329, 0.046299774, 0.013266943, 0.0071832608, 0.008586439, -0.08569508, -0.059733357, -0.02280797, 0.08055431, 0.04848458, -0.028517507, -0.008701262, -0.043654583, -0.03849204, -0.023873493, 0.03533343, 0.010113684, -0.034145303, 0.011642877, 0.023945501, -0.022064175, -0.03899775, -0.00088689965, -0.010854684, -0.016131198, -0.026396684, -0.038755745, 0.029378192, 0.036547832, 0.0352804, 0.0010781703, -0.017773537, 0.00915195, 0.006311383, -0.030337162, -0.030609138, -0.011849412, 0.01049124, 0.051873565, -0.013089843, 0.021411607, 0.012616928, 0.018303595, -0.002901049, 0.016158322, 0.025808457, 0.03445474, -0.032282833, 0.0019458516, -0.007742294, 0.024627384, -0.00651576, 0.018993264, 0.015434961, 0.037885815, -0.028989935, -0.009809354, 0.010862954, -0.038519774, 0.0033858244, 0.04307232, -0.06296689, 0.011778135, -0.039770663, -0.031585135, -0.008435612, -0.019864898, 0.019216342, 0.047974687, -0.0074350447, -0.008914609, 0.010548164, -0.042278286, -0.0012474859, -0.02855424, 0.014751861, 0.03538014, 0.011836519, -0.046933495, 0.038461633, -0.07968048, -0.010229481, -0.012672394, -0.015993752, -0.014980655, -0.0001505838, -0.026899643, 0.018895956, -0.003307005, -0.006692343, -0.0027724206, 0.013411932, -0.0032320782, 0.035623893, 0.03993852, -0.009595521, -0.01099432, -0.018834895, -0.003797923, -0.01809341, 0.0031780722, 0.03412195, -0.047287207, 0.009016783, 0.058007117, -0.016935933, -0.0399935, 0.083988294, -0.03990787, -0.025430417, 0.02607654, 0.067122914, 0.033579882, 0.004842522, 0.001394907, -0.0066986675, 0.046953928, -0.0055090804, 0.03612016, -0.044426844, -0.017205963, 0.0071657454, 0.020709043, -0.05224698, 0.0067113177, -0.03290268, -0.03539863, -0.013824517, -0.01259552, -0.014177258, -0.06307101, -0.0069662645, -0.014616602, 0.013784134, -0.052779745, 0.014003564, -0.047895256, 0.0038832498, 0.050795395, 0.010412662, 0.013016863, 0.011567949, 0.009380227, 0.07192797, -0.0075464617, 0.044727527, -0.048015557, -0.01284706, -0.039060317, -0.066804715, 0.0021643683, -0.034268398, 0.048217956, -0.0336792, -0.058530632, 0.018916147, -0.025798727, 0.014715614, -0.009759363, 0.011992211, 0.027765805, -0.0041320533, -0.01926694, 0.006103631, 0.0026019798, -0.02690171, -0.038245365, -0.00869956, 0.031134598, -0.027844563, 0.03840641, -0.054588083, 0.008817788, -0.039182775, -0.0067501804, 0.012860197, 0.023959123, 0.048779115, -0.0121401185, -0.005791759, 0.0080196215, 0.014290134, -0.0006935612, 0.060061283, 0.029373815, 0.043518778, -0.016853223, -0.0582679, 0.10509046, 0.03083489, -0.026647737, 0.016509969, -0.016995778, -0.0077165077, -0.011574275, -0.03107135, 0.030267585, 0.034873165, -0.003697696, 0.04462827, 0.02724618, -0.038620487, 0.022074271, 0.04153875, -0.015256887, -0.0064806985, -0.030665575, 0.0006534218, 0.05432937, 0.029476475, -0.018069083, -0.018749265, -0.020389874, 0.021453144, -0.04586651, 0.0032710545, 0.019786322, 0.027333029, 0.051178053, 0.0027445662, -0.011280299, -0.03634543, -0.0069258814, 0.06364902, -0.019491723, 0.016747521, 0.005131526, -0.009734671, 0.019741803, -0.010631848, -0.027908087, -0.004612389, 0.034563728, -0.0443704, -0.030743422, -0.00445767, 0.036751203, 0.039025895, 0.01282541, -0.013673203, 0.013276675, -0.050454088, -0.062175784, -0.06517286, 0.015422798, 0.02746415, 0.031151993, 0.014659905, 0.009907879, 0.048620805, 0.014360683, 0.07144338, -0.0027378763, 0.030172225, -0.0016795323, 0.023593245, -0.0036723958, -0.0145261055, -0.008733617, -0.004813816, 0.018398957, -0.039220877, -0.030233528, -0.01749594, 0.040998846, 0.013788513, 0.049586102, -0.023991479, 0.036175143, 0.008430747, -0.05016411, 0.016286405, -0.0317002, -0.0060757766, 0.051298715, -0.0817074, -0.034341864, -0.042722013, -0.002747972, 0.02822315, -0.030234503, -0.00652546, -0.00813861, -0.0010283304, -0.018185852, 0.008558598, 0.03776126, 0.017785918, 0.0004738889, -0.03433049, -0.051041827, -0.0060094246, -0.0076490003, -0.019751534, 0.0030311374, -0.011647742, -0.0151858535, -0.012190567, -0.03222931, 0.011063044, -0.026538024, 0.040735472, -0.008171787, 0.06062859, -0.0057630534, -0.0018104113, 0.0411573, -0.02368666, -0.052429438, 0.011594831, -0.04249188, 0.0028793372, 0.03277521, 0.0018870109, -0.049080588, -0.0074722646, 0.01655984, 0.011351379, -0.008508593, -0.01249286, -0.01976613, -0.028240666, -0.003528867, 0.0167817, 0.013494644, -0.031726718, 0.005813897, 0.05434445, 0.0042397003, -0.04914116, -0.037757367, -0.0150404535, -0.07370481, -0.047691032, -0.05259705, 0.0022147251, 0.0064030956, -0.07101571, 0.041176762, 0.015957505, -0.02827959, 0.050954252, -0.053135887, -0.007827195, -0.011023026, -0.01979727, 0.008465291, -0.045824423, -0.014683258, 0.048056424, 0.031527724, 0.025568593, 0.0041307155, 0.030396275, -0.0052646557, 0.05072631, 0.034951985, 0.016233858, 0.0019695095, -0.03440189, -0.033384353, 0.022755122, -0.04365519, -0.014876414, 0.0034408034, -0.024345435, -0.022423606, 0.020983452, 0.024367817, -0.012544525, 0.029036643, 0.003660719, 0.023996102, -0.00056292553, 0.024428148, 0.012015748, -0.03732143, 0.05311059, 0.0038047344, 0.02906839, 0.01961275, -0.026190877, 0.0193152, 0.0016620171, -0.021219833, 0.019535268, -0.014709044, -0.011647742, 0.017912418, 0.00021553674, -0.052287366, 0.0011202559, -0.047897812, -0.065597855, 0.021444203, -0.014707342, 0.02012325, -0.03170774, 0.0070261694, -0.023826297, -0.039121624, 0.005356307, -0.03408886, -0.033213094, 0.0016483938, -0.028147006, -0.020603586, 0.049229953, 0.05224358, 0.010823059, 0.0043525775, 0.036259376, -0.050696384, -0.024179038, -0.030993503, 0.048873812, -0.013049946, 0.019382738, 0.048211083, -0.006945343, -0.0369755, 0.043301966, -0.016139712, -0.0045613023, 0.02967498, -0.03385338, 0.010314139, 0.03871293, -0.0069292877, -0.029056106, -0.05750112, 0.02707346, 0.014516376, -0.02829905, 0.034614567, -0.0006193641, -0.03193374, 0.017275538, -0.014827274, -0.010318397, -0.044247795, 0.02812633, -0.04833472, -0.014987346, -0.0442838, 0.018070664, 0.029447282, -0.011499135, -0.05488013, 0.074827746, 0.011095277, 0.033902034, 0.03644262, -0.05260848, 0.007368389, 0.052653246, 0.01776743, 0.021196555, -0.019512644, -0.040876083, -0.037013937, -0.019254291, 0.015998373, 0.0033568752, 0.031407062, -0.011533163, -0.001104565, -0.010272783, -0.008043948, -0.0113927955, -0.05718779, 0.010446964, -0.03317174, -0.044779096, 0.05133902, -0.016807001, -0.02225797, -0.011008064, 0.05631299, -0.040153086, -0.031270344, 0.008579141, 0.017634118, -0.0011562598, -0.0054403567, -0.030104596, 0.02563379, -0.027549779, 0.014106406, -0.00034057724, -0.00915277, -0.037809916, 0.010310734, -0.01700937, -0.025163794, -0.0025806024, -0.023432687, -0.008345116, 0.015547837, -0.0140548935, 0.019581245, 0.031850666, 0.0134391785, 0.009532636, -0.06267278, 0.013711641, -0.008258755, -0.015719343, 0.009516702, -0.012836844, 0.028316565, 0.024442526, -0.013076828, 0.021488478, 0.002444615, 0.023713177, 0.04761854, 0.01768265, 0.0047712442, 0.053614646, -0.04051945, -0.040935438, -0.01362309, -0.036174167, 0.010969872, -0.0063477517, 0.013806028, 0.00512362, -0.026730448, 0.020383548, 0.02723645, -0.046870243, -0.03562146, -0.011959127, 0.003660719, -0.0028423606, 0.04140349, 0.008890039, 0.0013895552, -0.02269733, 0.000712293, -0.009614496, -0.022201745, -0.08047354, -0.029499099, 0.02257118, 0.035821915, -0.031031452, 0.028873166, 0.027698692, -0.053140268, -0.0069032577, 0.0026973719, -0.027330594, -0.029217636, -0.0140230255, 0.054443706, 0.02827813, 0.0019039485, 0.013740833, -0.03787803, -0.036371462, 0.013614332, 0.01758449, -0.015538595, 0.004142636, 0.0015379495, -0.0071949377, 0.011964966, 0.005013297, 0.010576626, 0.017021079, 0.05358545, 0.030283643, -0.03435877, 0.032837484, -0.059023008], [-0.030491548, -0.082592286, -0.037961144, -0.051551778, -0.028966082, -0.0017833832, 0.023596037, -0.029567758, 0.060549706, 0.019664954, -0.015654393, 0.025856288, -0.072826855, -0.049766548, 0.0016330418, 0.028814714, 0.00048179037, -0.054434106, 0.022857662, 0.030223783, -0.033292964, 0.013553508, -0.029874284, 0.042100564, -0.004011023, 0.04921194, -0.010663791, -0.010447611, 0.046300586, -0.0079648215, -0.00860808, -0.046381913, 0.004467585, 0.016536342, 0.021330658, 0.0066605625, 0.003980872, -0.004013484, -0.039928917, -0.032771077, -0.07005794, -0.0026706653, -0.019041898, 0.013255081, 0.0046548457, 0.0669461, 0.023876209, 0.034057185, -0.022753673, -0.03560039, 0.008338727, 0.0018779364, -0.022393523, 0.006070374, -0.01751551, 0.033506684, 0.025158934, 0.0311406, 0.03425491, -0.010174002, 0.008066656, -0.022560157, -0.063555926, 0.02126195, 0.03237861, 0.05167525, 0.0051710936, 0.010205997, -0.0017427725, -0.05500327, -0.040433474, 0.016527317, 0.0039105215, -0.045113955, 0.08334789, -0.010036376, -0.057732802, 0.030517083, -0.013367197, -0.063861325, -0.011983434, 0.016733652, -0.01103339, -0.026621277, -0.06993898, 0.019225672, -0.039923172, 0.02393897, 0.05056389, -0.00810901, -0.057361975, 0.007230343, 0.04415817, 0.014069346, 0.004062453, 0.010210408, -0.01362714, 0.06296215, 0.03188554, 0.053850587, 0.047093216, -0.0545906, -0.017932693, -0.026696807, -0.014610001, 0.023371652, 0.017696207, -0.041487914, 0.00031114346, -0.018374078, 0.0053212303, -0.009604632, 0.015086663, -0.05185205, 0.00037985345, 0.005992332, 0.053118773, -0.03588836, -0.057158098, -0.024687193, -0.019701105, 0.0010587492, 0.016843345, 0.02051219, -0.0269015, -0.008135263, -0.012291705, -0.013141043, -0.058479384, 0.012799954, 0.042653523, 0.003190605, 0.027858108, -0.032590277, -0.051608387, 0.030819817, -0.013321125, 0.066768885, -0.025704512, 0.049334288, -0.016751291, 0.012599978, 0.023115681, 0.02313886, 0.031144498, -0.030766489, 0.021371065, -0.058597524, -0.00075689954, 0.0034841096, -0.010479197, -0.008724118, 0.020687452, 0.016418202, 0.019799145, -0.06357254, 0.023693668, 0.0007537589, -0.049019348, 0.018724397, -0.0064743273, 0.012815747, 0.02385447, 0.029467769, -0.010135442, -0.03741905, 0.013400705, 0.0051723244, -0.028994797, 0.023993941, 0.052526433, -0.0033247434, -0.003802688, 0.02417597, -0.037833977, -0.010837309, 0.02032134, -0.050234184, 0.014016839, 0.031918768, -0.0101362625, -0.010601029, 0.002994115, 0.005724568, -0.0075726616, 0.033244614, -0.03464568, -0.025311943, 0.0076225023, 0.033481587, 0.03190769, -0.043560904, 0.033780705, 0.0060294815, -0.035739657, 0.03314488, -0.019368835, 0.009082436, 0.008577058, 0.048742663, 0.0077044414, -0.008936811, 0.020321647, -0.038306132, -0.040023264, -0.044460904, 0.031029023, 0.00750549, 0.04351004, -0.023619624, 0.008197923, 0.052087303, 0.026135232, 0.048065, 0.053789873, 0.027849903, 0.008858513, -0.059732985, 0.02389385, 0.07206879, -0.03714852, -0.0056785224, 0.03292542, -0.039771397, -0.028912218, 0.020833896, 0.002437359, 0.008372979, 0.01849386, -0.0020779134, 0.080725834, 0.0057735112, -0.010137494, -0.0678584, -0.026890425, 0.0075864037, -0.030997438, 0.0059894603, -0.03308253, 0.021979814, -0.026124975, 0.011160002, 0.035579883, -0.031516965, -0.024316365, 0.014311984, -0.046829447, -0.008444561, 0.0132396985, -0.0091280425, 0.03214069, -0.00033432027, -0.04064678, -0.0135799665, -0.013321125, 0.02046604, 0.006345496, 0.016151285, 0.0058372733, 0.028228117, 0.0030794383, -0.03982308, -0.009419217, -0.06527901, 0.046603013, 0.0009909621, 0.043111317, -0.00039687712, 0.053379666, -0.023706589, -0.03946538, -0.08270386, 0.021212725, 0.023791477, -0.040262006, 0.05485642, 0.035899844, -0.0013162579, 0.03926684, 0.007170452, -0.06358895, -0.0371116, -0.018818643, 0.027322683, 0.0052832854, 0.0014349108, 0.021197135, -0.07459895, -0.0029239692, -0.038403757, -0.020056754, 0.014687018, 0.024501778, 0.016410818, 0.03300623, -0.026534773, 0.04215594, -0.017481875, -0.04776637, -0.048174936, 0.020689707, -0.010677739, -0.0016588337, 0.008765447, -0.008058452, -0.021344401, -0.07292366, 0.040098794, 0.028530031, -0.008957937, -0.011179013, -0.026611073, -0.0599988, 0.0077325404, 0.04779098, -0.037566084, 0.039052583, 0.076994576, -0.0066355397, -0.008014661, -0.007822684, -0.030761566, 0.011843346, -0.042855345, 0.018059857, 0.042840578, 0.013700978, -0.0017682055, -0.025212055, -0.013592683, 0.047328267, 0.031947073, -0.02212585, -0.01570772, 0.02629193, 0.008504451, -0.0009746564, 0.01333097, 0.029092837, 0.03435664, 0.019772531, -0.060349938, -0.0102883475, -0.013604988, 0.017679185, -0.05505332, -0.0020108442, -0.068986475, -0.0006669997, 0.022554107, 0.031695202, -0.0326674, 0.018785108, 0.038230546, -0.007272184, -0.015582401, -0.0010968986, -0.017769007, -0.017973714, -0.0083955405, 0.0023201418, -0.019564504, -0.034209784, 0.044253338, 0.037060738, -0.029557193, 0.04644139, 0.007718491, 0.019961791, -0.013461518, 0.045132007, -0.010726964, -0.029577704, 0.03551911, 0.0011986304, 0.03465937, -0.04294026, -0.013701798, 0.0439826, -0.0016154026, 0.016818566, -0.02385611, 0.053307675, 0.013958178, 0.050150502, 0.035448615, 0.046837654, 0.033525553, -0.02322439, 0.029833265, 0.036430243, -0.0040499927, 0.07157449, -0.009793635, 0.015460979, -0.025630675, 0.037373006, 0.045147594, 0.014467184, 0.025863826, -0.02472734, 0.018648097, -0.025805423, 0.00090768974, -0.008279657, -0.04724976, -0.05636763, 0.013840449, -0.00041515706, 0.019000057, 0.026506059, -0.0012560597, -0.028301543, 0.022610305, 0.01965598, -0.029986272, -0.027382266, 0.0011693005, 0.0223449, 0.009401988, 0.011532613, 0.035492916, -0.030908832, 0.03901825, 0.0051021785, 0.0005505004, -0.03141421, 0.0020186382, -0.04257784, 0.05863608, 0.01121183, 0.008154133, 0.006719273, 0.065155946, 0.03864578, -0.021957662, 0.02770715, -0.0064517655, -0.061807, -0.051188637, -0.015125223, -0.025126526, -0.0077431034, 0.028544592, -0.020509625, 0.008344265, -0.025704512, 0.016672121, 0.034603175, -0.016711911, 0.017555712, -0.019519381, -0.046076305, -0.042950515, -0.058328424, 0.04448141, 0.049958933, -0.043423075, -0.0164543, -0.023365092, -0.054997534, 0.00074276014, 0.046068106, -0.009761127, 0.0028735134, 0.010624411, 0.036172323, -0.041394185, -0.01309897, 0.027188238, -0.015284794, -0.022898069, -0.024306724, -0.058488615, 0.0059554134, -0.008152441, 0.05419352, 0.022287292, 0.012049784, 0.011251621, 0.041217588, 0.012157772, 0.021492282, 0.019187523, 0.049802642, 0.010198204, -0.022092212, -0.011901751, -0.007964129, 0.0010138314, 0.018351823, 0.029112117, -0.009429268, 0.065470986, -0.034029704, -0.011279104, 0.007855808, 0.0650821, -0.027488306, 0.011612195, 0.044446137, 0.019726947, -0.04302189, 0.024758568, 0.01867276, -0.07175046, 0.014486528, 0.03163931, -0.027615264, 0.009563405, -0.020763954, -0.044209857, 0.0029089453, -0.030916626, 0.059181664, 0.03663822, -0.009132379, -0.017630266, -0.009117303, -0.029051201, -0.014992316, -0.0050431085, -0.017848097, 0.03928817, 0.017608218, -0.038351253, 0.03090678, -0.035270788, 0.037547242, -0.013277072, -0.014149747, -0.062226232, -0.02691791, 0.00046189525, 0.014344186, -0.0037796649, 0.05612314, 0.012292904, 0.012553572, -0.017420342, -0.020581821, 0.01805432, -0.0025586782, 0.009688725, -0.014619846, -0.007840503, 0.001592226, 0.004998498, 0.017206624, -0.028698215, -0.00082369946, 0.011208908, -0.09097121, -0.06017601, 0.053478118, -0.0035748682, -0.013972537, 0.030880937, 0.052270465, 0.053156514, -0.052967817, 0.0009328151, 0.0124918865, 0.011415293, 0.015674492, 0.04083968, -0.006385927, -0.057455502, -0.055283036, 0.03833823, -0.040051978, -0.038193733, -0.055417176, -0.041027457, 0.0058551175, -0.022277625, 0.015328231, -0.034521542, 0.038818892, -0.03491042, 0.021566322, 0.0044245133, -0.010343008, -0.010999034, 0.031026972, 0.05164997, -0.00021741074, -0.0038469392, 0.011088562, -0.009499413, 0.013442367, -0.01614049, 0.059652273, 0.0034236037, -0.029998168, -0.02310153, -0.040805124, 0.019116556, -0.008212517, -0.03270678, -0.013433964, -0.06277837, -0.0010353673, -0.017822757, 0.02514683, 0.009343739, -0.016388256, 0.048526075, 0.013596375, 0.019571478, -0.0033989912, 0.020144539, -0.030276699, -0.012157567, 0.0009581455, 0.0057347207, -0.026132256, -0.0036278877, -0.033296864, 0.017394088, 0.027481126, -0.0064616106, -0.0055907373, 0.020041987, -0.03300705, 0.015352478, 0.014388488, 0.05399006, 0.012726117, -0.010864794, 0.048274204, -0.01590298, 0.07928436, -0.004969271, -0.06718074, 0.08267843, -0.0027867544, -0.014872534, -0.011948565, -0.015992405, 0.03303556, 0.04081989, 0.0018287114, 0.0034186812, 0.005835427, 0.0015247465, -0.003471598, -0.0075351275, -0.04745379, 0.0065011964, 0.03336229, 0.011827144, 0.005566945, -0.028227912, 0.036603764, -0.016532034, 0.015651932, -0.009172272, -0.024840612, -0.023799168, 0.030202862, -0.06688867, 0.035051532, 0.019383192, 0.023561938, -0.003184452, 0.03653649, 0.001655193, -0.029793063, -0.010356134, 0.059286676, 0.010796033, 0.029889412, -0.026131334, 0.01513958, -0.012762625, -0.024257705, -0.039015792, 0.005614119, 0.0346725, -0.04337221, -0.015331097, 0.025399316, -0.013168937, 0.03673667, -0.0018643995, 0.034822788, 0.028051317, -0.04466806, -0.048491616, -0.03007816, 0.013347378, 0.00023545991, 0.0007822684, -0.0019326736, 0.007994971, 0.057969805, 0.024404148, 0.04706245, 0.033918533, 0.042874213, 0.060564887, 0.003510978, 0.035213564, -0.01183863, -0.006376082, 0.015221213, -0.006308859, -0.039393183, -0.07963632, 0.016798876, 0.020115158, -0.0017638984, 0.020603204, 0.02195315, 0.0030098567, 0.016487528, -0.011968461, -0.0062033846, -0.002428437, 0.007606094, 0.017147347, -0.042732283, -0.013628782, 0.008780112, -0.028271599, -0.029612161, -0.039809957, -0.014815516, -0.00013454854, -0.008571316, -0.02799299, 0.02409321, 0.013337327, 0.031929843, -0.026908886, -0.03390951, -0.027962405, 0.0053351773, 0.022352694, 0.016350107, -0.017960997, -0.004993076, -0.00014272706, 0.010286604, -0.06689687, -0.036885936, -0.016163, 0.009189936, -0.013575249, 0.011836578, 0.058249664, 0.003750335, 0.019570863, -0.033826903, -0.05504101, 0.02403414, -0.041285373, 0.03913721, 0.01317509, -0.009806557, -0.07396436, -0.012339904, 0.010922633, -0.014581286, -0.010506886, -0.02258118, 0.01759427, 0.028105874, -0.004287914, -0.0040241494, -0.013721488, -0.025558887, -0.05776726, 0.0021183188, -0.016323853, -0.094827175, -0.039121624, 0.004625721, -0.03618863, -0.07116961, -0.015860317, 0.0047901124, -0.024986645, -0.039973218, 0.058154497, -0.030883398, -0.005244111, -0.013546637, -0.034983233, -0.009086537, -0.007497286, -0.040092178, 0.011717207, -0.031037433, 0.038569484, 0.0077397195, 0.03982147, -0.018245682, -0.02122216, -0.012950296, 0.035966914, 0.0096809305, 0.034943234, 0.018962318, -0.006542012, 0.0018320314, 0.02419248, -0.054680847, -0.06509195, -0.028801588, 0.03159593, -0.015825039, -0.008427743, 0.029230667, 0.010155542, 0.002713532, 0.048899777, 0.012445226, 0.0041340855, 0.006642923, 0.024771698, 0.010567186, -0.0052990788, 0.005493518, 0.00528667, 0.010904174, -0.0059761284, 0.0009520949, -0.021611037, 0.034962106, 0.02338765, 0.023823703, 0.034634348, -0.001957517, -0.007818787, 0.0059545925, -0.024591204, 0.040062644, -0.08774861, -0.0096476525, 0.06411483, 0.007494517, 0.012305447, 0.0047764727, -0.009043876, 0.016114032, -0.056347936, 0.00010542369, -0.09526692, -0.046805657, -0.02331935, -0.022824023, 0.005642834, 0.031363755, 0.023125427, -0.010985292, 0.034034215, 0.016463531, 0.024476347, -0.0010706453, -0.04362654, 0.05727829, -0.008603677, -0.002307015, 0.028985772, 0.00971385, -0.000668538, 0.031193927, -0.016655918, 0.01252191, 0.02890127, -0.01757212, 0.0144100245, 0.041955348, -0.060495973, 0.0052111917, -0.032032598, 0.004380211, 0.01694409, -0.023450004, 0.019657621, 0.023144808, -0.018617742, -0.015534611, -0.03414743, -0.04008233, 0.027710434, 0.0011551484, 0.02252666, -0.012798518, 0.0082657095, 0.01890448, 0.05942953, -0.019406984, -0.06309341, 0.06719878, 0.008096498, 0.035424, 0.052812964, -0.053477295, 0.06393352, 0.0035876872, -0.020202994, -0.020827128, -0.007447343, -0.03699182, -0.05087411, 0.022994673, 0.0099218255, 0.032091465, 0.05272005, -0.0062304586, 0.01920311, -0.07784452, -0.0119296955, -0.013882085, -0.02055167, -0.052211393, -0.023455592, 0.015122557, 0.002799655, 0.017400652, -0.012567161, -0.062448565, 0.072265685, 0.0013766611, 0.0005012753, 0.00089938304, -0.006353726, -0.0138224, -0.0066847648, -0.024313904, 0.04381031, 0.014600976, 0.040871575, -0.020256937, 0.009813114, -0.054639827, 0.022701884, -0.020284832, 0.040638372, -0.015070255, -0.0030519543, -0.00019977173, -0.0010973089, -0.008317396, 0.054433905, -0.019684285, 0.025391933, 0.009943464, -0.025302993, -0.041515604, 0.02869196, -0.06883552, 0.04416268, -0.0038625272, -0.0031327656, 0.034651168, -0.029814806, 0.065923855, 0.04051121, 0.02462556, 0.0018453249, 0.010215842, 0.010960783, 0.040212065, -0.0352632, -0.0059490292, -0.021694308, -0.030852633, -0.0067969565, 0.0041410592, 0.0006220818, -0.004262891, -0.004783856, 0.041890536, -0.012540908, -0.028819637, -0.047643308, 0.051323697, 0.0013806093, -0.033423822, -0.013362761, 0.010358595, -0.02589085, -0.02839138, -0.0056095044, -0.02509576, -0.025874339, -0.07778874, -0.020843536, 0.014263785, 0.010551394, -0.0040456853, 0.018866738, 0.0125493165, -0.023957841, -0.017457262, -0.010344033, 0.02126195, 0.04894449, 0.030009245, 0.027396213, 0.011988356, 0.025089044, 0.0078382725, 0.00649812, -0.036160428, 0.051020145, 0.03824214, 0.020217557, 0.0043123215, 0.02029837, 0.015028414, -0.016524035, 0.0058305045, 0.00583194, -0.008028506, 0.045825258, 0.045105755, -0.06212204, -0.006088731, 0.009329792], [-0.03599455, -0.0904756, -0.025018511, -0.03126097, -0.004214819, 0.012257938, 0.002850826, -0.03445994, 0.056630395, 0.028734058, -0.019749962, 0.024787864, -0.08475095, -0.030614533, 0.0024585703, 0.030698996, 0.0036808334, -0.04851488, 0.042228308, 0.036288094, -0.018880095, 0.0048837108, -0.026177276, 0.031905435, -0.0065925843, 0.05578021, 0.003490232, -0.00203061, 0.035735417, 0.00017090714, -0.017125528, -0.037971847, 0.010465689, 0.0048326515, 0.031038634, 0.0062223845, 0.00582825, -0.0021163605, -0.028297791, -0.051673163, -0.057585124, -0.0066123656, -0.024401741, 0.02748242, -0.016569536, 0.049082, 0.021913303, 0.0155768795, -0.040150516, -0.027031021, 0.024617849, -0.0071762702, -0.028810116, 0.014707113, -0.02511865, 0.020954916, 0.025126465, 0.0313848, 0.026955852, -0.011688545, 0.0063756867, -0.003481244, -0.04610616, 0.0134154195, 0.008149343, 0.039209735, 0.0016157054, 0.0051612863, 0.0005665255, -0.03961396, -0.019626232, 0.01873332, 0.01080775, -0.04903868, 0.05140507, 0.005898571, -0.07024284, 0.013168553, -0.0137754325, -0.052185226, -0.0054334225, 0.00470232, -0.015135173, -0.02879469, -0.047271647, 0.009960681, -0.024471765, 0.0062009227, 0.03802021, 0.00083277666, -0.047966946, -0.010410351, 0.04081634, 0.01406725, 0.011984073, 0.009061046, -0.02322082, 0.060646713, 0.024963321, 0.051878225, 0.044881716, -0.05418864, -0.018667154, -0.043609604, -0.00032203336, 0.006644015, 0.022400701, -0.027641064, -0.02066552, -0.0048407866, -0.006986621, -0.0144927865, 0.003924534, -0.061249636, 0.032315694, 0.001510471, 0.049460605, -0.031794462, -0.048848584, -0.012538135, -0.024081687, 0.008204334, 0.008592435, 0.020710621, -0.031834323, -0.0030227222, -0.010286869, 0.0013224534, -0.066862665, 0.00507341, 0.046719566, 0.008524092, 0.023384137, -0.037040956, -0.036360495, 0.035626076, -0.009732212, 0.06568214, -0.015800603, 0.039802372, -0.025143921, -0.0017997916, 0.031174727, 0.016073184, 0.023392418, -0.012806958, 0.01838755, -0.051321197, -0.017147288, -0.0020073678, -0.010606132, -0.006844989, 0.039959036, 0.024577197, 0.02032153, -0.053564746, 0.015901782, 0.027940944, -0.046979975, 0.018619383, -0.009034193, 0.011179384, 0.0400437, 0.024457129, -0.012133517, -0.04643215, 0.009020074, 0.007968545, -0.011829978, 0.021882443, 0.071458176, -0.010276187, -0.001387038, 0.012313473, -0.048395008, -0.007329622, 0.0035235751, -0.038913023, 0.026704635, 0.015106687, 0.012545849, -0.0027771422, 0.004060627, -0.0013048482, -0.008153497, 0.03146313, -0.010910463, -0.013247676, 0.0033864933, 0.007995645, 0.021400977, -0.021095954, 0.028551778, -0.0008736119, -0.051863983, 0.033231944, -0.026864268, -0.009148279, 0.019846393, 0.05262634, 0.033069097, 0.0040089986, 0.026106857, -0.025073797, -0.024430227, -0.04995394, 0.0387073, 0.0033113256, 0.052343078, -0.031087691, 0.013070836, 0.050674364, 0.027851336, 0.053974215, 0.033996277, 0.027313493, 0.015911574, -0.054416515, 0.03931972, 0.06056047, -0.036945216, 0.0064670253, 0.032393627, -0.032725554, -0.04246716, 0.017776914, 0.0025192979, 0.021077758, 0.029767117, -0.012876587, 0.06510415, 0.017082999, -0.010336717, -0.063624926, 0.0036112044, -0.010133856, -0.01998852, 0.039565004, -0.028941065, 0.024127578, -0.025192978, 0.028914956, 0.045005545, -0.035429653, -0.026197849, 0.0016764329, -0.033604812, -0.007390943, -0.020588275, -0.0035915226, 0.04569234, -0.0034668036, -0.019828986, -0.03586676, -0.01254308, 0.011919981, -0.002115866, 0.014357783, 0.013495086, 0.0301208, -0.007270674, -0.041482963, -0.0074375262, -0.05682425, 0.042927757, 0.007775681, 0.059700396, -0.022381615, 0.02912503, -0.0224462, -0.03816748, -0.0726474, 0.020992301, 0.0097707845, -0.022608798, 0.033152126, 0.014214173, 0.014201513, 0.04451023, 0.0070599644, -0.05999948, -0.019486578, -0.009808764, 0.022221092, 0.026432846, 0.0038837856, -0.0026283895, -0.07319256, 0.00047078586, -0.049674634, -0.003152287, -0.0019567285, 0.011768856, 0.03388709, 0.044910993, -0.030276673, 0.039145645, -0.023180071, -0.05866269, -0.032180388, 0.022339778, -0.0061583933, 0.0026094988, 0.005480106, 0.009091508, -0.03546086, -0.06320874, 0.03155373, 0.013205148, -0.0058939224, -0.021742098, -0.011033796, -0.05517689, 0.030775154, 0.024630409, -0.025378918, 0.033691652, 0.07388411, -0.016167562, -0.0030866144, -0.016713789, -0.031068703, -0.004310262, -0.041634087, 0.014883583, 0.052926272, 0.022281228, -0.013550325, -0.044651866, -0.035306565, 0.038818076, 0.04677475, -0.00043478457, -0.008114924, 0.02936952, 0.018387154, -0.012146275, 0.015223394, 0.033185657, 0.0339852, 0.007464923, -0.05548627, -0.015426248, -0.022883357, 0.035798825, -0.055945184, -0.009234375, -0.07241715, 0.005383155, 0.025713613, 0.0142254485, -0.036254443, 0.00864347, 0.023324076, -0.0026862489, -0.0107979085, 0.02260682, -0.025822802, -0.029367544, -0.01463155, -0.013273985, -0.010613798, -0.035966657, 0.03752994, 0.033249352, -0.033341136, 0.05420802, 0.013054812, 0.03619834, -0.01600039, 0.05939419, 0.01104527, -0.028583031, 0.04367627, 0.010398829, 0.03643111, -0.04522393, 0.008850082, 0.04560689, 0.01232015, 0.014880543, -0.024896165, 0.038935672, 0.01192829, 0.034372907, 0.051684376, 0.02817673, 0.0315745, -0.020992301, 0.039178878, 0.010278759, -0.009538359, 0.07100846, 0.014677442, 0.020743063, -0.023513924, 0.039335545, 0.047808103, 0.016721206, 0.017875323, -0.019325957, 0.011037753, -0.018424738, -0.0014202701, -0.011757779, -0.039903652, -0.04168868, 0.014921933, 0.0030980874, 0.0338997, 0.031659756, -0.00746611, -0.0076125874, 0.023587953, 0.027645811, -0.018710697, -0.02288415, 0.021300094, 0.020148052, -0.000632668, 0.024285428, 0.03791448, -0.05054104, 0.029775823, 0.04267654, -0.0139621645, -0.013307019, -0.010290775, -0.03582245, 0.056057934, -0.008338646, 0.017627172, -0.011354643, 0.08099099, 0.043546703, -0.038382895, 0.014948044, 0.0038319596, -0.05317902, -0.03669756, -0.02518823, -0.049099404, -0.0071128225, -0.004979698, -0.03075023, 0.0068724845, -0.042816836, 0.022638377, 0.030906893, -0.02170837, 0.011551562, -0.021246685, -0.032019373, -0.03054337, -0.035221905, 0.053638335, 0.060615066, -0.04370396, -0.01178839, -0.044121735, -0.06669176, 0.0033690862, 0.02505174, -0.011789427, 0.023617625, 0.008733078, 0.037232436, -0.053161614, -0.0018245919, 0.03271843, -0.0004937317, -0.023324076, -0.017301973, -0.05020951, -0.0036650086, -0.0069652568, 0.04189203, 0.009032759, 0.008255418, 0.01953247, 0.025724838, 0.0050168363, 0.031899896, 0.016232025, 0.053181395, 0.0070990752, -0.03464074, -0.0014246217, 0.0004482356, -0.018434629, 0.02534984, 0.033854645, 0.005468435, 0.05787976, -0.025061632, -0.03733055, 0.0034265497, 0.04317769, -0.028606672, -0.0037821117, 0.046281714, 0.0030777627, -0.05635346, 0.0402874, 0.019410027, -0.06847521, 0.024381913, 0.045589477, -0.0025337378, 0.0036580851, -0.021365765, -0.050550535, 0.021698875, -0.04080645, 0.064368695, 0.032687176, -0.012843552, -0.042200983, -0.011498253, -0.02958988, 0.0066582575, -0.0068236254, -0.02310802, 0.04221169, -0.003514278, -0.04851389, 0.0511764, -0.03782903, 0.03614844, -0.0072402116, -0.0049451306, -0.06959362, -0.028166447, -0.0056842444, 0.004297998, 0.0005776028, 0.04997768, 0.021264883, -0.004585217, -0.019690322, -0.02897588, 0.009710058, 0.0039170175, 0.014952792, -0.015124886, -0.0010653014, -0.01602749, 0.009386244, 0.013650219, -0.014796918, 0.0022738166, -0.021600565, -0.07211648, -0.06470259, 0.052192897, -0.008850546, -0.011496671, 0.03259381, 0.040730495, 0.017865334, -0.05415778, -0.018344825, 0.023594284, 0.03550952, 0.017548049, 0.04113007, -0.011876859, -0.05457951, -0.077762745, 0.02933985, -0.03686372, -0.04369684, -0.05352242, -0.042267866, 0.00040867378, -0.023707828, 0.02071181, -0.023951923, 0.037949298, -0.0357188, 0.018260557, -0.0130554065, 0.012518849, -0.00846569, 0.034248684, 0.0389648, 0.011487966, 0.009357574, 0.004939988, -0.016461682, 0.022958526, -0.013931392, 0.051713653, 0.008109188, -0.022297842, -0.031077038, -0.038869504, 0.0074194265, -0.004294264, -0.048776187, 0.007979277, -0.054842994, 0.00280894, -0.024776392, 0.010335084, -0.023903262, -0.02319649, 0.020540902, 0.013617976, 0.0055331187, 0.0037962056, -0.0051834416, -0.030508505, -0.021816771, -0.015360428, 0.0105511425, -0.024663603, 0.008654547, -0.039633047, 0.003011892, 0.03300476, 0.0017345888, -0.00662641, 0.012709636, -0.03686214, 0.034662005, 0.009159356, 0.072451174, 0.020646136, -0.011184033, 0.034520075, -0.009630933, 0.07830079, -0.012210366, -0.056692112, 0.06808434, 0.0018163827, 0.00026328405, -0.027840454, -0.00788863, 0.019152602, 0.037694518, 0.0020014334, 0.009182302, 0.0015822756, -0.0030371621, 0.003113022, -0.0063286084, -0.034570716, 0.01833518, 0.04975455, -0.0196832, -0.0023679738, -0.052898925, 0.033672266, -0.0050694537, -0.0005584153, -0.024235187, -0.03034551, -0.025962852, 0.038504746, -0.058485053, 0.04743939, 0.019657882, 0.02001285, -0.0007722471, 0.01914595, -0.022209225, -0.036935326, -0.030609995, 0.046687715, 0.028813677, 0.04351881, -0.011537004, -0.0018554502, -0.009238085, -0.01602294, -0.022552818, 0.0013134531, 0.015058224, -0.043499824, -0.01387943, 0.026007952, -0.014374398, 0.030242255, 0.02853338, 0.016144592, 0.01422525, -0.033915177, -0.049308293, -0.024545845, 0.018652169, -0.008471772, 0.0061430135, 0.00087708596, -0.0006978708, 0.056850653, 0.029204153, 0.05516107, 0.03717705, 0.031520497, 0.06184623, 0.021032259, 0.028049342, -0.00043092732, -0.019656992, 0.02250114, 0.00017051151, -0.03464351, -0.07568248, 0.010267286, 0.011606652, -0.0009765839, 0.040298477, 0.024129013, 0.011124888, 0.037661288, -0.047350574, 0.013575446, 0.0073102363, -0.0026003998, 0.008625272, -0.060075443, -0.028609537, 0.020601133, -0.017911622, -0.06139364, -0.045652777, -0.041202467, 0.0014469742, -0.015733402, -0.036496982, 0.014434531, 0.013202973, 0.046761695, -0.012855619, -0.043834515, -0.03145997, 0.023461752, 0.021374566, 0.03264069, -0.036561467, 0.0042968113, -0.0021974621, 0.024302047, -0.06015298, -0.030331269, -0.013598194, 0.0017040643, -0.010889792, 0.01965149, 0.063412875, 0.006196966, 0.012547135, -0.03679884, -0.061400156, 0.0434658, -0.039786547, 0.029918244, 0.021640722, 0.0017009611, -0.07924642, 0.00011789428, 0.026007952, -0.0144548565, 0.0090632215, -0.033706684, 0.025799857, 0.020537341, 0.007823147, 0.017097043, 0.0050678714, -0.022125354, -0.023267206, -0.009128696, -0.016560685, -0.08583178, -0.032109573, 0.0009583855, -0.04267298, -0.07701977, -0.022137221, -0.010122428, -0.014163928, -0.055521876, 0.06340655, -0.02964559, -0.003978635, 0.0013929723, -0.036450297, -6.646389e-05, -0.027043879, -0.055880304, 0.025986588, -0.03431119, 0.05381359, 0.003186508, 0.03869939, -0.03564205, -0.028821986, -0.008017602, 0.011145139, 0.026027733, 0.01128185, 0.009970374, 0.007142692, 0.019290352, 0.021392668, -0.061862055, -0.06724563, -0.03784881, 0.0059801675, -0.016226683, -0.0061807455, 0.036124706, -0.0013118705, 0.0028919703, 0.025575936, 0.0063053165, 0.01469564, 0.0013799169, 0.02777241, 0.01891214, -0.007871309, -0.020622991, 0.012029963, -0.0028990915, -0.021160835, -0.011546715, -0.027571842, 0.047452047, 0.025202472, 0.023143675, 0.041055296, 0.013366454, -0.009780181, -0.009882696, -0.0053550904, 0.033420257, -0.089545846, -0.011082062, 0.06753364, 0.008474937, 0.0005087652, 0.005323441, -0.028247943, 0.02208881, -0.051484983, 0.003959349, -0.0843585, -0.0404275, 0.0010052169, -0.00829038, -0.0054270923, 0.0135523025, 0.017670345, -0.022938745, 0.04366361, 0.03847468, 0.03356268, 0.0035605654, -0.022928458, 0.074907176, -0.0060586976, 0.0068523083, 0.04110791, 0.010971289, 0.0032171686, 0.03593125, 0.00014729367, 0.016445857, 0.042562205, -0.011994556, 0.019284021, 0.033353, -0.0764493, 0.010624529, -0.03660657, 0.0055271843, 0.013195159, -0.012355359, 0.019867163, 0.019424072, -0.014266197, -0.02227648, -0.038354408, -0.014297846, 0.009371012, 0.017615303, 0.024453962, -0.00807734, -0.014090122, 0.006014784, 0.037137486, -0.020777877, -0.065318175, 0.062393367, -0.004811511, 0.047871802, 0.05447032, -0.04501672, 0.06445731, 0.019053375, -0.019984663, -0.027916811, -0.017159946, -0.04832716, -0.06367913, 0.024068037, 0.012915753, 0.018505445, 0.05575959, -0.0006070764, 0.035359975, -0.07826755, 0.008918821, -0.029333718, -0.023446718, -0.03869306, -0.014184501, -0.0020982362, -0.003529509, 0.023412695, -0.0077921, -0.03896841, 0.07859829, 0.01721929, -0.0018421969, 0.008098259, 0.0084480345, -0.023170577, 0.006377665, -0.020966982, 0.05021188, 0.014525524, 0.048920587, -0.021697294, -0.00865613, -0.060820784, 0.0018696924, -0.019042498, 0.026075998, -0.015909398, 0.003317458, -0.00040817927, 0.0030989284, 0.0051897215, 0.0627704, -0.024671257, 0.047012515, 0.0064716246, -0.022520203, -0.025695017, 0.046166684, -0.067744106, 0.060694188, -0.00872833, 0.006405061, 0.023590723, -0.031241192, 0.0633211, 0.030398326, 0.012677788, 0.022997098, -0.006455305, 0.0034685843, 0.04297642, -0.035599127, -0.0051845787, 0.002831045, -0.014935582, -0.00581203, 0.009345297, -0.014254525, 0.0171823, 0.0030628773, 0.05360708, -0.010898706, -0.031529993, -0.057549816, 0.070310876, -0.0054151253, -0.034208328, -0.03373161, 0.0024124808, -0.025177155, -0.026615622, -0.001831713, -0.030147702, -0.024446247, -0.06200863, -0.0156058585, 0.009364262, 0.027521292, 0.002495363, 0.040088292, 0.021882443, -0.0135111585, -0.01522656, 0.007354941, 0.015188976, 0.049961854, 0.019080674, 0.009955736, 0.0012707262, 0.011235784, 0.020163482, 0.014572603, -0.019195996, 0.043042883, 0.048195813, 0.020158537, -0.0013937635, 0.012788413, 0.02587977, -0.012163979, -0.007075832, -0.0050683413, -0.0073135993, 0.0519352, 0.036758587, -0.054524124, -0.006371434, 0.027215378], [-0.0333179, -0.08414965, -0.009812048, -0.03124155, -0.0016068517, 0.04158398, 0.023552096, -0.052121416, 0.048232332, 0.029706985, -0.009374975, 0.0102235945, -0.058372237, -0.017024258, -0.012682413, 0.052199874, -0.033879463, -0.035729747, 0.014078783, 0.0602402, -0.038117535, 0.0022479186, -0.0014695998, 0.021755265, -0.0051645217, 0.038769484, -0.001305567, 0.0045073447, 0.030994663, 0.004127496, -0.0009324134, -0.057210613, 0.007371903, -0.0044874684, 0.029190408, 0.015832929, 0.009477078, -0.00422217, -0.053670518, -0.021197995, -0.08069911, 0.01815209, -0.03536915, 0.024848456, 0.033179812, 0.042059343, 0.03679578, 0.010450813, -0.029639719, -0.056147754, 0.037849724, -0.012518379, 0.0026981717, 0.017440828, -0.021476997, 0.04995844, 0.016037552, 0.014126486, 0.04422399, -0.027182784, 0.00038534106, -0.03610981, -0.047888365, 0.024092732, 0.039974622, 0.006142023, 0.028587105, -0.01266651, 0.01726717, -0.057229865, -0.0027155376, 0.037720844, -0.00069965, -0.016697345, 0.06213913, -0.00037707662, -0.063437164, 0.0153149655, -0.008439737, -0.023516081, 0.00095239445, 0.030187052, 0.026228089, -0.041510653, -0.053884767, 0.0024044192, -0.031233914, 0.0057833195, 0.061187573, -0.023701062, -0.03748881, 0.0048276167, 0.010395577, 0.024701998, 0.009215768, 0.034327205, 0.012910049, 0.044831164, 0.033549726, 0.035192564, 0.024610566, -0.044367097, -0.03030966, -0.0017491251, -0.012043019, -0.00020169337, 0.02068654, -0.03843221, 0.013591288, 0.01913367, 0.00270947, 0.009478333, -0.011862353, -0.06330996, 0.01156724, 0.0039468296, 0.038135946, -0.044174198, -0.053970132, -0.029258091, -0.018287564, 0.000112144866, -0.0060637733, 0.019115677, -0.018948715, 0.008351026, -0.0034996101, 0.024383241, -0.05834211, 0.007347162, 0.043092083, 0.0071295677, 0.033909593, -0.01618652, -0.045870595, 0.025576979, -0.018876428, 0.0542212, -0.0232483, 0.051444363, -0.016128564, -0.013129161, 0.023166671, 0.022036465, 0.032947157, -0.026447566, -0.0053708185, -0.0150117, -0.025103606, 0.0033158055, -0.0036447078, -0.00043142293, 0.008789563, 0.022833195, -0.0040089693, -0.08166991, 0.0093029495, -0.0069098813, -0.020512467, 0.015641488, -0.021140143, -0.02179783, 0.011296502, 0.043326307, -0.025599577, -0.028977731, 0.0066918675, -0.0056832964, -0.0149516715, 0.050029997, 0.054335855, 0.010148374, 0.007051736, 0.045263004, -0.030939009, -0.025115846, 0.006266356, -0.049614474, 0.056156117, 0.043220963, -0.0501957, 0.0005297589, 0.0026701356, 0.0058340435, -0.007860601, 0.02721605, -0.053425726, -0.027842052, -0.007803274, 0.043969993, 0.040532626, -0.024886116, 0.015775183, 0.004259831, -0.009885485, 0.058281854, -0.03818616, -0.0033741794, 0.030006282, 0.020447189, 0.009932352, 0.019320719, 0.008176322, -0.032520127, -0.019105425, -0.07679412, 0.024681913, -0.0063221664, 0.018852053, -0.043091245, 0.0024061976, 0.0345799, 0.038938537, 0.075917885, 0.021803597, 0.04283599, -0.0015867661, -0.046602048, 0.030021764, 0.07918599, -0.031890985, 0.0006594787, 0.044062886, -0.0127987405, -0.0266955, 0.010943329, -0.012233832, 8.8711604e-05, -0.0010221711, -0.031139448, 0.06565329, 0.0007967307, -0.010061445, -0.053472172, -0.024062604, 0.0004736865, -0.043989345, -0.0037317458, -0.036835402, 0.02007351, -0.03394725, 0.015573281, 0.040981416, -0.034284525, -0.025808487, -0.02111169, -0.018831966, 0.004571577, -0.0058163116, 0.004155427, 0.068994194, 0.00034020064, -0.043293774, 0.007111208, -0.015163408, 0.01391747, -0.0118748015, 0.007945965, -0.0044012675, 0.018076558, -0.0044172206, -0.032925606, -0.018483398, -0.024081016, 0.04951614, 0.029161012, 0.009848452, 0.010405202, 0.031777166, -0.024244422, -0.05133222, -0.09063313, 0.041669346, 0.027395671, -0.01673239, 0.07882277, 0.044764213, 0.017934809, 0.040057477, 0.031845372, -0.04685312, -0.011400278, -0.006645169, 0.052997235, 0.020842625, -0.011060497, 0.020666456, -0.045298155, -0.0094844, -0.031586353, -0.01668615, 0.015067164, 0.0096574295, 0.03167088, 0.025762772, -0.03228098, 0.044190094, 0.023098493, -0.0373706, -0.025174115, 0.036485575, -0.026229344, 0.003294046, -0.02036589, -0.03408545, -0.03144617, -0.05669341, 0.05090205, 0.048339456, 0.014730729, 0.013555196, -0.013210497, -0.03768151, 0.012154327, 0.022891153, -0.03435535, 0.030397952, 0.07275356, -0.039668314, -0.022551317, -0.025763188, -0.039785482, 0.0026835261, -0.042005364, 0.049313612, 0.011172641, 0.053093478, 0.004799196, -0.03455903, 0.0066701085, 0.020699933, 0.034205858, -0.017425971, 0.0040970533, 0.039772928, 0.028201923, -0.0039217225, 0.035675038, 0.02748135, 0.029775295, -0.0021495302, -0.067139626, -0.014999375, -0.014785129, 0.037486512, -0.050106995, -0.010876168, -0.05304703, 0.006780998, -0.015837532, -0.006198096, -0.03971267, 0.015521184, 0.022523176, -0.022450732, 0.0091165295, 0.01781246, -0.04122579, -0.020723052, -0.046352673, -0.010656482, -0.044037543, -0.06269065, 0.038887486, 0.008068153, -0.006968255, 0.07303141, 0.016849974, 0.035859365, -0.014540334, 0.057148684, -0.010045753, -0.034837928, 0.022749715, 0.015643371, 0.026074516, -0.043919463, -0.015123236, 0.034891907, 0.015383095, 0.010410223, -0.03236802, 0.041433338, 0.036365062, 0.04740882, 0.037392776, 0.051356487, 0.038946904, 0.011261353, 0.021670738, 0.024468502, 0.017251479, 0.042728864, 0.016722556, 0.005353269, -0.017436014, 0.047886692, 0.024866866, 0.0037779845, 0.03225755, 0.006906115, 0.033892855, -0.03492287, -0.026657, -0.01852106, -0.061994348, -0.06550081, 0.0056316177, -0.011863923, 0.021719696, 0.0032028237, -0.0024134682, -0.016854579, 0.022273308, 0.014858775, -0.043552376, -0.023309393, -0.0008670304, -0.0006109384, -0.0069733807, 0.011659509, 0.04845495, -0.05229047, 0.037749402, 0.0028257994, -0.011795584, -0.024875026, -0.013609804, -0.057173792, 0.026336469, 0.021952564, 0.016860148, 0.003242995, 0.07397376, 0.027625715, -0.035559963, -0.00036154164, -0.017435178, -0.048542824, -0.04910313, -0.02309201, -0.021912605, -0.013953273, 0.019612797, -0.020594483, 0.00659395, -0.022610683, 0.003843995, 0.033816695, -0.0024918756, -0.0076474007, -0.015558006, -0.017052164, -0.053866353, -0.034551915, 0.017118411, 0.045337908, -0.05909448, -0.004592081, -0.047231086, -0.030595252, -0.008458568, 0.040736202, -0.0027110784, 0.0062365932, 0.017176576, 0.034888767, -0.01726581, -0.0052613933, 0.0067745643, -0.020400165, -0.038527615, -0.017515521, -0.036621153, -0.021203957, 0.0074831587, 0.04332474, 0.020068489, 0.0023905581, -0.00025135826, 0.030787949, 0.010754295, 0.030532693, 0.049820352, 0.007771262, 0.028864957, -0.022758292, 0.0067830905, 0.01684893, -0.0040041576, -0.015117378, 0.013438971, 0.0068470086, 0.04680625, -0.05394544, -0.026699316, 0.014947069, 0.040087603, -0.058347963, 0.00088941754, 0.035092134, 0.02897187, -0.05100415, 0.017089536, 0.03121644, -0.041219097, 0.037966475, 0.05811698, -0.046300765, -0.010680333, -0.030772466, -0.03571228, -0.033342592, -0.010842693, 0.04271966, 0.030327652, -0.0065850583, -0.039405946, -0.042745605, -0.028504044, -0.023737887, -0.011313658, -0.0175808, 0.045541693, 0.018418433, -0.034198325, 0.033473566, -0.021186618, -0.0020880704, -0.0017495959, -0.019959275, -0.035318516, -0.044862963, -0.0133546535, 0.0052331476, 0.00041745714, 0.025736617, -0.013030981, 0.03044984, -0.031503916, 0.01142957, 0.0105967475, -0.013505086, -0.008273195, -0.03408869, -0.014889637, -0.0017083262, 0.0043941536, 0.011322656, -0.027629482, -0.0021021473, 0.009002136, -0.08359646, -0.060114667, 0.074886404, 0.005001483, -0.019223846, 0.050579008, 0.067929655, 0.03157631, -0.034621798, 0.04004199, 0.012459796, 0.013578734, 0.027027749, 0.0320705, -0.0070786807, -0.109090164, -0.051369667, 0.034980826, -0.04489393, -0.04330748, -0.045141652, -0.0352319, -0.030239778, 0.011480202, 0.0040726787, -0.018273754, 0.015910761, -0.02345742, 0.014730311, 0.0050611645, -0.001416038, -0.028174305, -0.0012051387, 0.061025005, -0.0072467336, -0.01757787, 0.005216619, -0.010149946, 0.0330797, -0.012495365, 0.042163122, 0.009585038, -0.046540115, -0.0014840363, -0.020817937, 0.020194862, -0.011421619, -0.00066366326, -0.045620937, -0.06620062, -0.0032053343, -0.02308301, 0.017513115, -0.011920622, -0.008639548, 0.03183439, -0.00051469466, 0.0043849475, -0.02742172, 0.006906115, -0.006087939, -0.032422837, 0.0048047323, 0.0059453514, -0.0097335875, 0.031613134, -0.0388697, 0.024916036, 0.005418103, -0.012720595, -0.0030576214, 0.01578983, -0.023308765, 0.018758843, -0.0055317124, 0.07316699, 0.03349407, -0.0027155376, 0.045032438, 0.0003858118, 0.0729427, -0.0025362836, -0.07085547, 0.104736604, 0.02649799, -0.01870392, -0.010092201, 0.014297424, -0.025880983, 0.04299186, -0.0010207327, 0.019869726, -0.018488001, -0.009274547, 0.013059227, 0.029034639, -0.028313909, 0.019304922, 0.03501765, -0.005090874, 0.038417567, -0.01903115, 0.04622042, -0.018824121, -0.016508728, 0.005750353, -0.0080853095, -0.029022085, 0.022087099, -0.049814075, 0.020405186, 0.03579984, 0.019400641, -0.007819384, 0.048826534, -0.0075388127, -0.034741472, -0.032006647, 0.06336812, -0.022512244, 0.020065142, -0.03432051, -0.013730919, -0.022476675, -0.030231828, -0.032801535, 0.019544799, 0.03394626, -0.0550263, 0.0058775623, -0.0002456307, 0.008405634, 0.038920127, 0.030410925, -0.0049544596, 0.041762665, -0.030617567, -0.0508351, -0.0096636545, -0.004603379, -0.004969942, -0.02783452, -0.02287504, -0.01166908, 0.03819704, 0.011236246, 0.032079287, 0.009338152, 0.046976976, 0.032876857, 0.0070260013, 0.013115744, -0.014685746, -0.016617944, 0.02030575, -0.0120857, -0.038443927, -0.08442667, -0.0009968547, 0.027036116, 0.019312348, 0.03275362, -0.008979278, -0.005595108, 0.025455, -0.022463076, 0.025502913, -0.006810708, -0.0008785084, 0.012805959, -0.06741412, 0.0036595631, 0.010396833, -0.038233448, -0.02511208, -0.021812044, -0.0018064529, 0.0063889096, -0.012287394, -0.03811084, 0.04123583, 0.013260092, 0.009014062, 0.008174858, -0.04326281, -0.040886424, 0.00946693, 0.022310968, -0.008988326, -0.021979555, -0.011413668, -0.014963388, -0.021740202, -0.04003488, -0.03797568, -0.034049354, 0.021526113, 0.013949064, -0.0064671594, 0.046953548, -0.0071848035, -0.00079380145, -0.004516603, -0.049641676, 0.04197231, -0.019364864, 0.02615193, -0.013984632, 0.008178886, -0.09919464, -0.028133295, 0.0014497234, -0.009541519, -0.017074473, -0.016925085, 0.008065015, 0.025136454, -0.015093945, -0.0126434965, -0.002178874, -0.001178358, -0.0344972, 0.014187161, -0.0029818814, -0.07425328, -0.027677393, 0.0020308995, -0.057862565, -0.0454965, -0.011483131, 0.037714567, -0.03393512, -0.041922092, 0.049376797, -0.009033728, -0.025444854, 0.01215438, -0.039526876, -0.0058907433, -0.024645925, -0.029694537, 0.027615672, -0.05282337, 0.05596813, -0.009685884, 0.03519926, -0.015775602, 0.012123989, -0.0054048435, 0.0070216074, 0.005316001, 0.040065844, 0.013540654, 0.023898572, 0.0025523417, 0.0048212353, -0.019013574, -0.07903367, -0.0034957395, 0.040000565, 0.008135942, 0.0017127459, 0.039564643, 0.034260884, -0.01927469, 0.032139543, -0.009129972, 0.012844169, -0.0006841673, 0.020564353, 0.0114730885, -0.0035685499, -0.01300713, 0.024448311, 0.012723839, 0.026809316, -0.016855832, 0.013246484, 0.0146407625, 0.05008021, 0.03520512, 0.023657545, 0.01632126, -0.026398396, 0.006969719, -0.024146713, 0.033531312, -0.07816999, 0.013396289, 0.030271789, 0.021593744, 0.040303525, -0.010296614, -0.0133370785, 0.009405941, -0.02198625, 0.025234684, -0.08099202, -0.03173783, -0.02383664, -0.03636841, 0.016682385, 0.031961285, 0.032820575, 0.0067337127, 0.06284799, 0.012551855, 0.013659077, 0.00091306, -0.060886286, 0.052394666, -0.011867269, -0.01352036, 0.04570489, -0.020688215, -0.00781227, 0.03491973, -0.062898204, 0.021207305, 0.013549024, -0.05155881, -0.009553392, 0.05848605, -0.029165195, -0.0018729866, -0.042135503, 0.004903199, 0.018857911, -0.029545566, 0.032686044, 0.022434805, 0.0040134676, -0.03767063, 0.001356618, -0.040863413, 0.0034836044, -0.015985247, 0.0094138915, 0.0070852116, 0.0058491076, -0.018762505, 0.028058602, -0.018214086, -0.05596698, 0.06552346, -0.0048515205, 0.06186379, 0.020441748, -0.05172138, 0.041048367, 0.038924206, -0.045344185, -0.022326032, -0.007215141, -0.050283577, -0.06922518, 0.011447981, -0.021450948, 0.05429485, 0.06594829, 0.033608306, 0.023091797, -0.049645443, -0.009782546, 0.00965063, -0.036742926, -0.025195768, -0.019997248, 0.00491638, -0.00087022106, -0.0068038036, -0.0018516586, -0.050332118, 0.074129425, 0.007645099, -0.004663636, 0.013114672, -0.037630457, -0.0027801883, 0.009483367, -0.045269493, 0.034792107, 0.04329628, 0.014814838, -0.01174801, -0.0045573493, -0.036912397, 0.027540768, -0.015933357, 0.014097823, -0.012196382, 0.0377266, -0.0030588766, 0.010319001, -0.0060106297, 0.063748494, -0.04536176, 0.026862225, 0.009555746, -0.041976333, -0.022708498, 0.020786447, -0.03954613, 0.035713114, 0.037350934, -0.011673945, 0.015405481, -0.016214976, 0.04492657, 0.044304755, 0.01963372, 0.011791059, 0.027723422, 0.0012005358, 0.04214983, -0.031073332, 0.0067015965, -0.014141968, -0.03739738, 0.022105718, -0.0116136875, -0.020447189, 0.0067437557, -0.0010971784, 0.04357581, 0.007564129, -0.06829789, -0.062442925, 0.032142233, -0.013772895, -0.014552468, 0.00792044, 0.006596461, -0.008648545, -0.030584162, 0.014566488, 0.0058750515, -0.009842804, -0.06841673, -0.038823042, 0.0025835163, 0.01754272, -0.027962536, 0.019397922, 0.019458964, -0.05377597, -0.023710687, 0.021990225, 0.0056792167, 0.03765724, 0.016347572, 0.01925544, 0.019850163, 0.01620535, -0.00019667196, -0.0023332825, -0.03959603, 0.055615272, 0.028521826, -0.0035980507, 0.010735778, -0.008412538, -0.010895835, -0.0003512896, 0.0117766755, -0.0029220432, -0.028608236, 0.041825008, 0.01809633, -0.034571584, 0.021674817, -0.017781237], [-0.043699816, -0.07938834, -0.032063853, -0.045515664, -0.0123142125, 0.003156824, 0.024904676, 0.0143840965, 0.024180382, 0.041971676, 0.02681037, 0.054321516, -0.049235053, -0.008638934, -0.0029501969, 0.03614337, -0.012179706, -0.011217476, 0.03086244, 0.049422823, -0.04584771, 0.026368618, -0.00090865564, 0.02350853, -0.070330285, 0.033098035, 0.03383925, 0.015210343, -0.0022059435, -0.010820463, 0.004176887, -0.039715543, -0.0041958787, 0.031387176, 0.01352254, 0.03779932, 0.027362354, -0.023753613, -0.052091785, -0.07448797, -0.03791793, 0.037507508, -0.0041937307, 0.019361323, -0.018435331, 0.047525875, 0.013846626, 0.042492226, -0.00821143, -0.019148933, 0.029914387, -0.025139544, -0.031707596, 0.0072860625, -0.036867615, 0.054013878, 0.012822396, 0.004358341, 0.048476443, -0.014341084, 0.0032750685, 0.007622984, -0.021789398, 0.0016158186, 0.027439052, 0.024839452, 0.0053505064, 0.013856003, 0.027494377, -0.03781881, -0.031102177, 0.009042968, -0.0019183195, -0.024461774, 0.02584136, 0.00012196439, -0.061258815, 0.020333266, -0.014912137, -0.03580975, -0.0020032965, 0.011879583, -0.0007146023, -0.02158183, -0.037100643, 0.01355146, -0.028854428, -0.02663434, 0.019535258, -0.021511834, -0.051849537, 0.017549146, 0.010293837, -0.022685377, 0.012955468, -0.00967207, 0.0077858125, 0.038630858, 0.0796373, 0.03648202, 0.008209963, -0.065636955, 0.014302944, -0.007716867, 0.0037123696, -0.010601367, 0.02134293, -0.057054184, 0.0006604309, 0.0018428776, -0.015420218, -0.025511095, 0.011414777, -0.054549515, -0.005391214, -0.0038971498, 0.057346735, -0.012722855, -0.062822975, 0.0072811903, -0.037494197, 0.010997752, 0.0026987665, 0.013991537, -0.0028429017, -0.016783306, 0.023648098, -0.009656457, -0.035925847, -0.0012657472, 0.04373953, -0.00090697914, 0.033292506, -0.0065371445, -0.037606943, 0.0015809267, -0.0014695452, 0.025620904, -0.019018061, 0.005500133, -0.018873885, -0.019661833, -0.006621283, -0.018455548, 0.012675913, -0.006156058, -0.008331928, -0.056162298, -0.034448445, -0.010648833, -0.01768033, 0.012126236, 0.016161958, 0.014967461, 0.015055268, -0.042457856, 0.016750824, 0.011903656, -0.03467477, 0.04501869, 0.009246661, -0.006124676, 0.038226407, 0.0132580735, 0.0040172804, -0.023831673, 0.017694894, 0.039648905, 0.0060437336, 0.03804283, 0.04984194, -0.013775584, 0.03183983, 0.044834696, -0.034269057, -0.03267053, -0.006666129, -0.037025202, 0.03181636, 0.048618942, -0.019821517, -0.0024862294, -0.020371825, -0.017536886, 0.011806027, 0.009500544, -0.0073744445, 0.03180659, 0.0096859, 0.03212211, 0.055307288, -0.011072145, 0.028818382, 0.015371704, -0.041053798, 0.04440887, -0.056643866, -0.01761652, 0.018149015, 0.03374432, 0.01911907, -0.035147958, 0.036432564, 0.000103103914, -0.028546792, -0.054296784, 0.0323992, -0.047629137, 0.034851637, -0.014154365, 0.02430654, 0.06643916, 0.032041635, 0.039591067, 0.016615657, 0.055775028, 0.031388856, -0.081819244, 0.046008654, 0.027495217, -0.0040059644, 0.011519977, 0.0453959, -0.04317204, -0.011354103, -0.0047449805, 0.016563686, 0.033831496, 0.032263983, -0.008419943, 0.031780105, 0.0037829918, -0.023255171, -0.04219842, 0.0036696193, -0.04049134, -0.03574269, 0.023162337, -0.02569886, 0.021716367, -0.042891856, 0.012468448, -0.0007275951, -0.024669498, -0.017846826, -0.018174134, -0.04300523, -0.019416228, -0.02694449, 0.0039347135, 0.02806522, -0.012476517, -0.013929821, -0.011298366, -0.010030628, -0.007440247, -0.0070429198, -0.01423468, 0.0003822389, 0.019792598, -0.02640131, -0.0072260755, 0.008489308, -0.0444074, 0.049312174, -0.0103083225, 0.062258, -0.01899433, 0.002858619, -0.0054091834, 0.01770705, -0.0853801, 0.060159877, 0.012928644, -0.023257842, 0.021160612, 0.01171864, 0.00753413, 0.04740936, 0.018306393, -0.08552092, -0.02034432, -0.011310835, 0.0072960686, 0.007849729, -0.0053023077, 0.018782515, -0.055531934, 0.01347256, -0.027017418, 0.0048660017, 0.0059427256, 0.023511885, 0.041005183, 0.061669555, -0.038894486, 0.021525877, -0.0041109542, -0.0126692075, -0.033855803, 0.041044578, -0.0048999507, 0.006725225, 0.006636791, 0.004197084, -0.011607153, -0.04357691, 0.0483901, 0.030432, -0.032186024, -0.039219722, 0.003656417, -0.042759623, -0.024112277, 0.012281939, -0.039783023, 0.044430245, 0.076622136, -0.038493805, 0.0027561437, -0.0006026969, -0.009765586, 0.029375395, -0.045944322, 0.010633116, 0.055317346, 0.042635567, 0.01223416, -0.068490334, -0.01954271, 0.0118372515, 0.007868798, -0.0053465245, -0.02095608, 0.0403195, -0.012209851, -0.0056701917, 0.004439022, 0.04040919, 0.009890012, 0.0021274614, -0.07155622, -0.024791462, 0.00694736, 0.033032022, -0.039899956, -0.025944885, -0.07008719, 0.028542181, 0.0065877535, 0.043717735, -0.038778808, 0.023048334, 0.004202113, -0.014722903, -0.012013545, 0.003915224, -0.018650912, -0.0044795717, -0.0138293365, 0.02036009, -0.017259061, -0.037388165, 0.039883193, 0.017546108, -0.010414438, 0.025194656, 0.006931643, 0.03290356, -0.015049818, 0.06447767, 0.030196873, -0.0056884233, -0.0034937977, 0.0084109325, 0.028083663, -0.0036727625, 0.00036049698, 0.02772699, -0.024770087, 0.021720557, -0.031346526, 0.03932534, 0.027630173, 0.041137625, 0.0259847, 0.038067978, 0.018439673, -0.021903086, 0.053166416, -0.0013814247, -0.0039942684, 0.04543865, 0.0063480157, 0.027816262, -0.024648122, 0.0553207, 0.06188705, 0.027192192, 0.0033180614, 0.0014065721, -0.0049502454, -0.030398471, -0.044670817, 0.02370468, -0.021465732, -0.047631808, -0.016726306, 0.009134336, 0.029496102, 0.011027928, 0.011842281, 0.0019262829, 0.035079848, 0.06016512, -0.023920946, -0.01748659, 0.020865548, 0.041964132, -0.0023441473, 0.03538057, 0.011976819, -0.06372996, 0.007922341, 0.02107857, -0.022904996, -0.05191198, -0.020701254, -0.054239362, 0.02831543, 0.028578226, 0.033087976, -0.0041937307, 0.08025341, 0.050370034, 0.015312607, 0.022426778, 0.024585463, -0.029013272, -0.023342978, -0.039443955, -0.027509047, -0.004941025, -0.010278957, -0.0709422, 0.02426735, -0.016759312, 0.032382175, 0.032277394, -0.049597174, 0.040240705, -0.008580362, -0.02454701, -0.049337737, -0.055149697, 0.008085904, 0.06289506, -0.04028429, -0.031966824, -0.048173837, -0.048394926, 0.009783137, 0.028699325, -0.0042029517, 0.0013488381, 0.009091586, 0.036715053, -0.041462444, -0.022360453, 0.013193948, -0.015495554, -0.056212593, 0.012716569, -0.0030245911, -0.0072969072, 0.030500319, 0.045952495, 0.012178417, -0.0033085458, 0.020735623, 0.030106762, 0.0042301943, 0.031597156, 0.06817725, -0.015847826, 0.023793114, -0.021883177, 0.035106044, 0.012942474, -0.008652556, 0.0191526, 0.024280552, 0.009500229, 0.03901687, -0.041352633, -0.03950305, -0.004467417, 0.04284495, -0.011214018, 0.0037817343, 0.056347545, 0.030630665, -0.09060739, 0.027668733, 0.021247787, -0.021202106, 0.020895725, 0.051800914, -0.05980027, -0.01434758, -0.001033973, -0.029445179, -0.02801744, -0.024394555, 0.057990506, 0.0346097, -0.0064427373, -0.0495167, -0.030116402, -0.033979956, 0.017697828, 0.0086984495, -0.0026522013, 0.052608144, 0.033298373, -0.047344815, 0.020868065, -0.032350738, -7.879487e-05, 0.0193236, 0.00017084445, -0.07468747, -0.029931989, -0.007324307, 0.015482352, -0.025212679, 0.028662888, -0.027815005, 0.009726974, -0.0051715416, -0.027767645, -0.0018712732, -0.0012309601, 0.028516928, -0.036560398, 0.019912677, -0.028273525, 0.03627466, 0.022072619, -0.0079431925, 0.014731286, -0.0068056965, -0.046104636, -0.050943393, 0.06530082, 0.011706066, -0.0015949673, 0.041715175, 0.035741434, -0.0012871225, -0.022962833, 0.02562656, -0.0064016636, -0.01266795, 0.01889505, 0.06409082, 0.00028479312, -0.07219956, -0.023411505, 0.012016426, -0.001536919, -0.046351496, -0.017272001, -0.0139425, 0.0005255523, -0.019859659, 0.007447948, -0.043575235, 0.024175353, -0.021260362, -0.009459784, -0.04591226, 0.00056162296, -0.024784755, 0.015567434, 0.066914715, 0.02483044, -0.023045246, 0.007256043, -0.025399083, 0.009467119, -0.0038302476, 0.045634903, 0.003066189, -0.015671795, -0.023025703, -0.032657955, -0.00239528, -0.004062978, -0.045238312, -0.025967935, -0.035418916, -0.017532695, 0.0014784515, 0.02144352, -0.044910558, 0.0015679339, 0.038513504, 0.006707622, 0.014090869, -0.030188072, 0.037714656, -0.028138332, -0.009666411, 0.016530156, -0.0070852507, -0.034968995, -0.0038415638, -0.0032247347, 0.039794758, 0.016521223, 0.011758247, -0.017542964, -0.0071015963, -0.008433984, 0.0045172926, -0.018110244, 0.08584281, 0.028687615, 0.011859046, 0.06293614, -0.03096638, 0.04340759, -0.0057325354, -0.09405089, 0.09006756, -0.009997307, -0.0019583458, 0.00083048944, 0.030214477, -0.0013937888, 0.03895484, 0.030996112, 0.012689955, 0.006173242, -0.019241977, 0.03560941, 0.030384641, -0.06097046, -0.011807494, 0.052522644, -0.037538208, -0.046471365, -0.04594914, 0.0044384976, 0.016867548, 0.0031953831, -0.01298313, -0.024998927, -0.031288687, 0.044992704, -0.07596495, 0.032004964, 0.013849455, 0.025091344, 0.014735477, 0.021808572, -0.024161102, -0.037853595, -0.009287945, 0.074809015, 0.0037354212, 0.007515793, -0.008482602, -0.0079792375, -0.031374186, 0.042931464, -0.008733708, -0.00080890465, 0.04116078, -0.021554796, -0.035772868, -0.005249079, -0.018201614, 0.013172592, 0.0070496253, 0.019231813, 0.030067785, -0.04044146, -0.04926355, -0.037001733, 0.0027460847, -0.01117462, 0.017250206, -0.019029798, 0.002547002, 0.04899909, 0.013188918, 0.021868508, -0.01601296, 0.031841505, 0.03485436, -0.0048668403, 0.0060299025, -0.009510707, -0.026833843, 0.050751433, 0.028038397, -0.02202065, -0.08449492, -0.0047419416, 0.036238093, 0.019632494, 0.040765446, 0.013554733, 0.010302428, 0.028855266, -0.026808696, 0.007323312, 0.0037565872, -0.0010146934, 0.027482431, -0.07510576, -0.006090675, -0.0001711064, -0.05914644, -0.014142839, -0.03268562, -0.019072128, -0.021835398, -0.021383166, -0.039588865, 0.01326918, 0.038334537, 0.02482625, -0.017061602, -0.038917955, -0.043231558, 0.002673996, 0.014992818, 0.019528762, -0.016469592, 0.0015976916, -0.038420774, 0.008586702, -0.04813863, -0.06436786, -0.03313114, 0.009599561, -0.01546632, 0.011225334, 0.040700063, 0.037406184, 0.010184445, -0.016145822, -0.0687963, 0.016080648, -0.030123109, -0.0121501265, 0.013562566, 0.025849743, -0.06475361, -0.029829094, 0.00909431, -0.010742715, 0.0029981865, -0.036468502, 0.036321916, -0.024081051, 0.011832641, 0.02543649, -0.0008390814, -0.0021393604, -0.042879496, -0.008260991, 0.024651894, -0.083864555, 0.004144589, -0.022257034, -0.028182995, -0.044651538, -0.0026853122, 0.0059869424, -0.011774278, -0.017933795, 0.045928184, -0.025348894, -0.029845754, 0.018386027, -0.07468077, 0.0548035, -0.011873086, -0.05858733, 0.0037280866, -0.026757115, 0.051821034, 0.018168923, 0.06374672, -0.019330516, -0.013101742, -0.017508386, -0.020113226, 0.04121558, 0.03672071, 0.0025548604, 0.008214102, -0.011122439, 0.00835477, -0.005226551, -0.051354133, -0.0005234829, 0.022847157, -0.036321916, -0.01602721, 0.015605574, -0.010144053, -0.010998883, 0.05510611, 0.012070702, -0.0020905784, -0.018343486, 0.03576239, -0.008752097, -0.041591953, 0.0053641275, 0.0017268334, 0.019875584, -0.024512118, -0.032395795, -0.0052914103, 0.047498632, 0.028698932, 0.0212875, 0.041843425, 0.011926734, -0.028143177, -0.008668273, -0.015981106, 0.042735316, -0.09795375, -0.0067503722, 0.0556845, 0.038724743, -0.0015244762, -0.0020872257, -0.035919562, 0.02574664, -0.030291175, 0.071339525, -0.059074353, -0.017019691, -0.016240962, -0.02547589, -0.0016312214, 0.029258301, 0.03270804, -0.001010083, 0.027645629, -0.0028391297, 0.0323696, 0.008719681, -0.038874578, 0.06565352, -0.018296963, 0.017034989, 0.05129294, 0.004587967, 0.0015968534, -0.0021609908, -0.0004485649, 0.033093948, 0.032517236, -0.015396432, 0.017417017, 0.016615657, -0.03804618, -0.006138455, -0.011762229, 0.0044753803, 0.042849317, -0.013763116, 0.011457108, 0.01484361, -0.024894146, -0.028259903, -0.02378096, -0.020976197, 0.013365369, 0.033227123, -0.0064217816, -0.037837878, -0.018064141, 0.0054452275, 0.055793468, 0.0005769209, -0.030925725, 0.05077742, 0.00832166, 0.026319161, 0.03963486, -0.038522515, 0.039796017, 0.017621757, -0.03745606, -0.024266304, 0.0035130773, -0.030342728, -0.034436498, 0.0005490493, 0.01673804, 0.034977164, 0.07752744, 0.033007503, 0.01136574, -0.036290903, -0.027654901, -0.002110906, -0.05669877, -0.03930355, 0.013918111, -0.018469205, 0.011914789, -0.041068885, 0.019456044, -0.05635425, 0.06027304, 0.012245057, 0.011041968, 0.02230869, 0.00022548741, -0.017045256, 0.01263188, -0.050593846, 0.03267053, 0.031088809, 0.027425641, 0.018358154, -0.034652974, -0.013312979, -0.014416945, 0.015221658, 0.022455698, -0.011889642, -0.019156164, -0.008259001, -0.013113476, 0.027325053, 0.076489694, -0.052506715, 0.014068237, 0.009529234, -0.025360066, -0.015837768, 0.010391806, -0.03389604, 0.03597572, -0.024509603, -0.032502536, -0.0041270903, -0.014034706, 0.076870255, 0.0053496677, 0.00050713716, 0.015525941, 0.020170646, -0.003966855, 0.057372715, -0.02702622, 0.011857369, -0.0058568055, 0.01640379, 0.03377198, 0.004047876, -0.017571883, 0.03255401, 0.00419986, 0.060075216, -0.0039175297, -0.046254262, -0.037935533, 0.057054184, -0.022175778, -0.05266179, 0.002212124, 0.004146789, -0.007086508, -0.020426938, -0.020190764, -0.04093854, -0.010633534, -0.056028176, -0.017333612, 0.045703955, 0.01857987, -0.001464961, 0.04529028, 0.025915671, -0.02575188, 0.016957661, 0.041551925, 0.0076745357, 0.039599396, 0.032749325, 0.042304456, 0.03074278, 0.019331565, 0.021191627, 0.018732639, -0.018079543, 0.04371019, 0.056770023, 0.013796225, -0.02337462, -0.026010398, 0.020852137, 0.02163401, 0.0057838783, -0.011849406, -0.018091751, 0.05243379, 0.0710671, -0.03759395, 0.00634131, 0.008394168], [0.0016779033, -0.09467241, -0.027158193, -0.00866455, 0.032354396, 0.015297343, 0.039108045, -0.014100943, 0.03616609, 0.012566758, -0.01048039, 0.03627835, -0.045776613, -0.018942168, -0.021291483, 0.029393228, 0.02856233, -0.041712213, 0.015433872, 0.04478071, -0.018381387, -0.0027912646, -0.0265739, 0.014711279, -0.04141387, 0.011381229, 0.004099164, -0.0029945415, 0.033601616, 0.0123017905, -0.027890397, -0.05540256, -0.003002632, -0.00076658645, -0.006322821, -0.0152735775, 0.027474234, -0.031856857, -0.061298598, -0.041657094, -0.072884366, 0.012393315, -0.022078296, 0.04249043, -0.0019303245, 0.049340654, 0.023816768, 0.046165086, -0.008131075, -0.022589017, 0.035944104, 0.0053595314, -0.036650516, 0.033347774, -0.014673102, 0.024409343, 0.024559082, 0.017539458, -0.034090087, -0.031536233, -5.663435e-05, -0.015358022, -0.037463624, -0.018176088, 0.013448637, 0.03556334, 0.02356596, -0.006759715, -0.02554816, -0.05287626, 0.0025845112, 0.027862363, 0.0368988, -0.008112871, 0.026844682, 0.02317154, -0.057376668, 0.048450686, -0.013930028, -0.025400508, 0.00968656, 0.011321308, -0.030626038, -0.06890783, -0.04629454, -0.0076496834, -0.01645784, 0.0089952545, 0.056749646, 0.0042192596, -0.014923152, -0.0034809902, 0.04692055, 0.027807971, 0.0035674586, -0.0012376123, -0.010605289, 0.054947462, 0.00656023, 0.007618332, 0.007962183, -0.039454803, -0.027607225, -0.011885123, -0.013423353, -0.031684898, -0.016532173, -0.035582554, -0.036586296, 0.022044923, 0.01313917, 0.0069301235, 0.021757578, -0.031629276, 0.016675783, -0.011175425, 0.022797603, -0.0028204825, -0.04517348, 0.03076105, -0.028127553, -5.1577714e-05, 0.0074249315, 0.0041439156, -0.043107845, -0.0366222, 0.006272255, -0.008904741, -0.037232727, 0.023088612, 0.037035834, 0.00059263804, 0.054958582, 0.017226957, -0.021111466, 0.022154147, 0.0056741806, 0.029743148, -0.03430601, 0.041125644, -0.0492911, -0.032209776, 0.009009666, 0.037358448, 0.033750534, -0.015291275, 0.009420423, -0.029826077, -0.039255697, -0.007913505, -0.020442314, -0.017243138, 0.013590096, 0.030346153, -0.0036948859, -0.03966958, 0.0026537238, 0.028234249, -0.013190495, 0.0004282973, -0.040387373, -0.0091494825, 0.004361256, 0.0042962465, -0.023065351, -0.065896094, 0.003007183, -0.003437503, -0.0389791, 0.04154939, 0.044831146, 0.007946711, -0.02705229, 0.010879864, -0.052078824, -0.03218146, 0.009452122, 0.0048103803, 0.01714605, 0.014208017, -0.015236664, -0.02384913, -0.01949802, 0.003359631, -0.001567558, 0.027948845, -0.010996672, -0.012882293, 0.000478358, 0.046873014, 0.025549173, -0.028654959, 0.014337593, 0.025187118, -0.052051395, -0.0012277518, -0.019076675, -0.017940953, 0.01348694, 0.04062453, 0.005227553, -0.0113819875, 0.011445195, 0.0013996775, -0.041356795, -0.031901132, 0.04541923, 0.0064573274, 0.04101541, -0.02146796, 0.009408635, 0.03480181, 0.03130767, 0.081036046, 0.029392218, 0.007358152, 0.015328694, -0.03508656, 0.053913377, 0.06337182, 0.008692867, 0.02489775, 0.056011375, -0.05027513, -0.024831383, 0.012675982, -0.025008112, 0.009324963, 0.036126144, -0.0011628057, 0.061089505, -0.029985867, -0.017611135, -0.03752203, -0.016451268, -0.015299367, -0.047572352, 0.036509942, -0.06475127, 0.04036209, -0.029846303, 0.038788464, 0.05264972, -0.014183618, -0.039330535, -0.021193447, -0.0427913, 0.009394224, -0.019296367, 0.009105995, 0.057747066, -0.017212799, 0.0015023274, 0.018836295, -0.0139052505, 0.038213525, 0.010200251, 0.0013754057, -0.0031523088, 0.0384077, -0.00892699, -0.033954315, -0.016486665, -0.048251458, 0.06964205, 0.014308265, 0.062014617, -0.040748417, 0.018131716, -0.055301424, -0.022860399, -0.07034088, 0.026128665, 0.010033382, -0.02304108, 0.01877631, 0.0028323499, 0.041353192, 0.016555436, -0.004035514, -0.042066682, -0.0014896858, 0.0027974274, -0.007494508, 0.014417994, -0.0066606044, 0.0030109438, -0.039930254, -0.01575598, -0.033585437, -0.019855399, 0.013958345, 0.0029136352, 0.033478994, 0.0656999, -0.028568238, 0.0156594, -0.0030592664, -0.068082586, -0.017431244, 0.019921135, -0.018910564, -0.0117516285, -0.018631691, 0.0043892413, -0.03169299, -0.041448254, 0.0020590634, 0.00041148398, -0.0010017202, -0.022892416, -0.01046522, -0.06961576, -0.0013592244, -0.006270232, -0.027367035, 0.042696234, 0.075853124, -0.052067198, -0.026381623, -0.037032798, -0.017694822, 0.017838651, -0.03501874, 0.037220906, 0.036511965, -0.0014269835, 0.00478358, -0.07164549, -0.030449057, 0.06984773, 0.03871919, 0.0135669615, -0.011055835, 0.022127852, 0.054175816, -0.017970536, 0.01191243, 0.026970088, 0.021477567, 0.03616508, -0.057099566, -0.013047392, -0.02091527, 0.03918895, -0.042894963, 0.012040363, -0.05444786, 0.013541172, 0.00526295, 0.032500282, -0.01837987, 0.027581941, 0.00910195, -0.0041783005, -0.0012459557, 0.019523682, 0.013052702, -0.026526114, 0.003428401, -0.023515014, -0.00917704, 0.00062297785, 0.042080335, 0.03305019, -0.024976129, 0.044997003, 0.004776754, 0.051401746, -0.027427714, 0.060560454, -0.006745872, 0.016368339, 0.028104797, 0.0032386824, 0.04152309, -0.058883544, 0.008639646, 0.020911222, 0.0287791, 0.030480405, -0.0028700219, 0.049342178, 0.016005084, 0.03850226, 0.05855082, 0.034620784, 0.025359044, -0.038163465, 0.030553224, 0.026029048, 0.026366327, 0.02777106, 0.024793712, -0.012092445, -0.01256777, 0.035968885, 0.043099247, 0.037038866, 0.01843347, -0.008158381, 0.003773264, 0.025567377, -0.039777543, 0.0046921815, -0.02956111, -0.030417198, 0.014219015, 0.03174191, 0.008227657, 0.043441582, -0.003421069, -0.012752336, 0.055154275, -0.0055643255, -0.02726211, -0.00918943, 0.023637764, 0.026152935, 0.007436166, 0.024821268, 0.06163638, -0.027274245, 0.026016628, 0.028757356, -0.035636157, 0.0004186897, 0.0016646455, -0.02500729, 0.022373604, 0.02392397, 0.023621581, 0.0020985052, 0.09070396, 0.03814071, -0.03079948, 0.0026107426, -0.000727998, -0.076546386, 0.012250719, -0.032477777, -0.044725243, -0.0091231875, 0.012533637, -0.021653034, -0.0019903562, -0.04179292, 0.00041451794, 0.03459689, -0.029794728, 0.0050649825, -0.004573224, -0.042600155, -0.023418305, -0.04260117, 0.057856034, 0.0547816, -0.051373933, -0.011617121, -0.04769826, -0.06540863, -0.0073194844, 0.050666004, -0.01599339, -0.011403226, -0.026570614, 0.017682055, -0.06336777, 0.035095915, 0.029505739, 0.00920915, -0.033975303, -0.007001359, -0.04647405, -0.014878653, -0.020119734, -0.005201258, 0.04811771, 0.024480958, 0.04344664, 0.021744052, 0.024987886, 0.015625756, -0.016641272, 0.018336384, 0.023211993, -0.009944386, -0.0013294951, -0.025283193, 0.0041569364, -0.0017334156, -0.028204918, 0.016751632, 0.089739405, -0.024340382, -0.01478814, 0.009174765, 0.005922335, -0.041581243, -0.009881178, 0.035484962, 0.05065791, -0.032270458, 0.007890379, -0.0005668492, -0.045751456, 0.019990915, 0.018178869, -0.004358001, -0.00145854, -0.0020080544, -0.031657845, 0.0076228827, -0.035827298, 0.064101994, 0.021687165, 0.02022251, -0.054448873, 0.013448384, -0.013190889, -0.0047867405, -0.058201406, 0.01030644, 0.029366177, 0.0057251896, -0.03177288, 0.023734346, -0.06454901, 0.04874397, -0.008214131, -0.041767836, -0.049251027, -0.027192581, 0.033228185, 0.038764194, 0.0030784816, 0.019005883, 0.04657114, -0.0028752047, -0.008163943, -0.020267008, 0.020625018, -0.018616522, 0.011093759, -0.033008724, -0.014439106, -0.014654645, 0.020127444, 0.021872997, -0.017392814, -0.05060684, -0.0068850564, -0.06994747, -0.05335108, 0.041222733, -0.019577093, -0.010196206, 0.03952572, 0.026068805, 0.0024979794, -0.07138154, 0.010759516, 0.04272683, 0.021537237, 0.0050410894, 0.010678294, 0.0028150307, -0.06678404, -0.07631479, 0.05294756, 0.007953777, -0.013287836, -0.081120625, -0.02843373, 0.026902834, -0.031955935, 0.033227425, -0.009523674, -0.010029337, 0.00025991123, 0.005739285, -0.0486125, -0.037654765, -0.022798361, 0.032599106, 0.05815893, -0.03131415, 0.00610488, -0.02235908, -0.0022186001, 0.06855993, -0.016521556, 0.035211146, 0.030170942, -0.015136795, -0.058873434, -0.010006456, 0.012286621, -0.025561057, -0.038501248, -0.02283578, -0.04827548, 0.025315555, -0.0063299006, 0.016567066, -0.016949853, 0.021240285, 0.023397574, 0.018270142, 0.0077424725, 0.031211723, 0.04908985, -0.03537163, -0.031272784, -0.022011422, -0.010212387, -0.041836604, 0.009667029, -0.047894455, 0.005729425, 0.017118745, -0.0012277518, 0.013069136, -0.0038955712, -0.013957334, 0.0024666283, 0.012429218, 0.074393265, 0.05383702, -0.043021884, 0.04109265, 0.0031758219, 0.0695126, -0.0036468478, -0.066539295, 0.08545719, -0.012654744, -0.004342641, -0.014880677, -0.03785349, 0.013116226, 0.04096181, 0.020438934, -0.035377003, 0.028374411, 0.0037391316, -0.014965011, -0.025349943, -0.03208469, 0.0065968907, 0.025800994, 0.009979782, 0.01873788, -0.032392323, 0.03572414, -0.033529557, -0.00984123, -0.040031385, -0.007190287, -0.01689524, 0.0055695083, -0.030319605, 0.037925802, 0.024767416, 0.042572852, 0.016294513, -0.009793698, 0.0076519586, -0.008670113, -0.019953875, 0.07707531, -0.004508499, 0.027512033, -0.038385704, -0.023852164, -0.012420243, -0.011721289, -0.022769539, 0.02039848, 0.020394435, -0.044694617, -0.03237146, 0.02248831, -0.013644897, 0.04851567, 0.035035048, 0.027383469, 0.03206263, -0.040578514, -0.044845305, -0.025642721, 0.03425797, -0.02072615, -0.020325191, -0.013988559, 0.010042485, 0.07805427, 0.03731319, 0.047245186, 0.02712988, 0.03906759, 0.062063158, -0.0065038484, 0.0012277518, 0.0020974937, -0.023510335, 0.013395921, 0.010213652, -0.031482633, -0.08103162, 0.012527079, 0.0037737694, -0.018980093, 0.038426913, 0.034376044, -0.028595291, 0.017820353, -0.006680831, -0.008534595, 0.027153138, -0.010762549, -0.009774483, -0.07088193, -0.029061515, 0.0027224943, -0.03226439, -0.076254115, -0.051133744, -0.018806651, -0.00015321616, -0.017741343, -0.025993146, -0.020908188, 0.01883699, 0.050186127, 0.0014176287, -0.052222565, -0.01832728, 0.057184514, 0.031695012, 0.010498972, -0.029730255, -0.0025515798, -0.011582073, 0.022791915, -0.052589044, -0.016920524, -0.0150283305, 0.00019923157, 0.042985473, -0.024789665, 0.050802533, 0.025817174, -0.024921138, -0.016324852, -0.007931338, 0.02317647, -0.01822994, 0.015323006, 0.014169587, 0.03304703, -0.047864117, -0.007483825, -0.00063048187, -0.011040413, 0.009867271, -0.020177126, 0.011187307, 0.023627901, -0.017097507, -0.003384914, -0.019447833, 0.020468263, -0.0091828555, -0.021634322, 1.4285005e-05, -0.04343046, -0.026622696, 0.004567156, -0.048905786, -0.053199884, -0.02448437, 0.01811743, -0.0227483, -0.019043807, 0.08276706, -0.026208559, 0.018739397, -0.012246673, -0.0415413, 0.0016555435, -0.0017531367, -0.047433294, 0.025572812, -0.054812953, 0.00703783, 0.030358544, 0.03649806, -0.019248601, -0.04260825, -0.0045341616, -0.0015695806, 0.022401921, 0.013775042, 0.012753854, -0.006125612, -0.020187745, -0.016545953, -0.04557447, -0.066173196, -0.017849935, -0.012894935, -0.0063293944, 0.029189067, -0.005304161, 0.041003272, 0.027786987, 0.018651335, 0.013535989, -0.0031234857, -0.00787521, 0.0030304436, 0.016399438, 0.0008768211, -0.034401324, 0.035357535, -0.029909005, -0.025236672, -0.0023199858, -0.00016585774, 0.04454431, 0.036795642, 0.028899986, 0.019747185, 0.012714412, 0.00022350343, -0.028187726, 0.013678839, 0.021410821, -0.092487946, 6.5736305e-05, 0.06984634, 0.03951055, 0.018346496, 0.012158688, -0.010746368, 0.028511351, -0.029769445, 0.0022326957, -0.057220925, -0.042907603, -0.017576877, -0.009957532, 0.0021748603, 0.009474245, 0.0067111836, -0.016322829, 0.03342774, 0.050922375, 0.012755877, 0.027451852, -0.007542482, 0.08116411, -0.039959837, -0.059433706, 0.066323884, -0.006124095, -0.00024575263, 0.017296739, -0.037730616, 0.019307258, 0.016472507, -0.019281343, 0.033250432, 0.03329291, -0.036564555, 0.007077777, -0.044441786, 0.028176604, -0.01285524, -0.0012494954, 0.0664125, 0.011184779, -0.035809092, -0.06752433, -0.0024797756, -0.018157378, 0.009944891, 0.019188933, 0.01872979, 0.039292105, -0.015362068, -0.0026041688, -0.011362267, -0.010281663, -0.040813144, 0.047913168, -0.005193168, 0.053960405, 0.036372527, -0.015963808, 0.04762911, 0.05395636, -0.0053211013, -0.028897678, -0.020801684, -0.027081335, -0.038539678, 0.03724113, 0.0136954, 0.03469663, 0.031498816, 0.012127084, -9.721388e-05, -0.08642402, 0.017311402, -0.035674706, -0.0044882726, -0.018935626, -0.042407, -0.0118689425, 0.01987613, 0.010534496, -0.030521872, -0.0366581, 0.07381074, -0.005751168, -0.011620156, 0.012509113, 0.021271763, -0.026921038, -0.03160627, -0.011238379, 0.041442696, 0.012028227, 0.044866543, -0.022145042, -0.0031990826, -0.052516226, -0.01773458, 0.013889575, 0.030169802, -0.013740909, 0.026234854, -0.009476141, 0.01781024, 0.020780763, 0.022592556, -0.037257694, 0.019494353, -0.0050136573, -0.0400506, -0.027150989, 0.03985061, -0.024163527, 0.028744398, 0.0017789254, 0.0070294864, 0.025840435, -0.06525542, 0.03674558, 0.0003999801, -0.0077781216, 0.017475743, 0.008521447, 0.002214555, -0.0028878462, -0.014112572, -0.02923344, -0.00028013779, -0.06278525, -0.01622473, -0.020212395, -0.014335824, 0.016377695, -0.017301796, 0.063044146, -0.021747591, -0.007902009, -0.04567965, 0.05750005, -0.016773757, 0.0039350763, -0.032625433, 0.0031520557, -0.041819163, 0.0067930887, -0.023993751, -0.021941768, -0.008837488, -0.07076462, -0.0004055424, 0.023709835, 0.0055916314, -0.016590325, 0.049773887, 0.015020239, -0.033167504, -0.008616513, 0.01220976, 0.010915133, 0.025231615, 0.008804619, 0.02141006, 0.0005026299, 0.027481316, -0.014491821, 0.013592751, -0.029977776, 0.016261645, 0.054468088, 0.0065566907, 0.011216131, 0.024216242, 0.008260272, 0.023932058, -0.0077255326, -0.036237895, -0.048462827, 0.028767724, 0.027339729, -0.049669337, 0.007546022, 0.024269843], [-0.03953594, -0.08909121, -0.03593784, -0.02589849, -0.015515236, 0.019378772, 0.022034163, -0.026197894, 0.04482276, 0.019702666, -0.018887931, 0.014405049, -0.073792696, -0.02512457, -0.023243295, 0.050954863, -0.016027145, -0.017079532, 0.02865737, 0.03163086, -0.023170158, -0.020579677, -0.0052614827, 0.025427397, -0.024664013, 0.074018106, -0.017473074, -0.008646084, 0.021801382, -0.012296325, -0.01755892, -0.055265527, 0.013352794, -0.015877575, 0.012188888, 0.014269172, 0.007613842, -0.009832571, -0.016860312, -0.05267702, -0.062195767, 0.014143565, -0.025725055, 0.04379361, 0.014165948, 0.033876516, 0.022967132, 0.021171043, -0.008626072, -0.02838456, 0.036151662, 0.005596229, -0.02637801, 0.01380914, -0.039928824, 0.03288851, 0.009363914, 0.029226683, 0.034820277, -0.010216041, 0.014768441, 0.008186052, -0.056533184, 0.020600611, 0.013112639, 0.02591666, 0.01937298, 0.010764814, 0.015435184, -0.02715219, 0.002941891, 0.01692272, 0.000456741, -0.034883477, 0.05727471, 0.0074363593, -0.07088767, 0.00071519654, -0.011411052, -0.0401437, -0.021321073, 0.0075744246, 0.010878045, -0.05712093, -0.043733377, -0.0013840476, -0.0052812896, -0.00022804132, 0.051232934, 0.019839793, -0.055671573, -0.0064847604, 0.022748308, -0.016874004, 0.008795992, 0.003219438, 0.0006867572, 0.06389742, 0.02741973, 0.04250943, 0.03901666, -0.04160569, -0.0026172088, -0.02971173, -0.031043114, 0.005452979, 0.020004965, -0.0349869, -0.019203397, 0.009371287, 0.005800571, 0.0052686497, 0.00766756, -0.066288926, 0.04637086, -0.003927788, 0.019849602, -0.01607349, -0.03630781, -0.010697929, -0.044440143, 0.0074542654, 0.01520214, 0.0096715465, -0.015043091, 0.008464389, 0.0049663507, 0.012299748, -0.05410215, -0.0030572284, 0.056339376, 0.006235258, 0.053592347, -0.014830059, -0.04688698, 0.008462282, 4.739889e-05, 0.055509366, -0.015129725, 0.059204374, -0.013280905, -0.0010443556, 0.03234711, 0.009621317, 0.038394164, -0.008617776, 0.012608104, -0.03622118, -0.022339625, 0.0058533675, 0.007748138, -0.01968423, 0.033427805, 0.031450216, 0.020491067, -0.055033274, 0.009167077, 0.022235347, -0.024523132, 0.017373273, -0.01419228, 0.015070741, 0.02926618, 0.006640584, -0.005452979, -0.04958556, 0.015945513, 0.0021211002, -0.019020762, 0.05652897, 0.06933299, 0.005344192, -0.0013279589, 0.030075649, -0.06670577, -0.0069384077, 0.0045360737, -0.044487543, 0.014911954, 0.026501248, 0.011292522, 0.0034148267, 0.0052876095, 0.0023783708, -0.033638466, 0.02106196, -0.01852849, -0.005016909, -0.028486732, 0.015572247, 0.02324231, -0.030328969, 0.022827832, 0.008487824, -0.02896388, 0.020459468, -0.030223638, 0.004361751, 0.022547651, 0.028589956, 0.00924331, 0.0055404035, 0.029000746, -0.025276247, -0.024143942, -0.050380807, 0.022567665, -0.02324231, 0.036694903, -0.021415083, 0.032200173, 0.052336797, 0.041057445, 0.053700835, 0.018070564, 0.036147445, 0.015610034, -0.05229888, 0.026093617, 0.060392503, -0.04553664, 0.0064130696, 0.025158277, -0.03186364, -0.020572435, -3.791911e-05, -0.015355397, 0.011013396, 0.022850476, 0.0041045053, 0.064349785, -0.0011254603, -0.03269549, -0.04444541, -0.0010575219, 0.011217211, -0.03585423, 0.024511546, -0.016481647, 0.036920577, -0.024425175, 0.024928918, 0.029944513, -0.031049432, -0.022892347, -0.0020202461, -0.037287127, 0.027469236, -0.026204212, 0.012214628, 0.05847917, -0.02572285, -0.010217095, -0.015264022, -0.009234884, -0.0032522222, -0.0077850046, 0.021390263, -0.014006372, 0.038540814, -0.010807342, -0.031141203, -0.01393106, -0.040992666, 0.058155276, 0.007813213, 0.02310854, -0.015973426, 0.041062187, -0.018748894, -0.030601777, -0.05808997, 0.024582118, 0.018544551, -0.016996583, 0.025846086, 0.018180635, 0.01584479, 0.05600653, 0.011293312, -0.061534293, -0.025497377, -0.0021577028, 0.036776535, 0.025070854, 0.01654353, 0.0055696326, -0.046054866, 0.0027162198, -0.047457874, -0.020346763, -0.017080717, 0.024644788, 0.03772504, 0.032889564, -0.025877688, 0.050805293, -0.028831163, -0.045058176, -0.027779436, 0.017753255, -0.0058691674, -0.009844108, 0.00053935987, 0.01230225, -0.020428922, -0.07390013, 0.022005724, 0.00026596044, -0.015196348, -0.0342586, -0.0055717393, -0.072964795, 0.004841665, 0.012954117, -0.027423155, 0.018386029, 0.082048535, -0.024763286, -0.015873361, -0.036130067, -0.036495037, -0.0015462572, -0.062229473, 0.022524215, 0.078357734, 0.037687384, -0.011868682, -0.051746946, -0.03413775, 0.045578774, 0.025544183, 3.4298362e-05, 0.011618258, 0.02844144, 0.0050737876, -0.011789683, 0.022613483, 0.016031358, 0.041020054, 0.00062434876, -0.053992603, -0.03969815, -0.01535724, 0.038513705, -0.08190739, -0.021390263, -0.058167916, -0.009042919, 0.011127021, 0.030956743, -0.03364268, 0.010997069, 0.03647608, -0.004760955, -0.015830703, 0.011051315, 0.005736319, -0.010111105, -0.0010016966, 0.0012702902, -0.0020602718, -0.045736246, 0.04102776, 0.015702857, -0.027902145, 0.070298605, 0.007841356, 0.05616874, -0.0126249585, 0.06674606, 0.017332194, -0.033899687, 0.0018422368, -0.0015820696, 0.020287778, -0.06485011, 0.012321605, 0.041682582, 0.0016747608, 0.02112832, -0.012559652, 0.03599577, 0.024403187, 0.029094491, 0.02803065, 0.031943165, 0.031124217, -0.02485861, 0.04189759, 0.006179235, 0.01371421, 0.048216257, 0.014566996, 0.008067291, -0.0088667525, 0.015143419, 0.028525705, 0.02771887, -0.0072952155, -0.011062901, 0.021574922, 0.006617938, -0.008197111, -0.009240545, -0.061096113, -0.036932163, 0.03507307, 0.0006954471, 0.031670883, 0.033915486, -0.014390303, -0.01660067, 0.02274936, 0.023332631, -0.013537123, -0.033051774, 0.050242823, 0.010850659, 0.009471088, 0.028158627, 0.039890904, -0.04429637, 0.04913685, 0.025324699, -0.014510644, -0.014748428, -0.016217217, -0.052036606, 0.053702414, -0.0032610437, 0.019617872, -0.015378306, 0.08690639, 0.05073156, -0.042642146, 0.008049385, -0.012508303, -0.063544005, -0.03044457, -0.042705346, -0.0302742, -0.014990163, 0.01196348, -0.0340877, 0.01770138, -0.03593402, 0.026831985, 0.040027305, -0.046488833, 0.010975526, -0.020166121, -0.019210244, -0.044440143, -0.03130223, 0.051991314, 0.06290359, -0.06623205, -0.03912989, -0.048619263, -0.05656689, -0.0037834847, 0.028938076, -0.010197607, 0.012635491, 0.010700167, 0.023951186, -0.047719624, -0.0003506201, 0.007973546, 0.02615576, -0.02472642, -0.013294862, -0.05047139, -0.025404751, -0.009467138, 0.037853807, 0.009322835, -0.0016426347, 0.027504522, 0.024227154, 0.012327924, 0.014002685, 0.034017656, 0.047138724, 0.01210673, -0.021001395, -0.013048388, 0.029541094, 8.847792e-05, 0.019774817, 0.0325978, 0.022654563, 0.064904876, -0.027571406, -0.003703433, 0.006363564, 0.030126734, -0.054586668, 0.00040947372, 0.06960685, 0.023335, -0.07302378, 0.020392055, 0.009267106, -0.072585605, 0.022500781, 0.053681877, -0.026570369, 0.0134704355, -0.039185718, -0.038533192, -0.009374447, -0.04886694, 0.060969718, 0.039267346, -0.024660062, -0.04404726, -0.014366077, -0.024623789, -0.003047222, -0.017026339, -0.0070392615, 0.04931591, 0.023671238, -0.02640118, 0.03197845, -0.056401517, 0.016053477, -0.00780291, -0.014110123, -0.05707037, -0.058816753, 0.00044344296, 0.0020139262, -0.0060209758, 0.048296306, 0.016692836, 0.015872044, -0.0008068345, -0.028876457, -0.012547671, 0.02435829, -0.0047240895, -0.015771981, -0.0023565148, -0.03283374, 0.03425781, 0.0022140548, -0.039005075, -0.009452391, -0.007128793, -0.051494155, -0.055888824, 0.040232707, -0.0024160268, -0.021696579, 0.036498196, 0.043543782, 0.02736496, -0.048009973, -0.00725045, 0.020443669, 0.015946565, 0.030076176, 0.02534682, -0.011638533, -0.07178719, -0.06372517, 0.051380396, -0.03238292, -0.030107247, -0.04256631, -0.03833201, 0.0050632544, -0.0079040285, -0.0031578194, -0.04342897, 0.016355777, -0.03132395, 0.010926431, -0.011321751, -0.0060912836, -0.01330895, 0.019500956, 0.02267464, 0.0071751387, 0.007179747, 0.0076759867, -0.009699657, 0.03717758, -0.030663922, 0.052397896, 0.026602363, -0.012130429, -0.01234899, -0.05268485, -0.003932001, -0.017670305, -0.026478073, -0.0023472984, -0.054346513, -0.010652374, -0.012621798, 0.015696406, -0.016288891, -0.026985768, 0.028553091, 0.018855805, 0.0047075, 0.025101924, 0.0054498194, -0.039933566, -0.016265983, 0.007496924, 0.015462571, -0.027348107, 0.012110943, -0.023879033, -0.009617761, 0.035268985, -0.01789782, -0.024149735, -0.0012511333, 0.0022577671, 0.010706883, 0.019466197, 0.07052112, 0.02044156, -0.012960963, 0.042559993, -0.02123523, 0.090660386, -0.026366422, -0.060205013, 0.0807635, 0.022278268, -0.018761534, -0.019241843, -0.0062371674, 0.021185987, 0.031008353, -0.0074195066, -0.0021940419, 0.014150807, 0.005656531, 2.3896939e-05, -0.0008882025, -0.023641514, 0.018986942, 0.0529256, 0.00284288, -0.004498155, -0.057864565, 0.025451098, -0.021437332, -0.014328685, -0.012548329, -0.02424295, -0.025802374, 0.036473446, -0.050996993, 0.042557884, 0.04485831, 0.01551392, -0.009772598, 0.02936888, 0.012224174, -0.03701748, -0.01210673, 0.040498927, 0.009742578, 0.024015965, -0.021947792, 6.8465066e-05, -0.005919595, -0.020603508, -0.011639324, 0.008025949, 0.024604632, -0.05818477, -0.019469358, 0.01582254, -0.012947797, 0.05700085, 0.027906228, 0.0072256974, 0.023266533, -0.025011867, -0.04928642, -0.017846208, 0.0022656668, -0.032842163, 0.011058687, -0.010865405, -0.013842056, 0.02477382, 0.028706873, 0.054272648, 0.039893012, 0.027516637, 0.06224521, 0.028901737, 0.011923783, -0.0031526845, -0.03716468, 0.02145998, -0.002780735, -0.022421781, -0.09184009, -0.015229527, 0.022123696, -0.0037118597, 0.057283137, 0.03582092, 0.010533086, 0.023145406, -0.037382975, 0.020607984, 0.015614247, 0.010004326, 0.0044107297, -0.061412107, -0.013273269, 0.03884826, -0.014997008, -0.04912842, -0.045928467, -0.03138965, -0.009282414, -0.030228114, -0.047095537, -0.0015778564, 0.027657779, 0.034769718, -0.011310428, -0.036198005, -0.04296025, 0.040171087, 0.027082672, 0.027834734, -0.03963495, 0.00669483, -0.005428753, 0.004273273, -0.040849417, -0.038922913, -0.017316394, 0.016922457, 0.005245477, 0.0127503015, 0.049902607, 0.0085960515, -0.004203755, -0.029269341, -0.062322166, 0.04371863, -0.0430877, 0.0076154214, 0.007430994, 0.011303582, -0.08267209, -0.0031351733, 0.013405459, 0.001539674, 0.007884015, -0.020285277, 0.031068392, 0.015551049, 0.015160271, 0.020073958, 0.009467138, -0.00848032, -0.03633704, 0.0048978855, -0.016405283, -0.063447095, -0.02531838, -0.0055356636, -0.075808726, -0.068613574, -0.0057903007, 0.0018490833, -0.00841699, -0.05305726, 0.062195767, -0.03962416, -0.010883312, 0.016686121, -0.06540152, 0.009905841, -0.021623373, -0.061970364, 0.03279582, -0.034211464, 0.030846145, 0.008497568, 0.059655186, -0.039703418, -0.039683405, 0.013988992, 0.001879366, 0.011145058, 0.028550457, -0.012559389, 0.007180339, 0.0038999412, 0.015009649, -0.037600223, -0.07995877, -0.030295264, 0.017461209, -0.013169255, 0.013691169, 0.025355246, -0.014388986, 0.0041337097, 0.009028962, 0.021890914, 0.005917751, 0.008966685, 0.042600017, 0.008182101, -0.006432819, -0.028852232, 0.017045166, 0.0071393256, -0.022624018, -0.0067345924, -0.0057157795, 0.03356684, 0.016964588, 0.022790043, 0.036209065, 0.022233766, -0.018844746, -0.010553626, 0.0079175895, 0.03903141, -0.091722116, -0.01598475, 0.055749517, 0.013205857, -0.0046387715, -0.0023509848, -0.044828814, 0.015924973, -0.050107207, -0.008853915, -0.068608314, -0.043246746, -0.012193891, -0.012231019, 0.01140075, 0.020385735, 0.011721219, 0.000326789, 0.020454992, 0.043670174, 0.03132329, 0.02313013, -0.01695827, 0.051195014, -0.012559652, -0.007850836, 0.022079457, -0.0077634114, -0.0038856557, 0.03758416, -0.016850831, 0.014099228, 0.032024797, -0.00012587039, 0.0057204533, 0.0353048, -0.06663652, -0.0022561871, -0.036185365, 0.00970466, 0.008196321, -0.015271923, 0.039566487, 0.028236572, -0.015696999, -0.027459757, -0.020314636, -0.02725752, -0.013145818, 0.017516524, -0.0015628467, -0.01087449, -0.012066704, 0.008356688, 0.026551805, -0.0431875, -0.057399, 0.06368515, -0.007323655, 0.037186008, 0.042545244, -0.03399659, 0.06870101, 0.020916209, -0.015801737, -0.03504147, -0.0082566235, -0.0394106, -0.061259903, 0.044508614, -0.003981507, 0.039735015, 0.06867573, 0.029324112, 0.009025275, -0.07698422, -0.0013115668, -0.021854047, -0.03158662, -0.038961887, -0.015518661, -0.0009911634, -0.0014337177, -0.005565881, -0.011007075, -0.048410065, 0.06857461, 0.015890215, -0.01988933, 0.01719105, -0.012699742, -0.01384074, 0.012901978, -0.019934788, 0.06665126, 0.0371523, 0.023683382, -0.009796824, 0.01861091, -0.055416677, -0.01415265, -0.0046714237, 0.04210812, -0.007533264, 0.022380702, -0.005376087, 0.013010468, 0.0006957433, 0.049438097, -0.041442428, 0.04531228, 0.0029071318, -0.024775004, -0.0046387715, 0.036757313, -0.044569705, 0.04656467, -0.0012228914, -0.011747024, 0.028961774, -0.045802075, 0.06269714, 0.018873448, 0.01753917, 0.025910338, -0.008682423, 0.017827248, 0.017507045, -0.018734148, -0.0082837455, 0.009940074, -0.023840588, -0.0019970075, 0.0039836136, -0.015911281, 0.021177825, 0.015942352, 0.05512807, 0.006108664, -0.04661101, -0.049009662, 0.041184366, -0.0058852304, -0.033912323, -0.040931575, -7.478491e-05, -0.030330021, -0.0244336, 0.000752589, -0.0143770045, 0.0075848754, -0.06391898, -0.004977805, 0.011832869, 0.022935795, 0.0030145694, 0.04093368, -0.0017868723, -0.047146097, -0.02115149, 0.017932579, 0.031164242, 0.053828284, 0.016358936, 0.012861689, 0.011574019, 0.014860079, 0.00039670235, 0.012007718, -0.024225837, 0.021331081, 0.06373202, 0.012583088, 0.010621827, 0.015652167, 0.007865319, -0.009246997, -0.02517829, -0.0008068345, -0.021000868, 0.049636118, 0.021661293, -0.0632238, -0.0024684947, 0.0007731286], [-0.022058861, -0.06255632, -0.054009654, -0.01157619, -0.01921185, 0.05056579, 0.0201675, -0.022758963, 0.023435697, 0.007043769, 0.0042678863, -0.008841111, -0.060456995, -0.018557133, 0.008547395, 0.045927975, -0.0022367013, -0.04838047, 0.04273171, 0.052670866, -0.019645637, -0.0048878603, 0.0043266052, 0.03341889, -0.01783636, 0.046025842, 0.0031250084, 0.0040839002, 0.029932946, -0.014239336, -0.0077156657, -0.019839164, 0.012736132, -0.0069634514, 0.011247119, -0.009927412, 0.0032155947, -0.032049026, -0.030113017, -0.0341497, -0.046740256, 0.03516339, -0.037732776, 0.015149725, 0.028326003, 0.044072457, 0.004437682, 0.029931966, -0.0068566566, -0.036100388, 0.016153818, -0.014376347, -0.047073975, 0.0044367034, -0.016803395, 0.06109507, 0.042847194, 0.031430278, 0.03244318, 0.011714913, 0.035763733, 0.02525941, -0.0566892, 0.02291212, 0.0017227121, 0.015254685, 0.015052593, 0.020896103, -0.0017390584, -0.02612111, -0.012113528, 0.024532763, 0.009424875, -0.014568407, 0.084750965, -0.0041005374, -0.061204683, 0.008000452, -0.0032603675, -0.034147006, -0.00066401303, 0.01189841, -0.0017752685, -0.04383122, -0.059603613, 0.017506067, 0.01763965, 0.015418792, 0.05509009, 0.002005251, -0.04592602, -0.012005571, 0.060558774, -0.04257497, 0.006985593, -0.01650711, 0.0037188646, 0.058875497, 0.011415935, 0.043812137, 0.03401342, -0.034364756, -0.016207399, 0.019360606, -0.020642145, 0.020085782, 0.012873082, -0.008925764, 0.01713369, -0.014168874, 0.0014512135, 0.018088361, 0.02050342, -0.057678, 0.01667715, -0.014842184, 0.008734439, -0.042166054, -0.03180461, -0.00047904847, -0.005188795, 0.0019257356, 0.03242067, 0.022207983, -0.035268538, -0.015756242, 0.031287394, -0.027265882, -0.03177525, 0.005386971, 0.044475663, -0.005242131, 0.024456428, -0.029837528, -0.068723634, 0.033444334, -0.01353471, 0.04889744, -0.04947876, 0.022397352, -0.0139286155, 0.009306948, 0.025039457, 0.01699521, 0.023221618, -0.006898004, 0.020272216, -0.030039618, 0.0132151805, -0.0029755807, -0.006956356, -0.0085651325, 0.02145589, 0.010882082, 0.028601004, -0.041438915, 0.032584105, 0.022688987, -0.04736659, 0.027529385, -0.02704104, 0.04597495, 0.00073741167, 0.01311487, -0.0069669993, -0.07016225, 0.007106946, 0.007880079, 0.017540319, 0.023240946, 0.08057801, 0.009879457, 0.019105177, 0.04142228, -0.037777733, -0.0011970096, 0.043611515, -0.045028843, 0.0035047852, 0.0064705797, -0.011688978, 0.021633517, 0.022894016, -0.024035608, -0.037371654, 0.006483792, -0.020616699, -0.027972223, -0.0063064117, 0.024923733, 0.02560732, -0.025701268, 0.015110333, 0.021536628, -0.023424933, 0.033943936, -0.030258834, 0.021387875, 0.047253065, 0.040668722, 0.003956187, 0.019559516, 0.05109133, -0.03861894, -0.030729322, -0.03606785, 0.034306526, -0.021784717, 0.04181178, -0.004659713, 0.02636675, 0.05401969, 0.021185173, 0.059751388, 0.0108782295, 0.010076165, -0.0129432995, -0.05824525, 0.008642935, 0.058296137, -0.014672388, 0.024085522, 0.01586952, -0.0200048, -0.045575663, 0.024117814, 0.013329391, 0.009159172, -0.016138649, -0.01936721, 0.06545495, -0.009608249, -0.0020277598, -0.016703084, -0.007114041, 0.01707546, -0.03618553, 0.018956913, -0.022630269, -0.0034706548, -0.054821935, 0.013557219, 0.032260295, -0.008823849, -0.04318678, -0.020570213, -0.022935608, -0.03657014, -0.014950814, -0.017159624, 0.050845686, -0.03032049, -0.03426053, -0.023097085, 0.018419879, -0.0072243838, -0.012005081, 0.020558227, -0.010315934, 0.04498358, 0.031786505, -0.04539706, 0.025616981, -0.048842147, 0.029151127, 0.025871798, -0.0012326079, -0.010485974, 0.022966435, -0.013480021, -0.026216894, -0.04858403, 0.016018521, 0.0025904828, -0.0017625461, 0.030297002, 0.023046747, 0.007689242, 0.056176387, -0.0007765576, -0.03964114, 0.021659449, 0.025218919, -0.00049201556, 0.033390023, -0.003419398, 0.017649926, -0.033763375, -0.012655027, -0.03928491, 0.010198986, -0.023085402, 0.036113113, 0.017206049, 0.02524693, -0.005837639, 0.05914854, -0.023474352, -0.03530328, -0.05851242, 0.002829273, -0.0007486662, 0.009880436, 0.032456513, 0.014624924, -0.06448119, -0.0588892, 0.058538843, 0.0046823444, 0.010585429, -0.020722883, -0.011111453, -0.06248769, 0.018884981, 0.028737035, -0.032192644, 0.017063716, 0.06859544, -0.013894853, -0.0065686894, 0.0026484677, -0.0069978265, -0.011804459, -0.075927466, 0.02032555, 0.07263921, 0.021446357, 0.013188268, -0.03982023, -0.050375935, 0.06992248, 0.032742217, 0.0035182417, -0.01457379, 0.0037384375, 0.009118558, -0.011333729, 0.030130632, 0.02973061, 0.030930677, -0.022933649, -0.08408549, -0.020886317, -0.022727424, 0.019426174, -0.064148456, -0.034133304, -0.04076267, 0.010146629, 0.006477185, 0.024442727, -0.044993855, -0.0042581, 0.013789158, 0.025250113, 0.008881725, 0.0098752985, 0.017218344, -0.00433052, -0.027792152, -0.017534446, -0.024298863, -0.01703191, 0.023684274, 0.0014723768, -0.026430476, 0.06776359, 0.009515033, 0.037349142, -0.03632352, 0.04425782, -0.0029339883, -0.021814076, 0.018740142, -0.0019396815, 0.030163905, -0.055751648, -0.012358863, 0.048470505, -0.019577865, 0.013760777, -0.0049458453, 0.036392026, -0.005291675, 0.025411343, 0.033262797, 0.008128655, 0.034792915, -0.01608256, 0.049502004, 0.01140251, 0.045243412, 0.034154836, -0.025917916, 0.010252812, 0.007618779, 0.02234059, 0.04953332, 0.008284994, -0.0008670826, -0.010401078, 9.517358e-05, 0.0145485895, 0.006790353, -0.014348456, -0.04348527, -0.03357939, 0.011276723, -0.022442369, 0.038179036, 0.070523374, -0.032342378, -0.011279658, 0.029832145, 0.052056275, -0.0033599453, -0.040128503, 0.026284175, -0.01890064, 0.011557595, 0.01010161, 0.05809454, -0.03445308, 0.03282387, 0.0328777, 0.0029819424, -0.0028522713, -0.023579804, -0.06365522, 0.055641156, 0.047277108, 0.01676107, 0.040819433, 0.06967586, 0.019485872, -0.027187591, 0.028056875, -0.015039382, -0.06476109, -0.0055817217, -0.04830218, -0.017881623, -0.04585947, 0.0049588126, -0.016419766, -0.01625731, -0.056377985, 0.052825004, 0.04994695, -0.03757423, 0.010382483, -0.0039726403, -0.05549916, -0.040074434, -0.04668545, 0.061435644, 0.07101857, -0.038659554, -0.0349999, 0.0034399496, -0.057112463, 0.004571023, 0.0349358, -0.010898231, 0.005101206, 0.01648142, 0.047000576, -0.041007333, 0.020772183, 0.031872626, 0.024034629, -0.038550925, -0.032953054, -0.04878563, -0.004362387, 0.019459449, 0.044199683, 0.00821184, -0.011920061, 0.038226012, 0.02084494, -0.009805813, 0.023971997, -0.032113742, 0.011412388, 0.0032549852, 0.0023941414, -0.0325293, -0.013865003, 0.0045663742, 0.020463541, 0.026397089, -0.006204632, 0.048581094, -0.03858946, -0.008598162, -0.0013970209, 0.027331697, -0.033415955, -0.024385476, 0.060864113, 0.031815864, -0.059972562, 0.004576069, 0.0009605436, -0.08063281, 0.030286236, 0.083224274, -0.02986444, -0.029185258, -0.020689731, -0.028648958, -0.010366824, -0.022574363, 0.07415807, 0.04608603, -0.04913941, -0.037180815, 0.013475991, -0.016032832, -0.030193266, -0.009305847, -0.0008778477, 0.026454827, 0.020130312, -0.025198244, 0.029860524, -0.056262504, 0.007500363, -0.0016255353, 0.0027113457, -0.024298621, -0.06189756, 0.011549031, 0.013811178, 0.00676026, 0.011110597, -0.0018290941, 0.00087344385, 0.0009722873, 0.0020783436, 0.010239783, 0.01385962, 0.017942542, -0.0060036113, -0.014304417, -0.034567825, 0.031960703, 0.032295402, -0.0045857024, 0.014638136, 0.012492939, -0.06458298, -0.06105201, 0.07884286, -0.01700622, -0.033021558, 0.05676553, 0.045637317, -0.0122324955, -0.05886767, -0.021236673, 0.010297707, 0.019408558, 0.015687736, 0.03462263, -0.015886646, -0.055826027, -0.048746485, 0.03289972, -0.016056687, -0.022259362, -0.07712729, -0.026485167, 0.007849496, -0.03168081, 0.013934243, -0.034460664, 0.011299966, -0.03681382, 0.029149782, -0.03029896, 0.021221014, -0.03111821, 0.008291661, 0.015452861, -0.00057348807, -0.0273591, 0.033581346, -0.014719364, 0.028230341, 0.011648364, 0.050529584, -0.010172074, -0.011017626, -0.015104584, -0.027585534, -0.008207926, -0.01099585, -0.027361058, -0.0006185059, -0.044888165, 0.036767825, -0.01893685, 0.00016172168, -0.013318429, -0.025722798, 0.019962963, -0.014311512, 0.01824837, 0.018292898, 0.0028302518, -0.048924603, 0.00968544, -0.038602304, 0.014777593, -0.046243105, 0.015458611, -0.030430587, -0.012762556, 0.0128261065, -0.025777113, -0.021870349, 0.0077644754, -0.029504297, 0.018903576, 0.0049304315, 0.030434014, 0.011435264, -0.019119734, 0.0505609, -0.04470369, 0.054702543, 0.0025890146, -0.059971586, 0.10250561, -0.002027026, -0.030525029, -0.030220667, -0.0043155956, 0.011868071, 0.03456978, 0.0013484554, -0.022536319, 0.015747434, 0.011143871, -0.0081153205, -0.0031837886, -0.032387394, -0.01060806, 0.077785924, -0.00530715, -0.019876352, -0.036144916, 0.021303222, -0.0036011208, 0.020958493, -0.012461132, -0.02735861, -0.023315322, 0.03317472, -0.042038828, 0.040566757, 0.015609689, 0.014722636, 0.00027414394, 0.0336249, 0.0015862669, -0.03557241, -0.0038316536, 0.042542834, 0.01851603, 0.009459617, -0.01439641, -0.0020388614, 0.021553755, -0.042700395, -0.03665039, -0.0019416386, 0.050887767, -0.030206231, -0.003025492, 0.051125087, -0.03547014, 0.03853918, 0.016380131, 0.0041840286, 0.041848972, -0.031250697, -0.03276711, -0.052354764, 0.0037394161, -0.005997158, 0.0011910152, -0.027517641, 0.012311032, 0.04780894, 0.04297833, 0.015777405, 0.03291978, 0.025014747, 0.058707166, 0.0021814075, 0.024914436, 0.00824826, -0.007689976, 0.04355916, 0.007035994, -0.03614345, -0.07077195, -0.0044281404, 0.0074582803, 0.009069136, 0.071128175, 0.0032407946, -0.016570477, 0.028844686, -0.04124123, 0.05604916, 0.004386058, 0.004919055, 0.011800788, -0.09200862, -0.035117824, 0.0034879034, -0.022206515, -0.006430455, -0.06461429, -0.041715384, -0.024697663, -0.028955275, -0.016363004, -0.01100784, -0.016522525, 0.024386942, 0.008519258, -0.025255494, -0.01691276, 0.006776163, 0.01588732, 0.015607671, -0.01363337, 0.02305647, 0.011617049, -0.016414873, -0.06007336, -0.024157206, -0.039555017, 0.0326164, -0.043420676, 0.026668174, 0.036638644, 0.020814326, 0.024873577, -0.0070879846, -0.042896125, 0.047041677, -0.01570633, 0.04444239, -0.009766913, 0.0014704195, -0.07636982, -0.04093491, -0.0004193509, 0.0038791182, -0.009031948, -0.01614183, 0.01153582, 0.003970622, 0.007638597, 0.022783183, -0.0019993791, 0.00092775887, 0.02793748, 0.033003457, 0.0070198462, -0.10121966, -0.011476856, -0.0033244693, -0.063232444, -0.0435802, 0.0009765689, 0.0064306995, -0.017339695, -0.028378852, 0.026584499, -0.040966228, -0.017361226, -0.006956968, -0.045150932, 0.005646313, 0.014723523, -0.03454238, 0.004675616, -0.03470875, 0.028034369, -0.0062158867, 0.0532375, -0.03749007, 0.008245481, 0.010399609, -0.027115416, 0.05899734, 0.035630636, -0.007722271, 0.002740216, -0.00146467, 0.021835607, -0.03100897, -0.046247017, -0.029369732, 0.013470913, -0.0069709136, 0.0020855002, 0.004332477, 0.0014028928, 0.015400259, 0.016042007, 0.030710971, -0.009249697, 0.02973428, 0.050359298, 0.016746635, -0.013504372, -0.029127028, 0.0160721, 0.02035589, -0.019041564, 0.013965315, 0.016876794, 0.03644781, 0.023080051, 0.00646483, 0.06598929, 0.022498641, -0.01852643, -0.0054376163, 0.0026306072, 0.010277278, -0.08107125, -0.010303212, 0.06763636, 0.0036060142, 0.019871704, 0.003358722, -0.0386116, 0.010643781, -0.043268014, -0.022412032, -0.04568307, -0.05791251, -0.012863357, -0.008161929, -0.027127158, -0.0015022255, 0.048333492, 0.025755826, 0.058008537, 0.02199219, 0.036132194, 0.0039419965, -0.011195188, 0.046524342, -0.039222278, 0.01960233, 0.03580239, -0.0051276293, 0.024312198, 0.03123259, -0.02256788, 0.0072478713, 0.03825146, -0.041043557, 0.010020383, 0.024820484, -0.053124957, -0.03379078, -0.0077567683, 0.012835465, 0.020959716, -0.00022459985, 0.026650313, 0.04593923, -0.012510432, 0.0022978669, -0.009259973, -0.035104126, 0.008152877, -0.000866104, 0.01756772, -0.039142516, -0.018792989, 0.020493634, 0.042716052, -0.0091210045, -0.048631005, 0.064938225, 0.019191789, 0.05667158, 0.018236872, -0.04268669, 0.078730315, -0.0122732315, -0.01871176, -0.015431208, -0.012372075, -0.011393182, -0.030699225, 0.010863733, -0.008613575, -0.00877652, 0.050744887, 0.023156783, 0.008177832, -0.10568426, -0.026002692, -0.009759328, -0.039690074, -0.031301096, -0.033821605, 0.0104133105, 0.013571898, 0.008394358, -0.004342264, -0.0328043, 0.054330654, -0.013953572, 0.009374964, 0.015176928, -0.02073903, -0.030738372, 0.011834308, -0.029307466, 0.07805946, 0.021320103, 0.021187741, -0.023572342, 0.02957534, -0.03508651, 0.030688953, 0.010821897, 0.04270431, 0.0035527085, 0.011639068, -0.014716918, 0.005412905, 0.021436317, 0.055227097, -0.021923196, 0.046752732, -0.018521413, -0.02732399, -0.014621009, 0.035749543, -0.020219859, 0.05603742, 0.0156016145, 0.0032924183, 0.025294637, -0.030326363, 0.07659295, 0.022117458, 0.02531409, -0.0114482315, -0.007133125, 0.001353471, 0.008150919, -0.020127375, -0.008066022, -0.0058493824, -0.01764797, -0.0013984888, -0.0076869177, 0.006791821, 0.0043647727, 0.0113449525, 0.043363918, -0.025351217, -0.055275537, -0.0245442, 0.010932483, -0.02457778, -0.06845842, -0.045935806, 0.0066283867, -0.008625809, -0.01226687, 0.021599753, -0.0118524125, 0.005304275, -0.07961893, -0.0014312123, -0.0027808298, 0.024836143, -0.017393032, 0.048111342, 0.011054234, -0.039418496, -0.018097658, -0.005886938, 0.014884266, 0.03276711, 0.013611045, 0.035797007, 0.03165488, 0.014908488, -0.01719987, -0.003463743, -0.038202528, 0.041396834, 0.06651679, -0.022591123, 0.0004177606, -0.025619306, 0.008492223, 0.00069216447, -0.0031248247, 0.01972662, -0.019002909, 0.038020495, 0.021095535, -0.050042216, -0.02015233, 0.0035506594], [-0.019315347, -0.07326726, -0.065662816, -0.029842956, -0.0032637487, 0.061668403, 0.034723863, -0.021165164, 0.04990794, 0.0032995318, 0.013268538, 0.060480062, -0.03608073, -0.0013592099, -0.019166227, 0.024450123, 0.03184103, 0.014135409, 0.022919537, 0.021901457, -0.025088446, 0.005243352, -0.00031858342, 0.037154216, -0.06069476, 0.020385876, -0.014825673, 0.014172345, 0.004741959, -0.008089826, 0.023488602, -0.07610682, 0.018183496, -0.019233897, -0.026905872, 0.015986308, -0.005431213, 0.00047181512, -0.040787913, -0.048466235, -0.029374316, 0.030137299, -0.015383193, 0.014083466, 0.03787103, 0.06782595, -0.008277398, 0.01766522, -0.0028354358, -0.0119693875, 0.03510882, -0.0041715964, -0.018854462, 0.017520934, -0.011256614, 0.040190842, 0.034400087, 0.0020612695, 0.060764015, 0.028617103, 0.01625699, 0.01778238, -0.08007064, 0.02071485, 0.018408582, -0.0006625612, -0.0050494317, 0.021685028, -0.008566835, -0.014664216, -0.024902027, 0.0025804103, -0.014247375, 0.0013724482, 0.012648181, 0.0033260803, -0.043521848, 0.0062100682, 0.012377572, -0.019770063, -0.015109194, 0.0270011, -0.0013268538, -0.077988304, -0.015165899, -0.0018760063, 0.029045345, -0.030536685, 0.035997618, 0.036456738, -0.040972598, -0.0024886446, 0.05410147, -0.041612074, 0.016584806, 0.003757784, 0.06427998, 0.046889625, 0.019357767, 0.014892044, 0.07259085, -0.00873767, 0.0049588205, 0.027877696, -0.04430618, -0.0019917237, 0.019069988, 0.022691278, 0.033035718, 0.019898191, 0.0041802535, 0.011230644, 0.022621732, -0.061556004, 0.027319685, 0.012672926, 0.03786064, -0.031611323, -0.031334296, 0.0052075693, -0.027970701, 0.00051481236, 0.0012061293, 0.029226566, -0.022416558, -0.00016737172, 0.01442398, -0.026718877, -0.049980663, -0.019639052, 0.044634, -0.018022688, 0.051733445, -0.02398985, -0.054638367, 0.021055363, -0.03747049, 0.03489181, -0.07472859, 0.040400214, -0.023877596, 0.00038553213, 0.0042596105, 0.013216595, -0.020950325, -0.043068785, 0.015795274, -0.039391223, -0.009348577, 0.0103585785, -0.018406345, 0.006348583, -0.031831793, 0.0384942, 0.019195806, -0.028374702, 0.013878002, 0.009146865, -0.031950686, 0.00046633228, 0.008904176, 0.024324307, 0.022769408, -0.0059409025, -0.014266998, -0.056907542, 0.007841654, 0.0069811326, -0.009539034, 0.027490517, 0.04328002, 0.00073181844, 0.01695995, 0.026693627, -0.06590752, -0.0143599175, 0.02499913, -0.018229667, 0.0043820012, 0.006235174, 1.0965734e-05, 0.0241275, 0.0075213397, -0.026980322, -0.10126105, 0.02907045, -0.023677329, -0.014182157, 0.0066371546, 0.052917168, 0.009888783, -0.056666385, -0.030118253, 0.020576335, -0.0070275925, -0.032234643, -0.028566314, 0.0007655814, 0.018971298, 0.027481861, -0.028702522, 0.007688711, 0.048198443, 0.041913345, -0.04482965, -0.0325209, 0.047219608, -0.0021573638, 0.04329503, -0.0026477198, 0.02601303, 0.008203163, 0.072981, 0.031114692, 0.05124576, -0.009824721, -0.0010596362, -0.05847478, 0.03002187, 0.02095494, -0.012623291, -0.00863667, 0.03167943, -0.02344041, -0.030910168, -0.0011868965, -0.027310448, 0.04050165, -0.0014497855, -0.0059630508, 0.047824018, -0.018088844, -0.0062146853, -0.031767152, -0.00907501, 0.014211014, -0.020559741, 0.012034604, -0.061256323, 0.014073077, -0.034740023, 0.009502097, 0.024367014, 0.0053004897, -0.0384424, 0.021401651, -0.022379331, 0.0017943404, -0.02468329, 0.011378247, 0.04031927, -0.015708126, -0.026084017, 0.030323138, 0.034099247, -0.0065292288, 0.012695615, 0.0109928595, -0.04103724, 0.04193369, 0.009896863, -0.06751198, 0.003577715, -0.031127678, 0.030789472, 0.004896489, -0.007879169, -0.0057645133, -0.021734085, -0.06377209, -0.0110072885, -0.054983344, 0.04710879, -0.001900607, -0.049966812, 0.017915124, 0.03515037, -0.020566523, 0.07181979, 0.014646757, -0.0570299, -0.00067814405, 0.0138999345, 0.0058961017, 0.01955479, 0.015687926, 0.009474394, -0.03586603, 0.004612534, -0.016643098, -0.023845855, -0.022633275, 0.020392729, 0.028387977, 0.02014694, -0.03686824, 0.050345413, -0.0041485103, -0.048910927, -0.040926427, 0.005354741, 0.0041086874, -0.027315067, 0.025507452, 0.022132313, -0.004398125, -0.05316188, 0.035649024, 0.000717967, 0.004625087, -0.0038760984, -0.03268539, -0.03268597, -0.004510957, 0.023002649, -0.0031979543, 0.035891425, 0.05089659, -0.008192125, 0.008771144, -0.04420576, 0.008645616, -0.0045017223, -0.032763883, 0.041750588, 0.033738676, 0.028903365, 0.0013124252, -0.036369298, -0.013599242, 0.056177456, 0.014143488, -0.01967368, -0.0029030337, 0.0122210225, 0.0089040315, 0.02478025, 0.007209393, 0.024308145, 0.01622467, -0.018027667, -0.07731882, -0.012161576, 0.010065714, 0.07560354, -0.039342746, -0.0021065753, -0.019824892, 0.0008755273, 0.006578863, 0.055379268, -0.02516149, 0.004953626, 0.021513037, -0.01683298, 0.012808158, 0.012844915, -0.025454355, -0.005766822, -0.01760058, -0.0071127214, -0.028876819, -0.05269093, 0.0457292, 0.00035725208, -0.03894105, 0.08894019, -0.02122966, 0.046423145, -0.01851016, 0.029143458, 0.05399066, -0.029345458, -0.023795497, 0.018795269, 0.04766978, -0.04329041, -0.017140308, 0.055741135, -0.03254168, 0.0132756075, -0.01925583, 0.048122834, 0.023911072, 0.0069649722, 0.025865281, 0.017650215, 0.0403741, -0.007552505, 0.023246203, -0.0076933284, 0.027776204, 0.050438914, 0.034909703, 0.0061800564, 0.047730956, 0.04071519, 0.03230159, 0.016730247, -0.0078402115, -0.06470937, 0.0039674314, -0.0177137, 7.762585e-05, 0.04073135, -0.07983632, -0.0447956, -0.007094253, -0.009100405, 0.01431894, 0.026480516, -0.027167607, -0.017365105, 0.02387298, 0.018469758, -0.028672509, -0.039563216, 0.019052386, 0.017389057, 0.03159632, 0.037605543, 0.06707335, -0.035452798, 0.036565527, 0.057668217, 0.013793739, -0.005686022, 0.0023939929, -0.059644356, 0.026960699, 0.017869385, 0.030325448, 0.0067924066, 0.08689017, 0.030256191, -0.0215494, 0.033515323, 0.0014141469, -0.02839548, -0.005355895, -0.026971089, -0.001141302, -0.021093454, -0.0033705204, -0.024282752, 0.022281216, -0.032230023, 0.016624052, -0.0032689432, -0.0750137, 0.0035171148, -0.027554005, -0.020669254, -0.03529812, -0.032564767, 0.036685575, 0.08729186, -0.0633704, -0.0048089703, -0.002807336, -0.050176892, -0.029909907, 0.009272394, -0.03516617, 0.022259863, -0.023876442, 0.06655883, -0.06467243, 0.029454539, 0.038821008, 0.031027257, -0.041219614, -0.026832573, -0.042444028, -0.030620946, 0.014913398, 0.040275414, -0.00041063788, 0.018497461, -0.0003858207, -0.004908032, 0.0038807157, 0.04570749, -0.035404317, -0.005258935, 0.019579029, -0.008830879, -0.03109305, -0.00976109, -0.0005223152, -0.023041604, 0.044702105, 0.027309803, 0.051647455, -0.038278494, -0.005844159, -0.012444665, 0.036379687, -0.03339679, 0.024837676, 0.04006302, 0.024497667, -0.06854623, 0.008023455, 0.022514382, -0.0585778, 0.018578263, 0.047810603, -0.013749876, 0.028707137, -0.026531305, -0.051025294, -0.013486663, -0.0017175802, 0.054630134, 0.07012529, 0.0010573276, -0.02202612, -0.00803846, -0.0045556854, -0.054694775, -0.025237348, -0.007441116, 0.05299335, 0.015362849, -0.023951473, 0.013148637, -0.057424664, -0.00074797845, -0.0045946427, -0.022700222, -0.038890265, -0.0314705, -0.0052093007, -0.0018197346, -0.007184287, 0.027908372, 0.028851712, 0.01215696, 0.027511295, -0.033086505, 0.04903299, 0.0055022016, -0.030549956, -0.04659629, -0.027205408, -0.02009846, 0.046761926, -0.021008039, -0.02152083, -0.0019586822, -0.0177137, -0.07095638, -0.073016785, 0.027320838, 0.008024501, -0.007611374, -0.005346661, 0.054251526, -0.019322488, -0.032213863, 0.008166586, -0.001185165, -0.022815654, 0.024290832, 0.035769068, -0.02144746, -0.07147811, -0.0453612, 0.04524577, -0.03870096, -0.043622844, -0.05603836, -0.04054782, -0.0024055357, -7.7914425e-05, -0.029015044, -0.060720157, -0.0025792562, -0.019516716, 0.013195818, -0.017434362, -0.011799148, 0.006728921, 0.0018895511, -0.020232357, 0.005620804, -0.02365857, 0.036683988, -0.03942066, 0.03789397, -0.028808137, 0.02555247, 0.020784106, -0.018017711, -0.024604797, -0.045472015, -0.00020200037, -0.036198467, -0.015056962, -0.0013597511, -0.044347517, -0.005768553, -0.043140355, 0.03715364, -0.01758976, -0.015536713, 0.063996024, 0.017652523, 0.029109983, 0.0046552424, 0.017052293, -0.0024390102, 0.009771695, -0.010427692, -0.006480172, -0.028702952, 0.014634927, -0.008868393, 0.01450478, 0.0207287, 0.0024459357, 0.0059168795, 0.0003445549, 0.014432637, -0.019469371, -0.008471606, 0.017481688, 0.017091539, -0.032393932, 0.067675896, -0.014405367, 0.058120698, -0.020479085, -0.08405985, 0.10217525, -0.02126429, -0.032507055, 0.00090962386, 0.027176552, 0.025754469, 0.020995341, -0.017315472, -0.03548281, 0.0027310448, -0.016486837, 0.012511326, 0.011717176, -0.020772563, 0.0011144648, 0.05624383, 0.014853375, -0.021978794, -0.046753272, 0.045271166, -0.014583272, 0.005614456, -0.011158789, 0.0003386392, -0.0023293528, 0.030297747, -0.013167538, 0.0519291, 0.02144032, 0.051631294, 0.010961406, 0.01732817, 0.024108166, -0.03146473, -0.029556694, 0.05060888, -0.000887503, 0.00027933766, -0.044676706, 0.022869326, 0.039245784, -0.03746818, -0.0057529705, 0.018302387, 0.030694822, -0.030241618, -0.005320004, 0.0324932, 0.009401674, 0.06617301, 0.038301576, 0.014427443, 0.05147893, -0.035789847, -0.057594344, -0.022887794, 0.010706777, 0.012825293, -0.020897226, -0.014222052, 0.028127685, 0.0488056, 0.023366824, 0.011098478, 0.02096908, 0.019562868, 0.020679228, 0.064343, 0.0035759835, 0.016230442, -0.035063222, 0.014250423, -0.021298917, -0.03944894, -0.027817182, -0.04763861, 0.043937385, -0.013351646, 0.055041924, 0.034252625, -0.020754095, 0.041057438, 0.0015894542, 0.014307397, -0.02041358, 0.051348493, -0.033999402, -0.090302244, -0.039657287, 0.011767964, -0.03834602, 0.027010335, -0.035956062, 0.019457685, -0.002899571, -0.0060559707, -0.024128078, -0.0049195746, 0.03049513, 0.029049383, -0.004578284, -0.0051769805, -0.054777734, 0.016594041, -0.03012922, -0.013830297, -0.020798534, 0.042212304, 0.00089341874, -0.0015398199, -0.03799569, 0.0026798234, 0.0058083762, 0.027054198, -0.011832604, -0.0051544723, 0.04884946, 0.037731357, 0.018163873, -0.013864151, -0.060099147, 0.054361112, -0.046099655, 0.01217081, -0.00029088053, 0.016145311, -0.045264456, -0.039864484, -0.022931082, 0.012324692, -0.011927256, -0.010797208, 0.007605602, 0.0020026893, 0.019355098, 0.029786397, -0.0047579743, -0.0013135795, -0.009177742, 0.019767467, -0.011438992, -0.05140736, -0.015128673, 0.026913375, -0.05508954, -0.06005298, 0.024037465, -0.009753155, -0.044557817, -0.0263016, 0.0063331444, -0.035958372, -0.03334968, 0.0076852483, -0.032333907, 0.00076687994, 0.013181172, -0.048757114, 0.02303035, -0.024171509, 0.06666705, 0.052018266, 0.02269099, -0.036475495, -0.03281164, 0.016407624, -0.0024136158, 0.025978401, -0.005846756, -0.0070053726, -0.023170019, 0.013089913, -0.015524485, -0.026832573, -0.08853849, -0.014407243, 0.038866024, 0.030065086, 0.004188333, 0.0014527072, 0.004214305, -0.0068835956, 0.020362793, 0.048572432, -0.0267587, -0.013839911, 0.0065546236, -0.008114643, -0.006889944, -0.023754952, 0.008398598, 0.016591515, 0.015324324, 0.02345282, 0.027726714, 0.002988451, 0.012953273, -0.015644062, 0.016045142, -0.012536719, 0.028816218, 0.0013568653, -0.020870678, 0.04072674, -0.046020303, -0.014756956, 0.054971803, 0.0032767344, -0.00013389738, 0.00028510907, -0.007334074, -0.0036432208, -0.023213882, -0.043090716, -0.06618686, -0.035247333, -0.018991353, -0.005130557, -0.027471906, 0.01241148, 0.025732538, -0.017572878, 0.022431275, 0.04727501, 0.02442473, 0.015277577, -0.016657526, 0.034727037, -0.049177278, 0.015755162, 0.042238276, -0.024996102, 0.031154228, 0.035048794, -0.030941838, 0.011914558, 0.008430918, -0.032228004, 0.015835674, 0.019488417, -0.03104688, -0.014045374, -0.0142537225, 0.011755267, 0.019089611, -0.026513992, 0.022395492, 0.03617278, -0.030762926, -0.03967749, 0.003060017, -0.044555508, -0.027125763, -0.008982379, 0.025606433, -0.003641485, -0.037371222, 0.0010965734, 0.090311475, -0.057137243, -0.020594804, 0.11444417, -0.01824698, -0.004826654, 0.05220613, -0.010931683, 0.05724806, -0.021492837, -0.034030423, -0.046005297, -0.02715866, 0.01557798, -0.025312377, 0.0068781124, 0.0067546032, 0.05421228, 0.03918634, 0.0174309, -0.007765471, -0.046169203, -0.028895287, -0.0062428215, -0.02330911, -0.039665945, -0.039114196, 0.016752755, 0.0032940488, 0.0044486253, -0.020375488, -0.0076794764, 0.073874414, -0.042948738, -0.019149633, 0.0049784435, -0.0071221, -0.017904157, 0.04203801, 0.003016154, 0.048597824, 0.017736785, -0.013143298, -0.028322758, 0.0063745542, -0.03359901, 0.036622666, 0.021986874, 0.027809966, -0.0045069167, 0.023322385, -0.014270605, -0.003621001, 0.0028568625, 0.037586495, -0.000989874, 0.03727657, -0.01033203, -0.01862097, -0.047452774, 0.016598659, -0.019378183, 0.031181931, -0.0022766883, -0.016814077, 0.013265075, -0.039328028, 0.06538348, 0.006434, 0.011946879, 0.029556982, -0.009946498, 0.027081901, 0.007188904, 0.016218899, -0.01974294, -0.0135905845, -0.028263314, 0.02189482, -0.029008405, -0.025166936, 0.03323483, 0.0012360979, 0.031927023, 0.027593251, -0.023625962, -0.015553451, 0.013014595, -0.037425473, -0.02503881, -0.011202362, 0.00888614, -0.0038691727, 0.0030900282, -0.005990465, -0.024290254, 0.0335436, -0.050029717, -0.007266242, -0.0069329413, 0.01207385, -0.040178448, 0.06017187, 0.032823328, -0.05489908, -0.018038055, 0.0049703633, 0.00038553213, 0.024951085, 0.04945755, 0.06273554, 0.048559733, 0.0014567111, -0.003324926, 0.012623291, -0.020655114, 0.011803747, 0.06729498, 0.006451603, 0.01472929, 0.015816052, 0.026844118, 0.025598064, 0.006602526, 0.0025922416, -0.023151353, 0.0017011678, 0.034563992, -0.011820484, -0.012640028, -0.045641407], [-0.046001825, -0.0999634, -0.038830847, -0.054593418, -0.030516464, 0.028392853, 0.026680257, -0.026656035, 0.023869602, 0.037073955, 0.015395983, 0.007061304, -0.024578527, -0.0020612606, -0.002114384, 0.026901118, 0.0021428568, 0.009288525, 0.03059582, 0.014455321, -0.005681595, -0.00085155363, -0.014143699, 0.0333287, -0.058777764, 0.041615132, 0.0015565241, 0.027486332, -0.011040142, -0.012521005, 0.02418096, -0.058492508, 0.010824749, -0.022831127, 0.006247187, 0.025740352, 0.008786557, 0.022185741, -0.043169286, -0.03172736, -0.058223065, 0.00029738466, 0.004255527, 0.021702226, 0.025343144, 0.021479188, 0.0037879634, 0.0017012618, -0.03196991, -0.044945158, 0.048172098, 0.02742899, -0.009821142, 0.016366702, -0.0014653049, 0.058924347, 0.032138634, 0.029050898, 0.0690407, 0.007902839, 0.0021112203, -0.049132388, -0.0720388, 0.009399781, 0.056806274, -0.013751404, -0.006256678, -0.0047955913, -0.0049949023, 0.010757521, -0.03185285, 0.024782058, 0.007299106, -0.023242489, 0.003957747, 0.008732247, -0.054356012, 0.019944547, 0.0030234107, -0.037050754, -0.02476024, 0.011472509, 0.03600991, -0.03588811, -0.036795553, 0.041411344, -0.01456763, -0.035311792, 0.024920203, -0.009250562, -0.04264201, 0.048451558, 0.0142227905, 0.008296189, -0.015126545, 0.04875, 0.04021416, 0.03449873, 0.02552868, -0.011045811, 0.043657545, -0.04289721, 0.002524606, 0.0113617815, -0.010722721, 0.0063003106, 0.012031425, -0.019095892, 0.008053641, 0.045097012, 0.0056271083, 0.004816946, -0.004910538, -0.054579843, 0.010272426, -0.0027850813, 0.015037962, -0.011788877, -0.028784094, -0.029607173, -0.0077594197, 0.023402696, -0.030867897, 0.047572058, -0.0037618633, -0.019193439, 0.023848774, -0.003794291, -0.05133573, 0.010947868, 0.009816858, 0.020598108, 0.044411555, -0.009250562, -0.03295117, 0.004430188, -0.06079948, 0.039967656, -0.029183771, 0.026101304, -0.015071708, 0.0009564819, 0.009792603, -9.701912e-05, 0.003858619, -0.045924842, -0.023825573, -0.06765501, -0.0033652186, -0.015974343, 0.0016791162, 0.013659658, -0.025859812, 0.0021957166, -0.017786134, -0.01999121, 0.02494347, 0.004650063, -0.030975986, 0.052628122, -0.015146582, -0.0009459363, 0.04961262, 0.013768277, -0.027728485, -0.044507187, 0.0076898187, -0.012032479, 0.010974759, 0.040861655, 0.05337317, 0.0003110939, 0.024768217, 0.043858964, -0.042613536, -0.008155933, -0.0061649317, -0.004796646, 0.04982986, 0.029431064, -0.016682014, 0.04560267, -0.04090094, -0.009504051, -0.07655784, 0.017732617, -0.022570651, -0.026608018, 0.0016248064, 0.036122747, 0.03757487, -0.03763076, 0.0036491577, -0.011623312, -0.0042941505, 0.040705845, -0.030459784, -0.0057049477, 0.012083362, 0.04165389, -0.011927551, -0.0017299984, 0.031586576, 0.0050352393, -0.047471873, -0.026323816, 0.06548605, 0.0049680113, 0.04276012, -0.019795062, -0.0119312415, 0.017961191, 0.021866739, 0.03287814, 0.023673454, 0.024248451, 0.02178501, -0.034678005, 0.026771342, 0.039900165, -0.006840902, 0.019320512, 0.042400517, -0.013035361, -0.01930054, 0.0063558067, 0.001563906, 0.022917304, -0.022634452, -0.008460831, 0.046400446, -0.016926672, -0.017455004, -0.031689394, 0.0016867823, -0.018105928, -0.03414239, 0.030451346, -0.07043271, 0.051992755, -0.03276715, -0.004429562, 0.028397072, -0.041904215, -0.031350616, 0.004807719, -0.0426167, 0.0042646225, 0.021090321, 0.011719672, 0.049943753, -0.005304151, -0.050452046, 0.029633012, -0.0055100527, -0.0032268083, -0.0038196002, 0.027038803, -0.017374858, 0.022924457, 0.021143839, -0.064516656, -0.019048965, -0.012810741, 0.024726164, 0.01876285, 0.034231927, -0.0028541547, -0.0018064538, -0.033851232, -0.048231155, -0.104795404, 0.05751546, 0.00061796955, -0.01575137, 0.010153261, 0.050745744, -0.005110376, 0.052462555, 0.04230455, -0.060999714, -0.017025998, 0.030253617, -0.011712948, 0.036566716, -0.009303949, 0.03630825, -0.05172384, -0.01882006, -0.052236356, -0.031425755, 0.014593798, 0.015806733, 0.05575119, 0.03671857, 0.00464189, 0.0442274, 0.04284448, -0.069250554, -0.031188086, 0.0387913, 0.008044677, -0.01848425, 0.0005503833, -0.009735657, -0.033539087, -0.054195717, 0.055954717, 0.053676877, -0.0028288453, -0.05942948, -0.024413489, -0.025003513, -0.015372256, -0.017330566, -0.013514129, 0.036597297, 0.077821985, -0.014056171, -0.0073526255, -0.04087879, -0.014253372, 6.432789e-05, -0.053385824, 0.03867108, 0.0324492, 0.035606656, 0.013570549, -0.040429026, -0.01739384, 0.020188676, -0.018430995, -0.015799351, 0.0078680385, 0.034488186, -0.017386854, 0.034747608, -0.008437762, 0.0053244513, 0.013292542, 0.023652626, -0.081129074, -0.019012582, 0.008304625, 0.0380336, -0.04581622, 0.0032063762, -0.04167498, 0.013398129, -0.004776082, 0.0117878225, -0.026667338, -0.0023216042, 0.008354189, -0.02462809, 0.0022198395, 0.0054905433, 0.002363259, -0.033802725, -0.005034448, 0.012965761, -0.0315001, -0.08195162, 0.05736973, -0.0077889473, -0.0023528454, 0.07728943, -0.015206165, 0.055904098, -0.010423754, 0.03789862, 0.04405933, -0.0022327579, 0.020662434, 0.011698185, 0.07096737, -0.037099265, 0.013207254, 0.04764482, -0.029962033, -0.011882205, -0.0397694, 0.05059441, 0.030232, 0.017996255, 0.050677724, 0.0020769474, 0.042473283, -0.042722154, 0.024660781, 0.011002821, 0.023549281, 0.009791548, 0.07469206, 0.013804133, -0.007968222, 0.041705564, 0.028701048, 0.03181225, 0.008182824, -0.020538524, 0.012964706, -0.01802552, 0.010245007, -0.006563554, -0.06680768, -0.035821144, -0.010061515, -0.0009797645, 0.0014647776, 0.010824749, -0.0024328597, -0.016423121, 0.036431734, 0.022970328, 0.0063742613, -0.023172144, 0.0035344749, 0.014860797, 0.02009772, 0.042782262, 0.040653117, -0.044236764, 0.026422944, 0.034004144, -0.010541338, -0.029193591, -0.016568122, -0.053208653, 0.012318396, 0.029599266, 0.038146306, -0.014503303, 0.08792462, 0.058934893, -0.03587229, 0.012308773, -0.0078869555, -0.06355042, -0.025680207, -0.003530652, -0.03379851, -0.008348784, -0.016983617, -0.028117087, 0.03891376, -0.014702614, 0.025843995, -0.0011072833, -0.064221375, -0.00013748769, -0.024881182, -0.015788822, -0.049850952, -0.027874012, 0.03369147, 0.07619797, -0.026294816, -0.022295149, 0.0046181628, -0.036084782, -0.025772927, -0.010369841, -0.029298643, -0.007816366, -0.017092895, 0.05003919, -0.07239524, 0.026888529, 0.029251263, 0.014848142, -0.05006977, -0.0076761097, -0.041196737, -0.006674282, 0.01801181, 0.028110234, 0.009238961, 0.02581763, -0.0013793586, 0.025037391, -0.009571146, 0.041490432, 0.030800931, 0.01888419, 0.037435405, -0.038043488, -0.0036276712, -0.037071057, -0.015718678, -0.01645924, 0.018550687, 0.040601708, 0.048388544, -0.047173698, -0.036240857, -0.015944881, 0.035692092, -0.030035194, 0.036340512, 0.045135505, 0.047219835, -0.06867899, 0.040430803, 0.018951418, -0.042031948, 0.039857455, 0.030344835, -0.020266384, 0.007163596, -0.012462738, -0.058572125, -0.036103502, -0.0073091243, 0.0074119437, 0.055981345, -0.00256547, -0.042596404, -0.024405578, -0.027837103, -0.0358338, 0.011454582, -0.03205849, 0.025467517, 0.021386122, -0.016866768, 0.024949202, -0.035670344, -0.0014229909, -0.01940066, -0.016451066, -0.027812848, -0.036538243, 0.0005241141, 0.007975999, -0.031057715, 0.018610796, -0.0021059474, 0.0003184758, 0.019790843, -0.01883858, 0.03632522, -0.0036150164, 0.0040463298, -0.02533517, -0.015594241, -0.013811515, 0.05605596, -0.0062305783, -0.009038842, -0.007506327, -0.016801706, -0.09088582, -0.07330005, 0.03520212, -0.011145598, 0.013847897, 0.01928044, 0.097856425, -0.019952191, -0.018825926, -0.00549318, 0.018915035, -0.0047281, -0.0060980334, 0.026264763, -0.011245781, -0.07912752, -0.03562816, 0.024523294, -0.03727221, -0.053639438, -0.04403613, -0.031051124, -0.021302022, -0.009542673, 0.017054273, -0.044947267, 0.023284586, 0.018206902, -0.011781495, -0.009807367, -0.00978153, -0.020424105, -0.002718908, 0.013914861, -0.0065582814, -0.02769421, 0.03262373, -0.011920519, 0.054165665, -0.007015167, 0.04591113, 0.017223, -0.03465586, -0.033303916, -0.025098423, 0.0065118475, -0.01488927, -0.017779807, -0.042194877, -0.062476087, 0.0045598983, -0.0070982133, 0.047277834, -0.025163805, 0.010040424, 0.04897778, 0.042468797, 0.018503232, -0.0064443895, 0.051471803, -0.011498346, -0.003400151, -0.003862837, -0.01354168, -0.03005602, 0.009065751, -0.017803008, 0.031877104, 0.021646466, 0.008258224, 0.01150362, 0.01114217, 0.03296119, -0.016672524, -0.0017057436, 0.046025027, 0.030004214, 0.0065659266, 0.023363514, 0.013605876, 0.062606856, -0.016370393, -0.06890888, 0.08179133, -0.015002503, -0.03988962, -0.018746834, 0.03108197, 0.031580247, 0.0379408, -0.039124012, -0.009532655, 0.017247256, -0.040256605, 0.06401363, 0.07085559, -0.015917461, 0.03506608, 0.042814955, 0.0060622445, 0.0024339142, -0.020254849, 0.05737837, 0.030934595, -0.0041939677, 0.0038259276, -0.020598633, -0.051043656, 0.023323605, -0.052540068, 0.043295044, 0.03920587, 0.014662013, -0.008553895, 0.039495215, 0.010166443, -0.011638075, -0.034256183, 0.048899744, -0.00010861922, 0.032263074, -0.039024882, 0.03060584, 0.052302793, -0.044738464, -0.039452374, 0.012869797, 0.0638892, -0.0102539705, 0.01453494, -0.004128585, 0.024698088, 0.085861914, 0.028552093, -0.010965269, 0.062352706, -0.023755973, -0.020207921, -0.001570324, 0.01620641, 0.01750035, -0.037374504, -0.018373521, 0.015912188, 0.042351477, 0.033132028, 0.015843643, 0.001678424, 0.04187851, 0.041658636, -0.0019604187, 0.001924564, 0.018906072, -0.04886573, 0.019530205, -0.037044954, -0.0256489, -0.04239208, -0.018148901, 0.021086892, 0.021858828, 0.041722436, 0.04177411, 0.0032026852, 0.021080565, 0.0016958573, 0.0049744835, -0.02146337, 0.03579689, -0.026400534, -0.07197552, -0.03250509, 0.03880343, -0.04301532, -0.0095432, -0.03718785, 0.0009266907, 0.0015660151, -0.018956758, -0.03860148, 0.001632452, 0.045827296, 0.026029594, 0.002904246, -0.019041318, -0.042406842, -0.015436585, -0.03810953, -0.012494638, -0.017166056, 0.011962417, 0.00056682364, 0.024883952, -0.039338086, 0.005302635, -0.0062260963, 0.022757309, 0.0020774745, -0.019055424, 0.060160022, 0.050011244, 0.013616421, -0.016966745, -0.064391166, 0.04676743, -0.037770756, 0.023431169, 0.023740156, 0.034842253, -0.034110654, -0.029249152, -0.05344382, -0.0012114206, 0.041026432, 0.00639377, 0.033201627, 0.0045804624, 0.02801796, 0.001034519, -0.0010661556, -0.035287537, -0.032777958, 0.033484247, 0.0149541255, -0.09193615, -0.055233404, 0.035287537, -0.018911345, -0.044728976, 0.00736528, 0.002047683, -0.03319952, -0.021430349, -0.004290987, -0.004179204, -0.01529791, 0.044023477, -0.04866194, 0.028552093, -0.01681436, -0.050154664, 0.019722825, -0.057526533, 0.08629217, 0.018496608, 0.035483684, -0.03381116, -0.038046256, 0.011405018, -0.007715129, 0.0010645739, 0.022061301, -0.00812746, 0.009931805, -0.00044159516, 0.008108478, -0.031790633, -0.036970083, -0.010660502, 0.031714704, 0.039948672, -0.015730806, 0.033231158, 0.009143787, 0.012256045, 0.018089846, 0.033897635, -0.0018575996, -0.041823674, 0.01309547, 0.0022658445, 0.023858264, 0.015236219, 0.02692025, 0.019661134, 0.021271639, -0.036863044, 0.023480736, -0.013251545, 0.011750122, -0.003268463, 0.024980312, 0.006695241, 0.019066364, -0.01565066, -0.022137757, 0.016327683, -0.04833977, -0.016766116, 0.017476095, 0.018899217, -0.021366615, -0.01617161, 0.0030771932, 0.0016625068, -0.037765745, -0.027947832, -0.042935174, -0.044455316, 0.00047138633, -0.018265957, -0.025676318, 0.0035063974, 0.013707245, 0.0038406912, 0.05295556, 0.011191998, 0.025172241, 0.021779737, -0.02169458, 0.03278824, -0.03224198, 0.025597228, 0.063992545, -0.01407779, 0.025980428, 0.025134277, -0.04118672, 0.026320413, 0.009401363, -0.024944458, 0.04282761, 0.05270669, -0.033638213, -0.0022344715, -0.029274462, 0.019732317, 0.008860376, -0.013888497, 0.002042674, 0.02780794, -0.017813552, -0.0246302, -0.015821498, -0.019083502, -0.018358758, 0.018620947, 0.006962176, 0.005020739, -0.04133647, -0.019140974, 0.06126546, -0.03838266, -0.056645453, 0.055329368, -0.017777698, 0.02777594, 0.05739788, -0.012168253, 0.028350672, 0.0051109036, -0.0036777623, -0.018022355, -0.002719699, -0.01060883, -0.040079437, 0.00045029522, -8.014622e-05, 0.04309468, 0.07107599, 0.026451416, -0.0014579231, -0.052206825, -0.008343116, -0.0077929017, -0.03599541, -0.007272215, -0.0124606285, -0.011136634, 0.013323518, -0.014531776, -0.020506889, -0.020600481, 0.06441647, -0.024920203, -0.021698007, -0.010416315, -0.014554712, -0.005951384, 0.027646823, -0.021879919, 0.011344909, 0.035555396, 0.009595402, -0.03124648, 0.006146477, -0.0081407735, 0.018503759, 0.01911158, -0.034937583, -0.051555116, 0.029239926, -0.027163243, 0.004095894, -0.00866502, 0.030601094, 0.001960946, 0.026624363, 0.0069786534, -0.045259416, -0.004422806, 0.013682858, -0.02092871, 0.025167761, 0.015434476, -0.0011283745, 0.04404035, -0.0069057406, 0.07186374, 0.02201912, -0.0015175054, 0.022113107, -0.009394443, 0.015965972, -0.0055553988, -0.015282092, 0.0045910077, -0.035044465, -0.03746625, 0.03082677, -0.0063579157, -0.032844134, 0.0059150024, 0.015027417, 0.05043939, -0.00693133, -0.040856645, -0.02661751, 0.04158007, -0.020834856, -0.0005826419, 0.017322656, 0.0061185313, 0.010446427, 0.011052798, -0.0078058206, -0.006662748, 0.0016835979, -0.046194542, 0.00041971312, 0.011875943, 0.027091531, -0.014464812, 0.057483822, 0.008108478, -0.06077193, -0.027688412, 0.0069566723, -8.739629e-05, -0.009743681, 0.048897635, 0.009052569, 0.066589914, 0.020482633, -0.028825222, 0.04013006, -0.04249042, 0.029048787, 0.028546184, 0.012101552, -0.035153084, -0.0014596367, 0.0190054, -0.011825259, 0.0066141724, -0.0016714706, -0.01930364, 0.025478985, 0.03781636, -0.038786553, 0.02586614, -0.007863293], [-0.021220079, -0.057564843, -0.042383578, -0.03658656, 0.015575229, 0.016976062, 0.019052587, -0.030141609, 0.022354873, 0.027515892, 0.01347476, 0.013684547, -0.019079136, -0.01489043, -0.023256, 0.0024721513, 0.0060218666, -0.027650196, 0.02090579, 0.044433128, -0.012011458, -0.01187403, -0.018616356, 0.047529437, -0.02428632, 0.031925056, 0.006332122, 0.005915672, 0.0050000027, 0.009585735, -0.0062217624, -0.052882902, 0.010212395, -0.020454982, -0.003857368, -0.016904745, -0.027621046, -0.0020806883, -0.044795442, -0.03341803, -0.06389592, 0.020949516, -0.029472167, 0.02903177, 0.018144727, 0.060152035, -0.024187414, 0.037565608, -0.044463582, -0.04017493, 0.02655285, -0.016219687, -0.044179097, 0.010214477, 0.0073211906, 0.038508087, 0.026834996, 0.030223727, 0.038747028, 0.015875854, 0.03305194, 0.0248756, -0.10469552, -0.008795423, 0.026104387, 0.031875193, -0.0015435327, 0.012692224, -0.0030083305, -0.041443538, -0.027545042, 0.005578087, 0.00252655, -0.032373, 0.06088915, 0.01203176, -0.08338734, -0.015003132, 0.0044539324, 0.0010536184, -0.0058276965, 0.011539308, 0.010657997, -0.055987533, -0.048803773, 0.0062857918, -0.023671536, -0.0124201, 0.045642916, -0.0058395397, -0.046086438, 0.033384193, 0.06527437, -0.0061655417, -0.0026833694, 0.01981313, 0.018756127, 0.057799093, 0.019207096, 0.032914124, 0.07696412, -0.014524084, -0.00021759511, -0.031703297, -0.025921928, 0.030334216, 0.014964609, 0.002242583, 0.011607503, 0.009366481, 0.00372046, -0.017678302, -0.0053836573, -0.06322543, 0.03034593, -0.016054146, 0.030514266, -0.0006600732, -0.03950028, -0.017131971, 0.0099083865, 0.018614924, -0.011405784, 0.04527436, -0.034323417, -0.0013852167, -0.0015111929, -0.02808851, -0.05665073, 0.013643682, 0.02744249, 0.019579347, 0.044918295, -0.034053896, -0.057782438, 0.008639255, 0.00018219688, 0.047053646, -0.020343581, 0.047283728, -0.017513804, 6.8714246e-05, 0.01738054, 0.041422717, 0.035877164, -0.032261338, -0.02112859, -0.07460025, -0.005569628, 0.0114638265, -0.011681942, -0.015743567, -0.006053621, 0.021768881, 0.0147548225, -0.034837082, 0.008605939, 0.017258728, -0.037393045, 0.041755356, -0.016097873, 0.0062300917, 0.005714214, 0.004409164, -0.0004867259, -0.04913277, 0.013520309, 0.012093707, -0.015902143, 0.013987253, 0.07093809, 0.010003389, 0.020324841, 0.036845412, -0.050460726, 0.0014151491, 0.023728538, -0.028612455, 0.03515983, 0.006032408, -0.011028636, 0.0135495905, -0.007958359, 0.001495576, -0.04306926, 0.05725771, -0.0073083555, -0.012693395, 0.02035217, 0.05663303, 0.015737904, -0.05155026, 0.040929224, 0.033753272, -0.02943963, 0.0106808515, -0.027353475, 0.016938843, 0.026845407, 0.03323479, 0.014541913, -0.00043831358, 0.017841758, -0.008633008, -0.047066133, -0.040209286, 0.055192117, 0.008813122, 0.05531705, 0.0051145265, -0.0024138482, 0.030338772, 0.033644997, 0.04674443, 0.03719731, 0.043033857, -0.010681714, -0.0146028185, 0.02782927, 0.0742818, -0.0045873267, 0.00934247, 0.035173364, -0.047580972, -0.051133808, 0.024077054, -0.010078089, 0.004714214, -0.0145518035, 0.017026557, 0.07145032, -0.02192401, 0.008809999, -0.06626396, 0.000924519, -0.0058737667, -0.03661975, 0.02770762, -0.057178583, 0.030768365, -0.02243364, 0.027657483, 0.023778252, -0.029395122, -0.030932862, -0.010424784, -0.026164511, -0.000103071376, -0.017854773, 0.024495589, 0.03744302, 0.008180118, -0.02676732, 0.010118433, -0.0023529422, -0.006545813, -0.0082602855, 0.0028474769, 0.0008709661, 0.02698596, -0.0032587212, -0.05909425, -0.013342504, -0.058958385, 0.04195942, -0.0030752227, 0.014783974, -0.0018844362, 0.009098912, -0.034490388, -0.044697575, -0.071495354, 0.019266017, 0.0107125575, -0.012198861, 0.032218654, 0.03756691, 0.0025801677, 0.029492987, 0.019262895, -0.06460389, -0.0174909, 0.01978762, -0.008335588, 0.01583538, 0.006099951, 0.03388133, -0.05326916, 0.0046173893, -0.025426352, -0.021945158, -0.014916717, 0.0096543515, 0.041678313, 0.037311837, 0.0012451855, 0.054904763, -0.012871427, -0.074933924, -0.020715004, 0.031699914, -0.0062814974, 0.024658004, 0.0051289718, -0.0075252512, -0.007891727, -0.04543261, 0.04706822, 0.02214655, 0.019304018, -0.036793355, -0.015489076, -0.053208057, 0.020400843, 0.0184732, -0.016942844, 0.017578874, 0.09131915, -0.017682467, -0.009882358, -0.01866659, 0.0004838628, -0.01285477, -0.039440155, 0.039394084, 0.029105429, 0.0037079665, 0.0031978153, -0.035691846, -0.02665384, 0.03923349, 0.030044785, -0.012481266, -0.014038528, 0.036080185, 0.0019885486, 0.009878584, 0.02397919, 0.013667368, 0.04992871, -0.0043522925, -0.041971914, -0.0022531245, -0.011861537, 0.042375088, -0.06979493, -4.880273e-05, -0.055431575, -0.010369084, 0.01000365, 0.029110895, -0.016260289, 0.0077116126, 0.015565079, -0.040605955, 0.0013824839, 0.006016141, -0.013276425, -0.02174858, 0.011967732, 0.0019718907, -0.015917044, -0.040595233, 0.043708246, 0.012871427, -0.043873005, 0.06959295, -0.02803333, 0.036595542, -0.012714217, 0.05582304, 0.015504953, -0.027794912, 0.03538992, 0.013786577, 0.047042187, -0.044674672, 0.0009786574, 0.03777826, -0.029214486, 0.009327569, -0.027415944, 0.05413433, 0.0161593, 0.03450184, 0.0430172, 0.031170761, 0.011805056, -0.037163995, 0.03970434, 0.012536185, 0.011893031, 0.035813656, 0.033903193, 0.009736601, 0.007599431, 0.02875483, 0.021205634, 0.020308703, 0.004394328, -0.007332643, 0.03645785, -0.013673614, -0.024657222, -0.009836548, -0.051623143, -0.0064057815, 0.004012081, -0.007054663, 0.028380547, 0.04235322, -0.012793343, -0.0449766, 0.029004179, 0.040770456, -0.023371171, -0.04055494, 0.033732448, -0.0034505483, 0.01305779, 0.020076077, 0.04491205, -0.045351796, 0.047246315, 0.025391996, 0.010827179, -0.0038314702, -0.022586163, -0.060704876, 0.032064047, 0.04962418, 0.03403854, 0.0056673638, 0.05936078, 0.036410224, -0.016520571, 0.022410216, -0.02061577, -0.10080588, -0.01717648, -0.027278515, -0.020685071, -0.0076724077, 0.0052774623, -0.00987455, 0.021825103, -0.04868925, 0.016258206, 0.016110368, -0.075160116, 0.012918669, -0.032728806, -0.01976719, -0.01289583, -0.04555546, 0.025451342, 0.06799379, -0.044282947, -0.02026758, -0.015758468, -0.049259786, -0.005731393, 0.014464089, -0.04222022, -0.03165228, -0.010997175, 0.03897243, -0.04267363, 0.011035664, 0.008363618, 0.028955767, -0.04431288, -0.035448223, -0.028625991, -0.032745462, -0.01726927, 0.027881324, 0.015701987, -0.0023594494, -0.0128578935, 0.015645634, 0.02917232, 0.01683499, 0.030481016, 0.022586163, 0.01808226, -0.026409697, 0.0027957456, -0.020216564, 0.0033671535, -0.019030722, 0.028287886, 0.010324837, 0.062334236, -0.052081235, -0.026207717, 0.011384701, 0.037219178, -0.04867389, 0.025633538, 0.039205644, 0.035707463, -0.039281644, 0.01586154, 0.008927647, -0.06369186, 0.013528377, 0.055617414, -0.015937671, 0.016456021, -0.025048327, -0.055071346, -0.015592864, -0.03150236, 0.029846972, 0.03238523, 0.0023888613, -0.036116622, 0.0068370677, -0.023397721, -0.043882374, 0.02059241, 0.0013930252, 0.007961076, 0.016006775, -0.028954726, 0.039024748, -0.028168676, 0.018829785, 0.018528901, -0.022467086, -0.031180652, -0.04656327, 0.035516154, 0.012324316, -0.00071577344, 0.0209162, 0.0099823065, 0.021696001, 0.017518489, -0.014544882, 0.03038315, 0.002936493, -0.013509638, -0.03940033, -0.016158259, -0.022592932, 0.04292923, 0.020098917, 0.006569498, 0.013008856, 0.00025792245, -0.094925605, -0.061501853, 0.06923689, -0.024877159, -0.035069253, 0.015176347, 0.040437292, 0.0033357644, -0.047058847, 0.014638478, 0.016442485, 0.014135093, -0.00033628335, 0.050565355, 0.017883988, -0.06357558, -0.043302473, -0.004033318, -0.029093195, -0.042473733, -0.0689662, -0.018837074, 0.004650315, -0.014019788, 0.03194744, -0.05148155, 8.953674e-05, -0.022571392, -0.01837169, -0.00516398, 0.0012857893, 0.00022328878, 0.02414577, 0.037457593, -0.0023097359, -0.012719944, 0.049380038, -0.014954719, 0.049888626, 0.0028825824, 0.031543482, 0.011187928, -0.023583302, -0.036514334, -0.020639783, 0.026133277, 0.0030394017, -0.047954213, -0.03537066, -0.07201253, 0.00092360796, -0.023552328, 0.030700693, 0.0009825616, -0.025390435, 0.05576265, -0.0062431055, 0.03164317, 0.007165022, 0.020214481, -0.0011081474, 0.021338377, -0.010418798, -0.0036887056, -0.03392281, 0.033479456, -0.020228015, -0.022301158, 0.02744952, -0.008419187, 0.021456543, 0.041931305, -0.009053102, 0.00041957333, 0.0059010964, 0.046719443, -0.0066413363, -0.0078008887, 0.04862574, -0.012770438, 0.07735975, -0.014019528, -0.07271841, 0.08729208, -0.012943786, -0.048814185, 0.007874548, -0.004751174, 0.018478926, 0.044077065, -0.018784171, 0.0001624155, 0.013945869, 0.0064450842, 0.02929101, 0.007376631, -0.029036976, 0.017844101, 0.0375539, 0.019651754, -0.0061228555, -0.017768359, 0.035597105, 0.02442583, 0.018034887, -0.018785149, 0.011411966, -0.034115583, 0.025233712, -0.047716837, 0.039023444, 0.016932856, 0.047140058, -0.0075460738, 0.067223355, -0.0038022534, -0.010371687, -0.018894335, 0.038116105, 0.02422906, 0.027374819, -0.027155662, -0.0062841005, 0.031102175, -0.059241336, -0.044849582, 0.008165022, 0.039838728, -0.013183765, -0.010044773, 0.044853743, 0.012971375, 0.03832433, 0.0009297246, 0.009712655, 0.043501325, -0.032083306, -0.04540138, -0.036439374, 0.0037126516, 0.026044913, -0.007396932, -0.0023956285, -0.0029239994, 0.050240528, 0.08406875, 0.0016043736, 0.035078883, 0.059348285, 0.07041961, 0.0057170773, 0.010668146, 0.030034373, -0.027794002, 0.008294643, -0.0009318068, -0.04757316, -0.059448235, -0.022699127, 0.020341499, -0.028035413, 0.044701744, 0.050825376, 0.001978658, 0.021086944, -0.015245713, -0.01778658, -0.018248057, 0.008937016, -0.0059286864, -0.044643436, -0.030122867, 0.026120784, -0.01165227, -0.020313585, -0.04500679, 0.0055451775, -0.015230487, -0.028080182, -0.029861547, -0.0038492992, 0.040318605, 0.028473986, 0.0023139003, -0.030497154, -0.05505677, -0.0059770984, 0.012252479, -0.018293606, -0.030669197, 0.014522652, -0.0010681942, 0.0041842815, -0.07564814, -0.032220736, -0.008488422, 0.01728033, -0.003842532, -0.00633941, 0.0534956, 0.018516863, 0.015000008, -0.011236081, -0.0061743916, 0.020919584, -0.04581887, 0.030311313, 0.0040432084, -0.01146695, -0.04566322, -0.015331605, -0.007969812, -0.003383656, 0.020440407, -0.029824065, 0.020950556, 0.012163462, 0.0037198092, -0.0024633016, 0.004129622, -0.021516928, -0.00450703, 0.02110178, -0.011912552, -0.09137954, -0.040703822, 0.0122623695, -0.031352956, -0.054163482, 0.005914891, 0.021298293, -0.035049472, -0.058177542, 0.038519543, -0.02685354, -0.012585118, -0.016221702, -0.045896433, 0.009575747, 0.018089676, -0.02396045, 0.015495632, -0.031662952, 0.04693313, -0.017821327, 0.060493525, -0.023445744, -0.0108277, -0.0002634046, 0.0027657486, 0.014877285, 0.027152538, 0.004825094, 0.0013643943, 0.015504953, 0.0052901506, -0.04812184, -0.02851433, -0.016095255, 0.0057303514, 0.039004706, 0.006328478, 0.020928694, 0.002508851, -0.0062855314, 0.009799068, 0.031696748, -0.01706794, 0.003541907, 0.024699649, 0.000381312, 0.01908382, -0.017896937, -0.017011462, 0.020030463, 0.0054096854, -0.010199771, 0.025326407, 0.037407618, 0.020322759, -0.0012420621, 0.056401905, 0.024154099, -0.00017282674, 0.011899537, 0.009024992, 0.010569501, -0.031331614, -0.023930518, 0.055181704, 0.010254039, 0.0039125476, 0.018663205, 0.008862836, 0.041928183, -0.080444604, -0.01718585, -0.07656016, -0.040884975, -0.013680382, -0.0098657, 0.011541911, 0.02872776, 0.011697429, -0.019079136, 0.031839944, 0.019994805, 0.028105428, 0.007937537, -0.032982446, 0.039502364, -0.04634255, -0.027008863, 0.028072892, 0.0063123405, 0.013197821, 0.025495492, -0.017894857, 0.020312348, 0.00670068, -0.032414384, 0.037424278, 0.02491412, -0.056716323, 0.008873508, -0.0010540088, 0.026624689, -0.004559086, -0.021320157, 0.024735047, 0.022271745, -0.022697564, -0.030460194, -0.0006382096, -0.03466009, -0.0011358673, 0.03789799, -0.004102553, 0.0006733151, -0.020841239, 0.0022436243, 0.069757454, -0.050323814, -0.05484646, 0.06355235, 0.009848749, 0.037420113, 0.05518327, -0.03413953, 0.04053724, -0.01053503, -0.043206684, -0.052991178, -0.01900886, -0.006808697, -0.035427824, 0.016951596, -0.0022865706, 0.052599717, 0.03214421, 0.038056243, -0.002154608, -0.10355445, -0.026777342, -0.0014410511, -0.029287886, -0.056653664, -0.060984932, -0.00029333695, 0.020559095, 0.027714485, -0.004662678, -0.02339746, 0.06673611, -0.0053060935, -0.016396938, 0.005166062, 0.0041613765, -0.032805845, 0.012808294, -0.029826669, 0.06965074, 0.015606463, 0.025762636, -0.047046352, -0.011810521, -0.02176576, 0.023226976, 0.018003132, 0.014209794, -0.0117501365, 0.024512244, -0.0031384712, 0.0005257681, 0.022139523, 0.034459677, -0.04551486, 0.048369624, 0.005231653, -0.038337864, -0.05400107, 0.01740865, -0.044081233, 0.05443834, 0.023149414, -0.0018404487, 0.024383146, -0.036811057, 0.10663202, -0.012868304, 0.041433647, 0.016286317, 0.011133269, 0.030848531, 0.0077751214, -0.025843844, -0.004344614, -0.032857902, -0.027470343, -0.0072071874, -0.017484913, -0.01833343, -0.0045944843, -0.01905467, 0.06512549, -0.016230617, -0.048538808, -0.037699915, 0.048639275, -0.008905783, -0.03290996, -0.034486223, 0.006082252, -0.032862067, 0.00083088275, -0.01398387, -0.006768093, 0.013769919, -0.056513306, 0.012048939, -0.005467988, 0.02288731, -0.015735563, 0.03151368, 0.026674662, -0.03098596, -0.037605435, 0.005706406, 0.02905988, 0.030629896, 0.029141087, 0.0221038, 0.04411871, 0.026506519, -0.0062388764, 0.0031668418, -0.023302197, 0.059387848, 0.054671034, 0.011872988, -0.0028755872, 0.006433111, 0.011049459, -0.040347755, -0.0032196788, -0.00015408649, 0.0013308179, 0.049046356, 0.034800645, -0.039683517, 0.002500782, 0.010193394], [-0.018493349, -0.08306263, -0.033231623, -0.016730646, -0.0206922, 0.049074847, 0.009331631, 0.004908212, 0.030546682, 0.04296478, 0.013042147, 0.043720488, -0.08387296, -0.004027997, -0.007348808, 0.05392278, -0.021248307, -0.016023654, 0.020699082, 0.03776403, -0.014755293, -0.03280178, 0.010989697, 0.0054413294, -0.024911346, 0.02081963, -0.004404193, 0.0006463917, -0.0025568584, -0.010447228, 0.010810953, -0.044765223, -0.010331452, -0.0040217615, 0.024412198, 0.02972986, 0.03925946, -0.006994704, -0.06281015, -0.048159815, -0.09165044, -0.0052043884, -0.04375095, 0.034172762, 0.0015287825, 0.039473537, 0.016243188, 0.053215075, -0.020350946, -0.046752203, 0.032743014, 0.013575199, -0.035491265, 0.028612703, -0.0111978, 0.03748656, 0.0041701095, 0.041516896, 0.027857324, -0.00067808776, 0.00086462684, -0.03579472, -0.051039997, 3.9749968e-05, 0.015107587, 0.011406423, 0.04595616, 0.00064119557, -0.008276308, -0.025077034, -0.04615075, 0.02431659, -0.009558698, -0.035037782, 0.042171344, -0.025753302, -0.06168364, 0.037559304, -0.032250997, -0.04032641, -0.0059845787, 0.029669587, 0.026888646, -0.059542857, -0.049109142, -0.020489162, -0.01235003, -0.009095209, 0.051603254, 0.0073051616, -0.052650787, 0.015655773, 0.01809455, -0.023628108, 0.017407231, 0.018502701, -0.0033628996, 0.05035204, 0.023577707, 0.024995198, 0.006346745, -0.052458532, -0.019447349, 0.018697554, -0.0045600752, -0.015936881, 0.048175406, -0.029845992, -0.004774673, -0.01355448, -0.020371469, 0.015871929, -0.018022064, -0.056663193, 0.009509856, -0.0322988, 0.026348254, -0.016990125, -0.048453912, -0.010244581, -0.0133993765, 0.02418461, -0.0011708054, 0.041110303, 0.004499281, 0.013883911, 0.016580673, 0.0013769597, -0.065354146, -0.0066229166, 0.026734842, 0.04871424, 0.037426285, -0.012595284, -0.0071487594, 0.018040251, 0.012373932, 0.07094513, -0.037083343, 0.057195272, -0.025204077, 0.0018913711, 0.0054932903, 0.02949188, 0.012643868, -0.016793713, -0.004327291, -0.04797016, -0.008404911, -0.027975667, 0.013875597, 0.0042566243, 0.010670659, 0.017832927, -0.01606873, -0.056953136, 0.018171063, 0.018007517, -0.024589904, 0.025153546, -0.021088788, -0.018336946, 0.031470545, -0.008253705, -0.04004303, -0.040144093, 0.026953729, -0.008684719, -0.008897758, 0.047404826, 0.031762566, 0.013331049, 0.007328024, 0.031622272, -0.049507156, -0.03625145, -0.0011322247, -0.010871292, 0.015081607, 0.019078948, 0.008188104, -0.014246077, -0.024583668, -0.008901136, -0.042491417, -0.00041393228, -0.038229857, -0.036051404, -0.0072468356, 0.02680226, 0.05070122, -0.017852673, 0.004322095, -0.0008635876, -0.04079542, 0.006885838, -0.0012803127, -0.0056291022, 0.036608424, 0.043427754, 0.023448845, 0.017149124, 0.016973497, -0.0102429725, -0.015239048, -0.061978776, 0.031902857, 0.0014600969, 0.041376993, -0.04831518, -0.012781304, 0.053985395, 0.029662507, 0.05775385, 0.02765195, 0.03551361, 0.023685493, -0.035693914, 0.03475784, 0.06881265, -0.023235936, 0.0075454796, 0.06030772, -0.010806033, -0.032930642, 0.0047710356, -0.024444412, 0.015440135, 0.016181355, 0.02481093, 0.036438122, 0.02276764, -0.030902093, -0.03576562, -0.0036510867, -0.018021544, -0.042678736, 0.0399521, -0.033006504, 0.06076809, -0.039068244, 0.032646805, 0.045584124, -0.014588239, -0.035998404, -0.029551893, -0.054292746, 0.011131551, -0.023300108, 0.03835794, 0.06329598, -0.048764125, 0.0006256074, 0.014985479, 0.0009076893, -0.02708298, -0.00046576312, 0.0026842922, -0.018566614, 0.049799178, 0.015879203, -0.043240987, -0.0038450952, -0.016743701, 0.05639196, 0.038433805, 0.026304608, -0.025102627, 0.011533727, -0.03527303, -0.037274558, -0.09656385, 0.0183728, 0.018618574, 0.0052729766, 0.048743337, 0.02215814, 0.021209337, 0.053960193, 0.012405109, -0.06488338, -0.007405965, -0.0044735605, 0.022132939, 0.016698625, -0.02503657, 0.017175104, -0.052717295, -0.017546104, -0.06448952, -0.012150241, 0.014582263, 0.009733287, 0.02786343, 0.032043155, -0.024987923, 0.06278105, 0.026075982, -0.05989827, -0.04051691, 0.013301951, -0.0060907085, -0.0014070971, -0.026878254, -0.027309658, -0.04266185, -0.07460732, 0.038208812, 0.01805428, 0.0069975536, -0.026701588, 0.0006495093, -0.052372277, -0.01926318, 0.007854557, -0.0013322736, 0.03316213, 0.0706292, -0.024294766, -0.018243482, -0.029708555, -0.019528925, 0.009492189, -0.06730372, 0.03342323, 0.07068324, 0.035280243, 0.004135036, -0.04133581, -0.023251396, 0.035813943, 0.037266247, -0.013549284, 0.0061233137, 0.030114368, 0.019434879, 0.012855088, 0.0120969815, 0.03807995, 0.05441953, 0.03365939, -0.059264347, -0.039231144, -0.008012867, 0.013085794, -0.024106668, -0.0209672, -0.059638467, 0.026372157, 0.008992586, 0.0033816053, -0.020122578, -0.009717958, 0.01956426, -0.0016087047, -0.007354134, 0.01469372, -0.017065987, -0.00045725456, -0.009260022, 0.012968363, -0.02047578, -0.027105842, 0.033057168, 0.006185407, -0.009850718, 0.06282833, 0.013047441, 0.044815104, -0.035430994, 0.047604356, -0.013059294, -0.013427176, 0.0018496728, -0.008451935, 0.04494851, -0.04416248, -0.0027991252, 0.056084093, 0.007389467, -0.0071497983, -0.012286638, 0.038775187, 0.036804836, 0.016782021, 0.036118954, 0.0128384605, 0.009178866, -0.01635984, 0.03354586, 0.0032828797, 0.0054288586, 0.011067638, 0.021883268, 0.008714856, -0.008053396, 0.027418647, 0.023448845, 0.020705123, 0.00344188, -0.009745757, -0.0051259273, -0.012223246, -0.021816498, -0.01976327, -0.06863391, -0.010023228, 0.0130696865, 0.0034426593, 0.015705395, -0.004851055, -0.017450497, 0.0029337038, 0.05581831, 0.019464431, -0.024454806, -0.04095338, 0.023901423, 0.0018898529, 0.00824721, 0.024052627, 0.040533535, -0.07099916, 0.03307743, 0.009317666, -0.03435904, -0.015556527, -0.023505246, -0.028998254, 0.01592181, 0.021125162, 0.012931472, 0.010293294, 0.08322448, 0.05382094, -0.014239322, -0.013186598, -0.026707824, -0.05658733, -0.017480893, -0.028391352, -0.012657637, -0.026969185, -0.00025577677, -0.004757006, 0.03353131, -0.049599648, -0.009633263, 0.054858074, -0.025617685, 0.0077166907, -0.036118954, -0.0291188, -0.065670066, -0.011679477, 0.03722156, 0.06305956, -0.06782956, -0.0031714241, -0.054791566, -0.023170823, -0.023189042, 0.01966922, -0.008257602, -0.0010953324, -0.00757146, 0.038021367, -0.05139957, 0.009060915, 0.047721658, 0.023735669, -0.05582039, 0.0008547543, -0.031247374, -0.0366926, -0.010412933, 0.023686826, 0.030198546, 0.020442396, 0.0037146737, 0.019361094, 0.009913558, 0.03819686, 0.02922688, 0.034824092, 0.018270437, -0.0028557626, 0.0034790318, -0.008314239, -0.0011524893, 0.032903623, 0.0011649599, 0.025353726, 0.05169951, -0.033048853, -0.021786101, 0.02684292, 0.040809967, -0.054063335, -0.007259436, 0.06040333, 0.01436299, -0.058740582, 0.045193378, 0.005806094, -0.06461839, 0.020058276, 0.04190738, -0.0034190172, -0.01577736, -0.015392331, -0.03685368, -0.015879203, -0.05424728, 0.03997652, 0.034816295, -0.037836514, -0.024032203, -0.02182949, -0.02876339, -0.025373211, -0.026415804, -0.0028266646, 0.03336422, 0.011229755, -0.045032687, 0.04693926, -0.044097003, 0.021082813, -0.025435826, -0.016070418, -0.034587875, -0.025754863, 0.0066642254, 0.0037245462, -0.042875405, 0.03298468, 0.0306823, -0.0016203958, -0.022826355, -0.016858922, 0.010145076, 0.012309501, 0.014738666, -0.030494722, -0.019968515, 0.0040895706, 0.008571444, -0.011430324, -0.026689118, 0.024984643, 0.020821711, -0.03780703, -0.04936894, 0.033663288, -0.0037292228, -0.0104642445, 0.015430263, 0.07198304, -0.019861475, -0.05085918, 0.00027435273, 0.021977609, -0.006303358, 0.03748864, 0.037903287, -0.0138995, -0.06495093, -0.03705087, 0.035851873, -0.035759386, -0.0017951139, -0.029821312, -0.036077905, 0.031281408, -0.010269522, 0.018431516, -0.024914138, 0.0010267444, 0.012246109, 0.018894745, -0.02848644, -0.0016398812, -0.019791847, 0.016952192, 0.044753272, -0.01974924, -0.018537516, 0.01486545, -0.0012039305, 0.03284231, -0.0019448907, 0.05021902, 0.025333462, -0.050040275, -0.015996374, -0.02530166, 0.0021807924, -0.00032007816, -0.04022697, -0.032718644, -0.059243564, 0.004027997, -0.00089996017, -0.0018814986, -0.041038077, -0.0027261206, 0.020011123, 0.030674051, -0.0074054454, 0.0030054096, 0.0073306705, -0.04214302, -0.021668604, -0.02111295, -0.022375338, -0.026869942, 0.032770604, -0.060860578, 0.00469933, 0.0066904654, 0.010111561, -0.0044270554, 0.006861741, -0.011857183, -0.018715221, 0.005255829, 0.069174305, 0.046267927, 0.0022141123, 0.011676619, 0.008921141, 0.057653826, -0.009167174, -0.06526893, 0.09603385, -0.0028160126, -0.034187835, 0.015361675, 0.02012232, 0.0019204692, 0.022048501, -0.009971526, 0.0052189375, 0.013773754, -0.012185834, 0.00025149, -0.0013135676, -0.03617442, -0.00023901943, 0.043389298, 0.00086982286, -0.0022530179, -0.025287606, 0.029195704, -0.023748139, -0.008973621, -0.0008833327, -0.016131733, -0.02013583, 0.002598297, -0.032635506, 0.048597846, 0.049093552, 0.033217464, 0.03218572, 0.010243151, -0.020462142, -0.004348075, -0.040912982, 0.036764305, -0.0069850828, 0.030271811, -0.05493498, 0.0057759564, 0.017335664, -0.008181739, -0.038393795, 0.0151642235, 0.044756908, -0.034777846, -0.006921171, 0.011882383, -0.0055916584, 0.081191786, 0.053070627, 0.0035322914, 0.03369966, -0.026839804, -0.070550226, -0.014845185, 0.03235284, -0.021476936, -0.011243267, 0.0028035422, -0.029086586, 0.025444139, 0.041943755, 0.05140399, 0.01586985, -0.002088822, 0.04484836, 0.009679248, 0.010785491, -0.002434361, -0.018973466, 0.018719183, 0.0035187816, -0.010219639, -0.07877353, -0.016739024, 0.0143998815, 0.02670003, 0.048136435, 0.038033187, -0.02487309, 0.032144476, -0.015054068, -0.003357184, -0.003293272, 0.0023652532, -0.003240402, -0.07040057, -0.015392851, 0.01603197, -0.025018059, -0.010427482, -0.024371147, -0.008305406, 0.0002026469, 0.0050770845, -0.04852718, -0.0022654885, 0.022845581, 0.0139143085, -0.0038467676, -0.043160673, -0.035152484, 0.020717788, -0.011491119, 0.00525531, -0.03987052, 0.011047683, 0.019501908, 0.03404416, -0.03908487, -0.036457736, -0.026541028, 0.0037494872, 0.01933771, -0.013254147, 0.062772736, 0.04295803, -0.024783196, -0.015928047, -0.068565324, 0.06405305, -0.038234793, 0.010694561, 0.000667176, 0.015792688, -0.08478747, -0.035020765, 0.022976521, -0.0059860074, -0.024849707, 0.012858076, 0.03514131, 0.008415563, 0.0013099303, -0.0014610064, -0.01634789, 0.012592687, -0.014303755, 0.0071872105, -0.014642538, -0.056890782, -0.04497722, -0.008835405, -0.012978755, -0.036921486, 0.010184825, 0.045323282, -0.021327807, -0.03028584, 0.053340822, -0.027431117, -0.021548122, 0.0398952, -0.044998005, 0.00019745083, -0.009138466, -0.022787904, 0.0505391, -0.062076464, 0.02795488, -0.018091172, 0.059443094, -0.033744346, -0.007859322, -0.020280277, -0.014064215, 0.030938987, 0.018030183, 0.0007735656, -0.0053987214, 0.013767909, 0.00779619, -0.016789556, -0.097436786, -0.00048375453, 0.00655225, -0.008467523, -0.0036081544, 0.038351186, -0.015083912, 0.01941877, 0.004779349, 0.015602772, 0.004785065, -0.011781579, 0.025396075, 0.009012071, -0.00040789184, -0.013200108, 0.013185559, 0.0049780994, -0.033616524, -0.019155849, 0.018532319, 0.022898322, 0.023489114, 0.01777811, 0.022604743, 0.027827578, -0.007273205, -0.0025647823, 0.0013525382, 0.05332108, -0.08112527, 0.0008411471, 0.08263837, 0.02412966, 0.0034824093, -0.0042628595, -0.047608644, 0.032134604, -0.02430308, 0.0047279084, -0.049115375, -0.037421092, -0.02133716, 0.0010397345, 0.032207347, 0.032319583, 0.02263826, -0.024298208, 0.035930336, 0.039228283, 0.01597689, 0.020972395, -0.011703637, 0.06089799, -0.007937264, 0.007638514, 0.040212423, -0.030850133, 0.02604974, 0.034505054, -0.04107757, 0.009896963, 0.029450312, -0.04057095, 0.0143625345, 0.04012409, -0.044862907, -0.0011886021, -0.03619066, 0.0016419597, -0.0075893863, -0.0150722535, 0.026855651, 0.022470426, -0.0055504465, -0.045997214, -0.03536968, -0.026168471, -0.009570033, 0.0013857931, 0.006787632, 0.0058983243, -0.018490622, 0.0048361165, 0.01415047, -0.027287705, -0.05515737, 0.059214465, 0.004951859, 0.05116263, 0.027969753, -0.037099972, 0.05220236, 0.04145636, -0.047095142, -0.015058224, -0.014289205, -0.04291698, -0.027644156, 0.03675911, 0.0056606033, 0.042718228, 0.094314985, 0.025816176, 0.013318578, -0.06720395, -0.006554913, -0.0040724883, -0.028667262, -0.033341132, -0.0217357, 0.006623956, -0.006422348, -0.060735878, -0.017600209, -0.050028846, 0.05486639, -0.012352629, -0.010638833, 0.0052814363, -0.025406338, -0.008436346, 0.00040945064, -0.011048284, 0.047171004, 0.0441313, 0.045804437, -0.035216916, 0.0027796403, -0.05277653, 0.001158205, -0.0126662105, 0.016500654, -0.019412015, 0.028017234, 0.01156867, -0.029301703, 0.029805463, 0.047750887, -0.029351586, 0.016425312, -0.021291956, -0.050572354, -0.012104775, 0.00044322517, -0.038843777, 0.04823204, 0.016142124, -0.0313739, 0.0155954985, -0.03391374, 0.05776372, 0.020959927, 0.011839775, 0.036155324, -0.022720356, 0.0035868504, 0.028614784, -0.0062477277, -0.008305925, -0.017088851, -0.028521253, 0.013624887, -0.019906161, 0.0041134073, 0.045803398, 0.029328462, 0.052092988, 0.023340248, -0.029131273, -0.019612065, 0.05592269, -0.0066572106, -0.0004193232, -0.040712286, -0.0014403518, -0.01849075, -0.021941984, 0.029865999, -0.015118498, 0.012478373, -0.07949163, -0.03330086, 0.01468073, 0.061812505, 0.012201812, 0.021323277, -0.01074964, -0.0477883, -0.0358976, 0.025820334, 0.0037188304, 0.053714942, 0.033269428, 0.03253366, 0.016832164, 0.0325638, -0.017676005, 0.01563395, -0.04864149, 0.00406385, 0.052077137, -0.0033545855, 0.030991467, 0.00050505844, -0.0067907497, 0.018420083, -0.011248462, -0.0014133323, -0.040222812, 0.055020195, 0.04106607, -0.040620834, 0.000348137, -0.009509336], [0.0055632037, -0.08432835, -0.020957272, -0.05469837, 0.004417057, -0.0052497173, 0.011304152, -0.0058630207, 0.015993446, 0.024951452, 0.018147323, 0.0326187, -0.05813885, -0.048542686, -0.040912434, 0.03364993, -0.01986934, 0.0062574553, 0.020413568, 0.0433554, -0.016798915, -0.018435711, -0.017078046, 0.019686755, -0.032499693, 0.049686532, 0.020215392, 0.010167902, -0.009104818, 0.015874438, -0.025180496, -0.04529348, 0.031739686, -0.0062680533, 0.015508734, 0.04277722, 0.020227779, 0.023400495, -0.05089627, -0.041168325, -0.03182549, 0.044287026, -0.0331596, 0.013304291, 0.010145748, 0.040745415, 0.014229278, 0.02375292, -0.02112046, -0.01863778, 0.010138215, -0.0013282328, -0.0019608098, 0.04481822, -0.028951952, 0.020544833, 0.044499505, -0.024756053, 0.029397847, 0.0027907, -0.006468272, 0.025803559, -0.05236343, 0.010805651, 0.048000768, 0.033845037, 0.006367141, 0.039191682, -0.018932873, -0.04035315, -0.018558996, 0.010487957, -0.014337049, 0.02367503, 0.020309882, -0.009384715, -0.04564361, 0.008391924, 0.002199335, -0.053964917, -0.015510777, -0.0115406355, 0.00046172756, -0.020308862, -0.04135935, 0.022312576, 0.0077709663, -0.022620054, 0.031215386, 0.016013365, -0.06469498, -0.0016722301, 0.008025836, -0.004880253, -0.01942231, 0.0026794497, 0.05327437, 0.05541139, 0.03446612, 0.03060937, 0.026755681, -0.07382738, -0.016076252, -0.030614989, -0.010960602, 0.013851827, 0.03434354, -0.016839392, -0.002413982, -0.020408459, -0.011116576, 0.039581392, -0.0018264798, -0.049935877, -0.018174903, -0.00090324815, 0.044749778, -0.025174366, -0.017903594, -0.015917342, -0.027267464, 0.023750367, 0.020458004, -0.00011849646, 0.0045207418, -0.0360883, 0.004025815, 0.004323333, -0.057269536, -0.03465263, 0.048121817, -0.03239167, 0.073132746, -0.027224049, -0.04146661, -0.016132884, -0.026187206, 0.01681475, -0.046860237, 0.029144572, -0.021849826, 0.021969855, 0.007020404, -0.0021036312, -0.021255812, -0.015820267, -0.00962375, -0.037833057, -0.0075939884, -0.027304111, -0.019429332, 0.007999022, 0.018828677, 0.0091525735, -0.011645341, -0.016475093, -0.0023178314, 0.002344391, -0.019885952, 0.010239728, -0.03171823, -0.024874039, 0.028487159, -3.0773324e-05, -0.03658731, -0.031071607, 0.002636546, -0.0136896605, 0.010430752, 0.05058573, 0.06717523, 0.029741587, 0.027415585, 0.02967672, -0.071779735, -0.02489498, -0.01661453, -0.012481456, 0.0054600304, 0.02109773, -0.01672128, 0.034485023, -0.018648252, -0.010386316, -0.025756633, 0.025787918, -0.0025885345, -0.015915299, -0.0036789444, 0.0069245086, 0.05632412, -0.012157123, 0.0078000803, -0.007614419, -0.015560832, 0.036123797, -0.038971033, -0.0031330055, 0.022152709, 0.06755524, -0.002528265, 0.009994051, 0.021525493, -0.03974943, -0.012303201, -0.039359465, 0.042827275, -0.023242671, 0.06517765, -0.015941858, 0.010090841, 0.02498845, 0.025692279, 0.04023874, 0.027556555, 0.02306799, 0.018748999, -0.039159566, 0.02987745, 0.031989958, -0.0474517, 0.011243563, 0.029077599, -0.061429173, -0.032372005, 0.0073485677, -0.03852565, 0.009827034, -0.019088143, 0.012311372, 0.08285558, -0.019307515, -0.027249588, -0.031567812, -0.011682753, -0.02911795, -0.0498298, 0.028509632, -0.006179692, 0.038099162, -0.02598903, 0.022075072, -0.0049704667, -0.01988059, -0.022311045, 0.017416935, -0.022623373, 0.048765372, -0.033044167, 0.030000545, 0.039747387, -0.010219809, -0.00940738, 0.028220799, -0.019546807, 0.003906808, -0.028817112, 0.039228167, 0.0019963076, 0.012049161, 0.003208087, -0.029972453, 0.046528243, -0.009345131, 0.057687342, 0.028481033, -0.0044722194, -0.007881546, 0.015409551, -0.010782155, -0.040902216, -0.04452632, 0.039737172, 0.02889066, -0.020114262, 0.022377443, 0.020224202, -0.008261233, 0.036013726, 0.03292056, -0.057378843, 0.0047433055, 0.047680523, -0.021147596, -0.0034226065, 0.0057307337, -0.0031074674, -0.06710168, -0.019853264, -0.06356134, -0.022789625, 0.00088259426, 0.0071409433, 0.037706386, 0.0466876, -0.019432398, 0.008913794, 0.004374281, -0.054205995, 0.025252003, 0.039994594, -0.028839584, -0.036195558, -0.01318273, -0.022285506, -0.035476405, -0.06133213, 0.020310905, 0.062155478, -0.01778264, -0.03567803, 0.0064360937, -0.046240684, 0.009128313, 0.025939487, -0.013882472, 0.04283851, 0.09070903, -0.05652281, -0.04371906, -0.03439666, 0.0038771834, 0.051317137, -0.051513266, 0.07086497, 0.009052721, 0.045179836, 0.006670533, -0.044380493, -0.0130246505, 0.024628874, 0.0151644815, -0.009108393, -0.009362241, 0.04122323, 0.015729766, -0.022193057, 0.01920115, 0.01257186, 0.0071240887, 0.025181519, -0.064374216, 0.00982499, 0.008304967, 0.004900237, -0.07791703, -0.005181155, -0.03580125, 0.0047007846, 0.0053614536, 0.055354185, -0.027933495, 0.022395829, 0.01924597, -0.028509123, -0.050759386, 0.010404703, -0.013519066, -0.013706771, 0.03641825, 0.004885425, -0.017078811, -0.045225803, 0.04990999, -0.012239802, -0.017035654, 0.06568176, 0.0030588172, 0.014924424, -0.007162906, 0.037745208, 0.035663344, 0.009521343, 0.0016758054, 0.0077385334, 0.034858897, -0.012570838, -0.01787662, 0.024963677, -0.0026053898, -0.016440362, -0.019659493, 0.05786304, 0.018144257, 0.028643453, 0.023011679, 0.01635069, 0.043533146, -0.027613759, 0.020237867, 0.019014595, -0.027810147, 0.004045224, 0.040900685, 0.0321156, 0.03033458, 0.0288498, 0.016029455, 0.044104174, 0.005388524, 0.020121925, 0.03380622, 0.0023714614, -0.040331185, 0.009743269, -0.07232165, -0.029909117, -0.0024210052, 0.006358969, 0.016507156, 0.0041289884, 0.0034113699, -0.0248199, 0.025635073, 0.035904426, -0.044166613, -0.033657078, 0.045837186, 0.03461737, 0.0030954643, 0.030361908, 0.05521117, -0.049159683, 0.030806012, -0.0128236655, -0.021708347, -0.025068128, -0.039577816, -0.058253266, 0.05105955, 0.026191803, 0.030335845, 0.013383459, 0.07441168, 0.010588322, 0.003812317, -0.0024683462, 0.01806458, -0.06342829, -0.033122823, -0.025192242, -0.024381667, 0.010925504, 0.04440757, -0.029250234, 0.02599516, -0.037497487, 0.015754154, 0.018527137, -0.065557145, -0.019702077, -0.0052301884, -0.013372094, -0.048477307, -0.051686924, 0.029172601, 0.04175059, -0.06478283, -0.044347554, -0.04031331, -0.036690995, -0.021282881, 0.029071469, -0.048384603, 0.04284004, 0.032165658, 0.025837846, -0.03218098, 0.013714942, 0.03237609, 0.013587508, -0.029745929, -0.017810222, -0.014369483, -0.021346472, 0.0032402652, 0.03880759, 0.02717144, -0.00632079, 0.024496077, 0.013714942, -0.0027386982, -0.0008805512, 0.03085527, 0.016531788, 0.0015179805, -0.02562588, -0.012937565, 0.0012816259, 0.0017575271, 0.008291687, 0.018143237, 0.03735754, 0.053329535, -0.04095074, 0.00557061, -0.008313649, 0.022305936, -0.04410111, 0.009931165, 0.05702131, 0.007123833, -0.076957315, 0.03046789, 0.0069167195, -0.04437488, 0.013430837, 0.047831703, -0.024486884, 0.009846442, -0.055519674, -0.03287536, -0.002994589, -0.027424777, -0.0076869465, 0.06378378, 0.00787197, -0.022827262, -0.01659908, -0.026618926, 0.004338911, 0.0018949218, -0.030854024, 0.033373095, -0.0075153313, -0.028388072, 0.04461187, -0.037044954, -0.022391744, -0.018137109, -0.031462852, -0.0808391, -0.029309483, 0.020083105, 0.030041914, 0.010931745, 0.04657728, -0.009045698, 0.022430561, 0.035818618, -0.030714076, 0.008227458, -0.00795152, 0.003671794, -0.034233216, 0.0047780373, -0.031380106, 0.049662527, -0.019952096, -0.021738993, 0.014784603, 0.004800128, -0.035311945, -0.042533077, 0.07317954, 0.018087182, -0.014479679, 0.021412106, 0.027991721, 0.016953165, -0.010815355, 0.00011492113, 0.00054064003, 0.012010024, 0.022662062, 0.016833646, -0.012460004, -0.09171549, -0.035622485, 0.04525594, 0.007404879, -0.030999081, -0.068861246, -0.0017792345, 0.00057945785, -0.022532715, -0.00549987, -0.05172983, -0.020148484, 0.0076031815, -0.055437952, 0.03837909, -0.031122684, -0.03220652, -0.010345966, 0.0062680533, 0.0071230666, 0.0007263015, 0.047231052, -0.02310119, 0.019697992, -0.052061826, 0.04093848, 0.049263112, -0.03048883, -0.008352468, -0.0274122, 0.013908521, 0.0033303504, -0.011342077, -0.04777399, -0.048799038, 0.009073151, -0.0031769308, 0.000652752, -0.009070725, 0.025559481, 0.054091588, 0.016675312, 0.016672246, -0.001417999, 0.008019962, -0.04006285, -0.021524215, -0.010291825, 0.02084184, -0.03163651, -0.0368123, -0.0070689265, 0.024852332, 0.0073091118, -0.016335145, 0.013579081, 0.013087728, -0.012360406, -0.016676333, -0.033822566, 0.08656855, 0.023369085, -0.012083574, 0.06542639, -0.007536783, 0.080634795, -0.021588827, -0.041241873, 0.08737376, -0.0017996649, -0.031247308, -0.011620314, 0.024239674, 0.013797175, 0.016783591, 0.028008066, 0.014387247, 0.035943244, -0.004357809, 0.01859628, 0.019848155, -0.023855584, 0.008123391, 0.041793495, -0.0015190019, 0.004929861, -0.06501369, 0.011334798, -0.021377372, -0.018970732, 0.0065559945, 0.03414332, -0.04346011, 0.016368344, -0.041452818, 0.008153782, 0.016015919, 0.02108841, 0.006263329, 0.07565794, 0.027155098, -0.019875737, -0.012737348, 0.038259033, -0.013589806, 0.037785046, -0.0048246444, 0.017744333, 0.0064003407, -0.032989513, 0.018712256, 0.040492076, 0.03685444, -0.052024025, 0.0032370728, 0.028706787, 0.026358565, 0.038471, 0.011971206, 0.008503397, 0.03617002, -0.05637162, -0.07318586, -0.01503296, -0.0028449364, -0.013394696, 0.01879701, 0.00095920835, -0.01361279, 0.0046193185, 0.032266278, 0.04147018, 0.015776373, 0.03416375, 0.03289349, 0.014848831, -0.0027764942, 0.006899354, -0.05563102, 0.021456668, -0.012339976, -0.03208751, -0.07220724, -0.016485818, 0.01688217, -0.014053065, 0.027742472, 0.028829627, -0.013161278, 0.023736576, -0.007495922, 0.008649986, 0.005821138, 0.014930553, -0.017943019, -0.082933724, -0.023326436, 0.052011773, -0.028264405, -0.025576847, -0.03500038, -0.011587115, -0.029658077, -0.023775393, -0.029906053, -0.0019123993, 0.025550285, 0.023977017, -0.003213067, -0.05050605, -0.054718804, 0.02418298, 0.0068932245, -0.013473864, -0.021039251, -0.015653279, 0.013886176, 0.024394948, -0.026412452, -0.024992026, -0.011381534, 0.009646224, 0.016363235, -0.0063214917, 0.04035213, 0.007838132, -0.014865942, -0.014000968, -0.03815075, 0.019068735, -0.06078281, 0.0016824453, 0.046605878, 0.0034910485, -0.062064562, -0.0066204784, -0.0021809477, -0.002580602, 0.008969466, -0.03526291, 0.033091154, -0.0073222634, -0.0067105, -0.0050034104, -0.021104626, -0.01950186, -0.0769328, 0.0426886, -0.012712831, -0.046899058, -0.03340272, -0.00150087, -0.062901184, -0.046168156, 0.013562735, 0.019762348, -0.016651817, -0.035140328, 0.05707034, -0.032538, -0.0074989866, 0.04823725, -0.078939065, -0.0007738023, -0.016797127, -0.044368748, 0.024004724, -0.021725712, 0.06984753, 0.016944993, 0.064515695, -0.05493332, -0.025111033, 0.0069051, -0.01975009, -0.008932181, 0.033835847, 0.008978533, -0.0076437877, 0.00019332286, 0.00471665, -0.012995026, -0.09894045, -0.02521893, 0.03163038, -0.03708326, 0.008677311, 0.029164428, -0.0022391742, -0.024417387, -0.001474438, 0.016856631, 0.028543344, -0.004403778, 0.03974126, -0.020892661, 0.020573435, -0.021226186, -0.0014421962, 0.0019909446, 0.0017953234, -0.011171866, 0.007244628, 0.058234874, 0.012580845, 0.03514237, 0.07195799, 0.02122491, 0.014709905, -0.019226242, 0.019895656, 0.021672336, -0.055037513, -0.043222602, 0.018106973, -0.0034077945, -0.0106973685, 0.0076762205, -0.0029672636, -0.0138099445, -0.05156639, 0.002376186, -0.01628062, -0.04501435, -0.047819957, -0.021037461, 0.0118235955, 0.005531633, -0.0023614375, -0.013696556, 0.066434115, 0.011559533, -0.006063749, 0.04162839, -0.046465933, 0.043613844, 0.005655652, -0.011876204, 0.016085383, -0.034280207, -0.0116244, 0.017639115, -0.03394727, 0.034087136, 0.028984385, -0.0030492407, -0.008052907, 0.025627922, -0.0640389, 0.011814723, -0.0056528426, 0.03796075, 0.0030063365, -0.018078882, 0.025989287, 0.021923631, -0.021125058, -0.059066396, -0.027241927, -0.014717821, -0.02563405, 0.054589067, 0.007528611, -0.020148484, -0.051283423, 0.004951313, 0.016714128, -0.046362247, -0.040517613, 0.057901863, -0.01869537, 0.020928415, 0.07233494, -0.028664906, 0.05385255, 0.020474348, -0.026462505, -0.022119988, -0.005572733, -0.020874528, -0.030038852, -0.0020725387, 0.001787662, 0.040428743, 0.03692799, 0.035152584, 0.005715155, -0.091058396, -0.00018789603, -0.032278538, -0.0704441, -0.023595097, -0.0090902615, -0.0051249717, 0.011764859, 0.0198941, 0.004922838, -0.03579014, 0.02450425, 0.015124641, -0.00848884, -0.027790036, -0.013024394, -0.03409429, 0.03436397, -0.010043596, 0.052150186, 0.03480297, 0.023865798, -0.011935453, 0.0025068128, -0.053445987, -0.0013581123, 0.021696087, 0.023626762, -0.026350904, 0.020269021, -0.013806369, 0.06658888, -0.015915172, 0.05314872, -0.015664006, 0.050087225, 0.020111708, -0.002830635, 0.0057597193, 0.0031073396, -0.017530324, 0.008739369, -0.021586273, -0.0024506291, 0.04017566, -0.011964822, 0.08268805, -0.017490996, -0.014308255, 0.022099588, 0.005327999, 0.030480275, 0.035083123, -0.0067618317, -0.012212285, -0.013398782, -0.006296401, 0.0008602485, 0.006527392, -0.036729302, 0.03280462, 0.04409294, 0.07664467, -0.0064866594, -0.0685788, -0.055028833, 0.0453157, -0.016648753, -0.00020430423, -0.004664393, -0.007153712, -0.011435929, -0.0032235377, 0.007529632, -0.008529701, -0.0027019235, -0.047891974, -0.0012356575, 0.004533, 0.047085993, 0.007814126, 0.056311354, -0.0005006731, -0.05181768, 0.0036172064, 0.042989694, 0.0006731824, 0.0350821, 0.0013092151, 0.022184374, 0.020844394, 0.002130893, -0.019274062, -0.012751649, -0.016430655, 0.03876877, 0.047543123, 0.024361748, -0.039252076, 0.0073525896, 0.022405278, -0.00972769, -0.008122114, -0.021500977, 0.0010259902, 0.03553055, 0.04461187, -0.018114123, 0.0028906495, 0.02199897], [0.011704185, -0.091644935, -0.017526777, -0.022783156, 0.039992064, 0.03401444, 0.0063755563, -0.03858944, 0.03846986, 0.025906274, -0.005746381, 0.022964232, -0.07799242, -0.038353898, -0.036299676, 0.017904555, 0.01760333, -0.025859166, 0.025558848, 0.015724862, -0.019406151, -0.0007863564, -0.026870195, 0.01136593, -0.02558931, 0.062715545, 0.007984733, 0.023588877, -0.0024903738, 0.013806533, -0.018000131, -0.0878871, -0.01156569, -0.015503133, -0.012944078, -0.0031586748, -0.0020885326, 0.02997893, -0.048901763, -0.03922088, -0.035071705, 0.010792115, -0.021942783, 0.03275292, 0.01808982, 0.024105037, 0.026413603, 0.004686883, -0.00821688, -0.03448825, 0.05478041, -0.020092402, -0.020195225, 0.0034747347, 0.007849068, 0.018449647, 0.017142206, -0.024265615, 0.0033110639, -0.021363888, 0.013859077, 0.016219959, -0.069357894, -0.013989533, 0.03354392, 0.021183606, -0.00031504082, 0.010626002, -0.024326768, -0.035507657, -0.002389871, 0.012412517, 0.004688695, -0.023250962, 0.039428342, 0.007129752, -0.06929267, -0.0050028297, -0.012604973, -0.008675287, -0.009881093, 0.051380187, 0.017564375, -0.051517215, -0.042545684, 0.023467483, -0.0041677793, -0.022629486, 0.042744085, 0.053002954, -0.025039969, 0.0037634468, 0.04233641, -0.0023698271, 0.0011454201, 0.014663553, 0.015783295, 0.04556156, 0.034817107, 0.026696255, 0.031962033, -0.012502318, -0.018173166, -0.024525395, -0.0056200013, 0.011148503, 0.03851289, 0.0022970121, 0.00040722024, 0.045405738, -0.008443365, 0.0027748959, 0.014364593, -0.06113581, 0.020585913, -0.043536782, 0.071750484, 0.0032608197, -0.049279537, 0.012029077, -0.013947859, 0.026618797, 0.033041462, 0.009002331, -0.015862113, -0.033268854, 0.02189658, 0.00012705816, -0.059082497, 0.0068834494, 0.032637864, 0.035164986, 0.06410752, -0.014719268, -0.039912116, 0.03207573, 0.0050325, 0.057659034, -0.03027472, 0.03621769, -0.044042412, 0.014986973, 0.010362147, 0.010773444, 0.026388915, -0.016758652, 0.0146875605, -0.033595897, -0.039441023, 0.0052193496, -0.027659949, -0.007519306, 0.018950464, 0.00289833, 0.014606479, -0.028503833, 0.00859194, 0.031860113, -0.02777976, 0.031159565, -0.020606607, 0.0030774232, 0.018513348, 0.02746087, 0.005080514, -0.03446379, -5.9424037e-05, -0.020599276, 0.002388512, 0.035839006, 0.07686724, -0.026889559, 0.019129159, 0.007570945, -0.077979736, 0.016237399, 0.007317536, -0.027300518, 0.03629741, 0.02841301, -0.013101711, 0.020016756, -0.015680019, 0.009904081, -0.010622606, 0.029600699, -0.022107666, -0.028930305, -0.006376462, 0.022068257, 0.0016936557, -0.0273705, -0.0050002253, 0.018605752, -0.01398138, 0.00408398, -0.070536524, 0.0039832504, 0.020212155, 0.027905233, 0.021166394, 0.040500976, 0.016243514, -0.003135007, -0.05999138, -0.035973992, 0.041792847, 0.00037868315, 0.05560753, -0.025459645, -0.020292614, 6.273638e-05, 0.024304572, 0.021030502, 0.01307575, 0.033450946, 0.027071878, -0.058808222, 0.066472024, 0.03989037, -0.04350915, -0.00928589, 0.046459798, -0.016779717, -0.0348735, 0.006625143, -0.017252278, 0.04788258, -0.0050497125, -0.019322352, 0.083687164, 0.020170312, -0.009514159, -0.055919174, 0.00036781185, 0.0060624406, -0.043744467, 0.04184242, -0.0391133, 0.015463639, -0.027594013, 0.015578552, -0.0012986658, 0.0020510494, -0.026107846, -0.0062443083, -0.028533503, 0.035483878, -0.009871128, -0.030291932, 0.06395578, -0.0012530573, -0.010422393, -0.02752066, -0.012985751, 0.011189723, 0.0079778815, 0.027056932, 0.00556021, 0.024660606, -0.006061648, -0.047735818, 0.016565802, -0.030181408, 0.0647675, -0.010306885, 0.021704523, -0.02515344, 0.022454642, 0.02477566, -0.01371911, -0.06329716, 0.017060671, -0.019908043, -0.007771837, -0.0075587146, -0.0022327187, 0.018608017, 0.05573527, 0.03642379, -0.08417818, 0.0057225996, 0.022657573, -0.021747781, 0.023634402, -0.0017588834, -0.00044481677, -0.04277398, -0.025371771, -0.060290795, -0.01257989, -0.013587862, 0.026734756, 0.03014698, 0.051458325, -0.036027443, 0.04163714, -0.045414798, -0.06785856, -0.034610096, 0.016378952, 0.014536863, 0.0250257, 0.031061983, 0.016121212, -0.012994131, -0.05156477, 0.058101587, -0.011462865, 0.018051771, -0.04320883, -0.0020220592, -0.051529896, 0.027404586, -0.010385701, -0.045269392, 0.017046176, 0.07005185, -0.018031726, 0.01634045, -0.019030185, -0.017109139, 0.011959321, -0.054671247, 0.017744204, 0.037426215, 0.006397752, 0.009365613, -0.027512508, -0.022229513, 0.024429591, 0.03790727, -0.005515366, -0.0020533141, 0.036921605, 0.012887909, -0.024762752, -0.013833258, 0.021265822, 0.04907434, 0.011886845, -0.07959955, -0.011816635, -0.029021576, 0.049715295, -0.0363174, 0.011059721, -0.07121417, -0.021275107, 0.011300702, 0.020011771, -0.025219515, -0.0009933638, 0.037808068, -0.025945231, 0.007225555, 0.012727785, -0.017263403, -0.01630693, -0.00029896037, 0.009658231, -0.0045297025, -0.05977214, 0.06059291, 0.012487031, -0.024383219, 0.059453253, 0.003998821, 0.07912801, -0.025259433, 0.027116327, 0.013193211, -0.004077638, 0.0019493573, 0.0071112933, 0.042167906, -0.037885524, 0.021751633, -0.00023124131, -0.024855383, 0.040686693, -0.008963375, 0.031282578, 0.031857852, 0.021248382, 0.03791814, 0.023284484, -0.012029305, -0.045826096, 0.03838017, -0.022842836, 0.026155408, 0.027868995, 0.01159332, 0.0029452124, -0.009127962, 0.034920383, 0.009220209, 0.034688912, 0.013131155, 0.000113695525, 0.0066011357, 0.0068439273, 0.0009508412, -0.017014015, -0.05349782, -0.017227365, -0.01063846, -0.013634319, 0.03845174, 0.03737729, 0.022846347, -0.037862312, 0.029715981, 0.023306224, -0.017132694, -0.04233007, 0.017772514, 0.020655442, 0.008602811, 0.02459085, 0.033743568, -0.032487027, 0.02490702, 0.052772842, -0.023522802, 0.0043639154, -0.028374057, -0.063722044, 0.020604484, 0.043057542, 0.046940405, -0.0010015172, 0.09652615, 0.058266472, -0.01934013, -0.0074561164, -0.008191966, -0.05665752, -0.021231622, -0.0432496, -0.026010457, 0.02949108, -0.003651846, 0.00920209, 0.014295741, -0.05928656, -0.0031316096, 0.016244022, -0.04014947, 0.0077909753, -0.025710592, -0.031581085, -0.010479241, -0.059089065, 0.048137374, 0.06314405, -0.037258618, -0.026722526, -0.022987787, -0.0218172, -0.0074404893, 0.024883695, -0.033037838, -0.027589059, -0.023406558, 0.008130476, -0.050492138, 0.0013951483, 0.015665524, 0.039533433, -0.03379113, -0.0010146534, -0.0433907, -0.029975759, 4.5297026e-07, 0.041124266, 0.023147687, 0.006258265, 0.015627021, 0.0071594217, 0.017422142, 0.033395685, -0.0026049612, 0.04596742, 0.019876335, -0.018944122, 0.014099152, -0.03155255, -0.033508476, 0.021521522, 0.03211197, 0.005539826, 0.07422552, -0.03692432, -0.020110067, -0.00950626, 0.017773647, -0.0049092914, -0.018143864, 0.05742666, 0.0578751, -0.06210041, 0.010488979, -0.018659204, -0.0460553, 0.030950105, 0.041277368, -0.0011161186, 0.0015028703, -0.014643735, -0.041709952, -0.000304396, 0.0014973435, 0.046195716, 0.026765106, 0.017505035, -0.055735383, -0.02247276, -0.029503312, -0.01143297, -0.04454555, -1.1777226e-05, 0.024786532, -0.009236516, -0.029402724, 0.03312934, -0.056315072, 0.00087423256, 0.009004142, 0.0010404726, -0.04929222, -0.020362372, -0.0034924005, 0.01579915, -0.02047652, 0.031639066, 0.023320721, 0.018014627, 0.01648404, -0.0002572871, 0.025013471, 0.025706062, 0.028660672, -0.0010925643, 0.007885646, -0.036567383, 0.022448752, 0.001063008, -0.014424385, -0.0245836, 8.6970285e-05, -0.08323781, -0.0657894, 0.034284413, -0.0029549515, -0.030912502, 0.019318275, 0.05705432, 0.00016662228, -0.026771447, -0.0093340175, 0.027797086, 0.010153102, 0.042307794, 0.019970099, 0.025343573, -0.04669942, -0.06353179, 0.05551468, -0.028814342, -0.0058040493, -0.0632129, -0.056740865, -0.007850881, -0.01305851, 0.022042893, -0.04684256, 0.021489814, -0.009722213, 0.017100533, -0.027240723, -0.012172216, -0.0061812317, 0.01784884, 0.015692702, -0.009910083, -0.0016161412, 0.017124994, -0.040499616, 0.037085578, -0.017300745, 0.032005236, -0.004443638, -0.014523812, -0.03526317, -0.04841165, 0.008190608, -0.0027841816, -0.035121955, -0.016690142, -0.040285077, -0.0009168118, 0.0061486177, 0.020955311, -0.03632323, -0.025634492, 0.012983486, 0.027230306, 0.02303082, 0.012502206, 0.02158222, -0.0122555625, -0.02623785, 0.00496931, -0.011642242, -0.020290349, 0.009998865, -0.023550604, 0.00606346, 0.029615562, -0.010911147, 0.0006323465, 0.00022014353, 0.018200345, 0.0063471324, 0.0037569352, 0.050546046, -0.0007729371, -0.02514891, 0.04564628, -0.0114841545, 0.028249942, 0.0050045284, -0.044787094, 0.089434445, -0.015533256, -0.021190628, -0.025435185, -0.020318434, 0.025773894, 0.0069322567, -0.008485945, -0.012627904, 0.040951822, -0.0044848584, -0.00033678339, -0.0025117202, -0.04201118, 0.019425659, 0.05615925, 0.004306388, 0.028653992, -0.04994269, 0.04127963, 0.013962355, -0.005698366, -0.010107578, -0.015432017, -0.018473033, 0.03256007, -0.020382019, 0.033917785, 0.019779399, 0.0385677, 0.018241111, 0.02166013, -0.020644855, -0.028812531, -0.023308262, 0.026616022, 0.008641766, 0.033560567, -0.031564325, 0.002314678, -0.010721806, -0.05847484, -0.031623214, 0.0025080964, 0.04474259, -0.031021215, -0.019809974, -0.0018936421, -0.020105084, 0.06861503, 0.010673791, -0.00045070538, 0.04220686, -0.039983686, -0.020373695, -0.03380064, 0.0025991432, 0.010142004, -0.017405381, -0.03265508, 0.0009766038, 0.040074702, 0.03763979, 0.03620059, -0.0041673263, 0.03344551, 0.0679238, 0.02023803, 0.011926481, 0.028826121, -0.053238727, 0.004172762, -0.013933818, -0.06315221, -0.05207029, -0.012448528, 0.053533833, -0.0050818166, 0.047830034, 0.047021933, -0.006541117, 0.03261386, -0.013827597, 0.02126786, 0.0011979294, 0.014454734, -0.0033311432, -0.057056136, -0.007606277, 0.0019008897, -0.009188955, -0.03802504, -0.06620251, -0.015583082, -0.008315175, -0.021293677, -0.009134372, -0.03935315, 0.02813534, 0.009559512, -0.02113378, -0.0025151172, -0.052202106, 0.013669736, 0.031498756, 0.04027087, -0.010788845, -0.0148984175, -0.009689487, 0.022950133, -0.06936922, -0.020473802, 0.026073987, 0.0024469453, 0.0014627542, 0.0060209935, 0.045813695, 0.029063476, 0.007370732, -0.015125017, -0.035898797, 0.02336602, -0.033465892, 0.019979611, 0.005698253, 0.009487744, -0.07448506, 0.011172058, -0.008598281, -0.025841245, 0.0008475073, -0.06274816, 0.016607588, -0.014707492, 0.014541251, 0.029901924, 0.01696804, -0.009276944, 0.010457271, 0.009014108, -0.0045783967, -0.096493535, -0.012860505, -0.029984366, -0.037525866, -0.058391824, 0.016537322, -0.00031889105, 0.0049727075, -0.037730608, 0.04440739, -0.016549721, -0.029264426, -0.0118141435, -0.08049463, 0.016778246, -0.0011487326, -0.05179443, 0.0013464541, -0.056169216, 0.037643638, 0.011037979, 0.038865753, -0.010171447, -0.023459101, 0.020748075, -0.012517833, 0.039068684, -0.005333385, -0.012322092, 0.012338003, 0.037680104, -0.002290897, -0.06456706, -0.06963579, -0.02503725, 0.036623552, -0.0016189157, 0.04560867, 0.022957891, -0.014512035, 0.0024233907, 0.01403936, 0.039765354, 0.006132085, 0.009857538, 0.010307112, 0.011986499, 0.017125899, -0.041025516, 0.022547498, -0.00577673, -8.787623e-05, -0.025886342, 0.0053515034, 0.038118355, 0.013980529, -0.012892439, 0.0750472, -0.0073367595, -0.025910236, -0.06455369, 0.016297417, 0.047840904, -0.09592461, 0.0011244987, 0.08997076, 0.006654133, 0.0034413282, 0.050848763, -0.008771316, 0.0214914, -0.04917989, -0.005744116, -0.086296275, -0.047372647, 0.020163914, 0.009015013, -0.017781233, 0.022412969, 0.008371343, 0.0016071384, 0.034596056, 0.0248042, 0.051634077, 0.010663372, -0.0053179795, 0.063926786, -0.022846008, -0.01806853, 0.059208646, -0.0010254114, -0.0064715855, 0.0035956213, 0.002978959, 0.011065157, 0.032764245, -0.01987792, 0.02577265, 0.004069485, -0.069568984, 0.032554064, -0.049913246, 0.04799582, -0.03039521, -0.0053849104, 0.010292389, 0.016205011, -0.013490359, -0.02402101, -0.013569177, -0.0055901064, -0.011980836, 0.018044347, 0.0040463833, -0.011880617, -0.010987586, 0.008902225, 0.042992514, -0.027916556, -0.05526237, 0.07523745, -0.010363167, 0.031050658, 0.034631386, -0.043207645, 0.057696633, 0.028932115, -0.033871982, -0.00922791, -0.034692537, -0.050915074, -0.04276039, 0.025080964, -0.013479488, 0.042716, 0.02393495, 0.03985232, 0.021627517, -0.09025433, 0.015143248, -0.042707846, -0.029107869, -0.052827206, -0.016709166, 0.031181566, -0.0031753215, 0.038516853, -0.011404687, -0.037714303, 0.082534805, 0.010486771, -0.018302716, -0.022403626, -0.022326903, -0.018528296, -0.0065232245, -0.025703795, 0.041238412, 0.026252344, 0.012618393, -0.008949531, 0.0018614813, -0.059328232, -0.005995175, 0.022953814, -0.0013437362, -0.027484423, 0.04345559, 0.004102325, -0.0063031586, 0.017427577, 0.03920367, -0.03937557, 0.035518304, 0.0036781186, -0.02810952, -0.022945661, 0.027403794, -0.029258255, 0.0532693, 0.005148007, -0.024189066, 0.059755836, -0.031373795, 0.04529431, 0.0074102255, 0.030406335, 0.025289329, -0.023055507, 0.012097251, 0.031985134, -0.022668103, -0.0070604617, -0.008476319, -0.05278553, -0.015231351, 0.01033044, -0.019752221, -0.00038208038, 0.0063192463, 0.039886408, -0.0015449682, -0.0760528, -0.019935787, 0.048248578, -0.03543156, -0.02203972, -0.016507141, 0.027487142, -0.016754463, -0.017445244, -0.00014948018, -0.01039295, -0.008103411, -0.0796974, 0.012332229, 0.0061884797, 0.009668197, -0.01389441, 0.017852915, 0.022610066, -0.04030348, -0.023564758, 0.020711612, -0.022006428, 0.026968263, 0.03134826, 0.020590669, 0.022001673, 0.019796386, -0.017663123, -0.0028246515, -0.008626762, -0.0067211725, 0.044684496, 0.0045550684, -0.0031637708, 0.0012456682, 0.028133078, -0.00814667, -0.007964576, -0.018266931, -0.041315135, 0.0062672966, 0.023935739, -0.034111377, 0.016052812, 0.014994448], [-0.053829633, -0.078527614, -0.009927942, -0.048443325, -0.027505977, 0.034162913, 0.028217277, -0.02656, 0.040548876, 0.04808526, 0.006238382, 0.018692162, -0.07863724, -0.02066275, -0.0015496155, 0.050811604, -0.0059708315, -0.029264871, -0.0024889414, 0.04269971, -0.036052454, -0.0090905335, -0.029864877, 0.01881555, 0.0027248312, 0.020509422, 0.0040790816, -0.009179597, 0.020284116, 0.0066218544, -0.018653452, -0.061612036, -0.017378436, -0.006793933, 0.009183981, 0.019166362, 0.022886163, -0.026352234, -0.062137038, -0.039890803, -0.074473485, 0.010660713, -0.035298813, -0.009466899, 0.002038331, 0.030007621, 0.012843906, 0.029381001, -0.051271588, -0.032132443, 0.022516603, -0.0015387284, -0.042974006, 0.041809075, -0.014194224, 0.017034885, 0.023043424, 0.03230543, 0.008764748, -0.028084058, -0.028684217, -0.024326302, -0.041777924, -0.0074262996, 0.017782927, 0.028213646, 0.02325153, 0.0058549093, -0.009346081, -0.031038277, -0.028546313, 0.021600865, 0.03870652, -0.03904986, 0.040955335, -0.023198264, -0.0499438, 0.030532628, -0.0055373656, -0.031052794, 0.011509237, 0.018011104, 0.02053422, -0.052454665, -0.050560288, 0.013159029, -0.00837621, -0.00467425, 0.06836212, 0.008508974, -0.032015707, -0.021068223, 0.03229515, 0.005718819, -0.010745695, -0.0033968152, -0.0036278663, 0.04681871, 0.01583729, 0.05528474, 0.03939967, -0.058973696, -0.010631531, 0.0064174165, 0.008437602, -0.019329669, 0.017968766, -0.018158082, 0.0125753535, -0.009864434, -0.018377943, -0.009880764, -0.0067500817, -0.05005948, -0.006142816, -0.044508804, 0.0364329, -0.02771102, -0.04401888, 0.016905447, -0.012218513, 0.024304528, 0.0039020884, 0.022260753, -0.0044056983, 0.002866819, 0.0034851227, 0.0077607795, -0.07609931, -0.0033218146, 0.013414275, 0.023676092, 0.034338806, 0.0040875496, -0.034552436, 0.01731969, 0.006939701, 0.06185881, -0.036249634, 0.04565559, -0.043252237, -0.003275846, 0.024338398, 0.012582045, 0.011126747, -0.036864154, 0.0105944825, -0.052539345, -0.029785037, -0.009462816, -0.036213342, 0.013817102, 0.016001202, 0.02719025, -0.009813022, -0.06288826, -0.0029988266, -0.0016944761, -0.028927896, 0.019628463, -0.00471107, -0.03862063, 0.0089831725, 0.021335943, -0.043911822, -0.011848933, 0.04225212, 0.0071583525, -0.023146247, 0.010617468, 0.032705233, 0.0034506465, 0.00070759427, 0.041581955, -0.02177748, -0.0066563305, 0.039353702, -0.032255832, 0.027701948, 0.05567547, 0.019228963, -0.04010855, -0.026080962, -0.01559535, -0.015644947, -0.004833098, -0.03367707, -0.05124437, -0.008922083, 0.01622099, 0.05593132, 0.007766223, 0.026366448, -0.006527045, -0.04183599, 0.032661688, -0.007212184, 0.0134517765, 0.016757863, 0.042067647, 0.04019081, -0.014621547, 0.028286228, -0.025194332, -0.0038468207, -0.045869105, 0.029765077, 0.004112953, 0.037333515, -0.044681184, -0.003292177, 0.049263496, 0.03605971, 0.077459, 0.028211832, 0.027824126, -0.009426525, -0.047843322, 0.0480532, 0.059666853, -0.026091319, 0.007079118, 0.031879015, -0.014449167, -0.025680855, 0.0123775685, -0.025797892, 0.030308833, 0.020002257, 0.018594176, 0.034271784, 0.0052481736, -0.03233265, -0.034717556, -0.012147727, -0.01979661, -0.043057777, 0.05586358, -0.040481135, 0.033310078, -0.014656931, 0.029710943, 0.026083378, -0.018617917, -0.022075064, -0.044060916, -0.032990724, 0.00087211234, 0.006546853, 0.0059226523, 0.05861684, -0.022344222, -0.038840793, 0.015491921, 0.0023601092, 0.007990016, 0.020657912, -0.025370872, 0.0028185823, 0.041699294, 0.03810772, -0.057561986, -0.0015830332, -0.076278344, 0.030664634, 0.0070694406, 0.0441586, -0.0349601, 0.022921246, -0.045866687, -0.038323045, -0.09648503, 0.021341385, 0.0301673, -0.013132418, 0.027331783, -0.01637923, 0.010256979, 0.053480484, 0.02602471, -0.028588047, -0.009430759, -0.019108295, 0.00016209873, 0.015212029, -0.007074884, 0.0014818728, -0.048232842, -0.010624724, -0.037880298, -0.029490024, 0.04398017, 0.013569116, 0.021358322, 0.02525353, -0.042363416, 0.035898823, 0.009060593, -0.03950673, -0.06485522, 0.0349722, -0.0124156745, 0.017835699, -0.018919583, -0.0045408816, -0.036598023, -0.06660564, 0.055423252, 0.033405647, -0.02049793, -0.036769193, -0.023042213, -0.051116746, -0.0138473455, 0.024974167, 0.00610834, 0.014204204, 0.08716799, -0.0017952585, -0.034102883, -0.03131409, -0.021254063, 0.021929296, -0.0569402, 0.026198905, 0.058971275, 0.055016797, 0.0088957725, -0.010185607, 0.0057387794, 0.01771473, 0.022681726, -0.03052295, 0.019749433, 0.017608277, 0.02211559, 0.010915467, 0.013137256, 0.031599578, 0.06719114, 0.032183252, -0.08799783, -0.026598709, -0.027879924, 0.016046867, -0.033053625, -0.010223107, -0.049471565, 0.019718586, 0.011038365, 0.0010572709, -0.014569531, 0.04082469, 0.031422354, 0.004576567, 0.0021907522, -0.009227228, 0.0076198503, -0.024382554, -0.026259994, -0.013526777, -0.0254034, -0.041372072, 0.042875115, 0.048591968, -0.008743806, 0.03975532, 0.015953418, 0.016192332, -0.024290618, 0.059461206, -0.017771585, -0.057649087, 0.031499777, 0.00249499, 0.032066517, -0.044855382, 0.0019040552, 0.039784353, -0.01182716, 0.018600225, -0.011066264, 0.020671822, 0.0298053, 0.02019233, 0.04457473, 0.040403716, 0.023716616, -0.029549146, 0.031161666, 0.006764447, 0.009556567, 0.022287365, -0.009831168, 0.00463433, -0.024969121, 0.0471296, 0.029728787, 0.001599213, 0.004703283, -0.01189271, 0.015675189, -0.005562164, -0.018752646, -0.026903553, -0.064316906, -0.033017334, -0.0032262488, 0.011204168, 0.031174518, 0.010494683, -0.016050193, -0.031788286, 0.04804655, 0.041931406, -0.030278591, -0.030508433, -0.0011265257, 0.020476457, 0.02073949, 0.0053221914, 0.063581415, -0.037289966, 0.034677032, -0.0072254906, -0.017442247, -0.02366823, -0.0048318123, -0.024554329, 0.02696948, 0.019630883, 0.0052821203, 0.0074196463, 0.082921974, 0.051653847, -0.021005698, 0.017944572, -0.0061724535, -0.045546114, -0.02510353, -0.015533656, -0.027320895, -0.012664266, 0.03006508, -0.003465768, 0.03306663, -0.04286423, -0.03409759, 0.027179185, -0.02077495, 0.031076385, -0.021758731, -0.029343953, -0.047150467, -0.012779791, 0.045643196, 0.055354297, -0.05659121, -0.0009964838, -0.06768952, -0.01669254, 0.0049984474, 0.026777063, 0.018020177, -0.024264002, 0.0069146, 0.033991743, -0.053408206, -0.011819901, 0.07002907, 0.015724182, -0.055619825, 0.0060980576, -0.039699674, -0.03846337, -0.009515437, 0.051900625, 0.030984448, 0.03287852, 0.03233023, 0.054704692, 0.033779442, 0.039946754, 0.055370025, 0.020361537, 0.014830069, -0.024111582, -0.0016079831, -0.023303509, 0.007718591, 0.003492381, 0.0025098086, -0.009650923, 0.06956213, -0.024890622, 0.0044794898, 0.040492322, 0.06020562, -0.025976323, -0.014441001, 0.07197668, 0.024521062, -0.051293325, 0.017603438, 0.010573734, -0.05118207, 0.017576637, 0.035463333, -0.02047797, -0.019139748, 0.014241099, -0.02820034, -0.030045576, -0.034314126, 0.052772667, 0.045656197, 0.0038891009, -0.014562574, -0.006425884, -0.0059770886, -0.030112863, -0.023575082, -0.022159139, 0.018334698, 0.008877325, -0.03181006, 0.03952548, -0.045685228, 0.007770457, -0.02634437, -0.028514862, -0.057992637, -0.024164053, -0.011111022, 0.014193316, -0.03611354, 0.04985867, 0.008566813, -0.0068244776, -0.01565795, -0.01681714, 0.039350376, 0.0078097717, 0.003586132, -0.009213165, -0.014902575, 0.014630015, -0.003488147, 0.00017540534, -0.014371142, 0.005329903, 0.009447392, -0.058749903, -0.026881777, 0.04121421, 0.018506737, -0.017959995, 0.025051514, 0.066500396, 0.01430975, -0.072968625, 0.0049355435, 0.041533567, 0.01409019, 0.017032616, 0.03378186, -0.006656482, -0.0537442, -0.030477207, 0.009738626, -0.002298415, -0.01601947, -0.048259452, -0.040173873, 0.008907568, -0.006440041, -0.02460332, 0.011945709, 0.0472663, -0.009015835, 0.01913007, -0.024902418, 0.007188727, 0.0033962105, 0.013259737, 0.041344553, -0.025529945, -0.020216374, 0.014010956, 0.020128066, 0.044175535, -0.0071696937, 0.06310238, 0.019584915, -0.019629069, -0.02601594, -0.035897613, 0.019072004, 0.0011625141, -0.040327504, -0.030175768, -0.034983084, -0.012057908, -0.041336387, 0.012993868, -0.03327137, -0.02294302, 0.033343952, 0.031823974, 0.0022273455, -0.015318029, 0.010792873, -0.037256096, -0.03552442, 0.008046116, -0.020448407, -0.033022173, -0.013063464, -0.05304741, 0.0067355656, 0.013898152, -0.004725057, -0.011163226, 0.007774691, -0.02722805, -0.013994512, 0.0014769584, 0.0651032, 0.038792405, -0.007958564, 0.04142469, -0.02218273, 0.045641683, -0.021400662, -0.06706533, 0.089043014, -0.009050916, -0.009148901, -0.025522083, 0.008140017, 0.012548136, 0.050555453, 0.0028137437, -0.0014567716, 0.013966802, 0.0049319146, -0.0077420287, -0.013400062, -0.051978044, -0.009404751, 0.036388747, -0.011134005, 0.040267095, -0.017447615, 0.029797135, -0.0070331497, -0.007843341, 0.0045919907, -0.040118225, -0.0017709892, 0.033830248, -0.03642383, 0.049091116, 0.021914177, 0.016165115, -0.025114417, 0.010123913, -0.037506655, -0.024717636, -0.007275088, 0.06977746, 0.017826023, 0.01645665, -0.050830655, -0.0003353871, -0.028398428, -0.004921027, -0.04720823, 0.008822889, 0.04936874, -0.056910567, 0.0033478227, 0.0037993402, 0.0028802766, 0.05852248, 0.035008486, 0.017297387, 0.02177234, -0.043036003, -0.06464594, -0.019611526, 0.033085078, -0.031955224, -0.027643884, -0.023318022, 0.006249269, 0.06879761, 0.016645363, 0.029658021, 0.011544695, 0.0333875, 0.050574806, 0.0047335248, 0.014786066, -0.019771207, -0.004027065, -0.0034370376, 0.0090373065, -9.299508e-05, -0.06312415, 0.011621473, 0.032988302, 0.012236035, 0.064597555, 0.04877357, -0.011380782, 0.022002483, 0.006360561, -0.0071396027, 0.019053254, 0.0020588958, -0.005273048, -0.05676359, 0.0152469585, 0.023349475, -0.04889817, -0.037500452, -0.017104479, 0.0064246748, 0.0076851733, -0.001971798, -0.033259273, 0.0021151465, 0.020182502, 0.023954926, -0.022443265, -0.04497151, -0.0150812315, 0.015255729, 0.023108749, 0.013243709, -0.036999643, -0.003136429, -0.021157512, 0.030511457, -0.06821696, -0.018781679, -0.04475407, 0.02797549, -0.008994061, 0.0054218397, 0.06708287, 0.0025548695, 0.017203636, -0.026110107, -0.038119815, 0.017454041, -0.032344766, 0.010684, -0.007301701, 0.024048677, -0.07966548, -0.046258625, 0.004623443, -0.0044794898, -0.0034757478, 0.019361122, 0.00897773, -0.002370694, -0.005921442, 0.018665548, -0.008929946, -0.0043887626, -0.018445384, -0.0035214135, 0.0316776, -0.06353303, -0.06932987, -0.04879898, -0.036322214, -0.056242213, -0.016636895, 0.047894128, -0.025000867, -0.016868223, 0.04042307, -0.009921289, -0.018648613, 0.027462732, -0.022913989, 0.0077631986, -0.00052137725, -0.0030082017, 0.016368343, -0.04868043, 0.011015455, -0.0011945709, 0.030259691, -0.00746259, -0.014268621, -0.025709586, 0.010137219, 0.01333867, 0.012713561, 0.020327665, 0.0047899266, 0.029707618, 0.005739762, -0.04456959, -0.08192034, 0.0036901657, 0.0068529053, -0.03729753, 0.017313112, -2.1925667e-05, 0.013676929, 0.034938324, 0.053007495, -0.00051290944, -0.011013037, -0.0074335574, 0.005390993, -0.004937358, -0.009082368, -0.019792376, 0.013844925, -0.012646725, -0.03830369, -0.032299988, -0.009408985, 0.012090872, 0.034110896, 0.028291596, 0.012057303, -0.004504893, -0.0023770449, -0.013274858, -0.028198527, 0.05688698, -0.09366888, 0.027851343, 0.07650092, 0.00032661684, 0.021831313, 0.012363052, -0.0114890495, 0.023318628, -0.014662677, 0.025459178, -0.075455755, -0.044251744, -0.016882462, 0.018137725, 0.040979527, 0.03334758, 0.024672275, -0.023224121, 0.0483399, 0.027064137, 0.028323729, 0.020775251, -0.029050754, 0.047076378, 0.013752989, -0.0032691925, 0.049400195, -0.0022202386, 0.016182655, 0.025593454, -0.012752574, -0.0059093456, 2.1774458e-05, -0.052668784, 0.028908012, 0.00541564, -0.054320015, -0.0062069297, -0.041865624, 0.004665782, 0.0027841062, -0.008461796, 0.019125836, 0.01659516, 0.0002838618, -0.021923855, -0.016446972, -0.032022968, 0.009457372, -0.032948382, 0.019972015, 0.021557316, -0.008662605, -0.013975573, 0.017161902, -0.021521632, -0.054091383, 0.046885245, 0.0032761483, 0.05878619, 0.008391483, -0.0569272, 0.02218938, 0.024350496, -0.044037633, -0.009321887, -0.01575503, -0.018098807, -0.049481243, 0.009128941, 0.011720706, 0.023824885, 0.0715551, 0.0026032573, 0.036281087, -0.088839784, -0.025916444, 0.00055676076, -0.004608927, -0.04829695, -0.020809727, 0.015488727, -0.007471058, 0.013932023, 0.011469695, -0.0548556, 0.045765072, 0.0066874796, -0.021555504, 0.0060726544, -0.020605288, 0.0025863217, -0.012012242, -0.011591269, 0.044056986, 0.033058465, 0.04006954, -0.05765392, 0.020712346, -0.025444662, 0.006159752, -0.009166441, 0.016547982, 0.014158236, 0.023322484, -0.0007729932, -0.010766562, 0.039224263, 0.032429423, -0.038914584, 0.037362546, -0.00548807, -0.02900146, -0.021444209, 0.017169159, -0.04665419, 0.052379664, 0.024158156, -0.046903387, 0.046500564, -0.03828494, 0.051310297, 0.04993609, 0.00503935, 0.009563825, 0.0064816815, -0.01727614, 0.028524539, -0.04332149, -0.013439679, -0.021523446, -0.027818684, 0.00010615047, -0.020190971, -0.012205793, 0.020642487, -0.003596452, 0.034984294, -0.01654526, -0.036198825, 0.010160204, 0.060078148, 0.0017092949, -0.027349927, 0.0044610417, 0.033743452, -0.01998653, -0.04041339, 0.021395143, -0.020276252, -0.01971798, -0.07032181, -0.021441488, 0.038029693, 0.020452263, -0.0007108453, 0.03209797, 0.013686456, -0.046876777, -0.008963213, 0.018251834, -0.025207562, 0.03881176, 0.04570398, 0.034769576, -0.0016935689, 0.042491645, -0.002937737, 0.010616257, -0.045798942, 0.035960816, 0.073679924, 0.017474001, 0.011528971, 0.016832866, 0.022228695, 0.015189499, -0.006073259, -0.0008715832, -0.0412006, 0.051849823, 0.011360672, -0.060068466, -0.006248664, -0.020339195], [-0.016949596, -0.07580751, -0.018111005, -0.020542592, 0.013807459, 0.05904119, 0.019708859, -0.03358865, 0.026274852, 0.0614842, 0.0030434276, 0.020341365, -0.05027849, -0.027993444, -0.012889427, 0.025127856, 0.030490294, -0.020409891, 0.046842463, 0.009686378, 0.0050385697, -0.0056460584, -0.04268195, 0.03342549, -0.032263815, 0.054962255, 0.030838905, 0.03664731, 0.009376107, 0.03185918, -0.021942481, -0.05684618, -0.0039875647, -0.015259014, -0.029644594, -0.010595333, 0.0033349353, 0.008931231, -0.050827853, -0.020924194, -0.032297533, 0.012015448, -0.035324644, 0.045085803, -0.0023842722, 0.045021627, -0.008679969, 0.029689735, -0.018533582, -0.027397376, 0.029176876, -0.034060717, -0.026962288, 0.048111826, 0.011354661, 0.039807934, 0.007389666, -0.0014640734, 0.015437944, -0.03220181, 0.0048392457, 0.027119463, -0.025677698, 0.006694344, 0.03589243, 0.0067710285, -0.0035981622, 0.024815138, -0.027155086, -0.031058457, -0.014853298, 0.036276396, 0.028042933, -0.0074959905, 0.049086418, 0.0126131475, -0.062209707, 0.020434365, -0.026031204, 0.013104795, -0.008813214, -0.0028388011, 0.0049616136, -0.05513738, -0.022072328, 0.004369353, 0.038510565, -0.0345404, 0.03818316, 0.026616395, -0.052715037, -0.0059296805, 0.03499833, -0.0058584353, -0.0024944034, 0.011369345, 0.010870627, 0.020442523, 0.009674719, -0.0035840222, 0.016835183, -0.01934393, -0.028783124, -0.015791452, -0.023398932, 0.0033594088, 0.00089872483, -0.007636306, 0.0044237385, 0.07033168, 0.028797807, -0.016707309, -0.011065158, -0.053058755, -0.0067095724, -0.043896794, 0.04024547, -0.006699239, -0.03843659, 0.033982947, 0.0057232864, 0.017723234, 0.041337535, 0.0061086095, -0.022220938, -0.0067699403, 0.014363281, 0.006909168, -0.048662208, 0.0024096973, 0.041415308, -0.0063576964, 0.017067062, -0.03444577, -0.019594105, 0.017898628, 0.021968044, 0.009025998, 0.009490589, 0.04979561, -0.018547723, -0.0036253554, 0.00086881267, 0.007019299, 0.003948407, 0.00091884757, 0.029999733, -0.025364434, -0.02122731, -0.0060248557, -0.027647005, -0.030437132, 0.011926799, 0.019278124, 0.056710623, -0.01730963, 0.0095849475, -0.0027426067, -0.061538585, -0.0117081, -0.022707148, -0.038537756, 0.017936425, 0.008886906, -0.00044161244, -0.07702765, 0.012484797, -0.0013467276, -0.014249615, 0.033573966, 0.06283079, -0.011822378, 0.05212332, -0.010913184, -0.067748606, 0.010994899, 0.03570412, 0.021788027, 0.014353595, 0.004815316, 0.008002823, 0.011791973, -0.026354255, -0.021377958, -0.046150677, 0.016581133, -0.007808709, -0.018484635, 0.002804946, 0.024189975, 0.031835254, -0.029552681, -0.005653541, 0.019013876, -0.04862251, 0.026730606, -0.06326044, -0.00821769, 0.01725742, 0.013717723, -0.0035894606, 0.029993752, 0.046593376, 0.013544232, -0.024916295, -0.036228538, 0.03455237, -0.025454715, 0.06218904, -0.046341028, -0.0029324805, 0.02636187, 0.024017842, 0.029371578, 0.025132751, 0.024517104, 0.022342624, -0.07092775, 0.04124617, 0.036377553, -0.000764392, -0.024622612, 0.044313524, -0.017727586, -0.01524909, -0.001390916, -0.01841339, 0.05215813, 0.020521382, -0.0032469663, 0.070818976, 0.022423254, -0.004210546, -0.032967567, 0.0049088597, 0.004366633, -0.039936557, 0.046871558, -0.015773505, 0.020632874, -0.024339806, 0.029083334, 0.043155648, -0.007822577, -0.027331024, -0.018756837, 0.019576702, 0.006426358, -0.019111158, -0.0060683643, 0.03409879, -0.0025039208, -0.015147252, -0.00044946015, 0.0032926505, 0.024456738, -0.0055589736, 0.005116613, 0.009050336, 0.07026968, 0.0076629547, -0.060076695, 0.029629638, -0.07464556, 0.054554228, 0.01071726, 0.038574193, -0.041546375, -0.020626348, -0.038555156, -0.022230728, -0.03663425, 0.0017413473, 0.006223092, -0.035742328, 0.018499864, -0.0035361627, -0.0032283391, 0.040788785, 0.043688767, -0.08627323, 0.0063011353, 0.02309546, 0.02419079, 0.027535515, -0.008600022, 0.015271524, -0.051798638, 0.018052949, -0.026650658, -0.026978333, -0.0005513357, 0.018290749, 0.035918538, 0.06542826, -0.03361693, 0.015561944, -0.04350644, -0.06327023, -0.0359751, 0.04597555, 0.018331403, 0.019198176, 0.008927967, 0.012816549, -0.02617043, -0.047628745, 0.039323088, -0.02508649, 0.009671965, -0.016094925, -0.0077320244, -0.0576946, 0.0094914045, 0.0035198468, -0.006296784, -0.0019656378, 0.06349647, -0.03280876, -0.02092139, -0.017123358, -0.004738904, -0.00072659383, -0.04634755, 0.03035596, 0.06471254, 0.016433204, 0.013350619, -0.062804684, -0.059992943, 0.011244801, 0.03813911, -0.008115988, -0.022583758, 0.014765737, 0.018027794, -0.0116244145, 0.013538521, -0.0009941718, 0.026884858, 0.016031565, -0.08378019, 0.01298841, -0.027245095, 0.055490885, -0.06404685, -0.016933553, -0.0414115, -0.017448587, -0.016852247, 0.044250436, -0.036250833, -0.011100543, 0.03316954, -0.0059476276, -0.006571976, 0.041743796, -0.020419681, -0.01797776, 0.024635667, -0.014435071, -0.025062049, -0.052985337, 0.037615646, 0.022886075, -0.0042778486, 0.041133046, 0.020465093, 0.03773339, -0.0027069838, 0.037315164, 0.0175405, 0.008262286, 0.017788498, -0.012998743, 0.046245307, -0.044822574, -0.008503487, 0.0072289566, 0.013525196, 0.018406319, -0.015120331, 0.051659957, 0.06701197, 0.010927053, 0.045773238, 0.026899202, -0.0060166973, -0.043377, 0.03599685, -0.010770965, 0.0079125855, 0.0030499538, 0.00933423, -0.0073535, -0.039608613, 0.03334609, -0.0144508425, 0.031124704, -0.006738533, 0.0002877007, -0.007522096, -0.015544268, -0.0067088925, 0.0022211147, -0.031957075, 0.010028192, -0.011555345, -0.00054276997, 0.055067766, 0.05571387, -0.017486112, -0.0025317934, 0.010563891, 0.008112182, -0.011107614, -0.012906831, 0.009116143, 0.020983117, 0.03336023, 0.021791834, 0.031415395, -0.022791715, 0.038448565, 0.058531597, -0.022970373, 0.018804152, -0.018710336, -0.011464519, 0.04221315, 0.019505456, 0.03763849, -0.0033542423, 0.0729944, 0.0409601, -0.04347816, 0.008955704, -0.024147281, -0.040367294, 0.012601182, -0.02540468, -0.038415387, 0.019494036, 0.007720604, 0.003973696, 0.0070154923, -0.033927474, -0.014696122, 0.013029742, -0.058854103, -0.003591908, -0.031290308, -0.023579495, -0.008549987, -0.05611741, 0.023690442, 0.055158045, -0.049880452, -0.022411287, -0.010102157, -0.02706127, -0.007841884, 0.017333288, -0.024986997, -0.0039097928, -0.019063571, 0.004460721, -0.041437604, -0.031880938, 0.023706757, 0.030190628, -0.03538746, -0.017692234, -0.02300518, -0.030335294, 0.0014624333, 0.030687714, 0.017045587, -0.013438724, -0.008579356, -0.004004424, 0.009438651, 0.017363438, -0.011705994, 0.050765853, 0.02312918, -0.047950298, 0.017690059, -0.040894832, -0.011786484, 0.011038136, 0.03286423, 0.011074575, 0.04492808, -0.03347118, -0.0069352733, 0.0010746628, 0.022561394, -0.055665467, 0.01168372, 0.04399591, 0.06013761, -0.010167963, 0.022847462, 0.008492881, -0.06523247, 0.031173922, 0.037391305, 0.0032842206, -0.021500869, -0.018018277, -0.041580096, 0.0063593276, -0.0024827104, 0.035634644, 0.030906344, -0.009024231, -0.068715334, -0.0064865905, 0.009028038, -0.01804955, -0.04240132, -0.0029826546, 0.051309712, 0.0033581343, -0.0075030606, 0.036995374, -0.06442103, -0.022170903, -0.021375783, -0.0181246, -0.035640083, -0.02033375, 0.02940421, 0.005582699, -0.010204946, 0.0072746403, 0.0018665197, 0.003859758, -0.014736368, -0.03657008, 0.02898816, 0.030858485, 0.00095977285, -0.019548422, 0.0013151839, -0.033290483, 0.033062197, -0.017294673, -0.00016206958, -0.029837392, 0.011736449, -0.06427963, -0.04558887, 0.01682587, -0.024425736, -0.02578973, 0.011719589, 0.0770407, -0.021928342, -0.031248976, -0.03390028, 0.030407082, 0.011135708, -4.949105e-05, 0.02454865, 0.004627685, -0.037676286, -0.07741923, 0.0030010066, -0.00960796, -0.025993133, -0.050037086, -0.027579159, 0.034024827, -0.027328849, 0.042851638, -0.023140058, 0.006095557, -0.021349678, 0.016779097, -0.004161599, -0.0050970344, -0.038300633, 0.030288523, 0.011347046, -0.041431077, 0.02156287, 0.023242302, -0.0045503723, 0.037161797, -0.034580644, 0.032335874, 0.017713988, -0.015747262, -0.024375701, -0.045359906, 0.038536668, -0.0450771, -0.030625712, -0.025319837, -0.0210908, 0.0036133905, -0.02722769, 0.02841439, -0.034042228, -0.02186906, 0.020852864, 0.0048751403, 0.011544195, 0.020134155, 0.028367618, -0.01489735, -0.029037649, -0.027435446, 0.001750644, -0.005078271, 0.026471728, -0.012158482, -0.023414435, 0.026579412, -0.016707309, 0.0054214452, 0.019891866, -0.000116929405, 0.034985278, 0.016396426, 0.0596068, 0.002774762, -0.031877674, 0.035444293, -0.0010962812, 0.018591503, -0.014645, -0.02773239, 0.10304581, -0.05812996, -0.023584796, -0.05038733, -0.0054519014, 0.009145511, 0.019274317, -0.039207786, -0.015896961, 0.046238508, -0.028444845, 0.0012182412, -0.011928703, -0.057716355, 0.0035590045, 0.05233434, -0.0068721855, -0.018779814, -0.037373357, 0.058883067, -0.014924542, -0.009902017, -0.022714216, -0.013270128, -0.022798514, 0.041681252, -0.018425355, 0.056413267, 0.03562159, 0.024174472, 0.0054005072, -0.0031734095, 0.0018425899, -0.03974077, -0.053220827, 0.04005648, 0.029192105, 0.022702795, -0.03240304, 0.0031804796, -0.010725417, -0.054064687, -0.011725572, 0.027158078, 0.038072214, -0.031977747, -0.0014310256, 0.029749015, 0.0371172, 0.038805332, 0.027427696, -0.0045004226, 0.05485784, -0.045668274, -0.047823854, -0.008338426, 0.02344421, 0.019428771, 0.010753698, -0.022590488, 0.009028496, 0.04119722, 0.06196062, 0.016564274, 0.023975423, 0.031617712, 0.004810965, 0.04893849, 0.04200648, 0.033073958, -0.03935898, 0.01007442, -0.014688407, -0.02297282, -0.04567752, -0.025321197, 0.04297346, -0.02326025, 0.04412916, 0.010134243, 0.011519994, 0.038510565, -0.0046750004, 0.019222107, 0.006868651, 0.02623352, 0.0036438466, -0.08267507, -0.045327276, -0.006978782, -0.018026708, -0.039890874, -0.057052847, -0.03031354, -0.02552868, -0.027805813, -0.014157703, -0.046525396, 0.01603075, 0.025521066, -0.0029825154, -0.04108954, -0.052634105, 0.022530938, 0.039710313, 0.024794472, -0.0222242, 0.034358755, -0.0018012567, -0.0070353434, -0.08298398, -0.0284511, 0.0197007, -0.006712292, 0.040279735, -0.008920354, 0.054357488, 0.019475544, 0.047489654, -0.047422215, -0.04980608, 0.029479261, -0.034741085, 0.010678102, 0.027026465, 0.038470317, -0.07190886, 0.003550031, 0.01539933, -0.003148936, 0.029876279, -0.030902537, 0.03956891, 0.017148921, -0.002820446, 0.038352843, -0.011134942, 0.031951096, -0.011399257, 0.0053972434, 0.0025816925, -0.054207385, -0.03009382, -0.03477888, -0.063866295, -0.088822834, 0.029978523, 0.04279208, -0.0039954507, -0.0451391, 0.016594185, -0.015115709, -0.03012319, 0.0028052179, -0.070984304, -0.006850431, -0.010579119, -0.07098648, 0.028288757, -0.06069669, 0.046593376, 0.023021497, 0.039918337, -0.042312127, -0.009803035, 0.026472816, -0.006487135, 0.062124867, -0.03138494, -0.016577398, -0.0022831147, 0.038194038, -0.0074546575, -0.046283375, -0.057479233, -0.0017882041, -0.011919185, -0.028663475, 0.03622745, 0.0072722607, -0.024789067, 0.012416815, -0.013929283, 0.022535287, -0.010873891, 0.02850467, 0.028045654, -0.0107602235, 0.02012926, -0.013350619, 0.015694644, -0.0029868665, 0.033214476, -0.019700157, 0.017592708, 0.039479718, -0.003122015, -0.023460934, 0.060170237, 0.029379193, 0.008406952, -0.03925021, -0.003015147, 0.04198799, -0.0956004, -0.00812005, 0.04863502, -0.005596296, 0.009276105, 0.040580485, -0.010403998, 0.039207786, -0.03279897, -0.027569233, -0.07089294, -0.061281886, -0.02338588, -0.0010612024, -0.018083064, -0.016707309, 0.032826096, -0.0032631462, 0.026079064, 0.03290013, 0.0030825853, 0.024012405, 0.011436239, 0.043112688, -0.042897318, -0.04112652, 0.05439447, 0.011826457, -0.010153008, 0.008731907, -0.011327468, -0.007250439, 0.04287339, -0.0181866, 0.034972224, 0.028830983, -0.040285714, 0.030533804, -0.017499166, 0.028854914, -0.00718436, -0.009224914, 0.034511033, 0.02212277, -0.019037195, -0.037930813, -0.0032674968, -0.025219768, -0.013378899, 0.0033353434, 0.025551522, -0.024839612, -0.010017859, -0.01687264, 0.044221614, -0.018384565, -0.052527953, 0.04589343, 0.002102078, 0.058714878, 0.022006657, -0.028512284, 0.07652295, 0.0058910665, -0.03302086, -0.000535156, -0.051316235, -0.053721175, -0.004502258, -0.0024280525, 0.0147048235, 0.022430865, 0.04587168, 0.026608238, 0.023363039, -0.07712939, -0.00014276264, -0.027407302, -0.051485922, -0.062171634, -0.022568462, -0.0025155456, -0.0041115643, 0.03846685, -0.013526556, -0.022946443, 0.07720604, 0.015552307, -0.033804562, -0.00011149083, -0.020681275, -0.050757147, 0.006446209, -0.006068092, 0.06560446, 0.021389378, 0.021323571, -0.016055427, 0.010328945, -0.07580071, 0.029594017, 0.045951623, 0.011882204, -0.0027894462, 0.022654936, -0.005191937, 0.023049777, 0.020174263, 0.016594185, -0.021796508, 0.049749926, -0.0018810678, -0.01092639, -0.0084147025, 0.031226676, -0.04924414, 0.01781569, 0.01177316, -0.0063663977, 0.023774195, -0.052093953, 0.072259106, 0.0150305955, 0.018301355, 0.032684486, -0.01685348, -0.03289686, 0.020788418, -0.0108483285, -0.004295932, -0.014672193, -0.06375317, -0.0019856244, -0.010449138, -0.028240355, 0.018530319, 0.030362489, -0.00178059, 0.0071897986, -0.05045694, -0.009724176, 0.03594029, -0.0101179285, -0.0041251606, -0.047051307, 0.009963472, -0.0062652407, 0.012552406, 0.019232983, -0.025031049, 0.015840398, -0.07644463, 0.028807055, 0.007916393, 0.014371983, -0.021841325, 0.033677842, -0.012339043, -0.068874136, -0.0101027, 0.011191503, -0.02379051, 0.019551683, 0.021414533, 0.014288229, 0.041811783, 0.0070005357, -0.043368302, -0.013351707, -0.024793927, -0.008597302, 0.07042522, -0.0110859955, 0.016073171, 0.014930525, 0.06018057, -0.0016174328, -0.008913827, -0.011157785, -0.059668258, 0.01784941, 0.0073465654, -0.06412735, 0.008940885, -0.0022423253], [-0.014754322, -0.09225824, -0.0122591285, -0.0040285843, 0.03870549, 0.021265237, -0.01349973, -0.024339385, 0.030338045, 0.078263365, -0.010236092, 0.024079325, -0.018727947, -0.017140096, -0.04024188, 0.03748687, 0.015104069, -0.035896022, 0.039683282, 0.07421629, -0.022291869, 0.021658326, -0.015149287, 0.017098626, 0.0074865823, 0.03119892, 0.0076976796, -0.005557978, -0.0088378545, 0.026300717, 0.009703977, -0.058926355, 0.006810072, -0.05275582, 0.014545473, -0.023676865, -0.01461942, 0.024302414, -0.05650311, -0.03992211, -0.07997413, 0.048081204, -0.024412334, 0.060102586, 0.0040094364, 0.035458338, -0.017582277, 0.0040528174, -0.022811493, -0.048726924, -0.0013371321, -0.012498955, -0.021020789, 0.010745973, -0.011843929, 0.046043057, 0.028949238, -0.0055140094, 0.022641616, 0.009141385, -0.030503927, -0.0035874664, -0.08058568, -0.024889989, -0.002140451, 0.033341873, 0.025861286, 0.009022471, -0.0145849455, -0.036681455, -0.015412721, 0.004051568, 0.024839025, -0.00671564, 0.040555652, -0.002582631, -0.06671572, -0.021641338, -0.026754638, -0.01517102, -0.002195349, 0.010067215, -0.045205284, -0.074985735, -0.03450403, 0.018427664, -0.011878904, -0.008146105, 0.0076624546, 0.017137598, -0.045153324, -0.029118927, 0.047391705, 0.015689146, -0.010871133, 0.017115615, 0.014975162, 0.05179452, 0.0043424824, -0.009567576, 0.03862505, -0.039237607, 0.00053811056, -0.030680547, -0.03408958, 0.001634817, 0.01627822, -0.009149378, -0.0032826245, 0.013992874, 0.00058373384, -0.0077387746, 0.002461219, -0.027614515, -0.01836271, -0.012227152, 0.010916101, 0.008564802, -0.015412847, -0.0053088455, 0.010116179, 0.020356769, 0.023259543, 0.04824908, -0.04334663, 0.00641136, 0.0069829463, -0.026897535, -0.05455652, -0.012746276, 0.029480165, 0.014455538, 0.07964337, 0.014229203, -0.026643844, 0.023246178, 0.013300999, 0.024844272, -0.007901781, 0.046881072, -0.055039167, -0.0045056148, -0.0006285452, 0.021341056, 0.007601499, -3.3975415e-05, -0.024744093, -0.052583948, 0.009759188, -0.009788416, -0.035162803, -0.013255407, -0.017487345, 0.03005325, -0.0015608704, -0.03014606, -0.012379541, -0.0076189865, -0.04829305, 0.00014161627, -0.0077643814, 0.0020005521, 0.026986472, 0.007838828, -0.023291145, -0.05847568, 0.035945486, 0.006712143, -0.0063868784, -0.009255302, 0.06980549, -0.0024464796, -0.0076894355, 0.008762409, -0.05585458, -0.0007263181, 0.01669267, 0.0019742276, 0.039072726, 0.008592528, 0.009933811, 0.010728236, -0.012109238, -0.0023280652, -0.017351443, 0.032795265, 0.012721295, 0.0018476628, 0.028251555, 0.030197145, 0.007748393, -0.0284634, 0.037761673, 0.026918521, -0.0041589905, 0.027973754, -0.0022803498, -0.0052219713, -0.00022383801, 0.04093238, -0.0028927815, 0.023615535, 0.0077768723, -0.011992321, -0.033463784, -0.071620174, 0.024445059, -0.012506949, 0.04659428, -0.021993583, 0.0059200907, 0.010464427, 0.03197511, 0.06899657, 0.0151572805, 0.023824133, -0.001375005, -0.02579833, 0.05050145, 0.049716026, 0.01264385, -0.008528578, 0.03180898, -0.027008643, -0.019737717, -0.011831438, -0.039997555, 0.0327508, -0.04441086, -0.010453248, 0.07329896, -0.04015544, 0.017716179, -0.05170908, -0.031753022, -0.018812886, -0.049128447, 0.021963293, -0.07034809, 0.0015968444, -0.024148526, 0.054710407, 0.042778917, -0.009011478, -0.020187391, -0.015132799, -0.020409543, 0.027363447, -0.040304706, 0.032783028, 0.0605262, 0.021746263, -0.05918817, 0.011294076, 0.014428559, 0.008497351, 0.01973322, 0.010050726, -0.0057883114, 0.08183578, -0.0021234632, -0.038197108, -0.005441562, -0.07718814, 0.04492149, -0.007934383, 0.0027819867, 0.0077803694, -0.0101546515, -0.08792237, -0.041174203, -0.05692081, 0.05351727, 0.029224351, -0.03953539, 0.0051359087, -0.00022571166, 0.024138533, 0.03974024, 0.01859804, -0.029828414, 0.014693991, 0.008168588, -0.02255118, 0.012827717, -0.018348785, 0.027806876, -0.052918706, -0.007997213, -0.022693077, -0.0052881734, -0.0045497073, -0.003789258, 0.04890661, 0.06326222, -0.027519085, 0.0008998488, -0.032097273, -0.06718338, -0.0030123203, 0.054270726, -0.025044877, 0.02519277, 0.043230966, 0.017252015, -0.034746855, -0.029217482, 0.027734367, 0.015132987, 0.0058817435, -0.011240865, -0.021668319, -0.048800685, 0.0129024135, 0.022376556, -0.0115702525, 0.032854225, 0.051594663, -0.02968052, -0.048042234, -0.036871318, 0.023899455, 0.012923648, -0.044239987, 0.04517131, 0.030198647, -0.0015215239, 0.013674105, -0.032687094, -0.020358268, 0.052422065, 0.033132024, -0.0038332262, -0.04032082, 0.01601641, 0.017667715, 0.0029788443, -0.019217594, 0.012680479, -0.0040505687, 0.013281139, -0.06414958, 0.017515326, 0.013041281, 0.026228143, -0.05423675, 0.016773362, -0.039885134, -0.007895161, -0.00064903026, -0.0051687597, -0.0158915, 0.021470463, 0.0045952993, -0.01945642, -0.0017070146, 0.00901048, -0.013029571, -0.0153657235, -0.008709697, 0.028636776, -0.036741413, -0.00971397, 0.049919374, 0.03034429, -0.032440525, 0.018342726, -0.010094695, 0.038500138, -0.036244772, 0.085682996, 0.031167446, 0.018892327, 0.020107323, 0.012837211, 0.03836024, -0.048170637, -0.006621458, 0.022756532, 0.0025313557, -0.0038172377, 0.0051207943, 0.043946195, 0.036941268, -0.014376596, 0.059460968, 0.025695404, 0.011139939, -0.045105983, 0.05064235, -0.009709973, 0.011416738, 0.019723726, 0.042775545, 0.023410559, -0.0019326013, 0.03983517, 0.03217197, 0.0403448, 0.0006830057, -0.018188588, 0.009082178, -0.016632464, 0.0055599767, -0.008354454, -0.035298456, -0.0043783314, 0.022223918, -0.019365735, 0.018745435, 0.026254999, -0.012974611, -0.03819536, 0.015474801, 0.0324715, -0.022822483, -0.032550443, 0.02759322, 0.03529046, 0.014622418, 0.035552774, 0.03128536, -0.053401604, 0.05212028, 0.02879666, -0.019216344, 0.004586681, -0.04224343, -0.015298928, 0.03765909, 0.03362667, 0.051202945, 0.044801578, 0.06303838, 0.044252977, -0.038934074, -0.0004616659, -0.0029588589, -0.054988205, -0.032434527, -0.05668498, -0.006574149, 0.0061110775, -0.0005377671, 0.0023470514, 0.04357147, -0.026383907, -0.009028466, -0.0015471304, -0.06484307, 0.00701992, -0.044072106, -0.031785, 0.001979068, -0.048201118, 0.03325993, 0.04833852, -0.046203814, -0.024479473, -0.016757373, -0.029428704, -0.048025247, 0.025272712, -0.01637721, -0.01699545, -0.036161833, 0.01873919, -0.0066696736, 0.015483795, 0.013874459, 0.034648925, -0.033557713, -0.024162015, -0.02046619, -0.023632148, -0.003732299, 0.03091363, 0.06931384, 0.00018211821, -0.013577174, 0.013612148, 0.0029688515, 0.024663651, -0.005608941, 0.00022283873, 0.02760952, -0.004460772, 0.016976714, -0.042539217, 0.009168365, -0.006879771, 0.015721623, 0.014709355, 0.032546446, -0.061587434, -0.032356586, 0.021256616, 0.048624314, -0.017830595, -0.0016717901, 0.045069385, 0.034999672, -0.030512918, -0.0052759317, 0.008335592, -0.036871318, 0.02260564, 0.020447202, -0.040758006, -0.021378716, 0.003056788, -0.07097664, 0.01818384, -0.026188048, 0.03213275, 0.04113623, 0.023776636, -0.061013844, 0.016878098, -0.018447151, -0.01875243, -0.027998738, -0.0005630925, 0.009167615, -0.019352995, -0.023876721, 0.01770169, -0.085958794, 0.023593927, -0.0063506546, 0.011774979, -0.020962207, -0.010116679, 0.019017737, 0.027905807, 0.008814996, -0.020896628, 0.031847455, 0.01872345, 0.03677039, 0.0005593452, 0.02090837, -0.032460507, 0.0029748473, -0.028052447, -0.013881454, -0.011281773, 0.008716067, 0.016824825, 0.020145422, 0.015886504, 0.02089288, -0.08104535, -0.04961559, 0.020462941, -0.04100133, -0.0044670175, 0.021945618, 0.067244336, 0.008026192, -0.044745617, -0.035492316, 0.021262614, -0.010814673, -0.0037378264, 0.007182802, 0.0037345474, -0.030981578, -0.037882585, 0.036224786, -0.012476222, -0.048263073, -0.053085584, -0.016619347, 0.03981119, -0.00655026, 0.045899283, -0.02300935, -0.049050506, -0.022940366, 0.0047404445, -0.052809782, -0.008936533, -0.0072417594, 0.012946631, 0.014780804, -0.009253554, -0.007478338, 0.047295276, 0.006872027, 0.019925581, -0.0059045395, 0.051922426, 0.015772587, 0.000327513, -0.05763604, -0.0026305963, 0.04445183, -0.022809494, -0.029510643, -0.016959727, -0.05874449, 0.016957821, 0.005291171, 0.018995753, -0.030961594, 0.003324344, 0.04591877, 0.03662953, -0.0015563737, 0.015552245, 0.014419065, -0.054348666, -0.026597252, -0.027996084, 0.013711577, -0.042702597, 0.00205876, -0.018403681, 0.015512774, 0.03037402, -0.0047970284, 0.01707864, 0.03411531, 0.009524857, -0.0060296366, 0.01319645, 0.03972288, 0.050577525, -0.04485954, 0.06869029, 0.0044461573, 0.054560516, 0.010934212, -0.08349557, 0.05639219, 0.00054710405, -0.022262888, -0.039903123, 0.012185182, 2.248373e-05, 0.025915245, -0.010189626, -0.07201189, 0.018211821, 0.0069659585, 0.004059562, -0.0051705083, -0.004067057, 0.003996393, 0.015091078, -0.01514504, -0.0120377885, -0.05058739, 0.04304485, 0.017681703, -0.010928092, -0.014463534, 0.019083189, -0.0064458353, 0.037416425, -0.023800777, 0.045289226, 0.03396792, 0.046270516, 0.012528934, 0.024989916, -0.01169154, -0.016705912, -0.036450874, 0.080731325, 0.018556822, 0.0143955825, -0.027606023, -0.021672318, 0.02311927, -0.025565498, -0.029775452, 0.01588001, 0.052697863, -0.022656605, -0.015663665, 0.06126966, 0.02558636, 0.030708278, 0.009448162, 0.002565893, 0.0073197028, -0.034327157, -0.03816438, -0.030246112, -0.0007604497, 0.0097729275, 0.001850161, 0.010035737, -0.013024387, 0.0743412, 0.05180276, 0.0020185392, 0.0045686937, 0.054565262, 0.053586718, 0.0353087, 0.006317928, 0.017711932, -0.053107064, -0.0019610808, 0.027035436, -0.016923752, -0.06215602, -0.008481862, 0.0008267767, 0.0069292355, 0.046424404, 0.020831862, -0.034031373, 0.0026320952, 0.028253553, 0.008254027, 0.026787365, 0.0037053186, 0.01500639, -0.05795806, -0.035410374, -0.002920886, -0.031250384, -0.036498338, -0.047627535, -0.0032956148, -0.008406916, -0.040423248, -0.037653502, -0.036855828, 0.0060416274, 0.0371731, -0.0061535467, -0.059991587, -0.04399017, 0.025913246, -0.0069469726, -0.0092308195, -0.03505657, 0.013909434, -0.016349168, 0.019095182, -0.054754376, -0.022913419, 0.024591204, 0.018505609, 0.005069894, 0.0019625798, 0.027574044, 0.01648707, 0.0018968149, -0.021420874, -0.0065612514, 0.03050992, -0.04077749, 0.00636633, 0.033202972, 0.0032916178, -0.050637353, 0.007739149, 0.00080932054, -0.013731563, 0.023403564, -0.053640682, -0.0026881173, 0.041691832, -0.0047534974, -0.002527171, -0.0074740914, 0.002598245, -0.030504923, 8.086336e-05, -0.0042913947, -0.06279056, -0.05267788, -0.002459595, -0.012578023, -0.07623483, 0.016852804, 0.011037761, -0.023196215, -0.031247387, 0.04083445, 0.0022503715, -0.012796489, 0.004697195, -0.07935458, 0.00023595424, -0.015115686, -0.0095645785, 0.011155303, -0.04478759, 0.013913931, 0.017171323, 0.03894881, -0.03612186, -0.014088508, -0.016276471, -0.016986208, 0.052299153, 0.033635657, -0.010913853, 0.0043715863, 0.0054238252, -0.0262194, -0.021939967, -0.068804204, -0.034112815, -0.0059496947, -0.016939865, 0.01626373, 0.018257452, 0.035436355, 0.016271226, -0.0023273157, 0.028605798, -0.045674946, -0.023246178, 0.031483687, 0.0016637959, 0.020393243, -0.02200008, -0.0052566957, 0.0060995864, 0.010582842, -0.030599855, -0.006862034, 0.05453853, 0.003381303, -0.007731405, 0.051686596, 0.012426008, -0.0021064756, -0.0216963, 0.044447836, -0.016383894, -0.07644368, 0.0041225166, 0.059685808, 0.00938321, -0.0137860235, 0.005539991, -0.0038851884, 0.065670475, -0.07394249, 0.029622562, -0.03782544, -0.044733126, -0.00015189008, 0.009616041, 0.0023288147, 0.0028349485, 0.04150896, -0.024463298, 0.024151273, 0.013360832, 0.019737717, 0.04404388, -0.026030662, 0.045353677, -0.028865362, -0.01099979, 0.025830807, -0.0033997898, 0.010873037, 0.018562566, -0.008090145, 0.018575558, 0.020905014, -0.05213527, 0.03792855, 0.021478456, -0.006075104, 0.036993477, -0.038424693, 0.022862455, -0.005291046, -0.043532494, 0.028074183, 0.02553552, -0.015635684, -0.055242524, 0.01905521, -0.017257262, 0.014057827, -0.010967064, -0.0026231017, -0.00248058, 0.0006730129, 0.0043938207, 0.05504816, -0.037039198, -0.05615536, 0.051607653, 0.007506817, 0.05710068, 0.06840391, -0.033490762, 0.062450808, 0.0035874038, -0.06323424, -0.017219538, -0.036427636, 0.004733075, -0.005323023, 0.0212821, -0.001911117, 0.03733748, 0.06808773, 0.04196813, 0.012286609, -0.12506948, -0.0093626, -0.04077974, -0.027573047, -0.015293432, -0.03336898, 0.0043423576, 0.003554428, 0.03721457, -0.020500164, -0.030148683, 0.06777833, 0.007131839, -0.010882125, 0.0023562948, 0.015003892, -0.055986486, -0.0017347446, -0.014126777, 0.06743095, 0.028999887, 0.0330607, -0.027607022, -0.007908277, -0.05875948, 0.018188836, 0.023804149, 0.011221879, -0.010073773, -0.0151910065, -0.023796529, 0.01706515, 0.0016058378, 0.0075645256, -0.03018728, 0.07418806, -0.0035230755, -0.015226982, -0.012090001, 0.001777214, -0.06049722, 0.027270265, 0.023123266, 0.04195464, 0.012741528, -0.049524162, 0.089743055, -0.010326778, 0.014632411, 0.006518283, -0.02002301, 0.03238856, 0.014899468, -0.01827066, -0.00549507, -0.03002602, -0.06280255, -0.020623306, -0.017783131, -0.023942173, 0.011660562, 0.0044942475, 0.043585382, -0.010900113, -0.03928857, -0.027505096, 0.05118296, 0.02240179, -0.035888027, -0.051012084, -0.021537414, -0.038503136, 0.012182934, -0.0005710867, -0.041366562, 0.022597646, -0.035535783, 0.010865636, 0.009641023, -0.03125738, -0.0040490697, 0.030035764, 0.042607166, -0.02980643, 0.0011571626, -7.594504e-05, -0.01044744, -0.019535862, 0.0011371771, 0.018664993, 0.03687057, 0.020710606, -0.023690857, -0.006947472, -0.04250324, -0.0040664324, 0.06451981, 0.016619973, 0.02192813, -0.011271655, 0.029252829, 0.007265742, 0.0035384393, -0.0054400633, -0.01886235, 0.031442247, 0.02766398, -0.047385458, 0.020770969, 0.025555504], [-0.0054062926, -0.095297836, -0.008119363, -0.015446024, 0.029757347, 0.02276565, 0.029956661, -0.004560338, 0.0442016, 0.048778918, -0.020469544, 0.04383882, -0.07730061, -0.033261843, -0.041643444, 0.051965944, -0.0050673364, -0.03876038, 0.0063927406, 0.05662228, -0.03089025, 0.023374576, -0.022704555, -0.0027841066, 0.0037395966, 0.06108877, 0.018463766, -0.011954137, 0.0076800236, 0.05084504, 0.017856352, -0.053106047, -0.006104434, -0.0016697571, 0.0070960885, -0.019742213, -0.017150732, -0.010265446, -0.046619896, -0.02325037, -0.07131029, 0.022242052, -0.05188112, 0.0712497, -0.0025245796, 0.04043771, 0.004698748, 0.0037818202, -0.016473008, -0.02966886, -0.008297788, -0.02499738, -0.027246116, 0.03135311, -0.0019020183, 0.04747472, 0.026977658, 0.012836225, -0.00021711385, 0.016757151, -0.01267642, -0.006035765, -0.028562842, -0.026119428, -0.015007112, 0.028333861, 0.03530069, -0.018853435, -0.022677794, -0.028837122, -0.01931354, -0.012011571, 0.041560642, -0.025661847, 0.06021425, -0.019685537, -0.02584286, 0.0012006902, -0.016951038, -0.02821243, -0.008089763, 0.01651277, -0.025633574, -0.09658032, -0.06445655, 0.0125017185, -0.027134687, 0.016326962, 0.019510835, 0.013744822, -0.058246095, -0.016370384, 0.03771318, 0.038639575, 0.004215038, 0.012698888, 0.0061003943, 0.03556426, 0.011363133, 0.00058810087, 0.012210887, -0.026811542, -0.0021509419, -0.01759449, -0.021792172, -0.0007538395, 0.007027736, -0.024272319, -0.024812864, 0.0015925048, -0.022742676, -0.018503843, -0.0012118614, -0.032951824, 0.008611847, -0.041282937, -0.020880293, 0.0054334635, -0.048579983, 0.009186061, 0.0012400735, 0.0072343093, 0.043468215, 0.038949214, -0.027200831, -0.0055157016, 0.020737907, -0.021075947, -0.03364356, -0.021547856, 0.030741805, 0.0076828008, 0.05362447, 0.013535786, -0.016842986, 0.028188445, 0.027350286, 0.051818516, -0.011773125, 0.038697515, -0.04947091, 0.0023955738, 0.033738483, 0.03567332, 0.029392166, -0.01261381, 0.016478436, -0.06018194, -0.011917783, 0.008531564, -0.036178235, -0.0030403195, -0.0066381297, 0.01766947, 0.007038528, -0.043815725, 0.016376065, 0.01803178, -0.05422797, -0.018456697, -0.029846841, -0.004206455, 0.026979173, 0.012499699, -0.022529349, -0.059075166, 0.033907127, 0.008492686, -0.010731989, 0.0016586488, 0.052433502, -0.002960827, -0.007801456, -0.021227676, -0.04510717, -0.011795593, 0.017392242, 0.015660726, 0.007999824, 0.00070435775, 0.018274928, 0.012721863, -0.011010891, -0.0023336583, -0.020695494, -0.00060438435, 0.018398631, -0.016882116, -0.009923618, 0.015258687, 0.04885592, -0.05000132, 0.033841487, 0.0017978795, -0.04945159, 0.029140972, 0.006030716, 0.009175332, 0.035363935, 0.04423013, 0.024223847, 0.008352445, 0.011443021, 0.007655851, -0.0024296555, -0.029391157, 0.025839956, -0.010763798, 0.047127843, -0.03809086, 0.011225417, 0.00722156, 0.043434888, 0.086396165, 0.03119926, 0.015722074, 0.009207647, -0.011016256, 0.04770446, 0.090268865, -0.0042140284, -0.01189279, 0.038947195, -0.02140307, -0.016720291, -0.02516905, -0.05115808, 0.037998963, -0.02782257, -0.019387541, 0.052237406, -0.036591258, -0.007339458, -0.03531786, -0.022766028, -0.010049847, -0.04828814, 0.054806355, -0.07070742, 0.0024445506, -0.026405841, 0.02659594, 0.046442166, -0.012837993, -0.041767657, -0.010395209, -0.0049693827, 0.00588732, -0.04487363, 0.034929577, 0.067503475, 0.0002726546, -0.02538061, 0.0014441857, 0.012586544, 0.0066074566, 0.030218208, 0.020099945, -0.00055641733, 0.08371305, -0.005292529, -0.04256643, 0.0014164153, -0.055203468, 0.036516026, -0.028543148, 0.018441802, 0.008429066, 0.024102163, -0.0600446, -0.034209065, -0.051145967, 0.039803535, 0.04289261, -0.008028164, 0.012953113, -0.029912734, 0.027924882, 0.035543304, -0.008343231, -0.024542954, 0.0024531656, -0.010237675, 0.0007094069, 0.014642435, -0.031970266, 0.020548059, -0.058913592, -0.024705032, -0.016035372, 0.00036353947, 0.008385643, 0.01630424, 0.03850792, 0.037341565, -0.019810125, 0.005281421, -0.019870462, -0.052826323, -0.027270509, 0.011277802, -0.044326443, 0.0018299362, 0.010447215, 0.0037580892, -0.02130253, -0.04187356, 0.01066313, 0.0042334674, 0.010491332, 0.0021717697, -0.032961037, -0.061236206, -0.0032150522, 0.02552956, -0.015137631, 0.032914963, 0.0619855, -0.04280879, -0.054569293, -0.058707584, -0.0015667541, 0.026102135, -0.041232444, 0.015088403, 0.050993484, -0.009521705, 0.018815188, -0.028830195, -0.038284745, 0.04229176, 0.03909564, 0.014974797, -0.015822614, 0.0034902312, 0.040591203, -0.0076579964, -0.033225488, 0.040316526, 0.0023387705, 0.046156388, -0.03203793, 0.029467147, -0.02277474, -0.005739884, -0.039732844, -0.016176496, -0.036840685, 0.011112695, 0.013402488, -0.0071536493, -0.017094813, 0.021748498, 0.03032727, 0.009704989, 0.0028063226, 0.0100502735, 0.0129450355, -0.017723938, -0.022042176, 0.020572007, -0.02522926, 0.014632463, 0.03875621, 0.032881137, -0.040548284, 0.008631538, -0.0028739814, 0.037036594, -0.034265995, 0.078697205, 0.008477096, -0.008124854, 0.02396129, -0.006994853, 0.023137268, -0.037556656, -0.007759548, 0.034384523, 0.009175585, 0.026635325, 0.032182332, 0.028252065, 0.033625886, -0.005758692, 0.060268786, 0.027370483, 0.0041363975, -0.024669813, 0.053072724, -0.00642556, 0.0022276891, 0.020052232, 0.016227998, -0.010608899, -0.012516362, 0.026590262, 0.03156747, 0.042526733, -0.01669656, -0.011416148, -0.014438514, -0.02130947, -0.018891934, -0.01405888, -0.017140886, -0.009124841, 0.0395127, -0.008320005, 0.0016843996, 0.0029335616, -0.029444678, -0.024371281, 0.03228306, 0.010939508, -0.025494214, -0.03171377, 0.039045148, 0.022739395, 0.0014814233, 0.026052652, 0.044917323, -0.05531758, 0.05243451, 0.018397117, -0.035730965, 0.00012774373, -0.020832073, 0.00567576, 0.03298237, 0.0005432895, 0.038226176, 0.009863406, 0.052033607, 0.05275362, -0.02546998, -0.006835552, -0.017436767, -0.03580662, -0.03560667, -0.045428928, -0.010264436, 0.018255236, -0.00216205, -0.0069506727, -0.0043761064, -0.026354594, -0.0075636404, 0.01820121, -0.041218054, -0.005168193, -0.01854853, -0.0611534, -0.025489166, -0.0261602, 0.041096117, 0.051507484, -0.058582366, -0.049098022, -0.032994743, -0.018221406, -0.0019348379, 0.047483303, -0.024179414, 0.001286084, 0.011011207, 0.019506417, -0.004600037, 0.03267008, 0.016120955, 0.041859552, -0.044069063, -0.02047939, -0.037084054, -0.040280174, -0.0033801596, 0.023858793, 0.08261535, 0.0069829873, -0.0027618902, 0.024953702, 0.014009524, 0.014065443, -0.004288251, 0.008261435, 0.030599926, 0.0010997069, 0.005007756, 0.01268677, 0.015485614, 0.03146333, 0.009893322, 0.00967419, 0.035113875, -0.027098963, -0.025723448, -0.006270046, 0.06260554, -0.01605961, -0.03525904, 0.045563616, 0.032330144, -0.027684037, 0.011550962, 0.0048916256, -0.04150409, -0.009541396, 0.039722744, -0.03273471, -0.020033045, -0.008671679, -0.03975506, 0.03212881, -0.031568006, 0.06613187, 0.029305322, 0.00043877194, -0.059545748, 0.018299164, -0.015361057, -0.0025851696, -0.04462813, -0.012060422, 0.017624281, -0.010792578, -0.0020085557, 0.013825608, -0.09963809, 0.037131518, -0.021417525, -0.008926662, -0.022849467, -0.008753727, -0.0019328182, 0.032359052, 0.031417888, -0.012599673, 0.050578438, 0.0050431006, 0.004637653, -0.015514047, 0.00071281503, -0.032374702, 0.016277984, -0.019742213, -0.0062648547, -0.006192699, -0.01120743, 0.010651707, 0.004200901, -0.011273762, 0.0031345182, -0.053854335, -0.032104574, 0.00927783, -0.021639498, 0.031567343, 0.004071642, 0.056219358, 0.037930295, -0.054930814, -0.022853505, 0.010485084, 0.0039252164, 0.0074056024, 0.020317817, 0.015868498, -0.036246903, -0.07463288, 0.035048235, 0.0023705803, -0.022672744, -0.060315236, -0.05273544, 0.047668606, -0.0067618345, 0.014985905, -0.02666158, -0.018047273, -0.02579098, 0.008096153, -0.055123188, -0.02531093, -0.0022747726, 0.009340913, 0.046505786, -0.023459814, 0.00768886, 0.01366555, 0.01635776, 0.058384437, -0.032477707, 0.05563568, -0.0014420399, 0.004627554, -0.06863727, 0.0032132848, 0.030648334, -0.010596165, -0.010892046, 0.0028563095, -0.053272795, -0.007137492, 0.02900439, 0.0057823285, -0.023261728, -0.0038535183, 0.038849745, 0.045009214, 0.03658722, 0.0275159, -0.0002718972, -0.05066402, -0.0483356, -0.04750249, 0.01660517, -0.051006608, 0.008012511, 0.0026407104, 0.0011936212, 0.0026980182, -0.032537792, 0.01920997, 0.014562281, -0.0037237552, 0.0130056245, 0.006924417, 0.061607823, 0.046937995, -0.045736298, 0.047900867, 0.009287929, 0.070663996, -0.007514159, -0.043348547, 0.06214783, 0.015529699, 0.009050113, -0.0615028, 0.0038908822, 0.03042876, 0.010302052, -0.0014954348, -0.042212993, 0.0066722115, -0.0016655283, -0.024250103, -0.032465085, -7.296035e-05, -0.020054488, 0.041719183, -0.018925007, 0.014377986, -0.035364944, 0.031157859, -0.017698312, -0.00037704597, -0.014136131, 0.0034422644, -0.023311464, 0.038131252, -0.012142218, 0.031229049, 0.046472967, 0.051133845, 0.03266806, 0.010456809, -0.00345312, -0.017678622, -0.038660906, 0.07454175, 0.0027220019, 0.03414898, -0.03467914, -0.017505499, -0.0051158085, 0.0012319948, -0.01938019, -0.0009098585, 0.03111898, -0.023418507, -0.030197507, 0.035171937, 0.010248531, 0.033190142, 0.031092722, 0.02158465, -0.006680038, -0.03154415, -0.031421926, -0.027638467, 0.00047765046, -0.01315609, 0.010802171, 0.0043468215, -0.018392067, 0.08268301, 0.04145663, 0.029422462, 0.01309247, 0.023337215, 0.0387937, 0.023200445, 0.008484355, 0.00018782871, -0.054185558, -0.008305867, 0.040640682, -0.034867473, -0.07704613, -0.01681471, -0.003290032, 0.013862972, 0.04788017, -0.00378485, -0.03933901, 0.010062974, 0.018196918, 0.025589138, 0.014620346, -0.0040817405, 0.021098418, -0.060774967, -0.014851092, 0.008446233, -0.036860883, -0.049031377, -0.037525352, -0.0233049, -0.014450694, -0.03953845, -0.03994996, -0.023143074, 0.012638299, 0.05460363, -0.010932188, -0.07377024, -0.041164536, 0.031685494, 0.034439307, 0.0031860196, -0.036028277, 0.02011989, -0.021095892, 0.033823054, -0.062870115, -0.027380455, 0.030401997, 0.033662748, 0.0049751895, 0.01904442, 0.009139736, -0.00075081, 0.012039215, -0.021587176, -0.027042286, 0.024522757, -0.03684624, 0.004668453, 0.010616362, 0.031928357, -0.069060385, 0.015361816, 0.02189467, -0.0020050213, 0.026319752, -0.048245475, -0.021641707, 0.027705748, -0.024715636, 0.012769325, -0.013373709, 0.012537063, -0.027826296, 0.0044512125, -0.004315769, -0.05662329, -0.046922848, -0.017451914, -0.016304744, -0.07610093, 0.003052217, 0.022365754, 0.021909691, -0.059066076, 0.029924348, -0.018849649, 0.01978917, 0.0042609223, -0.084092736, 0.0058613163, -0.038614962, -0.014918751, -0.011529756, -0.037016902, -0.0082013495, 0.013960925, 0.06186533, -0.048369937, -0.03562485, -0.021607373, -0.007048248, 0.027862271, 0.013653431, 0.009625212, 0.0074071167, -0.00021976465, -0.02303704, -0.057277665, -0.08144092, -0.018062862, -0.009278082, -0.0050675888, 0.019479152, 0.014787978, 0.01693286, 0.019261533, 0.013280172, -0.019144392, -0.0071226596, -0.012294703, 0.04719348, 0.00079719914, 0.007634834, -0.05764625, 0.043677248, -0.035216875, -0.023594216, -0.015907755, -0.033417862, 0.04731416, 0.018628368, 0.016060365, 0.04767113, -0.0007260691, -0.00062609575, -0.04044023, 0.045141507, -0.018576488, -0.07757932, 0.022593474, 0.0852601, 0.021111544, 0.013768048, 0.001814163, -0.02347676, 0.041998908, -0.053404957, 0.018031558, -0.028869074, -0.042988732, -0.0063033705, 0.021275533, 0.0013476206, -0.0107380785, 0.04396417, -0.015271182, 0.028859226, 0.0060685845, 0.0077648493, 0.03625271, -0.029860727, 0.10041768, -0.03311037, -0.03572217, 0.028560067, -0.0101265935, -0.0016702618, 0.017688882, -0.028633846, -0.00038171644, 0.020287523, -0.025391087, 0.032415602, 0.022331676, -0.019008696, 0.023071123, -0.0641738, -0.006990056, -0.014370413, -0.043074377, 0.05029569, 0.017683672, -0.020929776, -0.083290935, 0.023030225, -0.022355152, 0.035638984, -0.033348687, -0.00876736, 0.0023569476, 0.019060576, 0.014896535, 0.01970586, -0.026400035, -0.06341744, 0.050407525, -0.014197731, 0.05146709, 0.051852845, -0.055415407, 0.037632395, 0.034540292, -0.04234124, -0.014657205, -0.049469646, -0.03452817, 0.011214183, 0.026439419, 0.009218503, 0.03364457, 0.07659272, 0.02849291, 0.031281058, -0.09484341, -0.003753545, -0.031789508, -0.028002638, -0.024503948, -0.021646503, -0.01724736, 0.0011527231, 0.010322123, -0.013372193, -0.035636712, 0.05444086, 0.022094112, -0.0043317014, 0.017256953, 0.011393428, -0.028372237, -0.045986734, -0.04491934, 0.062306125, 0.020940883, 0.04005296, -0.0029345714, 0.009196034, -0.077789366, -0.0039109527, 0.020923717, 0.021334717, -0.0017207536, 0.008323034, -0.000117014264, 0.0050855135, 0.0020964108, 0.03607978, -0.021851247, 0.04810233, 0.0055013113, -0.033117436, -0.0025972875, 0.00031178558, -0.052725848, 0.032397423, 0.0055015637, 0.038317565, 0.025148854, -0.046556786, 0.054473363, 0.0072899763, 0.008615885, 0.023292277, -0.024773698, 0.017661959, 0.025751408, -0.013967995, 0.000346751, -0.007320208, -0.051527683, -0.005558872, -0.022368534, -0.0057151434, 0.019354438, -0.0037457189, 0.034938164, 0.0045944825, -0.015612001, -0.0525673, 0.054850027, 0.047105625, -0.024416314, -0.030404016, -0.0048694094, -0.041187003, 0.0056614964, -0.012343554, -0.03413686, -0.0074106515, -0.037227076, -0.0036980042, 0.011845327, -0.0054429937, 0.0026876675, 0.019067645, 0.027064502, -0.037320357, -0.010433598, 0.008269261, -0.0073645776, -0.003237521, 0.022539448, 0.0048255445, -0.018786913, 0.051421225, -0.021078221, -0.016862173, -0.049764518, -0.0066345953, 0.06302058, -0.011149554, 0.029606251, -0.022844542, 0.009422741, -0.00019792705, -0.015469077, -0.03179304, 0.010457818, -0.00048673895, 0.008016045, -0.05869547, 0.0030471676, 0.040556867], [-0.012113127, -0.09853421, -0.025496922, -0.017921673, 0.028404718, 0.0076441797, -0.010066588, -0.0017092461, 0.02253851, 0.041200504, 0.016077243, 0.020151027, -0.02582696, 0.008827915, -0.031073423, 0.0101163825, 0.017113551, -0.022611964, 0.02908455, 0.064687565, -0.021694483, 0.018588746, -0.027431116, 0.007895412, 0.012445789, 0.0046547996, 0.005598516, 0.033669285, 0.0010421795, 0.015152147, 0.0032036789, -0.043903414, -0.01670234, -0.0332911, 0.012358753, -0.0050341175, 0.012804634, -0.0026818723, -0.051389318, -0.04372147, -0.05192285, 0.020394493, -0.009522766, 0.06064809, -0.0037604647, 0.037144568, 0.032733697, 0.016188353, -0.024959067, -0.020633072, 0.024343021, -0.028822824, -0.033159003, 0.03164039, 0.009099518, 0.020108076, 0.013928905, 0.00034829977, -0.009516285, -0.036738683, -0.030486185, -0.014821285, -0.054190528, -0.008317297, 0.005300371, 0.017321778, 0.0064452174, 0.018055417, -0.036277086, -0.067163266, -0.03393225, 0.026395269, 0.03413986, 0.005062512, 0.0008257138, 0.025257006, -0.049579043, -0.008278948, -0.040246602, 0.02413644, -0.004438649, 0.02377101, -0.019387504, -0.071953356, -0.026561525, 0.02623766, -0.012990023, -0.0023691175, 0.034211054, 0.018299036, -0.03157342, -0.012183651, 0.038764928, 0.007505292, 0.000715372, -0.017118387, 0.00082921167, 0.04224957, 0.0029104713, -0.00512561, 0.051846925, -0.050271217, -0.017798217, -0.010378109, 0.00251639, -0.0028554306, -0.008050144, -0.025417294, -0.012029537, 0.028759036, 0.0034232244, -0.017884636, 0.020249639, -0.075883776, -0.0123497, 0.00911886, 0.0057390505, -0.0019943262, 0.0032152014, -0.008803224, -0.008353845, 0.023012375, 0.011833654, 0.036268033, -0.03589026, 0.019565796, 0.012703091, -0.025380258, -0.029987218, -0.0083618695, 0.0022559497, 0.023726977, 0.062257957, -0.010518026, -0.048201278, 0.033128962, 0.0036654037, 0.06519302, -0.01457108, 0.03323349, -0.045446355, -0.0067604417, -0.0129846735, -0.0053116875, 0.006949329, 0.000943717, -0.007002415, -0.01895294, 0.0050764526, -0.016044732, -0.026782922, 0.004207375, -0.027648346, 0.024668947, 0.023654139, -0.04679799, 0.015925802, 0.0051472853, -0.06669496, -0.013307717, -0.0047172476, 0.014337338, 0.037889417, 0.013341461, 0.012181491, -0.072233185, 0.006854062, 0.020902308, -0.034578335, 0.0021516294, 0.0658892, 0.0052497536, 0.0010765349, -0.004827535, -0.049426984, 0.01334393, 0.01633403, 0.013612241, 0.022653323, 0.0035326888, -0.0035711657, -0.0095184455, -0.02588478, 0.0112587605, -0.027616661, 0.04027623, -0.009513301, -0.026585802, 0.04925065, 0.010997445, 0.022441803, -0.0067011826, 0.024314217, -0.005990913, -0.027687028, 0.007143978, -0.024497546, 0.00034238418, -0.018068995, 0.036327705, 0.013587549, -0.002156362, 0.024531292, -0.009986343, -0.028562332, -0.053880244, 0.026431482, 0.023547145, 0.043138765, -0.016426004, -0.025621716, -0.0018337307, 0.06374703, 0.04928604, 0.009298668, 0.02964257, 0.0112741925, -0.004380213, 0.050870955, 0.050536238, -2.8086204e-05, 0.014253387, 0.046202112, -0.037768435, -0.031670537, 0.005242758, -0.032987397, 0.034511875, 0.009383055, 0.0022073903, 0.0798677, -0.016362013, -0.017068181, -0.02695905, -0.022619577, -0.043843284, -0.031257063, 0.03687708, -0.07327412, 0.03302773, -0.035481207, 0.054474115, 0.019785855, -0.011569886, -0.021590676, -0.025850829, -0.024988696, 0.011871514, -0.03723531, 0.011588388, 0.042490207, 0.021315884, -0.03089116, 0.017619617, 0.0051007834, 0.020352928, 0.018282061, -0.008380182, 0.017683813, 0.040761, 0.01671057, -0.049587682, -0.022076784, -0.06592377, 0.01987639, -0.007827717, 0.03161457, -0.00017654184, -0.030927539, -0.062353425, -0.041188158, -0.059535343, 0.03175737, -0.0060559204, -0.054664597, -0.010622037, 0.0069299876, 0.047963418, 0.037370082, 0.012974077, -0.049566694, 0.013881015, -0.015869426, -0.041215796, 0.004229301, 0.018840801, 0.024361951, -0.058254693, -0.00325409, -0.035144225, 0.026543004, 0.004677742, 0.04116614, 0.061931208, 0.062178943, -0.020852514, 0.011187157, -0.01006484, -0.07758952, -0.009030795, 0.04881691, -0.024076562, 0.003063351, 0.029110888, 0.015611957, -0.009497457, -0.05172141, 0.02768456, 0.02256608, 0.0024230266, -0.025652476, -0.020337496, -0.07135418, 0.023176776, 0.0039242497, -0.014497419, 0.064262874, 0.06689331, -0.009205691, -0.04486838, -0.029096894, -0.007396651, 0.0066810185, -0.051855978, 0.03649005, 0.035528123, 0.0036378321, 0.009591696, -0.047885228, -0.020028653, 0.036203835, 0.0508457, -0.008230595, -0.023811338, 0.001284558, -0.008536148, -0.025220381, -0.0018032782, 0.025634369, -0.006369498, 0.0047621033, -0.062211867, 0.019300263, -0.010807324, 0.03709601, -0.058333706, 0.025705667, -0.038705874, -0.0011290036, 0.009235216, 0.06436905, -0.0019814663, 0.028742319, 0.012165235, -0.023405993, 0.035405487, 0.008834808, -0.008259402, 0.01020239, 0.00143538, 0.017979285, -0.024785817, -0.018269407, 0.018434169, 0.018694919, -0.016820446, 0.04130832, -0.003868283, 0.060549326, -0.031882882, 0.057710666, 0.04094125, 0.0283076, 0.018472286, 0.016832793, 0.057522193, -0.04394699, -0.008947256, 0.018287925, -0.015619633, 0.015453379, -0.028576322, 0.054034304, 0.031221982, -0.008434091, 0.056489274, 0.05313045, -0.0067435694, -0.061911456, 0.050204344, -0.012525005, 0.033589862, 0.022283984, 0.06662994, 0.037428517, -0.00903491, 0.041677047, 0.028938666, 0.050376568, 0.01173242, -0.0068221698, -0.018552942, -0.023658255, -0.012950722, -0.005945633, -0.029318705, 0.0004423834, 0.0117805675, 0.0048055183, 0.030442564, 0.041950293, -0.013088788, 0.01105403, 0.014712901, 0.031437952, -0.01634473, 0.0042999154, 0.039005462, 0.02746193, 0.03356867, 0.03713078, 0.045672074, -0.06420445, -0.00089042523, 0.033979982, -0.006128965, 0.0011374397, -0.055775702, -0.014947826, 0.0072367755, 0.02454343, 0.062331207, -0.0031869095, 0.07938375, 0.04731692, -0.033140074, -0.0044382373, -0.018732367, -0.0798285, -0.013855037, -0.033275463, -0.027250819, -0.007867841, -0.006640278, -0.0021464855, 0.03193926, -0.03397299, -0.014663081, 0.0061098295, -0.07112795, 0.037961025, -0.010230168, -0.034126487, 0.027180037, -0.05311338, 0.04155976, 0.06956325, -0.02553005, -0.008074012, -0.042516544, -0.028900392, -0.01576495, 0.018275168, -0.03184111, 0.0074741705, -0.073220834, 0.02919895, -0.049247563, 0.017483816, 0.041397214, 0.0054283533, -0.05924481, -0.018777633, -0.025453918, -0.027659046, -0.015718397, 0.03264378, 0.045788947, 0.035658944, 0.013204836, 0.021822877, 0.03405406, 0.05919625, -0.0024746722, 0.019380098, 0.014868198, -0.012528298, 0.011105469, -0.039917387, 0.012500316, 0.013037245, 0.009416388, 0.0020547167, 0.0555078, -0.05580204, -0.038078927, 0.022162175, 0.034078132, -0.010962262, -0.011935241, 0.056134544, 0.06467625, -0.033068057, -0.0030371165, -0.013121504, -0.04314905, 0.04051656, 0.023245499, -0.026051238, 0.011671103, -0.016518392, -0.058287207, 0.00862051, -0.033454888, 0.026972631, 0.059466623, 0.017827023, -0.03286559, 0.019214667, -0.010640247, 0.006637809, -0.05924481, 0.005402016, 0.015461976, 0.0093912855, -0.04744408, 0.024569975, -0.04826012, 0.048147775, 0.025708033, -0.021554155, -0.027276952, 0.01235834, 0.04599059, 0.0054727974, -0.03879394, 0.010208975, 0.052808646, -0.029663969, 0.012229773, -0.025195073, 0.03612894, -0.017525379, 0.022140158, -0.029029405, 0.009194579, -0.021513004, 0.016984232, -0.005678145, 0.015687276, -0.03098343, 0.012808955, -0.08244875, -0.042324364, 0.029943455, -0.023961956, 0.007706113, 0.008827915, 0.046330504, 0.019575158, -0.04787597, 0.0021473086, 0.055778377, 0.004957318, -0.03488492, 0.019813633, 0.01002626, -0.05704812, -0.037074227, 0.027649993, -0.0007392947, -0.042557698, -0.046732973, -0.014948033, 0.029005539, -0.03251045, 0.038445793, -0.0132496925, -0.021766499, -0.007828129, 0.013464917, -0.042184036, -0.011006499, -0.015530513, 0.04684408, 0.025073059, -0.0002641955, 0.029611088, 0.04976587, -0.00087489036, 0.043198433, -0.013711623, 0.037455678, 0.02424714, -0.00024485408, -0.0354417, -0.051133353, 0.057656754, -0.0014183018, -0.027513368, -0.019030718, -0.0536144, -0.008390265, -0.015716752, 0.030571165, -0.037468433, -0.018092453, 0.08547753, 0.009033264, 0.020093672, 0.011766988, 0.026175003, -0.03767543, -0.018641831, -0.0187729, 0.002792571, -0.056145243, 0.01322212, -0.032641724, -0.0028477146, 0.01923195, 0.017239835, 0.025994861, 0.052834984, -0.0170653, 0.02135786, -0.010028729, 0.073862806, 0.04407126, -0.04108775, 0.058840696, 0.011518429, 0.061126277, -0.0007106941, -0.100056835, 0.0632456, -0.01599, -0.03144667, -0.02568581, -0.015666546, 0.013294548, 0.017505575, -0.010507737, -0.04353876, 0.016423741, -0.010373994, 0.0155046135, -0.012122746, -0.0040851533, 0.019736884, 0.024947954, -0.008745612, -0.011433735, -0.047953542, 0.0322586, 0.0043662214, 0.003826102, -0.00691435, 0.020385439, -0.012251294, 0.057999555, -0.021519998, 0.028872205, 0.017971877, 0.05320103, 0.010575227, 0.003347299, -0.03188072, -0.017701508, -0.036552083, 0.06190158, 0.018707493, 0.015315108, -0.043234233, -0.042830124, -0.01932413, -0.020472629, -0.012770683, -0.0051394664, 0.010627902, -0.030590557, -0.060096655, 0.027899373, 0.01535338, -0.0001925911, 0.025460606, 0.02288861, 0.018394098, -0.045988947, -0.044979077, -0.035069276, -0.004141532, 0.015063259, -0.00090986956, 0.012722536, -0.0017217974, 0.06539538, 0.049254972, 0.01772085, 0.026509697, 0.05966785, 0.04305749, -0.00873769, 0.01686489, 0.03069246, -0.02769526, -0.015317784, 0.008809809, -0.014680545, -0.01636366, 0.009642724, 0.00010452594, -0.026786212, 0.05722919, 0.045639157, 0.009391697, 0.041655235, -0.013410596, -0.022412997, 0.025955254, -0.010244366, 0.02476771, -0.049352296, -0.030551206, -0.006858795, 0.00041316554, -0.043676205, -0.05601109, -0.012880971, -0.031293586, 0.00369956, -0.023546938, -0.027229419, 0.0075504817, 0.010269661, -0.012136532, -0.021577612, -0.06334437, -0.0075764847, -0.002900492, -0.016636908, -0.028600601, 0.00783533, -0.0093044555, -0.0029003893, -0.05417695, -0.006097895, 0.0001807985, -0.0022452502, -0.0056503676, -0.018404098, 0.03784168, 0.015015522, 0.014435486, -0.026849175, -0.006786779, 0.017244311, -0.027758017, -0.011815959, 0.021470256, 0.03136992, -0.04399184, 0.014923959, -0.014112649, -0.027595673, 0.0056822607, -0.011229337, 0.036319576, 0.019943623, 0.017131554, 0.0044781547, -0.007788417, 0.011259995, 0.01293344, -0.01414485, 0.0063760825, -0.0725657, -0.03941945, 0.01472792, -0.011390138, -0.049463816, 0.034736615, 0.014740627, -0.050435208, -0.019124132, 0.0644762, -0.0034675337, -0.026166772, -0.017363548, -0.05506727, 0.012314514, 0.005673413, -0.038914103, 0.004418176, -0.033110444, 0.02780884, 0.011344768, 0.012895373, -0.042419426, -0.013437345, -0.01756365, -0.015392062, 0.052540954, 0.0077382117, 0.015927037, -0.013945984, -0.0020408279, -0.03635372, -0.020802926, -0.032566827, -0.00934396, -0.014176023, -0.014531163, 0.025483754, -0.008097056, 0.029629607, 0.009462067, -0.044521056, 0.046626803, -0.031515703, -0.009097872, -0.022799926, -0.015615929, 0.00023374305, 0.010510207, -0.031977735, 0.0261677, 0.016622918, -0.017873524, 0.008534091, 0.043697916, 0.012983027, 0.0044418382, 0.007404881, 0.020103548, 0.011904023, -0.033240486, 0.0072221663, -0.020231944, -0.05351286, 0.018530928, 0.089941695, -0.0054896693, -0.020218775, 0.018564878, 0.0013197429, 0.06396165, -0.04805971, -0.0037184898, -0.025278613, -0.053034984, 0.027043412, 0.008278846, -0.0023215872, 0.0018872282, 0.020929055, -0.036855683, 0.007644385, 0.022588713, 0.004744196, 0.021540575, -0.000693899, 0.040623553, -0.048700657, -0.010845595, 0.05231565, 0.009992618, 0.030966016, 0.021912588, 0.0012847637, 0.026941355, 0.04221531, -0.038005877, 0.06186372, -0.01597948, -0.025775932, 0.0078003514, -0.012531899, 0.02818332, 0.011880978, -0.0037573783, 0.049825132, 0.04558319, -0.021795718, -0.050002087, 0.009309599, -0.021031061, -0.021299426, 0.037400123, -0.009717827, 0.023750847, -0.027438885, 0.013820469, 0.053588063, -0.029394014, -0.032398928, 0.011746411, 0.016121274, 0.060931217, 0.05748258, -0.027900608, 0.062465776, 0.028513629, -0.035631824, -0.029475493, -0.03878139, -0.0057177544, -0.009686345, 0.036001574, 0.004940085, 0.07026612, 0.05938107, 0.03562524, 0.012137716, -0.05544731, -0.020439554, -0.020601487, -0.030287832, -0.041369025, -0.04636919, -0.010186238, -0.015634447, 0.052199595, -0.012024599, -0.015302505, 0.063512266, -0.014577664, -0.022263872, -0.023282126, 0.016204402, -0.07993683, -0.0014792067, -0.005374444, 0.06549373, 0.01632971, 0.06092427, -0.011460996, 0.012697279, -0.038968835, 0.0058349343, 0.016524976, 0.011076869, 0.0035870094, 0.0009432026, -0.0060592643, 0.0107892165, 0.025763175, 0.006049747, -0.04526467, 0.0674036, -0.005737198, -0.004846876, -0.01754719, 0.025843835, -0.054384768, 0.025098162, 0.01047528, 0.027991554, 0.0141151175, -0.035648733, 0.05802836, -0.001432557, -0.0031336804, 0.042842466, -0.017244466, 0.0429758, -0.0062112687, -0.036856093, 0.01112512, -0.0044201305, -0.040687546, -0.025813382, -0.0054438883, -0.010940451, -0.006738631, 0.00624059, 0.068182185, -0.010236856, -0.05289054, -0.043398842, 0.06526699, 0.0009830171, -0.007144801, -0.037602898, -0.012850107, -0.025510913, 0.02794999, 0.0134517485, -0.043045346, 0.018707674, -0.064099915, 0.028220976, 0.026661549, -0.016043702, -0.0032164361, 0.041940622, 0.030319108, -0.013395781, -0.005858597, 0.022872869, -0.021720821, 0.010227081, 0.045239154, 0.036369678, 0.027899373, 0.008820508, 0.0002565824, 0.026076341, -0.05580281, -0.0042616953, 0.054746076, 0.013384773, 0.00074238115, -0.008746847, 0.044236694, 0.00790642, 0.012829222, -0.005819297, -0.021932341, 0.031778768, 0.026015386, -0.03278987, 0.011904435, -0.00058718683], [0.02226967, -0.07977743, -0.027195374, -0.035371926, 0.03628086, -0.004044488, -0.0038108092, -0.03759483, 0.012034943, 0.03718344, 0.0027098618, 0.03314546, -0.048778925, -0.006633141, -0.005369856, 0.013691264, 0.008629077, -0.009916385, 0.0124893235, 0.048666984, 0.0119798565, -0.007309988, -0.0008481118, 0.0004293969, -0.0058953795, 0.014643282, -0.023068784, 0.00073255255, 0.008800165, 0.026116936, 0.022469888, -0.036188874, -0.019096863, -0.019732483, 0.0018867333, 0.005859361, -0.031410947, -0.050927542, -0.06926497, -0.028389104, -0.0513073, 0.008515261, -0.017089715, 0.038885847, 0.014422955, 0.06390881, -0.00020339852, 0.018754333, -0.03179232, -0.02933459, 0.024116145, -0.034967244, -0.032471728, 0.0017730278, 0.011568733, 0.020563468, 0.037029658, 0.02403422, 0.012632603, -0.018069277, -0.024684982, -0.00808827, -0.06120036, -0.0006730514, 0.028423885, 0.013278022, 0.017723924, 0.00898935, -0.049890555, -0.06382759, -0.021363202, -0.010708185, 0.027746774, -0.015297265, 0.021166159, 0.019128643, -0.0747419, -0.0025876814, -0.021802487, 0.0047375793, -0.028050987, 0.015846414, -0.0014165066, -0.07032505, -0.044135366, 0.014304285, -0.047366437, 0.014300223, 0.013636972, 0.021816082, -0.04138772, -0.0037240295, 0.022435987, 0.013839575, 0.0068249744, -0.0033304747, -0.0075181536, 0.03737254, 0.0035079184, 0.026792107, 0.05094957, -0.029552113, -0.0067730653, -0.010304114, -0.0030073232, 0.003200702, -0.007568739, -0.022629103, 0.0053515704, -0.02686132, 0.008105662, 0.015719598, -0.0017137034, -0.06744992, 0.028252268, -0.037310567, 0.003677594, -0.01873244, -0.014542289, -0.0012069725, 0.013699032, 0.01415562, 0.024966775, 0.053918973, 0.0019531203, 0.010107071, -0.00971899, -0.025303168, -0.03228537, 0.014253391, 0.012624129, 0.0076266504, 0.00897037, -0.018507147, -0.05119746, 0.05776801, -0.0069759344, 0.062431347, -0.019134294, 0.06304931, -0.03385844, 0.012722827, 0.024099547, 0.022330405, 0.014929487, -0.008905748, -0.0020477572, -0.041494712, 0.018479163, -0.016527014, -0.013535184, -0.035137806, -0.015404967, 0.005492467, 0.004520674, -0.05458073, 0.014449771, 0.021692578, -0.057493985, 0.01226765, -0.02178183, 0.005309902, 0.025355915, 0.002928392, -0.026349999, -0.039731443, 0.03786172, 0.051020548, -0.02795357, 0.0050809025, 0.05288433, 0.030003756, 0.03175171, -0.007461654, -0.016667027, -0.0032017615, 0.04319959, 0.022657925, 0.01540616, 0.013887424, -0.003503328, -0.0056916275, -0.018957732, 0.012167894, -0.032249615, 0.055733494, 0.006876265, -0.043732274, 0.036477905, 0.016863717, 0.015186827, -0.03732646, 0.028758293, 0.010742338, -0.022832192, -0.00829414, -0.016145466, 0.01475275, 0.029540284, -0.0010085177, 0.0061407993, -0.007876573, 0.033439286, -0.040899303, -0.028545715, -0.05089342, 0.016878845, 0.0038324823, 0.06606912, -0.0070145903, 0.011335982, 0.011843021, 0.03766616, 0.05184076, 0.0025417753, 0.03701006, -0.009458738, -0.008101336, 0.050088655, 0.05721714, 0.003991696, 0.040886283, 0.04490305, -0.06109259, -0.07637826, 0.0068000793, -0.03166661, 0.0376026, 0.015105519, 0.0046411767, 0.071788386, 0.0018327056, 8.192441e-05, -0.053507056, -0.01657345, -0.022759978, -0.01219376, 0.035703596, -0.075097494, 0.0015879917, -0.03218958, 0.042060416, 0.014260144, -0.032849573, -0.021136146, -0.0048112934, -0.011106054, -0.031435404, -0.007118677, 0.013533771, 0.017681194, 0.002646675, -0.04136971, 0.023610562, 0.012490295, -0.025634218, 0.019147988, -0.009438964, -0.00024277446, 0.054495268, 0.020067243, -0.06202808, -0.008188203, -0.05389355, 0.03137352, 0.0052064373, 0.022841372, 0.0011804884, -0.02579701, -0.085178785, -0.039384983, -0.055931773, 0.021888474, -0.020113502, -0.041366003, 0.013092369, 0.018663935, 0.02116263, 0.039261922, -0.0076576374, -0.084944315, 0.0039351964, -0.0057274695, -0.017083712, 0.012285484, 0.0062029487, 0.039745346, -0.05596285, -0.0248808, -0.043761056, -0.025979927, -0.019684458, 0.03356588, 0.031811655, 0.037114054, 0.010131922, 0.047009077, -0.0056881076, -0.057811797, -0.026177675, 0.02069439, -0.025112657, 0.039771475, 0.022270374, -0.0030909693, -0.015437807, -0.07198755, 0.041333582, 0.003131843, -0.0054398514, -0.032767646, -0.03903557, -0.061230727, 0.019119816, 0.024543423, 0.0034508891, 0.034319617, 0.033326108, -0.0058438233, -0.020906262, -0.03084315, 0.010728566, 0.022217229, -0.047123488, 0.04197461, 0.045177076, -0.009550903, 0.012004752, -0.04140149, -0.018921057, 0.0070006526, 0.030602297, -0.029344477, 0.005181454, 0.023836825, -0.006630271, 0.028650768, 0.03430991, 0.0018907501, 0.017792428, -0.01013638, -0.075198136, 0.036142793, -0.011369484, 0.025865516, -0.051486403, 0.026126118, -0.033629972, -0.013004794, -0.014650168, 0.013471622, -0.015041781, -0.0014368553, -0.0025200585, -0.04251736, 0.019509664, 0.015502076, 0.027698044, -0.022287678, 0.036792535, -0.017555313, -0.018898055, -0.007252252, 0.010011375, 0.015840014, -0.03003487, 0.045427084, 0.009205196, 0.025023669, -0.027730001, 0.042821042, 0.00726161, 0.005244575, 0.018888786, 0.051920302, 0.054209244, -0.057299066, -0.0030267893, 0.014329622, -0.025376087, -0.005011867, 0.006054461, 0.04687648, 0.03231918, -0.0022529212, 0.036281336, 0.029765388, -0.0061814087, -0.042264875, 0.053123746, 0.010527993, 0.027895615, 0.04242943, 0.04003314, 0.010518812, 0.011438696, -0.010770235, 0.025342187, 0.029265732, 0.008109678, -0.014682479, -0.010362025, -0.013695501, -0.005155588, -0.0013426599, -0.019895183, 0.01364889, -0.013289587, -0.008356643, 0.02134974, 0.026013117, -0.005906326, -0.015362239, 0.02810431, 0.033953432, 0.00020516415, -0.025185047, 0.03216573, -0.0038709505, 0.051626503, 0.050489448, 0.026306387, -0.0664294, 0.03862736, 0.0006645765, 0.0044115586, 0.020184524, -0.036336303, -0.009400826, 0.026445428, 0.009282177, 0.030184556, 0.035551663, 0.061374806, 0.009145166, -0.049506355, 0.013951273, -0.019740606, -0.07687617, -0.012109982, -0.030069085, -0.010673832, -0.030941121, 0.0026263923, 0.011495306, 0.016469983, -0.06949168, -0.0044560526, 0.013031058, -0.060594227, 0.04851055, -0.027460216, -0.03234319, 0.027257875, -0.041580874, 0.039644353, 0.07407379, 0.001069961, -0.030505897, -0.025333006, -0.034560096, 0.00981239, 0.033267878, -0.045102477, -0.0031413774, -0.014324323, 0.03649238, -0.023970881, 0.031544782, 0.039698556, 0.011250658, -0.027037725, -0.016997904, -0.038045414, -0.028032891, -0.0032685015, 0.03463496, -0.0010300583, 0.034609534, -0.020578917, 0.007460771, 0.015464645, 0.060368404, 0.023545852, 0.021141175, 0.010902655, 0.021885648, 0.03046564, -0.009891137, 0.023452673, 0.009616231, -0.0026000848, -0.013845932, 0.075398706, -0.045996323, -0.044451762, 0.02721868, 0.0021226192, -0.025953796, 0.0025195729, 0.050543126, 0.07119655, -0.0051146257, 0.0120510105, 0.008616189, -0.052795336, 0.039600566, 0.023820227, -0.024787078, 0.013937037, -0.0071053538, -0.065781064, -0.0047897534, -0.026054258, 0.057197366, 0.029477779, -0.01072221, -0.033238247, 0.015144717, -0.0016778614, -0.041432567, -0.046385463, 0.026862731, 0.015094926, -0.017021386, -0.042403653, 0.011001884, -0.027448386, 0.039141573, 0.008940001, -0.012366348, -0.013518587, -0.0044538123, 0.047871396, 0.050975345, -0.002563669, 0.0035067047, 0.034787416, -0.015064557, 0.023064546, -0.00764775, 0.030200798, -0.016429376, 0.0089975605, 0.00081924413, -0.0032379564, -0.0050160354, 0.0036293925, -0.025666706, 0.035117675, 0.0077032787, 0.008104337, -0.07780294, 0.0041802637, 0.03386868, -0.061249796, -0.003969803, 0.026580453, 0.04846041, 0.011641036, -0.038987458, 0.025749689, 0.04730005, -0.014799362, -0.026514553, 0.044353593, 0.013847211, -0.003812001, -0.042971473, 0.011527684, -0.014526398, -0.0080371555, -0.05869981, -0.021788538, 0.033141956, -0.015134476, 0.038183838, -0.034258883, 0.002711804, -0.022037843, 0.0312584, -0.014992873, -0.014073695, -0.019957952, 0.03186471, 0.041300144, -0.011457853, 0.015310066, 0.0247387, -0.0020682383, 0.032264974, -0.02131765, 0.017692208, 0.026806938, -0.0038343803, -0.038265232, -0.036870223, 0.05363295, -0.0048617898, -0.027433908, -0.023743954, -0.06157114, -0.016235985, 0.01597526, 0.02231584, -0.03799792, 0.005990734, 0.08177751, 0.018930541, 0.02698915, 0.03467305, 0.0080591375, -0.058008134, 0.006236275, -0.029867098, 0.026198376, -0.06842807, 0.01765683, -0.034555152, -0.010061894, 0.011157456, 0.0076168515, 0.0004961371, 0.013628761, 0.012760433, 0.04596595, -1.1299919e-05, 0.05061304, 0.004663688, -0.04289308, 0.047660936, -0.01861238, 0.06593008, 0.00018997988, -0.08066589, 0.054253735, -0.029568357, -0.035908315, -0.022226764, -0.027580278, 0.030049307, 0.021099774, -0.008123229, -0.01212254, 0.010475025, 0.05962261, -0.02906604, -0.040193457, 0.009395794, -0.014169745, 0.04458842, 0.015363917, -0.018500792, -0.023346867, 0.040329408, 0.02656399, -0.0043356377, -0.013412297, 0.015641384, -0.016954646, 0.03656371, -0.037952542, -0.005384764, 0.031704042, 0.05727505, 0.022296328, 0.017175259, -0.036854684, -0.021481322, -0.041948125, 0.05564292, 0.025070282, 0.02443316, -0.060852885, -0.027777674, 0.008969267, -0.03521302, -0.03497669, -0.01506544, -0.02032255, -0.013505654, -0.025077345, 0.05706459, 0.015202628, 0.039873175, 0.014629817, 0.011003737, 0.03536592, -0.050654713, -0.024569025, -0.025725326, 0.012160787, 0.017369388, 0.007027137, 0.022375958, 0.036608737, 0.062180627, 0.06448722, 0.029468777, 0.049711168, 0.028475443, 0.055396438, 0.011669285, 0.006026035, 0.008915989, -0.020125162, -0.039011557, 0.006592796, -0.02300614, -0.05999692, -0.02361586, 0.01452216, -0.024307184, 0.08645991, 0.029158205, -0.015386826, 0.034997262, -0.0031932862, -0.035369452, -0.012601131, -0.037947245, -0.010538586, -0.06441236, -0.025835851, -0.001584637, -0.0036992226, -0.050194237, -0.07339439, -0.009503231, -0.024786372, -0.028222255, -0.017309181, 0.002642592, 0.0240163, 0.032329068, -0.022214934, -0.0003252258, -0.062036555, 0.011726446, 0.008919344, -0.035181943, -0.028928852, 0.027494645, -0.006158853, 0.017108783, -0.078864954, 0.020862121, 0.009427663, 0.046566613, -0.018951023, -0.018688124, 0.035090484, 0.017084064, 0.020330496, -0.002747381, 0.005978761, 0.06378239, -0.015640853, -0.0039018267, 0.008458342, 0.002186744, -0.07277501, -0.015289761, 0.013330903, -0.020226855, 0.00030068378, -0.01705759, -0.0007013012, 0.003730562, 0.021469316, 0.013087072, -0.026424153, -0.0070071416, -0.008331042, -0.00820277, 0.0076380386, -0.076665714, -0.024794493, 0.016281065, -0.02680142, -0.030150656, 0.01802337, 0.031161027, -0.011786698, -0.042021573, 0.036291808, -0.013381929, -0.036562297, -0.00954372, -0.034110922, 0.0027960236, -0.014814105, 0.00032734452, -0.004341111, -0.011868446, -0.01177169, -0.015799934, 0.036986552, -0.012456835, 0.009059169, -0.0059903692, -0.030712383, 0.051415157, 0.010471493, 0.00969533, -0.0040905704, -0.0004636498, -0.0005469867, -0.028116139, -0.066282496, -0.026284626, -0.016510595, 0.019238112, 0.009875069, -0.04345384, 0.023072667, 0.016094616, -0.00053762895, 0.05716629, -0.035812356, -0.022175958, -0.007243248, -0.014270385, -0.020387879, -0.04215011, -0.02349112, -0.00915576, 0.01888234, 0.0059882505, 0.011687647, 0.041460816, 0.004583353, -0.004087569, -0.0048323926, 0.0060309786, -0.01417928, 0.0064338916, -0.003431644, -0.037309505, -0.03884241, 0.005633716, 0.06965391, -0.006109107, -0.017263452, 0.0150423115, 0.01912158, 0.015233703, -0.08951513, -0.017558308, -0.021379491, -0.05359869, -0.017200595, 0.016630368, 0.022197278, 0.0181723, 0.040204756, -0.041655738, 0.04735019, 0.022346295, 0.033314988, 0.007627445, -0.008867788, 0.07028691, -0.060027286, 0.009791556, 0.05266892, 0.005157354, 0.004894277, 0.046254806, -0.01809576, 0.03818949, 0.014451006, -0.05610904, 0.040303987, 0.019611008, -0.035281878, 0.041545212, -0.017670954, 0.0049959766, 0.004691232, -0.02618615, 0.046550017, 0.013968112, -0.008879176, -0.05260324, -0.004539257, -0.028645469, -0.033605516, 0.013155225, -0.0152555965, 0.018721757, 0.0012666503, 0.010573899, 0.02411738, -0.026697822, -0.035006795, 0.047239307, -0.0052020233, 0.049839705, 0.058185402, -0.04688619, 0.028795812, 0.0027469397, -0.02808745, -0.027108505, -0.04517317, -0.010070523, -0.025757989, 0.019175168, 0.007101293, 0.027050946, 0.042870477, 0.017859522, 0.044158667, -0.1189712, 0.0006862273, 0.008426914, -0.026649445, -0.027222741, -0.049890112, -0.0060479282, 0.018498674, 0.013293824, -0.011875289, -0.035736345, 0.059138123, -0.042598575, -0.035927515, -0.01612569, 0.011273434, -0.091879636, 0.004464174, -0.00944991, 0.0786326, 0.014914988, 0.042565737, -0.019625135, 0.023817405, -0.05015169, 0.03245372, 0.031048292, 0.005185515, -0.011321988, 0.029111415, -0.013147456, 0.001464752, 0.020432549, 0.028844455, -0.04679208, 0.058028616, 0.010139558, -0.029785879, -0.05030159, 0.0021695844, -0.057120387, 0.04867016, -0.008933292, 0.02748564, 0.030610068, -0.04049891, 0.08503472, -0.010782594, 0.029710697, 0.04277143, -0.004482007, 0.00933797, 0.01701132, -0.031931452, 0.01385935, 0.014241429, -0.034503244, -0.014593844, -0.025342893, -0.0054103187, -0.018006422, 0.009704512, 0.04364664, 0.0064388346, -0.031729113, -0.003783354, 0.059429098, 0.018071396, -0.037414033, -0.04367348, 0.020439435, -0.037378363, -0.01084086, 4.7848094e-05, -0.027739888, 0.006306767, -0.07212032, 0.01853116, 0.017134031, 0.006857285, 0.007799769, 0.036434647, -0.0084638605, 0.0056895087, -0.0047705076, -0.009730643, -0.010191821, 0.0066246656, 0.038715996, 0.027469749, 0.0322136, 0.04457571, -0.01146849, 0.011249069, -0.040130246, 0.033454333, 0.069446474, 0.03253441, 0.01560201, -0.019252943, 0.02831698, -0.019105691, -0.014994286, 0.00020198605, -0.028075574, 0.048613664, 0.029387558, -0.03352545, -0.006625637, 0.017662833], [0.021204228, -0.084108174, -0.050547093, -0.03580944, 0.041359518, 0.03593634, -0.006220993, -0.04143721, 0.0019132936, 0.074587196, 0.033151254, 0.04392814, -0.03321059, 0.015934223, -0.030489037, 0.00982447, 0.010371407, -0.02772713, 0.05272756, 0.030167464, -0.02606187, -0.008371242, -0.008693567, 0.007641465, -0.015882956, 0.01111155, -0.00947129, 0.043672826, -0.00650179, 0.0327169, 0.005504378, -0.032713417, -0.02031044, -0.029122127, -0.0011543214, -0.051752836, -0.02089393, -0.037048414, -0.058364514, -0.032350115, -0.038299814, 0.007818371, 0.011814743, 0.028832873, 0.0058134203, 0.0396854, -0.005342633, 0.029635282, -0.044748265, -0.033429984, 0.042209778, -0.029425146, -0.012052412, 0.006621801, -0.00043229692, 0.020333461, 0.0103589855, 0.022769958, 0.034006514, -0.013273983, 0.0066661066, -0.020915685, -0.0755298, 0.0015120576, 0.0034138323, 0.023615407, 0.011615368, 0.016837506, -0.041539744, -0.05075153, -0.014740818, 0.017997287, 0.03659934, 0.0005209874, 0.04434461, 0.02967745, -0.079467624, -0.017902978, -0.025358042, 0.019720145, -0.020301973, -0.008865093, -0.010002009, -0.03959789, -0.014586382, -0.012794493, 0.016176956, 0.004268062, 0.04328855, 0.024294704, -0.031893924, 0.0031561472, 0.091395035, -0.039525893, -0.0008149081, -0.0069211805, -0.006286621, 0.059748728, 0.018605856, 0.016235184, 0.067269325, -0.06477681, -0.036915604, -0.009694717, 0.007827074, 0.009097759, 0.010100113, -0.00011620353, 0.002095026, 0.029095385, 0.014046168, -0.020386787, -0.0067879474, -0.069998555, 0.009795354, 0.0010017832, 0.023821902, -0.01462679, -0.017401058, 0.012210014, 0.022013675, 0.02925805, -0.0017858356, 0.0845555, -0.035919134, -0.018999228, 0.016700078, -0.012941098, -0.07081504, 0.012494204, 0.022847729, 0.024715925, 0.03802678, -0.012000195, -0.046713386, 0.030462056, -0.007812991, 0.045281835, -0.011034647, 0.03752209, -0.045106985, -0.0068523493, 0.0050280625, 0.010845399, -0.0037126334, -0.003986562, 0.016752612, -0.017066235, -0.004780742, -0.0092071965, -0.019840086, -0.017726704, -0.025163097, 0.018618515, 0.02464923, -0.052220263, -0.025188098, -0.0074935947, -0.039581433, -0.0007199674, -0.022702867, 0.000772343, 0.018780546, -0.0075632967, -0.017632397, -0.04874828, 0.016401332, 0.03132325, -0.02946328, -0.01315234, 0.060697522, 0.008276935, 0.01452277, 0.0040642554, -0.051983543, -0.0067490214, 0.044869002, -0.0039897272, 0.032827348, 0.0048199836, 0.00251593, -0.0005711873, -0.0038552275, -0.023542874, -0.027628392, 0.04308538, 0.012656393, -0.05384747, 0.03659444, 0.02218544, -0.018543828, -0.034741513, 0.010347119, 0.01959672, -0.013932239, -0.005973039, -0.0321058, -0.020482043, -0.010002958, 0.02078902, -0.024628263, 0.0011956205, 0.03499326, -0.013235691, -0.031657677, 0.006446319, 0.050600257, 0.011030217, 0.06334985, -0.021358505, -0.008993698, 0.022923762, 0.020852787, 0.030145906, 0.026204439, 0.035787757, -0.0070196027, -0.013555958, 0.0017697945, 0.054618787, -0.021911692, 0.028871167, 0.077060245, -0.013716724, -0.06632877, 0.006552494, -0.038515408, 0.013553267, 0.026283398, 0.020481253, 0.06087095, -0.03922319, -0.018678486, -0.05253531, 0.0048047933, -0.028153732, -0.01723238, 0.056637857, -0.06314521, -0.0043432233, 0.020923756, 0.057469856, 0.0046065254, -0.01505846, -0.016061127, -0.041877735, 0.01836977, -0.009511639, -0.0037806202, 0.0045998795, 0.021288881, -0.005611315, -0.0676839, 0.04018083, 0.022230694, -0.020800887, 0.016450701, -0.018897956, 0.009823836, 0.054348517, 0.028175568, -0.04805521, 0.00540205, -0.04476488, 0.024273185, 0.00049385015, 0.03760018, -0.025198383, -0.0026190989, -0.05444093, -0.051665492, -0.039820053, 0.02960316, 0.0011706195, -0.055684432, 0.021593325, 0.026450811, 0.014590496, 0.04505524, 0.024525112, -0.035375874, 0.018823745, 0.0021580034, -0.027977299, 0.017436976, 0.019526543, 0.023598475, -0.03227076, 0.019863347, -0.05615643, -0.014489225, -0.0022602228, 0.030427722, 0.05243673, 0.01765265, -0.013949961, 0.045374084, -0.035840135, -0.02758045, -0.03310133, 0.010508439, -0.023149088, 0.03952083, 0.032887477, 0.012394199, -0.029377677, -0.05864593, 0.018637503, 0.00783103, 0.0057148007, -0.014994151, -0.03870513, -0.047224164, 0.008024036, -0.0018459648, 0.005885377, 0.0073865484, 0.05268389, -0.02238529, -0.0038469995, 0.025242848, 0.02367601, -0.009778897, -0.01962188, 0.0377149, 0.046231717, 0.008831389, 0.037282206, -0.03846335, -0.014880065, 0.022381136, 0.018341605, -0.037475727, 0.004001357, -0.002017491, 0.0090329, -0.0060319025, 0.00045065212, 0.015172799, 0.026799718, -0.0068784575, -0.078333914, 0.0021627503, -0.00091871, 0.07080302, -0.0841808, -0.005826465, -0.06818012, -0.001993182, -0.016495956, 0.030953536, -0.027023938, 0.013137901, -0.0054287123, -0.017947601, 0.050788876, 0.020814573, 0.0045751156, -0.021412462, -0.018449679, 0.008601949, -0.026283398, -0.044872325, 0.053240716, -0.0060888673, 0.00016820338, 0.069080636, -0.03876811, 0.00815731, -0.062131763, 0.04530842, -0.0033090017, -0.0053519686, 0.019853773, 0.023573631, 0.051723093, -0.061065264, -0.001205985, 0.041459363, -0.007282668, 0.020952158, 0.0010763117, 0.045135625, 0.04378913, -0.004318143, 0.028921485, 0.038035166, 0.038581233, -0.032992546, 0.06781681, -0.002304212, 0.03363498, 0.026880892, 0.017726073, 0.016372848, 0.032753292, 0.055916306, 0.028058633, 0.030448766, -0.027769698, -0.00831412, 0.018550316, -0.0129084615, 0.010048529, -0.04967553, -0.019350449, 0.015107132, -0.010742467, -0.010635738, 0.02478918, 0.0015658896, -0.04274502, 0.0008514603, 0.023536129, 0.030424872, -0.03427298, -0.0035988875, 0.043407228, 0.016544059, -0.0075495704, 0.014258637, 0.065369874, -0.0620691, 0.029580692, 0.052328177, -0.00025127653, 0.033076726, -0.05927468, -0.03469072, 0.041339897, 0.0413467, 0.023154626, 0.026770761, 0.07625721, 0.033113755, -0.053476963, 0.011133069, -0.010666515, -0.082574405, -0.01026717, -0.039758656, -0.06055648, -0.014910129, -0.009805164, -0.010829892, 0.02243814, -0.05229558, -0.0071164425, 0.02690415, -0.071977116, 0.007936414, -0.015950443, -0.018123874, -0.014889241, -0.02670348, 0.029068327, 0.08165032, -0.02145851, -0.008158417, -0.020779999, -0.0071489993, -0.009043858, 0.020769872, -0.0691156, 0.008212059, -0.03673875, 0.03684714, -0.03478645, 0.008540554, 0.02937467, 0.03150783, -0.056906223, -0.055740982, -0.02994558, -0.015041147, 0.015360782, 0.06448098, -0.020361628, 0.022049673, -0.00878827, 0.0020723192, 0.010758686, 0.049894847, 0.021661999, 0.018220952, 0.008174597, -0.005497386, 0.018645257, -0.026076825, 0.0044425945, 0.0042322613, -0.012560029, -0.0059095873, 0.09164441, -0.034809235, -0.05980666, -0.0018293104, 0.02568171, -0.026545752, 0.022732297, 0.021600287, 0.028642993, -0.02288452, 0.013708653, 0.03826239, -0.047006514, 0.025071321, 0.035989508, -0.011316305, -0.0040450697, -0.0081927935, -0.040456787, -0.0365029, 0.028232057, 0.0371769, 0.0052613, -0.0069890637, -0.03537967, 0.0033444464, 0.0017725438, -0.0137528, -0.02102121, -0.005747397, 0.02999843, 0.0056078336, -0.056202393, 0.0148292715, -0.031537578, 0.03159755, -0.015945774, -0.004281195, 0.00933774, -0.017569736, 0.010371644, 0.0017905827, 0.00074433547, 0.0054456433, 0.006812019, -0.01466898, 0.028627804, -0.035868555, 0.024837371, -0.002648214, 0.03154818, 0.0045229774, -0.033561558, -0.001975559, 0.03807409, 0.00088951574, -0.03278241, 0.023284536, -0.016459562, -0.055150453, -0.03215833, 0.056049224, -0.030049866, -0.010573552, 0.042541053, 0.0518174, -0.022895278, -0.06892952, -0.028276838, 0.044628482, -0.005609713, 0.010387053, 0.014349978, 0.0057692328, -0.009084565, -0.04830459, 0.013668937, -0.003730697, -0.042126477, -0.06068898, -0.028387442, 0.029700978, 0.0045463964, 0.042297177, -0.013166383, 0.0108468225, -0.017750915, -0.0004976478, -0.00763743, -0.0020940765, -0.02935568, 0.0052236402, 0.01863766, 0.012358833, -0.00089529133, 0.04524307, 0.00064528064, 0.046972096, -0.013706913, 0.03262948, 0.04276891, -0.01900892, -0.036770873, -0.0141151585, 0.04316355, -0.009715762, -0.03450685, -0.030127866, -0.04967079, -0.005008758, -0.018107735, 0.0112745315, -0.030807324, -0.018774217, 0.019626824, 0.012489219, 0.010756155, 0.052122474, 0.030591493, -0.022908295, 0.013050339, -0.0011233864, 0.008444189, -0.034701478, 0.015243945, -0.031556726, -0.016500317, 0.014358208, 0.021780834, 0.006831699, 0.022543367, -0.012044579, 0.014727684, 0.028186012, 0.038042445, 0.028730338, -0.036072426, 0.04864163, 0.0015279131, 0.063478015, -0.01668663, -0.096347146, 0.101211905, -0.011235288, -0.021592338, -0.05965444, -0.010911383, 0.022523744, 0.025083981, 0.036550924, -0.0188726, 0.023306688, 0.009816557, 0.022873126, -0.024382684, -0.0321808, 0.0076345024, 0.053383447, 0.0006351537, 0.004132079, -0.033187173, -0.015101593, 0.023231369, -0.008419188, 0.010140701, 0.017546633, 0.0012400845, 0.034377493, -0.036709793, 0.02674481, 0.06373499, 0.030860135, -0.020828735, 0.0058287294, -0.06626782, -0.011485932, -0.011872971, 0.028106894, 0.051331777, -0.010054068, -0.03865924, -0.023948016, 0.027340405, -0.045906108, -0.060265858, 0.008825692, 0.008820154, -0.028286966, -0.029779118, 0.008973959, 0.00057304656, 0.032975454, 0.0119976625, -0.0057923356, 0.060112372, -0.03921686, -0.016982133, -0.03046534, 0.021122418, 0.0384874, 0.0052331346, -0.025454883, 0.020989977, 0.06411666, 0.05215064, 0.026854388, 0.022429753, 0.0310355, 0.045209523, 0.02250183, 0.02041416, 0.0067289257, -0.040092766, -0.013755017, 0.03329129, -0.032967504, -0.04317019, -0.018930633, 0.01720105, -0.012904921, 0.039569683, 0.032860417, 0.002658183, 0.041297328, -0.030170351, -0.035274923, -0.011976618, -0.008244655, 0.010659315, -0.063424855, -0.0364275, -0.0054448526, 0.0052470593, -0.035409737, -0.082125016, -0.034511283, -0.010604566, -0.0055673257, -0.040466912, -0.014605527, 0.016208522, 0.016831888, -0.011978833, -0.02674054, -0.044622947, -0.034873005, -0.0012792476, -0.016903251, -0.042304333, 0.049751487, -0.03195785, 0.011929622, -0.07766787, 0.010989709, 0.0066777375, 0.02775593, -0.0240496, -0.020010978, 0.04057736, 0.024118908, 0.020583902, -0.032164622, -0.0059989896, 0.04595291, -0.010626402, 0.006280964, -0.009980172, -0.005319847, -0.049744528, -0.03660852, 0.012573875, -0.030712701, 0.01701643, -0.015947474, 0.0140292365, 0.0046707685, 0.03910056, 0.027869422, 0.012669725, -0.005717807, 0.012982733, -0.0121327955, 0.009928271, -0.07541397, -0.03585746, -0.0030582, -0.042939804, -0.03296628, 0.024068115, 0.028488198, -0.042437885, -0.03891305, 0.030489275, -0.008381686, -0.03486541, -0.007866158, -0.05304312, -0.0050331256, 0.018611474, -0.02405957, 0.026926147, -0.009746302, 0.023109054, -0.0019266644, 0.03789339, -0.039027613, 0.010633206, 0.0061758957, -0.036583837, 0.055273242, 0.029512016, -0.00066458527, -0.009166214, 0.016408453, -0.027874606, -0.020702545, -0.04522155, 0.037547328, -0.03691225, 0.0055938303, 0.037431974, -0.0103881005, 0.01106756, 0.010264046, 0.0015893083, 0.038836464, -0.019069642, -0.004494495, 0.036557253, 0.007034833, 0.011998772, -0.04734577, -0.014655055, -0.01240401, 0.0002118761, -0.030520447, 0.028843634, 0.026705885, 0.016445797, -0.015603593, 0.028208798, 0.0012854978, 0.015440531, 0.018981466, -0.011663313, 0.002550425, -0.026225327, 0.0011974402, 0.071664765, -0.018797636, -0.0092988135, 0.017672906, 0.03150324, 0.037886422, -0.06733135, -0.026254442, -0.056627728, -0.032716583, -0.038499743, -0.036465477, 0.0004405251, 0.0031430137, 0.0042452756, -0.0074224677, 0.040828954, 0.03480069, 0.023482488, -0.029103773, -0.0088124005, 0.061788075, -0.062831156, 0.016945027, 0.05313747, 0.0189353, 0.02955727, 0.041820534, -0.026806206, 0.029411932, 0.040259074, -0.026090987, 0.05406306, 0.04530794, -0.031831738, 0.013823374, -0.026254915, -0.008738822, 0.004273916, -0.033736087, 0.01574276, 0.011608089, 0.02493524, -0.028805658, 0.0029288034, -0.0044843685, -0.056073118, 0.031084867, 0.005359722, 0.011761261, -0.00812582, 0.0028399944, 0.017602649, 0.0026971085, 0.014255671, 0.03257797, 0.014865977, 0.051919304, 0.040163144, -0.06424261, 0.05276554, 0.009503253, -0.055993527, -0.02996805, -0.0140211675, 0.014493023, -0.033571683, -0.016600708, -0.00585197, 0.02492788, 0.050254676, 0.059474688, -0.021036973, -0.07014476, -0.0144650545, -0.0028662614, -0.028719261, -0.0269771, -0.009686489, 0.01633155, -0.0033933409, 0.013307608, -0.02814582, -0.01935399, 0.05075406, -0.004518072, -0.048657134, 0.009371918, -0.009764024, -0.046196666, 0.036820713, -0.010024478, 0.05627973, 0.03656295, 0.043701228, -0.057168894, -0.0060015214, -0.031144444, 0.016313037, 0.008465551, 0.010396369, -0.019150183, 0.029671496, -0.02762428, -0.007641465, 0.0400271, 0.022046825, -0.025333516, 0.06510784, 0.010288571, -0.019748943, -0.013961196, 0.018900173, -0.021864539, 0.067509286, 0.0028772983, 0.03286026, 0.031798825, -0.01090806, 0.09538128, -0.0074144774, -0.010205181, 0.03943459, -0.024723837, -0.0069990326, 0.022353424, -0.010165939, -0.005474284, -0.008876644, -0.036474973, -0.018614875, -0.01681555, -0.018822322, -0.01188136, -0.010577508, 0.039491557, -0.034969687, -0.019779323, -0.03536274, 0.054260537, -0.0139404675, -0.023256687, -0.03739147, -0.0136588095, -0.03342421, -0.019505262, 0.019047331, -0.019758437, 0.007361944, -0.049053986, -0.013696628, -0.012402426, 0.030287364, -0.024231413, 0.01767417, 0.01815362, -0.005515346, -0.02684533, 0.014062941, -0.03333267, 0.0034988832, 0.030601777, 0.016216988, 0.020116482, 0.04521965, -0.016308608, -0.0027262238, -0.028825594, 0.030390853, 0.052954473, 0.02706371, -0.008127117, -0.016991863, 0.04335501, -0.041259617, 0.022792744, 0.01058708, -0.023887094, 0.03364542, 0.025404882, 0.008825495, 0.002174618, -0.001944198], [-0.007453214, -0.10562149, -0.011380034, -0.026763432, 0.03351734, 0.021013683, 0.013018015, -0.035296686, 0.021666309, -0.010417243, -0.026584677, 0.041736227, -0.027074035, -0.036776267, -0.036142334, 0.0036396638, -0.0021286681, -0.03806559, 0.028719984, 0.0716712, -0.0092252605, -0.00021547731, -0.008242781, -0.0032328232, -0.033178415, 0.011464874, 0.018009335, -0.022584742, 0.035932943, 0.03437593, 0.007847223, -0.031026933, -0.0005875849, -0.03978587, 0.037552338, -0.0022390613, -0.00693598, -0.022866916, -0.014142081, -0.034533005, -0.0950631, 0.030427208, -0.01649806, 0.023037046, -0.010732717, 0.06976332, 0.012656305, 0.041512344, -0.016606353, -0.04896246, 0.011230261, -0.017833734, -0.031961434, 0.01829212, 0.0026175845, 0.025845774, -0.029043863, 0.0033715342, -0.019921115, -0.028789893, -0.018966427, 0.031933118, -0.05088153, -0.003343659, -0.002998984, -0.013544541, 0.026483534, -0.007617366, -0.023784801, -0.052355234, -0.009829658, 0.055866584, 0.028486365, -0.04734926, 0.014996523, 0.018267343, -0.06743566, -0.028954485, -0.02138402, -0.0100408215, 0.009477904, 0.052775566, -0.039120413, -0.067130804, -0.05953899, 0.046905026, -0.005405516, -0.0022647239, 0.0072005703, 0.019896476, -0.085688286, -0.041387573, 0.0736074, 0.050901312, 0.00871953, 0.010521663, -0.028495932, 0.026644189, 0.022921564, 0.03969915, 0.022135315, -0.019039156, -0.0290432, -0.048604183, 0.012079118, 0.008839354, 0.04005931, -0.04488941, 0.0023954704, -0.008077004, -0.012879967, -0.0035016167, 0.028869534, -0.09193226, 0.032799672, 0.019508881, 0.009511088, -0.015702853, -0.022039523, 0.015455962, 0.014218958, -0.014982931, 0.022223806, 0.025691353, -0.02594754, 0.0053944546, 0.011021642, 0.022205887, -0.05890893, -0.025789581, 0.024301924, -0.00043891885, 0.03191409, -0.04593162, -0.051044673, 0.009302027, -0.014906207, 0.06313706, 0.010944654, 0.009782758, 0.009318177, -0.00079067337, 0.02793816, 0.019069077, 0.018010274, 0.009319946, 0.02857751, -0.03401444, -0.03331569, 0.01674971, -0.022191508, -0.021253938, 0.014102038, 0.032856084, -0.006698822, -0.053998526, 0.024362542, 0.016268749, -0.039773703, -0.018637238, -0.005071017, 0.022485742, 0.032159656, -0.010496001, 0.020729182, -0.04364588, 0.028893095, 0.0009760635, -0.017093943, -0.00029290756, 0.033525527, 0.020661484, -0.012049473, 0.03170359, -0.010576972, 0.02505908, -0.005719219, 0.0047152806, 0.036935553, 0.06438391, 0.0010997306, -0.031545304, 0.01489061, 0.0015977178, -0.019396938, 0.042695478, -0.024858205, 0.020859707, -0.005304082, -0.010488037, 0.0331897, -0.004119731, 0.034247175, -0.013806365, -0.013762672, 0.009043852, -0.005196233, -0.0027649233, -0.021864532, 0.027482426, 0.024625361, -0.01521955, 0.014420885, -0.0036644416, -0.02873724, -0.030722551, 0.018464679, 0.012158761, 0.025046691, -0.027952537, 0.022097483, 0.021983108, -0.0058112503, 0.08158227, 0.0013325744, 0.012250791, -0.0025202436, -0.028641224, 0.042322487, 0.057328466, 0.008463734, -0.0049647163, 0.0013928595, -0.023005411, -0.044126388, 0.017416053, -0.021643743, 0.01124962, 0.02720943, 0.0035231037, 0.02979914, -0.007175129, -0.018750507, -0.004755544, -0.028230624, 0.0077270954, -0.022516603, 0.039825913, -0.01486019, 0.02921996, -0.014461757, 0.014549807, 0.02474405, -0.016630357, -0.036498737, -0.037329342, -0.041307926, 0.021237124, -0.0180689, 0.022045054, 0.073745444, 0.0109057175, -0.009040644, -0.0058227545, 0.014644824, -0.014403795, -0.008550068, -0.007993014, 0.0077257683, 0.046607252, 0.0042416286, -0.04445292, -0.043902062, -0.046005066, 0.054804683, 0.007894345, 0.0046285586, -0.021072088, -0.03360561, -0.04247956, -0.04214683, -0.08782049, 0.022963597, -0.0034396728, -0.028984683, 0.0037567772, 0.031857014, 0.022561016, 0.061303515, -0.023577191, -0.057964724, -0.008582147, -0.01884901, -0.016781898, 0.031846836, -0.0014335655, 0.010955273, -0.021361897, -0.037972674, -0.044215325, -0.02441663, -0.026374068, 0.049806893, 0.063926406, 0.081327416, -0.017109428, 0.06409366, 0.0045307754, -0.026328936, -0.019546049, 0.027301904, -0.037807874, 0.03403922, 0.036632027, 0.010067259, 0.03573472, -0.031526055, 0.036086917, -0.01389895, 0.0015185176, -0.010958813, -0.028889, -0.021365438, 0.008904035, 0.022871124, -0.031283144, 0.041177846, 0.04373415, -0.027338656, -0.048961576, -0.028104082, 0.0040033646, 0.00071324315, -0.036231603, 0.025599767, 0.04979959, 0.049038567, 0.028581493, -0.039288547, -0.04679729, 0.05625506, 0.07719308, 0.021199515, 0.011192432, 0.041578714, -0.014875234, -0.019987054, 0.01606213, 0.036714323, 0.035505082, -0.0057112547, -0.02442548, -0.040669017, 0.0006083805, 0.052470714, -0.059405696, -0.022032665, -0.02124155, -0.022924056, 0.028808916, 0.032685407, -0.016302163, -0.0024582995, 0.00808239, -0.013831807, 0.013194555, 0.017693032, -0.021340659, -0.03002258, 0.008993744, -0.004944474, -0.019962844, 0.012749885, 0.027880197, 0.008711124, -0.035638265, 0.06634754, 0.000700322, 0.059154935, -0.036295757, 0.046553716, 0.009158007, -0.038233727, 0.008308264, -0.006997371, 0.05186145, -0.07225347, 0.021647727, 0.018667657, 0.024334224, 0.02295143, -0.0061868974, 0.031484462, 0.04991994, 0.01079654, 0.063541025, 0.044559333, -0.0008379058, -0.05462416, 0.026406588, -0.009955206, 0.02634022, 0.044858217, -0.002938699, 0.0035621782, -0.0035352437, -0.0111826975, 0.0035217486, 0.013985671, 0.02498519, -0.010910695, -0.015113719, 0.020303536, -0.014948683, 0.025172792, -0.033887014, 0.004247602, 0.013304313, 0.00896255, 0.008389899, 0.049555354, -0.036757685, 0.008571306, 0.03226673, 0.025613923, -0.03074202, -0.008178404, 0.036336463, -0.029041208, 0.01224139, 0.045522787, 0.03841779, -0.03133049, 0.03208344, 0.014828334, -0.031529594, 0.013240599, -0.019408885, -0.025528308, 0.014938285, 0.009345388, 0.042235322, 0.030863253, 0.07776651, 0.021018771, -0.0008539449, 0.009784086, 0.020426871, -0.04765256, 0.00550894, -0.08069382, 0.0017751436, -0.004098493, -0.007963369, 0.022953661, 0.052556105, -0.0655989, -0.0025924752, 0.04270521, -0.04578384, 0.018417558, -0.025690027, -0.028904045, -0.01333747, -0.057435542, 0.036453385, 0.09232162, -0.0434335, -0.03636084, -0.034150716, -0.02398302, -0.010720106, 0.023791881, -0.013952487, -0.00970649, 0.002230876, 0.044543184, -0.018298896, 0.009393395, 0.048023563, 0.03512944, -0.023951164, 0.02395039, 0.023478508, -0.058402974, -0.029389866, 0.040243376, 0.01259237, 0.01834256, 0.02209505, 0.0025445789, 0.028050873, 0.030028332, -0.031653594, 0.05233593, 0.01637893, 0.011157919, 0.015405521, -0.027372032, -0.022280663, 0.020931551, -0.00076810794, -0.0009562635, 0.062206127, -0.004758697, -0.03680901, 0.014325037, 0.0017227952, -0.04641036, -0.017640822, 0.05322599, -0.0042812284, -0.03735575, 0.01172869, -0.015114771, -0.052047282, 0.006059027, 0.04488996, -0.018259378, -0.021865414, -0.04024603, -0.010640132, 0.044068873, -0.039033692, 0.046162583, 0.02595351, -0.016538436, -0.053957373, 0.019853447, -0.001487103, 0.024926344, -0.012304772, 0.010554737, 0.02347154, -0.023350637, -0.013719311, 0.024991827, -0.046463456, 0.049020864, 0.005806826, -0.030482737, -0.028804936, 0.0070191617, 0.020393798, 0.014233005, -0.009967539, -0.009362422, 0.05080132, 0.0022751219, -0.023863448, -0.031432252, 0.022295486, -0.012452967, 0.011716302, -0.024140758, 0.012785282, 0.0069130827, 0.008769528, 0.048531063, 0.028709363, 0.01526128, 0.0028113814, -0.09672497, -0.05025267, 0.026023641, -0.014674579, -0.016243316, 0.02945004, 0.02668025, 0.028647419, -0.06206157, -0.03721784, 0.0393589, 0.019959304, -0.032115187, 0.01326911, 0.004428125, -0.07138803, -0.054953348, 0.030098682, -0.021220312, -0.025161732, -0.06092477, -0.014174713, 0.016838644, -0.017735729, 0.06636258, 0.0013616661, 0.0032064968, -0.031213569, 0.029039437, -0.033802062, -0.01906775, -0.019987898, 0.040002786, 0.014808008, 0.00020662813, -0.0061552613, -0.013617989, -0.025144918, 0.0242058, -0.014225484, 0.045149796, 0.026123581, -0.03336137, -0.023318449, -0.04052035, 0.012949434, -0.0026024303, -0.03036499, -0.018946571, -0.03114731, 0.026182925, -0.014110002, 0.011665862, -0.01941353, -0.018332163, 0.013126859, 0.0056599295, -0.009029251, -0.010384059, -0.0039644283, -0.048209835, -0.0055183982, -0.031508356, 0.0059537217, -0.044586547, -0.022824222, -0.008933763, -0.042373367, 0.049120415, -0.006366536, -0.013063146, -0.005070796, -0.01753795, 0.01447503, 0.013795856, 0.0728269, 0.03638292, -0.020503527, 0.05826294, 0.008314238, 0.055091396, 0.040574335, -0.078210734, 0.07231365, 0.012209421, -0.009930097, -0.0094487015, -0.035476323, -0.029913293, -0.004857752, -0.02709793, -0.020714138, 0.0101599535, -0.0052564074, -0.0032932188, -0.03931111, -0.043868877, 0.0016919613, 0.032097243, -0.0039712866, 0.0095163975, -0.05558695, 0.011376494, -0.010712474, -0.0030737594, -0.0043064486, 0.0024078593, -0.016808115, 0.03379603, -0.015601973, 0.020739801, -0.0041254833, 0.01330517, -0.017481094, 0.0028463358, -0.028886126, -0.015644006, -0.039307795, 0.03821072, 0.0239901, -0.009275701, -0.00761272, 0.006219197, -0.015001998, -0.036954135, -0.011831009, -0.032823343, -0.007944122, -0.06629887, -0.037819583, 0.06071947, 0.014725462, 0.019628456, 0.06005401, 0.026630692, -0.009839392, -0.07022347, -0.05328484, -0.06888902, -0.002568472, -0.036001965, -0.0027874887, 0.02155304, -0.018825725, 0.041817863, 0.012871562, 0.037415177, 0.03436221, 0.03670105, 0.04917484, -0.017025804, 0.01668489, 0.023465123, -0.004894628, -0.03542677, 0.012366716, -0.028319115, -0.034672044, 0.0019477025, 0.012326453, -0.014558655, 0.045342263, 0.01133092, -0.05663823, 0.048323553, -0.0053640073, -0.044352043, 0.033779055, 0.00012964035, 0.017788602, -0.027696135, -0.0002935712, -0.025250666, 0.018909626, -0.052284442, -0.056300193, -0.026903689, -0.0015946205, -0.051629376, -0.039819498, -0.008953369, 0.013203848, 0.013214024, -0.004222382, 0.013622966, -0.030375661, 0.06231055, 0.01459914, -0.0031839316, -0.007200791, -0.0003114908, -0.015139161, -0.01530265, -0.061359264, -0.031628817, 0.034402035, 0.0023514458, 0.013095003, 0.017533083, 0.04044956, -0.0013725064, -0.019531889, -0.004748465, -0.002063184, 0.030473445, -0.006064171, 0.0038193022, -0.012960495, 0.03306227, -0.055748004, 0.00091212825, 0.040165946, -0.029034128, -0.023855733, -0.011907775, 0.027018288, -0.013003082, 0.027664278, 0.017501889, -0.028485479, 0.04396119, 0.014907534, -0.0073505635, 0.006949254, -0.05780632, -0.015583943, -0.0139621105, -0.026984662, -0.0427322, 0.0032226467, -0.006476708, -0.011270967, -0.016330259, 0.10677055, -0.028196776, -0.027487293, 0.020395126, -0.02252468, 0.019894926, -0.01035176, -0.021110581, 0.023972237, -0.039819498, 0.04450779, 0.012951204, 0.015393353, -0.014680332, 0.008524406, 0.019503873, -0.04307068, 0.08481319, -0.007863483, 0.005696211, -0.015468571, 5.685592e-05, -0.036309917, -0.013068454, -0.07180925, -0.022591934, -0.024582442, -0.029724253, 0.029323276, -0.007654533, -0.017514277, -0.0025680293, -0.02585639, 0.03125704, -0.014679889, 0.00395121, 0.032805644, 0.0011539318, 0.029318796, 0.010537592, -0.024009148, -0.019379241, 0.00049157144, -0.004109555, -0.00322685, 0.050627872, 0.0041566766, 0.041553494, 0.055110864, 0.046269216, -0.035563048, -0.03628868, 0.0074058706, 0.0025202436, -0.08701743, -0.015916118, 0.047672253, 0.012218492, -7.5217945e-06, 0.0039324607, -0.008845631, 0.0043946225, -0.046213023, 0.022295486, -0.021155711, -0.05276583, -0.009883749, 0.007538387, 0.034350265, -0.017791258, 0.0051842863, -0.010664135, 0.038438197, 0.02444849, 0.010822978, -0.02529093, -0.008373528, 0.044867065, -0.027172264, 0.012825987, 0.039471284, 0.0087712975, 0.039214212, 0.032340176, 0.016891297, 0.013662677, 0.04027258, -0.015432954, 0.031933557, 0.012224189, -0.04547589, 0.0070227017, -0.0092484895, 0.03866291, 0.007883007, -0.014176592, 0.043178644, 0.011614094, 0.0046272315, -0.074187905, 0.014808201, -0.018189041, 0.007974872, 0.02600749, 0.017942356, 0.02124354, 0.0009782758, 0.013937222, 0.0031241998, 0.015148895, -0.059445187, 0.008773731, -0.020114163, 0.06684309, 0.023991872, -0.037777994, 0.062655665, 0.029572932, -0.044207357, -0.032990593, -0.031803034, -0.028350089, -0.0066405283, 0.05036417, 0.0062345727, 0.015776744, 0.035705518, 0.03776804, 0.00065837824, -0.045913033, -0.013163141, -0.008349192, -0.029476587, -0.028337698, -0.022649452, -0.020877518, -0.004300697, 0.032674015, 0.0012955186, -0.05643558, 0.069878355, 0.02686752, 0.013145221, 0.026944838, 0.017380655, -0.031021653, 0.009793543, -0.03458521, 0.053082637, -0.0075225695, 0.057848576, 0.014309108, 0.010680064, -0.049431466, -0.00045927198, -1.5707277e-05, 0.03626689, -0.0065430766, 0.0052794153, -0.010119359, -0.016973816, 0.020222126, 0.03546261, -0.024726354, 0.03431089, -0.040637158, 0.0063855615, -0.06073097, 0.028885463, -0.06491309, 0.03861601, -0.044283904, 0.047488187, -0.009069515, -0.072351925, 0.0052023167, -0.002037079, 0.023973785, 0.020078326, -0.024572376, 0.016685996, -0.023195447, -0.06600685, -0.021357585, 0.029193858, -0.009767714, -0.013522196, -0.009379236, -0.01596877, -0.002582188, -0.010316141, 0.0547569, -0.0044701584, -0.024776792, 0.0064645405, 0.06607499, 0.018972622, -0.027582865, -0.057518724, -0.013778601, -0.06023365, -0.0034361328, 0.006118984, -0.013919746, 0.03381799, -0.049388327, -0.021246858, 0.02409939, 0.018605934, 0.0075485636, 0.030485945, 0.058323335, 0.011951691, -0.028946854, 0.019623036, -0.0013753823, 0.043465078, -0.011878242, 0.036493093, 0.011559671, -0.0031352611, -0.0063700196, -0.0003862663, -0.049092103, 0.019919483, 0.05938236, 0.015167478, 0.048115596, -0.0049342974, 0.027181998, 0.010777848, -0.01589145, -0.016563877, -0.0059343087, 0.023106953, 0.02358481, -0.053073786, 0.027441276, 0.01419053], [-0.00055252615, -0.083826765, -0.052311163, 0.01882389, 0.011194707, 0.04330224, 0.03577338, -0.027200704, 0.04500435, 0.033168506, -0.013678415, -0.0013284947, -0.06360793, -0.019398022, -0.0006881334, 0.04441055, 0.008438266, -0.06648815, 0.034842912, 0.01925514, -0.012648279, -0.027765064, -0.025042929, 0.019730687, -0.030346053, 0.06227683, 0.0062620356, 0.017636973, 0.019373266, -0.0005756521, -0.015136057, -0.056743316, 0.008896007, -0.007369911, 0.02533977, -0.015510253, 0.026178166, -0.008476266, -0.04732377, -0.034949534, -0.059435267, 0.01704547, -0.019211277, 0.038951736, -0.005746532, 0.04211185, 0.01113749, 0.02473241, -0.0039843987, -0.03442708, 0.008109073, -0.019425815, -0.023367655, 0.031357516, 0.002292837, 0.012886269, 0.005545239, 0.0057584755, -1.7154476e-05, -0.028315745, 0.037514452, 0.0008727069, -0.033715714, 0.009988248, 0.016925171, 0.024613852, 0.004526773, 0.0065501872, -0.016789455, -0.03832875, -0.025748653, 0.0157059, 0.010416133, -0.04429937, 0.045725584, 0.01006273, -0.066107705, -0.0011093953, -0.033506386, -0.02936499, 0.01579037, 0.0051124683, -0.004335088, -0.04254571, -0.041519914, 0.017755643, 0.012547523, -0.0022139046, 0.018785672, 0.027931398, -0.036403973, -0.021033233, 0.05985566, -0.00230326, 0.03865881, 0.014169597, -0.020222304, 0.060547918, 0.0037218698, 0.045965314, 0.03638964, -0.037992444, -0.03058969, -0.042610854, -0.0133040575, -0.0036979027, 0.0068257446, -0.010845104, -0.022757258, -0.00011182981, -0.011046614, 0.0061499886, 0.019712448, -0.064334065, 0.011718679, -0.02797526, 0.0043941517, -0.0108072115, -0.02523315, 0.018849947, -0.03114037, 0.027414156, 0.01829145, 0.007316194, -0.030184496, -0.00028836893, 0.013032877, -0.0016859159, -0.041146424, -0.0030972515, 0.045690756, -0.011916064, 0.030078964, -0.04125934, -0.047249075, 0.035682183, 0.023354407, 0.030888481, -0.041174218, 0.037329443, -0.015157609, 0.0136143565, 0.004195084, -0.0030811285, 0.017534915, 0.0015442286, 0.0337409, -0.014322903, -0.059987687, 0.00576347, -0.001999691, -0.03280704, 0.010750863, 0.03555222, 0.038102917, -0.05979486, 0.018189607, 0.045357306, -0.03415174, -0.0065158783, -0.03294007, 0.01034974, 0.038422987, -0.008595587, 0.0025041194, -0.052305087, 0.011316744, -0.006043886, -0.014556768, 0.047959574, 0.055464115, 0.01230926, 0.012150907, -4.340191e-05, -0.03707647, -0.0039587757, 0.018568527, -0.015720177, 0.03928462, -0.00043298767, 0.0068209674, -0.009777, -0.0044444483, 0.0041057826, -0.036841735, 0.021721477, -0.0386714, -0.016533116, -0.007900179, 0.014671203, 0.009833722, -0.033756536, 0.038899295, -0.014635374, -0.022935752, -0.016892383, -0.024144817, -0.03241892, 0.013346183, 0.030738652, 0.0040619196, 0.014600631, 0.029799225, 0.016871754, -0.05817756, -0.040863268, 0.045215726, -0.021955993, 0.03954715, -0.03441492, 0.005896146, 0.014946544, 0.019591931, 0.056863833, 0.01392569, 0.007205532, 0.019935673, -0.050610483, 0.022538811, 0.047311615, -0.031098679, -0.0038586718, 0.038208827, -0.012141461, -0.007064116, 0.020093754, -0.027898498, 0.031563804, 0.024437964, 0.005839471, 0.07523302, 0.0078810705, -0.0027134474, -0.027973035, -0.0018088201, -0.0064305402, -0.010200019, 0.074021354, -0.03533735, 0.028039536, -0.03158161, 0.034784935, 0.022135789, 0.011732793, -0.031539917, -0.022750312, -0.042449296, 0.018722212, -0.04283451, 0.010428619, 0.062391914, -0.016348435, -0.008899048, -0.008991552, 0.01705003, 0.024846414, 0.020396238, 0.03151538, -0.0125866085, 0.07239602, 0.02221331, -0.041931618, 0.007945284, -0.056399576, 0.0745451, -0.0044714557, 0.015703946, -0.013363989, 0.007856316, -0.019332742, -0.05916427, -0.050253496, 0.029688101, 0.004048864, -0.025369518, 0.003921644, 0.009168307, 0.0070837135, 0.07855665, -0.0011611843, -0.047143105, 0.0071662287, 0.0032127458, 0.025403718, 0.0016702814, 0.018351816, -0.004531062, -0.013251073, -0.007960546, -0.046882533, -0.0029189752, -0.021855673, 0.037135318, 0.040018138, 0.07349933, -0.03709189, 0.025550833, -0.02728604, -0.053987525, -0.021399233, -0.0014505304, 0.0059673693, -0.011928225, -0.0041804807, 0.0076022563, -0.025551917, -0.0793362, 0.040114548, -0.012248078, 0.012574122, -0.014074923, -0.033679232, -0.06727334, 0.014093597, -0.002869792, -0.03597663, 0.0016763615, 0.06202364, -0.0077820523, -0.023235848, -0.006540416, -0.030092862, -0.03745061, -0.04193553, 0.024963021, 0.049429215, 0.03414045, 0.018235208, -0.026098365, -0.04270401, 0.032080177, 0.06872909, 0.0148631595, -0.008897745, 0.013077791, 0.006046193, -0.028714422, 0.006637235, 0.040998764, 0.044714555, 0.00908639, -0.073968366, -0.024510056, -0.00473963, 0.031439595, -0.05825834, -0.0062589953, -0.058736928, -0.021993343, 0.009702051, 0.026528204, -0.03764854, 0.012375979, -0.0057226466, -0.0067714583, 0.0046299715, 0.004133143, 0.0061519425, -0.009498911, -0.020275723, -0.034748457, 0.0035064619, -0.008358275, 0.022154463, 0.0071466854, -0.014922224, 0.04702129, 0.0044881757, 0.068656124, -0.036417432, 0.039554097, -0.0038174137, -0.022041982, 0.0071254047, 0.021116944, 0.049191926, -0.07862396, 0.015558894, 0.02718572, 0.017031137, 0.0446442, -0.0017044818, 0.04410655, 0.038571082, 0.02370879, 0.044898696, 0.036650214, -0.007748612, -0.038669664, 0.029912196, 0.006593833, -0.005649469, 0.06597047, 0.023199802, 0.015973207, -0.005086628, 0.0049797925, 0.03803408, 0.012083265, 0.01731245, 0.008203803, -0.009617798, 0.022511777, -0.008934008, -0.00058976654, -0.030200565, -0.020263562, 0.026632868, -0.0058829, 0.018289711, 0.017892336, -0.01747064, -0.012020295, 0.03880115, 0.01190803, 0.0035556455, -0.006637697, 0.048439033, 0.0007452426, 0.0073056896, 0.030589364, 0.05918338, -0.01919434, 0.031493016, 0.022361187, -0.0064817867, -0.0046972865, -0.013165949, -0.042418025, 0.05019183, 0.02196989, 0.030115444, -0.005023873, 0.083175324, 0.037461903, -0.05795173, -0.003678848, 0.0032890995, -0.055193115, -0.0046206615, -0.04387681, -0.015779948, -0.022218358, 0.014038225, 0.005075554, -0.009614758, -0.056542892, 0.009359559, 0.044702392, -0.0515555, 0.021954473, -0.03235595, -0.027994802, -0.018022325, -0.03810639, 0.050144926, 0.0817578, -0.052144397, -0.015305703, -0.03689298, -0.03570129, 0.0044506094, 0.014741342, 0.0009945254, 0.021134749, -0.021625932, 0.030819863, -0.05119504, 0.012645021, 0.03214445, 0.034952573, -0.00603615, -0.017074568, -0.037644304, -0.017848907, 0.010854659, 0.026529074, 0.019683786, 0.026304979, 0.01605051, 0.0019367458, 0.006363985, 2.1063091e-05, -0.014592162, 0.03422644, 0.01400587, -0.01657383, 0.0048019504, -0.002250738, 0.00064101286, 0.0148631595, 0.014675546, 0.012643066, 0.061377414, -0.026044406, -0.023293445, 0.01924754, 0.015846828, -0.048915878, -0.012919275, 0.06714827, 0.029206473, -0.05041592, 0.029886138, 0.015898509, -0.056652334, 0.0069946833, 0.034956913, -0.010140684, -0.02270558, -0.039419685, -0.044787515, 0.020217095, -0.023636263, 0.052828405, 0.020329574, -0.037063226, -0.048062503, -0.0010518518, 0.003889289, 0.041410472, -0.042819854, 0.0003582897, 0.050815467, 0.019305084, -0.042479694, 0.03268297, -0.08069118, 0.054520838, -0.018379284, -0.0010236228, -0.028522465, 0.00077955157, 0.0014908109, 0.03048763, 0.0001587332, 0.00888211, 0.049224228, -0.022261733, -0.023814756, -0.031210726, 0.0061947205, -0.010451202, 0.030431606, -0.025214259, -0.017747717, -0.03669318, 0.0104813855, 0.020002987, -0.013577661, -0.0096258335, -0.0021697157, -0.082827896, -0.061532892, 0.008868213, -0.014385874, -0.0108587835, 0.03313116, 0.07981218, 0.007362094, -0.06574507, -0.021673271, 0.02479647, 0.012306709, 0.027563987, -0.0056171142, -0.012643066, -0.049995527, -0.0794439, 0.033542864, -0.02817677, -0.0048727943, -0.07410039, -0.035809863, 0.041549444, 0.0005813743, 0.040284794, -0.023499789, 0.010987334, -0.020509914, 0.022523556, -0.03568826, -0.033457745, -0.014132656, 0.0034775815, 0.022111468, -0.00089724426, 0.010544168, 0.0029861818, -0.029458579, 0.024425913, -0.01897524, 0.046514258, 0.0067753666, -0.004210881, -0.03769642, -0.035290014, 0.0018700552, -0.02239289, -0.052986924, -0.015288764, -0.049526494, 0.017489748, -0.021622457, 0.00057152635, -0.015645154, -0.016104361, 0.0071931547, 0.02705109, 0.02078167, 0.013161609, 0.02138881, -0.043572776, -0.0110802725, -0.008994591, 0.0074268025, -0.03212241, -0.0022186819, -0.02900974, -0.022998506, 0.039248142, -0.013971996, -0.013069648, -0.0028721807, -0.012716951, 0.01852488, 0.0026780525, 0.050517548, 0.03307383, -0.0456283, 0.026944254, -0.011618141, 0.0581489, -0.0032565277, -0.087796174, 0.080614746, 0.00046555945, -0.00040779886, -0.03252804, -0.0074652373, 0.022952255, 0.012772486, -0.0055993083, 0.0019415502, 0.001046966, 0.0057061436, 0.005065565, -0.017527098, -0.053459432, 0.020024378, 0.053658333, -0.009239097, -0.0045779925, -0.036649343, 0.006010581, -0.003622526, 0.028351355, -0.020354765, -0.00076912856, -0.024013227, 0.027680378, -0.031844355, 0.05772807, 0.02550936, 0.022996554, 0.0019503989, -0.00811157, -0.0041578976, -0.031763904, -0.051058892, 0.03217572, 0.040116284, 0.024735453, -0.017157517, -0.02058407, 0.022891672, -0.0072698067, -0.04216527, 0.0050369017, 0.018438999, -0.059447426, -0.042976525, 0.01995652, 0.01323153, 0.050414618, 0.043569088, 0.030495882, 0.004594794, -0.045289554, -0.03921296, -0.04006591, 0.003270208, -0.016379703, 0.014477076, -0.0083435895, 0.0022268791, 0.05583891, 0.03954297, 0.042552654, 0.036771383, -0.008803938, 0.06822878, 0.009227806, 0.02036649, 0.029181829, -0.025194932, -0.014411606, 0.014139632, -0.051373314, -0.060042407, 0.007597696, 0.003697984, 0.0100199515, 0.024635782, 0.008116891, -0.020142397, 0.046528153, -0.04010152, 0.0027363563, 0.00792906, -0.017539693, 0.014037574, -0.065025456, -0.0209606, -0.01683397, -0.014678368, -0.035851553, -0.049326718, -0.022176612, -0.01626592, -0.036786363, -0.00370667, -0.0067645097, 0.02310556, 0.034961257, -0.0011120009, -0.045672722, -0.039982524, 0.04070953, 0.034379307, 0.030308269, -0.034458894, 0.03058274, 0.0069403974, 0.014754587, -0.06157545, -0.022487726, -0.0022734024, 0.015107394, 0.02348817, 0.015585602, 0.065404154, 0.0090959985, 0.017607225, -0.014416058, -0.061174165, 0.04644129, -0.009835813, 0.021096315, 0.019071436, 0.014576094, -0.069618516, -0.0033883348, 0.024464455, -0.02718963, -0.011412721, -0.015285833, 0.015907628, 0.019034846, -0.006045976, 0.01407883, -0.0037937178, 0.044312403, 0.0029783645, 0.0047282297, 0.014011082, -0.06820446, -0.03650082, -0.021823969, -0.055715136, -0.047733743, 0.016344063, -0.003185521, 0.018761352, -0.006809676, 0.06876383, -0.039173007, -0.003316677, -0.0045433305, -0.054901272, -0.025441607, -0.032402363, -0.06234947, 0.025205791, -0.05482918, 0.007322573, 0.00458068, 0.024367012, -0.04232639, -0.037256047, 0.038158502, -0.030294372, 0.07291564, -0.0090191765, -0.0064385743, -0.019881822, 0.013327508, -0.0024320271, -0.036511675, -0.06583758, -0.003688138, -0.0002480342, -0.009082752, 0.0073885308, 0.020123722, 0.008460741, 0.015570401, -0.0052229958, 0.006130011, 0.020663979, 0.028993236, 0.030025112, 0.012481538, -0.0075670783, -0.007907562, 0.012205411, -0.025923997, -0.013414366, -0.027449768, 0.027820652, 0.056770463, 0.025197212, 0.0014502046, 0.028492793, 0.02068526, 0.005821489, -0.008002563, 0.0017458481, 0.038404312, -0.10828079, -0.020801216, 0.084495574, -0.0009007186, 0.0022939227, 0.010253301, -0.02214556, 0.024828391, -0.031660434, 0.0043294425, -0.045423314, -0.055854976, 0.0120913, -0.011176033, 0.0007361225, 0.0030139766, 0.043304957, 0.012288685, 0.026543623, 0.049126077, 0.022494078, -0.013496881, 0.00734863, 0.06717954, -0.016082648, -0.006041742, 0.0382512, -0.011669387, -0.022945307, 0.017229175, -0.022324272, 0.014453189, 0.022902312, -0.020553235, 0.055434585, 0.035465904, -0.054487832, 0.008457158, -0.05550494, 0.011529979, -0.018397415, -0.0017780126, 0.035484146, 0.012609898, -5.5589193e-05, -0.014973469, -0.03659332, -0.004034722, -0.0010105941, 0.033541128, 0.028029317, 0.015123055, -0.013378754, 0.033043433, 0.02707541, -0.019185219, -0.031640675, 0.057982996, 0.015735215, 0.04016319, 0.04532984, -0.040723428, 0.083130166, 0.03702696, -0.036702763, -0.03563267, -0.03970805, -0.042219125, -0.027341196, 0.036846947, -0.008587661, -0.0012090649, 0.05329223, 0.02692167, 0.002040297, -0.07647422, 0.0057140696, -0.034730215, -0.029757155, -0.055804595, -0.015281816, -0.011825297, -0.0103448015, -0.010024294, -0.022853239, -0.047143105, 0.081181064, 0.0045904513, 0.004045851, 0.0027002017, 0.0027905516, -0.037562497, -7.81723e-05, -0.019317245, 0.080201305, 0.012241782, 0.038193684, -0.0104459915, 0.014249073, -0.08192457, 0.0043741744, -0.0018075174, 0.042026296, -0.033525493, -0.007443306, -0.00687581, -0.010351912, 0.03873698, 0.03980881, -0.043898087, 0.043548487, -0.027049351, -0.013372458, -0.024752824, 0.04268555, -0.03573994, 0.047327247, -0.002683047, -0.024754561, -0.0037727363, -0.034460086, 0.045075558, 0.002220962, 0.031229835, 0.0452635, -0.049623776, 0.03126979, -0.0039029692, -0.009987814, -0.021276763, 0.009365042, -0.0339511, 0.009005449, 0.029213857, 0.008959414, 0.02296299, -0.0073236586, 0.016800096, 0.009309778, -0.029484853, -0.026661964, 0.049417052, -0.00044949073, -0.030252028, -0.045209646, -0.013403943, -0.024543496, 0.016094808, 0.008096045, -0.015076831, 0.01344379, -0.08382502, -0.0262394, 0.041702315, 0.017412663, -0.029179113, 0.036893416, 0.023624538, -0.033565447, -0.013239293, 0.02912526, -0.004018056, 0.039357148, 0.013113837, 0.009033678, 0.028880322, 0.036326665, -0.019418433, -0.0033575003, -0.03691209, 0.018586768, 0.061324432, -0.0045405077, 0.028564159, 0.009873161, 0.020024268, -0.00873456, -0.012453716, -0.009126731, -0.04914258, 0.006518267, 0.019360673, -0.04518185, 0.003910569, 0.01592891], [-0.01226457, -0.07827964, -0.037647378, -0.05255364, 0.013028217, 0.023325942, -0.009846156, -0.04138573, 0.010971834, 0.031278554, 0.0549682, 0.00849403, -0.062296204, -0.0057584955, -0.036407, 0.0069081997, -0.0058011105, -0.012198381, 0.05291757, 0.05516768, -0.021103604, 0.028804265, -0.005236969, 0.020403625, -0.02334759, 0.03261742, -0.005601635, 0.0018170407, -0.004159971, 0.012892465, 0.013383901, -0.041609004, -0.004952716, 0.0047960263, 0.02342296, 0.018920027, 0.034295734, -0.0109228715, -0.057876915, -0.05696477, -0.050115503, -0.0020868992, 0.009503195, 0.028726062, 0.011652998, 0.049524333, 0.012965456, 0.027470047, -0.020293688, -0.026080249, 0.0528864, -0.010056683, -0.026375197, 0.015035467, -0.010501479, 0.016049618, 0.019947551, 0.04002567, 0.05287688, -0.020486815, 0.009568478, 0.018445026, -0.04500349, -0.007952726, 0.0024712295, 0.031917896, 0.00094478857, -0.009161933, 0.029780768, -0.03791089, -0.02844232, 0.011302555, 0.006951722, -0.019568095, 0.06138995, -0.002224152, -0.050077423, 0.0289847, 0.0007779545, -0.013511746, -0.029440772, -0.0036924223, 0.030354735, -0.03835461, -0.07752344, 0.014026756, -0.0055694473, -0.0036939806, 0.069377586, -0.0075691896, -0.027991628, -0.02217261, 0.04668997, -0.004067487, -0.012172086, -0.015967563, -0.009781101, 0.036455058, 0.032670464, 0.052775554, 0.022709608, -0.0473505, -0.022130903, 0.0006346948, 0.010138797, 0.0067799008, 0.042709522, -0.037733514, -0.0016402327, -0.007792239, -0.007034232, 0.011393453, 0.010771678, -0.08477165, 0.0016710608, 0.0033303346, 0.05064774, -0.03287266, -0.06572413, -0.027125724, -0.0020128894, -0.019627484, -0.000623361, 0.016714236, -0.03218719, -0.023272445, -0.010214959, -0.004181279, -0.05504708, 0.0063202004, 0.042681962, 0.019943018, 0.03214276, -0.023841064, -0.035398517, -0.008292515, -0.041855402, 0.066283904, -0.04051937, 0.009374443, -0.038965728, -0.009360446, 0.014298768, 0.006051362, 0.033641092, -0.04480175, 0.01411788, -0.038344633, -0.0037845948, -0.03334868, -0.0062789456, 0.008644997, 0.01095642, -0.003824263, 0.0050727986, -0.019460281, 0.0070203766, 0.037587535, -0.025817571, 0.023329115, -0.03634444, 0.001262136, 0.015745929, 0.034278963, -0.038966637, -0.03952426, -0.0031825413, 0.008414807, 5.9275964e-05, 0.03808078, 0.065105185, -0.007485999, 0.016937284, 0.043708716, -0.06751158, -0.029331176, 0.01486104, -0.04457394, 0.035124015, 0.060587965, -0.031150822, 0.014697718, -0.0010195919, -0.029421277, -0.0257201, 0.046299174, -0.010274293, -0.014965651, 0.02399509, 0.012382471, 0.0030492553, -0.03250499, 0.023524964, 0.01673458, -0.014045796, 0.042568076, -0.048597675, 0.0353253, -0.0005621583, 0.021466343, 0.018970123, -0.022015978, 0.023221217, -0.021317584, -0.04269864, -0.04374679, 0.015287079, -0.0007108582, 0.05889563, -0.04447579, 0.012554264, 0.03726565, 0.019058978, 0.034281682, 0.030839821, 0.04849431, 0.04308626, -0.03605475, 0.04641403, 0.022775117, -0.037168637, -0.032539897, 0.048588607, -0.049619306, -0.055203944, 0.01599839, -0.0066547757, 0.026905622, 0.016081354, 0.012059202, 0.07344326, -0.007829414, -0.037303735, -0.02948135, 0.011843263, -0.02649035, -0.043083083, 0.024778714, -0.042536344, 0.013963287, -0.01075445, 0.0551976, 0.016643513, 0.015959855, -0.011294848, -0.0029613047, -0.039242275, -0.005766656, -0.04166964, -0.03254715, 0.04474508, -0.008891168, -0.04925323, -0.00041935197, 0.012917853, -0.005309676, -0.018663654, -0.0029559778, 0.019059274, 0.029360982, 0.010537747, -0.0614031, 0.011181056, -0.02951739, 0.040065564, 0.028002283, 0.01712112, -0.016650766, 0.017337596, -0.02070692, -0.040049244, -0.04410948, 0.03281554, 0.01531836, -0.012620906, 0.055290986, 0.045331717, 0.015378429, 0.027302759, 0.00802617, -0.035252765, -0.01411244, 0.004266963, -0.00914788, -0.010439087, -0.022241747, -0.001486546, -0.04277435, -0.023673663, -0.06951359, 0.0047921725, 0.012097283, 0.0026085956, 0.05523477, 0.055465072, -0.04458822, 0.07776281, 0.0005875461, -0.03402871, -0.010808173, 0.021249583, -0.005492377, -0.004557789, 0.009111498, -0.018030774, -0.02925133, -0.022939466, 0.0342844, 0.021958062, 0.013016685, 0.02138627, -0.0020618516, -0.05997141, -0.009183127, 0.028670073, -0.02544537, 0.029360304, 0.07256194, -0.03188707, -0.021996258, -0.022482704, 0.006743746, 0.010024551, -0.044648062, 0.027540315, 0.043616228, 0.0067205117, 0.01753503, -0.042241324, -0.022197999, 0.01787686, 0.027546208, -0.015812742, 0.015549569, 0.03558643, 0.053517472, -0.021712402, 0.024971616, 0.03190203, 0.03395436, -0.0059414236, -0.060535833, -0.02796012, -0.029275525, 0.04429082, -0.04003927, 0.009098351, -0.09285472, 0.0108870575, -0.020905035, 0.017097771, -0.034319762, -0.010177105, 0.0012875239, -0.030056654, 0.014840978, 0.0024952574, -0.014799271, -0.016248189, 0.0038766253, -0.027661363, -0.0233069, -0.05198332, 0.045472257, 0.032996878, -0.03420325, 0.057709172, -0.01065018, 0.031426463, -0.01667978, 0.05340685, 0.0075220405, -0.012719852, -0.019735383, 0.024899418, 0.052770343, -0.033297904, -0.014025849, 0.0006856971, 0.0013206186, 0.011304368, -0.020302529, 0.067349054, 0.01605846, 0.046184022, 0.03511676, 0.030275624, 0.024906002, -0.0162228, 0.049254134, -0.015515569, -0.01704337, 0.03371771, 0.049858455, 0.029096225, -0.01854397, 0.044065952, 0.057664745, 0.016389634, 0.00035361567, -0.0065597976, 0.035633583, -0.01871443, -0.045201153, -0.023906235, -0.040261414, -0.034394115, -0.0009756166, 0.0011501578, 0.04143741, 0.010929446, -0.0061393124, -0.017915621, 0.040671926, 0.03762063, -0.015624373, -0.033685975, 0.028819678, 0.015998844, 0.00750844, 0.006921715, 0.04073698, -0.073515795, 0.023724893, 0.029304767, -0.009079763, -0.0031102314, -0.031062419, -0.05875914, 0.026075985, 0.0043431264, 0.025608575, -0.0061579, 0.09154838, 0.028314644, 0.02509946, 0.018865397, -0.014797457, -0.028874988, -0.017443795, -0.0633498, -0.036496766, -0.0007752344, 0.018036667, -0.03602392, -0.017346663, -0.011312075, 0.048786726, 0.038037036, -0.030316653, 0.0049515264, -0.028696595, -0.031744715, -0.038344633, -0.028130582, 0.047299273, 0.061967976, -0.047130626, 0.016383259, -0.024672458, -0.037703592, 0.0012802702, 0.038770333, -0.003591466, 0.0037830079, 0.025087673, 0.025257226, -0.035296515, 0.02039592, 0.04604802, -0.011355825, -0.033878196, 0.005159162, -0.05547233, -0.014890848, -0.0033788434, 0.038156945, 0.015607147, -0.015831102, 0.008075812, 0.045477696, 0.02626798, 0.0043966216, 0.018789686, 0.0019723708, 0.018219369, -0.045835845, -0.0039846934, -0.006814809, -0.03135245, 0.021354306, 0.03415429, -0.0039550555, 0.03724208, -0.01960935, -0.031625483, 0.008744962, 0.029557286, -0.03628278, -0.006091455, 0.036890276, 0.062198278, -0.026243724, 0.013624178, 0.015831167, -0.086057365, 0.029453922, 0.049642205, -0.0027699894, 0.029021874, -0.04475732, -0.037903976, 0.013265916, -0.01605642, 0.052697804, 0.013377554, -0.0009511356, -0.021668933, 0.015351908, -0.032723054, -0.010919018, 0.019192945, -0.024725897, 0.024257584, -0.008200371, 0.0049624066, 0.046801493, -0.015350945, -0.007061887, -0.0035687983, -0.030112645, -0.03666224, -0.034659777, 0.006501882, 0.006519676, -0.017631823, 0.03829182, 0.02094017, 0.007777958, 0.009385549, -0.023702111, 0.01427202, 0.013625991, 0.007170465, -0.025777677, -0.022473184, -0.0013429719, 0.0075016394, 0.03502246, -0.0020751122, 0.006760407, 0.008880118, -0.048050024, -0.059922446, 0.0987839, 0.00064149516, -0.019008204, 0.03525186, 0.0053645317, 0.005859083, -0.028164923, 0.033733577, 0.0073219985, 0.023081131, 0.023061184, 0.05961779, 0.026639502, -0.062195107, -0.06793275, 0.019238055, -0.016344752, -0.027449645, -0.048352867, -0.015117071, -0.0053936597, -0.02006361, -0.0066742697, -0.014590727, -0.0027406916, -0.024744174, -0.018732565, 0.022203892, -0.007942753, -0.051829632, 0.027264677, 0.010069434, 0.0017762389, 0.018991882, 0.029545045, -0.015825663, 0.014703726, 0.0063396944, 0.05435164, 0.013564335, -0.055305492, -0.010304497, -0.023325037, 0.02732452, -0.005117227, -0.04178287, -0.016591376, -0.06523484, -0.00016728744, -0.0008559313, 0.011440828, 0.010242615, -0.025718743, 0.028104657, -0.02005817, 0.014877699, -0.002631717, 0.0024598958, -0.037145063, -0.01227344, 0.008852434, 0.031960513, -0.04125063, -0.0108383205, -0.038823716, -0.0355683, -0.009447546, -0.0049070977, 0.031383734, 0.010911311, -0.029638166, -0.01997566, -0.023555338, 0.07718433, 0.015529622, -0.004315018, 0.057985723, 0.015365055, 0.072732404, -0.019462464, -0.08290565, 0.0719345, 0.008975492, -0.054032024, -0.0031018443, -0.009143006, -0.010846028, 0.04010546, 0.017194789, -0.0034153382, 0.0044143028, 0.0097314585, -0.0032791055, -0.0017196264, -0.029584033, -0.03351302, 0.046870403, -0.0073402454, 0.01660203, -0.07535097, 0.03442041, 0.0097697675, 0.015438498, -0.0031902483, -0.024583997, -0.020072224, 0.037857734, -0.041247003, 0.012533183, 0.01750851, -0.0022141782, 0.01905286, 0.057279848, -0.035666224, 0.0006700564, -0.023299193, 0.04932338, 0.014160042, 0.024007784, -0.02987418, -0.006789648, -0.008846739, -0.019054899, -0.011739135, 0.024929, 0.05312396, -0.007966213, -0.01389075, 0.010471558, -0.027853131, 0.033179127, 0.01028132, -0.0011329303, 0.025447637, -0.05246025, -0.04701275, -0.002653563, 0.06449089, 0.0102494145, 0.00810052, -0.013592897, -0.02634709, 0.043616228, 0.028267495, 0.03857947, 0.012704324, 0.05847806, 0.034376208, 0.020598568, 0.03981169, 0.0048240204, 0.00058731943, 0.03251451, 0.0065192226, -0.044276316, -0.091741286, -0.015991589, 0.014889997, -0.010805226, 0.037060283, 0.022368912, 0.03614678, 0.017746974, -0.057847902, -0.011067265, 0.012399783, -0.01345298, 0.016804906, -0.07384493, -0.02233038, 0.036625065, -0.038631156, -0.037510466, -0.011606528, -0.008892981, -0.050972793, -0.024325587, -0.018743444, 0.020689238, 0.028414609, -0.004232508, 0.0024284727, -0.019112023, -0.051363133, 0.0021235074, 0.03391628, -0.035001606, -0.021739544, 0.01784762, -0.0043871016, 0.017763976, -0.043752234, 0.008856713, -0.044466723, -0.0016474865, -0.016608603, -0.009743925, 0.034966245, 0.028653752, 0.023560125, 0.004230241, -0.032822337, 0.037069354, -0.047580097, 0.020939037, 0.0014211923, -0.022678496, -0.059875242, -0.03641471, 0.01569555, -0.023024915, -0.004459723, -0.03533074, 0.016346112, 0.007155731, -0.008934916, 0.028014522, -0.002094663, -0.025506118, -0.01488178, 0.010964807, 0.01766405, -0.113737315, -0.02771803, 0.014187244, -0.028076632, -0.030815795, -0.05283064, 0.036873955, -0.023045314, -0.0360144, 0.037256587, -0.022127502, 0.005478323, 0.008898421, -0.054914705, 0.01999334, -0.0037152315, -0.052605323, 0.008295462, -0.037032176, 0.07010204, -0.011460549, 0.028822852, -0.013768345, 0.017403333, -0.030139279, 0.000112431655, 0.013114619, 0.016902206, 0.02556857, 0.014016782, 0.03102751, 0.037805144, -0.030543327, -0.06939934, -0.0013120049, 0.0018696296, -0.014132954, -0.005230792, 0.01963485, 0.019296536, 0.0062861987, 0.01353328, 0.007851629, 0.018039387, 0.026877059, 0.036012586, -0.014617928, -0.012136102, -0.0045185736, -0.0055717425, 0.032978743, 0.00097743, -0.039343372, 0.002297482, 0.04645966, 0.008926529, 0.010295883, 0.056188624, 0.007293097, -0.025366032, 0.010625699, -0.020108493, 0.024816569, -0.04703202, -0.005675305, 0.09155564, -0.0071793054, 0.043337416, 0.014220564, -0.0069984174, 0.021160727, -0.07420852, 0.00895543, -0.05018079, -0.023576645, -0.024885932, 0.0034024175, 0.02415558, 0.0343651, 0.0013838614, -0.03195598, 0.04789226, 0.02907809, 0.031415127, 0.028823987, -0.031384755, 0.04554751, -0.0067010177, 0.0082479725, 0.047910843, -0.014124679, 0.009510449, 0.025389608, -0.03520108, 0.020437628, 0.017382478, -0.040121328, -0.011582048, 0.03283707, -0.05858777, 0.014805618, -0.0030800833, 0.04641795, 0.021650575, 0.0022255122, 0.03021193, 0.004753184, -0.007427743, -0.0519806, -0.019178664, -0.0005889062, 0.0053678183, 0.02458377, 0.01022584, -0.015021866, -0.012943242, 0.017740628, 0.04375405, -0.010847359, -0.05744532, 0.07078479, 0.0120034395, 0.054674428, 0.028165037, -0.0543462, 0.052754022, 0.030410044, -0.03415565, -0.030351106, -0.012803382, -0.051329132, -0.04533081, 0.002283088, -0.0364605, 0.0486616, 0.038044516, 0.030667095, 0.021742832, -0.06097876, -0.014331863, -0.0015318814, -0.05776448, -0.052124765, -0.04474417, -0.009091338, 0.0161922, 0.04388915, 0.004629192, -0.018797848, 0.041711237, 0.00333252, 0.009190268, 0.019819705, 0.009287399, 0.005841459, -0.0006061336, -0.027842248, 0.05467624, -0.007964513, 0.029081265, -0.026372477, -0.0031843546, -0.021566024, 0.02445026, 0.0057040933, 0.020477524, 0.0013337659, 0.012459513, -0.011774495, -0.011195111, 0.012658535, 0.053078625, -0.027206646, 0.017427813, -0.0023764786, -0.04010213, -0.019132877, 0.036706217, -0.018434258, 0.07161631, -0.0025895548, -0.005798844, 0.03913347, 0.005471976, 0.064499505, 0.026715664, 0.040779144, 0.01629171, 0.004815407, 0.025383089, 0.03779245, -0.0025006977, 0.0050914143, 0.0065509574, -0.0023304634, 0.0042261607, 0.0042365883, -0.008308835, -0.012882944, 0.011690852, 0.08778737, -0.018430801, -0.0784773, -0.052374903, 0.04774628, -0.021747818, -0.03973915, -0.010007523, 0.010934886, -0.0068524377, -0.01990947, 0.018173127, -0.034817092, -0.02693214, -0.05310673, -0.016235495, -0.005156442, 0.026672143, -0.033201907, 0.017788414, 0.023807855, -0.0070671, -0.024047341, 0.026755108, 0.0028216718, 0.05895227, 0.0078507215, 0.026093977, 0.02085596, 0.0045113484, 0.010335552, 0.007548222, -0.02171223, 0.033071678, 0.044252396, 0.028811434, -0.03377166, -0.0085058175, 0.036626197, -0.0052797543, 0.0030973107, 0.0060182675, 0.027761552, 0.013541668, 0.034291655, -0.02391621, 0.015649308, 0.02946616], [-0.029868333, -0.07967352, -0.037661325, -0.050761297, -0.0037179748, 0.015108741, 0.003966083, -0.014189444, 0.038189393, 0.04153851, -0.007892089, -0.002729819, -0.04352886, -0.033913966, -0.017327733, 0.018835926, 0.046496395, -0.045163065, 0.029929325, 0.037227992, -0.021454342, 0.016135054, -0.029100377, 0.02667012, 0.0035683315, 0.052276645, 0.012703099, -0.005714462, 0.019671012, 0.02796661, -0.017406981, -0.07364042, 0.005501798, 0.011305157, 0.00883463, -0.01628352, -0.0012464887, 0.014809618, -0.030307831, -0.039662197, -0.053456027, 0.0021586579, -0.017134175, 0.0138990935, -0.022332411, 0.08029457, 0.007093626, 0.007148231, -0.063634954, -0.033026904, 0.034399927, -0.023398196, -0.029913643, -0.0019254894, 0.018910486, 0.026124068, 0.037875798, 0.010357654, 0.013179578, -0.0098576555, -0.004598675, -0.0012219272, -0.08104457, -0.004138588, 0.024138328, 0.04882961, -0.015073872, -0.002188592, -0.019613337, -0.03346879, -0.046622712, 0.026888253, 0.025552578, -0.042340208, 0.04136044, 0.019599082, -0.0733016, 0.0013882647, -0.001863154, -0.033635456, 0.016325679, 0.011305652, -0.00949691, -0.029436562, -0.044553418, 0.02419699, -0.03930008, -0.0010780679, 0.05012665, 0.0049210424, -0.027626257, 0.008783315, 0.055178832, 0.01994031, -0.004413149, 0.016584177, 0.008370158, 0.042358685, 0.013451726, 0.033516597, 0.065206885, -0.050361298, -0.027742047, -0.029608821, 0.012142081, 0.0055153393, -0.00094824366, -0.0032596423, 0.010731556, -0.006911389, -0.0006793845, -0.009647349, 0.032472685, -0.044342015, -0.008696035, 0.009585068, 0.045531485, -0.01624295, -0.045518108, 0.0134999715, 0.010750855, 0.016077599, 0.0019491188, 0.031645056, -0.04464377, -0.010071032, 0.00097061205, -0.017463122, -0.0624718, 0.015662247, 0.02245434, 0.022568593, 0.028942483, -0.04185079, -0.026003014, 0.027712114, 0.018052833, 0.04507359, -0.031245988, 0.03167373, -0.026806086, -0.006431127, 0.031012217, 0.007597791, -0.0053649014, -0.04598938, 0.0021572872, -0.07232792, -0.026337665, 0.003477734, -0.022303024, -0.009952611, 0.0030806952, 0.015528915, 0.01241664, -0.041277546, 0.025993738, 0.016833792, -0.05238761, 0.02820345, -0.00899735, -0.008895596, 0.011377005, 0.016729461, -0.0069802487, -0.031308707, 0.008246611, 0.005720163, -0.0005814407, -0.025341175, 0.0629718, 0.005576304, 0.016171237, 0.02394244, -0.04100123, 0.00583069, 0.0147894425, -0.03223853, 0.04088785, 0.021203246, -0.00828507, -0.010349101, -0.017440753, -0.009761383, -0.022657847, 0.053127524, -0.013009183, -0.019325398, 0.018353472, 0.01568681, 0.027234098, -0.015953913, 0.023739533, -0.005801085, -0.047055166, 0.024423633, -0.03908062, 0.000849121, 0.025163107, 0.050933227, 0.012963131, -0.016863232, 0.028783275, -0.020084169, -0.04304114, -0.025421876, 0.049052533, 0.018778032, 0.051089726, -0.013645148, -0.008508205, 0.042184126, 0.024554772, 0.036956064, 0.051922698, 0.025349947, 0.018201606, -0.050674237, 0.050921824, 0.06598583, -0.03659554, -0.006112707, 0.01884733, -0.046861306, -0.039198164, 0.02809468, -0.0021631534, 0.028526695, -0.0019502152, 0.010404365, 0.06647705, 0.010070154, 0.0007464897, -0.061294608, -0.011869494, -0.029697306, -0.0044249906, 0.028884152, -0.066003375, 0.01682014, -0.033748176, 0.03528896, 0.03922536, -0.028479544, 0.00072011916, -0.007350972, -0.042556055, -0.0027984593, 0.008140114, -0.020673642, 0.0477135, 0.0011017522, -0.030545112, -0.021121887, -0.012180019, 0.036635887, 0.014492075, -0.0008004369, 0.012143176, 0.031516764, 0.015064661, -0.044948153, 0.0046764156, -0.063231446, 0.022434711, 0.008907876, 0.049312178, -0.02374869, 0.030066246, -0.03666966, -0.024650825, -0.08149106, 0.007245599, 0.0072852923, -0.03608567, 0.026621597, 0.026937664, 0.02143592, 0.033507604, 0.034873612, -0.05100691, -0.01854711, 0.008736495, 0.004651416, 0.011157871, 0.013011814, 0.02697626, -0.06673999, 6.403495e-05, -0.046770077, -0.0083276145, 0.020141186, -0.0038631498, 0.023554338, 0.052696384, -0.044385873, 0.013334182, -0.0015818087, -0.077950716, -0.034074053, 0.043994207, -0.0061912155, 0.048626214, 0.007996475, 0.01360721, -0.039173603, -0.042316794, 0.047751658, 0.023271006, 0.008156028, -0.028352572, -0.03461528, -0.057377074, 0.025821218, 0.017155558, -0.023822319, 0.044652537, 0.07962791, -0.008839674, -0.02019963, -0.017667945, -0.015205506, 0.0067451615, -0.029399063, 0.019733293, 0.04019986, 0.0042017456, 0.0010478048, -0.018966628, -0.014676285, 0.050933227, 0.03435344, -0.018364875, -0.014499736, 0.031032393, 0.013242352, -0.015391196, 0.009254147, 0.033888087, 0.049991127, 0.021361798, -0.073715635, 0.0041708793, -0.021425614, 0.03574028, -0.06800424, 0.03646659, -0.0658139, 0.0021657848, 0.014449093, 0.018107858, -0.01946838, 0.020125397, 0.020667503, -0.024403997, -0.00094034895, -0.026037665, -0.013922779, -0.009882435, -0.01127717, 0.0008872788, -0.032618355, -0.035500363, 0.06295338, 0.042205177, -0.025841173, 0.044491794, 0.007904808, 0.032308705, -0.017466191, 0.06703407, 0.0018478032, -0.013293832, 0.042225353, 0.020310484, 0.061995488, -0.0405236, 0.004758762, 0.029956955, -0.00014956109, 0.026069244, -0.02859731, 0.044947054, 0.03014029, 0.034744665, 0.04875779, 0.025895067, 0.022779338, -0.031872742, 0.022839645, 0.0114217, -0.00033508704, 0.02472802, 0.0055701635, 0.0388508, -0.01865961, 0.05908036, 0.033617474, 0.013141201, 0.02443723, -0.014744432, 0.024828017, -0.029074611, 0.0016747772, -0.020032413, -0.030289192, -0.04627008, -0.0038070097, 0.0036806941, 0.021956533, 0.037615273, 0.0043284995, -0.02104919, 0.042735875, 0.022447597, -0.0049026213, -0.030986777, 0.010761381, 0.027020996, -0.005757444, 0.012603044, 0.066977054, -0.033401683, 0.023726266, 0.01199866, -0.0015614002, 0.004427403, -0.013392955, -0.048328847, 0.0404929, 0.021209605, 0.022643812, -0.012240765, 0.075852476, 0.04988959, -0.026677137, 0.00481249, -0.010064892, -0.07265418, -0.018795576, -0.017325183, -0.05300647, 0.03027011, -0.008927394, -0.0131339645, 0.000876314, -0.053922806, -0.0007472572, 0.016887246, -0.0445771, 0.032013528, -0.010559188, -0.05399638, -0.010689452, -0.042856928, 0.038866036, 0.0435532, -0.036014836, 0.0028205535, -0.0053070066, -0.03730288, -0.027299065, 0.01874404, -0.01668286, 0.0051789368, -0.008390772, 0.03941746, -0.05850629, 0.000991226, 0.042364825, 0.013644928, -0.01984645, -0.035462864, -0.050239153, -0.010002611, -0.023157846, 0.061557766, 0.0007166652, -0.002841551, 0.0031981294, 0.006824986, 0.027805205, 0.04998849, 0.004077623, 0.04689815, 0.018286804, -0.033340283, 0.006322684, -0.03913632, -0.008488579, 0.014460497, 0.013991199, 0.0077637997, 0.057189353, -0.04137009, -0.009980681, 0.025787666, 0.043782696, -0.01751663, 0.016024308, 0.048017446, 0.049581476, -0.056136727, 0.0062556886, 0.008243843, -0.050698142, 0.02681047, 0.03709548, -0.0028548187, 0.024175389, -0.005236831, -0.05603497, 0.009512699, -0.053565677, 0.047287624, 0.02678876, 0.0053100768, -0.026429439, -0.0048947264, -0.0368065, -0.02618284, -0.018800618, -0.0100087505, 0.023114208, 0.0070289327, -0.03827755, 0.043701664, -0.02817538, 0.027185032, 0.0032859307, -0.020358866, -0.0541455, -0.02670433, -0.0048631476, 0.013359621, -0.0076168706, 0.014380672, 0.009326077, -0.014572776, -0.007903136, -0.031734366, 0.050009985, 0.007640335, 0.0029115619, -0.03630519, -0.028904326, -0.008076299, 0.01980259, 0.013845147, -0.0061166543, -0.0036839286, -0.020305604, -0.08915771, -0.05527532, 0.053611074, -0.021513112, -0.028560465, 0.014333303, 0.051314805, -0.006155908, -0.04459201, -0.017244482, 0.0178504, 0.03196545, -0.0035166594, 0.03615782, 0.018304348, -0.04578724, -0.057508215, 0.013083964, -0.02025555, -0.039463077, -0.072411254, -0.0468385, 0.014750847, -0.019249083, 0.0018054787, -0.029635904, 0.020367939, -0.0038579141, 0.0044499906, -0.014974092, 0.009103874, 0.0013498876, 0.029449282, 0.032639842, 0.0041184123, -0.00856029, 0.040083468, -0.0023605214, 0.04561745, -0.0068574417, 0.042327106, -0.0054076645, -0.0062885834, -0.03749422, -0.018458296, 0.02347539, 0.0025368368, -0.057158653, -0.03629729, -0.05501743, 0.005525975, -0.032817475, 0.032309584, -0.022424515, -0.015179492, 0.05348585, 0.004447798, 0.019720133, -0.015888562, 0.01857211, -0.008554258, -0.021891182, -0.011613353, -0.0031565726, -0.03000191, 0.0056895716, -0.03635782, 0.013028043, 0.02246969, 0.0006052619, 0.011608309, 0.04177686, -0.026219243, 0.011868177, -0.0040210444, 0.08393491, 0.013255236, -0.026986565, 0.04275956, -0.02150467, 0.052568313, -0.007369064, -0.05686304, 0.06405206, -0.026128234, -0.016669922, -0.015081547, 0.013104797, 0.021966621, 0.060583208, -0.0049806912, -0.0024491176, 0.0074659935, 0.016494703, -0.009857436, -0.0057701636, -0.04747841, 0.023780214, 0.037316587, -0.0044350782, 0.009360507, -0.041931495, 0.03983325, 0.019723643, 0.0028004362, -0.01839733, -0.0007516432, -0.03722273, 0.023839423, -0.039696407, 0.059870053, -0.0022856311, 0.047310427, -0.010810505, 0.03990606, -0.0026206088, -0.03426484, -0.027897995, 0.060888577, 0.0121438345, 0.043469205, -0.0044592014, -0.003574554, 0.008153492, -0.012485939, -0.045854293, 0.020255221, 0.024149073, -0.020538991, -0.020824518, 0.01578966, 0.021163115, 0.021786796, -0.00054736726, 0.019438555, 0.04095781, -0.043411095, -0.029975377, -0.014364882, 0.029610466, 0.0138197085, 0.01053989, -0.01833856, 0.0065337587, 0.06959284, 0.050511573, 0.043562848, 0.019055223, 0.059721366, 0.049678847, 0.003267537, 0.03570168, 0.021481397, -0.010283586, 0.02018066, -0.002687933, -0.045527097, -0.053989362, -0.006324247, 0.008240772, -0.012378044, 0.033963528, 0.027773626, -0.00037192905, 0.04508324, -0.026684154, 0.0032228003, 0.0009864015, 0.007984633, 0.011152608, -0.05933935, -0.032909583, 0.0018429786, -0.03262274, -0.037835885, -0.044082366, 0.0020846447, -0.02584205, -0.0061902283, -0.018942066, -0.013046752, 0.01037103, 0.0268017, -0.020284388, -0.028243802, -0.03442186, -0.0021578902, 0.00910941, 0.023276268, -0.03536133, -0.010185944, -0.021020735, 0.033042036, -0.090878755, -0.029622307, -0.02377802, 0.009128051, -0.008258974, -0.004580692, 0.0600297, 0.01022125, 0.014865319, -0.032122303, -0.028322967, 0.04145781, -0.05169726, 0.035364836, 0.01906838, 0.0031383708, -0.057522688, -0.0108824335, 0.021306533, -0.016578035, 0.024038108, -0.016035931, 0.024067275, 0.0093434015, -0.0006842091, -0.00025526262, 0.026652249, -0.013278043, -0.023036793, 0.023603022, -0.013336375, -0.07935686, -0.029418908, 0.0018096454, -0.02938415, -0.067478366, -0.0067975735, 0.0003184204, -0.028154766, -0.03967843, 0.05135954, -0.00210175, 0.0022436357, 0.0092512965, -0.031166602, 0.011791643, -0.015066087, -0.029991165, 0.018574413, -0.04451011, 0.03731922, -0.013317188, 0.031884145, -0.035587646, -0.03231704, -0.009347623, 0.0136912, 0.029206078, -0.0030474167, 0.022467168, -0.008122351, 0.017921893, 0.016906105, -0.06319416, -0.03916483, -0.033789843, 0.0086269565, 0.0021947322, 0.0011078925, 0.029487658, 0.020944694, 0.01644262, 0.012341642, 0.017743412, -0.011229363, 0.009126214, 0.013963239, 0.010622018, 0.00842279, 0.0021456096, 0.010656996, 0.0068964767, -0.019800836, -0.02720389, -0.005840119, 0.04277886, 0.022998545, 0.019298205, 0.029003449, 0.012280457, -0.023916617, -0.022068813, -2.083329e-06, 0.018823646, -0.094101556, -0.0050448156, 0.07747352, 0.0073499847, -0.021438112, 0.028363975, 0.0072732307, 0.047045518, -0.07199985, -0.01096489, -0.08092615, -0.046577096, 0.014515102, 0.015834507, 0.0066802492, 0.00957032, 0.015031987, -0.016831215, 0.05701441, 0.004793411, 0.039924476, 0.0142368125, -0.021307852, 0.048410427, -0.022215744, -0.010599101, 0.028623626, 0.015714003, 0.014674531, 0.0068675294, -0.016767673, 0.018518383, 0.006044505, -0.03671023, 0.05074375, 0.009576077, -0.06574723, -0.017325403, -0.022979338, 0.014364882, -0.001008989, -0.03296309, 0.010836053, 0.022908287, -0.021312235, -0.027196435, -0.01216708, -0.027363978, 0.032137215, 0.01596148, 0.01023726, -0.011742081, 0.0018640312, -0.008262264, 0.066213675, -0.030924497, -0.03751286, 0.06078233, -0.009951295, 0.05661392, 0.051763486, -0.040534344, 0.059427947, 0.013731962, -0.03637643, -0.030435024, -0.0017631542, -0.019927591, -0.05258279, 0.017254021, 0.0024350828, 0.04278368, 0.047123585, 0.035467032, 0.021527149, -0.0890735, -0.0186254, -0.029605422, -0.026052577, -0.04419333, -0.036840715, 0.025375387, 0.031835023, 0.051009763, -0.0196811, -0.031255912, 0.06444197, -0.0011513134, -0.009350296, -0.012747343, -0.00436221, -0.045761306, 0.012734624, -0.025775384, 0.0522548, 0.028005423, 0.05236656, -0.03632273, -0.009492963, -0.051320504, 0.028516607, 0.007919474, 0.011141863, -0.016331546, 0.019008731, -0.0038676728, -0.008145597, 0.0401793, 0.03215958, -0.040965706, 0.035185892, -0.005882115, -0.022464866, -0.032320984, 0.04910823, -0.048751216, 0.043563064, 0.034217473, -0.012467957, 0.04101395, -0.024016619, 0.08534676, 0.026928892, 0.013298629, 0.008490991, 0.0021043404, 0.014090102, 0.038014613, -0.04269728, -0.013485498, -0.0035706065, -0.04428587, -0.019285487, 0.0015745582, -0.026689418, -0.010922784, -0.00989691, 0.046363063, -0.028093802, -0.04879288, -0.023119614, 0.06399987, -0.018557856, -0.031771865, -0.02701661, 0.016680228, -0.0388815, -0.019062899, -0.006292202, -0.039878864, -0.03369116, -0.06076479, 0.01005897, 0.00026491174, 0.006360513, 0.016066633, 0.039991144, 0.024067055, -0.045388285, -0.022451488, -0.0037526237, 0.005032446, 0.046717446, 0.042133134, 0.029439852, 0.025631089, 0.019759826, 0.008885069, 0.01210129, -0.033277124, 0.020141844, 0.07437704, -0.0046153413, -0.030186122, 0.014792952, 0.030376693, -0.0057529486, -0.00077565626, -0.012571465, -0.018665532, 0.026301263, 0.03941132, -0.04819464, 0.006653495, 0.025387665], [-0.0510513, -0.09073733, -0.024682492, -0.054920945, 0.021353673, 0.013373381, -0.00022789558, -0.023047362, 0.025320258, 0.047013402, 0.0013761806, 0.013639193, -0.0482505, -0.035975132, -0.023478793, 0.014100988, 0.035550453, -0.03266507, 0.04251794, 0.0469036, -0.00787049, 0.024230385, -0.0451812, 0.020381013, -0.0076986956, 0.04337073, 0.02387911, 0.02519307, 0.011989881, 0.00088664825, -0.017396925, -0.045428596, 0.010158938, -0.0022564237, 0.017667083, -0.007361971, 0.0053914892, 0.012954763, -0.042894006, -0.029266711, -0.054897156, 0.011664594, -0.00537296, 0.027033161, -0.018939868, 0.07246908, 0.0118228905, 0.024248777, -0.054570496, -0.044184178, 0.01931182, -0.03602775, -0.036557768, 0.03354783, 0.012090989, 0.051429253, 0.028623456, 0.016471846, 0.02803556, -0.010304883, -0.014726686, -0.0020628981, -0.06551795, 0.013203417, 0.015646733, 0.045501795, -0.011288981, -0.0030178006, -0.011642748, -0.062053595, -0.03446033, 0.027536647, 0.018642487, -0.029630886, 0.051825915, 0.013374182, -0.079650104, 0.00028731427, -0.012017789, -0.019678283, 0.018184066, 0.0010234427, -0.020412125, -0.046413153, -0.05564015, 0.025049185, -0.0172392, 0.0029847743, 0.04531193, 0.0023217327, -0.040739153, 0.009230887, 0.06875229, 0.007857222, -0.005212146, 0.016005417, 0.0066246986, 0.053606987, 0.032955132, 0.027035907, 0.041285418, -0.03595912, -0.021169297, -0.015539561, 0.009440196, 0.018785516, 0.010459063, -0.019773902, -0.0017682639, 0.0040535103, -0.003591543, -0.008151999, 0.02266237, -0.053912602, 0.018046813, 0.0070675653, 0.026029391, -0.012693526, -0.0409615, 0.011457686, 0.013525732, 0.01897258, 0.0005375705, 0.03967499, -0.025588127, 0.0012153669, -0.002080741, -0.007277103, -0.06177806, 0.007823824, 0.030558253, 0.011337934, 0.03240681, -0.035570238, -0.027604131, 0.021006882, 0.0049249465, 0.05586227, -0.008281788, 0.04345537, -0.022393128, 0.005999744, 0.022586197, 0.013158811, 0.008413093, -0.029225536, -0.013984153, -0.0738782, -0.01944404, -0.004186645, -0.0079803765, -0.0107724555, 0.009507448, 0.003494666, 0.013099335, -0.048688103, 0.012047985, 0.02437482, -0.051376186, 0.022388896, -0.010348346, 0.00019261037, 0.02511369, 0.009092033, -0.005260871, -0.04567382, 0.0044661816, 0.0055834134, -0.011571719, -0.0124396095, 0.0684723, 0.010610498, 0.0070199845, 0.026756285, -0.05261008, 0.00085668155, 0.010869418, -0.018894345, 0.037554905, 0.003518685, -0.017031148, -0.0017234283, -0.022881288, -0.018361129, -0.008056695, 0.058910176, -0.014708959, -0.023390494, 0.007835719, 0.0142655205, 0.03875792, -0.020077229, 0.030739425, -0.0124056395, -0.031601824, 0.026688201, -0.029747093, -0.005618412, 0.02640272, 0.05461259, 0.0025095392, -0.014125637, 0.0214589, -0.02307367, -0.02512925, -0.030486425, 0.04220912, 0.009405548, 0.037421312, -0.023914795, -0.0070854076, 0.056412417, 0.03204149, 0.034710582, 0.03582461, 0.022625428, 0.024077669, -0.048499838, 0.056917053, 0.06130134, -0.019350108, 0.008331427, 0.02249561, -0.03882586, -0.049938697, 0.039029907, -0.005597138, 0.021950262, -0.004405333, -0.015410545, 0.08363957, 0.01021018, -0.0049529686, -0.054967612, -0.009720647, 1.6470245e-05, -0.026561016, 0.02835673, -0.051916044, 0.022368422, -0.01952639, 0.032365173, 0.03696838, -0.041047513, 0.0045421277, -0.0016666973, -0.054926436, 0.009526206, -0.0013221946, -0.00012947443, 0.052362796, -0.00092736626, -0.037913132, -0.012801041, -0.01952845, 0.011554105, 0.008153572, -0.013060447, 0.014449895, 0.03110772, 0.014789365, -0.0370672, -0.015277296, -0.064870805, 0.007471086, 0.011024542, 0.041287243, -0.027582169, 0.010741345, -0.063754484, -0.034598496, -0.081780255, 0.024325637, -0.006605026, -0.03389119, 0.037325233, 0.03300637, 0.0010980164, 0.047384895, 0.02198915, -0.05648928, -0.020380098, 0.028224625, -0.004517422, 0.01751702, 0.009675011, 0.03818169, -0.049447335, -0.003877828, -0.046612624, 0.0017165656, 0.020480292, 0.008128981, 0.019336069, 0.0643584, -0.023381459, 0.033583287, -0.0037058052, -0.079386584, -0.03079524, 0.030793412, -0.016631344, 0.019310446, 0.020681595, 0.005416023, -0.029460693, -0.041248128, 0.035680957, 0.030678576, 0.018957254, -0.049934123, -0.033494417, -0.052499823, 0.04858242, 0.01042904, -0.023369905, 0.044517014, 0.07063082, -0.031681433, -0.022519859, -0.039086636, 0.0027139303, 0.017178409, -0.034547254, 0.04424457, 0.04278055, 0.011414795, 0.011025915, -0.051455792, -0.025997825, 0.047436137, 0.026851075, -0.015914831, -0.01953737, 0.028263168, 0.004681667, -0.013973859, 0.027829682, 0.025262153, 0.04300793, 0.0056524966, -0.060285673, -0.00904674, -0.005577008, 0.027910432, -0.061490286, 0.028974822, -0.064211994, 0.011658188, 0.017890804, 0.023122394, -0.019616062, 0.0147985155, 0.022356529, -0.01212719, 0.0014223886, -0.014624663, -0.012652809, -0.029207233, 0.016975103, 0.009223566, -0.01996674, -0.04497109, 0.06971534, 0.025888938, -0.01879335, 0.061076242, 0.0011646694, 0.028135752, -0.0026658922, 0.062861435, 0.026743103, 0.0023927607, 0.04622826, 0.011721782, 0.073805, -0.045705844, -0.013659324, 0.031353857, 0.0052489755, 0.02266609, -0.041322015, 0.044713665, 0.024332957, 0.03521979, 0.053250134, 0.024431549, 0.02761534, -0.02474557, 0.025377901, 0.010389064, 0.017786492, 0.041453775, 0.030226558, 0.02938383, -0.0089675905, 0.04432692, 0.035177756, -0.0015410545, 0.014777928, -0.01940012, 0.022628745, -0.024068518, -0.00012678657, -0.005340706, -0.040798627, -0.020825708, -0.0052883215, -0.0072112223, 0.033084147, 0.04619721, -0.0037217033, -0.04227729, 0.032915786, 0.046382956, -0.013957618, -0.017435012, 0.020619834, 0.027913405, -0.0018055221, 0.0035053026, 0.04668308, -0.042838193, 0.037317917, 0.019017644, -0.006485617, 0.0031636595, -0.023823295, -0.041995466, 0.04224572, 0.013100908, 0.026564674, 0.004629054, 0.07508602, 0.041349463, -0.03156431, 0.013851133, -0.006019642, -0.06858942, -0.0047562406, -0.045728724, -0.06184943, 0.024019107, -0.009731627, -0.011315544, 0.024654128, -0.031435978, 0.016220447, 0.013886933, -0.0510358, 0.024465177, -0.016049339, -0.033626292, -0.011624791, -0.05312569, 0.03266553, 0.05184467, -0.040117856, -0.001577026, -0.010766737, -0.036664598, -0.02572881, 0.015887382, -0.029222332, 0.01128006, -0.00014548717, 0.046515632, -0.046696804, -0.007988069, 0.050699987, 0.026799604, -0.023666713, -0.019869521, -0.03296228, 0.00033855505, -0.003991061, 0.04439646, 0.0016067639, 0.017041529, -0.0030982362, 0.0040347525, 0.006566138, 0.05287498, 0.01031838, 0.044949416, 0.008489496, -0.014931193, 0.015396019, -0.04493449, -0.016212897, 0.016873308, 0.03485287, 0.0018402068, 0.052569363, -0.034936134, -0.037517387, 0.009190396, 0.05653412, -0.01789841, 0.01120846, 0.04844997, 0.025828432, -0.049225673, 0.029706832, 0.010284753, -0.04470482, 0.025306052, 0.04982798, 0.0072450778, 0.02155086, -0.011650525, -0.05703829, 0.030421002, -0.031478412, 0.047978286, 0.04201983, -0.0019704818, -0.035132404, -0.008623546, -0.012698559, -0.009608329, -0.014532704, -0.0055127284, 0.030404072, -0.012194844, -0.030251265, 0.039452642, -0.034205955, 0.033246104, 0.01541409, -0.014867599, -0.03523992, -0.032113317, 0.008569331, 0.005686581, 0.002737835, 0.008202297, 0.003639009, -0.005133112, 0.0017225132, -0.038855135, 0.027368745, 0.02538545, 0.003232972, -0.02802641, -0.009259509, -0.009459125, 0.017436499, 0.022291562, 0.00044286659, 0.0045128474, -0.016853178, -0.09386942, -0.051028483, 0.05588949, -0.013041689, -0.021736149, 0.017697908, 0.04022034, -0.028294278, -0.039481007, -0.008643905, 0.03458889, 0.033943344, -0.010891408, 0.029566834, 0.005245773, -0.06486898, -0.066817954, 0.034710128, -0.024368642, -0.05830075, -0.06570896, -0.041507762, 0.018277269, -0.027604131, 0.039257742, -0.030780602, -0.0043298444, -0.0109014725, 0.009922722, -0.018551901, 0.0044179144, 0.00013281636, 0.0388652, 0.02126446, 0.010919372, 0.014677733, 0.031579863, -0.008828967, 0.026310302, 0.0004909048, 0.03973721, 0.009030269, -0.019953243, -0.041488547, -0.03705668, 0.028475223, 0.014597212, -0.05303236, -0.030936612, -0.062402327, 0.0135774305, -0.024930175, 0.03984152, -0.013130903, -0.008231691, 0.0511822, -0.010825069, 0.018394748, 0.0073933103, 0.013993074, -0.016056202, -0.02620599, -0.0045560817, 0.01954469, -0.03559037, -0.013860627, -0.020826627, 0.008256625, 0.02217627, 0.002404084, 0.0034962671, 0.048022658, -0.030852256, 0.03317611, 0.003507819, 0.07946573, 0.014717079, -0.008332114, 0.04123692, -0.011922627, 0.05707489, 6.176342e-05, -0.054310177, 0.06586428, -0.026488729, -0.015374059, -0.002880463, 0.0050982274, 0.019435804, 0.053023208, -0.010941619, 0.0108875185, 0.009398106, 0.012112035, -0.0111137545, -0.0020865742, -0.025082124, 0.007861597, 0.03080851, -0.009969989, 0.0031206538, -0.046414983, 0.046116687, 0.004093771, -0.0051762317, -0.024042899, -0.005700535, -0.034357846, 0.041148163, -0.040154457, 0.050307445, 0.014891846, 0.01705494, -0.019555671, 0.042771395, -0.00050085556, -0.02624442, -0.016964123, 0.065910265, 0.020220887, 0.048718985, -0.0053919465, 0.0068465895, -0.0045590554, -0.03794287, -0.016292732, 0.0015294453, 0.02827575, -0.01732624, -0.004586048, 0.033870142, 0.0028153255, 0.016125057, -0.010061032, 0.0041273977, 0.050333068, -0.034875743, -0.03567821, -0.016851805, 0.021586316, 0.018392917, -0.0082415845, -0.020381013, -0.0007814216, 0.04690726, 0.033498306, 0.016462926, 0.024599226, 0.056662627, 0.048812315, 0.017195392, 0.030832298, 0.022244895, -0.0054059, 0.032450043, -0.006140199, -0.03705279, -0.061382774, -0.017315803, 0.007805981, -0.0032245081, 0.043404587, 0.028656855, 0.0018778654, 0.0456299, -0.041816123, -0.0066173784, -0.00014983349, 0.016370509, 0.016945137, -0.07188713, -0.04951322, 0.016225938, -0.032289002, -0.056289807, -0.052159436, -0.011693817, -0.02161468, -0.0029028808, -0.02904619, -0.017360782, 0.00714008, 0.022017514, -0.0130052315, -0.020351732, -0.034301117, 0.011526998, 0.009030269, 0.0067738458, -0.033365056, 0.0059274584, -0.00069312286, 0.0053721163, -0.07979833, -0.018143805, -0.0098299915, 0.006778764, -0.016549394, -0.003953774, 0.05633739, 0.013758888, 0.020388333, -0.0077702957, -0.025936976, 0.041854553, -0.05145419, 0.024526026, 0.030188128, -0.0024979874, -0.05222349, 0.005428776, -0.002393933, -0.02078545, 0.013173452, -0.013182602, 0.0338157, 0.006093076, -0.0059696063, -0.001492616, -0.00201486, -0.016180757, -0.040374976, 0.0032418934, -0.011931663, -0.07316358, -0.024870986, 0.02655461, -0.03684794, -0.06369501, 0.004946106, 0.010217843, -0.03527372, -0.021968564, 0.05411459, -0.008676474, 0.00298283, 0.0011439958, -0.048168145, -7.400173e-05, -0.022464272, -0.04007668, 0.007692519, -0.041197345, 0.042779636, -0.0072258627, 0.02062578, -0.048107754, -0.021546284, -0.0043993853, -0.010986226, 0.046327136, -0.0044837953, -0.0027249104, 0.0026123638, 0.009642871, 0.018743139, -0.046574194, -0.063727036, -0.05016837, -0.0076124556, 0.005222898, 0.010218185, 0.038040776, 0.022549424, 0.009278238, 0.0145651875, 0.022787498, -0.012507664, -0.00437834, 0.012891398, 0.010678208, 0.01287264, -0.005217408, 0.008539422, 0.01946234, -0.006972861, -0.01758822, -0.0016574899, 0.042822637, 0.028436793, 0.0075840903, 0.051241677, 0.023674719, -0.016871478, -0.032051098, -0.0041951085, 0.007333634, -0.07284606, -0.006104285, 0.061185133, 0.014191861, -0.022368422, 0.033556294, -0.0067308405, 0.03821097, -0.069822855, -0.009052516, -0.073530495, -0.06166826, -0.008835372, 0.01731549, 0.011662535, 0.006806786, 0.021922354, -0.018477786, 0.047924753, 0.016840825, 0.035178613, 0.0023287097, -0.031191828, 0.033363227, -0.038113065, -0.0031416991, 0.03574775, 0.024407988, 0.02152661, 0.01942657, -0.0141278105, 0.015884407, 0.025405353, -0.028080165, 0.034796137, 0.016249727, -0.06763414, 0.0023900156, -0.011207087, 0.0413028, 0.0033471198, -0.025847761, 0.020716138, 0.02769815, -0.01404523, -0.029877024, -0.0077812755, -0.039409637, 0.009414575, 0.024669224, 0.009893128, -0.0046574194, -0.009636123, -0.0041916776, 0.04766489, -0.018928202, -0.070251085, 0.05735854, 0.0051824083, 0.058061276, 0.046506483, -0.034486864, 0.071978636, 0.010023059, -0.03641068, -0.03760523, -0.010670431, -0.017268136, -0.036304083, 0.029032467, -0.0013871606, 0.035637267, 0.050953906, 0.05203225, 0.021898108, -0.07985141, -0.0032286257, -0.033307184, -0.030924715, -0.032726835, -0.030994255, 0.02160347, 0.012613005, 0.040259458, -0.009856527, -0.023609182, 0.08051022, 0.0021558865, -0.005110351, -0.0041166465, -0.00092782377, -0.044916186, 0.020669699, -0.037015963, 0.06960326, 0.022368193, 0.056256868, -0.030216953, 0.0019576717, -0.04045458, 0.013890364, 0.018141747, 0.009217847, -0.01981096, 0.0034679014, -0.025365552, -0.006206309, 0.01829524, 0.052013032, -0.05137984, 0.06542805, 0.020282649, -0.021070935, -0.02227509, 0.04752489, -0.054239266, 0.047517117, 0.008585115, 0.010582132, 0.040507652, -0.048142526, 0.08689701, 0.035941735, 0.025584696, 0.01360122, -0.00035799906, 0.023993487, 0.016705519, -0.029821152, -0.018022107, 0.0012494511, -0.022151563, -0.01568379, 0.015832024, -0.015888296, 0.013636448, -0.0028831651, 0.048455458, -0.020365002, -0.059490524, -0.029257102, 0.06305268, -0.024576807, -0.029369192, -0.026862971, -0.005184467, -0.040375892, -0.006214315, 0.0065313675, -0.03595363, -0.017494602, -0.053425815, 0.012945612, -0.01604202, 0.014627407, -0.0007814216, 0.028517772, 0.02183131, -0.036449566, -0.014859822, -0.008233293, 0.01058156, 0.04125888, 0.03431804, 0.03797787, 0.03312418, 0.015173385, -0.00087269425, 0.017851915, -0.03694768, 0.042376567, 0.043723926, -0.004649642, -0.051439036, 0.014673244, 0.047543, -0.012631076, 0.0028777178, -0.013050839, -0.01612803, 0.051907122, 0.0404953, -0.038615175, 0.022765538, 0.029440334], [-0.019254275, -0.09118062, -0.02161447, -0.05499452, 0.011731379, 0.0012785858, 0.014819329, -0.01608376, 0.034354325, 0.015301747, 0.015135436, 0.018684426, -0.06924415, -0.037418686, -0.044315264, 0.017053315, -0.010238122, -0.03357585, -0.009273285, 0.052284606, -0.02026983, -0.0064754942, -0.025567291, 0.0040577995, -0.026645066, 0.053939156, -0.01359264, 0.012171335, 0.013209301, 0.032342087, -0.0037555508, -0.037759565, 0.004631335, -0.011537938, 0.030884217, 0.016909415, 0.024105294, 0.0019402894, -0.035772093, -0.030074634, -0.05320521, 0.027868215, -0.01457576, 0.013560794, 0.02972712, 0.03702237, 0.009713242, 0.00442681, -0.01081409, -0.030072127, 0.021675803, 0.017789476, -0.020260984, 0.01644174, -0.01642626, 0.03336354, 0.042929344, -0.0050005205, 0.042179175, -0.02174366, 0.017511554, -0.0027678425, -0.06187164, -0.016291354, 0.04770089, 0.05462062, -0.008565581, 0.031124836, 0.002921381, -0.056762602, -0.0189939, 0.008180472, -0.026821109, 0.009283311, 0.022315243, -0.017404808, -0.04087464, 0.00019579819, -0.027817497, -0.03448643, -0.025544586, 0.017464077, 0.0069290153, -0.04095249, -0.064061396, 0.012482871, -0.01537694, -0.0029523063, 0.052212063, 0.00859153, -0.038967967, -0.00042064177, -0.007055812, -0.0064421734, -0.014256408, 0.013208121, 0.015221541, 0.059173517, 0.025045656, 0.033907294, 0.04013155, -0.055385526, -0.025046835, -0.036843084, -0.036347695, 0.009483238, 0.050175644, -0.025628332, -0.017923791, -0.020092316, -0.0033515696, 0.024899395, -0.012593598, -0.05008659, 0.0037596792, -0.018841447, 0.019998396, -0.009171848, -0.040669482, -0.028883772, -0.023761762, -0.0008191677, 0.0154418135, -0.00036623699, -0.0119806975, -0.047024593, -0.0051638824, 0.017114649, -0.042777188, 0.002174532, 0.022818746, -0.0025500944, 0.071940504, -0.013699386, -0.05061442, -0.00950211, -0.03289056, 0.058437504, -0.026987197, 0.06306707, -0.026409166, 0.0127268825, 0.015070563, -0.0002972358, 0.0044939225, -0.033648983, -0.013492677, -0.057464115, 0.0038522703, -0.029081928, -0.009454929, 0.0004765209, 0.009631855, -0.004017991, -0.014967356, -0.039822523, 0.0014210113, 0.01306894, -0.018589033, 0.031794798, -0.024472415, -0.008484195, 0.031105962, 0.022298584, -0.038711425, -0.032817427, 0.017757481, -0.006149361, 0.004633104, 0.06331005, 0.071704604, -0.0071855574, 0.020457925, 0.045655183, -0.062032938, -0.02843261, -0.001883673, -0.026437087, 0.016971119, 0.031855542, -0.02115859, 0.023027519, -0.010477562, -0.005053009, -0.038414188, 0.001960341, -0.018892165, -0.0071949936, -0.03413479, 0.036986988, 0.043563917, -0.013537205, 0.008923632, 0.009566208, -0.017943842, 0.033844776, -0.0348969, 0.019848745, 0.027685393, 0.05094056, -0.0023938098, 0.011770302, 0.022047052, -0.046085708, -0.023910196, -0.07650755, 0.027719598, -0.01208523, 0.07241938, -0.018805178, 0.007159019, 0.04040048, 0.030405335, 0.049866024, 0.035290856, 0.03175941, 0.037128527, -0.03906528, 0.04495986, 0.076290525, -0.048128612, 0.014257883, 0.021344362, -0.058492053, -0.027306769, 0.027343336, -0.019803114, 0.022835258, -0.003439443, 0.016905878, 0.0911759, -0.017595889, -0.032585066, -0.049239706, 0.0012974578, -0.030986832, -0.031192105, 0.03519067, -0.0103282435, 0.038304348, -0.031967003, 0.031686284, 0.007829568, -0.030440426, -0.030788086, 0.017893124, -0.047185007, 0.027697187, -0.013679924, 0.033168923, 0.04392809, -0.037773717, -0.017464962, 0.0312593, -0.01713529, 0.005567274, -0.034666304, 0.027546799, 0.013245866, 0.032697707, 0.008636352, -0.039586622, -0.0015785124, -0.015235694, 0.045678776, 0.024192872, 0.010838492, -0.02764293, 0.016471522, -0.025268583, -0.047878552, -0.05367229, 0.043953154, 0.012384824, -0.011595735, 0.045028865, 0.055564225, -0.0065627783, 0.055502888, 0.048213538, -0.06776504, -0.018353133, 0.047902144, -0.013970083, 0.01674655, 0.0056444486, 0.020411666, -0.086443715, -0.01736382, -0.060450923, -0.039312974, 0.0009223746, 0.0023882072, 0.036177844, 0.031123066, -0.011241882, 0.034318943, 0.006836423, -0.03759797, 0.0058488073, 0.035621118, -5.72061e-05, -0.015004511, -0.0068045766, -0.011102701, -0.011026476, -0.07045904, 0.032480087, 0.027799215, -0.0070062727, -0.034016985, -0.0018797658, -0.05320698, -0.010775387, 0.02541838, -0.0052281655, 0.041002028, 0.08298069, -0.031048167, -0.056158695, -0.029749531, -0.008508964, 0.048142765, -0.047666833, 0.031202683, 0.010510588, 0.027581597, 0.0019084426, -0.05981045, -0.03547132, 0.028843079, 0.0050034695, -0.012226772, -0.003474828, 0.037088424, 0.034229297, -0.012657882, 0.026855018, 0.028442046, 0.038185365, 0.015740523, -0.04833738, -0.0073489193, -0.0050364956, 0.025293352, -0.0687346, 0.0011836354, -0.047140185, 0.0009831192, 0.004401921, 0.04322245, -0.029572602, 0.008845124, 0.039857905, -0.042570774, -0.05045224, -0.0012927399, -0.014724673, -0.025423393, 0.05214837, 0.0047327727, -0.026751224, -0.04187899, 0.043357506, 0.01955623, -0.019133376, 0.0783924, -0.025046835, 0.022647718, -0.01388162, 0.0382868, 0.023380192, -0.019433118, 0.007384305, -0.010741182, 0.027949601, -0.01634679, -0.0060166665, 0.02254805, -0.014180035, 0.00041164798, -0.036180202, 0.036171872, 0.021068359, 0.043349247, 0.025503304, 0.024208205, 0.038520936, -0.028702127, 0.026437474, 0.020824125, -0.0063386713, 0.003956067, 0.04980115, 0.024263127, 0.0017388884, 0.034436893, 0.010779517, 0.042952232, 0.01685044, 0.009331376, 0.03286107, 0.00076594244, -0.04526948, 0.0025155938, -0.044948656, -0.04972802, 0.011125553, -0.010058837, 0.02448067, 0.020042187, -0.017993383, -0.04178758, 0.03126166, 0.015450954, -0.03983417, -0.042735904, 0.029392729, 0.016404586, 0.014348705, 0.019872338, 0.052761715, -0.046428353, 0.022042628, -0.011716045, -0.019376649, -0.035582192, -0.020573555, -0.063658, 0.042802546, 4.128275e-06, 0.023730505, -0.001617694, 0.07161024, 0.053813834, -0.002239884, -0.005191011, -0.014699019, -0.06869214, -0.02558351, -0.015729317, -0.04650089, 0.0012927399, 0.020683838, -0.012745312, -0.00070018496, -0.022260433, 0.030129036, 0.008612761, -0.05074004, -0.00059270236, -0.008124464, -0.02223607, -0.029098444, -0.05152559, 0.022029657, 0.052997615, -0.046767462, -0.034173712, -0.025787566, -0.06081539, 0.0024589775, 0.04243631, -0.03987442, -0.004477409, 0.0034388532, 0.024927706, -0.052252166, -0.00024054575, 0.036288716, 0.005275493, -0.031258117, -0.0016660539, -0.030675739, -0.009290978, -0.0047298237, 0.047929276, 0.036102355, 0.011667685, 0.02854879, 0.015207975, 0.01038497, 0.0010008118, 0.019546794, 0.020065187, 0.0183838, -0.022126375, -0.010442767, -0.006264363, -0.013996032, 0.0142484475, 0.045582056, 0.020764044, 0.06961923, -0.012987258, -0.0035314444, -0.000907041, 0.020889072, -0.03975175, -0.004154667, 0.06460736, 0.0371875, -0.0643256, 0.017204292, 0.0056005954, -0.05009603, 0.021176873, 0.029584398, -0.028179605, 0.0023439755, -0.03925459, -0.050256442, 0.013469972, -0.04119871, 0.029295126, 0.053391572, 0.01129673, -0.046124037, -0.033186615, -0.037740692, -0.00653447, 0.029360441, -0.034196272, 0.026718196, 0.01587189, -0.020205548, 0.032825686, -0.040860564, -0.0026824942, -0.021272412, -0.033725057, -0.06695826, -0.045415744, 0.009256773, 0.0092426175, 0.011645865, 0.04724634, 0.018982546, 0.03452182, 0.009307049, -0.021549154, 0.008126067, -0.012327029, 0.01189415, -0.03743284, 0.0025819412, -0.003737858, 0.017439604, -0.010515306, -0.040732585, 0.0014932561, 0.007841953, -0.07598857, -0.034892183, 0.07527615, 0.013346124, -0.016181659, 0.022583285, 0.027375184, 0.025757154, -0.015997656, 0.0026344294, -0.0052281655, 0.026193315, 0.021077795, 0.024569133, -0.009350543, -0.06767304, -0.05240786, 0.027558004, -0.020509271, -0.03694688, -0.06938097, -0.024136256, 0.0076017026, -0.010910442, -0.015235326, -0.058286525, -0.018499391, -0.012785121, -0.028398404, 0.041061003, -0.039931037, -0.031223325, 0.017919073, 0.021671673, 0.007976491, 0.029454652, 0.030111343, 0.001033838, 0.03953885, -0.036341794, 0.051971443, 0.02917216, -0.02926829, 0.004214379, -0.04663123, 0.011556812, -0.0027458926, -3.656472e-05, -0.041490346, -0.07305307, -0.00044865505, 0.013270046, -0.007893262, 0.006003692, 0.005272987, 0.04197984, 0.031220965, 0.0098630395, -0.009772217, 0.01756522, -0.01306894, -0.025877208, -0.014277935, -0.003908297, -0.043915413, -0.014142881, -0.031688638, 0.012604674, 0.008863407, -0.0075087426, 0.025779309, 0.032016546, -0.008273063, -0.014753276, -0.01989298, 0.07735724, 0.027874114, 0.005347885, 0.05175545, 0.009566982, 0.07317663, -0.030112818, -0.053307824, 0.07577154, 0.019905362, -0.04666429, -0.026222803, 0.017163008, 0.030480161, 0.020848967, 0.04389654, -0.0019158146, 0.03608702, 0.0043046116, 0.0020156302, 0.014733224, -0.034797527, 0.009813168, 0.031485766, 0.022858849, 0.014098023, -0.06311307, 0.019492537, -0.0074426904, 0.00010025811, 0.01313794, -0.003067898, -0.04266513, 0.033264462, -0.034755357, 0.044795323, 0.026580784, 0.014851174, -0.019091504, 0.057022095, 0.015515237, -0.024520773, -0.012960426, 0.052161347, -0.024448823, 0.021573922, -0.032649346, -0.0021727995, 0.007360125, -0.053842146, -0.009916117, 0.016685897, 0.039428566, -0.02881654, -0.022152472, 0.0103955865, 0.013832081, 0.039163176, 0.040225912, -0.0022504996, 0.038756248, -0.055040523, -0.06363677, 0.0048306715, 0.007509775, -0.00038039108, -0.008272474, 0.013116709, -0.028123505, 0.028337661, 0.028713332, 0.05256356, 0.020943329, 0.041153006, 0.032086134, 0.011156221, 0.025040053, -0.0019284942, -0.057592385, 0.00543797, -0.007866428, -0.03304212, -0.090508305, -0.026200984, 0.0076269885, -0.0041108406, 0.0041462625, 0.02707146, -0.0109835705, 0.022026116, -0.018727034, -0.011198241, -0.0014189472, 0.0042108404, -0.012514572, -0.034468148, -0.0053411033, 0.08194272, -0.053809114, -0.03157187, -0.028138619, -0.0009506091, 0.0034338403, -0.037882235, -0.025832385, -0.003114194, 0.032210644, 0.0051944023, -0.010781875, -0.05203278, -0.043822233, 0.023399653, 0.029025313, -0.007270482, -0.033952117, -0.0014154086, 0.013948851, 0.01829622, -0.037140325, -0.02412881, -0.021216976, -0.008629275, -0.014278229, -0.009400672, 0.042628568, 0.03135366, -0.024934782, -0.020735737, -0.04437542, 0.02814068, -0.056023054, -0.008327321, 0.0007572436, -0.001735055, -0.05794919, -0.012936834, 0.011036058, -0.011278632, 0.012238567, -0.04982474, 0.02659656, 0.0011184677, -0.0037212449, 0.0050176233, -0.0026438653, -0.038776297, -0.05563971, 0.01852534, -0.014118701, -0.07863538, -0.040051345, -0.006418288, -0.037710026, -0.0332621, -0.0024486568, 0.037450533, -0.032014184, -0.031633202, 0.0417923, -0.027481338, 0.010124595, 0.016181253, -0.064121544, 0.01651192, -0.0141467145, -0.035222445, 0.018242847, -0.045911137, 0.05837145, 0.024669688, 0.046684895, -0.026343113, -0.021820884, -0.010426401, -0.009778557, -0.022755051, 0.018546497, 0.0011957254, -0.009320466, -0.0061685275, 0.022490844, -0.036744006, -0.070069805, -0.032307588, 0.007699823, -0.014888919, 0.013817042, 0.03473118, 0.014438937, 0.004539923, 0.006593445, 0.028394867, 0.021842113, 0.012825372, 0.032247137, 0.007736387, 0.025259737, -0.006788948, 0.012623676, 0.043905973, -0.0068175513, -0.008922972, -0.005349655, 0.033188973, 0.0066145286, 0.022810489, 0.05479047, 0.026110455, -0.019136325, -0.006633843, -0.0012576495, 0.017815277, -0.044646703, -0.016410483, 0.026970904, 0.0018919295, 0.0017881328, 0.0065427264, -0.009275644, -0.0019037246, -0.058606762, -0.032750934, -0.042199817, -0.034289453, -0.013771926, -0.009588104, 0.010404432, 0.015799498, -0.007216759, -0.0018828621, 0.051795106, 0.016105138, 0.014993895, 0.041886657, -0.028099399, 0.038381163, -0.005498512, -0.009293466, 0.021654572, -0.018175026, -0.0010073729, 0.015274618, -0.042090714, 0.016696513, 0.01043628, -0.019561537, 0.00054965034, 0.03490663, -0.08145205, 0.029853325, -0.012740153, -0.0038448984, 0.024516648, -0.02144978, 0.055389658, 0.026588157, -0.016592128, -0.040218834, -0.017870713, -0.037655767, -0.0057453797, 0.04702363, -0.00615113, -0.029024133, -0.044964425, -0.0064311246, 0.00092609745, -0.054804623, -0.05054306, 0.07574559, -0.023693498, 0.015930424, 0.07328042, -0.021714726, 0.045170404, 0.02108428, -0.021540603, -0.025879567, -0.012169565, -0.022593755, -0.038739733, -0.0051472955, -0.0044361264, 0.06488351, 0.03885238, 0.01292504, 0.0028443814, -0.07799373, 0.004035389, -0.01833426, -0.06242896, -0.05268387, -0.024520773, -0.0058086677, -0.0024356823, 0.015098281, -0.015535879, -0.036891446, 0.047253415, 0.0069142706, -0.0018353132, -0.0054422463, 0.0012880218, -0.014979742, 0.018241078, 0.0202026, 0.06148535, 0.0152777145, 0.022781886, -0.027793318, 0.0060878787, -0.037878692, 0.019725488, 0.009005537, 0.016161608, -0.031842194, 0.032590963, -0.0073610093, 0.038074195, -0.005378465, 0.05239076, -0.030938473, 0.027109792, -0.0015422057, -0.023197664, -0.026383216, 0.019684501, -0.00044673833, 0.023720331, 0.0051134587, -0.00015097692, 0.02820666, -0.017133227, 0.09362928, -0.002134908, -0.004216738, 0.015556521, -0.008461489, 0.0328363, 0.021068359, -0.014116342, -0.013496512, -0.0075500254, -0.020401936, -0.014778045, 0.0033649495, -0.042500593, 0.004872839, 0.022916645, 0.07617021, 0.0009778114, -0.061013546, -0.05725151, 0.047286443, -0.009957399, 0.010353714, 0.00088805833, 0.003920682, -0.008589761, -0.013662232, -0.0020398102, 0.0014348704, 0.0013228173, -0.060685646, -0.008045418, 0.0053195776, 0.03873266, 0.019103298, 0.041925583, -0.0018966475, -0.041216698, -0.012478892, 0.008453233, 0.03745407, 0.042334873, 0.028636223, 0.027404672, 0.0127257025, 0.02501027, -0.0050701112, -0.0019444176, -0.036804162, 0.06029169, 0.042753596, 0.013360573, -0.041346446, 0.024809754, 0.01852121, -0.03924928, 0.006023596, -0.00943016, 6.4283144e-05, 0.04488968, 0.023257522, -0.023574227, 0.008658762, 0.004932699], [-0.014590755, -0.090859056, -0.0329771, -0.05049316, 0.042914838, 0.01825938, -0.00396135, -0.0072639873, 0.031368356, 0.037261754, 0.025164943, -0.0022484388, -0.049591865, -0.034355037, -0.03337259, 0.010363479, 0.016851405, -0.039929885, 0.023744758, 0.054190744, 0.006614352, 0.019238047, -0.029249588, 0.004660475, -0.0238553, 0.033892125, 0.0023648695, 0.024081895, -0.0034439755, 0.016886631, -0.03083672, -0.028150868, 0.013146257, -0.0075132735, 0.019490143, 0.007839712, 0.007107522, 0.012006098, -0.04629657, -0.038697176, -0.05152996, 0.03788373, 0.004671497, 0.017315831, 0.0014743223, 0.036182813, 0.0039492473, 0.022161081, -0.017212205, -0.046358813, 0.028805474, -0.007355133, -0.02890121, 0.034661483, -0.0047646416, 0.032679733, 0.02810246, 0.0050406987, 0.019369768, -0.013058838, -0.013333518, 0.003167783, -0.07311705, -0.00919085, 0.031175584, 0.03896559, -0.041464288, 0.025569398, -0.00081885187, -0.052679684, -0.0111789, 0.030783122, 0.01253228, -0.004777446, 0.025308631, 0.0043895235, -0.07318534, -0.015375569, -0.0050308923, -0.003927636, -0.004231923, 0.01928986, -0.00026581888, -0.029832821, -0.042617466, 0.019668868, -0.0080277305, -0.020748999, 0.044371437, 0.011382667, -0.058744676, -0.010974214, 0.024086216, -0.006025228, -0.009665434, 0.012854395, 0.029150175, 0.0506949, 0.023092961, 0.013595231, 0.052496422, -0.028535549, -0.0069573233, -0.049252994, -0.014196889, 0.024599701, 0.014501177, -0.024894046, -0.019566, 0.013430661, -0.00286771, 0.0037586356, 0.0049159206, -0.064690374, 0.013833388, -0.0043321997, 0.024280718, -0.00054460455, -0.025771033, -0.012403882, -0.0053678127, 0.020757077, 0.009945733, 0.0026370096, -0.01698669, -0.022030981, -0.006528339, 0.0060288073, -0.06409736, -0.009263464, 0.011644163, -0.009496542, 0.045957707, -0.013009566, -0.034800228, 0.016203823, -0.01662427, 0.05354759, -0.0036056277, 0.03509501, -0.010715743, 0.011354573, 0.020230114, -0.004825153, 0.0062980163, -0.03564134, -0.018454313, -0.043161854, -0.009722298, -0.014135946, -0.009984417, -0.0014555204, 0.00067783816, -0.006306607, 0.008794932, -0.035865232, 0.005980277, 0.0037007174, -0.0334197, 0.026941879, 0.0032857805, 0.003680835, 0.018951373, 0.017654262, -0.019916102, -0.064820044, 0.00042012348, -0.0072004497, -0.010342299, 0.014613555, 0.06614265, -0.0010238349, 0.012160458, 0.03132816, -0.07517617, 0.0043231226, -0.00094571005, -0.01612051, 0.02957481, 0.030210424, -0.0056839855, 0.020301647, -0.013870559, -0.016765391, -0.02340114, 0.035956003, -0.020313317, 0.01281809, 0.0153824845, 0.033494044, 0.03414411, -0.013426662, 0.023117166, -0.0104666455, -0.0273063, 0.023346515, -0.037602782, -0.0037720348, 0.011103503, 0.049199402, -0.011320858, 0.0061272336, 0.03606838, -0.019090766, -0.04003794, -0.053672075, 0.044580635, -0.013609926, 0.056202322, -0.019140689, -0.010078858, 0.021344932, 0.036925483, 0.039566815, 0.025374249, 0.032177486, 0.01622792, -0.021633983, 0.044186447, 0.060272377, -0.019353775, 0.0014551288, 0.018347122, -0.03998521, -0.053396314, 0.03229937, -0.007397113, 0.021702059, -0.009316952, -0.013020316, 0.103678875, -0.0057810205, -0.025449457, -0.044811446, -0.021712432, -0.021058692, -0.035082042, 0.033050578, -0.0375038, 0.03777092, -0.018370463, 0.038793564, 0.02024978, -0.0018992003, -0.02236466, 0.0021118554, -0.024152778, 0.023226088, -0.025829816, 0.028216673, 0.0363087, 0.009000886, -0.03963597, 0.025313307, -0.012551189, 0.0035239372, -0.016319118, 0.0002501507, 0.030740278, 0.033315968, 0.024532272, -0.03832287, -0.0028395075, -0.04533406, 0.023620278, 0.022010019, 0.0067409943, -0.01942747, 0.00084845925, -0.053079817, -0.054776844, -0.06054706, 0.056012142, -0.0013274195, -0.033723988, 0.027956475, 0.036516167, 0.0021086135, 0.04994283, 0.041519616, -0.07129997, -0.020869592, 0.026390411, -0.01540669, 0.0077562924, 0.0055783065, 0.03656998, -0.067306206, 0.008792878, -0.043704946, -0.030937726, -0.0014868568, 0.010042767, 0.006094384, 0.046835124, -0.015961235, 0.03380352, 0.007753699, -0.07867547, -0.0019692208, 0.0043136138, -0.0025254954, 0.016868908, 0.014867703, -0.022761876, -0.032261334, -0.048953895, 0.042660687, 0.03993248, -0.010828554, -0.039382093, -0.015209595, -0.062167905, 0.008220935, 0.024949802, -0.00477569, 0.04415792, 0.07537089, -0.034419008, -0.03970599, -0.033129245, 0.004147639, 0.020235084, -0.047684018, 0.04926164, 0.042904466, 0.012785239, 0.0050579067, -0.06133479, -0.009894946, 0.041739184, 0.029170057, -0.020575676, -0.02237201, 0.04313268, 0.021938056, -0.02960747, 0.034312464, 0.010361318, 0.028617239, -0.010041471, -0.066401556, 0.00278267, -0.013480691, 0.045254044, -0.07460909, 0.020648124, -0.05555485, 0.0007677412, 0.0043340498, 0.037569933, -0.01793413, -0.00017807704, 0.037690956, -0.025015503, -0.0120166885, -0.01605935, -0.013763799, -0.023015592, 0.038494896, 0.014628088, -0.026640672, -0.061823852, 0.048517346, 0.016544687, -0.017823156, 0.08372733, -0.0145310005, 0.036688194, -0.007811509, 0.05191378, 0.026310127, -0.006608301, 0.016146228, 0.005045372, 0.07722838, -0.036204156, -0.008907094, 0.023656124, -0.014196025, 0.011963795, -0.052978784, 0.055343058, 0.028132714, 0.04727081, 0.04861676, 0.03819666, 0.030293845, -0.043500938, 0.03032064, 0.001873483, 0.031996813, 0.0017271745, 0.06560496, 0.040968094, 0.001006654, 0.034843884, 0.026772067, 0.04194298, -0.0026711556, 0.0029944603, 0.04666915, -0.013471506, -0.01827051, 0.011191191, -0.044794157, -0.011961309, -0.010077345, -0.0049602236, 0.02481884, 0.046721883, 0.0003129315, -0.02271001, 0.02670637, 0.041403778, -0.04146688, -0.036272336, 0.039610904, 0.04171844, 0.023348838, 0.019335864, 0.06217309, -0.050269593, 0.022835355, 0.0006751367, -0.024919115, 0.0076783835, -0.028379515, -0.059017844, 0.016886199, 0.03076324, 0.03802496, -0.0006963698, 0.080321394, 0.024109555, -0.036841203, 0.0097410735, -0.017807703, -0.07239523, -0.0054192473, -0.029790731, -0.050324053, 0.016211063, 0.009673214, -0.013906217, -0.002819841, -0.021223154, 0.021104723, 0.01107276, -0.066066585, 0.018008688, -0.022568455, -0.013399649, -0.0030709647, -0.054948002, 0.021695899, 0.06559632, -0.05524732, -0.028224345, -0.009075445, -0.0440369, -0.014840257, 0.021208458, -0.03933082, 0.0068182545, -0.0061935796, 0.04145737, -0.04106729, -0.0037443722, 0.042607956, 0.017742438, -0.020555794, -0.021068417, -0.02839097, -0.01704785, -0.017192215, 0.037812844, 0.019371497, 0.012480737, 2.593355e-05, 0.00647269, 0.026005732, 0.012753904, 0.000922586, 0.03249243, 0.019949382, -0.032397054, 0.009705631, -0.038903784, -0.02030813, 0.0037562586, 0.029007971, 0.022565214, 0.06342309, -0.037455823, -0.039042097, 0.0030910494, 0.035954703, -0.028516531, 0.021050045, 0.05233304, 0.033283982, -0.0659957, 0.002290797, 0.005025922, -0.06509667, 0.04466276, 0.028261518, -0.0060031847, 0.013656175, -0.037845477, -0.07156277, 0.011512767, -0.046520468, 0.015144329, 0.039352648, 0.010199017, -0.052115194, -0.02521519, -0.034193385, -0.025684586, 0.014435478, -0.0058830255, 0.03347762, -0.00015084681, -0.006561485, 0.02924267, -0.024523899, 0.002383239, -0.013093903, -0.02451412, -0.037572525, -0.034199435, 0.019386625, -0.009276646, -0.005777779, 0.01926949, 0.011987351, 0.012065584, 0.007620465, -0.028130336, 0.033721883, -0.0011186004, 0.0057426603, -0.052185215, 0.010432203, -0.00923229, 0.038456913, -0.0027727287, -0.012121787, 0.0011281094, -0.028942706, -0.09558761, -0.05088249, 0.061854973, -0.008367081, -0.0363798, 0.0144398, 0.01352694, 0.011251702, -0.03305231, -0.0009578124, -0.0009869876, 0.03097892, 0.0023314261, 0.022818066, 0.0072994297, -0.08699495, -0.052506145, 0.026334006, -0.011156613, -0.05699157, -0.06091272, -0.024763081, 0.018382644, -0.022558164, 0.02561716, -0.033538993, -0.02372617, -0.014384043, -0.018939488, 0.0038649635, -0.027963283, -0.022751503, 0.0051627215, 0.016026935, -0.011990809, 0.008543376, 0.05257422, -0.004564737, 0.045965217, -0.021467792, 0.026131941, 0.043806955, -0.005137004, -0.0035861777, -0.04536707, 0.036119815, 0.018562155, -0.035715684, -0.035488334, -0.06148153, 0.006622564, -0.021932868, 0.01705147, 0.0016874097, -0.02492776, 0.05607741, 0.0028733294, 0.027605722, -0.0077441903, 0.015627962, -0.021516202, -0.012208003, 0.0116523765, 0.023872698, -0.03453657, -0.007969163, -0.041825626, -0.006650659, 0.0277677, -0.005158886, 0.023340195, 0.054592717, -0.001889259, 0.012446657, -0.009540953, 0.068046175, 0.014037398, -0.010146285, 0.06493761, -0.0032002002, 0.055853948, -0.018637577, -0.06864783, 0.07249075, -0.020946095, -0.053972904, -0.009221214, 0.014545696, 0.010723631, 0.043008197, -0.0036181624, -0.0016996741, 0.029208092, 0.007923564, 0.008564339, 0.0015305117, -0.03950047, 0.005183684, 0.025842998, 0.019830251, -0.015738208, -0.06669418, 0.024769349, -0.001544559, 0.013620949, -0.017952284, 0.007612685, -0.0511898, 0.055257477, -0.055437285, 0.0347475, 0.023017673, 0.016698504, -0.03714808, 0.055228084, 0.014394849, -0.018752117, -0.021254381, 0.036848117, 0.0024157101, 0.002760194, -0.023722716, -0.005471979, 0.0018719701, -0.048277892, -0.00801217, 0.015564884, 0.04218524, -0.018296983, -0.01550956, 0.02235245, 0.03550303, 0.030375967, 0.010012943, 0.0020372155, 0.050172772, -0.050988816, -0.049154665, -0.016012238, 0.027783478, 0.020412946, -0.020379016, -7.5207296e-05, -0.009216135, 0.01971771, 0.0380255, 0.02387464, 0.03837128, 0.05110249, 0.032945115, 0.012003776, 0.030082053, 0.02919426, -0.03192204, 0.015493135, 0.0020268944, -0.04950369, -0.04543904, -0.02519185, 0.017153313, -0.0071093044, 0.036893066, 0.038476743, -0.002939568, 0.009830976, -0.034763925, 0.0040340717, 0.0010559277, -0.013687836, 0.002180147, -0.044007506, -0.034228828, 0.062883675, -0.028629342, -0.045006808, -0.04691552, 0.006554272, -0.014839177, -0.036467973, -0.028523445, -0.01798651, 0.03985122, -0.0070694857, -0.020451196, -0.015530738, -0.064775094, 0.02208285, -0.0061280974, 0.0040278044, -0.0309612, -0.00020568547, -0.00133212, 0.00014436342, -0.062377967, -0.013034202, -0.004281629, -0.009628154, -0.017494759, -0.012044189, 0.05369282, 0.018721322, 0.006440813, -0.018310059, -0.015114937, 0.047058802, -0.06548567, 0.0028332402, 0.025270514, -0.023377366, -0.042178866, -0.0030324424, -0.0017578624, -0.016912835, 0.015155566, -0.03558213, 0.04401529, -0.0059327316, 0.016586235, 0.0004030506, 0.010943958, -0.024354197, -0.025854886, 0.024831807, -0.008012494, -0.079301335, -0.03249301, 0.018453449, -0.047728103, -0.05347422, 0.016067185, 0.021941079, -0.035442084, -0.016641343, 0.05945958, -0.02067336, -0.010896062, -0.001597993, -0.053611778, 0.012397966, -0.027954638, -0.03624689, 0.011488562, -0.03019465, 0.07067411, 0.024115393, 0.034168314, -0.04269786, -0.018641036, 0.008433591, -0.013622029, 0.03295484, 0.0058851866, -0.003915534, 0.0052489503, 0.0069242576, 0.011686522, -0.04254831, -0.054171726, -0.025031494, 0.012685828, -0.009578341, 0.03195813, 0.041147035, 0.012340913, -0.0015369949, -0.010985236, 0.041179016, -0.007671144, -0.0038507, 0.014501609, -0.0012595061, 0.03936713, 0.010621086, 0.0050366195, 0.01567683, -0.009419065, -0.013006539, 0.020425048, 0.05116084, 0.0049619526, 0.022904512, 0.053137194, 0.034011852, -0.0020329743, -0.013255313, 0.011357274, -0.011056607, -0.04814909, -0.010331494, 0.04139254, -0.001789847, -0.011431509, 0.028804393, 0.021795636, 0.02459019, -0.071654394, -0.026624678, -0.025605056, -0.053540677, -0.013502735, 0.00016813586, 0.0012128256, 0.008172526, 0.0006725434, -0.008376537, 0.054572836, 0.020957764, 0.023648804, 0.032588962, -0.033500094, 0.027748032, -0.046029456, 0.00064833876, 0.011748978, 0.0071939663, 0.020579245, 0.030371644, -0.04333669, 0.020431748, 0.009362443, -0.046620525, 0.029927317, 0.033556715, -0.06773843, 0.0001680278, 0.0085762255, 0.012597194, 0.015996246, -0.024708621, 0.05509496, 0.040683255, -0.010117542, -0.0645728, -0.014413002, -0.01787081, -0.009581583, 0.054835193, 0.011063577, -0.0077813617, -0.044360198, -0.015117963, 0.046842907, -0.0379638, -0.033774126, 0.062467005, -0.012831975, 0.045918807, 0.046576653, -0.02156461, 0.06966789, 0.008195002, -0.035146013, -0.029133748, -0.020714853, -0.016526911, -0.03125382, 0.014975329, -0.011949207, 0.06823463, 0.02766548, 0.056567986, 0.01302599, -0.09226812, -0.013676706, -0.028164782, -0.039241783, -0.052079756, -0.027826698, -0.0053137843, 0.0036064924, 0.05475099, -0.012996382, -0.01303304, 0.04858891, 0.012430166, -0.016026935, -0.013938418, -0.0046995915, -0.03761748, 0.04001417, 0.0031934734, 0.051664818, 0.02842425, 0.012613646, -0.033080835, 0.0024770861, -0.024653297, 0.028739993, 0.0092237, 0.028548514, -0.03714419, 0.019152358, 0.00218944, 0.017654372, 0.0067053353, 0.045696646, -0.038230374, 0.05007077, -0.0018836401, -0.012470796, -0.022276055, 0.02156807, -0.032265335, 0.03234389, 0.016405564, 0.031158296, 0.027533649, -0.027699409, 0.103423, 0.0031759955, 0.019838301, 0.017330527, 0.0051599117, 0.04764252, 0.017863894, -0.026585348, -0.034587573, 0.003491088, -0.012312168, -0.016316094, 0.0026636997, -0.022276055, 0.0022026228, 0.008539054, 0.051946625, -0.029437171, -0.067071505, -0.049023915, 0.045306772, -0.029363692, -0.021221207, -0.0060036164, -0.0069562425, -0.020076025, -0.0019434764, -0.0025881683, -0.025122693, -0.0037582037, -0.05151808, 0.023495795, -0.008409818, 0.030034507, 0.024061147, 0.042199936, 0.017932184, -0.03211438, -0.0025235505, -0.0043775835, 0.008756896, 0.05845941, 0.025639635, 0.018589169, 0.037493862, 0.010407242, 0.00013399, -0.015175449, -0.015028924, 0.052253075, 0.052116927, 0.021774674, -0.033177655, 0.01387272, 0.034907855, -0.030369915, 0.012095408, -0.016542794, -0.009208787, 0.03290103, 0.036715854, -0.03351306, 0.018510072, 0.012917176], [-0.024671167, -0.0985355, -0.022313068, -0.03875637, 0.03225264, 0.017032515, 0.009991779, 0.010838308, 0.028838968, 0.032114863, 0.012470457, 0.008618604, -0.0633629, -0.038650967, -0.03698365, 0.032942127, 0.023687331, -0.044968393, 0.03943177, 0.049445923, -0.0068045533, 0.010943555, -0.022418313, 0.017500738, -0.0017113937, 0.048739966, 0.017245494, 0.021268891, 0.00095395104, 0.016472306, -0.00921999, -0.04341912, 0.012049989, 0.012397116, 0.020018365, -0.0002508925, 0.011519924, 0.0037834842, -0.033105385, -0.042348836, -0.058208726, 0.023489527, -0.027988087, 0.018437183, -0.0017353228, 0.054290578, 0.015482565, 0.00945063, -0.03404017, -0.048426606, 0.016295997, -0.02326443, -0.04416537, 0.03017454, 0.005787724, 0.046178315, 0.020684028, -0.006559669, 0.016637221, -0.03189391, -0.019005265, -0.0059978026, -0.04576749, 0.00526895, 0.035255063, 0.027195217, -0.014253439, 0.025628746, -0.01798802, -0.051728614, -0.019125013, 0.02297842, 0.01401559, -0.014667371, 0.013809655, 0.010932316, -0.08472087, -0.0023800605, -0.031491052, 0.0071592424, 0.014404257, 0.023272302, 0.0055996063, -0.045880806, -0.05222128, 0.010044817, -0.019759806, -0.010198128, 0.03520534, 0.022899795, -0.053270843, -0.022259202, 0.038708307, -0.008009914, 0.00056986895, -0.0018256523, 0.01316989, 0.06326884, 0.02367713, 0.017041631, 0.035771765, -0.043300197, -0.0006140755, -0.026950954, -0.0029234884, 0.010764968, 0.007077614, -0.017696314, -0.014347489, -0.0031060122, -0.017748524, 0.017529173, 0.023440946, -0.06415887, -0.00696781, -0.022065904, 0.02690869, 0.0076635135, -0.030863717, 0.00895216, 0.009458853, 0.02194367, 0.026129702, 0.023750054, -0.028612936, -0.013918217, 0.013869737, -0.013183977, -0.06652858, -0.014890413, 0.03247432, -0.012021709, 0.038725708, -0.023947703, -0.01959158, 0.008778545, 0.011846851, 0.04216403, -0.019129157, 0.033236112, -0.022448147, 0.0014228983, 0.010054969, -0.0005924254, 0.0053497497, -0.027853006, -0.006634564, -0.031540778, -0.015443875, -0.012424049, -0.0057947678, -0.0012596421, 0.0050609433, -0.007756018, 0.011487604, -0.035996757, 0.0016851856, 0.017015526, -0.021579763, 0.014750295, -0.00995573, -0.012089664, 0.029343031, 0.0056509865, -0.017425325, -0.071116745, 0.009769685, 0.00027513233, -0.010005375, 0.018455414, 0.06543177, 0.005103622, 0.012835089, 0.019422522, -0.06568992, -0.010991103, 0.0007868619, -0.009834324, 0.029302424, 0.04315559, -0.0051162858, 0.0061761825, -0.017711231, -0.0107195955, -0.018212602, 0.04084224, -0.010592595, -0.009821272, -0.0048565627, 0.0055852593, 0.044970468, -0.01722602, 0.025530282, -0.023536246, -0.034761976, 0.0066350815, -0.009455603, -0.004784154, 0.004683258, 0.06345779, 0.005303782, 0.0109353205, 0.032654565, -0.034193482, -0.024776, -0.040231477, 0.045070324, -0.02015096, 0.057227526, -0.017105857, -0.011751134, 0.036379207, 0.032319814, 0.048327163, 0.042781424, 0.029087787, 0.053568352, -0.03739024, 0.045407042, 0.053901076, -0.025906777, 0.0016871538, 0.030495768, -0.031239124, -0.03503421, 0.022106718, -0.01397229, 0.012256105, -0.009548833, -0.0057742572, 0.08174414, -0.0037291779, -0.023895908, -0.053899422, 0.00067332847, -0.015110422, -0.027800385, 0.050570488, -0.043185834, 0.03122338, -0.028845806, 0.019802071, 0.03441102, -0.011604038, -0.009372317, 0.0050700596, -0.039944742, 0.0050700596, -0.019971542, 0.023505585, 0.065658845, -0.024508897, -0.040868755, 0.0061832266, -0.010894661, 0.022434061, 0.016328841, -0.015682131, -0.00023835826, 0.06144816, 0.017083481, -0.03544981, 0.013768116, -0.06529006, 0.023163326, 0.0234483, 0.019353738, -0.037356675, -0.004645552, -0.057287194, -0.027854664, -0.068498425, 0.050075747, 0.0032626388, -0.02768022, 0.02218959, 0.03147945, 0.006035509, 0.05425411, 0.032458987, -0.06929689, -0.014278706, 0.014458952, -0.022149399, 0.024243137, -0.0064987587, 0.020160075, -0.038455546, 0.0031497267, -0.045414243, 0.0050572143, 0.0077459705, 0.011647442, 0.021452038, 0.060413096, -0.029639294, 0.031225244, -0.009139346, -0.04990337, -0.021651134, 0.008403449, -0.018140193, 0.014361577, 0.0040209102, -0.011450209, -0.031665497, -0.051516358, 0.034010336, 0.009243556, 0.0063789063, -0.04471481, -0.025697527, -0.07853537, 0.022053681, 0.01568876, -0.006317271, 0.04208862, 0.08606256, -0.03339129, -0.037197977, -0.027503705, -0.008648852, 0.013101469, -0.04856583, 0.04433272, 0.035348706, 0.021010334, 0.017998794, -0.05933598, -0.020385485, 0.03485894, 0.04494602, -0.0070432224, -0.024155295, 0.02424469, 0.009221699, -0.045545176, 0.028175272, 0.013213242, 0.035013493, 0.0052928277, -0.04631422, -0.010623724, 0.0059120306, 0.035988264, -0.09291684, 0.023842895, -0.056826435, -0.007121536, 0.014810946, 0.048880745, -0.013586887, -0.002749666, 0.020230515, -0.030039977, -0.0020490938, -0.018318262, 0.008766115, -0.003109897, 0.0125676235, 0.008825367, -0.014832285, -0.04288501, 0.054335117, 0.019406775, -0.009010792, 0.08017622, -0.013874502, 0.025381787, -0.031149622, 0.05904738, 0.029361961, -0.008088643, 0.0135502685, 0.008290434, 0.08488662, -0.04823103, -0.01645159, 0.023719393, 0.0017788301, 0.01875458, -0.038206935, 0.05396909, 0.04100135, 0.023711935, 0.04306816, 0.037393138, 0.018138018, -0.0372276, 0.031799957, -0.0010322643, 0.016367268, 0.019495446, 0.028946077, 0.019737845, 0.005457068, 0.03662244, 0.023781545, 0.023272822, 0.023328759, -0.014571241, 0.02947894, -0.0021090717, -0.017901834, 0.0092467675, -0.029742885, -0.021289608, 0.008853906, -0.004605411, 0.02624282, 0.043491628, -0.0018386528, -0.030260623, 0.037838984, 0.04987851, -0.03486681, -0.030555436, 0.051128626, 0.029505044, 0.02023041, 0.009260635, 0.044902097, -0.04088409, 0.025169762, 0.028696015, -0.0070432224, 0.023663867, -0.021625651, -0.0519304, 0.04671366, 0.0069166366, 0.03869463, 0.022645071, 0.08498524, 0.04366649, -0.03705668, 0.008329383, -0.0076365806, -0.06434534, -0.011472687, -0.045771413, -0.047515858, 0.021585966, -0.0057653487, 0.0012927905, 0.004566617, -0.031694762, 0.015625363, 0.021074558, -0.04224939, 0.024829865, -0.01250692, -0.020849561, 0.0015356032, -0.055160724, 0.01805784, 0.066887, -0.06475348, 0.0029224525, -0.022447526, -0.031644363, -0.015738895, 0.012020052, -0.017431954, 0.014001295, -0.0022532677, 0.056097165, -0.05034093, -0.007571002, 0.045700148, 0.027816545, -0.037448246, -0.026653033, -0.018700505, -0.0075138276, 0.0064498647, 0.038332067, 0.012069567, 0.020546097, -0.0005954295, -0.013997774, 0.01647935, 0.021426966, -0.006129153, 0.041268196, 0.0076050893, -0.009036689, 0.022673143, -0.03811412, -0.012685921, 0.02462103, 0.029879207, 0.018120097, 0.03638211, -0.019945437, -0.03483076, 0.0136472285, 0.043480027, -0.02274897, -0.0051236665, 0.06922065, 0.048685167, -0.059072424, 0.020068657, 0.0036526127, -0.066959925, 0.02635169, 0.048688896, -0.008274688, 0.0067111677, -0.019734945, -0.060767785, 0.009729907, -0.037196524, 0.03163442, 0.039082054, -0.0012107999, -0.045381922, -0.01239753, -0.022552358, -0.008180112, -0.00723088, -0.009715819, 0.034456182, 0.015352718, -0.023966763, 0.021618608, -0.047729246, 0.011538363, -0.003133774, -0.027560264, -0.024214962, -0.023165813, 0.0039943913, -0.016335154, 0.0021998156, 0.009994887, 0.006298586, -0.012097537, 0.0117969215, -0.039273072, 0.028612109, 0.023718977, 0.014864916, -0.049147587, 0.0051215948, -0.014110063, 0.022159548, 0.012770554, -0.008991525, -0.002559684, -0.015367219, -0.096249916, -0.04975089, 0.05044846, -0.018550353, -0.025202269, 0.017095912, 0.026871813, -0.023269193, -0.021853754, -0.005169505, 0.013861864, 0.022055313, -6.671131e-05, 0.026213815, -0.0109754605, -0.06352242, -0.05810265, 0.0387688, 0.0028680684, -0.046338253, -0.06623231, -0.05703195, 0.049922228, -0.031303763, 0.025004622, -0.04476909, -0.0235926, -0.010315807, 0.0012915476, -0.019967813, -0.020334933, -0.019693406, 0.012878391, 0.019462299, 0.0077965218, 0.02583675, 0.037284162, -0.010184351, 0.027480917, -0.0076593696, 0.036526307, 0.036297582, -0.027815923, -0.02115287, -0.047360055, 0.018004866, -0.00087926333, -0.039189786, -0.033993762, -0.051683445, 0.008188295, -0.023735553, 0.0075164167, 0.0058188005, -0.019698482, 0.057340235, 0.0073829945, 0.030978909, -0.017950237, 0.009431571, -0.029387834, -0.029429113, -0.008652581, 0.027470142, -0.048913788, -0.029068727, -0.033376373, 0.008844531, 0.028549954, -0.0063614, -0.005551541, 0.048826873, -0.004157648, 0.02041801, 0.0007114751, 0.07645365, 0.01560157, -0.021911142, 0.05421102, -0.015995862, 0.05052325, -0.006336383, -0.060351774, 0.06536216, -0.01949752, -0.020957708, -0.024235679, 0.012433994, 0.0055018184, 0.040240902, 0.012411619, -0.012866582, 0.021198452, -0.015464023, -0.007831534, -0.02336118, -0.027699903, 0.010613727, 0.047757838, 0.0045380266, -0.004836363, -0.05538116, 0.036924087, 0.020327682, 0.013254419, -0.014049153, 0.010077137, -0.04169747, 0.06603839, -0.044718124, 0.059667256, 0.024113858, 0.024849134, -0.026530381, 0.028611278, 0.009701523, -0.037544794, -0.02413582, 0.049237087, 0.00029336402, 0.028693942, -0.021153906, -0.0082589425, -0.017444592, -0.034886286, -0.0067545716, -0.0037151156, 0.029011961, -0.015433931, -0.027955769, 0.03188345, 0.013807376, 0.025268255, 0.0003884587, 0.00048883643, 0.039691985, -0.06553454, -0.037471037, -0.020480786, 0.022544693, 0.02305145, -0.012476672, -0.02297583, -0.015332828, 0.03123203, 0.05169339, 0.035286553, 0.033719253, 0.035990957, 0.056700468, 0.028845944, 0.02747843, 0.015333656, -0.020460896, 0.016371204, 0.0084241675, -0.05701538, -0.048340347, -0.008802992, 0.003950884, 0.00500542, 0.039790187, 0.028826743, -0.008746225, 0.040328436, -0.028676437, -0.0059845434, 0.011054189, 0.0025441456, 0.026898745, -0.06382407, -0.023300065, 0.025199471, -0.029581701, -0.054315437, -0.053657025, -0.012486617, -0.01670186, -0.028624538, -0.030601017, -0.020630782, 0.010374645, -0.0027011863, -0.00080467924, -0.018578893, -0.054585595, 0.031806376, 0.01071711, -0.00012347808, -0.025086768, 0.0119110765, 0.0069980575, -0.0039724307, -0.07402966, -0.01568894, -0.005235802, 0.00022043736, -0.0104382485, -0.0013633864, 0.06187163, 0.014059926, 0.017391762, -0.0037863846, -0.03453408, 0.043018438, -0.05053278, -0.0010912063, 0.0312673, -0.011178495, -0.055853523, 0.011392529, 0.008434009, -0.027958255, 0.01565934, -0.03235457, 0.026505109, -0.008210878, 0.0051471293, 0.03197875, 0.005104762, -0.024190929, -0.023229625, 0.017496593, -0.006470997, -0.07147143, -0.039379563, -0.0024554734, -0.0496415, -0.05504636, 0.00899168, 0.0005767835, -0.022833914, -0.020267187, 0.066369876, 0.005890484, -0.0075218035, 0.020762548, -0.05289997, 0.003502551, -0.048766382, -0.03917487, 0.014689747, -0.027074018, 0.04047263, 0.018222442, 0.019761257, -0.04841335, -0.030497426, -0.0021292716, -0.03258516, 0.06424009, -0.007116978, 0.0069127004, -0.015133937, 0.0066044196, 0.013348891, -0.031920325, -0.077676825, -0.041188642, 0.0006633839, -0.009576594, 0.024698334, 0.00959379, 0.01868103, 0.01386435, -0.015616247, 0.03743126, -0.009701316, -0.0145802535, 0.011974059, 0.0012135968, 0.01699253, 0.0012650287, 0.008004632, 0.00041891387, -0.011279598, -0.025198644, 0.012245048, 0.03950967, 0.02754307, 0.013989486, 0.05693085, 0.031828236, -0.006238129, -0.014127466, -0.0014660432, 0.0115335975, -0.07559841, -0.0068733366, 0.052205533, 0.015062667, -0.019116726, 0.0137359, -0.004173393, 0.026869327, -0.0655478, -0.012901076, -0.0395395, -0.050634295, 0.0026203871, 0.023351574, 0.018628925, -0.0035906015, -0.00036546195, 0.0067496644, 0.046383835, 0.011446169, 0.050836504, 0.021633731, -0.015541042, 0.039557733, -0.027167663, -0.016104255, 0.025702914, 0.00059346133, 0.013041543, 0.014815711, -0.03308332, 0.027748588, 0.007818068, -0.02909877, 0.043560416, 0.024834009, -0.06774223, 0.0057603763, -0.01860624, 0.01478422, 0.010716074, -0.028489457, 0.04403775, 0.039652415, -0.0020846247, -0.061583236, 0.0007746385, -0.02969192, 0.011893259, 0.043217327, 0.00020552054, -0.00401428, -0.022824384, -0.0044286367, 0.038006384, -0.025356099, -0.059486598, 0.057883456, 0.011434256, 0.04914096, 0.05374777, -0.030748941, 0.07294488, 0.022528535, -0.038153898, -0.026980372, 0.003550409, -0.01071856, -0.03731524, 0.016773233, -0.016535496, 0.043543633, 0.05567784, 0.059140198, 0.018047532, -0.083786085, -0.01123091, -0.023336528, -0.030204374, -0.045114662, -0.031023262, 0.010939826, 0.009006234, 0.026576905, 0.0015821146, -0.013501374, 0.06636822, -0.002083796, 0.004841335, 0.00031449617, 0.0064227246, -0.06137109, 0.018522022, -0.010027414, 0.09148151, 0.024936873, 0.048620347, -0.015385037, 0.011561722, -0.043086387, 0.009640147, 0.022768859, 0.03039964, -0.02922204, 0.0060430705, -0.006130811, 0.017122017, 0.019348249, 0.04069804, -0.045855116, 0.050534025, -0.013213604, -0.023902537, -0.020122783, 0.035968997, -0.05598446, 0.037480984, 0.0261326, 0.0064643673, 0.03735419, -0.0533129, 0.10522652, 0.010329065, 0.021693606, 0.016370634, -0.02654126, 0.030028997, 0.013848605, -0.03290691, -0.03510755, 0.015678193, -0.025782056, -0.005522122, 0.01558227, -0.012098987, 0.031792704, 0.012753358, 0.032954555, -0.025682198, -0.07040571, -0.017951142, 0.068786405, -0.019518651, -0.02368873, -0.02987838, -0.0062704487, -0.03859643, 0.0060620275, 0.026217416, -0.013007462, -0.009893162, -0.056579478, 0.0018047274, -0.023782374, 0.029377008, 0.023765283, 0.031713564, 0.024895541, -0.025232827, -0.006546047, -0.007695833, 0.00844302, 0.03344267, 0.024935942, 0.04074538, 0.020503988, 0.015336764, 0.0028308798, -0.0013109704, -0.02439505, 0.029831348, 0.06520771, 0.00042947996, -0.027781738, 0.016285846, 0.032128952, -0.008478551, 0.00095509045, -0.031641, -0.013140781, 0.041238412, 0.03355237, -0.03289002, 0.033170644, 0.019860908], [-0.03287013, -0.069989346, -0.025643088, -0.0507179, 0.0017616474, 0.049573377, 0.019837601, -0.02782147, 0.02057748, 0.0320566, 0.043909583, 0.006108627, -0.038683467, -0.022822656, -0.03685876, 0.015212778, 0.020663219, -0.03572346, 0.028164426, 0.03582191, -0.01185498, 0.0129177505, -0.053808514, 0.0023613255, -0.024573337, 0.033890277, 0.03355947, 0.03537851, 0.0007154512, -0.008713525, -0.00033348677, -0.06280169, 0.012968846, -0.043811135, 0.02013582, -0.014966028, 0.0030327854, 0.006847071, -0.060910933, -0.032892063, -0.060041573, 0.056608006, 0.0034495192, 0.045633353, -0.0077930717, 0.048011128, 0.025020478, 0.012603457, -0.027334947, -0.03874129, 0.051940184, -0.026520422, -0.029494384, 0.059395034, -0.0113005405, 0.033760425, 0.03499966, 0.0021484722, 0.009465366, 0.0018508763, 0.0057292175, -0.008294299, -0.07085272, 0.019223591, 0.042247638, 0.028422393, -0.014950574, 0.021546533, -0.022135744, -0.044831783, -0.016418116, 0.027248709, 0.004922793, 0.011460179, 0.012816683, 0.003908624, -0.0735919, -0.036389437, -0.046271414, -0.0068626488, -0.013042372, 0.03646047, -0.014738718, -0.03654593, -0.06152706, 0.016562678, 0.005637372, -0.013988, 0.03659257, 0.018955408, -0.052280903, -0.030677792, 0.028942063, -0.0011107501, 0.0053112376, 0.001926397, 0.031956904, 0.048165657, 0.001660455, 0.0074676853, 0.022674607, -0.025088772, 0.0029243648, -0.015885733, -0.015015378, 0.008190116, 0.015143987, 0.0024844513, 0.0036120252, 0.024115726, -0.018665537, 0.004465931, 0.0092915185, -0.035991147, -0.00847176, -0.0021449204, 0.014340927, -0.014483867, -0.020295335, 0.007888033, 0.0062534995, 0.019149816, 0.0035338877, 0.009866523, -0.024536451, -0.004472271, -0.017432658, -0.0058582006, -0.05913134, 0.0036085362, 0.015608575, -0.010800186, 0.044835776, 0.0018204688, -0.03850949, 0.016598567, -0.0073182643, 0.06169056, -0.019396191, 0.04124917, -0.033534985, 0.0007238008, 0.027796546, 0.0014888513, 0.004415584, -0.017554663, 0.001580448, -0.028104857, -0.0036056074, -0.022632236, -0.005342767, -0.02713954, -0.014011429, -0.024276864, -0.0074365297, -0.057334796, 0.02054657, 0.008222003, -0.042510837, 0.02421343, -0.0250798, 0.014785327, 0.023594186, 0.018614443, -0.014849409, -0.05626505, 0.0023857513, -0.008188869, -0.028721731, 0.019784886, 0.07527927, -0.008011097, 0.013029077, 0.0127044, -0.07143795, 0.008920895, 0.019001268, -0.007860617, 0.038654555, 0.015833331, -0.014717782, 0.0052091726, -0.02830151, -0.012130144, -0.010205928, 0.026347695, -0.018122936, 0.00052378356, 0.0061007137, 0.036162127, 0.044485837, 0.00391984, 0.020991096, -0.002041921, -0.015979324, 0.022711243, -0.027642637, 0.0059838193, 0.01468538, 0.031538673, 0.0054449565, -0.016986141, 0.029073663, -0.004003835, -0.042064197, -0.04004807, 0.04174317, -0.015784042, 0.04768312, -0.016619753, -0.015612563, 0.024398867, 0.029164137, 0.052695893, 0.029181337, 0.02722528, 0.01847387, -0.023893405, 0.05168446, 0.026604166, -0.016306954, -0.0098909475, 0.032585993, -0.049080875, -0.028877508, 0.03142103, -0.015474981, 0.029066686, 0.004573666, -0.008714773, 0.09348396, 0.002776813, -0.0010652633, -0.03879313, -0.011530218, -0.010355038, -0.02575615, 0.036893655, -0.044761002, 0.037988577, -0.032505237, 0.029989881, 0.033323504, -0.0128618125, -0.022362055, -0.0011664559, -0.023135707, 0.04185882, -0.025965108, 0.015313721, 0.057318844, 0.0065095965, -0.03397278, 0.0267906, -0.0010732391, 0.015183866, 0.017034244, 0.0029366398, 0.011117222, 0.057503033, 0.03559186, -0.039877836, 0.002445071, -0.0433603, 0.045441683, 0.009888455, 0.01357357, -0.029590094, 0.0015871775, -0.04205871, -0.04269129, -0.04240516, 0.040932134, -0.017762031, -0.027883282, 0.015123051, 0.029926946, -0.01667035, 0.061959743, 0.028966146, -0.03115434, 0.018041184, 0.04340911, -0.021462789, 0.017484376, 0.013165, 0.03668454, -0.050215427, -0.011445599, -0.04505511, -0.00203731, -0.0035928336, 0.0029106564, 0.025123665, 0.06328771, -0.021513633, 0.03919491, 0.004171575, -0.05254435, -0.011484107, 0.039356917, 0.0040397258, 0.0041294536, 0.020071516, -0.002767591, -0.010049964, -0.053972013, 0.030036738, 0.04352974, 0.011976611, -0.044004112, -0.04406462, -0.056562144, 0.020994836, 0.0034794284, -0.019765943, 0.042902395, 0.0662208, -0.021765368, -0.02322593, -0.05509261, -0.023344072, 0.009402432, -0.03190045, 0.04086783, 0.01857905, 0.00381952, 0.013034397, -0.06677611, -0.015480464, 0.044153843, 0.033668704, -0.0032341734, -0.020022914, 0.036258336, 0.011729362, -0.03420507, 0.020118872, 0.016693154, 0.02933487, -0.0020358143, -0.059240006, 0.0037795166, -0.020730639, 0.0432805, -0.06914242, 0.020341197, -0.06267705, -0.0065072286, -0.010846046, 0.05184647, -0.031726602, -0.023089845, 0.03285916, -0.003730665, -0.0016483199, 0.0020398025, -0.032368153, -0.020088464, 0.009249896, -0.0016948504, -0.0051208003, -0.05032061, 0.041826915, 0.01657788, 0.002291039, 0.06578213, -0.010401397, 0.035811193, -0.018494587, 0.038999505, 0.016442541, -0.008292804, 0.00464389, -0.0046204617, 0.052791603, -0.0328462, 0.00396595, 0.041741174, -0.0029266078, 0.010194276, -0.020386558, 0.072383575, 0.021157715, 0.010538232, 0.05575659, 0.027863842, 0.0055830367, -0.034622803, 0.022872504, 0.011656085, 0.03459788, 0.015883738, 0.040445115, 0.024246331, -0.0018424022, 0.03204613, 0.023537483, 0.026993608, -0.00038582773, 0.017102038, 0.02588834, -0.016965827, -0.003326892, -0.008721501, -0.0451401, -0.015644966, 0.012401321, -0.00046083028, 0.030750567, 0.033380207, -0.011152241, -0.034527592, 0.037841026, 0.021695083, -0.023599299, -0.012474925, 0.03560183, 0.022974195, 0.0056353775, 0.011077842, 0.054235213, -0.049261328, 0.028315965, 0.033181306, -0.027843403, 0.015805228, -0.027970018, -0.02982837, 0.032963347, 0.007614863, 0.029894918, 0.039819017, 0.106301025, 0.027532348, -0.031372678, 0.0039828983, 0.005225124, -0.081295, 0.0078120297, -0.032772426, -0.058873124, 0.0055232183, 0.01908302, -0.01572871, 0.008915163, -0.03155313, 0.018910544, 0.01038694, -0.06736133, -0.0013656009, -0.010869973, -0.016781513, 0.0002386499, -0.036761306, 0.030090574, 0.06489084, -0.04065747, -0.04118885, -0.020861614, -0.046387058, -0.019841714, 0.0027765639, -0.030209215, 0.014299304, -0.010502091, 0.041251164, -0.04877381, 0.0029573895, 0.061285794, 0.034511145, -0.029363783, -0.04436919, -0.032117166, -0.0054953033, 0.012899806, 0.04318678, 0.01232256, 0.021322215, 0.008366579, 0.0158309, -0.002428621, 0.018783677, -0.007144293, 0.029626982, 0.03989105, -0.008548527, 0.0050288457, -0.039386332, -0.022141477, 0.0021988193, 0.02327092, 0.022935314, 0.07992117, -0.014302543, -0.03054111, 0.008129301, 0.059155267, -0.038723238, 0.015435601, 0.07380375, 0.028660918, -0.048133753, 0.021805746, -0.006491277, -0.058243036, 0.033328734, 0.011707429, 0.0014117107, 0.026460106, -0.04632126, -0.063897856, 0.0056558154, -0.0076677026, 0.0099841645, 0.037211437, 0.016655395, -0.03691484, 0.0021733965, -0.018358719, -0.009275817, -0.007038801, -0.0083630895, 0.02685341, 0.00027317, -0.015718741, 0.059639294, -0.0729663, 0.000582231, -0.015243684, -0.029391699, -0.030024774, -0.021165691, -0.0024979105, 0.029451517, -0.010702981, 0.025048956, 0.03767154, -0.0024443234, 0.014866829, -0.0136485305, 0.032321297, 0.009842096, -0.00529566, -0.026770536, -0.01742705, -0.0243631, 0.04391258, 0.013519128, -0.010743607, -0.031651832, -0.021145752, -0.07742874, -0.06454788, 0.037716903, 0.0049978145, -0.007854137, 0.015919631, 0.058873124, -0.016662374, -0.032920476, -0.028250663, 0.042043258, 0.021970745, 0.032321297, 0.014766385, -0.011394878, -0.06482305, -0.06487489, 0.057016514, -0.019850686, -0.03937935, -0.053399753, -0.04784463, 0.04039078, -0.006343227, 0.027552536, -0.046789836, -0.0339648, -0.011350513, -0.0032321797, -0.016282527, -0.019057097, -0.009245908, 0.018426014, 0.0124003235, 0.002731077, -0.0054995404, 0.046732012, -0.007825629, 0.04594191, -0.019712606, 0.048053995, 0.010364508, -0.019545862, -0.03102972, -0.04661038, 0.02536543, -0.0015141807, -0.013032403, -0.0413055, -0.044834778, 0.01677743, 0.01061023, 0.026544785, -0.008926877, -0.022025079, 0.03769148, 0.0017023277, 0.033916947, 0.0060715526, 0.034375556, -0.03488937, -0.01904339, -0.010822118, 0.015994651, -0.031572074, -0.013591953, -0.015855825, 0.0012103226, 0.027717782, 0.0019538137, 0.008145252, 0.039421227, 0.011450475, 0.003618381, 0.014728251, 0.044957403, 0.035501134, -0.008201456, 0.05075778, -0.0024170312, 0.04518372, -0.018995535, -0.071702145, 0.09913479, -0.011796159, -0.06113868, -0.04082197, 0.0044464897, 0.024402855, 0.025255265, 0.0070146867, -0.001292635, 0.036838073, 0.004909583, -0.0006722076, 0.014102153, -0.02160336, 0.0038709885, 0.04595637, 0.0040833433, -0.007575857, -0.063154116, 0.046434917, -0.004233138, 0.00046010205, -0.005417041, -0.000107049746, -0.051009517, 0.04656452, -0.05401987, 0.046115883, 0.036971666, 0.0049322015, -0.03067941, 0.038837, -0.0012202923, -0.021590402, -0.016473947, 0.043209713, 0.024170063, 0.019034697, -0.015376282, 0.0027638525, 0.0017746082, -0.061956257, 0.005011274, 0.038924236, 0.0270867, -0.03271161, -0.022706011, 0.02970973, 0.030764528, 0.017797923, 0.022911262, 0.009345106, 0.042182833, -0.07440992, -0.031396855, -0.004987845, 0.026060818, 0.007097685, -0.026280152, -0.00924192, -0.0007213084, 0.038351476, 0.038097247, 0.0434126, 0.019558575, 0.046452794, 0.031141631, 0.03132682, 0.030433534, 0.024808621, -0.03055317, 0.00059145293, -0.0044564595, -0.058093492, -0.0538125, -0.020845912, 0.017919553, -0.0012262742, 0.054990917, 0.029501365, 0.0073050545, 0.032845765, -0.012636106, 0.012274456, 0.011076008, -0.0064753257, 0.0006879099, -0.07226842, -0.049966183, 0.034674644, -0.029809676, -0.037093297, -0.037874922, -0.007448868, -0.028950786, -0.02346271, -0.0045601446, -0.036183063, 0.028675126, 0.005872968, 0.007441391, -0.042893674, -0.045990266, 0.024583308, 0.01801626, 0.0028187013, -0.04613738, 0.03206358, 0.01574865, 0.0073008174, -0.027916182, -0.013838828, 0.0008135282, 0.012274456, -0.0076417816, -0.021986198, 0.06765444, 0.021472758, 0.039560802, -0.010660984, -0.032435447, 0.043982368, -0.047920898, -0.0025549869, 0.044423025, 0.018421529, -0.051732816, -0.009378007, -0.018539669, -0.011919908, 0.02346371, -0.016178843, 0.034198094, 0.020690635, 0.0022855557, 0.0017775991, 0.011041452, 0.014656593, -0.03344538, 0.025668884, 0.021860579, -0.07411083, -0.04152184, 0.016492391, -0.054337587, -0.047507156, 0.02510597, 0.021183638, -0.023626216, -0.0356776, 0.038480584, -0.019514708, -0.0139446305, 0.011619196, -0.06396565, 0.005319089, -0.016916253, -0.050192498, 0.003409142, -0.036652636, 0.07664263, 0.021881517, 0.037490092, -0.051174514, -0.004664328, 0.020185668, -0.02577668, 0.038730323, 0.008037579, -0.014756665, 0.00039455123, 0.01584411, -0.008954792, -0.052009974, -0.06821175, -0.023127232, 0.0015010643, -0.011033725, 0.01686314, 0.032643817, 0.01549598, 0.010545148, -0.031893097, 0.037709422, -0.008068983, -0.0088640675, 0.029268073, 0.002018866, 0.015553244, -0.022908272, 0.004355267, 0.005765233, 0.002554613, -0.0026123128, 0.02303202, 0.047566477, 0.012242553, 0.00366393, 0.031545155, 0.035597842, -0.011544175, -0.053405732, -9.9401106e-05, 0.0059663723, -0.049725417, -0.015873272, 0.03793474, -0.016560683, -0.019751986, 0.025634238, -0.0019301357, 0.046414476, -0.06137552, -0.037404787, -0.04352575, -0.041141, -0.015205052, 0.013253419, -0.009012616, 0.0015782049, 0.0062829102, 0.004483378, 0.061227966, 0.018589519, 0.013048355, 0.037040457, -0.023619236, 0.023333104, -0.05484726, -0.0063677775, 0.028846353, 0.011511524, 0.011162085, 0.007930155, -0.056675795, 0.025865909, 0.030510299, -0.028547013, 0.038318574, 0.039404273, -0.048171636, 0.012884852, -0.023361923, 0.042541277, 0.01391871, -0.014358373, 0.033540092, 0.044045173, -0.007825225, -0.051189963, -0.023143992, -0.007360075, -0.01551486, 0.014700273, -0.00069887657, 0.0048652175, -0.049256343, -0.010333466, 0.048266347, -0.005296906, -0.07389747, 0.059758928, -0.012683962, 0.048105713, 0.055133484, -0.02121554, 0.07541087, 0.0092140045, -0.060999908, -0.015640479, -0.023554435, -0.015941314, -0.015483954, -0.008377234, 0.005651205, 0.030856248, 0.017151825, 0.04559098, -0.022728195, -0.08337069, -0.0019904522, -0.040109135, -0.04323663, -0.05007922, -0.03982886, 0.004511542, -0.0031813341, 0.028202811, 9.7703145e-05, 0.0068332385, 0.05488923, 0.002337772, -0.017652366, 0.010259827, 0.003691783, -0.042695276, 0.029145943, 0.0022785768, 0.065976545, 0.0324853, 0.011153112, -0.028620789, 0.009237807, -0.052815527, 0.025205417, 0.03481771, 0.024174549, -0.013805305, 0.01959646, -0.024425786, 0.02877744, -0.00154032, 0.022376012, -0.030016424, 0.062159136, 0.003844818, 0.022102844, -0.014288586, 0.037673533, -0.025861423, 0.060331196, 0.009970207, 0.008952659, 0.03286913, -0.04646183, 0.09436927, -0.0063377437, 0.020043103, 0.024052545, -0.030704709, 0.03198781, -0.021511639, 0.0023330052, -0.0050835544, -0.012311935, -0.04930619, 0.0021786306, 0.026825245, -0.023096822, 0.009695541, 0.008977722, 0.060099397, -0.02760413, -0.05493509, -0.050666057, 0.037226394, -0.0058756475, -0.01654872, -0.0005219142, -0.016740138, -0.019022204, -0.0023099815, 0.013068045, -0.04079505, 0.0039858273, -0.050069872, 0.024208445, 0.0072679175, 0.03917896, -0.016889185, 0.02708449, 0.0043318383, -0.054580167, 0.0011245832, 0.0050643627, -0.0063993065, 0.032329272, 0.027264908, 0.04018989, 0.041960508, 0.022343364, -0.0329773, -0.000804057, -0.042094104, 0.023676064, 0.06008843, 0.015867788, -0.038251776, -0.008962425, 0.056311406, -0.019807069, 0.019898042, -0.016667359, -0.028365316, 0.0120773055, 0.019261478, -0.0134611, 0.019084016, 0.0045858165], [-0.036568932, -0.07866247, -0.020268744, -0.06995241, -0.0056002103, 0.02504579, 0.01321742, -0.01955052, 0.012743426, 0.021005584, 0.01804299, 0.010041843, -0.08044308, -0.050396178, -0.0429277, 0.04818855, -0.0071099983, -0.046629675, 0.010796455, 0.06401594, -0.013028415, -0.007964191, -0.020811642, 0.006012919, 0.0032057618, 0.05736294, 0.013056449, -0.0025253415, -0.0052684625, 0.028122915, -0.011250069, -0.0633028, 0.029782217, 0.015832469, -0.005263949, 0.025753038, 0.016736876, 0.014855282, -0.042414002, -0.033652317, -0.051404465, 0.019708214, -0.032637615, 0.010170621, 0.015477026, 0.027976789, 0.008640098, 0.03052357, -0.046370145, -0.023201998, -0.0070174704, -0.018724538, -0.006915351, 0.02659338, -0.039053652, 0.054578066, 0.071837954, -0.0033911, 0.03582645, -0.0010685873, 0.0045005917, 0.0075376593, -0.05822729, -0.0042613726, 0.03761213, 0.036676127, 0.00456491, 0.00074699556, 0.022604514, -0.02658393, -0.029408718, 0.016054763, -0.010068748, -0.014765856, 0.052786183, -0.017254807, -0.054593865, 0.020190319, -0.0038783099, -0.045024116, 0.0048024366, 0.017422374, 0.003804374, -0.027226973, -0.06482612, 0.012988921, -0.0035056323, -0.008977488, 0.06295074, -0.00023583394, -0.023118496, 0.017135762, 0.0020627007, 0.004637691, -0.007632162, 0.0070118285, 0.026973084, 0.035020214, 0.028733375, 0.03673932, 0.03805446, -0.05829612, -0.01611908, -0.017324204, -0.0013651076, 0.009792751, 0.024108097, -0.036167223, -0.010227745, -0.030367287, -0.02123521, -0.012013708, 0.004158689, -0.064580135, -0.0021879522, 0.0058715884, 0.050993167, -0.020447874, -0.051102057, -0.016781447, -0.02859797, 0.012539822, 0.011121996, -0.009419817, -0.015710885, -0.026490698, -0.009669191, 0.0010223232, -0.07265942, 0.010952174, 0.0066451007, 0.003853741, 0.046144467, -0.039287228, -0.033644985, -0.010596166, -0.03303819, 0.05745321, -0.018364582, 0.010556672, -0.036794048, 0.007282642, 0.016989494, 0.025585162, 0.02054012, -0.034614556, 0.0073926607, -0.060945585, 0.0044627907, -0.01230568, -0.016590467, 0.002736351, 0.043014307, 0.011839513, -0.00962321, -0.039990216, 0.016780883, -0.0065683704, -0.021006146, 0.029879821, -0.01529874, 0.00012299474, 0.013524908, 0.026580403, -0.032050848, -0.03397927, 0.0011709889, -0.019162355, 0.007090816, 0.023331482, 0.05365053, 0.002486976, 0.035383273, 0.042698354, -0.06396855, -0.027926575, -0.0065895272, -0.042328242, 0.03156113, 0.03806969, -0.022685757, 0.024728712, -0.010660114, -0.008532901, -0.013795721, 0.021846237, -0.013519265, -0.00016925881, -0.017297262, 0.041087013, 0.038005374, -0.018194193, 0.027742648, 0.019437682, -0.041195337, 0.053473372, -0.033483345, 0.019313559, 0.023124984, 0.04879837, 0.02558742, 0.004647847, 0.026997907, -0.030709332, -0.01466007, -0.05687463, 0.048894357, -0.031479884, 0.07478983, -0.011061627, 0.02551097, 0.051048458, 0.0154258115, 0.048371915, 0.040676277, 0.026416752, 0.017474279, -0.046352655, 0.053539947, 0.07346284, -0.042761546, -0.015513699, 0.016165346, -0.040812038, -0.022937955, 0.035399918, -0.030782536, 0.026490131, -0.014803375, -0.01670246, 0.09956931, -0.0008146991, -0.016964247, -0.049766604, 0.0030417924, -0.01622515, -0.022335391, 0.015091998, -0.009986835, 0.03973294, -0.03878622, 0.021827053, 0.031562395, 0.0007777443, 0.00044162443, 0.0040599545, -0.04032422, 0.029372046, -0.02185921, 0.009782454, 0.009690631, -0.034881987, -0.04750474, 0.021870496, -0.03717262, 0.006270193, -0.019781841, -0.00020988092, 0.021829875, 0.028493593, 0.011253454, -0.062079616, 0.017102193, -0.04234399, 0.032369055, 0.009911514, 0.0099981185, 0.0030601993, 0.028503124, -0.010254545, -0.029836943, -0.050648727, 0.031087201, 0.030304909, -0.011263997, 0.03698418, 0.02382487, 0.010074285, 0.030172922, 0.03238203, -0.050944645, -0.0095304, 0.028275814, 0.0032576679, 0.003991484, -0.0038695384, 0.020103434, -0.09601263, -0.007635477, -0.034810614, -0.0037417484, 0.015808208, -0.0047647767, 0.03692099, 0.024115572, -0.028573146, 0.02949504, 0.008822897, -0.027493272, -0.017338874, 0.0427119, -0.018709023, -0.021851877, -0.014458652, -0.019780995, -0.034930505, -0.05272186, 0.052743305, 0.034826692, -0.012296089, -0.022362474, 0.00870216, -0.04226731, 0.031023446, 0.030157689, -0.011314811, 0.04216801, 0.10080604, -0.031184807, -0.039719403, -0.028291047, -0.026268968, 0.04653489, -0.025187967, 0.02612143, 0.020028958, 0.04263968, 0.012123445, -0.043386675, -0.0064501716, 0.029627062, 0.014342851, -0.023554197, 0.0063347933, 0.049427524, 0.031925596, -0.017356927, 0.014321412, 0.047983743, 0.03293325, 0.010719725, -0.051104877, -0.023827126, -0.008419497, 0.04944163, -0.06864235, 0.012756472, -0.08355067, 0.026891347, 0.015393665, 0.015622024, -0.020819962, 0.009218963, 0.043082293, -0.024925051, -0.016489193, 0.013280751, -0.016733773, -0.019964077, 0.020007519, 0.016920239, -0.03195268, -0.056234833, 0.05481503, 0.0075150914, -0.0105616795, 0.054292586, -0.014091924, 0.029665144, -0.015675623, 0.040112082, 0.021983897, -0.035115562, 0.039395835, -0.011768283, 0.022794649, -0.011708196, -0.004444172, 0.044476703, -0.022493368, 0.013766947, -0.036436908, 0.024123894, 0.0050129523, 0.037154566, 0.022019442, 0.0257894, 0.04746412, -0.0005345758, 0.037647672, 0.026158385, -0.01439377, 0.02958644, -0.0008372669, 0.032981772, -0.012255467, 0.05696236, 0.03257555, 0.039714888, -0.0021665127, 0.017184284, 0.037588995, -0.027756188, -0.029165974, 0.014851897, -0.02733417, -0.04782633, -0.008367027, 0.005865382, 0.035496958, 0.027440239, -0.013265377, -0.023912886, 0.028781896, 0.019301146, -0.06258401, -0.040072024, 0.036895882, 0.019710753, -0.017622665, 0.01829857, 0.04941737, -0.03617625, 0.03441596, 0.003996765, -0.016268592, -0.008661538, -0.015743326, -0.07280555, 0.035211474, 0.025723955, 0.032165382, -0.0042213146, 0.070515476, 0.031177474, 0.00627386, -0.0016971017, -0.011283357, -0.0466724, -0.02713106, -0.017879372, -0.048019852, 0.018634267, 0.017490076, -0.023134295, -0.0074674166, -0.0108461045, 0.032741565, 0.035385247, -0.044005036, 0.00071878574, 0.0030723296, -0.03540443, -0.040335502, -0.03700562, 0.03077238, 0.042023577, -0.024459025, -0.008130346, -0.006422244, -0.03736727, 0.014976019, 0.061241224, -0.024336597, 0.026733864, 0.031624317, 0.047031384, -0.04543358, -0.011905101, 0.04336524, 0.0057288464, -0.011870685, -0.001234461, -0.036789533, -0.0049276883, -0.0135689145, 0.044467673, 0.03445884, -0.004751377, 0.04295013, 0.03399902, 0.016337708, -0.010189945, 0.039307468, 0.028031515, 0.012104791, -0.041714966, -0.006224211, -0.006920429, -0.012962968, 0.050378192, 0.048538916, 0.0043437453, 0.05738325, -0.029581927, -0.014709155, -0.008222734, 0.0500085, -0.021044511, -0.0009809958, 0.048441872, 0.024854353, -0.046573255, 0.034321174, -0.011099993, -0.05267278, 0.030203108, 0.03251236, -0.004889323, -0.014977325, -0.023558006, -0.033549353, -0.007542173, -0.032951307, 0.0455656, 0.04451507, -0.0133804735, -0.04347469, -0.021979949, -0.04440082, -0.014952324, 0.0074726357, -0.025245799, 0.018687584, 0.009401763, -0.029728055, 0.041860525, -0.039787106, -0.032320537, -0.007165854, -0.008945751, -0.076076195, -0.03180486, -0.012830947, 0.0211235, 0.012777347, 0.040073715, 0.026152743, 0.012419083, -0.011501136, -0.031634472, 0.02424012, -0.010514075, 0.025955275, -0.01478645, 0.012803161, 0.0021021944, 0.006860342, 0.021238595, -0.041226935, -0.008005941, -0.027738133, -0.024303308, -0.04536136, 0.07493765, 0.008784603, -0.014208713, 0.028034903, 0.0155864805, 0.012070974, -0.03864517, 0.005885552, 0.012862119, 0.038045995, 0.028577657, 0.046585668, -0.016521635, -0.08153423, -0.0636684, 0.055755544, -0.009017546, -0.034338098, -0.06099636, -0.0042489604, 0.0002000075, -0.023344176, -0.01147067, -0.06140258, -0.012082257, 0.00412653, -0.03476802, 0.022757975, -0.012546028, -0.030930497, 0.025014196, 0.018010266, 0.024565095, 0.0152423205, 0.031942524, -0.027383817, 0.038090006, -0.024149848, 0.054596122, 0.009162543, -0.033769388, 0.006335357, -0.054235037, 0.017868653, 0.008338817, -0.014422863, -0.02014067, -0.063715786, 0.010607732, -0.014768395, 0.0041874633, 0.011078554, -0.015910327, 0.04376356, 0.019682543, 0.038627118, -0.004488744, 0.005989787, -0.01599383, -0.025580084, -0.027733056, 0.008984258, -0.03312903, 0.006054388, -0.037163593, 0.021227311, 0.0007278129, -0.0180633, 0.017886002, 0.029282622, -0.0145156365, 0.015311945, -0.01282333, 0.0791285, 0.01206036, 0.019500872, 0.0657153, -0.012136985, 0.07428882, -0.043050416, -0.041486464, 0.08931449, 0.010447782, -0.03213435, -0.013206137, 0.016884131, 0.01880127, 0.0257894, 0.02421868, 0.004515825, 0.023829384, -0.0017749607, 0.008058412, 0.014178881, -0.036535643, -0.017531829, 0.03261956, 0.01327102, 0.017490076, -0.036003537, 0.012409209, -0.011994808, 0.0002572734, 0.00818592, -0.004938126, -0.04240836, 0.026274608, -0.049221028, 0.03677881, 0.014607036, 0.014349762, -0.01995096, 0.035715867, 0.017875986, -0.02582551, -0.009487521, 0.048626363, -0.021239724, 0.022387298, 0.0053779166, 0.007600849, -0.025063844, -0.04510691, -0.026411425, 0.004460534, 0.024167053, -0.043269888, 0.007042859, 0.00894702, -0.006392341, 0.029647373, 0.01755891, 0.010202921, 0.039922513, -0.031571284, -0.06335696, -0.007511001, 0.03707558, -0.0041773077, 0.019302275, -0.025738623, -0.02721456, 0.022819191, 0.027468732, 0.036866967, 0.0021168636, 0.028009795, 0.039161976, -0.0069982875, 0.036195997, 0.010161171, -0.0500657, 0.038244028, -0.004103962, -0.0074248197, -0.08057622, -0.008704981, 0.0104656955, -0.002492618, 0.018417615, 0.01962725, 0.0036990808, 0.01775412, -0.023128089, 0.028126301, 0.009617286, -0.0024108097, -0.0009084967, -0.05520997, -0.021829875, 0.06096025, -0.03248105, -0.038523305, -0.026508186, -0.008853364, -0.020387506, -0.019267436, -0.028895864, -0.0030207057, 0.03232843, 0.014328287, -0.016205968, -0.03889906, -0.03585889, 0.022353446, 0.009113459, 0.019040488, -0.032256216, 0.0005709664, -0.0016801758, 0.0060459245, -0.06520865, -0.055937782, -0.017783178, 0.0025456527, -0.0067252168, 0.010620426, 0.04309555, 0.023985103, -0.002083012, -0.037458103, -0.04852763, 0.01665958, -0.050375935, 0.026399862, -0.0036164967, -0.022066835, -0.056415092, -0.014689973, -0.009704172, -0.01325903, 0.0048518036, -0.052251328, 0.0389449, 0.0027273234, -0.00023696234, 0.006179075, -0.019640792, -0.07051773, -0.029567257, 0.016125288, -0.010503073, -0.07271358, -0.041921776, -0.013590354, -0.045248523, -0.034994826, -0.029048197, 0.0155515, -0.02320764, -0.040349044, 0.042775087, -0.028744658, -0.015862372, 0.021624506, -0.043294426, 0.013858347, -0.0140386075, -0.035801623, 0.014502377, -0.032417577, 0.0689944, 0.0154578425, 0.05304797, -0.023856465, -0.0015188158, -0.0013224756, 0.006143813, 0.019075468, 0.027286213, 0.014673611, -0.002134918, 0.03226073, 0.039130382, -0.051775143, -0.07218663, -0.032338027, 0.012991178, -0.009590204, 0.0041172206, 0.05224004, 0.03051285, -0.00068831915, 0.021537904, 0.009252815, 0.020217402, 0.024298513, 0.048257943, -0.0026895227, 0.027679458, -0.004637691, 0.003404782, 0.032172713, -0.027417388, -0.005341244, -0.015972955, 0.0375732, 0.013138433, 0.045478713, 0.068539664, 0.008056438, -0.004967182, -0.026459243, -0.0049457424, 0.011113534, -0.03973193, -0.0059931725, 0.028409334, -0.003103078, -0.0015797489, 0.0226079, 0.009640207, 0.009239838, -0.062265802, -0.0009331802, -0.04217704, -0.029500684, -0.04216801, -0.021700108, 0.013888249, -0.012893149, 0.0024164517, -0.0067929206, 0.06851371, -0.009990783, 0.015839804, 0.0423147, -0.023767322, 0.04518195, 0.0012564646, 0.015820904, -0.0014657812, -0.0044447365, 0.0014657812, 0.0178427, -0.023895958, 0.0065751406, -0.007173612, -0.019045003, 0.010853439, 0.030761097, -0.076432765, 0.010222668, -0.010304477, 0.013463975, 0.018280515, -0.015840933, 0.015259246, 0.040553283, -0.003738927, -0.03771425, -0.019842776, -0.04226618, 0.005685968, 0.029528327, 0.0073083136, -0.032104447, -0.019228436, -0.000987343, 0.02612679, -0.03580501, -0.039843522, 0.07694731, -0.015445431, 0.01735312, 0.06004541, -0.034760118, 0.05167133, 0.01718541, -0.032816056, -0.01400786, -0.020531658, -0.046068866, -0.046625163, 0.004883963, 0.003853741, 0.06478833, 0.06334568, 0.020680042, 0.0073678363, -0.08440598, -0.0019584657, -0.009934364, -0.06916592, -0.04600511, -0.02348466, -0.0010181622, 0.023028227, 0.039064936, -0.011151899, 0.0009980628, 0.030572655, 0.024987113, -0.009566508, -0.015689164, 0.002898275, 0.0052784774, 0.0073108524, -0.03481315, 0.036485992, 0.039701346, 0.02424689, -0.0385549, 0.00064600445, -0.02989562, -0.005165497, -0.010090585, 0.018576577, 6.657513e-05, 0.04462565, -0.016944138, 0.03268726, 0.009700081, 0.07047035, -0.035948314, 0.012949145, 0.0043686405, -0.01824215, 0.021335637, 0.020697955, -0.02599082, 0.0465473, 0.010289384, -0.0108777, 0.039870605, -0.017954975, 0.08147894, 0.00793316, 0.0011475747, 0.013396182, 0.020201603, 0.017128991, 0.04428036, -0.011554736, -0.0069559733, -0.021304043, -0.011471516, -0.014681792, -0.014421979, -0.031504706, 0.008091699, 0.018499987, 0.08711526, -0.0016677636, -0.057473525, -0.05841009, 0.05638801, -0.025857104, -0.0066733104, 0.015448463, -0.012520639, -0.0252489, -0.023478454, 0.012188891, -0.028500222, -0.020044193, -0.066399105, 0.009978935, -0.00013032928, 0.03805615, 0.019500097, 0.052373827, 0.015297471, -0.046835043, -0.0011983524, 0.009091138, 0.002717168, 0.065270714, 0.03790946, 0.021580499, -0.009569893, 0.022304926, -0.010235645, -0.014978894, 0.001364226, 0.041924845, 0.035730533, 0.014766702, -0.060216505, 0.016237563, 0.01207718, -0.04002181, -0.00031989915, 0.018594773, 0.019262498, 0.051691923, -0.0020803672, -0.047113616, 0.01624546, -0.00044289388], [-0.017892582, -0.08244514, -0.024228537, -0.05213775, 0.024038848, 0.012451726, 0.0034223266, -0.027996868, 0.026752407, 0.038499486, 0.022289641, 0.0086093815, -0.048219394, -0.028230123, -0.042076174, 0.015454892, 0.010604747, -0.04783392, 0.025779199, 0.06110613, 0.008037074, 0.015528692, -0.034058146, 0.009632299, -0.0070924317, 0.045118835, 0.0053280843, 0.011189054, 0.006360264, 0.0026848014, -0.016955748, -0.026803829, 0.01105907, -0.00452449, 0.015570068, 0.013177324, 0.00032567285, 0.014467494, -0.059076678, -0.039071985, -0.06371, 0.013937275, -0.002279329, 0.013278716, 0.01691442, 0.046236407, 0.0016325542, 0.027572207, -0.025247836, -0.03828675, 0.024323381, -0.006744666, -0.03456246, 0.033475935, -0.0010299643, 0.041134577, 0.031516302, -0.00025444382, 0.030388515, -0.012421337, -0.02046654, 0.009745808, -0.08472485, 0.0085103465, 0.045515735, 0.032992374, -0.030612487, 0.019670261, -0.0045198062, -0.059192475, -0.021703716, 0.026372645, 0.016165944, -0.008984, 0.021485267, 0.0012259423, -0.08840323, 0.0034163273, -0.018981967, -0.011550436, 0.013168992, 0.024473839, -0.007179278, -0.02881005, -0.06111223, 0.016493522, -0.009389663, -0.0218237, 0.03684465, 0.01586998, -0.059417587, -0.00813349, 0.038023356, 0.013262313, -0.009499744, 0.015618585, 0.009507363, 0.049715582, 0.0206728, 0.006526027, 0.051880643, -0.03560328, -0.0029984757, -0.038039353, -0.033865407, 0.018432133, -0.0009877791, -0.025138421, -0.00820848, 0.0014771455, -0.0067131226, -0.0017117823, 0.016109189, -0.063850164, 0.012086844, 0.0089836195, 0.024789229, 0.008258736, -0.040117566, -0.0058325916, -0.0013994412, 0.016222699, 0.0018525262, 0.0057760277, -0.020783072, -0.011101826, -0.007915946, -0.01695289, -0.07270085, -0.0005341225, 0.017132297, -0.0053907433, 0.019483808, -0.01479369, -0.032989327, 0.031049766, 0.0018713811, 0.053052302, -0.010568038, 0.047855247, -0.014283898, 0.014280469, 0.00875222, 0.000662392, 0.012733238, -0.016489523, -0.015748093, -0.053539474, 0.00237446, -0.009715716, -0.011329607, -0.0044314363, 0.007513711, -0.0064334674, 0.005147536, -0.028214697, 0.01171013, -0.00636281, -0.022819573, 0.024748472, -0.004613318, 0.017763836, 0.018236157, 0.02368518, -0.01758786, -0.057803124, 0.015382043, -0.012702384, -0.00658621, -0.001030726, 0.054244146, 0.007113857, 0.014165056, 0.047109436, -0.061076425, 0.0025128233, -0.0031526466, -0.022794815, 0.03794946, 0.043524656, -0.007363635, 0.0025623408, -0.007329734, -0.020739838, -0.009942021, 0.04262201, -0.03180662, 0.01364855, 0.024188925, 0.046762813, 0.021201877, -0.016875805, 0.04790705, -0.007891948, -0.023034023, 0.024142835, -0.027326811, -0.027567543, 0.013430673, 0.048586585, -0.007727398, -0.0022221936, 0.023413785, -0.019778246, -0.0458136, -0.053507864, 0.043901082, -0.008088733, 0.047977902, -0.017198386, 0.017590161, 0.028176773, 0.029526532, 0.048722185, 0.02564931, 0.022264598, 0.0114893, -0.02350101, 0.057973962, 0.058317155, -0.02153288, -0.006919501, 0.024873028, -0.03405329, -0.044636417, 0.033757232, -0.0061156033, 0.01948295, -0.0016005583, -0.012969779, 0.10981003, 0.009900694, -0.025160227, -0.04171736, -0.030876072, -0.020495394, -0.016292024, 0.02594489, -0.051204156, 0.033248343, -0.029168101, 0.03246406, 0.018179784, 0.0070017762, -0.021401754, -0.0223423, -0.034037575, 0.008289232, -0.015691338, 0.022744916, 0.03945479, 0.003594019, -0.050535098, 0.02966937, -0.0027901214, 0.004952227, -0.0046017007, 0.0036287766, 0.005677373, 0.03944315, 0.048878353, -0.05255713, -0.0041720406, -0.06240578, 0.028817844, 0.019840524, 0.02859065, -0.016542658, 0.0054915873, -0.06051726, -0.0627364, -0.06694616, 0.040615786, -0.014544913, -0.027482983, 0.037957698, 0.040694255, -0.008447306, 0.04983138, 0.038616803, -0.0606879, -0.011555864, 0.023153247, -0.015271201, 0.01050914, 0.01112011, 0.031776533, -0.06503097, -0.0013339256, -0.040867947, -0.021640297, -0.01383605, -0.0061268397, 0.0111728655, 0.05558303, -0.012018758, 0.01767699, 0.011134084, -0.071689166, -0.00900895, 0.013685117, -0.004873285, 0.03810182, 0.004929278, -0.021089127, -0.02578034, -0.063543394, 0.05702665, 0.04018727, -0.008302183, -0.045336712, -0.018316433, -0.0675754, 0.013937275, 0.013642563, -0.012255644, 0.054296333, 0.073229544, -0.028083287, -0.046507798, -0.022425512, 0.009397996, 0.021351952, -0.030804845, 0.041829348, 0.04566581, 0.021560686, 0.01898768, -0.053046968, -0.0138270045, 0.040599026, 0.033147976, -0.015571544, -0.020085447, 0.03898171, 0.004467051, -0.037741486, 0.028539801, 0.020027928, 0.02563674, 0.012369474, -0.06766035, 0.0056015737, -0.002731081, 0.054667335, -0.06602741, 0.011873347, -0.057297286, -0.0068192757, 0.014468635, 0.039699335, -0.011515488, -0.0070082517, 0.030591158, -0.02394324, 0.008718891, -0.0073529696, -0.024873028, -0.03456513, 0.019947749, 0.007948704, -0.039395943, -0.048106264, 0.0585815, 0.029304465, -0.011613475, 0.06637023, -0.023303604, 0.03423488, -0.02179304, 0.033401467, 0.0049593695, -0.008446925, 0.02085906, 0.012021709, 0.06336947, -0.032368075, -0.0060327565, 0.027681813, -0.019661881, 0.0035321224, -0.05911858, 0.05147174, 0.020414928, 0.047900576, 0.06027424, 0.031800833, 0.027734758, -0.040448952, 0.012999681, 0.011729174, 0.034737866, 0.027405277, 0.053064488, 0.04455738, 0.002147346, 0.027143216, 0.03183843, 0.01660984, -0.00011589003, 0.010280597, 0.036291387, -0.009246823, -0.023286944, 0.010506854, -0.035675462, -0.011797738, -0.0155561175, -0.0020516438, 0.018504206, 0.04216169, -0.00018588112, -0.030674193, 0.042769417, 0.04489029, -0.026593952, -0.035474345, 0.024571827, 0.024082271, 0.015664484, 0.028909085, 0.05029608, -0.033958822, 0.026545959, -0.020906674, -0.017759265, -0.0066850544, -0.028288212, -0.07017774, 0.02420416, 0.027888453, 0.0420826, 0.017700417, 0.06621025, 0.035962664, -0.027521832, 0.017914293, -0.008565387, -0.0638814, -0.012408041, -0.035414927, -0.050373785, 0.008309253, 0.013929658, -0.0154056605, 0.02084192, -0.032976285, 0.010046722, 0.0074674315, -0.06679989, 0.027929211, -0.018209636, -0.009160739, -0.008139441, -0.06145085, 0.018536786, 0.064348385, -0.035933334, -0.015480698, -0.015673054, -0.041299127, -0.024724286, 0.017181814, -0.035507105, -0.0041670892, -0.010115951, 0.047006592, -0.03905465, -0.011022693, 0.04220111, 0.016270693, -0.020988569, -0.01408659, -0.023914672, 0.0030761804, -0.009918739, 0.037850425, 0.023745552, 0.014583764, 0.0012661248, 0.007438673, 0.020820972, 0.009668865, 0.017385218, 0.02636579, 0.008103475, -0.023097824, 0.0068056104, -0.043061953, -0.02651396, 0.008223049, 0.038170382, 0.021735903, 0.06261147, -0.041615564, -0.034578457, -0.002085449, 0.045210347, -0.024988059, 0.033932734, 0.052001007, 0.021441845, -0.05621228, 0.00782729, 0.0069095977, -0.063284904, 0.024410324, 0.022898423, -0.0030777992, 0.019850714, -0.032772977, -0.054285284, 0.0072314613, -0.04121609, 0.019596847, 0.056040112, 0.00058183074, -0.035190955, -0.008922294, -0.042820457, -0.009885029, 0.008608811, 0.0019368965, 0.02782808, 0.0046901656, -0.021551918, 0.026455302, -0.03965362, 0.01481145, -0.0021025897, -0.0065554525, -0.03378218, -0.01758405, 0.017888106, 0.016371489, 0.004305595, 0.021914164, 0.008187911, -0.0053869933, 0.011400456, -0.01977615, 0.0400231, -0.002281805, 0.016713303, -0.03085398, -0.008610619, 0.0029777167, 0.032113075, 0.02413674, -0.012114269, 0.015141693, -0.026373409, -0.10753071, -0.05030713, 0.062368926, -0.0056150956, -0.02092391, 0.021288436, 0.042525638, 0.016948702, -0.040896893, -0.010213368, 5.294565e-05, 0.028055862, 0.0077053057, 0.026373789, 0.004658836, -0.074719645, -0.043593697, 0.02765515, -0.02810476, -0.05974859, -0.053238943, -0.02531164, 0.014462351, -0.02173895, 0.041140676, -0.050910097, 2.2854238e-06, -0.01890874, -0.00897981, -0.024976633, -0.019020056, -0.017821543, 0.0083425585, 0.009255966, -0.0006159217, -0.0064333784, 0.024234252, -0.00285697, 0.025177943, -0.020031346, 0.036867693, 0.016622648, -0.008641949, -0.008569863, -0.042970534, 0.03357287, 0.009131791, -0.03604113, -0.049511418, -0.069303945, 0.017126203, -0.021105887, 0.019882234, -0.0010794817, -0.018074654, 0.061363623, 0.0060285493, 0.03817724, -0.012365474, 0.028705303, -0.022457048, -0.009880839, -0.015223397, 0.023792213, -0.03938947, -0.0028525896, -0.03671152, 0.00845702, 0.035216857, -0.0007404773, 0.009204925, 0.052331246, 0.0069048363, 0.012619966, 0.005729652, 0.056834295, 0.030268876, -0.0110484995, 0.06745352, -0.017844588, 0.06406957, -0.021148358, -0.07007299, 0.07456651, -0.020649564, -0.04491086, -0.004755181, 0.018148763, 0.01109059, 0.04573552, -0.008916961, -0.0010373918, 0.03743867, 0.014182387, 0.012018282, 0.006753427, -0.04204875, 0.0011889084, 0.01202666, 0.015202638, -0.00935481, -0.055089377, 0.021652102, 0.0033946158, 0.0044982852, -0.009029709, -0.00289068, -0.054213293, 0.06214943, -0.061480943, 0.041344836, 0.0074680024, 0.027406992, -0.05635623, 0.04673082, 0.0005321228, -0.026533388, -0.021664675, 0.05999009, 0.008701655, 0.0046828333, -0.020322558, 0.0022679972, 0.0042089885, -0.04275266, -0.014683847, 0.017235141, 0.030079221, -0.041963045, -0.023773357, 0.041448444, 0.029708602, 0.04079748, 0.013069624, 0.019436385, 0.04109687, -0.04538623, -0.052220978, -0.04096724, 0.013520566, 0.012012186, -0.010807721, -0.01134132, 0.010258695, 0.030881787, 0.051679526, 0.016367061, 0.029276278, 0.042620864, 0.053231325, -0.0037275262, 0.038236186, 0.028699588, -0.019339256, 0.010481714, 0.009329194, -0.04900101, -0.049732912, -0.021728285, 0.020168483, 0.0021079225, 0.037509136, 0.032035165, 0.00465198, 0.0142789455, -0.02018029, -0.0008212289, 0.0028617312, -0.0075289477, -0.0041107154, -0.055292018, -0.043328587, 0.031796336, -0.030093316, -0.05386439, -0.033033896, -0.0016415055, -0.018733237, -0.03773787, -0.026803829, -0.02502158, 0.033170637, 0.0111342035, -0.022282882, -0.01932897, -0.0600716, 0.010414485, 0.0083876, 0.0028710633, -0.032753646, 0.00090892013, -0.002577577, 0.010731969, -0.06107566, -0.029006181, 0.0025116806, 0.0136196725, -0.019122211, -0.013391822, 0.055232976, 0.023097252, 0.018454414, -0.013025487, -0.022016248, 0.03255548, -0.04754205, 0.01895835, 0.017608047, -0.013453621, -0.039300144, -0.010389155, -0.007962987, -0.02664661, 0.0034822237, -0.020761454, 0.056302078, 0.0038132293, 0.014117824, -0.017735269, 0.009920119, -0.03290553, -0.035647087, 0.013044816, 0.0038353219, -0.0879492, -0.045118265, 0.019839382, -0.047015354, -0.054106645, 0.009768282, 0.008357795, -0.04418638, -0.007578465, 0.05428795, -0.013860714, -0.0097060865, 0.0031571223, -0.05020009, -0.002928199, -0.013596057, -0.03481919, 0.012591542, -0.023607474, 0.054551538, 0.006261299, 0.04132884, -0.027113123, 0.00022549514, 0.017996473, -0.017577194, 0.040021576, 0.027799893, -0.0065169334, -0.00820848, 0.0123087205, 0.0038471296, -0.04092089, -0.05265159, -0.02914639, 0.007189181, -0.009693244, 0.023673918, 0.04686947, 0.004349161, -0.0022701875, -0.0016376965, 0.031426385, -0.017557766, -0.033535544, 0.018057894, 0.0057790745, 0.042405274, 0.025800243, 0.0011024312, 0.009958591, 0.011043453, -0.024988823, 0.0098223705, 0.03256881, 0.020035548, 0.016095096, 0.049575407, 0.030745042, 0.0009845891, -0.02022219, 0.0047910097, -0.002902488, -0.05029951, -0.0077988654, 0.044945903, -0.00070419617, -0.024466222, 0.017300086, 0.03735087, 0.04315032, -0.072131015, -0.022074906, -0.043045763, -0.04157338, -0.011431261, 0.018980063, 0.0027030848, 0.01731056, 0.005411121, 0.00546121, 0.04322955, 0.008733461, 0.024822367, 0.02457554, -0.040374294, 0.039194632, -0.05152735, -0.0040192986, 0.013435053, 0.003057516, 0.027860457, 0.018221684, -0.030652914, 0.017434735, -0.00398197, -0.040720917, 0.044463675, 0.02499206, -0.06909179, 0.0024669005, -0.00077323505, 0.025230696, 0.014224476, -0.016194893, 0.038715076, 0.04040172, -0.0026354743, -0.058924317, -0.027172163, -0.036431175, -0.009437466, 0.03622092, -0.0011813259, 0.0011625189, -0.040467996, 0.0070796716, 0.04575004, -0.020804591, -0.05265159, 0.05799529, -0.0016610269, 0.036783133, 0.050844107, -0.020224525, 0.04993003, -0.008016123, -0.045444507, -0.0371747, -0.019394105, -0.012027804, -0.032750692, 0.019221935, 0.0048329094, 0.05818536, 0.032890294, 0.039022274, 0.0028850615, -0.09076941, -0.007812721, -0.015257488, -0.035209425, -0.052317157, -0.030240724, 0.0033896642, 0.00045013326, 0.04158976, -0.023574907, -0.02197454, 0.05687353, 0.0148767745, -0.009068561, -0.0072585056, -0.002533392, -0.045152355, 0.034662258, -0.021348143, 0.052892704, 0.0308197, 0.008644996, -0.029992377, 0.0014430546, -0.02343702, 0.027412895, 0.019336209, 0.042174827, -0.03355459, 0.010192989, -0.015871363, 0.00055202504, 0.0076005575, 0.03469692, -0.040276784, 0.05221241, -0.0016245553, -0.010303452, -0.02755802, 0.026319701, -0.043286685, 0.058829088, 0.018986098, 0.02287328, 0.028007105, -0.02743556, 0.104081236, -0.013052507, 0.015687529, 0.018804561, 0.0020766882, 0.034004055, 0.009790755, -0.0346076, -0.025244791, -0.022953272, -0.018032564, -0.02660157, 0.0015013329, -0.023231901, 0.0023303702, -0.006808277, 0.0527491, -0.031289585, -0.054886732, -0.055405527, 0.053073443, -0.033514977, -0.025046147, -0.0007739968, -0.009711527, -0.039695524, -0.0061687664, 0.00070448185, -0.022679402, -0.003427945, -0.059449583, 0.021739712, 0.0044470537, 0.023288278, -0.00055364385, 0.026281228, 0.025571594, -0.041534718, 0.0064288964, -0.0047851056, -0.003372238, 0.06308912, 0.021893596, 0.019723015, 0.024438798, 0.0062198043, -0.012446417, -0.004394108, -0.013755584, 0.05597155, 0.060743514, 0.030310811, -0.02050902, 0.00945137, 0.046107087, -0.024937019, 0.0038285607, -0.00055307255, -0.010751348, 0.047913145, 0.046654638, -0.040760152, 0.019993266, -0.0069618765], [-0.027671682, -0.082838036, -0.026545389, -0.062187746, -0.00016571346, 0.019728733, -0.00042532256, -0.03516658, 0.025604028, 0.025305849, 0.015089796, 0.032941137, -0.057720236, -0.03683514, -0.048881967, 0.012868508, -0.0050430917, -0.03997279, 0.0069441213, 0.046944182, -0.0008083077, -0.002921544, -0.032162383, 0.012878897, -0.040090192, 0.052388832, 0.015047199, 0.0028488173, -0.0075719105, 0.0025828443, 0.0039407597, -0.052564934, 0.013226931, -0.011721631, 0.024685072, 0.031765036, 0.03366581, 0.004712164, -0.037013844, -0.030756213, -0.04806418, 0.021908496, -0.00018701206, 0.03166452, 0.016714724, 0.039771233, 0.001520727, 0.013611881, -0.022117032, -0.029674659, 0.029847125, -0.0074410024, -0.011189555, 0.015109536, -0.016510047, 0.031181144, 0.04793119, 0.00799009, 0.046910673, -0.008639957, 0.020008473, 0.00064554875, -0.052043382, -0.0025599874, 0.034639828, 0.039630454, 0.0040764734, 0.0075812615, -0.005772374, -0.04044097, -0.011570851, 0.0126483785, -0.023520922, -0.008662684, 0.054595053, 0.001649862, -0.045827303, 0.0056394525, -0.0123768225, -0.045918472, -0.027137527, 0.009751639, 0.01278747, -0.036154367, -0.06406929, 0.0092932, -0.006255553, 0.009456446, 0.048820537, 0.0037184232, -0.025379615, 0.01763835, 0.0010244105, -0.0061760736, -0.015104341, 0.025138445, 0.020571327, 0.068222, 0.029907385, 0.044623155, 0.050383125, -0.029168429, -0.034332555, -0.033236198, -0.0062358133, 0.020446653, 0.03503567, -0.031767633, -0.012598639, -0.01702641, -0.004572185, 0.021688204, -0.0116583835, -0.06285683, 0.0062080217, -0.017510563, 0.028169211, -0.034707878, -0.04896599, -0.028931284, -0.024808189, 0.017778613, 0.010735012, 0.0012828507, -0.022581706, -0.04599666, -0.022512097, 0.016058102, -0.06047139, 0.010870076, 0.025270004, 0.013252403, 0.06695655, -0.00894593, -0.035478268, -0.020949507, -0.03469905, 0.04734522, -0.016331349, 0.032089323, -0.028096484, 0.0063760723, 0.015458754, 0.0048236125, 0.007012952, -0.039599802, -0.0014877848, -0.066007465, -0.0071069775, -0.02363313, -0.008369718, -0.007457625, 0.0023262221, -0.0012789547, -0.0063194493, -0.045909904, 0.0074708723, 0.018723024, -0.010931893, 0.018982762, -0.028474405, -0.025676755, 0.016586931, 0.01491525, -0.027021166, -0.025129225, 0.017238356, -0.021103531, 0.002058691, 0.061975278, 0.06286099, -0.0019541462, 0.018245624, 0.04409329, -0.05971867, -0.020583794, -0.009103332, -0.045144714, 0.019308995, 0.03445178, -0.037489682, 0.024354165, 0.001295578, -0.00037869942, -0.02732454, 0.02419053, -0.022144824, -0.01978224, -0.03939409, 0.027130255, 0.031055432, -0.018328741, 0.01025865, 0.004613224, -0.017669523, 0.04788963, -0.03153231, 0.018613609, 0.033667367, 0.042532776, 0.0015189535, 0.0008883073, 0.0075241188, -0.026632594, -0.020059122, -0.037010726, 0.031649712, -0.0014799926, 0.0681472, -0.02927414, 0.0025428445, 0.04715197, 0.045506526, 0.04341433, 0.035986833, 0.029149985, 0.047012754, -0.045867823, 0.052174285, 0.07449444, -0.044315625, 0.009061124, 0.008260998, -0.061399177, -0.0337773, 0.01941289, -0.015118886, 0.018111339, -0.0057030884, 0.0031355687, 0.09268317, -0.016357321, -0.021268206, -0.05394259, -0.0028532327, -0.02054847, -0.047233015, 0.02372144, -0.017796276, 0.045491725, -0.0154658975, 0.046610225, 0.010701246, -0.029269464, -0.0066091884, 0.015277326, -0.045240294, 0.013436297, -0.010102287, 0.01564252, 0.03266685, -0.028685052, -0.030040111, 0.006456072, -0.023241963, 0.011231633, -0.015799401, 0.015774468, 0.021402491, 0.031698804, -0.010757868, -0.048186775, -0.0038376434, -0.022400409, 0.043727573, 0.019658832, 0.016351672, -0.021395478, 0.0356819, -0.02501715, -0.053017918, -0.050396636, 0.040440317, 0.013802529, -0.0149570685, 0.052729093, 0.05405168, -0.0021672621, 0.05030209, 0.044712506, -0.052818436, -0.030054918, 0.04029902, -0.004264914, 0.0019618897, 0.0007345418, 0.031217508, -0.08241829, -0.024401957, -0.066676036, -0.019780682, 0.015132912, 0.010853582, 0.041232005, 0.0343271, -0.023554688, 0.054665703, 0.012791495, -0.036053848, -0.005541791, 0.03573177, -0.0005225948, -0.024454944, -0.010972933, -0.010933972, -0.003927253, -0.064564876, 0.030014396, 0.04823872, 0.032018542, -0.014473176, -0.005177117, -0.047738984, 0.0072477562, 0.021936255, -0.018464323, 0.031841923, 0.090401635, -0.025201432, -0.018302767, -0.037877087, -0.0073011103, 0.03749488, -0.032251008, 0.024861436, 0.016768228, 0.026005067, 0.013349544, -0.06191346, -0.049103137, 0.027945187, 0.012878897, 0.0013028507, 0.00870223, 0.039383702, 0.039850194, -0.008950216, 0.02588273, 0.036014367, 0.048323918, 0.013803568, -0.04375459, -0.010173456, -0.008413465, 0.046726, -0.08091181, 0.0062337355, -0.059262045, 0.0073423013, -0.0030921926, 0.011385658, -0.028692845, 0.017768743, 0.039048117, -0.031347375, -0.033502173, -0.018959776, -0.019520942, -0.03145543, 0.034111, -0.0058545163, -0.023410145, -0.047784697, 0.060486972, -0.0119229285, -0.01963315, 0.05633427, -0.016917838, 0.023361964, -0.022823785, 0.031511858, 0.02251554, -0.01467207, 0.016899657, -0.02532351, 0.052157667, -0.01683732, -0.005847763, 0.042534854, 6.441526e-05, 0.009407226, -0.03956344, 0.03237075, 0.0147692785, 0.043289136, 0.03441957, 0.025713118, 0.05123208, -0.006487241, 0.036649168, 0.011328775, -0.0022771317, 0.014722005, 0.030973352, 0.028766612, -0.0014055775, 0.03305685, 0.029948944, 0.042701345, 0.031775426, 0.01009034, 0.030900497, -0.021371843, -0.041757714, -0.014213695, -0.050584424, -0.04994053, 0.01874692, -0.01843939, 0.036342677, 0.008386452, -0.0046306266, -0.048731185, 0.031968154, 0.03338529, -0.043066803, -0.03521437, 0.02642896, 0.01432824, -0.00061194506, 0.008203076, 0.05050988, -0.05018988, 0.025140656, 0.0013664867, -0.0082845045, -0.023540663, -0.012107993, -0.05942542, 0.053863887, 0.001733498, 0.025746625, -0.0041545574, 0.086549185, 0.035995666, 0.001954276, -0.015729792, -0.017650302, -0.062661506, -0.018263806, -0.007677105, -0.06624746, 0.013180194, 0.018977309, -0.031658027, -0.0084376205, -0.005400493, 0.033291265, 0.026694931, -0.059752434, -0.016633684, -0.0016898616, -0.02387027, -0.023603, -0.046356656, 0.02005003, 0.04488913, -0.065297335, -0.0395811, -0.029736996, -0.052622076, -0.0060259444, 0.041927584, -0.031486597, 0.009084631, 0.019030554, 0.023024302, -0.06267813, 0.005573998, 0.0368954, 0.012126693, -0.025050005, -0.005011144, -0.050809097, -0.012964092, -0.015943818, 0.027137527, 0.024901824, 0.024372801, 0.02434897, 0.010333455, 0.013446947, -0.0023534948, 0.026491297, 0.02362024, 0.01990068, -0.031372312, -0.0065371105, -0.011657085, -0.024354944, 0.021459619, 0.03845098, 0.0066320207, 0.066019416, -0.02152405, -0.008316322, -0.0058334772, 0.049033266, -0.03374529, 0.013341232, 0.05904698, 0.045262113, -0.06488279, 0.035806574, 0.0015984337, -0.056219984, 0.025714938, 0.02695675, -0.014775772, 0.009619693, -0.049004436, -0.045428347, 0.020683924, -0.026132338, 0.032107893, 0.048621055, 0.011140465, -0.0403011, -0.023402482, -0.0253952, -0.009386967, 0.020042855, -0.038481887, 0.0239604, -0.0064036045, -0.024443256, 0.042024724, -0.035552032, -0.0076731034, -0.013702984, -0.030540109, -0.065856814, -0.055011872, 0.0028592066, 0.015586416, -0.0013171363, 0.041554082, 0.025420133, 0.023588454, 0.010395273, -0.024047675, 0.0029825827, 0.0004171408, 0.0041288105, -0.037411243, -0.0015471353, -0.014303825, 0.023974948, 0.013219545, -0.038715653, -0.0069724326, 0.0053443895, -0.046678208, -0.04241849, 0.07512898, 0.020457042, -0.0074555473, 0.015692908, 0.006360488, 0.0066516553, -0.016999396, 0.0026233636, 0.008726029, 0.0252339, 0.026188573, 0.035890732, -0.013592401, -0.068271875, -0.06492227, 0.02518481, -0.00836879, -0.038999546, -0.071023025, -0.015863298, -0.017727185, -0.0132737, 0.00032675164, -0.046990417, -0.030273356, -0.012838378, -0.014176293, 0.048970148, -0.009004631, -0.02782116, 0.018983802, 0.008665672, 0.014072138, 0.016719138, 0.03714267, -0.011797474, 0.02187002, -0.025916236, 0.040624216, 0.0195812, -0.047173277, -0.0075926897, -0.047163405, 0.0028769989, 0.0018592116, -0.0013854478, -0.03265958, -0.07164562, 0.001105449, 0.026658569, 0.007841, 0.0068664597, -0.008896839, 0.044483937, 0.003929071, 0.02013081, 0.0067700963, 0.019815486, -0.015888752, -0.015685637, -0.00057610107, 0.00030051798, -0.034040187, -0.024968188, -0.020137433, -0.0048701055, 0.005806205, -0.014262787, 0.018938089, 0.020969247, -0.022397812, -0.0034671256, -0.014096163, 0.085325286, 0.019957043, 0.027010515, 0.04067824, 0.013795257, 0.07817935, -0.03262789, -0.046690676, 0.080032855, 0.010638389, -0.0605836, -0.02659961, -0.0037402413, 0.037162412, 0.024943253, 0.033364512, 0.010750856, 0.02302586, 0.0012103836, 0.008832164, 0.004796202, -0.024461696, -0.017071605, 0.036844492, 0.0076903515, 0.026672075, -0.05055144, 0.041670445, -0.014874212, 0.007540742, -0.0066928887, 0.008798918, -0.034055933, 0.02794621, -0.029111024, 0.028994141, 0.034873594, -0.0058804904, -0.0103903385, 0.06842979, 0.017929781, -0.022073658, -0.0065558115, 0.06130411, -0.0201699, 0.032348413, -0.018317053, 0.0049081575, -0.009180214, -0.04678834, -0.020515222, 0.008471646, 0.049092747, -0.035492748, -0.008922813, 0.003883617, 0.0060147755, 0.048078723, 0.025560392, 0.006431137, 0.04215148, -0.033510484, -0.06143138, 0.011185399, 0.023688195, 0.002509598, 0.00025583882, -0.025720393, -0.024829488, 0.033429448, 0.014962263, 0.041816935, 0.021847423, 0.044961855, 0.033191394, 0.010405144, 0.023685597, 0.004872703, -0.055462062, 0.03089543, -0.018473156, -0.036569428, -0.086042166, -0.02158431, 0.006203346, -0.021053402, 0.014331358, 0.01960198, 0.006230619, 0.026217273, -0.032078803, 0.004449848, -0.017057579, 0.009656835, 0.018148223, -0.04478004, -0.01911575, 0.07537833, -0.03199984, -0.03862734, -0.028918298, 0.0048015346, -0.010842543, -0.022267941, -0.012012407, -0.008783333, 0.042435113, 0.007124121, -0.01125501, -0.03805072, -0.034913074, 0.030954652, 0.020766651, -0.0018908997, -0.025558315, 0.0014732395, -0.0041828365, 0.0036921895, -0.04237174, -0.026258765, -0.025544288, 0.00042496543, -0.00043947835, -0.012813443, 0.04367147, 0.031122964, -0.008791125, -0.02739441, -0.039554868, 0.033211265, -0.053653438, 0.0067064604, -0.0041108564, -0.0023635596, -0.05693478, -0.018138092, 0.004235823, -0.012894481, 0.015345379, -0.044227313, 0.023117809, 0.01268247, -0.010136054, -0.003019206, 0.0068412647, -0.036728133, -0.054534797, 0.029080376, 0.0006138931, -0.08370348, -0.043303683, -0.00604023, -0.036803972, -0.03555541, -0.014799926, 0.03590385, -0.028422715, -0.034602426, 0.046162892, -0.0329775, 0.014012397, 0.022419628, -0.060208533, 0.012608704, -0.013510843, -0.03997487, 0.01633966, -0.04985879, 0.061620474, 0.02103574, 0.03295932, -0.024521437, -0.01916049, -0.0047080284, -0.004544913, -0.014859667, 0.021393143, 0.0030754395, 0.003603099, 0.020785352, 0.029299596, -0.05365896, -0.07728169, -0.02619987, 0.016383296, 0.0075184046, 0.0074700927, 0.052118182, 0.025068708, -0.0018612894, 0.0023319365, 0.028617, 0.026387922, 0.014763563, 0.04918911, 0.01350201, 0.016994396, -0.013716295, 0.0043132254, 0.041400313, 0.0031376467, -0.012853961, -0.0053298436, 0.035093334, 0.0046623144, 0.030303746, 0.0612797, 0.025490263, -0.019388476, -0.020768728, -0.0044872505, 0.019348735, -0.048277166, -0.021272622, 0.046813272, 0.016052647, 0.0050160787, 0.024485074, -0.0024114167, 0.011018688, -0.05518544, -0.032447632, -0.03677696, -0.03461931, -0.017408745, -0.01464616, 0.005646206, 0.013353701, -0.011717345, -0.0052404935, 0.039824218, 0.022233397, 0.0033584249, 0.04655613, -0.030282967, 0.033600613, -0.018528739, -0.005695037, 0.02011003, 0.003646216, -0.01593135, 0.013073442, -0.03326529, 0.015606157, 0.005468496, -0.013200973, 0.0038327083, 0.037281893, -0.096489914, 0.0034337493, -0.022479368, -0.0004571406, 0.007163601, -0.024754424, 0.04482575, 0.025715457, -0.006410877, -0.041495897, -0.028564403, -0.032334644, -0.005017118, 0.039629932, -0.009009826, -0.019011853, -0.027268438, 0.005158416, 0.00810074, -0.036747135, -0.06345034, 0.09406499, -0.014994342, 0.037678774, 0.04950417, -0.02976193, 0.048654564, 0.029426869, -0.03531229, -0.023266897, -0.009897093, -0.028257523, -0.04985378, 0.009774497, -0.020838337, 0.056406997, 0.0652298, 0.020101719, 0.0060249055, -0.07680377, -0.0016333684, -0.02697649, -0.06173476, -0.060712427, -0.016592905, -0.0029937513, 0.001262851, 0.010044625, 0.005699842, -0.030005567, 0.04853794, 0.024099622, 0.014454669, -0.007000745, -0.013639673, 0.010303845, 0.012842014, -0.013643568, 0.05583375, 0.00731373, 0.025885586, -0.052558698, -0.0076934686, -0.029250763, 0.0020158342, 0.0034093338, 0.026383245, -0.026022729, 0.033503212, -0.02533559, 0.03880708, 0.0001838952, 0.057022054, -0.02678636, 0.0110783875, -0.0043449136, -0.023378585, -0.00076207414, 0.04037902, -0.008795801, 0.030281927, 0.0017679133, 0.0002425962, 0.031122964, -0.00948307, 0.08623542, 0.013399349, 0.020746715, 0.021884112, -0.0013376557, 0.030827899, 0.022996249, 0.0017340173, -0.015400444, -0.0041745245, -0.020848727, 0.001730381, 0.009807224, -0.041219536, -0.005497115, 0.0031750493, 0.07461989, -0.004058941, -0.046804965, -0.06009321, 0.03791806, -0.016999915, -0.003300503, 0.00568153, 0.0045729643, -0.006969316, 0.009349564, -0.009336057, -0.0044373805, -0.00481608, -0.059590355, 0.003237906, -0.0017906405, 0.03945539, 0.015295899, 0.038127862, 0.0051511433, -0.052351948, -0.017716276, 0.0038116695, 0.028174406, 0.062085923, 0.0154658975, 0.0071937307, 0.018472636, 0.02516585, -0.006168281, -0.0055861413, -0.028462717, 0.050553516, 0.026804022, 0.027081942, -0.055344872, 0.021396518, 0.009828003, -0.034813333, 0.0051542604, -0.010149171, 0.012013966, 0.039698504, 0.012128771, -0.04780444, 0.02761337, 0.00971216], [-0.016896123, -0.06902076, -0.025810285, -0.024789022, 0.011205124, 0.030508304, 0.017210815, -0.0012175135, 0.02891782, 0.027782805, 0.0069347345, 0.016776435, -0.08198091, -0.025597783, -0.026756546, 0.050921187, 0.0045181746, -0.04795053, 0.018445203, 0.026462166, -0.024792148, 0.0054044346, -0.007637584, 0.020475226, -0.019985845, 0.058025014, 0.009240727, 0.001908146, 0.02388745, 0.0086969705, -0.026557792, -0.040540446, 0.008412593, -0.014263907, 0.006069442, 0.015527671, 0.014304533, 0.0037962918, -0.0100919865, -0.030145645, -0.06789575, 0.021132577, -0.026895296, 0.041492958, -0.0008900098, 0.06271069, -0.011093716, 0.037560415, -0.021342736, -0.03379537, 0.0031062842, -0.016872764, -0.04896554, 0.018046448, -0.030123457, 0.029255323, 0.042305466, 0.016801436, -0.00410442, -0.017782072, 0.004637551, 0.0010271989, -0.051175565, 0.003435663, 0.028227812, 0.041824408, 0.00063250697, 0.02183399, 0.0045950506, -0.027915308, -0.028530315, 0.010235738, 0.01547267, -0.022047117, 0.018362077, -0.0022200244, -0.059569407, 0.0012912642, -0.023300257, -0.010061673, -0.0071553914, 0.025195902, -0.0058475644, -0.04053732, -0.04369923, -0.009915109, -0.011157779, -0.0041636396, 0.04264047, 0.061270677, -0.07221486, -0.019202087, 0.03287599, -0.019616466, -0.0027831558, 0.022844939, -0.01402953, 0.04326485, 0.015602047, 0.04417924, 0.039291684, -0.058815647, -0.01642893, -0.01678159, 0.007042265, -0.013727964, 0.030961592, -0.0454455, -0.033071928, -0.02162727, -0.018565204, 0.017630193, -0.0018087699, -0.017402692, 0.010345114, -0.02731249, 0.04882804, -0.028704535, -0.023245256, 0.007355081, -0.004695052, 0.008855996, 0.007001405, -0.0013065183, -0.030462835, -0.008760721, 0.010682617, 0.010501366, -0.049092416, -0.00065000716, 0.01571986, 0.00543756, 0.04759115, -0.025160277, -0.01660864, 0.0029325322, -0.0013439992, 0.032172855, -0.01358015, 0.040577948, -0.04166921, -0.0061888183, 0.03279661, 0.02084773, 0.010560117, -0.0076210215, -0.0011637629, -0.036005396, -0.009020099, -0.012619514, -0.009255102, -0.016259866, 0.040511385, 0.011056372, 0.0048328657, -0.008769003, 0.018072387, 0.0365029, -0.030530335, 0.027155299, -0.0144421905, -0.01226076, 0.017420817, -0.011618956, -0.007135079, -0.05360059, 0.020507727, -0.023065254, -0.0060878797, 0.018447703, 0.07474583, -0.0073716436, 0.017548319, 0.019050835, -0.07115079, 0.0010100697, 0.014140156, -0.030008143, 0.016612839, 0.043781105, 0.014683912, -0.022202745, -0.013050144, 0.0058550644, -0.033120364, 0.016032677, -0.0048253657, -0.013058894, -0.01001261, 0.010718243, 0.040331695, 0.00016750184, -0.005080056, 0.0017320503, -0.051318064, 0.032079104, -0.029050646, -0.01092012, 0.007043828, 0.048840538, 0.015665172, 0.0025225277, 0.011675441, -0.01829614, -0.00097376073, -0.07911087, 0.037373535, -0.0116138775, 0.05744063, -0.0306319, -0.0124901375, 0.016602684, 0.03175941, 0.04738802, 0.0272853, 0.029275982, 0.02623529, -0.033529118, 0.035075385, 0.06366612, -0.045388, 0.0064913216, 0.03736791, -0.040179193, 0.015690407, 0.0035292576, 0.0027159674, 0.0037737915, 0.010161987, 0.0027787806, 0.098841086, 0.0018147075, -0.022955254, -0.04264422, 0.003723791, -0.007355081, -0.032330357, 0.050425556, -0.007526333, 0.03181191, -0.034866948, 0.034780383, 0.060180664, -0.01543517, -0.019880218, 0.018126918, -0.042230465, 0.016997688, -0.045343, 0.018900208, 0.049697578, -0.029657671, -0.0016386118, -0.020780228, -0.007923173, 0.017739259, -0.011652941, 0.00784118, 0.026445292, 0.053082146, 0.003370037, -0.020413663, 0.0013368897, -0.033402868, 0.055735614, 0.026076537, 0.015700173, -0.039462857, 0.0075987554, -0.028849067, -0.032160353, -0.05177807, 0.033771623, 0.033945374, -0.00294347, 0.0010700118, 0.026796311, 0.023063378, 0.042197965, 0.024934728, -0.06652323, -0.01183888, 0.01635393, 0.0043937983, 0.037016656, 0.0133873345, 0.00545006, -0.06807075, -0.00073000806, -0.04443049, 0.008135715, -0.019383533, -0.0022312745, 0.033890374, 0.041778587, -0.027317801, 0.03906793, 0.013393898, -0.0431711, -0.01902021, 0.017003937, -0.024641521, -0.011889975, 0.0024775274, -0.008416264, -0.035167888, -0.045318626, 0.008676345, -0.016645027, -0.01643272, -0.015350794, 0.00022962167, -0.059957456, 0.015071416, 0.0061206925, -0.02909532, 0.025083167, 0.09350103, -0.054285597, -0.023216506, -0.06538822, -0.020056002, -0.010476366, -0.055675615, 0.04275391, 0.041960463, 0.022812752, -0.016853623, -0.061159737, -0.028267363, 0.044741116, 0.04262547, 0.0113963755, -0.008861192, 0.02996783, 0.07450082, -0.034311004, 0.036465403, 0.008624001, 0.047788028, 0.014307502, -0.026533887, -0.01634143, -0.018365826, 0.014785163, -0.07675335, 0.010666133, -0.07554083, 0.0076050838, -0.0059060026, 0.03373162, -0.019636154, 0.025139026, 0.034085374, -0.022733493, -0.02681967, 0.008447593, -0.009363853, -0.007527583, 0.020996481, 0.0050491183, -0.0007406332, -0.016438931, 0.02112539, 0.01278514, -0.018483954, 0.07016827, 0.0005585999, 0.03353537, -0.037632916, 0.0477374, 0.019967876, -0.016883936, 0.01628143, -0.013052644, 0.044040486, -0.031295344, 0.014301407, 0.027942808, 0.000864072, 0.027700149, -0.019696467, 0.025008088, 0.029364074, 0.024145266, 0.04030857, 0.024914024, 0.03083159, -0.020096472, 0.062583186, -0.0071325786, -0.019076772, 0.0105937105, 0.039197933, 0.010130111, -0.017277144, 0.018472703, 0.029451575, 0.017458942, 0.048795536, -0.011675129, 0.026035286, 0.006707027, -0.030386897, -0.011648878, -0.02921123, -0.052040573, 0.041475456, -0.014010155, 0.025650283, 0.038391672, -0.010812619, -0.025897786, 0.022807127, 0.026835453, -0.025316529, -0.052065574, 0.04415611, 0.016632684, 0.011892631, 0.0051388065, 0.07855336, -0.05728563, 0.036730405, 0.017537693, -0.028545314, -0.0019675216, 0.0059481906, -0.024354018, 0.033805996, 0.014282345, 0.035889145, -0.0039322306, 0.096081056, 0.051128063, -0.040942952, -0.017955823, -0.041395456, -0.054828104, 0.009631356, -0.028890885, -0.03844663, 0.0044800495, -0.003375037, -0.008106965, -0.026476542, -0.043935172, 0.025590282, 0.04450674, -0.03131566, 0.006473821, -0.014382346, -0.052995585, -0.022427121, -0.03534289, 0.023340452, 0.04784759, -0.058445644, -0.0043275477, -0.03723166, -0.041192953, -0.015289231, 0.048518036, -0.0127351405, 0.014500863, -0.004897554, 0.004741302, -0.042515468, 0.009362604, 0.04000794, 0.004448174, -0.027444677, -0.015377982, -0.05074306, -0.03585805, -0.012555138, 0.028015621, 0.008697595, -0.0029525326, 0.012460138, -0.010673868, 0.020320224, 0.007628834, 0.0021093981, 0.060892466, 0.015302668, -0.042582344, 0.015927676, -0.015020166, -0.0002531278, 0.051343065, 0.007465082, 0.0073700813, 0.045680504, -0.029337823, -0.021718364, 0.028685316, 0.009715732, -0.04063045, -0.020854916, 0.0486871, 0.0410167, -0.039974384, 0.020706479, 0.01452891, -0.0729608, 0.031555347, 0.02342143, -0.0071325786, 0.0018934583, -0.000820634, -0.038715426, 0.01599674, -0.05441902, 0.045630503, 0.040480446, -0.00036250398, -0.042340465, -0.029662827, -0.03221973, 0.0016425181, -0.0051927133, -0.0226815, 0.03457788, 0.011284539, -0.029380323, 0.04018853, -0.05539186, -0.00012750141, -0.004157546, -0.04724052, -0.041300453, -0.026365291, 0.012410137, -0.0037308615, -0.017508006, 0.009334478, 0.03721541, 0.014435159, -0.025714032, -0.025140276, 0.021600394, 0.019680217, 0.010440115, -0.037430413, -0.017695194, -0.029361574, 0.007982354, 0.014962665, -0.009640106, -0.0010212612, -0.00063125696, -0.07406081, -0.06773324, 0.05512561, -0.00040843224, -0.05067556, 0.015235793, 0.03805542, -0.015286419, -0.039389186, -0.008103839, 0.025774034, 0.045085497, 0.030315334, 0.024030264, 0.012429199, -0.08693596, -0.0655765, 0.062778816, 0.0108037125, -0.03294036, -0.078345865, -0.047243647, 0.04390986, -0.02485121, 0.00018500203, -0.028440783, -0.007893837, -0.013393273, 0.017108314, -0.0029625327, -0.0032547233, -0.020285223, 0.015176417, 0.026056537, 0.016069239, 0.012735297, 0.018022386, 0.00634132, 0.04203046, -0.008051339, 0.029329073, 0.012083883, -0.024748398, -0.025199028, -0.021213358, 0.009846671, -0.007532583, -0.04799803, -0.025183344, -0.06307757, -0.008739783, -0.0085288435, 0.008027901, -0.03472413, -0.011106372, 0.024637146, 0.0036825405, 0.008243216, -0.024062766, 0.0144118, -0.04080045, -0.036657903, -0.021374611, -0.00072500797, -0.027825307, -0.017660975, -0.03822964, 0.0013000143, 0.017147688, -0.0053869733, 0.0076335217, 0.038519174, -0.0033065989, 0.005247558, -0.004708802, 0.06888826, 0.015902676, -0.017712696, 0.035091713, -0.020355849, 0.07516583, -0.040162943, -0.03893418, 0.063408196, -0.0024406519, -0.02008897, 0.0011300124, 0.024922775, 0.01720519, 0.022342121, -0.0033100364, -0.021819303, 0.010726993, 0.011081997, -0.042080462, -0.00772821, -0.04721427, 0.03085284, 0.03524539, -0.013314522, -0.0135413995, -0.050130554, 0.022398371, -0.01725269, -0.009626356, -0.014058436, -0.009272602, -0.028319063, 0.040750448, -0.03455038, 0.051070563, 0.037819166, 0.026011536, 0.0031450347, 0.014466097, -0.009897609, -0.030210333, -0.04342423, 0.02998158, -0.00294847, 0.047613025, -0.013396066, 0.011621065, 0.014996415, -0.029384151, -0.013147645, 0.009141351, 0.02248681, -0.03538039, -0.02628779, 0.0365079, 0.025421843, 0.039531685, 0.013462649, -0.00012500137, 0.024860274, -0.05994066, -0.05167057, -0.0028586253, 0.042759847, -0.006952577, 0.015331106, 0.007973838, -0.027036548, 0.036915407, 0.030557837, 0.07885587, 0.043482978, 0.040439196, 0.0496993, 0.04057295, 0.04903054, 0.024215266, -0.025545593, 0.049245544, -0.02883688, -0.04111795, -0.08854098, -0.012051383, -0.0036550402, 0.0040275445, 0.026460292, 0.025695283, -0.015935175, 0.014133906, -0.055116232, 0.004168796, 0.0075800833, 0.006510072, 0.00071907043, -0.04554925, -0.019683342, 0.020576477, -0.018367702, -0.04093295, -0.044117987, -0.036355402, 0.013318271, 0.014394534, -0.014846413, -0.0004000044, 0.018142074, 0.025829816, 0.0056650625, -0.025921535, -0.06399445, 0.041447956, 0.0153011065, 0.00024875274, -0.039785437, -0.009994133, 0.014192657, 0.005297871, -0.063940704, -0.01799176, -0.030677838, -0.009062599, 0.0204871, -0.0012931393, 0.0499243, 0.011239109, -0.0046119257, -0.01628471, -0.017017687, 0.044202987, -0.038647927, 0.008265638, 0.04027107, -0.0025087777, -0.07631584, 0.006091317, 0.02663123, -0.026243415, 0.009213852, -0.040708728, 0.029434778, 0.0037831666, -0.011913882, 0.035049137, 0.001990022, -0.01686675, -0.003370506, 0.0034181627, -0.020882105, -0.05727063, -0.013891716, -0.0061438177, -0.037209786, -0.04135608, -0.015852675, 0.027595304, -0.0025092463, -0.041470144, 0.076700844, -0.016553933, -0.013488899, 0.037782915, -0.048536785, 0.0019570529, -0.060341913, -0.031124093, 0.03399381, -0.037987918, 0.034342565, 0.013100144, 0.07118078, -0.042012963, -0.041995462, -0.0065863226, -0.0012634514, 0.032431137, -0.026147788, 0.0057788137, -0.019658966, 0.023245256, 0.031182844, -0.04180046, -0.08105558, -0.009784482, -0.0150276655, -0.0058588143, -0.0019381463, 0.030557211, 0.009938234, 0.00024125265, -0.016446432, 0.036827907, 0.0043175477, 0.017127689, 0.011263874, 0.016738309, -0.005912565, -0.008838847, 0.0053250585, 0.011930756, -0.034562882, -0.03945684, 0.00014875164, 0.074050814, 0.028506877, 0.028493127, 0.028513204, 0.03883043, 0.003403475, -0.0007700085, -0.0039575435, 0.018753957, -0.07015077, -0.004389736, 0.055165607, -0.0033812872, -0.01637518, 0.030219084, -0.016642684, 0.036780406, -0.06007691, -0.009131351, -0.04245047, -0.03711541, -0.01457391, -0.009802608, 0.023050254, -0.0025125276, 0.013412648, -0.009448854, 0.034697883, 0.03455538, 0.015032041, 0.036156647, -0.013896403, 0.0385498, -0.015673298, -0.010086986, 0.05544561, -0.019679591, 0.010223863, 0.026696544, -0.027875932, 0.045650505, 0.029487824, -0.017785195, 0.021095233, 0.009437604, -0.06838575, 0.014947977, -0.022452747, 0.007796961, -0.020409599, -0.008130089, 0.043980483, 0.03573039, -0.01995772, -0.059165653, -0.024197767, -0.01822895, -0.0029690757, 0.007873837, 0.0013475148, -0.026043411, -0.014136406, -0.015511421, 0.0011187623, -0.039012812, -0.059610657, 0.062436312, 0.011905131, 0.050335556, 0.049638048, -0.038802303, 0.072880805, 0.034029126, -0.04274047, -0.027895307, -0.017990198, -0.04176171, -0.028964069, 0.02262025, 0.0075414893, 0.025910286, 0.053375587, 0.027880307, 0.01894427, -0.092680864, 0.01600877, -0.033101615, -0.0362579, -0.062250685, -0.028246561, -0.008550094, 0.020549288, 0.020507727, -0.025905285, -0.035610706, 0.049390543, 0.013765152, 0.02138211, -0.016073927, -0.0139201535, -0.01728269, 0.001068293, -0.002329088, 0.0726833, 0.028892819, 0.040775448, -0.023930889, -0.014780163, -0.047910526, -0.0011428251, -0.012010132, 0.029490326, 0.00025109653, 0.021462794, -0.0074138315, 0.01626518, 0.04583113, 0.05898065, -0.033732872, 0.022574468, -0.014091405, -0.031115342, -0.018473953, 0.031237844, -0.036841344, 0.030065877, 0.02364276, 0.008463531, 0.009557293, -0.038640425, 0.08916098, 0.016068926, 0.019581465, 0.020432726, -0.009390104, 0.0039525437, 0.038029168, -0.029207822, -0.0046925517, 0.020500489, -0.011647629, -0.0038562145, 0.012797641, -0.032945365, 0.025540281, 0.01643268, 0.044740494, -0.03265911, -0.03907293, -0.03581852, 0.07833086, -0.02382995, -0.016600808, -0.047483023, -0.0061275675, -0.01870177, -0.013079206, 0.03159285, -0.032850362, -0.010713868, -0.07356581, -0.02756968, -0.0053127734, 0.02186774, 0.033430368, 0.047734275, -0.014322658, -0.026113724, -0.00819009, 0.016786436, -0.0023783855, 0.07532833, -4.6758327e-05, 0.031318, 0.018925833, 0.020817729, 0.011367626, -0.009897296, -0.028832817, 0.02352776, 0.044331737, -0.003447538, -0.010670117, 0.0095418235, -0.0019384589, -0.0023700262, -0.006630073, -0.028652815, -0.018345201, 0.04391361, 0.011900444, -0.059515655, -0.0037048846, 0.013380772], [-0.025480254, -0.1003536, -0.03531043, -0.012997544, -0.005467371, 0.030128079, 0.0089386515, -0.016733103, -0.0008779251, 0.0398593, 0.039275683, 0.017927326, -0.064174406, -0.04375202, -0.025337059, 0.035425488, 0.06003574, -0.062261816, 0.021653296, 0.059292875, 0.012743515, 0.019190125, -0.042185217, -0.03244988, -0.0137016345, -0.00029712304, 0.025601773, 0.015275, 0.0053025675, 0.04707279, 0.0104634, -0.06700494, 0.011572271, -0.011327151, 0.020696688, 0.011238984, 0.025532363, 0.013589549, -0.029690208, -0.021631932, -0.02593589, 0.022044737, -0.004689041, 0.004165767, 0.008770288, 0.032966796, -0.006626542, 0.013620761, -0.011247425, -0.042996656, 0.037558187, -0.011167492, -0.023077317, 0.042420022, 0.001687067, 0.023957018, -0.005213983, -0.016331242, -0.00027044347, -0.032274067, -0.021057514, -0.000895173, -0.0675277, -0.043120462, 0.021449551, 0.014840519, 0.029029317, -0.0072568473, -0.0125556635, -0.035056975, -0.010196395, 0.0052473326, 0.016475478, -0.0097995885, 0.015932715, -0.023182057, -0.048538502, -0.021961467, -0.02033443, -0.01161229, 0.039772592, 0.016393146, -0.0014623748, -0.05377937, -0.024876837, 0.013755828, -0.02736075, -0.05365098, 0.029877799, 0.016917568, -0.028359147, -0.00032713756, 0.023909912, 0.006514821, -0.0026075516, 0.023085346, -0.004305418, 0.018236747, 0.023744829, 0.022183241, 0.045204807, -0.024469765, -0.026334833, -0.036790524, -0.014727964, -0.014519191, 0.04854017, -0.013693714, 0.0044361064, -0.021542098, -0.0061679347, -0.0004996169, 0.03604205, -0.068190314, -0.016640557, -0.013975517, 0.023886567, 0.0054410724, -0.033814292, -0.018378587, 0.0032984721, -0.02516802, 0.017483257, 0.0033557916, 0.01529772, -0.029378705, 0.008010337, -0.009942575, -0.070185184, -0.0012116283, 0.012035742, 0.00025220547, 0.06889294, -0.04663091, -0.022574056, 0.033116765, 0.0052348264, 0.02912702, 0.017610194, 0.027295718, -0.02399412, -0.043752857, 0.027910182, -0.026301902, 0.012514185, -0.055226743, 0.036313415, -0.021001002, -0.013598667, -0.013975152, -0.013903398, 0.01185793, 0.019169282, 0.04489132, 0.016728517, -0.06462546, -0.014795498, 0.032241862, -0.03825519, -0.0015048953, -0.039431803, -0.051258776, 0.0036207116, -0.0048936196, 0.02370523, -0.05249542, 0.019110087, 0.020496422, 0.011718487, 0.011132786, 0.081852965, 0.0010904759, -0.003250741, 0.012265106, -0.0728286, -0.020712528, 0.014821759, 0.010802314, 0.015652996, 0.06834309, -0.008214811, -0.0043954616, -0.021056497, -0.026446555, -0.012129206, 0.017801953, 0.012386414, -0.013865412, 0.014589565, 0.023812156, 0.028385201, -0.025854185, 0.014161858, -0.009265789, -0.019723717, 0.01597117, -0.008633347, 0.014448598, -0.012107947, 0.02439379, 0.025253268, -0.0038893314, 0.025765393, -0.052212782, -0.043381006, -0.026716687, 0.03599832, 0.019917978, 0.077682614, -0.037948374, -0.009776453, 0.02031171, 0.010631815, 0.023618102, 0.02363728, 0.046787653, 0.04809548, -0.008884927, 0.06602385, 0.06472551, -0.027290508, -0.013422124, 0.040692203, -0.016566355, -0.04537593, 0.04999087, -0.0015588147, 0.03317648, 0.027024336, 0.0029141193, 0.053331237, -0.015637571, -0.026963226, -0.060406752, -0.013152306, -0.042105388, -0.026156833, 0.045331117, -0.03155361, 0.01765188, -0.0046389126, 0.006506484, 0.032890927, 0.017891997, -0.03374113, 0.0007143824, 0.005144991, 0.02103852, -0.0043633627, -0.02671971, 0.045244824, -0.030245895, -0.036862224, 0.009567549, 0.018048739, 0.006422276, -0.003053041, -0.011971995, 0.029726062, 0.048387177, 0.020433435, -0.042283807, 0.025112161, -0.018379733, 0.027209008, 0.005842412, 0.005631894, -0.0070869704, -0.011270249, -0.056128792, -0.022087364, -0.053061735, 0.0028201155, 0.0034181136, -0.046426855, 0.009042191, 0.01843205, 0.0055635273, 0.062776856, 0.024910396, -0.067706116, -0.009714704, -0.014991426, -0.0047197854, 0.0013619093, 0.002978734, 0.010824826, -0.055113353, -0.03488356, -0.031368937, -0.017480131, -0.005085379, -0.015155881, 0.0027529998, 0.035095327, -0.014658765, 0.04097651, 0.010156376, -0.05372435, -0.033731125, 0.002768007, 0.025786236, 0.022699326, -0.013043815, -0.006364123, -0.0085301725, -0.025421893, 0.056038387, 0.027700704, -0.0005886444, -0.031752877, -0.007940511, -0.05163167, -0.011535586, 0.043075025, -0.041262273, 0.028278692, 0.032198507, -0.05448221, -0.043676775, -0.01660971, -0.018679043, 0.03698374, -0.016612211, 0.05276576, 0.022445451, 0.017051069, 0.05039982, -0.04491508, -0.031919207, 0.02309827, 0.023644783, -0.0023828205, 0.00457904, 0.018433927, 0.06506317, -0.006630815, 0.013551561, 0.02142475, 0.018837873, -0.012129832, -0.05233868, -0.0153716095, -0.008410739, 0.027316561, -0.057869688, 0.046254896, -0.07026069, -0.010609304, 0.011573103, 0.011010331, -0.037905436, 0.005951423, 0.024242988, -0.024840726, -0.009913133, -0.0040661357, 0.008049731, 0.0015151087, 0.0034942962, -0.03072571, -0.06653472, -0.006137972, 0.05465146, -0.02018665, -0.028222416, 0.044734996, -0.004576741, 0.022725588, -0.03190618, 0.043560255, -0.004961569, -0.031146333, 0.01294877, 0.006597361, 0.043202586, -0.04226505, 0.036987495, 0.014364143, -0.013321659, 0.0386854, -0.011816138, 0.034753494, 0.04133463, 0.03585903, 0.022991652, 0.018731361, 0.043255948, -0.022954032, 0.032165576, 0.013911736, 0.0036834502, 0.004810663, 0.0014893148, 0.03414987, -0.004011578, 0.07291197, 0.013990524, 0.05223821, 0.021161914, 0.011870748, 0.025143841, 0.0054181446, -0.03703022, 0.0242284, -0.041206617, -0.0052191936, -0.028352479, 0.009103575, 0.016699128, 0.031015005, -0.014252734, -0.0026888018, 0.05946546, 0.016024843, -0.030124588, -0.04770956, 0.028712237, 0.04573798, 0.015079411, 0.017000733, -0.009032707, -0.026842996, 0.0067466, 0.026845498, -0.04360778, 0.031948805, -0.0262104, -0.019376883, 0.001921347, -0.01306716, 0.023388745, 0.0030769065, 0.059006903, 0.048404846, -0.011106212, -0.03374384, -0.022935271, -0.062215123, -0.018212153, -0.011837815, -0.02302219, 0.019719549, -0.0064550005, -0.008527775, 0.008085165, -0.027683405, 0.0026333584, 0.00060029066, -0.04325011, 0.020469077, -0.028038576, -0.02351868, 0.018005386, -0.049921673, 0.047382943, 0.06292505, -0.05646859, -0.03049143, -0.040440623, -0.038813796, 0.0098506035, 0.054232508, -0.040093582, 0.008760491, 0.045873046, 0.04361862, -0.03591906, 0.00020551617, 0.05642899, -0.009086067, -0.0265687, -0.03025465, -0.02868931, -0.026214777, 0.018533975, 0.035085324, 0.019285694, -0.022697655, 0.007780434, -0.004586804, 0.046607986, 0.009055739, -0.0025316426, 0.025950065, 0.016544886, -0.027325522, 0.01736445, -0.04244889, -0.018846625, 0.005604797, -0.009716162, 0.026598712, 0.047800645, -0.02092784, -0.031752508, 0.018157542, 0.016983641, -0.0345535, -0.002782389, 0.031985488, 0.052947305, -0.017739005, 0.036621064, -0.030035298, -0.025447322, 0.02371075, 0.024250701, -0.021169834, -0.015146709, -0.008726725, -0.022914428, -0.0071739946, -0.051299006, 0.05111392, 0.0013256419, 0.00039852632, -0.053142402, -0.027502066, -0.03233399, -0.044533413, 0.0011161654, 0.009306799, 0.020273983, -0.021149628, -0.04108604, 0.022467962, -0.045638766, 0.03840151, -0.0041549285, -0.01669225, -0.034578826, -0.005806979, -0.0011250239, -0.022528408, 0.009173192, 0.012461867, 0.024847448, -0.0017208854, -0.002683174, -0.041853182, 0.013575532, 0.030187117, 0.0014457001, -0.05444136, 0.013266424, 0.010916953, 0.0020943475, 0.020080661, -0.04289577, -0.0060692406, 0.0021170669, -0.0830302, -0.03101085, 0.027719256, -0.031278063, -0.021044565, 0.048566017, 0.017605191, 0.03866372, -0.05325162, 0.010466319, -0.0024866208, 0.012148383, 0.008614796, 0.038369674, 0.03470868, -0.0512865, -0.0774575, 0.03461822, 0.0022906926, -0.022795204, -0.035924062, -0.045786127, 0.030800747, -0.043125883, -0.0006461462, -0.018719064, 0.00014507024, -0.0062919008, -0.04734793, -0.008970177, -0.024332408, -0.020010939, 0.025271196, 0.046981916, -0.01488971, 0.011228874, 0.01863569, -0.032499485, 0.050902978, -0.03214374, 0.030803248, 0.004459243, -0.018703848, -0.023175597, -0.03409859, 0.03155799, -0.0010928208, -0.030914137, -0.044516556, -0.029639248, 0.006330149, -0.0007603682, 0.008329242, 0.016824814, -0.003671778, 0.031274308, 0.012914586, 0.0132209845, 0.015074538, 0.0014154771, -0.034790806, -0.030005364, -0.009008529, -0.021771375, -0.030778654, -0.029847786, -0.054582067, 0.029327326, 0.0018179637, 0.0069006854, 0.01962987, 0.008624593, -0.020747546, 0.025555292, 0.026150161, 0.06658723, 0.015200265, -0.016212016, 0.05112038, 0.013372309, 0.027916955, -0.024553139, -0.054575596, 0.04909502, -0.02538771, -0.028089436, -0.04895037, 0.016494028, -0.021328036, 0.0010413375, 0.0124871405, -0.006083988, 0.021638812, 0.012932096, -0.022323309, -0.013509874, -0.032355797, 0.0025720787, 0.043094303, -0.01939439, 0.02126092, -0.08362716, -0.00360091, -0.012394751, 0.013299356, -0.032986388, 0.0008868878, -0.022950279, 0.040930953, -0.03575898, 0.027218178, -0.009101074, 0.07202821, -0.03505239, 0.04391189, -0.021644231, -0.008159785, -0.037835717, 0.024302183, -0.035563886, 0.012160889, -0.021580448, -0.0019225195, -0.025233885, -0.042832404, -0.055140033, -5.378255e-05, -0.01646464, 0.0047706435, -0.045033783, 0.01789283, 0.047114477, 0.0057671675, 0.015972316, -0.0023549944, 0.03469263, -0.059515487, -0.06715752, -0.026167255, 0.03377302, 0.025131127, -0.010132667, -0.0045274007, -0.01318972, 0.053092375, 0.04799599, 0.020915546, 0.01378605, 0.055173382, 0.03450796, 0.0053567607, 0.0147721525, 0.020365069, -0.020934094, 0.029753573, 0.024473518, -0.043992966, -0.051820092, -0.0132355755, 0.034416664, 0.00982976, 0.017627286, 0.013414413, -0.021700507, 0.035517536, -0.0067607732, 0.007784811, 0.01242685, -0.0002000969, 0.020029828, -0.05731275, -0.042682335, 0.022340817, -0.03195214, -0.041535113, -0.03958896, 0.018902486, 0.006816842, -0.04023241, -0.024523543, -0.024340954, 0.007801434, -0.023056997, -0.00583048, -0.012195488, -0.06339319, 0.038733754, 0.020658337, 0.033639833, -0.0020369238, 0.018586082, -0.032948453, 0.010369188, -0.06324312, -0.025538199, 0.022278287, 0.0025595727, 0.002063499, 0.0095596295, 0.07096103, 0.038833804, -0.01788366, -0.008145402, -0.0057543493, 0.043316808, -0.064540625, 0.028597597, -0.034057323, 0.0062413556, -0.045068488, -0.0028263687, 0.013970515, -0.00023709398, 0.005980396, -0.060724407, 0.0073521542, -0.050372723, 0.0018321371, 0.007892989, 0.029057402, 0.00634724, 0.011321315, -0.0054764017, -0.02990698, -0.10797895, -0.03741895, -0.012944601, 0.007188481, -0.0572769, -0.005187512, 0.03176288, 0.013659948, -0.019862952, 0.06765276, -0.034896065, 0.019745395, 0.0018026438, -0.055013306, 0.010051364, -0.02728217, -0.012120791, 0.0061404733, -0.072344095, 0.05941877, 0.046542954, 0.019309143, -0.002672961, -0.022488466, 0.0013523215, -0.031338092, 0.06749435, -0.019393558, 0.02664561, 0.006794957, 0.026376313, 0.029679373, -0.050637852, -0.05752869, -0.013299773, -0.03157279, -0.031070879, 0.034490243, 0.029606003, 0.0439221, -0.00027971878, -0.011820723, 0.008324448, 0.0058913943, -0.0074202595, 0.007986732, 0.014350698, 0.0721416, 0.033256102, 0.024453297, -0.024764283, -0.0046968576, -0.02424799, -0.0010394616, 0.028427098, 0.012864979, -0.019230979, 0.069275215, 0.02155377, -0.006081278, -0.014410728, -0.0054857815, -0.008281927, -0.08362716, 0.0053069154, 0.049914144, 0.002488705, -0.003934822, 0.032533437, 0.010275809, 0.013066327, -0.051014703, 0.028530482, -0.03227229, -0.026387777, 0.020178, -0.0018838288, 0.024596076, -0.0019955495, 0.027355745, -0.0026596212, 0.07357938, 0.013127189, 0.025946729, 0.04700276, -0.0046239058, 0.05720937, -0.0138350325, -0.014766317, 0.009201539, 0.013118644, 0.019140102, 0.016537566, -0.012299289, -0.008170832, 0.0158335, -0.07337897, 0.024357209, 0.031399164, -0.060597677, 0.018942038, -0.0050170124, -0.015084596, 0.016141279, -0.041354086, 0.033358652, -0.0067382627, -0.021495827, -0.048216473, -0.029490111, -0.0058035394, 0.026817152, 0.038283538, 0.0068752826, 0.020935137, -0.00061957084, -0.0023503047, 0.011568935, -0.023602262, -0.04382747, 0.018149491, -0.0012591514, 0.038896125, 0.06789621, -0.04451572, 0.0669149, 0.030239226, -0.03432662, -0.013761246, -0.03099584, 0.0053000925, -0.03922045, 0.0066453535, 0.014788411, 0.045321528, 0.057978075, 0.053748526, 0.041783568, -0.084124066, -0.021337831, -0.048077032, -0.023434889, -0.0346523, 0.0047564697, -0.0029714387, -0.006137972, 0.048761107, -0.053551763, -0.0344867, 0.049240507, 0.01022245, -0.008439346, -0.0275424, -0.0037326408, -0.05044109, -0.011837398, 0.004861104, 0.046013948, 0.023517847, 0.04218459, -0.016251203, -0.02127874, -0.055463523, 0.035269994, 0.012457699, 0.010855673, -0.023287525, 0.030044546, -0.016563905, -0.015541327, 0.034500927, 0.0698063, -0.04078308, 0.057767138, -0.019945491, -0.02942508, -0.05257733, 0.05892744, -0.055018727, -0.004324229, 0.011862827, 0.02277019, 0.009082732, -0.02839875, 0.07120031, 0.040759932, 0.0063076373, 0.026648737, -0.057417803, -0.009877283, 0.03892468, -0.034383316, -0.0016190652, 0.021314487, -0.012951271, -0.0008362643, 0.004662049, -0.020235632, -0.015386618, -0.014219802, 0.050949667, 0.0019205132, -0.03943451, -0.012777646, 0.065374985, -0.0004991479, -0.04044917, -0.012017486, -0.016707465, -0.0452738, 0.03313438, -0.0047043613, -0.029334204, -0.024818683, -0.06519282, -7.587007e-05, -0.001946776, 0.029803598, 0.028852304, 0.025138838, 0.01841225, 0.0029064075, -0.007674237, -0.0012856225, -0.017693568, 0.05083618, 0.05573532, 0.0010325833, -0.024904558, 0.0021610465, 0.016450465, -0.031383112, -0.02587753, 0.03812471, 0.03507261, 0.027051432, -0.00021364512, 0.015635904, 0.01066308, -0.037100464, 0.00060862803, -0.021121893, -0.042237483, 0.054252934, 0.017638957, -0.063925855, 0.0439913, 0.014707121], [0.007640036, -0.080500305, -0.04296238, -0.038627826, 0.03642417, 0.024659652, -0.003912362, -0.00069445575, 0.031999484, 0.040144857, 0.023900796, 0.0060097, -0.050868712, -0.034310818, -0.035021286, 0.0012890707, 0.028767098, -0.045531493, 0.032981325, 0.061223876, 0.005937631, 0.0151436, -0.018665629, 0.010024373, -0.015027061, 0.025617853, 0.013328916, 0.013331131, 0.012677055, 0.013414616, -0.023982234, -0.02847882, 0.012354083, -0.0067591877, 0.01233251, 0.0012972488, 0.009123762, 0.0020438398, -0.04737156, -0.035247207, -0.051407315, 0.036271855, -0.01267058, 0.01946757, -0.0021392507, 0.053044427, -0.009483555, 0.024746204, -0.026921574, -0.045904957, 0.028998809, -0.0120834615, -0.035536505, 0.026282663, 0.017075906, 0.02065695, 0.020871155, -0.00033768677, 0.012731235, -0.009535307, -0.017597642, 0.012420468, -0.079387404, -0.010610554, 0.029799752, 0.044614095, -0.034825012, 0.019186597, -0.011771672, -0.05832696, -0.0011830963, 0.030121932, 0.021474075, -0.004184113, 0.032713704, 0.013671714, -0.07935605, -0.029340245, 0.0039810236, -0.0035544005, 0.009759863, 0.02027671, 0.0058926516, -0.0318809, -0.04552195, 0.020330038, -0.010720108, -0.03187315, 0.0473075, 0.017759735, -0.055337355, -0.0076786256, 0.030123977, -0.01049521, -0.014608275, 0.023116209, 0.011796206, 0.047942664, 0.010670527, 0.022248331, 0.050183456, -0.0323278, -0.013835276, -0.04626479, -0.014500086, 0.032659523, -0.0039966987, -0.018110711, -0.015660692, 0.020844577, -0.0030435259, 0.001125509, 0.010250378, -0.07346919, 0.016148312, -0.0061662337, 0.026905997, 0.0058756135, -0.02812716, -0.0020096793, 0.0014427506, 0.029266983, 0.00051078957, 0.0044783535, -0.028932022, -0.019967478, -0.0012168309, -0.0072754296, -0.06873409, -0.008160707, 0.017118778, -0.0045783645, 0.035734143, -0.011519174, -0.0346376, 0.016018143, -0.0108433105, 0.038798198, -0.0088272635, 0.03235221, -0.017295288, 0.00066291477, 0.017770639, 0.009250011, 0.011929559, -0.022656703, -0.02201728, -0.054029886, -0.008684275, -0.0058793616, -0.022054933, -0.007501349, 0.0065077967, 0.008473178, 0.0069760773, -0.035644185, 0.01341402, 0.018803464, -0.03544382, 0.020393759, -0.0057212524, 0.0026807082, 0.013773259, 0.014880538, -0.009612786, -0.072159335, 0.0033490963, -0.0014366169, -0.014055637, 0.010560294, 0.067660026, -0.013226691, 0.019751439, 0.026238471, -0.06481473, 0.0009645029, -0.007716364, -0.019409046, 0.044917364, 0.026053846, -0.014408082, 0.016257608, -0.019884204, -0.011845276, -0.028007215, 0.044059433, -0.027209854, 0.013672566, 0.011762472, 0.03533512, 0.027549328, -0.01856732, 0.03334103, -0.0061997343, -0.0329018, 0.027785044, -0.037900656, 0.0025727747, 0.006099148, 0.057673093, -0.0068557914, 0.013015934, 0.020943396, -0.015955104, -0.049640298, -0.04975206, 0.049889047, -0.008634013, 0.04771129, -0.01566376, -0.016867813, 0.020624109, 0.039208468, 0.060057305, 0.021787783, 0.03949306, 0.013210643, -0.019928163, 0.04592949, 0.05007987, -0.0057767946, 0.002335397, 0.025690775, -0.038103063, -0.051602356, 0.033997238, -0.016217142, 0.018078338, 0.0011638438, -0.012101181, 0.109499104, -0.017495437, 0.0005990447, -0.05630612, -0.018541764, -0.0198848, -0.03980683, 0.035164405, -0.036232494, 0.029218936, -0.024446107, 0.039899517, 0.007223294, -0.007166729, -0.011314807, -0.0060892664, -0.02392499, 0.018249057, -0.036756404, 0.021622341, 0.040138386, 0.0075854673, -0.034323424, 0.025840024, 0.0041318075, 0.0054350193, -0.009621263, 0.003736746, 0.029732794, 0.019842079, 0.02298519, -0.031937636, -0.0058895415, -0.053463552, 0.03541639, 0.006780911, 0.0091635445, -0.015803725, 0.020834012, -0.048581917, -0.05052694, -0.059091438, 0.049792957, -0.007852783, -0.039122596, 0.02887895, 0.034976307, 0.008265318, 0.050978098, 0.029293219, -0.06858687, -0.025673905, 0.0199869, -0.011743731, 0.009800413, 0.008145671, 0.025175555, -0.070191145, 0.00053762394, -0.03417111, -0.028455649, -0.0050121443, 0.0013858447, 0.0055563278, 0.05361553, -0.016159981, 0.03008445, 0.0011832668, -0.06986811, -0.00068734254, 0.006412556, -0.0049169036, 0.016735088, 0.001751239, -0.020822193, -0.041708235, -0.042932566, 0.046974923, 0.020663636, -0.0036055986, -0.035454046, -0.018193355, -0.06582268, 0.011850815, 0.030071503, -0.010495636, 0.049090322, 0.06785903, -0.03590418, -0.031780038, -0.017659552, 0.0071442393, 0.025424644, -0.039994076, 0.04891347, 0.037154406, 0.009358626, 0.021549936, -0.048853155, -0.017755987, 0.043336526, 0.032828197, -0.015879286, -0.014977481, 0.04167825, 0.024372399, -0.031712953, 0.024722353, 0.012171717, 0.031527713, -0.006872914, -0.068690464, 0.008819724, -0.011869298, 0.04681954, -0.06754962, 0.011266676, -0.052332934, 0.009246007, -0.0013030417, 0.022825038, -0.013789956, 0.01036862, 0.022209637, -0.03103856, -0.007089846, -0.0058173444, -0.014685519, -0.013930005, 0.023905417, 0.0047058067, -0.021234911, -0.06348477, 0.049508084, 0.021132855, -0.019039754, 0.069355614, -0.018629678, 0.025716672, -0.019779041, 0.04913973, 0.010986236, -0.00485199, 0.015929887, 0.009898209, 0.084178396, -0.042775217, -0.016592653, 0.028961325, -0.020904548, 0.010946537, -0.05554692, 0.06330724, 0.030697465, 0.044511955, 0.048899498, 0.051171985, 0.016213054, -0.04600173, 0.027964793, 0.0032668044, 0.032524247, 0.0019920454, 0.054058507, 0.03817837, -0.0026749156, 0.034180306, 0.03491872, 0.03838725, 0.0099970065, 5.043153e-05, 0.048468787, -0.008091108, -0.011956702, -0.0024234394, -0.046282172, -0.015566815, -0.006672636, -0.0068143895, 0.02555243, 0.047411084, 0.00026681004, -0.017496333, 0.030742105, 0.051543746, -0.04382091, -0.028027661, 0.03036012, 0.031507436, 0.025316969, 0.023804704, 0.052584577, -0.044991054, 0.025205541, 0.0016274389, -0.038479682, 0.009046325, -0.034781735, -0.06905984, 0.013981459, 0.04863984, 0.032870024, 0.0035283328, 0.07282585, 0.021635465, -0.036830008, 0.019138593, -0.024402725, -0.0852947, -0.008781901, -0.019375758, -0.038624756, 0.012017696, 0.015096064, -0.001043217, -0.015423336, -0.033447687, 0.0071205567, 0.020962136, -0.05678726, 0.023692936, -0.024934981, -0.017562438, 0.016299605, -0.061133917, 0.014314972, 0.062292475, -0.06868842, -0.020995105, -0.024139924, -0.041879635, -0.020545736, 0.028398827, -0.047417905, 0.00065688766, -0.0066062748, 0.03062284, -0.041712325, 0.003991811, 0.043651894, 0.013209653, -0.014104301, -0.036986753, -0.02437427, -0.007647191, -0.015859693, 0.042263664, 0.011951932, -0.0012670921, -0.0020727187, 0.006818138, 0.028848536, 0.025132278, 0.01139071, 0.037974257, 0.013642068, -0.029642662, 0.012729702, -0.05044567, -0.029109554, 0.01352042, 0.021669712, 0.0073255203, 0.064920366, -0.053447876, -0.03352061, 0.016345266, 0.031158846, -0.04841665, 0.024469344, 0.035242096, 0.049874056, -0.05966731, -0.0053187376, 0.010634407, -0.06000125, 0.036168925, 0.04376366, -0.020617295, 0.0040028533, -0.025615126, -0.060600296, 0.011938642, -0.057217974, 0.024101755, 0.03022484, 0.013602201, -0.026641306, -0.018798692, -0.035442457, -0.027253471, 0.011614925, 0.0056629833, 0.029421175, 0.0048214924, -0.011068697, 0.02280868, -0.025565121, 0.008185412, 0.006092333, -0.022594346, -0.019675622, -0.032533787, 0.030805485, -0.006076429, -0.005110409, 0.015719471, 0.007311208, 0.010480217, 0.004969103, -0.02333898, 0.041632205, -0.0009277016, 0.01448833, -0.055241603, 0.0038609083, -0.0049013994, 0.032684486, 0.011333123, -0.001243069, 0.008446599, -0.027020052, -0.11416607, -0.057941735, 0.05522968, -0.009127595, -0.041048538, 0.0129234195, 0.011093402, 0.0014567641, -0.0457005, 0.01564604, 0.0113900285, 0.024676638, 0.004589269, 0.023676239, 0.009775708, -0.069952615, -0.052024294, 0.015871448, -0.009819155, -0.054783635, -0.06336653, -0.024908403, 0.021579241, -0.030565595, 0.028683698, -0.022479001, -0.0126726255, -0.009534966, -0.013267921, -0.0070165843, -0.02131686, -0.008478632, -0.0059337122, 0.026110582, -0.008926551, -0.0047497638, 0.05267641, -0.01058568, 0.041622277, -0.0025413402, 0.020349462, 0.031040436, -0.0044417228, -0.0020671815, -0.03541247, 0.03216539, 0.013981459, -0.05111303, -0.048839524, -0.055937357, 0.016504398, -0.022346448, 0.02005045, -0.005764869, -0.031449508, 0.056060776, -0.010903432, 0.027978081, -0.016295517, 0.0127445245, -0.03287079, -0.0050946916, 0.009234422, 0.016948912, -0.01770513, -0.0046695163, -0.038482152, -0.011325626, 0.036742773, -0.0008089277, 0.019420227, 0.051990476, -0.014821417, 0.013598793, -0.01231347, 0.063031234, 0.016125139, -0.020870814, 0.07371862, -0.008787949, 0.0655051, -0.019499281, -0.067510776, 0.06714617, -0.016638996, -0.033825923, -0.0063058147, 0.0010011339, 0.012141901, 0.050929025, -0.0017010417, -0.0031161911, 0.019359913, 0.020097218, 0.0060647316, -0.012745887, -0.039069783, 0.0035581698, 0.018298466, 0.017927215, -0.001772749, -0.04851104, 0.015842995, 0.007984538, 0.008685468, -0.023647616, 0.011647979, -0.0452548, 0.045472883, -0.049969465, 0.029146867, 0.02061116, 0.035848636, -0.03686374, 0.046726853, 0.005852272, -0.015328032, -0.023875836, 0.032480627, 1.03077955e-05, 0.005356646, -0.040834542, -0.011487143, 0.0086224275, -0.045276605, -0.021118201, 0.0035683713, 0.038374472, -0.007708527, -0.030054932, 0.03172586, 0.035902474, 0.03003487, 0.001955031, 0.0016078883, 0.030769194, -0.042059213, -0.0464747, -0.028109442, 0.021973835, 0.025620239, -0.01483198, -0.009603117, -0.012772976, 0.032034926, 0.06398261, 0.027074914, 0.04043109, 0.051556055, 0.048553295, 0.0070725107, 0.027347518, 0.047032848, -0.019731676, 0.018266872, 0.0027471553, -0.05704419, -0.045524675, -0.025583437, 0.023828214, -0.002570645, 0.017265642, 0.040785477, -0.0056987624, 0.0141978385, -0.028084908, -0.009030822, -0.0003162193, -0.0077124457, 0.010781102, -0.038694613, -0.037985843, 0.05055692, -0.020815952, -0.0423986, -0.05511212, 0.00941911, -0.022285283, -0.035658497, -0.028084738, -0.017167846, 0.05775705, -0.01195159, -0.013683982, -0.014903198, -0.06690219, 0.025186969, -0.009793939, 0.0012393207, -0.033478357, -0.0062207966, -0.0098968465, 0.0069537577, -0.079730876, -0.022938507, 0.0006273273, -0.014119465, -0.021300847, -0.0135059375, 0.04435657, 0.0059889997, 0.012151272, -0.021236017, -0.005483406, 0.035391346, -0.061368354, 0.012858676, 0.01637184, -0.020733152, -0.03615804, 0.002966771, 0.00664265, -0.03002039, 0.022406591, -0.032368243, 0.02481572, -0.0018212426, 0.0050915396, -0.00717184, 0.024048682, -0.01829131, -0.011257475, 0.02399314, -0.01404518, -0.08595167, -0.03977003, 0.011299729, -0.036774464, -0.04330343, 0.007044313, 0.014736739, -0.03169264, -0.025683703, 0.07444375, -0.016454648, -0.010254297, -0.00493803, -0.04905187, 0.008017079, -0.01844875, -0.03428935, 0.010555608, -0.034118973, 0.056124154, 0.00767607, 0.030843478, -0.034174856, -0.014428187, 0.0033009863, -0.013393489, 0.039210852, -0.0069322903, -0.0080087315, 0.008024575, 0.014255766, 0.011621911, -0.04396266, -0.04876933, -0.013470489, -0.0004882147, 0.00781448, 0.02777312, 0.037403155, 0.016298413, 0.009869586, -0.0017930452, 0.043734014, -0.0033911795, -0.011632645, 0.006946261, 0.008165819, 0.031927243, 0.0056374273, 0.00012164902, 0.0074229757, -0.015114167, -0.025331322, 0.0042001284, 0.044832945, 0.007109823, 0.020233562, 0.05570639, 0.03762601, -0.00032030832, -0.008751914, 0.010574872, -0.0182954, -0.057204343, 0.0024931235, 0.05448965, 0.010936486, -0.0040022354, 0.0317958, 0.026783912, 0.04024436, -0.068319045, -0.016962713, -0.027700538, -0.056033514, -0.005104488, 0.0016631329, -0.006424227, 0.013875825, -0.0014219645, -0.016467597, 0.052945267, 0.025519034, 0.031343874, 0.026396133, -0.03075778, 0.036324073, -0.045547973, -0.0164995, 0.015676027, 0.010537793, 0.015732933, 0.012493389, -0.04031183, 0.029796341, 0.01301159, -0.05240381, 0.038316716, 0.015687954, -0.066605054, -0.005830634, 0.0009652697, 0.014672168, 0.014983616, -0.02363569, 0.050165057, 0.034625333, -0.0058705024, -0.058046006, -0.019999167, -0.02515153, 0.011063246, 0.050463386, 0.021243598, -0.006118805, -0.037454266, -0.029698974, 0.047815904, -0.022660347, -0.032634903, 0.059977397, -0.008759229, 0.059248865, 0.044063527, -0.019505415, 0.07082222, 0.011951334, -0.03618462, -0.037447453, -0.030745512, -0.010660135, -0.031044181, 0.02792816, -0.021410909, 0.057245918, 0.031455982, 0.06141742, 0.017258571, -0.098888725, -0.008831991, -0.017772343, -0.027663056, -0.056175265, -0.029679295, -0.0064600487, 0.008226132, 0.055864163, -0.008113342, -0.019887911, 0.061670944, 0.012124736, -0.005452057, -0.009887305, 0.0010934782, -0.04912269, 0.03566122, -0.0050377003, 0.0467105, 0.02962784, 0.014508605, -0.030738356, -0.020712024, -0.030316163, 0.030471718, 0.005500231, 0.035428148, -0.028450195, 0.029833656, -0.00013970895, 0.0015862078, 0.02849986, 0.047142573, -0.044154845, 0.0447757, -0.00043309777, -0.0038042152, -0.03483251, 0.025877507, -0.027791178, 0.04073002, 0.02490636, 0.012990889, 0.021364566, -0.043531265, 0.09932012, -7.871407e-05, 0.03024256, 0.026957355, 0.012677736, 0.041875035, 0.016335044, -0.02924756, -0.0293221, -0.001507579, -0.0105500715, -0.01844056, -0.00808506, -0.020428345, 0.00013630142, 0.0071140826, 0.050139163, -0.028554127, -0.059278168, -0.049298864, 0.049952257, -0.022598095, -0.034902025, -0.017837085, -0.008998535, -0.030420434, -0.0064170714, 0.0023268356, -0.025752109, -0.008499927, -0.06126749, 0.006419542, -0.00037339138, 0.028193522, 0.008498735, 0.02941589, 0.02714626, -0.012704316, -0.0064375163, -0.0041912687, 0.0068203104, 0.06513198, 0.015712423, 0.007665379, 0.031929802, 0.01576769, 0.013170466, -0.0070934244, -0.015579509, 0.053278867, 0.04778319, 0.025632847, -0.020887172, 0.012200681, 0.018987896, -0.031601656, 0.01690636, -0.012972915, -0.011955509, 0.022740785, 0.039527368, -0.037905235, 0.024820829, 0.019845147], [-0.033255253, -0.06694621, -0.044297207, -0.041548606, 0.029665925, 0.029204877, 0.009055104, -0.019413458, 0.05493884, 0.008316762, 0.010589569, 0.0058617652, -0.036145218, -0.016046407, -0.013769177, 0.012997659, 0.0078014336, -0.05279201, 0.044416547, 0.0721076, -0.025910903, 0.014870147, -0.021088181, 0.033522867, -0.012510484, 0.041318774, 0.022560904, 0.00079833466, 0.030063849, -0.00792658, 0.0014099643, -0.02867554, 0.0027704877, -0.0035964227, 0.023669705, 0.018033534, -0.013872943, -0.0060276436, -0.04571012, -0.027876193, -0.072078116, 0.03226155, -0.013283522, 0.023247639, 0.026553959, 0.059120446, 0.010089147, 0.01892559, -0.012121235, -0.043025106, 0.04278919, -0.008021868, -0.0405878, 0.0056004147, 0.011106095, 0.026864888, 0.027807398, 0.029974448, 0.023448536, 0.0027543146, 0.0033973688, 0.0038296427, -0.09111945, -0.010416411, 0.027835092, 0.016263431, -0.0018204205, 0.017238056, 0.014775688, -0.05442352, -0.026539767, 0.0033087162, 0.010423783, -0.02448251, 0.043457862, 0.017314155, -0.07702054, -0.018922273, -0.002266264, -0.0147086, 0.019273197, 0.013503219, 0.0015185223, -0.06563467, -0.058952358, 0.031962875, -0.05367204, -0.005323583, 0.048224095, -0.004121888, -0.052634243, 0.0064482368, 0.058088318, 0.01077139, -0.00038797056, 0.0291717, -0.009779531, 0.054284178, 0.030674186, 0.016651219, 0.05833455, -0.036634974, -0.008563068, -0.020469364, -0.016675916, 0.017312149, 0.0035409457, -0.038212426, 0.011010255, 0.0025803267, 0.009509979, 0.0006354976, 0.006279225, -0.07285663, 0.042643957, 0.027146144, 0.019890448, -0.02993308, -0.042870283, -0.039566364, 0.0011279715, -0.009207343, -0.0020644458, 0.018576141, -0.027460575, -0.016415117, 0.004475577, -0.007347112, -0.051132124, 0.0136071695, 0.035318773, -0.015072426, 0.03583042, -0.0308972, -0.04104846, 0.030775925, -0.0058055506, 0.048394028, -0.017440429, 0.018131034, -0.016457694, -0.010115249, 0.029683527, 0.002544571, 0.018599732, -0.037621904, -0.009402527, -0.06003167, -0.008287848, -0.015874032, -0.002905448, 0.004609201, 0.0069416324, 0.00073050894, 0.004662282, -0.043846756, -0.008291051, 0.016174316, -0.052221388, 0.0073804716, -0.009717142, 0.033746254, 0.0169568, 0.017365599, -0.0035914464, -0.0533818, 0.018379668, -0.004756648, -0.014446143, 0.035441894, 0.06614244, -0.010042678, 0.010674812, 0.044858247, -0.04521064, -0.013499163, 0.021751048, -0.025517957, 0.021079427, 0.022238914, -0.006420775, 0.0061684726, -0.002157153, -0.013186299, -0.020273143, 0.037818745, -0.03398751, -0.022025853, 0.03617913, 0.02880861, 0.0318334, -0.04474213, 0.029433787, -0.017845148, -0.022074327, 0.03484031, -0.015903108, 0.01223591, -0.0041867644, 0.030190833, 0.0031468929, -0.001185568, 0.014011728, -0.028707242, -0.058476843, -0.04525893, 0.026569348, 0.0065931035, 0.041329786, -0.034657475, -0.004035631, 0.024812423, 0.03205872, 0.06015184, 0.035431575, 0.054244734, 0.02085503, -0.046426717, 0.03806498, 0.055454906, -0.03516027, 0.013668728, 0.026203956, -0.03233039, -0.041020814, 0.00996043, 0.0006063768, 0.012634017, -0.01164225, 0.0021601021, 0.0754517, -0.021667004, -0.0036445274, -0.0565873, -0.018703498, 0.0027683221, -0.033304647, 0.015424824, -0.06625836, 0.03542641, -0.025264347, 0.032604687, 0.034060314, -0.017243955, -0.028135654, 0.0074857124, -0.034588173, -0.0025390415, -0.02249455, -0.0032117695, 0.027793437, 0.021685805, -0.054025017, -0.013097001, -0.0029540593, 0.006414324, -0.02018479, 0.0007958926, 0.020470101, 0.016582655, 0.014743159, -0.051943824, -0.0025791288, -0.032696795, 0.020811902, 0.029057981, 0.037722904, -0.008599676, 0.012389255, -0.05942419, -0.035407245, -0.073387444, 0.039443612, 0.00556982, -0.021509971, 0.03781727, 0.023896405, 0.008784907, 0.05604175, 0.025607163, -0.073621884, -0.028807506, 0.0011534061, 0.004931972, 0.013089941, 0.0023230314, 0.03744165, -0.054610036, -0.0035714488, -0.021692991, -0.011967095, 0.012570983, 0.01620519, 0.027593922, 0.05749263, -0.0030403624, 0.043460075, -0.0005050068, -0.058779843, -0.017559953, 0.025925834, 0.0025633704, 0.0151902, -0.00031406264, -0.0030630322, -0.022572882, -0.038179252, 0.04753349, 0.029559027, -0.008637276, -0.02065441, -0.011944702, -0.07698663, -0.0029635052, 0.04320748, -0.021427771, 0.048744585, 0.064435184, -0.020398842, -0.020237733, -0.008804075, -0.021610698, -0.010487185, -0.06504451, 0.029302929, 0.05388165, 0.015893614, 0.011071076, -0.06455904, -0.029320898, 0.030505108, 0.042697035, -0.009449894, -0.012437912, 0.012524169, 0.025508605, -0.02460277, 0.028814876, 0.0042338553, 0.01828475, 0.022431519, -0.068704516, 0.00037285723, -0.010953118, 0.048078123, -0.069100045, -0.009345391, -0.046612315, -0.012500577, -0.0014779744, 0.033014175, -0.014448724, 0.01121152, 0.032552663, -0.029720755, -0.0050728302, -0.005353441, -0.011656626, -0.014154935, -0.00057578145, 0.011731272, -0.03478391, -0.028474644, 0.029215934, -0.00017251326, -0.04282089, 0.07078574, -0.024990097, 0.038685367, -0.023289291, 0.05836699, 0.013572335, -0.017084988, 0.023381447, 0.00049726584, 0.07146916, -0.055746857, -0.012885968, 0.04002013, 0.009735942, 0.011663077, -0.031908322, 0.06700814, 0.011172078, 0.057107426, 0.055170335, 0.038480047, 0.022320934, -0.02454923, 0.039501116, 0.027013902, 0.02037205, 0.04116211, 0.032581046, 0.019353924, -0.013098624, 0.032955196, 0.040552415, 0.0149735445, 0.03166798, -0.0026957963, 0.027837487, -0.016250806, -0.008807761, 0.017754491, -0.048909727, -0.051877104, 0.00070369197, -0.016508194, 0.019063476, 0.0412837, -0.007982057, -0.050592836, 0.031005574, 0.04301773, -0.0131123, -0.024133613, 0.02155734, 0.0046954574, 0.016151993, 0.046474632, 0.04787649, -0.05067983, 0.027625902, 0.022035623, 0.0058883056, -0.0024184112, -0.022458427, -0.05162054, 0.036993776, 0.017167652, 0.028949054, -0.006256924, 0.07760803, 0.03552451, -0.017694406, 0.017742326, -0.01717908, -0.054966856, -0.014475219, -0.027268894, -0.033272207, 0.00031341755, 0.0021329166, -0.018011788, -0.0131489765, -0.036417075, 0.023900645, 0.01912059, -0.033702753, 0.017616075, -0.025752028, -0.028455844, -0.014259439, -0.06607037, 0.030448595, 0.06438874, -0.05190346, -0.033473473, -0.0062644803, -0.039165676, -0.015120807, 0.03655328, -0.00390832, -0.00038177316, 0.007892851, 0.032374255, -0.043286927, -0.0034502654, 0.010855066, 0.007861795, -0.019595372, -0.021445418, -0.050057326, -0.004978234, 0.008563736, 0.03509023, 0.00041156213, -0.010317644, 0.001451618, 0.010228047, 0.01452724, 0.024877392, 0.012202734, 0.025201084, 0.016218828, -0.030360125, 0.001077102, -0.013299741, -0.009831045, -0.0027351463, 0.0344422, 0.005537427, 0.053044144, -0.023961652, -0.031636097, 0.008499227, 0.040044643, -0.034147676, 0.010505063, 0.032838713, 0.023610175, -0.05058325, 0.011968984, -0.0011792093, -0.06001545, 0.026732186, 0.06794811, -0.01644258, 0.029877052, -0.04390389, -0.060148153, 0.007289055, -0.03182575, 0.05262245, 0.050992552, 0.0033446562, -0.040634803, -0.022650108, -0.03227915, -0.02393069, 0.006074239, 0.0025676093, 0.025275039, 0.010569847, -0.028257526, 0.034267478, -0.022627624, 0.01836559, 0.018112788, 0.00572722, -0.019130174, -0.046612866, 0.015145412, 0.017894935, -0.01124852, 0.027138771, 0.016027607, 0.028075429, -0.015176008, -0.014718991, 0.022819672, -0.00034981858, -0.0015050677, -0.0327355, -0.018580563, 0.00072838936, 0.022068428, 0.039019886, -0.0124733, 0.012621829, 0.004711861, -0.1099481, -0.06390659, 0.07165346, -0.01761165, -0.022139942, 0.027391275, 0.042833425, 0.03274877, -0.02349535, -0.01420516, 0.008086007, 0.016401663, -0.013375307, 0.036289714, 0.021648942, -0.07490781, -0.058259353, 0.015226877, -0.036162175, -0.04939658, -0.07502263, -0.030482322, 0.008522634, -0.036384083, 0.03300754, -0.04171163, -0.0014833192, -0.019747334, 0.012479567, -0.001077655, -0.005941018, -0.019049354, 0.020052826, 0.045699064, 0.0016882939, -0.005237326, 0.028184172, -0.0027790118, 0.041482806, -0.006986603, 0.03584227, 0.001095533, -0.023693666, -0.00841334, -0.04621955, 0.02903826, 0.016022354, -0.043730274, -0.032518383, -0.06573198, 0.002585856, -0.0153284315, 0.026387343, -0.010684764, -0.028861323, 0.0595215, -0.020070702, 0.0072234403, -0.008692199, 0.018199874, -0.025015716, -0.008457205, -0.014498487, 0.0041704993, -0.038202014, 0.0029994457, -0.030646909, -0.01584468, 0.017513415, -0.00083554204, 0.021674378, 0.04318951, -0.027384086, 0.03305288, 0.012060078, 0.04255843, 0.021919047, 0.0113672605, 0.049218256, -0.003941265, 0.0748339, -0.013996062, -0.07009863, 0.069248594, 0.00112834, -0.034125928, -0.0051805587, 0.018793257, 0.01465727, 0.04506725, 0.017919263, 0.005838911, 0.013495846, 0.008850889, 0.013843822, -0.0057662935, -0.032582894, 0.010899301, 0.030519366, 0.0051665516, -0.0075125294, -0.056653656, 0.04495372, 0.019202791, 0.002845363, -0.031434648, 0.0037645355, -0.040625032, 0.04803684, -0.057112217, 0.014978797, 0.02865545, 0.024786068, -0.009122192, 0.06281842, 0.01344576, -0.020165622, -0.026451759, 0.05438002, 0.0012932967, 0.010169436, -0.016323147, 0.0042956914, 0.02472248, -0.049598306, -0.038266983, -0.013415119, 0.029579207, -0.011278056, -0.03403893, 0.019546345, -0.0012538545, 0.03850069, -0.007310573, -0.015478274, 0.034142144, -0.05804703, -0.04010034, -0.046197157, 0.033071782, 0.01587159, -0.0011941154, 0.0016534366, 0.0060549215, 0.05349976, 0.043489933, 0.037696917, 0.03422656, 0.04969562, 0.05904806, 0.017823791, 0.026363382, 0.021240883, -0.029354535, 0.03554363, -0.009034829, -0.044998687, -0.06026759, -0.011463655, 0.0217575, -0.0104835, 0.03786611, 0.016324254, -0.007841429, 0.028206475, -0.04528584, -0.0018808739, 0.0028734242, 0.010531512, 0.006780719, -0.0605787, -0.034853946, 0.04091661, -0.02453301, -0.02894758, -0.041509166, -0.0057775364, -0.022798294, -0.013637027, -0.029263854, 0.0021508867, 0.03046555, 0.010827788, 0.009968908, -0.002189223, -0.054657035, 0.007860413, 0.008544199, 0.0013885845, -0.024481218, 0.01068822, -0.0044718906, 0.001943539, -0.06431501, -0.021840625, -0.022957535, 0.015521035, -0.016475756, 0.015274061, 0.036915995, 0.012021282, 0.042851485, -0.006867355, -0.032231968, 0.049537115, -0.044708308, 0.026982477, 0.0064725652, -0.016528836, -0.07398493, -0.0020821854, 0.012030957, -0.00722639, -0.006674752, -0.04019928, 0.020778634, -0.015390729, 0.015556421, -0.0067062695, 0.0072218743, -0.021944573, -0.011453057, 0.007610305, -0.011765921, -0.09821903, -0.03851543, 0.019560352, -0.054425728, -0.054459643, -0.024717689, 0.0065518185, -0.017621052, -0.020126319, 0.05090837, -0.0035955012, -0.0026434525, 0.0076573933, -0.04386334, -0.002463567, -0.023828212, -0.03587281, 0.013913859, -0.039915442, 0.04117907, 3.87049e-06, 0.04909869, -0.029941374, -0.0058440715, 0.0073694247, -0.010599245, 0.043219738, 0.03257773, 0.008543923, -0.009250287, -0.013859119, 0.020602804, -0.02856643, -0.047961637, -0.02327676, 0.016988134, 0.010314396, -0.008223133, 0.025236335, 0.002049148, 0.0016396134, 0.0077295536, 0.02905706, -0.0076731546, 0.0059037874, 0.031126114, 0.005137062, 0.003033727, -0.004092398, 0.01654948, 0.027128818, 0.025897633, -0.026957596, 0.013514253, 0.053970113, 0.008511024, 0.012064871, 0.06059787, 0.029830052, -0.0074165044, -0.0008037718, -0.0020679478, -0.0017568339, -0.053533852, -0.023917234, 0.03839075, 0.004659333, 0.005392883, 0.004194874, 0.008902496, 0.03136719, -0.078108706, -0.009620841, -0.057298, -0.03910006, 0.0012805793, -0.024875088, -0.0040192273, 0.02472248, 0.0003175645, -0.016345633, 0.03176161, 0.029656801, 0.0021394596, 0.0018298203, -0.04814595, 0.042830843, -0.048082545, 0.0105371475, 0.025092939, 0.009206606, 0.010585468, 0.034049254, -0.026180547, 0.007359737, 0.030161807, -0.047072902, 0.026623074, 0.022342682, -0.051706802, -0.012577434, -0.03263323, -0.007315042, 0.030234057, -0.040723454, 0.061118357, 0.031236697, -0.0141671, -0.03563892, -0.008440502, -0.03169821, 0.00889494, 0.043993097, -0.0070570093, -0.003822662, -0.01694132, 0.011133741, 0.05632485, -0.044930864, -0.050146807, 0.08609371, 0.009580016, 0.044409636, 0.037975315, -0.046633877, 0.07643075, 0.022675911, -0.024171026, -0.055440165, 0.00066692237, -0.0320425, -0.04904685, 0.009065425, -0.02737973, 0.03794739, 0.039732423, 0.030178996, 0.013901327, -0.07096194, -0.025571039, -0.012646366, -0.024681564, -0.041614037, -0.016008347, -0.008403387, 0.01256868, 0.019277805, 0.0008091168, -0.036618706, 0.07596925, -0.011204885, 0.008779009, 0.01140926, -0.0025681623, -0.035621043, 0.0366082, -0.030502781, 0.07489288, 0.009083948, 0.032225702, -0.008353439, 0.008704548, -0.0324642, 0.02518915, 0.0030093985, 0.020711914, -0.018667558, 0.015869746, -0.043037914, 0.0078757275, 0.005996864, 0.06861273, -0.0246377, 0.030429771, 0.007902158, -0.040613607, -0.029391028, 0.045138948, -0.040707603, 0.037814286, 0.008797762, 0.03491993, 0.011810893, -0.029366147, 0.08070378, 0.033310913, 0.015940338, 0.009127583, 0.018194115, 0.037044644, 0.02998137, -0.04929456, -0.0077577066, 0.0026363567, 0.004638506, 0.004676658, 0.0010196437, -0.0024704786, 0.00068286504, -0.005629121, 0.03896441, -0.0030363996, -0.034172375, -0.05260402, 0.05755032, -0.01402813, -0.026996853, -0.026497744, 0.023846552, -0.016261956, 0.003286599, -0.007046504, -0.022149974, -0.010348585, -0.06321358, 0.0008358415, -0.0014817526, 0.0066712503, 0.000756629, 0.035548795, 0.037554078, -0.022175374, -0.019545376, -0.0038011898, 0.013016089, 0.052505594, 0.0041568372, 0.025920857, 0.04185198, 0.0041237306, 0.024399938, -0.002045554, -0.050901737, 0.05570999, 0.043449845, 0.0144150425, -0.0077395057, 0.011993405, 0.0070310677, -0.0065348623, 0.0083639445, 0.009166058, 0.0007124467, 0.04331558, 0.044705637, -0.052432053, 0.011086743, 0.002244147], [-0.015770035, -0.09401073, -0.06199111, -0.027973864, -0.017026667, 0.01544319, 0.011273817, -0.019399628, 0.037292473, 0.016483052, -0.0033961304, 0.006207367, -0.06853254, -0.0085246125, -0.02785612, 0.020047005, -0.0031994365, -0.0458243, 0.029681856, 0.054652076, -0.03593366, 0.021094084, -0.043740068, 0.027957626, -0.033854835, 0.056422323, -0.00033677093, 0.0028024393, 0.019203836, 0.006514363, 0.015870865, -0.035069287, -0.005945935, 0.01319384, 0.023347043, 0.0024489763, 0.0016411097, -0.016918397, -0.043980073, -0.053239126, -0.07456193, 0.011049153, 0.005904431, -0.000122031524, 0.0068671494, 0.057788353, 0.033778187, 0.020987619, -0.027832324, -0.04459722, 0.059141755, 0.0019626548, -0.040569503, 0.0036429001, 0.030119454, 0.021547247, 0.019652713, 0.028384848, 0.040746346, -0.0095092105, 0.01735374, -0.018342229, -0.052987397, 0.0037285874, 0.027767472, 0.031024428, -0.015811428, 0.0012460299, -0.0018509993, -0.043906085, -0.023102403, 0.015767723, -0.0055539003, -0.030031936, 0.040885296, 0.0026323618, -0.055659905, 0.007536856, -0.016540347, -0.046685968, 0.0018875411, 0.029698998, 0.01146149, -0.04766222, -0.051329028, 0.013781893, -0.029278543, 0.025033379, 0.06549732, 0.01807104, -0.044306688, 0.015381837, 0.016715385, 0.012504509, 0.013656477, 0.018243825, -0.0041179433, 0.048628543, 0.010863738, 0.04313284, 0.03826692, -0.032726962, -0.032393165, -0.014877695, -0.006464287, 0.021986425, 0.027017463, -0.0014183626, -0.00044391502, -0.01472273, 0.007720242, -0.0021451383, 0.007159032, -0.0771255, 0.027216863, -0.0063569173, 0.035199214, -0.04093041, -0.052273702, -0.019899258, -0.012530674, -0.010298017, 0.017585283, 0.026117, -0.021323035, -0.03346686, -0.022939952, -0.020580696, -0.05353146, -0.0011653898, 0.027225662, 0.003364551, 0.04183871, 0.0064097, -0.046223108, 0.009716506, -0.013641365, 0.035708092, -0.050056722, 0.014703332, -0.0523522, -0.0057603787, 0.04419481, 0.005152843, 0.014378967, -0.066149205, -0.0059260847, -0.049613822, -0.030701416, -0.02108898, 0.020577086, -0.00068572245, 0.023105236, -0.024748938, -0.004837501, -0.038460456, -0.006227668, 0.03132398, -0.017256746, 0.032380532, -0.019228086, 0.018310592, 0.031616315, 0.019200226, -0.013887905, -0.036433205, 0.019039173, -0.00064557156, -0.02343276, 0.055012982, 0.05210408, -0.0037687663, -0.020963708, 0.050362702, -0.05778136, -0.028210992, 0.0037905334, -0.029283391, 0.008936046, 0.02188898, -0.004486294, -0.01272579, 0.0018049837, 0.008054982, -0.038421206, 0.037878945, -0.0255991, -0.024335926, -0.0019398726, 0.038169473, 0.025761057, -0.01308602, 0.02113965, -0.0058033774, -0.026875354, 0.030497503, -0.0255603, 0.021871388, 0.02024776, 0.042454787, 0.005084722, -0.01318211, 0.0066722594, -0.025313757, -0.06820163, -0.030749688, 0.013339218, 0.006583386, 0.04767846, -0.042332534, 0.0031962784, 0.051179253, 0.03671818, 0.051767305, 0.022327483, 0.039022118, 0.031147135, -0.038985122, 0.0454255, 0.054480646, -0.037087657, 0.021521984, 0.037806764, -0.03993882, -0.047402363, 0.005372996, -0.022179285, 0.015568606, 0.024677886, -0.0019177671, 0.05404908, 0.0060216123, -0.030777207, -0.04524189, -0.016626963, -0.008893188, -0.018490426, 0.031180521, -0.053346496, 0.044081125, -0.027875518, 0.05441929, 0.029388167, -0.021830447, -0.023339827, 0.016653975, -0.056687586, -0.016475383, -0.008857887, -0.0021374125, 0.069589995, -0.02243395, -0.02106995, -0.003737187, -0.041667562, 0.026643924, -0.0071829422, -0.016876243, -0.018326834, 0.019914372, 0.0047269734, -0.045073166, -0.013840723, -0.011535024, 0.04878464, 0.01471867, 0.039452497, -0.013840709, 0.008424009, -0.019090151, -0.030078063, -0.060274098, 0.019974371, 0.00065095694, -0.012269017, 0.047747824, 0.044203833, 0.014578143, 0.06300345, 0.010738323, -0.06834961, -0.026273094, 0.02992685, 0.004908329, -0.0048564486, -0.00049444195, 0.018814057, -0.036350504, -0.0438321, -0.02366402, -0.026390387, 0.005525028, 0.017218174, 0.042215575, 0.038070858, -0.01927241, 0.03755007, 0.02350404, -0.041486204, -0.02381983, 0.020329863, 0.021068878, -0.0083847605, -0.020199938, -0.017479604, -0.032883324, -0.051310983, 0.02121138, 0.025494888, 0.004161252, -0.017964123, -0.01689152, -0.059778754, -0.014134002, 0.027023777, -0.032498617, 0.0628266, 0.080931485, -0.014927094, -0.02246887, -0.023290427, -0.053311307, -0.0093059745, -0.050156984, 0.0026190535, 0.052756414, 0.015732817, 0.01482356, -0.04795997, -0.061881036, 0.03806481, 0.047605377, 0.034278, 0.0024198783, 0.026730767, 0.047398753, -0.014150694, 0.011129963, 0.03214843, 0.017914554, 0.02409017, -0.058217835, -0.022359062, -0.017698856, 0.04646897, -0.07999222, -0.01260466, -0.056348335, -0.009367329, 0.005629014, 0.016816553, -0.02131435, 0.004663815, 0.028572857, -0.036970362, -0.01797089, -0.0045424597, 0.009567632, -0.01307632, -0.002619279, -0.02224718, -0.02347584, -0.051857527, 0.024086677, -0.0035531248, -0.004348698, 0.066101834, -0.02885222, 0.038475342, -0.009154055, 0.058640093, -0.0058845812, -0.006792486, 0.019887755, -0.0012985868, 0.054146804, -0.039032042, -0.0045383996, 0.03384401, 0.006441392, 0.010529673, -0.020573929, 0.018525332, 0.025241802, 0.06085606, 0.04433466, 0.026143309, 0.045775577, -0.033611223, 0.036346897, 0.0090971, -0.009856357, 0.024780573, 0.019472713, 0.0069754208, -0.022967188, 0.03645156, 0.052741077, 0.017507575, 0.022592748, -0.011369909, 0.021201003, -0.014044226, -0.029614184, -0.015230255, -0.046390925, -0.050481804, 0.016014325, -0.0115851, 0.0037166604, 0.026915507, -0.019059023, -0.024439689, 0.02084596, 0.02905117, 0.0009198605, -0.017335694, 0.026014142, -0.00827159, 0.022784932, 0.01792307, 0.055651788, -0.03788977, 0.018186305, 0.00088100665, -0.00046917849, -0.019107746, -0.018772101, -0.034139726, 0.047045518, 0.0052164523, -0.0011140733, 0.0034063938, 0.083499335, 0.04396834, -0.021449013, -0.0048724636, -0.0072573796, -0.081366375, -0.02944676, -0.016894937, -0.034108374, -0.007108054, 0.0049525397, -0.014726565, -0.015764961, -0.033656847, 0.028467404, 0.047586426, -0.040215816, -0.006960985, -0.014042648, -0.02183349, -0.039327983, -0.03202865, 0.038914748, 0.06552619, -0.06289157, -0.028511615, -0.024473071, -0.05615052, 0.0044635115, 0.047341913, -0.017512988, -0.006371805, 0.0128067685, 0.025470978, -0.044465486, -0.009025863, 0.032997683, -0.017215468, -0.031919025, -0.012346612, -0.067945726, 0.005638262, -0.023781937, 0.030034643, 0.0066478983, 0.012770678, 0.027516982, 0.019901287, 0.017606825, 0.013230043, 0.0054357033, 0.021292526, 0.021907026, -0.008327918, 0.0073300116, 0.0026851445, -0.012274431, 0.025415039, 0.013469032, -0.017129075, 0.07494404, 0.0069932407, -0.024050811, 0.0066410187, 0.043257806, -0.043344878, 0.011779454, 0.05722173, 0.02225124, -0.04465316, 0.027325813, 0.0059865373, -0.06185216, 0.0041811024, 0.033957247, -0.050508868, 0.008049569, -0.0356923, -0.051672794, -0.003930272, -0.042617988, 0.0513385, 0.050401162, 0.0009915907, -0.049886305, -0.014168288, -0.01801916, -0.031144429, -0.0066257925, -0.007291214, 0.05154918, 0.024653524, -0.021921463, 0.052239414, -0.046466265, 0.01647572, -0.016894033, -0.015310782, -0.033306938, -0.028736278, 0.007541142, 0.0045221588, 0.00036812466, 0.030419232, 0.0336807, 0.0132100815, -0.027326489, -0.029568622, 0.023294795, 0.0024893528, 0.005572397, -0.05293055, -0.016520947, 0.0037728264, 0.0008383182, 0.029335385, -0.033697844, -0.014862835, -0.00690324, -0.08147825, -0.07465712, 0.065387465, 0.0058394675, 0.0028287177, 0.040829357, 0.06223292, 0.008431679, -0.029490123, 0.009218906, -0.0027929654, 0.001026328, 0.001648215, 0.048576217, -0.019804746, -0.057619628, -0.06186976, 0.03222264, -0.040932328, -0.020617686, -0.06310812, -0.026868815, 0.0012126459, -0.006489776, -0.013708131, -0.030556602, 0.006820908, -0.028088452, 0.012041871, 0.012618194, 0.007542495, -0.010795842, 0.022006951, 0.047413193, 0.006764291, 0.023256365, 0.017552124, -0.008500589, 0.05591164, -0.0031890604, 0.046156336, 0.023456216, -0.040583037, -0.010645164, 0.0007827161, 0.0067131505, 0.020974759, -0.04189403, -0.027138365, -0.10250377, 6.406091e-05, 0.017125016, 0.018311495, 0.0066257925, -0.014525585, 0.033589568, -0.020680396, -0.0067904564, -0.018047795, 0.015958384, -0.043993603, -0.012242401, -0.019112708, 0.0024773977, -0.05826137, -0.019180378, -0.043797813, 0.0004677123, 0.013010229, 0.018595934, -0.010981709, 0.019436847, -0.015435296, 0.013436099, -0.017774422, 0.08421393, 0.035652153, 0.018160816, 0.031443983, 0.003851042, 0.08025118, -0.02380765, -0.06762125, 0.08150082, 0.015952239, -0.024772428, -0.034199502, -0.0039577913, 0.03252005, 0.031091196, 0.033368062, 0.014082572, 0.00012947521, 0.008643712, -0.0020544603, -0.00300762, -0.022011688, 0.0061060875, 0.07590045, -0.004101703, 0.010361627, -0.050238192, 0.025522407, 0.011153817, 0.040960677, 0.0003360942, -0.0019405492, -0.035316847, 0.022839969, -0.050203905, 0.032607, 0.0269922, 0.01664749, 0.011373292, 0.03890843, -0.014369607, -0.011427767, -0.04483722, 0.05377327, -0.003953731, 0.034764323, -0.033405058, -0.017012456, 0.01110735, -0.026129633, -0.04775479, 0.004814493, 0.049631864, 0.0025150673, -0.029414559, 0.00943827, -0.02495759, 0.06390391, 0.030379308, 0.015282587, 0.02328501, -0.056893308, -0.04324923, -0.017462913, 0.04030604, 0.008614387, -0.037743606, -0.013176021, -0.015209982, 0.048870124, 0.0113982735, 0.0556572, 0.02590226, 0.046614684, 0.06707087, 0.0025146727, 0.02681716, 0.019696023, -0.043915894, 0.0148172425, -0.0032830087, -0.06805975, -0.077515505, -0.010579072, 0.012910529, 0.010599599, 0.04612746, 0.01988956, 0.010800127, 0.016579172, -0.055897202, 0.008345343, 0.00988523, -0.032954827, 0.0102506485, -0.04673424, -0.009677708, 0.03809639, -0.049168102, -0.034621086, -0.045527004, -0.004806147, 0.027208518, -0.007232003, -0.02400705, 0.0070844823, 0.030602394, 0.019009003, -0.010449147, -0.022009265, -0.038248874, 0.030173365, 0.008130322, 0.0048695314, -0.030581415, 0.026415199, -0.004190576, 0.01653606, -0.05676338, -0.032633167, -0.047231838, 0.0059838304, -0.012734587, -0.0023206288, 0.034241907, 0.021482961, -0.01409949, -0.010061172, -0.04055597, 0.03414717, -0.03338281, 0.003421394, -0.019434365, -0.0085128825, -0.066580035, -0.01776382, 0.019719932, -0.03082277, 0.008497545, -0.015067847, 0.003278836, -0.012391726, 0.0049877283, -0.0029720655, 0.00092685304, -0.019775873, -0.0074482085, 0.041080184, 0.009639363, -0.072621614, -0.03555922, 0.006205393, -0.038675644, -0.04826403, -0.013621965, 0.019598126, -0.014254905, -0.0365847, 0.03161135, -0.0017179151, -0.0016488917, 0.010569205, -0.0687157, 0.003477109, -0.025543047, -0.06428467, 0.020566935, -0.051546473, 0.034378152, 0.003224587, 0.057872035, -0.031769503, -0.032476176, 0.0064460165, -0.0016861103, 0.017758857, 0.022605944, 0.023118319, -0.0078000925, -0.0070859483, 0.0064676707, -0.05526965, -0.048895616, -0.0045848666, -0.008427618, -0.0031025554, -0.023255011, 0.015011005, 0.048190046, -0.0019574668, 0.0084580695, -0.0067827874, -0.0011375323, 0.004573588, 0.04687815, 0.008578748, -0.027440064, -0.02935501, 0.03418687, 0.014240018, -0.006942122, -0.037940975, -0.004265915, 0.04025461, 0.025224209, 0.0058489414, 0.053270258, 0.015310332, -0.026649563, -0.016043648, -0.013305271, 0.022248084, -0.08007072, -0.0189503, 0.053919435, 0.0053044236, 0.006759779, -0.024037728, -0.03491049, -0.010593509, -0.052679382, -0.020768365, -0.045113318, -0.022985121, 0.006515716, -0.008338746, -0.007183393, 0.009562219, 0.001892278, -0.013206472, 0.034203112, 0.021736046, 0.030260209, 0.021449126, -0.03503861, 0.04145914, -0.021983605, -0.008306377, 0.045156628, -0.014796266, -0.022530716, 0.00059834355, -0.04001055, 0.03381965, 0.017141594, -0.03457166, 0.022597259, 0.039024822, -0.0586834, -0.015869737, -0.0460228, -0.011382541, 0.020702953, -0.028952373, 0.036237724, 0.019844672, -0.018847667, -0.021068595, -0.021747326, -0.013564672, 0.006059621, 0.03536433, 0.00717798, -0.014622453, -0.017801715, 0.010798506, 0.014974012, -0.048036657, -0.042215236, 0.06303864, -0.008884616, 0.045472868, 0.035400644, -0.040828906, 0.042254936, 0.025813974, -0.012367365, -0.017667277, -0.0020824305, -0.013924676, -0.04969006, -0.0032716175, -0.027080622, 0.039406482, 0.06319022, 0.007303846, 0.01888421, -0.073592454, 0.009811244, -0.03485094, -0.029867722, -0.038256317, -0.024381999, -0.010990506, -0.0011647131, -0.007847913, -0.0012383605, -0.02633535, 0.055298097, 0.012363531, 0.03285242, 0.005828415, -0.0035928246, -0.016903283, 0.004673063, -0.00562721, 0.05101594, 0.007709076, 0.03503861, -0.029043306, -0.020735433, -0.040057465, 0.0068057952, 0.004767124, 0.017448027, -0.022285074, -0.011287464, -0.021584917, 0.010803737, 0.013441287, 0.075167805, -0.016843509, 0.012733347, -0.002374765, -0.050818346, -0.043265477, 0.0327649, -0.013266021, 0.02307095, 0.009897862, -0.023705695, -0.003187707, -0.012016383, 0.06965135, 0.017675396, 0.008825969, 0.02947253, -0.0073192967, 0.01899857, 0.027309515, -0.017009525, -0.023291554, 0.017724909, -0.013968888, 0.02051934, 0.0055268886, -0.01704697, -0.008497545, 0.0054523954, 0.05369838, 0.004075988, -0.055436652, -0.034759585, 0.036706902, -0.02077378, -0.03801034, -0.020206254, 0.01699509, -0.013726178, -0.0017706977, 0.0022908542, 0.0076266318, -0.04441135, -0.060919218, -0.013352039, -2.5601807e-05, 0.025717298, 0.015112256, 0.038759727, -0.00038256095, -0.053388, -0.030579384, -0.010477342, 0.031469245, 0.05663255, 0.007424693, 0.015146796, 0.041478988, 0.032886844, -0.003901174, -0.011011709, -0.05264273, 0.023482833, 0.045696296, 0.010842535, 0.01598455, 0.003456131, 0.014025729, -0.00047549437, 0.00300184, 0.0120087145, -0.005085342, 0.038935047, 0.01645012, -0.058668967, 0.0214189, 0.010969753], [-0.015387912, -0.088115595, -0.040759407, -0.0388371, -0.01533353, 0.012246077, 0.014981483, -0.012688802, 0.050062373, 0.022316385, -0.0052092005, 0.044874255, -0.08090551, -0.02800137, -0.046249382, 0.036694393, 0.013321266, -0.010113669, 0.0246335, 0.02207412, -0.018381216, -0.011291871, -0.02111692, 0.029896364, -0.012506729, 0.05279634, -0.02576906, -0.011481731, 0.043436833, -0.015541836, -0.0053400057, -0.025907053, 0.007404616, 0.008482439, 0.029182447, 0.020651674, 0.0049236338, -0.018149551, -0.039420694, -0.02541917, -0.058198154, 0.0048431386, -0.0042698486, 0.02452234, 0.022768691, 0.040801093, 0.0019701004, 0.019119088, 0.012423598, -0.027512169, 0.039017256, 0.020473855, -0.03028351, 0.00020363412, -0.019148795, 0.02456211, 0.018552888, 0.015295079, 0.02540108, -0.01545607, 0.01610195, -0.0069278725, -0.04517132, 0.004014602, 0.010192607, 0.04599496, -0.015295079, 0.019164607, 0.017796185, -0.037777245, -0.0044967206, 0.00079656875, -0.0010071504, -0.027474318, 0.06188944, -0.0117518455, -0.061335076, 0.022985501, -0.005113373, -0.039591268, -0.018613538, 0.01734382, 0.015716244, -0.050417893, -0.065953024, -0.010031496, -0.030219303, 0.025812183, 0.06719064, 0.036479738, -0.0437569, 0.0032763535, 0.013418531, -0.006466701, 0.008117575, 0.013119309, -0.032061115, 0.045510553, 0.011497422, 0.04720958, 0.04811659, -0.05993647, -0.02396007, -0.03191929, -0.033520572, -0.005957137, 0.01748103, -0.01971466, -0.015027001, -0.011039844, 0.0105027305, 0.0109061655, 0.005541723, -0.0648486, 0.012368977, 0.005529026, 0.021874888, -0.033173677, -0.04142619, -0.034837246, -0.05416572, -0.0037371654, 0.021746688, 0.013913961, -0.025400722, -0.026172495, 0.011472028, 0.011784426, -0.059033778, 0.00862654, 0.06473745, -0.001384712, 0.049769137, -0.0030942804, -0.043585848, 0.017570991, -0.01162152, 0.048768394, -0.025754925, 0.039218497, -0.04366874, 0.009106518, 0.01860593, 0.026899828, 0.023938749, -0.022144852, 0.0031690262, -0.053437427, -0.0150162205, -0.007812843, -0.0042547556, -0.016627925, 0.020590525, 0.029373385, 0.007184212, -0.05980054, 0.013659777, 0.014395734, -0.018048272, 0.009885599, -0.015872203, 0.0022303928, 0.022197558, 0.015694682, -0.032077406, -0.045161735, 0.008156265, 0.015172779, -0.014516958, 0.08081352, 0.063783005, -0.018894851, -0.0072532077, 0.023291433, -0.055729628, -0.028700553, -0.010188414, -0.03639924, 0.015179127, 0.013838017, 0.010403069, 0.0024028828, 0.008488908, -0.009920097, -0.03260446, 0.010892749, -0.025959758, -0.0055762213, -0.032872777, 0.03780887, 0.004086705, -0.05910277, 0.02228524, -0.0064353175, -0.04262805, 0.018643305, -0.012369456, 0.005552264, 0.016884383, 0.04233865, 0.0028714808, 0.024352245, 0.04554313, -0.017968677, -0.016255274, -0.06068968, 0.030046815, -0.0044061635, 0.035067234, -0.02550269, 0.032746643, 0.06502244, 0.04994738, 0.05535686, 0.034654696, 0.03392413, 0.014267326, -0.053489175, 0.03233135, 0.08102434, -0.03827938, -0.004442099, 0.043682158, -0.03129557, 0.0018298323, 0.004270088, -0.000637255, 0.010063838, 0.039768547, 0.007884474, 0.0783105, -0.0051719476, -0.039645888, -0.051720195, -0.017531222, -0.027278349, -0.032998793, -0.0030608268, -0.0061348975, 0.022911474, -0.01586238, 0.029740166, 0.00875483, -0.022855654, -0.025743186, 0.020349998, -0.019638956, -0.010261962, -0.012621962, 0.016092367, 0.044356782, -0.0333948, -0.03427893, -0.00038043648, -0.015613227, 0.021105122, -0.024919068, 0.023965582, 0.0063641653, 0.013410865, -0.016560964, -0.028896403, -0.013392418, -0.029024333, 0.05148254, 0.017038487, 0.029695125, -0.01323514, 0.046160866, -0.0041023893, -0.016838387, -0.06132214, 0.024646437, 0.0010658151, -0.0055529834, 0.049487405, 0.034265634, -0.0016781848, 0.048519544, 0.008680085, -0.057303127, -0.034749087, 0.0023753322, 0.047657095, 0.011346973, 0.025883095, -0.0070653856, -0.05718813, -0.018523518, -0.034217242, -0.024743702, -0.004366994, 0.018974628, 0.025032382, 0.028365036, -0.03729619, 0.023306284, -0.03824776, -0.031365924, -0.008582819, 0.0035957596, 0.0053246734, -0.023476379, -0.0058168685, 0.0068984055, -0.011848153, -0.06898454, 0.028250044, 0.007180978, -0.0033225904, -0.04536106, 0.0026486812, -0.06470103, -0.004333334, 0.025397249, -0.020189006, 0.036214773, 0.06497031, -0.030002972, -0.003739561, -0.0017364002, -0.015747387, 0.019214436, -0.06684949, -0.001604637, 0.063314885, 0.03147273, -0.0030530745, -0.06398232, -0.03346739, 0.06610443, 0.012681855, -0.0027291765, 0.00199801, 0.0012711561, 0.050316557, -0.013599885, 0.037411183, 0.020610947, 0.05040304, -0.0058277394, -0.047059126, -0.03778491, -0.00015883462, 0.0367998, -0.06849773, -0.015608916, -0.042873368, 0.010851064, 0.015193023, 0.003065772, -0.015116361, 0.004305065, 0.026892643, -0.007759658, -0.011548211, 0.01167403, -0.0007877047, -0.010712952, -0.0022049982, -0.014101065, 0.0022221725, -0.05061817, 0.0452154, 0.028160661, -0.014486772, 0.059654135, -0.010146908, 0.02944214, -0.018659594, 0.033269502, 0.013046, -0.026560599, 0.023717387, -0.018680677, 0.014585953, -0.05254623, 0.0021120452, 0.03794878, -0.02289231, 0.010118191, -0.039921872, 0.028828364, 0.035947174, 0.0455393, 0.047646556, 0.046243634, 0.029877678, -0.009312069, 0.04107971, 0.016836232, -0.006936018, 0.07235959, 0.021753876, -0.004837868, -0.018404692, 0.02477245, 0.05246765, 0.043825418, 0.022009734, -0.0247231, 0.02030975, -0.0056527634, -0.02759458, 0.012859136, -0.038867768, -0.056038197, 0.040720116, -0.017430604, 0.011178316, 0.022939265, -0.010570767, -0.02215731, 0.031359177, 0.030334538, -0.03415687, -0.022509476, 0.019873733, 0.0063150534, 0.02105385, 0.006351738, 0.05237086, -0.028237585, 0.022327404, 0.023988578, -0.0026678466, -0.025834704, -0.011653622, -0.057379782, 0.05305603, -0.013391818, -0.0044176625, -0.034064878, 0.081806295, 0.053395987, -0.02748917, 0.010596162, -0.010106003, -0.06344569, -0.02880261, -0.020706477, -0.06201402, -0.016599296, 0.0047415607, -0.027108254, -0.018598504, -0.01821663, 0.028823573, 0.041465662, -0.04198792, 0.009771683, -0.0011482569, -0.023028385, -0.03765363, -0.038712524, 0.013409187, 0.06596021, -0.06596596, -0.039804485, -0.020169841, -0.052945834, 0.0029735374, 0.0371697, -0.012802118, 0.013918033, -0.0055136187, 0.022072503, -0.06603687, 0.0064484943, 0.020625144, -0.0026247243, -0.03370265, -0.015369825, -0.042047814, -0.0010703967, -0.013615217, 0.028848967, 0.0041004727, -0.0055619967, 0.019382136, 0.024153642, -0.0021829577, 0.02137248, 0.015281812, 0.040916085, 0.021730877, -0.016567193, -0.0070433454, 0.019267144, -0.010884844, 0.021335106, 0.044318452, -0.004632796, 0.06289372, 0.00069666834, -0.013123382, 0.008053371, 0.04084565, -0.041818306, 0.0025941792, 0.06810483, 0.01458212, -0.057278205, 0.013314318, 0.025866805, -0.051720195, 0.046125766, 0.06530091, -0.025458578, 0.015597895, -0.03690713, -0.046936467, 0.0071546854, -0.049853466, 0.04679704, 0.043322563, -0.0049353726, -0.034933075, -0.016434472, -0.031799387, -0.0009924468, -0.01545619, -0.018037671, 0.06363734, 0.029927028, -0.015424447, 0.029546592, -0.035594884, 0.020334665, -0.02288704, -0.03280378, -0.05268997, -0.049705893, -0.0073686806, -0.007980781, 0.0057757827, 0.064572625, -0.0015111299, 0.027576374, 0.016241858, -0.04042545, 0.0024329487, 0.024593014, 0.008389247, -0.01924031, 0.002586393, -0.007753908, 0.016718632, 0.016841741, -0.051458105, -0.012449952, -0.006422381, -0.06982016, -0.05806879, 0.05456916, -7.3308285e-05, -0.009965615, 0.02657677, 0.033401746, 0.044050135, -0.051323466, -0.0061262725, 0.024603793, 0.015061559, 0.019280558, 0.011886963, -0.0070683802, -0.07238451, -0.067685105, 0.031047259, -0.05028122, -0.031545322, -0.05725425, -0.028064137, 0.00046943658, -0.020377308, 0.012114554, -0.035368133, 0.023619162, -0.032736104, 0.0115160635, 0.008728477, -0.02443322, -0.02202845, 0.046291545, 0.027503543, 0.020644907, 0.018825376, 0.020563692, -0.017708981, 0.028702352, -0.028092885, 0.037817493, 0.0077495966, -0.036475904, -0.014671479, -0.040662143, -0.009069865, -0.021108953, -0.034187295, 0.004297399, -0.06865105, -0.009347027, 0.019219229, 0.0028700435, 0.0022979511, -0.013826996, 0.023603352, -0.0044783936, -0.01761603, 0.006131064, 0.015426363, -0.040509775, -0.01811098, -0.007698808, 0.013159078, -0.021868868, -0.010313949, -0.022110352, 0.003039299, 0.02687683, -0.010387677, -0.025849914, 0.0022692927, -0.010325448, -0.011188138, 0.01672495, 0.080088586, 0.026633369, 0.005176619, 0.03967164, 0.0033803266, 0.0980702, -0.024391057, -0.04031884, 0.07062894, 0.030387003, -0.016795743, -0.0399947, 0.0031297368, 0.039364275, 0.020223504, 0.037622005, -0.010091987, 0.0139407925, 0.0052662184, 0.0075445245, -0.0024445679, -0.025715398, 0.020981023, 0.04769159, 0.013057499, 0.010805905, -0.0673248, 0.03296477, -0.009771803, 0.014185393, -0.01130378, -0.0229522, -0.03332221, 0.012813558, -0.053149946, 0.04527673, 0.039275993, 0.03699026, -0.013306652, 0.02402787, 0.0008787412, -0.035665203, -0.0066758455, 0.053129822, 0.00036773927, 0.040303268, -0.025442049, -0.0048790737, 0.0029519761, -0.02717821, -0.03356633, 0.017709028, 0.026621928, -0.05124537, -0.017826492, 0.019206531, -0.019566126, 0.061446715, 0.030329866, 0.00037588464, 0.016715728, -0.017417666, -0.051796857, -0.012412698, 0.019297808, -0.030467978, 0.0010493146, -0.00041924676, 0.0066317646, 0.041359287, 0.03373966, 0.03849332, 0.023727806, 0.026069602, 0.0533301, 0.019454965, 0.03188719, -0.011597683, -0.03196361, 0.022315426, 0.0040978375, -0.04017198, -0.1014419, -0.014914163, 0.008777349, -0.0100245485, 0.034409855, 0.021037204, 0.019632246, 0.011180232, -0.044078883, 0.014049078, 0.0014517916, 0.015858546, -0.012775886, -0.04609606, 0.01096414, 0.052613307, -0.023837171, -0.034059126, -0.0357984, -0.018521123, 0.0040972983, -0.03292656, -0.04184226, 0.019059435, 0.015625086, 0.029404288, -0.006519167, -0.02411124, -0.05149021, 0.036140505, 0.03630485, 0.02448904, -0.025894595, -0.0036397206, 0.0017052562, -0.0023314909, -0.036497585, -0.03409602, -0.021896178, 0.0023556876, 0.0016597379, 0.006553665, 0.037401363, 0.016375778, -0.008965232, -0.038118392, -0.057347205, 0.046215452, -0.039976105, 0.0027581344, -0.016162321, 0.013640611, -0.07563307, -0.02434506, 0.013505974, -0.01770419, 0.0061868844, -0.054582093, 0.019635122, 0.022677656, 0.0036644563, 0.0077306703, -0.0021230953, -0.02998836, -0.07355645, -0.0017653881, -0.008540176, -0.061960354, -0.029037029, 0.002249079, -0.0339494, -0.059357673, -0.046443913, -0.018037073, -0.011539646, -0.048244517, 0.06621703, -0.04338126, 0.003546588, 0.010771288, -0.05526295, 0.021242153, -0.009647346, -0.07388325, 0.033564653, -0.030822061, 0.025904177, 0.016162321, 0.033769727, -0.044872817, -0.044644266, 0.0032945606, 0.025311124, 0.00034450102, 0.02220714, -0.0077711875, 0.0014652074, -0.010877656, 0.025339272, -0.0524504, -0.06697215, -0.033621013, 0.019086987, 0.002166188, 0.009921534, 0.034438606, -0.0047142496, 0.0076742517, 0.031561375, 0.0077909217, 0.025569739, 0.014722507, 0.051854353, 0.01675813, -0.019870859, -0.014606077, 0.01267293, 0.03037161, -0.010912873, -0.0036515193, -0.01994297, 0.011750528, 0.029009718, 0.043016154, 0.02479617, 0.0145045, -0.016467532, 0.014989149, -0.0017500557, 0.047285285, -0.09774822, -0.0046795723, 0.05664287, 0.024230065, 0.013834303, 0.0064855, -0.033981267, -0.0042240904, -0.026133984, -0.008561737, -0.057684515, -0.033590525, -0.003378889, -0.027195938, 0.0033736185, 0.036043003, 0.006605891, -0.003502507, 0.0023995289, 0.01835582, 0.020579984, 0.010783505, -0.0020534706, 0.043741573, -0.0069547044, -0.002672638, 0.037499346, -0.007683954, -0.00085095107, 0.020005496, -0.017914534, 0.022375798, 0.04862687, -0.006530427, -4.8872193e-05, 0.040954895, -0.05085774, -0.011399678, -0.036130983, -0.014104419, 0.017683499, -0.013315277, 0.033143014, 0.029168194, -0.0065922206, -0.0063744667, -0.02112776, -0.02235759, -0.009663278, 0.03493547, 0.015579688, -0.0067347796, 0.004994546, 0.012021601, 0.019004574, -0.04884536, -0.04680327, 0.08563941, 0.013909409, 0.03633743, 0.047713634, -0.024553005, 0.040464737, 0.017201094, -0.008887312, -0.04571694, -0.017246732, -0.018730506, -0.061247397, 0.044379782, -0.020691622, 0.057889592, 0.0743231, 0.021056728, 0.0011413094, -0.06251424, -0.0057563772, -0.011681412, -0.022467792, -0.050742753, -0.0338059, -0.007928585, -0.022334592, -0.015108215, -0.0039605643, -0.038104977, 0.08980217, -0.013610425, -0.0005615511, 0.009909077, -0.00849897, 0.0036625394, 0.016203767, -0.012363707, 0.047043797, 0.015826445, 0.016783046, -0.027575416, 0.0076226243, -0.033643235, 0.0044512027, -0.01892935, 0.039180163, -0.021581145, 0.008272097, -0.031461712, 0.015515963, -0.0032452093, 0.03923071, -0.036904253, 0.021124763, 0.0047585703, -0.027224803, -0.028978335, 0.027690766, -0.029410038, 0.04218724, 0.0041862386, -0.020763975, 0.02178454, -0.037940152, 0.042951945, 0.02093838, 0.0054458953, 0.0059798956, -0.019052967, 0.03911213, 0.025057059, -0.023936832, -0.016360085, 0.014657704, -0.024976565, -0.005462186, 0.0082986895, -0.02712351, 0.01755901, 0.02013151, 0.050352372, 0.014295596, -0.018804533, -0.062494595, 0.040890213, -0.0037990944, -0.028429719, -0.027579248, -0.0029263424, -0.017017106, -0.007660476, -0.00906711, 0.009359504, 0.005935576, -0.07398291, -0.027242413, 0.027741438, 0.03560387, 0.014153291, 0.040010992, 0.0012159353, -0.025360832, -0.01937447, 0.0065000015, 0.0431024, 0.058335066, 0.010180987, 0.012110301, 0.0427325, 0.0053045494, 0.006804255, 0.02112141, -0.044360615, 0.06242033, 0.053655915, 0.013665527, -0.012931006, 0.016528143, 0.0149680665, -0.01961368, -0.0081310505, -0.009526244, -0.0036779917, 0.045011766, 0.017599469, -0.059595324, 0.021223228, 0.020451574], [-0.019796645, -0.09528791, -0.034145944, -0.06025546, -0.015698787, 0.004313614, 0.030425211, -0.023636427, 0.059237584, 0.0061361026, -0.012597575, 0.016957533, -0.07063621, -0.01641474, -0.009124996, 0.03686712, -0.0061169546, -0.008291349, 0.0053901793, 0.028879529, -0.023834007, -0.014347635, 0.0021808804, 0.034070462, -0.017043002, 0.043105345, -0.029241947, -0.01097128, 0.020144355, -0.029628228, 0.0012848297, -0.06362099, -0.00269953, 0.01338443, 0.016908692, 0.032467898, 0.0042468756, -0.0050627287, -0.04606739, -0.042705745, -0.073162585, 0.011755637, -0.013577499, 0.02074209, 0.023648636, 0.056219485, 0.018868404, 0.004450076, -0.003914568, -0.043729722, 0.018139686, 0.0057431613, -0.016138904, 0.00742454, -0.018412746, 0.031608477, 0.030629452, 0.027529765, 0.0494529, -0.0064391335, 0.006571224, -0.030851452, -0.044369083, -0.007893238, 0.0376913, 0.03767409, -0.0050867153, 0.01612614, 0.022563607, -0.030182954, -0.02369581, 0.006833185, -0.025040027, -0.024327958, 0.061124038, -0.010465118, -0.058738083, 0.041133974, -0.006533484, -0.0502965, -0.01922971, 0.009526054, 0.031983934, -0.05698317, -0.051674575, 0.0061105727, -0.037295584, 0.004626497, 0.055762164, 0.0008397181, -0.05205364, -0.0015345806, 0.01131885, -0.032781474, -0.0015753732, 0.037229538, 0.014042661, 0.06195543, 0.04208691, 0.030768203, 0.04913544, -0.07845564, -0.025883628, -0.009238581, -0.024463933, 0.013886151, 0.024811922, -0.03256308, 0.024801375, -0.007991283, 0.0020941615, 0.004181663, -0.033976182, -0.062358256, -0.004353991, 0.0033988324, 0.02492514, -0.011945864, -0.052298952, -0.018119706, -0.044515602, 0.014781369, 0.007368207, 0.018270668, -0.031816047, -0.01743178, 0.02248563, -0.0025552292, -0.036243852, 0.0081385495, 0.048590425, 0.01459912, 0.041039627, -0.012095853, -0.07211585, 0.01110448, -0.016427226, 0.046623502, -0.015044995, 0.0539018, -0.031140054, -0.0017515863, 0.017351585, 0.0060661724, 0.0041426737, -0.017219493, 0.011259881, -0.05208139, 0.0017450651, -0.0073911524, -0.006779905, 0.0012720646, -0.011778253, 0.015542832, -0.0017338264, -0.052810665, 0.04164097, 0.014670923, -0.019869385, 0.037953258, -0.00764099, -0.01777061, 0.031430874, 0.009575172, -0.023012605, -0.015566696, 0.028513784, -0.0020046674, 0.0005211469, 0.06773633, 0.043343436, -0.0069974656, 0.023468262, 0.053391196, -0.04337008, -0.038506873, -0.014886195, -0.027518388, 0.010342636, 0.025359152, -0.008854502, 0.024511386, 0.0007550803, -0.0180094, -0.020772476, 0.009581555, -0.026210526, -0.030524418, -0.027294446, 0.031695332, 0.034074906, -0.029168688, 0.019766951, -0.0109069, -0.02448114, 0.038080353, -0.024973981, 0.012080174, 0.027804213, 0.030414598, 0.004018631, 0.0060997494, 0.022296095, -0.024690932, -0.042142414, -0.0398719, 0.018967194, -0.015450146, 0.045803204, -0.026020577, 0.029215584, 0.05850221, 0.01374851, 0.04520894, 0.03857375, 0.032844465, 0.039809186, -0.08888024, 0.02963822, 0.06804769, -0.029462837, 0.020141162, 0.013322269, -0.018976629, -0.03162263, -0.016933106, 0.0014502204, 0.01920085, 0.02992571, -0.008538151, 0.059389655, -0.010454019, -0.050401952, -0.06524937, 0.0018920018, -0.013320673, -0.036925394, -0.0024031326, -0.027228676, 0.028497135, -0.011025115, -0.0010483988, 0.016906472, -0.046340447, -0.009370376, 0.003815084, -0.03821078, -0.021194419, -0.009069288, 0.021820182, 0.049705982, -0.020588355, -0.029612133, 0.0050349785, -0.012035774, 0.019208621, -0.023718912, 0.013172418, -0.0047979923, 0.04928751, -0.019438392, -0.03784448, -0.032582503, -0.039580524, 0.041890856, -0.0021978081, 0.012322155, 0.0025735444, 0.04496182, -0.009892357, -0.02826348, -0.09173518, 0.050736062, 0.02333201, -0.019496335, 0.04059951, 0.024850773, -0.003014771, 0.05623669, 0.039490614, -0.07516503, -0.050961953, -0.014677028, 0.027567506, 0.021748517, -0.004402276, 0.0124031855, -0.06721297, -0.016874282, -0.06428762, -0.021090077, 0.014680914, 0.014454473, 0.023465764, 0.017212832, -0.043134756, 0.044877462, -0.0069464054, -0.031566016, -0.03363756, 0.046193928, 0.010232016, -0.02740378, -0.012969287, 0.0011840968, -0.011400851, -0.0911835, 0.036186133, 0.027501183, -0.017781155, -0.024175888, -0.012202275, -0.035623915, -0.014744457, 0.0013845913, -0.032236945, 0.022776173, 0.09315154, -0.019215558, 9.990037e-05, -0.024805954, -0.0142702125, 0.01937068, -0.0664959, 0.010361332, 0.05771133, 0.03642964, -0.0039294143, -0.045652248, -0.015483793, 0.037650228, 0.004718211, -0.014604324, 0.024830792, 0.022379901, 0.0006999963, 0.029385414, -0.005913616, 0.020821733, 0.050491866, -0.000828063, -0.0663516, -0.026302656, -0.011127791, 0.044286944, -0.053466674, -0.015003925, -0.046338227, 0.011178851, 0.017727181, 0.010442918, -0.027619122, 0.0090415375, 0.02073697, -0.022053562, -0.027263641, 0.003613341, -0.004363426, 0.0050305384, -0.00078810286, 0.029122066, -0.021791045, -0.06890017, 0.04942404, 0.016767722, -0.03250869, 0.08443135, 0.0005161519, 0.05510504, -0.027719853, 0.05568058, 0.028158028, -0.025563393, 0.0129337665, -0.023801818, 0.027508676, -0.04358431, -0.012397636, 0.060872626, -0.020944668, 0.0045110565, -0.03348882, 0.04268909, 0.041429795, 0.03612855, 0.0384683, 0.03592112, 0.0339356, -0.022528643, 0.038255457, 0.025675504, -0.020685688, 0.042886116, 0.014031006, -0.004202198, -0.009047088, 0.035860624, 0.037773438, 0.045348108, 0.010409618, -0.020306414, 0.034804177, -0.0070790504, -0.022754528, 0.005805321, -0.06000765, -0.05050241, 0.03415427, -0.023875078, 0.010289738, 0.008751272, -0.0023004834, -0.03229557, 0.025461135, 0.034077123, -0.04708748, -0.034430105, 0.018685132, 0.018618098, 0.007966499, 0.028063295, 0.046480864, -0.040273167, 0.022388782, 0.036222763, 0.0134959845, -0.028416103, 0.005782705, -0.055879824, 0.03823187, 0.012061304, 0.016939694, -0.01802924, 0.07727405, 0.04309258, -0.02810558, 0.006250433, -0.0027750102, -0.05436134, -0.042957157, -0.0075591276, -0.04721513, -0.019565487, 0.026537975, -0.020002272, 0.017235033, -0.020389386, 0.025381353, 0.017946476, -0.023553178, 0.006285467, -0.001615056, -0.029902121, -0.05734725, -0.0384683, 0.022539742, 0.06208919, -0.04057828, -0.03541572, -0.027207587, -0.039611187, -0.008509291, 0.026071776, 0.0033688624, 0.0067796274, 0.011943089, 0.03820967, -0.04896866, 0.0086924415, 0.014644284, -0.013818163, -0.05740941, 0.01672776, -0.01941508, -0.023226278, 0.012156765, 0.02232218, 0.0076326653, 0.01085584, 0.006060622, 0.03495472, -0.008242335, 0.03221329, 0.021858755, 0.03203347, 0.03190207, -0.016118368, -0.026371477, 0.013954417, -0.0029367933, 0.018272331, 0.026077881, 0.021193031, 0.064318076, -0.039506707, 0.014438933, 0.0025269242, 0.053086743, -0.042579755, -0.0030491813, 0.07581716, 0.03538027, -0.062346704, 0.03772182, 0.03123496, -0.047416046, 0.028353943, 0.055073958, -0.025744325, 0.012816453, -0.03904162, -0.05163295, -0.022309417, -0.029388469, 0.03653717, 0.053092882, -0.0044350214, -0.03115171, -0.030246502, -0.008699934, -0.030986873, -0.008802887, -0.04645589, 0.046362646, 0.047320582, -0.03457274, 0.048849057, -0.05573885, 0.013023677, 0.0010234237, -0.01906987, -0.06623616, -0.058079854, -0.007888799, -0.01224501, -0.016096724, 0.050687227, -0.0066156243, 0.026884299, -0.0017725691, -0.0282324, 0.008227559, 0.0019017013, -0.008351671, -0.015096055, -0.025332512, -0.005224789, 0.025381353, 0.019676486, -0.029553857, -0.0017538064, -0.00538685, -0.06477983, -0.03635485, 0.05267635, 0.010653264, -0.002312312, 0.031376485, 0.062243756, 0.009691445, -0.0085104015, -0.004900668, 0.010467911, -0.012011354, 0.010867495, 0.02749702, -0.02572823, -0.0696017, -0.058359575, 0.018917244, -0.05439908, -0.033229638, -0.022204522, -0.024175888, -0.037626915, 0.0073004966, -0.0027136132, -0.04172311, 0.01232271, -0.015362439, 0.016931169, 0.026194569, 0.0074847573, -0.019387886, 0.02740489, 0.043604847, -0.0006299273, -0.0014074851, 0.0055611203, -0.0215141, 0.039358523, -0.018031461, 0.046278287, 0.014252451, -0.048140872, 0.0024364588, -0.05634769, -0.0133439135, -0.020094959, -0.020942446, -0.020198606, -0.06970382, 0.003281311, -0.0060928124, 0.03025205, -0.020127704, -0.006235448, 0.03754145, 0.008831192, -0.0034879101, -0.013099436, 0.01889005, -0.017349362, -0.0088948095, 0.009738065, 0.00015207056, -0.045077264, 0.01980608, -0.025211522, 0.004356766, 0.025012832, -0.027396565, -0.02751478, 0.01670001, -0.00411423, -0.00471613, 0.007629058, 0.072669744, 0.0009790235, 0.035184354, 0.022484243, -0.015793137, 0.06958394, -0.016509369, -0.046624612, 0.101037, 0.009070398, -0.026597362, -0.019593792, -0.0048385076, 0.03605293, 0.03225672, 0.0015234805, 0.0016813787, 0.012129014, -0.03272514, 0.031874876, 0.025177112, -0.038652007, 0.014608486, 0.05795109, 0.015860293, 0.015291415, -0.04116339, 0.04642592, -0.007117346, 0.019425627, -0.0143726105, -0.023936128, -0.014331263, 0.0071123512, -0.037831157, 0.029404007, 0.02696866, 0.010986265, -0.006232673, 0.03570772, 0.0020096623, -0.04150472, 0.008661361, 0.060142238, -0.0024395115, 0.023723561, -0.036725592, 0.0011066741, -0.0051839966, -0.018854529, -0.015387848, 0.002130098, 0.05716299, -0.05161963, 0.0046031866, -0.009050695, -0.012250422, 0.045475204, 0.015392704, -0.016810318, 0.02227001, -0.021035964, -0.060737204, -0.016198289, 0.0019991174, -0.032462068, -0.0073414976, -0.015916904, -0.008410501, 0.025627911, 0.010967672, 0.037546996, 0.006566229, 0.037105214, 0.04940517, 0.025086923, 0.01779503, -0.007619623, -0.028922822, 0.036636792, -0.019856863, -0.018567454, -0.089639485, -0.025504563, 0.012150104, 0.0078199785, 0.04710913, 0.028779076, 0.006260631, 0.02190371, -0.005897451, 0.011342022, -0.0065695588, 0.026600137, 0.0043437234, -0.07595091, 0.014137011, 0.045226008, -0.047918875, -0.026027374, -0.030556193, 0.009847956, 0.015948538, 0.00042180152, -0.030906953, 0.009372319, 0.01391279, 0.011817658, -0.01363307, -0.02761024, -0.032149743, 0.008278411, 0.0017124588, 0.009413528, -0.020558385, -0.00015678807, -0.016969742, 0.0005949622, -0.012054228, -0.03321132, -0.037610266, 0.028960248, -0.017227262, 0.0009122152, 0.041624874, 0.027894402, 0.0048238696, -0.030060576, -0.076510355, 0.044397943, -0.022181489, 0.00010434038, -0.00050671684, 0.017787814, -0.07563235, -0.027198153, -0.0009690335, 0.00815853, -0.0025241494, -0.021254359, 0.01373297, 0.017171763, 0.004912878, 0.0039338544, 0.011935041, -0.03238714, -0.06547941, 0.01845888, -0.0021572928, -0.06929533, -0.048696987, 0.00034562752, -0.044722617, -0.03348882, -0.005129467, 0.0031124512, -0.021343157, -0.041047398, 0.034907408, -0.025901945, -0.015360791, 0.021329837, -0.052076947, 0.034134846, -0.018537622, -0.060952544, 0.003568663, -0.047907777, 0.025918594, 0.026806597, 0.037135184, -0.033384483, -0.025517883, -0.018097507, 0.025925811, -0.025773877, 0.03151076, 0.0071872375, -0.0020912476, -0.024012163, 0.01947169, -0.021158896, -0.075355954, -0.018326167, 0.04911102, -0.0059163217, 0.009448354, 0.012198805, -0.01657902, -0.008057519, 0.013105609, 0.017758954, 0.004446399, 0.0032456517, 0.034476727, 0.015939659, -0.015659105, -0.014769714, 0.010649101, 0.042797316, 0.012781142, -0.011870383, -0.00083194807, 0.005332459, -0.0019968972, 0.03081371, 0.024260247, -0.0053313496, -0.019631531, -0.007909238, -0.015501206, 0.060568478, -0.08859608, -0.017862186, 0.039415687, 0.018507652, 0.020854758, -0.0054434603, -0.017187303, -0.00563549, -0.019406756, -0.0012753946, -0.058519416, -0.03558895, -0.009986707, -0.04333456, 0.022468148, 0.044700973, 0.019308243, -0.012763936, 0.031011293, 0.005104423, 0.03236161, 0.004415596, -0.0275614, 0.045778785, -0.005286117, 0.0025885296, 0.05439686, -0.01635591, -0.00062902545, 0.017504763, -0.02691982, 0.010282523, 0.033977225, -0.026947567, 0.0017299413, 0.048729178, -0.054900937, -0.011830979, -0.025195982, -0.0040669073, 0.028128613, -0.04566557, 0.017051328, 0.021893721, -0.018273111, 0.006812095, -0.026673397, -0.028088376, -0.004952838, 0.014579903, 0.0006968051, -0.032487113, -0.035165206, 0.012194297, 0.028524883, -0.030988537, -0.051590767, 0.072725244, 0.017808905, 0.02887731, 0.04664036, -0.02478861, 0.025641719, 0.012508359, -0.016916739, -0.0006660024, 0.020714898, -0.017965415, -0.06466439, 0.031384256, -0.021327619, 0.063145906, 0.08491975, 0.02220896, 0.010465118, -0.044334255, -0.03602407, -0.0071262256, -0.023221908, -0.040521808, -0.009322925, 0.006947793, -0.006490194, -0.025096081, -0.005109349, -0.068472825, 0.07412163, -0.0031321538, -0.014098925, 0.025800936, -0.01354205, 0.0101953875, 0.010240898, -0.0025213743, 0.03512275, 0.03149692, 0.017216163, -0.032857507, 0.00090465334, -0.036500264, -0.0064313635, -0.027632719, 0.0017968192, -0.021178877, 0.0154384915, -0.017950986, 0.0045576766, 0.011116135, 0.054282527, -0.014817444, 0.012136784, 0.014738634, -0.026763864, -0.015078296, 0.015495102, -0.034179244, 0.019554108, -0.001919197, -0.015124915, 0.024991741, -0.036681194, 0.060286537, 0.034083784, 0.022654213, 0.02906934, -0.003780674, 0.0188777, 0.033681963, -0.033921726, -0.011782693, -0.0061105727, -0.011464122, -0.008542591, -0.007362102, -0.028049802, 0.021498559, 0.01908763, 0.054938544, -0.0032700722, -0.018635858, -0.026122557, 0.04203474, -0.017789757, -0.016146675, 0.021387836, 0.0152959945, -0.004652027, -0.008796782, -0.015460136, 0.018139686, -0.020790376, -0.058896817, -0.039404035, 0.021058997, 0.02203913, 0.011067295, 0.05726622, -0.015293636, -0.06928978, -0.0058119814, 0.0036474734, 0.03940348, 0.04072799, 0.032611918, 0.020845877, 0.042921636, 0.009837411, -0.00059898593, 0.02841333, -0.04511602, 0.026738333, 0.06266042, -0.0010533938, -0.01886105, 0.016681697, 0.00999524, -0.0022123768, -0.004899003, -0.008707705, -0.013835923, 0.034266934, 0.029575782, -0.053773034, 0.015497877, -0.014216932], [-0.02704281, -0.08707159, -0.049660396, -0.040501304, -0.0032958635, 0.0058618356, 0.015548474, -0.009639949, 0.047805775, 0.0125550525, 0.006222263, 0.014960448, -0.06678109, -0.023810668, -0.009960116, 0.03758962, -0.008397367, -0.019284878, 0.0041745133, 0.03476413, -0.028993588, 0.0059818625, 0.009237176, 0.03838439, -0.04840359, 0.049984787, -0.0005358327, -0.0021530627, 0.014521123, -0.0045844684, -0.0053970227, -0.050598826, -0.0221537, -0.010640189, 0.020443436, 0.022755453, 0.022258129, -0.014386499, -0.028324407, -0.034342647, -0.06570595, 0.015959356, -0.011325128, 0.031625368, 0.020561146, 0.04699896, 0.013871172, 0.018253068, -0.0100117875, -0.034908254, 0.023228606, -0.0041358173, -0.044922356, 0.010444625, -0.01354863, 0.036593724, 0.015141646, 0.036034834, 0.039902154, -0.0173246, 0.0046175453, -0.03303927, -0.054085158, 0.009007087, 0.043660924, 0.03363801, -0.002842404, 0.015485044, 0.007059262, -0.031630464, -0.029845359, 0.0070247087, -0.0048770625, -0.024277566, 0.047617625, -0.0064874566, -0.07134673, 0.0028824902, -0.011411324, -0.039428018, -0.019678788, 0.008539261, 0.01913728, -0.032934073, -0.052281514, 0.015862038, -0.02728321, -0.00043886146, 0.051740237, 0.011606425, -0.054618325, 0.016210532, 0.010807717, -0.012523279, -0.0009729563, 0.021119107, 0.011615231, 0.06634732, 0.025197228, 0.03990627, 0.038186044, -0.06765913, -0.021006959, -0.026220001, -0.005271898, 0.009075673, 0.010176303, -0.03465569, -0.010105399, 0.002029213, -0.015859721, 0.010187888, -0.007295203, -0.054077737, 0.011158296, -0.012467928, 0.028386852, -0.020883687, -0.03307217, -0.013067134, -0.027171409, 0.013250592, 0.014110068, 0.027535427, -0.029467668, -0.015573326, -0.002907399, 0.0018094925, -0.042996377, 0.002253162, 0.037836853, 0.018107612, 0.05641724, -0.011596345, -0.05711038, -0.0013253894, -0.009735588, 0.05384093, -0.020807685, 0.046471115, -0.020968959, 0.0006063888, 0.02080954, 0.0064085587, 0.01703079, -0.0373732, -0.0056020874, -0.057685025, -0.009823696, -0.025182398, -0.0067909406, -0.01227051, -0.009567828, 0.00039437288, -0.014073457, -0.05606606, -0.0020075478, 0.012004795, -0.0057705413, 0.027690442, -0.0033032782, 0.0013026816, 0.033677865, 0.017548434, -0.018278325, -0.046490118, 0.033863235, -0.0030261513, -0.010738666, 0.06396348, 0.07901545, -0.011076038, 0.010414965, 0.031282894, -0.063813165, -0.028530164, 0.0071728593, -0.031398755, 0.0048399884, 0.015849061, -0.0045322753, 0.0089336345, -0.010672224, 0.0015278473, -0.04178406, 0.01921351, 0.0062374403, -0.022253104, -0.010264353, -0.00015988089, 0.050776318, -0.03455188, 0.0020857505, -0.0021445039, -0.015104804, 0.031066014, -0.038280584, -0.0019644496, 0.0156484, 0.057969566, 0.008314733, -0.00476028, 0.0052422397, -0.039678264, -0.034776177, -0.046193067, 0.03199263, 0.01706485, 0.036046885, -0.01577584, 0.004094341, 0.040466085, 0.042276677, 0.048978236, 0.037996966, 0.028601648, 0.05743628, -0.044134542, 0.02447846, 0.08088768, -0.053623583, 0.020635294, 0.027365118, -0.024667073, -0.017320892, -0.004418737, -0.022420628, 0.013381798, 0.005502683, 0.024207355, 0.08681578, -0.016395437, -0.042629346, -0.065013595, -3.8232385e-05, -0.019137973, -0.027341485, 0.04036506, -0.030493688, 0.03719131, -0.03495877, 0.019574692, 0.01719878, -0.040954247, -0.013794245, 0.013625211, -0.03486701, 0.010147107, -0.025835823, 0.03755579, 0.060026236, -0.003717578, -0.015952868, 0.004217148, 0.0026563397, 0.020407058, -0.009701526, 0.0024962274, 0.022841185, 0.051629014, -0.003718505, -0.033641256, -0.0010857998, -0.029033905, 0.033182006, 0.020110698, 0.036630217, -0.017426552, 0.021833936, -0.033588137, -0.03913328, -0.08112078, 0.042238213, 0.024960881, -0.016338436, 0.052526202, 0.02456512, 0.01659888, 0.053203493, 0.03109666, -0.07416248, -0.030747643, 0.004357102, 0.0040475354, 0.026704742, -0.001081629, 0.00900309, -0.06493852, -0.011377379, -0.06468456, -0.0061433073, 0.021477798, 0.015119172, 0.04880515, 0.04558459, -0.008858792, 0.05190707, 0.0075014257, -0.033536524, -0.027101316, 0.017416589, -0.019100785, -0.024431651, -0.020203846, -0.007811456, -0.022270944, -0.060306143, 0.019919885, 0.030023312, -0.014278059, -0.029351352, -0.019500835, -0.07225504, -0.01470348, 0.009442705, -0.015188162, 0.039835367, 0.09868312, -0.03711739, 0.0026656084, -0.03248038, -0.018150188, 0.011134893, -0.068838686, 0.038570687, 0.044485815, 0.030769425, 0.0046768636, -0.05503332, -0.030140096, 0.047115277, 0.017787792, 0.011473887, 0.0002680901, 0.02297975, 0.017782556, -0.0052807033, 0.0058627627, 0.006327808, 0.040149335, 0.015129815, -0.04507714, -0.029601945, -0.002115757, 0.022950552, -0.07951038, -0.004384038, -0.051083103, -0.0011845088, 0.0029492232, 0.033601865, -0.030225366, 0.02477644, 0.029413681, -0.023983292, -0.022335129, -0.0027559758, 0.016723078, -0.007990337, -0.005250581, 0.0012790471, -0.001123337, -0.05249515, 0.016288271, -0.005594904, -0.028819341, 0.08611973, -0.0011813227, 0.032718696, -0.021369355, 0.05033977, 0.016717052, -0.009310165, -0.004606423, -0.003919862, 0.049090385, -0.047791872, -0.0028332516, 0.045678668, 0.0070940773, 0.0058164205, -0.019481834, 0.05733653, 0.030904744, 0.039882172, 0.051252715, 0.044072125, 0.036399085, -0.02124145, 0.04200743, 0.024285212, -0.009837541, 0.031212457, 0.043841656, -0.0014625626, -0.011996454, 0.023712188, 0.029697992, 0.025383987, 0.017804012, -0.002706853, 0.024139812, -0.001295962, -0.037784718, -0.014461806, -0.06265106, -0.06774501, 0.023080312, 0.001359451, 0.021410136, 0.02685999, -0.005675424, -0.028300306, 0.022780478, 0.045902964, -0.02745039, -0.018688917, 0.019218957, 0.01321126, 0.008135504, 0.03106277, 0.05285616, -0.060372874, 0.021135788, 0.032719795, -0.0021943073, -0.032637946, 0.0033077965, -0.04398856, 0.054816436, 0.015551545, 0.042012062, -0.003092515, 0.09462724, 0.055833187, -0.045363538, 0.013056244, -0.014802421, -0.054448478, -0.037726793, -0.019026289, -0.04338426, 0.003396962, 0.011149954, -0.024891833, 0.005680695, -0.025703285, 0.037277736, 0.024537196, -0.032619003, 0.00519219, -0.012324268, -0.019947574, -0.04196433, -0.043527458, 0.022392591, 0.05258552, -0.059750035, -0.033469327, -0.034156118, -0.067663446, -0.01273486, 0.031553537, -0.0043941573, 0.005391925, 0.0039261184, 0.01887058, -0.056018554, 0.011030732, 0.033151794, -0.018590672, -0.040555988, -0.017902952, -0.04572941, -0.018453036, 0.012923936, 0.03127919, 0.015367798, 0.009286067, 0.022277663, 0.038198557, 0.024123013, 0.0061719813, 0.018151984, 0.04358492, 0.029427351, -0.031764857, 0.002982358, 0.007918101, 0.0010665677, 0.024641354, 0.034986574, 0.009317581, 0.054568045, -0.030161412, -0.007443961, 0.013290505, 0.034702957, -0.055740505, 0.009225359, 0.06503862, 0.05078373, -0.067322366, 0.026515609, 0.021560285, -0.047673237, 0.031794053, 0.048759498, -0.026177831, 0.026239004, -0.02373096, -0.061431333, -0.006267331, -0.039037816, 0.038718056, 0.06298473, 0.0050568124, -0.032873362, -0.015126122, -0.021474088, -0.0076520387, 0.002923735, -0.024275016, 0.035687268, 0.028986173, -0.03380855, 0.041396637, -0.043255195, 0.01349302, 0.0024589219, -0.028976906, -0.057888582, -0.050010048, 0.013303712, -0.010588401, -0.01903185, 0.0379975, 0.0045267143, 0.014328571, -0.010063227, -0.02690077, 0.008011191, -0.007207992, -0.012689445, -0.04428492, -0.010619798, -0.011367762, 0.03107899, 0.0066093365, -0.02169653, -0.012988238, 0.015464972, -0.069666356, -0.052304454, 0.05138062, -0.01257521, -0.028066743, 0.024446946, 0.049602237, 0.012788617, -0.012698482, 0.011407617, 0.015884051, 0.019258928, 0.016021457, 0.02791474, -0.014853861, -0.07089258, -0.06304404, 0.036312714, -0.027904082, -0.03087161, -0.05810952, -0.039759826, 0.010964339, -0.020931883, 0.012303645, -0.04781412, 0.005086993, -0.025320034, 0.0008378685, 0.007916189, -0.0074833524, -0.02522596, 0.0010797753, 0.03411163, -0.0053258874, 0.02875817, 0.013077213, 0.0022489913, 0.02811123, -0.03146479, 0.044636887, 0.022216491, -0.037413057, -0.020648733, -0.04267105, -0.01135525, -0.022303617, -0.015587691, -0.03302027, -0.078543685, 0.0077897906, -0.011903479, 0.041493956, -0.012406988, 0.0044893115, 0.052987773, 0.023202656, 0.013470775, -0.0026981637, 0.003465592, -0.017137377, -0.02854036, -0.01903741, -0.0032930828, -0.044898264, -0.00160437, -0.039758902, -0.0074194004, 0.020892955, -0.016532147, 0.0057890783, 0.036195897, -0.003598942, 0.0012459414, -0.0015427347, 0.0707554, 0.026833111, 0.013715115, 0.036614113, 0.009613476, 0.075456366, -0.009084942, -0.06099757, 0.07558983, 0.008251708, -0.031691868, -0.002799074, 0.006232574, 0.035550095, 0.03605372, 0.0027153827, -0.0071934815, 0.010322802, -0.008779082, -0.0049892105, 0.0006119499, -0.041478198, 0.024278957, 0.034067143, 0.013198515, 0.02291348, -0.042801272, 0.037785184, 0.00047361816, 0.007967687, -0.008701228, -0.01784236, -0.026467007, 0.024377896, -0.03522014, 0.039507724, 0.043406967, 0.013834099, 0.006286968, 0.046898395, 0.0056370758, -0.02085901, -0.022329306, 0.048965726, -0.0043426775, 0.03303478, -0.03270827, -0.004577691, 0.019652836, -0.030038549, 0.0027575977, -0.0067131435, 0.05551435, -0.025239864, -0.019949427, 0.011206028, 0.01254422, 0.056735937, 0.02094764, 0.01021106, 0.03510799, -0.05293772, -0.05945901, -0.011493002, 0.0146983825, -0.011197223, -0.016818542, -0.02088647, -0.020221457, 0.044595644, 0.035754927, 0.055808272, 0.030225685, 0.060439143, 0.06675328, 0.017622119, 0.018959094, -0.0073290328, -0.03061024, 0.023574207, -0.014507453, -0.041742466, -0.093604006, -0.014503368, 0.0061343284, -0.02542894, 0.044503424, 0.03743993, -0.005624954, 0.021219205, -0.028778443, 0.00029102954, -0.0072590555, 0.025585575, 0.0117440615, -0.06910932, -0.01143357, 0.051017296, -0.0423587, -0.033451714, -0.04471845, -0.004345285, 0.0065527996, -0.013838271, -0.02564999, 0.012929497, 0.019777497, 0.028186306, -0.0015246612, -0.04049945, -0.04297274, 0.01704365, 0.012120362, -0.004911008, -0.02157303, 0.008824498, 0.003411835, 0.012663494, -0.04650101, -0.004371475, -0.04883272, 0.0052706236, -0.011585109, -0.0005904007, 0.033937383, 0.031465255, 0.006214906, -0.022912553, -0.045502335, 0.021672202, -0.03740726, 0.010761606, 0.021862436, 0.012594907, -0.06601922, -0.016369022, 0.0020432314, -0.016602356, 0.01430123, -0.037806965, 0.0019690837, 0.022699147, -0.0039029473, 0.00074518396, 0.0036045029, -0.020972664, -0.016608149, 0.0070412466, -0.001318438, -0.06654753, -0.050903715, 0.0065715676, -0.025429865, -0.052370723, -0.0012037118, 0.030757837, -0.012477661, -0.03651772, 0.06427119, -0.0018750089, -8.897719e-05, 0.023400769, -0.053455364, 0.010078752, -0.015920892, -0.058057617, -0.00249252, -0.040249202, 0.038903076, 0.0137615735, 0.05166609, -0.044321764, -0.031881638, -0.0154027855, -0.016076198, 0.003618348, 0.0023069188, 0.021197192, -0.013954821, -0.017832512, 0.007757699, -0.025877533, -0.07515606, -0.02900749, 0.010015495, 0.0022628938, 0.009070807, 0.025824992, 0.0037938114, -0.006134792, 0.011141033, 0.022459326, 0.016003381, 0.0065324088, 0.026337247, 0.025478294, -0.019399809, -0.014937046, 0.025489995, 0.0209773, -0.003285668, -0.03187654, -0.014512782, 0.047884554, 0.009977176, 0.028863829, 0.026357638, 0.019574981, -0.0028092694, 0.01011096, -0.011774648, 0.039324675, -0.07645179, -0.023535857, 0.047714017, 0.017972002, 0.0051268474, -0.0065379697, -0.011412252, 0.0008749424, -0.052070197, -0.0046615703, -0.06350932, -0.047116432, 0.0077938456, -0.023567835, 0.01287228, 0.021848185, 0.0022930743, -0.015282064, 0.03199008, 0.033066496, 0.016105333, 0.0069643185, -0.020481205, 0.053240567, -0.019197756, -0.012162765, 0.045619346, -0.008371734, 0.00067196315, 0.02942179, -0.02946257, 0.018095966, 0.022847675, -0.010478918, 0.020873493, 0.03228389, -0.047999132, 0.0017517384, -0.045881648, -0.013152404, 0.016943667, -0.019530494, 0.041595444, 0.025042908, -0.004061438, -0.0344161, -0.029811991, -0.020904312, -0.0044895248, 0.052794866, -0.005517049, -0.005611819, -0.032908585, -0.0035155257, 0.031531293, -0.031075284, -0.04523621, 0.06481374, -0.016346894, 0.05854699, 0.059427496, -0.0419787, 0.053593926, 0.02040729, -0.019570347, -0.012540919, 0.004553622, -0.019506859, -0.059117462, 0.010445551, 0.0032708384, 0.03340352, 0.0754128, 0.035221066, 0.015611789, -0.058850534, -0.013822977, -0.026150953, -0.028759558, -0.04505026, -0.015157635, -0.01130381, 0.0067430343, -0.0106976535, -0.021575116, -0.03969495, 0.06693958, -0.023654507, -0.007480572, 0.005422511, -0.014506294, -0.023232084, 0.024136249, 0.0053821933, 0.05984087, 0.008922744, 0.048726134, -0.030048918, -0.015580972, -0.053983204, 0.0046046856, -0.002737207, 0.017157767, -0.014037542, 0.008813839, -0.02520001, 0.011620793, 0.018582098, 0.05145106, -0.022645159, 0.014530509, 0.003935387, -0.03917221, -0.019345125, 0.03616517, -0.032235693, 0.036951747, 0.005119896, -0.0048158905, 0.022120101, -0.027265484, 0.097181626, 0.02271699, 0.022361573, 0.025761444, -0.011591133, 0.024678193, 0.037996966, -0.030765718, -0.014889777, 0.015532081, -0.0296827, 0.0072358847, 0.0064693834, -0.022800868, 0.011770015, 0.01197392, 0.04851296, 0.0014199276, -0.031144796, -0.036798555, 0.050965395, -0.0012225094, -0.013061574, -0.012105995, 0.0063773934, 0.0041318783, 0.006082888, 0.002912149, -0.0072961296, -0.0034020161, -0.0749225, -0.020551877, 0.017889861, 0.032591604, 0.0021705567, 0.049660858, -0.00812473, -0.033441175, -0.037890844, -0.0024654095, 0.0149036795, 0.033457045, 0.015363394, 0.023323147, 0.03826251, 0.028369356, 0.010030556, 0.009446411, -0.055182874, 0.039747316, 0.046526726, 0.0033950359, -0.013347505, 0.021943536, 0.007258476, -0.003625357, -0.008318441, -0.008033899, -0.009284213, 0.026401663, 0.03161795, -0.051347256, 0.015836086, 0.014646016], [-0.025774334, -0.08924595, -0.030474711, -0.035257194, 0.013858466, 0.010619855, -0.023457224, -0.0017352619, 0.043093283, 0.024049822, 0.008819024, 0.0017540464, -0.04957216, -0.021741988, -0.033641964, 0.00571852, 0.042928826, -0.0403817, 0.04171891, 0.045878585, -2.6463687e-05, 0.041774824, -0.029667715, 0.009336956, 0.0037708394, 0.010094952, -0.006781261, 0.015267658, 0.008503823, 0.03912467, 0.021675652, -0.038495984, 0.012509763, 0.025462322, 0.026467469, -0.012184757, 0.013312004, -0.010290594, -0.039900154, -0.057200376, -0.027873823, 0.0043253954, -0.012003172, 0.031936947, -0.0143371755, 0.060176536, 0.018879479, 0.025886213, -0.02841066, -0.03513102, 0.029590186, -0.0261896, -0.05339616, 0.005248789, 0.009173449, 0.011274359, 0.009881707, 0.024033755, 0.027263269, 0.008695212, -0.019692292, -0.0084336465, -0.052700546, 0.023340972, 0.02284289, 0.027616749, -0.017628124, -0.007172959, -0.011993722, -0.04511303, -0.035325244, 0.042376872, 0.0284031, -0.038086448, 0.023050819, 0.02877359, -0.07999217, -0.0005302189, 0.009772662, -0.015203389, 0.020616159, 0.009416347, -0.0034157059, -0.014598505, -0.024841843, 0.03149746, -0.016154192, 0.008584868, 0.056486744, 0.020119019, -0.013735127, 0.009317108, 0.061494272, 0.016097484, -0.0024513765, 0.009014666, -0.0068753315, 0.025400652, 0.017320484, 0.02353189, 0.056280937, -0.041408114, -0.008439082, -0.041471317, 0.016288873, 0.014060548, 0.01714847, -0.011549037, 0.0068566944, -0.0049950215, 0.01904851, -0.0073479265, 0.028855817, -0.051281903, 0.0046292553, 0.009624276, 0.0556607, -0.023864577, -0.007606184, 0.011491621, 0.016571939, 0.019051965, -0.009659246, 0.03636678, -0.019453174, -0.01882856, -0.00032418018, 0.0016199558, -0.064696155, 0.0035414086, 0.01683185, 0.0133584915, 0.011656783, -0.019523585, -0.016521847, 0.031063171, -0.012036017, 0.0734443, -0.028151693, 0.023922466, -0.024822466, -0.00044781523, 0.032352805, 0.00267047, 0.00989931, -0.024855902, -0.013955816, -0.07862173, -0.008920271, -0.014517105, -0.012496532, -0.0064306767, 0.015307354, -0.011703567, 0.01269501, -0.043358862, 0.00898714, 0.012698435, -0.049596734, 0.030794282, -0.0018226865, 0.018766062, 0.01892012, 0.037396826, -0.011151609, -0.07683543, 0.044379603, -0.0072099376, -0.014269362, -0.030770183, 0.086339675, -0.0015131559, -0.012832999, 0.009502354, -0.046801977, -2.3628294e-05, -0.005442541, -0.046661153, 0.048116654, 0.011809421, 0.009465494, 0.010768418, -0.009474946, -0.0053494456, -0.018801741, 0.039439403, -0.022904914, -0.013252637, 0.027399605, 0.012417849, 0.020796679, -0.017613474, 0.031231876, 0.0014300434, -0.03240207, 0.033703957, -0.01826089, 0.010249482, 0.008883766, 0.047604397, 0.009104926, -0.0226463, 0.02180608, -0.012875884, -0.029759364, -0.025446253, 0.030826416, 0.02020219, 0.047311403, -0.0290439, 0.0050687413, 0.048765488, 0.044182546, 0.045965537, 0.047088355, 0.05451142, 0.0205474, -0.042028118, 0.07182576, 0.033601325, -0.027149854, 0.0018137078, 0.024681568, -0.034292452, -0.056855343, 0.049560346, -0.005330543, 0.040368468, 0.045415472, 0.02105848, 0.08554576, -0.007074311, -0.027745169, -0.043815363, -0.01149292, -0.018850416, -0.025607398, 0.0529425, -0.015347049, 0.048125163, -0.022510853, 0.034538895, 0.028664902, -0.023809759, 0.016314391, 0.010738114, -0.025236966, 0.028388923, -0.0020247085, 0.0017768476, 0.036773186, -0.017824003, -0.052304536, -0.010889926, -0.03295308, 0.0062260553, 0.012634757, -0.008286915, 0.018250495, 0.017909301, 0.055281702, -0.03892903, -0.009152035, -0.044394728, 0.012687448, 0.00059165247, 0.04900319, -0.034123037, 0.009268907, -0.0564754, -0.036735382, -0.060358003, 0.03759356, -0.012750773, -0.031809356, 0.0201228, 0.029885154, 0.0025367336, 0.040000338, 0.034119256, -0.027479706, -0.024064472, -0.008560059, -0.016863985, 0.021831892, 0.0016804442, 0.034552656, -0.06669416, -0.004668951, -0.046514656, -0.023373108, 0.008246275, -0.0060067847, 0.022275811, 0.051624984, -0.0120143965, 0.033382054, 0.014515333, -0.07796959, -0.030519987, 0.0026867732, 0.015609323, 0.003574252, 0.014716646, 0.0072552594, -0.042762484, -0.04752193, 0.033643853, 0.019058581, 0.024225617, -0.059324026, -0.051491603, -0.024516126, 0.020923326, 0.012541426, -0.027617695, 0.059870314, 0.06165, -0.027608242, -0.021910043, -0.04854102, 0.0044865403, 0.010208368, -0.039595347, -0.00097336754, 0.049971003, 0.018429833, 0.0131533975, -0.052608393, -0.0036039054, 0.041567367, 0.026687685, -0.0017494388, -0.020224402, 0.033174597, 0.01629218, -0.030835869, 0.012963426, 0.030629594, 0.019300535, 0.022917792, -0.058995124, -0.010233887, -0.015613576, 0.060306963, -0.06503357, 0.027773641, -0.048821725, 0.026853085, -0.008962566, 0.040979024, -0.02284147, 0.019534929, 0.033262968, 0.0049444567, -0.0115258815, -0.012627433, -0.030934162, -0.050898176, 0.008826112, -0.0085345395, -0.028367184, -0.041977733, 0.0702989, 0.026025148, -0.016852643, 0.06226162, 0.0061291796, -0.00046878532, 0.0006677356, 0.046143223, 0.0057775904, -0.0295675, 0.04208955, 0.01824388, 0.08342489, -0.030825472, -0.008126715, 0.037263237, 0.004848585, 0.029866163, -0.060460076, 0.03129851, 0.017743904, 0.042364586, 0.05650754, 0.046956036, 0.00967496, -0.049411483, 0.0037027309, -0.0059763193, 0.028380414, 0.025386238, 0.043319166, 0.03163923, -0.006084758, 0.036136165, 0.02739996, -0.006634825, 0.01254875, -0.022003848, 0.040869385, -0.028694673, -0.003789978, -0.028827462, -0.026067331, -0.024059273, -0.002857606, 0.013159069, 0.017155558, 0.019066142, 0.0055498136, -0.0070724203, 0.022642521, 0.047067564, -0.018694704, -0.008947562, -0.009378365, 0.03335748, 0.009916322, -0.0010941082, 0.0155984545, -0.05577317, 0.022649137, 0.014124993, -0.038281616, -0.005917234, -0.04613566, -0.053011138, 0.03335429, 0.005440415, 0.029578842, 0.0026111626, 0.06624428, 0.04598816, -0.038134176, 0.0070516276, -0.023031207, -0.055910215, -0.03354745, -0.04065295, -0.08467435, 0.008661187, 0.013590876, -0.0072189164, -0.006838973, 0.0015735853, 0.027839076, 0.014197296, -0.044128202, 0.008249346, -0.016858196, -0.0145918885, 0.0124114705, -0.045468397, 0.047685914, 0.04527252, -0.031679872, -0.009542995, -0.02647125, -0.050166883, -0.015878037, 0.014421765, -0.032020826, -0.012064134, 0.0008612513, 0.06069636, -0.053210914, 0.03829083, 0.05430349, -0.0033684494, -0.014270662, -0.018860104, -0.05021296, 0.0138131, -0.028231852, 0.029794332, -0.0007901301, 0.006107205, 0.020867564, 0.009910533, 0.020768324, 0.044430643, 0.028700817, 0.05843088, 0.004975173, -0.041234206, 0.021293819, -0.061560214, -0.034838974, 0.020106733, 0.010100918, -0.0051037115, 0.07698476, -0.017135238, -0.044717964, 0.017539281, 0.03487678, -0.03920312, 0.027799161, 0.031410743, 0.038563266, -0.06204979, 0.029649729, 0.023256384, -0.06976963, 0.0431533, 0.02849194, 0.009540159, 0.008812408, -0.0018161297, -0.048015527, 0.046288773, -0.030773489, 0.04132872, 0.015383909, 0.023888204, -0.026262375, -0.011354222, -0.015071071, -0.016469393, 0.006157061, 0.0058253193, 0.031239439, -0.031973805, -0.023729894, 0.024286224, -0.016640462, 0.01538769, 0.008595973, -0.045487303, -0.04108866, -0.036253363, 0.007642335, -0.0048984997, -0.022640422, 0.019818882, 0.021239473, 0.0049264994, 0.005035662, -0.035886653, 0.033161838, 0.008544464, 0.0051656174, -0.009590016, -0.010460245, 0.011801624, 0.030976161, 0.012222207, -0.0004002633, 0.0049988017, -0.02209718, -0.0951483, -0.057305228, 0.03501524, -0.0034308282, -0.04216233, 0.023565087, 0.032383993, -0.0005963781, -0.047937553, 0.024705507, 0.030020691, 0.023569342, -0.028904492, 0.008410963, -0.009341682, -0.062342778, -0.06930663, 0.024174578, -0.022777734, -0.06418012, -0.07013633, -0.004422744, 0.0021640859, -0.05675327, 0.02559393, -0.008861437, -0.0148310065, -0.0031397275, 0.009118631, -0.020562287, -0.021423303, 0.011301412, 0.039682303, 0.030448364, -0.008867227, -0.021321226, 0.04074262, -0.0026882354, 0.04298648, 0.006784156, 0.029490503, -0.013217195, -0.015186377, -0.014387976, -0.0397194, 0.023854122, 0.000925284, -0.04942283, -0.024851292, -0.05434508, -0.0048097754, -0.022947798, 0.023911739, -0.009631011, -0.0064668274, 0.03455969, -0.021342019, 0.030505072, -0.0055172956, 0.024346592, -0.03375727, -0.025520919, -0.01444114, 0.029285854, -0.020418625, -0.015491654, -0.044973623, -0.011896373, 0.027193332, 0.03526381, 0.0008402221, 0.04577084, -0.004286881, 0.03078845, -0.00889558, 0.08381806, 0.04733999, -0.0011280148, 0.04245774, -0.009970195, 0.03265241, -0.0035085652, -0.07851398, 0.07005931, -0.022060322, -0.03887516, -0.0014427435, 0.00071262935, 0.010294375, 0.038771283, -0.0011117111, -0.003387352, 0.044321008, 0.025784139, -0.003488481, 0.011289953, -0.025117112, 0.011136487, 0.036826115, 0.0063229315, -0.011645913, -0.04951734, 0.032782838, -0.002260755, -0.0023881115, -0.0049430393, -0.0044738995, -0.04022197, 0.044496562, -0.046211272, 0.045860626, 0.0041184113, 0.014543687, -0.027790477, 0.0073172096, -0.034342308, -0.015080522, -0.045416415, 0.05571646, 0.010229633, 0.030617543, -0.020323168, -0.008928424, 0.0063512856, -0.046606336, 0.001235051, 0.00070195226, 0.029913891, -0.0031189348, -0.028412668, 0.029869942, -0.0010651044, 0.027282173, 0.011603855, 0.012104775, 0.04710064, -0.028627567, -0.009734857, -0.0036679383, 0.019600142, 0.017514236, -0.0017501477, -0.019527366, -0.011104825, 0.047819883, 0.0331401, 0.025529426, 0.04768237, 0.054252453, 0.05290316, -0.0034610725, 0.026785271, 0.05238487, -0.0032797253, 0.0117527135, -0.00040380753, -0.07218349, -0.037412565, -0.004262544, 0.036953706, -0.004973874, 0.040841978, 0.05827068, 0.002649204, 0.016167896, -0.050068118, -0.039829034, -0.016362593, -0.01098432, 0.014361749, -0.038062107, -0.04480208, 0.027439063, -0.025246551, -0.07272789, -0.034972474, -0.023527164, -0.03047861, -0.034666017, -0.032402895, -0.017381836, 0.026219372, -0.0041992203, -0.0038069908, -0.018703448, -0.030928018, 0.008761844, 0.004378795, 0.013587213, -0.033830047, 0.017152252, -0.031014498, 0.020608125, -0.07864063, -0.003995781, -0.006395234, -0.032300822, -0.009642234, -0.01687391, 0.05046909, 0.0080563035, 0.0035522776, -0.011138976, -0.00764139, 0.022297548, -0.009973975, 0.0409828, 0.011197049, 0.006227709, -0.034057822, -0.008548953, 0.0030652985, -0.025202412, 0.030441748, -0.0019895022, 0.032767717, -0.0033174125, -0.012101467, 0.0067680883, 0.016608328, -0.034522828, -0.009457342, -0.010399048, -0.008654808, -0.06343913, -0.021390222, 0.028529512, -0.05715779, -0.07142172, -0.01062966, 0.023874026, -0.050363943, -0.053216115, 0.053668357, -0.012596126, 0.005741675, -0.0071324366, -0.044873912, 0.008671584, -0.0018856559, -0.04068225, 0.025556363, -0.013917064, 0.06049505, 0.004834349, 0.03309284, -0.023602303, -0.009214089, -0.0067288657, -0.009712174, 0.03192844, 0.0036392296, -0.00349746, 0.007709676, 0.01671111, 0.008310307, -0.061800275, -0.03162789, -0.011407267, -0.017159339, 0.008070362, 0.021138227, 0.020652074, 0.032259237, 0.006549763, -0.014262275, 0.017972626, -0.025949538, 0.013594125, -0.011351504, 0.0091153225, 0.029942717, 0.005136791, 0.0050628935, 0.033093788, 0.007494422, -0.012904828, -0.0033557494, 0.015502405, 0.023214327, -0.0074788276, 0.03175312, 0.035393294, -0.03378468, -0.017232586, 0.021684157, 0.024273818, -0.058433715, -0.0011681828, 0.066204585, -0.0046798196, -0.01994795, 0.02463864, 0.0038336907, 0.020094447, -0.07012405, -0.031049468, -0.053590856, -0.041918483, -0.0010453158, 0.03313868, -0.018057687, -0.011034413, -0.016632428, -0.00081895664, 0.055699565, 0.03479408, 0.03312498, 0.014926937, 0.0052178064, 0.041262563, -0.027826568, 0.009647905, 0.042409953, 0.019690402, 0.02797968, 0.018035004, -0.022393951, 0.0012286713, 0.016528226, -0.02195163, 0.04549108, -0.0033533273, -0.07643848, -0.0038008473, -0.01037991, 0.03379224, -0.012190308, -0.029519299, -0.0023647195, 0.044394728, -0.0053598424, -0.01680137, -0.006306155, -0.030260637, -0.010059037, 0.019994026, 0.022118445, 0.0070123016, -0.0045385226, -0.013353707, 0.02095168, -0.00656583, -0.042876843, 0.04339549, -0.0144380685, 0.064548716, 0.0273592, -0.010492026, 0.08726591, 0.011919174, -0.039964657, -0.043955244, -0.039887868, -0.025819581, -0.03346487, -0.0037188274, -0.021800881, 0.01295114, 0.06182107, 0.040362794, 0.027997637, -0.053133577, 0.006008173, -0.04133746, -0.02342946, -0.05029991, -0.043502524, 0.0024816797, 0.023087678, 0.07025164, -0.009750452, -0.017328046, 0.07586005, 0.006200537, -0.02238639, -0.02691168, -0.00060157635, -0.046709828, 0.023055485, -0.0075780666, 0.049563654, 0.003666166, 0.04503175, -0.0009659837, 0.016084488, -0.025647096, 0.04728683, 0.020931596, 0.0001635078, -0.023215272, 0.023520991, -0.0142752705, -0.030763328, 0.007958954, 0.03596698, -0.047712144, 0.056553613, -0.000760831, -0.032482762, -0.0381871, 0.05634497, -0.027433394, 0.058206882, 0.019532092, 0.009508026, 0.0424298, -0.03131375, 0.08587845, 0.0142190335, 0.01521355, 0.022154832, -0.0030296198, 0.007959426, 0.018050125, -0.029830247, -0.011832576, 0.02522273, -0.032748815, -0.005706469, 0.026603568, -0.026195273, -8.057248e-05, -0.017737288, 0.035642806, -0.050625272, -0.05324494, -0.050262105, 0.042478, -0.01838612, -0.031026784, -0.020581188, -0.012165855, -0.031577796, -0.02351913, 0.016766755, -0.043173615, -0.015997713, -0.05036276, 0.017795885, 0.009313683, 0.04339289, -0.012680832, 0.008802485, 0.034062546, -0.011276131, -0.01972679, -0.004034413, 0.012316012, 0.05785246, 0.0042819194, 0.02809546, 0.02221154, 0.0066531957, 0.0197998, -0.0015963275, -0.030014548, 0.049415737, 0.04526989, 0.017475013, -0.026202124, -0.0058021634, 0.022866517, -0.048008915, 0.0337223, -0.0019915109, -0.013094534, 0.04025363, 0.024216166, -0.031465326, 0.020840155, 0.03557098], [-0.02516553, -0.09508344, -0.024004467, -0.036780905, 0.040691793, 0.026115047, -0.03906533, -0.0018565835, 0.011024442, 0.037194785, 0.007191747, 0.030050512, -0.042137295, 0.002266551, -0.049009558, -0.013740057, 0.031654637, -0.020926218, 0.044980817, 0.03507848, -0.010150049, 0.010629555, -0.031016784, 0.018005062, -0.014769236, -0.003543371, 0.025180053, 0.038819574, -0.0005768311, -0.00048173984, 0.0028440803, -0.02653744, 0.013207211, 0.007696108, 0.032802433, -0.0006920298, 0.032420952, -0.018635092, -0.04108054, -0.051950827, -0.052249085, 0.023244716, -0.031990875, 0.031487074, 0.0018632859, 0.047819868, -0.0026720501, 0.043186232, -0.0014453591, -0.04200213, 0.04339177, -0.020384436, -0.042940475, 0.0011134474, 0.010324034, 0.020091763, 0.012840809, 0.022311395, 0.0001262298, 0.003572415, 0.008002746, -0.0034519103, -0.045526512, -0.0051117484, 0.0174711, 0.0063584074, 0.0048570544, -0.0070403833, -0.015726222, -0.045604706, -0.017024267, 0.02376639, 0.04418043, -0.016326651, 0.02934843, 0.0052318345, -0.103658125, -0.020259324, -0.004429074, 0.0017370561, -0.0048726937, 0.00871991, -0.008608202, -0.057397973, -0.045500815, 0.0051575485, -0.006988788, 0.0043700086, 0.029099321, 0.019647164, -0.038597275, -0.023380859, 0.03988024, 0.0072735734, -0.01767692, 0.0009964335, 0.027901534, 0.02056317, 0.0008182595, 0.04638917, 0.033245355, -0.008425001, 0.011865601, -0.025722953, 0.0029312123, -0.006474723, 0.01784504, 0.0085456455, 0.004776066, 0.030213606, 0.008677182, -0.0063352105, 0.00073308236, -0.05870412, -0.0040382366, -0.025386712, 0.025040418, 0.009761585, -0.019203685, 0.0077212425, -0.0010846825, 0.030304087, 0.0047721565, 0.03892346, -0.019631946, -0.018914362, -0.0012600638, -0.005779621, -0.054348074, -0.02196189, 0.03034172, 0.012952238, 0.04727027, -0.015774537, -0.04125592, 0.023600504, -0.012694228, 0.03439371, 0.004821308, 0.04164913, -0.054775916, -0.0032540478, 0.0005609651, 0.010624179, 0.018679777, -0.0132968575, 0.0038731883, -0.038854204, 0.00795541, -0.024544558, -0.009477288, -0.010453125, -0.030314421, -0.023851845, 0.012593935, -0.019201731, 0.0058155074, 0.0138461795, -0.056564353, 0.00020690376, -0.028367076, 0.0065795886, 0.02992149, 0.022552127, -0.018303879, -0.057453547, 0.012261047, 0.019147832, 0.002412609, -0.0017253269, 0.09412945, 0.0066957646, -0.0077134226, 0.023758013, -0.060784675, 0.003653962, 0.008241801, -0.02326985, 0.055288095, 0.009195785, -0.00806977, 0.013896726, -0.0040650466, 0.013017309, -0.013480896, 0.035286255, -0.033853043, 0.012098093, 0.026402134, -0.0120990705, 0.0053597395, -0.031716075, 0.021344008, -0.009872176, -0.009050565, 0.025368838, -0.036066536, 0.013561326, 0.00023235219, 0.046314046, 0.013124548, -0.0076357857, 0.02972265, -0.028150363, -0.021684997, -0.045286335, 0.032328792, 0.0035958735, 0.03676443, -0.0013597631, -0.019494126, 0.05945982, 0.03986404, 0.04392574, 0.028534636, 0.05492979, 0.050482985, -0.030929651, 0.04295388, 0.029132832, -0.0076557533, 0.0019520937, 0.046532996, -0.036760796, -0.047298197, 0.03951328, -0.020603664, -0.009220361, 0.028310105, -0.015904397, 0.06707829, -0.03291805, -0.029776828, -0.06026288, 0.0038695578, -0.036048103, -0.058166247, 0.045080796, -0.04749033, 0.028084453, -0.018809358, 0.032632638, 0.017980764, -0.0033012445, -0.01956897, -0.0051698363, -0.0068222736, 0.009251639, -0.05907275, -0.0016152946, 0.066663854, 0.012701176, -0.019180227, 0.028483251, 0.0120421, 0.003916475, 0.021084288, -0.011779586, 0.017056663, 0.030962326, 0.012046567, -0.028905507, 0.015510347, -0.043839723, 0.022227056, 0.010976408, 0.035961527, -0.0031132959, -0.019597456, -0.0607601, -0.032603037, -0.056568824, 0.028492188, 0.018957928, -0.028850771, 0.022549335, 0.0018029637, 0.013646224, 0.046231385, 0.03130946, -0.06545853, -0.009694002, 0.0038219772, -0.04235799, 0.0062534017, 0.023199474, 0.022945896, -0.033226922, -0.013505472, -0.013356342, -0.00036696007, -0.012597427, 0.008259674, 0.033688836, 0.04408101, -0.0043457123, 0.046957485, -0.016424395, -0.077650316, -0.0025324156, -0.0032708042, -0.0024922008, -0.00028317922, 0.023295542, -0.0125157405, -0.023686798, -0.03151947, 0.027269548, 0.010290521, 0.003078108, -0.03865717, -0.0446954, -0.054648567, 0.019051572, 0.0074531436, -0.022465274, 0.048776437, 0.05617673, -0.040057294, -0.031239782, -0.014661926, -0.009303024, -0.003960041, -0.077820115, 0.050374627, 0.05894373, 0.02578886, -0.008948422, -0.054459777, -0.023173781, 0.058575094, 0.056586698, -0.004406872, -0.012910627, 0.0054851314, -0.0068733804, -0.031570856, 0.0016957243, 0.01079963, 0.02945455, -0.013975482, -0.069456555, -0.018999262, -0.020680463, 0.0440084, -0.06597015, 0.027274573, -0.05382975, 0.023611117, 0.0077918973, 0.048039377, -0.030237066, 0.008113197, 0.0026219212, 0.011720382, 0.01366015, 0.0035386235, -0.015596642, -0.022361664, -0.0011371853, -0.026968492, -0.020273846, -0.026688108, 0.04275839, 0.015625685, 0.0049620597, 0.047419954, -0.020203471, 0.018829465, -0.023060957, 0.05152745, -0.00051385583, 0.0011614817, -0.0053251106, -0.0020598916, 0.077949695, -0.05616039, -0.0147373285, 0.033326343, 0.0003999139, 0.027220255, -0.029795539, 0.056782182, 0.026430063, 0.0042087305, 0.06255636, 0.056307428, -0.015595804, -0.035156675, 0.02870555, -0.015368757, 0.029468514, 0.043054413, 0.040840365, 0.027368408, -0.010349726, 0.03236845, 0.00037533816, 0.034292337, 0.01595634, -0.024437197, 0.028478784, 0.013917812, -0.005835057, -0.031655755, -0.045360066, -0.0045681503, -0.022553802, -0.007658686, -0.0045794607, 0.039883032, 0.010703456, 0.0158875, 0.040890496, 0.052630004, -0.019589078, -0.015753869, 0.025380008, 0.030643681, 0.025445918, 0.02872789, 0.03369414, -0.057350777, 0.029623229, 0.024554487, -0.037882347, 0.006978385, -0.054916702, -0.047518257, 0.02390393, 0.03209812, 0.021034159, 0.018930001, 0.072266005, 0.04728479, -0.013790048, 0.013504354, -0.0027077969, -0.099366315, -0.022273414, -0.057153195, -0.047864277, -0.012586676, 0.044346385, -0.025496185, -0.010473163, -0.0129544735, 0.012227534, 0.03599972, -0.04363753, 0.04473394, -0.02843857, 0.010484893, -0.006909266, -0.03635195, 0.02469971, 0.06513346, -0.038988393, -0.025171116, -0.030645914, -0.05714188, -0.0019600526, -0.0078064194, -0.034475256, 0.016096463, -0.018081127, 0.039236244, -0.040048357, 0.011465687, 0.024290022, 0.021255758, -0.023376532, -0.036888145, -0.05207929, -0.022500183, -0.011914194, 0.06304788, 0.015326309, -0.00484742, 0.005802661, 0.023551911, 0.031029072, 0.04423126, 0.023566155, 0.038917877, 0.0055845515, -0.021307142, 0.02341088, -0.061467208, -0.00049263134, -0.0064042076, 0.010880898, -0.006932585, 0.053767193, -0.004925755, -0.032430448, 0.0064835204, 0.01022793, -0.037381895, 0.007663713, 0.03146697, 0.025726303, -0.059772603, -0.004719235, -0.0036640156, -0.080679834, 0.043161657, 0.03346542, -0.003414907, -0.0127268685, -0.0031250254, -0.039561734, 0.0077550337, -0.009385688, 0.037233323, 0.02671073, 0.02695308, -0.029035369, -0.0034385403, -0.031448256, -0.03250166, 0.0012410735, 0.008674109, 0.01310465, -0.023293167, -0.030738631, 0.00692323, -0.018483171, -0.005842736, 0.017602354, -0.019624265, 0.011174688, -0.047188718, 0.005625604, -0.029036205, -0.030084023, 0.015816147, 0.013877459, -0.015318489, 0.036679253, -0.037462883, 0.026061427, 0.026943918, -0.0056135952, -0.026917107, -0.0059718983, 0.005721079, 0.014341046, 0.014663882, -0.008161371, -0.014809102, -0.014792345, -0.092735335, -0.042569045, 0.0579406, -0.020974254, -0.014873892, 0.03000946, 0.04024608, 0.016828498, -0.03924071, 0.030028172, 0.03271586, -0.0103698345, -0.026862372, 0.008948632, 0.0073431116, -0.07027314, -0.041184425, 0.050991252, -0.017043607, -0.05660569, -0.056215826, -0.010816386, 0.018670281, -0.05107168, 0.013851207, -0.014093055, -0.043686684, -0.01492053, 0.003974563, -0.025753114, -0.02028781, -0.002391105, 0.022386242, 0.018026844, -0.009337654, -0.027855454, 0.070585914, -0.012004399, 0.026598183, 0.0037743268, 0.034613777, 0.011981778, -0.0058040572, -0.010700489, -0.039286513, 0.04634644, -0.0013929962, 8.531682e-05, -0.019117111, -0.05151181, -0.018340183, -0.003767345, 0.00220958, -0.004662683, 0.004438709, 0.0332811, -0.0133189205, 0.020216735, -0.00905615, 0.024943233, -0.03435936, -0.011799135, -0.0007110201, 0.024358721, -0.03145021, -0.02128536, -0.06725256, -0.025939666, 0.017993892, 0.01421705, -0.011118835, 0.04374924, -0.0496664, 0.017122569, 0.020988217, 0.058429874, 0.010986461, -0.017081797, 0.064142615, 0.007927343, 0.03346095, -0.006479052, -0.06568865, 0.091926575, -0.017243214, -0.038204063, -0.023400549, 0.012390348, -0.0028370987, 0.031044712, -0.01049746, -0.02151492, 0.037870336, 0.006676774, 0.02952437, -0.021557368, -0.005329578, 0.037645523, 0.039039638, -0.011635483, 0.005076002, -0.048726935, 0.039389282, -0.008827857, -0.0008199352, -0.036211196, 0.0114383185, -0.039120067, 0.08852814, -0.039178073, 0.023816101, 0.012004118, 0.05796294, -0.0029669588, 0.023391051, -0.03059055, -0.014268436, -0.024756402, 0.051319677, 0.005609965, 0.032305893, -0.03981154, -0.00037198694, -0.0037969477, -0.055216532, -0.020592773, 0.008920983, 0.043505717, -0.013365279, 0.00799744, 0.013602378, 0.005493789, 0.02343378, 0.033918954, -0.021956166, 0.06714532, -0.035049435, -0.023461428, -0.016809892, 0.023968022, 0.051868163, -0.021776317, -0.026150793, -0.0048067863, 0.04289579, 0.052091576, 0.0033914486, 0.024539968, 0.06294287, 0.042424943, -0.0047866786, 0.009582294, 0.03229472, -0.019555146, 0.017635867, 0.0075034117, -0.05582038, -0.047306016, 0.0073816506, 0.028452532, -0.027566131, 0.055599198, 0.048838504, 0.017022032, 0.037715863, -0.061344888, -0.010618942, -0.017090732, 0.004333145, -7.7916186e-05, -0.05273082, -0.030423615, 0.036908254, -0.009924679, -0.050862793, -0.027922617, -0.003545605, -0.021293739, -0.021165274, -0.021082051, -0.03258181, 0.0086900275, -0.011214345, 0.023668645, -0.042064685, -0.040027134, 0.010425408, 0.015715051, -0.015522914, -0.042572398, 0.045738753, -0.015353677, 0.006658901, -0.057878036, -0.022232363, -0.0060121133, -0.0042527155, -0.00754251, -0.012916772, 0.038848616, 0.037176352, 0.013952304, -0.009910545, -0.0013879692, 0.032658886, -0.03354857, 0.025098504, -0.004773134, 0.024448367, -0.041394994, 0.013570263, -0.031796504, -0.008579158, 0.018458595, -0.011856107, 0.02178302, 0.0005339632, -0.008653444, -0.0018867446, 0.021648968, -0.021845575, 0.0032596332, 0.0023020182, 0.013665213, -0.060006633, -0.029074186, 0.024784606, -0.056917354, -0.07238958, 0.0068264627, 0.03291135, -0.038395084, -0.038691107, 0.025591137, -0.029429976, -0.012529145, -0.0028563682, -0.0625653, -0.00065460766, 0.0017020601, -0.03443504, 0.04103809, -0.021438958, 0.030643681, 0.009838663, 0.018958766, -0.06492457, -0.0043809, 0.0005764122, -0.011055161, 0.053813275, -0.0074129286, -0.0073805335, 0.024687422, 0.0073129507, 0.011829401, -0.034287866, -0.063000955, 0.0009841456, 0.005436818, -0.010678147, 0.022556351, 0.03292922, 0.020360978, -0.004520814, 0.007922665, 0.029019449, -0.04343834, 0.023813868, 0.015426845, 0.0016510412, 0.01946173, -0.0017479477, -0.011851639, 0.01807432, -0.008096022, -0.0047325003, 0.031602133, 0.039977983, 0.0357208, -0.017980486, 0.04360737, -0.0030630275, 0.009771081, -0.023164844, 0.006495808, 0.014616964, -0.041303396, -0.018835051, 0.06852602, 0.015242527, 0.035402432, 0.021729259, 0.003885197, 0.028802736, -0.055823732, -0.017247124, -0.07248495, -0.04832926, -0.0057711033, -0.019173525, -0.034691133, 0.0016700315, -0.010726182, -0.0049313405, 0.057500467, 0.022220913, 0.005146692, -0.0015577651, 0.008676065, 0.049747944, -0.06997488, 0.001411777, 0.06067744, -0.006203692, 0.030011414, 0.03322022, -0.02516609, 0.01565878, 0.029720973, -0.043635856, 0.016334891, -0.0024185434, -0.050531574, -0.005164251, 0.00682758, 0.040230446, -0.008136795, -0.035526987, 0.015407297, 0.038977083, -0.0067449166, -0.0375785, -0.010433787, -0.0031613305, -0.006025518, 0.06487318, 0.0127282655, 0.025593512, -0.012788308, 0.0074375044, 0.034803677, -0.009007557, -0.04490206, 0.030727461, 0.0039055836, 0.06920968, 0.045800194, -0.044946745, 0.051303618, 0.0075101145, -0.03924071, -0.038738027, -0.03761592, -0.00062975264, -0.012882701, 0.0052452395, -0.05802801, 0.008898642, 0.050352704, 0.04556784, -0.0022179582, -0.04929277, -0.007017483, -0.0019548864, -0.005811039, -0.04158769, -0.05316397, 0.008651768, 0.0056747557, 0.030570094, 0.007878192, 0.009112981, 0.0740254, -0.012725752, -0.0003035659, 0.0049076024, -0.015498338, -0.06916053, 0.040991172, -0.0025117495, 0.07282231, 0.009707406, 0.039466362, -0.0066387937, 0.02199275, -0.01819664, 0.03556329, 0.05202008, 0.007272177, -0.03323209, 0.01541009, -0.03608636, 0.0031501597, 0.029543988, 0.023911051, -0.042495873, 0.059076242, -0.016131721, -0.030751478, -0.0067708883, 0.045535512, -0.046954136, 0.052290138, -0.0027346066, -0.010164292, 0.032629848, -0.03321781, 0.103861436, 0.008608377, 9.3276e-05, 0.011881241, -0.017590905, 0.008511575, -0.012784956, -0.017641451, 0.016749186, 0.006080534, -0.015047039, -0.011511488, 0.018410001, 0.0017783879, 0.009046096, 0.0077056033, 0.05360633, -0.069685556, -0.041754693, -0.061774407, 0.038122516, -0.048064895, -0.031510532, -0.032629848, 0.026781943, -0.034931023, -0.0013378403, -0.0050975056, -0.040627006, 0.033364885, -0.0724883, 0.029152382, -0.022363897, 0.010992204, -0.0069035413, 0.028994314, 0.032957114, -0.0057803197, -0.017701495, 0.014240509, -0.0017270023, 0.03776652, 0.014433763, 0.043936346, 0.034001615, 0.0021146284, 0.017250476, 0.0035031564, -0.032809693, 0.03408093, 0.05899679, 0.0048402986, -0.018137993, -0.019816961, 0.03693953, -0.0031959598, 0.0086796945, -0.016546018, -0.0032462282, 0.046407882, 0.03702834, -0.05414379, 0.006415378, 0.005093875], [-0.019728726, -0.08213312, -0.032321442, -0.048794266, 0.03198317, 0.020997835, -0.0117772315, 0.0056126164, 0.022831025, 0.044470605, -0.0054653394, 0.03510014, -0.05492465, -0.036526304, -0.023212343, -0.008606471, -0.012525408, -0.029672766, 0.034752656, 0.050221294, -0.0021240036, 0.0048923423, -0.0230948, 0.02618606, 0.008306165, 0.00427332, 0.008165793, 0.029280415, 0.0026670857, -0.013021602, 0.023617173, -0.024487887, 0.03454555, -0.006907614, 0.006501165, 0.023377847, 0.03799389, -0.011303473, -0.043702006, -0.046785608, -0.026604699, 0.021191135, -0.03899146, 0.016576663, 0.022506842, 0.024392676, -0.0023133487, 0.033890285, -0.016873805, -0.06861245, 0.032497484, -0.033390347, -0.02746477, 0.024476878, -0.0166247, 0.025058871, 0.018993925, 0.02369311, 0.027960103, 0.013160538, 0.010361421, -0.025165875, -0.041543487, 0.0057777273, 0.021032928, -0.0077318824, 0.026450807, -0.0074765845, -0.024297174, -0.03882635, -0.03058289, 0.01739614, 0.021051338, -0.010050472, 0.05208066, -0.0059969155, -0.06360505, -0.05162042, -0.0075571267, -0.00418645, 0.0018259987, 0.0021418377, -0.019159755, -0.034695413, -0.05191037, 0.013284802, -0.020586785, 0.011646567, 0.038948886, 0.0068745343, -0.04107289, -0.027425649, 0.06473724, 0.017645856, -0.014816536, 0.015775846, 0.0006719491, 0.02707817, 0.025018599, 0.049061492, 0.040055763, -0.02036328, -0.016484616, -0.0076439967, 0.009024139, 0.015818994, 0.038294196, -0.009572974, -0.0041179894, -0.0062811133, -0.02732526, -0.0035182405, -0.029083375, -0.06826267, 0.023954296, -0.002571083, 0.031934842, 0.0077740145, -0.028198851, 0.0006733874, 0.025777994, 0.047006525, 0.015331716, 0.047685374, -0.013262365, -0.013054971, -0.0078068064, 0.0056848163, -0.06430806, -0.028748836, 0.028394453, 0.016892502, 0.05904178, -0.02757983, -0.058114395, 0.022994699, -0.029131986, 0.04793448, 0.005805728, 0.049165912, -0.047844447, 0.006407679, 0.01067913, 0.0048047528, -0.0043822317, -0.027366681, 0.0040178876, -0.048842877, 0.053164523, -0.030769287, 0.01141393, 0.021890124, -0.010193721, -0.024086038, -0.0023587255, -0.02771445, 0.0029127384, 0.02263859, -0.027409542, -0.013495938, -0.024224686, -0.009168827, 0.048808362, 0.028288888, -0.019558437, -0.032841656, 0.031524945, 0.02096159, -0.025162425, -0.011510581, 0.0735186, 0.0328838, -0.019658107, 0.04843096, -0.031148985, 0.0016660657, 0.02249879, -0.059982967, 0.04609554, 0.040853415, -0.008443086, 0.0023495208, -0.013421292, 0.004190477, -0.006968596, 0.028824778, -0.021665758, 0.009530402, 0.020753333, -0.010193146, 0.009616121, -0.04368705, -0.0048394147, -0.0049895677, -0.03341106, 0.02507843, -0.03978307, 0.007508298, -0.026980944, 0.048183728, 0.014849112, 0.0007145213, 0.021878907, -0.04090893, -0.04772795, -0.04486181, 0.01501185, 0.0006912216, 0.02644793, -0.0059819585, -0.0014077565, 0.036956053, 0.0479667, 0.06360735, 0.04782805, 0.06179401, 0.034460407, 0.0020443248, 0.017512098, 0.03422338, -0.011755083, -0.0111469915, 0.0281931, -0.045482267, -0.03284209, 0.040843923, -0.021343589, -0.0076589542, 0.014162852, -0.014849615, 0.026059892, -0.02467227, -0.017411133, -0.052447703, -0.0050511244, -0.050856426, -0.069699764, 0.034505278, -0.039298955, 0.0517595, -0.028590918, 0.028223589, 0.037366815, -0.011249161, 0.017582862, -0.026533935, -0.018037923, -0.0018467095, -0.015644966, 0.0069927583, 0.03819438, 0.0298793, -0.023723027, 0.0022591988, -0.021681577, 0.0027848063, 0.01118151, -0.035172913, 0.042065855, 0.038704097, -0.014701188, -0.03497127, 0.0006391571, -0.036457844, 0.010374114, 0.009435478, 0.028086092, 0.036284104, -0.011686622, -0.053242765, -0.050645865, -0.04066903, 0.05691317, 0.004149631, -0.028932933, 0.05144553, 0.017836325, 0.012426456, 0.05824786, 0.021298718, -0.032484252, -0.021442542, 0.008034193, -0.029719941, 0.040923886, 0.011887977, 0.037481874, -0.042263757, -0.00650548, -0.029503629, 0.0030928068, -0.022452766, 0.04768998, 0.040369302, 0.047126185, 0.024124585, 0.057074256, 0.01001768, -0.06440126, -0.030036213, -0.005548183, -0.013443585, 0.007529512, 0.020776201, -0.022897435, -0.013213466, -0.01175796, 0.025446046, 0.035540815, -0.010441387, -0.008947048, -0.05346713, -0.029332478, 0.0051322416, 0.031530984, -0.020508256, 0.046954747, 0.055928256, -0.032032643, -0.034937903, -0.027780036, -0.015992159, 0.006317357, -0.06957895, 0.06605812, 0.029184913, 0.022869281, 0.0086058965, -0.030725565, -0.026351279, 0.048083484, 0.046392106, -0.029197572, -0.0027280676, -0.003847599, 0.0030742176, 0.00014267414, -0.0012196337, 0.034208998, 0.0047657765, -0.0048509208, -0.051399507, -0.022554595, -0.0144843, 0.043453477, -0.06955594, 0.01657997, -0.048002943, 0.007902881, -0.017889207, 0.01989959, -0.033676274, 0.027239252, 0.014488616, 0.0049740346, -0.030306747, 0.00966157, -0.0032026889, -0.028204605, -0.004688803, -0.00034345346, -0.01555709, -0.015504305, 0.05816013, 0.023359438, -0.0071601705, 0.048348118, -0.014519969, -0.0053065573, -0.002767763, 0.07007601, -0.00771821, -0.015110801, 0.0071383086, 0.0148478905, 0.05997376, -0.02640737, -0.023460547, 0.032462966, -0.0054267948, 0.010063129, 0.0099209575, 0.038555093, 0.0208822, 0.04925479, 0.046576202, 0.038116574, 0.004978349, -0.0019376068, 0.038187426, 0.00910238, 0.020530691, 0.033789605, 0.019954817, 0.0039008143, 0.04120866, 0.019653937, 0.003919979, 0.03299742, 0.0042232694, -0.04278915, 0.035803728, 0.016775716, -0.015145175, -0.026458574, -0.060093425, -0.020947209, -0.043925222, -0.0040345713, 0.010227232, 0.029484069, 0.0037693584, -0.0057294737, 0.020957349, 0.056754388, -0.035130627, -0.018292492, 0.008221884, 0.019915698, 0.00747716, 0.03829837, 0.03986016, -0.06399165, 0.04991518, -0.0053767436, -0.039640397, -0.016750403, -0.022943495, -0.02774782, 0.022157637, 0.012831683, 0.028496856, 0.03967837, 0.06482008, 0.044338644, -0.009938864, 0.007014044, 0.01882148, -0.09985809, -0.028340949, -0.07087682, -0.03673974, 0.00708193, 0.026419453, -0.037741333, 0.022600042, -0.024063604, -0.0014488363, 0.015767792, -0.05501008, 0.011589396, -0.0074567366, 0.011357838, -0.018501038, -0.031275548, 0.030219588, 0.050561868, -0.033233866, -0.02313622, -0.029065827, -0.07298242, 0.010714367, 0.04049299, -0.04078179, 0.018001104, 0.01722675, 0.057497673, -0.014522846, 0.027308578, 0.037198827, 0.03460308, -0.037903283, -0.0005511363, -0.042079665, -0.035417702, 0.010261032, 0.046161987, 0.027647715, -0.018899145, 0.041778207, 0.047394853, 0.021404572, 0.036755845, 0.031636838, 0.015944986, 0.016409826, -0.031109864, 0.004505741, -0.035035416, 0.017708275, -0.004872638, 0.016199267, -0.0096638715, 0.040135153, -0.0375302, -0.022698995, 0.027727108, 0.039997656, -0.045271423, -0.0006239117, 0.034393094, 0.039267533, -0.06509622, 0.019488826, 0.018463643, -0.076804705, -0.0032072915, 0.032377824, -0.02644667, -0.011443559, -0.03994991, -0.033298016, -0.019755766, 0.03505181, 0.07103331, 0.034272283, 0.02014028, -0.025836674, -0.0013174345, -0.02847032, -0.042396743, 0.018252509, 0.0045425603, 0.006152246, -0.05417935, -0.033707913, 0.04549464, -0.02815973, 0.013984366, 0.011393219, -0.010382564, -0.021998279, -0.05063781, 0.01016697, -0.031255417, -0.018172828, 0.028181592, 0.0175071, -0.018300835, 0.0031940597, -0.019008163, 0.007220289, 0.020053195, 0.0005893938, -0.02624111, -0.023148878, -0.0016931047, 0.049506772, 0.0077228127, 0.008715203, -0.01225962, -0.008212967, -0.081987, -0.051022112, 0.086671084, -0.0039563305, -0.016761908, 0.0202534, 0.019712618, 0.042001422, -0.04741844, 0.033377264, 0.024800848, 0.0066691525, -0.009442957, 0.007327079, 0.011572713, -0.073242456, -0.05064011, 0.03803963, 0.010975553, -0.03694167, -0.038187765, -0.016737748, 0.008899874, -0.03783856, 0.028595448, -0.010621168, -0.0020802808, -0.039908487, 0.0011482966, 0.029179161, 0.0023129894, 0.0072973794, 0.012004186, 0.020346453, -0.000101252605, 0.009668474, 0.049293913, 0.022139227, 0.012497218, 0.0059900125, 0.025429804, 0.008528231, -0.010379543, -0.029541887, -0.051914398, 0.0347249, -0.002776824, -0.014158682, -0.038791254, -0.08225796, -0.016369268, -0.0123136975, 0.025815675, -0.008402816, 0.022386031, 0.074347034, -0.02382428, 0.030880535, -0.010449729, 0.019297827, -0.041145377, -0.016649438, -0.0006107157, 0.016172515, -0.032435354, -0.032193728, -0.030034054, -0.039460905, 0.030021975, 0.014148039, -0.027443485, 0.040519454, -0.040680535, 0.017659375, 0.0077806297, 0.053165678, 0.020639423, 0.012039855, 0.07557356, 0.010840034, 0.067015424, 0.008861904, -0.05175389, 0.0964224, 0.012870587, -0.043221056, -0.016658355, 0.010728174, 0.0068118265, 0.02161513, -0.0034057696, -0.007730579, 0.017737616, -0.0045972136, 0.012623784, -0.02011993, -0.017229052, 0.015720043, 0.020220894, -0.02369081, -0.0027660371, -0.044393804, 0.047428507, -0.004579379, 0.0029161903, -0.00840109, -0.010541777, -0.028706266, 0.07249054, -0.04435555, 0.0076389625, 0.015825322, 0.04746216, -0.011421877, 0.051236123, -0.034651402, -0.026051836, -0.024674859, 0.03764382, -0.0014038732, 0.039562155, -0.044744447, 0.00045534907, -0.008991922, -0.069284394, -0.029448401, 0.018754745, 0.013720304, -0.020754483, 0.015716014, 0.0005200702, 0.023259334, 0.0014182556, 0.0140541205, -0.0027064937, 0.04095438, -0.07093666, -0.026047233, -0.016196966, 0.031342287, 0.026214069, -0.012273426, -0.015852073, -0.009372194, 0.03677771, 0.05917568, 0.0027392858, 0.042240746, 0.056425314, 0.049942847, 0.00785283, 0.01932429, 0.010698258, -0.016821597, -0.0045885844, 0.018345132, -0.03183359, -0.05417935, -0.030183345, 0.041089, -0.035827316, 0.061308455, 0.021892425, -0.0048198546, 0.021562202, -0.051530674, -0.013978614, -0.013589712, 0.030873416, 0.0121480115, -0.044449896, -0.052519903, 0.025702054, 0.011413354, -0.045395687, -0.029312631, -0.0017776737, -0.03349275, -4.5160967e-05, -0.020550828, 0.004925134, 0.007881595, -0.007975369, -0.00213666, -0.06752456, -0.045912303, -0.005217386, 0.033633843, -0.020421099, -0.020181486, 0.039017923, -0.024910444, 0.0026006387, -0.027155403, -0.015114972, -0.01905915, 0.014009104, -0.03528308, -0.0030444819, 0.040995512, 0.0053019547, -0.015984105, -0.014560815, -0.0015405066, 0.020077933, -0.043645628, -0.0010131014, -0.011570987, 0.020031909, -0.040901452, -0.013170893, -0.026962822, -0.008140479, 0.03202574, 0.014552681, -0.019836307, -0.0003699172, -0.004603542, -0.015683798, -0.006345547, -0.046326518, -0.00996878, -0.019335078, 0.0036829917, -0.07929863, -0.04013458, 0.024963371, -0.06632046, -0.076038405, 0.017509798, 0.028617956, -0.030225055, -0.041890964, 0.018623577, -0.02321216, -0.0118028335, 0.0094492845, -0.069026664, -0.01809689, -0.026865885, -0.021464348, 0.021022573, -0.01959008, 0.04151357, 0.034458105, 0.043234866, -0.032942764, -0.003287258, -0.021524236, -0.002131914, 0.022472326, 0.0007973643, 0.020687174, -0.006422637, 0.009582179, 0.00959541, -0.040625308, -0.09166123, -0.0069663306, -0.005600535, -0.024325939, 0.0067597623, 0.030134156, 0.05617909, -0.023445157, -0.007249629, 0.010578596, -0.02760802, 0.011795929, 0.021548396, 0.00040903752, 0.009977696, -0.025230309, -0.0022238179, 0.0149157755, 0.0017529357, 0.013627681, 0.0009572974, 0.0365706, 0.007009586, -0.0061234813, 0.06419013, 0.005675899, 0.001721582, -0.03237437, 0.00093025836, 0.022570701, -0.023954296, -0.016830657, 0.051141772, 0.036901973, 0.03662468, 0.02019622, -0.0025485742, 0.02935175, -0.059798297, -0.023774803, -0.049779467, -0.015971448, -0.03936195, -0.010145972, 0.00097225513, 0.012729064, -0.018472848, -0.026011566, 0.050999098, 0.018311765, 0.0018639684, 0.012060135, -0.017807227, 0.047998343, -0.03510474, 0.0036773107, 0.036747795, -0.0076457225, 0.016483465, 0.043261327, -0.050476726, -0.0033551434, 0.027411843, -0.03994358, 0.018439768, -0.0021176753, -0.06684974, -0.012318013, -0.0046944395, 0.032125268, 0.020824095, -0.039930925, 0.03976006, 0.033946663, -0.00050856423, -0.037552062, 0.008682987, -0.019180465, 0.011471461, 0.026514376, 0.0043729907, 0.023550436, -0.00010355381, 0.0077837943, 0.020059522, -0.005052275, -0.05064011, 0.028899567, -0.0019299841, 0.060804494, 0.03389316, -0.06336803, 0.040311195, 0.0022615, -0.045432508, -0.044363603, -0.047596782, -0.02237165, -0.035378583, 0.018048529, -0.044934206, 0.016163023, 0.047177676, 0.040834717, -0.003166445, -0.04713539, -0.0009731181, 0.013647331, -0.0028707418, -0.05743784, -0.030662281, 0.0009219165, 0.011242779, 0.048697613, 0.01606177, -0.011418604, 0.045006208, -0.0010489137, 0.0046944395, 0.021463253, -0.008697369, -0.06230027, 0.04347879, 0.015712565, 0.050340094, 0.017561935, 0.06765055, -0.00038947735, 0.05376859, -0.013921084, 0.025378738, 0.037804045, 0.018095452, -0.02918894, 0.00057069655, -0.026910182, 0.008795169, 0.018377349, 0.045259055, -0.03544402, 0.047997188, -0.007951782, -0.021801528, 0.0051379944, 0.033461686, -0.046447337, 0.035265762, 0.0024688235, -0.0017719207, 0.022428604, -0.049316853, 0.08691156, 0.009152215, 0.0025074403, 0.012501244, 0.0074098497, 0.021187397, 0.0017909055, -0.028866773, 0.0427286, 0.013321622, 0.015136689, 0.0012138807, 0.02719783, 0.0049400916, 0.025790652, 0.007951782, 0.05964239, -0.041084394, -0.05533225, -0.0744759, 0.048260674, -0.032977287, -0.033121683, -0.020107849, 0.019095898, -0.038740627, -0.016375309, -0.008086977, -0.032538854, 0.017799748, -0.06292159, -0.0046737287, 0.008066266, 0.013427476, -0.0063363425, 0.02231527, 0.02971534, -0.02992561, -0.00863121, 0.007386838, 0.016399328, 0.046988547, 0.014798989, 0.04167523, 0.0052168104, 0.028405959, -0.0057994896, -0.017761203, -0.019290924, 0.067819685, 0.053223204, 0.019183917, 0.0026929742, -0.0016016322, 0.023797814, -0.013150183, 0.005622972, -0.012532887, 0.016503025, 0.033941485, 0.041854147, -0.020218378, 0.01743846, -0.0035902967], [-0.030251464, -0.039342687, -0.038029145, -0.04220846, -0.019063773, 0.0023989936, 0.012250026, -0.02877985, -0.0012671166, -0.006096769, -0.014547115, -0.027213488, 0.0011212797, -0.021904819, -0.009845055, 0.027612144, -0.020088164, -0.004037011, 0.0482887, 0.03401787, -0.023823913, -0.01564266, 0.014094213, 0.02327171, -0.028670851, 0.07346552, -0.03692991, -0.014112379, -0.017813815, -0.019131394, 0.0028074884, -0.09131465, -0.03962124, -0.019775296, 0.026554447, 0.064779386, 0.049150605, -0.0056379377, -0.010449802, -0.04124412, -0.06529058, -0.034279898, -0.0069567785, 0.050547287, 0.042772125, 0.037434444, -0.01440809, -0.037891384, -0.010053166, -0.0015668648, 0.02093682, -0.017626094, -0.006079296, -0.012472092, 0.05176861, 0.046312585, -0.020471934, 0.030533928, 0.03718995, -0.0046556825, 0.05714582, 0.0032316272, -0.011491351, 0.014454517, 0.018804269, -0.0006449125, 0.034276746, 0.012196314, -0.017496403, -0.01509842, -0.007748033, -0.026548391, -0.021812977, 0.015200354, 0.006071664, 0.00046476084, -0.018051809, -0.01852458, 0.0084201945, -0.01518326, -0.02004628, 0.033281118, 0.014220875, -0.018666128, -0.051187277, -0.01950671, -0.013049132, -0.026107349, 0.05103589, 0.022954442, -0.03440845, -0.014528949, 0.060329083, 0.0035338982, 0.025205074, 0.057004612, 0.04293815, 0.01405788, 0.013005483, 0.048543032, 0.01331507, -0.024285648, -0.031124847, 0.008469144, 0.0230372, -0.0024272527, 0.0033354538, -0.02952064, -0.019479081, -0.041711025, -0.029157309, -0.010641055, -0.022273198, -0.039900802, 0.009658548, 0.033729177, 0.019845566, -0.021438545, 0.0102762105, -0.048286684, 0.009292568, -0.0420273, 0.021903306, 0.010905984, -0.06137669, 0.009190255, 0.03329323, 0.006368889, -0.031141248, -0.02060894, 0.030770095, 0.007716746, 0.039237726, -0.019855497, -0.044389457, 0.00019831814, -0.0022228789, 0.019772017, -0.015265956, 0.044410143, -0.025400113, 0.00029419715, -0.0036229647, -0.008051817, 0.006038863, -0.049949426, 0.043528058, -0.026235523, -0.006323977, -0.0129328165, 0.0345447, -0.0014230463, -0.034707695, 0.005199165, -0.011912209, -0.02037883, 0.015828235, 0.014283953, -9.486975e-05, 0.01988253, -0.0011760317, -0.013826367, -0.018101955, 0.047087185, 0.011438238, -0.009918935, 0.0003693865, -0.030657059, 0.05504161, 0.08097436, 0.08390523, 0.0026624086, 0.039796848, 0.018662091, -0.036555134, -0.042005096, -0.0019028197, 0.0069164084, -0.02979869, -0.015930802, -0.028580017, -0.020474203, 0.018049473, 0.04366027, -0.015880086, 0.028417528, -0.018930757, -0.010412964, 0.023529211, 0.02656454, -0.01284274, -0.060397718, -0.023331903, -0.01491196, -0.0031105166, 0.014496905, -0.025254529, -0.029029071, 0.01050531, -0.0055763735, 0.0049836896, -0.05429174, 0.013804558, -0.021416593, -0.030359581, -0.001123866, 0.05685448, 0.053018063, 0.03893394, -0.031447306, 0.004984825, 0.029956134, 0.00057628326, 0.018918946, 0.038004417, 0.026938971, 0.045801904, -0.059872903, 0.04926389, 0.054204945, -0.02386277, -0.003399163, 0.026138635, -0.031200036, -0.01763997, -0.01631457, -0.013396567, -0.0023568573, -0.02640003, 0.014539798, 0.06834255, -0.043155644, -0.02816067, -0.07751868, -0.005612454, -0.0073867203, -0.034806095, -0.041997023, -0.06373632, 0.05075532, -0.03574369, 0.012118854, 0.014832986, -0.040160183, 0.023443805, -0.0031226275, -0.0007882263, -0.057289217, -0.013178821, 0.013542657, 0.027183337, 0.0412532, -0.04587457, -0.019814657, 0.013838621, 0.029251423, -0.0064717066, 0.0131626725, -0.013789418, 0.040044118, -0.029880945, -0.048009645, 0.004911528, -0.012002159, -0.014339273, 0.016989758, 0.018496826, -0.00679555, 0.016499767, -0.01944527, -0.04124765, -0.05473783, 0.077421285, 0.004530504, 0.019563857, 0.040509384, 0.019792706, -0.0012141309, 0.0033184227, 0.00663079, -0.056021594, -0.01960978, -0.036534946, 0.008080329, -0.006134553, -0.0446453, 0.02180894, -0.03906413, -0.04681923, -0.0340431, 0.0168959, -0.013644843, 0.004602192, 0.068859294, 0.059333965, -0.017214319, 0.022891616, 0.010775791, -0.04014706, -0.054464824, -0.041308712, -0.013556029, -0.05864124, -0.03689928, 0.007442229, -0.0067448355, -0.05103961, 0.0028423078, 0.02375276, -0.008231465, 0.024310373, -0.050030675, -0.043086234, 0.002636168, -0.00437049, -0.002246975, 0.008124484, 0.060754992, -0.050165914, -0.008861238, -0.03532788, -0.016011793, -0.012444085, -0.10279844, 0.040462453, 0.04709173, 0.035349324, -0.004962874, -0.054142874, -0.048496608, 0.020374855, 0.009969397, 0.026249653, 0.02735327, -0.010646607, -0.0056669535, 0.051554017, -0.061459452, -0.0052652713, 0.009559641, 0.0061539183, -0.040972628, -0.054956835, -0.0071767955, 0.034144435, -0.0162144, -0.032643266, -0.003298616, 0.05588232, 0.01399581, 0.0150519945, -0.037482634, 0.023576142, 0.0118587185, 0.021484971, -0.016189786, 0.029526696, 0.025014833, -0.024261424, -0.019305237, -0.04005522, -0.020974794, -0.10303864, -0.0028965552, -0.005139115, -0.04879081, 0.057367373, 0.021594318, 0.009777262, -0.03061139, 0.026039222, 0.0077873934, -0.037620902, 0.01198866, -0.020167895, 0.046379194, 0.0026059535, 0.009705636, 0.08656966, -0.002258203, 0.0058254064, -0.012503631, 0.037683476, 0.040087137, 0.04996204, 0.06312472, 0.013597661, 0.013788081, -0.0008245594, 0.06698612, 0.013227517, 0.006307829, 0.07781338, -0.020175466, 0.01638017, -0.029273372, 0.0054146405, 0.013734919, 0.038805008, 0.016701113, -0.028524004, -0.008234996, -0.048863977, -0.012572261, 0.023744183, -0.045560695, -0.08744972, 0.0068528256, -0.033363875, -0.020235516, 0.01827151, 0.006801858, -0.0029349069, 0.021531397, 0.027240235, -0.007401607, -0.00075088395, 0.016643586, -0.011265278, 0.0018262427, -0.0128462715, 0.06008182, -0.028200286, 0.017163288, 0.054496113, 0.012700436, -0.022351919, 0.0100168325, -0.010999844, 0.056205783, 0.022325678, 0.040446304, -0.030869002, 0.091737024, 0.013867131, -0.012833657, 0.0067947935, -0.04599568, 0.0003765636, -0.02245789, -0.016107673, -0.031416018, -0.011515068, 0.017468145, -0.04136195, -3.103452e-05, -0.019981183, 0.048364397, 0.060593005, -0.013934752, -0.041642774, 0.022960499, -0.033133417, -0.062158864, -0.024842754, 0.03909542, 0.045315444, -0.023944013, -0.054661125, -0.031566396, -0.08304182, -0.014227434, 0.031244507, -0.022483816, -0.06264431, 0.00080626673, 0.016872685, -0.05634052, 0.016240893, 0.020102799, -0.005690671, -0.047632687, -0.021583878, -0.063175686, 0.02287774, 0.044395007, 0.051078785, 0.03419277, -0.034718607, 0.0030116101, 0.0119131, -0.027237205, -0.025665546, 0.0053429836, 0.008620406, 0.024994142, -0.031151593, 0.016390262, 0.0061569777, 0.0070657777, 0.015606074, 0.02445823, 0.021934088, 0.02452282, -0.012213975, 0.016655948, -0.03879315, 0.016080927, -0.00032296084, 0.03878602, 0.019598173, 0.031484645, -0.03196251, 0.023302635, 0.027175136, -0.0019150568, 0.016579814, 0.01548471, -0.035915263, 0.046889875, -0.012002537, -0.037445292, -0.017788015, -0.029296083, 0.020453515, 0.022938296, 0.03308633, -0.019418778, 0.024536887, -0.042794332, -0.014910699, -0.025053687, -0.025540147, 0.01947252, 0.022522986, -0.052422598, 0.038028862, -0.071964756, -0.014142909, 0.00614433, -0.024879089, -0.024181694, -0.022240397, -0.052229833, 0.028737461, -0.020253683, 0.017824916, 0.005411613, -0.0038949582, 0.019847963, -0.017544596, 0.03594703, -0.014450479, -0.011075539, -0.026274882, -0.034166228, -0.012169569, 0.01732584, 0.014968983, -0.023721034, -0.014947789, 0.03624832, -0.012404724, -0.02885857, 0.07421742, -0.03472838, -0.012361326, 0.016424578, 0.043236382, 0.019392537, -0.037803452, 0.021618191, 0.022390107, 0.0021158983, -0.008124484, -0.012749888, -0.03501173, -0.05006398, 0.006904045, 0.0023169918, -0.05091276, -0.007209848, -0.027466811, -0.060632873, -0.03210231, -0.02136487, -0.016734356, -0.055363562, 0.00069234736, -0.0148246605, -0.0037503827, -0.027293725, 0.011949551, -0.01656562, 0.012244253, 0.026053354, 0.023986656, -0.009189245, 0.020184234, 0.0030297765, 0.04430039, 0.027578332, 0.061310083, -0.032802604, -0.03729239, 9.5879e-06, -0.09745898, -0.01920141, -0.03295412, 0.033914484, -0.021315036, -0.07769631, 0.0203102, -0.0056391996, 0.00016602206, -0.0047152285, 0.02543367, 0.034871697, 0.0014755274, -0.027844902, 0.024457032, -0.0010904975, -0.032871358, -0.0134079205, -0.0059808316, 0.034175314, -0.031506848, -0.008225914, -0.034325693, 0.0062815887, -0.042261444, 0.002533161, -0.013957507, 0.01214787, 0.028146038, -0.030159498, -0.011347028, 0.025534093, 0.014936939, 0.016567891, 0.09219725, 0.019125339, 0.059699316, -0.018129205, -0.015297242, 0.09381912, 0.02606496, -0.043368977, -0.0076173344, 0.018398676, 0.047179032, -0.048974995, -0.010054175, -0.009826841, 0.013368056, -0.008000724, 0.03271114, 0.0291018, -0.019767728, 0.015689842, 0.025540147, 0.014187317, 0.02036369, -0.014652204, 0.011935548, 0.07740564, -0.013192951, -0.011312713, -0.0037437596, -0.03132115, -0.0027961344, -0.049447324, 0.011084622, 0.029888008, 0.041636087, 0.017423045, 0.016238876, -0.03877246, -0.028028965, -0.02486193, 0.060900323, -0.016393796, 0.073848024, 0.005629611, -0.011506994, 0.015515998, -0.009167042, -0.046810653, -0.028025685, 0.019332236, -0.02566933, -0.0049835634, 0.0032255715, 0.032271862, 0.04970872, 0.016174283, -0.031105671, 0.038053367, -0.01986613, -0.08466217, -0.0571126, 0.047336973, 0.04497028, 0.0072464338, -0.022013819, 0.0136410585, 0.03634016, -0.023064956, 0.031772535, -0.013663263, 0.021470841, 0.038868338, 0.006989264, -0.012746105, -0.0020356628, 0.0036939909, 0.007888319, 0.027599022, -0.017151996, -0.033782713, -0.029605418, 0.010775791, -0.0010264099, 0.049014356, -0.00792421, 0.022900447, -0.00030378505, -0.050511077, -0.013690008, -0.061745066, 0.01115628, 0.026167778, -0.0684132, -0.033276323, -0.028442759, 0.0019405405, 0.0262547, -0.025031485, -0.012979494, -0.023307174, 0.006189242, -0.032549914, -0.022162179, 0.030485991, 0.034899957, -0.030620728, -0.00787318, -0.0458178, -0.057796873, 0.03359802, -0.023568572, 0.0064087543, 0.0012335748, -0.04166069, 0.006978982, -0.041680116, 0.010477178, -0.0058881063, 0.0051429626, 0.0012943665, 0.050758343, -0.038189113, 0.015269236, 0.045141224, -0.044159852, -0.04591999, 0.008726755, -0.045823097, 0.012655461, 0.018832654, 0.018867033, -0.0013481092, -0.007926544, -0.029187586, 0.02965487, -0.008888488, 0.0059061465, -0.0021012642, -0.0057426477, 0.013210108, -0.010427094, 0.0067231366, -0.04507726, -0.027108526, 0.03294201, 0.007199504, -0.046024445, -0.030149404, -0.00563491, -0.09283106, -0.06162976, -0.034812655, 0.008650305, -0.02850634, -0.05659643, 0.019905996, 0.008030623, -0.020039596, 0.06721219, -0.049980715, -0.037980195, 0.0055730934, -0.029441163, 0.0032352854, -0.035420224, -0.020424247, 0.050398543, 0.026463298, 0.005818089, -0.015216502, 0.014429789, 0.021541946, 0.005369224, 0.02420087, 0.021980513, 0.008170909, -0.021040646, 0.01139749, 0.003568213, -0.05428568, -0.009787732, -0.0052586477, -0.00042606232, -0.023522653, -0.015164021, 0.0368902, -0.029663764, 0.031036539, 0.0042600553, 0.053069532, -0.01611297, 0.016511878, 0.02964579, -0.040045127, 0.04454387, -0.002388901, 0.03287741, 0.0013357459, -0.016524367, 0.01754479, -0.022049459, -0.036829647, 0.010046984, 0.017631518, -0.051144887, 0.009499086, -0.011481763, -0.03303448, 0.015282104, -0.018511713, -0.040304504, 0.023668613, 0.0036613164, 0.028680941, -0.026806002, 0.014030378, -0.006421685, -0.048769612, -0.026519122, -0.06272303, -0.04954926, 0.008383862, -0.008437857, -0.021011632, 0.031340826, 0.025041576, -0.011733571, 0.00770413, 0.019870166, -0.041372295, -0.022845443, -0.019660242, 0.02116264, 0.009734494, 0.041686174, 0.057051037, -0.025538635, 0.010760652, 0.0055714212, -0.018670542, 0.011406322, -0.0007740968, -0.011798921, 0.0014997494, 0.052925207, -0.024008103, -0.007294373, -0.036804415, 0.016269153, 0.0074487897, -0.024668153, 0.014511035, 0.010619988, -0.02975176, 0.017145941, 0.013750058, 0.005080578, -0.044595346, 0.048205942, -0.043525033, -0.014833996, -0.038837053, 0.01836045, 0.040154126, -0.008935923, -0.06422278, 0.05713739, 0.020830408, 0.04239618, 0.048528906, -0.036429986, -0.004443487, 0.041793153, 0.013344844, -0.020211292, -0.018315917, -0.0172287, -0.020988418, -0.017899852, -0.008645258, 0.0039845295, 0.08082095, -0.018078996, 0.004657701, -0.0155024985, -0.019359484, 0.003186873, -0.027510209, 0.022857554, -0.016244175, -0.06472186, 0.04535985, -0.013223733, -0.02424124, -0.015743332, 0.06262135, -0.03773949, -0.040165227, 0.019461924, 0.007931717, -0.0018630804, -0.029741162, -0.032662947, 0.0035338982, -0.036806937, 0.05067508, -0.038088184, -0.002442896, 0.0144595625, -0.013696568, -0.030436756, -0.021482952, -0.014589251, -0.0035015233, -0.016588077, -0.011265783, -0.034023926, 0.032549407, 0.022094559, 0.008191095, -0.00053395773, -0.045823097, 0.00089823484, -0.016079415, -0.009971417, 0.017791484, -0.02991879, 0.010348964, 0.03785404, -0.032810535, 0.018572519, 0.0064218747, 0.023275888, 0.021233162, 0.026366726, 0.04737028, 0.03406934, -0.008095216, -0.025998348, -0.007388739, -0.005498661, 0.027895238, 0.016643586, -0.028696585, 0.006787161, -0.03525824, 0.058814198, 0.026571603, -0.012189249, -0.027993642, -0.00029369252, 0.009486123, -0.007078898, 0.061464496, 0.013272177, -0.0057688886, -0.009128943, -0.011962672, -0.025722664, -0.025649145, -0.08807143, -0.019445775, 0.014520496, 0.013038788, -0.024443595, 0.054288708, 0.0062016053, -0.06634221, 0.016032988, 0.015609101, -0.012283109, -0.016056957, 0.023266302, 0.041645803, 0.033658575, 0.010536598, 0.016308514, -0.007973096, -0.039288186, 0.021450656, 0.015789758, 0.021825595, -0.0038036208, 0.020318275, -0.011741646, -0.008161196, -0.01637916, -0.0031899952, 0.024847297, 0.04098373, 0.021999184, -0.030527875, 0.014150606, -0.023181368], [-0.058082487, -0.06807214, -0.02155266, -0.03860631, 0.009902655, 0.044070948, -0.031097405, -0.013311646, 0.007924881, 0.034083877, 0.029707318, 0.029463759, -0.054903917, -0.007059389, -0.035992738, 0.017844765, 0.0012498915, -0.053889185, 0.050018486, 0.0108424425, 0.0071655563, 0.010519472, -0.02653026, 0.001066844, 0.042870805, -0.013558867, 0.046000488, 0.03871304, 0.027352683, 0.022436025, 0.011021183, -0.007365832, 0.009947448, 0.030719679, 0.055911973, -0.003335341, 0.029854672, -0.017384777, -0.0034369864, -0.056974076, -0.05047632, 0.009459465, -0.034309134, 0.06233177, -0.014937969, 0.05737958, 0.016684458, 0.027578477, -0.017702417, -0.048395716, 0.0314032, -0.0143380035, -0.015394511, -0.005213947, 0.004806612, -0.015837217, 0.041830447, 0.037094902, -0.02127486, -0.029104985, 0.013309492, -0.03823109, -0.04627463, -0.031946745, 0.012068645, -0.021576725, 0.015907906, -0.009941526, -0.013004557, -0.04251526, -0.020164514, -0.007020841, 0.034991793, -0.0257115, 0.012530248, 0.035546966, -0.08751738, -0.0153905265, 0.008962006, -0.002043241, -0.002146609, 0.00997932, -0.0012346017, -0.05307947, -0.036262576, -0.029811978, -0.015723996, -0.0037311541, 0.012482978, 0.017947592, -0.03201765, -0.00859252, 0.036309734, 0.046737846, 0.017439906, 0.014542371, 0.007464893, 0.022484263, -0.008421048, 0.020905318, 0.0107830055, -0.0018929266, -0.028321112, -0.01427469, 0.027215935, -0.030634187, -0.0022185359, -0.0029061483, -0.0038437825, -0.03117665, -0.035183024, 0.015558931, 0.034491967, -0.039078277, -0.03645445, -0.01465586, 0.027510533, 0.004912134, -0.007156512, 0.006932548, 0.013149595, 0.0069170427, 0.010765778, 0.05307258, -0.015532685, -0.026833043, -0.00043328424, 0.015640065, -0.04773707, -0.006861913, 0.016230311, 0.041875243, 0.04478505, -0.037613142, -0.0013595046, 0.03255091, -0.0006378668, 0.049848575, -0.009682998, 0.010826938, 0.004833316, -0.009672661, 0.015965188, -0.031847037, 0.0026996278, -0.046407066, 0.03347659, -0.029265204, -0.01753283, -0.008541428, -0.0037040338, 0.005287274, -0.048924938, 0.003774655, -0.0066457014, -0.030878607, 0.005946783, 0.018247038, -0.02595743, -0.02039203, -0.03796707, 0.019977806, 0.04288394, 0.012962348, -0.008993017, -0.05200444, 0.024083022, 0.03676111, 0.012212714, -0.020011615, 0.065090835, 0.03574638, -0.02370293, 0.0025857615, -0.06297308, 0.014339296, 0.045361325, -0.0024962297, 0.049161147, 0.009226887, 0.019501235, -0.0050418824, -0.014362985, -0.00011090526, 0.0047213873, 0.0066586225, -0.01367731, -0.030616526, 0.035877313, -0.019078288, 0.027277526, -0.036532838, -0.008069595, -0.04052241, -0.035186335, 0.049232457, 0.022999382, 0.030970994, 0.016870735, 0.052100923, 0.039934617, 0.022788338, 0.024052013, -0.060730428, -0.01573778, 0.026373595, 0.033406816, 0.036720622, 0.051923476, -0.041245557, -0.058340907, 0.04921157, 0.037145294, 0.037762057, 0.02027585, 0.03279199, 0.04116889, -0.026718907, 0.037944026, 0.061951462, -0.023598056, -0.019912124, 0.04307431, -0.029602392, 0.0040768385, 0.025660248, 0.018775506, 0.0121845035, 0.013489095, -0.014863027, 0.04130155, -0.008922382, -0.011904549, -0.083136305, 0.0007270755, -0.014477444, -0.057604406, 0.03383149, -0.036935113, 0.018578677, 0.036174495, -0.0017426122, 0.041730527, -0.026867067, -0.0022210125, -0.0068968, -0.012429572, 0.00415674, -0.010528825, -0.0013050211, 0.062027697, -0.013464113, -0.007850154, -0.01843353, 0.00010573686, -0.006566453, 0.03747521, -0.0065610693, 0.048410684, 0.01679924, -0.005722065, -0.033681605, 0.021578932, -0.04331292, 0.015653362, 0.02006373, 0.022479095, -0.034166787, -0.02659831, -0.07528723, -0.011839082, -0.07147381, 0.032785103, 0.010110253, -0.02227664, 0.037903756, -0.020299647, 0.04398438, 0.038036842, 0.019878529, -0.021574786, -0.011296831, -0.016301997, -0.017251475, 0.013663528, -0.019795619, -0.025436714, -0.03300885, -0.021335157, 0.017175995, -0.0049714088, 0.019975437, -0.015079238, 0.008997862, 0.02756114, -0.05478849, 0.032656536, 0.004752977, -0.01447389, -0.041362707, 0.028377963, -0.019536553, 0.00018197075, 0.0011090526, -0.032506224, -0.02935436, -0.029389031, 0.011466957, 0.026673684, 0.042964913, 0.01108105, -0.021348938, -0.019272104, -0.008844102, 0.040562898, -0.034832217, 0.056280434, 0.06615552, -0.03632761, -0.028384853, -0.018938743, -0.024256919, 0.013528288, -0.067410156, 0.024146767, 0.056128826, 0.013561667, -0.022090606, -0.044835012, -0.016769944, 0.045295864, 0.033997737, -0.0061805453, -0.0075330916, -0.007660431, 0.045884844, -0.024344025, 0.005857951, 0.016327623, -0.0034644434, 0.010967937, -0.05012659, -0.022467952, -0.018023936, 0.044744994, -0.06222248, 0.018520532, -0.047395952, 0.054601565, -0.019736828, 0.013496793, -0.006740025, 0.011400387, -0.016508732, 0.0062778834, 0.031077592, 0.0020660681, -0.0068968, -0.011620717, -0.02376818, -0.034376323, -0.02468471, 0.010511881, 0.04984233, -0.0034542142, -0.04426261, 0.00067016925, -0.011731945, 0.01511154, -0.037934337, 0.06513821, -0.01274786, -0.009288262, 0.026417416, -8.9154906e-05, 0.05077232, -0.037148308, 0.0032802115, 0.012898605, 0.0046727723, 0.031355176, 0.006308679, 0.042006172, 0.020159883, 0.05736235, 0.047309384, -0.0015487972, 0.035505943, -0.014291003, 0.06707894, -0.035128757, -0.003967609, 0.010911785, 0.009544313, 0.010982959, -0.017930904, 0.042831395, -1.9381501e-05, 0.033460654, 0.026413111, -0.01327229, 0.00080024067, -0.026498388, -0.025658308, -0.016574629, 0.0013747945, -0.020155901, -0.009866153, -0.00089004164, 0.02035596, 0.045531023, -0.00577488, 0.01611938, 0.027476508, 0.01901013, -0.020615565, -0.025894117, 0.04841241, 0.0342133, 0.013607105, -0.014529235, 0.04095785, -0.046868775, 0.00888265, 0.029618772, -0.028400913, 0.0037382608, -0.037970513, -0.01357046, 0.037062816, -0.04291958, 0.015594357, -0.017567392, 0.081452265, 0.036942866, -0.010320865, 0.0004511583, -0.012461013, -0.07335166, -0.01940648, -0.03220021, -0.051269885, 0.013640271, 0.023065185, -0.042719252, -0.033696678, -0.05020498, 0.03944243, 0.030009456, 0.019462688, 0.016340006, -0.0021797728, -0.024344943, 0.010186917, -0.03066412, 0.05918852, 0.0419364, -0.06374533, -0.012896021, -0.04914804, -0.07668528, -0.022538964, 0.041365292, -0.034527928, 0.0088327965, 0.027072081, 0.042802967, -0.04430697, 0.017837873, 0.02780944, -0.019026605, -0.03910756, -0.016778188, -0.03334286, -0.012347308, 0.0027968583, 0.06340496, 0.013882753, -0.008630367, 0.0057037603, 0.04237905, 0.01775647, 0.017440336, 0.0019930645, 0.032919265, 0.015427245, -0.034770414, 0.025564631, -0.028402515, 0.015639579, 0.014170246, -0.023682255, 0.0026752932, 0.026386406, -0.020870432, -0.013490386, 0.040377267, 0.051974405, -0.04516062, 0.0070456066, 0.0030853197, 0.0554466, -0.0354647, 0.017538967, -0.014837629, -0.06475661, 0.033526983, 0.030758012, -0.006764359, -0.025335498, 0.00063183694, 0.011581739, 0.014061709, -0.047519136, 0.06436726, 0.0058873734, 0.022393063, -0.053573485, -0.0043587917, -0.051423, -0.0025083432, 0.0119596785, 0.025533622, 0.0125695495, -0.00302556, -0.006377914, 0.019963378, 0.009323794, 0.0033129444, 0.021597022, -0.026041847, -0.032543693, -0.049518444, -0.0072200396, -0.02536651, -0.011285633, 0.007424407, 0.02903306, -0.0055202823, -0.002353345, -0.026664793, 0.0129365055, 0.028620824, 0.0025234714, -0.044455137, -0.0076111155, -0.013555637, -0.0065087387, 0.016415702, -0.0025221794, -0.0024999983, -0.009139455, -0.10986297, -0.05170295, 0.06475834, -0.03193942, -0.009480664, 0.04425787, -0.007166848, 0.021242127, -0.031681433, 0.015386327, 0.03914374, 0.045436267, -0.02084588, 0.031811934, 0.030856427, -0.042989355, -0.034464616, 0.036669802, -0.000684813, -0.03859374, -0.0354226, -0.026992403, 0.016054776, -0.030421851, -0.003643507, -0.0101408325, 0.0050374675, -0.005333251, 0.017567717, -0.02181754, -0.005952382, 0.00792445, 0.024426723, 0.029673079, -0.019827276, -0.029473664, 0.060360022, 0.017318018, 0.008455504, -0.015556886, 0.04554416, 0.031751208, -0.03168278, -0.024011526, -0.02602042, 0.030351862, 0.011574202, -0.006892923, -0.034476675, -0.03975275, -0.011806888, 0.021963978, -0.013676449, -0.007704793, 0.043926235, 0.05041085, 0.009246699, 0.016127778, -0.013479188, -0.018548096, -0.055428427, -0.021497961, -0.016702117, 0.014098103, -0.053203516, -0.024152366, -0.061233483, 0.004888607, 0.0056447545, -0.007136269, 0.00090245117, 0.073328406, -0.041946307, 0.031173209, 0.023252632, 0.054684263, 0.022761634, -0.012827324, 0.04733652, 0.0066119456, 0.024996106, -0.009605472, -0.03583354, 0.05026937, -0.020804534, -0.015118432, -0.007972258, 0.032937355, 0.00858299, 0.031476095, -0.0034206195, -0.015054689, -0.021900665, 0.044505093, -0.011507874, -0.024347473, -0.03714271, 0.014765103, 0.030120578, -0.033263177, 0.020792475, -0.03625633, 0.04178953, 0.030504761, -0.007913683, -0.016244283, 0.016521653, -0.049863435, 0.060938023, -0.0009027472, 0.021218007, 0.004244118, 0.042431705, 0.01569471, 0.02364543, -0.033010144, -0.0013834152, -0.019365996, 0.07447234, 0.0048871534, 0.030175287, -0.012830769, -0.054243658, -0.008383576, -0.05309433, -0.046848964, -0.0039176475, 0.0062520416, -0.0051851976, -0.034642927, 0.028040294, -0.019597283, 0.004825563, 0.02638124, -0.021796005, 0.07117232, -0.048334878, -0.064157076, 0.01020716, 0.056288186, 0.059015803, 0.0025333776, -0.013248763, -0.0047682263, 0.028186034, 0.019988345, 0.043423176, 0.01664914, 0.019689022, 0.009504473, -0.024592971, -0.015290712, 0.0013830854, -0.011730545, 0.022685831, -0.008511952, -0.028383994, -0.047345992, -0.008304543, 0.020815033, 0.0012688423, 0.019446537, 0.027540682, 0.0015221746, 0.028786266, -0.055988148, 0.02217933, -0.01671186, -0.013621695, 0.03428157, -0.07419411, -0.0336998, -0.002031612, 0.013292695, -0.03041259, -0.0241304, -0.053452462, -0.029174112, 0.011445315, -0.011614689, -0.008166933, 0.00093817234, -0.0237993, 0.010566364, -0.024550334, -0.005495732, 0.0013170807, 0.047840435, 0.021095257, -0.0099320635, 0.029278073, -0.0477922, 0.029721748, -0.0389383, -0.033757836, 0.0012541985, 0.022697892, -0.004591693, 0.00060298, 0.05927466, 0.008441236, -0.0009879989, -0.027465042, -0.013196649, 0.021538017, -0.042291295, 0.036927897, 0.0024623119, -0.010124897, -0.042060442, 0.035425186, 0.000113920156, 0.0067703896, 0.0053764284, -0.05765006, 0.0053542475, 0.0071765394, -0.013204508, -0.010038757, 0.010957008, -0.00024350702, 0.017150536, -0.002716425, -0.022914963, -0.08319919, -0.017032463, -0.0034230961, -0.019615803, -0.09347913, -0.052958876, 0.03999782, 0.012981298, -0.052502334, 0.04355454, -0.030201118, 0.004685801, 0.040439285, -0.068143636, -0.0026755086, -0.0065955245, -0.0040615015, 0.04770089, -0.015734764, 0.029635608, 0.030205855, -0.026060797, -0.027390368, -0.011775446, -0.011963124, -0.02789278, 0.044474944, 0.0037777238, 0.031149948, -0.0037659334, -0.0061043114, -0.03508461, -0.028460821, -0.050662383, -0.039149716, -0.02545351, -0.012376595, 0.0049076113, 0.020998565, 0.026398897, -0.0039467197, 0.0076115467, 0.0058232797, -0.028011438, 0.011580555, 0.038593575, -0.010359412, 0.02018368, 0.016505286, 0.014429312, -0.0068675117, -0.021950627, -0.016830465, -0.005256263, 0.043643694, 0.047862835, 0.012886546, -0.0076376037, -0.022102663, -0.0066715432, 0.0020018937, -0.00053622155, 0.0009795565, -0.069252044, 0.0026987663, 0.069073945, 0.012162108, 0.026434323, 0.041632324, 0.0007166848, 0.026988525, -0.05641826, 0.0033245736, -0.042823963, -0.057227325, -0.021131005, 0.024193281, -0.019384086, -0.008867253, 0.023616144, 0.010454382, 0.0543285, 0.05796878, -0.040057257, 0.0038160023, 0.012405022, 0.050509054, -0.044584345, -0.006755099, 0.029215245, -0.0037826768, 0.017064335, 0.056183957, -0.047869723, -0.0030984562, 0.019145478, -0.052541096, -0.005282536, 0.008694542, -0.068209104, -0.008474885, 0.019735698, -0.033129446, -0.0021082766, -0.01927684, 0.007064557, 0.030997697, -0.008688081, -0.035385344, -0.013797206, -0.013410276, 0.043963276, 0.05010118, -0.026488053, 0.03853559, 0.004505553, -0.032911297, 0.024753407, -0.010366304, -0.051194727, 0.0090989685, -0.008179855, 0.09087082, 0.0521259, -0.05534754, 0.052706484, 0.017371532, -0.041104503, -0.01272977, 0.010890465, -0.020652927, -0.014590824, 0.024886925, -0.043788627, -0.009887581, 0.06580924, 0.035601664, 0.033149257, -0.031927526, -0.022096634, -0.03423457, -0.0320303, -0.031454023, -0.030052956, -0.021945298, 0.018253928, 0.035123803, -0.012780592, -0.026400514, 0.07329481, -0.03136013, 0.017313281, 0.035909146, -0.007365832, -0.077146985, 0.015928686, 0.006719782, 0.08021788, -0.02312687, 0.06436726, 0.002565034, 3.3594602e-05, -0.03885485, 0.05633729, 0.039777946, 0.0053009484, -0.026705123, 0.03085535, -0.013495716, -0.020117568, 0.013045903, 0.055934153, -0.041513022, 0.026723431, 0.0046713725, -0.035131123, -0.0316319, 0.060557503, -0.07421995, 0.047750853, -0.0059515205, 0.0076232557, 0.029634746, -0.019746304, 0.095358714, 0.021618558, 0.021071138, 0.009954393, -0.0061065056, -0.011930391, 0.03236754, -0.013570496, 0.0040520257, 0.003210869, -0.03994549, 0.010706018, -0.007709207, 0.013132906, 0.010124897, -0.05670812, 0.034558725, -0.03486258, -0.032191813, -0.046954058, 0.069149755, -0.036410518, -0.043759987, -0.050621465, -0.009422855, -0.032814175, 0.009441806, 0.014020147, -0.025125101, 0.0126487985, -0.066703804, 0.011630624, -0.028762147, 0.00851397, -0.0063338745, 0.007890425, 0.020139534, 2.7564802e-05, -0.033196636, -0.016795577, 0.0048975977, 0.06471365, 0.018375387, 0.02488111, -0.002972907, -0.007154789, -0.011841667, -0.004804889, -0.04888534, 0.039834585, 0.055253647, -0.030293286, -0.011118091, -0.023259524, 0.019801434, -0.020139534, 0.010433278, -0.019210944, -0.018047193, 0.041404918, 0.053794004, -0.033837948, 0.020514673, 0.016608654], [-0.029131934, -0.085361525, -0.037595086, 0.005577719, -0.012296186, 0.03444372, 0.013380897, -0.0136319855, 0.041753188, 0.02611154, -0.010302977, 0.029785825, -0.05996176, -0.024222773, -0.039506506, 0.04224964, 0.00502958, -0.03999342, 0.025469868, 0.06475175, -0.017504187, 0.0109797, -0.030443473, 0.019389497, 0.00728896, 0.018578645, 0.01590524, 0.018910091, 0.0034966404, 0.025858544, 0.030321388, -0.040319264, 0.006554055, 0.018283442, 0.02714236, -0.0051675234, 0.0104594, -0.0276722, -0.03454482, -0.067299835, -0.049374547, 0.014888681, -0.042584427, 0.04458598, 0.011326406, 0.026989754, 0.02792925, 0.0014535952, -0.022355225, -0.008622853, 0.032666788, -0.017626094, -0.04480011, 0.013187036, -0.018821865, 0.012493861, -0.010261962, 0.038969036, 0.006867975, -0.00319047, 0.008992764, -0.041400757, -0.06659641, 0.011638478, 0.017491413, 0.00029567882, -0.0010630131, -0.011937794, -0.022534065, -0.054474533, -0.026499499, 0.016164333, -0.0033628696, 0.0018891253, 0.030099625, 0.028863976, -0.046032306, 0.028045611, 0.008954776, -0.024463845, -0.0048510404, 0.0057371226, 0.013321284, -0.07311469, -0.036093324, 0.013864237, -0.015094642, 0.016579952, 0.0396677, 0.030352145, -0.016999625, 0.010168967, 0.035099853, -0.005606452, 0.0030307078, 0.005453843, -0.03794799, 0.034008786, -0.008846281, 0.026768472, 0.025972612, -0.048577167, -0.056411702, -0.03355573, -0.0037427216, -0.0032381602, 0.02493717, -0.040854704, -0.006812297, -0.019258706, -0.004128326, 0.010129265, 0.01217398, -0.04275802, 0.0066618347, 0.011088909, 0.010300382, -0.016516047, -0.026160898, -0.009227087, -0.040239025, 0.020370362, 0.0022824497, 0.03802048, 0.0020354148, -0.033606283, 0.01741882, 0.025884297, -0.0636606, 0.032548513, 0.03933816, 0.01443771, 0.035351086, -0.0077424925, -0.029295094, 0.034266315, -0.019329764, 0.073480956, -0.040222332, 0.026916312, -0.012510075, -0.007162581, 0.041519504, 0.006762461, 0.0328337, -0.004977896, 0.018741746, -0.057964496, 0.00922959, -0.019160464, -0.022207385, 0.012536783, -0.012789421, 0.0011440862, 0.0055519654, -0.06911731, -0.013139585, 0.026667845, -0.0077277087, -0.0031194116, -0.033365626, 0.015392467, 0.01296337, 0.030858377, -0.018104844, -0.055036794, 0.038540304, -0.0010272454, -0.015593481, 0.017027285, 0.061909895, -0.014865968, -0.0132435495, 0.0069710454, -0.03628897, -0.013339287, 0.0031120195, -0.022121545, 0.009883183, 0.017876767, 0.018612891, -0.016645763, -0.0008741601, -0.017363977, -0.037733387, 0.025161432, -0.035550132, -0.018924398, -0.014362836, 0.013466024, 0.015940903, -0.018580552, 0.016547045, -0.0155381, -0.030332832, 0.017689224, -0.031062491, 0.007953045, 0.034202646, 0.03301528, 0.019081775, 0.011159013, 0.021788308, -0.028950056, -0.03609094, -0.053617746, 0.015293153, -0.0011216719, 0.044389974, -0.07874213, 0.005869701, 0.03565553, 0.050435655, 0.0926872, 0.019740377, 0.02518802, 0.04273799, -0.0045534535, 0.034406524, 0.049609184, -0.040614825, -0.0044637965, 0.024941938, -0.04318818, -0.011304855, 0.020263283, -0.021141272, 0.03397588, 0.04647308, 0.015075089, 0.06763224, -0.0075708088, -0.015033062, -0.03200771, -0.020779544, -0.03221564, -0.03978883, 0.0536762, -0.032525625, 0.048533294, -0.0148058785, 0.04661615, 0.022607028, -0.01690949, -0.021470098, 0.022270935, -0.061539344, 0.029595781, -0.011785186, 0.030388629, 0.0480831, -0.007457783, -0.03565535, -0.022628013, -0.03286613, 0.0043607857, 0.009167936, 0.0014496607, 0.008827443, 0.024662, 0.039149784, -0.06636941, -0.010377134, -0.029798701, 0.042318318, 0.018688213, 0.056346845, -0.029377596, 0.0043874923, -0.035622623, -0.0205585, -0.03951795, 0.03905154, 0.017471757, -0.021180619, 0.030771581, 0.0007319243, 0.024502236, 0.07141311, 0.020382762, -0.023457792, -0.004862486, 0.00439703, 0.0120284045, 0.0073920893, -0.001488409, 0.010796569, -0.0411356, -0.0097402325, -0.05364758, 0.026042627, 0.0023806912, -0.0059827273, 0.055637218, 0.047928583, -0.013724267, 0.035181966, -0.017347762, -0.051478162, -0.0128620295, 0.03805863, 0.009361811, 0.014742928, 0.02329818, -0.0011903456, -0.026726741, -0.061117765, 0.038467336, -0.0046742293, 0.018912476, -0.05933415, -0.045744374, -0.04479272, -0.021375313, -0.015608027, -0.022392426, 0.055278588, 0.05962983, -0.016260426, -0.037888855, -0.040397357, -0.037148703, 0.02641127, -0.05650327, -0.012183875, 0.058749475, 0.0024784561, 0.02484884, -0.04984191, -0.0394612, 0.03664748, 0.027508622, -0.010826435, 0.00011576779, 0.010096955, 0.014737325, -0.05495811, -0.008739932, 0.025707843, 0.008222733, 0.031621896, -0.043061327, -0.029132947, -0.010037342, 0.036572848, -0.0742707, -0.001821763, -0.047156002, 0.003656164, 0.0029575033, 0.034240562, -0.017120758, 0.01977996, 0.0153552685, -3.71983e-05, -0.010519013, -0.011168552, 0.010718835, -0.018165767, -0.012751148, -0.016449995, -0.019304726, -0.03482584, 0.048088107, 0.015487325, -0.021537818, 0.038051, -0.004604959, 0.027341707, -0.017804634, 0.072939195, 0.01595068, -0.027288293, 0.024477437, 0.0021059962, 0.051556848, -0.064887196, 0.00052363763, 0.0094641065, -0.004479057, 0.008979098, -0.0011927302, 0.035984233, 0.027480008, 0.0041099354, 0.03747872, 0.0605245, 0.0100557925, -0.017416317, 0.024127392, 0.0071971565, 0.01806836, 0.040691607, -0.00012375589, -0.008859098, 0.007663685, 0.024062533, 0.038370408, 0.00577909, -0.004578253, 0.0062015057, 0.01036402, 0.009385418, -0.038628053, -0.042796172, -0.039066803, -0.014760692, -0.007782523, 0.024325186, 0.0045867176, 0.03991855, -0.027264686, -0.0062857983, 0.00426159, 0.028273094, -0.017633904, -0.033165626, -0.01215526, -0.007748216, 0.01660785, 0.0041337805, 0.012440448, -0.045005176, 0.0259854, 0.009407534, -0.031650033, -0.007224936, -0.06840005, -0.04978945, 0.050160006, -0.0029539268, 0.042433847, 0.020996056, 0.08211859, 0.036171295, -0.020895908, -0.003422244, -0.023362443, -0.057869114, -0.03153653, -0.041578166, -0.04687177, 0.008225117, 0.0055849915, -0.008109469, -0.003235537, -0.033062615, 0.019964997, 0.033658024, -0.04552206, 0.024071118, -0.019644042, -0.026309215, 0.009100172, -0.060257435, 0.05360371, 0.031292833, -0.058870606, -0.021411916, -0.044220675, -0.033087414, 0.02760877, 0.043469556, -0.03195811, -0.008006697, -0.012837469, 0.053716257, -0.053336643, 0.04478485, 0.011846229, 0.012905903, -0.022008996, -0.00012780956, -0.0529401, -0.016495062, -0.0024432251, 0.047232307, 0.022266522, -0.0031051044, 0.051874466, 0.024104621, -0.002649664, 0.044248812, 0.01678335, 0.023754455, 0.00029305587, -0.016909013, 0.0063866624, -0.011569626, -0.007120554, 0.02972812, 0.026363343, -0.007621837, 0.068704315, -0.025182296, -0.025283402, 0.024203934, 0.030735096, -0.044990394, 0.010869059, 0.0703811, 0.03963527, -0.07618212, 0.022923693, 0.0035963128, -0.08965745, 0.008846758, 0.04144201, -0.014494997, 0.013350852, -0.03967819, -0.0102810385, 0.010518536, -0.033428874, 0.075216874, 0.019023951, -0.005630774, -0.038631868, 0.0063923853, -0.0028753574, 0.026402688, 0.0058019813, -0.0064086295, 0.031677693, 0.0004241441, -0.035182443, 0.012996753, -0.04306395, 0.04751511, -0.015138994, -0.048994932, -0.03595645, -0.0368845, 0.011999791, -0.0048314277, -0.0028280248, 0.035265896, 0.036188226, 0.013736665, 0.0037293683, -0.027000245, -0.0010706434, -0.013425249, 0.015525045, 0.0102083115, -0.01622153, 0.0005342487, 0.029101472, 0.0045850486, -0.0020888725, -0.013049451, -0.029586004, -0.060234543, -0.07018461, 0.030755604, -0.0007473044, -0.014846892, 0.0077620456, 0.027664091, 0.026851451, -0.046376742, 0.012653921, 0.026708381, 0.010113169, -0.009986314, 0.020314565, -0.01466567, -0.07712925, -0.08526232, 0.031559423, -0.0140085, -0.032470126, -0.07222766, -0.007795906, -0.007074503, -0.02891131, 0.025878454, -0.014084804, -0.035717048, -0.013501076, 0.019570837, -0.029395243, -0.0050110407, 0.00171835, 0.020728994, 0.03419478, -0.01781465, 0.02413836, 0.03792844, 0.0035233467, 0.040096432, 0.005129789, 0.0483287, 0.02215302, -0.020344611, -0.0045180437, -0.04603433, -0.009906194, 0.01217398, -0.032444313, -0.01391756, -0.05650327, 0.0026689782, -0.0005360371, -0.0100639295, -0.005925499, -0.03094708, 0.032019872, -0.00780449, 0.022420323, 0.019179778, 0.024206556, -0.043257814, -0.035139997, -0.04053566, 0.01017159, -0.03632462, -0.009650575, -0.014834492, -0.02141287, 0.014027337, 0.014157292, -0.01570627, 0.017489878, -0.013114548, 0.017471757, 0.008603777, 0.07787989, 0.064847134, -0.00382761, 0.036236394, -0.0055591194, 0.057958294, 0.01604296, -0.06614812, 0.09050442, 0.034376957, -0.024781698, -0.038670495, 0.0033325865, 0.01719563, 0.019461388, 0.046101097, -0.021459844, 0.048243456, 0.020761123, 0.02029215, -0.020345088, -0.02874475, -0.0012246825, 0.062829845, -0.0017292442, 0.00037770584, -0.05489325, 0.041220963, -0.008359127, 0.001343431, -0.00048882386, -0.00858792, 0.0042081773, 0.044519927, -0.04119283, 0.05226934, 0.022572694, 0.017706392, -0.0038810228, 0.0041527376, -0.01849614, -0.04375188, -0.03415281, 0.023473263, -0.0007287052, 0.0088379355, -0.013534459, -0.033169918, 0.0068516415, -0.06436642, -0.015327608, 0.009102139, 0.021426698, -0.05006701, -0.06549191, 0.008201749, 7.475428e-05, 0.05522708, 0.036895946, 0.016638134, 0.026914878, -0.04426789, -0.015650949, -0.0026421228, 0.025796548, -0.023045778, 0.0026735088, -0.013990734, -0.03508277, 0.04992871, 0.036870196, 0.036105245, 0.058692962, 0.019247737, 0.06884547, -0.0023902294, 0.0045839758, -0.0067939367, -0.01973513, -0.012311685, 0.02163558, -0.055584755, -0.07329019, -0.0024317198, 0.021618892, -0.034623034, 0.047482204, 0.05530529, -0.011890193, 0.0279364, -0.034931593, -0.027379187, 0.022402916, 0.007737247, 0.01934264, -0.044595994, -0.01588153, 0.03931193, -0.024292637, -0.052249312, -0.027301647, -0.03335257, 0.0051686564, -0.027152376, -0.04060147, 0.008438292, 0.038081523, 0.04078651, 0.0009094508, -0.02976055, -0.02724251, 0.022601308, 0.035395138, 0.0044897874, -0.023274692, 0.024245663, 0.012690344, 0.009687773, -0.04072165, -0.036772013, -0.032919545, 0.01020855, 0.011890581, 0.0046022763, 0.017242605, 0.023297941, -0.0079075005, -0.021137698, -0.044134352, 0.022643395, -0.014839261, 0.005114767, 0.0039792648, 0.026056219, -0.0804399, 0.010018266, 0.006203056, -0.021975612, 0.035908166, -0.04534139, -0.001077797, 0.01222775, -0.0111776125, -0.004217715, -0.016465018, -0.0046955706, -0.0055411165, -0.019530777, -0.015405582, -0.032169856, -0.020796474, 0.011554365, -0.04834921, -0.0374296, -0.015670024, 0.03778966, -0.028001739, -0.04986671, 0.06545757, -0.022726495, 0.0020521062, 0.018971015, -0.070732094, 0.013249034, -0.01638451, -0.052925553, 0.031584222, -0.012355559, 0.043977935, 0.006561924, 0.05870655, -0.0320554, -0.023097284, 0.013667992, -0.028753335, 0.02509264, 0.01338042, -0.012607364, -0.003250321, -0.018924398, -0.04348291, -0.029076435, -0.060175408, -0.009133614, -0.023431117, 0.016889937, -0.00756747, 0.016080158, 0.03226142, 0.0061095827, -0.008180289, 0.010890518, -0.004690563, 0.014032344, 0.046928044, -0.014514969, 0.028241143, -0.04792286, 0.017149372, 0.012110193, -0.011154484, -0.036932193, 0.019051254, 0.034790188, 0.040979654, 0.020140676, 0.04284672, 0.024138836, -0.020820558, -0.043549854, 0.013039913, 0.036998957, -0.07778451, 0.008363777, 0.052813962, 0.015144478, -0.008210333, 0.0021076654, -0.030887945, 0.020231733, -0.06762651, -0.022312306, -0.03587252, -0.023579909, -0.0005746661, -0.000976217, 0.008805506, -0.012516036, -0.0068778708, 0.0022404823, 0.042460434, 0.055660143, 0.020207262, 0.02326706, 0.021778177, 0.056840435, -0.037222147, 0.02188071, 0.037397645, 0.013430495, 0.0063544717, -0.0023837911, -0.039934047, -0.010383335, 0.017305795, -0.014497323, 0.038337145, 0.024141312, -0.06888744, 0.0025943432, -0.025082625, 0.0103087, 0.008600438, -0.0154051045, 0.026517145, 0.021964643, -0.008898978, -0.03012654, -0.005868748, -0.051427133, -0.0021594688, 0.031977426, -0.0059612663, 0.0039101136, -0.0042324993, 0.008261481, 0.0024436424, -0.0242645, -0.05926167, 0.07490403, 0.00013639378, 0.05023869, 0.012402773, -0.053078163, 0.071935795, 0.027112793, -0.02322128, -0.020064788, -0.011374096, -0.032451227, -0.07615542, 0.02862314, -0.031623565, 0.026763702, 0.056351613, 0.025822299, 0.009635314, -0.08704594, 0.02866606, -0.034270607, -0.0030731522, -0.02470325, -0.02673461, 0.003215984, 0.03779419, 0.023799283, 0.010870728, -0.021217668, 0.062973864, -0.0078109875, 0.00262868, 0.0013276932, 0.0075627016, -0.020927384, 0.007423923, -0.028362276, 0.07288435, 0.024700627, 0.04789234, 0.01155818, 0.002626534, -0.036285512, 0.01344504, -0.0019428959, 0.02657294, 0.002974672, 0.029453902, -0.01587509, -0.0042880583, 0.009052063, 0.03400068, -0.044797964, 0.0072417464, -0.020196771, -0.04348005, -0.019188602, 0.03840391, -0.006158704, 0.04276386, 0.01774073, 0.0009461722, 0.024982117, -0.040221855, 0.07877838, 0.001795295, 0.008524373, 0.026776103, -0.017624365, 0.009817729, 0.021987716, -0.036117643, 0.025747903, 0.0572005, -0.020419484, -0.023751117, -0.002570975, -0.021324405, 0.0076948623, 0.017496288, 0.035146672, -0.022415793, -0.06626949, -0.058578745, 0.04640059, 0.0009828936, -0.03645243, -0.018537154, -0.017637718, -0.044580735, 0.0038409631, 0.024953386, 0.008068455, 0.0050775683, -0.064812794, 0.0007954714, -0.0023864142, 0.036819164, 0.012959316, 0.020864433, 0.010648252, 0.0028966987, -0.025743132, 0.008234536, 0.023183128, 0.061554607, -0.007597038, 0.017541384, 0.024026288, 0.03222899, 0.013918842, -0.006012772, -0.043208897, 0.035728015, 0.045618474, 0.00065395096, 0.0061987634, -0.018139418, 0.019193847, -0.005115482, 0.011671683, 0.008706788, -0.004858015, 0.018098405, 0.025793446, -0.06562162, 0.0328647, 0.036882594], [-0.02470732, -0.06418544, -0.047785062, -0.052768894, 0.010843555, 0.032612454, 0.021307653, -0.012688062, 0.012607225, 0.03253851, 0.016966235, 0.013742507, -0.08071516, -0.01761935, -0.020752493, 0.040135987, 0.033164997, -0.03865394, 0.02905777, 0.041879214, -0.04723727, -0.0065342356, -0.026641935, 0.0012968376, -0.029312644, 0.050934844, 0.01142035, 0.014757962, 0.0044125053, 0.0072914874, 0.004886352, -0.05719923, -0.015383734, 0.0067413207, 0.012298618, 0.01840418, 0.023815498, 0.0035834515, -0.055967182, -0.02658214, -0.059642404, 0.0055054673, -0.022962432, 0.053622436, -0.0010613408, 0.03822919, 0.013676294, 0.017867805, -0.003826438, -0.036645144, 0.021635516, 0.0023943766, -0.036904417, 0.0002936281, -0.004454588, 0.04802852, 0.044339985, 0.008115073, 0.013604135, 0.011863763, 0.0062491666, -0.010473132, -0.07590298, 0.0046503795, 0.03050582, 0.042010456, -0.0018297667, -0.010438286, -0.010132191, -0.053291477, -0.020146454, 0.015633853, -0.002527817, 0.0053219204, 0.047696613, 0.0137822125, -0.054333802, 0.032981448, -0.016026625, -0.028029952, -0.016124582, 0.0026329048, 0.0019700425, -0.055378497, -0.046394665, 0.0108621, -0.0012498809, 0.018463382, 0.07235567, -0.013763074, -0.022462996, 0.021859245, 0.026939174, -0.007293389, 0.021152634, -0.00016547786, 0.008745125, 0.0599144, 0.027760338, 0.029928667, 3.5663334e-06, -0.07697954, -0.032715164, -0.012135043, 0.034233827, -0.01029006, 0.032207318, -0.003310508, -0.0223281, -0.0005539704, -0.0024366376, -0.004723965, 0.0075790524, -0.0503105, 0.017846644, -0.004264383, 0.013070374, -0.035462666, -0.04581692, -0.026872499, -0.0068610455, 0.009754634, -0.006481335, 0.02856395, 0.0052230135, -0.01280587, 0.0320504, 0.021506416, -0.031213261, 0.02128578, 0.010688539, 0.01715644, 0.021072274, -0.03036804, -0.023998093, 0.005570137, -0.017311933, 0.06387825, -0.038368754, 0.06408368, -0.044439364, 0.0018787442, 0.033631947, 0.009060388, 0.036302418, -0.0122686615, 0.0061540646, -0.08240274, -0.003627674, -0.042404175, 0.012946265, 0.007379219, 0.0025829761, 0.015516878, -0.016146455, -0.04796721, 0.0066276737, 0.030980023, -0.045032803, 0.042978596, -0.025678312, -0.0060256766, 0.012043744, -0.0012727054, -0.027573936, -0.042128377, 0.01205801, 0.00070185435, -0.007401806, 0.043863043, 0.0816928, -0.023922013, 0.007831193, 0.042647637, -0.051823873, -0.03492819, 0.0035102228, -0.019671537, 0.032760814, 0.019309407, -0.012516403, 0.01995625, -0.016418684, -0.015671182, -0.045380875, -0.007895148, -0.018360434, -0.03018806, -0.0041274363, 0.00031764142, 0.029444834, -0.018232523, 0.005269673, -0.00058155006, -0.034339033, 0.03859798, -0.02775273, 0.024206132, 0.019884923, 0.042248208, 0.03243342, -0.0011302899, 0.027149066, -0.024539344, -0.035167374, -0.051495947, 0.007614508, -0.0043956246, 0.05195774, -0.020337133, -0.0053999037, 0.06491487, 0.030311337, 0.042184018, 0.037447926, 0.02250689, 0.051864944, -0.04230242, 0.060407978, 0.05857916, -0.018611504, 0.021457199, 0.028998569, -0.033173554, -0.011173084, -0.003325249, 0.00032810264, 0.017571323, 0.024468848, 0.001768188, 0.05727341, -0.019610077, -0.016459342, -0.06563194, 0.01848692, -0.028992862, -0.03151854, 0.054719914, -0.04440884, 0.030726576, -0.034039937, 0.038885396, 0.031277217, -0.022151208, -0.020286255, 0.011179266, -0.07430907, -0.0074607693, -0.009805158, 0.016325723, 0.061065137, -0.039678548, -0.008712968, -0.014151685, -0.0100909285, -0.021262478, -0.0018830239, -0.009038515, 0.02880765, 0.037096523, 0.007462671, -0.031546358, -0.02623157, -0.037087012, 0.030609598, 0.012153112, 0.02870518, -0.050329994, 0.0339125, -0.019785065, -0.022476876, -0.0584774, 0.040111974, 0.022698047, -0.028690832, 0.026621964, 0.0065011876, 0.022519017, 0.034967184, 0.026270086, -0.046070367, -0.013886825, 0.014880643, -0.0031995953, 0.03801616, -0.018698998, -0.0064602937, -0.0648407, -0.012639798, -0.041634325, -0.0048556817, 0.012202803, 0.020369707, 0.055882063, 0.056699704, -0.021869706, 0.069223, 0.012280075, -0.048289575, -0.03461697, 0.007456014, -0.006597241, -0.01651545, -0.03382881, -0.005551592, -0.028868278, -0.047678545, 0.030617684, 0.015120301, 0.028085113, -0.046524007, -0.028476933, -0.06530955, 0.030155012, 0.01254208, -0.022048498, 0.045144547, 0.106282435, -0.031425577, -0.028355204, -0.043220155, -0.0026216113, 0.015026151, -0.077108875, -0.008583451, 0.036138844, 0.025974317, 0.00088575826, -0.055726096, -0.050343312, 0.027133614, 0.031044217, 0.005198168, 0.0009707559, 0.038291123, 0.037811216, -0.008646694, -0.0053190673, 0.03381502, 0.062598184, 0.018423557, -0.030391103, -0.040943407, -0.019555394, 0.0039724195, -0.054016158, -0.023233948, -0.07224084, 0.034821678, 0.0039268895, 0.02544983, -0.009908224, 0.006430099, 0.023255346, -0.03322681, 0.00039182112, -0.0106096035, -0.005778411, -0.007499761, 0.0049025193, 0.016438084, -0.013907272, -0.03323442, 0.03772895, 0.012241558, -0.029543296, 0.06247455, 0.004318116, 0.02199429, -0.016764618, 0.052728474, 0.029098902, -0.003943651, -0.0136241065, 0.0062626, 0.04704136, -0.023370419, 0.011026508, 0.036613405, 0.0071402746, 0.018091295, -0.027062288, 0.03804279, 0.01426557, 0.03371992, 0.03747253, 0.041789815, 0.023783937, -0.018565854, 0.02022967, 0.02317546, 0.025284827, 0.021190677, 0.04711174, 0.016863883, -0.030540057, 0.035125054, 0.03982453, 0.02007703, 0.018257724, -0.012569899, 0.01554636, -0.021764144, -0.017570134, -0.011361387, -0.04001711, -0.040008552, 0.022526031, -0.011635756, 0.02816381, 0.035804085, -0.018094148, -0.024990011, 0.027357223, 0.00996802, -0.003266761, -0.03596415, 0.020944748, -0.030379215, 0.0016847358, 0.026342364, 0.059334274, -0.08166618, 0.012097002, 0.009783878, -0.014080716, -0.015549688, -0.028977646, -0.05204564, 0.022790771, -0.015057059, 0.0047798376, 0.00977844, 0.07401805, 0.059336174, -0.0019761645, -0.016438417, -0.038879212, -0.054113638, -0.012568946, -0.016761528, -0.07645457, 0.01404006, -0.008737041, -0.011989061, -0.0055206837, -0.04275225, 0.022080356, 0.010869233, -0.005196861, -0.0026695193, -0.017097477, -0.042841647, -0.039465517, -0.029336657, 0.032643836, 0.062870175, -0.056342356, -0.011952447, -0.042235848, -0.039599612, -0.023367, 0.035977643, 0.0012033996, 0.012566807, 0.036577024, 0.0068566324, -0.06612647, 0.013143602, 0.029540414, 0.0063970503, -0.04582429, -0.031108174, -0.0401181, -0.027106272, 0.007432238, 0.02825487, -0.00729862, 0.014147644, 0.0012425105, 0.017212313, 0.034644786, 0.040702324, 0.026183067, 0.025838323, 0.015820254, -0.02217974, -0.0074426993, -0.006290061, -0.01261947, 0.02657049, 0.027076077, -0.0001266457, 0.06083689, -0.025372619, -0.0067608166, -0.018511647, 0.04619305, -0.04352573, -0.011076317, 0.08855158, 0.025320966, -0.081947684, 0.038645737, 0.009631001, -0.060814064, 0.033631235, 0.06715929, -0.018953396, 0.013909651, -0.020930571, -0.039478835, -0.00079707545, -0.027252017, 0.049413208, 0.06085781, -0.0015356631, -0.018049538, -0.01279642, -0.038662616, -0.012406085, 0.01268616, -0.028792195, 0.035920106, 0.0059876353, -0.022695193, 0.021306701, -0.037983827, 0.027252492, -0.0072039934, -0.0052838796, -0.06617117, -0.071621954, 0.0077127903, -0.016648594, -0.010010459, 0.039117444, 0.01096909, -0.011403232, -0.019378979, -0.03597907, 0.00840604, 0.010824059, -0.0020052302, -0.027636705, -0.004360199, 0.0063319053, 0.012880169, 0.013232523, -0.022129335, -0.028394282, 0.010936279, -0.061706126, -0.05649072, 0.06800189, 0.0034783636, -0.00031954344, 0.006550581, 0.038743693, -0.02605361, -0.013223964, 0.009228957, 0.013492865, -0.000589396, 0.035355706, 0.031547308, -0.022351874, -0.061824054, -0.09059817, 0.033402275, -0.033550162, -0.038935203, -0.05561007, -0.03557322, 0.019843077, -0.039629094, 0.010336422, -0.025527336, -0.0014533997, -0.0069158333, -0.00699144, 0.0029006177, 0.021439368, -0.011397288, -0.0050998563, 0.05434236, -0.030193053, 0.023103658, 0.048556816, 0.0040758434, 0.013597715, 0.0027227765, 0.023562051, -0.01565549, -0.051284824, -0.049834512, -0.0322368, 0.016491437, 0.020798855, -0.048921533, -0.039216824, -0.04077793, 0.00091844966, 0.037260097, 0.01317983, -0.032890625, -0.019415118, 0.039760336, -0.013449356, 0.008787445, 0.010672847, 0.007213265, -0.013836541, -0.016728004, -0.018622916, -0.013152399, -0.04399809, -0.0055577736, -0.038884204, -0.015837848, 0.0025363762, -0.00084688526, -0.0007841178, 0.04873846, -0.028826553, 0.0010437468, -0.011407214, 0.07110281, 0.010602946, 0.03605896, 0.033559673, 0.0029087013, 0.07572419, -0.015224082, -0.021538036, 0.06967569, 0.03680836, -0.03201711, -0.03605325, 0.010906441, 0.023935325, 0.03725035, 0.0155160455, -0.012342486, 0.010598192, 0.017985493, -0.003208511, 0.016040416, -0.027448403, 0.004939609, 0.05986542, -0.0313086, 0.006686518, -0.029840222, 0.018944837, -0.0006295767, -0.01278471, -0.006597479, -0.04654683, -0.016484305, 0.026509268, -0.05753304, 0.040448878, 0.037765685, 0.021139797, 0.012263906, 0.023475982, -0.030051231, -0.019893005, -0.015733711, 0.055717535, -0.007786019, 0.041013785, -0.018810743, -0.0027108889, 0.008535899, -0.04155967, -0.026973605, 0.005385638, 0.048714686, -0.0031564427, -0.007962434, -0.0035589626, -0.020096526, 0.040372793, 0.024823582, -0.00894059, 0.018398741, -0.0514541, -0.047642883, 0.01971897, 0.015364358, -0.007101283, -0.007477887, -0.009428434, -0.02035758, 0.049399897, -0.007769079, 0.025388487, 0.0068611493, 0.028225388, 0.054636344, 0.014091771, 0.023609601, 0.00013504515, -0.0101854475, 0.053799327, -0.017072273, -0.044570606, -0.086737745, -0.032893956, -0.0037668205, -0.00650832, 0.030715164, 0.036174983, -0.017885398, 0.026180927, -0.05766618, 0.029578691, 0.0053720865, 0.015657153, 0.011620064, -0.053497612, -0.010033284, 0.055986673, -0.02579933, -0.03336471, -0.046002842, -0.010856393, -0.0044310503, -0.028002372, -0.006860674, 0.007528292, 0.013494054, 0.03150451, 0.015129336, -0.051520675, -0.025533043, 0.0026357581, 0.027598664, -0.00162815, -0.029187823, 0.0038454582, -0.005020446, 0.008437945, -0.057087958, 0.00057251536, -0.021702755, 0.015014024, -0.005702329, 0.0046105557, 0.03518021, 0.034339488, 0.01840228, -0.019265808, -0.050587963, 0.031736784, -0.06004255, 0.0027678972, 0.008429861, 0.028784115, -0.08654492, 0.006669994, 0.011419399, 0.013391105, 0.019498806, -0.030449828, 0.02318402, 0.009627197, -0.0053485483, 0.0015663336, -0.015793625, -0.015887776, -0.026516639, 0.01155587, 0.018311458, -0.07794198, -0.0102212895, 0.0039425814, -0.024148354, -0.031592958, -0.015010933, 0.026906319, -0.034296237, -0.043028045, 0.04211982, 0.0018221586, 0.008502139, 0.052313827, -0.05670446, 0.031718493, -0.014759864, -0.029980022, 0.0037562998, -0.053138364, 0.053934373, -0.018400377, 0.04201616, -0.029905844, 0.009261054, 0.0031188773, -0.0094769355, -0.005819305, 0.0140523035, -0.010938182, 0.0022957674, 0.006114597, 0.02611602, -0.04338278, -0.06107084, -0.014876365, 0.019098427, 0.0064821676, -0.00804755, 0.01619472, 0.0021340938, 0.027438892, 0.011614358, 0.028728478, 0.03955872, 0.006607702, 0.0026100804, 0.035594385, -0.022313835, -0.0366581, -0.003607465, 0.0026543029, -0.018738108, -0.038632423, -0.01602092, 0.019355204, 0.014374611, -0.0024950067, 0.05073513, 0.013234663, 0.004667617, -0.019091295, 0.00093342824, 0.025334755, -0.053622436, -0.025768898, 0.057354245, 0.022363525, -0.015162147, 0.011738467, -0.03341369, 0.03070185, -0.045455057, -0.017521633, -0.054904412, -0.037789818, 0.005553256, 9.320017e-05, 0.018387835, 0.013168804, 0.0034807413, -0.01382596, 0.06341416, 0.033415116, 0.028677123, 0.02703025, -0.020067401, 0.017816449, -0.017898237, 0.007311934, 0.031665236, -0.010385162, 0.007739151, 0.0058487863, 0.012765096, 0.021775555, 0.04199334, -0.022237752, -0.01304208, 0.0035126004, -0.0553571, 0.020753205, -0.028648593, 0.012959817, 0.024687584, -0.018428909, 0.030592483, 0.040020917, -0.017410362, -0.02505563, -0.02453447, -0.021362811, -0.011394709, 0.030417256, -0.01386424, -0.023514975, -0.022570608, -0.015910601, 0.012704706, -0.029812645, -0.058192693, 0.07595981, -0.025291009, 0.04175582, 0.05223109, -0.03476842, 0.06788016, 0.03903233, -0.016038276, -0.024148297, -0.0027857518, -0.017604847, -0.06800189, 0.015883973, -0.0346096, 0.06463908, 0.055037078, 0.02873466, 0.004275796, -0.06827579, -0.0021754634, -0.030883495, -0.046413448, -0.04230558, -0.027869705, -0.0073043257, -0.0028949114, -0.0014898654, 0.012003802, -0.030316684, 0.078497365, -0.0089358045, 0.011775914, 0.016660482, -0.0045370893, -0.014856869, 0.008056584, -0.0031364711, 0.0421707, 0.008272466, 0.026927719, -0.02972515, -0.008726906, -0.035005227, -0.0027713974, -0.017461717, 0.005510222, -0.01324239, 0.013497857, -0.010466712, -0.0068454575, 0.035740364, 0.07202661, -0.035268657, 0.020195907, -0.0005625296, -0.04185377, -0.0031564427, 0.04911762, -0.00417475, 0.025150375, 0.0030727529, -0.020057295, 0.028003799, -0.035513368, 0.07892652, 0.027694479, 0.012052067, 0.015065261, -0.020860435, 0.020695906, 0.025312882, -0.017166901, 0.003081312, 0.014168329, -0.010533165, 0.014446978, -0.009910602, -0.040642884, 0.0030309076, 0.02045732, 0.05576604, -0.01822741, -0.059732754, -0.033831663, 0.052906793, -0.018388964, -0.0032096996, -0.0056471694, 0.018543981, -0.028285302, -0.011266523, -0.006502139, -0.011976698, -0.03155682, -0.06409509, -0.006223489, -0.0097765075, 0.036574412, 0.027248688, 0.04347693, 0.023892531, -0.013907749, -0.051223956, 0.00898811, 0.012362769, 0.05019685, 0.010902518, 0.045711834, 0.010404183, 0.033657506, 0.024941508, 0.020851992, -0.044093963, 0.03950356, 0.04211982, -0.0014075128, -0.024507068, -0.010546182, -0.006238943, -0.011357107, -0.013596883, -0.01717451, -0.01708036, 0.037817396, 0.010129813, -0.03071136, 0.008657393, 0.021269135], [-0.022107933, -0.0727456, -0.035291977, -0.04516625, 0.008189505, 0.03009742, 0.0031201812, -0.0096411165, 0.0259986, 0.020001825, 0.011676805, 0.024913516, -0.057581585, -0.0037873278, -0.01854977, 0.0021114352, -2.071195e-06, -0.024904046, 0.04020219, 0.054864176, -0.01943269, -0.006425623, -0.028580122, 0.03650984, -0.018116001, 0.01309487, -0.00075404433, 0.0021179449, 0.0049800402, -0.011958488, 0.019878736, -0.0339889, -0.009011769, 0.0143353315, 0.012026356, 0.024494542, 0.045301173, -0.019977858, -0.05843847, -0.035805486, -0.07287765, 0.036363672, -0.030724697, 0.015801478, 0.02092321, 0.039194107, 0.02198544, 0.03727204, -0.007226695, -0.03170585, 0.041767124, -3.313912e-05, -0.042910423, 0.011092137, -0.01956865, 0.02336308, 0.043461952, 0.039748006, 0.0392092, -0.005179171, 0.019115353, -0.0055510984, -0.05453397, -0.0040607257, 0.02527479, 0.020153318, 0.024579758, -0.00530936, -0.0038340776, -0.058160927, -0.028453484, 0.025070854, -0.0034807909, -0.011483888, 0.06344721, 0.007666972, -0.07075675, 0.0009958749, -0.023950113, -0.012283961, -0.007046575, -0.00036778502, -0.0035955943, -0.066372916, -0.065267496, 0.022168886, -0.012876915, 0.015677761, 0.05228406, -0.015963586, -0.038637843, 0.01210288, 0.024989262, -0.0016474876, -0.02088889, 0.013445013, 0.003480199, 0.03694065, 0.030398335, 0.047591913, 0.04198904, -0.046412516, -0.018051943, -0.00472839, -0.0036837682, 0.006101148, 0.038220648, -0.019994725, -0.0013297071, -0.0017261191, 0.032741446, 0.010456279, -0.009909928, -0.08967446, 0.02919142, 0.0025271536, 0.037795164, -0.018722419, -0.04511181, -0.036651865, -0.017827163, 0.013424893, -0.009534302, 0.0305519, -0.009797491, -0.018582761, -0.01579789, -0.0006030136, -0.06008359, -0.014067555, 0.03973735, 0.015230384, 0.047788087, -0.019763637, -0.042261846, 0.014709035, -0.024163151, 0.05571159, -0.02517212, 0.041232165, -0.049126077, -0.020162787, 0.024392758, 0.017297436, 0.028457923, -0.039232574, 0.0063567925, -0.046147402, 0.0082066655, -0.051048446, 0.0045211227, 0.0053442745, -0.00020704552, -0.0012131284, 0.0030470237, -0.033422872, 0.00026511296, 0.021953482, -0.036457762, 0.006836571, -0.018399904, 0.0052430816, 0.037301626, 0.0016122774, -0.032763936, -0.040917344, 0.017575568, 0.0132518, -0.006747953, 0.0460184, 0.07690169, -0.0010708078, -0.010638544, 0.0485062, -0.044017106, -0.037210494, 0.00640517, -0.0399066, 0.03616543, 0.028758245, -0.017239591, 0.021465862, -0.0062632933, -0.00076456676, -0.03718801, 0.029745316, -0.04817363, -0.029674305, 0.007970845, 0.0026215408, 0.030093871, -0.0160346, 0.015951898, 0.03297224, -0.007404226, 0.025022402, -0.031378012, 0.025715956, 0.019971497, 0.055290252, 0.002803806, -0.004569648, 0.011390389, -0.036141757, -0.032644935, -0.058608156, 0.018199293, 0.009417428, 0.05459906, -0.044341322, 0.015393333, 0.062022224, 0.027874732, 0.04231569, 0.055811007, 0.044709403, 0.039795347, -0.053278234, 0.028552828, 0.055001467, -0.048785515, 0.01809529, 0.02635921, -0.04397916, -0.050938375, 0.011797527, -0.018025424, -0.009450566, 0.010657777, -0.0002266479, 0.06449346, -0.032334313, -0.028823933, -0.0626365, 0.015629532, -0.007961821, -0.057868, 0.037746638, -0.04127004, 0.037708767, -0.02387851, 0.033946294, 0.025048438, -0.027575592, -0.012540789, 0.0017291518, -0.053131472, 0.010105064, -0.01833895, 0.0015019121, 0.039303884, -0.0124177, -0.03093655, 0.012131284, 0.0021540427, -0.010713995, -0.013859253, 0.005831597, 0.0043029445, 0.031799942, 0.009054081, -0.03044479, 0.005333031, -0.024330622, 0.027280742, 0.019847965, 0.028874824, -0.013214297, 0.0124106, -0.043428816, -0.03963912, -0.06632558, 0.02968318, 0.01848571, -0.01348052, 0.062202122, 0.042271312, 0.02725086, 0.046792433, 0.027701935, -0.054606166, -0.011286829, 0.017628236, -0.0024475604, 0.029310364, 0.013618994, 0.015822006, -0.032408282, -0.00017871453, -0.046773497, -0.0010711036, -0.0029884384, 0.02257129, 0.05700165, 0.046627924, 0.009322744, 0.07330373, 0.0059934463, -0.056331765, -0.027410785, 0.02165878, -0.015437207, -0.02104334, -0.0035364174, 0.008610845, -0.021111391, -0.03548726, 0.018805265, 0.036468416, -0.00796049, -0.02599971, -0.03174136, -0.05889339, 0.008606407, 0.03450137, -0.012286623, 0.05389959, 0.070491634, -0.017105406, -0.03218755, -0.008128552, -0.021977153, 0.008779499, -0.06191334, 0.0394104, 0.055597972, 0.022847055, 0.010856613, -0.046731483, -0.035589635, 0.034381833, 0.035890847, -0.008343956, 0.008105177, 0.01892362, 0.016140083, -0.027209582, 0.021502554, 0.017302763, 0.037744273, 0.01913784, -0.065726705, -0.017364603, -0.014071107, 0.03972108, -0.05957289, -0.015612075, -0.060644586, 0.005116443, -0.009249364, 0.0355204, -0.038884614, 0.024506377, 0.009069023, -0.011115807, 0.0050507938, 0.0057910606, -0.0031600515, 0.003432266, -0.0008083578, 0.0067012035, -0.04053861, -0.043114286, 0.03343796, 0.021274721, -0.014024949, 0.06779317, -0.020648925, 0.018402861, -0.019758016, 0.06473963, 0.0044850246, -0.004188548, -0.006511837, 0.010132285, 0.066301905, -0.05561898, -0.02437382, 0.04085817, 0.0029505652, 0.011411692, -0.02649236, 0.061302632, 0.007561636, 0.056130562, 0.03916807, 0.04031137, 0.012506318, -0.022032188, 0.024967957, 0.025385156, 0.008355792, 0.014685363, 0.04057308, 0.025922483, 0.0022374822, 0.045775775, 0.022496026, 0.009760654, 0.023291178, -0.0045909514, 0.02987373, 0.006515387, -0.009466544, -0.031896994, -0.051095784, -0.052682914, 0.009789059, -0.008818557, 0.0248212, 0.036350064, -0.014074657, -0.005074723, 0.024475606, 0.03310361, -0.012026541, -0.022968663, -0.003423685, 0.012998819, 0.006080436, 0.04493546, 0.03722233, -0.05480263, 0.031543706, 0.020773346, -0.011669557, -0.033764027, -0.039810732, -0.053127334, 0.023875551, 0.02491618, 0.012589314, 0.015453481, 0.06442718, 0.050343055, -0.00030061914, 0.0118312575, -0.021875959, -0.07977059, -0.018438367, -0.020988898, -0.036250647, -0.019459764, 0.031001644, -0.036942646, 0.027931543, -0.02133449, 0.013769525, 0.03370071, -0.0073238364, 0.02134041, -0.03806501, -0.008242172, -0.04399691, -0.038611807, 0.022637863, 0.0702928, -0.04319033, -0.0055437014, -0.03480961, -0.04722561, -0.0018273857, 0.033552766, -2.8404958e-05, 0.0105986, 0.013297958, 0.040660217, -0.031573296, 0.001607839, 0.018832488, 0.030459583, -0.030726472, -0.015310273, -0.055776685, -0.026601244, 0.0109169725, 0.054168258, 0.005379559, -0.018619599, 0.019398656, 0.029321017, 0.023690624, 0.044149593, 0.051685188, 0.009354552, 0.023931473, -0.024776224, -0.0017185, -0.009617445, 0.00889519, 0.0069071394, 0.039795347, -0.010136428, 0.042868998, -0.029589571, -0.021119088, 0.020482343, 0.036277868, -0.047888983, -0.007167222, 0.027840411, 0.041610897, -0.06715406, 0.015826296, 0.013897126, -0.07332267, 0.030154822, 0.069909334, -0.030425854, 0.0021883654, -0.032185186, -0.04790141, -0.013897126, -0.0030789792, 0.05300247, 0.060672987, 0.00772319, -0.026385838, -0.01549668, -0.0154818855, -0.023554813, 0.0018285692, -0.006866011, 0.034694288, -0.0073225615, -0.03655955, 0.033160422, -0.02502181, 0.017876187, 0.0014847509, -0.012261474, -0.01968227, -0.06746651, -0.00024380923, -0.020047983, -0.0054729846, 0.026310094, 0.0047240993, -0.0025283373, -0.012737257, -0.015781322, -0.004208668, 0.016255032, -0.0067768013, -0.027082944, -0.007002266, 0.004517572, 0.005644006, 0.019497821, -0.020276407, -0.005296933, 0.022257652, -0.09526076, -0.04459401, 0.083299905, -0.008831575, -0.016145851, 0.047772408, 0.03337464, 0.011212857, -0.0062811947, 0.016319241, 0.016524585, 0.009243447, 0.02346782, 0.0355707, 0.0076953764, -0.06775293, -0.065842696, 0.041279208, -0.046539158, -0.043473788, -0.057752017, -0.011105155, 0.0054496094, -0.043741267, 0.021255193, -0.038095783, -0.026704213, -0.025820402, 0.005737506, 0.017627643, -0.001211649, -0.011554604, 0.012020919, 0.020523174, -0.016367173, 0.024389723, 0.042151775, -0.0070568565, 0.02274527, 0.0003290241, 0.039530236, 0.013992992, -0.018760882, -0.0096476255, -0.02683795, 0.02284158, -0.0045234896, -0.022193741, -0.018627735, -0.079784796, -0.031210836, -0.0072195935, 0.033037186, 0.0048548807, -0.011750776, 0.03536891, -0.0029476061, 0.002104334, -0.0034014937, 0.02091315, -0.01970594, -0.02951867, -0.010793588, -0.0028481889, -0.03211062, -0.0047980705, -0.034862354, -0.020556904, -0.0015309089, 0.0031141895, 0.020387659, 0.031028867, -0.038346693, 0.019777544, 0.0027434453, 0.07039695, 0.01639321, -0.003223371, 0.046300083, 0.01420603, 0.076179735, -0.013710422, -0.06898145, 0.094796814, 0.02646928, -0.046203434, -0.00065745646, 0.010816372, -0.0016983799, 0.05031228, -0.0029706853, 0.007179205, 0.021007834, 0.004950156, 0.019202935, -0.0043929303, -0.01747615, 0.037226476, 0.04033149, -0.016254736, 0.008641616, -0.052302994, 0.02327692, 0.00030890392, -0.02024741, -0.00039175173, 0.017310455, -0.041651137, 0.06072625, -0.07983214, 0.02394183, 0.02883547, 0.026712498, 0.022096692, 0.053011347, -0.024273813, -0.007506306, -0.012996452, 0.04278615, -0.002495198, 0.027926216, -0.02707673, -0.00034204303, 0.0049347696, -0.052378744, -0.018399904, 0.0026617812, 0.03673649, -0.024319379, -0.011016094, -0.006308268, -0.023080213, 0.027423212, 0.012115306, -0.004967317, 0.033811368, -0.06609834, -0.039534375, -0.020553354, 0.01562746, 0.011428261, -0.013418384, -0.0062675835, -0.0154883955, 0.050170254, 0.02317371, 0.019370407, 0.0332338, 0.05204735, 0.04476481, 0.0055271313, 0.03396138, 0.0080446685, -0.022847055, 0.038025953, -0.002484842, -0.02528574, -0.080244005, -0.02371666, 0.016221005, -0.029212132, 0.04473781, 0.03792772, -0.00011953753, 0.02804627, -0.055230632, -0.013210377, -0.022446427, 0.023221053, 0.006391708, -0.050340686, -0.023231113, 0.06872106, -0.024733616, -0.028485438, -0.046880018, 0.0062609264, -0.008039195, 0.0005982794, -0.022244634, 0.019586403, 0.018654069, 0.014849876, 0.014664208, -0.044233624, -0.058544394, -0.020494178, 0.014567009, -0.043185007, -0.033541523, 0.039290566, -0.0054404372, 0.0049197073, -0.0569046, -0.018992266, -0.05210179, 0.007095322, -0.012988167, -0.00937837, 0.02652313, 0.01802768, 0.011930601, -0.010800986, -0.030994544, 0.014634471, -0.042410675, 0.020410145, -0.0065331403, 0.012241353, -0.07287055, -0.005664422, 0.004996018, 0.004577045, 0.016283143, -0.021126779, 0.012055538, 0.0049874373, -0.006943681, -0.018853791, 0.001487118, -0.023541793, -0.009105712, 0.0002763566, 0.0078060376, -0.09060708, -0.05120467, 0.02076876, -0.044947296, -0.055678155, -0.019913651, 0.03977404, -0.04821742, -0.047301356, 0.03751585, -0.030788017, -0.015832214, 0.012813004, -0.057183914, 0.021126188, 0.011155048, -0.033809002, 0.024989557, -0.03752502, 0.03387883, -0.008436273, 0.06621669, -0.03547779, -0.00083321217, -0.0038311186, -0.006816746, -0.0034736898, 0.01684059, -0.0058567473, 0.0027150407, -0.0006829026, 0.021452846, -0.01213957, -0.07135326, -0.016230326, 0.019516574, -0.005063184, 0.0008876549, 0.032468345, 0.012400669, 0.015785463, 0.024831852, 0.037527684, -0.024913812, 0.020480715, 0.017084103, 0.0011699293, 0.009561227, -0.02003023, 0.00991333, 0.044382747, 0.003646043, -0.01106018, 0.037691012, 0.045040794, 0.00586444, -0.0041636936, 0.052860446, 0.007423162, -0.009271852, -0.0034090388, -0.001245084, 0.017871896, -0.038198307, -0.028864171, 0.03973735, 0.0028623913, 0.025428355, 0.007778224, -0.02525911, 0.043625873, -0.06245274, -0.024560822, -0.07013658, -0.034354612, -0.006092863, -0.02891033, -0.006230154, 0.02859906, 0.006299391, -0.027059272, 0.037862033, 0.03754544, 0.014375646, 0.015191327, -0.021681268, 0.058329582, -0.044044845, 0.0151539715, 0.03805791, 0.0016042884, -0.007985936, 0.040749278, -0.028036432, 0.005738393, 0.034964137, -0.03147861, -0.005624182, 0.014334444, -0.059644498, -0.0013604792, -0.017112212, 0.0090114735, 0.02713857, -0.026485847, 0.04487983, 0.025976334, -0.0189106, -0.0037334766, -0.011066099, -0.037311688, -0.00032636116, 0.036608074, 0.014401314, 0.008617355, -0.005963266, 0.0073722703, 0.013157413, -0.027633289, -0.045092873, 0.057379197, -0.005526244, 0.04172925, 0.0527557, -0.032354727, 0.054589596, 0.02905709, -0.016692942, -0.02867599, 0.0041992, -0.014963496, -0.07014974, 0.017256012, -0.04118364, 0.046442106, 0.050081197, 0.03510143, 0.009128643, -0.043506928, -7.69301e-06, 0.013275175, -0.018395761, -0.04191625, -0.041373007, 0.0062400666, 0.007635608, 0.017932998, -0.014395396, -0.030067831, 0.060268223, -0.0043645995, 0.0023505103, -0.003910416, 0.0016486711, -0.03322374, 0.040171713, 0.0013989442, 0.06501214, 0.016517779, 0.040367883, -0.023986805, 0.022937596, -0.029122183, 0.027222972, -0.006406502, 0.0065047354, -0.03374509, 0.018685728, -0.03299946, -0.00015030957, 0.038606036, 0.060247507, -0.021406094, 0.024907598, 0.014039447, -0.06074223, -0.016466592, 0.037285354, -0.030982709, 0.04644329, 0.013592069, -0.017369188, 0.036914613, -0.029672528, 0.09640642, 0.02893637, 0.0040846923, 0.023702163, 0.0035387843, 0.0050645154, 0.020247852, -0.017444111, 0.010249752, -0.008065085, -0.010337038, -0.013476377, -0.0038760933, 0.005711468, 0.009333248, 0.007324929, 0.045808766, -0.03674418, -0.057436008, -0.062817566, 0.04881777, 0.004610184, 0.0022911853, -0.02609232, 0.01741076, -0.018100468, 0.0063266126, 0.004224054, -0.018928947, 0.004892754, -0.052014213, 0.0032713045, -0.007185271, 0.031318832, -0.0048094625, 0.034155186, 0.029967822, -0.019937914, -0.02317963, -0.0048323935, 0.023215136, 0.053770587, 0.007852788, 0.03751348, 0.022358844, 0.01531264, 0.02152859, -0.008944011, -0.052554797, 0.019836128, 0.030838318, -0.0038328941, -0.028907372, 0.00084563927, 0.011802261, -0.013031958, -0.006574564, 0.009290788, -0.0041011507, 0.045523677, 0.035078347, -0.04006756, -0.005231764, -0.00344669], [-0.01957909, -0.070735596, -0.036581073, -0.056152277, 0.0152128525, 0.031603783, -0.01996731, -0.013808763, 0.023324272, 0.01008948, 0.01722105, 0.014937873, -0.05114803, -0.010335267, -0.055517565, 0.021730427, 0.012665998, -0.042574704, 0.012700842, 0.045162994, -0.026971513, 0.014181917, -0.036346234, 0.015358817, -0.016050974, 0.03254364, 0.0038781967, 0.02187027, 0.01986584, 0.009240999, 0.01356439, -0.025258541, -0.008327658, 0.014663601, 0.023070952, 0.020683717, 0.03260229, -0.018595945, -0.03482255, -0.057499867, -0.046309527, 0.013154841, -0.03540641, 0.052566245, 0.0041292803, 0.04390652, 0.012576064, 0.038248017, -0.0048639313, -0.027096054, 0.06044106, -0.015086193, -0.057632644, 0.016240966, 0.025372313, 0.002333557, 0.04731056, 0.046045847, 0.016091939, -0.0032865677, 0.038367145, -0.010940314, -0.058655344, -0.019140255, 0.01869918, 0.021696996, -0.0067614773, -0.0014921393, 0.0029037625, -0.05438245, -0.01342125, 0.011813279, 0.02183119, -0.02801634, 0.05437433, 0.0114170555, -0.08471622, 0.01879182, 0.011443659, -0.020909727, -0.013117549, 0.00460864, -0.0019919518, -0.058340576, -0.06921568, -0.007720726, -0.030939614, 0.013264925, 0.035349905, 0.009315394, -0.032837424, 0.0067770155, 0.022086864, 0.034016445, 0.0035060511, 0.012002093, 0.030121531, 0.039538633, 0.005197768, 0.04452781, 0.037336912, -0.023545338, -0.009310921, -0.015667934, -0.0012100972, 0.008351084, 0.012979588, -0.017841458, -0.009488669, -0.010262755, -0.0070635304, 0.01555259, -0.0136143, -0.07221974, -0.0015384597, -0.019890796, 0.0045616427, -0.0064385883, -0.02326824, -0.024787216, 0.008584745, 0.027891563, 0.010691085, 0.038566787, -0.006015643, -0.03025714, 0.009570127, 0.009356948, -0.039761934, 0.004623796, 0.0068716574, 0.018502716, 0.07251318, 0.00047462177, -0.025919624, 0.001632925, 0.003220177, 0.06415587, -0.0143862665, 0.039644103, -0.04196212, -0.016473802, 0.029165696, 0.004187313, 0.0295631, -0.042196136, -0.01454471, -0.08210486, -0.0051690456, -0.02390719, -0.012779003, 0.016977146, -0.01175741, -0.035141554, -0.0060467194, -0.025098924, 0.009564006, 0.02377229, -0.025250537, 0.009954816, -0.013919297, 0.0047047827, 0.02927258, 0.031196967, -0.038684502, -0.024676567, 0.018287065, 0.006383851, -0.0024955312, 0.022308636, 0.065414935, -0.017107103, -0.014103048, 0.041439, -0.04615132, -0.021018023, -0.0039401143, -0.020016633, 0.0363839, 0.0130996555, -0.003396983, -0.0043047913, 0.00049157254, 0.015342808, -0.015849272, 0.031066068, -0.025879541, -0.02864658, 0.0060622576, 0.0065279333, 0.025364485, -0.021759618, 0.03203744, -0.00419108, -0.030063147, 0.055640932, -0.04192304, 0.0051197237, 0.028239055, 0.04167773, 0.022528525, -0.0049309107, 0.036125876, -0.03052694, -0.0047843573, -0.05302957, 0.01611407, 0.047407914, 0.04982964, -0.023154058, -0.0057857484, 0.05561662, 0.041187566, 0.054833885, 0.040399797, 0.04894349, 0.042150464, -0.013634075, 0.05819767, 0.05686798, -0.018577112, 0.02805448, 0.025693612, -0.05946333, -0.04096791, 0.016586572, -0.01015434, -0.005907228, 0.020075371, 0.0061051054, 0.046655133, -0.032722536, -0.02474437, -0.058726914, -0.023642333, -0.019402519, -0.08441488, 0.04453158, -0.043160215, 0.0506122, -0.020946924, 0.044733576, -0.0011145137, -0.039988767, -0.024644077, -0.015879111, -0.011266617, -0.0024423245, -0.010392711, 0.01632454, 0.06190801, 0.0019387453, -0.011767607, 0.027133485, -0.023118977, -0.00805162, 0.008889271, -0.0016701226, 0.0067614773, 0.020104093, -0.001116868, -0.037718307, -0.0038634532, -0.021432847, 0.012464002, 0.014278206, 0.062231954, -0.013539906, 0.026422497, -0.048845552, -0.051914584, -0.07035703, 0.037281353, -0.0039589484, -0.01925326, 0.025354126, 0.012300615, 0.03447035, 0.051199824, 0.037648473, -0.046153203, -0.02547278, -0.009175727, -0.024549788, 0.014863948, 0.0061908006, 0.003975899, -0.06863182, -0.018484117, -0.053546567, -0.0041986136, 0.01787742, 0.0120760165, 0.059525482, 0.04518171, 0.0047702314, 0.060122527, 0.01990916, -0.06184397, -0.021559507, 0.016794454, 0.001402206, -0.0069460524, -0.040476575, -0.017934864, -0.018122736, -0.0561843, 0.0070734182, 0.028457297, 0.005384458, -0.047036525, -0.043166097, -0.05592062, -0.013679277, -0.0025407332, -0.02396228, 0.07384512, 0.06808092, -0.028475424, -0.023422208, -0.06275319, -0.031544458, 0.025399799, -0.05853104, 0.0052961768, 0.044916265, 0.014871012, 0.0103960065, -0.06329067, -0.024903283, 0.024079522, 0.05027036, 0.008079871, -0.0059803287, 0.025196388, 0.00019305054, -0.010156282, 0.0057731527, 0.010372935, 0.030381445, 0.026821427, -0.013089768, -0.022065204, -0.022363843, 0.032960318, -0.05714672, 0.0061867987, -0.05077888, 0.04400422, -0.015475825, 0.028473541, 0.00283696, 0.04503139, 0.026014734, 0.009729628, 0.009050774, -0.037733376, -0.0080794, -0.025153073, 0.013760265, -0.02818632, -0.020139644, -0.03511448, 0.038375147, 0.026685232, -0.035102706, 0.052279025, -0.02521758, 0.008009243, -0.014244304, 0.05098794, 0.021798583, 0.00077337923, 0.00999372, -0.007962157, 0.06163303, -0.033460367, -0.0028070018, 0.024037616, 0.0074246763, 0.023804544, -0.019558374, 0.049745828, -0.002245978, 0.023432802, 0.06969219, 0.036108922, 0.00879145, -0.03590834, 0.036543995, -0.029253276, 0.0028700302, 0.028134525, 0.044505212, 0.025324227, -0.0242196, 0.024426071, 0.017908499, 0.01963842, 0.038264144, 0.006083917, 0.028807024, -0.012842098, -0.02564582, -0.027252438, -0.04425283, -0.03854654, -0.0014078562, -0.00496749, 0.0054882853, 0.03518605, 0.008274129, -0.0028543225, 0.024075286, 0.024897397, -0.0029419018, -0.007949915, 0.034513667, -0.00059421896, 0.021590583, 0.029686462, 0.051110364, -0.08089006, 0.008512586, 0.013989924, 0.0025508567, -0.03214244, -0.031801075, -0.04428485, 0.03365012, -0.009849343, 0.009671126, -0.01567947, 0.064993046, 0.06476704, -0.010889933, -0.0047245584, -0.03788334, -0.08250603, -0.023668937, -0.041400395, -0.07084766, 0.026290657, 0.011391865, -0.014805563, -0.02523453, -0.027022367, 0.0061317086, 0.020587662, -0.030662544, 0.007930139, 0.014824398, 0.0010156342, -0.008962724, -0.04231385, 0.009816384, 0.06432255, -0.034463286, -0.04400422, -0.02929377, -0.046249256, -0.004418974, 0.012112744, -0.0069207815, -0.0024385578, -0.0032314113, 0.01870801, -0.04610235, 0.0045720455, 0.009948576, -0.0047066663, -0.03580852, -0.0130742295, -0.058208268, -0.00997365, 0.016707817, 0.020412503, 0.023244698, 0.035123896, 0.021667803, 0.03449201, 0.03463232, 0.025063608, 0.032208834, 0.017888486, 0.016526537, -0.029120496, 0.018255988, -0.021461098, 0.0014657715, 0.0019486331, 0.015099141, -0.0031915724, 0.067355804, 0.0038059205, -0.02052857, 0.0029710946, 0.030758895, -0.032702994, 0.009268309, 0.056001604, 0.038470734, -0.056487527, 0.0010631904, -8.7579014e-05, -0.061787467, 0.017075496, 0.027403759, -0.004090464, 0.02576895, -0.03299469, -0.043207534, 0.039237283, -0.029036682, 0.04721357, 0.035565555, 0.04383848, -0.024461152, -0.015296194, -0.049414344, -0.018020326, 0.0014257488, -0.009656999, 0.013653852, -0.006475668, -0.02037672, 0.023421444, 0.004742451, -0.0017632341, 0.012027754, -0.029053634, -0.037601534, -0.05848301, 0.008351084, 0.027891563, -0.01256288, 0.023743272, 0.013371339, 0.0071810093, -0.00062676676, -0.035552137, 0.036836866, -0.004793303, -0.009281257, -0.03868544, -0.014430056, 0.008117951, -0.0018643503, 0.0052427347, -0.0025308453, -0.014604362, 0.00023660462, -0.07481085, -0.04530566, 0.0913468, -0.012326983, -0.0009534813, 0.021250155, 0.021890989, 0.016484631, -0.040623482, 0.020426836, 0.03305402, 0.018740969, -0.023463642, 0.032458857, -0.0026520905, -0.075242616, -0.06299851, 0.012148058, -0.011100876, -0.0628064, -0.065418705, -0.028729687, -0.0054816934, -0.03731243, 0.005166044, -0.049216583, -0.040868327, -0.027714523, 0.0023349696, -0.008083638, 0.013106718, -0.021886988, 0.011385273, 0.016326895, 0.00038380563, 0.00089909753, 0.060257193, 0.009396735, 0.017107572, -0.008097764, 0.03881081, 0.023181131, -0.03549069, -0.015915839, -0.051310007, 0.032155626, 0.002772865, -0.010048162, -0.018268466, -0.06062964, -0.01932059, 0.0103960065, 0.018655272, -0.005166809, -0.00045578758, 0.057873726, -0.02704638, 0.012632097, -0.001896133, 0.021002484, -0.028086027, -0.035046674, -0.013181114, 0.005339495, -0.041810036, -0.013691049, -0.05601667, -0.029205248, -0.016979735, 0.012398722, 0.009450058, 0.06930796, -0.03221966, 0.029583817, -0.014807447, 0.07802632, 0.05238167, 0.016785508, 0.05407863, 0.013431608, 0.045471404, -0.0005630248, -0.05625398, 0.07044743, 0.005236378, -0.03569975, -0.031972934, -0.0013652439, 0.036460184, 0.03916383, 0.0041115056, 0.0116487155, 0.01618976, 0.013166988, 0.0028267775, -4.6143785e-05, -0.0012110389, 0.029683637, 0.057536595, -0.010711009, 0.014644531, -0.04480373, 0.052608915, 0.023766873, -0.018454218, -0.017461184, -0.0031471944, -0.04975383, 0.03938419, -0.0375488, 0.019102586, 0.023183014, 0.018417962, 0.0050350875, 0.053307842, -0.019814046, -0.006907442, -0.034215145, 0.07351176, -0.020177078, 0.041824162, -0.03308246, -0.023250816, -0.01826988, -0.032170694, -0.026951736, 0.011639064, 0.04180439, -0.008908575, -0.0043775383, -0.021350445, -0.0053512664, 0.032666035, 0.04454429, 0.013303536, 0.03762037, -0.056929186, -0.035252202, -0.004083843, 0.015425209, 0.03771501, -0.030959655, -0.009422396, -0.005314069, 0.07640564, 0.015914898, 0.026250575, 0.02452024, 0.070541605, 0.031297255, -0.0051411767, 0.019821815, 0.005024964, -0.03623182, 0.0004537865, -0.0201686, -0.06094817, -0.08610242, 0.018645385, 0.013095417, -0.027795509, 0.04170833, 0.028643047, 0.0033942754, 0.028650345, -0.05489368, -0.017172728, -0.042463586, -0.015533976, 0.012520386, -0.027152322, -0.023992885, 0.07035891, -0.04150681, -0.027841654, -0.033792317, -0.0030012294, -0.015893238, -0.005829655, -0.029970977, -0.015508079, 0.019602869, 0.009564241, 0.025099158, -0.03836997, -0.00964876, -0.009915616, 0.025871126, -0.027455553, -0.013925064, 0.01858747, -0.013513536, 0.021350445, -0.061811954, -0.02995956, -0.017835986, 0.0005669094, -0.004386014, 0.0053976458, 0.02279032, 0.027411293, 0.008085521, 0.002166639, -0.016882977, 0.025875716, -0.03724698, -0.0014841347, -0.0066861403, 0.0044288617, -0.04116873, -0.0071042594, -0.014885138, -0.0023100143, 0.0036236995, 0.0019399223, 0.033361483, 0.029060224, 0.0018782404, -0.009713267, 0.016969612, -0.034633264, -0.011113119, -0.008016776, 0.023977803, -0.07378486, -0.03449954, 0.0145513015, -0.04930228, -0.05349289, -0.002864152, 0.039490603, -0.037028976, -0.047332224, 0.045532614, -0.01209285, 0.017871771, 0.01800926, -0.05627282, 0.013404299, -0.004186842, -0.036467716, 0.011674378, -0.032971855, 0.029882338, 3.2959848e-05, 0.021487935, -0.03501654, -0.026094781, -0.0146798445, 0.012478833, -0.027592102, 0.01448079, 0.017693788, -0.00013737194, 0.011847888, 0.010543325, -0.040056575, -0.06000952, -0.014562838, 0.028496142, 0.0066181016, 0.003393334, 0.023926964, 0.020221338, -0.013776803, 0.0109068835, 0.040981334, 0.00086166454, 0.0014904914, 0.021488408, 0.019664316, -0.0045522847, -0.017366309, 0.017570423, 0.0074941274, -0.0017335702, -0.02765755, -0.007191838, 0.03398337, 0.024895042, 0.001277606, 0.04362377, -0.0017741814, -0.009489611, -0.0030567904, 0.008114243, 0.025687963, -0.032346796, -0.015532092, 0.06707235, 0.03176717, 0.02205202, 0.01042567, -0.025224641, 0.034247283, -0.0689746, -0.043104887, -0.06694122, -0.018651742, 0.007537446, 0.012222452, -0.027025191, 0.023241872, -0.005631425, -0.008820055, 0.03169419, 0.025261605, -0.011366791, 0.02012999, 0.013711766, 0.04766465, -0.053885583, 0.011473794, 0.054464735, 0.006346183, -0.002177351, 0.0029826306, -0.0015227449, 0.015313852, 0.0167097, -0.041776136, -0.0050914134, 0.008158033, -0.073153906, -0.003763073, -0.02717963, 0.01554669, 0.024505056, -0.024034321, 0.052174494, 0.046576973, -0.01854839, -0.023830911, -0.019086635, -0.004456407, -0.013938248, 0.057340715, -0.018451864, -0.0007006321, -0.028531926, -0.0052971183, 0.027244609, -0.011885321, -0.0671571, 0.05572286, -0.03939408, 0.07688873, 0.040703528, -0.026273705, 0.04087586, 0.014346951, -0.02783365, -0.04617957, -0.014505157, -0.031929616, -0.013949549, 0.010840964, -0.041037835, 0.032563385, 0.06565884, 0.0153465755, 0.011221887, -0.048362806, 0.011688033, -0.031146584, -0.026108908, -0.04801779, -0.03074306, -0.0134382, 0.0067925537, 0.027175864, 0.0029569692, -0.009411449, 0.08116786, -0.013702821, 0.015619142, 0.012052004, -0.004056062, -0.04221097, 0.001862349, 0.0038224005, 0.04575392, -0.020299498, 0.049750533, -0.01016105, 0.011201404, -0.045866925, 0.033240948, 0.0136665655, 0.030159201, -0.03640109, 0.013682104, -0.019693978, -0.0017070846, 0.016161148, 0.027800689, -0.05418787, 0.026273234, -0.029123321, -0.031166539, -0.018922718, 0.04473122, -0.033315636, 0.05113155, 0.00015243929, -0.0087826215, 0.054215178, -0.02931696, 0.06992196, 0.012434337, -0.0027158915, 0.027308645, 0.014252779, 0.038333245, -0.011647774, -0.023122746, 0.0048425887, 0.017437171, -0.030221354, 0.0001353855, 0.02039367, -0.009873358, 0.01493599, -0.020535985, 0.061257288, -0.04989073, -0.057156138, -0.063200034, 0.04567858, -0.023805985, 0.0017944283, -0.015266059, 0.029350625, -0.027391516, 0.0069727735, -0.020775061, -0.024140144, 0.036895253, -0.059455793, 0.0109761, -0.00039716615, 0.015208614, 0.022467315, 0.018701946, 0.031231338, -0.0200297, -0.024377102, 0.0010396477, 0.025024999, 0.041268554, 0.022573728, 0.028409503, 0.038598336, 0.01820137, 0.019236779, 0.0094806645, -0.051706467, 0.057617813, 0.06519787, 0.0062162266, -0.00871835, -0.017955113, 0.017171668, 0.0017647643, 0.0063113393, -0.011484623, 0.016850958, 0.043665208, 0.012097617, -0.047157068, 0.012719675, 0.0036058072], [-0.0607399, -0.08031263, -0.05164689, -0.051058646, -0.016014293, 0.037310276, 0.029557887, -0.021164795, 0.02447197, 0.04071805, 0.0033659867, 0.047685273, -0.074288115, -0.035722863, -0.011432812, 0.034342647, -0.0058648507, -0.033665407, 0.04477824, 0.04650695, 0.0014766015, 0.02358984, -0.022309704, 0.030484112, -0.021240346, 0.01076654, 0.015845409, 0.022635682, 0.042682927, -0.00077847095, -0.0025178527, -0.03171323, -0.02197807, 0.008152245, 0.028923474, 0.009341652, -0.00040908976, -0.018256206, -0.023939598, -0.03585428, -0.073192894, 0.017745538, -0.0126032885, 0.008769111, -0.011600418, 0.02211578, 0.017275961, 0.04930501, -0.0017587165, -0.031235803, 0.053662788, -0.010716443, -0.034401402, -0.011997503, -0.017631492, 0.025589349, 0.032882202, 0.04386033, 0.004985377, -0.0026318415, 0.03859757, -0.005258142, -0.09465394, -0.0081533985, 0.044817027, 0.026342077, 0.010987823, -0.00035460602, 0.01648179, -0.0074587306, -0.026000747, 0.035697006, 0.0035811511, -0.022552112, 0.05251724, -0.029851085, -0.054775547, 0.0007976327, 0.0038157082, -0.03457224, 0.011630431, 0.020171218, 0.009679837, -0.041911844, -0.044610173, 0.05124611, -0.023585571, 0.046284396, 0.05703616, -0.012132558, -0.01609348, 0.026377516, 0.020114772, -0.004688718, -0.0032329517, -0.0016325497, 0.004890608, 0.0726499, 0.02863628, 0.018996498, 0.008024808, -0.044086114, -0.014119598, -0.023202684, 0.010720368, -0.025557488, 0.008263058, -0.046933122, -0.020914366, -0.012763248, -0.018869841, -0.0100818, -0.008106533, -0.04747288, 0.0014068808, -0.0018254648, 0.0016557515, -0.023482028, -0.03153979, -0.039495166, -0.010078567, 0.016835013, -0.0016418275, 0.03886445, -0.008947337, -0.041776095, -0.0062822513, 0.023551749, -0.061354227, 0.017488355, 0.00023640401, 0.01343809, 0.04245668, -0.008516811, -0.033221226, 0.023993159, -0.021392716, 0.05552216, -0.02499049, 0.026487406, -0.032704093, -0.019011362, 0.027929379, -0.0071177455, 0.047447022, -0.046538346, -0.0057623475, -0.08639827, 0.0032528637, -0.021996655, -0.010632177, 0.03839349, -0.0069669923, 0.011024184, -0.023584992, -0.058377128, 0.008708163, 0.028712511, -0.037127204, 0.029350573, -0.022086114, 0.009988069, 0.037289444, 0.012637457, -0.030555217, -0.05401462, -0.0010619711, 0.0070320955, -0.012937809, 0.01890401, 0.058059342, -0.0007002083, 0.010907367, 0.028864834, -0.018996354, -0.036283396, 0.0152187385, -0.044407014, 0.012540032, 0.038231883, -0.001930017, 0.0042548105, -0.007832614, -0.02465943, -0.0535492, 0.031526692, -0.008681845, -0.013461869, 0.0031392789, 0.007893677, 0.031195441, -0.030490344, 0.024206476, -0.0076564653, -0.023051238, 0.06869845, -0.032571115, 0.007450189, -0.0006519579, 0.066422135, 0.054291654, 9.511567e-05, 0.0115487045, -0.028732782, -0.055833824, -0.029112784, 0.0223134, -0.0054714596, 0.05882027, -0.021868292, 0.0066405516, 0.0489227, 0.023910973, 0.054908525, 0.027922451, 0.02909616, 0.033909198, -0.06737976, 0.022956466, 0.07677959, -0.028987426, 0.036488634, -0.00032251602, -0.0133642135, -0.016391754, 0.023342066, -0.0053174742, 0.0015315469, 0.008425586, -0.026982725, 0.06973179, -0.017134039, -0.014804238, -0.05772967, -0.013688345, -0.023123728, -0.030100416, 0.03437647, -0.050791305, 0.048559785, -0.02439994, 0.02500988, 0.024071192, -0.0047802553, -0.016086092, 0.011834051, -0.029149722, 0.012855968, -0.023939598, -0.007386471, 0.028287217, -0.0044242637, -0.04005755, 0.0012997603, -0.019627996, 0.003723363, 0.015157271, 0.003933218, 0.04347903, -0.00020315968, 0.00295505, -0.077015996, -0.003985393, -0.014606258, 0.014588092, -0.0002779594, 0.017769085, -0.027149523, 0.023601616, -0.028463135, -0.0026572363, -0.07060907, 0.055229884, 0.024672346, -0.018982964, 0.041254345, 0.00053329417, 0.029382143, 0.02558427, 0.04098285, -0.03938712, -0.007920458, 0.014090048, 0.008333242, 0.037461493, -0.0061423485, 0.021792108, -0.05061747, 0.0046060686, 0.0019043913, -0.011507842, 0.032806598, 0.024268348, 0.08203958, 0.01718777, 0.005397093, 0.04618928, 0.035782885, -0.023313496, -0.054587163, 0.03911101, 0.01073261, -0.011585643, -0.014859285, -0.007586398, -0.040750142, -0.023403997, 0.04368395, 0.0018515234, 0.004240612, -0.0703819, -0.032728102, -0.04745995, -0.011816506, 0.025129005, -0.010426709, 0.047613245, 0.07269977, -0.017105352, 0.013953896, -0.026737662, -0.040486034, 0.02851254, -0.04430359, 0.026808538, 0.04239619, 0.017086191, 0.012414672, -0.06772051, -0.03556218, 0.0368938, 0.028377715, 0.00031535924, 0.009481094, 0.014287666, 0.018569848, -0.017221939, 0.0182008, 0.022581547, 0.04389773, 0.03994766, -0.049190503, -0.008511006, -0.015325628, 0.0070782104, -0.077861875, 0.004928931, -0.09664491, 0.049888633, 0.0040608854, 0.025366334, 0.010521825, 0.035152167, 0.010522286, 0.0008694311, 0.020769637, -0.015459067, 0.007587091, -0.019955821, -0.012063067, 0.0051343995, -0.017755233, -0.056003742, 0.02793284, 0.02525552, -0.005039053, 0.042813133, -0.031829584, 0.030366832, -0.038615115, 0.067087024, 0.0058595557, 0.0050579077, 0.043611053, 0.017637031, 0.06239542, -0.02852362, -0.02435648, 0.034205627, 0.0032856464, 0.005012504, -0.020194534, 0.03293311, 0.007624029, 0.04989048, 0.04030319, 0.048582867, 0.02639691, -0.039649382, 0.03972141, 0.026131416, 0.027679585, 0.031115565, 0.02530446, 0.010073604, -0.018389646, 0.028580876, 0.0539534, -0.0008601966, -0.0026503105, 0.014893914, -0.0016774527, -0.00037030468, 0.006247045, -0.011795584, -0.028050812, -0.04861057, -0.017939925, 0.014567474, 0.02447705, 0.059933953, 0.015478459, -0.004738238, 0.029322175, 0.029325178, -0.001834028, -0.03099478, 0.032897554, -0.013582149, -0.0076895943, 0.030706547, 0.024922615, -0.0651293, 0.016408378, 0.022249678, -0.020054631, -0.025389422, -0.02550393, -0.016239846, 0.018977884, 0.012287352, 0.016327806, 0.03245753, 0.09076436, 0.02395022, -0.008259364, 0.0054533374, -0.03309102, -0.072894156, -0.013225696, -0.023812855, -0.050961684, 0.028992735, 0.015013732, -0.027502744, 0.007868744, -0.008927483, 0.030364525, 0.024829807, 0.01103111, 0.027832877, -0.015360258, -0.013789003, -0.035903856, -0.04637951, 0.020731062, 0.017179921, -0.027997714, -0.0068301335, -0.029208014, -0.042920258, 0.02054106, 0.032623637, -0.0036457928, -0.0047670957, 0.0033770103, 0.047378685, -0.0428353, 0.013151357, 0.034552153, -0.023762295, -0.005285153, -0.040481415, -0.06464633, -0.013977387, 0.003299498, 0.04673781, 0.009940511, 0.001897927, 0.020342749, 0.029907415, 0.028634205, 0.028190255, 0.017620409, 0.01564445, 0.013632361, -0.036703568, -0.022060255, -0.027924012, -0.0036180895, 0.028610425, 0.017598247, -0.033241313, 0.06575171, -0.025960116, -0.041865673, 0.014826617, 0.034365155, -0.025187183, -0.0087096635, 0.05723193, 0.03944328, -0.045885, 0.012256532, 0.0052257637, -0.059928413, 0.023162974, 0.047740683, -0.014632115, -0.0022553033, -0.020599931, -0.032019354, -0.0017924225, -0.021946037, 0.060800154, 0.04597688, -0.02312696, -0.053948134, -0.018982617, -0.031940397, -0.027598321, 0.014314216, -0.009840317, 0.033196293, 0.03423287, 0.012126325, 0.02973519, -0.020160366, -0.0030501657, -0.0033779915, -0.015704503, -0.04711643, -0.030105496, 0.0121941995, 0.015221046, -0.02176856, 0.015903248, 0.036007747, -0.0049079224, -0.031404447, -0.027469268, 0.022002194, -0.000635682, -0.0021627273, -0.0060513886, -0.011306126, 0.014027253, 0.011426808, 0.03156686, -0.0038697305, -0.011188558, -0.006121917, -0.047790546, -0.067293875, 0.07106676, 0.00071013544, -0.00864179, 0.038179245, 0.029391898, 0.010447487, -0.03473846, -0.0072451825, 0.0039080535, 0.016455473, 0.0099603655, 0.04010776, 0.023965456, -0.07351056, -0.07858217, 0.03830391, -0.010675811, -0.049033515, -0.054875277, -0.032274686, 0.016758827, -0.019121021, 0.027166143, -0.042507008, -0.013076327, -0.007887213, -0.0014678288, -0.00865368, 0.0033530456, -0.024155688, -0.00019034678, 0.048822045, -0.016036687, 0.007673434, 0.07398707, 0.0034681293, 0.053264774, 0.00027057176, 0.062484536, 0.008855685, -0.042262755, -0.014495444, -0.021472132, -0.002700004, 0.021285133, -0.025011728, -0.04147228, -0.03858695, -0.018670836, 0.012036288, 0.024881635, -0.0025044049, -0.013454712, 0.031120371, -0.024529915, 0.017727299, 0.0028308455, 0.0031923775, -0.0070309415, -0.01824928, 0.00049912644, -0.008420969, -0.030677114, 0.005953964, -0.017647976, 0.005933648, 0.022520252, 0.0035525241, 0.0003213617, 0.047166295, -0.010447948, 0.009160655, -0.013046546, 0.03947762, 0.062458098, 0.019648775, 0.040462945, 0.004526767, 0.06574986, 0.015659917, -0.035170633, 0.08662971, -0.020457257, -0.045561332, -0.020251326, 0.036409907, 0.021285478, 0.047374994, 0.035982583, 0.020990118, 0.009409987, 0.004306062, 0.019314658, 0.003988394, -0.02759809, -0.0008346285, 0.034606867, -0.0002483512, 0.026318416, -0.012792597, 0.021954175, 0.012797675, 0.009007131, -0.027655343, -0.01919341, -0.035035234, 0.027710982, -0.05877964, 0.048787877, 0.020390335, 0.012412596, -0.015492773, 0.026098631, -0.006865268, -0.03225137, -0.029511714, 0.043611, 0.004069196, 0.032886013, -0.014275518, -0.021474916, -0.0014770633, -0.047999248, -0.004711689, -0.002269386, 0.04410043, -0.005315396, -0.01877738, 0.0033093675, -0.03694482, 0.027744226, 0.028445737, 0.004853251, 0.04613895, -0.05152407, -0.048916236, 0.0053650322, 0.027553994, 0.020504354, -0.0075035184, -0.038924474, 0.018820899, 0.08844834, 0.02672104, 0.03912221, -0.0013842562, 0.042334784, 0.04389819, 0.01773584, 0.028545784, -0.00074395695, -0.034764316, 0.047171835, -0.021939399, -0.036747895, -0.063467085, 0.022946887, 0.009671901, -0.028041577, 0.011035265, 0.032236412, -0.019421142, 0.016563978, -0.06337844, -0.0024462272, 0.00068150845, 0.0095041795, 0.004074275, -0.034509905, -0.032435365, 0.057228237, -0.05265899, -0.048548702, -0.0527735, -0.02857164, -0.012759352, -0.007303591, -0.057830326, 0.035724707, 0.008589961, 0.028649209, 0.027602937, -0.038694073, -0.042741105, -0.029414752, 0.0008606583, 0.0072343317, -0.018217884, 0.009925736, -0.009023522, -0.00761895, -0.039710794, -0.046072923, -0.019990914, 0.020285035, -0.03058015, 0.0259645, 0.04436615, 0.047982622, 0.020057864, 0.0029821186, -0.05672957, 0.019038834, -0.04856902, 0.020855265, -0.002710566, 0.010954925, -0.05614595, 0.0011637819, -0.0100079235, -0.014382782, 0.008966268, -0.03267665, 0.024230024, 0.019108092, -0.0023755832, -0.018778881, -0.012824916, -0.03553586, -0.017210396, 0.0026826314, 0.0036622996, -0.08834122, -0.0157301, 0.012961588, -0.012417212, -0.009043838, -0.006343026, 0.008400538, -0.022764966, -0.058167852, 0.030008534, -0.03357768, -0.033431776, 0.006756445, -0.06113075, 0.011192021, -0.029463233, -0.069862, 0.020484038, -0.049467538, 0.055067357, 0.019077964, 0.04149697, -0.033396915, 0.002201397, 0.017952392, -0.007194162, 0.0028206876, 0.050932135, -0.010127511, -0.0055210954, 0.008138623, 0.01220251, -0.04936596, -0.054653652, -0.048171006, 0.018932637, 0.031297673, -0.017587164, 0.028429428, 0.028276598, -0.009698105, 0.01695483, 0.01816917, 0.020930989, 0.02705533, 0.030934755, 0.023139426, -0.01627309, -0.035449214, 0.01336329, 0.024970174, -0.040009532, -0.034135446, -0.023368904, 0.038700536, 0.034370925, 0.026048303, 0.048503455, -0.0071955468, -0.018019341, -0.01951118, 0.0032043825, 0.008246437, -0.048830353, 0.0068658744, 0.053489175, 0.023969151, -0.0013750216, 0.005230439, -0.0023187906, 0.01957106, -0.060168516, 0.009308408, -0.051779866, -0.01636359, -0.012024283, -0.004260813, 0.00968864, 0.027790397, -0.017389314, -0.020531366, 0.059540566, 0.023326425, 0.017529665, 0.036435302, 0.022267224, 0.056845926, -0.035125848, 0.037289385, 0.014683078, 0.023037387, 0.025898242, 0.015162176, -0.032894325, 0.0071314825, 0.004835662, -0.026342424, 0.0013930291, 0.031554855, -0.063331336, -0.0047234627, -0.028743748, 0.013678649, 0.026924198, -0.01821696, 0.044177998, 0.05147697, -0.009344884, -0.025149321, -0.019353846, -0.0070091244, 0.01863944, 0.026048765, -0.0073144413, -0.0011183018, -0.002561659, -0.020635484, 0.062403273, 0.0038914315, -0.053275857, 0.055266593, -0.012010893, 0.039400972, 0.024756739, -0.03856848, 0.060558207, 0.020871427, -0.007371003, -0.0011155314, -0.005724024, -0.024164228, -0.043430924, 0.012711563, -0.032910023, 0.031838123, 0.05440432, 0.032668076, 0.0042811288, -0.053654473, -0.018323356, -0.01332866, -0.02957682, -0.054478195, -0.04006517, 0.0047077644, 0.024852896, 0.022790825, -0.017770933, -0.008365562, 0.049900636, -0.0027463497, 0.011028338, -0.0044893674, 0.006449858, -0.03850615, -0.0034171734, -0.01930701, 0.026046976, 0.016594453, 0.057805393, -0.031354006, 0.034290586, -0.036571514, -0.005333865, -0.007000352, 0.015970198, -0.033212915, 0.030142432, -0.014356233, -0.013909051, 0.027521906, 0.05166905, -0.02362447, 0.051165767, -0.013259518, -0.034053255, -0.01978406, 0.032668628, -0.020437865, 0.030087028, 0.030805849, -0.013112112, 0.01060078, -0.035232507, 0.10151335, 0.04107058, -0.009094167, 0.0011293831, 0.010452566, 0.030897127, 0.04405783, -0.042541064, -0.0072102067, -0.002841581, 0.009001821, -0.018551942, -0.01330419, -0.0039117476, -0.021947248, 0.0055236346, 0.056363884, -0.037392464, -0.06775214, -0.04104749, 0.064649105, 0.004689757, -0.0137976585, 0.00789424, 0.01699327, -0.02320759, 0.002526914, 0.00083849544, -0.009008804, -0.023717972, -0.054794014, 0.010058251, 0.01038146, 0.021821659, 0.006469713, 0.024014862, 0.014748932, -0.013699427, -0.033944752, -0.014464509, -0.007880056, 0.036620457, 0.00952565, 0.0071563, 0.037423864, 0.052965578, 0.031089146, 0.015662689, -0.008337396, 0.037801553, 0.041835546, 0.0016114258, -0.0024234152, -0.0156077435, 0.0052065444, -0.013044698, 0.029149722, 0.008428357, 0.018706389, 0.055281598, 0.018804738, -0.07167474, 0.008577033, -0.0021147078], [-0.02627405, -0.09892133, -0.056068804, -0.0487603, -0.009488044, 0.006478012, -0.008415251, -0.027108831, 0.018423123, 0.0012579655, 0.0010688535, 0.0033749302, -0.06173579, -0.011671407, -0.01759089, 0.028538527, 0.00016593648, -0.00618167, 0.034691848, 0.04633614, -0.026848339, 0.003212818, -0.003799853, -0.0043607, -0.016341586, 0.014175519, -0.022628082, 0.0032983352, -0.0021694573, 0.00824213, 0.023184292, -0.038481504, 0.012270031, 0.028414076, 0.02989638, 0.008007594, 0.039595667, -0.022335608, -0.060184885, -0.056329414, -0.016093059, 0.007686382, -0.028693108, 0.036092464, 0.013195195, 0.024650203, -0.0028144312, 0.05186859, -0.018708644, -0.030036822, 0.02785601, -0.012611637, -0.04995152, 0.00036130584, -0.019860465, 0.012316381, 0.012866103, 0.014217408, 0.03597496, -0.0073776846, -0.009203449, -0.018888254, -0.039327875, 0.006651133, 0.015040139, 0.025858281, 0.011597013, -0.0055324524, 0.028522536, -0.035877045, -0.004890665, 0.0150261745, 0.02465223, -0.016923552, 0.0514811, 0.03312426, -0.05019996, 0.0329815, -0.00017662617, -0.03287582, -0.029149203, -0.016685424, 0.030149454, -0.030601434, -0.06400745, 0.030300561, -0.01590302, 0.017213825, 0.052066978, -0.0032141504, -0.009996979, 0.011859418, 0.033203404, -0.018626312, 0.0014850852, 0.0029418962, 0.015319924, 0.04570948, 0.009138848, 0.017636545, 0.02017936, -0.06738273, -0.03461375, -0.024545623, 0.007780475, 0.013110258, 0.04897583, -0.02301282, 0.013761837, -0.016441617, 0.012864714, 0.010030003, 0.0042374064, -0.04935452, -0.0007267833, 0.015507646, 0.016222378, -0.032420248, -0.043950923, -0.037234664, -0.032078583, 0.0148781985, 0.005849493, 0.019134145, -0.00740874, -0.021890638, 0.009437059, 0.007873234, -0.058993667, 0.01862753, 0.04235135, 0.020130228, 0.046817847, -0.01681428, -0.040812034, -0.0067503243, -0.06194947, 0.054877702, -0.023439687, 0.045155123, -0.039735213, 0.011954844, 0.04732991, 0.005351915, 0.019919794, -0.029042128, 0.0014869393, -0.062006477, 0.011503848, -0.04950284, -0.017009417, -0.0034494395, 0.014858732, -0.0001664, 0.012516617, -0.036896765, 0.011814863, 0.009459741, -0.029903332, 0.041732565, -0.02917423, 0.007062614, 0.012408156, 0.017534574, -0.050892442, -0.061044235, 0.030507283, -0.0061347834, -0.012331608, 0.04890955, 0.058861103, -0.025271015, 0.02043429, 0.039036788, -0.061830346, -0.03834941, -0.000841502, -0.041244954, 0.037563294, 0.008814565, -0.018579789, 0.028236086, -0.004342565, -0.020733023, -0.030856771, 0.036080524, -0.0014501772, -0.014494877, -0.010172185, 0.021993537, 0.018609917, -0.035469852, 0.024692439, 0.013207479, -0.032297708, 0.0664104, -0.03307907, 0.003627891, 0.028539453, 0.050148048, 0.0047027697, -0.008494279, 0.02125563, -0.040981676, -0.034247346, -0.06821194, 0.025364645, 0.0006479866, 0.053203505, -0.054166213, 0.012521599, 0.066017695, 0.038543615, 0.06164555, 0.034621395, 0.058604088, 0.0584502, -0.035425123, 0.04945371, 0.06278147, -0.023505129, -0.001139307, 0.03772969, -0.035657804, -0.024414448, 0.012014173, -0.01176608, 0.038524147, 0.03246302, 0.04719665, 0.062933035, -0.023710378, -0.049509563, -0.052356206, 0.022855435, -0.022171292, -0.041605562, 0.050630096, -0.008626959, 0.041537892, -0.042214613, 0.02584901, 0.020841252, -0.041426647, 0.01482536, -0.0038703065, -0.013304584, 0.009974729, -0.010637143, 0.013577997, 0.025014492, -0.030402532, -0.049425896, -0.01288001, -0.03974596, -0.009140875, -0.02141276, 0.0026811722, 0.0045180903, 0.017138736, 0.022187514, -0.013998922, -0.018732283, -0.0070138294, 0.014683061, 0.012359198, 0.029528353, -0.03080393, 0.041706607, -0.021148095, -0.020007167, -0.056754917, 0.01944238, 0.009246556, -0.008253718, 0.029544113, 0.011128405, 0.019849515, 0.045965336, 0.008700078, -0.032312192, -0.025042504, -0.011935491, 0.0074404036, 0.021037085, 0.015516626, -0.0058944533, -0.046595708, -0.011611846, -0.04639918, -0.016483335, 0.016992267, 0.0113641005, 0.055068668, 0.06642836, -0.00214999, 0.053234093, -0.0040545515, -0.03963165, -0.019553158, 0.024993373, 0.0028641282, -0.0389055, -0.0117609445, -0.0025020835, -0.045538906, -0.036116447, 0.032651715, 0.01758834, 0.0130167445, -0.05110473, -0.022676751, -0.030474838, -0.0018543865, 0.011411147, -0.021680206, 0.03431177, 0.0700522, -0.041937437, -0.0429896, -0.047669195, 0.011985435, 0.034655698, -0.07069265, 0.0052168025, 0.05191202, 0.020462101, 0.01553731, -0.047103714, -0.024758374, 0.028961074, -0.00031182618, -0.011237273, 0.0032723788, 0.051044475, 0.031298034, -0.00693596, 0.013070511, 0.042868163, 0.033804692, 0.026895618, -0.051213887, -0.037403382, -0.020157343, 0.044652678, -0.057995267, 0.008202269, -0.06652037, 0.040008307, -0.030558532, 0.02915291, -0.025996638, 0.033302248, 0.016402218, -0.01598367, -0.015390378, 0.00046026518, -0.005335924, -0.032774776, -0.018596938, 0.007047796, -0.03945905, -0.06758807, 0.057474166, 0.01071959, -0.014228011, 0.047054585, -0.005185747, 0.008515601, -0.013651289, 0.04711391, 0.03200257, -0.026926672, 0.027395278, 0.002552664, 0.048792746, -0.047083322, 0.0017275008, 0.019087331, -0.023944912, 0.01679574, -0.019167056, 0.03632248, -0.004380631, 0.017135028, 0.04240558, 0.024291618, 0.03117613, -0.014087453, 0.029480612, 0.010639866, 0.013281408, 0.03155482, 0.027857399, 0.012063304, -0.008701932, 0.037592497, 0.031968266, 0.020083878, -0.01008041, -0.0058726687, 0.04007853, -0.014756065, -0.031969197, -0.018454408, -0.033465404, -0.05546172, 0.004312958, 0.011968286, 0.012853502, 0.008617573, -0.01224361, 0.0022547431, 0.039387204, 0.04461328, -0.036262166, -0.022004662, 0.019162014, -0.0032751597, 0.0057841386, 0.022107096, 0.02546963, -0.061139718, 0.010582855, 0.011330958, -0.03487824, -0.027588332, -0.054048944, -0.038650222, 0.041412048, 0.008547352, 0.037231885, -0.012835512, 0.08167042, 0.03996752, -0.020807069, -0.0065401224, -0.033751268, -0.050333448, -0.034263104, -0.029259516, -0.07343524, -0.004472869, 0.018824985, -0.02479586, -0.013310262, -0.010672197, 0.034205165, 0.03592479, -0.032581955, 0.020307288, -0.0060988613, -0.008054873, -0.03564019, -0.039212927, 0.027487982, 0.056040183, -0.03171241, -0.012755325, -0.028052075, -0.050345037, -0.014600556, 0.027568169, -0.02293817, -0.015143993, 2.5956544e-05, 0.032203965, -0.047276605, 0.047028624, 0.013528459, 0.009715164, -0.062568255, -0.018520517, -0.05065698, 0.013488133, -0.0052513336, 0.024129855, -0.0021956458, 0.0049277316, 0.044569246, 0.021001626, 0.019631956, 0.06314764, 0.06339886, 0.012840147, 0.028752437, -0.021586575, 0.0072676013, -0.0046362127, -0.0009330451, 0.026946139, 0.01589398, 0.021214841, 0.06636347, -0.021335354, -0.022276279, -0.0006197125, 0.04281718, -0.056147717, 0.01954528, 0.046730936, 0.059569348, -0.06845112, 0.04685527, 0.04436437, -0.047917638, 0.051249344, 0.049235858, -0.0011388435, 0.0066564633, 0.005265471, -0.032421578, 0.0038851388, -0.008102585, 0.049541775, 0.04998257, 0.020192338, -0.013773193, 0.0115288785, -0.024716195, -0.014864178, 0.025269162, -0.027640013, 0.038024485, 0.005524254, -0.021801645, 0.02953855, -0.022178015, -0.017626582, 0.0027254953, -0.046232317, -0.061356638, -0.068402916, 0.000104753206, -0.007989981, -0.020905796, 0.04868892, 0.017170023, 0.040578425, -0.0057192575, -0.043139778, 0.015022699, -0.0024575288, 0.0148341665, 0.0020137182, -0.013019062, -0.015086605, 0.023315467, 0.0047305804, -0.020077389, -0.0026359798, 0.001226215, -0.045746557, -0.056900453, 0.07452124, 0.014498585, -0.020318067, -0.0014045794, 0.020477049, 0.009895238, -0.04134507, 0.009510294, 0.033972483, -0.008811552, 0.0040732077, 0.009884809, -0.00018169582, -0.091989994, -0.06793199, 0.020465346, -0.030558735, -0.048201304, -0.064631805, -0.010821214, -0.0290463, -0.02616327, 0.006659476, -0.025848895, -0.015507066, -0.007999946, -0.019502636, 0.018303538, -0.005969774, -0.0017313248, 0.024520593, 0.042081125, -0.021418322, -0.014574601, 0.03973259, -0.016250651, 0.033232026, 0.014212136, 0.037280783, -0.0020746696, -0.03260351, -0.011877438, -0.040867887, -0.008607839, -0.013923688, -0.04235274, -0.011406048, -0.056364637, -0.03879762, 0.005546821, 0.039146177, -0.02449371, -0.019282006, 0.025161162, -0.021764563, 0.001137453, -0.01283331, 0.032089707, -0.035949815, -0.030556882, -0.0064803297, 0.014581031, -0.045333568, -0.023038289, 0.0019699165, -0.00803274, -0.0077591534, -0.0001279287, 0.019782597, 0.016055051, -0.012279763, 0.017785652, -0.01208648, 0.09078488, 0.050263926, 0.05503529, 0.035070453, -0.019106843, 0.061049797, -0.00623467, -0.04457017, 0.08099555, 0.025596863, -0.061240237, -0.014102864, 0.036375318, 0.006797457, 0.033612337, 0.030617137, 0.0011736067, 0.030137405, -0.0030971721, 0.027851373, 0.0123166125, -0.047595963, 0.0023407242, 0.05425474, 0.010136031, 0.009065093, -0.0507571, 0.04522372, 0.005944976, -0.013603954, 0.014670548, -0.010645892, -0.005412867, 0.033427626, -0.053837582, 0.032023426, 0.02936195, 0.017002463, 0.013106202, 0.033445008, -0.020265574, -0.007101838, -0.0277742, 0.045652926, -0.0067653884, 0.029728819, -0.011500141, -0.015612399, -0.015603593, -0.028399242, -0.011638035, 0.021788666, 0.060814336, -0.013448967, -0.0027334038, -0.010944392, -0.017770965, 0.036049932, 0.030239375, -0.015161404, 0.035245243, -0.011875815, -0.037708603, 0.026119702, 0.029420817, -0.010771967, 0.005327349, -0.010824807, -0.027704094, 0.04491224, 0.036781352, 0.020112615, 0.020137876, 0.05464919, 0.050917473, 0.03922544, 0.015473791, 0.013267503, -0.0067310883, 0.03128691, 0.008394161, -0.047703497, -0.08312398, -0.007545939, 0.025788609, 0.011352977, 0.048071522, 0.03016313, -0.004793734, -0.019201934, -0.04207927, -0.009535786, -0.030910075, 0.003892555, -0.010216218, -0.05040761, -0.001137453, 0.079363994, -0.036503248, -0.02417574, -0.03253792, -0.03811267, -0.03713249, -0.032918464, -0.0537078, 0.0117889065, 0.020726766, 0.025499294, 0.012612911, -0.024181304, -0.018826839, -0.021517977, 0.011745568, 0.004280976, -0.02402406, 0.023331227, -0.035293486, 0.020845888, -0.054089736, -0.04003583, -0.022004662, -0.01800828, -0.0085376175, -0.0287478, 0.016897017, 0.01935524, -0.0025562563, -0.019153614, -0.044502497, 0.030473448, -0.031464662, 0.0068671284, -0.021200009, 0.018825447, -0.07588953, -0.01769634, -0.020529773, 0.00072492927, 0.02857329, -0.038360994, 0.033052772, 0.008912366, -0.017955208, 0.020336954, -0.01022039, -0.035902537, -0.032998186, 0.00035365793, 0.003081876, -0.071636364, -0.03276736, 0.017802482, -0.035163935, -0.031044723, -0.036373, 0.029161252, -0.02979371, -0.060795795, 0.058524597, -0.024172498, 0.0033891834, 0.033424616, -0.060704943, 0.021549262, -0.0030748078, -0.04672086, 0.013754189, -0.022859374, 0.051291987, 0.011422735, 0.06833617, 0.0009555253, 0.017668992, -0.01276135, -0.016660742, -0.0030913784, 0.019987583, -0.024618395, 0.025442513, 0.002936798, 0.015715761, -0.05425474, -0.06628189, 0.0047815666, 6.70351e-05, -0.004753756, 0.0022248467, 0.00990655, 0.00803216, 0.004813317, 0.006369435, 0.010231283, 0.020398138, 0.012516617, 0.0212306, 0.010886519, -0.0076766484, -0.019016877, 0.035306696, -0.002353239, 0.01298847, -0.023140261, 0.016270814, 0.010325143, 0.016836064, -0.0036093504, 0.058079626, 0.010565356, -0.022336766, 0.018624749, -0.0062263263, 0.05879343, -0.049425896, -0.017534574, 0.05897327, 0.021070227, 0.03131657, -0.009194179, -0.01263122, 0.012903184, -0.06045836, -0.0033799133, -0.064352766, -0.028166328, -0.0355118, -0.023256138, 0.0013641672, 0.013855234, -0.0077535906, -0.023431346, 0.04741612, 0.0249257, 0.031417385, 0.0058161207, -0.0012699008, 0.03851766, -0.01615424, 0.00962339, 0.053032935, 0.020833837, 0.010143216, -0.013585354, -0.0035690253, 0.016709527, 0.04554308, -0.0006107031, 0.015460831, 0.037226785, -0.038868073, -0.019151296, -0.026834432, 0.015560718, -0.0051479707, 0.0135650765, 0.04030959, 0.050815966, -0.029946437, -0.012010464, -0.012889279, -0.049601108, -0.021412296, 0.033953942, 0.010863046, -0.015338465, -0.0017517192, 0.0037441736, 0.026643466, -0.030588863, -0.057255507, 0.049561244, -0.020461174, 0.048983015, 0.03759852, -0.031534884, 0.046562336, 0.035057098, -0.044598676, -0.033196338, -0.022187982, -0.035277262, -0.028377458, 0.0039900946, -0.030880872, 0.02745739, 0.094298735, 0.04238333, 0.016738264, -0.057650387, 0.007683138, -0.029463459, -0.04760245, -0.041968957, -0.025490254, -0.002339797, 0.038569573, 0.013647119, 0.008694168, -0.037934564, 0.06396064, -0.0152513245, 0.009468367, -0.016765147, 0.0035041336, -0.015163026, 0.006448811, -0.01948931, 0.042659584, 0.00825818, 0.028685693, -0.014918061, 0.0014072156, 0.0053885034, 0.028813155, 0.0020709615, -0.015197557, -0.009544592, 0.01650961, -0.011867472, -0.016194334, 0.004059882, 0.07205167, -0.02383367, 0.014388386, -0.009698478, -0.036727123, -0.012558102, 0.03386043, 0.00024311086, 0.04434398, 0.01060603, -0.021352967, 0.04554632, -0.008806685, 0.04630462, 0.029438432, 0.013162084, 0.036254227, 0.0053004655, 0.03130267, 0.0436362, -0.0059639798, 0.023977358, 0.032981616, -0.015097932, 0.017131088, 0.0072155143, -0.049454637, 0.0032575466, -0.002956729, 0.04878533, -0.025555145, -0.034220926, -0.042583335, 0.04137317, -0.008735305, -0.026124453, 0.009611338, 0.009033747, -0.0035587118, -0.0021108233, 0.010879501, -0.021302214, -0.0045294175, -0.06224194, -0.014958387, 0.0018649314, 0.051157337, -0.0047417628, 0.043588687, 0.027588101, -0.006722282, -0.015388987, 0.006557736, 0.028398316, 0.06964327, 0.018292876, 0.031027742, 0.020168236, 0.024967648, 0.014928258, 0.008559403, -0.032439195, 0.05342877, 0.024809126, 0.02377249, -0.015108564, -0.031037541, 0.0013413972, -0.03516741, 0.013269357, 0.0053280448, -0.006119256, 0.04867803, 0.02642191, -0.030774599, 0.037452515, 0.011371444], [-0.038974695, -0.08169367, -0.03210308, -0.019911159, 0.0047767884, 0.026405731, 0.022495707, -0.023806158, 0.042607747, 0.0335989, -0.021565212, 0.028183365, -0.071248844, -0.012062523, -0.028539086, 0.03885402, 0.025546081, -0.034890205, 0.053693492, 0.0305634, -0.04399307, 0.0070271827, -0.026607338, 0.030468049, -0.016770735, 0.05868715, 0.020406937, 0.010371152, 0.015317926, -0.011174675, -0.017212236, -0.047433395, -0.011261909, -0.009808978, 0.013870205, 0.007942171, 0.003183132, 0.0025057965, -0.040776074, -0.04198475, -0.05878602, 0.020382466, -0.0067978906, 0.028469298, -0.0063642045, 0.055461437, 0.011507133, 0.017884059, -0.017522402, -0.04570286, 0.0199887, -0.026081512, -0.032908052, 0.033747926, -0.020041525, 0.037028894, 0.02373443, 0.015053619, 0.01818441, -0.035161115, 0.001377328, 0.0051288744, -0.061575565, 0.005910103, 0.024729867, 0.0128883375, -0.0058524315, 0.016169304, -0.024536014, -0.049150057, -0.031002719, -0.0035950097, 0.019998878, -0.014789554, 0.03897421, 0.012715324, -0.07531589, -0.01116062, -0.032652654, -0.016546108, 0.008147655, 0.016168335, -0.007310693, -0.0794566, -0.04139932, 0.0040021017, -0.025388122, -0.0062963557, 0.030352583, 0.030432062, -0.042818323, -0.016294098, 0.060664456, 0.0018241598, 0.0063231317, 0.014522522, -0.00039352223, 0.05686881, 0.018922921, 0.006990351, 0.040783834, -0.048597086, -0.005281534, -0.007292338, -0.0014044673, -0.0047334135, 0.014745937, -0.024480766, -0.009747914, 0.014969354, -0.0079034, 0.001099845, 0.004736321, -0.049632266, 0.0072995466, -0.021722235, 0.017257791, -0.03570972, -0.020640532, 0.0056663323, -0.019677687, 0.007919393, 0.01142523, 0.024674619, -0.03790947, -0.001365939, 0.015008608, -0.0003393342, -0.065619834, -0.009492997, 0.03276339, -0.0019530721, 0.045802694, -0.029795256, -0.028606206, 0.017863583, 0.017502774, 0.053982332, -0.0007176813, 0.049158297, -0.012878766, 0.00012988172, 0.029219722, -0.0022004775, 0.0061083185, 0.004341163, 0.020691177, -0.044441357, -0.02018413, -0.0076552676, 0.0053358125, -0.0056847488, -0.0016496917, 0.011252216, 0.020413157, -0.04183936, 0.012045075, 0.014630353, -0.03624863, 0.018021574, -0.011393243, -0.008227135, 0.05218822, 0.0046676244, 0.012163327, -0.051842194, 0.03099327, 0.005978436, -0.033537593, 0.024522444, 0.09013404, -0.00029017418, 0.00577586, 0.01714584, -0.053218555, -0.008456608, 0.0021277824, -0.017339211, 0.031082926, 0.02635872, 0.005409477, 0.011502772, -0.0053658597, -0.011218776, -0.019823834, 0.0316892, -0.0038302992, -0.025856156, -0.022213653, 0.00465878, 0.046999738, -0.0053421133, 0.017886845, -0.014489991, -0.03951409, 0.012705631, -0.03395462, -0.0035843477, 0.016363159, 0.037645344, 0.015969636, 0.0067334953, 0.033986364, -0.01686948, -0.043568533, -0.025147622, 0.02009968, -0.03091185, 0.03228482, -0.031640254, 0.0015966245, 0.018392803, 0.03821382, 0.06118108, 0.028200813, 0.036786456, 0.024629306, -0.026315589, 0.035688397, 0.039542202, -0.03556433, 0.015667226, 0.04237052, -0.037636623, -0.029819002, -0.0071696653, -0.015025087, 0.020444982, 0.015399769, -0.027824735, 0.06345595, 0.008067691, -0.016717669, -0.0495729, 0.00345592, 0.0034205418, -0.027670259, 0.025171854, -0.04831988, 0.01930561, -0.0012697392, 0.023940885, 0.03425388, -0.00601963, -0.015397043, -0.0053847604, -0.030651119, 0.014712498, -0.01604427, 0.021113535, 0.065278165, -0.0056173843, -0.017915925, -0.013528418, 0.010407743, 0.016645215, 0.007237514, 0.0035639934, 0.008964747, 0.060409542, 0.0147900395, -0.049369596, -0.004732202, -0.071965136, 0.042497493, 0.00084568514, 0.037037615, -0.047355462, 0.010332079, -0.055627663, -0.032572202, -0.054375857, 0.033645183, 0.013360371, -0.042903617, 0.004539318, 0.0145831015, 0.01367829, 0.058321983, 0.010747592, -0.066848375, 0.0055238507, 0.012459923, 0.0028840527, 0.01442511, 0.0072489027, 0.030230455, -0.030441515, -0.010054444, -0.046792317, -0.0003159809, -0.0023965116, 0.006635599, 0.055911172, 0.064087905, -0.030070527, 0.038436268, -0.025721427, -0.05782257, -0.009626513, 0.017660037, -0.011163528, 0.016668478, 0.013011435, 0.018745132, -0.033520874, -0.067647055, 0.013951139, 0.0021843635, 0.011925857, -0.027670199, -0.017192366, -0.04825591, 0.016118903, -0.0028915647, -0.033629432, 0.037272178, 0.086367466, -0.012004124, -0.02484715, -0.026750546, -0.028418897, -0.00927685, -0.05605269, 0.025782492, 0.05644621, 0.03505837, 0.016558466, -0.05972815, -0.05175593, 0.041849054, 0.03662495, 0.002595696, -0.014029891, -0.0019462873, 0.0035541188, -0.03156126, 0.014759022, 0.02117072, 0.017915552, 0.02794735, -0.06250218, -0.01205283, -0.0047378964, 0.028094193, -0.0811974, -0.0020393368, -0.053728387, -0.006161628, 0.017924648, 0.03508648, -0.03656849, 1.1146566e-05, 0.015386138, -0.013866328, -0.007631036, 0.0011213808, 0.0061838296, -0.008853281, -0.0033623858, 0.004802595, -0.008122454, -0.027724901, 0.040831808, 0.008468483, -0.042794574, 0.062075708, 0.009124191, 0.06125765, -0.012216637, 0.062634006, 0.038497332, -0.017106434, 0.004420825, 0.0013409804, 0.04958962, -0.07304393, -0.010125443, 0.027481616, 0.02285349, 0.03716362, -0.010786968, 0.06600512, 0.04381182, 0.025979253, 0.050101392, 0.029725468, 0.023909142, -0.01709544, 0.05110749, -0.006546063, 0.0077017923, 0.033653907, 0.018757397, 0.010085219, 0.00086507044, 0.02571658, 0.04216455, 0.018013334, -0.00039643006, -0.016333355, 0.0035429117, 0.00013412227, -0.013413439, -0.00085707405, -0.042395722, -0.029761571, 0.037750024, 0.0023195762, 0.033363126, 0.036598537, -0.033762768, -0.033832252, 0.029119615, 0.030870656, -0.01614992, -0.021253731, 0.032685608, -0.0025414173, 0.011880543, 0.038869042, 0.04341539, -0.04789728, 0.01453391, 0.06739892, -0.016968466, 0.02148646, -0.021486217, -0.027978366, 0.058341127, 0.005073142, 0.04067527, 0.004933567, 0.102862455, 0.051566925, -0.020932283, -0.0043776925, -0.0011609391, -0.063987106, -0.010243451, -0.04590059, -0.048528273, 0.0026519136, -0.01188127, -0.007566095, 0.01909746, -0.041165724, 0.024184655, 0.022041123, -0.029006273, 0.01589888, -0.011289775, -0.014426685, -0.015810676, -0.04900806, 0.040583193, 0.05395713, -0.056372546, -0.02018413, -0.031462394, -0.035650473, -0.0120052155, 0.017713832, 0.00441404, 0.010203954, 0.0044043474, 0.034881968, -0.05598484, -0.0016952473, 0.010296277, 0.031768683, -0.039985154, -0.0096102785, -0.04283189, -0.019436704, 0.014882119, 0.044619218, 0.0067034476, 0.014906835, 0.0032179651, -0.0015198101, 0.012327617, 0.021691216, -0.0119607495, 0.03816051, 0.022700224, -0.009824001, 0.019433795, -0.021764882, -0.0053096423, 0.01550342, 0.034708466, 0.0053677983, 0.049279455, -0.0289045, -0.03991682, 0.006141273, 0.04189752, -0.033217736, -0.008658701, 0.06933746, 0.023421356, -0.056957982, 0.02007127, -0.001540157, -0.061738163, 0.029050373, 0.05391836, -0.015093419, 0.0017252945, -0.024265105, -0.051307157, 0.0011195635, -0.035963666, 0.058636755, 0.0405483, -0.016746989, -0.07215996, 0.0033245843, -0.0016138289, 0.019307306, -0.040267576, 0.0026563962, 0.03833837, -0.00652377, -0.036515668, 0.029350119, -0.070909604, 0.023456737, -0.0056859604, -0.023750182, -0.03462705, -0.025189301, 0.008112761, 0.031960595, -0.015618035, 0.015944436, 0.031538, -0.00082605745, -0.0019858682, -0.04066558, -0.0025593482, 0.01681193, 0.009613883, -0.043459974, -0.0089473, -0.019477898, 0.031570952, -0.003018296, -0.0027510663, -0.009152543, -0.010233517, -0.0916461, -0.06430115, 0.008637861, -0.005776829, -0.007904854, 0.027789844, 0.04250186, -0.008055454, -0.042568978, -0.001323049, 0.031617478, 0.005659184, 0.008678813, 0.030863388, -0.0043165074, -0.07475372, -0.08837385, 0.03856857, -0.011221472, -0.029715443, -0.06406077, -0.04400858, 0.022893593, -0.02496346, 0.043546725, -0.023049645, 0.0025268781, -0.01857018, 0.025445186, -0.032503385, -0.0065306765, -8.335693e-05, 0.041120164, 0.034998037, -0.00866912, 0.010692828, 0.028384002, -0.022302825, 0.029812217, -0.030099604, 0.058024175, 0.020019231, -0.0021352943, -0.043946065, -0.04628975, 0.020790769, 0.02377635, -0.030371, -0.0035436389, -0.045350045, -0.0089320345, -0.0133799985, 0.02610235, -0.010946897, -0.03803887, 0.0399001, 0.0039148675, -0.0004003071, 0.0051991157, 0.018504754, -0.031817146, -0.020342724, -0.025186846, 0.0264306, -0.05431673, -0.0007521509, -0.025062084, -0.012792865, 0.034774378, 0.0009304959, -0.008298012, 0.0071328334, 0.0021285096, 0.008901139, 0.020991892, 0.0378518, 0.025983129, -0.017038738, 0.045538202, -0.015944436, 0.07064268, 0.0004114537, -0.0551503, 0.091956265, 0.005646947, -0.017419659, -0.04296953, -0.008153471, 0.019894438, 0.021730023, -0.00904035, -0.015799105, 0.02373522, 0.0009249227, -0.0012285454, -0.026619937, -0.016880747, 0.004160577, 0.0670306, -0.011204237, -0.007478619, -0.07827022, 0.046637233, 0.016303064, -0.0020451525, -0.018141134, -0.014520583, -0.009185012, 0.03204008, -0.03608628, 0.057849705, 0.039512638, 0.024918875, -0.011005053, 0.019406172, -0.0044276095, -0.04640994, -0.031310946, 0.041079458, 0.029455528, 0.010770733, -0.02034018, 0.013035182, -0.009087844, -0.02439741, -0.017371802, -0.025713673, 0.0042950627, -0.039445274, -0.036696553, 0.032414213, 0.012659591, 0.04132759, 0.030636579, 0.026222538, 0.028294345, -0.04585988, -0.050624795, -0.020737717, -0.0064640315, 0.002216228, 0.00031695017, -0.025501404, 0.0026228356, 0.036994, 0.031829502, 0.034966778, 0.022423012, 0.028480928, 0.041069884, 0.018967396, 0.033653907, 0.022013014, -0.043605853, 0.008875332, 0.011748238, -0.025845008, -0.06868999, -0.013773278, 0.012876707, -0.014209448, 0.06101727, 0.029041165, -0.006428176, 0.053059593, -0.027854783, 0.014697959, 0.015547036, -0.0013249874, 0.02213829, -0.05014113, -0.01760382, -0.015742827, -0.015141399, -0.05506888, -0.05776005, -0.035906482, -0.00214111, -0.008364771, -0.02906443, -0.014412146, 0.0018690793, 0.016367158, -0.0043529766, -0.03198386, -0.06444556, 0.025127266, 0.031041734, 0.024613556, -0.024333438, 0.0239656, -0.008075929, -0.008322093, -0.051070657, -0.022393452, -0.005293165, 0.01275991, 0.009566783, 0.010634793, 0.05152427, 0.036127836, 0.017127426, -0.011620295, -0.048828747, 0.04759632, -0.042107847, 0.022112062, 0.019252058, 0.02765996, -0.07527712, 0.016810961, 0.004403378, -0.026623815, 0.016941568, -0.019645702, 0.013132594, -0.010324627, 0.023928043, 0.022076016, 0.0060491925, 0.01212083, -0.01372215, -0.0010477771, 0.0025435374, -0.07354407, -0.031614687, -0.0030745137, -0.060261246, -0.055034958, 0.0149561465, -0.00021760036, -0.024136676, -0.04548962, 0.03438522, -0.027476285, -0.0030628825, 0.0054795067, -0.07272528, 0.008862489, -0.024320353, -0.061833393, 0.024910152, -0.03576109, 0.038932532, 0.021738712, 0.018022787, -0.061955523, -0.044370968, 0.032894, -0.013923091, 0.051131718, 0.006565812, -0.012480277, 0.0043595186, -0.011372405, -0.01069828, -0.051074535, -0.06868999, -0.027312735, 0.00465563, -0.0029969725, 0.018224636, 0.014972745, 0.008482778, 0.008053636, -0.006440958, 0.043434776, -0.011347447, 0.009921125, 0.057830323, -0.001330803, -0.0069147483, -0.025557075, 0.0028709678, -0.002080046, -0.025594454, -0.028591668, -0.002290377, 0.039069198, 0.011995159, 0.020057034, 0.055966422, 0.040368013, -0.020780446, -0.034370195, 0.008090468, 0.019514728, -0.0995398, -0.010714031, 0.057270087, 0.0027599866, -0.015962852, 0.0077647944, -0.032492723, 0.02706774, -0.03321822, -0.0020407909, -0.059875473, -0.05365085, 0.0136608435, 0.003483544, 0.0008733092, -0.0017647921, 0.010901341, -0.0017311102, 0.028640073, 0.027597928, 0.012318409, 0.0034486505, -0.00447365, 0.042964227, -0.028984947, -0.009728529, 0.035793077, 0.009137337, 0.0056006648, 0.027045446, -0.015900334, 0.02035266, 0.030887133, -0.009972905, 0.039935723, 0.033191565, -0.056969613, -0.011440617, -0.031744935, 0.016606264, 0.0032024567, -0.0074769226, 0.040841017, 0.025633708, 0.003217238, -0.035570633, 0.0058584893, -0.003342031, -0.0013240182, 0.01481524, -0.01279432, 0.00017286264, -0.0123174405, 0.013286707, 0.023017174, -0.032491755, -0.07121008, 0.054381307, 0.0124111865, 0.046975505, 0.04231915, -0.042909432, 0.0701245, 0.028595302, -0.022883657, -0.009070396, -0.027602775, -0.018267283, -0.041199647, 0.029839842, -0.013945323, 0.007668353, 0.064979635, 0.04348905, 0.0037946787, -0.085741326, -0.0047624917, -0.036102515, -0.02320933, -0.037685085, -0.01700978, 0.010224794, 0.0029499629, 0.018359484, -0.02001996, -0.020358475, 0.0835818, 0.0006101533, 0.00012794319, 0.011330727, 0.00052928017, -0.027712302, 0.016085949, -0.0147309145, 0.08112956, 0.011180687, 0.04268844, -0.016273987, 0.0045330175, -0.053891223, -0.024398379, 0.020321885, 0.035010636, -0.015020543, 0.0020241921, -0.0028680598, 0.0156804, 0.030166484, 0.02837625, -0.0491108, 0.050358247, -0.000859376, -0.005287182, -0.019312637, 0.045640822, -0.06105095, 0.039964803, 0.0031234617, 0.014641983, 0.011765443, -0.05039992, 0.08169754, 0.014183642, 0.014465667, 0.018908694, -0.017866492, 0.03435081, 0.006814187, -0.027050292, -0.0067346767, 0.007914062, -0.03353081, 0.000779775, 0.008007111, -0.024050169, 0.015579992, -0.008912891, 0.048873328, -0.0103991395, -0.054283775, -0.026679063, 0.052813396, -0.022163734, -0.033034787, -0.023464005, 0.0030507667, -0.049086567, 0.015897911, 0.032373503, -0.026201215, 0.0141357845, -0.049484454, -0.0216373, 0.01398264, 0.012519048, 0.0016009861, 0.048489258, 0.021341313, -0.032055583, -0.020674698, 0.0032489817, 0.0003514803, 0.034234498, 0.027220882, 0.04382442, 0.028895775, 0.00626752, -0.021590414, 0.011041401, -0.040066574, 0.02035266, 0.05207785, 0.0016664116, 0.0070703756, 0.03013547, 0.031280655, 0.0049132123, -0.022498166, -0.0097413715, -0.03677737, 0.04097526, 0.024765974, -0.04873182, 0.028347172, 0.020575592], [-0.015725581, -0.088958666, -0.03918004, -0.039256904, 0.0072187176, 0.027233604, -0.013302518, -0.03541344, 0.03135945, 0.029018568, 0.014094853, 0.010490611, -0.05694135, -0.026029548, -0.028982442, 0.012506469, 0.018579734, -0.05887683, 0.040608823, 0.0444412, -0.018220896, 0.02330705, -0.02655165, 0.020272778, -0.020603156, 0.03926353, 0.0036305317, 0.013627239, 0.014769782, -0.011235082, -0.005488144, -0.03327566, -0.008226798, 0.005818534, 0.02856179, 0.017009113, 0.032542933, 0.005026852, -0.053467758, -0.053051922, -0.06030737, 0.016586678, -0.0041567483, 0.04298558, 0.006212444, 0.04863829, 0.010682674, 0.047860406, 0.00076584355, -0.03178331, 0.052398466, -0.001762885, -0.043439746, 0.029245349, -0.0022525755, 0.0101046795, 0.031587433, 0.032453123, 0.042967513, -0.01974626, 0.010994588, 0.0026118155, -0.05226842, -0.007198849, 0.02871231, 0.03955654, -0.0026322862, 0.0033034028, -0.0032861433, -0.055103257, -0.0074155973, 0.017499605, 0.019457608, -0.0062419455, 0.05100004, 0.018444065, -0.073400564, 0.005622207, -0.01616018, -0.010493822, -0.008070257, 0.0137837045, 0.008522217, -0.050047956, -0.07285307, 0.0323597, -0.017386263, -0.0012041565, 0.04490982, 0.011159219, -0.041596685, 0.004357441, 0.03550381, 0.025860466, -0.0049326266, 0.008707456, 0.006683069, 0.04379116, 0.030966088, 0.031474244, 0.026365709, -0.038743533, -0.009825114, -0.013925669, -0.009512836, -0.0011704401, 0.016840931, -0.021717364, -0.0062450566, -0.008276832, -0.009470691, 0.0048827543, 0.020247491, -0.085084096, 0.008592058, -0.034448236, 0.029965837, -0.030874573, -0.046099525, -0.031191666, -0.0013781571, 0.0042109354, -0.005508414, 0.009146773, -0.023508748, -0.01603535, -0.0062531843, -0.002800868, -0.054440714, 0.0020253912, 0.04592733, 0.011380081, 0.053765602, -0.011600844, -0.038231164, 0.014385656, -0.022616468, 0.067988284, -0.009896963, 0.03402525, -0.021905212, 0.021079963, 0.010871124, -0.009866859, 0.012595678, -0.041565478, 0.0046865772, -0.049913492, -0.014367995, -0.035024896, -0.009908201, -0.0043803197, 0.00054367667, 0.009507618, 0.010423278, -0.03812038, 0.016231027, 0.011272009, -0.028349057, 0.024475686, -0.017809475, -0.01812135, 0.033137586, 0.02557187, -0.026915306, -0.064568475, 0.008206728, 0.0069536027, -0.026715618, 0.04479783, 0.07354025, -0.021743355, -0.003740712, 0.035461448, -0.072361276, -0.028407456, -0.003410974, -0.026982738, 0.041999876, 0.047862414, -0.016055018, 0.021999938, -0.00057970104, -0.0057582767, -0.01375809, 0.03724697, -0.022216287, -0.025863675, 0.0052774665, 0.015911724, 0.027187547, -0.0247406, 0.028639156, -4.4955177e-05, -0.009519559, 0.02159454, -0.042111762, 0.006105676, 0.010673743, 0.040872883, 0.0014658598, 0.008113406, 0.039862398, -0.024898745, -0.04405808, -0.04162107, 0.011409383, 0.017922664, 0.038135737, -0.028664745, -0.0016662767, 0.027357232, 0.04414197, 0.03483808, 0.02940751, 0.05192403, 0.03683916, -0.01372618, 0.060723603, 0.0423827, -0.032465667, 0.010958326, 0.03900905, -0.037546802, -0.035320017, 0.018086432, -0.01843945, 0.02149018, 0.019858949, 0.011887132, 0.085414834, -0.014834405, -0.019151531, -0.05025266, -0.026049316, -0.030160708, -0.049168117, 0.037147433, -0.03588587, 0.036908202, -0.012938059, 0.05190015, 0.0034791592, -0.0025098636, -0.019093106, 0.012934447, -0.036031574, -0.0010036143, -0.019465191, -0.014398099, 0.06850205, -0.0028656917, -0.041746102, 0.017878262, -0.0032504199, -0.011751764, 0.0005563203, 0.020758051, 0.0069973534, 0.03968418, 0.012689276, -0.056769557, -0.0032777141, -0.03159546, 0.034396227, 0.014727035, 0.031446747, -0.021761216, 0.014081807, -0.044662163, -0.05562882, -0.062178224, 0.03893921, -0.0033529738, -0.036351077, 0.024367312, 0.042211305, -0.012904543, 0.049622487, 0.017262787, -0.06448659, -0.020335393, 0.008968156, -0.0058309273, 0.0011993399, 0.005505002, 0.014440645, -0.05947971, -0.025605986, -0.057846073, -0.021173086, 0.00016938467, 0.021539148, 0.028602129, 0.06359311, -0.0009749654, 0.05096151, -0.0060864086, -0.06336753, -0.0227995, -0.0056563243, -0.008119025, -0.010628888, 0.012305276, -0.004833083, -0.036790993, -0.052689075, 0.022925653, 0.018876689, 0.006699124, -0.033101458, -0.027833676, -0.059916418, 3.7228507e-05, 0.017872492, -0.031929415, 0.042819005, 0.078930855, -0.03512685, -0.026764786, -0.03218309, -0.012039157, 0.015257466, -0.051178258, 0.036069706, 0.05009512, 0.013889545, 0.02241718, -0.048082773, -0.01655956, 0.014502058, 0.018704163, -0.00080527965, -0.0008818439, 0.03133135, 0.022152865, -0.021164155, 0.023620734, 0.019561924, 0.022285374, -0.006455082, -0.06380825, -0.013399252, -0.0119279735, 0.043067057, -0.054431085, 0.01186054, -0.06761901, 0.0067149787, -0.0011671789, 0.022058541, -0.022343125, 0.0065221135, 0.0179331, -0.0174691, -0.0124993455, -0.034565713, -0.010618853, -0.04522591, 0.011477217, -0.040950954, -0.020457214, -0.050326116, 0.040809866, 0.00621706, -0.020880876, 0.05764297, -0.00045968677, 0.037185207, -0.0068392074, 0.045605417, 0.018946398, -0.01749253, -0.0018132089, 0.0124584045, 0.07355309, -0.060205817, -0.002409116, 0.0071026045, 0.015100323, 0.029838396, -0.033865295, 0.07199812, 0.019032897, 0.049468353, 0.05877568, 0.054154832, 0.01919867, -0.047906768, 0.03655498, -0.018408341, 0.011292178, 0.039099764, 0.042725276, 0.033178322, -0.0143074365, 0.031985607, 0.053875167, 0.018837472, 0.00871147, -0.005743024, 0.024629816, -0.01635325, -0.035898313, -0.01797645, -0.053994376, -0.03975844, 0.001389998, -0.001412877, 0.034400344, 0.02058947, 0.008061633, -0.03204421, 0.034366928, 0.029411925, -0.0077836677, -0.022983333, 0.029114295, 0.0019956888, 0.015532013, 0.018530363, 0.032984257, -0.07206315, 0.027939241, 0.02714008, -0.008446154, -0.009668774, -0.01774445, -0.0656177, 0.04062503, 0.02060372, 0.028250264, -0.000676736, 0.10146062, 0.04479623, -0.01968242, 0.016009862, -0.028920628, -0.06513433, -0.019465191, -0.048195157, -0.052423052, 0.00874614, 0.006171302, -0.024628112, -0.0044068117, -0.021311957, 0.008045973, 0.012237987, -0.050152313, 0.01047857, -0.013588166, -0.008687587, -0.011768222, -0.064902425, 0.032173984, 0.068534166, -0.053547632, -0.021598352, -0.032929666, -0.04605979, -0.012210147, 0.0065221135, 0.0035835698, -0.007780256, -0.0021401874, 0.028488738, -0.0633868, 0.01436358, 0.045623083, -0.0002516687, -0.02335582, -0.019655045, -0.058468625, -0.0019756947, 0.010454587, 0.042407986, 0.007869965, 0.01295853, 0.003303804, 0.027178615, 0.02116305, 0.012615747, 0.0057878783, 0.029257992, 0.017409293, -0.026307607, 0.012304071, -0.027240427, -0.039488707, 0.0035002823, 0.039065246, 0.010839014, 0.06155849, -0.021559218, -0.04159658, 0.015285563, 0.03674524, -0.036344856, 0.0039115767, 0.044969626, 0.03845193, -0.064574905, 0.022044092, -7.7266704e-05, -0.07950965, 0.04125922, 0.05399759, -0.010412341, 0.02110214, -0.042172775, -0.048742246, 0.022760162, -0.012817845, 0.046396956, 0.03515254, 0.025782598, -0.036400046, -0.026939038, -0.027490292, -0.010575705, 0.011712428, -0.015222545, 0.03678016, -0.0042634164, -0.013425943, 0.030223524, -0.013548367, 0.022193106, 0.0019687708, -0.03361523, -0.033361476, -0.04042353, 0.011662657, 0.0038056865, -0.019328117, 0.01777636, 0.0009498788, 0.0031147515, 0.0023190049, -0.015755987, 0.011835252, 0.009662804, 0.001880491, -0.037084807, 0.0063634655, 0.006119423, 0.033772577, 0.011241604, -0.021464089, -0.011510131, 0.0049490836, -0.087746084, -0.048545167, 0.052208614, -0.0103958845, -0.02305458, 0.019778673, 0.02824279, 0.00734977, -0.029470125, 0.015592824, 0.02570874, 0.0077182413, -0.009489957, 0.029917669, 0.01243974, -0.08358853, -0.07532561, 0.016037157, -0.018761562, -0.036709514, -0.065608874, -0.038884822, 0.008046375, -0.017579682, 0.029949807, -0.022409504, 0.00089669524, -0.021277444, 0.009123693, -0.0029814914, -0.0071963407, -0.022126777, 0.02099487, 0.02003556, -0.0133789815, -0.0015447321, 0.03012358, -0.024621788, 0.01328586, -0.0016328362, 0.047588263, 0.018385876, -0.03386008, -0.026856704, -0.034394726, 0.03794217, 0.002738252, -0.034292772, -0.013093196, -0.06778357, -0.0104585, 0.01028751, 0.0224809, -0.0023737939, -0.02000987, 0.050733496, -0.007995198, 0.0087847235, 0.0025410713, 0.02035747, -0.038199857, -0.010252589, -0.0025504036, 0.020365097, -0.0445281, -0.030357588, -0.04432761, -0.014033642, -0.0077162352, 0.006233445, 0.0045765974, 0.011775848, -0.012104983, -0.0007716636, 0.0028963978, 0.060899813, 0.02003039, -0.012923007, 0.065682724, 0.009232669, 0.058536455, -0.01989668, -0.08637334, 0.07036007, -0.010814128, -0.056884352, -0.018508486, -0.016325552, 0.010567577, 0.031808197, 0.013278635, -0.011453334, 0.03379706, 0.0041005546, -0.005026952, -0.0090139145, -0.016502565, 0.015580781, 0.05515679, 0.005702835, 0.0012507172, -0.064777195, 0.04565359, 0.018582944, -0.0029076366, -0.007461756, 0.0006328344, -0.02427981, 0.037119728, -0.040247727, 0.025374085, 0.03186439, 0.02422442, -0.010555084, 0.050392542, -0.019145286, -0.008633, -0.04349574, 0.06619971, -0.003133165, 0.030588787, -0.037973676, -0.0154103935, -0.00493945, -0.03261468, -0.023035914, -0.0030029216, 0.04131501, -0.021497406, -0.025394456, 0.011132226, 0.00422097, 0.05390206, 0.020494744, 0.006394372, 0.03421892, -0.048455156, -0.04344115, -0.010887582, 0.019913537, 0.017294295, -0.015519571, -0.017589917, -0.007893647, 0.05821053, 0.026544025, 0.028774524, 0.038810767, 0.06364369, 0.044841185, 0.010362971, 0.03727667, 0.021412963, -0.021683248, 0.04487249, -0.010170306, -0.06546437, -0.07426916, -2.047066e-05, 0.010674446, 0.0022421395, 0.03282671, 0.03722128, 0.012588252, 0.01122605, -0.035950895, -0.020506784, -0.007504705, -0.009362417, 0.036185708, -0.050610296, -0.028932368, 0.041793864, -0.044611588, -0.042029176, -0.036237083, 0.0072430014, -0.017371964, -0.02014875, -0.023312971, -0.006085807, 0.025561031, 0.005265676, 0.0004431296, -0.025471121, -0.04236102, 0.012932039, 0.016199116, -0.007740318, -0.01313253, 0.0068656993, -0.013524283, 0.012019889, -0.05619156, 0.0056260196, -0.009441835, -0.015572955, 0.0022710392, -0.007983557, 0.042434778, 0.034824204, 0.0061024646, -0.008741373, -0.03570966, 0.041528348, -0.04342389, 0.017675914, -0.0009152593, -0.013040012, -0.046413004, -0.0058104564, 0.0072642746, -0.03223848, -0.002618639, -0.016301872, 0.023316484, 0.011609374, 0.005701681, 0.01246864, 0.014282902, -0.0016571828, -0.012752167, 0.0029716578, 0.0063039595, -0.09475266, -0.040942926, 0.01635365, -0.035980247, -0.04707931, -0.001131004, 0.033933133, -0.030112242, -0.039204076, 0.043611336, -0.023827849, -8.3889565e-05, 0.016243318, -0.050378695, 0.017443411, -0.002761131, -0.049954835, 0.0119742835, -0.025120812, 0.041307386, 0.010581525, 0.016977001, -0.027720485, -0.0130988145, -0.008620556, 0.006265628, 0.014558253, 0.021153418, 0.014773194, 0.0043347375, 0.019046344, 0.015865967, -0.03709444, -0.06008761, -0.0074124862, 0.025624452, -0.0066475463, 0.0038079442, 0.027038934, 0.016004244, -0.004783913, 0.012788343, 0.035438225, 0.0034949891, 0.0010299552, 0.023515169, 0.004615532, 0.01685217, 0.0075235697, 0.0060311183, 0.01595066, 0.0054243235, -0.027854146, 0.011157715, 0.03410091, 0.01640583, 0.006221475, 0.041077793, 0.014049095, -0.019659862, 0.00068074977, 0.006800875, 0.019687157, -0.07639169, -0.015424442, 0.07823485, 0.012873236, 0.010926674, 0.022991361, -0.011928374, 0.01911799, -0.061201654, -0.020731159, -0.059726164, -0.03982025, 0.018842641, 0.00015654035, -0.01202832, 0.025577487, 0.00046319887, -0.0053578946, 0.029078774, 0.04386501, 0.010437227, 0.03811637, -0.017476525, 0.05594993, -0.03676972, 0.0077363043, 0.03999024, 0.0021478138, 0.017700698, 0.039852764, -0.017088987, 0.021991158, 0.02577557, -0.035655074, 0.012948094, 0.027959712, -0.061097298, -0.000922986, -0.022728857, 0.024032556, 0.014239953, -0.008684176, 0.046795126, 0.031741865, -0.007617494, -0.042823017, -0.01905096, -0.009462864, -0.02025632, 0.034331307, -0.0044200574, 0.00532478, -0.0134005565, 0.019979967, 0.026021821, -0.020530567, -0.07571094, 0.06276465, 9.713529e-05, 0.054460388, 0.031634834, -0.03169661, 0.054909535, 0.031232206, -0.02348908, -0.02746119, -0.013936105, -0.022746516, -0.040722966, 0.025867088, -0.03202414, 0.030590842, 0.049399316, 0.03847766, 0.009022594, -0.065318264, 0.00068546605, -0.044702902, -0.03971509, -0.0700787, -0.027027894, 0.008657785, 0.0066678156, 0.025150515, -0.019651433, -0.01797926, 0.08040233, -0.01429093, -0.0122262025, 0.014648163, -0.0045942585, -0.02677723, -0.0016833481, -0.0014243164, 0.06695191, 0.0029862078, 0.035266533, -0.02009697, 0.009137751, -0.048299517, 0.041481584, 0.010812473, 0.031247057, -0.0309982, 0.02431172, -0.022574522, -0.010130568, 0.0109540345, 0.028306909, -0.04098979, 0.047447376, -0.01450868, -0.022374632, -0.043862607, 0.06223161, -0.034975126, 0.0462364, 0.004837598, 0.008547103, 0.033117514, -0.017981268, 0.07930093, 0.011354795, 0.03250159, 0.020299269, -0.014165698, 0.033441834, 0.026300384, -0.021029187, -0.0092130015, 0.013247328, -0.029470526, 0.0057895845, 0.013939315, -0.008513236, 0.0061405962, -0.001969699, 0.06241063, -0.018842615, -0.06563937, -0.052659567, 0.043987036, -0.00860992, -0.023889663, -0.036580667, 0.012701041, -0.021805268, 0.008730135, 0.009939108, -0.00978899, 0.0020591076, -0.05165029, -0.0006362713, 0.006420362, 0.015841883, -0.013157167, 0.027097136, 0.025519889, -0.01775328, -0.02763138, 0.012478924, 0.020127011, 0.049450696, 0.009055194, 0.015369854, 0.03271934, 0.024070688, -0.007919737, 0.0028981036, -0.03839092, 0.055640057, 0.05261, 0.030594405, -0.01556573, 0.0065064593, 0.03458879, 0.0067392625, 0.001331195, 0.00031508761, -0.0010675851, 0.042268302, 0.036286853, -0.05047824, 0.024758462, 0.031318504], [-0.022558967, -0.08328869, -0.03174875, -0.013968938, 0.015661677, 0.05427392, -0.009555045, -0.0341811, 0.037039783, 0.04189143, 0.0096452525, 0.0265766, -0.018437376, -0.0074497275, -0.025928592, -0.027269358, 0.04954768, -0.048948158, 0.057554968, 0.0472363, -0.011425518, 0.021719359, -0.043836843, 0.02419623, -0.010713062, 0.017887335, 0.018780027, 0.036758203, 0.0054455735, 0.005586363, -0.010945924, -0.046379447, 0.004102478, -0.0002205082, 0.011360135, -0.0118160695, 0.0054437085, -0.0034219562, -0.061491016, -0.06182003, -0.06477813, 0.027929716, -0.0049322974, 0.03357109, -0.0316674, 0.05513917, 0.001389831, 0.030251114, -0.021772504, -0.027458806, 0.04959896, -0.027991952, -0.04495337, 0.014577783, 0.008541313, 0.006403595, 0.027876338, 0.020875085, 0.017577253, 0.0005832628, 0.01931055, 0.00057900883, -0.057287376, 0.00390761, 0.00795537, 0.009252487, -0.006859063, -0.004872509, -0.008593526, -0.048879158, -0.026819834, 0.018852752, 0.021717958, -0.007948231, 0.0319639, 0.02640504, -0.08147522, -0.021339063, -0.0056418395, 0.013845864, -0.008576044, 0.010527751, -0.016728787, -0.05591631, -0.050298247, 0.019743059, 0.013447736, -0.008939673, 0.04056978, 0.015112037, -0.022885302, -0.0012633768, 0.06985028, 0.03409159, -0.00067320844, 0.02318611, -0.0010958978, 0.03717218, -0.0020979748, 0.021700244, 0.035972204, -0.015697805, -0.018712895, -0.00666676, -0.0043430324, 0.004307835, 0.018270945, 0.0059220204, 0.005207088, 0.036868226, 0.012114198, 0.0057043093, 0.018299615, -0.08224722, 0.01422068, -0.03283847, 0.040194962, -0.011527031, -0.047645155, -0.015727058, 0.007341571, 0.0072173313, -0.0021304914, 0.03797528, -0.045697875, -0.028928762, 0.010361903, -0.0034994022, -0.058201343, 0.006405926, 0.030414747, 0.021258062, 0.05337324, -0.0023980848, -0.016378677, 0.024688061, -0.017167006, 0.04776403, -0.019016035, 0.018551126, -0.03811948, -0.016797317, 0.016376346, 0.004757942, 0.01631854, -0.012566635, 0.01291628, -0.067903474, -0.026219962, 0.0011855229, -0.017905219, -0.004282078, -0.0054845004, -0.00413183, 0.025536992, -0.037389424, 0.012965448, 0.038629495, -0.055103738, -0.0047346326, -0.024027467, 0.0147717185, 0.029892147, 0.026828341, -0.011355822, -0.055944744, 0.016636947, 0.0075665084, -0.024958916, -0.0069851386, 0.076895356, -0.017526906, -0.013364055, 0.0206572, -0.06258564, -0.0059861215, 0.03222077, -0.028756972, 0.056112576, 0.014320562, -0.0075252503, -0.009017177, 4.5686687e-05, -0.0003459135, -0.01642448, 0.036995027, -0.027623665, -0.016866779, 0.017855685, 0.0293178, 0.004029752, -0.020979047, 0.026457721, -0.012236865, -0.015427182, 0.022165501, -0.03823265, 0.02459622, 0.012149513, 0.006827829, 0.00017925033, -0.008145604, 0.039485417, -0.024787825, -0.051491696, -0.030570688, 0.030545745, 0.00676163, 0.050087526, -0.034194157, -0.020185357, 0.01733297, 0.018395739, 0.034842625, 0.044276927, 0.057406515, 0.016668182, -0.025260076, 0.05966938, 0.024823723, -0.023595834, -0.00011141958, 0.045418162, -0.03628455, -0.057373155, 0.018626416, -0.0062255105, 0.03312879, 0.015416692, -0.015737198, 0.052414753, 0.00012773625, -0.0031822175, -0.029778803, -0.003212753, -0.017977946, -0.036573593, 0.036180127, -0.06594081, 0.029545302, 0.003236762, 0.054385807, 0.033535425, -0.007837132, -0.0014669856, 0.0071300366, -0.030824529, 0.018034121, -0.012644024, -0.012354054, 0.05683284, 0.006125746, -0.036438398, 0.0013872086, -0.012398807, -0.0024633517, 0.03244827, -0.021393126, 0.028007658, 0.024025137, 0.036183856, -0.048413906, 0.007829206, -0.035817433, 0.017294742, -0.0055208635, 0.034606267, -0.04484288, 0.0070307385, -0.044575755, -0.02266899, -0.045354757, 0.032707006, -0.019726392, -0.050715018, 0.013120471, 0.0069345864, 0.013683628, 0.05576573, 0.025075233, -0.056041714, -0.013043083, 0.040086806, -0.021979492, 0.023659585, 0.004826006, 0.04435245, -0.04098236, -0.016587997, -0.036951672, -0.0056087403, 0.0084884, 0.008397027, 0.032004807, 0.046805542, -0.0028921887, 0.05395505, -0.0058594197, -0.060090113, -0.026937313, 0.015622983, 0.0007776061, 0.020373, 0.038238823, 0.008712172, -0.00838444, -0.029939232, 0.038985662, -0.006921533, 0.021386964, -0.038577277, -0.03148372, -0.06068964, 0.01783832, 0.00087830325, -0.020251876, 0.045778062, 0.06491612, 0.0016615036, -0.00038134397, -0.026314134, -0.024573844, -0.0013652394, -0.04668993, 0.04525966, 0.040851355, -0.010670173, 0.0023211634, -0.06407138, -0.028074352, 0.033556115, 0.041003335, -0.0009612852, -0.0027197562, 0.019432692, 0.021000957, -0.040331088, 0.0040316167, 0.0029481899, 0.01840719, 0.004075497, -0.07696622, -0.0054003526, -0.013123618, 0.081264496, -0.06409936, 0.022434961, -0.0587624, 0.00893536, -0.017805338, 0.012861269, -0.033960126, 0.0048730914, 0.01505353, -0.013604376, 0.004516222, -0.010275833, -0.014399698, -0.041019186, 0.009160647, -0.015755381, -0.022611182, -0.043627873, 0.05146372, 0.018093094, -0.014916936, 0.052862294, -0.024045182, 0.047721844, -0.005965376, 0.054922856, 0.044306763, -0.0094026, 0.0027948131, 0.009203828, 0.072349064, -0.05276533, -0.012011869, 0.016113881, 0.00047364974, 0.026168814, -0.019562293, 0.06898806, 0.019627094, 0.033475287, 0.061201513, 0.042112872, -0.0034950315, -0.04321002, 0.041065805, -0.03011685, 0.034849968, 0.024790155, 0.04287276, 0.022722134, 0.0047013, 0.056010015, 0.04188071, 0.02183579, 0.014939081, -0.007137379, 0.02788333, -0.0018050903, 0.013197392, -0.033967122, -0.030259855, -0.008914964, -0.008993751, -0.015227653, 0.023149166, 0.04317299, -0.008687464, -0.025897358, 0.002334683, 0.0333662, -0.0018852751, 0.0059471945, 0.014796659, 0.015982881, 0.0031794205, 0.0132230325, 0.040901706, -0.07037242, 0.043691244, 0.046964053, -0.0036912977, 0.022396965, -0.03939591, -0.032495353, 0.033713046, 0.021237781, 0.04343825, 0.009667629, 0.08115074, 0.044512354, -0.032299325, 0.027160268, -0.009338732, -0.07355743, -0.005238701, -0.04324385, -0.05177333, 0.014101103, -0.006545317, -0.018821051, -0.0017859766, -0.033293474, 0.012067812, 0.011602671, -0.039517585, 0.007945754, -0.00981984, 0.006616178, 0.008711239, -0.06273435, 0.031062286, 0.069622785, -0.03137102, -0.024172919, -0.020585116, -0.038714338, 0.0030311253, -0.009441294, -0.017216654, -0.0011920496, -0.009217989, 0.038818765, -0.058592245, 0.030093133, 0.047379892, 0.0366314, -0.022648826, -0.023752416, -0.06272357, -0.016497556, -0.0054369485, 0.04503402, -0.0018538074, -0.0008516139, 0.001657308, 0.0077886474, 0.014806217, 0.05348699, 0.014788501, 0.019377857, 0.01580678, -0.03804167, 0.0064232918, -0.053681683, -0.034210004, -0.0022405125, 0.018423855, -0.0052486076, 0.06448349, -0.028639026, -0.04647175, 0.021834506, 0.02149885, -0.027263764, -0.0026302477, 0.03233685, 0.046895053, -0.04360002, 0.017371664, -0.0085431775, -0.06782515, 0.041903082, 0.036188517, 0.00986273, 0.0062643206, -0.019313348, -0.06142342, 0.020486517, -0.0139845265, 0.057367675, 0.020823805, 0.01604203, -0.06007333, -0.00347685, -0.011217015, -0.041967414, -0.009447296, 0.021219134, 0.04342846, -0.019668585, -0.02824253, 0.042976256, -0.023917446, 0.02308949, 0.010852168, -0.004090357, -0.014493402, -0.04720647, 0.026543032, 0.016440915, -0.0020419152, -0.008920967, 0.010943128, -0.011065503, 0.009088387, -0.034691114, 0.01913806, 0.051877704, 0.0057140994, -0.019980934, -0.020098412, -0.013194362, 0.043031268, 0.022238927, 0.0008246914, -0.0021426124, -0.034921877, -0.091604605, -0.057065003, 0.034624916, -0.018239245, -0.028912213, 0.03516663, 0.048794314, -0.027819695, -0.046988294, -0.005757455, 0.036872886, 0.014968451, -0.0233711, 0.022596497, 0.025226977, -0.046365462, -0.09446888, 0.03306481, -0.01824111, -0.030956695, -0.06260941, -0.032680202, 0.011937279, -0.025721604, 0.038606647, -0.013454264, -0.028857436, -0.009904687, 0.03482887, -0.020147363, -0.006972814, -0.005924759, 0.031868793, -0.0042936164, -0.0054618903, -0.024677338, 0.054441746, -0.009815878, 0.027825989, -0.00040931543, 0.04109564, 0.018642033, -0.032334056, -0.030747142, -0.028442293, 0.04366901, 0.011141491, -0.039587982, -0.029711002, -0.033371795, 0.0031781967, 0.0009249223, 0.0236456, -0.0127163995, -0.023909988, 0.033830527, -0.03620157, 0.019651802, 0.011549875, 0.028289616, -0.023986444, -0.024434919, 0.005917825, 0.0025388745, -0.019015044, 0.00017499633, -0.039154656, -0.03194525, 0.009532668, 0.017741237, 0.004109238, 0.008329895, -0.019407518, 0.028494975, 0.010748959, 0.048923448, 0.021289065, -0.00630756, 0.04855143, -0.0008894918, 0.03469671, -0.0015440235, -0.086662985, 0.07723661, -0.0010871567, -0.05743469, -0.028146729, -0.007401127, 0.01591106, 0.026588487, 0.0027132297, -0.011052041, 0.031682786, 0.019656232, 0.0149217155, -0.014037934, -0.011192305, 0.013154269, 0.04790016, -0.008832915, 0.017457908, -0.06394435, 0.048015773, 0.022355447, 0.009599333, -0.012870942, 0.0009516117, -0.01444352, 0.04238046, -0.026088031, 0.026955144, 0.03113781, 0.026538372, -0.012269206, 0.035199262, -0.045497183, -0.015231849, -0.035771742, 0.047144, 0.03921969, 0.018803801, -0.027292784, 0.00037714827, -0.0058562877, -0.048030693, -0.028887972, 0.0038982867, 0.023266645, 0.002144477, -0.024974536, 0.004649786, -0.0026815287, 0.007853448, 0.016716665, -0.0027072276, 0.03767194, -0.056230057, -0.022964554, -0.013816027, 0.037757717, 0.048882894, -0.038048618, -0.03148279, 0.02645842, 0.053661346, 0.04044484, 0.015677061, 0.023558944, 0.033879012, 0.020880913, 0.007984914, 0.041072335, 0.038394764, -0.010772735, 0.021529619, -0.011374121, -0.051714532, -0.040823385, -0.014776381, 0.028601732, -0.029977925, 0.05107212, 0.05284551, 0.013434684, 0.03528411, -0.03909102, -0.012803461, -0.004387787, -0.009091651, 0.0040987483, -0.04465361, -0.043467037, 0.03484123, -0.009263558, -0.0509262, -0.04122804, -0.0045588785, -0.022773065, -0.022143153, -0.001461974, -0.021588592, 0.03354708, 0.010090231, 0.011823062, -0.025799925, -0.05543683, 0.028594272, 0.014059379, -0.0022209324, -0.03029074, 0.041175827, -0.012531439, 0.010612365, -0.04580277, -0.003315082, 0.007255792, 0.008710307, 0.009435932, -0.020792104, 0.06019081, 0.03241051, 0.038923193, -0.009198175, -0.026504338, 0.03812321, -0.030926624, 0.03007303, 0.00444, -0.0054712137, -0.044912577, -0.012564305, 0.0022769917, -0.028972818, 0.0129945995, -0.018114539, 0.014440723, 0.0016406415, 0.0055374126, 0.008010554, 0.015302243, -0.00036712518, 0.00033146158, -0.001692855, 0.017089851, -0.088024266, -0.025015792, 0.013538294, -0.06166957, -0.043631718, 0.011309669, 0.030800287, -0.03405243, -0.04408672, 0.04212126, -0.0169437, -0.0076422635, 0.0028279128, -0.059230458, 0.02010424, 0.02013291, -0.038933042, 0.02315103, -0.03448529, 0.060627166, -0.0042616236, 0.006584477, -0.04186765, 0.00019055544, 0.00014078959, -0.029340643, 0.048427887, 0.005784494, 0.0041395985, 0.013263824, 0.019990256, -0.004272849, -0.05689671, -0.046432592, 0.0016265393, -0.0017771189, 0.015172643, 0.030787233, 0.02121354, 0.018131088, 0.020382322, 0.0010396052, 0.03548457, -0.026082436, 0.024332356, 0.019257404, -0.00028752311, 0.01636609, -0.024782464, -0.0038850002, 0.012617918, -0.003337692, -0.03106543, 0.020035012, 0.047634434, 0.009554811, -0.01025736, 0.07051088, 0.0019775808, -0.004112035, -0.026977057, 0.027556999, 0.0023843322, -0.05936286, 0.0072695445, 0.06890671, -0.004544427, -0.01973758, 0.057346117, 0.003020799, 0.044082988, -0.0638905, -0.021445587, -0.063786075, -0.03158238, 0.0026563546, 0.016550235, -0.013424661, 0.0008204956, -0.018886434, -0.037850954, 0.037705503, 0.045138445, 0.0074609155, 0.027467024, 0.0006060479, 0.04685776, -0.05922533, -0.0014046326, 0.057613708, 0.029703688, 0.02116832, 0.004441865, -0.030352741, 0.021965738, 0.028075868, -0.041543186, 0.03735283, 0.023840059, -0.070931844, -0.0004608295, -0.025733026, 0.025820902, 0.008135144, -0.037945125, 0.033255246, 0.028015263, -0.006440891, -0.032053873, 0.0085727805, 0.0051155104, 0.008856545, 0.02776352, -0.0055397437, 0.0073532253, -0.019585777, 0.010485561, 0.0503113, 0.0009920538, -0.04740973, 0.058698535, -0.0067834095, 0.062160004, 0.01618614, -0.02558268, 0.07833496, -0.0010852918, -0.037310172, -0.042643394, -0.022255942, -0.022361303, -0.0044931457, -0.0022111426, -0.029347736, 0.025556166, 0.030353675, 0.04442704, -0.009532201, -0.06820556, -0.009270202, -0.034038212, -0.025619976, -0.057900883, -0.020178597, 0.011364797, 0.0043249675, 0.056052905, -0.0013722323, 0.003743045, 0.06638555, -0.0016521798, -0.014010894, 0.00038134397, -0.0022335195, -0.048308544, 0.034412213, -0.009818909, 0.07145048, 0.015230916, 0.047420915, -0.035777453, 0.011646375, -0.057595063, 0.022988794, 0.016787527, 0.017214557, -0.004048866, 0.027069828, -0.04151603, -0.010531014, 0.047526274, 0.031785812, -0.040335752, 0.060715493, -0.011036832, -0.01721922, -0.0385894, 0.067467116, -0.0528236, 0.05224692, -0.004637432, 0.005781347, 0.04170169, -0.03753674, 0.07785384, 0.010119601, 0.020978812, 0.012882248, -0.006813377, 0.011502323, -0.0021071818, -0.008291667, -0.019315213, -0.0030427682, -0.033009097, 0.001804158, 0.0070198993, -0.016000597, -0.017047662, -0.0038759094, 0.06178658, -0.040528286, -0.04850807, -0.03323986, 0.046400893, -0.020950086, -0.009090718, -0.028883776, 0.013981058, -0.03838754, 0.009025918, 0.0010302814, -0.028475394, 0.00086711464, -0.05153645, 0.042797238, -0.0053481394, -0.0086888615, -0.021643369, 0.011512113, 0.027827853, -0.008841073, -0.006334832, 0.0070982194, -0.018825216, 0.036261246, 0.023586918, 0.033906046, 0.036123253, 0.018801471, 0.003038864, 0.0075308443, -0.03747474, 0.029303813, 0.055814214, 0.0044092317, -0.025756104, 0.0014934419, 0.054148983, -0.0018414533, 0.019863918, 0.0036515552, -0.021559048, 0.024729552, 0.028083151, -0.014449581, 0.0020673517, 0.018911958], [-0.021454081, -0.06624092, -0.0011121549, -0.029607283, 0.044488035, 0.04630108, -0.0080343215, -0.036580205, 0.03433859, 0.028216515, 0.0053409142, 0.040028397, -0.028388638, 7.894786e-05, -0.031227091, -0.010244861, 0.03813296, -0.028550379, 0.052520517, 0.049063798, -0.0034255108, 0.008410701, -0.017556718, 0.021187173, -0.023011923, 0.024180077, 0.004118994, -0.017030476, -0.009807206, 0.030237028, -0.036260474, -0.04384268, -0.015094876, 0.00036398636, 0.025611235, -0.013268747, -0.0035778987, -0.0072124405, -0.06043183, -0.055218976, -0.08374348, 0.0270043, -0.012370946, 0.016771829, -0.011895422, 0.061924495, 0.01297407, 0.0613994, -0.01466181, -0.008677838, 0.030950313, -0.018018471, -0.059723135, 0.029821176, 0.00734588, 0.029686231, 0.029027106, 0.011941666, 0.0025063076, -0.015025567, -0.0017887197, 0.04527568, -0.071148545, 0.0017734581, 0.026500316, 0.027881445, -0.010015362, 0.03003874, -0.025188038, -0.050602823, -0.012966956, 0.0136664715, 0.019061776, -0.010847757, 0.027532605, 0.0073519615, -0.07289825, 0.012213968, -0.0039492287, -0.0022958564, -0.029684395, 0.026848238, -0.0020003184, -0.034274384, -0.051573146, 0.015934614, 0.0051628225, -0.027737321, 0.036656592, 0.026678868, -0.056188844, 0.011695758, 0.059241187, 0.023632031, -0.0068674306, -0.0021079537, -0.017994603, 0.036927402, 0.010824119, 0.015505221, 0.04887056, -0.03247373, -0.008238117, -0.040351532, -0.01660659, 0.007856688, -0.018701462, -0.0091083795, -0.016634129, 0.009642884, 0.018048076, 0.006035839, 0.021603255, -0.05578676, -0.008904698, -0.014116978, 0.01705453, 0.0028262874, -0.008479207, 0.023690782, -0.0028714987, 0.020298779, 0.0135131655, 0.022172414, -0.047537625, -0.012461139, -0.010448886, -0.005323931, -0.047478873, 0.00080256, 0.025737127, 0.005568578, 0.052120276, -0.031646617, -0.028625943, 0.03009382, 0.015396209, 0.030828219, -0.0029187757, 0.025882045, -0.010584407, 0.015029468, 0.0069005936, -0.012013729, 0.021746693, -0.0051095784, -0.039644673, -0.04649983, -0.014049161, -0.0069230846, -0.033976953, -0.0015156153, -0.0022698657, 0.005462205, 0.0042152186, -0.025660807, 0.009542822, 0.014756823, -0.034806825, 0.0016880842, 0.009353657, -0.017027033, -0.019689916, 0.020791516, -0.011244102, -0.05517537, 0.006171703, 0.032635186, -0.0045883134, 9.5758696e-05, 0.06585353, 0.0026250163, 0.01836318, 0.0094122365, -0.040654473, -0.0018305748, -0.002193557, -0.0025341343, 0.038329013, 0.0041903756, 0.014001311, 0.006229422, -0.017539734, -0.0133564165, -0.040979445, 0.012069842, -0.0065609342, 0.013175112, 0.021095602, 0.039275642, 0.024796052, 0.0014903703, 0.032660086, -0.0036882304, -0.032941453, 0.02143447, -0.049390145, -0.010906967, -0.0017744908, 0.041855216, 0.018843751, 0.0010868025, 0.010002051, -0.011645956, -0.02846621, -0.053522054, 0.042036064, -0.009007629, 0.053710245, -0.022802848, -0.0022196053, -0.016938906, 0.040609494, 0.054306027, 0.046364423, 0.020406185, -0.004491307, -0.034426775, 0.015603218, 0.042980224, 0.0046937256, -0.006322484, 0.045189384, -0.043096352, -0.033051614, 0.020855546, 0.012139036, 0.038534816, 0.026377765, 0.012728506, 0.062323824, 0.0041332874, -0.014777937, -0.03489277, -0.025273643, -0.021613352, -0.038352594, 0.041987408, -0.060154594, 0.03610074, -0.015430176, 0.004702905, 0.011449735, -0.008412078, -0.018196564, -0.028655892, 0.007724497, 0.0101493895, -0.045572422, 0.001076812, 0.039246265, 0.021886917, -0.013783056, 0.04048189, 0.016434925, 0.009716897, -0.0016120624, 0.00856217, 0.01596158, 0.01792977, 0.040368978, -0.044259455, -0.031816904, -0.07022687, 0.04660035, 0.0058914837, 0.013052674, -0.035581615, 0.0003359874, -0.07415958, -0.047706537, -0.043395616, 0.033171985, 0.00038865756, -0.035884555, -0.009469612, -0.010399545, 0.012917843, 0.011497011, 0.032133613, -0.06889761, 0.00337089, -0.013373629, 0.014250777, 0.00646638, -0.0041020755, 0.016512036, -0.044813007, 0.014603059, -0.04288613, -0.017620977, -0.005282162, -0.006578376, 0.014474997, 0.05752545, -0.042356443, 0.018132303, 0.0045367475, -0.08297236, -0.00915864, 0.022604791, 0.009736749, 0.02266997, 0.032042503, -0.006114787, -0.001097926, -0.036476664, 0.024093784, 0.010904903, -0.0036205854, -0.03743414, -0.053755917, -0.054780632, 0.026328191, 0.03369662, -0.004762059, 0.036782358, 0.07499312, -0.037726287, -0.037307452, -0.03486007, -0.0044218833, 0.004601008, -0.057154115, 0.030751107, 0.06078503, 0.036856715, 0.013416545, -0.056581743, -0.026508119, 0.05326169, 0.057301454, -0.02508029, -0.03297817, 0.016584558, 0.032005094, -0.011431488, 0.030597802, 0.015983727, 0.012406747, -0.018886898, -0.08960467, 0.0016785599, -0.033073645, 0.08369942, -0.057903666, 0.016050283, -0.027642766, 0.008525565, 0.017847264, 0.029082187, -0.035136845, -0.0017299679, 0.016396597, -0.024906442, 0.00041505, -0.01329101, -0.020034395, -0.008722591, 0.012633034, -0.02412775, -0.031531405, -0.050645966, 0.02683768, 0.031291176, -0.026554594, 0.028404705, -0.015848322, 0.02917215, -0.02564612, 0.043917958, -0.0075542084, -0.007699596, 0.027996425, 0.0061976365, 0.0695044, -0.026562283, -0.011257786, 0.012849223, -0.007234917, 0.008676002, -0.015443485, 0.06878011, 0.036512926, 0.022820061, 0.060343903, 0.0520886, 0.03948586, -0.05034762, 0.035518274, 0.0037197291, 0.004334329, 0.008519943, 0.052270822, 0.0053207185, 0.013200816, 0.047063936, 0.023240505, -0.0023447971, -0.003278172, 0.0030707046, 0.011178466, -0.0120597435, 0.0007564306, -0.028845804, -0.030829137, -0.021555519, -0.016771829, 0.007704989, 0.025354195, 0.059919585, -0.001953615, -0.003285975, 0.022129267, 0.038856115, 0.008815538, -0.052399345, 0.02143526, 0.047959905, 0.0356982, 0.030194229, 0.065078735, -0.041032918, 0.05005409, 0.009567149, -0.034828857, 0.0039242133, -0.03319218, -0.018851096, -0.0023124376, 0.039202202, 0.06006647, 0.0013650635, 0.07465162, 0.04491169, -0.02841572, 0.049730726, -0.013183374, -0.07790272, -0.009602722, -0.027785974, -0.025200889, -0.009824303, 0.0091451, -0.011192235, 0.0020067443, -0.021803379, 0.013478511, 0.006397989, -0.058397546, 0.026628606, -0.03817565, -0.0515199, 0.02074309, -0.0618584, 0.019300915, 0.04707151, -0.06419929, -0.025136631, -0.048134323, -0.05129683, -0.028502356, 0.008912301, -0.0123576345, -0.01250635, -0.008816456, 0.027088294, -0.038036343, -0.009612361, 0.02640496, 0.020739878, -0.020869773, -0.013701125, -0.017213387, -0.018983288, -0.023845924, 0.04016478, 0.024345316, -0.012633951, -0.0035379655, 0.028377164, 0.032118924, 0.019619461, 0.012193887, 0.0399265, 0.02395884, -0.026460383, 0.006933641, -0.027569326, 0.014502336, -0.003891768, -0.0068923314, 0.042159993, 0.05248311, -0.039983418, -0.039795227, 0.024704253, 0.011983549, -0.08274102, 0.028645907, 0.04856831, 0.061619263, -0.049134944, -0.016992178, -0.003746351, -0.055733513, 0.04437971, 0.05469067, 0.0057512596, 0.013263527, 0.0022227035, -0.037751764, -0.0046928073, -0.0497959, 0.0014779773, 0.0368286, 0.016602, -0.032220036, 0.0031572257, -0.018784082, -0.0325334, -0.011747625, -0.011092633, 0.018110042, 0.025304165, -0.015448076, 0.042154483, -0.011782509, 0.029021772, -0.0004406392, -0.010935196, -0.026044762, -0.0044559636, 0.01670298, -0.0012236917, -0.01595504, 0.00704885, 0.0009992411, 0.016113969, 0.019544873, -0.017352464, 0.032201085, 0.032275904, -0.020884464, -0.024554618, -0.019144395, -0.013522575, 0.018345278, -0.00045716314, 0.018015716, 0.029950613, -0.0068707583, -0.094686024, -0.06969443, 0.06575897, -0.025679857, -0.04205924, 0.018792573, 0.040491067, 0.02266446, -0.063978516, -0.005066892, 0.024771439, 0.045763593, 0.0068143015, 0.028889406, 0.021229628, -0.042938225, -0.031213779, 0.015349276, -0.015637184, -0.02937262, -0.043612264, 0.00075780763, 0.009358993, -0.004867399, 0.0363587, -0.0012723457, 0.00782869, -0.03566963, -0.0017533767, -0.052058764, -0.0048822514, -0.013251995, 0.021092847, -0.0054359273, -0.02009636, -0.009352567, 0.04345804, -0.021003112, 0.040580116, -0.019511135, 0.02069719, 0.034204617, 0.009339485, -0.017027033, -0.0038430206, 0.049335983, 0.0025722315, -0.0599508, -0.018189218, -0.04328362, -0.0015275492, -0.034296416, 0.038627073, -0.012704523, -0.01937619, 0.04862545, 0.0058834516, 0.00048286712, -0.0337019, -0.0079953065, -0.023868874, -0.007949865, -0.016932938, 0.018197251, -0.018654644, 0.009631581, -0.022567382, -0.031843066, 0.03912142, -0.008905502, 0.0013118197, 0.026263934, -0.019196263, 0.013568015, 0.01147888, 0.07071341, 0.043164283, -0.025318395, 0.06531374, -0.01537739, 0.043806877, -0.013164526, -0.09863525, 0.060929388, -0.055641714, -0.037224833, -0.028037505, -0.024233092, 0.0040006367, 0.063466735, -0.012174494, -0.0054508448, 0.027919082, -0.015141465, 0.0015670231, -0.013736927, -0.040309306, 0.007785085, 0.002143526, 0.02190298, 0.008032715, -0.045161847, 0.01303511, 0.013004364, -0.021095946, -0.011480028, 0.033617098, -0.019394092, 0.048385628, -0.03593275, 0.018235635, 0.02098177, 0.027722515, -0.035934586, 0.022230247, -0.026450744, -7.573486e-05, -0.020675158, 0.047882795, 0.020899609, 0.013230192, -0.0216464, 6.655488e-05, 0.006249618, -0.0213251, -0.010102113, 0.024612453, 0.042292185, -0.02881046, -0.016572624, 0.03140656, 0.03310302, 0.03794087, 0.0195443, -0.012640378, 0.031756315, -0.047897484, -0.044188768, -0.038599074, -0.00020930362, 0.011532813, 0.0004902111, 0.012262794, 0.015208479, 0.053602844, 0.08686284, 0.014856656, 0.036420666, 0.05502849, 0.062974684, 0.015066877, 0.034178454, 0.06512732, -0.011425408, -0.0021221826, 0.005620904, -0.05403935, -0.045148995, -0.031482637, 0.035552237, -0.026083086, 0.05182651, 0.0641589, -0.004937339, 0.03419911, -0.030154409, -0.004721954, 0.009213031, 0.01202486, -0.021952093, -0.03517494, -0.040356122, 0.031755395, 0.0016266931, -0.039453328, -0.052307542, 0.010285942, -0.013894822, -0.016587542, -0.008802686, -0.022060419, 0.040409368, 0.027503, -0.01513871, -0.03286388, -0.06591962, 0.006436316, -0.0073729036, -0.028557092, 0.007387133, 0.0029747735, -0.012845551, 0.014309299, -0.06670543, 0.0039988006, 0.026620116, 0.034121998, 0.019390877, -0.012124922, 0.054224327, 0.006756927, 0.015595874, -0.013825628, 0.040430825, 0.03161586, -0.066420846, 0.024365513, 0.03758836, -0.013351368, -0.040435992, -0.02212376, 0.001668003, -0.02614092, 0.023605868, -0.032321345, 0.05038526, 0.0162807, -0.0017176896, 0.041895606, 0.011876144, -0.012390912, -0.004571173, 0.022983005, 0.023600819, -0.08127406, -0.025900636, 0.012103807, -0.028144509, -0.06931622, 0.024598109, 0.0076763025, -0.01795513, -0.033657033, 0.055840462, -0.025671823, -0.0047552316, -0.042534534, -0.03606081, 0.034054067, -0.0155648915, -0.031437773, 0.03476276, -0.020220978, 0.02529682, 0.000545291, 0.03284575, -0.04466888, -0.0011036635, 0.0044396697, -0.03140151, 0.03276267, 0.020285929, -0.00225644, -0.001677642, 0.0066270297, -0.023505576, -0.049230415, -0.050853435, -0.007915211, -0.01050454, -0.0059780055, 0.005407928, 0.028744364, 0.011763977, -0.014463982, 0.0021127732, 0.02532023, -0.03294788, -0.008030535, -0.012360618, -0.00060266594, 0.016656162, 0.0065760813, -0.002767765, 0.0032109288, 0.0058368626, -0.038708318, 0.010151225, 0.030428777, 0.01680878, 0.019191673, 0.03448369, 0.041023508, 0.016868593, -0.017104603, 0.020215241, -0.0029137267, -0.06533211, -0.008197037, 0.0522551, -0.0042117764, 0.019452384, 0.03669423, 0.033802535, 0.053559694, -0.07918286, -0.003192167, -0.035852425, -0.046785787, -0.010082375, -0.0001712067, -0.00012209378, -0.00039841127, 0.021434344, 0.0017533767, 0.044846054, 0.017763726, 0.01540034, 0.013374777, -0.015896976, 0.047416452, -0.0796896, -0.024182372, 0.06401386, 0.009305749, 0.021587191, 0.023361107, -0.006073362, 0.042598795, 0.048705317, -0.040250555, 0.062934294, 0.012518284, -0.05218637, -0.012413174, 0.016089756, 0.036246933, -0.00878708, 0.009874507, 0.012776701, 0.044221357, -0.024275547, -0.030582884, -0.032429207, -0.010538851, -0.015931403, 0.029564137, 0.018919716, 0.0072521153, -0.03136525, 0.017906245, 0.04845195, -0.014609943, -0.028743446, 0.04411487, -0.009740422, 0.037050415, 0.06247254, -0.036306836, 0.0535753, 0.003880379, -0.04758444, -0.031571798, -0.051733337, 0.0045353705, -0.019906105, 0.015763337, 0.010600586, 0.044854317, 0.037149556, 0.046896864, 0.006711486, -0.090209864, -0.016363319, -0.019973144, -0.007862771, -0.041956313, -0.047442153, 0.003295614, 0.009492619, 0.06770008, -0.014676039, -0.030894315, 0.05879963, -0.0017270992, -0.01766596, 0.0070217694, -0.015071237, -0.052063357, 0.023423646, -0.019753488, 0.045893032, -0.0046749064, 0.04275302, -0.028423065, 0.001195033, -0.022890748, 0.031748056, -0.0033861515, 0.015014666, 0.005353537, 0.017754547, -0.009595607, -0.020177603, 0.0127765285, 0.0137897115, -0.03647988, 0.067060694, 0.0012473301, -0.027187552, -0.02452157, 0.04910832, -0.07342518, 0.045919653, 0.02724424, 0.012588511, 0.011290003, -0.029739931, 0.09853427, -0.01719319, 0.029605445, 0.019664442, -0.015909828, 0.010015132, -0.023598064, -0.044917658, -0.019342225, -0.019984823, -0.032586187, -0.03152682, -0.0025791165, -0.018167647, 0.0154051585, -0.0016331191, 0.027135111, -0.04345345, -0.04190754, -0.04774739, 0.0652807, -0.0031820117, -0.018106598, -0.010909836, -0.014087143, -0.036365587, -0.015088221, -0.0072517274, -0.030279946, 0.01965205, -0.040612247, 0.0015394831, 0.008365719, 0.005566742, -0.0011663169, 0.025826965, 0.0005647985, 0.0058329618, 0.020599136, 0.020757247, -0.011959223, 0.043899596, 0.0071606166, 0.014562896, 0.029394308, 0.0007798396, 0.012493957, -0.017521834, -9.547183e-05, 0.015153972, 0.058861133, 0.017704975, -0.00392123, 0.009596984, 0.038640387, -0.0059748497, 0.021688772, -0.016648818, -0.020696962, 0.03184353, 0.028885735, -0.052018836, 0.0128721725, 0.0038386101], [-0.046140037, -0.07184044, -0.028081428, -0.012207057, -0.008602974, 0.043257356, 0.027422423, -0.028310139, 0.040927406, 0.03996227, -0.008937277, 0.01859731, -0.0690692, 0.003391134, -0.008813322, 0.046854552, 0.025423832, -0.043268204, 0.036473222, 0.021148298, -0.04190595, -0.012137359, -0.031449705, 0.00850093, -0.015965562, 0.04840712, 0.014508259, 0.009048293, 0.022511387, -0.021793114, -0.0115991775, -0.021346126, -0.02524476, 0.027776342, 0.007928212, 0.032173194, 0.023872387, -0.014953891, -0.04876396, -0.060562633, -0.092462875, 0.012168452, -0.030116877, 0.017860364, -0.020890582, 0.026448729, 0.017359849, 0.028500455, 0.0039877393, -0.059825577, 0.03100835, 0.0038229874, -0.046386693, 0.004104025, -0.023938328, 0.02147217, 0.017364126, 0.023278069, -0.0061422386, 0.010424736, -0.010584688, -0.047365185, -0.04857698, 0.009112567, -0.003802537, 0.02593808, 0.0115227485, 0.00026210002, -0.008689784, -0.030762944, -0.017785631, 0.021076515, 0.011094593, -0.041874234, 0.05984561, 0.004622643, -0.05367541, 0.02921429, -0.015038197, -0.005188996, 0.019716348, 0.03915223, 0.008636988, -0.055324808, -0.048650436, -0.0004561709, -0.036250353, -0.0050045243, 0.05265873, -0.014159452, -0.035130374, 0.0046476843, 0.05300472, 0.001331368, 0.024122981, 0.042138003, -0.023868632, 0.04734359, 0.01751646, 0.008318128, 0.0069610924, -0.04589485, -0.011548599, 0.012779358, 0.008475263, 0.003941517, 0.021581514, -0.021442745, -0.010261967, 0.004508287, -0.012301172, 0.009895945, -0.00010517389, -0.041070405, 0.027736092, -0.025972525, 0.016706998, -0.032077204, -0.027287615, 0.004593428, -0.013779658, 0.022888156, -0.02364764, 0.023244264, -0.014457184, -0.0067119305, 0.035278536, -0.01753733, -0.04639671, 0.014660906, 0.027032401, 0.01718221, 0.04564797, 0.0026318515, -0.026966253, 0.021903923, 0.0075473743, 0.06742147, -0.027047219, 0.04499105, -0.044286557, -0.016021073, 0.013978111, 0.034582175, 0.05735629, -0.04151698, 0.0037157268, -0.042124648, -0.022598196, -0.029843925, 0.016688425, 0.00939136, 0.027850214, 0.0068755345, -0.0079218475, -0.07670849, 0.011687761, 0.02660885, -0.035662293, 0.012480635, -0.0081142485, -0.0045696124, 0.027368583, 0.02846957, 0.00046243126, -0.06149501, 0.039164335, -0.0011635905, 0.0010308711, 0.034403548, 0.04149527, 0.0026264258, -0.008440622, 0.031033391, -0.023592131, -0.022533087, 0.004761257, -0.0064142505, 0.011674615, 0.03216693, -0.016290685, -0.015574084, -0.025179131, -0.004688585, -0.01602295, 0.017729523, -0.03154048, -0.0061326395, -0.026740042, 0.0091489805, 0.029974977, 0.005749506, 0.024020132, -0.016933413, -0.011956643, 0.04168058, -0.02136783, -0.016699277, 0.004276654, 0.04399733, 0.002645624, 0.0049031065, 0.04972221, -0.017087836, -0.026853567, -0.07179495, -0.00535886, 0.015827835, 0.042763203, -0.032229118, 0.011567876, 0.06577792, 0.031513352, 0.041349407, 0.029948683, 0.049861602, 0.018079476, -0.045161333, 0.028875241, 0.04471393, 0.009024166, 0.0052630766, 0.037385143, -0.019173888, -0.026746174, -0.013857912, -0.017806524, 0.0066251205, 0.04199944, -0.012762767, 0.032628946, 0.0031195327, -0.027144881, -0.034203634, 0.0040278574, 0.017081575, -0.040661395, 0.040646944, -0.04730114, 0.05447121, -0.02300971, 0.034432974, 0.05435487, -0.020655818, -0.021749917, -0.021207826, -0.0551011, -0.0092335995, -0.009534722, -0.001470765, 0.0917517, -0.036309876, -0.028867729, 0.014747299, -0.03300363, -0.020827768, -0.008805496, -0.010634248, 0.006407677, 0.059767153, 0.0072131497, -0.031388566, -0.025771778, -0.026545556, 0.029255036, 0.007849619, 0.051480953, -0.05147427, 0.018073944, -0.034612227, -0.02874586, -0.07508028, 0.032837626, 0.022475492, -0.014558654, 0.02833101, 0.028129842, 0.025341481, 0.0530427, 0.015852356, -0.051273108, -0.043711435, -0.007929047, 0.0056096916, 0.01511499, -0.017093992, 0.01455615, -0.02868576, -0.015170707, -0.04464647, -0.02322903, -0.0076524443, 0.030095331, 0.036151856, 0.050895814, -0.01577838, 0.038416848, 0.0068546664, -0.034205616, -0.05178896, 0.004508496, -0.020937324, 0.0039058328, -0.013465597, 0.011595839, -0.015718853, -0.04652609, 0.035431914, 0.02983777, -0.007052937, -0.025257593, -0.022994269, -0.079226196, -0.001827605, 0.0066344584, -0.005599049, 0.052970916, 0.06400269, 0.0045865416, -0.025691226, -0.035147693, -0.04200111, -0.022506379, -0.060608543, 0.0019139978, 0.06384556, 0.038185425, 0.0024905761, -0.054653697, -0.04116034, 0.022385344, 0.036985733, 0.026182456, 0.01197146, 0.018335054, 0.021402469, -0.010149281, 0.014936218, 0.0033129775, 0.054082755, 0.040569995, -0.046946786, -0.052440453, -0.016455019, 0.020820256, -0.049348466, -0.019123284, -0.069748655, 0.022948775, 0.003941517, -0.0078965975, -0.015053639, 0.029808452, 0.0049978467, -0.023346933, -0.0080852425, -0.0042228154, -0.009170162, -0.017179444, -0.006764935, -0.0018504292, -0.039123435, -0.039481945, 0.03996107, -0.0047273994, -0.017029928, 0.055686656, -0.014478522, 0.034262482, -0.017289367, 0.0710675, 0.021848623, 0.0029722056, -0.0054222983, -0.019745145, 0.055797253, -0.038775567, 0.007591719, 0.042770926, 0.032865796, 0.0372566, -0.025614016, 0.044885047, 0.032869346, 0.027531875, 0.05454184, 0.030972458, 0.007060006, -0.021284774, 0.046076182, 0.003714892, 0.012517362, 0.03032472, 0.035984077, 0.009270744, -0.006367924, 0.024821037, 0.042924304, 0.019331547, 0.009872155, -0.005784564, 0.024366068, -0.023408495, -0.0020158328, 0.0008731102, -0.04450024, -0.016628744, 0.0095157325, -0.017375186, 0.021644328, 0.014394841, -0.018941943, -0.008697192, 0.030183185, 0.023285583, 0.0031286103, -0.009943941, 0.012416363, -0.014023968, -0.010102119, 0.035321523, 0.030576386, -0.057541803, 0.031521283, 0.028329546, -0.009747784, -0.02906806, -0.0031093073, -0.039831687, 0.004488254, -0.013672606, 0.012397998, -0.0005671878, 0.07526778, 0.056687687, -0.026753401, -0.0056643654, 0.001974932, -0.056872364, -0.014460262, -0.04135421, -0.04238508, 0.01085957, -0.013140893, -0.035144776, 0.0075764847, -0.02635545, 0.011798673, 0.03717897, -0.023425605, 0.016266895, -0.001458453, -0.032295063, -0.014183424, -0.040158063, 0.029512126, 0.08101932, -0.02736535, -0.037018705, -0.052813984, -0.0433884, 0.008436866, 0.046623334, 0.014393798, 0.020499727, 0.029926145, 0.0042428486, -0.0670375, 0.017212626, 0.033946957, 0.005709335, -0.028952869, 0.00695358, -0.03469069, -0.015369787, -0.0015968068, -0.018599086, 0.009602491, 0.024823124, -0.0007537462, 0.016023993, 0.015008981, 0.026297437, 0.017188419, 0.01060253, 0.013094984, -0.022677494, 0.017129987, -0.0013121695, -0.025283678, 0.021942528, 0.024806013, 0.003555514, 0.055386573, -0.016206378, -0.038493644, 0.0077221426, 0.072039105, -0.0060533416, -0.025132177, 0.085272655, 0.010537422, -0.09287022, 0.060937416, -0.00084180845, -0.043965973, 0.012524458, 0.030423844, -0.0273185, -0.013631078, -0.040855046, -0.03824991, -0.018155226, -0.020580538, 0.041008636, 0.058112748, 0.018807136, -0.04361044, -0.0151867755, -0.022512639, -0.014235725, -0.0071669538, -0.022394108, 0.047713473, 0.018009046, -0.023516381, 0.025922183, -0.02933663, 0.032728486, -0.01937203, 0.022624074, -0.05950672, -0.061984148, 0.0013916759, -0.006733633, -0.021680012, 0.0039586285, -0.004055038, 0.0019507252, -0.054797266, -0.016988922, 0.0027044713, 0.028129425, 0.029615633, -0.026026782, -0.0059736264, 5.7595225e-05, 0.0050237225, 0.024563111, -0.0034596785, -0.006407469, -0.02778427, -0.058002148, -0.081125796, 0.035631333, 0.00051251403, 0.0010521562, 0.023026403, 0.058722924, -0.018906258, -0.041807458, 0.025358176, 0.03333094, -0.0039824178, 0.01792333, 0.0219515, -0.022699198, -0.07998891, -0.07563839, 0.022913301, -0.034640606, -0.041369233, -0.021196714, -0.05732478, 0.024218375, 0.002312469, 0.033165146, -0.00830039, 0.0026543885, 0.005656227, 0.037802503, -0.037730716, 0.013469666, 0.008984021, 0.014901304, 0.045734156, -0.019226164, -0.0013708081, 0.0037299169, -0.009276796, 0.019345945, 0.027804304, 0.049995996, -0.0076438882, -0.0481855, -0.020475937, -0.019535633, -0.019745903, -0.010024804, -0.052356564, -0.038111344, -0.04625982, 0.01619678, 0.026825394, 0.019767266, -0.052536864, -0.028159058, 0.031099752, -0.014594129, -0.013030293, -0.009585118, 0.021572335, -0.042939745, -0.010094815, 0.0015008147, -0.0013955366, -0.04902731, -0.0075992313, -0.0282707, -0.02068399, 0.010227222, 0.017552458, -0.022804372, 0.006399226, -0.004617739, 0.019129962, -0.0017028154, 0.06281511, 0.03384679, 0.020827353, 0.04383247, 0.00072035764, 0.06840977, 0.003762888, -0.06040153, 0.070262834, 0.0293648, -0.032398567, -0.02014873, -0.0060245437, 0.0051998473, 0.025565706, -0.006198999, -0.003450288, -0.0073175156, -0.009638436, -0.0043817237, -0.001001656, -0.04037175, 0.019887047, 0.075505674, -0.0328226, -0.009789936, -0.020592798, 0.04741423, -0.0034907714, -0.008154315, -0.024344418, -0.045840792, -0.033513743, 0.049294837, -0.06385599, 0.04182081, 0.030283403, 0.01251611, 0.0028146536, 0.0053592776, -0.025373096, -0.028017992, -0.017426312, 0.054423105, 0.022630775, 0.014420927, -0.0071756137, -0.014968081, 0.003856376, -0.0071192705, -0.026770303, -0.0043878797, 0.05098784, -0.005452348, -0.01816253, -0.0019611593, -0.027273113, 0.062011693, 0.031620614, -0.006845485, 0.021503862, -0.030270882, -0.022071492, -0.03311934, 0.02911856, -0.0023157038, -0.04086924, -0.020121602, -0.021476341, 0.05297258, -0.0035400195, 0.028029677, 0.032846075, 0.007910997, 0.05738905, 0.0072110896, 0.04263215, 0.01619824, -0.004219476, 0.04150529, 0.019397488, 0.002726174, -0.06216278, 0.0016677574, -0.02275429, 0.03768731, 0.051732197, 0.031658385, -0.0153270075, 0.023182496, -0.0329211, 0.02396796, 0.010704365, -0.03245032, 0.0036155612, -0.06358847, -0.010668054, 0.01929774, -0.04073652, -0.032640636, -0.05866032, -0.020438896, 0.004956946, -0.014350811, -0.05758521, 0.0071441038, 0.0043252762, 0.021611148, 0.013255197, -0.013131294, -0.017053194, 0.070933945, -0.017328234, 0.016418578, -0.014690956, 0.026466258, -0.0008338787, 0.03925323, -0.047408227, -0.034705818, -0.023979228, 0.016223282, 0.0032036302, -0.0025496322, 0.04994299, 0.022688242, 0.016519813, -0.0024384065, -0.06768023, 0.04912581, -0.01751813, -0.0003262686, -0.010807453, 0.004150195, -0.07832283, -0.01722911, 0.014701391, -0.007876355, 0.0060829744, 0.038378455, 0.015400463, -0.0040291618, -0.008932503, 0.0019923565, 0.0035713213, 0.005522464, -0.011290333, -0.020363446, 0.014958899, -0.09039613, -0.043498583, 0.0014340377, -0.032153368, -0.04646766, -0.0098459665, 0.04299275, -0.006292487, -0.026993172, 0.04302864, -0.0008743623, -0.018239323, 0.039854225, -0.070965245, 0.036598843, -0.037035294, -0.03930248, 0.027080191, -0.05171634, 0.04075405, -0.01695136, 0.03171243, -0.028480422, -0.016786087, -0.012285729, -0.012161983, 0.011604602, 0.017246952, 0.0027084365, 0.0033063518, -0.00026429113, 0.007233209, -0.022666018, -0.049729306, 0.021852588, 0.034969274, -0.0066625783, -0.024986416, 0.024510106, 0.015340989, -0.0034824242, 0.018139053, 0.026699977, 0.0029096021, 0.0069903075, 0.016820727, 0.0355037, -0.020782694, -0.023056244, 0.028015487, -0.0038014413, -0.014343507, -0.037230723, -0.0068805427, 0.026747556, 0.012562228, 0.0012380886, 0.048405867, 0.005492414, -0.027868576, -0.032331787, -0.009632176, 0.03218196, -0.09765479, -0.020910405, 0.0626369, 0.009609638, -0.008001146, 0.018704258, -0.06827789, 0.03217737, -0.036537077, -0.0090831425, -0.07073695, -0.022727577, 0.01706488, 0.007315428, 0.008418085, 0.015603611, 0.016675904, -0.01328196, 0.022690015, 0.04371561, 0.02373299, 0.0017449684, -0.025647404, 0.05058864, 0.007910997, 0.008252812, 0.062865295, -0.043099593, 0.008276183, 0.006495531, -0.00789472, -0.0038647233, 0.0472381, -0.055578556, 0.019269202, 0.023140341, -0.043201428, 0.027011327, -0.03738598, -0.010658456, 0.03238855, -0.038932703, 0.041533254, 0.019301288, -0.026917735, -0.04880736, -0.028139442, -0.018345749, -0.01320767, 0.02151474, -0.0093840575, 0.0022433705, -0.030120634, -4.4865847e-06, 0.009332096, -0.008297887, -0.06476374, 0.041004464, -6.343822e-05, 0.06146997, 0.005138496, -0.016748525, 0.06479213, 0.036684822, -0.0041234843, -0.026290134, -0.004483872, -0.031353194, -0.022726977, 0.033824258, -0.022249287, 0.043615445, 0.087105684, 0.022212768, 0.008388869, -0.05788487, 0.0001888539, -0.016099118, -0.001029306, -0.038493644, -0.02117334, -0.012859595, -0.010023655, -0.002131858, 0.014642281, -0.03526174, 0.09315402, 0.0067624305, 0.0034932757, 0.013007339, 0.00123788, -0.005661737, -0.019638304, -0.0021644118, 0.06291432, 0.0038655577, 0.022066066, -0.020714248, -0.002783769, -0.05018631, -6.372515e-05, -0.03107471, -0.0041710627, -0.01702231, 0.01040053, -0.03343528, -0.00989991, 0.01716588, 0.06363187, -0.047361642, 0.044381715, 0.012527378, -0.033844706, -0.0063642724, 0.04390092, -0.056100566, 0.024802465, -0.017495593, -0.006153507, 0.017043805, -0.043893408, 0.041037798, 0.039850887, -0.006851954, 0.02616409, -0.024796238, 0.007234461, 0.01883656, -0.035492014, -0.029610625, 0.01665754, -0.030422382, 0.011277395, 0.0023847762, -7.220271e-05, 0.038599234, 0.00015588274, 0.06184559, -0.017912116, -0.047134597, -0.011445799, 0.07697393, -0.01857133, 0.0014828685, -0.015381734, -0.0021733851, -0.0453817, -0.006919461, -0.0102444375, 0.0025176, 0.010537422, -0.061505023, -0.03229994, 0.01971833, 0.026361918, 0.028489603, 0.021602591, 0.017945504, -0.007698353, -0.011103567, -0.010409711, 0.020348644, 0.04092141, 0.013929697, 0.028854113, 0.016247071, 0.025410451, 0.009990999, 0.011602308, -0.07526778, 0.045885656, 0.073697686, -0.015275256, -0.005691076, -0.016383754, 0.024422046, 0.029386606, -0.002215225, -0.011553581, -0.026623601, 0.0422991, 0.043886695, -0.021626173, -0.0071760314, 0.0069915596], [-0.016125029, -0.07609722, -0.026133785, -0.028098563, 0.03543062, 0.019704329, 0.004249579, -0.024372132, 0.028742777, 0.04017322, 0.014504254, 0.017730065, -0.03979912, -0.03076778, -0.03593866, 0.032497413, 0.020861635, -0.046133786, 0.031401355, 0.08035932, -0.007622919, 0.013187102, -0.027094731, 0.001328664, 0.003940213, 0.029297845, 0.009142567, 0.009264167, 0.009317815, 0.013318113, 0.016429298, -0.012796662, -0.009592847, -0.0041409656, 0.014843842, -0.009494851, -0.01902882, 0.0016095969, -0.05151139, -0.02875708, -0.079048894, 0.023769317, -0.011719067, 0.027667595, 0.005230251, 0.07251394, 0.0055815065, 0.04138279, -0.03836209, -0.039254066, 0.026272856, -0.021987064, -0.022971082, 0.027308606, 0.02489412, 0.022047775, 0.0127787795, 0.015988316, 0.027097592, -0.0023697787, -0.020221712, -0.002535817, -0.08234784, 0.01740418, 0.014594605, 0.020867534, 0.002223143, 0.028590418, -0.013161999, -0.073543966, -0.009522032, 0.030737378, 0.035218917, -0.00934446, 0.033369318, 0.015024186, -0.08187003, -0.0035607482, 0.009644885, -0.00017596304, 0.0117097, 0.013406453, -0.0062860292, -0.052423753, -0.054378305, 0.0059004845, -0.019838, -0.0074517843, 0.051464185, -0.007739334, -0.05164444, 0.00634218, 0.029531749, 0.0068450337, -0.0053207357, 0.028951643, -0.0036794872, 0.054067865, 0.008029923, 0.018832829, 0.029928602, -0.0165606, -0.02615948, -0.036593877, -0.029253498, 0.03394048, 0.028083272, -0.019542985, -0.007295402, 0.014012309, 0.012409507, -0.004642277, 0.008840712, -0.07909467, 0.020645615, -0.0014649282, 0.015164786, -0.0050957752, -0.031601816, -0.01604876, -0.0022596228, -0.0024799344, -0.004516921, 0.020861456, -0.017587362, -0.015960867, -0.006058565, -0.0036236942, -0.07318703, -0.00036301318, 0.025873361, 0.017484853, 0.042544432, 0.0038397138, -0.041190192, 0.021234484, -0.004295358, 0.042025078, -0.0154464785, 0.025407346, -0.024490694, 0.00018669249, 0.018499725, 0.020680664, 0.00044384174, -0.037684634, -0.01415197, -0.057303865, -0.013104417, -0.005544982, -0.019262945, -0.014097429, 0.018047655, 0.02285946, 0.0062073465, -0.040678933, -0.010126995, 0.018743282, -0.049355485, 0.011368929, -0.013927189, 0.017746003, 0.025634095, -0.0025811489, -0.015379956, -0.063472584, 0.008950689, -0.016191103, -0.013787705, 0.023482481, 0.064268, 0.0014336338, 0.0054777437, 0.05206101, -0.0561384, -0.01748901, 0.0081657395, -0.021478219, 0.03160736, 0.027326487, -0.022736607, 0.0071747857, -0.011071009, -0.00014735117, -0.014227255, 0.05548558, -0.03304815, -0.0025248192, 0.00084557035, 0.029441621, 0.02628573, -0.03659459, 0.037711885, -0.012218702, -0.03182642, 0.01314823, -0.006015647, 0.01931266, 0.021069877, 0.028887982, -0.015426094, 0.0026175398, 0.013365233, -0.017486148, -0.039261933, -0.049763206, 0.03273485, 0.0076029357, 0.032120585, -0.03357997, -0.0024228895, 0.028391743, 0.027702734, 0.066853076, 0.025716757, 0.03833562, 0.01172014, -0.021559048, 0.057654183, 0.06034245, -0.008625765, 0.0014755235, 0.023034168, -0.03629202, -0.035321362, 0.036990866, -0.014028045, -0.007750421, -0.0055964827, -0.018103091, 0.08968107, -0.011275941, -0.0034394157, -0.050956324, -0.0337334, -0.012166396, -0.032845538, 0.02375358, -0.04645621, 0.0057391846, -0.030008137, 0.03829811, 0.03537966, -0.01140532, -0.022403724, 0.00051268906, -0.029720588, 0.014561299, -0.007459742, 0.011300026, 0.05603636, -0.0055467812, -0.04968595, 0.019830177, -0.022488935, -0.00058041874, -0.0065174275, -0.00051537144, 0.016413918, 0.017118486, 0.023978004, -0.048415586, -0.021475894, -0.03231917, 0.03483997, 0.02792841, 0.0066384915, -0.012259473, 0.010972297, -0.074275, -0.050425574, -0.074856535, 0.02331014, -0.015276909, -0.042104524, 0.074460976, 0.041129574, 0.007140094, 0.06222511, 0.027646227, -0.06336959, -0.023656659, 0.021557081, -0.014651069, -0.0036923627, 0.012456896, 0.040040888, -0.0395316, -0.023509037, -0.034838177, -0.040519424, 0.001722435, 0.0066218167, -0.009326041, 0.06334098, -0.0064226505, 0.032651875, 0.0039507635, -0.07166702, -0.024229968, 0.010128247, -0.027307888, 0.021036167, 0.0036580283, -0.015775159, -0.037325624, -0.041277282, 0.05082399, 0.0045404364, 0.011062781, -0.05468731, -0.015482959, -0.059544176, 0.02328716, 0.03687892, -0.005963967, 0.058611427, 0.061910376, -0.021829689, -0.0359206, -0.013489069, 0.0044280454, 0.031710543, -0.041094527, 0.06404554, 0.027855093, 0.013495507, 0.013128918, -0.051751014, -0.023857297, 0.028541777, 0.02807737, -0.014294761, -0.015430742, 0.04463667, 0.010172595, -0.02885937, 0.044116654, 0.013705446, 0.028080411, -0.0016255123, -0.08030782, 0.004992057, -0.00963505, 0.027375484, -0.056248087, -0.0018783697, -0.052665345, 0.0058539896, -0.008628269, 0.02210482, -0.016773535, 0.010106788, 0.033585157, -0.020534385, 0.00060773414, -0.013984054, -0.019282974, -0.024760002, 0.0282211, -0.010470516, -0.053228285, -0.04361666, 0.05731102, 0.003512823, -0.020628447, 0.07880569, -0.018305516, 0.032023977, -0.028223649, 0.04594495, 0.004437702, 0.0057340544, 0.012666298, 0.0035315102, 0.0742049, -0.03951729, -0.0032191938, 0.028276045, -0.0061850827, 0.013301662, -0.04160167, 0.049414143, 0.011552582, 0.04874069, 0.052179478, 0.035807315, 0.03945506, -0.04488345, 0.01371564, 0.011272363, 0.039231263, 0.010104284, 0.014956947, 0.022599805, -0.005717726, 0.028300008, 0.04551309, 0.03922545, 0.015552879, 0.0073110494, 0.026717054, -0.017985962, 0.0007072945, -0.007703927, -0.04658872, -0.012964936, 0.01074519, -0.0050357464, 0.023370316, 0.044508815, -0.015813919, -0.022069056, 0.012868952, 0.03614413, -0.021756291, -0.026311124, 0.026239816, 0.0075099026, 0.011931867, 0.021249324, 0.054089323, -0.039425734, 0.03822198, -0.006645108, -0.028388703, 0.019966083, -0.046096236, -0.059801683, 0.01831321, 0.028323747, 0.02613677, 0.010993755, 0.06022585, 0.028264241, -0.023768736, 0.012307757, -0.003512108, -0.081432976, -0.012313032, -0.035827793, -0.029681155, 0.0022174204, 0.0027300199, -0.0035371433, 0.0012338872, -0.04073258, 0.013161464, 0.017433932, -0.060722984, 0.011278085, -0.031287804, -0.023361597, -0.0100316815, -0.04786767, 0.02622958, 0.06059137, -0.06719034, -0.024381611, -0.02639517, -0.049136605, -0.019612726, 0.051130675, -0.059464063, 0.00037517323, 0.0038694881, 0.037939884, -0.057752, -0.0028815735, 0.072239265, 0.03568187, -0.022650592, -0.026749242, -0.030567497, -0.013436137, -0.0076121897, 0.041124567, 0.013889277, 0.020909024, -0.0056390427, 0.004899203, 0.02095963, 0.027776232, 0.022096593, 0.01088664, 0.019265808, -0.0036136801, 0.02691072, -0.024918083, -0.02445314, -0.0063441475, 0.025206348, 0.005653662, 0.072156295, -0.044116654, -0.023923641, -0.00703423, 0.039459355, -0.038455747, 0.02035127, 0.026992667, 0.03171984, -0.05206932, 0.016606333, -0.0029553834, -0.041643783, 0.015956128, 0.05346129, -0.019334475, -0.006974145, -0.047042213, -0.05791759, 0.003229923, -0.042881332, 0.04936264, 0.031333223, -0.0077205575, -0.047348365, 0.0011094254, -0.023632694, -0.016812159, 0.0048745694, 0.014680753, 0.0336118, -0.01740675, -0.0028713807, 0.02687442, -0.03699802, 0.030705191, -0.025879085, -0.0041060504, -0.015224961, -0.037571773, 0.022267194, 0.004859012, 0.018555695, 0.0010257357, 0.0048575816, -0.0015627001, -0.015027672, -0.014704001, 0.026657103, 0.004115282, -0.0077445195, -0.039255496, 0.013711006, 0.0060756872, 0.021573758, 0.0318325, -0.019719752, 0.006095403, -0.009809939, -0.12802099, -0.06596826, 0.06363102, -0.016831294, -0.040727217, 0.012055793, 0.034733385, 0.0008313539, -0.05308934, 0.008381134, 0.021703046, 0.026453111, 0.0028855077, 0.04466207, 0.013964026, -0.07424782, -0.055276714, 0.037432916, -0.022928841, -0.04392066, -0.07554036, -0.0061892853, 0.011077914, -0.02472531, 0.02829643, -0.028234558, -0.012405037, -0.02611549, 0.013205811, -0.003293227, -0.023542209, -0.012478713, 0.002324972, 0.03336431, -0.009296356, -0.010763073, 0.023161896, 0.0018800015, 0.025558988, -0.005656836, 0.029895477, 0.017600238, -0.019460903, -0.03257802, -0.01587065, 0.040310558, 0.024963146, -0.035204053, -0.051396947, -0.07342666, 0.008782236, -0.0012812755, 0.012114984, -0.011668103, -0.01751476, 0.056608595, -0.026550569, 0.008772759, -0.0060143955, 0.012236226, -0.050839726, -0.024873735, -0.008831592, 0.0066844495, -0.033790268, -0.0075438786, -0.039080247, -0.0011370091, 0.031690516, 0.010318337, 0.008368258, 0.042910304, -0.014683972, 0.0159439, -0.0003898368, 0.060582075, 0.033873957, -0.031985216, 0.05914361, -0.0046880674, 0.0708101, -0.013988257, -0.08301593, 0.05007132, 0.01153148, -0.02858827, -0.0022138439, -0.009956575, 0.006218076, 0.041092377, 0.007757037, -0.014575605, 0.028071111, 0.029008152, 0.010383965, -0.006457879, -0.027252097, -0.0015737426, 0.01777334, 0.009292958, -0.0149228815, -0.043568734, 0.030624721, -0.007524924, -0.0067743086, -0.029369554, 0.014878891, -0.05653474, 0.054356843, -0.056265254, 0.031144027, 0.004316459, 0.029433575, -0.01655823, 0.044230383, 0.0064628865, -0.0065311077, -0.007945518, 0.06938809, -0.0010150063, -0.005252962, -0.05611218, -0.0003290366, 0.0029786977, -0.05071741, -0.03193336, 0.016099546, 0.031232456, -0.022353029, -0.02788871, 0.047953505, 0.022878058, 0.022294734, 0.0037456972, 0.0055022426, 0.03019769, -0.04739271, -0.041343447, -0.038046286, 0.00086515164, 0.02782648, -0.017457537, 0.0015784143, -0.004283913, 0.037959464, 0.038480826, 0.024974234, 0.05150424, 0.032383904, 0.04248962, -0.0047695995, 0.01845162, 0.035142537, -0.030485239, 0.03057036, 0.015028387, -0.05346737, -0.05723806, -0.028224185, 0.027197734, 0.0036716189, 0.025806481, 0.012750704, -0.019238625, 0.018530482, -0.019066239, 0.0048153787, 0.00818407, -0.0053278888, 0.01565034, -0.053435896, -0.04070938, 0.041497953, -0.030349333, -0.035705477, -0.04622678, 0.001541733, -0.021778196, -0.038345993, -0.024962073, -0.0065878844, 0.029335042, 0.012186871, -0.01554984, -0.01214002, -0.051040724, 0.03165332, 0.006799143, -0.025646972, -0.027727053, -0.0042460025, 0.0038311305, 8.377915e-05, -0.08043227, -0.030689813, 0.009141137, 0.004251725, -0.008489859, -0.019521223, 0.03226955, 0.026252469, -0.0035648164, -0.010094628, -0.0049411817, 0.03388147, -0.057586957, 0.027566826, -0.0031573204, -0.006894926, -0.06218076, 0.009025617, 0.007005808, -0.019824453, -0.004318963, -0.026242098, 0.023489635, -0.0004125475, -0.009246285, -0.012018105, -0.0056596524, -0.0052037854, -0.023124835, 0.021514699, -0.018540764, -0.07928351, -0.02886509, 0.02234194, -0.043323927, -0.05740687, 0.0016634901, 0.010813501, -0.035538185, -0.009198718, 0.060039163, -0.015327382, -0.008508457, 0.003148821, -0.04639845, -0.004312346, -0.0067658145, -0.03723907, 0.021109685, -0.035865344, 0.045072287, -0.010121094, 0.011176157, -0.031232277, -0.016732225, 0.015791252, -0.039839175, 0.03808992, 0.02656684, -0.007756322, 0.011172937, 0.0054469863, 0.0072842264, -0.05185259, -0.04035276, -0.029400134, 0.0053007076, 0.016192533, 0.018862737, 0.04191926, 0.010906132, 0.026159838, 0.009830371, 0.031886507, -0.018387243, -0.01259629, 0.028119395, 0.015238685, 0.035516012, 0.0013865136, -0.0010612324, 0.018591996, -0.0041567693, -0.015685031, 0.016254228, 0.05396611, 0.017691439, 0.0052694133, 0.05832531, 0.026325071, -0.0112913195, -0.024468161, 0.018613098, -0.012621414, -0.07341807, -0.0012317413, 0.0371316, 0.015315938, 0.0021981073, 0.040029444, 0.00659003, 0.028537486, -0.07461119, -0.0063024806, -0.046115905, -0.05640545, -0.0073632663, 0.01790853, -0.010202995, 0.0136392815, 0.030032814, 0.019815154, 0.038864944, 0.036449473, 0.010918202, 0.012573847, -0.03715109, 0.014532508, -0.04336365, -0.008162253, 0.014672169, -0.008112651, 0.0228173, 0.012997034, -0.028913552, 0.02332315, 0.02056568, -0.067220025, 0.021152759, 0.029694552, -0.05597985, 0.0015355133, -0.0036623203, 0.008020534, 0.008384353, -0.036544695, 0.054447684, 0.012304493, -0.019005438, -0.037831698, -0.009795992, -0.047231056, 0.006914596, 0.03503703, 0.013995499, -0.0019318828, -0.028326117, -0.0037547725, 0.043504357, -0.030232383, -0.044851974, 0.062113166, -0.020286893, 0.053155858, 0.047957797, -0.028165264, 0.052459873, 0.010626227, -0.034223337, -0.039973654, -0.025521794, 0.009216825, -0.03152814, 0.022463901, -0.025042545, 0.043790657, 0.035193324, 0.040854808, 0.007525281, -0.08688569, 0.010818866, -0.0055251773, -0.043618806, -0.031311408, -0.02527788, -0.0022686983, 0.014735117, 0.026596349, -0.0207724, -0.036505356, 0.05756137, -0.0025298262, 0.0050557186, 0.0137345055, -0.0018168039, -0.04352707, 0.03139201, -0.006710916, 0.05187615, 0.009502004, 0.022991342, -0.022887355, 0.010271843, -0.049786095, 0.027818253, 0.015523373, 0.032031976, -0.036373116, 0.015643187, -0.030862201, 0.0061556664, 0.016043305, 0.039011933, -0.054395467, 0.04513702, 0.007878638, -0.005459682, -0.04503387, 0.027024632, -0.03822189, 0.03970756, 0.0065739364, 0.037694715, 0.039181285, -0.050661977, 0.09166673, 0.007951866, 0.027877266, 0.0007574995, 0.0022224276, 0.011607659, 0.0048625884, -0.02019605, -0.030618284, -0.006737918, -0.032052096, -0.02749315, 0.008890067, -0.012126786, -0.014710081, -0.008679413, 0.062229402, -0.022942968, -0.052660156, -0.04213425, 0.05053, -0.009371999, -0.019682467, -0.025558988, 0.000101572165, -0.050066672, -0.006774689, -0.0034963712, -0.017104894, -0.0025507486, -0.058289547, -0.010734461, 0.011598539, 0.023245005, 0.005040876, 0.01766247, 0.047181163, -0.026090454, -0.024916565, -0.003954698, 0.017326994, 0.054514207, 0.017372416, 0.033790626, 0.030245747, 0.030154772, -0.004497787, -0.0013011252, -0.035970133, 0.04099009, 0.040115282, -0.0024521719, -0.014823098, 0.0058128606, 0.026253274, -0.033198718, 0.010307116, -0.007027077, -0.012861574, 0.049069636, 0.0388957, -0.021505758, 0.015625661, 0.012044527], [-0.024595292, -0.08613598, -0.03964337, -0.02380294, 0.019083146, 0.03904984, 0.00025974552, -0.04632272, 0.060140345, 0.042121187, 0.009005166, 0.02570629, -0.032126565, -0.020273145, -0.030489149, -0.00080804277, 0.0015494024, -0.04192212, 0.042097654, 0.059765745, -0.0152039705, 0.011056652, -0.03533814, 0.03336314, -0.020985102, 0.030324893, 0.0030750243, 0.014347171, 0.014574188, -0.021693593, 0.01114589, -0.027616626, 0.00097426027, -0.019036442, 0.016443279, -0.009441548, 0.0016258919, 0.0012617088, -0.047664717, -0.050273202, -0.06528672, 0.018255489, -0.0048914044, 0.047154784, 0.012211841, 0.06900528, 0.009292491, 0.042084906, -0.015127266, -0.041549478, 0.045253336, -0.010946332, -0.03166107, 0.02142294, -0.011401836, 0.026489878, 0.014367274, 0.022454107, 0.03354407, -0.016289318, 0.015587704, -0.0014032879, -0.069358066, 0.01112064, 0.019711977, 0.01573526, -0.0033684792, -0.001966172, -0.00356289, -0.055613738, -0.029567108, 0.010418015, 0.015367276, -0.005979908, 0.043197926, 0.01633933, -0.081157304, -0.023760771, -0.016047101, 0.0021681827, -0.0061436743, 0.0072450493, -0.011470971, -0.052122682, -0.055707876, 0.046704676, -0.0018127027, -0.0034282978, 0.04159557, 0.018078975, -0.045770127, -0.010176288, 0.0523698, 0.007377328, -0.008070499, 0.020431027, -0.004725677, 0.05465664, 0.006680572, 0.0131405005, 0.03360536, -0.014367274, -0.028065756, -0.021738704, -0.024960516, 0.011738193, 0.013300099, -0.014182057, -0.013611205, 0.020142231, 0.009087784, -0.013906376, 0.0045387438, -0.07450468, 0.02799515, -0.004201038, 0.03643204, -0.014498188, -0.041167032, -0.01644573, 0.00287522, 0.006809525, -0.0014064749, 0.02709787, -0.041269016, -0.009947064, -0.00021034609, -0.0050695124, -0.05874, -0.0046084914, 0.032015752, -0.0011502842, 0.032400403, -0.0187664, -0.047268048, 0.02139499, -0.016553108, 0.045530118, -0.019345956, 0.024033388, -0.032327592, -0.000658496, 0.026644818, 0.015476127, 0.019528354, -0.024287447, 0.013721036, -0.029832859, -0.009509211, -0.006237815, 0.0013983847, -0.01227362, -0.001900592, 0.011971585, 0.032104988, -0.034726225, 0.011598944, 0.023686241, -0.04012756, 0.0011414584, -0.013463006, 0.025251335, 0.02581667, 0.017367525, -0.013888725, -0.05617858, 0.017058626, 0.0009825956, -0.03323762, 0.01865755, 0.07809772, 0.011386637, 0.00017504324, 0.03881449, -0.051878992, -0.01245994, 0.012085338, -0.025725473, 0.060648803, 0.039824054, 0.004707045, 0.011433217, -0.013212822, -0.01038786, -0.018489862, 0.050592892, -0.02482329, 0.012015713, 0.0027183187, 0.028844869, 0.0007874494, -0.03748573, 0.039005224, -0.009720048, -0.017920112, 0.029565144, -0.028924793, 0.0051426915, 0.019951986, 0.028926507, -0.0041951537, -0.0045142276, 0.030969415, -0.0084907925, -0.054884143, -0.056893468, 0.04524745, -0.002227787, 0.044948358, -0.028799271, 0.003038986, 0.034173146, 0.022415342, 0.04479244, 0.039290097, 0.038994927, 0.015517926, -0.019427348, 0.031558286, 0.04829428, -0.037903234, -0.009471947, 0.024442803, -0.041622046, -0.047109675, 0.017949533, -0.0009139512, 0.010620271, 0.01680317, -0.017136585, 0.07612861, -0.003607754, 0.0043520555, -0.046022214, -0.013833319, -0.010971338, -0.04725481, 0.0445409, -0.06949805, 0.03584807, 0.0039420277, 0.028166793, 0.024617845, -0.008581531, 0.000536407, -0.0068558604, -0.0406218, 0.002972303, -0.04491894, 0.010672979, 0.06886211, 0.015045383, -0.038511474, -0.0035675478, -0.0003204223, 0.0071605924, 0.01749795, -0.0045192535, 0.0071468633, 0.043471154, 0.025853444, -0.04787457, -0.017969145, -0.064838074, 0.036094885, 0.0115339765, 0.019486677, -0.011589138, 0.007866649, -0.046775278, -0.042410474, -0.060399234, 0.048684575, 0.0059985407, -0.029333716, 0.028297309, 0.02127707, 0.011265528, 0.048655156, 0.024356015, -0.07306903, -0.015407727, 0.017075786, -0.0057563237, 0.023818139, 0.01052809, 0.029174855, -0.039244987, -0.009162189, -0.03770294, -0.01541165, -0.006221145, 0.023193965, 0.04648599, 0.046189845, -0.007874494, 0.05340927, -0.008049047, -0.06945637, -0.01809206, -0.0010326081, -0.0026251583, 0.0128405485, 0.026074272, -0.0048982687, -0.01991031, -0.043537226, 0.037472002, 0.015824987, -0.0063419463, -0.0366669, -0.030399665, -0.058050122, 0.006944853, 0.012634003, -0.022899408, 0.041597042, 0.06949682, -0.007824114, -0.028241288, -0.015811749, -0.009290285, -0.013007135, -0.057374954, 0.037228804, 0.05962257, 0.009857337, 0.00044716927, -0.051897135, -0.03132735, 0.058135927, 0.053414173, -0.01215006, -0.0033939758, 0.023725102, -0.00033071893, -0.022018675, 0.0027163574, 0.013311621, 0.01773183, -0.0044417838, -0.07863707, -0.0031958874, 0.0022961553, 0.064615965, -0.0664723, -0.0016719816, -0.052328613, -0.020036321, -0.00822789, 0.020928698, -0.037294507, 0.009316762, 0.0039588213, -0.012133696, -0.002469605, 0.0028222965, -0.018183598, -0.01947638, 0.012758053, -0.0099338265, -0.025127774, -0.044814993, 0.040984634, 0.017554335, -0.013487767, 0.06937302, -0.022213576, 0.039760802, -0.018099569, 0.058869444, 0.013972079, -0.012154718, 0.004642323, 0.014066955, 0.063458815, -0.060516912, -0.0096712615, 0.023756359, -0.0027379314, 0.005495475, -0.018788464, 0.06560934, 0.02718662, 0.03336118, 0.049165085, 0.046498742, 0.023041965, -0.038484998, 0.041380808, 0.008239291, 0.031220946, 0.030727934, 0.04893562, 0.018087924, 0.002912484, 0.03895276, 0.040289365, 0.024019659, 0.016333593, 0.0026437903, 0.023443047, 0.0018781744, 0.005266436, -0.019777434, -0.055156764, -0.017327318, 0.004161322, -0.017256223, 0.016114274, 0.0464806, -0.018215284, -0.026058152, 0.00813902, 0.042028025, -0.0138327135, -0.018777922, 0.02973357, 0.020630587, 0.023647936, 0.03365807, 0.05234234, -0.053332783, 0.041827977, 0.03673873, -0.016239306, 0.038424198, -0.037356775, -0.03949015, 0.024548221, 0.014089265, 0.023338117, 0.013118191, 0.102221325, 0.034808844, -0.027136113, 0.011720542, -0.006809525, -0.085752554, -0.014749293, -0.05145192, -0.03877085, -0.00015199833, 0.017705845, -0.034987073, -0.0059613376, -0.04119498, 0.021632794, 0.02445457, -0.038571294, 0.022150416, -0.03366518, -0.008783052, -0.0026859576, -0.048470795, 0.022873297, 0.07432424, -0.039013557, -0.028756859, -0.025124587, -0.043796115, -0.014033859, 0.012376097, -0.02901648, 0.009529805, -0.005144408, 0.043596067, -0.04047765, 0.0042922366, 0.023717625, 0.030505575, -0.02834156, -0.023970626, -0.045626953, -0.021515118, -0.002371419, 0.051377397, 0.0047109677, -0.0025589655, 0.0036066507, 0.01830918, 0.00819222, 0.0340616, 0.005280471, 0.03316996, 0.027344255, -0.030240804, 0.01289191, -0.036361434, -0.010530053, -0.007940196, 0.017312119, 0.000638393, 0.06506313, -0.03569313, -0.041295495, 0.011495195, 0.034288865, -0.04951223, 0.017969543, 0.038365852, 0.043312658, -0.05297387, 0.0065136184, 0.0073822155, -0.07737794, 0.037096296, 0.055143036, -0.017255487, 0.010423653, -0.03831682, -0.06496703, -0.026314313, -0.025640646, 0.04856702, 0.03234034, 0.0020805385, -0.058787066, -0.007518524, -0.012445722, -0.037123874, -0.00013949524, 0.011171143, 0.035993204, 0.011943269, -0.025243858, 0.029997116, -0.046279076, 0.03770735, -0.010798256, -0.010707547, -0.01975292, -0.03711897, 0.008566822, -0.001539596, 0.00049816223, 0.015286129, 0.0242202, -0.004358062, 0.009245911, -0.032759074, 0.012208899, 0.032657087, -0.00095421856, -0.025809316, -0.016561689, -0.021885308, 0.04251442, 0.028467815, -0.02171394, 8.531519e-05, -0.024005745, -0.10240961, -0.073092565, 0.04457964, -0.025027016, -0.023558578, 0.041448534, 0.058590453, 0.0041156, -0.03776031, -0.017881041, 0.021452358, 0.014187021, 0.007140367, 0.023345962, 0.010628116, -0.06873855, -0.06696556, 0.037093475, -0.036072146, -0.036887053, -0.03953133, -0.016550656, 0.013213557, -0.03090224, 0.045800466, -0.010178985, -0.0033537697, -0.021445492, 0.023214437, -0.012149325, 0.0025574944, -0.008820807, 0.008909063, 0.008651157, -0.0063019246, -0.0051826527, 0.035622034, -0.016783558, 0.036701225, 0.010980654, 0.024157437, 0.016024547, -0.014753154, -0.026814466, -0.030766914, 0.021321934, -0.01024861, -0.034116272, -0.02109835, -0.064614, -0.0037381784, -0.027936313, 0.020473316, 0.0025717136, -0.03096353, 0.04190839, -0.007456744, 0.01749035, -0.0022655106, 0.016544282, -0.027228784, -0.0011721032, 0.0035442577, 0.01738818, -0.028722782, -0.004279488, -0.03422414, -0.022742873, 0.042518344, -0.008412862, 0.011489112, 0.031402856, -0.0049222945, 0.01800935, 0.007121367, 0.073277414, 0.020506047, -0.0167409, 0.043074854, 0.0063123438, 0.06915434, -0.015177278, -0.08867289, 0.08250274, 0.005903419, -0.035803944, -0.01808535, 0.002333297, 0.011577493, 0.04891404, 0.0032449192, 0.0008229974, 0.011174819, 0.006443871, 0.021913256, 0.0020426614, -0.021744587, 0.030347325, 0.039936334, -0.008054931, 0.0025800492, -0.048553172, 0.040525205, 0.026294729, 0.0026545774, -0.019281233, 0.0033905434, -0.035244, 0.050162144, -0.05949705, 0.025126796, 0.030567478, 0.038059402, -0.010455647, 0.037953492, -0.024958983, -0.021830391, -0.020905409, 0.053060163, 0.04540926, 0.021899283, -0.034996882, 0.012267245, 0.0051284726, -0.042806655, -0.022256967, 0.00977288, 0.024711005, -0.028998585, -0.032097757, 0.021783812, 0.0054239198, 0.030052522, 0.01672276, 0.0024485828, 0.040218756, -0.061168052, -0.041520152, -0.031175349, 0.012240278, 0.02440039, -0.017165024, -0.012925987, 0.006746213, 0.041140553, 0.057036635, 0.023983866, 0.03056049, 0.031381283, 0.03995889, 0.004753135, 0.03804077, 0.032028254, -0.0108404225, 0.013930647, -0.0019138919, -0.0443384, -0.052440405, -0.022921348, 0.01913904, -0.011517429, 0.05604522, 0.04371668, 0.0047739735, 0.035817426, -0.03827171, -0.004241244, 0.0051288405, -0.0043323203, -0.0016258919, -0.047459763, -0.018992437, 0.037660282, -0.009207667, -0.046497762, -0.047015533, 0.0011733291, -0.009297394, -0.02364861, -0.024630593, 0.00093160267, 0.034060434, 0.026256485, -0.0045163115, -0.024842411, -0.07018008, 0.026472226, 0.0058656647, -0.0055317585, -0.028590396, 0.023854667, -0.009973052, -0.008229484, -0.056519844, -0.010317254, -0.009871801, 0.026330523, -0.0051944205, -0.018987043, 0.045038573, 0.015140995, 0.028910572, -0.007983345, -0.02413096, 0.048337433, -0.04101528, 0.016115746, 0.022157434, 0.0037901518, -0.052424714, -0.0016965894, -0.005548, -0.0076832706, 0.027451878, -0.010841894, 0.02955583, 0.0070625287, 0.019784544, -0.00042657595, 0.009902446, -0.0023893155, -0.010350596, 0.002054184, 0.0006763313, -0.09049294, -0.031131709, 0.023895118, -0.06679885, -0.05770837, 0.0032356032, 0.0024849274, -0.02762643, -0.03068454, 0.0593578, -0.025895612, -0.030401627, 0.012968889, -0.051761314, 0.00596716, -0.016052494, -0.040080488, 0.023455549, -0.03403782, 0.057502437, 0.002899736, 0.038497746, -0.03924548, -0.0068977824, 0.030894887, -0.004126632, 0.04373237, 0.0012174576, -0.0044089323, -0.00048418823, -0.0055171717, 0.010725197, -0.05188733, -0.060292836, 0.0001510177, -0.007919113, 0.00087835727, 0.011570995, 0.030301603, 0.017526388, 0.008583003, -0.0111575965, 0.039499953, -0.039924033, 0.0066800816, 0.02916995, -0.0036450182, 0.008987268, -0.0027987305, -0.008251548, 0.01641778, -0.005794078, -0.02523687, 0.028360438, 0.0427635, 0.016641488, 0.002655711, 0.061764274, 0.023552878, -0.00013986298, -0.027637955, 0.009453806, 0.0017470001, -0.06377065, -2.9419032e-05, 0.045538697, 0.0075365426, 0.008354025, 0.0072434563, 0.012096125, 0.03183139, -0.07007221, -0.023179745, -0.051966827, -0.044156004, -0.010119656, -0.015585223, -0.00025349398, 0.013286616, 0.012235743, -0.017232198, 0.05399765, 0.02190026, 0.010286364, 0.009416051, -0.024306493, 0.04700377, -0.055812318, 0.0076809414, 0.050953764, 0.012195169, 0.021879792, 0.03189599, -0.03311259, 0.036334466, 0.030984614, -0.040458035, 0.042778213, 0.04076398, -0.05500182, -0.01647711, -0.010977222, 0.01963328, 0.0081368135, -0.028062813, 0.04765883, 0.023511814, -0.012125053, -0.023327561, 0.0074312473, -0.0135719795, -0.00039053767, 0.036828704, 0.004773728, 0.006397659, -0.02159455, 0.014936042, 0.04472085, -0.02637318, -0.051334247, 0.05709842, 0.0065035676, 0.061946187, 0.046177093, -0.024315136, 0.072488494, 0.007236101, -0.0324085, -0.029473457, -0.008339315, 0.0014856611, -0.042624254, 0.020878688, -0.023394994, 0.028688459, 0.030830901, 0.04534355, -0.007227521, -0.07427227, -0.019209893, 4.535434e-06, -0.010843549, -0.052773822, -0.030818887, -0.0022314335, -0.00417358, 0.036769867, -0.0061576483, -0.009801778, 0.07358681, 0.0033640661, -0.0013091469, 0.015878187, -0.004148727, -0.04470516, 0.04097743, -0.01184827, 0.07624579, 0.021596512, 0.027832365, -0.025668105, 0.013343002, -0.026010346, 0.020764505, 0.016890448, 0.018074563, -0.015160853, 0.011112548, -0.013242487, 0.0039599244, 0.027364112, 0.040837537, -0.029948574, 0.050524246, -0.012014732, -0.029344503, -0.030044677, 0.049718164, -0.052308265, 0.056304105, 0.013556779, 0.01711403, 0.02315474, -0.036262877, 0.078466445, 0.011373398, 0.021503842, 0.017170172, -0.013461659, 0.009195409, -0.0046413424, -0.01731408, -0.010054935, -0.0168473, -0.016172621, -0.003600154, 0.0030801727, -0.01140772, -0.019557772, 0.0062750797, 0.058249194, -0.041192528, -0.050620347, -0.054342836, 0.054030992, -0.0123716835, -0.02644771, -0.034822326, 0.010985066, -0.03493804, 0.009946085, -0.00075766264, -0.021745568, 0.0062956726, -0.059810854, 0.010066579, 0.005789543, 0.013488978, -0.009055086, 0.026792401, 0.03127047, -0.028859334, -0.0074204607, 0.014607529, 0.017148353, 0.045706388, 0.01460851, 0.025204264, 0.04333889, 0.01236678, -0.0045712274, -0.008943385, -0.04670173, 0.02935676, 0.048886586, 0.025765186, -0.0050399704, 0.013332705, 0.04273016, -0.0039588213, 0.015341044, 0.008709013, -0.012663913, 0.030710526, 0.030507537, -0.031600945, 0.0057563237, 0.0028526653], [-0.009659966, -0.064685084, -0.039900467, -0.0488984, 0.028699236, 0.03846115, -0.02439169, -0.005584657, 0.0063983975, 0.054650538, 0.023328654, 0.026006334, -0.03151711, -0.02707634, -0.037046503, -0.0076643196, 0.023799775, -0.05221225, 0.053339764, 0.05416625, 0.0008295171, 0.018812904, -0.04014628, 0.008809904, 0.00545313, 0.026816634, 0.015110346, 0.024655478, -0.0018523802, 0.012428081, -0.022897752, -0.022781637, 0.0051499032, 0.006849661, 0.013335101, -0.00026947382, 0.02121157, 0.010106093, -0.05555453, -0.03414778, -0.06118835, 0.01678809, -0.0051829224, 0.016501188, -0.004416876, 0.048727524, -0.00828288, 0.022743113, -0.010785556, -0.039474152, 0.047411248, -0.012957031, -0.03956147, 0.03025004, 0.023613904, 0.03941912, 0.008087516, 0.013971891, 0.013513681, -0.009672441, -0.01787846, 0.005103218, -0.07558914, 0.015081637, 0.022992225, 0.037352115, -0.017746199, 0.039739773, -0.025231114, -0.07010905, -0.013171932, 0.0362412, 0.036569193, -0.015061916, 0.035436265, -0.004342491, -0.095636606, -0.0058245966, -0.026350833, 0.014496233, 0.013340512, 0.020410668, -0.013998697, -0.037961505, -0.055994786, 0.014119034, -0.008838843, -0.011893903, 0.046272084, 0.014514531, -0.05592068, -0.025663046, 0.060703333, 0.0032062612, -0.0029166092, 0.004561977, 0.007936361, 0.05496165, 0.026993608, 0.02641834, 0.032021157, -0.050199542, -0.003651884, -0.021848476, -0.015357255, 0.009444608, 0.014236435, -0.007902426, 0.009836987, -0.007727973, -0.0051650372, 0.0044113724, 0.02025713, -0.05693547, -0.0065939454, -0.020098407, 0.019685347, -0.0023993992, -0.04032605, 0.0015508042, 0.022900688, 0.027085328, 0.010829398, 0.028674103, -0.03229283, -0.008793395, 0.017870111, -0.025237717, -0.072001055, -0.008209183, 0.02184554, 0.0036231296, 0.03338907, -0.011935361, -0.018129773, 0.013988423, 0.0037109975, 0.063408025, -0.01169909, 0.037812185, -0.023697553, 0.019018678, -0.0035794708, 0.0065845894, 0.00020545315, -0.008201432, -0.026474105, -0.03993532, -0.002464337, -0.014826746, -0.008850582, -0.008054864, -0.0004775639, -0.008592894, 0.007253413, -0.030688828, 0.012674258, 0.010993486, -0.051423453, 0.025488893, -0.018868303, 0.00556191, 0.015304505, 0.018603966, 0.003069323, -0.06421163, 0.013533493, 0.005007737, -0.025567176, 0.00495032, 0.068305835, -0.0011070623, 0.0060449084, 0.029024292, -0.075846605, 0.005652713, -0.0019032162, -0.011172891, 0.049449638, 0.010262018, -0.006361343, -0.0080831135, -0.015385873, -0.015324604, -0.019815955, 0.05823129, -0.041553333, -0.019876009, 0.03391958, 0.015373582, 0.020762876, -0.005607587, 0.031252358, -0.003349299, -0.01883916, -0.006401333, -0.04065294, -0.009221911, -0.00093976466, 0.045425326, -0.013015824, 0.011643323, 0.0576164, -0.039885793, -0.030443754, -0.030786788, 0.032791056, 0.010602116, 0.044925995, -0.024852812, 0.0053351778, 0.040254876, 0.04270637, 0.029950392, 0.022225995, 0.04299584, 0.017074257, -0.02706258, 0.042129084, 0.047717962, -0.013739496, 0.007915816, 0.038424876, -0.035255942, -0.049015798, 0.041260492, -0.006079303, 0.015676808, 0.012246109, -0.001127791, 0.09590553, -0.00075540715, -0.021265501, -0.04145164, -0.021201298, -0.028929269, -0.03590798, 0.021651644, -0.047958452, 0.03658607, -0.027941627, 0.047481507, -0.0050026923, -0.0048633693, -0.03385171, -0.015584997, -0.026038801, -0.008279991, -0.007275426, 0.01527324, 0.049145862, 0.010493222, -0.04812263, 0.038722415, 0.008848977, -0.008807061, 0.015679376, 0.002280438, 0.021531489, 0.04448721, 0.06252819, -0.044870965, 0.004177486, -0.047144987, 0.012688932, 0.025732823, 0.037487496, -0.039325934, -0.0073981476, -0.082785875, -0.046229437, -0.063936286, 0.030854661, -0.014874441, -0.035003345, 0.046986114, 0.03671608, 0.011001099, 0.057629608, 0.015481628, -0.04914769, -0.008488149, 0.016496602, -0.021082427, -0.010298155, 0.02231588, 0.034814496, -0.044666983, 0.01552781, -0.045155954, -0.011044643, 0.011572882, -0.0041996366, 0.018969769, 0.056372676, -0.013051594, 0.02495742, -0.0054092878, -0.06338082, 0.0056044683, 0.0088308165, -0.0134333335, 0.03714446, 0.025582585, -0.0111960955, -0.034155667, -0.049538516, 0.047418587, 0.030605229, 0.00023095135, -0.045517135, -0.03399259, -0.0748862, 0.024197243, 0.012918141, -0.0035414987, 0.044894267, 0.05876033, -0.02095567, -0.03318082, 0.002147719, 0.0036107472, 0.021485811, -0.058557082, 0.040092714, 0.028208716, 0.01442226, 0.0329833, -0.039172575, 0.000103460334, 0.029907076, 0.037492264, -0.010064635, -0.032087002, 0.026883544, 0.018909577, -0.046526335, 0.024987873, 0.011433467, 0.03494368, 0.002198532, -0.05136448, 0.008010838, -0.0013655297, 0.05166156, -0.07062011, 0.0014653212, -0.06252673, 0.015976068, -2.5223042e-05, 0.032606516, -0.021477375, -0.014288166, 0.032721348, -0.00041934455, 0.018621622, -0.010443991, -0.0022687898, -0.03522292, 0.0032872504, -0.0018362375, -0.03859364, -0.03820438, 0.04218329, 0.023620874, -0.013975216, 0.063261956, -0.01916034, 0.027172646, -0.026316347, 0.0468213, 0.01266637, 0.012125679, 0.0058792615, 0.018503074, 0.07336879, -0.05235992, -0.0083236955, 0.02567871, 0.014115548, 0.024137441, -0.054982197, 0.06333864, 0.033355318, 0.026247375, 0.05644825, 0.02367554, -0.00801304, -0.037793107, 0.022467403, -0.0106769595, 0.033896834, 0.020808734, 0.037794758, 0.03889595, 0.0018776951, 0.030031746, 0.0362667, 0.024941277, 0.01636244, -0.011734677, 0.030119615, -0.011010821, -0.013960541, -0.008085315, -0.031394985, -0.0072985394, -0.0117187165, -0.008187308, 0.04119629, 0.03461812, -0.012816332, -0.025287064, 0.03838782, 0.031812586, -0.025473256, -0.012015707, 0.03758458, 0.0013257231, 0.011736878, 0.015348451, 0.039102133, -0.044722747, 0.018847575, 0.0020046355, -0.012123936, 0.0029046857, -0.058631923, -0.048595537, 0.027572546, 0.02773489, 0.030800361, 0.010956706, 0.08153261, 0.04981652, -0.0067836223, 0.02374011, -0.01715277, -0.089881346, -0.009778102, -0.050356567, -0.041456774, -0.00013501207, -0.008422845, -0.0027915945, 0.025433632, -0.028675573, 0.0007466021, 0.0035099466, -0.07375181, 0.022722382, -0.0043342817, -0.017569179, -0.010096829, -0.05489277, 0.014395936, 0.07882063, -0.060912453, -0.012788357, -0.0068724076, -0.04224823, -0.00868403, 8.860167e-05, -0.02706093, -0.007048923, -0.022425946, 0.04372263, -0.05026521, -0.005928791, 0.054568354, 0.026987461, -0.017214773, -0.026316347, -0.030889146, 0.000106395375, 0.018035369, 0.05488204, 0.016025346, 0.023382034, -0.0031472854, -0.009921553, 0.0100606, 0.021981651, 0.014926905, 0.03493437, 0.0051282574, -0.0022886014, 0.0043379962, -0.047429044, -0.025680175, -0.0010260504, 0.017424628, 0.014159024, 0.063132815, -0.026123, -0.043318328, 0.00927731, 0.0397794, -0.0075515034, 0.013385364, 0.05529331, 0.027388737, -0.06414394, 0.0038726083, -0.0012178603, -0.066091344, 0.036894433, 0.04357657, -0.012561993, -0.0014724752, -0.020759206, -0.06797105, 0.027961072, -0.029241119, 0.011139963, 0.046962183, 0.008975367, -0.019939044, -0.0014455211, -0.037625074, 0.00575599, -0.013700904, 0.010370614, 0.02222416, -0.012439729, -0.01569552, 0.019231148, -0.02014468, 0.0127624925, -0.015174549, -0.012002867, -0.026002847, -0.034102287, 0.018076941, -0.0009685648, -0.0072224117, 0.00962759, -0.015650393, -0.023052668, 0.021019049, -0.026470436, 0.04601857, 0.014799689, 0.020853493, -0.026416918, 0.006552855, 0.008811647, 0.028406626, -0.011663869, -0.0046863724, 0.022199212, -0.014368168, -0.103643134, -0.035719495, 0.043684475, -0.0042363703, -0.010144249, -0.0015955637, 0.031858444, -0.018716414, -0.05928864, 0.0047008414, 0.02964542, 0.023267934, -0.010414181, 0.0240648, 0.004769815, -0.048765775, -0.06520349, 0.03478542, 0.0027820559, -0.054160748, -0.0666402, -0.044995386, 0.031174626, -0.021637104, 0.026780725, -0.03164859, -0.013345098, -0.008741206, 0.0008863835, -0.03563658, -0.012991151, -0.018642304, 0.01961956, -0.001564379, -0.0026712576, -0.009021227, 0.03353729, -0.0154141225, 0.021724973, -0.018032916, 0.040980563, 0.02883168, -0.022360962, -0.02702993, -0.032112326, 0.050761968, 0.02336626, -0.044853356, -0.055199392, -0.058893144, 0.029724669, -0.005631984, 0.01527214, -0.020315647, -0.016098354, 0.060670312, 0.0016399563, 0.005157149, 0.0031382968, 0.02410846, -0.03539646, -0.0118762925, -0.0054171756, 0.026533356, -0.033431813, -0.017126353, -0.032013636, -0.007294871, 0.018739894, 0.027799277, -0.00039036098, 0.037791457, -0.0073926444, 0.01538624, 0.017768396, 0.05442582, 0.02483048, -0.020369578, 0.07167013, -0.015886595, 0.045252524, -0.00701916, -0.068680786, 0.063184544, -0.0204635, -0.035906423, -0.013414623, 0.000605353, 0.008890801, 0.027729388, -0.001204469, -0.007349444, 0.04368081, 0.016541088, -0.0030906023, -0.017244603, -0.04316057, -0.0009160894, 0.02406104, 0.0030496952, 0.0010969731, -0.074767336, 0.037256703, 0.008878648, -0.0155937215, -0.00048611683, 0.00017903774, -0.024328586, 0.049684804, -0.046342526, 0.03914176, 0.0072627687, 0.033269834, -0.02216913, 0.044120144, -0.02490936, -0.013138728, -0.025230471, 0.05810949, 0.011834835, 0.0074770264, -0.034975097, -0.009443874, 0.013614207, -0.039961003, -0.015046507, -0.0027662797, 0.014124904, -0.020322986, -0.027102938, 0.027343612, 0.0057967138, 0.03998265, 0.0034239131, 0.01748608, 0.055462077, -0.04193739, -0.033485744, -0.028517079, 0.022690097, 0.031318396, -0.009042873, -0.022235166, 0.022770079, 0.021210425, 0.05480096, 0.007674775, 0.024555963, 0.047402445, 0.030945646, 0.0144242775, 0.015380369, 0.017646225, -0.020595944, 0.0073315585, 0.009130558, -0.037061546, -0.049531817, -0.01409115, 0.012199514, -0.004864103, 0.0357261, 0.01833064, 0.0069373455, 0.034679756, -0.028255127, -0.021798579, -0.0073214695, -0.011989658, 0.005928057, -0.040980563, -0.04619467, -0.0043893596, -0.027396258, -0.041177947, -0.060649768, -0.008592711, -0.013518083, -0.016336184, -0.038639866, -0.047936622, 0.007357057, 0.010849577, -0.009333259, -0.017010054, -0.05029346, 0.014970701, 0.011048242, -0.017071001, -0.037100438, 0.013509645, -0.005659271, -0.0062061865, -0.06652426, -0.004457187, -0.0029991572, 0.0050291996, -0.0048376876, -0.01654118, 0.045095496, 0.011939121, 0.015218208, -0.023061933, -0.0021132322, 0.048907753, -0.040107757, 0.0129719805, 0.02107619, -0.00017353453, -0.057173207, -0.015714243, -0.0010696404, -0.04225584, -0.0070965714, 0.014058499, 0.033435296, 0.0004908863, 0.015415039, -0.0005628866, -0.002061869, -0.021361416, -0.02498457, 0.0015410362, 0.0055196728, -0.08319825, -0.04400513, 0.011462451, -0.03341402, -0.048450988, 0.005805886, 0.02509757, -0.03345658, -0.0044627357, 0.046752334, 0.003426298, -0.024045723, 0.008645909, -0.0775615, 0.007856473, 0.005691786, -0.041808613, 0.016960708, -0.014132241, 0.035970993, -0.009328765, 0.01438759, -0.04623576, -0.008156123, -0.004382389, -0.006159926, 0.056843016, 0.017887196, 0.0015383305, -0.0043379962, 0.008978486, -0.002064804, -0.03559549, -0.032593492, -0.020686196, -0.023081927, 0.00029277074, 0.041927665, 0.02516957, 0.010388591, 0.014110228, 0.007866838, 0.050468095, -0.00993366, -0.024340326, 0.021389874, 0.018878942, 0.023894567, 0.017351894, -0.0057647955, 0.0020432498, -0.004204819, -0.017275674, 0.02642586, 0.029606348, 0.019692134, 0.0029108308, 0.04697686, 0.02955517, -0.006849661, 0.0007117484, 0.0060322513, 0.008555655, -0.07459343, -0.009752695, 0.07482751, -0.00079484686, -0.01904404, 0.04511843, 0.0017801048, 0.056678653, -0.07304739, -0.018769428, -0.05952271, -0.05406059, -0.008617291, 0.0356098, 0.002028116, 0.015516115, 0.01311323, -0.001809822, 0.03339201, 0.029460879, 0.03456309, 0.0034236382, -0.028805265, 0.043937992, -0.048706334, -0.0068933195, 0.038191814, 0.016528156, 0.02298429, 0.027329165, -0.02022833, 0.021942396, 0.02171933, -0.024695652, 0.024236133, 0.034552816, -0.07098186, 0.017360792, -0.00860069, 0.03393721, 0.015752204, -0.037126895, 0.04435293, 0.02675807, -0.0018458681, -0.051202044, -0.006073892, -0.015018625, -0.029564066, 0.03952038, -0.0010672557, 0.017109202, -0.036911216, -0.0034585835, 0.043817285, -0.016970063, -0.049738735, 0.049597487, 0.015542163, 0.04942542, 0.023297468, -0.03066278, 0.063071184, -0.0036965972, -0.041329835, -0.04690495, -0.015394127, 0.0043077744, -0.02035981, 0.002238155, -0.011215082, 0.036515992, 0.040487476, 0.05239954, -0.006109938, -0.09808627, -0.0029289913, -0.035486896, -0.03174838, -0.030558953, -0.018262217, 0.013774624, -0.0003786208, 0.029350448, -0.005269919, -0.014086014, 0.069496, -0.02220178, -0.022194076, -0.015606367, -0.017485714, -0.061726928, 0.030084943, -0.0081231035, 0.061706383, 0.023363968, 0.0354979, -0.03746603, 0.0074418066, -0.046526335, 0.028124334, 0.021495719, 0.042024523, -0.03319389, -0.0041006245, -0.017578993, -0.021479025, 0.039941374, 0.018148484, -0.049704894, 0.075355805, 0.002525973, 0.0032247147, -0.018239103, 0.037823923, -0.03431077, 0.05159515, 0.0039898264, 0.011736511, 0.03701979, -0.0257198, 0.104428895, -0.010288066, 0.0131473495, 0.010686131, -0.020446623, 0.03531813, 0.022806766, -0.0300677, -0.021816922, -0.01942743, -0.040855825, -0.022462588, 0.009784752, -0.0061720326, 0.006823429, 0.009784339, 0.061573207, -0.032353457, -0.061589163, -0.03373467, 0.040518846, -0.03303314, -0.015228481, -0.025346681, 0.0020171097, -0.044298634, 0.0069589918, 0.01933039, -0.03472892, 0.0050607054, -0.06221855, 0.005398421, -0.0008607019, 0.0028921198, 0.005267305, 0.020294735, 0.024024077, -0.013173216, -0.009738388, 0.0041002575, -0.0027451843, 0.03288571, 0.01421534, 0.0357782, 0.027018556, 0.018513896, 0.0014140495, 0.019860715, -0.038026072, 0.064374335, 0.06339, 0.0056492276, -0.043490026, 0.009655105, 0.054668147, -0.014548651, -0.010885348, -0.0057024253, -0.030713595, 0.03474066, 0.061261725, -0.018299822, 0.017988523, 0.01362081], [-0.03133366, -0.048599094, -0.03996722, -0.050677788, -0.006007645, 0.065061845, 0.003281868, -0.044323485, 0.016458796, 0.038753282, 0.028570514, 0.0049991226, 0.004277724, -0.025489, -0.00977546, 0.03249757, 0.0054918774, -0.057343706, 0.058812264, 0.01682377, -0.020519646, 0.010956309, -0.04806116, 0.04086786, -0.03079657, 0.047604296, -0.024050003, 0.030436821, -0.008369662, -0.014199437, -0.016480066, -0.07948558, -0.026010048, -0.02958896, -0.017902175, 0.009442998, 0.014547047, 0.013504534, -0.047719143, -0.05699747, -0.07848278, -0.004167941, -0.008504778, 0.04569434, -0.0073073027, 0.024438465, -0.004240144, -0.009892684, -0.012920575, -0.037268892, 0.05645953, -0.029319149, -0.035858396, 0.008602738, 0.025185117, 0.050925646, -0.028997824, 0.04032486, 0.030869197, -0.015249234, 0.041707277, -0.0066118715, -0.055464733, 0.033121403, 0.037761856, 0.008410619, 0.0120847495, 0.027408192, -0.048855, -0.03708205, -0.002243472, 0.0418918, 0.003598338, 0.0029776436, 0.015166053, 0.029214801, -0.05626108, -0.013059069, 0.0026145163, 0.01960296, -0.008903374, 0.023934308, 0.025141919, -0.016104272, -0.05792809, 0.0030376017, -0.004480399, -0.0073431935, 0.048923377, 0.022905413, -0.052357882, -0.02111543, 0.068715505, 0.034726787, -0.0044990834, 0.034381397, 0.017696965, 0.012205298, 0.029117739, 0.017726522, 0.013883706, -0.018503657, -0.0047967634, 0.006114472, 0.008167593, 0.009967421, -0.011177142, -0.0034877106, -0.011004868, 0.02352727, 0.0034787513, -0.0029528898, -0.008288591, -0.040107355, 0.006170735, 0.0043701944, 0.019963976, -0.014812004, -0.016175631, -0.021584116, 0.03657705, -0.004959643, 0.01165174, 0.033522557, -0.0479936, 0.034390263, 0.022379618, -0.023228323, -0.0619056, 0.0070533245, 0.029231323, 0.027292814, 0.06791789, -0.0064260857, -0.03437802, 0.028844127, -0.0047502113, 0.040280525, -0.027724344, 0.044579364, -0.030661454, -0.008940109, -0.0110990275, 0.011691009, 0.008818398, -0.02636684, 0.00933208, -0.02514403, -0.028129695, -0.007191609, -0.00055387465, -0.02419652, -0.015820526, -0.011329571, -0.005510245, -0.044621587, 0.0021378063, 0.00043406375, -0.04320961, 0.013970266, -0.0035531581, -0.007410752, -0.008190209, 0.030933376, 0.015645508, -0.05378506, -0.0069720433, 0.010282677, 0.012849638, 0.04202058, 0.05184444, -0.028709011, 0.033677943, -0.0090097785, -0.04757875, -0.0050394465, 0.015550292, 0.018065054, -0.009290991, -0.015435441, -0.015005179, -0.024861708, -0.0022997356, 0.013387574, -0.040112473, 0.020549836, -0.023984134, -0.023099117, 0.02315232, 0.0056551793, 0.012094672, -0.018280502, 0.01031957, -0.020653918, -0.006355572, 0.012688764, -0.07167288, -0.024461266, -0.009678186, 0.011547025, -0.025774013, -0.008126767, 0.034119606, -1.30894705e-05, -0.04020918, -0.037653767, 0.039877817, 0.025437646, 0.06346166, -0.03226766, 0.008088449, 0.005544869, 0.023783991, 0.024246346, 0.01912414, 0.023547538, -0.00015918486, -0.053058807, 0.038130898, 0.04495452, -0.0048876773, -0.013166319, 0.022056604, -0.070626356, -0.052995678, -0.020004936, 0.014492156, -0.004173008, 0.009122095, -0.0010252012, 0.05063403, 0.0031845416, 0.0016247834, -0.053272884, -0.0077616344, -0.010889596, -0.018715411, 0.0015483578, -0.09436917, 0.021810014, -0.039253213, 0.031678632, 0.004752745, -0.026572471, -0.014817704, -0.014232055, 0.00028036803, -0.033152673, -0.0032086093, 0.010233644, 0.046753902, 0.04730577, -0.05077554, -0.0012616562, 0.012070604, 0.04355669, 0.016786613, 0.0096393395, 0.007900129, 0.058080096, 0.034242798, -0.07118561, 0.01728251, -0.041978355, 0.0015882596, 0.009504936, 0.050146714, -0.04114633, -0.021273347, -0.05735405, -0.018425753, -0.04628268, 0.032223742, -0.009119666, -0.026888307, 0.0099186525, 0.010198493, 0.001753778, 0.02811956, 0.015722565, -0.0364546, 0.0049381084, 0.018286414, -0.024804126, 0.011859906, -0.029930132, 0.047578115, -0.02681526, -0.013187854, -0.04250447, 0.019588184, 0.0045234677, -0.0019715487, 0.053137343, 0.06382004, -0.03945251, 0.02025068, -0.01624551, -0.063804835, -0.048030756, 0.027903374, 0.002739658, 0.030806703, 0.023076316, -0.006446776, -0.0061976532, -0.04758572, 0.035434887, 0.028857216, 0.013817731, -0.015577527, -0.06419077, -0.069210365, 0.0054779933, -0.015560004, -0.004789902, 0.021152584, 0.042933464, 0.0008877221, -0.01780907, -0.04889403, -0.013121773, 0.0052172095, -0.051829237, 0.021288758, 0.06672421, -0.0031315505, -0.0019600429, -0.06423172, -0.023025647, 0.035325054, 0.01536345, 0.0026478732, -0.009093382, 0.0021084605, -0.016357195, -0.013689054, -0.025111517, -0.0097335, 0.023182297, 0.009454345, -0.085366994, -0.0032909464, -0.0038157918, 0.07269977, -0.058379885, -0.029116051, -0.04496698, 0.0015926932, -0.019883223, 0.0354446, -0.031225145, 0.0065447353, 0.04399656, 0.0012861461, 0.014210098, 0.010915352, -0.014235645, -0.042245585, -0.028790714, -0.009659739, -0.027042426, -0.091937065, 0.015602649, 0.014782658, -0.030994179, 0.039189033, 0.012676519, 0.0041421843, -0.01784665, 0.037401263, 0.020719789, -0.014078234, -0.0004931775, -0.016846994, 0.04912373, -0.025779502, 0.021073204, 0.06070812, 0.021377217, 0.009233144, -0.040446468, 0.059267856, 0.04139144, 0.013721144, 0.06818686, 0.018744756, -0.026400197, -0.041316282, 0.060106855, -0.005450287, 0.043453667, 0.015423197, 0.0013207698, 0.021617051, -0.0020140896, 0.021335838, 0.025847273, 0.015356905, 0.0055138343, -0.0070277792, 0.0036483735, -0.03799895, 0.021299789, -0.021095054, -0.044109408, -0.031196855, -0.018035602, -0.034520734, 0.04957025, 0.0343791, 0.0088894395, -0.016932286, 0.018395774, 0.042909823, -0.012158007, -0.005941142, 0.0094924, -0.011607828, 0.026857272, -0.0086301835, 0.025984606, -0.0529068, 0.039130762, 0.045370005, 0.004504045, 0.00567323, -0.040544003, -0.028178677, 0.060071386, 0.014650919, 0.034667674, 0.019276146, 0.092075564, 0.033042893, 0.0072547337, 0.038977593, -0.022200983, -0.04071823, 0.0054939887, -0.038369883, -0.030305082, 0.011459622, -0.020753482, -0.031331338, 0.022367796, 0.000537935, 0.0394846, 0.028021287, -0.042838886, -0.011363984, 0.0110188015, -0.031117475, -0.014214321, -0.04584904, 0.0365002, 0.04652167, -0.019332727, -0.03200492, -0.0067795017, -0.040998757, -0.0143335, -0.0010543357, -0.0021606071, -0.025832877, -0.021059481, 0.04628057, -0.012762656, -0.02602229, 0.048300996, 0.022961045, -0.038307395, -0.024244444, -0.058417886, 0.005468866, 0.03163092, 0.02629717, -8.618994e-05, -0.0046385285, 0.010729989, 0.019909931, -0.033922844, 0.018606525, -0.012620783, 0.0150554245, 0.019937376, -0.02029591, -0.004041585, -0.063788794, -0.013439086, -0.00073385483, 0.011478199, 0.014440643, 0.06652618, -0.034218412, -0.019764258, -0.0066792197, 0.029798392, -0.01781857, 0.02114583, 0.04636206, 0.049206275, -0.038472913, 0.0001452509, 0.035835173, -0.037439264, 0.025295615, 0.030767858, -0.022865195, 0.017543692, -0.042939376, -0.05363833, -0.0074106334, 0.0027703233, 0.010246945, 0.065693945, 0.008156852, -0.027413577, 0.007046991, -0.030289881, -0.020140052, -0.05022483, 0.0068141255, 0.029055037, -0.0012848794, -0.05130078, 0.034499176, -0.06631041, -0.004951198, -0.010932031, -0.0015247122, -0.029342372, -0.048996847, 0.002708676, 0.024019178, -0.014286418, 0.023611717, -0.0077971024, -0.049881864, -0.00062787236, -0.016732145, 0.051671743, 0.009309992, 0.007952487, -0.02975448, -0.01763173, -0.014103351, 0.056740746, 0.0122794015, 0.0030826956, -0.030155819, 0.0016401953, -0.04596748, -0.06548789, 0.040842526, -0.052699476, -0.006119803, 0.039407752, 0.049692698, -0.019787902, -0.023326598, -0.014940998, 0.031163497, 0.024214255, -0.0061039156, 0.011322815, -0.004203923, -0.04098609, -0.045088585, 0.006944598, 0.000187475, -0.010444554, -0.030151809, -0.058768876, 0.027463399, -0.03786235, 0.01485845, -0.047122095, -0.0033902258, -0.003659985, 0.0232279, -0.060738523, 0.010653986, -0.03450311, 0.022857172, 0.00958656, -0.0039027736, 0.0026314058, 0.034101874, 0.0029290859, 0.04306098, -0.028676076, 0.044176545, 0.014172097, -0.05386275, -0.045897596, -0.051575895, 0.016925108, -0.028287932, 0.016993722, -0.051575895, -0.055717234, 0.019606126, -0.0019169742, 0.022908263, -0.032452602, -0.03240953, 0.04431203, -0.010350394, -0.008471844, 0.0127421785, 0.02914814, -0.028474191, -0.015739033, -0.0016192943, 0.019601693, -0.0067517394, -0.017338693, -0.0135248015, -0.005380195, -0.0023058583, 0.016163386, 0.01817262, 0.023028601, 0.024618339, 0.0071067386, 0.011414902, 0.025447622, 0.020548042, 0.017382817, 0.08617448, -0.01672919, 0.04459625, 0.0047307885, -0.068425, 0.082175486, -0.018421954, -0.06354221, -0.0365809, 0.0107688345, 0.015953057, -0.0023881951, -0.015231922, -0.02631068, 0.039976697, -0.0024198634, 0.0008432153, 0.012084537, -0.037197746, 0.031418953, 0.041361462, 0.004463932, -0.010601416, -0.033688076, 0.048954625, 0.028799372, 0.00060127117, -0.002247589, 0.00082685344, -0.026995556, 0.034340017, -0.054935243, 0.03716481, 0.04300356, 0.03265401, 0.0003279559, 0.010999009, -0.025087027, -0.045039073, -0.017403087, 0.04267252, 0.010625273, 0.036579583, -0.013933531, -0.02722272, 0.009282546, -0.030219208, -0.027399853, 0.007164058, 0.024055913, -0.038944133, -0.017334683, 0.0021969727, 0.0030948156, 0.044223834, 0.0058125695, 0.018860977, 0.057617318, -0.05295409, -0.021242734, -0.039368276, 0.063925594, 0.041522335, -0.0018249255, -0.041213043, 0.020606918, 0.029173054, 0.041945845, 0.0233376, 0.007055647, 0.050378896, 0.009703099, 0.033351127, 0.015341969, 0.02735541, -0.034599695, 0.0042201676, -0.015890619, -0.029592339, -0.027155165, -0.028539075, 0.017180143, -0.040972155, 0.064862974, 0.013143835, 0.02395521, 0.027721653, -0.037403796, 0.0005995822, -0.018442642, 0.003526557, 0.03198349, -0.043306727, -0.037214212, -0.012241611, -0.017907664, -0.028668476, -0.07674652, -0.0030336962, 0.0021828804, -0.004174776, -0.04055593, -0.03485853, 0.03156336, 0.038561583, -0.0013499045, -0.033220235, -0.06501498, -0.011921552, 0.0047624563, -0.010699588, -0.04543862, 0.025081117, 0.003257167, -0.025403287, -0.049554203, 0.02414944, -0.0047172764, 0.009876217, -0.009290991, 0.0024067736, 0.05323952, -0.002235344, 0.06057723, -0.048501138, -0.013814037, 0.049432598, -0.05373946, 0.019508114, 0.03492018, 0.039211836, -0.0581865, -0.036637854, 0.008357839, -0.002836193, 0.010126184, 0.015132695, 0.011879329, -0.0044740657, 0.02543337, 0.0051489356, 0.033424597, -0.037177477, -0.027446827, 0.034038536, 0.01746051, -0.07178773, -0.044497866, -0.016004624, -0.07080623, -0.069887646, -0.0024424004, 0.03017672, -0.016789148, -0.03110734, 0.011195298, 0.03940353, -0.033203345, 0.048741814, -0.084100276, 0.011597271, -0.024759369, -0.049631894, 0.0025359795, -0.03353987, 0.034003068, 0.018309215, 0.062262814, -0.01140919, -0.021585803, 0.010321048, -0.009505912, 0.039479535, 0.03012774, -0.0011729855, -0.018527936, 0.042167097, -0.023652252, -0.034649096, -0.04242509, -0.014290324, -0.019151164, -0.0041968646, -0.0035814482, 0.020771207, 0.013821636, 0.013596794, 0.0024217633, 0.03482306, 0.011581648, 0.008944754, 0.026924198, 0.026550725, -0.011979874, 0.008206254, -0.0074362974, 0.027984444, 0.020989811, -0.009842016, 0.015915083, 0.0063918843, -0.029744834, -0.019657219, 0.052503135, 0.010724922, -0.020853639, -0.03332664, -0.03560336, 0.019451903, -0.08410112, -0.017280795, 0.05104725, -0.0044297306, 0.0062808353, 0.0152388895, -0.00051091163, 0.039579183, -0.058305573, -0.042901374, -0.06815477, -0.04267532, -0.0009289302, 0.020875173, -0.024671542, 0.002458208, 0.00044250858, -0.03779859, 0.026829194, 0.028950531, 0.020694243, -0.013170647, -0.0020808037, 0.059579898, -0.042684767, 0.015990267, 0.062544025, 0.010860038, 0.003477788, 0.013951265, -0.025303215, -0.0053623025, 0.035424754, -0.024208553, 0.049233302, 0.056488246, -0.013871462, 0.01876988, -0.044532068, 0.062116716, 0.034934532, -0.031225566, 0.04396542, 0.022403896, -0.020032803, -0.025256768, -0.010484125, 0.0094962, -0.054018136, 0.0075333077, -0.022151608, 0.007919975, -0.02903045, 0.0054342416, 0.05919143, 0.006422048, -0.06561963, 0.06877461, 0.0035027005, 0.055992536, 0.030780103, -0.02455205, 0.055882752, -0.0019377696, -0.013569137, -0.01814454, -0.017285703, -0.020361306, 0.0077835904, -0.036756925, -0.014560559, 0.034761414, 0.023882795, 0.022858227, -0.007447909, -0.07101587, -0.017694853, -0.021655897, -0.026543338, -0.017538413, -0.016796535, -0.011395652, 0.02491222, 0.016035024, -0.00945841, -0.0008360372, 0.06157625, -0.016863488, -0.04290813, 5.7424775e-05, -0.00442023, -0.031693835, 0.011462155, -0.019412952, 0.034520525, 0.026915753, 0.03257505, -0.03108285, 0.009489022, -0.050405443, 0.024597228, 0.0038162144, 0.004523046, -0.024849938, 0.0136984475, -0.013352527, -0.0014668653, -0.01155547, -0.024419464, -0.02420676, 0.043571472, -0.00045058396, -0.020669542, 0.01595807, 0.023269702, -0.0319894, 0.023458444, 0.0043283924, 0.009262068, 0.024900397, -0.038728155, 0.06360638, 0.00822061, 0.020902406, 0.02016222, -0.005363728, 0.021461666, 0.013974489, -0.02362016, -0.030381085, -0.047628786, -0.07089257, 0.013476719, 0.012711144, -0.012793639, 0.0047842017, 0.025734851, 0.036016893, -0.037108228, -0.0763378, -0.021465044, 0.03003168, -0.006675208, -0.0002533446, 0.0073609273, 0.012283729, -0.032546442, -0.010947179, 0.008107027, -0.029550958, 0.023542471, -0.08534673, 0.034428265, 0.021035202, 0.010305636, -0.0021097271, 0.013885712, -0.007571626, -0.043376397, -0.029022735, 0.00979937, -0.022395663, -0.012120006, 0.0011548292, 0.031690877, 0.05042571, 0.033107072, -0.0039293747, -0.016265832, -0.043408066, 0.010020623, 0.048377838, -0.0013843172, -0.014028535, 0.006124395, 0.030034795, 0.026349528, -0.011792446, 0.0008683386, -0.015808808, 0.023984978, 0.047385573, -0.03402418, 0.014623051, -0.020758424], [-0.004707925, -0.08959016, -0.029020552, -0.0007335562, -0.017818449, 0.015455907, 0.02748377, -0.027539093, 0.06411446, 0.020957578, -0.011207736, 0.044919048, -0.087145664, -0.01759504, -0.021919345, 0.04829164, -0.0023461506, -0.037560947, 0.04049927, 0.038997326, -0.013580011, -0.018345283, 0.008921519, 0.030307857, -0.021365339, 0.04034969, -0.0044546123, -0.013220404, 0.034946375, -0.0053054765, -0.007092399, -0.028450403, 0.00027662038, -0.003742059, 0.014467245, 0.012633354, -0.0009886617, -0.020255912, -0.03015367, -0.05514773, -0.06713474, -0.00011551461, -0.048365533, 0.03884006, 0.032603297, 0.042312674, 0.02163786, 0.027974514, -0.011125518, -0.021888867, 0.031879984, 0.02267352, -0.040318955, 0.02554538, -0.027152851, 0.028686557, -0.0009456319, 0.019542461, 0.02090328, -0.023625428, 0.011706164, 0.0066166054, -0.040405016, 0.009140254, 0.0052335034, 0.032872744, 0.020754725, 0.005366435, 0.006144814, -0.049681846, -0.0015424147, 0.003571476, 0.01465217, -0.03527422, 0.06592171, -0.0061184326, -0.07444264, 0.022518948, -0.019515054, -0.03211972, -0.0039013717, 0.0072114673, -0.003752208, -0.07406049, -0.063110426, 0.0013413527, -0.031633846, 0.006346901, 0.061856415, 0.009105708, -0.046031676, -0.018947983, 0.0039855745, -0.0037128602, 0.020442916, -0.0019035579, -0.0044254134, 0.060473822, 0.01724728, 0.05832182, 0.020688385, -0.038937904, -0.008524918, -0.017019324, -0.017130997, 0.0012801377, 0.017141754, -0.011763537, -0.012205105, -0.009922987, 0.00093026407, 0.009079295, 0.0108699, -0.07317531, 0.040368132, -0.016572634, 0.04425311, -0.023994256, -0.035979856, -0.018776376, -0.027553437, 0.010373264, 0.025313836, 0.012781446, -0.014120445, -0.0033568395, -0.00095767, 0.01984034, -0.053395927, 0.0042398474, 0.05187759, 0.00985793, 0.018326612, -0.020008873, -0.03336656, 0.03872685, 0.0053910236, 0.06027865, -0.022871383, 0.04387506, -0.022403177, -0.0030492272, 0.025379406, 0.023338564, 0.03630284, -0.012351612, 0.013883268, -0.025535133, -0.020424573, -0.0011624459, -0.0001446494, -0.019047873, 0.023512218, 0.011985858, 0.024568755, -0.05650432, 0.018870376, 0.020883814, -0.018699536, 0.0066875215, -0.02543883, 0.021721357, 0.03578648, 0.007931192, -0.025142102, -0.042168215, 0.017497582, 0.013908882, -0.015268931, 0.05838124, 0.08845295, -0.00094230217, -0.005100572, 0.015798096, -0.05326223, -0.014015944, 0.011015126, -0.042079084, 0.0072615403, 0.024960378, 0.010228806, 0.00015854446, 0.016377974, 0.0025077043, -0.022543535, 0.015407499, -0.028350003, -0.00825097, -0.024749583, 0.0013149714, 0.028832037, -0.043374587, 0.023042733, 0.006292601, -0.033262063, 0.0011910044, -0.035250656, -0.0124183325, 0.018825296, 0.04084146, 0.009267295, 0.0010368141, 0.044258233, -0.011624202, -0.017815184, -0.053914335, 0.018952593, -0.0007801719, 0.044675086, -0.038444594, 0.021992343, 0.052111182, 0.05341232, 0.05995337, 0.019780405, 0.0305143, 0.019027896, -0.029445726, 0.030134203, 0.06121711, -0.045197718, -0.0046339035, 0.04209752, -0.029242102, -0.024215423, 0.011430313, -0.03204487, 0.030908741, 0.048322506, 0.0062976913, 0.06735706, -0.006281331, -0.032644916, -0.02954408, -0.00065927854, -0.008358032, -0.023464067, 0.0377825, -0.0053423587, 0.021238297, -0.027923035, 0.03647547, 0.034300923, -0.019606236, -0.03799944, -0.004933063, -0.03178778, -0.013924249, -0.027239423, 0.01804743, 0.07202119, -0.019949706, -0.023529124, -0.014486711, -0.010750287, 0.005817224, -0.019896176, 0.022520483, -0.0004712791, 0.041369088, 0.003233897, -0.049316287, -0.013234748, -0.040468663, 0.04595074, 0.007127841, 0.039366152, -0.023853896, 0.02282579, -0.03648418, -0.025735939, -0.049754784, 0.0157899, 0.011754573, -0.0028720496, 0.035922483, 0.020809408, 0.010889622, 0.05701658, -0.0030292491, -0.060735587, -0.018723357, 0.0012759115, 0.027082158, 0.024892503, 0.017439185, 1.8441358e-05, -0.045703832, -0.0042281933, -0.045064535, -0.015699742, -0.0027221492, 0.029477486, 0.036961094, 0.051913448, -0.023658212, 0.036989268, -0.034874655, -0.05655452, -0.02919984, 0.013074922, -0.02757444, -0.0026724602, 0.011528922, 0.008280169, -0.021990038, -0.07400722, 0.017457819, -0.023877285, -0.0044556367, -0.04681134, -0.0062362524, -0.0622529, -0.003872301, 0.02059797, -0.014596591, 0.033856794, 0.07664638, -0.03358504, -0.0051343814, -0.02144525, -0.033192392, -0.0114695, -0.06302846, 0.018384498, 0.0648685, 0.028083628, -0.0122644, -0.052102983, -0.05383237, 0.04812785, 0.040982842, 0.010875023, 0.0102128945, 0.0060549127, 0.019630825, -0.005979098, 0.014931352, 0.0069477814, 0.040776405, -0.0022630044, -0.050750617, -0.03377586, -0.0058556437, 0.033407547, -0.07748367, -0.03202854, -0.039253455, 1.1269719e-05, 0.028547224, 0.017767223, -0.035378978, 0.006289912, 0.027323944, 0.008927153, 0.00048306113, 0.019934082, -0.007317121, -0.012030937, -0.0069939005, -0.022506654, 0.005475066, -0.01950481, 0.036488786, 0.01414465, -0.021577476, 0.0616679, 0.017201688, 0.03971961, -0.018996647, 0.062809214, 0.009384602, -0.017095137, -0.0034147247, -0.00285777, 0.03563895, -0.063327625, -0.0044033863, 0.023522975, 0.0036804597, 0.0127450265, -0.015805269, 0.025750283, 0.035182524, 0.023769885, 0.051799726, 0.041478712, 0.01676473, -0.008480463, 0.04649681, -0.00021719822, 0.005073935, 0.04475154, 0.017750831, 0.0042020683, -0.019894127, 0.01926917, 0.04309745, 0.014262341, 0.009735243, -0.012141584, 0.008299892, -7.6839e-06, -0.014546389, 0.0023563958, -0.055676505, -0.03516511, 0.03810804, -0.0012596472, 0.025373772, 0.035546742, -0.038612105, -0.006629156, 0.03676797, 0.039395865, -0.014670612, -0.018114757, 0.026317352, 0.004626732, 0.027183075, 0.021921525, 0.033055108, -0.04060582, 0.04152123, 0.025647318, -0.011839352, -0.012497606, -0.019878758, -0.04145412, 0.05689159, -0.0041493056, 0.012747589, -0.026358847, 0.08323609, 0.05017381, -0.032031614, 0.028225008, -0.010291302, -0.04447748, -0.018773815, -0.03666142, -0.030286858, -0.03573935, 0.0027796505, -0.021036467, -0.0020954884, -0.04047878, 0.020611418, 0.03809165, -0.061190475, -0.0037708734, -0.018209375, -0.02969161, -0.016522825, -0.026424415, 0.040060777, 0.0659381, -0.07954782, -0.042098034, -0.059014395, -0.052436978, 0.009310837, 0.028058782, 0.003434959, -0.006268013, 0.010698036, 0.046930183, -0.069790296, 0.00846612, 0.009875347, 0.011969465, -0.03444026, -0.014031824, -0.04811145, -0.01205655, -0.004067591, 0.037838593, 0.015289423, -0.003691153, 0.03274468, 0.020167673, 0.011082295, 0.031069845, -0.0038480966, 0.03788777, 0.020771116, -0.01581167, 0.0045117293, 0.019392624, -0.016065497, 0.030398272, 0.045139834, 0.004572304, 0.06329074, -0.03240755, -0.019528372, 0.0012312807, 0.026594488, -0.05959222, -0.005740385, 0.06480088, 0.00961307, -0.057266563, 0.043029837, 0.010609415, -0.06666243, 0.03500554, 0.05360288, -0.032242663, 0.0031657664, -0.044119924, -0.055110976, -0.007679801, -0.04522743, 0.05588551, 0.031007094, -0.030111665, -0.059871916, -0.0032602784, -0.008877977, 0.013323112, -0.034993596, -0.0058582043, 0.057414092, 0.012226621, -0.03117819, 0.01804999, -0.04786147, 0.04103202, -0.02428112, -0.027539093, -0.030383673, -0.046957206, -0.011801445, -0.0047522355, 0.01466312, 0.03228057, 0.021187583, 0.0030187478, -0.014062688, -0.04868198, -0.013384327, 0.006273135, 0.016691478, -0.015392386, -0.009935878, -0.02121883, 0.022223884, 0.0027907921, -0.03490949, -0.008643362, 0.009010108, -0.056102708, -0.06478654, 0.0322232, -0.015856238, -0.022065086, 0.030969188, 0.056086317, 0.02752475, -0.04722857, -0.005732957, 0.031361576, 0.022158764, 0.021900136, 0.0264572, -0.018407037, -0.06287735, -0.06960178, 0.04166005, -0.036436025, -0.008341385, -0.05001008, -0.040173475, 0.02873983, -0.013677852, 0.011827057, -0.03044668, 0.012454064, -0.031925064, 0.02604176, -0.023002649, -0.03151423, -0.013035479, 0.018924931, 0.024325637, -0.010197303, 0.020831307, 0.016059348, -0.016035786, 0.03450173, -0.01602093, 0.05338978, 0.018080726, -0.02168806, -0.024362698, -0.034235355, -0.0050286, -0.008807285, -0.027307553, 0.013589232, -0.06974265, -0.0053520915, -0.0011474623, 0.0045150593, -0.0007222865, -0.037612174, 0.03130587, 0.0077259047, -0.0057634367, 0.008186938, -0.0038552682, -0.039503437, -0.032841496, -0.018094046, 0.02829314, -0.029497975, 0.005344024, -0.04448056, -0.01631676, 0.018567374, -0.0064339847, -0.012132941, -0.0013462192, -0.021499548, 0.021214735, 0.01362509, 0.08345534, 0.02990996, -0.018811466, 0.03449456, -0.001030667, 0.096406296, -0.018583253, -0.07604396, 0.07601938, 0.025073074, -0.017281344, -0.035983186, 0.0022892896, 0.016800588, 0.0036667567, -0.0004026363, -0.014130691, -0.011383824, 0.011265684, -0.010736967, -0.017126642, -0.0129294405, 0.012914905, 0.06953416, -0.003251826, -0.005190218, -0.05354141, 0.03467257, -0.0030092709, 0.0025070002, 0.0067705396, -0.025067952, -0.007173176, 0.03556723, -0.049746584, 0.041894667, 0.04484938, 0.021831239, -3.4833676e-05, 0.028520072, -0.01999165, -0.031444564, -0.03833241, 0.040214457, 0.025783835, 0.031202778, -0.020816932, 0.005413563, 0.005137391, -0.03677655, -0.008610065, -0.007940541, 0.007776618, -0.04455637, -0.041503813, 0.023744784, -0.011281501, 0.056192864, 0.041665178, 0.010182383, 0.0074246954, -0.029211111, -0.04400415, -0.029662926, 0.019959696, -0.022883676, 0.0019519664, -0.011949103, -0.019264048, 0.04399954, 0.039931685, 0.04203605, 0.051668584, 0.02572467, 0.055684704, 0.019777332, 0.030315543, 0.009113104, -0.024043689, 0.004629805, 0.008880539, -0.04052181, -0.0872645, -0.012898706, 0.0127680795, 0.010109962, 0.035774697, 0.039032158, 0.009618961, 0.021736724, -0.03483137, 0.01993895, 0.01955706, -0.0043248185, 0.0026273811, -0.051631704, -0.007476946, 0.029145798, -0.013576938, -0.057289105, -0.044165, -0.03434908, -0.0014737719, -0.044746418, -0.031592093, 0.006759782, 0.020396141, 0.041845493, -0.008153129, -0.026453614, -0.03557082, 0.03917969, 0.047316425, 0.015576928, -0.023252504, 0.023789607, 0.0062262635, 0.008482, -0.046203796, -0.027037336, -0.012990399, 0.034010988, 0.011985795, 0.0134417005, 0.03985587, 0.0075645423, -0.005201488, -0.013867902, -0.051826365, 0.039728317, -0.02519845, 0.010944947, -0.004280444, 0.01483095, -0.07833069, -0.0072904835, 0.036133792, -0.0022290992, -0.013716016, -0.032460887, -0.0014696737, 0.0070722606, -0.012394898, 0.0113901, -0.0017514167, 0.009415338, -0.027296795, -0.0063392487, -0.0033768173, -0.06749537, -0.020718355, -0.021492377, -0.04886345, -0.062439363, -0.020722194, 0.009577724, -0.005669181, -0.05511712, 0.060537852, -0.02535482, 0.006494976, -0.0053984514, -0.0608851, -0.0070405006, -0.01360127, -0.057673298, 0.029023623, -0.04577145, 0.022271013, -0.004126766, 0.0413632, -0.055668313, -0.041905552, 0.0061460948, -0.00060088094, 0.021602001, 0.007358614, 0.0013987258, 0.015192606, -0.0036672687, 0.009642333, -0.046864614, -0.08890373, -0.023927663, 0.00838006, 0.0037434115, 0.005675328, 0.008064252, -0.025791775, 0.019221017, 0.019646194, 0.0035517542, 0.0145891635, 0.003306638, 0.041371647, 0.006844561, -0.0228847, -0.033907253, 0.03132034, 0.017450647, -0.022291502, -0.010191796, -0.012074991, 0.027486011, 0.011713335, 0.032153532, 0.021180412, 0.022307511, -0.016518846, 0.0066716736, 0.0110197365, 0.039999302, -0.076961935, -0.0012363393, 0.05855541, 0.016459424, -0.0005134125, -0.010399388, -0.04508297, 0.010087422, -0.05380983, -0.016305363, -0.063257955, -0.04985314, 0.0013790036, -0.007744346, 0.006114847, 0.014471856, 0.008653095, -0.018461144, 0.017793862, 0.045419015, 0.027325993, -0.004741478, -0.011807336, 0.06888462, -0.023182835, 0.007835528, 0.039223935, -0.022354, 0.01668328, 0.039403036, -0.0057659983, 0.018953618, 0.05012771, -0.008489427, 0.0029198816, 0.04085068, -0.047159523, -0.0015672593, -0.04306057, -0.009926572, 0.013456557, -0.010533089, 0.030696664, 0.015485617, -0.0280616, -0.029834177, -0.01342121, -0.029749751, -0.014046167, 0.016545996, -0.010036197, -0.0010373264, -0.006241631, 0.02747711, 0.0069134603, -0.04089576, -0.064052984, 0.06757272, -0.0015001532, 0.04472849, 0.037512284, -0.041023824, 0.053890128, 0.025577525, -0.015900549, -0.04322808, -0.026328366, -0.019258924, -0.05618057, 0.041953065, 0.00917688, 0.014151117, 0.060602915, 0.025215482, 0.018170884, -0.078011036, 0.013873024, -0.01755566, -0.029350445, -0.03842052, -0.032323603, -0.010011023, -0.005351451, -0.013902734, -0.0058745965, -0.0415115, 0.070732854, 0.001371704, -0.016563926, 0.011785053, -0.008428725, -0.0019880808, 0.003572501, -0.008040432, 0.055297434, 0.021738263, 0.0352901, -0.014946721, 0.017885044, -0.069720626, 0.008828032, -0.0031599076, 0.04344656, -0.007147051, 0.0074979486, -0.013340145, -0.0050353874, 0.009061879, 0.035663538, -0.022853836, 0.04103932, 0.005742434, -0.035305656, -0.0120448, 0.028916048, -0.04563519, 0.058774658, -0.0031734505, -0.0025726333, 0.032006003, -0.04812682, 0.05121703, 0.0014968235, 0.015688473, 0.034223318, -0.006403249, 0.014205736, 0.024461437, -0.017430156, -0.0008664877, 0.018750763, -0.036182966, 0.0018136563, 0.021675767, -0.022224398, 0.024796456, 0.022940023, 0.04677753, -0.0013011402, -0.016562821, -0.050173745, 0.04401235, 0.0042479155, -0.03782758, -0.053803686, -0.015988657, -0.029568732, -0.012674335, 0.008167473, -0.009039339, 0.008998358, -0.07547843, -0.023796523, 0.014260805, 0.032061324, 0.00123762, 0.048858326, 0.025338938, -0.038255572, -0.022295201, 0.0013810528, 0.030869039, 0.05221619, 0.0077935224, 0.006990299, 0.014498621, 0.009032935, 0.0013964205, 0.015038927, -0.042898826, 0.04089576, 0.054260366, 0.020330125, 0.01983496, 0.0134417005, 0.011577074, 0.001288846, -0.014335083, -0.002794246, -0.013793111, 0.03868382, 0.024915298, -0.039724734, -0.0014911887, 0.015676819], [-0.021109868, -0.07884738, -0.031829223, -0.028415266, 0.013119011, 0.0035443818, 0.015433458, -0.023306, 0.016782044, 0.015467119, 0.0016524303, 0.032326292, -0.08890461, -0.023992123, -0.030423423, 0.029424235, 0.007523368, -0.011321936, 0.021969302, 0.04269167, -0.024795007, -0.0071078716, -0.024407174, 0.024147768, -0.022973323, 0.04879124, 0.004126076, 0.0071233143, 0.011749207, -0.014598799, 0.0023012818, -0.03354098, -0.02526394, -0.0040859706, -0.0057276245, 0.0034883898, 0.023347327, -0.005236584, -0.072686486, -0.055608045, -0.063727215, 0.014199523, -0.008065735, 0.039538343, 0.022790518, 0.062974095, 0.017334409, 0.033076156, -0.00093197776, -0.03621082, 0.05418647, 0.009817317, -0.054980576, 0.03603129, 0.010078558, 0.039568562, 0.030007262, 0.018342264, 0.019752285, -0.0028991406, 0.0015106727, -0.014093094, -0.04593165, 0.01840509, 0.021820433, 0.045266412, -0.0019152815, 0.017571263, -0.014656791, -0.036987595, -0.043636866, 0.021375831, 0.01152435, -0.03441974, 0.057847723, -0.025144178, -0.06552751, 0.024800673, -0.014145087, -0.03500477, -0.01327099, 0.017271085, -0.0032306486, -0.05510856, -0.070509024, 0.0011273941, -0.030902244, 0.014400606, 0.039151732, 0.018791977, -0.046011638, -0.015683977, 0.029126497, -0.0038411622, 0.028296394, 0.012518653, 0.0024827558, 0.043526217, 0.02447472, 0.007252296, 0.019827219, -0.04066085, -0.022994041, -0.0023183348, -0.0055085453, -0.0076371296, 0.019216806, -0.03287885, -0.016583849, -0.017133547, -0.011436142, 0.012419556, -0.011504131, -0.03805233, 0.010086557, -0.014023992, 0.008567219, -0.043100275, -0.03403424, -0.0072877347, -0.020825908, 0.026275352, 0.026252965, 0.030424312, -0.024731128, 0.0004851528, 0.029809067, -0.028979853, -0.040211137, 0.003972543, 0.027792022, 0.0084292935, 0.062104, -0.0047296565, -0.047811825, -0.0023134467, -0.0010096333, 0.06299276, -0.04843396, 0.052265186, -0.047699843, 0.014432156, 0.02975752, 0.026179366, 0.04431366, -0.016757824, -0.022531664, -0.048081454, -0.0141046485, -0.054363552, 0.007212746, -0.024977537, 0.0043173824, -0.02559367, -0.005866827, -0.043195594, 0.0086141005, 0.02651043, -0.02730187, 0.026711289, -0.013674488, 0.006682933, 0.023063144, 0.04024313, -0.02550124, -0.058764927, 0.023321105, -0.015873283, -0.022741968, 0.05634394, 0.06546974, 0.010364739, 0.014800104, 0.034681257, -0.03312565, -0.025274606, -0.027218772, -0.023847252, 0.0055396515, 0.013473906, 0.0073242853, 0.014225075, -0.037106246, 0.008440737, -0.034843903, 0.026031386, -0.023275781, -0.006041802, -0.034044906, 0.016053341, 0.013117234, -0.005622307, 0.023326885, -0.015243152, -0.05607259, 0.010884332, -0.0055556498, -0.021402216, 0.0100440625, 0.06969314, 0.028462594, -0.021243183, 0.014994521, -0.02725321, -0.020665487, -0.07698454, 0.026765948, 0.008930278, 0.04684841, -0.05387496, -0.0020472626, 0.058804028, 0.03872868, 0.040430658, 0.032563422, 0.023293555, 0.034861233, -0.037974566, 0.044276554, 0.07335839, -0.023576181, 0.016773155, 0.033855155, -0.02196019, -0.015651537, -0.0017686357, -0.019401947, 0.0020557058, 0.018131183, 0.011270415, 0.046166282, 0.008341028, -0.039096627, -0.0428472, -0.011854081, -0.01713888, -0.027999548, 0.036817845, -0.052164536, 0.06397662, -0.042571686, 0.01902739, 0.042423707, -0.018008534, -0.033528537, 0.010618814, -0.037891913, -0.025631888, -0.06599944, 0.0138969, 0.051725265, -0.023926355, -0.0144130485, -0.0018170733, -0.028233739, -0.009895473, -0.021250736, 0.003181767, 0.003974098, 0.055872615, 0.0009989681, -0.026275352, -0.027940223, -0.031910323, 0.025493242, 0.016990347, 0.03409823, -0.026909927, 0.027637823, -0.043819506, -0.046748865, -0.076117106, 0.008841735, 0.014628129, -0.014478372, 0.038767785, 0.01804275, 0.028611463, 0.04916052, -0.0015917723, -0.06723838, -0.00087620795, 0.009549855, 0.024548488, -4.7715395e-05, -0.006999887, 0.021195188, -0.03547048, -0.019857602, -0.048117116, -0.02073459, -0.01665095, 0.0076541267, 0.043503106, 0.051126905, -0.029702416, 0.047873594, 0.011514796, -0.061233293, -0.016902471, 0.022580769, -0.00936115, -0.03003126, -0.001652208, -0.0063175405, -0.007104761, -0.06768187, 0.017940016, 0.025667438, -0.0072847353, -0.04612673, -0.024918878, -0.06319718, -0.010296748, 0.028707001, -0.03137862, 0.05501524, 0.08120082, -0.01760732, -0.052673355, -0.039618332, -0.0264631, 0.020796815, -0.08668627, 0.031864773, 0.04804468, 0.017533936, 0.013342091, -0.06332694, -0.03830369, 0.044878468, 0.035629123, 0.022432346, -0.00016175464, 0.014975273, 0.014170417, 0.017040672, 0.042309504, 0.017234422, 0.021873204, 0.024364958, -0.052925482, -0.012100046, -0.0051521515, 0.0037834586, -0.047346715, -0.016517526, -0.03736132, 0.032871738, -0.018544901, 0.02364195, -0.031059666, 0.012833108, 0.03167236, 0.004275833, -0.0034695035, 0.01584351, 0.00019997139, 0.0073327282, 0.002535526, -0.021817321, -0.01182853, -0.033729397, 0.030604955, 0.018299604, -0.0059135985, 0.07097473, -0.007350004, 0.03886733, -0.023489973, 0.049630787, 0.0147082005, 0.0027446907, 0.018918183, -0.015047625, 0.033757836, -0.027043685, -0.013461518, 0.04616139, 0.005449887, 0.006957227, -0.009689392, 0.033836603, 0.034434184, 0.002631179, 0.05875426, 0.02598906, 0.030995237, -0.007216745, 0.06342559, 0.01194118, 0.030058365, 0.044544734, 0.032254275, 0.0015959939, 0.0061201937, -0.0011305049, 0.048592158, 0.019535093, -0.0024283607, -0.022948718, -0.003349979, 0.007966527, -0.02256477, -0.00055547606, -0.04753042, -0.030215234, 0.019277241, -0.014811658, 0.010208761, 0.0381421, -0.016651839, -0.013749144, 0.041441236, 0.016674738, -0.025448803, -0.02284473, 0.030589178, -0.011788869, 0.013951781, 0.015046292, 0.02728765, -0.04561392, 0.025766091, 0.009705722, -0.021824433, -0.0040576416, -0.0014217548, -0.029053176, 0.012421333, 0.0059796516, 0.0036420343, 0.014442323, 0.07858075, 0.048572604, -0.04245081, -0.014890313, -0.029188713, -0.079705924, -0.014118869, -0.040855933, -0.0008709865, -0.011201953, 0.0046604443, -0.014664901, 0.011208508, -0.042668782, 0.019279685, 0.04088037, -0.045945868, -0.009716832, -0.03033366, -0.040029828, -0.040982578, -0.02820752, 0.029709527, 0.08043826, -0.05419669, -0.032112073, -0.04910497, -0.044136964, -0.004089637, 0.022040403, -0.011781536, -0.013147451, 0.00038283409, 0.045129765, -0.03764528, 0.010047673, 0.052700013, 0.016869975, -0.04162249, -0.006511957, -0.04162782, -0.029984154, 0.002097533, 0.031056888, 0.025551898, 0.022287033, 0.014527699, 0.023365378, 0.0019250578, 0.025746094, 0.0048270314, 0.042898975, -0.0030253448, 0.004415368, 0.012288019, -0.020950003, 0.013217664, 0.028871424, 0.02697836, 0.009785711, 0.059069827, -0.024124993, -0.01538802, -0.00664816, 0.05274906, -0.04583166, -0.009025375, 0.05921908, 0.048487283, -0.053272374, 0.03292418, 0.021738667, -0.058775593, -0.00037461304, 0.049404487, -0.026504206, -0.0036843617, -0.031409726, -0.05249071, 0.011202925, -0.031013146, 0.04008404, 0.072163895, -0.001945166, -0.03118576, 0.0091269165, -0.03174771, -0.004480248, -0.015383132, -0.032845076, 0.045773003, 0.022679422, -0.02536348, 0.029611988, -0.059723232, 0.026109153, -0.025203506, -0.02530038, -0.031453278, -0.0455206, -0.00026040716, 0.009022376, -0.0075944685, 0.03467415, 0.034639485, 0.005173482, -0.035439372, -0.015398019, 0.01965873, 0.016607735, 0.018071966, -0.04300007, -0.00705188, -0.002173911, -0.013188891, 0.0011180622, -0.009385323, -0.013509178, -0.005194368, -0.060716648, -0.057667304, 0.055949327, -0.00059324846, -0.018281162, 0.010341965, 0.061625402, -0.014534809, -0.07435736, 0.024574706, 0.013155451, 0.004277499, 0.019165259, 0.013419857, -0.025995169, -0.07066988, -0.0692612, 0.045922317, -0.02396368, -0.032150872, -0.05827433, -0.035780437, 0.025036417, -0.028722554, 0.021644901, -0.018095411, -0.013391084, -0.030156573, 0.025729652, -0.009946799, 0.013547617, -0.012181424, 0.04681019, 0.040819936, -0.014911144, 0.000982526, 0.0048908554, -0.021915976, 0.028546026, 0.007290512, 0.0426499, 0.0030342324, -0.01773213, -0.04799669, -0.011637223, 0.0033604081, 0.016750019, -0.033394333, -0.020907674, -0.073737, 0.01728486, 0.006406194, 0.0062582153, -0.03491767, -0.009965685, 0.025523905, 0.007864096, -0.015122947, -0.012515431, 0.026114484, -0.055878226, -0.010879999, -0.033731397, 0.0082681505, -0.06797428, -0.0192608, -0.025599891, -0.010221204, 0.01782856, -0.007087208, 0.0027426074, 0.014870761, 0.0030231231, -0.008021074, 0.0068656844, 0.077613786, 0.032732204, 0.011826753, 0.046057187, 0.008081511, 0.07038815, -0.0042486144, -0.058907405, 0.08599658, -0.0069874446, -0.0364019, -0.0359553, -0.0063352603, 0.017309522, 0.030396095, 0.020867236, -0.023935242, 0.021686396, -0.023957461, -0.004772317, 0.0018579563, -0.026115818, -0.0149276415, 0.06877949, -0.0012264912, -0.004589121, -0.03693805, 0.047316782, 0.0040758615, 0.016864141, -0.0025708543, -0.013037245, -0.029232705, 0.028962078, -0.054805934, 0.04529752, 0.03651511, 0.03365385, 0.012150983, 0.014163307, -0.030203957, -0.024150323, -0.023823258, 0.056927856, 0.029126497, 0.02980196, -0.036860503, 0.009564409, 0.014620797, -0.012681074, -0.009498196, 0.034074236, 0.04291119, -0.033433437, -0.011693883, 0.03811988, -0.015495116, 0.074676424, 0.030679164, 0.0033905704, 0.035045654, -0.05188413, -0.067046404, -0.023170019, 0.022525221, -0.0058306656, -0.01878309, -0.006858685, -0.03147994, 0.038680688, 0.030770708, 0.031663913, 0.016015487, 0.024707798, 0.07081298, 0.004902854, 0.037088916, 0.009088033, -0.008147723, 0.032403365, 0.003047564, -0.008323697, -0.08788075, -0.008431057, -0.006022027, 0.010751351, 0.028612794, 0.02148959, -0.010810898, 0.025441691, -0.047225688, -0.0150948465, 0.0050250585, -0.019019945, -0.01623101, -0.04404881, -0.01660429, 0.03192032, -0.046304483, -0.033129483, -0.06114325, -0.023903245, 0.0068354663, -0.0019328344, -0.031398173, 0.0034883898, 0.0021674675, 0.028391272, -0.0049812873, -0.012637081, -0.04592143, 0.027941559, -0.0022152385, -0.017176209, -0.043177374, 0.024183206, -0.011684106, 0.0031965426, -0.037422203, -0.023676611, -0.023344103, 0.023766201, 0.002550746, -0.015444902, 0.012154705, 0.024715409, -0.00018136295, -0.026300235, -0.055714693, 0.054833043, -0.03608928, 0.00216058, -0.00051903684, 0.0058871577, -0.07288157, -0.025641887, 0.0041522947, 0.006308653, 0.016577628, 0.009202627, 0.0336243, 0.0025271939, -0.013739367, -0.00085809943, -0.018433096, -0.009479088, -0.0311351, -0.006788647, 0.0019952701, -0.055174325, -0.03253312, 0.023246784, -0.06000208, -0.05248138, 0.004194733, 0.025080856, -0.026198834, -0.029751299, 0.04657889, -0.028673675, 0.0006212444, 0.006750145, -0.058189005, 0.01264508, -0.015953718, -0.055096116, 0.016283004, -0.0390473, 0.04167937, -0.0025666882, 0.047086596, -0.018835083, -0.011633891, 0.0037132464, -0.0108725, 0.0059044887, 0.003048008, -0.0056565236, -0.008232267, -0.010240368, 0.01579685, -0.03948621, -0.055908, -0.0008443236, -0.01518716, -0.012253802, -0.0075009265, 0.016636731, 0.037197344, 0.027774915, 0.004158516, 0.026256688, 7.998855e-06, -0.004005649, 0.030040145, 0.018821632, -0.011672996, -0.031142654, 0.032405585, 0.00096519524, -0.023789484, -0.036097057, -0.013098125, 0.047070596, 0.026569808, 0.008694089, 0.049563922, 0.041028798, -0.025898516, -0.0017317522, -0.0063442034, 0.034344863, -0.08239888, -0.008282759, 0.072444744, 0.0019979363, -0.003451395, -0.00627999, -0.04279343, 0.027600717, -0.04468161, -0.010971097, -0.04755231, -0.031618588, -0.0121947, 0.008947386, 0.017014066, 0.004164293, 0.005936706, 0.0061946693, 0.021774884, 0.015510669, 0.02074192, 0.004574012, 0.00077855523, 0.048593044, -0.0007536699, 0.010935324, 0.050544765, -0.01440505, -0.020283986, 0.020997884, -0.023381542, 0.015321141, 0.034167, -0.020401524, 0.039322373, 0.030633837, -0.054369107, 0.001618435, -0.02249278, -0.0036616982, 0.004241171, 0.011596562, 0.039967615, 0.025375925, -0.009149357, -0.033356115, -0.016151467, -0.038346514, -0.0025560786, 0.009059926, 0.0020485958, -0.015195325, -0.021358721, 0.01241139, 0.014604132, -0.015983045, -0.078830495, 0.04842818, 0.009767824, 0.06425747, 0.026050162, -0.045012224, 0.04779227, 0.028152416, -0.02253233, -0.015949717, -0.010026815, -0.033624258, -0.024524268, 0.029049175, -0.00737139, 0.038149208, 0.06712284, 0.01037807, 0.019585641, -0.07443157, 0.007438047, -0.025636332, -0.021644901, -0.04344934, -0.049026765, 0.0027609381, -0.0017384179, -0.030486304, -0.004114661, -0.0661772, 0.07156221, -0.0009914137, 0.019940257, -0.0120203905, 0.0005394783, -0.00879252, -0.007935753, -0.0025463023, 0.06998154, 0.03260289, 0.04471849, -0.031168872, 0.009202239, -0.050015956, 0.0077677774, -0.014178665, 0.0026587306, -0.021083206, 0.0031346625, -0.010185431, 0.015588659, 0.030980011, 0.043133825, -0.030056143, 0.04553193, 0.013193667, -0.038579367, -0.025845189, 0.024192426, -0.0221195, -0.0023809928, -0.0127370665, -0.009165799, 0.029259814, -0.05628439, 0.062785126, 0.010517606, 0.008509123, 0.018441806, -0.023519745, 0.01527337, 0.017888106, -0.014377498, 0.003975431, -0.0062501053, -0.020484181, 0.00075011485, 0.0169238, -0.006860796, 0.032565117, 0.008182829, 0.055060565, 0.010753587, -0.0278769, -0.016813593, 0.057446003, -0.011739653, -0.026410887, -0.01152324, -0.001913504, -0.025049971, -0.019514985, 0.0069736685, -0.009303779, 0.0018912848, -0.056763433, -0.0056688553, 0.016298058, 0.05352123, 0.024057891, 0.056152854, -0.0009278672, -0.028735887, -0.023599735, -0.008825848, 0.03885844, 0.021450263, 0.004579456, 0.030106802, 0.017496163, 0.04292008, -0.0010211872, 0.009413653, -0.060083404, 0.046636883, 0.03191832, -0.01332476, 0.015490672, 0.0004310494, 0.016645618, -0.01124128, -0.0061417874, 0.00435771, -0.033392776, 0.053795855, 0.026993914, -0.061367217, 0.016276782, 0.024460888], [-0.05007997, -0.085527524, -0.029385837, -0.03092635, 0.016658524, 0.044325422, 0.014592333, -0.011487696, 0.03083388, 0.025807044, 0.008734495, 0.006459877, -0.04423615, -0.014647667, -0.014433214, 0.027980587, 0.030093135, -0.038251165, 0.043997597, 0.040873777, -0.02774486, 0.027351985, -0.03534131, 0.012059977, -0.027621035, 0.04024149, 0.031003082, 0.016160637, -0.004026387, 0.0068841083, -0.011949801, -0.049264953, 0.005275011, -0.004174929, 0.006475862, 0.0037741845, 0.0046038334, -0.0030662713, -0.043368507, -0.043970544, -0.061817285, 0.03673328, -0.029413382, 0.05585001, -0.010215493, 0.03597286, 0.024613295, 0.04001597, -0.011585374, -0.04111774, 0.013256679, -0.008572119, -0.05931469, 0.012014419, -0.012202618, 0.028261438, 0.043552015, 0.021472752, 0.019302653, 0.0049082967, -0.0117579745, -0.01412949, -0.05418899, -0.0025321085, 0.013798836, 0.0066126003, -0.0072718193, -0.0144312475, 0.0019472839, -0.03963773, -0.018882604, 0.028723052, 0.036080085, -0.0073863, 0.008829917, 0.017347008, -0.06779046, -0.0022291213, -0.00076238695, 0.0020527884, 0.008679038, 0.009914965, 0.026520245, -0.047012962, -0.054372456, 0.025647681, 0.004351508, -0.0016782351, 0.054950885, 0.005633302, -0.016849244, 0.0035055662, 0.058286697, -0.010932137, -0.0025894104, 0.0040411428, 0.02565555, 0.034385126, 0.020364095, 0.023843037, 0.033084642, -0.03781341, -0.008074047, -0.008513403, 0.030243522, 0.010095725, 0.00969953, -0.011261686, -0.0002774105, 0.036694914, 0.008556564, 0.013026487, 0.015314387, -0.07241594, 0.005486942, 0.0027150812, 0.006968463, -0.011765352, -0.035973843, -0.027698748, -0.003042908, 0.016698733, 0.0041765277, 0.029187124, -0.035921708, -0.011250372, 0.00791702, 0.0108972145, -0.067042835, 0.0070498665, 0.028106993, -0.0004584159, 0.04539141, -0.0045571066, -0.016469156, 0.0052442383, -0.021037946, 0.046421003, -0.004663472, 0.023737287, -0.03524976, -0.017985938, 0.028437527, -0.018546907, 0.024570994, -0.01973992, 0.0063192043, -0.06425644, -0.014934837, -0.016265895, -0.014676686, 0.009355226, 0.008592838, -0.004352492, 0.025056463, -0.043502785, -0.0046800724, 0.026399247, -0.030759117, 0.020115212, -0.0018169403, 0.006598828, 0.032641966, 0.0066972002, 0.008943537, -0.062993824, 0.025195904, 0.0019871248, 0.0053834356, 0.0033367956, 0.08963703, 0.009465034, 0.02722324, 0.024778068, -0.061439537, -0.004176405, 0.019730574, -0.020320348, 0.033750135, 0.035709683, 0.0045998986, 0.028807897, -0.025187789, -0.027765641, -0.03037285, 0.037090372, -0.030046899, 0.010086625, -0.0023530705, -0.0041867034, 0.015630899, -0.007019862, 0.027769515, -0.01760081, -0.032980368, 0.0362365, -0.0526347, 0.014377142, 0.018415948, 0.05786468, -0.0017256998, -0.0077871676, 0.02525501, -0.0080842525, -0.03111621, -0.05340053, 0.024238495, -0.018696679, 0.05044149, -0.021028416, -0.019550553, 0.033179082, 0.043111753, 0.06519146, 0.02380418, 0.03862695, 0.033077266, -0.036177967, 0.05735056, 0.04301633, -0.0018090705, 0.00844651, 0.027481345, -0.021091066, -0.023330025, 0.018904, -0.004519725, -0.0012867125, 0.005028803, -0.015071161, 0.059443805, -0.020945966, -0.040756717, -0.04648052, 0.0072249384, -0.027782364, -0.029736044, 0.051519655, -0.06825921, 0.040003672, -0.02094154, 0.025758842, 0.048407145, -0.022482792, -0.016690863, 0.007054385, -0.04794283, 0.027418386, -0.03186187, -0.0058792336, 0.03184269, 0.0040922966, -0.0440699, -0.0034804193, -0.03064107, 0.0048537, 0.0017665244, -0.021495624, 0.0010329114, 0.042492747, 0.03206157, -0.035685614, 0.0043200287, -0.041456144, 0.018088738, 0.001520839, 0.02548635, -0.025325634, 0.0039019457, -0.03921159, -0.017495058, -0.06636012, 0.026509916, 0.0039742496, -0.020609349, 0.0032295694, -0.00197532, 0.025482414, 0.07181194, 0.04091706, -0.0584136, -0.029425185, 0.044197783, -0.030589918, 0.0532732, 0.0146437315, 0.016049229, -0.050291963, 0.007924713, -0.026784375, -0.0028835442, 0.02232847, 0.023243457, 0.039798565, 0.06572071, -0.017187644, 0.05246403, 0.004826647, -0.078737356, -0.031487443, 0.01829237, -0.023678632, -0.0012512984, 0.024333425, 0.0054901694, -0.040659327, -0.01971877, 0.022743724, 0.024259645, -0.0038384956, -0.049697794, -0.035533138, -0.049542367, 0.03113994, 0.0053512324, -0.016263435, 0.03864564, 0.09702678, -0.015918639, -0.031819575, -0.035744637, -0.025519304, -0.002492575, -0.053282484, 0.027190162, 0.06444186, 0.011271031, 0.00083321513, -0.060806017, -0.025066301, 0.03727925, 0.030246595, 0.0068003684, 0.005975147, 0.021486523, 0.008294002, -0.046615783, 0.016506907, 0.026061337, 0.021568174, 0.02251919, -0.08088582, -0.021073237, -0.006676051, 0.046577416, -0.08548965, 0.017960854, -0.041845698, 0.028014524, 0.010536926, 0.044796873, -0.020367475, 0.0027583651, 0.029393706, -0.023411183, 0.008437748, -0.016767595, 0.0007397613, -0.010732441, 0.016971225, -0.0051035658, -0.019287897, -0.03939229, 0.034941055, 0.019433243, 5.1153704e-05, 0.065960735, -0.0070660976, 0.03589613, -0.00576758, 0.069363445, 0.04815925, -0.023502178, 0.010472737, 0.0041355803, 0.0782455, -0.05799905, -0.0064330706, 0.007463031, -0.016280157, 0.021424733, -0.031419195, 0.06741001, 0.010729489, 0.01729979, 0.063817196, 0.040751304, 0.010408304, -0.03543968, 0.029073011, -0.015308729, 0.036810502, 0.020900225, 0.046316728, 0.018314503, -0.0077360147, 0.037271377, 0.041241203, -0.0001996962, -0.006541772, -0.025677193, 0.025302395, -0.0033947122, 0.004874112, -0.0028429655, -0.041123644, -0.010336984, -3.3446653e-05, 0.0018730125, 0.010796014, 0.051136002, -0.0052213673, -0.009391132, 0.011702394, 0.04033273, 0.0023722686, -0.0027741047, 0.025708672, 0.02611495, 0.020295724, 0.024264317, 0.032184534, -0.06860512, 0.034420542, 0.040524557, -0.011552868, 0.016491415, -0.033631593, -0.059977382, 0.025924109, 0.02068651, 0.056123488, -0.0015198553, 0.071207926, 0.035812512, -0.038353477, 0.020417707, -0.018324832, -0.052767016, 0.017939212, -0.030393172, -0.060894553, 0.012874994, -0.0014903436, -0.03270247, 0.010587341, -0.01980715, 0.023424461, 0.036742426, -0.042866807, 0.016946817, -0.008539226, -0.0024996456, -0.0188777, -0.043276526, 0.041369576, 0.064835355, -0.039768074, -0.036379445, -0.026506472, -0.035755947, -0.00808622, -0.005331052, 0.0025091139, -0.004390119, 0.007958828, 0.049556136, -0.054191448, 0.026660578, 0.021734422, 0.038680073, -0.036821324, -0.019133454, -0.051044513, -0.031882774, 0.005040608, 0.02436687, -0.0046702963, -0.017241258, 0.009111754, 0.013970296, 0.023198206, 0.047177486, 0.0181576, 0.024644528, 0.012739733, -0.04932791, 0.0048576347, -0.043222666, -0.024813237, -0.015657952, 0.03561872, 0.025285669, 0.058075197, -0.031945243, -0.027496101, 0.014154821, 0.04963139, -0.043558363, 0.0021690216, 0.05864576, 0.04262678, -0.0695651, 0.026060352, -0.002452565, -0.06549248, 0.02737953, 0.03909914, 0.00322711, 0.022924239, -0.009057649, -0.051657375, -0.007979486, -0.02561817, 0.048388455, 0.051437017, 0.020436889, -0.041398842, 0.0097821625, -0.00927456, -0.029474003, 0.0033363036, -0.0006158119, 0.03276247, -0.017758206, -0.02143783, 0.040151726, -0.036446176, 0.0042570704, 0.011967508, -0.023314286, -0.012657345, -0.053330686, 0.010102857, -0.015821742, -0.026185533, 0.0048979055, 0.0120949, 0.007283501, -0.012767768, -0.021092542, 0.03466758, 0.021068195, 0.018176977, -0.038255103, -0.004567497, -0.010518481, 0.04579105, 0.016915645, 0.020602155, -0.02493196, -0.010272057, -0.08374255, -0.07489296, 0.037854727, -0.019294785, -0.025812946, 0.033618562, 0.034894697, -0.015343899, -0.04095641, -0.0011052152, 0.0316848, 0.017549902, -0.0044326656, 0.015770465, 0.00033283723, -0.082644716, -0.07427518, 0.022610677, -0.025280751, -0.034949787, -0.07111939, -0.03694478, 0.024569519, -0.043271117, 0.033081938, -0.038321998, -0.04061506, -0.0018631753, 0.01214212, -0.020770371, 0.009273577, -0.0060705673, 0.018755702, 0.016983522, 0.00021574322, 0.0015546547, 0.041833896, -0.015763702, 0.04262432, 0.005933092, 0.024686089, 0.011576969, -0.034518912, -0.012569055, -0.032538675, 0.011111175, 0.019055247, -0.062344562, -0.04301633, -0.060393833, -0.0038050485, -0.020501817, 0.050183263, -0.01961056, -0.038919855, 0.04152107, 0.002312, 0.023880912, -0.026513359, 0.03496651, -0.03262721, -0.033350248, -0.005955472, 0.014086206, -0.018806858, -0.0132979965, -0.010474705, -0.0059630955, 0.014944752, 0.010513931, -0.011639066, 0.046207286, 0.00077419163, 0.024351131, 0.014580773, 0.053416274, 0.014498142, 0.009756586, 0.04482835, -0.0047833635, 0.048521258, -0.0039473814, -0.057291165, 0.086878665, -0.008391667, -0.035110623, -0.012845974, 0.009916196, 0.01257004, 0.045676816, -0.0012589222, -0.019574163, 0.015330372, 0.011883892, 0.019513171, 0.020098241, -0.023594892, 0.03483764, 0.046020135, -0.025963949, -0.010745014, -0.05593461, 0.03649817, 0.013730343, -0.013422929, -0.0014373454, 0.003034054, -0.046698418, 0.044395514, -0.0629466, 0.04866734, 0.03176104, 0.0014864088, -0.012560203, 0.040928867, -0.020369995, -0.01879911, -0.014353533, 0.023145085, 0.006859023, 0.021710813, -0.010301078, -0.013318654, -0.0055635804, -0.039342612, -0.0079769045, 0.0006460615, 0.030298734, 0.00850332, -0.018039275, 0.008552014, 0.010210083, 0.011067088, 0.0154163875, -0.018420253, 0.03656039, -0.063759156, -0.035189208, -0.008078842, 0.029527001, 0.025666863, -0.033360086, -0.017031234, -0.012197208, 0.051665243, 0.038450863, 0.0152575765, 0.042650387, 0.0419726, 0.03998744, 0.035321143, 0.024488915, 0.0075674285, -0.0035020614, 0.042005062, -0.01674792, -0.03432955, -0.057787947, -0.023697939, 0.019322328, -0.013296029, 0.06162841, 0.051354386, 0.005460166, 0.03521859, -0.054301627, 0.0042998623, 0.006366669, 0.018435009, 0.01333636, -0.06149856, -0.04174536, 0.04077934, -0.017977577, -0.040381916, -0.054604612, 0.001842886, -0.015693612, -0.016509736, -0.0053849113, -0.013960536, 0.032887407, 0.005438032, 0.015422842, -0.019302102, -0.055309944, 0.007204803, 0.012687902, 0.0010907052, -0.037875384, 0.021614408, -0.010744, -0.006764217, -0.07091084, -0.0019272405, -0.0052238265, 0.008918452, -0.013909381, 0.0029035108, 0.0422746, 0.030556468, 0.025669077, 0.0025773598, -0.051026806, 0.027093789, -0.040176563, 0.011259718, 0.025824752, 0.009296033, -0.059402242, 0.020260803, 0.00924013, 0.00538196, 0.022487955, -0.0154464515, 0.0061664805, -0.00856431, 0.002039754, 0.007956369, 0.014564543, -0.014107111, 0.01547498, 0.0084537035, 0.008595298, -0.06815247, -0.032108158, 0.024360968, -0.051763617, -0.050894987, 0.021711798, 0.023827912, -0.03825953, -0.052917894, 0.049347587, -0.0044975914, -0.010535696, 0.025916731, -0.04795242, 0.020948919, -0.021281907, -0.043010183, 0.028104534, -0.017110914, 0.06826265, -0.0020274576, 0.038491197, -0.054356717, -0.008428065, -0.01584855, -0.03183285, 0.0445234, -0.0027682025, -0.0033862279, -0.00085178297, 0.017401114, 0.015725829, -0.03910504, -0.07154436, -0.026354488, 0.015820637, 0.010682271, 0.02441409, 0.031119158, 0.02413914, 0.02212693, 0.004242806, 0.054132424, -0.013673779, 0.0084743, 0.009350061, 0.011503682, 0.008168854, -0.015768867, 0.023704201, 0.014238438, -0.003595331, -0.034790423, 0.019647203, 0.041462045, -0.0019959782, -0.010809172, 0.06196386, 0.027571848, -0.007379168, -0.03615977, 0.0043028137, 0.010128434, -0.052580107, -0.008862749, 0.04358689, 0.0058465246, -0.0075812005, 0.020493945, -0.023083232, 0.033335492, -0.051317006, -0.034922242, -0.048261553, -0.03164988, 0.0030599693, 0.02055641, 0.0026742567, -0.019231826, -0.010734408, 0.005964817, 0.044796873, 0.03437037, 0.02843064, 0.030727146, 0.011521388, 0.021429466, -0.043130443, -0.0052447305, 0.06624405, 0.0053376923, 0.04251365, 0.00028798552, -0.024280425, 0.006488989, 0.036521286, -0.024903493, 0.03085214, 0.010088347, -0.052566335, -0.011008867, -0.025524715, 0.021121563, 0.010239103, -0.017413164, 0.040005147, 0.05494056, -0.0029429982, -0.021056574, -0.0055718194, -0.0221016, 0.00014872693, 0.04065195, -0.0025286654, -0.0051316023, -0.030570887, 0.010636035, 0.0393372, -0.028162083, -0.045333616, 0.04632214, -0.004531038, 0.052106936, 0.027475443, -0.025217794, 0.08201119, 0.016039515, -0.027520694, -0.026379574, -0.013136665, -0.034558263, -0.03050335, 0.027051948, -0.029446827, 0.03155151, 0.04322095, 0.06390278, -0.00082239415, -0.0759362, 0.004033273, -0.044965584, -0.034294624, -0.046930082, -0.011183479, -0.00250149, 0.017768042, 0.05409701, -0.00044759494, -0.007554517, 0.06237604, 0.009571645, -0.021042865, 0.007566814, -0.005575016, -0.032203592, 0.011172166, -0.03203009, 0.06761634, 0.022378761, 0.022958178, -0.015184597, 0.023567103, -0.032192405, 0.0075776344, 0.002887725, 0.000615566, -0.014189252, 0.028215203, -0.016945157, -0.00090994575, 0.036914285, 0.018664708, -0.023461845, 0.044869673, -0.018435992, -0.0101053165, -0.01461794, 0.049220197, -0.050980568, 0.03863974, 0.025811473, 0.020345831, 0.034733366, -0.05074989, 0.07537351, 0.0077609764, 0.017599335, 0.023589237, 0.010010879, 0.012964021, 0.014329124, -0.03271476, -0.008975754, 0.008940217, -0.0012864665, 0.008196398, 0.007845454, -0.015720911, 0.019732542, -0.00074172876, 0.038073607, -0.028300786, -0.0680787, -0.032282416, 0.059779007, -0.011825852, -0.011770763, -0.021287812, 0.018528463, -0.027608246, -0.0051244698, 0.0072844843, -0.028339647, -0.007545233, -0.056703884, 0.030151175, -0.0011308535, 0.028868398, 0.004966029, 0.025705721, 0.022090284, -0.0215967, -0.021332879, 0.005382944, -0.010445931, 0.053718153, 0.0034095913, 0.05368237, 0.04579831, 0.020409344, 0.022870624, -0.0022695768, -0.04638707, 0.032433417, 0.045186184, -0.010580947, -0.02886151, 0.009705432, 0.040928867, -0.019302653, 0.015583067, -0.010969519, -0.0028928898, 0.053660236, 0.016536666, -0.051035658, -0.0067677824, 0.009999566], [-0.010332934, -0.08289483, -0.029978992, -0.019340003, 0.012586617, 0.020738628, 0.041661616, -0.021304654, 0.029279795, 0.03560192, 0.012621158, 0.04655773, -0.06756574, -0.022154015, -0.029061304, 0.03164538, 0.021695573, -0.039476298, 0.033921443, 0.04988373, -0.014441232, 0.020409565, -0.0027984793, 0.03623021, -0.031020056, 0.026144484, 0.0038862317, 0.007684985, 0.019769216, -0.018676559, 0.0008335961, -0.05853159, -0.0001352026, 0.010299822, 0.030811068, 0.029973079, 0.022200616, -0.014501527, -0.041037004, -0.03144876, -0.04193141, 0.0036261482, -0.026334155, 0.04515583, 0.0157346, 0.02321908, 0.003704684, 0.035625733, -0.00010566855, -0.02535432, 0.036345653, 0.019680716, -0.047754824, 0.023286322, -0.011349252, 0.02348877, -0.021531042, 0.050915483, 0.003342151, -0.031383354, -0.0049609034, 0.0038182726, -0.046453286, -0.00031424643, -0.0063239667, 0.03225926, 0.029022725, -0.014557222, -0.0141376145, -0.055027768, 0.0131560415, -0.0025797843, 0.02058309, -0.01671321, 0.07031271, 0.008476376, -0.060141552, 0.010588929, -0.020634696, -0.029759698, -0.022599172, 0.009739902, 0.0028430359, -0.051451795, -0.070721485, 0.008685055, -0.015583351, 0.0227868, 0.04887896, 0.017347628, -0.028418504, -0.01685674, 0.055462707, 0.016196832, -0.010982171, 0.021653675, 0.00040826484, 0.04356896, 0.034539104, 0.021314695, 0.009444511, -0.013442797, -0.022683788, -0.027219564, 0.0071055456, 0.0053382036, 0.013938029, -0.033660237, -0.008347611, -0.009494866, -0.019016251, -0.0124182, 0.006422686, -0.073414505, 0.022466319, 0.009293467, 0.039157454, -0.019964611, -0.03453338, -0.022209201, -0.035997618, 0.009057655, 0.008009655, 0.022509739, -0.014436838, -0.032120787, 0.013362932, 0.0001504295, -0.045298185, 0.006845616, 0.045041576, 0.0084142415, 0.031448964, -0.0050512427, -0.047612164, 0.025960537, -0.032095853, 0.031444672, -0.009659372, 0.012603581, -0.034140956, -0.02500727, 0.006732129, 0.004677213, 0.034012396, -0.0094995415, 0.030281704, -0.017591873, -0.026321894, -0.006355238, -0.0124087995, -0.0060637803, 0.010745081, 0.012603274, 0.0047074626, -0.038523033, 0.00850172, 0.019248538, -0.014539339, 0.0149661, -0.0023153063, -0.011519303, 0.040325735, 0.0180636, 0.0015182956, -0.038235255, -0.013710341, 0.008697115, -0.0124541735, 0.049260553, 0.08417839, -0.004373084, -0.0063897795, 0.021104893, -0.052220702, -0.00018619739, 0.019230142, -0.038836155, 0.020085199, 0.05030232, -0.009205785, -0.004302212, 0.008108988, -0.006858032, -0.0061661787, 0.05490023, -0.028370883, -0.010989529, 0.0023512787, 0.02208207, 0.0036017238, -0.025119683, 0.03734903, 0.009557996, -0.018102126, 0.038514655, -0.038966145, 0.008472697, 0.005503758, 0.019591808, 0.022675205, -0.0041237306, 0.044329286, 0.004230421, -0.050006364, -0.038970236, 0.031307425, 0.0069925194, 0.031675015, -0.04888141, 0.015995603, 0.02610496, 0.041754816, 0.04030448, 0.0107863685, 0.036144596, 0.042487342, -0.021407489, 0.030472143, 0.06281086, -0.031051021, -0.010814982, 0.063664384, -0.03378328, -0.051482048, 0.02671677, -0.0006368727, 0.024352001, 0.02351442, -0.006924867, 0.070767276, 0.0052434695, -0.026053736, -0.04077702, -0.0040773344, 0.0019335608, -0.055044115, 0.037186746, -0.053115714, 0.012920586, -0.008622308, 0.022377716, 0.027281698, -0.020825084, -0.019547775, -0.0007419281, -0.0427743, -0.011051868, -0.028389685, -0.016597116, 0.0490253, 0.014095408, -0.013195182, -0.031639863, 0.0011994761, -0.01586418, -0.0006105067, 0.02040895, -0.007869752, 0.037132174, 0.013306471, -0.044577822, -0.013132639, -0.038235255, 0.050282698, -0.0031385806, 0.04486233, -0.01123049, 0.0086514335, -0.037867356, -0.014251866, -0.060104355, 0.020647267, 0.031007677, -0.038301885, 0.032463342, 0.02557833, 0.012038244, 0.054159526, -0.011099898, -0.044639952, -0.012374463, 0.008795424, -0.021743182, 0.009356061, 0.0064573297, 0.012762798, -0.042685598, -0.019623693, -0.038308833, 0.000196008, -0.0018358122, 0.015535116, 0.04643039, 0.06660757, -0.036276404, 0.0427743, -0.012472159, -0.06464871, -0.0012148818, 0.01186431, 0.010261551, 0.009304555, 0.022070216, -0.015439055, -0.010935162, -0.050284334, 0.035438, 0.028154843, -0.0060609193, -0.040376425, -0.007971946, -0.040626388, 0.014317987, 0.0049997373, -0.018940091, 0.02147647, 0.0754453, -0.016448244, 0.0107696075, -0.02467371, -0.006856103, 0.034017097, -0.037951566, 0.016346127, 0.06831952, 0.037526436, 0.02162649, -0.061620504, -0.058150817, 0.05778292, 0.057455894, 0.030565599, 0.023780126, -0.0056411065, 0.03721822, -0.019464677, 9.340527e-05, 0.026893668, 0.017419573, 0.0050451113, -0.06678988, -0.034272585, -0.020661166, 0.038926903, -0.08333467, 0.0015296392, -0.07010015, 0.012832086, 0.015761169, 0.011830381, -0.0287071, 0.027392477, -0.0025589368, -0.030101078, 0.007276005, 0.019419918, 0.0006556765, -0.0020755592, -0.018118476, -0.016250985, -0.0040183063, -0.028635563, 0.055331282, 0.009684512, -0.016527828, 0.034699347, -0.00033519618, 0.042607524, -0.021924486, 0.06644079, 0.010849267, -0.04038705, 0.0010884678, 0.014805452, 0.030977031, -0.06924336, 0.011818086, 0.017041046, -0.0056828014, 0.045444425, -0.028738372, 0.034970924, 0.011690478, 0.04405786, 0.050686568, 0.060086776, 0.02365085, -0.037954018, 0.0417867, -0.020760702, -0.0029983707, 0.04855603, 0.029254451, 0.025551759, 0.0050312127, 0.035203774, 0.05821131, 0.03203249, 0.0034909456, -0.024211077, 0.01935942, 0.007188732, -0.006364488, -0.0040109083, -0.05249826, -0.03762536, -0.0043223957, 0.0014781334, 0.0034288117, 0.025319166, -0.020214986, -0.009389479, 0.02253663, 0.026741296, -0.012048259, -0.008359108, 0.007474057, 0.021542486, 0.007892234, 0.044088516, 0.041211348, -0.047391832, 0.020905407, 0.034922943, -0.014341491, 0.011038582, -0.02804284, -0.0510701, 0.027832728, 0.0014382778, 0.031573027, -0.0023545998, 0.10232803, 0.03870126, -0.0117384065, -0.0018478711, 0.01123712, -0.0881664, -0.025455236, -0.039119847, -0.040686686, -0.005795419, 0.011447359, -0.038993943, 0.021600122, -0.039080605, 0.03889093, 0.02308781, -0.040555876, 0.017489474, -0.03058522, -0.036706433, -0.024378574, -0.048950087, 0.05036527, 0.062886074, -0.057697482, -0.03169239, -0.051701147, -0.05559515, 0.017618239, 0.049141396, -0.0020136298, -0.017992115, 0.019542754, 0.027378784, -0.058311053, 0.02407526, 0.010746513, 0.02135363, -0.025749607, -0.0021419853, -0.056196664, -0.034306306, 0.004538229, 0.02811928, 0.00900362, -0.030188913, 0.027903855, 0.028416766, 0.025640871, 0.03733513, -0.005968332, 0.010849727, 0.024724295, -0.030291924, 0.004408443, -0.0077897855, -0.036940254, 0.012665459, 0.030727576, -0.0061766026, 0.06870704, -0.035210315, -0.021554342, -0.0066089085, 0.028959313, -0.027060142, -0.012964734, 0.05124414, 0.040069025, -0.06044486, 0.023947723, 0.0050408193, -0.091094874, 0.035566766, 0.052985523, -0.021689441, 0.0046168165, -0.053341974, -0.02015924, 0.0059785508, -0.036038086, 0.052140173, 0.008397277, 0.0058710426, -0.063628405, 0.014554462, -0.008102959, 0.006022903, -0.010520255, 0.0071355905, 0.009167002, 0.003863749, -0.02136712, 0.02160462, -0.05565156, 0.04130598, -0.009833613, -0.025078807, -0.05136963, -0.009790999, 0.0066589583, 0.017584104, 0.0019901763, 0.018486477, 0.0074086534, 0.0040877583, -0.012288827, -0.05230123, 0.00216084, 0.030237965, -0.006538369, -0.025633719, -0.0038317114, -0.030380627, 0.012419427, 0.006580422, -0.021733792, -0.010358482, -0.001568064, -0.045261294, -0.065476894, 0.028279928, -0.026401194, -0.019809276, 0.047467865, 0.020513596, 0.024000045, -0.045064677, 0.0054887095, 0.016929656, 0.022357482, 0.010157262, 0.03036632, 0.019303212, -0.072928876, -0.06571889, 0.059242655, -0.006733764, -0.019964611, -0.03674404, -0.03106124, -0.005087624, -0.036936983, 0.046932373, -0.002957902, -0.018393278, -0.008370119, -0.005298961, -0.010565219, 0.0040904153, -0.013343261, 0.029221341, 0.0065228357, -0.022349002, 0.013225533, 0.015624844, -0.033417832, 0.016257014, -0.0061766026, 0.026560618, 0.024511067, -0.04926485, -0.039132927, -0.04375945, -0.023281418, -0.010236769, -0.05435492, -0.011970336, -0.037475087, 0.0114901485, -0.023984922, 0.008601793, -0.0118890405, -0.015883598, 0.042555198, 0.0035741315, 0.00822784, -0.010012453, 0.0059746676, -0.046735954, -0.021174587, 0.01314296, -0.0051174643, -0.045760002, -0.022992823, -0.03343214, -0.021765064, 0.022734476, -0.011815256, -0.009056837, -0.0155653665, -0.0355357, 0.0015188066, 0.012265319, 0.098479, 0.0019179762, -0.011813212, 0.032646473, 0.007786362, 0.08097359, -0.002784172, -0.07672886, 0.065282315, -0.0064355624, -0.067222364, -0.03692881, -0.021987848, 0.01669093, 0.022661716, 0.01269249, -0.018860916, 0.023577577, 0.0276545, 0.004996467, -0.025292594, -0.0033076096, -0.013335858, 0.054975443, -0.026671806, 0.01927378, -0.062210772, 0.038848013, -0.01857559, 0.0070579234, -0.0045831944, -0.011018552, 0.0006311499, 0.050131448, -0.028077994, 0.024297226, 0.013691027, 0.012495459, -0.020661939, 0.01392454, -0.020401286, -0.033460345, -0.031910677, 0.04799764, 0.0043632733, 0.02312639, -0.007370228, -0.0023246827, -0.022482466, -0.019300759, -0.02663379, 0.0024424356, 0.00852318, -0.04108851, -0.04605667, 0.005716423, -0.002067997, 0.022081865, 0.02200849, 0.008131368, -0.0004919617, -0.012971274, -0.058381364, -0.021488119, 0.037947476, -0.009231793, -0.015187657, -0.025703007, -0.015609514, 0.049096428, 0.02166839, 0.029487453, 0.0352888, 0.054214302, 0.061875578, 0.01009104, 0.010669867, -0.02134464, -0.008389306, 0.031721003, 0.014334134, -0.049210068, -0.097839676, 0.009943063, 0.014497643, -0.006786905, 0.038755216, 0.020949762, 0.006833199, 0.025278084, -0.02096703, 0.026278561, 0.0058929124, -0.005441215, 0.013712386, -0.083004385, -0.017909287, 0.038266733, -0.025994873, -0.049384616, -0.033348545, -0.01727502, 0.020860648, -0.026778497, -0.0209702, -0.009033026, 0.016432788, 0.02110428, 0.0029824283, -0.027691904, -0.054001737, 0.03365492, 0.01773341, 0.0018150669, -0.008575299, 0.0015846194, -0.012714155, 0.012207476, -0.044460095, -0.034393378, -0.0061460976, 0.043881267, 0.014193514, 0.00861863, 0.048024617, 0.028225716, 0.008285784, 0.006148806, -0.031652328, 0.048113633, -0.04974066, -0.00048889586, -0.001004771, 0.00021716215, -0.06782, -0.0015750133, 0.014236334, -0.026043108, -0.009859699, -0.04698388, -0.00049625384, 0.012505066, 0.008810754, -0.018150669, 0.009759727, 0.0025008905, -0.030746482, -0.0152316, -0.010682947, -0.07740252, -0.025196124, -0.0057057953, -0.02187196, -0.042254746, -0.0014110941, -0.0014384821, -0.027181959, -0.037851006, 0.044808626, -0.033270266, 0.003141723, 0.021253891, -0.0652721, 0.01573557, -0.031367414, -0.054617353, 0.039761625, -0.051708736, 0.030737897, -0.01052189, 0.023239722, -0.028313449, -0.01725688, 0.018710487, 0.020390147, 0.0350536, 0.013603242, 0.015945936, 0.004850125, 0.021610292, 0.016995264, -0.053984568, -0.085620545, -0.025535407, -0.015666742, 0.00032988208, -0.0021526136, 0.0341336, -0.00022607858, -0.019325593, -0.003927927, 0.030232651, 0.015314991, -0.00024741158, 0.04373411, 0.008057994, -0.001296637, -0.03790333, -0.0064265914, -0.013308924, -0.021737063, -0.03172509, -0.008338618, 0.05234129, 0.016167901, 0.023166962, 0.06912235, 0.015006569, -0.020792179, -0.025541745, 0.006684507, 0.019877134, -0.09359658, -0.005538912, 0.061725147, 0.016229218, 0.01283883, 0.032935273, -0.0216782, 0.015155363, -0.0573071, 0.0067142453, -0.058896422, -0.033410065, -0.014258918, 0.0051726494, 0.0037329409, 0.030959047, -0.008711831, -0.039945573, 0.061288577, 0.05128706, 0.031025268, 0.043626193, -0.01737706, 0.064537525, -0.0128355855, 0.0022110685, 0.043344952, -0.009774648, 0.012047033, 0.041039456, -0.011065357, 0.014941484, 0.037352297, -0.022986487, 0.006770554, 0.03553754, -0.077558264, 0.008838551, -0.010691531, 0.029967152, 0.00037934398, -0.015499145, 0.027797574, 0.009738675, -0.01572479, -0.04191669, -0.023027161, -0.0075315926, -0.017688343, 0.0074758963, -0.005452533, 0.004519834, -0.019811116, 0.015011067, 0.014663504, -0.0027874424, -0.08210181, 0.058484785, 0.0066969744, 0.051849127, 0.03324349, -0.041223407, 0.054118652, 0.02830037, -0.028037116, -0.03477374, -0.011658287, -0.025755329, -0.039036456, 0.027821282, -0.02165408, 0.036027048, 0.049940653, 0.04304573, -0.0011993482, -0.055959776, -0.010127013, -0.03801002, -0.029242495, -0.045162037, -0.021519594, 0.011882295, -0.0006055886, 0.031843636, -0.007907257, -0.028086169, 0.0727578, -0.012126131, 0.008670135, 0.0059934715, 0.0086058555, -0.0147159295, 0.0029016952, -0.030445622, 0.051980957, 0.0119854985, 0.016280724, -0.023810988, 0.0053820955, -0.06201293, 0.0075975074, -0.022414917, 0.035985354, -0.017562032, 0.0026856572, 0.00433098, -0.009777509, 0.006429226, 0.04737477, -0.035971455, 0.037023645, -0.009126329, -0.035359927, -0.024629971, 0.04519262, -0.036368784, 0.039396998, -0.0075294464, -5.0177234e-05, 0.022970749, -0.034669913, 0.041339498, 0.0073006083, 0.014010383, 0.019531002, -0.022800697, -0.0054056514, 0.01916014, -0.027956996, 0.0006669177, 0.045336507, 0.0073923785, 0.007823969, 0.020897437, -0.009929983, 0.006192545, 0.012911184, 0.060937032, -0.016331412, -0.04360299, -0.08299784, 0.083488375, -0.017559376, -0.06155101, -0.0044262246, -0.0021022318, -0.027227536, 0.007021134, -0.010276624, 0.0002755149, 0.008249607, -0.061893154, 0.0073530595, -0.0022541943, 0.0330111, -0.004740982, 0.035281032, 0.044629328, -0.016266007, -0.0005224155, 0.019474898, 0.0026276112, 0.06808733, -0.009298014, -0.00089235767, 0.024824137, 0.015553103, 0.0081103165, 0.006511799, -0.032635435, 0.041162908, 0.051427677, 0.019634014, 0.0026989423, 0.00530591, 0.026954677, 0.0047176816, -0.0216782, -0.013103104, -0.0058226027, 0.03833745, 0.024566274, -0.056826383, 0.008514391, 0.028669901], [-0.016022153, -0.07979744, -0.039008833, -0.01569478, 0.011522362, -0.0056135645, 0.0040800385, -0.0368421, 0.018704148, 0.07298773, 0.012903803, 0.03366372, -0.049278043, -0.028658183, -0.0006304817, 0.0033286538, -0.012590052, -0.009656939, 0.02899556, 0.024107516, -0.0014142203, 0.008235853, -0.016636245, 0.03265478, -0.050290387, 0.0069222082, 0.024329526, 0.024393383, 0.025048131, 0.011410293, -0.014823345, -0.06169185, 0.009885494, -0.012675194, -0.00089208264, 0.012727558, 0.008254585, 0.0019026201, -0.056441948, -0.053494092, -0.013395075, 0.01741211, -0.01456962, 0.034733966, 0.019051319, 0.040716942, -0.011714358, 0.023585806, -0.031937025, -0.030616252, 0.030376362, 0.01144999, -0.020796742, 0.0134180635, -0.01578354, 0.011570893, 0.024228206, 0.020564517, 0.012266509, 0.00023329101, -0.01182994, 0.031291645, -0.072243586, -0.014728943, 0.016583882, 0.042583697, -0.00044997918, 0.012551737, 0.00817213, -0.03965266, 0.0061453874, 0.030298244, -0.003949344, -0.034404464, 0.053694397, 0.020951279, -0.07965355, -0.0119125815, -0.006715205, -0.023034507, 0.00615156, 0.029742688, 0.020087719, -0.019028915, -0.05620781, 0.005099622, 0.0021922118, -0.02600854, 0.014795034, 0.00069210376, -0.07538875, 0.005883574, 0.047308695, 0.004569183, -0.027447985, 0.002075779, 0.024465224, 0.03777186, 0.0037730988, 0.04406731, 0.059746336, 0.003521502, -0.0048280167, -0.024838256, -0.04715288, 0.032918297, -0.0061744424, -0.0078833625, 0.024637744, 0.04306177, -0.00693317, 0.017392099, -0.053870212, -0.044321883, -0.0021784557, 2.107282e-05, 0.01338736, 0.01831228, -0.023659455, -0.00576477, -0.006034063, 0.05090054, 0.001372926, 0.015200341, -0.049847648, 0.001352066, -0.02650833, -0.0033721833, -0.05480918, -0.002208176, 0.04682636, 0.010530449, 0.049442366, -0.018507257, -0.04004176, 0.026382318, -0.03542788, 0.038596146, 0.004774803, 0.03306006, -0.032742478, 0.01793829, 0.03079122, 0.008738475, 0.016374005, -0.0072507528, -0.0014749909, -0.054363616, 0.01099469, -0.004657306, -0.034356356, -0.00026734808, -0.010642093, 0.020614326, 0.014200101, -0.038019624, -0.0014750973, 0.0011708186, -0.041381057, 0.0324879, -0.007452541, 0.006663348, 0.019154128, 0.025902113, -0.0027871463, -0.032378733, -0.010341433, -0.0038012092, -0.0059906403, -0.0144683, 0.0650354, -0.023083465, 0.0053192903, 0.027335277, -0.059020918, -0.0054291245, 0.019020028, -0.044214524, 0.027215865, 0.016301421, -0.007267781, 0.0015636458, -0.042394895, -0.026845494, -0.01893744, 0.03783912, -0.022999704, -0.005879955, 0.023895511, 0.03292894, -0.003282251, -0.030595178, 0.042561986, -0.0051656077, -0.016988523, 0.040443636, -0.06272803, -0.0039531756, 0.017315896, 0.047167353, 0.039879777, 0.022279505, 0.017268216, -0.014530453, -0.05372164, -0.044006854, 0.048035808, 0.0131579535, 0.030071232, 0.007455095, -0.012262239, 0.04824441, 0.016848037, 0.04891789, 0.013252036, 0.051109463, 0.0037454276, 0.009286089, 0.021959154, 0.052143093, -0.01560719, 0.010445945, 0.060063068, -0.027871465, -0.03797535, 0.019696914, -0.016622197, 0.020957025, 0.020553447, -0.009044496, 0.082012855, -0.019828033, -0.00794456, -0.017947018, -0.025400622, -0.02382378, -0.06495877, 0.032228693, -0.0296618, 0.047771443, -0.0064443983, 0.012344627, -0.011564933, -0.027136682, 0.013873578, -0.004066176, -0.0048018354, 0.024517693, -0.03051525, 0.003591319, 0.018928925, 0.051793158, -0.025072396, 0.037080288, 0.014395715, -0.015703082, 0.00091060123, 0.0038795273, 0.023585381, 0.0128339855, 0.028659033, -0.033687137, -0.011732665, -0.037455127, 0.025374228, -0.012545352, 0.024693193, 0.011372937, 0.029694263, -0.026040046, -0.055043057, -0.041419584, 0.0715369, -0.002460624, -0.033345714, 0.04276207, -0.0055436413, -0.014957018, 0.042571086, 0.03403792, -0.04899792, -0.019351447, 0.011676895, 0.005020014, 0.00923032, 0.0007347815, 0.02851429, -0.03447939, -0.008474892, -0.041305277, -0.031764295, -0.0078833625, 0.026082402, 0.017768217, 0.036564533, 0.00095051184, 0.03932997, 0.008348241, -0.0890218, 0.007939876, 0.037728436, 0.013678175, -0.01775949, 0.028621146, -0.03811158, -0.053391285, -0.050779108, 0.058493037, 0.0049238023, -0.0062273373, -0.009501181, -0.0145015055, -0.031737793, 0.009470529, 0.016110277, -0.0052311677, 0.025224376, 0.060521137, -0.024505666, 0.00042401065, 0.0016040885, 0.026521951, 0.0034555965, -0.018112406, 0.054695938, 0.070978574, 0.0023020457, -0.00066453876, -0.040990252, -0.031079214, 0.044144787, 0.031811524, -0.035931073, -0.0028818676, 0.0068382365, 0.009237505, 0.00037377645, -0.024240553, 0.01548022, 0.015776092, 0.005227007, -0.050653096, 0.0014901569, -0.03249258, 0.040910963, -0.04030826, 0.0019812174, -0.06368674, 0.015965959, 0.01755515, 0.008864206, -0.015704464, 0.0267082, 0.03499695, -0.009030661, -0.015891565, 0.024795257, -0.009540666, -0.025464479, 0.009584354, -0.009072807, -0.014372939, -0.08005117, 0.047834445, 0.0327859, -0.018480362, 0.05119205, -0.0061396407, 0.030460652, -0.0035960022, 0.08771061, 0.00511548, -0.024263116, 0.029547391, 0.016195845, 0.03881826, -0.023380611, -0.012943394, 0.014860807, -0.02484762, 0.00043422778, -0.01253258, 0.05784595, 0.025641577, 0.0619941, 0.05406902, 0.054799546, 0.0015215002, -0.03576334, 0.034275472, -0.01128822, 0.016669452, 0.04676931, 0.06029013, 0.01118094, 0.03193958, 0.02117946, 0.059312962, 0.02968926, -0.015955742, -0.009106863, 0.065982185, -0.012003524, -0.009874638, -0.009948925, -0.056351695, 0.004684099, -0.012758634, -0.030203523, -0.0038556873, 0.032126896, -0.009541091, -0.012246075, 0.02171985, 0.04211158, -0.02463274, -0.013913594, 0.037654784, 0.034719914, -0.006773315, 0.030242687, 0.041283727, -0.05487575, 0.025481507, -0.007482979, 0.0034065593, 0.005298005, -0.04898031, -0.047569867, 0.032886367, 0.033771, 0.06526462, 0.004474675, 0.07691792, 0.011643157, -0.066798285, 0.026644556, 0.00067049876, -0.0654509, -0.014013638, -0.020727139, -0.029336983, -0.01066391, -0.0066287853, -0.0017746933, 0.015914023, -0.041987274, -0.018292483, 0.007882671, -0.053697374, -0.009607502, -0.02400593, -0.0035208105, 0.0018786737, -0.05713416, 0.031783983, 0.071678236, -0.060200997, -0.033636477, -0.035951614, -0.02151556, -0.0014386988, 0.028432129, -0.049648415, 0.010245115, -0.015532796, 0.02971097, -0.03266883, 0.030869337, 0.025541533, -0.0031438945, -0.026941491, -0.016588992, -0.049045175, -0.0036519833, -0.0058616493, 0.04158029, 0.024198407, -0.008180511, 0.024231615, 0.019812707, 0.005832275, 0.0340094, 0.048724614, 0.0566531, 0.015308659, -0.030228639, -0.026395941, -0.039022602, -0.006386554, 0.01892339, 0.014946535, 0.030591346, 0.07209884, -0.06680467, -0.019260982, -0.013627303, 0.02264519, -0.06957862, -0.004973611, 0.02363987, 0.027608478, -0.051041346, 0.014927219, 0.02841893, -0.08964505, 0.033677984, 0.057721645, -0.007854414, 0.0080046905, -0.03268969, -0.068487085, -0.004340575, -0.008124529, 0.037137758, 0.02492212, 0.023465116, -0.0139923515, 0.00896808, -0.039375946, -0.017913546, -0.018832289, -0.004807157, 0.030332435, 0.0093674, -0.03780932, 0.012364211, -0.04791661, -0.0071524926, 0.0048325667, -0.013143053, -0.040938314, -0.049679488, 0.02987487, 0.016572814, -0.020915305, 0.030860398, 0.0060298066, 0.0042077526, 0.017822921, -0.0067021144, 0.035754878, 0.009298754, 0.01766626, -0.015494694, -0.014535989, -0.026306009, 0.055414274, -0.03563371, 0.017812492, 0.0043297196, -0.0039028882, -0.08110353, -0.051907245, 0.087976255, 0.006035766, -0.029384661, 0.022519393, 0.048566677, 0.020163707, -0.07837386, 0.0008188067, 0.028882805, 0.016524496, 0.0019787163, 0.029226083, 0.02568585, -0.06563502, -0.056200147, 0.012703291, -0.02105409, -0.0176959, -0.020199854, -0.041176926, 0.006206903, -0.020816512, 0.04287446, -0.04127718, 0.0063465373, -0.01457079, -0.0031266261, 0.003303537, -0.014273322, -0.028897433, 0.024724057, 0.015971601, -0.01875268, -0.020875288, 0.041286442, -0.030873168, 0.03949089, -0.015613468, 0.0094359405, 0.009585791, -0.011148159, -0.033095818, -0.045600727, 0.024421481, -0.01972288, -0.038291227, -0.041438952, -0.035792716, 0.0010061472, -0.050476, 0.025258435, -0.021127736, -0.019872306, 0.08412099, -0.025230337, 0.036937032, 0.025900941, 0.016232457, -0.016870068, 0.0035083583, 0.022482783, 0.0030468318, -0.017298443, 0.013681687, -0.0083048185, -0.024705857, 0.046314225, -0.0302429, 0.018271731, 0.013255016, -0.04934701, -0.0001005216, -0.005071525, 0.05520312, 0.003582379, -0.0067274175, 0.03945513, 0.011650289, 0.06779062, -0.008882938, -0.06902348, 0.046463225, -0.0461052, -0.05731615, -0.027819952, 0.012878685, 0.041824862, 0.04038148, -0.03949344, 0.009333343, 0.0029563673, 0.010578129, 0.03250993, 0.0021689038, 0.023099214, 0.019225221, 0.03953516, 0.020240976, 0.0052643735, -0.04659434, 0.030762058, -0.010114953, 0.023288658, 0.0196007, -0.029692667, -0.044625845, 0.0019255022, -0.034154143, 0.0014921259, 0.040416814, 0.039931502, -0.040663306, 0.04129038, -0.01187911, -0.002127716, -0.025800154, -0.0013154547, 0.011033217, 0.030430853, -0.014051952, -0.008372934, 0.009426707, -0.022068562, -0.008231597, 0.008296943, 0.032071553, -0.04201643, 0.0078952825, 0.010718615, 0.007272038, 0.031462144, -0.008313334, -0.011890179, 0.00774458, -0.019288547, -0.05569865, -0.009779916, -0.00018507229, 0.020339182, -0.009134109, -0.0052967276, -0.00031438944, 0.055748038, 0.07074592, 0.03318373, 0.03683869, 0.10342795, 0.036381904, -0.00042528778, 0.027324634, 0.01964753, -0.028413823, -0.0060097976, -0.01426566, -0.057806358, -0.02166243, -0.0180179, 0.031886794, -0.011442966, 0.03694427, 0.06934192, 0.02477312, -0.02186188, -0.0054725474, 0.014900612, -0.021824203, 0.012048969, -0.0015257307, -0.027343152, -0.04234828, 0.060417265, 0.0043218434, -0.033133976, -0.047212053, -0.017543655, -0.023273863, -0.014406698, -0.040985145, 0.007660289, 0.0367246, 0.0010559823, -0.02083591, -0.03716926, -0.05121802, 0.013100056, 0.01024437, 0.0077967304, -0.028802073, 0.0065304455, -0.018488524, 0.016492141, -0.040612217, 0.002054214, 0.018570794, -0.0061558173, 0.022955751, 0.005753944, 0.020592613, 0.009330789, 0.0050085196, -0.016975915, -0.015141805, 0.046014313, -0.04475952, 0.010843775, 0.028574955, -0.011346742, -0.05758286, 0.00015325687, -0.009562164, -0.004864203, 0.03529335, -0.031633068, -0.006717759, 0.033283986, 7.918271e-05, -0.022389123, 0.018902957, -0.026751412, -0.039202254, -0.006529381, -0.025365287, -0.10556333, -0.054397672, 0.0061745485, -0.018266408, -0.05989616, 0.023235444, -0.009744156, -0.06003923, -0.05769269, 0.049550075, -0.026835278, -0.020468306, -0.009381662, -0.044779524, 0.007341004, -0.004744577, -0.04076292, 0.0040825927, -0.023499599, 0.053658634, -0.0026142, 0.043679908, -0.03064286, 0.015802486, -0.0087381955, 0.013318022, 0.03870566, 0.03086423, -0.0035576879, 0.0018331225, 0.031626895, 0.009311845, -0.048372976, -0.054593503, -0.01869904, 0.006388257, 0.005842067, 0.028709268, 0.0074141202, -0.008616974, -0.034763552, 0.002972385, 0.020980865, 0.028143069, -0.026749708, 0.049655225, 0.009684983, 0.024126036, -0.018909343, -0.00048552625, -0.021793578, -0.0019957449, -0.00859324, 0.01000347, 0.033064317, -0.013518319, 0.008417793, 0.028091772, -0.0058850637, -0.014765235, -0.0039762175, -0.00468668, 0.008650712, -0.037616897, -0.008102605, 0.06964673, 0.027756467, -0.023817394, 0.009028533, 0.034236733, 0.0318902, -0.05973101, -0.02164732, -0.059770178, -0.027392536, -0.0040836567, 0.0033295054, -0.001633037, 0.00043593065, -0.0055800397, -0.055385754, 0.03679825, 0.028775254, 0.020936592, 0.042865943, -0.007108564, 0.05041438, -0.025643278, -0.033003654, 0.042068157, -0.007790557, 0.021693083, 0.026081126, -0.037219707, 0.020028278, 0.01469265, -0.03730953, 0.025398068, -0.00014772259, -0.04745982, -0.0014040032, -0.0112043535, -0.0013088563, -0.014264169, -0.009753948, 0.035637755, 0.016859958, 0.005489576, -0.020313345, -0.052327003, -0.022358049, -0.018557703, 0.03782567, 0.020830162, -0.0039429585, -0.042938318, -0.029856142, 0.056040928, -0.032146476, -0.05209371, 0.05209967, 0.0074619064, 0.042710986, 0.020998426, -0.032683942, 0.07574848, -0.01173607, -0.032815382, -0.038037926, -0.018360171, -0.02082697, -0.03291851, 0.01901109, -0.032360505, 0.054768894, 0.031020466, 0.04070502, -0.01823778, -0.0671231, -0.036930647, -0.033579644, -0.028485343, -0.05053986, -0.042072415, 0.03180548, 0.020803768, 0.047858104, 0.02316141, -0.00062324456, 0.039305277, -0.0050161825, -0.02517329, 0.015217555, -0.026885511, -0.019534716, -0.002653898, 0.005798218, 0.03944406, 0.025957454, 0.040004298, -0.04213542, 0.017662214, -0.023471288, 0.024137955, -0.003958923, 0.05183658, -0.002194899, 0.03224588, 0.001499363, -0.009035995, 0.017138813, 0.018679457, -0.03273737, 0.04315628, 0.02460539, -0.0021847617, -0.024043128, 0.015417215, -0.028248645, 0.041797403, 0.045735896, -0.0028748433, 0.0031979599, -0.013995439, 0.05712735, 0.015111979, 0.05252113, 0.059347868, 0.03300855, 0.040607747, 0.01157515, -0.040457256, -0.004327165, -0.016990226, -0.0029201817, -0.0035428943, 0.007053647, -0.00039804212, 0.02056622, 0.029895732, 0.058867663, -0.00039208215, -0.023825696, -0.07540067, 0.035877325, -0.005979572, -0.033960335, -0.0055406615, 0.024240127, -0.020940848, -0.016349101, 0.0044465894, -0.0015053229, 0.021915464, -0.08277914, 0.014583242, 0.023307176, 0.013601547, -0.046597324, 0.03263094, 0.018207341, -0.01949736, -0.011161356, 0.008840367, 0.009046412, 0.033017065, 0.02133229, 0.002696935, 0.034141906, 0.019992571, -0.003623567, 0.0028556862, -0.018563876, 0.059995808, 0.0592755, 0.048226528, -0.005713501, -0.013065147, 0.029348928, -0.032259718, 0.015633903, -0.015250335, -0.010491496, 0.011278854, 0.026855683, -0.03781528, 0.022937443, 0.014486499], [-0.041264135, -0.082403675, -0.026148217, -0.03218118, 0.0042439178, 0.044805843, 0.024493901, -0.03699972, 0.044223156, 0.023937704, -0.012361876, 0.0063247657, -0.05842866, -0.018374687, -0.014736873, 0.044980414, 0.0065629063, -0.030333636, 0.040142067, 0.03065699, -0.026155125, -0.0028012574, -0.022071045, 0.04155709, -0.045364108, 0.0638999, -0.0017770699, 0.021185964, 0.009414947, 0.008360704, -0.003269362, -0.06212145, -0.020604892, -0.02241789, -0.0040546604, 0.009567067, -0.018877108, 0.00297422, -0.038618337, -0.044154983, -0.055414364, 0.013419689, -0.016904274, 0.047254033, 0.0023702327, 0.056963887, 0.023373675, 0.009083416, -0.023916284, -0.03621851, 0.04425079, -0.017545458, -0.026699118, 0.019643068, -0.015567787, 0.04295369, 0.01926495, 0.023649126, 0.033398136, -0.003282144, 0.017940668, 0.022197483, -0.06622603, 0.01709359, 0.03801677, 0.012478412, 0.0062952866, 0.012234859, -0.0069099828, -0.032007527, -0.02552569, 0.015022874, 0.006880086, -0.010066033, 0.05437521, 0.018825518, -0.06908555, -0.0044638636, -0.012723232, -0.012069152, -0.006203623, 0.0065910043, 0.011381446, -0.060691223, -0.050127376, 0.0031022723, -0.006412284, -0.016618, 0.045647394, 0.0287445, -0.040181216, 0.009371764, 0.036046237, 0.0014922919, -0.0050437837, 0.016354352, 0.009560619, 0.050240688, 0.03580856, 0.018152323, 0.04895694, -0.030433014, -0.001403047, -0.017305935, -0.0111469915, 0.010891808, 0.026234122, -0.02003188, 0.005398345, 0.02790548, 0.00047996553, -0.007507176, 0.0024243556, -0.0617138, 0.029216172, -0.016315142, 0.041444696, -0.0164759, -0.0511868, -0.004590534, -0.02031977, 0.0042262413, 0.009875969, 0.016262632, -0.034155972, 0.0011366938, 0.010649062, 0.002625531, -0.061624438, 0.0038724856, 0.042855114, 3.1322124e-05, 0.054974016, -0.029247496, -0.051819693, 0.023589246, -0.0016044816, 0.036549233, -0.018648295, 0.046194144, -0.025921823, -0.010992223, 0.023549633, 0.01295262, 0.0351744, -0.010869238, 0.016864201, -0.039492596, -0.019373426, 0.010851044, -0.01809037, -0.03000199, 0.022201514, -0.0005499797, 0.03215815, -0.03801032, 0.008168166, 0.013623685, -0.04089564, 0.029143855, -0.015062257, 0.013706193, 0.021310734, 0.007454666, 0.0042148987, -0.06318836, 0.0096257385, 0.014553733, -0.0076121977, 0.043242957, 0.0850193, -0.013774365, 0.024762442, -0.00050852395, -0.060282193, 0.006066128, 0.019327652, -0.018850854, 0.010865697, 0.008858634, 0.007355172, 0.021247685, -0.009660112, -0.004302877, -0.041949537, 0.023504492, -0.024769813, -0.023734802, -0.0044523478, 0.006585074, 0.026714088, -0.030104708, 0.008648131, 0.008520539, -0.04291131, 0.01505765, -0.054415744, 0.011988544, 0.00043511268, 0.030354824, 0.004137284, 0.018085303, 0.024019923, -0.0079719415, -0.03419731, -0.056625795, 0.03266921, -0.008060035, 0.05237981, -0.03315355, 0.0108135035, 0.029552884, 0.034741767, 0.044354893, 0.037916582, 0.026170095, 0.026319565, -0.045494467, 0.04073028, 0.05183535, -0.03956445, 0.009959054, 0.017565263, -0.047487564, -0.028944407, 0.0038602792, -0.009310272, 0.022146123, 0.0151292775, -0.0064726253, 0.07456508, -0.0075944634, -0.0012399877, -0.05869398, 0.005802193, 0.019227179, -0.027423441, 0.023466721, -0.052119095, 0.028872551, -0.039653953, 0.022079336, 0.037063055, -0.021773944, -0.03239813, 0.006283771, -0.031432673, 0.005736469, -0.029632572, 0.016701601, 0.048357677, 0.00984436, -0.01993285, -0.025954986, -0.0068798126, 0.012679934, -0.006844805, -0.00062690314, 0.005805188, 0.036259968, 0.007266733, -0.0773288, 0.007912521, -0.027416993, 0.04765753, 0.013303612, 0.036274705, -0.011233589, -0.001041, -0.031233687, -0.01116864, -0.053347107, 0.013225768, 0.01033538, -0.021492505, 0.019388396, 0.017388385, -0.0019548691, 0.05560598, 0.02989789, -0.07424622, 0.0009995443, 0.017864207, -0.004123926, 0.02021797, 0.0005481372, 0.013497533, -0.058119122, -0.016383775, -0.042612832, -0.006485177, -0.008064929, 0.013470816, 0.039864775, 0.05780406, -0.023630701, 0.033728402, -0.029450169, -0.06078335, -0.04375839, 0.032972984, -0.0014606244, 0.010820412, 0.010822716, 0.009020772, -0.03511314, -0.06717181, 0.025238262, -0.0025684142, -0.004085925, -0.029037453, -0.025394872, -0.05552123, 0.02256759, 0.0049419864, -0.013977959, 0.027108377, 0.08667016, -0.0065711974, -0.0146272015, -0.045800313, -0.03281085, 0.0012298541, -0.059114065, 0.021825993, 0.057286322, 0.014965815, -0.013984637, -0.055705883, -0.03373105, 0.028639479, 0.017843477, 0.0031027328, 0.007603906, 0.0032139726, 0.009174619, -0.017943893, 0.008061302, -0.0033938445, 0.03497023, 0.0045025554, -0.07668808, -0.022509553, -0.011476795, 0.043648303, -0.08387329, -0.017803865, -0.0572937, -0.010684529, 0.0061902655, 0.031870265, -0.033514675, 0.01398648, 0.04495278, -0.0072455443, -0.0005202409, 0.01702081, -0.009417825, -0.017739378, 0.0044188956, 0.01690934, -0.017641267, -0.065385856, 0.029985867, 0.00013726461, -0.015089895, 0.06816731, -0.008839288, 0.039005257, -0.020548234, 0.050272014, 0.04002599, -0.022942536, 0.017171202, -0.015924191, 0.044049963, -0.05321076, -0.00022915819, 0.031506833, 0.00229757, 0.010224342, -0.0024346043, 0.042254698, 0.02479054, 0.029348832, 0.040772196, 0.030652845, 0.033440974, -0.024703484, 0.047832567, 0.012673484, 0.0069226506, 0.02858236, 0.01406087, 0.0012209871, -0.019702509, 0.025022693, 0.02435042, 0.017747669, -0.008117958, -0.01575572, 0.011335385, -0.024538122, 0.0038867071, 0.013052114, -0.056991037, -0.049673207, 0.009031251, -0.00056379824, 0.054111734, 0.054135684, -0.006392477, -0.035755128, 0.018409118, 0.032125447, -0.008622797, -0.03060448, 0.031178871, 0.00898945, 0.020502115, 0.022189423, 0.04465061, -0.0543987, 0.042303294, 0.05699153, -0.0003998177, 0.0058765835, -0.008948916, -0.04682473, 0.050856534, 0.0067425477, 0.028282497, -0.0036863377, 0.092042826, 0.046890143, -0.016279213, 0.03027744, -0.011988083, -0.038809955, -0.01104197, -0.030972054, -0.04922456, -0.004608498, -0.017992718, -0.010491472, 0.0021045704, -0.038012393, 0.036728416, 0.026676547, -0.051370822, -0.004690949, -0.01803855, -0.022489848, -0.017418325, -0.052783307, 0.038301893, 0.05189961, -0.034809016, -0.029558066, -0.024610437, -0.048964772, -0.0049100886, 0.022907298, -0.0038461152, -0.0033898142, -0.009233808, 0.031832032, -0.04070126, -0.0051983213, 0.013177633, 0.032387137, -0.029970666, -0.019537637, -0.048134737, -0.021760587, -0.0010502124, 0.036263652, 0.012475418, -0.004599286, 0.014613844, 0.030307151, 0.0037644126, 0.010411843, -0.004246451, 0.032448873, 0.011788634, -0.041577358, 0.010850352, -0.010289203, -0.019672712, 0.012769293, 0.04416788, 0.0146426335, 0.05035953, -0.037806723, -0.0144468695, 0.005231255, 0.031745058, -0.04218998, 0.0014182475, 0.042570915, 0.029721934, -0.06349547, 0.025149131, 0.018794196, -0.061035767, 0.029055879, 0.05429414, -0.02697572, 0.0051792054, -0.039107054, -0.0510394, -0.013321806, -0.002668599, 0.050944515, 0.048072092, -0.012208259, -0.045335554, -0.014443184, 0.001452218, -0.010958598, -0.017496632, -0.008702023, 0.03814298, 0.0039011014, -0.02234465, 0.050321758, -0.059265144, 0.0016144712, 0.0036589021, -0.015070548, -0.029674605, -0.03953681, -0.01629902, 0.0096430695, 0.0010872923, 0.022340735, 0.017624224, 0.004182425, -0.023918128, -0.03108813, 0.0049359985, 0.009706634, -0.00020129072, -0.02511666, -0.0059353122, -0.027493455, 0.048482966, 0.011100008, -0.015336786, -0.033940747, 0.0019433536, -0.06646186, -0.07444348, 0.053202473, -0.023440003, -0.030275598, 0.031384077, 0.062192842, 0.001254267, -0.01642385, -0.0025521775, 0.02737024, 0.011432576, 0.0053376583, 0.03636591, -0.013128346, -0.07850614, -0.07125968, 0.03014432, -0.019013911, -0.029237362, -0.061407946, -0.035850935, 0.008402966, -0.027283415, 0.018361444, -0.05485794, 0.0062975893, -0.019348783, 0.007197122, -0.026110215, 0.013951704, -0.016768392, 0.013607621, 0.030497616, 0.0029212488, 0.012832456, 0.033497576, -0.015340472, 0.052079946, -0.02411343, 0.0486709, -0.0008263514, -0.02834445, -0.038618337, -0.04323006, 0.0037991896, -0.0058894805, -0.015615922, -0.005738959, -0.0632578, -0.020553302, -0.017790966, 0.030189002, -0.0074026156, -0.040687684, 0.04106054, 0.010139156, -0.001169225, 0.00083510316, 0.009971491, -0.01869643, -0.028126117, -0.011441789, -0.011220691, -0.026355727, 0.018296037, -0.02054288, -0.013270448, 0.020997772, -0.0020419226, -0.00010709403, 0.025174294, 0.012103237, 0.028057715, 0.01269297, 0.026680693, -0.008007869, 0.0050631296, 0.05359768, -0.0058424976, 0.07040477, -0.009527453, -0.06097773, 0.09342837, 0.00240167, -0.026367242, -0.032667134, -0.0045329565, 0.030056342, 0.025222603, -0.006056455, -0.024638535, 0.025895339, -0.0092386445, -0.0037190418, -0.009540351, -0.02269933, 0.029384876, 0.05323564, -0.00048917794, -0.008182906, -0.047782823, 0.04037606, 0.012634331, -0.010411843, -0.012667036, -0.010973338, -0.0418353, 0.040376984, -0.043858346, 0.052392703, 0.037557073, 0.027685823, -0.0034769287, 0.03214249, -0.005250141, -0.037546016, -0.019558594, 0.05040513, 0.012896424, 0.039731197, -0.025321174, -0.0010320755, 0.018556517, -0.036732562, -0.0061216326, -0.01420965, 0.036803037, -0.03327239, -0.02233636, 0.022675376, -0.0067659244, 0.042922366, 0.017280601, -0.0056628846, 0.04418815, -0.052399155, -0.030163206, -0.03253816, 0.015256638, 0.011363641, -0.022607204, -0.020497106, -0.0033807168, 0.030920466, 0.043331396, 0.040454365, 0.028175173, 0.04579387, 0.04520151, 0.047195997, 0.034238767, 0.026259918, -0.0506891, 0.029797474, -0.010234965, -0.037239242, -0.069162935, -0.027982173, 0.024241483, -0.023476854, 0.06955354, 0.042536885, 0.011899644, 0.031132348, -0.02009729, 0.009257214, 0.0066550304, 0.01912308, 0.010340331, -0.057985544, -0.03223415, 0.01956343, -0.026997829, -0.047020037, -0.06982531, -0.023449216, 0.008078345, -0.010903784, -0.026572678, -0.004541708, 0.02128062, 0.029454658, 0.006125318, -0.02713233, -0.052225962, 0.0071027526, 0.017868351, 0.010345053, -0.039247543, 0.019222572, 0.0074316347, -0.015082524, -0.058401026, -0.023341663, 0.00240167, 0.017166518, -0.0045122285, 0.005979302, 0.044086814, 0.023634845, 0.030598952, -0.026533064, -0.046541452, 0.042542126, -0.04315682, 0.02754136, 0.00964353, 0.021381956, -0.08646381, -0.011164034, 0.019574486, 0.0028779504, 0.019847173, -0.031873025, 0.009429802, -0.0034836652, 0.008034585, 0.017625604, 0.017921783, -0.021943454, -0.007496237, 0.017816762, -0.009135603, -0.067867674, -0.024117347, -0.002382324, -0.065223716, -0.075244956, 0.0104634315, 0.01934602, -0.025076125, -0.053971708, 0.018148407, -0.005203158, -0.017032096, 0.013642629, -0.07720259, 0.006564749, -0.03573486, -0.06373131, 0.016197223, -0.038065594, 0.044488475, 0.021357084, 0.0670966, -0.04673998, -0.03359298, 0.02678088, -0.0136126885, 0.034184415, 0.00917508, -0.014431439, 0.002702915, 0.013287029, 0.0097402595, -0.05246272, -0.059895273, -0.028654216, 0.010455256, 0.007231726, 0.00029709956, 0.018643113, -0.0055354945, 0.0051755207, 0.017736614, 0.036717363, 0.0052796206, 0.022165932, 0.04299376, 0.01710925, 0.0035113024, -0.02789788, 0.010820182, 0.027620586, 0.010053021, -0.029402552, -0.015366727, 0.03390758, -0.0058692135, -0.003334885, 0.060081366, 0.0114814015, -0.014787729, -0.025703028, 0.002428098, 0.041928694, -0.07486357, -0.007908376, 0.052042633, 0.013118442, -0.012184422, 0.006610811, -0.03081936, 0.027328553, -0.068271175, -0.033138808, -0.08302943, -0.04031434, -0.0012473576, -0.015789116, -0.008291151, -0.0056091943, 0.010630637, -0.01470758, 0.027619436, 0.045072567, 0.012785876, -0.007017538, -0.020335428, 0.05220886, -0.022402229, 0.006881079, 0.05672621, -0.0045665815, -0.008406363, 0.021319773, -0.018747212, 0.01843952, 0.040512405, -0.0019233131, 0.020612722, 0.043799385, -0.043642774, 0.011267846, -0.028501378, 0.031893294, 0.02269979, -0.021712681, 0.04331113, 0.03556466, -0.018571258, -0.010105992, -0.015656572, -0.03310564, -0.005992199, 0.021863535, -0.012182925, -0.014696525, -0.022859624, 0.018283369, 0.052468244, -0.03805454, -0.06314909, 0.074677475, -0.002614937, 0.043991003, 0.036142047, -0.04014483, 0.07186401, 0.0055329613, -0.012337233, -0.022861466, -0.023680447, -0.04491757, -0.031746816, 0.011734742, -0.011861874, 0.030818207, 0.03922175, 0.024193117, 0.0072160647, -0.08612847, -0.005602572, -0.027766373, -0.04129822, -0.0517681, -0.029631883, -0.007911025, 0.0064265635, 0.028259005, -0.0076158824, -0.02783293, 0.079462394, 0.0013074109, -0.015589206, 0.01086348, -0.014111539, -0.021032806, 0.01507239, -0.010167714, 0.05771746, 0.04029131, 0.036363143, -0.019248368, 0.015198831, -0.059773672, 0.01737733, 0.013398039, 0.0017720031, -0.0062344847, 0.014491895, -0.012579461, 0.02864938, 0.002730322, 0.038036115, -0.026349276, 0.036472775, 0.01607562, -0.036569502, -0.010831928, 0.03263397, -0.050798498, 0.033954564, 0.008683599, -0.0034631675, 0.022206927, -0.046780515, 0.08503773, 0.019897042, 0.013112916, 0.012229448, 0.007215201, 0.010067991, 0.034392614, -0.0292217, 0.006841351, -0.010637546, -0.048534553, -0.00029341463, 0.010622519, -0.015918318, 0.0020711755, 0.027380144, 0.040159803, -0.018344631, -0.073812425, -0.039633546, 0.042361334, -0.018439174, -0.013660131, -0.015336095, 0.0025817722, -0.013280581, -0.0052105277, 0.00055827084, -0.018999862, 0.012030459, -0.06809062, -0.0039955284, 0.002274539, 0.021789605, -0.017424315, 0.043643698, 0.0045932974, -0.037487056, -0.032324433, -0.0033088026, 0.0027869781, 0.010681766, 0.002035017, 0.022368602, 0.040275186, 0.016299367, -0.0044988706, 0.005787338, -0.0376234, 0.024431258, 0.062707126, -0.0040847734, 0.006657794, 0.017081613, 0.029126352, 0.00917554, -0.018859604, 0.02436919, -0.018926164, 0.04858983, 0.016048443, -0.07096488, 0.0059926594, 0.01325732], [-0.03456276, -0.09177372, -0.018701851, -0.043540273, -0.014934794, 0.02490981, 0.02300267, -0.03349785, 0.04130805, 0.05624339, -0.013353838, 0.018937876, -0.090426974, -0.032888725, -0.023066917, 0.037815556, -0.008981084, -0.037573934, -0.0029927795, 0.034538735, -0.013701987, -0.021844529, -0.009015131, 0.030769069, -0.00012849733, 0.07311387, -0.0096845245, -0.014850777, 0.013942509, -0.0035649769, -0.010865162, -0.055770036, -0.0016563936, -0.0011417866, 0.0029817969, 0.026393022, 0.022104286, -0.0051091416, -0.03863706, -0.046704937, -0.06478235, 0.01862113, -0.04712667, 0.03144615, 0.007362787, 0.03736746, 0.018944295, 0.029986965, -0.036212083, -0.042645734, 0.019865192, -0.006017409, -0.0420988, 0.022349749, -0.044589672, 0.047458347, 0.042136136, 0.028358921, 0.024259087, -0.009613686, -0.0012805802, -0.011126001, -0.059510734, 0.013792466, 0.024315648, 0.031038402, -0.008879494, -0.0020669398, 0.0093555935, -0.025880678, -0.023929605, 0.027574893, 0.027632417, -0.029178778, 0.076000124, -0.0032959017, -0.0853947, 0.028626349, -0.014722828, -0.033523526, 0.0051750373, 0.02227342, 0.025340606, -0.0451237, -0.059157092, 0.006600589, -0.023320343, -0.00047251146, 0.052571878, 0.021946136, -0.03819995, -0.0032986472, 0.03438896, -0.013645427, 0.004221192, 0.012313228, -0.0005919663, 0.07330937, 0.031513695, 0.04126851, 0.047485255, -0.05139948, -0.0044573196, -0.020627664, -0.008341893, 0.023089865, 0.023052638, -0.022845067, 0.009771837, 0.0017402052, -0.02156229, -0.012632275, -0.0028121145, -0.05469154, 0.0015447135, -0.021767119, 0.03209866, -0.016430086, -0.0531276, -0.020618878, -0.020557376, 0.03909284, 0.015478161, 0.011082619, -0.025752181, 0.0061880522, 0.0027003658, 0.004658852, -0.06199502, 0.012058704, 0.026220867, 0.017245, 0.026942704, -0.03311936, -0.055315353, -0.0004382088, -0.00221905, 0.061968658, -0.02213339, 0.042225648, -0.03926966, 0.0050081005, 0.028115653, 0.021260267, 0.04102222, -0.024292585, 0.012672362, -0.056508068, -0.012971023, -0.007819117, -0.010357214, -0.009630259, 0.013447739, 0.018330637, 0.027513804, -0.06851104, 0.016142339, 0.015101731, -0.023454607, 0.035021562, -0.01281651, -0.0031059012, 0.01710607, 0.026205765, -0.018380608, -0.03600822, 0.021903852, 0.0058718883, 0.0048345746, 0.050336905, 0.063620456, 0.00016474015, 0.02078362, 0.04239643, -0.047685686, -0.0053035347, 0.022917826, -0.05242032, 0.036116533, 0.042080127, -0.009016229, -0.011127649, -0.006009172, -0.018270781, -0.013752783, 0.022938421, -0.016704652, -0.010679555, -0.019763362, 0.03130722, 0.02242992, -0.021339342, 0.027898196, -0.010871752, -0.035419133, 0.034049597, -0.05228633, 4.2832442e-05, 0.021211531, 0.027412213, 0.011078227, 0.012699271, 0.039392117, -0.038150527, -0.015854044, -0.047473717, 0.03434448, -0.0183224, 0.039623305, -0.026252992, 0.00749252, 0.04489279, 0.026712067, 0.06040651, 0.026665049, 0.037190296, 0.005650313, -0.043034524, 0.012269847, 0.07258232, -0.045701116, -0.014536671, 0.029964587, -0.01574916, -0.036687497, 0.01174213, -0.012847536, 0.010242444, 0.018033968, -0.0012501032, 0.0652404, 0.0054979282, -0.033460923, -0.059108768, -0.0030251783, 0.0058955015, -0.045630828, 0.019573327, -0.034779668, 0.040004402, -0.019353675, 0.025490794, 0.030731179, -0.02521348, -0.016258018, -0.01608578, -0.024937266, 0.0023388984, -0.022693781, 0.007693365, 0.051484868, -0.018788615, -0.027783977, 0.004336922, -0.014237667, -0.0067583276, -0.003253069, -0.0126645025, -0.0071947523, 0.0682686, 0.005435327, -0.043552905, -0.0034613279, -0.05469593, 0.053252805, 0.017538443, 0.027055277, -0.0041404692, 0.037047867, -0.023722583, -0.02795256, -0.06863954, 0.03189809, 0.04585927, -0.012435961, 0.024963899, -0.0036868847, 0.011156203, 0.043906547, 0.019550813, -0.05588865, -0.0187348, 0.008611517, 0.021196567, 0.0015677772, -0.0059898146, -0.0007067353, -0.055811767, 0.010370942, -0.038357, -0.004294227, 0.008345188, 0.022753911, 0.036875438, 0.039330065, -0.038366888, 0.04716401, -0.019376738, -0.04194065, -0.028487965, 0.017534943, -0.0028285885, 0.009049039, 0.002160567, -0.020471163, -0.037567347, -0.069997, 0.058502525, 0.018730408, -0.021183113, -0.03002664, -0.02631889, -0.054799166, 0.013922053, 0.016422398, -0.024429318, 0.015243956, 0.111513704, -0.027288642, -0.022767639, -0.01799323, -0.032440633, 0.01330771, -0.056770556, 0.021790732, 0.074972145, 0.021438187, 0.016939132, -0.03199034, -0.0145020755, 0.038492087, 0.028526543, -0.012634747, 0.01671893, 0.015755748, 0.012230859, -0.00068092596, 0.00393729, 0.024620967, 0.040891252, 0.0033625697, -0.045608863, -0.02483293, -0.019810004, 0.027713688, -0.08008129, -0.010027184, -0.08041077, 0.008446675, 0.016215099, 0.020220207, -0.022318996, 0.015894886, 0.017656852, -0.0036949846, -0.004322164, -0.0011795396, 0.0044073486, -0.01167239, -0.015999015, 0.007709565, -0.012556907, -0.04185114, 0.054134715, 0.037896827, -0.027434729, 0.052766275, 0.001124077, 0.05208425, -0.021237204, 0.066484734, 0.013363722, -0.046210714, 0.019736849, -0.02002142, 0.02329975, -0.049525283, 0.013793144, 0.031066423, -0.013882104, 0.014178088, -0.0130540095, 0.030230917, 0.025053684, 0.017380636, 0.04243267, 0.04786443, 0.0240765, -0.011621869, 0.042300373, 0.0064666006, -0.0025699465, 0.029472563, 0.018517893, 0.0115592675, -0.0192735, 0.03795057, 0.049568117, 0.005116143, -0.00020976913, 0.0027083282, 0.053591073, -0.010205104, -0.0048955283, -0.009982156, -0.051949162, -0.03832625, 0.011046377, -0.015772497, 0.02918866, 0.0140841855, -0.011540597, -0.026078366, 0.032097973, 0.03344884, -0.041892324, -0.025530333, 0.042800594, 0.0028872087, 0.019861074, 0.028881283, 0.057199977, -0.052974943, 0.050138116, 0.010599382, -0.003181956, -0.012677579, -0.012790837, -0.043312524, 0.052932113, 0.0062241578, 0.022611205, -0.014767308, 0.07773539, 0.04771534, -0.02319926, -0.008266661, -0.012012578, -0.06765549, -0.0372159, -0.032620087, -0.038894054, -0.008228771, 0.007896545, -0.02729305, 0.004426019, -0.024352988, 0.014580946, 0.048008714, -0.04091047, 0.0127817085, -0.01966668, -0.023176745, -0.038057175, -0.03774746, 0.04087478, 0.064050145, -0.04665661, -0.021733621, -0.041836865, -0.033809073, 0.0018143383, 0.04467643, -0.007307873, 0.012297303, 0.022064198, 0.051344566, -0.031855803, -0.0058015995, -0.0039304257, -0.0035703313, -0.019493978, -0.008044674, -0.04409435, -0.022522178, 0.0040619434, 0.028581321, 0.038492087, 0.012980976, 0.023491398, 0.042496372, 0.012755281, 0.024557265, 0.039785847, 0.039785847, 0.024098191, -0.032789882, 0.0034183585, 0.00079377304, 0.0030537336, 0.013822798, 0.014617944, 0.013139675, 0.0722133, -0.053665757, -0.014053297, 0.0132784685, 0.047357306, -0.03722798, -0.008437442, 0.06370831, 0.039990123, -0.051155116, 0.02226985, 0.0062908777, -0.07770464, 0.017518468, 0.052523557, -0.03317949, -0.01194778, -0.018073505, -0.052308295, -0.027797155, -0.035463065, 0.05393202, 0.023787381, -0.013806324, -0.0337937, -0.01726065, -0.020582635, -0.028012004, -0.0066236523, -0.02303287, 0.033899132, 0.018559352, -0.036102805, 0.04337718, -0.04670713, 0.0017209855, -0.023800286, -0.0075165443, -0.04492025, -0.03621428, -0.014889661, 0.0068509937, -0.006829578, 0.03136433, 0.012627882, 0.0030817392, -0.03278933, -0.019114252, 0.017850146, 0.014510313, 0.0056807897, -0.012564182, -0.009097638, -0.022490326, 0.01612861, 0.010706635, -0.013198982, -0.0007682383, -0.01075259, -0.053182516, -0.072806366, 0.059873164, -0.0022415644, -0.02727438, 0.035386186, 0.040618334, 0.019065928, -0.04790424, 0.0010773321, 0.025334839, 0.021281134, 0.03427515, 0.034529537, -0.01229291, -0.091855474, -0.055027608, 0.035538845, -0.022420038, -0.020269217, -0.03412757, -0.034421906, 0.0088399565, -0.020457981, 0.008123646, -0.028851494, 0.019995062, -0.01909613, -0.0024731616, -0.010870105, 0.00573941, -0.037692547, 0.012666322, 0.037806116, 0.0021386705, 0.0012506524, 0.014475169, -0.012786821, 0.036698617, -0.017906431, 0.0516098, 0.011707534, -0.021623794, -0.0028730682, -0.043641314, -0.013280974, -0.020665554, -0.04345845, -0.01929272, -0.059725996, 0.004687544, -0.032762427, 0.016033337, -0.01621867, -0.027888862, 0.031689968, 0.015529505, 0.02495484, -0.0015970186, 0.00068902574, -0.03202343, -0.011692707, 0.0011301176, 0.009061258, -0.027866347, 0.00028115654, -0.022384893, -0.009811924, 0.023233855, -0.018029163, -0.012626904, 0.012736199, -0.014075948, 0.011868293, 0.014898825, 0.08843911, 0.021223476, 0.009291619, 0.03734989, -0.003821697, 0.07979574, -0.0066236523, -0.06459132, 0.092860736, 0.006522337, -0.02721782, -0.014236845, 0.0032135313, 0.011553776, 0.02727438, -0.015001925, 0.00041452743, 0.00334752, 0.008295217, 0.017646862, -0.0012168806, -0.033781, 0.009418195, 0.050028153, 0.004698389, 0.018584887, -0.03689301, 0.042959563, -0.0017012168, 0.020748474, -0.012546611, -0.029926699, -0.019633183, 0.017459711, -0.06496912, 0.03110953, 0.036515206, 0.010180393, -0.02450455, 0.018444309, -0.0072749252, -0.03957498, -0.008925073, 0.040634807, 0.018637054, 0.018704873, -0.02706571, 0.009310565, -0.01128072, -0.009732849, -0.036978673, 0.0046506147, 0.028733978, -0.049968988, 0.0028269412, 0.017394366, -0.005140785, 0.059126344, 0.02355949, 0.015520719, 0.027685134, -0.04468961, -0.05323084, -0.038436078, 0.0129861925, -0.02020483, -0.0059585143, -0.04088631, -0.027647791, 0.02661542, 0.03901706, 0.034168754, 0.022832163, 0.046319444, 0.051809683, 0.0057731816, 0.03736197, -0.003884024, -0.030750949, -0.009350977, 0.007933336, -0.016320808, -0.07333573, -0.020241074, 0.009945912, 0.014802452, 0.06309329, 0.024324434, 0.0048196106, 0.014003737, -0.02637792, 0.030917335, -0.00054007315, -0.0073563345, 0.011723459, -0.054096274, -0.0023722583, 0.03673596, -0.017603036, -0.036238443, -0.05124517, -0.025039405, 0.00024381543, -0.018012276, -0.033186905, 0.013769532, 0.029028863, 0.027714582, -0.005745313, -0.04605476, -0.04458747, 0.020886855, 0.0062678135, 0.017375968, -0.019410785, 0.004352435, -0.019876998, 0.0010874222, -0.057818305, -0.031045282, -0.01489251, 0.04264354, 0.0015017438, 0.014565364, 0.037868273, -0.0074111107, 0.022052668, -0.0050553265, -0.039117, 0.044370014, -0.024872985, 0.019995062, 0.0014211583, -0.0078086834, -0.07596499, -0.0125532, -0.002205459, -0.009368773, 0.0060558487, -0.007098516, 0.029366031, 0.0147265345, 0.00057869055, 0.0011806377, 0.0069926707, -0.00870686, -0.04156724, 0.0041536484, 0.005617639, -0.08285771, -0.025874227, -0.011315658, -0.048042074, -0.058641937, 0.0011669095, 0.021750093, -0.014480385, -0.05174708, 0.06034322, -0.035023756, -0.01837022, 0.004811511, -0.052279193, 0.0063842307, -0.031911265, -0.032836627, 0.020797072, -0.040840182, 0.035560813, -0.0038103026, 0.05507593, -0.022580933, -0.025864206, -0.00379122, 0.019704022, 0.015739275, 0.027257908, 0.00630845, 0.014046844, 0.00729744, 0.013095745, -0.044669293, -0.075393885, 0.0054034772, 0.015248486, -0.0032596586, 0.011786609, 0.039375097, 0.009566461, -0.007695871, 0.016466843, 0.008532717, 0.010630134, 0.0065276916, 0.050975, 0.016430086, -0.00064042734, -0.031599905, -0.006977844, -0.0006908104, -0.010260017, -0.0129650505, -0.010668573, 0.028237563, 0.03286017, 0.018243324, 0.049379762, 0.012796055, -0.008670686, -0.0048433607, -0.019711709, 0.04296423, -0.067249134, -0.008579118, 0.057355933, 0.010147444, 0.018433325, 0.009349554, -0.021605123, 0.019363558, -0.06248704, 0.005724171, -0.06008403, -0.04466875, -0.0095900735, -0.013942509, 0.0031374763, 0.021443676, 0.025695072, -0.0021800615, 0.05353012, 0.0022415644, 0.038621135, -0.0037077519, -0.025781834, 0.055241767, 0.0047857016, -0.0051927473, 0.033378, -0.013093787, 0.0022646282, 0.029569762, -0.028311145, 0.0073364284, 0.014016093, -0.028286435, 0.023899404, 0.045506176, -0.047919616, -0.006324924, -0.016664565, 0.0016572861, 0.0051313816, -0.02459598, 0.025424898, 0.03146537, 0.003080778, -0.025572341, -0.02976635, -0.029137043, 0.00072101277, 0.012726726, 0.008644465, -0.022569401, -0.011518856, 0.0007687874, 0.028595597, -0.034081444, -0.054671768, 0.068455026, 0.02573461, 0.041830823, 0.028673023, -0.04107109, 0.0356937, 0.014354358, -0.025512759, -0.012061176, -0.02874654, -0.04229319, -0.045646753, 0.028465452, -0.003346971, 0.03342873, 0.08186817, 0.037048414, 0.008678512, -0.09356362, -0.012295107, -0.00341726, -0.031770688, -0.050735574, -0.02714698, -0.001094973, 0.0016979219, 0.01964142, 0.008193626, -0.029948149, 0.057391077, 0.017571185, -0.015202771, 0.0030026638, -0.024916675, -0.0056154425, 0.0006007525, -0.032324214, 0.06401967, 0.03389213, 0.03670917, -0.050177656, 0.012099615, -0.040359143, -0.011316036, -0.013319242, 0.04006261, -0.017696884, 0.02856265, -0.004708274, -0.007547536, 0.02214602, 0.056259863, -0.039894573, 0.030988447, -0.0022750616, -0.034456093, -0.005792813, 0.026605537, -0.042203132, 0.04996679, 0.018808248, -0.010243543, 0.042709433, -0.03266248, 0.053349454, 0.027109504, 0.031025926, 0.023596281, -0.0013560861, 0.0057472354, 0.025836749, -0.038689774, 0.00085143204, -0.0016787022, -0.035924338, 0.0023354662, -0.011172197, -0.025756026, 0.04516297, 0.021329457, 0.033153407, -0.02832762, -0.059273507, -0.030140858, 0.063444726, -0.0030921728, -0.030342942, -0.0030718548, -0.0011218805, -0.03954203, -0.0037047316, 0.013842567, -0.015650865, 0.0014755226, -0.06796959, -0.020684225, 0.012969856, 0.03301942, 0.0026048853, 0.032665227, -0.014091324, -0.061208654, -0.0034449913, -0.0056352112, -0.0010981305, 0.05288379, 0.025679696, 0.02486739, 0.02911892, 0.043840654, -0.01802827, -0.006604708, -0.020072764, 0.040945616, 0.05578349, 0.0067496104, -0.0059071872, 0.014326191, 0.014966094, -0.0056052837, -0.0038998113, -0.005294749, -0.008229045, 0.03013427, 0.0041680974, -0.058994547, 0.0020361883, 0.0011257244], [-0.032257114, -0.084951125, -0.02520521, -0.04405821, 0.018841831, 0.02710692, -0.025887033, -0.0027094258, 0.01327847, 0.03839737, 0.0066404766, -0.0020936474, -0.05152279, 0.009325321, 0.00432212, 0.035524465, 0.03194302, -0.028630227, 0.04200405, 0.0659042, -0.014603388, 0.00692006, -0.017169297, 0.0028544317, -0.014341682, 0.044318184, 0.042478044, 0.027164776, -0.0063027916, 0.0027680243, -0.004747951, -0.041174732, -0.002294272, -0.00055767695, 0.0025485288, 0.021377448, -0.0066389875, 0.0018737485, -0.044067897, -0.05511119, -0.06929694, 0.0376489, -0.015635313, 0.012295211, -0.0050841463, 0.035595976, -0.0035804545, 0.03392245, -0.012131832, -0.044851523, 0.030817732, 0.0102765495, -0.033046454, 0.033196673, -0.011722978, 0.027532257, 0.04006037, 0.010064472, -0.0028365543, -0.00530749, -0.034141075, 0.0032119805, -0.08242594, -0.01631714, 0.023415478, 0.033507295, -0.028135123, -0.005151931, 0.020432925, -0.0363071, -0.022405898, 0.020619646, 0.01493052, -0.022871707, 0.016789526, 0.001454777, -0.078120455, -0.0027138952, -0.017151171, -0.013152336, 0.0058687674, 0.024721526, 0.014814441, -0.04553186, -0.02153934, 0.025076093, -0.018104635, -0.048515406, 0.043446656, 0.0162501, -0.06576913, 0.003669221, 0.03425616, -0.010917158, -0.014872046, 0.02175511, 0.024900671, 0.046509158, 0.020924555, 0.021485707, 0.045485184, -0.05077107, 0.009564432, -0.006785886, 0.00787967, 0.002810483, -0.0029418326, -0.02879932, -0.012561884, 0.024120644, -0.0069235363, 0.0021378442, -0.0049450994, -0.050096568, -0.0015305078, -0.02136491, 0.02181793, -0.010025273, -0.034235302, -0.007954965, 0.007031794, 0.03214653, -0.008143113, 0.011714194, -0.023220813, -0.015340337, 0.03236016, -0.0026279842, -0.05306025, 0.012446052, 0.018771315, -0.0060137734, 0.040583782, -0.041254684, -0.008804641, 0.011327812, -0.008815565, 0.039880604, -0.0076375166, 0.041181684, -0.035890084, 0.011289605, 0.011079049, 0.0026314603, 0.016697284, -0.021849692, -0.015873183, -0.03670239, 0.0108645195, -0.01256238, -0.025511112, 0.00886324, 0.0058598286, -0.0047427365, -0.0015513648, -0.05428535, 0.02958667, 0.01908119, -0.030153288, 0.06657609, -0.016837573, -0.006547117, 0.01824691, 0.026305912, -0.0056472854, -0.06744529, 0.001892526, -0.0069016865, -0.007958193, 0.008018281, 0.10138497, -0.0075730835, 0.03318401, 0.028527124, -0.041859042, -0.015099984, -0.0020626101, -0.016570527, 0.032564756, 0.028985294, 0.006624586, 0.0027486568, -0.020722937, -0.0076445933, -0.037441324, 0.038067035, 0.006276597, 0.0020449809, 0.01771369, 0.022881141, 0.035906844, -0.007585995, 0.0155047085, -0.0067983326, -0.0051755197, 0.03855196, -0.028739976, -0.004736529, 0.005361875, 0.047081985, 0.028914528, 0.0077061714, 0.016309692, -0.021382911, -0.031726502, -0.077202745, 0.04984852, 0.0039146636, 0.040611174, -0.021654053, -0.02315129, 0.028174851, 0.0123553, 0.038580514, 0.03561584, 0.032409817, 0.030764721, -0.03461371, 0.039273515, 0.044844575, 0.011549822, 0.017369332, 0.0384226, 0.00825342, -0.008881333, 0.00944227, -0.005570313, 0.031462315, 0.008591104, -0.0058325157, 0.06996039, 0.006469151, -0.023574565, -0.05115134, -0.0008139202, -0.0073227994, -0.052508034, 0.034859028, -0.034229342, 0.06454203, -0.00703375, 0.0187733, 0.034725938, -0.028456917, -0.0119500775, -0.013553585, -0.023522247, 0.027931767, -0.0413108, -0.008025979, 0.073760346, 0.0012553938, -0.015374167, 0.023734542, -0.0022028983, -0.027036652, -0.010179218, -0.000275114, 0.021743936, 0.032552343, 0.02638897, -0.015871197, -0.024096062, -0.044684544, 0.036197852, 0.04502335, 0.013557558, -0.024878448, 0.0018707999, -0.036732186, -0.03407838, -0.07471579, 0.02871018, 0.016101617, -0.015277267, 0.008902967, 0.0016615469, 0.012391054, 0.047422897, 0.034306813, -0.066267714, 0.0015300112, -0.0034444493, -0.01465553, 0.011516053, -0.00285617, 0.010473699, -0.05327056, -0.015939975, -0.030206919, -0.032191314, -0.0064756074, 0.008570745, 0.020889295, 0.035238426, -0.012904535, 0.0379558, 0.021640643, -0.0610614, -0.014733, 0.020283947, -0.0031662937, 0.0070774807, -0.008019523, -0.0068579856, -0.05819753, -0.02522979, 0.040291786, 0.03273608, -0.009955129, -0.02841123, -0.024861814, -0.056975413, 0.010532421, -0.007420629, -0.0017490099, 0.028431095, 0.090888925, -0.03016918, -0.027858518, -0.032302678, -0.010420563, -0.02382517, -0.06980149, 0.03786244, 0.057078704, 0.0309538, 0.0014401274, -0.05151758, -0.0032104908, 0.034348525, 0.04173539, -0.023773028, 0.003898524, 0.046125792, 0.0029401875, -0.017326098, 0.008584648, 0.019357298, 0.0388894, 0.008325675, -0.06651501, 0.0033828097, 0.0012285776, 0.038342647, -0.04967943, 0.0044177147, -0.070455, 0.0038839986, 0.009445249, 0.035674438, -0.021288559, 0.016843531, 0.00556932, -0.032354202, -0.021680247, -0.018244924, -0.020249184, -0.006528246, 0.010799403, 0.012504279, -0.017263683, -0.059027348, 0.033622008, 0.009015198, -0.0034955367, 0.081910476, 0.016562458, 0.035290074, 0.007901147, 0.06666598, 0.045332227, -0.0036037946, 0.016624035, 0.008017536, 0.07929937, -0.051197022, -0.0112675065, 0.054387156, -0.006830177, 0.02276295, -0.026750613, 0.06720628, 0.053235054, 0.008762306, 0.07180773, 0.042574137, 0.036013365, -0.041078392, 0.03617004, -0.011097423, 0.028870085, 0.013158543, 0.063858226, 0.0041555744, -0.008277256, 0.025502669, 0.011468379, 0.0037299297, 0.020669242, -0.0016694303, 0.04802676, -0.002649586, -0.021702718, 0.012909501, -0.043265402, -0.010621188, -0.014147017, -0.0073722107, 0.009401549, 0.03694473, 0.020336585, -0.016243644, 0.032165494, 0.03001896, -0.026180523, -0.033514246, 0.03175034, 0.029416587, 0.01104466, 0.02915215, 0.042879045, -0.068140864, 0.00723515, 0.02668407, -0.022542339, 0.022632593, -0.0196488, -0.027509412, -0.016097024, 0.031257715, 0.051933974, 0.0034662376, 0.088020585, 0.03454518, -0.05711247, 0.009056912, -0.043009154, -0.06289483, -0.018477377, -0.035437066, -0.03493873, -0.0071996436, 0.00597057, 0.0018997266, 0.0072975974, -0.024305377, 0.008990368, 0.018128721, -0.03969984, 0.03002087, -0.018248897, -0.01602452, 0.0028852206, -0.030939894, 0.010075926, 0.05903529, -0.038708635, -0.036309086, -0.038253758, -0.036642797, -0.03006837, 0.017544724, -0.014135595, 0.014381161, 0.01087743, 0.013546136, -0.056184832, 0.017779117, 0.007980788, -0.00020310763, -0.026315598, -0.021548279, -0.02636774, -0.021452434, -0.015327052, 0.03646204, 0.008308542, -0.0112630995, -0.010702629, 0.023876319, 0.027101459, 0.029139735, 0.007861109, 0.058464453, 0.04218878, -0.04152334, -0.006333581, -0.036322992, -0.00045935097, 0.009387644, 0.013877862, 0.020398162, 0.06104551, -0.054756623, -0.048146937, 0.024071977, 0.041826263, -0.06636107, -0.0018297067, 0.047029596, 0.028756239, -0.057835516, 0.016958244, -0.0040224246, -0.05553727, 0.054063234, 0.05614709, -0.020825235, 0.019067287, -0.00049709226, -0.06124812, -0.012785352, -0.038516954, 0.019163625, 0.03605036, 0.015744068, -0.028305704, -0.030743241, -0.031466287, -0.02662597, 0.013650421, -0.019983506, 0.039079595, 0.021713644, -0.02284936, 0.03216748, -0.019040758, 0.014301272, 0.015428234, -0.021264846, -0.045017388, -0.04988204, 0.008521581, -0.005953189, -0.036666635, 0.02512988, -0.0025564744, 0.022733776, 0.0032929257, -0.0031484163, 0.026305027, 0.027049068, -0.004856457, -0.03525432, -0.026992457, -0.011500162, 0.028683364, 0.00407854, 0.015261377, -0.014397301, -0.023883644, -0.107431516, -0.06831567, 0.045667928, -0.004180839, -0.029581208, 0.021828359, 0.060934275, -0.007933736, -0.048018314, 0.022149965, 0.01572197, 0.020078355, -0.0051963767, 0.016819073, 0.013489524, -0.08829471, -0.04012046, 0.04158343, -0.04303535, -0.04532925, -0.016925469, -0.049826417, 0.00038684803, -0.015081112, 0.041142445, -0.00077981036, 0.014767264, -0.0041706585, -0.022869224, -0.039548878, 0.0016613606, -0.006976176, 0.005056337, 0.029672584, -0.03999184, -0.016037308, 0.026667185, -0.012074351, 0.056599487, 0.0032906912, 0.032383125, 0.017821327, -0.010905985, -0.020655649, -0.044975672, 0.020890467, 0.0095194895, -0.055759747, -0.04959203, -0.018230027, -0.0026173072, -0.022730177, 0.03372679, -0.033623125, -0.017477931, 0.04489001, 0.0019387715, 0.027291408, -0.008171481, 0.018137658, -0.015467961, -0.014625735, -0.0013231791, -0.008247833, -0.009198938, 0.0007170841, -0.020268552, 0.0019387094, 0.030124733, 0.00022520611, 0.0091204755, 0.037286386, 0.0041048597, 0.012520511, -0.02177603, 0.069914214, 0.018959029, 0.0022028983, 0.0409314, -0.0072445236, 0.06394762, -0.029342843, -0.06636107, 0.057962645, -0.03969587, -0.04097113, -0.009449222, 0.0022734147, -0.017034223, 0.040269934, -0.025274733, -0.00022272315, 0.03041996, -0.011309469, 0.015326927, 0.02531446, -0.03682952, 0.015623892, 0.05200052, 0.011763358, 0.01819421, -0.043781485, 0.042707223, 0.024516927, 0.0037488006, -0.036837466, -0.023306228, -0.03780452, 0.021534933, -0.035232466, 0.025048284, 0.016347928, 0.031008674, -0.025636626, 0.0128946025, -0.011949084, -0.01554245, -0.035633966, 0.019337434, 0.011670991, 0.011925, -0.03413654, 0.003865997, 0.003133022, -0.03891969, -0.021584032, -0.0030719405, 0.044014268, -0.011330327, -0.020181647, 0.009767043, 0.035761096, 0.031314824, 0.03914763, -0.044135433, 0.057292238, -0.041129045, -0.057871766, -0.0028493418, 0.02990896, 0.009782562, -0.022548422, -0.017295433, -0.01709729, 0.043348826, 0.0469998, 0.03741153, 0.028987281, 0.076222464, 0.05986063, 0.0049291463, 0.026534999, 0.026407963, -0.012435748, 0.03767721, -0.004129689, -0.04023418, -0.051204972, -0.013863647, 0.009325073, 0.0071887183, 0.054792374, 0.08069133, -0.021259757, 0.021491792, -0.031222954, 0.0054347427, 0.013656431, -0.013343525, -0.016318133, -0.0547745, -0.03585619, 0.04339054, -0.024569567, -0.029820569, -0.039394934, -0.012822596, -0.008732138, -0.011120763, -0.057008184, -0.02263483, 0.022214709, -0.009747179, 0.005342873, -0.0038108751, -0.07411193, 0.03531391, -0.0071579297, -0.008142182, -0.021705328, 0.003312293, 0.01030436, 0.030445285, -0.058594313, -0.0045200135, -0.030207913, 0.005333437, -0.0033296738, -0.020868935, 0.043051366, 0.03681959, 0.028089559, -0.0012663188, -0.019106021, 0.041551646, -0.04905918, 0.0022962582, 0.037267517, 0.013374314, -0.039024472, 0.014806247, -0.01628188, 0.005585118, -0.0006098195, -0.0060942215, 0.03849808, -0.0053045107, -0.013938695, 0.019010674, -0.004313678, -0.009383019, 0.01452654, -0.009757856, 0.0027556093, -0.07032242, -0.026491392, 0.0068592275, -0.03932243, -0.0414568, 0.013166737, 0.014602333, -0.013443977, -0.014211077, 0.06789853, -0.019744145, -0.019642824, 0.017445404, -0.05431167, 0.027086312, -0.023073323, -0.029064748, 0.032922305, -0.038467787, 0.048439927, 0.006074358, 0.044061936, -0.03267835, 0.006587838, 0.0019188456, -0.01956587, 0.026910517, -0.013871903, 0.0030828656, 0.0069322265, 0.013638502, 0.021472795, -0.012116933, -0.06123223, -0.016192494, 0.0138182705, 0.0022168339, 0.022494294, 0.04061159, 0.01461183, 0.002538597, -0.0048060524, 0.038809944, -0.029101498, -0.021972371, -0.014905815, -0.0053349272, -0.009806739, -0.01497449, 0.0062973294, 0.0053751515, -0.011854731, -0.044793796, 0.010233844, 0.039801147, 0.026458118, 0.018871132, 0.027850572, 0.028375475, -0.0067159594, -0.028318118, 0.010663399, 0.007065066, -0.0735915, -0.0018292101, 0.052051168, -0.011146586, -0.004834855, 0.02962938, -0.016389394, 0.041425016, -0.052246828, 0.0012017614, -0.04690048, -0.064116456, 0.005414879, -0.014312384, 0.028207129, 0.0022545443, 0.028103342, -0.011754839, 0.03461346, 0.027469685, 0.018739471, 0.025658103, -0.020266812, 0.036650743, -0.016581472, -0.025749478, 0.060479388, -0.00872593, 0.021977337, 0.023951055, -0.034032695, 0.031402722, 0.02438086, -0.050124377, 0.058538694, 0.014185442, -0.042671468, -0.012226185, -0.0029625655, 0.0132511575, 0.005578259, -0.018811043, 0.04575831, 0.03332256, -0.02391704, -0.041726448, -0.015094521, -0.015733143, -0.010545891, 0.032937203, -0.004817723, -0.0009460147, -0.040126912, -0.040427353, 0.05181479, -0.038766243, -0.048710074, 0.06799387, -0.004239716, 0.044001352, 0.017302385, -0.020558905, 0.06878843, 0.03626638, -0.020853044, -0.020180654, -0.002974608, -0.009372994, -0.041471448, 0.022110423, -0.011439825, 0.044981632, 0.07533555, 0.07269763, 0.00013954338, -0.07819519, -0.019533092, -0.014143541, -0.0122242905, -0.05014027, -0.033393823, 0.01323924, 0.011248885, 0.04296595, 0.014379671, -0.01124094, 0.07019677, 0.005413885, 0.004839076, -0.0078506805, -0.022853455, -0.03688911, -0.0064423354, -0.01764305, 0.07756824, 0.04330711, 0.028127922, -0.020937467, 0.0021217049, -0.03377744, 0.013745767, 0.0142068565, -0.008444299, -0.0025847182, 0.028043253, -0.017731445, -0.015065967, 0.04469907, 0.044926014, -0.049058188, 0.061687358, -0.011181596, -0.026406473, -0.02188621, 0.03709669, -0.04269332, 0.021977337, 0.04471099, -0.0015781809, -0.0027868948, -0.010129309, 0.082683176, 0.014972359, 0.034569886, 0.01456515, 0.00023091698, 0.017903887, 0.033291772, -0.03578096, -5.4749667e-05, 0.006272996, -0.0109519195, -0.013476116, -0.020133974, -0.03494643, 0.016501065, 0.011726113, 0.039863717, -0.023176119, -0.065228835, -0.03716919, 0.056202706, -0.030632006, -0.02160191, 0.007219508, -0.0087390905, -0.020373333, -0.018363114, 0.020107158, -0.024498552, -0.010392753, -0.058439374, 0.011542869, 0.022294164, 0.029450107, -0.016431358, 0.039736837, 0.0011223061, -0.034529287, -0.0003075479, 0.02906568, -0.005018161, 0.03787138, 0.013808587, 0.021856168, 0.03490869, 0.008460499, 0.01730735, 0.017361294, -0.043198854, 0.030013496, 0.05891859, -0.0072880373, -0.0084972475, -0.012705897, 0.017440936, 0.005456096, 0.021410225, -0.03221118, -0.03298537, 0.049925737, 0.030569434, -0.041852087, 0.020578677, 0.0030818724], [-0.018039286, -0.10094941, -0.019886632, -0.025895681, -0.025436237, 0.038366087, 0.0108148055, -0.041323215, 0.046363685, 0.032423284, 0.021714132, 0.0025742059, -0.078776695, 0.0052026655, -0.02332519, 0.04586798, -0.02033494, -0.02008423, 0.029340949, 0.051932994, -0.032084055, -0.0009945601, -0.008087118, 0.015438096, -0.036515743, 0.0476922, -0.008025012, -0.011546376, 0.019990142, 0.010795958, -0.004155279, -0.03537698, -0.0033180555, 0.0009234589, 0.036929216, 0.0055770176, 0.021566218, -0.011971271, -0.0430285, -0.06342569, -0.054879837, 0.0119921155, -0.022471404, 0.022134457, -0.0009677186, 0.04208848, 0.025300032, 0.036577422, -0.030781677, -0.04915976, 0.024584452, 0.014883564, -0.054114573, -0.01051084, -0.036799006, 0.04108496, 0.017154519, 0.036327142, 0.030448442, -0.0011996541, 0.008492452, -0.034675393, -0.036769312, -0.0018520576, 0.0032101187, 0.031740114, 0.02404134, -0.012246538, 0.0008456919, -0.023845457, -0.020970425, 0.011037711, 0.013838586, -0.019232443, 0.043766353, 0.010536825, -0.066635236, 0.021230416, -0.018311555, -0.026596984, -0.020680454, 0.0030296533, 0.030173248, -0.060590778, -0.078982286, 0.019679897, -0.014361014, -0.004942532, 0.035572298, -0.015089444, -0.03627817, 0.0177219, 0.019657338, 0.000102796905, -0.022990527, 0.0139798075, 0.0003629302, 0.04674975, 0.047405366, 0.02097942, 0.022938415, -0.05838179, -0.01434131, 0.005886836, 0.0155194765, -0.0027047007, 0.026548441, -0.04367041, -0.0031147462, -0.0055121984, 0.021136185, -0.012829053, 0.0056998027, -0.059370924, 0.016860977, 0.003991518, 0.058666192, -0.026649525, -0.06458387, -0.04118044, -0.024760349, 0.012772515, 0.0048897057, -0.0009103237, -0.007028024, -0.010327377, 0.012191713, 0.018639361, -0.05236474, -0.0025893396, 0.051212844, 0.01754115, 0.01942276, 0.0050273393, -0.053673692, 0.0025693516, -0.009075253, 0.03197241, -0.022243965, 0.013841603, -0.03452716, -0.03865783, 0.031452995, 0.0010185103, 0.035036325, -0.035796165, 0.007463055, -0.057726458, 0.0028109243, -0.0061872317, 0.005737209, -0.0024614148, -0.0012472691, 0.008179778, 0.015279047, -0.036851548, 0.008306328, 0.030599212, -0.016897528, 0.031303942, -0.016235342, 0.035183955, 0.036808427, 0.023506226, -0.024216667, -0.04878912, 0.02969003, 0.0016675943, 0.0073901694, 0.04994787, 0.057424635, -0.008134661, -0.0019393992, 0.05547149, -0.048064977, -0.017633095, 0.028117238, -0.041740112, 0.036865827, 0.04855669, -0.016913518, 0.013011804, -0.0074009486, -0.0010719433, -0.04247225, 0.015198522, -0.046784297, -0.03993317, 0.0037446627, 0.03159577, 0.04738024, -0.020486565, 0.005567023, -0.0027755164, -0.0077032, 0.050162893, -0.054578304, 0.022431426, 0.029767128, 0.011723416, -0.028236026, -0.011883893, 0.01567767, -0.012100624, -0.048442468, -0.055763893, 0.0272309, -0.0029902477, 0.045746904, -0.050839495, 0.008232604, 0.04361073, 0.016088856, 0.06204878, 0.014074038, 0.04168072, 0.024127005, -0.046160378, 0.032349043, 0.059887193, -0.035181668, 0.0025850567, 0.042562485, -0.012629171, -0.029117223, 0.006342569, 0.0061226976, 0.022924852, 0.018927194, 0.00177496, 0.043467097, 0.0018857521, -0.047588114, -0.052370455, 0.013725385, -0.00682343, -0.041518528, 0.05727958, -0.058635354, 0.035399828, -0.043521926, 0.014687394, 0.03502633, -0.032783646, -0.0093153985, -0.02049599, -0.06799216, 0.005295754, -0.007971329, 0.002828628, 0.07033821, -0.017271878, -0.03236732, 0.0007230049, 0.008811123, 0.016066015, -0.0115327425, -0.02310189, -0.023929404, 0.03771904, -0.022280088, -0.02784229, 0.006801336, -0.050190017, 0.05432531, 0.029354228, 0.013804196, -0.020368636, 0.02580659, -0.0457609, -0.014072325, -0.068316534, 0.04995016, 0.03597424, -0.0096219685, 0.022553926, 0.023927407, 0.020693017, 0.06345081, 0.02364129, -0.05196783, -0.035691015, 0.023036785, 0.0007315713, 0.029931033, -0.014605156, 0.0007308574, -0.03608628, 0.010758267, -0.036332425, -0.01988549, 0.02672948, 0.018586822, 0.04115417, 0.04416933, -0.025717787, 0.052129455, -0.011034248, -0.041813213, -0.028546128, 0.036593415, -0.003770362, -0.0031907016, 0.00018503443, 0.002181579, -0.030030973, -0.05475648, 0.03053582, 0.036566574, -0.008844389, -0.011035819, -0.014824171, -0.038578536, -0.018782707, 0.00683942, -0.01057666, 0.040611632, 0.089721136, -0.02436208, -0.013306488, -0.018421205, -0.0403672, -0.011588352, -0.053408418, 0.020127634, 0.06764607, 0.03738495, -0.021888886, -0.039542545, -0.050168317, 0.03582358, 0.048314545, -0.0050581787, 0.016176235, 0.0316683, 0.012351547, 0.004233519, -0.006692364, 0.018915057, 0.025962787, 0.035869267, -0.076370105, -0.046546437, -0.00661441, 0.06328634, -0.062210403, -0.021966556, -0.057091687, -0.0020468007, -0.0048143216, 0.01704287, -0.039472297, 0.012679427, -0.0006830283, -0.025486778, 0.0016727342, 0.004080466, 0.005474506, 0.008322838, 0.0059773545, 0.006391683, -0.020089084, -0.056243613, 0.045952212, -0.0025253773, -0.029650053, 0.05945316, -0.0029808248, 0.034574024, -0.0063515636, 0.0680881, 0.029354228, -0.019220738, 0.0050033536, -0.007236902, 0.053577747, -0.049834225, -0.0068762563, 0.03062434, 0.009608655, -0.0015944942, -0.009303833, 0.03796975, 0.021834062, 0.032481253, 0.028120665, 0.025888829, 0.04118372, -0.02999842, 0.03859224, 0.011818217, 0.014206532, -0.0045139263, 0.022161977, 0.015485782, -0.019626213, 0.052695975, 0.04382061, -3.5122277e-05, -0.01675229, -0.012912433, 0.026369119, 0.016433798, -0.009184618, -0.020915171, -0.058948312, -0.047526438, 0.0151020065, 0.01505632, 0.022957975, 0.030747695, -0.019858077, -0.022898583, 0.03587726, 0.026312865, -0.006742906, -0.022300074, 0.013770787, 0.0137833515, 0.027703336, 0.052234534, 0.040218715, -0.059539966, 0.04388971, 0.017348833, -0.010176893, -0.030328512, -0.01518653, -0.051003255, 0.018865516, 0.0070727123, 0.040922947, -0.0033957246, 0.09296039, 0.053139146, -0.005315742, 0.004713809, -0.002654016, -0.032486103, -0.02007852, -0.042059924, -0.03231021, -0.027240608, 0.016970627, -0.037024017, 0.009232875, -0.03116686, 0.043909125, 0.059569094, -0.0186999, -0.002236975, -0.021741545, -0.00427321, -0.030940512, -0.029749423, 0.05008265, 0.075822994, -0.0515892, -0.0127719445, -0.045525678, -0.038683616, -0.012252249, 0.039792683, -0.011580071, -0.0019474302, 0.012867888, 0.037153084, -0.05257262, 0.0012552644, -0.013597603, 0.008507014, -0.041752104, -0.0097507145, -0.040923446, -0.021911303, -0.011790805, 0.05519051, 0.009941602, -0.0045247767, 0.036526773, 0.03525134, 0.010113502, 0.03688467, 0.03499035, -0.0028029287, 0.022539936, -0.034408405, -0.009022713, 0.00010850784, -0.010435028, 0.00931911, 0.013859306, 0.0065061874, 0.059722718, -0.042455122, -0.0020433739, 0.02283005, 0.029613717, -0.050388757, 0.007857109, 0.056358974, 0.052202553, -0.08285887, 0.031592913, 0.011184303, -0.06765407, 0.026588991, 0.048495583, -0.037121102, 0.0020503697, -0.039199315, -0.019959018, -0.025861418, -0.02465298, 0.03572078, 0.03874301, -0.01416884, -0.0323202, -0.025553027, -0.013403574, -0.0043920693, -0.010608355, -0.008020443, 0.025973352, 0.023787204, -0.013597746, 0.031310793, -0.042231824, 0.02702245, -0.015370421, -0.0113028055, -0.048847944, -0.03901485, -0.016097425, -0.025240066, -0.024230372, 0.036490615, 0.006257476, 0.005809167, -0.019709593, -0.02372724, -0.01394183, 0.0065818573, 0.016751327, -0.010539252, -0.004671441, -0.017917927, 0.030952148, 0.03530731, -0.0063951095, -0.009140929, 0.017251603, -0.06704186, -0.058890063, 0.057790134, -0.009815534, -0.018832393, 0.04984108, 0.06612125, 0.028387938, -0.021762677, 0.03538498, 0.00044887981, 0.03189788, 0.014309329, 0.050630905, 0.0037096832, -0.0865527, -0.049680598, 0.025614133, -0.037255883, -0.030241707, -0.037852675, -0.008260302, 0.004721233, -0.018563122, 0.010478716, -0.01794948, -0.00079496275, 0.0037623667, 0.008334973, -0.021067083, -0.0005570664, -0.005148554, 0.009301264, 0.05001469, -0.008416211, -0.013729668, 0.047689196, -0.010349935, 0.049083237, -0.03537013, 0.058562253, 0.014876995, -0.059736423, -0.006670377, -0.027051577, -0.009332817, -0.0009842804, -0.049959294, -0.033123445, -0.062478814, 0.0008446479, -0.028609887, 0.014355017, -0.005833724, -0.016927224, 0.029060684, 0.004180407, 0.0035669098, -0.040251557, 0.025889972, -0.042832118, -0.021173878, 0.024502214, -0.008096925, -0.0066955048, -0.0056960904, -0.017538294, 0.014589665, 0.016922655, -0.019289268, -0.00655987, 0.01856512, -0.0072371876, 0.02203423, -0.010631484, 0.06917547, 0.0075155953, 0.009177193, 0.03849858, 0.004081608, 0.049598932, -0.009763992, -0.08309645, 0.11800171, 0.022667859, -0.05233276, -0.010913033, 0.007296296, 0.0040661884, 0.036771595, 0.003364314, 0.00026612976, 0.0018330687, -0.0020293822, 0.030859059, 0.01964506, -0.04568751, 0.018481597, 0.034171976, -0.0125709195, 0.018222464, -0.03976184, 0.022128176, -0.0035407823, 0.0019691319, 0.002974257, -0.015841004, -0.018357135, 0.021194438, -0.06553417, 0.0042306636, 0.03124112, 0.00440085, -0.0045390544, 0.049242, -0.017882092, -0.036243904, -0.015200806, 0.025945652, -0.002419368, -0.005215801, -0.031174302, 0.018553128, 0.0074234353, -0.031251974, -0.025599854, 0.009527417, 0.04798674, -0.02367898, -0.015067742, -0.021696, -0.029944167, 0.031718556, 0.03991604, 0.014610867, 0.036850974, -0.038774993, -0.054918386, -0.018316695, 0.010711437, -0.02696177, -0.027648369, -0.021325218, -0.026059702, 0.040434588, -0.0059747845, 0.03280706, 0.024506781, 0.024456525, 0.049685173, 0.027329128, 0.009790263, 0.012331917, -0.0037594398, 0.0439057, -0.001886109, -0.027702624, -0.09095013, -0.0021307513, 0.032470115, 0.024381142, 0.057456616, 0.030694583, -0.009678899, 0.024213238, -0.03071857, -0.008036434, -0.0062716105, 0.0032677993, 0.017725559, -0.08582856, -0.011673159, 0.025909387, -0.042978242, 0.0006307732, -0.03613854, -0.0034939526, 0.012024954, -0.02061078, -0.022957405, 0.011534954, 0.028796839, 0.028537849, 0.003912279, -0.03395496, -0.041330066, 0.00944932, -0.009259717, 0.004919974, -0.014190542, 0.03450264, -0.008833394, 0.009882209, -0.027912784, -0.016006013, -0.039607648, 0.015666962, 0.017357115, -0.0045573297, 0.040139336, 0.023980234, 0.012793431, -0.017902652, -0.016994612, 0.03369911, -0.021497115, 0.008230605, -0.0005759482, 0.019574244, -0.061728362, -0.01599634, 0.010278548, -0.011126052, 0.021432012, -0.010734852, 0.011771666, 0.0018639435, 0.0052379305, 0.003533358, 0.009621005, -0.0020599356, -0.009672618, 0.023172136, 0.022007102, -0.0866555, -0.04929911, 0.006145541, -0.038334105, -0.052780498, -0.019993998, 0.024572743, -0.01667023, -0.0073636845, 0.04486096, 0.0062866015, -0.0047672065, 0.020670174, -0.08384572, 0.02764323, -0.009311115, -0.033528924, 0.021152178, -0.059245285, 0.04245284, 0.006013012, 0.049520697, -0.028809119, -0.019989429, -0.016794158, -0.012751956, 0.022052791, 0.011600059, 0.0023891001, 0.0067066415, -0.026392533, 0.026491905, -0.018500015, -0.07876527, 0.009425334, 0.031742543, -0.01569623, -0.018108245, 0.013480242, 0.01771419, 0.008678343, 0.02483516, 0.026619831, -0.019104233, -0.007129536, 0.035775606, 0.003370596, -0.00291315, -0.022125721, 0.010433314, 0.018858662, 0.0061001396, -0.03932324, 0.011292383, 0.028759148, -0.013665135, 0.022679852, 0.06460386, 0.00732485, -0.021476557, -0.01659656, -0.028604953, 0.038175344, -0.07171569, -0.046606403, 0.02608243, 0.0031681436, 0.024154989, -0.019204745, -0.035049178, 0.019347519, -0.05486842, -0.007362257, -0.05451434, -0.04661725, -0.03434673, -0.02474093, -0.02207735, 0.021398604, 0.0075352984, -0.013084904, 0.071203984, 0.018948896, 0.029518703, 0.006250052, -0.050027825, 0.02908924, -0.0024008788, 0.027646655, 0.050966706, -0.041258108, 0.021534236, 0.03125711, -0.036068007, 0.031881317, 0.017168796, -0.017104262, 0.0030994695, 0.050475564, -0.04049741, -0.0075675654, -0.012790006, 0.006270611, 0.036530595, -0.0064031053, 0.042983953, 0.014462248, 0.005078988, -0.024502497, -0.02161726, -0.03183506, 0.014217382, 0.01491526, 0.00427321, -0.0153384395, -0.023792915, -0.00017018599, 0.030299101, -0.02418811, -0.051030666, 0.057837464, 0.007453632, 0.04771604, 0.042661287, -0.043174274, 0.04395253, 0.01765137, -0.012737678, -0.022656437, -0.002942276, -0.033973806, -0.0548747, 0.011126623, -0.0144075565, 0.03729015, 0.06350564, 0.022476256, 0.017237613, -0.041490544, -0.018600814, 0.0013158004, -0.03573463, -0.022847468, -0.007604544, -0.002212989, 0.027321134, -0.010028409, -0.0032355324, -0.039413188, 0.040481422, 0.024468875, 0.0123493355, 0.021199077, 0.015839862, -0.011919872, 0.023166995, -0.019106517, 0.05970901, 0.013384157, 0.03154951, -0.045815434, 0.001445296, -0.037148517, 0.010541536, -0.0076566557, 0.0064764903, -0.026893953, 0.03808511, -0.017027166, -0.008692799, 0.0138752265, 0.057049997, -0.0077725877, 0.002818491, -0.0341537, -0.043720666, 0.0060947146, 0.035528325, -0.038765855, 0.030783106, 0.009327105, -0.011338498, 0.030574083, -0.022398302, 0.05951655, 0.02539369, 0.011922728, 0.029040124, 0.010102651, -0.01142302, 0.048019003, -0.026937356, 0.011309943, 0.0056294156, -0.0148804225, 0.044773765, -0.016548589, -0.022611894, 0.009530415, 0.008325951, 0.05648347, -0.048195757, -0.05641494, -0.035627123, 0.0557025, -0.016469207, -0.039685316, -0.0053043202, 0.014061188, -0.011581784, -0.00042603604, 0.0018834678, -0.012316211, -0.013211686, -0.06813379, -0.016356701, 0.0014054622, 0.026181228, 0.008161218, 0.041659016, 0.011756682, -0.04039622, -0.022425717, 0.016923226, 0.011110633, 0.054647405, 0.021935144, 0.0483648, 0.03100526, 0.0072137727, 0.006978768, 0.017597402, -0.067162074, 0.011124909, 0.045082007, -0.005674389, 0.013560053, 0.007464197, -0.0052974666, 0.0038297556, 0.007877098, 0.011244874, -0.005896544, 0.028490733, 0.020579511, -0.049463585, -0.0129986685, -0.0084756045], [-0.04188384, -0.0789863, -0.0413133, -0.013041144, -0.018205017, 0.021349367, 0.012660978, -0.04332615, 0.033209674, 0.038555212, -0.030836975, 0.0271839, -0.09418365, -0.015083593, -0.0065167993, 0.051988136, -0.011025393, -0.009084226, 0.042662166, 0.030076643, -0.021137228, -0.023845403, -0.0055758883, 0.020804076, -0.033799656, 0.06618254, -0.012923321, -0.012032833, 0.014609764, -0.002885779, -0.0060446393, -0.060550284, 0.01181997, 0.0020848187, 0.0111159375, 0.029583298, 0.017328314, -0.0073032673, -0.03673408, -0.049246293, -0.059066765, -0.0010453113, -0.031184059, 0.038238313, 0.0029716792, 0.026982497, 0.03645995, 0.019722197, -0.018093, -0.025087671, 0.028355157, 0.009170996, -0.024024168, 0.01627923, -0.041310985, 0.032054666, 0.02748571, 0.014845626, 0.02850142, -0.014763209, 0.018065719, -0.0129677225, -0.04794618, 0.009541876, 0.0022693877, 0.011103748, 0.020758804, 0.01047749, 0.019798812, -0.03443433, -0.01583696, 0.015946077, 0.0013167601, -0.02585767, 0.060956568, -0.0061325706, -0.06946205, 0.023685211, -0.031741247, -0.030589722, -0.012316218, 0.021681938, 0.0044560675, -0.05403813, -0.035058558, -0.0047900914, -0.019537048, -0.023066789, 0.042436972, 0.008424014, -0.050003145, -0.0019649286, 0.012311138, -0.0025897718, 0.022399612, 0.009182604, 0.001975122, 0.063329265, 0.036600407, 0.038160536, 0.030907786, -0.05545127, 0.006100648, -0.013552482, -0.029055128, 0.0029147994, 0.028957618, -0.047388997, -0.020977473, 0.021060616, 0.0030169508, 0.0016988486, 0.01114902, -0.05681479, 0.04140283, -0.019936368, 0.030029051, -0.02035426, -0.053866323, -0.005098287, -0.043365616, 0.011770635, 0.0061012288, 0.0057297684, -0.010039864, 0.0031109767, 0.011832159, 0.0182944, -0.048928235, 0.012104368, 0.054079045, 0.01909819, 0.028727777, -0.009916383, -0.032539885, 0.032312367, 0.0001439407, 0.056077674, -0.025279006, 0.056547802, -0.029623928, -0.0023642841, 1.625137e-05, 0.01870997, 0.020683352, -0.007844188, -0.00041092752, -0.04577764, -0.019202154, -0.009482094, 0.010699205, -0.01660716, 0.022316612, 0.02161026, 0.02578802, -0.047393635, 0.019415164, 0.036934722, -0.035214398, 0.02631561, -0.010714876, 0.012441004, 0.03975085, 0.0064385897, -0.030824205, -0.048234068, 0.031324513, 0.011707951, 0.004850744, 0.06824183, 0.07002483, 0.004037305, 0.011421716, 0.028318012, -0.06261885, -0.02478334, 0.0057843267, -0.032110386, 0.021791345, 0.026316773, 0.004198077, 0.0037958557, 0.0062364633, 0.0008694483, -0.030559542, 0.0012467123, -0.027406774, -0.0066131465, -0.020194866, 0.016112072, 0.023617158, -0.034465022, 0.023746733, 0.013661018, -0.030212458, 0.029305283, -0.036386818, -0.00493171, 0.017041303, 0.037798945, 0.025405534, 0.004017281, 0.025150936, -0.030246122, -0.01091606, -0.051516842, 0.024774052, -0.021460515, 0.044694748, -0.024692794, 0.024905805, 0.048106376, 0.028873462, 0.04480387, 0.024735166, 0.04477949, 0.03636476, -0.056294743, 0.029860733, 0.04348257, -0.04316364, 0.021604601, 0.052507013, -0.016049389, -0.026883828, -0.005724545, -0.023945233, 0.030167187, 0.020509228, 0.00137919, 0.05048488, 0.0003557889, -0.022881929, -0.04985224, 0.0051795435, -0.003528869, -0.037981775, 0.038127456, -0.019785173, 0.03833466, -0.03470364, 0.027775478, 0.051122166, -0.034127876, -0.030320413, -0.027196668, -0.04077701, -0.0038398942, -0.02086676, 0.025264494, 0.062669925, -0.024086852, 0.006116609, -0.003163213, -0.02008089, -0.007464394, -0.009013706, 0.013695261, -0.014031897, 0.04875643, -0.01113451, -0.040983632, -0.012558391, -0.02647116, 0.064671166, 0.0033001888, 0.020636916, -0.043771904, 0.023064902, -0.020527802, -0.01955098, -0.070988305, 0.034394864, 0.023254842, -0.010983678, 0.03198966, 0.009963831, 0.02130473, 0.048426762, 0.0044598402, -0.062295564, -0.019205637, -0.009399676, 0.047360558, 0.03183469, 0.0019301404, -0.0061752307, -0.05058819, 0.008100147, -0.04282468, -0.013344697, -0.007527286, 0.026450556, 0.052731052, 0.04379396, -0.02344115, 0.03983907, -0.015124221, -0.042246092, -0.040054984, 0.009501211, -0.0016795862, -0.021386802, -0.011266261, -0.0016778088, -0.029047001, -0.06381797, 0.03694981, -0.0026849585, 0.004962472, -0.0383039, 0.007944598, -0.05637368, -0.0031220044, 0.012439263, -0.016834931, 0.024998087, 0.07808319, -0.010875938, -0.017754622, -0.017545676, -0.04034519, -0.0053432183, -0.07221935, 0.02420715, 0.066783845, 0.037510484, 0.002890422, -0.04219204, -0.043833427, 0.03927608, 0.038958598, 0.0066584186, 0.01921028, 0.040025093, 0.017378518, -0.0017545676, 0.014682532, 0.021065257, 0.042748068, 0.01779409, -0.056081157, -0.025988262, -0.013081628, 0.032548662, -0.06463866, -0.030068154, -0.063454635, 0.00553127, 0.014954743, -0.00011608121, -0.025551796, 0.015711593, 0.008679392, 0.0052573183, -0.0045717135, 0.02252643, -0.014834889, -0.022158742, -0.004794299, 0.0023941752, -0.012501947, -0.033072352, 0.042522293, -0.0014031318, -0.027740799, 0.06710887, 0.008186047, 0.058193833, -0.019233495, 0.05565398, 0.0126760695, -0.022647446, -0.010460368, 0.00457447, 0.028305242, -0.050188877, 0.007836643, 0.05131022, -0.0011271485, 0.022136109, -0.020980373, 0.037783857, 0.037668355, 0.021233575, 0.054908738, 0.026805473, 0.032617804, -0.0112523325, 0.05352273, -0.006551043, -0.004478413, 0.046348907, 0.032135922, 0.014662037, -0.028309887, 0.026961602, 0.039387517, 0.03140949, 0.00914662, 0.0034278783, 0.020976456, -0.009042727, -0.01856835, 0.007512196, -0.052789092, -0.037854664, 0.020191167, -0.008769319, 0.04180897, 0.028569907, -0.008838278, -0.00929796, 0.039424516, 0.034123234, -0.005758789, -0.03238666, 0.039342247, 0.017197432, 0.017007058, 0.044512212, 0.038412433, -0.054753184, 0.034126714, 0.026682284, -0.0013825273, -0.01657814, -0.023321876, -0.022502342, 0.05018118, 0.006602119, 0.013659276, -0.019264838, 0.07635822, 0.054035805, -0.04565699, -0.0032398265, -0.0018410481, -0.041533858, -0.03929117, -0.027502287, -0.02431205, -0.022060074, -0.008008733, -0.041887905, 0.013517948, -0.053462364, 0.01776507, 0.0348441, -0.04413408, 0.004639186, -0.03322012, -0.029837515, -0.04449625, -0.019833637, 0.03570078, 0.06761499, -0.06411165, -0.017304953, -0.054939207, -0.058114897, -0.002752866, 0.019115092, -0.010732434, 0.012605241, 0.01303592, 0.033942148, -0.07091169, 0.010984262, 0.0090647815, 0.009283015, -0.043495633, -0.004577082, -0.028773632, -0.023952197, 0.0020302604, 0.02764358, 0.022907466, -0.0002854147, 0.013203078, 0.022408318, 0.013458456, 0.029319791, 0.052012507, 0.033205032, 0.038067672, -0.025384638, 0.0052448395, 0.02811371, -0.00046316406, 0.030590156, 0.038083926, 0.012576239, 0.05433065, -0.029727237, -0.024832092, 0.004680104, 0.036971867, -0.046571784, -0.015782837, 0.06840434, 0.01772444, -0.059080694, 0.043135777, 0.018640323, -0.0562251, 0.03041328, 0.04829907, -0.033642657, -0.012665622, -0.02219705, -0.053165197, -0.016787665, -0.04503835, 0.054003593, 0.038337126, -0.020934084, -0.042074796, -0.018888734, -0.025982749, -0.014676148, -0.028668286, -0.024688734, 0.05790131, 0.01753697, -0.034848742, 0.031014143, -0.047005925, 0.023096679, -0.018127242, -0.011286286, -0.058686018, -0.06145804, -0.001599309, -0.0008659659, -0.011252913, 0.03873166, 0.008305611, 0.007436743, -0.022666018, -0.033557918, -0.010729314, 0.008583045, 0.004842328, -0.015684893, -0.0077903555, -0.018933427, 0.015853211, -0.004826657, -0.026808957, -0.0062782527, -0.01659555, -0.055375382, -0.045987602, 0.031564806, 0.0026437496, -0.01200512, 0.0300453, 0.06121659, 0.015463759, -0.03863589, 0.0068412465, 0.016964689, 0.014704008, 0.03426253, 0.015276289, -0.010743316, -0.072598554, -0.074301265, 0.030985268, -0.03856218, -0.022100702, -0.022931263, -0.0368198, 0.004775581, -0.0027662152, 0.0024751415, -0.032121994, 0.018438341, -0.026148826, 0.0009820471, -0.017970532, 0.00834769, -0.0092991935, -0.001773721, 0.029842593, -0.0028894064, 0.0130881565, 0.017890437, -0.009107732, 0.044145685, -0.0025388415, 0.054223854, -0.0044591147, -0.007688639, -0.019820867, -0.035870258, -0.0071703363, -0.018494058, -0.022020606, -0.0031940471, -0.05574452, -0.013769554, -0.011792981, 0.0073374934, -0.04125889, -0.015201706, 0.023848886, 0.0055042813, -0.0051540784, 0.012303447, -8.5900094e-05, -0.02661626, -0.01955214, -0.004885931, 0.0032967064, -0.045935657, 0.027246002, -0.032794103, -0.0071929726, 0.023557812, -0.027175194, -0.015888037, -0.003363453, 0.0018068041, 0.0036530758, 0.0025938347, 0.07156871, 0.026945932, -0.018064559, 0.027025448, 0.0019178793, 0.08739523, -0.020729784, -0.054889727, 0.08364348, 0.019160945, 8.241767e-05, -0.018077327, 0.014199925, -0.0012072447, 0.017558444, -0.018864939, 0.015575778, -0.0035143588, -0.019550398, 0.013654343, 0.012172276, -0.029809656, 0.019091297, 0.054911055, -0.022648025, 0.0019176616, -0.04454036, 0.022816924, -0.0010627235, -0.015464049, -0.016141092, -0.030696517, -0.018295487, 0.024201771, -0.051530775, 0.038443778, 0.042385317, 0.022303846, 0.014813123, 0.0069143777, -0.009184346, -0.045002367, -0.03135847, 0.049343806, 0.014291919, 0.025347494, -0.026642961, -0.0053252256, -0.004206783, -0.011803138, -0.02042304, -0.0036995083, 0.033830274, -0.048329253, -0.009425795, 0.013865031, -0.0057976763, 0.06363108, 0.030996006, -0.011599416, 0.011113905, -0.026508305, -0.055180367, -0.018781941, 0.014675567, -0.028333973, 0.010858237, -0.007905421, -0.020693943, 0.045629203, 0.024356162, 0.042613417, 0.025189916, 0.010542786, 0.04369703, 0.02897155, 0.028465435, 0.0011740164, -0.0296425, 0.013209026, 0.010815287, -0.007701989, -0.08914108, -0.0042021037, 0.017653052, 0.019979898, 0.06333391, 0.032484747, 0.0024075243, 0.013200755, -0.040707648, 0.02765693, 0.016244404, 0.014224302, -0.003623475, -0.06269314, -0.012634279, 0.028442219, -0.030020922, -0.043975193, -0.032653645, -0.027451467, -0.002477173, -0.025616802, -0.054047413, 0.0007849992, 0.023320425, 0.041283123, 0.00035870908, -0.05871156, -0.024710208, 0.027580097, 0.014645241, 0.03404778, -0.04249849, -0.0026617423, -0.0071842666, 0.019588705, -0.04801119, -0.043614034, -0.015726682, 0.0346189, 0.00553098, 0.019455211, 0.056158785, 0.013424212, -0.0013854292, -0.022913272, -0.07632107, 0.051280037, -0.022793708, 0.0038554925, 0.0069973753, 0.019120608, -0.091295555, -0.012778365, 0.02223797, 0.001304898, 0.010202378, -0.015606249, 0.032696016, 0.015081852, 0.008922002, 0.012290679, 0.0044145687, -0.0035828466, -0.01977516, -0.0034864992, -0.01788173, -0.081628315, -0.025770029, -0.0028277382, -0.04432213, -0.062232297, -0.009009643, 0.02578396, -0.007959398, -0.05618331, 0.049592216, -0.028847922, -0.024834996, 0.026247123, -0.065467484, 0.01567372, -0.032466177, -0.06760897, 0.03685056, -0.060917098, 0.016803626, 0.0074825953, 0.05268694, -0.03334781, -0.020459604, 0.015520059, 0.0029928638, 0.035186537, 0.019178938, -0.015145116, 0.019601474, 0.006168991, 0.012807241, -0.0337599, -0.08395341, -0.015298343, 0.019030355, -0.009908692, 0.0028117772, 0.024358481, -0.028988091, 0.003167276, 0.029793983, 0.0047001285, 0.009057817, -0.0017284492, 0.048898634, 0.012530967, -0.017783642, -0.024986772, 0.015057185, 0.0040901215, -0.013251832, -0.017430754, -0.0027618625, 0.028307565, 0.026117403, 0.03217191, 0.0402796, 0.017792927, -0.0008424413, -0.006890001, -0.002527088, 0.045456246, -0.079074524, -0.008670106, 0.050429165, 0.017479219, -0.0006013007, 0.0031272278, -0.052965537, 0.02677413, -0.0446814, 0.01537844, -0.056118302, -0.050527833, 0.0015740613, -0.028753318, -0.0020499942, 0.022757068, 0.03889359, -0.013434079, 0.019217826, 0.04203301, 0.017489957, 0.01130631, -0.010810643, 0.0775585, -0.0063153985, -0.007449512, 0.037572008, -0.02839927, -0.00950589, 0.033338524, 0.0083706165, 0.02634347, 0.03776354, -0.013662759, 0.0082319, 0.04419618, -0.05999077, 0.010453694, -0.041394558, -0.0028347033, 0.009230779, -0.015706368, 0.028651165, 0.02747178, -0.024062473, -0.02847008, -0.029708084, -0.03365775, -0.022150617, 0.01562163, 0.013311033, -0.01932172, -0.004863803, -0.009648816, 0.01575135, -0.041724235, -0.05724661, 0.053321905, -0.010396814, 0.03488937, 0.039530296, -0.034726854, 0.041938692, 0.030712767, -0.019848727, -0.036085587, -0.013222231, -0.0437217, -0.05993273, 0.031922333, 0.0060408665, 0.028620983, 0.086290136, 0.024883168, 0.026997153, -0.06903582, 0.007077472, -0.003709085, -0.027220463, -0.031880546, -0.0025630733, -0.014242585, -0.010478651, -0.024462664, -0.009338734, -0.036923114, 0.07815516, 0.019833056, -0.020173464, 0.02282447, -0.0066067623, -0.01825261, 0.006816144, -0.022242755, 0.052556932, 0.02381232, 0.030983238, -0.02116886, -0.009328286, -0.043920487, -0.00035869094, 0.009236583, 0.020560304, -0.01107676, 0.015381921, -0.014630876, 0.0008856997, 0.01780976, 0.07217466, -0.026646517, 0.038703945, 0.004055007, -0.04169289, -0.0088848565, 0.020553049, -0.046527673, 0.05757628, -0.0028950656, -0.02610086, 0.025135066, -0.037845667, 0.039783355, 0.031425506, 0.0048003937, 0.042814232, -0.0075659556, -0.0041104355, 0.03028791, -0.016103657, -0.0047790636, -0.00034592202, -0.02471224, 0.00354454, -0.022316324, -0.026177183, 0.03393518, 0.028321495, 0.05224119, 0.0250422, -0.022151778, -0.05417452, 0.047613613, 0.00017151, -0.024641285, -0.031444658, 1.33493395e-05, -0.027029512, -0.01988239, 0.013667403, -0.0082303025, 0.0116969235, -0.067875005, -0.029417302, 0.030101018, 0.018651929, -0.0017864899, 0.04942274, 0.021730404, -0.056062583, -0.01770703, 0.016893009, 0.02514203, 0.04908958, 0.015608136, 0.0056309546, 0.0042132223, 0.010068304, 0.0043344726, 0.015884552, -0.03120089, 0.027281407, 0.060548395, 0.009231068, 0.021800052, -0.0046787984, 0.015589707, -0.006743738, -0.02258476, 0.0008399927, -0.023478584, 0.055296447, 0.03337422, -0.047370423, -0.0073386542, -0.0026745114], [-0.026414223, -0.07734965, -0.014197629, -0.052858856, 0.013242648, 0.061387666, -0.01211907, -0.016811894, 0.037821945, 0.030417945, 0.01768851, 0.020156672, -0.024351612, -0.02157369, -0.015761245, -0.006511068, 0.030444644, -0.014277972, 0.02381825, 0.03635004, -0.021383092, 0.0074167284, -0.018121129, 0.021710152, -0.029825624, 0.012886663, 0.01512047, 0.01966027, -0.014573638, 0.017855005, -0.027892428, -0.05147348, 0.0031175895, -0.03009459, -0.024624286, 0.0062267743, -0.0092037, 0.012320054, -0.069818586, -0.050129883, -0.04167128, 0.04607536, -0.0173701, 0.0220696, -0.016851325, 0.036651146, -0.006981265, 0.021304725, -0.010048671, -0.02958138, 0.055741347, -0.034655157, -0.06550202, 0.012261712, -0.007673458, 0.016875675, 0.019218255, 0.0015864207, -0.010863976, -0.0065402393, -0.001221227, 0.021090144, -0.075723484, -0.011726745, 0.040441893, 0.03299241, -0.0067120516, 0.019747289, -0.015489311, -0.035680592, -0.005466103, 0.044413105, -0.0030330434, -0.0046035806, 0.027416298, 0.007566972, -0.058068104, -0.015705869, -0.01521639, -0.009006425, 0.0068574115, -0.0028429371, 0.0027553623, -0.0384108, -0.031213969, 0.014974122, 0.024148775, 0.00042990153, 0.017899133, 0.02609841, -0.026700865, 0.021058165, 0.05637223, -0.010753225, -0.00030753165, 0.036161173, 0.023819365, 0.04379013, 0.014547927, 0.0024586462, 0.026704328, -0.010234574, -0.02436669, -0.030822383, 0.019046813, -0.00739003, 0.03485293, -0.010115912, -0.003750452, 0.044363663, 0.009769406, -0.011389301, -0.014733831, -0.040200613, 0.007025763, -0.016517837, 0.058982786, -0.004606022, -0.03666388, 0.0016837604, -0.0029818702, 0.012148983, -0.010193042, 0.017570835, -0.028799355, -0.023070807, 0.031596653, -0.011504254, -0.062155012, -0.005252265, 0.026865633, 0.009294675, 0.049613453, -0.019982636, -0.050888084, 0.0061016846, -0.0008326098, 0.029910667, -0.029232316, 0.05717814, -0.04086314, 0.0068635917, 0.020088937, 0.009090477, 0.017349828, -0.0014419871, 0.0108877085, -0.043610163, -0.018365374, -0.0057328446, -0.020289179, 0.004336592, -0.02651793, 0.013118548, 0.01791001, -0.027242756, 0.00081777707, 0.04608253, -0.058816664, 0.013522679, -0.004872547, -0.0027964613, -0.0032441623, 0.03344462, -0.009955719, -0.04478096, -0.0053669713, 0.005276986, -0.0147714075, 0.0039989003, 0.08385429, -0.01894385, 0.04530307, -0.009773029, -0.066317074, -0.016455416, 0.03416172, -0.025948355, 0.026205948, 0.0045635323, 0.011689664, -0.019720837, -0.0088131055, -0.010413926, -0.060834404, 0.033260882, 0.00041828258, -0.004124978, 0.0058880937, 0.02968422, 0.0053691342, -0.012854032, -0.0036646698, -0.0040932116, -0.03003625, 0.010917311, -0.06576381, 0.0143724065, 0.03914193, 0.0043113763, 0.0060042837, 0.032796804, 0.03342874, -0.009596767, -0.05406426, -0.048413984, 0.05298753, 0.009229905, 0.07073821, 0.0098617785, -0.017069489, 0.007813875, 0.039494578, 0.027084539, 0.023439277, 0.03532362, 0.0052685807, -0.053219784, 0.018149804, 0.05859912, -0.008553038, -0.0029002903, 0.03475602, -0.04100158, -0.024095993, 0.0029352708, 0.002282755, 0.015956046, 0.016071742, -0.011330589, 0.058729645, -0.015917668, -0.001566582, -0.065140344, 0.0028711194, -0.012210786, -0.04285419, 0.03974868, -0.047868636, 0.043944392, 0.00021062455, 0.035481833, 0.0200301, -0.019387163, -0.0018606407, 0.0016830188, -0.031659443, 0.00035202978, -0.017951295, -0.011747511, 0.052764915, 0.030822383, -0.02261643, 0.014595888, 0.008745122, 0.014386498, 0.01673526, 0.020957638, 0.02520573, 0.0234881, 0.010781901, -0.025820792, 0.021055534, -0.045975238, 0.03916035, 0.011448681, 0.022715809, -0.022280717, -0.017383942, -0.009103664, 0.016621541, -0.03711343, -0.0019440746, -0.00047711903, -0.032092065, 0.026544627, 0.011419214, -0.007837607, 0.030534135, 0.019190753, -0.06916891, -0.012809534, 0.032102942, -0.028817989, 0.002026767, -0.0033007737, 0.011636761, -0.055084255, -0.008584434, -0.047874074, -0.0093465885, -0.0103349425, -0.01283994, 0.020186339, 0.068633944, -0.025385698, 0.0364603, -0.03795641, -0.09510738, 0.014639891, 0.018498251, 0.007855407, 0.022510128, 0.028120853, -0.019911438, -0.02657281, -0.034902893, 0.05778035, 0.020047404, -0.0039749513, -0.026261078, -0.027739156, -0.05767998, 0.015306374, 0.0264141, -0.032298733, 0.04356072, 0.101392485, -0.023182917, -0.009758444, -0.022744488, 0.014431244, -0.006669778, -0.04564521, 0.008609897, 0.07538975, -0.015613658, -0.0070880605, -0.060125895, -0.018038066, 0.026452666, 0.021857738, -0.006718108, -0.007193867, -0.0020731192, 0.009267357, -0.01556644, 0.0074222907, -0.011127257, 0.030272583, -0.0021250336, -0.08143754, -0.016179033, -0.0047622905, 0.057400633, -0.050557803, 0.003817941, -0.07670294, -0.00543405, -0.022645602, 0.03568356, -0.0061328337, 0.006708343, 0.0035966865, -0.01602329, 0.009717036, 0.026378503, -0.039952416, -0.0032968184, 0.0193473, 0.033826504, -0.030395202, -0.05922011, 0.024847766, 0.016980493, -0.028977688, 0.08971617, 0.013406798, 0.044644993, -0.0048767575, 0.0473579, -0.0053699375, 0.0113717485, 0.021301758, 0.0013407539, 0.043418325, -0.0544242, 0.0023415915, 0.016765418, -0.0048067886, 0.0015149147, -0.028425418, 0.07309982, 0.06421973, 0.017113369, 0.06643475, 0.03772899, 0.0051281643, -0.014447065, 0.03321144, 0.0012929185, 0.0144745065, 0.012177165, 0.03841278, 0.027483046, 0.010890427, 0.04481853, 0.0004451669, 0.04297532, 0.0013324723, -0.0068546925, 0.02615354, 0.0034122665, 0.004089874, -0.024179304, -0.054173034, -0.011153214, -0.014863556, 0.021254292, 0.030975655, 0.04298323, 0.0032261156, -0.012986043, 0.025108822, 0.024711305, -0.039503478, -0.036331996, 0.0058144247, 0.037540615, 0.0029620933, 0.033485845, 0.030974666, -0.049100243, 0.04554237, 0.026067037, -0.016269512, -0.006852715, -0.04762587, -0.04331351, 0.0055785845, 0.037558414, 0.028361883, 0.004791956, 0.090368815, 0.02415137, -0.01828948, 0.0095305145, -0.029279782, -0.07754248, 0.006841838, -0.036373775, -0.046907045, 0.02257391, 0.033922423, -0.019019127, -0.0018046472, -0.037672132, 0.010940364, -0.0066582514, -0.07252407, 0.016921656, -0.038387068, -0.03271108, -0.008221774, -0.04874624, 0.024804255, 0.063717395, -0.030488152, -0.030274129, -0.020568034, -0.037228636, 0.0074200663, -0.0032025068, 0.006265339, -0.0017176284, -0.011684472, 0.028194025, -0.022631263, 0.0011668403, 0.011582374, 0.027865728, -0.018972775, -0.028304776, -0.03374245, -0.052764915, -0.003969235, 0.021828813, 0.0034837103, -0.019753221, 0.036302578, 0.008424982, 0.017184196, 0.051665314, 0.0048038224, 0.040287137, 0.036870178, -0.05672426, 0.0061783204, -0.027223224, -0.024734048, 0.015492131, 0.027726427, 0.012285445, 0.07956664, -0.036233358, 0.010128273, 0.028874354, 0.019003429, -0.065761335, 0.014905396, 0.035353284, 0.05463878, -0.043632906, 0.008762921, 0.025292749, -0.06942107, 0.046489686, 0.07728834, 0.0058982293, 0.0009473162, -0.013538809, -0.044628676, -0.020254446, -0.017920393, 0.0041531604, 0.036791317, 0.03283469, -0.032796126, -0.021326974, -0.01829838, -0.017298903, 0.0066250325, -0.009322857, 0.032196883, -0.0024761364, -0.024533683, 0.04906366, -0.025471235, -0.015568418, 0.033644553, -0.044713713, -0.030998893, -0.017915944, 0.026809638, 0.01695775, -0.018838044, 0.026221275, -0.0015396359, -0.0026450132, 0.015656427, -0.017929122, 0.045427665, 0.014007028, -0.025732785, -0.027601708, -0.02108273, -0.02943948, 0.050961256, -0.02740542, -0.0029905227, -0.010472393, -0.0112617705, -0.072411336, -0.05268927, 0.057193406, -0.012314615, -0.03324506, 0.031117061, 0.048955873, 0.008569849, -0.030057017, -0.003714112, 0.014059437, 0.032539025, -0.025716962, 0.022801839, 0.01917969, -0.048778377, -0.050470788, 0.042161502, -0.010986098, -0.008050704, -0.053726077, -0.026860999, 0.034991365, -0.02340998, 0.010454592, -0.029705975, -0.0048696967, -0.021904955, 0.0027660544, -0.004496291, 0.005992417, -0.022751655, 0.046103545, 0.03023501, -0.017657854, -0.0070663057, 0.05623775, -0.0040013725, 0.07663175, -0.016629452, 0.015022574, 0.0363184, -0.034093738, -0.020245174, -0.048801616, 0.017298903, -0.028103052, -0.051281642, -0.027038123, -0.0088225, -0.011282258, -0.019931214, 0.03993956, -0.034659114, -0.011536392, 0.037451617, -0.009648434, 0.01610388, -0.008780967, 0.016183728, -0.015720207, 0.002434543, 0.013040924, -0.0018842494, -0.0097327335, 0.019946048, -0.0033798814, -0.016017664, 0.030314118, -0.013008292, 0.016602753, 0.045839027, -0.008608167, 0.013016697, 0.013060207, 0.05613489, -0.0005596878, -0.034997053, 0.035721134, 0.0027242755, 0.04963274, -0.01888353, -0.060928844, 0.08946303, 0.00018392569, -0.040808264, -0.03678909, -0.014231991, -0.012415446, 0.03839696, -0.0451765, -0.021118078, 0.0051012184, -0.0054297624, -0.011033872, -0.0017794315, -0.023647057, 0.032449532, 0.046156447, 0.00985807, 0.008929789, -0.029413275, 0.01563838, 0.0008721637, -0.01071466, -0.012299906, 0.0033096734, -0.05162972, 0.017931765, -0.003912376, 0.023940004, 0.03945107, 0.067059696, -0.035070475, 0.003727956, 0.0007213644, -0.020953683, -0.026044272, 0.034284342, 0.020859743, 0.003992967, -0.035270717, -0.0075588753, 0.02523045, -0.036306534, -0.031558085, 0.0049778596, 0.03453254, -0.032651752, -0.0071770567, 0.007631185, 0.010897102, 0.011474589, 0.02003356, -0.020319585, 0.046717122, -0.041031245, -0.037152, -0.020422673, 0.02982167, 0.034277417, -0.01596391, -0.025549354, -0.027832888, 0.028156202, 0.066703714, 0.035656117, 0.015487333, 0.07046529, 0.052952796, 0.05004163, 0.009708012, 0.04956698, -0.022239186, 0.013599128, -0.025565669, -0.028082285, -0.039389357, -0.032720726, 0.014531612, -0.04720759, 0.04096005, 0.08292477, 0.016301896, 0.04684913, -0.042897575, 0.014101216, 0.0019173757, 0.027029162, 0.009129536, -0.03442179, -0.03358819, 0.025125138, 0.006249147, -0.048728436, -0.026371889, 0.0066711376, -0.0072274883, -0.014094789, -0.026951045, -0.03929681, 0.024786457, 0.017312992, -0.0063451887, -0.023431737, -0.07285435, 0.010663734, 0.012055042, 0.022030538, -0.04476118, 0.025609178, -0.00995918, 0.0017843139, -0.051960982, -0.012795195, 0.027447445, 0.0051667294, 0.012548477, -0.010398847, 0.0369834, 0.0040013725, 0.02094874, -0.00849618, -0.0022066135, 0.03487468, -0.042615384, 0.023110854, 0.043233413, 0.019722568, -0.042417612, -0.005806954, -0.01619337, 0.0027346583, 0.039947473, -0.03225819, 0.034403004, -0.0050515286, 9.1962844e-05, 0.0141207455, 0.01674317, 0.0047632796, -0.01891542, -0.009650134, -0.017012136, -0.048414975, -0.036915664, 0.009071689, -0.040923465, -0.07409436, 0.0037497107, 0.02962291, -0.023190457, -0.038667902, 0.03718562, -0.020374713, -0.048588023, -0.0027857076, -0.064405635, 0.008208425, -0.019899571, -0.046740115, 0.020789597, -0.009010844, 0.0659957, 0.013641154, 0.03688402, -0.041101735, 0.015266821, 0.016588334, -0.0017868478, 0.027139915, 0.03270713, -0.008612988, 0.01696764, 0.05804141, 0.0070247743, -0.057628192, -0.055831242, -0.019839253, -0.0021576658, -0.00825317, 0.02164254, 0.03280502, 0.008319176, -0.006734053, -0.010819972, 0.040999606, -0.026822109, 0.012983323, 0.022613958, -0.032232482, 0.015584241, -0.012684939, -0.011719577, 0.026687624, -0.0029517105, -0.029034546, 0.018032627, 0.051616862, -0.03543437, 0.011517418, 0.05041838, -0.013680338, -0.011774457, -0.0301559, 0.005378837, 0.03448606, -0.05680436, 0.0028330488, 0.05046881, -0.010474122, 0.0031633237, 0.011106737, -0.0041043363, 0.042448267, -0.066527694, -0.017646976, -0.06938547, -0.049288124, 6.563477e-05, -0.0025643604, -0.0063671907, -0.0016226992, -0.009661042, -0.018720865, 0.045360424, 0.008162938, 0.0509484, 0.05349073, -0.008656373, 0.040172927, -0.02623512, -0.019398225, 0.034878638, 0.030375425, 0.0054415674, 0.04582815, -0.03355358, 0.009663515, 0.021931652, -0.026372073, 0.032194905, 0.013591712, -0.041008506, -0.009875128, -0.031884655, 0.013275281, -0.023443602, -0.011811786, 0.023245584, 0.02744893, -0.0024701417, -0.03001462, -0.019595254, -0.005935064, -0.033163976, 0.016710043, 0.010778192, -0.00047168037, -0.028399706, -0.009011709, 0.05584814, -0.02795899, -0.040544737, 0.060573846, -0.0022647085, 0.04343019, 0.03019941, -0.031691704, 0.09022247, -0.0039296807, -0.022837438, -0.025489528, -0.035583686, -0.02477657, -0.015898447, 0.0050841607, -0.030540561, 0.070298664, 0.00061914226, 0.061988883, 0.002186095, -0.097708434, -0.032875232, -0.0499467, -0.03462846, -0.06056099, -0.010867436, 0.013143888, 0.013438441, 0.06391714, -0.008569354, -0.013229299, 0.07403404, 0.004003844, -0.034750085, 0.0006140744, -0.012539084, -0.04178376, 0.0010738886, 0.0010125801, 0.041658174, 0.038432557, 0.014602314, -0.016456403, 0.00012459482, -0.05769432, 0.022777118, 0.0071195797, 0.022003839, -0.0005315057, 0.027353505, 0.014353124, 0.011644671, 0.024932805, 0.030191498, -0.031279232, 0.06326054, 0.0042139743, -0.033063114, -0.009031888, 0.016395282, -0.038565062, 0.019939497, 0.0148144225, -0.032929618, 0.017658843, -0.002103279, 0.09602107, 0.0026085803, 0.024365703, 0.016734602, -0.010324066, -0.0032414428, 0.020122556, -0.033790905, 0.02102562, -0.007745644, -0.018876363, -0.01056176, 0.0075755315, -0.025428219, 0.0010736414, 0.027989335, 0.02805361, -0.028822193, -0.0681771, -0.054623086, 0.04629229, -0.035147604, -0.048841167, -0.029297581, -0.008415836, -0.022401355, -0.007743172, 0.020521557, -0.01635863, 0.021990737, -0.044751294, 0.053302847, -0.015531337, 0.023738772, 0.0039840676, 0.026460266, -0.002468164, -0.02741877, -0.014156591, 0.026170844, -0.0026179743, 0.014564739, 0.010357439, 0.009679428, 0.055331964, 0.027365865, -0.005152391, -0.00028281045, -0.020059146, 0.03385419, 0.066589996, -9.93792e-05, -0.005131131, -0.0019111028, 0.05070811, -0.014948411, -0.01562231, -0.009068722, -0.038526498, 0.032453984, 0.01574567, -0.06685006, 0.025785195, 0.019831093], [-0.0040735803, -0.08004377, -0.015585565, -0.043900892, 0.010234397, 0.06180658, 0.01432359, -0.035671577, 0.036497436, 0.050429955, -0.008305703, 0.020671535, -0.051877975, -0.019303355, -0.03237389, 0.00041281097, 0.019057645, -0.03255213, 0.028181164, 0.045841835, 0.007900219, 0.002906612, -0.045305192, 0.011514026, -0.023401108, 0.0369894, 0.011865823, 0.025676193, -0.005365461, 0.025843384, -0.017226359, -0.050760496, 0.0021566579, -0.035053257, 0.007796686, -0.0041282745, -0.009887765, 0.02894601, -0.046267495, -0.04958944, -0.051517654, 0.013846043, -0.023839382, 0.031722426, -0.010294271, 0.043396436, 0.014386048, 0.0019664068, -0.0037166197, -0.021938432, 0.062058326, -0.037888765, -0.055855952, 0.020146424, 0.023350902, 0.02484949, -0.0014405745, 0.017092064, -0.006350827, -0.016644558, 0.003038971, 0.012414835, -0.07867549, 0.01135164, 0.023588477, 0.005514395, -0.007376308, 0.0031043096, -0.03186223, -0.046965085, -0.008749262, 0.03294705, -0.0114895245, 0.016082931, 0.0037656238, 0.037333626, -0.070211016, 0.023023728, -0.002111017, 0.0036748222, 0.00034014566, 0.018988583, 0.0084570395, -0.047133233, -0.03341739, 0.017613107, 0.008637201, -0.005743801, 0.03834037, 0.03273854, -0.020562477, 0.008478179, 0.060255744, -0.0013811811, -0.007057542, 0.020983336, -0.019624194, 0.016747849, -0.0008666988, 0.018052222, 0.04385915, -0.041456692, -0.049484465, -0.02442707, -0.00067692826, -0.008335491, 0.016965965, -0.007886407, -0.01157456, 0.02849825, 1.681511e-05, 0.014345692, 0.00015950332, -0.052712966, 0.015519925, -0.02196702, 0.018675612, -0.0014854949, -0.029877087, -0.0066510965, -0.0094818, 0.0036013161, 0.012618058, 0.02622869, -0.024769617, -0.01749396, 0.027628666, 0.013277691, -0.06565772, 0.0020088651, 0.035851736, 0.030999377, 0.06515615, -0.011046086, -0.0344508, 0.023690568, -0.029836971, 0.042248204, -0.009522157, 0.055468723, -0.032177392, -0.011389354, 0.020872595, 0.010195722, 0.014117005, 0.0036499598, 0.00626579, -0.055991434, -0.020284308, -0.01690543, -0.035391483, 0.004004638, -0.005617688, 0.010727079, -0.0060270163, -0.03245124, -0.0009118594, 0.033936735, -0.031247279, 0.013852527, -0.039601985, -0.011960828, 0.031710416, 0.0259534, 0.015670842, -0.050531805, -0.004999252, 0.005440409, 0.00905902, -0.0050675934, 0.06962801, -0.014833088, 0.026799561, -0.004579235, -0.044232387, 0.0058963387, 0.0033457265, 0.010986333, 0.048246875, 0.013528957, -0.003246277, -0.03442005, -0.0053267865, -0.0019082747, -0.0514158, 0.013300272, -0.027473249, -0.017656825, 0.023206772, 0.024531322, 0.015660632, -0.014053589, 0.004723965, -0.015743626, -0.028073547, 0.01620352, -0.07525675, -0.0022955027, 0.020278782, 0.029172776, 0.010010275, 0.042929694, 0.029148752, -0.0065353126, -0.05308338, -0.03997768, 0.029566249, 0.01150778, 0.04918083, -0.042724792, -0.013058134, -0.001632507, 0.03655749, 0.06592868, 0.023310846, 0.022477718, 0.009435439, -0.021381132, 0.02708482, 0.04377982, -0.017998893, 0.0072401054, 0.022826992, -0.05272738, -0.017921304, 0.011208952, 0.00046794047, 0.043739703, 0.036692012, -0.02999047, 0.057993874, -0.009862062, 0.00810104, -0.050579853, -0.0035840205, -0.03453549, -0.031236708, 0.037487127, -0.063082606, 0.031173293, -0.009049412, 0.054646708, 0.021543037, -0.01913079, -0.03672564, -0.005488932, -0.04243557, 0.0058362847, -0.0034652038, 0.009468708, 0.049157772, 0.035084005, -0.02882302, -0.002106693, 0.012590194, 0.024336748, -0.0020705706, 0.009315811, 0.023385974, 0.034431882, 0.028470384, -0.07927508, 0.024230095, -0.040146794, 0.031008985, 0.026936846, 0.03539821, -0.031106992, -0.019174991, -0.017367607, -0.0039712484, -0.037576485, 0.011703316, 0.003740161, -0.039435755, 0.0019577593, -0.008377648, 0.014914523, 0.03575661, 0.01655832, -0.05908157, 0.02700891, 0.05008981, 0.0082639055, 0.0100603225, -0.016632546, 0.004231162, -0.038479697, -0.008967738, -0.04458112, 0.001027163, -0.005014746, 9.080159e-05, 0.051349502, 0.05091423, -0.0324964, 0.03338712, -0.03141783, -0.08574746, -0.0010511846, 0.05074608, 0.027052147, 0.034216344, 0.039643783, -0.0013202264, -0.025169818, -0.037598524, 0.065355286, -0.014927734, 0.0077839545, -0.015439154, -0.02675236, -0.051766276, 0.0030656348, -0.022816181, -0.017882029, 0.046613406, 0.05681009, -0.0037353565, -0.010863762, -0.03559038, -0.013645462, 0.013190253, -0.06181811, 0.020906465, 0.04509332, -0.035816666, 0.0030910976, -0.04597347, -0.031332556, 0.028875867, 0.03302872, -0.03139141, -0.012248126, 0.006792464, 0.0080799, -0.035747964, -0.0012904396, -0.0069672205, 0.010513287, 0.006861045, -0.100587025, -0.014128475, -0.025746817, 0.055593636, -0.05394287, 0.0020067631, -0.056594856, -0.018337118, -0.017446397, 0.031239891, 0.0050152265, 0.011636537, 0.041033674, -0.013070264, 0.0073955255, 0.0010434977, -0.014858793, -0.023391258, 0.012685319, 0.00093972444, -0.035903923, -0.06159519, 0.057280913, 0.034812193, -0.055178545, 0.03505494, -0.010453233, 0.044287633, -0.030597735, 0.058685694, 0.0020447173, -0.032045998, 0.021408038, 0.002308955, 0.06748501, -0.039466504, -0.001315422, 0.01231971, -0.011378065, 0.0010241603, 0.009981449, 0.06030571, 0.052567877, -0.0126122935, 0.047557935, 0.049769543, 0.004984479, -0.0367242, 0.032913417, -0.025033373, 0.025001185, 0.0081673395, 0.038477775, 0.0090902485, 0.0010862561, 0.037859462, 0.020478882, 0.033187624, 0.01063916, -0.008570902, 0.010606491, 0.014837172, 0.02050963, -0.015850402, -0.05073743, 0.0016885974, -0.011125838, 0.011686983, 0.040147755, 0.061893053, 0.0039258176, -0.02066721, 0.023548841, 0.012227887, -0.023596885, -0.032230362, 0.020774828, 0.028803803, 0.012721471, 0.026069665, 0.03760435, -0.062390786, 0.049078982, 0.054969072, -0.024576964, 0.016927531, -0.051404275, -0.05209225, 0.014403704, 0.02365838, 0.044168487, 0.003040172, 0.100817636, 0.033262208, -0.007931568, 0.003531173, -0.036668953, -0.04866389, 0.016394733, -0.029740645, -0.04458094, 0.017129073, 0.010273552, -0.0028806685, -0.0044430327, -0.048575487, 0.0026079034, 0.027025964, -0.03961736, 0.030778136, -0.03316132, -0.022845728, -0.003936177, -0.059608124, 0.025762672, 0.064325966, -0.0360122, -0.017540922, -0.018861748, -0.026678853, 0.0080068745, 0.016739322, -0.03575181, -0.013771035, -0.039978884, 0.01570195, -0.035817146, 0.018723385, 0.007073757, 0.023956245, -0.025042022, -0.013095847, -0.039075192, -0.024547178, 0.004598692, 0.045544926, 0.03758465, -0.0049820766, 0.02154508, 0.017244134, 0.0055734883, 0.043289, -0.00944829, 0.030827863, 0.02329253, -0.041542932, -0.0052309404, -0.041924395, -0.016597714, 0.004452521, 0.033783957, 0.013801362, 0.059131533, -0.038798705, -0.01323205, 0.026020842, 0.013463618, -0.051178467, 0.01746081, 0.040323596, 0.06684823, -0.05808227, -0.0075168344, 0.012355742, -0.071184605, 0.021658102, 0.055749297, 0.018229501, -0.004859086, -0.016017715, -0.042341888, 0.014976978, -0.041382466, 0.046623494, 0.036805842, 0.004033712, -0.026279615, -0.016655607, -0.01387775, 0.0011681697, -0.021879822, 0.0041247467, 0.026654352, -0.013852288, -0.018808901, 0.030279689, -0.02374726, 0.022463065, 0.0046967003, -0.022037402, -0.028963337, -0.02353863, 0.022194263, 0.0140021825, -0.022331906, 0.00526433, 0.02006343, 0.010342134, -0.0010384532, -0.0007163237, 0.050887085, -0.012633072, 0.0102159, -0.01203001, -0.03662331, -0.023969699, 0.04912895, 0.014157361, 0.01962059, -0.020213323, -0.023620905, -0.09161256, -0.05682162, 0.05870107, -0.005946784, -0.01914136, 0.009699436, 0.04560834, 0.0063704643, -0.0484746, 0.008488268, 0.033957634, 0.041683216, -0.028213352, 0.030753395, -0.0006161537, -0.054177325, -0.084794275, 0.011452171, -0.018820433, -0.025781887, -0.070504315, -0.03620341, 0.0015911898, -0.021409959, 0.047702063, -0.036866408, -0.016938102, 0.0019116378, 0.027067523, -0.03504353, -0.0042485776, -0.021032821, 0.037748482, 0.045035668, -0.00324964, 0.014323111, 0.044465877, -0.012200083, 0.06507351, -0.012579625, 0.036023732, 0.00987095, -0.012730961, -0.025868366, -0.027022602, 0.020923281, -0.0109747425, -0.035675626, -0.034200974, -0.04197436, 0.00664389, -0.015421858, -0.0054860497, -0.03178056, -0.033156034, 0.02209025, -0.0047399392, 0.015711077, -0.0012159126, 0.012113845, -0.017485552, -0.021653056, -0.008185656, -0.0011400644, -0.018122846, 0.019534113, -0.031334717, -0.024399685, 0.0101198135, 0.014416315, -0.00058660714, 0.016572012, 0.014369713, 0.005880484, 0.018086812, 0.047213946, 0.0063687833, -0.008402751, 0.03847393, 0.00359459, 0.041447803, 0.00048775828, -0.06264253, 0.08595884, -0.009231015, -0.027615214, -0.0153315365, -0.007849294, 0.008554568, 0.04327729, 0.0059013832, -0.039896008, 0.058178358, 0.013283936, 0.0022032598, -0.029511, -0.035353526, 0.029992392, 0.046890136, 0.001935179, 0.016834807, -0.03540037, 0.023824608, 0.009941093, -0.0004316679, -0.020837044, -0.0016056028, -0.027606508, 0.032543004, -0.020149305, 0.025641002, 0.0247504, 0.035904102, -0.02244745, 0.023534909, -0.034492597, -0.032019813, -0.038331244, 0.041929677, 0.007888208, 0.024763372, -0.034751546, -0.022536092, 0.008985995, -0.059089255, -0.028713482, 0.009066707, 0.029280992, -0.041223444, -0.038355745, 0.020570165, 0.009104181, 0.0319494, 0.047357593, -0.0020709008, 0.05772099, -0.05816779, -0.021067891, -0.026634173, 0.026256552, 0.013092725, -0.017028654, -0.03169471, 0.0007062046, 0.022718655, 0.040117968, 0.020745762, 0.039307002, 0.030044278, 0.043415654, 0.022562755, 0.012228309, 0.01720618, -0.03985085, -0.0057624183, -0.01719261, -0.057473566, -0.042339485, -0.011903177, 0.014681992, -0.05315052, 0.05406202, 0.054360848, -0.011052332, 0.021332128, -0.028476147, -0.018871358, 0.018771429, 0.001400939, 0.024575043, -0.043537684, -0.0137096, 0.015253467, -0.03220334, -0.037774906, -0.06123006, -0.0151047725, 0.010158248, -0.02178109, -0.014410069, -0.023711227, 0.039667808, 0.04279926, 0.012854011, -0.044204522, -0.05257268, 0.02280417, 0.0031131976, 0.02991552, -0.029048104, 0.01793764, 0.0043611187, 0.002521666, -0.051072296, -0.010842383, 0.0024799886, 0.0028597699, 0.003842373, 0.008576667, 0.062068176, 0.021629035, 0.027262457, -0.042570096, -0.013202263, 0.03802713, -0.01929702, 0.014861194, 0.03401264, 0.02312558, -0.05287535, -0.002751913, 0.03206053, -0.0121088, 0.040882178, -0.05990215, 0.020093815, 0.00017343584, 0.008315792, -0.0039669247, 0.009772942, -0.0019255703, -0.015201821, 0.007430237, -0.015320007, -0.053084824, -0.027118148, 0.025872208, -0.040590715, -0.049936075, 0.016644558, 0.040089145, -0.025870766, -0.038499877, 0.07788759, -0.007341417, -0.012817438, 0.018809382, -0.058608826, 0.01572435, -0.0053034555, -0.04838908, 0.009441684, -0.034795508, 0.054001328, 0.0034427736, 0.04763673, -0.012345173, -0.010642643, 0.024066385, -0.017595451, 0.044240072, -0.01492323, -0.015653906, 0.0049292296, 0.013241178, -0.024777064, -0.052278657, -0.06623712, -0.029083895, -0.005277062, 0.009801768, 0.010979426, 0.02612876, 0.012681716, 0.018015709, 0.0019885069, 0.04257778, -0.012986309, 0.0027648844, 0.0328327, -0.0024847928, 0.05721197, -0.035570923, 0.004029861, 0.01230674, 0.020269414, -0.024880597, 0.0047543524, 0.046186782, 0.013845562, 0.0096662855, 0.03979512, 0.017851882, -0.016751694, -0.058416653, 0.020304006, 0.032565102, -0.0843984, 0.01810699, 0.06330937, 0.014543628, -0.0036886346, 0.037850812, -0.003068998, 0.056885038, -0.06510762, -0.023554245, -0.040049028, -0.050230093, -0.023272114, 0.01693714, 0.004419011, -0.010135667, -0.002449481, -0.028391112, 0.026844602, 0.016198475, 0.021642968, 0.02182217, 0.008100078, 0.0803474, -0.059933137, 0.005499021, 0.061043654, 0.013129238, 0.00842389, 0.0181387, -0.028270524, 0.0051347343, 0.02203356, -0.029918043, 0.03417311, 0.03456486, -0.06570672, 0.020931449, -0.020052738, 0.030945567, 0.007892532, -0.029238835, 0.033353493, 0.031557158, -0.005131251, -0.03424277, -0.0015244099, -0.025939949, 0.008055879, 0.021196647, 0.0041972916, 0.009359291, -0.003822795, -0.0091666365, 0.033500504, -0.029519167, -0.04828627, 0.06791287, 0.006401272, 0.061706647, 0.014823721, -0.038523898, 0.065250315, 0.0004170147, -0.0073823137, -0.02077771, -0.006546603, -0.02880957, -0.050772022, 0.0062982193, -0.028709639, 0.039073993, 0.011036478, 0.042239554, 0.0061603356, -0.09242857, -0.02135495, -0.05500655, -0.005655402, -0.031774312, -0.020853618, -0.00025486902, 0.01129591, 0.04437886, -0.014693524, -0.0097116865, 0.06880839, -0.0073630963, -0.033533655, -0.008837061, -0.004901124, -0.053885218, 0.023040544, -0.0073736655, 0.048825316, 0.051780928, 0.021159653, -0.0211229, -0.018844454, -0.049536355, 0.024790818, -0.0031742123, 0.024059061, -0.003539821, 0.032583255, -0.00747828, 0.014416795, 0.004779095, 0.009129163, -0.052348197, 0.050714098, -0.01171869, -0.018802837, 0.0008352305, 0.015625563, -0.03034791, 0.011270927, 0.025988353, -0.012434534, 0.022167841, -0.033612445, 0.08000533, 0.002980118, 0.0054454533, 0.03603238, 0.0026049009, 0.0050848895, 0.0054747295, -0.03161745, 0.019712444, 0.003172771, -0.042992875, -0.026303878, -0.007683064, -0.035636503, 0.004028885, 0.05285902, 0.0081404345, -0.027105957, -0.069839396, -0.035617765, 0.04769342, -0.016105512, -0.017348869, -0.0134924445, 0.006659984, -0.035873838, 0.010072731, 0.0264647, -0.009138051, 0.022435682, -0.07804901, 0.039534245, 0.005561177, 0.01095096, 0.00027462677, 0.007884365, 0.01325415, -0.0023550764, -0.012672648, 0.004220112, -0.024031913, 0.00012299052, 0.011119592, 0.01748291, 0.039603908, 0.027372956, 0.012902474, -0.0023666066, -0.009439702, 0.02851074, 0.04622522, -0.023611777, 0.01177346, 0.009766336, 0.048637707, 0.02677446, -0.010559769, 0.0065490045, -0.032306872, 0.023439301, 0.026403144, -0.071215354, 0.021708788, 0.048348967], [-0.013772746, -0.0753809, -0.003260124, -0.054936774, -0.00698429, 0.057297196, 0.0046571004, -0.035637148, 0.026860071, 0.029211977, 0.0078944005, 0.03543469, -0.021808581, -0.011417056, -0.036653925, 0.0028552099, 0.009175839, -0.017968524, 0.032026034, 0.045187622, 0.00476909, 0.011788858, -0.036809314, 0.028342547, -0.018014643, 0.007502849, -0.0071588387, 0.017772276, -0.013392429, 0.021439617, -0.0036366559, -0.052017707, -0.006098778, -0.029795222, -0.0014652109, 0.0032026358, -0.004927082, 0.021761987, -0.04906269, -0.04272503, -0.055272628, -0.0047170566, -0.0194387, 0.036920477, 0.007926685, 0.037682675, -0.0023320387, 0.015431663, -0.004178453, -0.052275743, 0.071322896, -0.02102619, -0.032728013, 0.02101484, 0.013468115, 0.042945225, -0.0061259773, 0.026005305, 0.015958145, 0.0074426564, 0.004679214, 0.009882546, -0.061331198, 0.025880424, 0.029941862, 0.005165785, 0.0061806124, 0.0117449835, -0.04517438, -0.07507178, 0.011942118, 0.070826806, -0.00574708, 0.008380676, 0.013680268, 0.025853464, -0.082382925, 0.019615142, 0.006479567, 0.011163512, -0.027077666, 0.012562734, 0.022695042, -0.043872368, -0.043849893, -0.0014522026, 0.013560356, -0.013135752, 0.022066502, -0.0017314049, -0.042768076, -0.005692918, 0.05505314, 0.012817225, -0.008693467, 0.013432164, -0.0057955654, 0.027822215, 0.013349857, 0.01149416, 0.021006087, -0.011727836, -0.03136805, -0.017034288, -0.012317705, -0.00032402566, 0.025891777, 0.015211941, 0.0019545606, 0.011352724, 0.015503534, 0.021203103, -0.0043036286, -0.061266866, 0.0055048885, -0.009177731, 0.0045689982, 0.012271348, -0.03204259, -0.02114226, -0.025619313, 0.0006731219, 0.014647261, 0.02938629, -0.014549048, -0.0032608334, 0.01905744, -0.0018005893, -0.062212925, 0.018297752, 0.044127565, 0.03224079, 0.06363107, -0.0019176643, -0.05627876, 0.034201972, -0.02413305, 0.047013517, -0.014113328, 0.044124253, -0.033990055, -0.0015737714, 0.010225493, 0.016272828, 0.009050486, -0.005163006, 0.009648396, -0.05409951, -0.016071673, -0.026122145, -0.030051133, -0.005080048, -0.018849779, 0.0012137954, -0.009833351, -0.037562378, 0.005590507, 0.0185144, -0.032758284, 0.002337715, -0.033744078, 0.0074190046, 0.023448104, 0.02042828, -0.010723594, -0.061210103, 0.0119865835, 0.027180078, 0.009310179, 0.016717833, 0.040042948, -0.021891836, 0.031857874, -0.00034578505, -0.05790646, 0.016859267, 0.0033445598, 0.0005697648, 0.013139594, 0.024128322, -0.0076773386, -0.015031006, -0.007357511, -0.011876841, -0.039217982, 0.035800815, -0.0574287, -0.01679541, 0.022740452, 0.019139746, 0.013719057, -0.023684146, 0.026055448, -0.02330856, -0.0070188213, 0.00449899, -0.059893187, -0.005199548, -0.007692712, 0.03366461, -0.0127131585, 0.024438629, 0.044591606, 0.009756484, -0.056786176, -0.045562264, 0.0441252, 0.008987573, 0.049229078, -0.036740016, 0.01824288, 0.0038012702, 0.06178105, 0.055301957, 0.010716972, 0.025206832, 0.0061792224, -0.054003958, 0.042760033, 0.041020703, -0.025963679, -0.010051655, 0.02997119, -0.04833363, -0.03288695, 0.0055228635, 0.019761309, 0.03786701, 0.0405051, -0.016615657, 0.051197, -0.0013909452, 0.0065949867, -0.041910473, -0.014451072, -0.030795446, -0.031168904, 0.012991301, -0.06383258, 0.020457134, -0.05043637, 0.026134916, -0.00807699, -0.018277649, -0.061234698, 0.0010546207, -0.03987928, -0.017857835, 0.009620488, 0.005712194, 0.049452465, 0.039682973, -0.039492343, -0.0022951423, 0.012514249, 0.02309688, 0.009767836, 0.0018696516, 0.0012828577, 0.0201447, 0.042848017, -0.07595918, 0.02212167, -0.031309865, 0.025825555, 0.002573964, 0.05082709, -0.030500984, -0.022747075, -0.063274875, -0.013345837, -0.054012477, 0.00049195136, -0.014067323, -0.033392146, 0.017847251, 0.017172888, -0.0014342275, 0.04308359, 0.010978054, -0.041762885, -0.0062449444, 0.03973075, -0.019898012, 0.0106257945, -0.005317805, 0.015621615, -0.029106729, -0.0045850812, -0.03267503, -0.004801729, 0.018191734, -0.02391262, 0.015692776, 0.06408991, -0.026284393, 0.034083713, -0.0319617, -0.078560844, -0.0027369524, 0.07101602, 0.018783554, 0.031401634, 0.04337048, -0.01620554, -0.007587167, -0.047883894, 0.05048917, 0.012804926, 0.00035098835, -0.051121313, -0.029640423, -0.065298975, 0.0042799767, -0.010535328, -0.008307297, 0.044708915, 0.045783877, 0.0016515848, -0.014519188, -0.035817843, 0.007132112, 0.036052465, -0.04924244, 0.03802311, 0.06318264, -0.0042444994, -0.011993444, -0.050249048, -0.028599404, 0.025573902, 0.0046472847, -0.013254305, -0.026208708, 0.01045432, -0.004476284, -0.013540872, 0.017927725, 0.0022308102, 0.018490039, 0.0039542955, -0.11099937, -0.012378253, -0.016309608, 0.06048542, -0.07260824, -0.024106564, -0.046513055, -0.027610771, -0.00843933, 0.030898329, -0.010777873, 0.010277999, 0.04236742, 0.016596854, 0.020316644, 0.015557075, -0.007517868, -0.022411695, -0.0019469921, 0.004726281, -0.04380827, -0.08581902, 0.057462756, 0.046474267, -0.03202083, 0.039554473, -0.011222167, 0.020105984, -0.03205347, 0.03866643, 7.3792704e-05, -0.017725386, -0.001141747, -0.008429633, 0.061749358, -0.022067921, -0.0004957356, 0.013599144, -0.024846619, -0.019449107, -0.026077205, 0.055849724, 0.026732353, 0.004329172, 0.04654995, 0.02966798, -0.0013821941, -0.051545147, 0.031746, -0.0062260227, 0.027613372, 0.02072889, 0.022652468, 0.017655378, -0.000112108144, 0.03156814, 0.027776921, 0.012622336, -0.0016502839, -0.028743206, -0.00039734534, 0.0013452978, 0.02224566, -0.013453924, -0.053823262, 0.0056858226, -0.024711097, 0.017030979, 0.0482188, 0.04617484, -0.0064596995, -0.014354573, 0.023454728, 0.037969183, -0.019365618, -0.025335731, -0.008760045, 0.0327273, 0.032835864, 0.0097921975, 0.027674157, -0.038201917, 0.054977454, 0.02494235, -0.021294871, 0.00036423324, -0.077238254, -0.06199628, 0.01938247, 0.007962398, 0.049628433, 0.029450146, 0.08002535, 0.028725466, 0.020998755, 0.033884097, -0.009583709, -0.04580824, -0.0013985137, -0.039840255, -0.034171224, -0.007774014, -0.0011087827, -0.020246163, 0.047247674, -0.04207698, 0.008928681, 0.018117528, -0.064195864, 0.013346545, -0.02959655, -0.0083679035, -0.025975358, -0.058340345, 0.050448664, 0.06393192, -0.028639138, -0.034078985, -0.011971447, -0.018501155, 0.008910942, 0.0010406664, -0.022138758, -0.022423286, -0.03742591, 0.053039927, -0.011124724, 0.005526411, 0.024256041, 0.026964374, -0.052436337, -0.020211158, -0.017168866, -0.03763428, 0.014073594, 0.04549415, 0.040365558, -0.0049722563, 0.010012156, 0.015136018, -0.0085523855, 0.04678599, -0.002149922, 0.010179135, 0.0070415265, -0.007413447, -0.0040680594, -0.07071611, -0.016424553, -0.006355485, 0.0322564, 0.015403281, 0.073657416, -0.045407113, -0.01100079, 0.0010766166, 0.021280207, -0.034404427, 0.018346002, 0.047592513, 0.051461894, -0.053569715, 0.004458605, 0.035773378, -0.058315158, 0.04546766, 0.046091113, -0.0072979094, 0.0008099163, -0.03804865, -0.054776892, 0.024548491, -0.02414062, 0.022626925, 0.059253648, -0.0069052945, -0.022608949, -0.014702029, -0.025433412, -0.007726474, -0.024835235, 0.010709402, 0.03825868, -0.00480031, -0.005611557, 0.029271608, -0.058010526, -0.00023107525, -0.015201298, -0.01629033, -0.028143402, -0.03933624, 0.010376389, 0.014043319, -0.007600412, 0.016037615, -0.008337629, -0.017694639, 0.013171052, 0.0029439032, 0.05173223, -0.0009598373, -0.0037369383, -0.0084038535, -0.018895425, 0.0033944645, 0.057633996, 0.01611661, 0.0007937446, 0.00411347, -0.0019815234, -0.07518531, -0.06309844, 0.05755831, -0.0080225915, -0.0017383858, 0.012218841, 0.0650899, 0.013143586, -0.027430072, 0.0037863697, 0.041437913, 0.024839288, -0.018097188, 0.03079367, 0.0029744136, -0.04622025, -0.061963167, 0.011867262, -0.0049493145, -0.02201293, -0.05400869, -0.03090436, 0.012411838, -0.030332588, 0.020241905, -0.04594826, -0.014849363, 0.0034408213, 0.022748966, -0.0488636, -0.022401642, -0.022579622, 0.03504018, 0.028129213, -0.016838573, -0.0022317562, 0.028815106, -0.0017800125, 0.036239784, -0.030263998, 0.040179655, 0.0015250492, -0.03840437, -0.02772477, -0.036946494, 0.033344842, -0.03187088, -0.003765793, -0.04902863, -0.056621235, 0.0070883567, 0.00091578637, 0.008538194, -0.019564528, -0.02476171, 0.07474662, -0.00040538685, -0.011583562, -0.012506917, 0.02322578, -0.025061138, -0.032517985, 0.0059053083, 0.010471824, -0.02581574, 0.011744393, -0.03248298, -0.022327024, 0.0044180425, 0.017383622, -0.008316462, 0.0035780002, 0.010886316, 0.0015039993, 0.023176823, 0.043542426, 0.0140693365, -0.0029053513, 0.060385134, -0.008977166, 0.034340806, 0.012826685, -0.07994115, 0.086885706, -0.014835172, -0.028640084, -0.02649915, 0.011402865, 0.012687141, 0.033919573, 0.0018694152, -0.044498894, 0.05401153, 0.01914826, -0.0031262564, -0.013929082, -0.017681867, 0.015045241, 0.022730518, 0.020082021, -0.017647455, -0.029919984, 0.040584095, 0.004558828, -0.003922366, -0.0027691184, -0.015556542, -0.011203068, 0.054747242, -0.04266543, 0.02921245, 0.0149761345, 0.024333915, -0.021590041, 0.03401844, -0.039948344, -0.03796351, -0.01602295, 0.06035108, -0.011824808, 0.004826327, -0.041849922, -0.0150040435, 0.010773734, -0.053441055, -0.01863597, 0.027868098, 0.03232416, -0.04066924, -0.026240991, 0.02732222, -0.016653528, 0.049730606, 0.009200791, 5.1796804e-05, 0.047443032, -0.03895498, -0.029509515, -0.025593769, 0.03444511, 0.015610941, -0.00620994, -0.01936751, 0.016410362, 0.028580481, 0.052183744, 0.0009233548, 0.016706007, 0.04261434, 0.025407396, 0.027220046, 0.005948827, 0.016346976, -0.049925495, -0.016543461, -0.01271032, -0.04564883, -0.05169652, -0.026688362, 0.023286978, -0.031312704, 0.052710697, 0.042928435, -0.004427089, 0.012239655, -0.00470665, -0.020671891, 0.012117614, 0.019256584, 0.009395798, -0.06096034, -0.02170357, 0.0038305982, -0.032177404, -0.024041284, -0.06419066, -0.021524942, 0.0076025403, -0.025231782, -0.037604008, -0.039273564, 0.020832248, 0.020718249, 0.011775613, -0.03803588, -0.030339208, 0.0020311915, 0.0057137315, 0.009604404, -0.052477017, 0.025762878, 0.020466123, -0.017276125, -0.04435367, -0.0041948315, 0.005056219, 0.011763432, -0.0019299631, 0.00797245, 0.069652036, 0.03092482, 0.034512278, -0.053268872, -0.005818862, 0.05463404, -0.04361906, 0.018875794, 0.012426502, 0.02016906, -0.06848341, -0.029962203, 0.01314057, -0.0059433873, 0.011490198, -0.047881532, 0.025394388, 0.01451635, 0.010862901, -0.010658848, 0.010595875, -0.019860644, -0.039783727, 0.00079090643, -0.008192882, -0.062549725, -0.05437387, 0.0076063247, -0.024834557, -0.07063475, 0.00991211, 0.03881307, -0.026589971, -0.015530527, 0.04400694, 0.005655312, -0.018897792, 0.021620315, -0.06621098, 0.012103423, -0.013186425, -0.04320279, 0.019398257, -0.032195024, 0.062267795, -0.0016239126, 0.047116645, -0.028174149, -0.03101564, 0.020132164, -0.019365855, 0.045969073, 0.02657578, -0.029785762, -0.0082515385, 0.020959966, -0.023235952, -0.043072235, -0.06017795, -0.031696804, -0.00020739416, -0.0070166923, -0.009543502, -0.006623959, -0.0020541335, 0.017096255, 0.02209098, 0.041605838, -0.010031077, -0.017243842, 0.028750772, -0.008329588, 0.051310997, 0.0014462898, 0.004317819, 0.028961685, 0.038142312, -0.0020564394, 0.0026291015, 0.023419783, 0.017775055, -0.013538123, 0.048631754, 0.029053986, -0.031785734, -0.03315634, -0.004214226, 0.045484684, -0.08944102, 0.012532107, 0.04988576, 0.014937051, -0.0032866136, 0.018760376, -0.0055486434, 0.055821344, -0.059283923, -0.039837074, -0.06398774, -0.0027121773, -0.02114634, 0.017063143, -0.024438394, 0.0075098267, -0.007893927, -0.027078139, 0.02275559, 0.012502187, 0.031100787, -0.0047138045, -0.018993108, 0.06582688, -0.07151838, 0.010493938, 0.046225924, -0.0013282686, 0.017740523, 0.013434293, -0.025258215, -0.0019323281, 0.014910856, -0.0237389, 0.019393291, 0.051704086, -0.037382625, 0.03980454, -0.021109682, 0.040597342, 0.026047466, -0.019131232, 0.022829114, 0.032447975, -0.010773734, -0.019995932, -0.010421564, -0.014462424, -0.010838776, 0.028721118, 0.00011400027, 0.01946358, -0.012233506, 0.0005941259, 0.05030865, -0.020881495, -0.06741058, 0.06394517, 0.008053811, 0.053876244, 0.01804421, -0.030412763, 0.058260284, -0.01324106, -0.026930552, -0.017539958, -0.012048551, -0.013062018, -0.018447703, -0.012635758, -0.019920247, 0.039830085, 0.015686626, 0.010190016, -0.0071923053, -0.07630875, -0.016056536, -0.034767717, -0.026202323, -0.019315714, -0.03294797, 0.018676177, 0.0065417704, 0.028209627, -0.003603721, -0.027993925, 0.07733097, -0.027619284, -0.031930067, -0.004647048, -0.009789374, -0.03680278, 0.029624932, -0.0019573988, 0.029624932, 0.062852465, 0.004421058, -0.023331739, 0.029636523, -0.058625467, 0.0526388, 0.00182022, 0.03152273, -0.0141797885, 0.010239211, -0.009147162, 0.0047491044, -0.012810603, -0.0072726016, -0.040657118, 0.056631643, 0.010160984, -0.01931193, 0.0019130226, 0.0062392675, -0.03480272, 0.017166028, 0.00052127923, -0.025108442, 0.037479125, -0.040394884, 0.060969803, 0.014718805, 0.00035690123, 0.031348653, -0.00036186806, 0.008858909, 0.0012847498, -0.030474495, 0.011796426, -0.023313764, -0.062298074, -0.03839086, 0.010011683, -0.017285941, 0.001397804, 0.037438918, 0.023925867, -0.037017565, -0.064737014, -0.036915272, 0.049460035, -0.019099066, -0.027717201, -0.019894939, 0.015041413, -0.023140637, -0.010762382, 0.01818517, -0.014878099, 0.045418464, -0.06999711, 0.03096834, 0.0034505185, 0.016760167, -0.010949703, 0.015942536, 0.020608326, -0.019878618, -0.012207253, -0.009053797, -0.008890602, 0.002339607, 0.015554, 0.019119406, 0.040363427, 0.025405029, -0.0115580475, -0.00061777735, -0.033710968, 0.024048854, 0.045543816, -0.0026698413, 0.011945903, 0.0013514472, 0.054876227, 0.03648576, -0.019901797, 0.016437799, -0.035743933, 0.03719909, 0.04732099, -0.057429176, 0.01463366, 0.028148249], [-0.0029529114, -0.09543552, -0.0034611998, -0.0245132, 0.017383855, 0.05229558, -0.0062991413, -0.039222494, 0.015522956, 0.057534378, -0.0011361851, 0.0294918, -0.063511804, -0.015230489, -0.021706926, 0.011192624, 0.0257932, -0.001344543, 0.03167149, 0.044053245, 0.025842818, 0.01427402, -0.036274828, -0.0052502933, -0.023607258, 0.032589737, 0.019170124, 0.030984392, -0.012727169, 0.021180283, 0.011024405, -0.03717724, 0.007017653, -0.026234925, 0.022491544, 0.0032167374, 0.012370561, 0.014519831, -0.059025962, -0.045907285, -0.04460571, -0.0009996332, -0.004011442, 0.060626663, -0.01852246, 0.037462443, 0.019983789, 0.028969193, -0.031116912, -0.021069145, 0.05634091, -0.03771578, -0.046980515, 0.019042296, 0.006868545, -0.004382119, -0.0030820007, 0.015668586, 0.0029385907, -0.012719204, -0.0067478893, -0.001304606, -0.08230394, -0.0005611339, 0.01037069, -0.0075656255, 0.015409802, 0.012283225, -0.013478508, -0.056710422, -0.0069643534, 0.044240426, 0.015363209, -0.018382076, 0.026776293, 0.015657693, -0.08667845, 0.0013336511, -6.454452e-05, -0.0124909775, 0.0047988845, 0.0013216498, 0.0145358285, -0.05791741, -0.032087497, 0.015755316, 0.014636074, -0.018367, 0.048687544, 0.008706022, -0.038036082, 0.025489436, 0.061026838, -0.0020912422, -0.008079007, 0.02879008, -0.02010844, 0.026673323, -0.00165476, 0.01888855, 0.04820628, -0.028752968, -0.033299323, -0.012211823, 0.0025941853, -0.004869304, 0.028794218, 0.0036181237, 0.002638257, 0.049694438, 0.01801024, -0.00022429219, -0.0050806617, -0.056904063, 0.028013933, -0.026606863, 0.02541763, 0.0041631213, -0.041001905, -0.015788397, -0.030079762, 0.01374193, 0.0036532194, 0.017924013, -0.022169024, -0.013257041, -0.0011989144, 0.0081677055, -0.078865334, 0.02251227, 0.029513787, 0.047653217, 0.036332916, -0.013436453, -0.020731445, 0.025049323, -0.0137882205, 0.03821822, 0.013318205, 0.027874697, -0.043135908, -0.034606956, 0.013004586, 0.0034055302, 0.016578259, 0.002807384, 0.02954364, -0.057920635, -0.005988118, -0.021523982, -0.020527376, 0.01748753, 0.009830634, 0.020856753, 0.008029338, -0.05418835, 0.0039162384, 0.022818102, -0.048192162, 0.025814578, -0.038725097, -0.00987047, 0.034309443, 0.008314443, 0.002292944, -0.06014016, 0.016727116, 0.007815736, 0.004618967, -0.004054606, 0.08523426, -0.024957348, 0.0018548481, 0.008792173, -0.08496721, 0.0021331962, 0.0073358878, -0.016943742, 0.046559792, 0.022074023, -0.01734195, -0.01668153, -0.01853167, -0.015585484, -0.017233185, 0.039728764, -0.023098867, -0.026814213, 0.029024761, 0.02834775, 0.016917318, -0.024608403, 0.017984925, -0.009481388, -0.037505914, 0.054563515, -0.06431781, 0.006856443, 0.025429329, 0.013971871, 0.018318137, 0.0076770657, 0.0014120878, -0.028131222, -0.0580707, -0.031136174, 0.05109828, 0.009587483, 0.052070886, -0.04192691, -0.016308181, 0.015626227, 0.022267858, 0.048383377, -0.008287516, 0.061421372, 0.01940173, -0.02983676, 0.048737563, 0.046312306, -0.008778722, -0.002156997, 0.043464683, -0.034305006, -0.03341147, 0.031386383, 0.01294763, 0.035349265, 0.022098443, -0.0029892179, 0.06544249, -0.0046488186, -0.01557076, -0.038349528, -0.01617821, -0.02477985, -0.031448144, 0.015380152, -0.054062486, 0.012938957, -0.009860183, 0.057353653, 0.019342378, -0.0035039606, -0.0257696, -0.047913816, -0.045807246, 0.018093845, -0.014016863, 0.0013209438, 0.055997208, -0.0027408225, -0.017709402, -0.0026866654, 0.012544277, 0.008958779, 0.0014853308, -0.008803115, 0.012835282, 0.026989693, 0.00016942936, -0.07214947, 0.00975429, -0.032207713, 0.039599676, 0.02936493, 0.018521402, -0.032441687, -0.0045766095, -0.033301417, -0.018629968, -0.05307153, 0.007846395, -0.0019649772, -0.05307657, 0.031290375, -0.0071892506, 0.030074516, 0.05506938, 0.015888037, -0.05170621, -0.003967067, 0.04301085, -0.00026841444, -0.01538711, -0.012655768, -0.0068981955, -0.0272515, -0.025074739, -0.05390516, -0.013717324, -0.011613928, 0.009810868, 0.045915358, 0.056274753, -0.03573709, 0.048531026, -0.019230636, -0.07727673, -0.010744167, 0.043877363, -0.013211657, 0.020545125, 0.02182472, -0.017308418, -0.035526108, -0.023105323, 0.039176907, 0.022187177, 0.022108112, -0.02715549, -0.0035299798, -0.035063002, 0.022687398, 0.005403183, -0.028331513, 0.039123658, 0.06369172, -0.01937271, -0.0031969703, -0.010751099, 0.0029504912, 0.0027818687, -0.031261332, 0.03715505, 0.05890212, -0.024869809, 0.0092516495, -0.049015913, -0.047667738, 0.0066940733, 0.030545691, -0.009531208, 0.004614126, 0.016601657, 0.031492077, -0.026643168, 0.012014155, 0.019243948, 0.0043591755, 0.0085583, -0.094686806, -0.0062727183, -0.023623127, 0.062097475, -0.0521439, 0.022484083, -0.07062986, 0.002876971, -0.011576462, 0.0077203307, -0.0029279005, 0.022959292, 0.02714097, -0.024774473, 0.007824611, 0.006013494, -0.01778282, -0.025283223, 0.0051831766, -0.006698511, -0.04461156, -0.06481238, 0.042711526, 0.017098952, -0.038490318, 0.041440807, -0.005878594, 0.063886166, -0.018616151, 0.047059808, -0.0071739214, -0.021079432, 0.025468864, -0.0005645628, 0.076643385, -0.053257294, 0.0053265365, 0.018891374, -0.016970366, 0.009081312, -0.009936629, 0.05650953, 0.020387193, 0.0076001165, 0.040382072, 0.029807867, 0.012397388, -0.04420331, 0.036373254, -0.02770069, 0.015366133, 0.017932685, 0.030560216, 0.036965452, -0.01526155, 0.053502258, 0.027085299, 0.041175973, -0.006853014, 0.0052369805, 0.024702799, 0.00792647, -0.0017848576, 0.009277468, -0.041568283, 0.008264119, -0.018712666, 0.015773268, 0.031303287, 0.027762413, -0.0020299251, -0.010692606, 0.02414207, 0.026831156, -0.014517675, -0.0072915135, 0.024477905, 0.023880664, -0.00874558, 0.0439766, 0.03739225, -0.05971013, 0.036002934, 0.062261254, -0.021577232, 0.030224584, -0.038484666, -0.03824666, 0.009872084, 0.024311878, 0.051063385, 0.009689897, 0.081479385, 0.045659598, -0.0090773795, -0.0056056916, -0.022511512, -0.055108108, 0.00034369953, -0.030972494, -0.056580532, 0.015130848, 0.0036844832, -0.008628064, 0.012259425, -0.05705735, 0.0067486335, 0.014577783, -0.03725348, 0.0049715415, -0.037234522, -0.005859028, -0.005845514, -0.07516209, 0.04169737, 0.061093908, -0.019454122, -0.010068138, -0.0312579, -0.035909344, -0.0039791693, 0.009105567, -0.03731258, 0.020578304, -0.0031679254, 0.021055229, -0.061070405, 0.015071952, 0.039329797, 0.0015666165, -0.0038629891, -0.012605342, -0.055081885, -0.037800495, -0.0051490385, 0.032987013, 0.02743626, 0.012595358, -0.002825033, 0.021334384, 0.03719257, 0.056987967, 0.027827863, 0.019331284, 0.0147948135, -0.025588006, 0.022098832, -0.057729423, -0.040943816, -0.0034837902, -0.0014990898, 0.0114268, 0.056773353, -0.044643827, -0.03532239, 0.0030192714, 0.011889907, -0.043859612, 0.01671703, 0.043446526, 0.052075323, -0.034488555, 0.017207569, 0.012778201, -0.052199166, 0.03500572, 0.03906103, 0.005703718, -0.009823675, -0.030665705, -0.04403227, 0.030816779, -0.041227005, 0.061102476, 0.010270898, -0.0014897682, -0.035789933, -0.0031569328, -0.009307319, 0.0017952453, -0.024376448, 0.019856112, 0.028080344, -0.03254496, -0.028505279, 0.04835675, -0.029767124, 0.02980938, 0.015916677, -0.012427644, -0.03378439, -0.0037177643, 0.030464608, -9.520316e-05, -0.024307868, 0.022283189, 0.012423055, 0.0018883306, 0.00086328294, -0.0068316334, 0.04048232, 0.008124932, 0.015340618, -0.0139279, -0.017623276, -0.022008017, 0.03804052, 0.021286782, 0.012882985, -0.0066392105, -0.02111221, -0.0790154, -0.07339196, 0.062494017, -0.0040203165, -0.026219092, 0.027006233, 0.037438996, -0.01640298, -0.056788687, 0.021061784, 0.028662607, 0.04006278, -0.025781803, 0.037731916, 0.01208828, -0.045721725, -0.09371864, 0.023828221, -0.014890419, -0.021268629, -0.06151738, -0.014845037, 0.009273434, -0.036207054, 0.03620907, -0.022357415, -0.027982064, -0.0042797048, 0.0027108698, -0.022332, -0.0140210865, -0.011901202, 0.06159806, 0.07835866, -0.015271232, 0.005913891, 0.036792796, -0.03325172, 0.045538574, -0.01893252, 0.022874374, 0.01112344, -0.04110356, -0.042778492, -0.020995526, 0.012588601, -0.012652995, -0.050680354, -0.03997968, -0.028495494, -0.007755881, -0.018281024, 0.010388037, -0.037349492, -0.010450968, 0.02501584, -0.020677038, 0.007492206, 0.010565533, 0.01947792, -0.026316011, -0.038031846, 0.0090822205, -0.017255168, -0.01803172, 0.016119992, -0.037518114, -0.02854562, 0.009346046, 0.0018153145, -0.004756326, 0.030156963, -0.014332564, 0.017368525, 0.026737465, 0.06480592, 0.007779556, -0.022874577, 0.028997986, 0.0212416, 0.04655556, 0.00418309, -0.06195144, 0.08995933, -0.009259718, -0.023898516, -0.0068493835, -0.00958123, -0.0005720258, 0.019350447, -0.0005115153, -0.02830872, 0.039837077, 0.023837904, 0.039751355, -0.018814525, -0.029554935, 0.014366361, 0.042934205, -0.0065278714, 0.019633636, -0.07538961, 0.028827194, 0.012815718, 0.006034307, -0.025288945, -0.019607011, -0.01736792, 0.014869442, -0.021730121, 0.004037663, 0.02748144, 0.038791537, -0.015597989, 0.020671995, -0.044902813, -0.0034567623, -0.024683034, 0.03502831, 0.0121775335, 0.024252601, -0.03093296, -0.024367975, -0.010300901, -0.031328194, -0.036081795, -0.002255629, 0.043733753, -0.0033192018, -0.03194772, 0.015787588, 0.011279356, 0.02695137, 0.021209328, -0.013572905, 0.045418363, -0.0455886, -0.049250696, -0.020020096, 0.037404355, 0.02747418, -0.019430522, -0.010378758, -0.006279375, 0.047348045, 0.036537845, 0.012205368, 0.025306292, 0.047181636, 0.022241235, 0.004576206, 0.02594367, 0.026000952, -0.032893095, 0.010256779, -0.010123807, -0.058233675, -0.047979165, -0.012724144, 0.028547334, -0.02315131, 0.053547747, 0.018631985, 0.007576266, 0.0140753435, -0.027587133, -0.013512395, -0.012027871, 0.0135220755, 0.02482034, -0.061916746, -0.040624317, 0.017322134, -0.009302478, -0.02292944, -0.058977555, -0.0045455475, -0.0066482867, 0.008565461, -0.033273306, 0.0038931563, 0.03974732, -0.000108112064, 0.002505739, -0.023495011, -0.047368415, 0.023340305, -0.0089303395, 0.027096292, -0.03889705, 0.0031159117, -0.01922176, 0.009410591, -0.058345012, -0.032364234, 0.018096214, -0.0074335113, -0.0008531978, 0.013750856, 0.047904942, 0.046367165, 0.012184391, -0.01218376, -0.006732397, 0.039633155, -0.046705168, 0.018900247, 0.00413811, -0.00459799, -0.05839988, 0.010106058, 0.033680942, -0.012748752, 0.034026254, -0.043280326, 0.014144023, 0.00937852, -0.022020774, -0.01970698, 0.010488887, -0.0074177785, 0.007416165, -0.00036144932, -0.0026525778, -0.07589144, -0.029316926, 0.024825435, -0.029481312, -0.056351803, 0.0035106167, 0.058102973, -0.030320467, -0.044352166, 0.05273992, -0.009345239, -0.024936672, 0.015263569, -0.05929866, 0.013772186, 0.010657914, -0.06111882, 0.03184707, -0.06577369, 0.04527475, 0.0034224729, 0.011120213, -0.031046318, 0.00047682264, 0.016034473, -0.012947227, 0.0444986, 0.0066802567, 0.0047436184, 0.006331313, 0.019634442, -0.021774093, -0.042266976, -0.06797264, -0.022962922, -0.008986008, 0.0086041875, 0.016213482, 0.038362034, 0.011528961, -0.0074571106, 0.031316195, 0.028802184, -0.0044027427, 0.010018922, 0.025785735, 0.014025522, 0.03725469, -0.007898111, -0.0055804783, -0.0012602317, 0.010532859, -0.041989334, -0.01267372, 0.049905017, 0.016610531, 0.00472602, 0.0515868, 0.005600044, -0.018021297, -0.03744772, 0.008312527, 0.023521231, -0.067662016, 0.0025856886, 0.06439526, 0.021238776, -0.013977115, 0.046384916, -0.0043474766, 0.02322816, -0.06957657, -0.010603959, -0.056218274, -0.038484164, -0.0050905454, 0.0061273426, -0.004589115, 0.005094378, 0.0064116907, -0.03991433, 0.042962443, 0.01946461, 0.022976235, 0.026839225, -0.009270206, 0.080415204, -0.038065936, -0.017969597, 0.05710092, 0.023911323, 0.010976804, 0.0039021194, -0.002213877, -0.0020258154, 0.017691048, -0.043196216, 0.01811956, 0.017293695, -0.059510045, 0.036533408, -0.015786529, 0.03278942, -0.0023175515, -0.03255948, 0.039260816, 0.003901716, -0.012072648, -0.03741484, -0.024038903, -0.02145379, 0.023389723, 0.033932462, -0.0053148377, 0.015015878, -0.003467654, -0.009991088, 0.029567441, 0.010202874, -0.04809212, 0.04811592, -0.008247175, 0.055229936, 0.02607316, -0.040497247, 0.070160694, 0.0096154185, -0.025893444, -0.024614053, -0.03207822, -0.047048163, -0.027361428, 0.026522957, -0.03572297, 0.023200527, 0.026857376, 0.040421356, 0.011559922, -0.07752522, -0.02189108, -0.059101798, -0.024381692, -0.041218128, -0.013556163, 0.019127667, -0.0013407106, 0.047198176, -0.006834155, -0.00041550532, 0.06762007, 0.0006256784, -0.016199866, -0.009031392, -0.013002896, -0.01998742, 0.0011402193, -0.017032491, 0.04273936, 0.027403584, 0.039669868, -0.039881248, -0.013046061, -0.063206024, 0.018844174, 0.0017408867, -0.007791734, -0.019553559, 0.045865536, -0.025877308, 0.015379345, 0.036917444, 0.034716476, -0.04427653, 0.074818395, -0.005292953, -0.01649082, -0.025154611, 0.027036892, -0.044198472, 0.027177578, 0.012330423, 0.012161801, 0.019189488, -0.026526183, 0.07386636, 0.01614823, 0.028942164, 0.043819867, 0.008202398, 0.008383122, 0.01454672, -0.0397925, 0.010271806, 0.0029480709, -0.019495672, -0.028939137, -0.0012457093, -0.04587663, -0.018357268, 0.034887522, 0.042568494, -0.009773653, -0.04298826, -0.031163303, 0.059313186, -0.015339408, -0.01857349, -0.0055685784, 0.0065093143, -0.011441726, 0.009156043, 0.021633709, -0.033965744, -0.0021243214, -0.09088836, 0.015657894, 0.01930486, 0.022268767, -0.0361296, 0.014808529, 0.017011564, -0.009069059, -0.00951245, -0.0058299834, -0.03542375, 0.004331744, -0.003267566, -0.005776129, 0.04058912, 0.023828624, 0.004825862, 0.009886202, -0.025788154, 0.03604327, 0.033339664, -0.0012077893, 0.015277889, 0.0013421226, 0.0371136, 0.0017687214, 0.0019520179, -0.013298591, -0.030734485, 0.04623001, 0.017717369, -0.03859762, 0.020323252, 0.035066027], [-0.01678883, -0.052661914, -0.016869731, -0.06964183, 0.024899187, 0.0020973962, 0.014354547, -0.042665172, 0.035190854, 0.033922397, -0.020236796, 0.022286497, -0.033317447, -0.0075346883, 0.0012092933, -0.013372259, -0.010979634, -0.00972506, 0.025627598, 0.031657536, -0.02521411, 0.02613957, 0.010738741, 0.052040063, -0.03347382, 0.03386504, -0.005867155, -0.0004515983, 0.02456924, 0.020657603, -0.04801915, -0.057374716, 0.0019331786, -0.04898151, 0.016872145, -0.013348261, 0.02886848, -0.011700048, -0.023640083, -0.061022516, -0.021284286, 0.032555528, -0.014091315, 0.011894905, -0.013886647, 0.046710234, -0.012576982, 0.028646303, -0.007256967, -0.035516877, 0.025010275, -0.0030715324, -0.022705493, 0.018488964, -0.01131773, 0.047070064, 0.03381312, 0.037761588, -0.00940787, 0.01161477, -0.036456298, 0.009387268, -0.0398783, 0.007982664, -0.0030202144, 0.033404086, -0.014131766, -0.0039013745, -0.007957307, -0.03981551, -0.011064008, 0.03801395, -0.0064078053, -0.00386032, 0.02871815, 0.00087180204, -0.049555063, -0.020161327, 0.012581962, -0.033133306, -0.025243618, 0.00844513, -0.0036381432, 0.0062016277, -0.04461284, 0.019240623, -0.02387675, -0.027216645, -0.001268309, 0.0038797907, -0.08695803, 0.014073808, 0.053177506, 0.019677127, -0.0017416419, -0.011811589, 0.02750161, 0.010613767, 0.044560917, 0.025079928, 0.04888068, -0.021774523, 0.0035741467, -0.046151172, -0.0063320356, 0.005498873, -0.022855218, 0.0027470216, -0.0065662875, 0.029113598, -0.01426006, 0.010261786, -0.04419505, -0.013788237, -0.022011342, 0.0043276157, 0.03316229, -0.021696037, -0.009893504, -0.008415471, -0.020441879, 0.05096057, 0.019515023, 0.038537998, -0.027069334, -0.018594922, 0.009442509, 0.019836515, -0.058041245, 0.00071324455, 0.053749856, 0.01075142, 0.062332634, -0.02369261, -0.058975838, 0.062330224, -0.010222845, 0.029052319, -0.0081915585, 0.06217808, -0.034965564, 0.02537584, 0.02416534, 0.0009128564, 0.030389607, 0.011771742, -0.008486184, -0.052018326, -0.0012594038, -0.016583558, -0.034399956, 0.022031715, -0.026343634, 0.004576885, 0.02168034, -0.01072478, -0.0114783235, -0.010133189, -0.06160332, 0.031607047, 0.022566631, 0.008438224, 0.016526807, 0.023132639, -0.019544305, -0.044886936, 0.007867953, -0.022374038, 0.023620764, -0.013453764, 0.10461625, -0.039918523, 0.017044816, 0.039310787, -0.06868037, -0.0032583901, 0.009519033, -0.057558853, -0.0061601577, 0.022471242, 7.969381e-05, -0.026238585, -0.03335986, -0.01498606, -0.029205367, 0.01863688, -0.027021032, 0.021636872, 0.016217692, 0.028398769, 0.018104985, -0.011407686, 0.00086817954, -0.034007523, 0.006093407, 0.012263187, -0.06465583, -0.018161736, 0.023451716, 0.06723109, 0.011599677, -0.02254852, 0.013552703, -0.028800258, -0.009597671, -0.05338761, 0.037545446, 0.010675349, 0.024381476, -0.0018776346, 0.025007555, 0.0012111044, 0.028059468, 0.07059423, 0.009653819, 0.019250283, 0.004319314, -0.015923781, 0.014199989, 0.02321022, -0.012922171, -0.014520274, 0.047434423, -0.017266389, -0.025539754, 0.010934957, -0.00697985, 0.011952817, 0.01237186, 0.005047888, 0.065199204, -0.03502664, -0.005881947, -0.007642154, -0.022423243, -0.024832472, -0.033479854, 0.02225148, -0.041953813, 0.011018575, -0.033741876, 0.0017055683, -0.009766115, -0.019826854, -0.0031047382, -0.009356589, 0.01116136, 0.00016663253, -0.04398857, -0.00080267363, 0.04640897, 0.034690354, -0.024673687, 0.03843521, -0.002492243, 0.006902873, -0.010976012, 0.00890035, -0.011123324, -0.012415633, 0.006618209, -0.02701862, 0.020745749, -0.053834375, 0.06098267, 0.0046657105, 0.022691002, 0.0014749393, -0.023032041, -0.03775494, -0.03883021, -0.046005066, 0.054153156, 0.008960724, -0.0039700503, 0.021744335, 0.019220699, 0.008153824, 0.03891413, 0.07661715, -0.037687927, -0.011740008, 0.03409084, -0.0038246994, 0.0121041015, 0.0154219605, 0.054133836, -0.030491335, -0.0043463316, -0.06439939, -0.044053774, -0.017562827, -0.016542504, 0.057519615, 0.036688134, -0.034847934, 0.017946202, 0.014136596, -0.08185762, 0.012332014, 0.050120164, 0.034306977, 0.0050690095, 0.049235076, -0.017888846, -0.05041539, -0.054161604, 0.040855758, 0.014381112, 0.007539367, 0.0027433992, -0.03383606, -0.03783645, 0.0024795644, 0.010546148, -0.032503, 0.0072227046, 0.03860803, -0.013395202, 0.010273257, 0.0061400463, 0.013930719, 0.009670723, -0.02701862, 0.048439346, 0.055370297, 0.018835513, -0.021140594, -0.07036964, -0.034241173, 0.08725657, -0.0021244136, -0.027566815, 0.021751583, -0.046176527, 0.010442304, 0.016327571, -0.035784937, 0.011339463, 0.009377305, -0.018228149, -0.07790191, -0.054446574, -0.03606507, 0.026598413, -0.0612942, -0.007392205, -0.05846145, -0.001305288, 0.0035487898, 0.042597853, -0.043945856, 0.0011869548, 0.023881579, -0.014741771, -0.019034747, 0.028514689, -0.010476114, 0.005737351, 0.029911745, -0.004151927, -0.0143847335, -0.05707043, 0.045027003, 0.042447824, 0.0031901675, 0.10411393, -0.017112434, 0.028601816, -0.010234618, 0.07367331, 0.019136176, 5.5544173e-05, 0.022323929, -0.0044675325, 0.03819598, -0.03402443, -0.028438013, 0.011279391, 0.01883491, 0.015275855, -0.01613679, 0.059530977, 0.04470853, 0.048240114, 0.03546858, 0.054896966, 0.04215199, -0.03492038, 0.050299175, -0.01106778, 0.0063078864, 0.035100296, 0.047370426, 0.025038347, 0.03643456, 0.027371202, 0.046437345, 0.022268986, -0.011751215, -0.03187994, 0.023369003, 0.008886464, 0.013183893, -0.029323097, -0.03840759, -0.009609142, 0.0027747937, 0.005450574, -0.024869904, 0.04025564, -0.011345501, 0.019865494, 0.026743311, 0.028443448, -0.034036502, -0.0222225, 0.03847883, 0.05800291, 0.0048638885, 0.027504139, 0.026490798, -0.03400088, 0.05339214, 0.03495419, -0.024040967, -0.008454713, -0.0350206, -0.028164519, 0.019386878, 0.033549886, 0.07390756, -0.00032194488, 0.087040134, 0.024677008, -0.02452396, -0.005076858, 0.005576152, -0.06717464, -0.002399267, -0.04527333, -0.021973757, -0.036621723, 0.009432548, -0.009543636, 0.016222067, -0.024698442, 0.0059764325, 0.0012563851, -0.048864383, 0.0042708637, 0.010509924, -0.014531065, -0.009913427, -0.022189597, 0.035404578, 0.02452396, -0.040151797, -0.03881089, -0.035236742, -0.024993442, 0.014346093, 0.013372109, -0.042258702, -0.0047852513, -0.037977725, 0.047764216, -0.026977565, 0.026257904, 0.021683961, 0.044630345, -0.05598913, -0.014462616, -0.01844791, -0.019252999, 0.012125534, 0.044326667, 0.025996184, -0.00670711, 0.056396995, 0.018665258, 0.019420538, 0.0045208125, 0.041933436, 0.024062702, 0.020676922, -0.003541243, -0.046461497, -0.023484318, -0.016082453, 0.023385305, 0.00956205, 0.02329595, 0.07075845, -0.08528688, 0.014222328, -0.0004165813, 0.019467026, -0.046087176, 0.022050131, 0.020154687, 0.03350038, -0.06508811, 0.01017779, 0.015259855, -0.07321205, 0.019997714, 0.03781366, -0.024797454, 0.0027204573, -0.026563397, -0.04592175, 0.0013475498, -0.0330355, 0.017001348, 0.03822888, 0.021085957, -0.0451067, -0.0058399867, -0.030852072, -0.014482539, -0.0006700016, 0.008928122, 0.03575596, 0.011690841, -0.025076987, 0.02558896, -0.06545277, 0.0110981185, -0.0011631071, -0.04278264, -0.056853082, -0.04752891, 0.035833236, -0.014024073, -0.008138428, 0.06650811, -0.0033966468, 0.02672369, -0.009015061, -0.018489342, 0.035407297, 0.021052392, 0.003694593, -0.012847608, -0.025605863, -0.03150079, 0.04563437, -0.020405238, 0.033318054, 0.0078637265, -0.008024925, -0.051518425, -0.05936948, 0.06023886, -0.025981996, -0.041851327, 0.028325113, 0.043161444, 0.03566902, -0.04986418, 0.0116787655, 0.036924195, 0.023298366, 0.03198016, 0.028554535, 0.01827645, -0.07989184, -0.024799267, 0.028022941, -0.0017333404, -0.018973166, -0.025756799, -0.015821638, -0.007883047, -0.0040269527, 0.015579838, -0.0030410436, -0.022414489, -0.015492673, 0.007519594, -0.03885677, -0.02369925, -0.024827037, 0.034870874, 0.030320479, -0.010352347, -0.009120112, 0.032289576, 0.0011570696, 0.05786012, -0.026468309, 0.04978207, 0.012633884, -0.009483262, -0.0059752245, -0.031790588, 0.0040041613, -0.00533043, -3.6224462e-06, -0.040786028, -0.04480513, 0.014422276, -0.0320831, 0.014500047, -0.008180993, -0.015610328, 0.042428505, -0.027617227, 0.029984195, 0.018549338, 0.013745975, -0.007020904, -0.008908803, 0.03262858, 0.0061050295, -0.0017955258, 0.0021671285, 0.0034872082, -0.008072018, 0.017642068, -0.0058417977, 0.012437669, 0.04491592, -0.048110913, 0.011689887, 0.00074260146, 0.0632787, 0.04251242, 0.0046463907, 0.044836223, 0.01038676, 0.018453345, -0.016142223, -0.06700801, 0.058244105, -0.025603447, -0.037707247, -0.0390391, 0.002389607, 0.024831869, 0.00039484663, -0.011656126, -0.03336333, 0.024365176, -0.027586134, 0.03878432, -0.0034678883, 0.020727636, 0.0030159883, 0.0586631, 0.0005083499, 0.012081895, -0.04911916, -0.007050487, -0.046408363, 0.01569787, 0.003146698, 0.0038772249, -0.03788052, 0.031505622, -0.047550645, 0.03022569, 0.022847975, 0.042086788, -0.04191291, 0.017582146, -0.0004938601, -0.039779287, 0.005165608, 0.01542679, -0.0054095197, 0.0073882807, -0.0038334536, 0.014247835, 0.027436407, -0.022073979, -0.014673926, 0.04004252, 0.025777325, -0.049194023, 0.019200172, 0.027086237, 0.023381984, 0.029854992, -0.002445151, -0.010279295, 0.0037021397, -0.03046115, -0.06839178, -0.029605648, -0.0026612906, 0.009933954, 0.0065373075, 0.00571305, 0.013269624, 0.046219997, 0.07197559, 0.05870536, 0.0009385154, 0.09303891, 0.006782427, 0.008020699, 0.005580378, 0.03378052, -0.03828382, 0.025585337, -0.013638509, -0.05182513, -0.04057502, -0.024187751, 0.014673926, -0.026794026, 0.07040767, 0.058594275, 0.019387934, -0.014091315, -0.008402867, 0.0058707776, 0.014388091, 0.018406855, 0.00012195569, -0.03960541, -0.061815836, 0.030732833, -0.01267675, -0.015687607, -0.054295637, -0.040000256, -0.01648213, -0.0027249851, -0.020099746, 0.009089924, 0.011849021, 0.03997007, -0.002034607, -0.064948045, -0.058234442, -0.0005107649, 0.026210207, -0.001359021, -0.0410399, -0.00016376475, -0.007595062, 0.010683197, -0.007231308, 0.0024088512, 0.004606544, 0.028960852, -0.0076095513, 0.010966351, 0.011019481, 0.017304122, 0.011640127, -0.012566869, -0.013382523, 0.01732314, -0.030993648, 0.010682593, 0.03821077, 0.02722389, -0.034847934, -0.039292675, -0.03310916, 0.014825314, 0.03687118, -0.038308576, 0.0103541585, 0.011346709, 0.012946622, 0.020351505, 0.056021128, -0.032878757, -0.04906241, -0.00022398792, -0.023134148, -0.07643361, -0.03341193, -0.022217369, -0.0088266935, -0.041636396, 0.007992625, -0.0073777153, -0.05404931, -0.005485591, 0.047481816, 0.0018498624, -0.011709557, -0.011465948, -0.08200252, 0.0050011077, -0.026772292, -0.07712429, 0.035135917, -0.027259814, 0.027508857, 0.00807564, 0.07879545, -0.060924713, 0.0044166674, -0.01377737, -0.0013040806, 0.04198415, 0.037363946, -0.0121038, -0.0039104307, 0.015380906, -0.005422802, -0.040175345, -0.074926674, -0.033652525, 0.023088263, -0.00069249095, -0.002179505, 0.023458356, -0.012240246, -0.033678487, -0.0023422134, 0.033943526, 0.001960951, -0.019058293, 0.054916285, 0.020938946, 0.03427136, 0.0015606706, -0.0011706161, -0.008850844, -0.03551929, -0.0025592581, 0.0026099724, 0.029964874, 0.0069200797, -0.009377305, 0.013955172, 0.007677171, -0.0015316909, -0.009113168, -0.02664128, -0.0052114925, -0.038059834, 0.011342483, 0.017980615, 0.0018919734, 0.0051197237, 0.022090884, 0.015878389, 0.015588593, -0.034058843, -0.0182366, -0.0630692, -0.041021787, -0.02776967, -0.018192528, -0.014305643, -0.012655921, -0.010051081, -0.037856977, 0.006855479, 0.006063975, 0.033205755, 0.011917848, -0.0050834995, 0.036493126, -0.025673784, -0.05701006, 0.020386145, -0.024465397, 0.0110448385, 0.032870077, -0.025532207, 0.03065797, 0.003822888, -0.028643887, 0.03375697, 0.022304608, -0.065609746, -0.019526191, 0.016928295, 0.03876093, -0.019295562, 0.011625637, 0.011231394, 0.01578979, -0.034495346, -0.013379269, -0.039484814, -0.010763495, -0.02111403, 0.03495057, 0.039147776, 0.00154686, -0.04760298, -0.041112952, 0.022128316, -0.022066735, -0.03148751, 0.040759765, 0.04009263, 0.044845883, 0.024037646, -0.059898354, 0.056392428, -0.0025151852, -0.0065650796, -0.020199968, -0.036928423, -0.0005261226, -0.02800996, -0.017262766, -0.022796053, 0.07316043, 0.06265866, 0.028560875, -0.03285317, -0.042165272, -0.00572105, -0.022793034, -0.029457731, 0.0033583094, -0.045506373, 0.0034968678, 0.029454712, 0.02479051, 0.029274195, -0.026712824, 0.028024452, 0.0038796398, -0.005466271, -0.021971947, -0.0269836, -0.029635232, 0.010074476, -0.00906819, 0.039900035, 0.02988035, 0.044717893, -0.022678927, 0.00094908086, -0.016784, 0.00974438, 0.018713556, 0.02760787, -0.00040390273, 9.780604e-05, -0.017012214, 0.0014767506, -0.006049485, -0.0077985227, -0.043053374, 0.004256374, 0.02772288, -0.02618606, -0.0052259825, 0.034411427, -0.003983483, 0.059963558, 0.027074615, -0.017625313, 0.013447728, -0.0073580933, 0.07514764, 0.007824484, 0.0070323753, 0.057167027, 0.009112263, 0.017228354, 0.002489828, -0.05745924, 0.042218402, 0.009882787, -0.035376202, 0.015989477, 0.010332423, -0.028153047, 0.014781996, 0.030205466, 0.037635706, -0.01186819, -0.023043437, -0.086792596, 0.038558524, 0.00020587568, -0.0309858, 0.009287197, 0.0005252547, -0.032424517, -0.0029982908, -0.025049213, 0.003746213, 0.035982963, -0.084538236, 0.03251266, 0.026180625, 0.001988723, -0.028380658, 0.029228913, 0.012446725, -0.02621504, -0.034586437, 0.035270553, -0.020961888, 0.028629247, 0.022614328, -0.015161749, 0.050018735, 0.045887943, -0.0054647615, -0.004296825, 0.016763775, 0.013812086, 0.08294556, 0.0070898817, -0.041047145, -0.028730828, 0.03913668, -0.007264212, 0.022872576, -0.028302774, -0.023241311, 0.014751808, 0.029205367, -0.03271465, -0.023369003, -0.011715896], [0.0013085525, -0.070639655, -0.040976, -0.07945517, 0.0241898, 0.028353874, 0.0025785817, -0.0046689063, 0.011434183, 0.047039576, -0.009492801, -0.0074331597, -0.034737058, -0.00809746, -0.024302177, 0.0058120554, 0.006591476, -0.01279593, 0.026021883, 0.039825685, -0.032285914, -0.008167786, 0.0023637933, 0.046039548, -0.022546295, 0.038050935, 0.0064880014, 0.01294599, 0.019102009, 0.029630957, -0.04505183, -0.07363102, 0.009288651, -0.04502003, -0.001342932, -0.014248663, 0.034812756, -0.01758578, -0.025118383, -0.031120367, -0.03148992, 0.023487423, -0.016613297, 0.023784187, -0.012840277, 0.05194522, -0.016278012, 0.03495789, -0.013182056, -0.031755548, 0.023009468, -0.008928841, -0.050577205, 0.016165353, -0.0033282137, 0.03724195, 0.049637422, 0.037150346, -0.015889421, 0.0026034426, -0.037645996, 0.019585172, -0.06764292, 0.008078254, 0.022235872, 0.032290395, -0.031388685, 0.003327094, -0.0058010817, -0.03801902, -0.034511294, 0.030461164, 0.016776571, 0.0050729504, 0.027817238, 0.008796865, -0.04244346, -0.0107427845, -0.014003583, -0.020571318, -0.0031857681, 0.012603314, 0.016754845, -0.018482113, -0.03836539, 0.032380875, -0.007402924, -0.025991872, 0.033633325, 0.018345939, -0.061464895, -0.007520061, 0.04563046, 0.016364241, -3.404364e-05, -0.0050859405, 0.03328393, 0.023937158, 0.043382347, 0.016719235, 0.06022947, -0.048092015, 0.001445063, -0.035110865, 0.027019005, 0.0053990525, -0.02746605, -0.0045495294, -0.01429956, 0.03203596, -0.013198854, -0.007948294, 0.00063787034, -0.027998641, -0.026827509, 0.0085566, 0.044312276, -0.02925827, -0.02646938, -0.0017523515, 0.00078837905, 0.04494298, 0.03687128, 0.05106994, -0.038052954, -0.009220451, 0.017336275, -0.012240257, -0.06152783, 0.0026839813, 0.029332515, 0.00804281, 0.05506021, -0.024185097, -0.043968704, 0.04262085, -0.0025911275, 0.03272266, -0.03052147, 0.06806399, -0.056530364, 0.015540026, 0.02018967, -0.0070792856, 0.011445831, -0.001319919, -0.006820374, -0.040294904, 0.007922761, -0.023616657, -0.039442245, -0.0009550137, -0.020369297, -0.009860338, -0.00352934, -0.031183973, -0.011640237, -0.0029199703, -0.061722916, 0.045562487, 0.025064856, -0.0015050874, 0.0051567154, 0.0033954051, -0.007896837, -0.071491644, 0.00063831825, -0.0056337747, 0.008797593, -0.019028602, 0.09747232, -0.033857297, 0.034962818, 0.017727777, -0.07879311, 0.010268777, 0.0010656555, -0.042603824, 0.0044220896, 0.0059880973, -0.014895884, -0.012299498, -0.028994432, -0.014989784, -0.03328953, 0.03126819, -0.0043391646, 0.018746398, 0.0306124, 0.028858816, 0.0362511, 0.011051641, 0.00045645353, -0.03724598, -0.013920265, 0.0029465668, -0.04845306, -0.020489793, -0.011853458, 0.07786856, 0.008625584, 0.009747679, 0.026516413, -0.008946647, -0.017783323, -0.060339667, 0.06733832, 0.010460469, 0.033944197, -0.00670167, 0.00021904394, 0.00029250653, 0.0418898, 0.040763676, 0.01711768, 0.01785141, -0.019104753, -0.023897516, 0.006446567, 0.061902765, -0.0101638185, -0.016285626, 0.039015803, -0.0345319, -0.011150636, 0.009953006, -0.010430344, 0.008161067, 0.0027279707, -0.00979785, 0.05671833, -0.005692455, -0.020251486, -0.031895306, -0.04540347, -0.0321475, -0.02548704, 0.019801753, -0.052712098, 0.011331158, -0.026045626, 0.014017917, 0.0018647853, 0.0057600946, -0.0021357907, -0.0059128427, 0.021397324, 0.0006450374, -0.034928773, 0.008351554, 0.054774426, 0.0082464, -0.049825557, 0.03044039, 0.02070391, 0.008796026, -0.020189894, -0.007739329, 0.014046585, 0.0023169832, 0.017806169, -0.048105456, 0.0056732497, -0.06994534, 0.047915526, 0.010328662, 0.024790488, -0.015847314, -0.02003737, -0.02127414, -0.027169513, -0.041877262, 0.049191266, 0.012684839, -0.025238879, 0.0074994555, -0.004632623, 0.024863167, 0.040881038, 0.05491508, -0.05268074, -0.001140462, 0.00539043, -0.025607537, -0.0026088178, 0.009508702, 0.029538905, -0.027885327, 0.0155415945, -0.05440532, -0.0146566825, -0.019849233, -0.019108336, 0.058211043, 0.057902858, -0.048216544, 0.011085684, 0.0036467009, -0.079210594, 0.013189671, 0.026362319, 0.0114879375, 0.018334292, 0.015815958, -0.010351059, -0.05743431, -0.039061494, 0.04615959, 0.028532602, 0.003820167, 0.014755511, -0.043613486, -0.04764497, 0.0072983294, 0.006328982, -0.03362974, 0.030288089, 0.048387658, -0.043919876, -0.013238049, -0.018791642, 0.004359378, -0.010792729, -0.042986367, 0.028195301, 0.04018919, -0.0022166441, 0.0040334994, -0.07015499, 0.0019180904, 0.07093261, 0.017478721, -0.03850795, -0.0064526135, -0.013155516, 0.0006844563, -0.013710236, -0.024497533, 0.0037745887, 0.015417738, -0.0006548921, -0.06820912, -0.02437592, -0.022999166, 0.03449024, -0.068400845, 0.009374543, -0.051206116, -0.0036453572, -0.005917322, 0.067560054, -0.02312459, 0.0068438076, 0.007536971, -0.005956741, 0.0022428487, 0.0016869521, -0.02091377, 0.0060364753, 0.019755166, 0.017353298, 0.0036375183, -0.046199013, 0.020363024, 0.042879757, -0.012536123, 0.07548729, -0.00740046, 0.025371471, -0.013263805, 0.0663627, 0.035854224, -0.0063657127, 0.025447452, 0.010032628, 0.05563806, -0.045069303, -0.02841804, 0.025253214, 0.028558135, 0.024108721, -0.010988929, 0.052609745, 0.056651305, 0.014808284, 0.04648211, 0.050024442, 0.03584168, -0.035048824, 0.036983486, -0.021282202, 0.017716074, -2.0605361e-05, 0.033337682, 0.04510603, 0.015072263, 0.03335381, 0.049047925, 0.009059192, 0.008378991, -0.0038630574, 0.027190117, 0.0037178118, 0.0021492287, -0.024106259, -0.03211211, -0.012519998, -0.001945191, -0.002100963, -0.0029922568, 0.04815966, 0.006014526, 0.0055164136, 0.036519866, 0.0423037, -0.03166417, -0.045294166, 0.039670695, 0.03557023, 0.017874703, 0.011066871, 0.044306006, -0.035101008, 0.04897088, 0.04448384, -0.027912201, -0.0015901963, -0.04301952, -0.032440905, 0.024521276, 0.045727775, 0.058802776, 0.005636462, 0.086890124, 0.03745741, -0.009508926, -0.0120339785, -0.02907506, -0.07332642, -0.009112497, -0.025030866, -0.027179815, -0.009671978, -0.00020023037, -0.012938039, 0.0023837269, -0.031001214, -0.009327509, 0.025930503, -0.06973213, 0.030024253, 0.026664235, -0.029265884, 0.0024708516, -0.030356625, 0.0057251547, 0.026620224, -0.049943812, -0.020741535, -0.016805016, -0.016680656, -0.011418701, 0.01835221, -0.043086704, 0.01391265, -0.045433927, 0.023138925, -0.032111216, 0.01134594, 0.016670857, 0.04519215, -0.05623472, -0.03846394, -0.035237856, -0.019343955, -0.0007740449, 0.042732835, 0.014020156, -0.0048301653, 0.042486466, 0.01875267, 0.018428361, 0.013719587, 0.005879695, 0.026888654, 0.02183026, -0.0022208996, -0.035088465, -0.035477057, 0.005122, 0.027759004, 0.014260926, 0.0077891625, 0.05393229, -0.062016316, 0.014973266, 0.016464245, 0.019872136, -0.03867313, 0.02244152, 0.04871466, 0.044118766, -0.03428374, -0.0015713827, 0.024222052, -0.08723772, 0.046617392, 0.03505263, 0.013632687, 0.01218404, 0.007191719, -0.053323988, -0.0057659172, -0.031085426, -0.0067746844, 0.019265117, 0.033532985, -0.033235103, -0.01888571, -0.04161387, -0.032045815, 0.0068264217, 0.007242337, 0.029078644, 0.01689371, -0.0245598, 0.014621799, -0.037086513, 0.01066529, 0.011437767, -0.019377103, -0.03977462, -0.026175978, 0.03416727, -0.002452374, -0.0056664743, 0.03513483, 0.010192486, -0.005733477, 0.0030906922, -0.019408459, 0.047863122, 0.005786971, 0.0052371216, -0.04393421, -0.027535032, -0.03268033, 0.036810134, -0.006728994, 0.026329173, -0.016002303, -0.017076945, -0.06223894, -0.0846101, 0.05977016, -0.014709541, -0.03171434, 0.032941703, 0.03011608, 0.017419593, -0.045541767, -0.0019673642, 0.033167467, 0.013209072, 0.025190502, 0.02995482, 0.028654106, -0.08677186, -0.032660395, 0.029192198, -0.008333189, -0.057380106, -0.050501946, -0.04240438, 0.022064926, -0.017493056, 0.003640878, -0.00023684966, -0.01732239, -0.01402598, -0.015044602, -0.026032636, -0.014176937, -0.020770652, -0.0040792455, 0.026685959, -0.006238273, -0.0050989315, 0.037095472, 0.006609338, 0.07129096, -0.019769948, 0.046111215, 0.0003225187, 0.00588843, -0.004147501, -0.03386088, 0.017627537, 0.0044111153, -0.024576599, -0.027593266, -0.049602482, 0.019671848, -0.029428711, 0.010545017, -0.01541729, -0.016487872, 0.058909833, -0.027496064, 0.036405195, -0.016051352, 0.0090975575, -0.011122192, -0.003504367, 0.018151084, 0.020587442, -0.012081909, -0.01684533, -0.012730082, 0.013264477, 0.030406347, -0.0035954115, 0.027945798, 0.06921968, -0.04117668, 0.027847698, -0.012459973, 0.056083314, 0.04005884, 0.00079756184, 0.05656709, -0.0117045175, 0.020811612, -0.010352402, -0.0669961, 0.05768157, -0.023531321, -0.0320391, -0.027604466, 0.0116702495, 0.010769885, 0.019375758, -0.010260799, -0.028913802, 0.037752606, -0.019386956, 0.018770365, 0.012615856, -0.01583119, 0.009997183, 0.07062084, -0.019394124, -0.012415514, -0.053373262, 0.010593844, 0.013342419, 0.007916043, -0.004380879, 0.015132397, -0.026712961, 0.038003452, -0.05857656, 0.041123036, 0.018679209, 0.04889742, -0.04454252, 0.022993343, -0.0077183875, -0.02951046, -0.016328406, 0.013921161, 0.007845716, 0.01564742, -0.00824528, -0.006147229, 0.01655932, -0.004704294, -0.02783202, 0.030879151, 0.038691495, -0.046684586, -0.013410059, 0.03271773, 0.02313355, 0.030304214, 0.0014955965, 0.012953234, 0.022953477, -0.05397261, -0.039603394, -0.035899915, 0.00011912474, 0.013735713, -0.0040098005, -0.013318483, 0.00031355984, 0.05871722, 0.07325072, 0.0457009, 0.012646317, 0.072333775, 0.02798376, 0.020118896, 0.022357713, 0.03248659, -0.045479618, 0.006748032, 0.016826518, -0.043851793, -0.034168616, -0.016066134, -0.00045421382, -0.01386472, 0.067592755, 0.0675605, 0.015166442, 0.014609202, -0.01255852, 0.0042129005, 0.021784347, -0.010603698, 0.0049697557, -0.037851155, -0.06415614, 0.016478913, -0.024849392, -0.016342066, -0.061848335, -0.022537787, -0.020306135, -0.022317147, -0.029815063, -0.016312279, 0.022249311, 0.01802622, 0.004826134, -0.042700354, -0.06500633, -0.004085965, 0.016102362, 0.005892685, -0.03908389, 0.004976531, 0.006067383, 0.0109515255, -0.05666833, -0.0083389, -0.013530555, 0.03001238, -0.02458578, -0.010829461, 0.017856786, 0.01127382, 0.015680231, -0.012501183, 0.005389646, 0.013662698, -0.032110095, 0.021563062, 0.0455813, 0.023284059, -0.033561654, -0.042567987, -0.035288922, -0.012520445, 0.039231263, -0.01166689, 0.024815576, 0.009417546, 0.004570359, 0.02245178, 0.027210724, -0.03334261, -0.01769239, 0.026203636, -0.003078542, -0.083492026, -0.013414482, -0.016127726, -0.026397709, -0.027863825, 0.024819605, -0.0028686246, -0.048950836, -0.015889421, 0.05933, -0.00039060597, -0.022450887, -0.0081404615, -0.06275139, 0.0021904395, -0.030671556, -0.05418404, 0.02577686, -0.02250419, 0.031628333, -0.009732118, 0.054378446, -0.053831954, -0.010661036, -0.007427785, -0.0116073135, 0.045070417, 0.014004926, -0.0020008478, -0.013025948, -0.0018773276, 0.0012175081, -0.05023408, -0.0465502, -0.030549688, 0.018843602, 0.0025736545, 0.015335988, 0.0295454, 0.0037551313, -0.03498253, -0.028912457, 0.04417252, 0.0014047482, -0.0010065271, 0.025456134, 0.019553592, 0.019897163, 0.0018302656, -0.012161194, -0.0064432067, -0.017767085, -0.022403851, 0.011031035, 0.022812374, 0.007894541, 0.011462628, 0.031218018, 0.026101168, 0.01119543, 0.011370577, -0.027820794, -0.01370167, -0.055249248, 0.0059478944, 0.049775388, -0.032500926, 0.018109424, 0.040619105, 0.0057354574, 0.033214945, -0.04045639, -0.017609969, -0.052862607, -0.07355577, -0.002326614, 0.00016394701, -0.0041383184, -0.021025978, -0.012105202, -0.023058295, 0.007373808, 0.018502383, 0.048190564, 0.024013309, -0.0011857041, 0.04317809, -0.028832275, -0.05806053, 0.030119214, -0.004769693, 0.019165225, 0.02398464, -0.0056116013, 0.03800569, 0.019632429, -0.04640327, 0.06592641, -0.008004511, -0.055632688, 0.00047638698, 0.006863937, 0.03691764, -0.025995905, -0.017430345, 0.016616879, 0.04255455, -0.019448325, -0.040848784, -0.028698342, -0.0119968, -0.021219939, 0.030266589, 0.017012862, 0.00074974395, -0.018673832, -0.010381631, 0.04850323, -0.017455652, -0.025554681, 0.041585874, 0.027688904, 0.053396557, 0.030887436, -0.0727638, 0.062036023, -0.01620298, -0.014671017, -0.025402827, -0.022198245, 0.01505804, -0.027540859, -0.001491649, -0.011669018, 0.04268356, 0.054241374, 0.052353743, -0.0014802264, -0.08410123, -0.018685928, -0.02662571, -0.026128046, -0.0273586, -0.03479536, -0.0033094, 0.032543927, 0.057023995, 0.012212372, -0.015705764, 0.039309204, 0.016413067, 0.010760031, -0.041809175, -0.007936424, -0.047038455, 0.012435784, -0.032610223, 0.03870941, 0.030047992, 0.03238194, -0.05325142, -0.02432866, -0.028558135, 0.011360722, 0.024499774, 0.01952806, -0.017008381, 0.014340661, 0.016136685, -0.016347444, 0.026909482, 0.016263902, -0.050472382, 0.017530683, 0.0019823702, -0.017464386, -0.0037299346, 0.03966801, -0.003985794, 0.046164967, 0.032026105, -0.017566293, 0.0066864397, -0.019156268, 0.09938951, 0.0058078, 0.012187847, 0.029208548, -0.010716132, 0.01945415, 0.01945023, -0.08611966, 0.018162282, -0.0042735967, -0.040595252, 0.0070407623, 0.007012542, -0.030812183, -0.0038469315, 0.02019594, 0.031260125, -0.04319287, -0.04645165, -0.078200035, 0.05961758, -0.01783394, -0.04532821, 0.019775772, -0.0022406091, -0.04060152, -0.0026595474, -0.009707812, -0.014981889, 0.02889454, -0.06950636, 0.038079154, 0.028184775, -0.0023418441, 0.0041681062, 0.038013868, -0.013167721, -0.025535867, -0.019735904, 0.02391868, -0.017300328, 0.03660184, 0.027200254, 0.005997056, 0.04440545, 0.033045635, -0.0012788762, -0.0072154603, -0.008936679, 0.001194439, 0.08283624, -0.013169961, -0.010195174, -0.031974144, 0.028226433, 0.014232929, 0.025702052, -0.03460357, -0.011737217, 0.014234722, 0.027783195, -0.037578803, -0.015513457, -0.012851922], [-0.031069523, -0.09897025, -0.011526084, 0.0029643166, -0.03237656, 0.029080609, 0.014859692, -0.027620114, 0.05008307, 0.029380035, 0.00038880002, 0.025656264, -0.08659216, -0.005735821, -0.012252418, 0.042706303, -0.000979032, -0.03944846, 0.017597625, 0.05484394, -0.051906843, 0.005140599, 0.005220672, 0.001050486, -0.0052957553, 0.033424553, -0.0014032188, -0.005265813, 0.020793203, -0.001845439, 0.00092186895, -0.029517952, -0.0133593865, 0.004654939, 0.015933089, 0.020264784, 0.018984057, -0.013105782, -0.026493523, -0.06103389, -0.09331858, 0.0054962803, -0.030087767, 0.023728257, 0.005687051, 0.020620039, 0.025286973, 0.0148125095, -0.024846908, -0.05631022, 0.03800441, 0.0013084005, -0.04083081, 0.024060234, -0.008943308, 0.047608722, -0.0017911114, 0.03981185, 0.029000763, -0.020384101, -0.009548285, -0.03980391, -0.040765475, 0.0050444193, 0.0026390313, 0.013463505, 0.03178633, -0.001958064, -0.008790419, -0.051631916, -0.017305683, 0.018372957, 0.0011196715, -0.028162597, 0.03674228, -0.004930547, -0.065512575, 0.01278594, -0.027636444, -0.0375589, -0.009892851, 0.023907345, 0.030058734, -0.048911676, -0.0678862, 0.0069911415, -0.018721038, 0.026763234, 0.017103571, -0.005329555, -0.03501877, -0.021489253, 0.030368142, 0.014153887, 0.00081752345, 0.029759591, -0.022651117, 0.03471707, 0.015641375, 0.018976344, 0.014035704, -0.039795972, -0.03336149, 0.012640764, -0.007909608, 0.012303684, 0.02133126, -0.03464993, -0.0037414632, 0.0063895676, 0.014806159, 0.014567865, 0.004285193, -0.06397643, 0.016461167, -0.0067858533, 0.033037566, -0.022094004, -0.035443865, -0.024038458, -0.042470388, 0.014426432, 0.029295199, 0.024823772, 0.00017336081, -0.003280642, 0.017572671, 0.0025049702, -0.046467047, 0.011740218, 0.030707035, 0.006398641, 0.03720594, 0.02006199, -0.023986286, 0.034035653, 0.0014116118, 0.05133068, -0.03550284, 0.028281685, -0.035604462, -0.029506156, 0.030688887, -0.006206283, 0.051363792, -0.023296243, 0.014200048, -0.03621647, -0.0033209056, -0.017073289, -0.015462172, 0.013261846, 0.018348457, -0.0016314175, 0.020349167, -0.063407525, 0.0006800597, 0.013684104, -0.028427316, -0.0062895324, -0.025618268, 0.020146374, 0.024828646, 0.026750531, -0.015543835, -0.05565693, 0.034051985, 0.011414932, -0.0029673507, 0.043618187, 0.04314841, -0.016096411, -0.013996801, 0.029523054, -0.032955, -0.020834485, -0.003978395, -0.023053074, 0.03960724, 0.058008783, 0.009236836, 0.0044859448, -0.011330095, -0.007794601, -0.012209773, 0.020762013, -0.047108773, 0.0039197574, -0.024809139, 0.024995713, 0.059354156, -0.015087437, 0.052290652, -0.008817384, 0.0025478422, 0.032123636, -0.035700645, -0.0074396, 0.03187956, 0.029039098, 0.012841346, 0.021965386, 0.047358748, -0.01987292, -0.027562609, -0.07333837, 0.0018288798, -0.023942277, 0.012024219, -0.042866904, 0.019801581, 0.015663153, 0.056195896, 0.085685715, 0.02111724, 0.019551039, 0.032378603, -0.04718227, 0.026907729, 0.05885988, -0.05308731, -0.025929378, 0.043356873, -0.041318964, -0.029247789, 0.020911725, -0.015827836, 0.021036033, 0.026630761, -0.011622716, 0.05092713, -0.00030124062, -0.04136365, -0.021821218, 0.0007793864, 0.008823991, -0.038025275, 0.048688468, -0.035766654, 0.030442089, -0.04774482, 0.023903886, 0.031678356, -0.0081820395, -0.01767188, -0.008269656, -0.04729841, 0.003545702, -0.03704511, 0.01678237, 0.0380035, -0.008920624, -0.038787905, -0.00390524, -0.0034151566, -0.0010382367, -0.0041783527, -0.0010556465, 0.014051243, 0.0297584, 0.02978562, -0.023867873, -0.0048169014, -0.031698316, 0.02686066, 0.016503813, 0.03013756, -0.023808219, 0.03869309, -0.054867532, -0.006064736, -0.04388495, 0.027529946, 0.030278314, -0.017489253, 0.019772885, 0.009469118, 0.021908903, 0.065242186, -0.009373846, -0.049534634, -0.033241834, -0.0024008516, 0.0009994474, 0.022885215, 0.00954647, -0.009678716, -0.037056226, -0.0008583543, -0.013868864, -0.0040903394, -0.007959739, -0.010534859, 0.061772473, 0.044645764, -0.033689044, 0.026799073, -0.023529435, -0.029569443, -0.021643505, 0.050588463, 0.0026417533, 0.019557843, 0.011664, -0.0004246404, -0.0025887017, -0.07773188, 0.025440654, 0.009170599, 0.0007884599, -0.029022537, 0.0072734696, -0.058986906, -0.017239675, 0.005310727, -0.0126379365, 0.04464168, 0.06508612, -0.019397356, -0.023707727, -0.01802181, -0.03163344, 0.0042836056, -0.029634604, -0.0033617364, 0.081712425, 0.012249242, 0.0053052832, -0.074430026, -0.03149053, 0.048421707, 0.035521895, 0.0009754026, 0.0054345806, 0.012400628, -0.010107213, -0.03115073, 0.015722582, 0.031281844, 0.015537426, 0.049787726, -0.08282302, -0.051327046, -0.020004828, 0.05850329, -0.07248285, -0.038448103, -0.05446285, -0.014846082, 0.0048559173, 0.019050166, -0.03383808, 0.02566806, 0.018993132, 0.0008882969, 0.013783007, -0.0016654432, 0.0022370745, -0.0050707324, -0.013192207, -0.009506319, -0.02535457, -0.03473749, 0.039505165, 0.013523163, -0.024628008, 0.046920948, 0.010864624, 0.02720194, -0.038054314, 0.06840067, 0.0151723875, -0.021928411, 0.000506302, -0.0053506503, 0.021702483, -0.04019294, 0.016471375, 0.009825254, 0.0057154056, -0.004998371, -0.014660528, 0.015761599, 0.008552694, 0.00488155, 0.047658626, 0.031417944, 0.020628631, -0.024737118, 0.039346382, 7.2588105e-06, 0.01865741, 0.026164383, 0.02086908, 0.026042342, -0.0044405772, 0.03477696, 0.061476678, 7.07734e-05, 0.00783702, 0.00061336946, 0.016952043, -0.0021031268, -0.02314653, -0.008436552, -0.04244589, -0.03333427, 0.010588562, 0.010798387, 0.015362819, 0.025070569, -0.018149067, -0.015443118, 0.0170886, 0.042859644, -0.007896565, -0.05413031, -0.009818675, 0.003417085, 0.021348162, 0.01883752, 0.019058786, -0.070744365, 0.046610635, -0.013626374, -0.039673027, -0.0047635944, -0.040581513, -0.03598147, 0.056263037, -0.01894005, 0.040072262, -0.008422035, 0.07548255, 0.07451894, -0.01509651, 0.004737735, 0.025073687, -0.0628867, -0.0115102045, -0.02721963, -0.0507409, -0.00991871, 0.027024552, -0.024804715, 0.017936066, -0.032780785, 0.0225504, 0.0546348, -0.037819423, -0.00097222684, -0.021863535, -0.008422715, -0.023249969, -0.027596183, 0.04582895, 0.06466148, -0.058293235, -0.04707701, -0.030998975, -0.035813157, 0.005737182, 0.017681554, 0.00493894, -0.00065391674, -0.0022531801, 0.062289666, -0.03852795, 0.0011083296, 0.017624391, -0.0020433553, -0.010674761, -0.013883948, -0.050308093, -0.02616302, -0.0032061257, 0.047131453, 0.0060239052, -0.002360928, 0.029075162, 0.037440035, 0.005867841, 0.05349811, 0.0024353308, -0.000421011, 0.0017040058, -0.006851409, -0.015744813, -0.005873398, -0.012082063, 0.006008197, 0.04104449, -0.014789826, 0.06827591, -0.018272864, -0.020855922, 0.030790512, 0.040471498, -0.041362513, -0.005422331, 0.06453264, 0.037762146, -0.07397091, 0.022199256, 0.005798882, -0.091679685, -0.0009232299, 0.048056953, -0.03594291, -0.005332503, -0.04047059, -0.02366463, 0.0004062665, -0.03424843, 0.040892508, 0.02792952, 0.015763188, -0.029536098, 0.000421672, 0.003203404, 0.013501387, -0.027044967, -0.026524147, 0.035973758, -0.00021549594, -0.04289866, 0.019950839, -0.051875994, 0.021664372, -0.032328926, -0.0020129588, -0.044295527, -0.05141778, -0.00038959397, -0.007238848, 0.0026050054, 0.036954604, 0.014569679, -0.0038718947, 0.0030300997, -0.04288868, -0.015212651, -0.0067062904, 0.031543612, -0.009554069, 0.0073078074, -0.0054078135, 0.020208528, 0.016039701, 0.0067416197, -0.01588704, 0.006941237, -0.059348032, -0.0739455, 0.015679881, -0.026565433, -0.01921112, 0.049959667, 0.048051283, 0.009447342, -0.032071237, 0.008253381, 0.013185629, 0.021063251, 0.061772473, 0.019588353, -0.012114501, -0.06498904, -0.053464763, 0.026767315, -0.042795904, -0.046261303, -0.049591284, -0.0243093, -0.0076555493, -0.04131805, 0.008406383, -0.03387732, -0.019677727, -0.027311273, 0.03243781, -0.034317046, -0.0013741836, -0.0119527085, 0.010081353, 0.016546912, 0.003331794, -0.005564445, 0.03914223, 0.009146554, 0.022708282, -0.017108109, 0.05955491, 0.02349314, -0.030236574, 0.0062830104, -0.036079917, -0.022378799, 0.010782055, -0.043617, -0.022800151, -0.05484394, -0.00048398683, -0.013738206, 0.012818151, -0.0023328003, -0.019509867, 0.007805886, 0.016164463, 0.003940343, -0.025091892, 0.034528345, -0.053369492, -0.044425733, 0.0043257973, 0.009721362, -0.035182547, 0.0052028084, -0.017455624, -0.0059059495, 0.025388822, -0.0011160421, -0.04357963, 0.00261544, 0.0066289953, -0.0020803863, 4.1738156e-05, 0.08594069, 0.015652008, -0.016115014, 0.03167926, -0.018836612, 0.05152122, 0.024775226, -0.08150192, 0.09572919, 0.02736027, -0.028291112, -0.038600538, 0.024903161, 0.010799976, 0.004112116, 0.011187243, 0.0076327524, 6.169989e-05, -0.021169527, 0.0043273284, -0.010458748, -0.019682264, 0.0066190143, 0.043370485, -0.018441007, -0.004054046, -0.05125083, 0.016188735, -0.029434474, 0.0021454322, 0.017540915, -0.0017987106, 0.014655991, 0.05423329, -0.05160651, 0.030565944, 0.0531236, 0.0030378122, -0.020056093, 0.024801541, -0.012867148, -0.06307543, -0.018385036, 0.035887558, 0.0038777925, -0.008551332, -0.013434243, -0.0056723063, -0.01012967, -0.032174677, -0.021956086, -0.008226953, 0.023791658, -0.02814876, -0.025921665, 0.009753573, -0.008693786, 0.049744796, 0.026486492, 0.01494952, 0.007727457, -0.044820204, -0.03717191, -0.01773282, -0.0025659895, -0.03661616, -0.032048326, -0.040860694, -0.02726001, 0.019510547, 0.024854166, 0.041674644, 0.04421704, 0.033575628, 0.052807845, 0.020180173, 0.015602812, 0.0030924801, -0.02841053, 0.001562232, 0.016704338, -0.0006555613, -0.079476714, -0.0056346515, 0.014477696, 0.019569753, 0.057451665, 0.038090605, -0.016003862, 0.021923421, -0.02420405, 0.0011704832, 0.035106555, -0.022411577, 0.008686981, -0.0687119, 0.014515352, 0.049907953, -0.02514815, -0.02510278, -0.062200744, -0.024498483, 0.030857204, -0.030438913, -0.030154912, 0.00606519, 0.029874088, 0.03706598, -0.00066236645, -0.04204303, -0.061158992, 0.020955278, 0.015232612, 0.010404598, -0.027541742, 0.032236375, 0.009204589, 0.008975292, -0.017312262, -0.035807088, -0.026175383, 0.032953184, 0.005330462, -0.018401084, 0.06469596, 0.014034909, -0.0029626156, -0.036968213, -0.029417349, 0.028289396, -0.016813956, 0.015207207, -0.0075527923, -0.009898296, -0.07104198, -0.017948315, -0.00079030293, -0.014904379, -0.0053222957, -0.0027103717, 0.023202786, 0.019840144, -0.013724595, 0.009897388, 0.0073332135, -0.0033746664, -0.025369542, -0.0027905589, 0.016695263, -0.07071896, -0.052604597, -0.008158903, -0.039541177, -0.052669473, -0.02119754, 0.01922133, -0.024871407, -0.031489626, 0.065322034, 0.0047799265, 0.014002245, 0.015191783, -0.05507622, 0.02756624, -0.03406106, -0.040680185, 0.03541392, -0.05700344, 0.04295296, -0.009456868, 0.05073001, -0.033700842, -0.041043125, -0.00021731063, -0.021926142, 0.013997254, 0.033019308, 0.021735147, -0.0005589284, -2.495216e-05, 0.009931867, -0.032047648, -0.07615218, 0.0033277108, 0.009859505, -0.027993603, -0.018460969, 0.026118333, -0.0036945075, 0.027732285, 0.00491671, 0.012987826, -0.0063237846, -0.008727812, 0.05132795, 0.0057735895, -0.0119929155, -0.02666524, 0.02905248, 0.009862228, 0.0027595956, -0.009008184, 0.003962176, 0.02985163, 0.0020283838, 0.0058369907, 0.042873256, 0.030402618, -0.037820216, -0.032233994, -0.016364079, 0.058153957, -0.082510896, 0.006284542, 0.059544023, 0.012789116, 0.027628846, -0.0024081103, -0.082782194, 0.020724697, -0.055003636, -0.009662838, -0.048742004, -0.044371292, 0.007618121, -0.003453379, 0.0059422436, 0.011314671, 0.0054268683, -0.0043843216, 0.04142966, 0.02801311, 0.011116869, 0.012064143, -0.0054150727, 0.049180254, -0.018894684, 0.018593328, 0.040028255, -0.033559293, 0.03421531, 0.027466431, -0.028670939, 0.0069974926, 0.032526273, -0.027372973, 0.025988355, 0.047810152, -0.044607207, -0.0016673715, -0.033921555, -0.014357926, 0.029916734, 0.011483551, 0.037872843, -0.0018646069, -0.01766613, -0.025855314, -0.027041988, -0.049850784, 0.008700478, 0.018867463, 0.0019435465, -0.0050058, -0.029661313, 0.041538995, 0.014996702, -0.0056131305, -0.07025439, 0.049039617, 0.020102369, 0.06540914, 0.02844274, -0.025889454, 0.050319884, 0.016557345, -0.022699207, -0.05428615, -0.0059184823, -0.045275014, -0.053132676, 0.03133447, -0.008333, 0.050506804, 0.07131055, 0.0056196805, 0.018971354, -0.07170616, -0.00018646069, -0.039067823, -0.0053436183, -0.03618154, -0.014400912, 0.0011034525, 0.01180413, -0.017286856, -0.0035309575, -0.04311552, 0.063122615, 0.015596914, 0.00084701244, -0.003342682, 0.020493437, 0.016513793, 0.0132520925, -0.05163555, 0.04647544, 0.028714038, 0.040618487, -0.0156754, -0.004768131, -0.04698628, -0.0012770969, -0.027505899, 0.030114988, -0.006633645, 0.019817006, -0.0020497064, -0.007321871, 0.007218433, 0.042779796, -0.019298455, 0.018939598, -0.015402742, -0.031025968, 0.0039923456, 0.030093668, -0.0364111, 0.06675565, -0.00643244, -0.011415387, 0.028152557, -0.04167374, 0.057072394, 0.016895901, 0.0061981166, 0.0063380753, 0.004003461, -0.01880506, 0.02165757, -0.02466589, 0.016351832, 0.007730179, -0.013085821, 0.017597398, -0.005632383, -0.020586895, 0.037112482, 0.034819607, 0.048089616, -0.024021218, -0.044813626, -0.04981387, 0.07461875, -0.03047702, -0.056750286, -0.020710519, -0.0040003983, -0.030695241, -0.01780314, 0.0044067786, -0.001839201, -0.009890582, -0.08950839, -0.016585475, -0.001208592, 0.046668254, -0.0065209637, 0.03018976, 0.015875017, -0.029419959, -0.02675949, -0.0073059923, 0.027095778, 0.057175834, 0.0038419522, 0.034769844, 0.02131731, 0.0030570508, -0.009690626, -0.006892808, -0.051769152, 0.015686288, 0.06015648, -0.008047752, 0.02406341, 0.01893472, 0.026128996, 0.02360497, -0.0002871767, -0.0013115762, -0.010246547, 0.03351302, 0.009569763, -0.060943156, -0.007318695, -0.0047853705], [-0.015094252, -0.09131266, -0.025539173, -0.031860787, 0.020618957, 0.041094616, -0.00872935, -0.012390482, 0.029613925, 0.04496912, 0.008573658, 0.028150652, -0.06678134, -0.017750708, -0.02242857, 0.015915748, -0.0049358467, -0.02755706, 0.052302197, 0.07082799, -0.014733749, -0.0010028738, -0.038310632, 0.017491596, -0.018548546, 0.039178092, 0.00711272, 0.012573888, -0.006865029, -0.004197154, 0.007840373, -0.02254945, 0.0035669499, -0.0015547248, 0.022559363, 0.020811826, 0.04187105, 0.00046730175, -0.05452425, -0.051079415, -0.056569196, -0.004326428, -0.0130493, 0.03024641, 0.0009066645, 0.03818626, 0.024050044, 0.031434268, -0.017765578, -0.03934302, 0.048298366, -0.011927911, -0.040812977, 0.035310797, -0.002102182, 0.011902901, 0.026710553, 0.034511834, 0.024850812, -0.011195415, 0.00654966, 0.005191522, -0.054937925, 9.64345e-05, 0.027270235, 0.017489342, 0.0014188603, 0.0025397423, 0.0007020792, -0.06040315, -0.024112456, 0.042220283, -0.0058203177, -0.017836327, 0.035372984, 0.02148484, -0.06440743, 0.00578607, -0.01669759, -0.033717826, 0.0002338762, 0.013455316, -4.3767293e-05, -0.05216476, -0.05795083, 0.026934814, 0.0031814373, -0.010846629, 0.048861198, 0.012079209, -0.044665847, 0.011728959, 0.046101097, -0.011761629, -0.013332295, 0.012287287, -0.008178007, 0.029439364, 0.027612712, 0.011182572, 0.03710092, -0.03899142, -0.019224713, -0.009188766, -0.0104793655, 0.005650149, 0.03901812, -0.010259009, -0.020255301, 0.016767437, 0.013166464, 0.0037586922, -0.010425066, -0.08394037, 0.03289768, -0.0019854691, 0.038405266, -0.010992632, -0.040930588, -0.017609661, -0.01861907, 0.006420611, -0.017080735, 0.011771318, -0.009969705, -0.018966729, -0.017197786, 0.0053962762, -0.07293152, -0.009395605, 0.030217346, 0.002424832, 0.038569745, -0.016391162, -0.019232374, -0.0018309037, -0.026036132, 0.052621465, -0.03015606, 0.027113417, -0.033727065, -0.025242858, 0.0103248, 0.0027695629, 0.024227366, -0.029651187, 0.012060621, -0.054464877, -0.0048101214, -0.045881193, 0.000280474, 0.0062439083, 0.0040461933, 0.020148952, -0.0036248555, -0.054006923, 0.005677074, 0.017832723, -0.039882425, 0.019075105, -0.0066264924, 0.0025613725, 0.05755788, 0.013985143, -0.01875775, -0.06939679, 0.0035423907, -0.0017495229, 0.009370369, 0.01995383, 0.062049743, -0.017798023, 0.0046370234, 0.029090773, -0.07883791, -0.023542412, 0.0064552533, -0.02343133, 0.049825095, 0.035114776, -0.0036843386, 0.012443655, -0.010000123, -0.014842801, -0.029572045, 0.03504335, -0.031012254, -0.019860324, 0.017048178, 0.01793524, 0.02705123, -0.01459028, 0.027201403, 0.005638489, -0.029832734, 0.032919314, -0.04238837, 0.017115716, 0.03185741, 0.048365958, -0.0037339076, 0.008920191, 0.022114145, -0.005175919, -0.04553083, -0.04879045, 0.034733884, -0.0032102775, 0.06429027, -0.039914872, -0.005027831, 0.024533119, 0.04395971, 0.04901306, 0.020637885, 0.04805367, 0.026268039, -0.019762736, 0.06163697, 0.062596135, -0.034327075, -0.003077793, 0.033299644, -0.048334412, -0.03478852, 0.011785368, -0.012596869, 0.0210074, 0.012471144, -0.017441576, 0.0834564, -0.023605723, -0.008641252, -0.0379285, -0.01839826, -0.01852083, -0.048312787, 0.037498686, -0.047202438, 0.042766448, -0.022768682, 0.033103622, 0.027338732, -0.0010972804, 0.0030946913, 0.005562108, -0.060344566, 0.014819143, -0.031724248, 0.0035457704, 0.03573056, -0.005178172, -0.038498994, 0.014341703, 0.0043697446, -0.02048557, -0.0065751206, 0.0057202782, 0.008595288, 0.031538587, 0.032197855, -0.044030685, 0.012581711, -0.0136058265, 0.033223037, 0.021035338, 0.028302174, 0.0024216212, -0.00918978, -0.04964687, -0.042377103, -0.063133955, 0.026842138, 0.010969312, -0.014459767, 0.04592265, 0.03691549, 0.014715725, 0.05023607, 0.03846565, -0.055328168, -0.0047532297, 0.030053318, -0.0049519846, 0.015114079, 0.008072559, -0.008665586, -0.041699357, -0.0073028854, -0.054473773, -0.012112895, -0.008262836, 0.020887533, 0.029300654, 0.06911019, -0.004609479, 0.059971448, 0.005593877, -0.06274912, -0.010742082, 0.017687395, -0.008370875, -0.010879975, 0.0076570795, -0.0006447367, -0.038031243, -0.049167853, 0.028874401, 0.039217297, -0.0011463988, -0.034839217, -0.0062538222, -0.06702333, 0.03959132, 0.029756352, -0.005918555, 0.057365462, 0.069455825, -0.018600818, -0.03296798, -0.04800816, -0.0023432681, 0.01186505, -0.050715532, 0.03614041, 0.057471357, 0.016159538, 0.004138572, -0.050472196, -0.025245111, 0.022321096, 0.028052527, -0.008119425, -0.018940479, 0.035629846, 0.015914395, -0.040107742, 0.020036746, 0.005433678, 0.0030169578, 0.007861214, -0.07272784, -0.0076210294, -0.01111723, 0.037171446, -0.06236338, 0.010028005, -0.057513718, 0.02033281, -0.012012403, 0.017368123, -0.024016697, 0.017542066, 0.023192948, -0.01837663, 0.006822924, 0.006853158, -0.019647403, -0.020457633, 0.017023169, -0.00033031066, -0.044276953, -0.070983, 0.043854494, 0.0053485096, -0.010551917, 0.07591468, -0.012842012, 0.034659415, -0.008803775, 0.058210615, 0.02590573, -0.027372751, -0.002743877, 0.0118028615, 0.07008896, -0.036018737, -0.010422361, 0.022822531, 0.0009970156, 0.004501328, -0.026295977, 0.05495685, 0.007909431, 0.04500517, 0.046987936, 0.038483676, 0.014681026, -0.02299191, 0.013145735, -0.0055866665, 0.016882347, 0.023001881, 0.05082008, 0.033724416, -0.011268416, 0.042342857, 0.045490045, 0.029672986, 0.0062249824, 0.0025193514, 0.019521212, -0.003465333, -0.0038060083, -0.028604995, -0.04073772, -0.034591146, 0.0012397916, -0.0093635535, 0.027292317, 0.045297176, -0.009827757, 0.0019575302, 0.010236477, 0.03221363, -0.019999795, -0.022250231, 0.0048055025, 0.016363222, -0.0067119994, 0.029256605, 0.03780007, -0.061146684, 0.020428794, 0.012359614, -0.028346336, -0.007937822, -0.04329999, -0.05810618, 0.028783672, 0.023450257, 0.030367855, 0.0076084114, 0.089465976, 0.043756027, -0.026754942, 0.0014200431, -0.02304627, -0.071047895, -0.0134746935, -0.027282402, -0.060841158, 0.011847925, 0.022051955, -0.02006153, 0.008394758, -0.01934841, 0.015919354, 0.02515769, -0.030421931, 0.004651613, -0.042856574, -0.007073065, -0.029469302, -0.050365847, 0.02923137, 0.07018989, -0.055947334, -0.016202798, -0.034368534, -0.051162556, -0.019178748, 0.021278905, -0.017375559, 0.012121006, -0.011219749, 0.022058604, -0.04293003, 0.0006723378, 0.04082424, 0.017219417, -0.03277207, -0.037703186, -0.06437933, -0.020832444, 0.0017412286, 0.05216476, 0.015531587, -0.00841477, -0.0049276226, 0.021513006, 0.013843308, 0.036729828, 0.01953159, 0.015420508, 0.016307795, -0.03637023, 0.011766811, -0.034561403, -0.02084178, 0.0041982806, 0.05919715, 0.0119867185, 0.051371653, -0.01710045, -0.0370331, 0.017113067, 0.04243073, -0.033255484, -0.0082708355, 0.04228878, 0.03907129, -0.065517776, 0.020507652, 0.018794475, -0.08096893, 0.034387913, 0.042056706, -0.009085571, 0.0063237827, -0.027457245, -0.042121146, 0.015476386, -0.021879816, 0.0524099, 0.049230713, 0.013137286, -0.015853336, -0.023276765, -0.024465522, 0.0055913986, 0.0049048658, -0.010749067, 0.029912045, -0.021878464, -0.024963975, 0.042743918, -0.032324485, 0.011604585, -0.015685026, -0.024027513, -0.02304469, -0.03371512, 0.0055553485, -0.0018339453, -0.0050452366, 0.01925806, 0.007515153, -0.010865554, 0.014362094, 0.009105175, 0.024061197, 0.011955625, 0.011509052, -0.027154872, -0.012567128, -0.0031530475, 0.018526465, 0.011322717, -0.006635054, 0.0031845917, 0.0010391494, -0.086030394, -0.06980776, 0.0732616, -0.004864535, -0.012838631, 0.024368187, 0.03567851, 0.0071933824, -0.024068069, 0.016580256, 0.0061166063, 0.023074882, 0.0031707913, 0.033874646, -0.004966377, -0.060314372, -0.075568594, 0.03607146, -0.042557355, -0.03970037, -0.059601758, -0.016354773, 0.0056423196, -0.029858645, 0.020572769, -0.053311154, -0.012240197, -0.017730426, -0.0029795556, 0.01574727, -0.011740675, -0.024136113, 0.022682836, 0.03295041, -0.005732896, 0.020761358, 0.047344834, -0.00825236, 0.029363403, -0.01494025, 0.027547821, 0.025402829, -0.04166573, -0.034137364, -0.03573574, 0.042268954, -0.02442577, -0.03134617, -0.01844873, -0.06397663, -0.02094341, -0.025274852, 0.012767432, -0.01683458, -0.015130022, 0.04610831, -0.017311795, 0.028677998, 0.0021368803, 0.023754654, -0.023878578, -0.027866868, -0.0077589215, 0.0042190095, -0.033968374, 0.011587018, -0.0422293, -0.0017096845, 0.007587232, 0.013986946, 0.02031253, 0.013413408, -0.00039204682, 0.008096893, -0.00084245, 0.055968963, 0.017361702, -0.011453906, 0.049230266, 0.004202336, 0.07318928, -0.0212228, -0.0638126, 0.08918839, -0.00014915803, -0.034714166, 0.0009973536, 0.0021125465, 0.008498853, 0.0354194, 0.003965531, -0.008303506, 0.024721818, 0.004466123, 0.0049267216, -0.0028057257, -0.0093397265, 0.025977831, 0.044284165, -0.0132816, -0.023723563, -0.0634557, 0.028458541, -0.0019747666, -0.015730089, 0.010171137, -0.002515859, -0.055068605, 0.047694974, -0.06285006, 0.03123937, 0.019621717, 0.017880714, -0.0011554115, 0.050667543, -0.009089346, -0.011655506, -0.034541577, 0.04381191, -0.011725692, 0.04607226, -0.023404744, -0.017054487, -0.002177437, -0.038153365, -0.0043872064, 0.007789677, 0.038005617, -0.009903913, -0.01300176, 0.005028113, -0.007779651, 0.035163444, 0.006272749, 0.008655672, 0.018044516, -0.05817434, -0.04880667, -0.021822136, 0.030325497, 0.028342279, -0.013224144, -0.010001249, -0.004793448, 0.033465926, 0.03687289, 0.019154416, 0.03293193, 0.046970244, 0.04678155, 0.0001429619, 0.03347787, 0.023217732, -0.036510654, 0.041958924, 0.015793629, -0.044507228, -0.06107278, -0.013647679, 0.02688506, -0.0041890424, 0.059922777, 0.033767734, 0.01262678, 0.02323894, -0.05844201, 0.0037059688, -0.011732564, 0.0060943, 0.024488956, -0.06693095, -0.047387194, 0.058408663, -0.038840573, -0.032218136, -0.030267984, 0.0014351392, -0.0021170527, -0.01904266, -0.025913844, 0.008169444, 0.046712153, 0.01070851, -0.020308025, -0.03489667, -0.04663284, 0.02587872, -0.0025582178, 0.00819851, -0.040084306, 0.018529845, -0.0034829078, 0.020378772, -0.06792684, -0.001585987, -0.010049917, -0.020807054, -0.004261143, -0.01754004, 0.03749353, 0.033834767, 0.010990182, -0.017392458, -0.043588392, 0.031934015, -0.059725173, 0.030790543, 0.01925851, 0.0046186885, -0.06579717, 0.013507139, 0.00600823, -0.0029628826, 0.02369765, -0.031110039, 0.012338208, 0.017040066, -0.01214579, -0.0039330856, 0.0129314605, -0.020792449, -0.011382876, 0.0036030847, -0.0048149657, -0.08634042, -0.04533683, 0.027363965, -0.038644098, -0.060302656, -0.00041007195, 0.021550773, -0.046436366, -0.037288606, 0.056710698, -0.01861569, -0.023783721, 0.008698031, -0.04217516, 0.027210303, -0.00075435214, -0.037445426, 0.017769633, -0.038404252, 0.0635296, -0.01264013, 0.049910937, -0.02822782, -0.015373311, 0.0038929798, -0.009294213, 0.02412665, 0.014851815, 0.007676119, 0.0038519723, 0.004985078, 0.02234019, -0.03856389, -0.07274225, -0.021798255, 0.01534976, -0.0036478378, 0.003010649, 0.045618024, 0.028857348, 0.0038321447, 0.015071608, 0.025260432, 0.0021454422, 0.016264083, 0.010849332, 0.0006664796, 0.034226134, -0.0058104037, -0.004352846, 0.025605612, 0.0038206538, -0.019614058, 0.014200656, 0.041073885, 0.015959008, 0.0047606085, 0.053204805, 0.0110548185, -0.011207132, -0.013853222, 0.0018962447, 0.01682782, -0.05773092, -0.0041036485, 0.06397122, 0.013827648, 0.008875129, 0.013700459, -0.011115202, 0.02924669, -0.053433727, -0.019155316, -0.05729471, -0.016964812, -0.0023917109, 0.0037149813, -0.0049440707, 0.006241205, 0.007504542, -0.02068565, 0.04630433, 0.044828527, 0.008844936, 0.041293796, -0.02458052, 0.05686819, -0.045816302, 0.006402586, 0.031244779, 0.010154013, 0.0041590757, 0.03320231, -0.02274953, -0.0024108626, 0.024364244, -0.038742, 0.007977927, 0.019391334, -0.06723467, 0.010762811, -0.01567188, 0.025696864, 0.021332752, -0.0259553, 0.02241246, 0.026550693, -0.006957704, -0.034199324, -0.0185704, -0.03833857, -0.0077117183, 0.042779516, -0.0024525458, -0.0072510634, -0.03225013, -0.0064444947, 0.026390608, -0.007286212, -0.05383749, 0.06978546, -0.0071631907, 0.05896384, 0.046420146, -0.02160223, 0.082728185, 0.03330032, -0.008875805, -0.036068305, -0.017568653, -0.03123847, -0.048127126, 0.019155316, -0.020510808, 0.050310675, 0.04820103, 0.03252997, 0.022407614, -0.060810514, -0.012644185, -0.03452468, -0.043357674, -0.047963094, -0.023593105, 0.0027966006, 0.009345134, 0.03748576, -0.027755111, -0.015287122, 0.062257934, -0.010062534, -0.020686945, -0.018300924, 0.000618713, -0.022520611, 0.029448124, 0.00812303, 0.041612163, 0.027085928, 0.029422436, -0.011585658, 0.017191477, -0.053934827, 0.02903129, -0.011502236, 0.0057319948, -0.033391573, 0.019461744, -0.01375859, 0.010692513, -0.0008350146, 0.047681, -0.040084306, 0.05140905, 0.0070347614, -0.03446407, -0.016813174, 0.02883459, -0.044972725, 0.049804818, 0.016162694, 0.011344573, 0.036430612, -0.022097245, 0.091834486, 0.021945355, 0.014306103, 0.037896506, -0.0009741461, 0.023550747, 0.026673602, -0.015568314, -0.0052092653, 0.011341418, -0.008128437, -0.0062817615, -0.0034103566, -0.0063277255, 0.0062371492, 0.024710665, 0.046879783, -0.016985089, -0.0763572, -0.061022762, 0.06316009, -0.017974671, -0.016179366, -0.006879295, -0.0022923474, -0.008658988, -0.009809281, 0.02159592, -0.029907312, -0.021024523, -0.0600814, 0.01685621, -0.003380615, 0.047662076, -0.013080393, 0.020807998, 0.010148041, -0.012732959, -0.018013649, 0.0029584887, 0.014259914, 0.036750246, 0.011789794, 0.030776123, 0.012879414, 0.022649942, 0.010742082, -0.0055118627, -0.02509146, 0.033433933, 0.043905634, -0.0039276783, -0.018198181, -0.00597263, 0.028279867, -0.01396678, 0.010185106, -0.001213092, -0.0005817614, 0.061137673, 0.023046944, -0.043415356, 0.0074389754, 0.025306396], [0.016846398, -0.08529866, -0.028279437, -0.030420447, 0.018903207, 0.014463206, 0.005903364, 0.0058875764, -0.009389105, 0.058531053, 0.0057015456, 0.023305811, -0.059738196, -0.035654265, -0.023614036, 0.0052712895, 0.026611833, -0.026059581, 0.035550248, 0.05389169, 0.010130552, 0.05273431, -0.006408995, 0.02128712, -0.052102957, 0.014961675, 0.019325942, 0.023708073, 0.010258745, -1.0416425e-05, 0.038484063, -0.055153236, -0.0018656976, 0.00038725228, 0.020826485, 0.016395742, 0.030644111, -0.016272048, -0.06911096, -0.02673115, -0.022194508, 0.028701592, 0.015254854, 0.034333695, -0.0017195782, 0.010056136, 0.015600189, 0.025631351, -0.015170366, -0.00274603, 0.0461014, -0.012926783, -0.035404887, 0.031833753, 0.029029781, 0.008423126, 0.002582116, 0.037602574, -0.001373232, -0.024379063, -0.008493437, -0.021099193, -0.0702773, 0.0036758406, 0.018917277, 0.01670404, 0.014437743, -0.0071746022, -0.010408323, -0.05180725, 0.001225883, 0.019442078, 0.019428369, -0.013779067, 0.047482695, 0.009715703, -0.07151599, 0.004966899, -0.017870028, -0.021012824, -0.011197657, 0.011954222, 0.028256867, -0.02578528, -0.051993005, 0.0191519, -0.0059200013, 0.00861178, 0.055029973, 0.010008015, -0.022835119, 0.011700955, 0.03133029, -0.0024082195, -0.015592955, 0.0026048296, 0.026065657, 0.012012879, 0.023602208, 0.0356887, 0.014721329, 0.0019559008, -0.00025433436, -0.02843626, 0.023682574, 0.0047756415, -0.00075490144, -0.026319558, 0.0013509524, 0.022407103, 0.0010992222, -0.00012138028, -0.008503419, -0.032800164, 0.0009235897, 0.018152647, 0.018828917, -0.022407033, -0.023362884, -0.006911208, -0.041357078, 0.05913475, 0.0075841467, 0.04384389, -0.000616486, -0.031121964, 0.0045540035, -0.016147194, -0.04119696, 0.011482662, 0.015216697, 0.026735779, 0.03136212, 0.0058835438, -0.0138287805, 0.028486716, -0.0018390777, 0.044363555, 0.006270688, 0.022797793, -0.054232538, -0.03830445, 0.025264353, -0.012214127, 0.016133253, -0.024256382, 0.015157056, -0.051247075, -0.0005069327, -0.026529241, -0.005065023, 0.017633054, -0.012673607, -0.02208978, -0.0016961412, -0.054197818, -0.0057571004, 0.026071733, -0.026772527, 0.005012615, 0.00023769704, -0.0077608153, 0.013766753, 0.024343185, -0.010149938, -0.044736084, -0.020497933, 0.011898017, -0.01122357, 0.00888257, 0.09487743, -0.014654463, -0.0028188005, 0.02918147, -0.06595904, -0.043639034, 0.00010184949, -0.030289698, 0.029442316, 0.03174941, -0.04186405, -0.01890979, -0.015786093, -0.009035851, -0.020878566, 0.029880095, -0.018482499, -0.012206893, 0.047800396, 0.012571178, -0.00091375195, -0.010938982, 0.013878151, -0.0062421877, -0.024172181, 0.051285703, -0.060620558, 0.013382502, 0.038727112, 0.033741985, 0.013130772, -0.03948809, 0.00661443, -0.020952638, -0.054969788, -0.03712718, 0.024651337, 0.008767736, 0.021975763, -0.02580843, -0.018310195, 0.033152297, 0.033576477, 0.03195038, 0.012020554, 0.037595194, 0.049557302, -0.010634592, 0.045922544, 0.04544686, -0.023158498, -0.006640525, 0.053879865, -0.05310319, -0.044072617, 0.03188352, -0.006768651, 0.021408647, 0.0044821007, -0.004168282, 0.0606398, -0.021025844, -0.04539594, -0.032250408, -0.009314454, -0.042950395, -0.044916786, 0.012436633, -0.035176266, 0.016934212, 0.0040274677, 0.023394711, 0.013971524, -0.022125067, 0.006640326, -0.004350015, -0.03585102, 0.009796069, -0.01849089, -0.013735576, 0.05264953, 0.019112984, -0.015914418, -0.025083402, -0.018972578, 0.0048563327, 0.0069983904, 0.0019768784, 0.012589516, -0.0061653666, 0.0019195155, -0.03675772, -0.0008140906, -0.027652353, 0.042029116, 0.0053007486, 0.036598977, -0.029805588, -0.0075982036, -0.021798683, -0.012285595, -0.063760094, 0.029987006, 0.038465977, -0.056838382, 0.03410598, 0.015520473, 0.014879646, 0.03648522, 0.0036735258, -0.035411216, -0.011737576, -0.0062265266, -0.04969445, 0.0048119547, -0.01430421, 0.008244022, -0.038235225, -0.024375591, -0.040518157, 0.021221152, -0.0008703502, -0.0037985954, 0.04698155, 0.057882916, -0.04028321, 0.024443878, 0.021869574, -0.05385581, 0.0025424757, 0.016921483, 0.0060172216, -0.017851872, 0.018451829, -0.0550673, -0.038681686, -0.027510935, 0.054758567, 0.039382767, 0.008471737, -0.028808687, -0.032249253, -0.035800062, 0.014069159, 0.008364678, -0.048708364, 0.032773256, 0.05027155, -0.024367925, -0.020412866, -0.014016747, -0.012386141, 0.042915672, -0.0155259585, 0.04075238, 0.055989876, 0.008163583, 0.028837293, -0.067561515, -0.048067175, 0.04413595, 0.06595333, 0.007170262, 0.0125633655, 0.020897953, 0.023517394, -0.045450628, -0.020395938, 0.021051234, -0.0051732017, 0.01778778, -0.04514247, -0.02064002, -0.023874735, 0.048746556, -0.06898075, 0.040225957, -0.073647596, 0.0346153, 0.015878972, 0.01697805, -0.013368903, 0.014042499, -0.007302782, -0.025659852, -0.0012827393, 0.02524652, 0.0035528692, 0.00547007, -0.019285142, -0.030874863, -0.014757706, -0.04974581, 0.042357814, 0.01529435, -0.0048938394, 0.034959547, -0.021159666, 0.05087382, -0.010223205, 0.069278486, 0.0060393205, -0.008537129, 0.011434197, 0.02193992, 0.06955741, -0.062627025, -0.022311116, 0.027503414, -0.01223825, 0.035689812, -0.022951726, 0.036060218, 0.0076564704, 0.024824655, 0.051340245, 0.06022372, 0.002918335, -0.053615075, 0.027316496, -0.0022602195, -0.0030507105, 0.034894735, 0.034967724, 0.036949374, 0.029158467, 0.06297944, 0.041500196, 0.028145181, 0.02268408, -0.01975956, 0.036135375, 0.0051141754, -0.030092835, 0.003343094, -0.03079956, -0.010043603, -0.009085149, 0.016379828, -0.012971487, 0.02400639, -0.016428981, -0.01543772, 0.0046358877, 0.030258505, -0.014618006, -0.005366774, 0.011118377, 0.010083208, -0.012455874, 0.05804437, 0.0016084696, -0.0535988, -0.0063441815, 0.044699796, -0.0158636, 0.01142132, -0.050821736, -0.031471204, 0.021009207, 0.050825212, 0.048542853, -0.011392096, 0.09637044, 0.04026932, -0.015872896, -0.013997984, -0.008966372, -0.10468623, -0.024440695, -0.03654892, -0.021842232, 0.019188503, 0.02308685, -0.027659224, 0.023438258, -0.038788453, 0.050344896, 0.0013376427, -0.029076293, 0.027639983, -0.032554943, -0.033224635, 0.005959352, -0.05721858, 0.055573363, 0.046789423, -0.039168652, -0.023313116, -0.045376264, -0.059753243, -0.01106369, 0.051675305, -0.02937779, -0.009541373, 0.026330408, 0.02542765, -0.05006944, 0.025409278, 0.028535217, -0.0068453276, -0.020131476, -0.017054338, -0.04634904, -0.0055661686, 0.003472648, 0.023941573, 0.02870304, -0.03713969, 0.031923342, 0.036804777, 0.044920254, 0.06091988, 0.028115813, 0.028955348, 0.057459313, -0.033350497, -0.0032172287, -0.041733697, -0.035966467, 0.005206187, -0.0016090485, -0.010231823, 0.045362953, -0.044342652, -0.041607253, -0.01678758, 0.018604314, -0.046072137, 0.029083239, 0.03725724, 0.04340351, -0.038216706, 0.018089857, 0.01174394, -0.058930635, 0.024351288, 0.04794449, -0.014283523, 0.0038610215, -0.04274843, -0.01866797, 0.015244728, -0.04399927, 0.059868984, -0.0061653666, 0.0019449781, -0.07312938, 0.015109748, -0.0060838433, 0.022641838, 0.0037807643, 0.02046126, 0.016668594, -0.015054844, -0.037107646, 0.035530716, -0.040744282, 0.03869174, 0.018417433, -0.0027914573, -0.059044927, -2.1574297e-05, 0.033688165, 0.017631391, -0.011489317, 0.019382363, 0.017071942, 0.025923587, 0.014281244, -0.024760421, 0.020298863, 0.025035156, -0.008107379, -0.046030182, -0.010521529, -0.022160916, -0.0008066219, -0.0010105378, 0.01609193, -0.018748408, -0.016872076, -0.054980785, -0.05820872, 0.041287236, 0.00024304993, -0.013938912, 0.050344896, -0.009642571, 0.006619204, -0.047713306, 0.025467277, 0.016909113, 0.016999315, 0.022473872, 0.030404894, 0.03293254, -0.061486997, -0.07575013, 0.05157751, -0.010286219, -0.014463351, -0.050802063, -0.022692472, -0.0023243094, -0.035239346, 0.019079419, -0.021791162, -0.0395584, 0.0010419862, -0.028780002, -0.008685562, 0.01240929, -0.020982297, 0.01761092, 0.054465752, -0.03426133, 0.00715565, 0.027623925, -0.049188673, 0.021292042, -0.0042154696, 0.021836298, 0.023184069, -0.045416772, -0.030645702, -0.022058517, -0.009285902, 0.03010072, -0.06273003, -0.035411794, -0.009457354, 0.00038019952, -0.018598817, 0.027989224, -0.013112832, -0.0011736563, 0.053155597, -0.013564644, 0.0068796147, -0.0046583842, 0.0129203815, -0.01937701, -0.0051234346, 0.02055139, -0.011151941, -0.04635743, -0.040374644, -0.03460818, -0.010822145, 0.03264421, -0.016543888, -0.010859702, 0.048026662, -0.046184257, 0.00419536, -0.0037995356, 0.10452536, 0.0057076225, -0.0066971825, 0.017385304, -0.001456039, 0.05999398, -0.018820599, -0.081506215, 0.058826182, -0.022205504, -0.05829205, -0.027993562, -0.023961538, 0.029178144, 0.018788338, 0.00866878, -0.012560979, 0.020394024, 0.031999256, 0.024464712, -0.02408017, -0.022181198, -0.005693155, 0.04991493, -0.014577497, 0.045969635, -0.07424249, 0.017750166, -0.01568598, 0.02274137, -0.020182403, -0.009533778, -0.020795815, 0.015280172, -0.035905417, 0.013550119, -0.0055412487, -0.011517962, -0.014115631, 0.013619476, -0.023993945, 0.012468231, -0.04303537, 0.019289194, -0.003795051, 0.03197452, -0.003967356, -0.0101126125, -0.031084927, -0.019413901, -0.0065235756, 0.021346726, 0.007285711, -0.007746059, -0.021969218, 0.0014357305, -0.0038151059, 0.013761978, 0.01373695, -0.0025219324, 0.021625655, -0.025386851, -0.04832469, -0.0038196454, 0.040339053, 0.0055149184, -0.010847332, -0.024767945, -0.024754055, 0.05056827, 0.034611758, 0.04102451, -0.0066311397, 0.09308233, 0.04049559, -0.01372203, -0.0059472, -0.0014096894, -0.015140997, 0.05088134, -0.026605142, -0.067578584, -0.0747733, 0.0024413497, 0.008165753, -0.039613213, 0.040728077, 0.054586984, 0.01555411, 0.02076167, -0.018773798, -0.004663249, -0.0016920904, 0.015155609, 0.042296726, -0.051225666, -0.06217448, 0.056521837, -0.034082253, -0.045629404, -0.018444378, -0.007844436, -0.014097184, -0.015493075, -0.029344516, 0.011134841, -0.0020709878, 0.005473253, -0.0060303505, -0.030308902, -0.06454827, 0.016818186, -0.00033766578, 0.0123682385, -0.008123364, 0.013679081, -0.033953495, 0.029159624, -0.057572376, -0.03865622, -0.01783321, 0.015060776, -0.003420349, 0.0013775722, 0.02823372, 0.038269944, 8.383775e-05, 0.008715075, -0.0070251552, 0.02409898, -0.037087537, -0.0054778825, -0.017296474, -0.012907107, -0.030925605, 0.017478617, -0.0009771186, -0.036037646, 0.0122824125, -0.027923541, 0.017087137, 0.0064153606, -0.022968072, -0.028016493, 0.0015972214, -0.013117607, -0.0031628318, 0.0079088155, -0.001669449, -0.072338596, -0.02160974, 0.038247954, -0.018877456, -0.008042059, 0.016867375, 0.035323836, -0.04803303, -0.02018573, 0.057957713, -0.029136477, -0.028677285, -0.008167055, -0.06328557, 0.011179718, 0.008488663, -0.05848707, 0.0158166, -0.0436697, 0.030599985, 0.005848027, 0.010336276, -0.020783082, 0.0076606297, 0.0039322004, 0.0037681418, 0.028720688, 0.0036877762, 0.0024391797, -0.017145472, 0.011509426, 0.0025370505, -0.04470375, -0.074711226, -0.029282596, -0.018267805, -0.003081526, -0.0047080433, 0.00887125, 0.028279653, -0.028016713, -0.0026556097, 0.0138862515, 0.0037134555, -0.009686118, 0.033374228, 0.015190113, 0.002342249, -0.032024648, -0.009536816, -0.013332115, -0.009322013, -0.040178467, -0.011371554, 0.060587715, 0.019486237, 0.015850326, 0.030980837, 0.019085204, -0.017974952, -0.028566685, 0.012693282, -0.0060169324, -0.05152702, -0.017218532, 0.06257494, 0.037463974, -0.009083123, 0.035720814, 0.025846045, 0.0070527876, -0.060287375, 0.008998272, -0.060563408, -0.051893037, 0.0012994354, 0.015117994, -0.00078217225, -0.0064918203, -0.015802296, -0.023788655, 0.07716835, 0.01019768, 0.042922903, 0.047033634, 0.0046983864, 0.07753524, -0.030870885, -0.011416402, 0.041920904, 0.014142322, 0.028988332, 0.019256497, -0.024075434, 0.021352803, 0.0022657171, -0.05919423, 0.01949065, 0.0050079855, -0.06481186, 0.004194257, 0.0036923334, 0.020350294, -0.024950558, -0.0101394495, -0.008556225, 0.00409134, -0.024883393, -0.053026695, -0.035402823, -0.008363666, 0.0049111275, 0.027415995, -0.0014052046, 2.9585539e-05, -0.012881067, -0.04060138, 0.03223247, 0.012130217, -0.062125582, 0.036124162, -0.015585287, 0.051813614, 0.039365984, -0.03820716, 0.05411767, 0.024698574, -0.050460927, -0.0111872405, -0.015009924, -0.038991284, -0.04146692, 0.016304996, -0.0542988, 0.018481052, 0.032101683, 0.05697987, 0.011803256, -0.062105622, -0.016352775, -0.065439746, -0.024849828, -0.031127533, -0.027543053, 0.027214067, 0.034262516, 0.037374206, -0.0150781, -0.0052245427, 0.055843614, -0.0054755677, -0.0022030738, -0.021812536, -0.00060386333, -0.032058284, 0.009149672, -0.03656686, 0.044368472, -0.024810188, 0.04342955, -0.007168526, -0.0024169, -0.049376167, -0.015457975, -0.006061518, 0.005795366, -0.032873876, 0.02317944, -0.02252552, -0.02519878, 0.055113163, 0.033388983, -0.0614326, 0.043814667, 0.0054046777, -0.03420407, -0.016934212, 0.036104485, -0.025617896, 0.022540564, 0.0015804032, -0.022398062, 0.007740561, -0.003884169, 0.078812115, 0.011524183, 0.017211117, 0.029131992, -0.016970526, 0.027611699, -3.5697954e-05, -0.052176744, 0.016164266, 0.035558783, 0.02390772, 4.8826994e-05, 0.015359109, -0.020876251, -0.023429144, 0.026290515, 0.07851207, -0.010129177, -0.014570264, -0.070481, 0.07433161, -0.04348626, -0.05247101, 0.03292632, -0.010537371, -0.029867942, 0.013252587, -0.012303643, -0.032325637, -0.020569718, -0.07676443, 0.0326422, 0.018577766, 0.02955581, -0.00951289, 0.026928483, 0.04002251, -0.01991823, -0.006655517, 0.01442154, -0.011535034, 0.040882155, 0.009834697, 0.0019925754, 0.0121798385, 0.003017612, 0.0070932237, 0.00835202, -0.022910312, 0.040081248, 0.037973076, 0.00067417417, -0.027829794, 0.004703884, 0.014414018, -0.03294513, -0.011494597, -0.043091305, -0.010887624, 0.010113192, 0.007157531, -0.040620703, 0.015710862, 0.047262214], [-0.017063864, -0.09589102, -0.043416463, -0.035870675, 0.02472432, 0.036489226, 0.009854869, -0.014042752, 0.03194096, 0.018179798, 0.024997119, -0.0004172812, -0.058823433, -0.010048821, -0.006850357, 0.019326203, 0.04490998, -0.02542827, 0.04231216, 0.056592107, -0.01312825, 0.017876256, -0.031098751, 0.029857282, -0.033085015, 0.036651287, 0.0072819446, 0.018763566, 0.013326897, -0.0036117046, -0.017724786, -0.04328148, -0.00028066282, 0.004808617, 0.0010536322, 0.010784878, 0.028337553, -0.011424001, -0.05281528, -0.041160677, -0.058349907, 0.030205434, -0.024137441, 0.031182187, 0.0031539076, 0.026948873, 0.02637881, 0.03925676, -0.0030890384, -0.05180446, 0.041128352, 0.0044180914, -0.046429716, 0.022662705, -0.007830602, 0.026089959, 0.03589339, 0.020245345, 0.007127307, -0.016804386, -0.022632126, -0.002773936, -0.076290175, -0.011623154, 0.037687887, 0.028625425, -0.009617234, -0.0018084734, -0.010437162, -0.042479027, -0.00081009994, 0.019373488, 0.020057453, -0.005175335, 0.03093232, 0.018789776, -0.07154216, 0.0014415367, -0.0023012168, -0.0059282104, -0.008062722, 0.009093312, 0.0024438961, -0.050483488, -0.066860214, 0.030352646, -0.005414827, -0.022702236, 0.057298023, 0.00068582204, -0.039427336, 0.007179726, 0.0418465, 0.010480845, -0.014116794, 0.007987205, 0.00069106393, 0.039037466, 0.011072859, 0.009209345, 0.034056086, -0.03561469, 0.0033216225, -0.017640697, 0.010998051, 0.0023881458, -0.0016704352, -0.011149631, -0.0033024293, 0.01993951, -0.006889344, 0.003376035, 0.02398455, -0.07179727, 0.01421639, 0.016620481, 0.040274788, 0.00020159672, -0.038791098, -0.009153594, -0.015692655, 0.02853631, -0.0043399534, 0.0106490245, -0.021917036, -0.013060759, 0.0076881954, -0.0042014243, -0.069441885, -0.009712681, 0.022350153, -0.013648294, 0.05114747, -0.0089471005, -0.02569692, 0.029121662, -0.024195103, 0.040527273, -0.029079728, 0.015691128, -0.029719245, -0.014580487, 0.009224087, -0.013378334, 0.034049533, -0.022570096, -0.0059455745, -0.04443253, -0.0072976705, -0.019593896, -0.017862167, -0.00096277177, 0.0072202967, 0.0094119245, 0.010686592, -0.037823956, 0.006406538, 0.009547996, -0.024567278, 0.025512142, -0.019751674, 0.022895096, 0.029649353, 0.0087009845, -0.026937187, -0.07432039, 0.012115816, 0.0010630242, -0.021100603, 0.02471968, 0.059642922, -0.013370471, 0.014416677, 0.036219265, -0.063081644, -0.019677412, 0.01095961, -0.012858828, 0.041754767, 0.024955185, 0.005740483, 0.021789264, -0.03741705, -0.0029577713, -0.04190625, 0.026418563, -0.023032263, -0.0027729922, 0.013107499, 0.028619308, 0.021556433, -0.029482046, 0.030779865, -0.0027707263, -0.02092762, 0.024285961, -0.03385864, -0.0043241736, 0.0016555829, 0.049261242, -0.014401387, 0.013614987, 0.04158615, 0.003365333, -0.059772223, -0.04635414, 0.043309875, -0.020681247, 0.042044383, -0.034348764, -0.012061402, 0.028338863, 0.04492178, 0.0527479, 0.024952782, 0.03189553, 0.030428983, -0.02785573, 0.03652592, 0.048711706, -0.0108525865, 0.01863339, 0.048806064, -0.039467327, -0.031945765, 0.018329138, -0.0044049867, 0.019804094, 0.010571433, 0.0020513504, 0.07857336, -0.010316161, -0.02441177, -0.034487676, -0.005442019, -0.008401101, -0.037120882, 0.04183951, -0.0687246, 0.04743098, -0.036842182, 0.035355218, 0.043956384, 0.0049300552, -0.013274369, 0.013709888, -0.04273938, 0.022491891, -0.015368528, 0.014983463, 0.04667259, -0.009276943, -0.029135859, 0.0031163404, 0.00964044, 0.005169001, 0.001852047, -0.007562484, -0.013138515, 0.040025797, 0.037953477, -0.03912942, -0.0066079167, -0.036162477, 0.036435056, 0.013455871, 0.024084145, -0.019160315, -0.019375017, -0.07241931, -0.037147526, -0.07605024, 0.04731036, -0.003902633, -0.017880296, 0.015404786, 0.03425004, 0.007564136, 0.05802491, 0.014086325, -0.07095855, -0.029180195, 0.008302378, -0.024453703, 0.0094840005, 0.0020504766, 0.017149044, -0.042019486, -0.0013222824, -0.025604311, -0.025549272, -0.0056071407, 0.023482196, 0.03769531, 0.05781523, -0.013213649, 0.049327638, 0.008325966, -0.0799153, -0.020125926, 0.0024016874, -0.0072308355, -0.008499388, 0.012059983, -0.0012147131, -0.036188688, -0.040253818, 0.028196458, 0.028180076, -0.016637463, -0.050217025, -0.033422682, -0.051707484, 0.011570734, 0.016222749, -0.02076053, 0.0453953, 0.07962, -0.032023083, -0.023493115, -0.040244207, -0.0291138, 0.013190934, -0.05984212, 0.0318632, 0.067582734, -0.00064890995, -0.005982377, -0.07854016, -0.02295265, 0.046101216, 0.03781806, -0.015746823, -0.006307815, 0.020972392, 0.00875395, -0.02549151, 0.005665676, 0.0064493474, 0.019230919, 0.015529336, -0.081699304, -0.016487248, -0.013430753, 0.054711994, -0.0713482, 0.0087852925, -0.055162802, -0.0008282283, 0.0020710076, 0.032675706, -0.017075557, 0.0036536404, 0.009947477, -0.025829498, -0.0010641161, -0.012409447, 0.012047316, -0.018846564, 0.00676424, -0.009372588, -0.006577721, -0.052018944, 0.051461115, 0.014575246, -0.009753961, 0.072457746, -0.008114104, 0.042553727, -0.01477881, 0.07103543, 0.04728939, -0.0075042904, 0.010680695, 0.018387893, 0.090960965, -0.061334327, -0.019442398, 0.0098837, 0.008571465, 0.0038997934, -0.036291778, 0.06339485, 0.021334743, 0.034771614, 0.05335957, 0.039381035, 0.010310482, -0.046529308, 0.021609072, -0.0009052195, 0.028834227, 0.02936716, 0.067740865, 0.016927136, 0.01137711, 0.030322943, 0.041795827, 0.0052171615, 0.0009549089, -0.017019743, 0.03976457, -0.008849506, -0.01660956, 0.01347531, -0.04540491, -0.012647956, -0.0075160847, 0.01884438, 0.005330082, 0.049253374, 0.00077537197, -0.010757795, 0.026300618, 0.031694587, -0.010178995, -0.022598054, 0.018429829, 0.01805328, 0.036781028, 0.04241612, 0.038911007, -0.058521148, 0.02132131, 0.023407867, -0.026042014, 0.0149982385, -0.02040779, -0.06273917, 0.021839717, 0.025632707, 0.03750671, 0.0069844634, 0.088896506, 0.037545368, -0.034001045, 0.018404493, -0.010401561, -0.063918605, 0.00022431185, -0.026387984, -0.05403884, -0.01744172, 0.011493852, -0.01693456, 0.016062213, -0.034189757, 0.010461078, 0.029402515, -0.055893183, 0.027142717, -0.029324789, 0.004425081, -0.018234594, -0.051258422, 0.041516256, 0.07752497, -0.05139949, -0.024178939, -0.0123687675, -0.043798253, -0.012603836, 0.0072758016, -0.0059408783, -0.011433898, -0.010585248, 0.03464231, -0.047538385, 0.013780654, 0.026159085, 0.018857047, -0.030200604, -0.013321546, -0.042184714, -0.014457957, -0.012715172, 0.027011776, 0.009721199, -0.00789711, 0.025311671, 0.015080111, 0.0261379, 0.04256115, -0.005268161, 0.018576821, 0.022618147, -0.032227084, 0.00319628, -0.04678267, -0.024009885, -0.005640995, 0.029893538, 0.015962644, 0.041939106, -0.021493748, -0.058674037, 0.004505894, 0.04279966, -0.0430919, 0.01877121, 0.043871637, 0.031249022, -0.07023516, 0.018848857, -0.002157063, -0.07590346, 0.055783972, 0.046356324, -0.013959972, 0.021023283, -0.019429075, -0.05098322, -0.015745949, -0.03580253, 0.029005466, 0.050963998, 0.0075786607, -0.027732981, -0.0021402452, -0.024632368, -0.026535409, -0.006307815, 0.0057443054, 0.03072832, 0.0038526158, -0.028666923, 0.03059203, -0.025748465, 0.010429954, 0.008213264, -0.028777005, -0.017393887, -0.04978063, 0.01122564, -0.0047020307, -0.015961306, 0.014815502, 0.0079489825, 0.0014092113, 0.0035732635, -0.03935308, 0.03295309, 0.0123360595, 0.0092765065, -0.0394352, -0.0067342697, -0.007698352, 0.042716663, 0.007862054, -0.0020251407, -0.017960673, -0.017012317, -0.087547585, -0.07361098, 0.047843073, -0.024264555, -0.02603328, 0.022415895, 0.04571921, 0.0014214425, -0.043987397, 0.015388622, 0.004332473, 0.00040799854, 0.017467929, 0.014382168, 0.01174174, -0.10060004, -0.06971097, 0.029206844, -0.035447825, -0.040736955, -0.05414237, -0.03222402, 0.0087339645, -0.04082956, 0.031792, -0.030447438, -0.02537465, -0.008136819, 0.003413384, -0.03620616, -0.013735224, -0.0063568354, 0.003438788, 0.021502485, -0.026541747, -0.015921554, 0.034488764, -0.017086579, 0.04397364, 0.00014328, 0.033143114, 0.02403959, -0.018752208, -0.01330036, -0.030172674, 0.016567625, 0.0063903756, -0.060069215, -0.033580814, -0.050657343, -0.0031503632, -0.02578778, 0.03180423, -0.005780234, -0.0062200124, 0.04725095, -0.0019847886, 0.017876364, -0.009616688, 0.04812723, -0.025672456, -0.022384007, 0.007534527, 0.009166863, -0.03089781, 0.0017551802, -0.02236566, -0.01600406, 0.026793852, 0.005809939, 0.014472592, 0.019350663, -0.005497497, 0.011377656, 0.00010047074, 0.05658381, 0.025155688, -0.013858846, 0.06458783, 0.0029601739, 0.033389483, -0.011642375, -0.07895428, 0.090189524, 0.00082473375, -0.035550915, -0.009319371, 0.012147349, 0.021167874, 0.044583455, -0.00030621732, -0.018362556, 0.025527172, 0.012254154, -0.005204821, -0.005081854, -0.025305085, 0.02111196, 0.043018952, -0.005975825, -0.020957869, -0.058185227, 0.04146908, 0.0062221964, 0.007232146, -0.00027529802, -0.0063676606, -0.04523411, 0.03951689, -0.07250667, 0.022115357, 0.04464745, 0.025645455, -0.015799241, 0.034600373, -0.0016835402, -0.010035934, -0.033423994, 0.03674171, 0.010681787, 0.0066546574, -0.03581061, -0.0039960872, 0.010822882, -0.037323132, -0.008632184, -0.0013469631, 0.029335707, -0.015612498, -0.020371534, 0.0146641405, -0.0014342198, 0.054575704, 0.01775034, -0.008958058, 0.04116958, -0.06013567, -0.047327887, -0.018347703, 0.027011776, 0.011940292, -0.01943366, -0.021980377, 0.0014903523, 0.041915517, 0.036605857, 0.025257034, 0.041628085, 0.03125317, 0.056073155, 0.02878836, 0.011637351, 0.028608114, -0.01113041, 0.020919755, -0.007845618, -0.051856007, -0.060638897, -0.004926561, 0.020020653, 0.0025187577, 0.049183484, 0.062198374, -0.006323268, 0.009694621, -0.044746608, -0.024474671, 0.0044249715, -0.006493085, -0.015161035, -0.07046581, -0.040099617, 0.03238128, -0.045190427, -0.040702008, -0.04577709, -0.000933941, -0.005232341, -0.02144264, -0.034055214, -0.011633201, 0.043386757, 0.02267406, -0.000109862565, -0.020691292, -0.057155184, 0.015275811, 0.0008059501, -0.012414689, -0.018649554, 0.01996834, -0.001082463, 0.00962182, -0.0651994, 0.00046751657, -0.00980092, 0.007372805, -0.0047146985, -0.011582965, 0.06041524, 0.03660455, 0.01408425, -0.007517832, -0.03175749, 0.043022007, -0.03418484, 0.010250636, 0.011044137, 0.017371828, -0.039014537, 0.0069937464, -0.027911644, -0.0043390254, 0.015225466, 0.00021033331, 0.021363573, 0.0031264417, 0.004825653, -0.0060867793, 0.0035780687, -0.016576799, -0.0016468464, 0.0019901942, 0.0062842267, -0.06887575, -0.04389086, 0.024636734, -0.049026225, -0.042292062, 0.01262393, 0.009670746, -0.045944832, -0.042371787, 0.04384019, -0.0029890046, -0.017079972, 0.015703576, -0.043022443, 0.0107888095, 0.007096292, -0.041430637, 0.021566836, -0.03986242, 0.044332057, -0.006171306, 0.037266344, -0.03884798, -0.021924462, 0.0024091818, -0.021909365, 0.03178632, 0.005837841, -0.007985895, -0.0073022568, -0.00071618165, 0.0143210115, -0.030044245, -0.06570262, -0.01707522, 0.01901111, 0.0047221794, 0.015398232, 0.021955915, 0.017107982, -0.0023239318, 0.0019530639, 0.054579202, -0.012477156, -0.014401387, -0.0018000643, 0.0065734074, 0.007865548, -0.003208948, 0.012944563, 0.0066773724, -0.004231565, -0.029382886, 0.0322439, 0.04124193, 0.01157756, -0.0010060179, 0.0391766, 0.033823255, 0.0018886314, -0.01819678, -0.013111868, 0.014785143, -0.074959904, -0.00085919205, 0.063106105, 0.013718188, 0.009936556, 0.01991625, -0.015510934, 0.04143151, -0.04037351, -0.036952265, -0.04398696, -0.046941675, -0.0049658758, -0.0013803806, -0.010811525, 0.020461084, -0.01492295, -0.01688083, 0.050566047, 0.032948725, 0.024439724, 0.020902282, -0.030985177, 0.045007396, -0.04163267, 0.010640288, 0.062176537, 0.005479587, 0.03682336, 0.030836107, -0.022255195, 0.025944166, 0.023807196, -0.026178196, 0.032754336, 0.015669286, -0.053548284, -0.00025269893, -0.013740029, 0.027436811, 0.012358774, -0.017117592, 0.030109769, 0.03468075, -0.012860254, -0.041152813, -0.014030957, -0.033432294, 0.004362177, 0.03211569, 0.015155056, 0.01946686, -0.040404093, 0.0073931175, 0.03757955, -0.038313422, -0.045508876, 0.054007716, -0.002681695, 0.060584728, 0.024881795, -0.019870492, 0.08453171, 0.027827064, -0.011241038, -0.047785632, -0.0046209986, -0.011288106, -0.032511458, 0.016510837, 0.0027793539, 0.041909404, 0.035208005, 0.04627333, 0.010287766, -0.08206843, -0.009360767, -0.029581206, -0.014286939, -0.04006948, -0.04165604, 0.013977023, 0.011208002, 0.0378814, -0.0030347623, 0.001497014, 0.068943895, -0.012450508, -0.00815735, -0.001690857, -0.0050672195, -0.041942604, 0.016870266, -0.03207725, 0.057846684, 0.03332811, 0.033733707, -0.018360808, 0.0069654617, -0.026867623, 0.031042838, 0.013545203, 0.0150976945, -0.025532672, 0.013843121, -0.021047309, 0.00011199211, 0.031805106, 0.04682111, -0.023802284, 0.036893293, -0.013713983, -0.021330373, -0.03648693, 0.045482665, -0.036760278, 0.03535172, 0.01305377, -0.011182394, 0.01947123, -0.042540185, 0.08197975, 0.010111724, 0.006645921, 0.03125426, 0.0036252462, 0.023041872, 0.008445221, -0.020202482, -0.01576779, 0.016721716, -0.020760313, 0.00421786, -0.011916485, -0.025379783, 0.022976346, 0.00439625, 0.046976622, -0.023718083, -0.058058985, -0.05686469, 0.06245261, -0.034354657, -0.03407094, -0.0111566195, 0.01390646, -0.020719906, 0.0049486207, 0.003264862, -0.016932815, -0.01905078, -0.05784319, 0.013581678, 0.0018023577, 0.03137832, -0.015402054, 0.041677885, 0.012943689, -0.029057011, -0.017227674, 0.0013238111, -0.0050423206, 0.05437826, 0.014624281, 0.03832522, 0.03766779, 0.005425966, 0.013948178, 0.009890526, -0.055052724, 0.018941792, 0.054565877, 0.0046618422, -0.014718964, 0.0012816571, 0.029264942, 0.012603836, 0.007244814, 0.0029673814, -0.02599571, 0.04654809, 0.032966197, -0.048015047, 0.0013937448, 0.015575586], [-0.04400251, -0.07553266, -0.04134802, -0.038891904, -0.011280744, 0.03889462, 0.0077498946, -0.034796312, 0.033935092, 0.029837819, 0.010749007, 0.036146563, -0.07820279, -0.004194457, -0.003494907, 0.04694369, -0.031706817, -0.04153929, 0.036921456, 0.043050822, -0.024470873, -0.020497862, -0.037353102, 0.017587356, 0.004089001, 0.05066226, 0.008988565, 0.01870902, 0.013112717, -0.030536722, 0.014236546, -0.034238018, 0.0028754827, 0.008999679, 0.009579299, 0.018725662, 0.019240534, -0.011269824, -0.033208273, -0.056878988, -0.07710274, 0.014099299, -0.020636274, 0.034365185, -0.024422348, 0.04670249, 0.03619283, 0.037134953, -0.0302431, -0.041493796, 0.027477466, -0.011424777, -0.027408198, 0.009848754, -0.030251708, 0.02017516, 0.054885663, 0.032624904, 0.011974932, -0.015145329, 0.008076165, -0.027065983, -0.06443149, -0.013617252, 0.025943704, 0.011862755, 0.0017033196, -0.0017539798, -0.0011470914, -0.03324342, -0.019721935, 0.021991627, -0.0044250125, -0.024034642, 0.060626805, -0.00071027654, -0.07082915, 0.01870537, -0.01573671, -0.02210025, -0.0054177972, 0.014399125, 0.008832449, -0.054020304, -0.049646985, 0.021337245, -0.016008621, 0.008547615, 0.04826572, -0.0007084672, -0.045302615, 0.014369917, 0.027790733, -0.020247793, 0.0031836764, 0.015295759, 0.00085786305, 0.06748351, 0.02529908, 0.007885413, 0.027575169, -0.043507796, -0.04570583, -0.019754373, 0.009386609, 0.008186273, 0.0316895, -0.027974246, -0.0017772422, 0.007665197, -0.020950574, 0.0043777768, -0.013847549, -0.05494356, -0.003950461, -0.0073808795, 0.033259965, -0.025407119, -0.03592273, -0.017112289, -0.0036983876, 0.031145679, -0.0026007285, 0.026689649, -0.020676594, -0.013965671, 0.008548454, 0.0077809915, -0.07034529, 0.011862755, 0.015845267, 0.01961816, 0.039359864, -0.044075917, -0.046295658, 0.0074113784, 0.0037359304, 0.06202875, -0.031312134, 0.040512644, -0.03128215, 0.0032507817, 0.020878203, -0.0015456527, 0.038119726, -0.037100833, 0.018814575, -0.041925956, -0.017132448, -0.011510202, -0.0033694196, 0.012679522, -0.008759043, -0.01145043, 0.01649713, -0.072570205, 0.016163442, 0.030707313, -0.03164504, 0.033368524, -0.01833692, -0.0009615097, 0.020264076, 0.010690333, -0.015142679, -0.04183808, 0.011164627, -0.002916838, -0.00064720976, 0.03664903, 0.05676836, 0.002135999, 0.02080376, 0.040863127, -0.025123319, -0.028075665, 0.030009182, -0.024999253, 0.039225977, 0.033611484, 0.0010951388, 0.0121357, -0.007680705, -0.014864113, -0.010009006, 0.032213677, -0.021410003, -0.04051471, -0.015117413, 0.019525884, 0.058528025, -0.025594769, 0.028550634, -0.02474595, -0.014795877, 0.04153722, -0.014492304, 0.024392104, 0.04476745, 0.045662407, 0.028851235, 0.0002707477, 0.020720016, -0.03713702, -0.025338367, -0.03813213, 0.029888995, -0.00097140425, 0.04931375, -0.05906771, -0.019093463, 0.049099028, 0.016843997, 0.043536745, 0.044142604, 0.025040092, 0.033166915, -0.06424952, 0.025733309, 0.06823204, -0.035047546, 0.0029170965, 0.020796524, -0.030128468, -0.033217575, -0.014538958, -0.0005965496, 0.017845828, -0.006864973, 0.0007397421, 0.052215666, 0.010265667, -0.032633435, -0.056449927, -9.615097e-05, 0.028672634, -0.055672444, 0.033057325, -0.06228515, 0.041930094, -0.003610831, 0.02083426, 0.041384205, -0.032854684, -0.003555518, -0.0017382131, -0.06830234, 0.009294594, -0.021888724, 0.005755876, 0.06315775, -0.021249559, -0.023182206, -0.005552977, -0.015325224, -0.0033952666, 0.0142903095, -0.0074336072, 4.264761e-05, 0.048674297, 0.020867862, -0.049428836, -0.010909516, -0.05535401, 0.049204484, 0.012527864, 0.008890993, -0.028039511, 0.00921912, -0.020658243, -0.027569998, -0.073604085, 0.028803937, 0.023369856, -0.031375974, 0.035724673, 0.0057253772, 0.03575989, 0.053346217, 0.04340234, -0.055980545, -0.015057448, 0.007813042, 0.008118037, 0.013858147, -0.016955655, -0.008293279, -0.054555856, -0.005082949, -0.045326397, 0.0005744322, 0.02191751, 0.026589878, 0.04430802, 0.047318425, -0.03298702, 0.062487796, -0.001551856, -0.023134649, -0.046751082, 0.03823991, 0.0019919826, 0.0005913802, 0.0126257595, -0.024002591, -0.026335932, -0.06463206, 0.04436178, 0.02822548, 0.00542232, -0.013739379, -0.03196968, -0.050136272, 0.02058251, 0.016651306, -0.029001407, 0.034794245, 0.10089855, 0.0037364473, -0.01348233, -0.0356145, -0.037649825, 0.008873029, -0.060159493, 0.013356618, 0.059898954, 0.03122658, 0.0025983378, -0.04767641, -0.012925133, 0.035780568, 0.021449938, -0.0123114595, 0.010416097, 0.024284841, 0.010230774, -0.007336423, -0.011962266, 0.028210811, 0.040039126, 0.01224219, -0.07654858, -0.012252011, -0.031125, 0.027151795, -0.06061621, -0.030991629, -0.06110291, 0.012197991, -0.0065878923, 0.01635833, -0.012948718, 0.013707717, 0.013018117, -0.026206825, 0.003878073, 0.0056692883, -0.0024192827, -0.0011744893, -0.012835896, 0.006266097, -0.020935582, -0.052318536, 0.053923123, 0.0129653895, -0.02159578, 0.058248878, -0.007995005, 0.051867764, -0.04587529, 0.059271384, 0.026076041, -0.011942105, 0.009569607, -0.012280961, 0.038778823, -0.038026158, -0.0043112854, 0.040089786, 0.0015053313, 0.00589726, -0.011960974, 0.056094266, 0.025112849, 0.026772875, 0.03789796, 0.021774575, 0.04447603, -0.01639581, 0.037256952, 0.0022884966, -0.0011899329, 0.01584656, 0.020725187, 0.0016100118, -0.007999658, 0.052399177, 0.028834436, 0.015714675, 0.006445734, 0.01376303, 0.019399233, -0.009357402, -0.018821811, -0.01616577, -0.035520032, -0.021138223, 0.008006378, -0.01616732, 0.011789867, 0.036743112, -0.009532386, -0.010063802, 0.0231729, 0.038194682, -0.03308834, -0.035044443, 0.041855656, 0.014350274, 0.009008209, 0.020982621, 0.042883337, -0.054489687, 0.030016163, 0.027748344, -0.004380814, 0.005807312, -0.040052567, -0.035369083, 0.01787891, -0.018151274, 0.0007795466, 0.01004726, 0.09399636, 0.042773742, -0.02196843, -0.0074770306, -0.009924228, -0.07363924, -0.029417029, -0.030234827, -0.03068767, 0.014567388, 0.021913892, -0.031095533, 0.016242277, -0.044196364, 0.03305629, 0.041618537, -0.002194478, 0.01397575, -0.013996105, -0.016528144, -0.04130563, -0.036094867, 0.02685384, 0.061625537, -0.05129706, -0.032896683, -0.044721574, -0.044932485, -0.03356677, 0.018645018, -0.0202244, 0.010965346, 0.03644393, 0.032200236, -0.05152865, -0.013308122, 0.01981731, -0.0066478574, -0.04413407, 8.723375e-05, -0.037889685, -0.028654542, -0.011118361, 0.05327384, 0.020907344, 0.010945961, 0.015638879, 0.03317622, 0.025825324, 0.040997535, 0.025353355, 0.018934503, 0.021392558, -0.03435381, -0.0037943448, -0.0010519744, 0.0047703288, 0.022692146, 0.006161481, 0.002134739, 0.04713181, -0.050965182, -0.026373282, 0.029231962, 0.074646235, -0.041964214, -0.0061236797, 0.059563976, 0.044944894, -0.05646026, 0.045917578, 0.01035639, -0.08277668, 0.012243741, 0.045536272, -0.02657282, -0.0068484624, -0.023846991, -0.037432194, -0.029474923, -0.027191082, 0.058535263, 0.03402517, -0.010728587, -0.046157636, -0.03172827, -0.012513842, -0.030265328, -0.0021608123, -0.027344096, 0.024322836, 0.021438565, -0.040753536, 0.053464077, -0.040701844, 0.010757729, -0.020126052, -0.0011362357, -0.039809603, -0.04620416, -0.0067098904, 0.014687578, -0.0048657046, 0.03677723, 0.019492283, -0.008201781, -0.025700131, -0.022085775, 0.010677926, 0.017305108, 0.0003895148, -0.01683831, -0.02757982, -0.027905235, -0.011213478, 0.019037893, -0.028109169, -0.009421502, -0.022193816, -0.08379402, -0.0672912, 0.04899952, -0.001732656, -0.0004342302, 0.041541353, 0.05365444, 0.0044728294, -0.000994594, -0.014681375, 0.03607936, 0.017919233, 0.032430794, 0.048383586, -0.003481337, -0.067851566, -0.06693762, 0.03178875, -0.032929122, -0.030678427, -0.02182317, -0.041575473, -0.00012303189, -0.016143154, 0.021421636, -0.018647343, 0.00045904337, -0.011443646, 0.004270447, 0.00392358, 0.033773806, -0.033300288, 0.010196397, 0.036431395, -0.0026363975, -0.009289425, 0.040465083, -0.007822347, 0.018074833, -0.009865297, 0.05639203, 0.02743094, -0.045451496, -0.010190194, -0.037526794, -0.0013242082, 0.0054439027, -0.034386896, -0.026233707, -0.06400553, -0.012106751, -0.0012352299, 0.016535383, -0.029994968, -0.020369532, 0.048410464, -0.014551622, 0.03683306, -0.011139555, 0.0135634905, -0.01674707, -0.019786423, 0.0008240035, 0.0029282107, -0.03509407, 0.011196936, -0.03259001, -0.0014602282, 0.015675323, -0.004735177, -0.00089383894, 0.0244606, -0.023696562, 0.020948505, -0.009400825, 0.05162351, 0.007458162, 0.010587979, 0.016496612, 0.00054459705, 0.06887304, -0.01624331, -0.038819145, 0.08832655, -0.005318286, -0.03636187, -0.020517375, -0.0012106751, 0.0026042825, 0.034241118, 0.0038798985, 0.023393635, 0.014777267, -0.009342153, 0.015360377, 0.007291449, -0.035598606, 0.0017658694, 0.05478072, -0.019318074, 0.023234416, -0.052455004, 0.044836335, -0.0019995268, -0.00094936165, -0.01970061, -0.014408462, -0.03256106, 0.02302609, -0.03941156, 0.025703324, 0.037567113, -0.0032670654, -0.0087445695, 0.024632225, -0.01627717, -0.02035299, -0.0063577243, 0.038874976, 0.024907237, 0.016856402, -0.030108435, -0.0004957461, -0.03340781, -0.040355492, -0.011199004, -0.006666467, 0.03159335, -0.021124782, -0.014066991, -0.006274626, -0.0138643505, 0.0306856, 0.013195041, -0.008067506, 0.030282388, -0.05655745, -0.059100796, -0.027801072, 0.016444918, 0.00877439, -0.0044172583, -0.023624191, -0.0021980319, 0.034120154, 0.01267125, 0.046166427, 0.013324664, 0.033135902, 0.047153264, 0.018613743, 0.016995719, 0.0060670744, -0.01864114, 0.032340843, -0.018632611, -0.014037783, -0.06478508, -0.018101713, 0.018508287, 0.009714349, 0.03549108, 0.036545638, -0.0015526314, 0.038733333, -0.033545315, 0.030685084, 0.0020478605, -0.0039137583, 0.008158359, -0.07135436, -0.021800973, 0.0321899, -0.021869693, -0.031115696, -0.03127336, -0.011786249, 0.0076463283, -0.0028765164, -0.016697701, 0.013124092, 0.019843802, 0.026602026, 0.005884853, -0.029347757, -0.0501815, 0.012597328, 0.007195815, 0.008627741, -0.018984132, 0.033893734, -0.015211497, 0.00763935, -0.054398704, -0.04695657, -0.023783926, 0.042841204, -0.005365845, -0.002375601, 0.06684922, 0.025612345, 0.009319407, -0.008061061, -0.070360795, 0.051292926, -0.042451426, 0.020919558, 0.023967437, 0.010799926, -0.07909709, -0.0021856253, 0.005771772, 0.0070035127, 0.006480369, -0.024810826, 0.023166424, 0.00965852, 0.0022225867, -0.0046134377, 0.011593429, 0.0043523824, -0.023785992, 0.022509148, 0.007471215, -0.0843151, -0.027321868, 0.010766163, -0.049518265, -0.045153476, -0.015589252, 0.023214772, -0.01782825, -0.05367085, 0.052320212, -0.031798057, -0.032687195, 0.030220354, -0.065473646, 0.022162378, -0.021618977, -0.02976131, 0.029601188, -0.044263564, 0.06474579, 0.025073176, 0.03981064, -0.030886173, 0.0035027904, 0.0024213502, -0.0101472875, 0.0124363005, 0.023809254, 0.02567076, -0.008736298, 0.008206434, 0.01347057, -0.04010891, -0.07553951, -0.007989577, -0.0034903835, 0.000871562, -0.0049409196, 0.033084657, 0.008292505, 0.0066463067, 0.011988889, 0.015187718, -0.01680794, 0.022187093, 0.025348704, 0.0062151784, -0.015212272, -0.024591904, 0.014683184, -0.005671098, -0.0063212803, -0.034692924, 0.0008963752, 0.052190334, 0.017331503, 0.0035950642, 0.06083772, 0.001434252, -0.008606546, -0.02713913, -0.008309119, 0.025873914, -0.07484991, -0.012360569, 0.06240508, 0.0013910874, 0.019461783, 0.0142262075, -0.035728876, 0.01971405, -0.03835674, -0.010660998, -0.053184927, -0.04999644, -0.030215183, -0.012160513, 0.019289643, 0.012553387, 0.02344403, -0.0022786746, 0.05496527, 0.039377443, 0.018787693, 0.013483882, -0.030869631, 0.038472798, -0.016144898, -0.00011088378, 0.036016293, -0.0005414954, -0.0007976395, 0.03297255, -0.032903794, 0.017501028, 0.016956689, -0.030433334, 0.023793748, 0.046524666, -0.067280866, -0.006982738, -0.01768506, -0.0040507475, 0.02115218, -0.02959589, 0.019141281, 0.024191014, 0.0073963874, -0.008149829, -0.018736, -0.03152201, 0.005328108, 0.021231012, -0.0043703136, -0.016874366, -0.03556552, 0.007743772, 0.025146063, -0.004384174, -0.0577857, 0.06551913, 0.0108573055, 0.055498756, 0.038543098, -0.036063075, 0.052016642, 0.01977505, -0.033068698, 0.018482698, 0.012831502, -0.045106176, -0.05335655, 0.014186921, -0.013153039, 0.04647297, 0.06297165, 0.04015182, 0.016761027, -0.063798755, -0.03799514, 0.0007755403, -0.03689716, -0.04663839, -0.018456334, 0.019270645, -0.0035965506, 0.012586472, 0.0030737293, -0.037839543, 0.063257, 0.018573422, 0.031553026, 0.017970443, -0.009590284, -0.021113409, 0.01799499, -0.016806776, 0.06989349, 0.028516516, 0.031132238, -0.024753189, -0.00024334983, -0.049733832, 8.529522e-05, -0.01689174, 0.007994488, -0.024238573, 0.033015452, -0.015157736, 0.0045056553, 0.0236176, 0.07346451, -0.031011013, 0.03463089, 0.0021712803, -0.019480394, -0.009082713, 0.04254758, -0.060557537, 0.04336926, 0.007307474, -0.0036583894, 0.037794568, -0.030035289, 0.081182435, 0.03743064, 0.016628172, 0.021686697, -0.016598191, 0.0063759466, 0.02891582, -0.010064836, -0.005964462, 0.004089001, -0.010363369, 0.024274115, -0.019246526, -0.0074129296, 0.024612581, -0.008020852, 0.047187384, -0.029461484, -0.065027006, -0.047062285, 0.06738425, -0.014512594, -0.021580722, -0.0067212633, -0.005808604, -0.03041188, -0.003349776, 0.01976471, -0.016645491, -0.010356132, -0.0626863, -0.01054559, -0.019853625, 0.025479233, -0.00024916543, 0.04109782, -0.0028527372, -0.050266083, -0.02168256, -0.003355979, 0.001787064, 0.059533995, 0.028921798, 0.024276827, 0.035691656, 0.023869738, -0.016887419, 0.0038687843, -0.04179259, 0.009369421, 0.05235162, 0.0072051194, -0.025473028, -0.0069065862, 0.01674888, -0.009244968, 0.012318698, 0.0009464538, -0.0075752493, 0.03339023, 0.028468959, -0.047550276, 0.0033597269, -0.0025836697], [-0.028267918, -0.06789761, -0.02738764, -0.008739937, 0.008273694, 0.026809959, 0.013062955, 0.0017371732, 0.031474512, 0.037459027, 0.010558749, 0.052050546, -0.06879371, -0.033377197, -0.009331861, 0.053319152, 0.0023735405, -0.035205606, 0.039198034, 0.06759433, -0.031242866, 0.03162856, 0.0077262707, 0.022738673, -0.028742902, 0.038282454, -0.0015624929, 0.004628564, -0.0048851976, 0.008523335, 0.012190012, -0.030525234, -0.0176702, 0.007659419, 0.01424216, 0.011813143, 0.01557679, -0.017472137, -0.038308587, -0.055929728, -0.07009292, 0.015804652, -0.043634266, 0.029609425, 0.007311807, 0.041380387, 0.006350378, 0.016852275, -0.016671635, -0.027311534, 0.03494508, 0.008466254, -0.052556247, 0.029370215, -0.009959975, 0.035351403, -0.0021071648, 0.026782794, 0.014825344, -0.022007516, 0.0013749754, 0.011317128, -0.05830556, 0.004030193, 0.011914467, 0.015785396, 0.01629832, 0.014787749, -0.009293578, -0.019374363, -0.0061205663, 0.030419096, 0.028540025, -0.026922286, 0.03688868, -0.00079821015, -0.06481411, 0.012645281, 0.007833554, -0.015518447, -0.00072301977, 0.012103818, 0.013784828, -0.053386096, -0.08011261, 0.008343841, -0.018741664, -0.015871491, 0.017006323, 0.0014625448, -0.0483841, -0.014270127, 0.027308324, 0.009594569, 0.020518608, -0.004657678, -0.012342227, 0.024242025, 0.034419317, 0.061071098, 0.010042358, -0.04576481, -0.015002317, -0.02288722, -0.0009091618, 0.0047640447, 0.033347167, -0.04653185, -0.0074250507, -0.0006684609, 0.010300166, -0.0050650355, -0.01823963, -0.0704534, -0.0027068541, -0.0072985105, 0.051050145, -0.031169167, -0.035679214, -0.027360132, -0.02248823, -0.010342117, 0.011023644, 0.03047503, -0.01982711, -0.0006918433, 0.03643983, 0.0051225745, -0.06922284, 2.4757812e-05, 0.03751175, 0.00691614, 0.049775124, -0.028971681, -0.01884207, 0.009131506, 0.017051026, 0.039397586, -0.04396483, 0.034469005, -0.03559348, -0.0016051314, 0.02625616, 0.014440223, 0.046284266, -0.02931875, 0.010310368, -0.032800432, -0.020071937, -0.005360524, -0.0110960845, 0.017366916, -0.009865644, 0.016993945, 0.020062996, -0.043609507, -0.0074923327, 0.032928806, -0.011641672, 0.0014631179, -0.019656785, -0.001623929, 0.029465921, -0.01381142, -0.017707795, -0.04795771, 0.0031159308, 0.0031080795, -0.019407658, 0.030806053, 0.07009211, 0.0043273447, -0.004670974, 0.028880445, -0.047794722, -0.034952525, 0.008052708, -0.035383496, 0.021220194, 0.03264363, 0.0054138512, 6.5766515e-05, -0.0034280398, -0.006245097, -0.00544328, 0.015178372, -0.010460977, -0.009703228, 0.00028035927, 0.0065259757, 0.048569784, -0.052617684, 0.042287745, 0.007325733, -0.046209082, 0.03124619, -0.04239454, -0.015334713, 0.012373518, 0.039212707, 0.00946482, 0.006602312, 0.041252013, -0.0041386806, -0.031170312, -0.061182972, 0.015974062, -0.0010655028, 0.036977164, -0.05358507, 0.015386522, 0.028366491, 0.048458375, 0.0756021, 0.02487147, 0.039655592, 0.022406278, -0.028828178, 0.043600794, 0.0709944, -0.051433895, 0.010963813, 0.047267932, -0.037446648, 0.002212156, -0.01432652, -0.009283262, 0.011222624, 0.03741822, 0.022100445, 0.058749367, 0.0124497395, -0.038929366, -0.046174236, 0.007189393, -0.02182997, -0.05876954, 0.05838534, -0.035257872, 0.04368, -0.032915052, 0.0040187887, -0.008467171, -0.012304977, -0.038580235, -0.01123271, -0.02691449, -0.01730846, -0.01621453, 0.027459161, 0.03500571, 0.007752175, -0.043400783, 0.0032799514, -0.034459203, 0.00867979, 0.0036215174, -0.008938258, 0.00017204386, 0.020537978, -0.0074200076, -0.043883678, 0.03464781, -0.052948706, 0.03853599, 0.018571109, 0.030600654, -0.022065628, 0.022301745, -0.056398295, 0.0011604078, -0.0515696, 0.030232038, 0.025186028, -0.034673657, 0.046005514, 0.02902074, 0.010792572, 0.05429113, 0.026481, -0.058696188, -0.018639652, -0.01609762, 0.0073351893, -0.0016117793, 0.017123235, 0.020652141, -0.029474633, -0.0027261102, -0.02701994, 0.0011993784, -0.0054242527, -0.0062978826, 0.05277815, 0.064201586, -0.027937813, 0.045900866, -0.03662689, -0.061333347, 0.0066726888, 0.0058889203, -0.044856567, 0.0063810963, 0.0035514277, 0.0055552055, -0.020418776, -0.049093824, 0.03481756, 0.008189792, -0.010806326, -0.018190114, -0.01788156, -0.07317308, -0.015117737, 0.0333827, -0.0065482114, 0.019497521, 0.072501875, -0.021792375, -0.02169151, -0.010307502, -0.028329814, 0.019945627, -0.031469014, 0.04326015, 0.050212797, 0.03336986, -0.0042977724, -0.062485047, -0.02786162, 0.031489186, 0.046848945, 0.0016491453, -0.013220672, 0.017532656, 0.022428744, -0.028384142, 0.013586994, 0.029973457, 0.035184573, 0.015297118, -0.066273905, -0.03667686, -0.0031173637, 0.01548922, -0.059554458, -0.03281052, -0.062994815, -0.008002962, -0.008900175, 0.0315183, -0.0372048, 0.024936616, 0.021209192, -0.014273794, 0.020671912, 0.026410164, -0.0014249495, 0.0043908437, 0.012965757, -0.018007338, -0.025900338, -0.042508245, 0.06138103, 0.001062752, -0.022772085, 0.055430904, -0.004144641, 0.02051414, -0.032429524, 0.06739993, 0.014627396, -0.017335052, -0.014594959, 0.012683335, 0.05491099, -0.030556642, 0.0081133405, 0.006519557, 0.009468372, 0.0035440922, -0.0173268, 0.01839047, 0.028101033, 0.02609244, 0.060097292, 0.053719867, 0.0072393673, -0.012201961, 0.047217958, 0.0064301537, -0.0042954804, 0.046966486, 0.0142903, 0.035750277, -0.0022286614, 0.039475184, 0.05283317, 0.028729146, 0.01691071, -0.009935218, 0.0013182102, -0.0016225536, -0.02565918, 0.00405157, -0.0195495, -0.021632826, -0.010450318, 0.022099556, 0.011396845, 0.030514918, -0.047692716, -0.015319125, 0.023066945, 0.015425721, -0.02153746, -0.04017734, 0.015183416, 0.02486051, 0.027619172, 0.021350058, 0.03872122, -0.07059461, 0.03389069, 0.017802242, -0.005990015, -0.014555759, -0.037887245, -0.060722314, 0.049106658, 0.01926066, 0.0315675, -0.018749457, 0.101932496, 0.066926785, 0.0041253846, 0.016948557, -0.011587601, -0.048532642, -0.025054904, -0.03614182, -0.019221574, -0.014390921, 0.015663441, -0.04127815, 0.015734276, -0.04530106, 0.036091387, 0.024126945, -0.060313694, 0.031149223, -0.024914838, -0.039263595, -0.038776234, -0.043019906, 0.035020784, 0.05510905, -0.06960269, -0.02959246, -0.050953407, -0.025584904, 0.007476687, 0.032507923, -0.00791333, -0.01436893, 0.015564296, 0.0663601, -0.014489193, -0.0016074238, 0.012515761, 0.029572519, -0.033455595, -0.01796179, -0.04860577, -0.019466216, -0.0032996659, 0.07199938, 0.015448645, 0.0017614724, 0.032449238, 0.014036303, 0.024003385, 0.031367686, 0.030564435, 0.014103241, 0.023121044, -0.019532079, 0.02490223, -0.0013393287, -0.017523946, 0.022313436, 0.04306621, 0.011757037, 0.03691023, -0.019518325, -0.028049683, 0.0026440425, 0.041148398, -0.034679275, -0.007442473, 0.04580745, 0.028555842, -0.05709701, 0.010887936, 0.0042340187, -0.06335065, 0.008104515, 0.065646715, -0.02887586, -0.0015597421, -0.042456895, -0.044004712, -0.005248656, -0.046852782, 0.049029637, 0.03144242, -0.012137288, -0.036507685, 0.0077734943, -0.03044844, 0.01655289, -0.026835175, -0.013586994, 0.0530514, 0.01674608, -0.02795065, 0.018306108, -0.059070304, 0.0042574266, -0.013056536, -0.022077547, -0.04444944, -0.030575553, 0.026483523, -0.0026380823, 0.014502576, 0.02043803, 0.008923268, 0.0019803382, 0.0034344585, -0.03381321, 0.022190334, 0.0024421976, 0.0005579677, -0.021645205, 0.0048528174, -0.011384697, 0.020578325, -0.021340316, -0.022506682, -0.004523802, 0.024247983, -0.044650253, -0.07249087, 0.055283275, -0.023734717, -0.03837667, 0.0064168577, 0.030498872, 0.034013566, -0.032362357, 0.039191157, -0.00061069266, 0.03132823, 0.028065959, 0.061061934, 0.011120384, -0.0933021, -0.058342237, 0.019146957, -0.012069433, -0.03258036, -0.05482663, -0.032737162, 0.007329229, -0.011212995, 0.007849143, -0.04211212, -0.018630024, -0.03522761, -0.0076538315, -0.027515098, 0.00199713, -0.033785243, 0.03205861, 0.043781895, -0.017224101, -0.018444112, 0.026894663, -0.0071779313, 0.025815979, -0.030200861, 0.036919855, -0.012455929, -0.056785252, -0.018909466, -0.0034288422, -0.0079417555, 0.012885066, -0.016030224, -0.025796263, -0.03550522, -0.001747718, -0.018551853, -0.005187678, 0.011627002, -0.010182338, 0.02846048, 0.009214949, 0.009061359, -0.009368653, 0.034572907, -0.026320305, -0.034396853, -0.00025835235, 0.010938138, -0.024027225, 0.0047122366, -0.019727333, -0.017171836, 0.0092165535, 0.006072999, 0.009511125, 0.01073572, -0.023336759, -0.0022488344, 0.013574386, 0.07838506, 0.045619246, -0.030313646, 0.05701999, -0.002290556, 0.07564519, -0.0021310055, -0.07139602, 0.07276963, 0.022256354, -0.033342354, -0.020727789, 0.013794686, 0.0023872948, 0.0061270995, 0.0051892833, -9.9260484e-05, -0.008357294, -0.006534687, 0.008014897, -0.025576653, -0.016350241, -0.0030442937, 0.05623508, -0.021783207, 0.0006294903, -0.044556726, 0.0434903, -0.0065000714, -0.010684371, -0.00033924505, -0.013274312, -0.039275285, 0.05452089, -0.04779358, 0.032223668, 0.028013004, 0.023695288, 3.851215e-05, 0.04020852, 0.006536864, -0.0341048, -0.03308652, 0.0260741, 0.0029672696, 0.0046544685, -0.017423194, 0.022171076, -0.026861306, -0.03144838, -0.0092814285, 0.0047498317, -0.009792058, -0.040606476, -0.052827667, 0.02785162, -0.0059599844, 0.028623238, 0.02413428, 0.021774037, 0.012803696, -0.044317394, -0.07129149, -0.0139093045, 0.0045604804, -0.013809357, 0.021054225, -0.015553407, -0.007738191, 0.039722532, 0.032752752, 0.039375465, 0.034393184, 0.030856028, 0.034106176, 0.006579159, 0.0009433185, -0.0074894093, -0.038094934, 0.037649296, 0.0010579379, -0.03261108, -0.082867146, 0.01662464, 0.03774374, 0.003728916, 0.017884308, 0.036137234, -0.009116835, 0.02746008, -0.030459559, -0.010251568, 0.0023565767, -0.0054158284, 0.0264959, -0.05231417, -0.024042586, 0.026545875, -0.03880191, -0.02720382, -0.025699526, -0.036302287, -0.02826425, -0.031494457, -0.03058713, 0.005984513, 0.0229239, 0.059783693, -0.005616355, -0.044378836, -0.04839143, 0.036598463, 0.025279615, -0.0019109362, -0.022425303, 0.018691689, -0.015179862, -0.017867804, -0.0444797, -0.04673908, -0.00978392, 0.032092426, 0.008486427, -0.0028370619, 0.041745797, 0.012095566, -0.007876652, -0.017240606, -0.037486993, 0.04470802, -0.023506166, 0.023641877, 0.009611533, -0.007577839, -0.07546548, 0.00096945174, 0.029650688, -0.006753381, -0.0033322182, -0.022916792, 0.01046178, -0.014764366, -0.03207466, 0.014548881, -0.01096496, 0.012768956, -0.014183474, -0.019704238, -0.0035620301, -0.06958504, -0.025439568, -0.018801723, -0.054852303, -0.049920917, -0.0327069, 0.011246922, 0.015221927, -0.042851645, 0.058199193, 0.0007890406, -0.014898701, 0.02857785, -0.07328174, 0.002019051, -0.006564029, -0.035841975, 0.02404399, -0.024389194, 0.044952847, 0.0011266522, 0.028513663, -0.033622943, -0.019264327, -0.0064493343, -0.016402049, 0.012873145, 0.038038544, 0.01027495, -0.0031396572, 0.0050551784, 0.0103616025, -0.037541095, -0.07823285, -0.024439627, -0.0036945408, -0.0007117584, -0.016846314, 0.017036239, 0.008921523, 0.019426629, 0.029308664, 0.026617398, 0.019113947, -0.011529804, 0.05202808, 0.011718698, 0.007457832, -0.009155347, 0.017694041, 0.015232931, -0.02945148, -0.032248653, 0.01683256, 0.041776974, 0.01686706, 0.01286214, 0.061181825, 0.016706938, -0.02692733, 0.009906792, -0.01640801, 0.009402925, -0.1070051, 0.0068881735, 0.066022664, 0.0193386, 0.024215432, 0.034505054, -0.029159658, 0.024577629, -0.03586765, -0.0002315887, -0.06323145, -0.034056205, -0.013257349, -0.00992175, 0.008272332, 0.029174559, 0.0025282768, 0.017939325, 0.03835856, 0.015402109, 0.02110649, 0.02302018, -0.0009504248, 0.054220065, -0.01745013, 0.043397922, 0.028344024, 0.006061079, -0.003078221, 0.037103705, -0.018967692, 0.018667733, 0.0357583, -0.016833019, 0.00012470601, 0.01840789, -0.061802834, 0.013448993, -0.014991772, 0.006534687, 0.0052807494, 0.0065608197, 0.028678713, 0.016116418, -0.012246863, -0.043810323, -0.0020145522, -0.04453655, 0.0073558204, 0.021894846, -0.0016496038, 0.006023025, -0.025672933, 0.019309258, 0.02795707, -0.005884565, -0.06284999, 0.076937534, 0.0075433385, 0.0571667, 0.039227948, -0.062232655, 0.04381491, 0.026378073, -0.040766943, -0.038079914, -0.008820572, -0.040468015, -0.05189971, 0.0011425271, -0.021721082, 0.032432273, 0.03975921, 0.024530176, 0.005966661, -0.062422693, 0.007001876, -0.00846763, -0.048110846, -0.038583674, -0.045429666, -0.0064825346, 0.034744836, -0.0145796, 0.009376562, -0.037980773, 0.06835356, 0.010053792, 0.015455522, -0.00531141, 0.0043619596, -0.0118305655, -0.00037618118, -0.023862861, 0.03196325, 0.014105075, 0.04310335, 0.016596789, 0.00019800517, -0.061179303, -0.0021967972, -0.019080477, 0.052050088, -0.015111663, 0.011229502, -0.0070830267, 0.008076778, 0.014447558, 0.022892723, -0.054104526, 0.02861659, -0.0067517757, -0.031443335, -0.016317002, 0.01916438, -0.025412519, 0.04644886, 0.0071898517, 0.0102967275, 0.0044545718, -0.03488559, 0.06761266, 0.008271172, -0.00053745083, 0.02237258, -0.0045105065, 0.0033034056, 0.0527158, -0.024421975, 0.004421562, 0.022242602, -0.023028431, 0.008414905, 0.014933086, -0.014757031, 0.014131208, 0.0015450708, 0.071495056, -0.009681737, -0.054590054, -0.06653387, 0.047490984, -0.027831675, -0.042882364, -0.028529251, 0.016521484, -0.019753065, -0.019752778, -0.012023012, -0.031107271, 0.017947579, -0.070678964, -0.0044100997, 0.025825836, 0.06251943, -0.012611812, 0.024630355, 0.039654676, -0.02473122, -0.04946427, 0.018154811, 0.011574735, 0.046242088, 0.0027875463, 0.043540735, 0.016941678, 0.023659756, 0.031871554, 0.018458553, -0.04665747, 0.036501724, 0.055572573, -0.0023153138, -0.0065076365, -0.0020214294, 0.02195502, -0.004347059, 0.011131845, 0.008134373, -0.021151882, 0.064740755, 0.05464324, -0.044119336, 0.0113624595, 0.012085479], [-0.029025964, -0.077956624, -0.047697976, -0.023808902, -0.011612218, 0.0321345, 0.012400924, -0.023025924, 0.044412594, 0.024061242, -0.016991334, 0.0094682835, -0.07670065, -0.010083481, -0.0048043844, 0.039474975, -0.002072165, -0.044441987, 0.02917227, 0.033009194, -0.030875947, -0.004172485, -0.020968646, 0.03199258, -0.025435941, 0.056696724, -0.0030433494, -0.012147439, 0.014076254, -0.010365026, -0.0027784114, -0.04866286, -0.018371759, 0.0014399792, 0.015721427, 0.017579045, 0.011296125, -0.01781917, -0.042912297, -0.05268522, -0.066671, 0.018993733, -0.022336856, 0.038781706, 0.005887041, 0.046331294, 0.023163022, 0.015586286, -0.0046652346, -0.032837022, 0.03780289, 0.015519288, -0.035308123, 0.010281039, -0.01656358, 0.030395318, 0.016775452, 0.037337434, 0.011433557, -0.006071429, 0.014725214, -0.026985101, -0.06654139, 0.009986491, 0.02141339, 0.03269043, 0.013726758, 0.004398579, 0.00095247827, -0.02252363, -0.0147166, 0.016319636, 0.008391066, -0.027525285, 0.07112245, 0.00956983, -0.072889924, 0.0076434948, -0.025682937, -0.038609967, -0.0057385387, 0.019145386, 0.008594828, -0.045944955, -0.059686694, 0.01368133, -0.030094113, 0.009836295, 0.055295374, 0.0129680205, -0.044826034, -0.006774621, 0.032811064, -0.011550946, 0.008829989, 0.022442602, -0.012364848, 0.060923487, 0.030374704, 0.02213319, 0.041964017, -0.059746537, -0.02330842, -0.010647141, -0.017768396, 0.007610115, 0.017292729, -0.036672134, 0.0019412232, 0.0056672217, -0.01272427, -0.00010965907, -0.007831724, -0.051187214, 0.014744898, -0.004462714, 0.018192144, -0.017709224, -0.031993918, -0.0146234045, -0.016550599, 0.013338155, 0.004135168, 0.01633109, -0.026850224, 0.007164774, 0.014016844, 0.0052365307, -0.047016922, 0.0019702367, 0.03273681, 0.024050554, 0.03980481, -0.01997761, -0.038968004, 0.019919204, 0.0037121838, 0.06917855, -0.03297426, 0.034836557, -0.03498783, -0.00037669658, 0.02463521, 0.018559393, 0.04440572, -0.021455765, 0.010157732, -0.056317616, -0.015843397, -0.013230858, -0.014830602, -0.022639588, 0.0029389395, 0.013245794, 0.03245832, -0.065387726, 0.017870707, 0.018020164, -0.028510977, 0.026508292, -0.012418245, 0.015919391, 0.023450436, 0.021701233, 0.0032159025, -0.043694127, 0.014161577, 0.0012323046, -0.0050048055, 0.058193177, 0.080412835, -0.008253539, 0.0056116045, 0.029566148, -0.045256272, -0.0073165223, -0.010952546, -0.03229417, 0.026097333, 0.013910298, 0.0022363197, 0.01271549, -0.012932517, -0.0066517913, -0.03434362, 0.020286642, -0.025495593, -0.02125, -0.0093598645, 0.010752507, 0.028523766, -0.024923816, 0.037192643, 0.0020622395, -0.030280793, 0.02351414, -0.035750575, -0.011536524, 0.02292285, 0.05295779, 0.029354654, -0.008753638, 0.02051245, -0.019335978, -0.039342888, -0.057275053, 0.018814024, -0.0037082948, 0.034997705, -0.038919903, 0.01185406, 0.049762122, 0.02188982, 0.047794178, 0.013421736, 0.04134786, 0.032195676, -0.04038966, 0.04064849, 0.041179508, -0.03554901, 0.014400174, 0.027007243, -0.01327896, -0.028985117, -0.003814303, -0.015322492, 0.00445317, 0.021587852, 0.0026294317, 0.07599976, -0.009241902, -0.021005677, -0.054294314, -0.004653782, 0.007055783, -0.05566214, 0.027836034, -0.04159028, 0.029999057, -0.019221354, 0.02747871, 0.031532183, -0.021021329, -0.023751259, -0.012768935, -0.045593742, -0.018455556, -0.032856278, 0.008036703, 0.050452337, -0.00872348, -0.030922139, -0.009860059, -0.0068437187, 0.0013605742, -0.013444451, 0.0057385387, 0.0034350299, 0.059030745, -0.0035677163, -0.03603307, -0.0076707727, -0.034299906, 0.053696107, 0.0060979603, 0.034177743, -0.031415462, 0.031154843, -0.02219408, -0.044234693, -0.07310452, 0.035715643, 0.020247893, -0.018494494, 0.01747368, 0.008728443, 0.014890967, 0.06691704, 0.019458042, -0.06338352, -0.017502408, 0.00046545456, 0.0141741745, 0.0034018173, -0.003853815, 0.008282171, -0.06307811, -0.004020642, -0.044959646, -0.0026163568, -0.0057097636, 0.017826423, 0.06348735, 0.048870344, -0.02616328, 0.04090427, -0.011903449, -0.060121227, -0.024774361, 0.01852198, -0.012254329, 0.008442126, -0.012623487, -0.0046074945, -0.030473197, -0.068227224, 0.023952061, 0.02086061, -0.01853496, -0.01614799, -0.019290071, -0.07080254, 0.00861067, -0.0018675445, -0.030604042, 0.0248698, 0.09366049, -0.013853119, -0.011183603, -0.02306343, -0.029837577, -0.014241364, -0.07313811, 0.009305655, 0.07679227, 0.021086227, 0.0030693088, -0.066265576, -0.03291218, 0.044215225, 0.041337937, 0.022529643, 0.014834802, 0.009836867, 0.01696213, -0.013314463, 0.00084596867, 0.02349062, 0.034202557, 0.018960234, -0.064828075, -0.02906433, -0.017063415, 0.035086323, -0.065679386, -0.028253675, -0.059581235, 0.017935986, 0.0065570204, 0.02134334, -0.033088982, 0.0103063295, 0.021458438, 0.0025081292, 0.002386254, 0.011571371, 0.006787983, -0.009379716, -0.013930233, -0.0012223789, -0.018018827, -0.044119786, 0.024497492, 0.0054573757, -0.026651068, 0.066743724, 0.0024189893, 0.04925248, -0.02537906, 0.06639785, 0.018186035, -0.0136494525, 0.00828179, -0.009153717, 0.0326011, -0.055039886, 0.002350178, 0.047926266, 0.026707185, 0.009607718, -0.018995358, 0.06513348, 0.026937764, 0.040775996, 0.058901712, 0.04565871, 0.029425662, -0.0234407, 0.041376114, 0.01890717, 0.00961564, 0.03764408, 0.029015753, 0.012694875, -0.03806706, 0.030742526, 0.055380408, 0.02462204, 0.009033082, -0.0032992705, 0.011399962, -0.017672958, -0.016699484, -0.010585298, -0.049710583, -0.049567048, 0.025582153, -0.0049498333, 0.03241633, 0.026581587, -0.0059958408, -0.025499409, 0.018287392, 0.034521326, -0.0057270858, -0.026198305, 0.047588028, -0.0011527803, 0.006480383, 0.051787283, 0.046806958, -0.06357286, 0.017645663, 0.039453596, 0.0012758246, -0.0006776148, -0.002610821, -0.03837247, 0.027264928, 0.0070643728, 0.0321909, 0.0021821107, 0.094113246, 0.05230127, -0.02538555, 0.002620365, -0.008639112, -0.07576459, -0.033566937, -0.032569174, -0.040719494, -0.0160421, 0.0025188182, -0.035831317, 0.0012937671, -0.033772323, 0.033007666, 0.034636326, -0.03748756, -0.0004140131, -0.011624816, -0.030225819, -0.02452393, -0.044252258, 0.029653952, 0.06571069, -0.058747485, -0.04058817, -0.040606175, -0.06832495, -0.013954285, 0.03438027, -9.601133e-05, 0.021155467, 0.008358904, 0.027919257, -0.06836465, 0.017440278, 0.006683572, 0.0009047589, -0.023279408, -0.007767565, -0.0552697, -0.0067272834, 0.0070807887, 0.027717117, 0.017155178, 0.0027368004, 0.014914588, 0.026692487, 0.012814488, 0.020927034, 0.020197121, 0.043095157, 0.016066007, -0.033918846, -0.01409038, 0.009985179, -0.009352993, 0.023621652, 0.030703776, 0.0059943143, 0.06914038, -0.03633199, -0.0077057206, 0.00080697, 0.042861905, -0.047852207, -0.0043210587, 0.067375146, 0.019447736, -0.08247736, 0.03502066, 0.015654238, -0.07172676, 0.028046764, 0.057359807, -0.035682622, 0.006991458, -0.046168663, -0.0643379, -0.015334328, -0.028564423, 0.043276493, 0.041073766, -0.0086722765, -0.044549644, -0.013987879, -0.010956364, -0.0003260186, -0.012794894, -0.01887663, 0.04404458, 0.01858268, -0.03383264, 0.044156052, -0.048602734, 0.023456542, -0.004426829, -0.002441322, -0.06039285, -0.055146772, 0.002134773, 0.008526876, -0.02271632, 0.047926646, 0.005372245, -0.0019014253, -0.034822147, -0.02623295, 0.0103869755, 0.00094961515, 0.0098721795, -0.03326459, -0.009497869, -0.008110381, 0.022607902, 0.011663946, -0.0076167723, -0.03916728, -0.00047833877, -0.05479785, -0.06562518, 0.02779242, -0.015942844, -0.021908145, 0.03504242, 0.05971714, 0.0014638389, -0.039813973, -0.003408665, 0.028759308, -0.0020685385, 0.015149559, 0.025510004, -0.020308975, -0.072484545, -0.07924619, 0.040177785, -0.027010452, -0.030032651, -0.031726878, -0.043194793, 0.00036252395, -0.02811777, 0.035771284, -0.03220789, -0.00040160608, -0.03752039, 0.010697044, -0.02931018, 0.010290678, -0.016314961, 0.0088193, 0.04136008, -0.018749125, 0.009502092, 0.018198252, -0.025859307, 0.026079964, -0.008742567, 0.04654355, -0.0067914184, -0.028684294, -0.02735006, -0.041008487, -0.022906147, -0.0057142973, -0.03513748, -0.016865142, -0.06975042, 0.0028799584, -0.00152282, 0.020773951, -0.0333104, -0.024425438, 0.028069286, 0.0018354772, 0.008552358, 0.006805257, 0.022201905, -0.037006546, -0.026052093, -0.012126824, 0.001033792, -0.03641101, 0.006324914, -0.027868865, -0.008265755, 0.0247505, -0.0021139674, -0.005204368, 0.019176308, -0.006971607, 0.026449881, 0.012732669, 0.05175078, 0.02672093, 0.0041084453, 0.02981658, 0.002794827, 0.074387215, -0.017255317, -0.05815882, 0.080796115, 0.017703593, -0.030193752, -0.036882095, -0.018226502, 0.015561091, 0.022503683, 0.0045550982, -0.005032292, 0.004410795, -0.0036506257, 0.021589747, 0.0014631709, -0.029761605, 0.02339699, 0.05241379, -0.014181046, 0.012250512, -0.052304134, 0.042927563, 1.0402819e-05, 0.0018115221, -0.021933341, -0.025214141, -0.031187842, 0.024487663, -0.06467232, 0.03695845, 0.046697773, 0.008852942, -0.0020710197, 0.020877026, -0.007410064, -0.039510883, -0.028508114, 0.04951742, 0.003070072, 0.030245671, -0.018384214, 0.00021826832, 0.004794077, -0.016765526, -0.013082356, -0.02304883, 0.04108598, -0.031301413, -0.020730814, 0.009795829, 0.007867322, 0.06523884, 0.027006099, 0.003920622, 0.01407301, -0.048035447, -0.053297553, -0.026430605, 0.0024932406, -0.0006707432, -0.016958123, -0.011780906, -0.005041454, 0.040094182, 0.015986746, 0.042228956, 0.026129209, 0.03085643, 0.06745302, 0.024264717, 0.030907251, 0.0035841053, -0.024131676, 0.036090147, -0.006982677, -0.012748321, -0.087763146, -0.009514666, 0.009290576, -0.006358317, 0.044558425, 0.041658614, 0.009302601, 0.027460389, -0.023625279, 0.024821317, 0.010243388, 0.0029654715, 0.013197264, -0.058518432, -0.017971108, 0.024664415, -0.026437951, -0.038377047, -0.05356173, -0.0074602524, 0.0069368673, -0.0071349973, -0.033408128, -0.006881894, 0.02340997, 0.016130667, -0.007969132, -0.03293475, -0.05352355, 0.007885528, 0.004752084, 0.005792175, -0.029299682, 0.0063188053, -0.009851684, 0.014389293, -0.030098312, -0.03889337, -0.018909462, 0.032054424, -0.005608682, -0.006551676, 0.039546743, 0.022999201, 0.021476094, -0.01658801, -0.06335756, 0.044166364, -0.032533526, 0.018633071, 0.008455105, -0.0005756863, -0.077079356, -0.009534517, 0.017119925, -0.0054606213, 0.0013889672, -0.015446946, 0.006477043, 0.009138447, 0.0037282177, 0.006139095, 0.010551513, -0.002905345, -0.02065408, -0.0066944524, 0.0075278236, -0.081988715, -0.03229951, 0.004539208, -0.05600859, -0.06823027, -0.0023852042, 0.010982087, -0.028066041, -0.0594837, 0.05825273, -0.018659603, -0.019857358, 0.022386866, -0.064785324, 0.015990565, -0.026937, -0.06841963, 0.03180953, -0.032630876, 0.03626747, 0.0031273356, 0.056986067, -0.04048244, -0.024352139, 0.004961667, 0.00013246892, 0.014295955, 0.022411298, 0.000301974, 0.0041336413, 0.007501387, 0.015969234, -0.045376904, -0.061938956, -0.00012335453, 0.01283393, -0.007133852, 0.0035896404, 0.029546844, -0.0078260815, -0.0034588897, 0.010008794, 0.03362191, 0.025174439, -0.003942764, 0.040603824, 0.043318864, -0.020496225, -0.027406178, 0.0109463, -0.008875132, -0.0017782139, -0.034127355, -0.012931325, 0.050084706, 0.0031376102, 0.016249586, 0.047906414, 0.0018683082, -0.005402785, -0.024024213, -0.0032865272, 0.01841967, -0.09006971, -0.022788186, 0.06283035, 0.020985825, -0.006665153, 0.0044932542, -0.044171326, 0.021719558, -0.05262452, -0.020179179, -0.07336106, -0.032921962, 0.012899877, -0.022123836, 0.0004685563, 0.016132863, 0.026889568, -0.015654048, 0.019455371, 0.037496626, 0.013716451, 0.010569264, -0.014151842, 0.064119086, -0.01419059, 0.002537906, 0.052286666, -0.005394315, -0.0072161206, 0.022616683, -0.008332873, 0.011841271, 0.049144063, -0.020461293, 0.026198115, 0.0269977, -0.048481334, 0.0011479368, -0.029564727, -0.00020003953, 0.010568787, -0.020639192, 0.039533, 0.024394322, -0.007862909, -0.020442396, -0.029611956, -0.017979888, -0.009993959, 0.020016741, -0.00039645238, -0.007374918, -0.027294707, 0.01862811, 0.03125503, -0.016279934, -0.06893576, 0.06304242, 0.012959049, 0.056424886, 0.03779411, -0.03879816, 0.04826297, 0.03130237, -0.024660978, -0.008287134, -0.0039587975, -0.04543951, -0.053994257, 0.029198326, -0.01117091, 0.03364491, 0.06359343, 0.025683511, 0.0030962226, -0.06590615, -0.012767121, -0.02634872, -0.029301114, -0.039087113, -0.010744108, -0.018169621, -0.0063936533, 0.009543107, -0.0012433755, -0.031012138, 0.08502444, -0.00035503198, -0.0030109002, 0.010474971, -0.023222147, -0.0059479307, 0.001557512, -0.01667276, 0.050148077, 0.029422607, 0.03503567, -0.018041732, 0.005625921, -0.051359765, -0.012451697, -0.022898417, 0.028173696, -0.016796257, 0.015515279, -0.008334281, 0.0040611075, 0.009481357, 0.04961133, -0.018022645, 0.030953635, 0.0020994844, -0.02722141, -0.0024591691, 0.04910321, -0.040830202, 0.05706929, -0.005811454, 0.003344554, 0.023070017, -0.042434342, 0.061673254, 0.01644533, 0.022059988, 0.04112606, -0.007596921, 0.020844959, 0.02528553, -0.033502802, 0.0009681302, 0.0038904634, -0.024567831, 0.013731673, -0.0010731128, -0.011630924, 0.021682145, 0.026046367, 0.035755917, -0.004206938, -0.040404454, -0.04561864, 0.050991755, -0.0047234525, -0.024932789, -0.020087557, -0.008056554, -0.02108279, -0.0016373463, 0.002215705, -0.02049489, -0.0012181796, -0.07117895, -0.020546427, 0.018908411, 0.03020215, 0.0055464203, 0.034708384, 0.012480961, -0.029482923, -0.024442235, 0.00391041, 0.006589852, 0.04312455, 0.0037719284, 0.01581572, 0.041769177, 0.015217128, 0.0012513923, 0.007480939, -0.05237447, 0.025027081, 0.045753885, 0.0069857314, 0.0074568647, 0.004999843, 0.010231602, 0.00677412, -0.01483003, -0.0024861782, -0.016660925, 0.031220863, 0.025044262, -0.064657435, -0.005110182, 0.0043046675], [-0.00872509, -0.087099865, -0.011124933, -0.02540624, -0.027002435, 0.03487464, 0.029820291, -0.026918313, 0.06681455, 0.020516116, -0.012878868, 0.0062165344, -0.07394686, -0.025541266, -0.02632396, 0.03991613, -0.014036085, -0.0113061145, 0.039084543, 0.043127947, -0.02853326, -0.011374029, -0.006537488, 0.035614602, -0.023389429, 0.07211866, -0.014492745, -0.0046283766, 0.016063757, -0.01567797, -0.022760382, -0.0662488, 0.015710386, 0.0050430982, 0.01705113, 0.029420571, 0.023869522, -0.013175744, -0.0110656675, -0.06277403, -0.07576007, 0.009981177, -0.035153802, 0.046637673, 0.007746958, 0.03870519, 0.014301995, 0.0017274701, -0.0074446243, -0.012333408, 0.034088597, 0.012734198, -0.03846407, 0.034288995, -0.053208645, 0.038267963, 0.02597367, 0.05113397, 0.04599764, -0.006660592, 0.028052099, 0.011065232, -0.033746213, 0.021732152, 0.021226877, 0.012732054, 0.012561129, -0.0007624659, -0.00576377, -0.031989273, 0.0005956262, 0.010249084, -0.012866142, -0.022497833, 0.04771118, -0.01358936, -0.048692793, 0.011202569, -0.008774519, -0.03715132, -0.0045421105, 0.012920125, 0.0285054, -0.06464939, -0.06638972, 0.00017244896, -0.005923979, -0.0017489026, 0.070110425, 0.020247405, -0.05420661, -0.011114962, 0.026253901, -0.010916711, 0.01637185, 0.008127789, 0.0032588316, 0.05008806, 0.015767986, 0.04963797, 0.038533725, -0.060227834, -0.008228657, -0.010449479, -0.017429015, -0.0067116288, 0.022088468, -0.03714918, -0.002562137, -0.011502357, -0.015963024, 0.005372089, 0.010447335, -0.08106678, 0.024563938, -0.016318, 0.023166798, -0.011925116, -0.038587842, -0.020190878, -0.036028255, 0.0010598436, 0.020095235, 0.026134279, -0.024329253, 0.008267637, 0.0019535844, -0.006588659, -0.05435744, -0.0012522014, 0.03648423, 0.0004457987, 0.047074627, -0.031799592, -0.043392505, 0.0118222395, -0.012182442, 0.052643362, -0.016529916, 0.04257056, -0.008964399, -0.0014617054, 0.035248507, 0.015902342, 0.032035355, -0.007748968, 0.019325804, -0.029859405, -0.030117134, -0.003940925, 0.0063885315, -0.014991322, 0.02426676, 0.03092943, 0.015224669, -0.047688674, 0.014179828, 0.009822574, -0.0193108, 0.010213151, -0.013071292, 0.02490043, 0.029080864, 0.01922882, -0.03071671, -0.030583292, 0.02116365, 0.0005347441, 0.00219296, 0.057713788, 0.05067317, -0.009412006, -0.0038128651, 0.025772737, -0.058549657, -0.013578643, 0.02579953, -0.049612254, 0.010105486, 0.04299145, 0.014380223, 0.0033515277, 0.021286888, -0.013296803, -0.024383903, -0.005925084, -0.018724082, -0.015115497, -0.032312904, 0.021325467, 0.03583107, -0.038827356, 0.022402458, -0.004709017, -0.028672338, 0.0068187914, -0.033593506, -0.0049761212, 0.010300523, 0.020396363, 0.01160577, 0.018722475, 0.031899724, -0.0237787, -0.026697021, -0.047151785, 0.038150083, -0.019289367, 0.037897177, -0.02513726, 0.03541367, 0.028467892, 0.050022688, 0.06592999, 0.024473386, 0.030583695, 0.008395296, -0.04104349, 0.034242913, 0.07585436, -0.041120917, -0.010474662, 0.044822063, -0.02135976, -0.017172359, -0.007034189, -0.03395786, 0.026952606, 0.02995478, 0.0061170063, 0.0704212, -0.0092428215, -0.03821438, -0.055279043, -0.00085472665, -0.0076764985, -0.030508278, 0.028434671, -0.030402185, 0.031043023, -0.02092709, 0.022517122, 0.0373485, -0.025600204, -0.035661757, 0.014954351, -0.026662191, 0.013293589, -0.01309882, 0.046395216, 0.034263544, -0.022531053, -0.028036024, -0.0076881526, -0.008464483, -0.00014413445, -0.0086520845, 0.025997782, -0.022984354, 0.042643283, -0.0015495792, -0.040464807, 0.016791394, -0.035537444, 0.050649595, 0.013253938, 0.033799257, -0.016466156, 0.038145795, -0.024611091, -0.03150436, -0.060872957, 0.034013584, 0.013403968, -0.017472684, 0.019332234, 0.017275771, 0.0074381945, 0.043411795, 0.012403265, -0.048879795, -0.004819127, 0.007657343, 0.042934045, 0.031943463, -0.0011005657, -0.00559174, -0.053903066, -0.016887842, -0.0638971, -0.005817888, -0.009558417, 0.023524456, 0.0260953, 0.02842985, -0.03762177, 0.034427237, -0.027328748, -0.048737805, -0.021909507, 0.008508755, -0.025950896, -0.017325068, 0.016095906, 0.0038428707, -0.008557916, -0.093007974, 0.033634227, -0.006044136, -0.016881948, -0.015097146, -0.0020800368, -0.05850037, -0.002533069, 0.019291243, -0.01559043, 0.022413174, 0.092160314, -0.025489291, -0.002434211, -0.046386644, -0.04331106, 0.016285585, -0.04847204, 0.019878097, 0.06637257, 0.036523346, -0.005267605, -0.06158881, -0.027804552, 0.04657632, 0.016674051, 0.0035128084, 0.015230832, 0.02241947, 0.011948959, -0.0014564812, -0.0024919452, 0.0016031609, 0.027496122, 0.013458353, -0.05087678, -0.043024935, -0.024708608, 0.045111403, -0.07432622, -0.022416389, -0.0435854, 0.0007137066, 0.012586312, 0.020950396, -0.021093037, -0.011738651, 0.037824575, 0.0022011313, -0.0167279, 0.014982748, 0.0011723649, -0.0021446026, -0.023244759, -0.015773345, 0.004339572, -0.046826012, 0.03937402, 0.02545607, -0.027004043, 0.073171, -0.012642439, 0.054027375, -0.011063524, 0.04997875, 0.007245033, -0.060447518, 0.0047711716, 0.0022911483, 0.023554461, -0.04180649, 0.01899708, 0.05600936, 0.00034935187, 0.021475093, -0.021788413, 0.045068532, 0.0074446243, 0.013789755, 0.029592033, 0.033462767, 0.016938912, -0.017228086, 0.053326532, -0.003071296, -0.0022733323, 0.047833346, 0.017830074, -0.0028664637, 0.00017306849, 0.024720397, 0.047303956, 0.025696652, -0.0056820586, -0.00860145, 0.011253203, 0.0029834223, -0.023350852, -0.009321453, -0.06228644, -0.052902166, 0.020057729, -0.0032510622, 0.026839012, 0.016267367, -0.023453997, -0.014380223, 0.041060634, 0.018953947, -0.021054344, -0.026604323, 0.040992048, 0.010958563, 0.012345196, 0.02060533, 0.055221174, -0.043612722, 0.03659461, 0.026018946, -0.009132979, -0.020811085, -0.007864302, -0.06452722, 0.07178471, 0.0014372086, 0.031042755, -0.019941991, 0.08303001, 0.04537127, -0.040910605, 0.022890048, -0.030652948, -0.04151072, -0.0177205, -0.026006352, -0.019725522, -0.017624052, 0.020260267, -0.015328618, 0.018813564, -0.025250854, 0.02738983, 0.04934003, -0.03280157, 0.0072485157, -0.0075718802, -0.014427376, -0.040709138, -0.025390234, 0.035466716, 0.07017043, -0.042927414, -0.013619098, -0.046189465, -0.042915627, 0.0055510513, 0.034809805, -0.00062811, 0.0148538845, -0.013262511, 0.03927101, -0.04809911, 0.012677669, 0.016948389, 0.0018003411, -0.04611445, -0.017530285, -0.046987824, -0.016662799, 0.011408054, 0.022132406, 0.032588314, -0.016591368, 0.033996973, 0.034353293, 0.0019814468, 0.024689319, 0.02427674, 0.035314545, 0.0016160203, -0.01861424, -0.005312613, 0.017592305, -0.01732922, 0.029032776, 0.04351467, 0.024702178, 0.049592964, -0.026889378, -0.0068427688, 0.0039314814, 0.019256147, -0.0383044, -0.0054685357, 0.06722881, 0.035288792, -0.05908119, 0.014077487, 0.0009848294, -0.06924883, 0.019404033, 0.048956417, -0.015955523, -0.0006119016, -0.026239702, -0.044705253, -0.00090934633, -0.045432888, 0.06015711, 0.032148946, -0.0195337, -0.042235143, -0.022127047, -0.029181063, -0.0055677956, -0.030319203, -0.01833776, 0.051524043, 0.0013781182, -0.03111375, 0.04657096, -0.05815982, 0.008083451, 0.0032390065, -0.019416891, -0.05449032, -0.024463203, -0.0062443973, 0.0014781649, 0.01471638, 0.029979963, 0.02105756, 0.008909612, 0.003499279, -0.016885966, 0.0015281466, 0.0016958568, 0.01357007, -0.014512034, -0.01140591, -0.035190236, 0.034928758, 0.007303169, -0.023841659, -0.003292052, -0.0004889319, -0.039750766, -0.048579197, 0.059957784, -0.013687413, -0.010309631, 0.046819583, 0.03835309, 0.030147139, -0.037039872, -0.006081241, 0.023723645, 0.015455003, 0.020371715, 0.016373994, -0.026874911, -0.07780259, -0.07013614, 0.043943323, -0.025369804, -0.018711558, -0.05187768, -0.034085922, -0.0027905286, -0.0008873109, 0.0069002355, -0.054546047, 0.004935399, -0.03163267, 0.010803117, -0.011804959, -0.0080833165, -0.025601545, 0.030412903, 0.026981004, 0.005732894, 0.0004415122, 0.0056753606, 0.011064059, 0.046410754, -0.033684596, 0.04855348, 0.024756832, -0.028132202, -0.004666955, -0.04558292, -0.0072514624, -0.023711992, -0.016964998, 0.005963629, -0.06855442, 0.0029234109, -0.016795816, -0.013474694, -0.0023040078, -0.010612368, 0.029701073, 0.031513467, 0.0031319603, 0.019977354, 0.004702319, -0.047387548, -0.006823614, 0.0065091234, 0.01750028, -0.028103672, 0.016730847, -0.037830334, 0.008882218, 0.027913857, -0.013776359, -0.03773536, 0.0022932915, -0.007423192, 0.005778237, 0.0072664656, 0.07013614, 0.027236586, 0.0012945309, 0.04243018, -0.012505404, 0.064058915, -0.031287353, -0.07194934, 0.10035615, 0.025160436, -0.01203603, -0.02970154, 0.00093231944, 0.030734528, 0.0070312424, -0.0069377422, 0.0007479988, 0.02421673, 0.0068880455, -0.007914129, -0.0026671567, -0.022536278, 0.019801876, 0.061674405, 0.0035149516, -0.010974579, -0.058974024, 0.040992048, -0.009505372, -0.0027573078, -0.0026983682, -0.024402658, -0.023801072, 0.039571602, -0.047758333, 0.02952452, 0.04322747, 0.017089576, -0.0058843284, 0.03165171, -0.015847923, -0.03296553, -0.006196174, 0.03332047, 0.016883554, 0.024850065, -0.022992926, 0.006514448, -0.0012234014, -0.016438829, -0.03261323, 0.015796652, 0.0034710146, -0.060092807, -0.0139863985, 0.015315758, -0.01654867, 0.05600132, 0.038856823, 0.027756862, 0.024144929, -0.028213914, -0.056106344, -0.047510788, 0.017932346, -0.035676755, 0.0011431294, -0.025664503, -0.022533195, 0.03179638, 0.019278651, 0.045213204, 0.03592752, 0.015420242, 0.0617817, 0.01401051, 0.020949325, -0.028773976, -0.030339496, 0.007233647, -0.0066849045, -0.022875851, -0.08479177, -0.016596358, 0.01966551, -0.006879874, 0.061297324, 0.019548703, 0.020798761, 0.008030807, -0.04747006, 0.021346899, 0.00681638, -0.00014071862, 0.012173734, -0.07096773, -0.004354039, 0.016303534, -0.027729537, -0.042850256, -0.028882613, -0.037903607, -0.0104468, -0.023781782, -0.032772634, 0.0146277705, 0.034127176, 0.034511894, -0.023391573, -0.040110096, -0.04245054, 0.03834619, 0.024390334, 0.019984322, -0.034854814, 0.008401591, 0.003181406, 0.010873846, -0.045953702, -0.03278228, -0.0044891983, 0.019273829, 0.0029266258, 0.020744644, 0.046753142, 0.0021164722, 0.0018432062, -0.02430822, -0.07442053, 0.023774145, -0.020758776, 0.008941693, 0.0076463586, 0.022232067, -0.06471475, -0.009887944, 0.005429287, -0.0018635673, -0.009268742, -0.03684135, 0.03803649, 0.014124104, 0.0069291694, 0.0062304656, 0.019914664, -0.015246905, -0.03324844, 0.008627705, -0.0049595106, -0.0638821, -0.04512855, -0.017252197, -0.0884096, -0.043709707, -0.019824648, 0.0006644115, -0.0017553325, -0.05833962, 0.066284694, -0.044918507, -0.0072485157, 0.013394859, -0.06005959, 0.019062182, -0.017416157, -0.06678408, 0.017106187, -0.049585246, 0.035299543, 0.0021847887, 0.062158912, -0.013485411, -0.03940282, -0.014057127, 0.0020876722, 0.03263761, 0.019196672, 0.002038779, 0.0019517089, 0.010785436, 0.017152535, -0.043199614, -0.10032185, -0.03389517, 0.032665893, -0.005436387, 0.025150657, 0.019151127, -0.025651911, 0.0011224, 0.012249284, 0.019843133, 0.014144464, 0.009823914, 0.0521981, -0.0063311993, 0.023027219, -0.01165319, 0.008471247, 0.0057340325, -0.017252197, 0.002719801, -0.008087871, 0.028951198, 0.0054015587, 0.01655242, 0.04339183, -0.003347777, 0.007746557, -0.008697328, -0.0026908668, 0.055882104, -0.07219796, -0.010947787, 0.058313902, 0.017657273, -0.00116915, 0.009768994, -0.038219202, 0.0039489623, -0.045683652, 0.014868887, -0.053020045, -0.04068556, -0.009743274, 0.007869527, 0.011513609, 0.013418971, 0.008235489, -0.014071862, 0.022379417, 0.0182172, 0.02147764, 0.019738114, -0.011117105, 0.057332285, -0.007185825, 0.028053172, 0.025792027, -0.02257124, 0.007274503, 0.029907092, -0.01705716, 0.007677168, 0.041926514, -0.019195063, 0.008290008, 0.037659276, -0.07874777, 0.006492881, -0.040520534, 0.013901472, -0.0015752983, -0.017972734, 0.025765236, 0.022927323, 0.0030836198, -0.020390335, -0.029056218, -0.005977695, -0.019466255, 0.018800704, 0.00019142017, 0.0035476363, -0.018215593, 0.015810853, 0.020036293, -0.035016634, -0.055879157, 0.05927837, 0.01502106, 0.045004237, 0.04786549, -0.031188766, 0.04327248, -0.0005422456, -0.01480191, -0.036583357, -0.013986934, -0.049074963, -0.04372257, 0.02633856, 0.0070716967, 0.04520356, 0.05809529, 0.024984017, 0.00902528, -0.06657833, -0.011993164, -0.012344124, -0.04117637, -0.036088265, -0.03025966, 0.0054321005, 0.01935889, 0.013840121, -0.020146674, -0.049102157, 0.07399401, 0.0014087267, -0.024386583, 0.0045989067, -0.0032993525, -0.016398106, 0.009162449, -0.014267167, 0.046185173, 0.03370256, 0.03389785, -0.015209666, 0.035107184, -0.05511615, -0.010881346, -0.012873018, 0.031832278, -0.01909567, 0.017200692, 0.006874516, -0.01132393, 0.001058772, 0.04852348, -0.033788543, 0.024938073, -0.0027299812, -0.032511156, -0.012480221, 0.034077883, -0.058798816, 0.0674442, 1.9289368e-05, -0.011109069, 0.031605627, -0.062493265, 0.06113283, 0.019664438, 0.0072343163, 0.035487078, -0.01844385, 0.025594847, 0.011788483, -0.025978493, -0.012930306, 0.014605267, -0.034710146, 0.0027369468, 0.016251292, -0.011871534, 0.031655595, 0.02039154, 0.056961503, 0.010786507, -0.055681977, -0.06187165, 0.03987702, 0.008575195, -0.028222488, -0.030211436, 0.004145071, -0.04682816, -0.0109473355, 0.017158294, -0.017904954, -0.0073066517, -0.060049944, -0.00425277, 0.013354136, 0.038025774, -0.011517093, 0.051043153, 0.0019117907, -0.022715373, -0.017722642, 0.022475328, 0.02518334, 0.04075736, 0.029631885, 0.027780974, 0.014056591, 0.018527705, 0.0011723649, 0.004940757, -0.027806161, 0.03615256, 0.05562732, 0.0002207561, -0.0077772317, 0.0055703404, -0.009013761, -0.0048153764, -0.018637815, 0.004670639, -0.0015608313, 0.04164789, 0.017607441, -0.052312765, 0.0023040078, 0.0029185885], [-0.031818904, -0.09430841, -0.032103773, -0.052431367, -0.01440225, 0.018498268, 0.015126923, -0.01712345, 0.041442633, 0.018388195, -0.012825427, 0.023977928, -0.07767625, -0.030426433, 0.009943898, 0.06261012, -0.0061036367, -0.036343448, 0.036803357, 0.043011613, -0.041478913, -0.0051511554, -0.0036498385, 0.02992571, -0.016251685, 0.055967458, 0.004472572, -0.004015607, 0.02047077, -0.029152373, -0.0055565774, -0.05071187, 0.0062550795, 0.0038518445, 0.015818255, 0.034499895, 0.013639335, 0.009688815, -0.03538343, -0.05380619, -0.060476314, 0.0064308546, -0.024156032, 0.012579463, -0.011522683, 0.053651255, 0.0338638, 0.023138035, -0.030827014, -0.036437586, 0.0074872193, -0.003779279, -0.02441994, 0.022041954, -0.027179135, 0.045733787, 0.042990036, 0.014344271, 0.025583189, -0.01171047, -0.015997706, -0.020712981, -0.047712665, 0.0036361096, 0.03888973, 0.029737063, -0.0053561036, 0.0024392728, -0.00096921256, -0.026851121, -0.028259281, 0.021807589, 0.0053992504, -0.021133173, 0.045829892, -0.005083248, -0.0717357, 0.033101544, -0.004895216, -0.040981743, -0.009127538, 0.00908243, 0.00653578, -0.047443178, -0.05039954, 0.019057706, -0.030186184, 0.01565253, 0.03902248, -0.00023166962, -0.046916407, 0.0063034976, 0.025558675, -0.020452628, -0.0035102237, 0.022108883, 0.0047421176, 0.050178904, 0.045935795, 0.016418144, 0.035829607, -0.063518174, -0.021927468, -0.014100222, 0.010927451, 0.01875917, 0.02622549, -0.037826132, -0.0050903573, -0.00057905144, -0.004371569, -0.0077983183, -0.016581263, -0.056793135, -0.011213791, -0.0038739082, 0.05773256, -0.028859416, -0.04327515, -0.021149844, -0.0047638137, 0.027941562, 0.011975726, 0.016494142, -0.024245145, -0.007171952, 0.037702575, 0.0031301142, -0.057837486, -0.009444889, 0.036396403, 0.01273374, 0.03290836, -0.040489964, -0.06830209, 0.015626054, -0.0012576351, 0.05369832, -0.03999819, 0.04633196, -0.028653488, 0.0044894875, 0.023054192, 0.0022701172, 0.02491711, -0.028999938, 0.0049852943, -0.041946173, -0.01685942, -0.0046914937, 0.004304397, 0.019358264, 0.01058105, 0.0029840027, -0.0039577507, -0.062243376, 0.02232339, 0.023226168, -0.03523045, 0.03696957, -0.012211564, -0.005497067, 0.023175787, 0.014116647, -0.027482636, -0.02265018, 0.013752351, -0.012861709, -0.0073516495, 0.02870546, 0.053268816, 0.0020063326, 0.025106613, 0.032782845, -0.03342073, -0.025746463, 0.0059042657, -0.015974171, 0.027865564, 0.03625029, -0.0023171864, 0.03230628, -0.016154114, -0.014090171, -0.020828692, 0.03139013, -0.027643457, -0.02965273, -0.0027388497, 0.028604457, 0.059754584, -0.019983405, 0.028088653, -0.010779379, -0.018479636, 0.034214538, -0.011699683, 0.0070559946, 0.026430683, 0.04991512, 0.026811898, -0.00836266, 0.028192108, -0.025137993, -0.020639434, -0.054569103, 0.032081217, -0.015158793, 0.041701514, -0.037600104, 0.014059527, 0.04129799, 0.025291948, 0.059829112, 0.038547862, 0.029975353, 0.032135643, -0.06724646, 0.019926284, 0.04914289, -0.026978847, 0.024874697, 0.014160775, -0.02443097, -0.02840245, 0.0018739499, -0.006815254, 0.021409705, 0.0142272115, -0.011864427, 0.0594984, 0.0006628938, -0.038361546, -0.061031338, -0.008335939, 0.006280269, -0.038489025, 0.03253671, -0.05635382, 0.040493507, -0.011577107, -0.0036721474, 0.03128251, -0.048140213, -0.021744065, 0.006675456, -0.06498713, -4.5537177e-05, -0.018410012, 0.012502805, 0.051358093, -0.008029252, -0.019378858, -0.0038449804, -0.027329661, 0.008558293, -0.006048416, -0.0013507933, 0.0039704987, 0.03743928, 0.016204124, -0.047922514, -0.006522542, -0.04453989, 0.056891195, 0.00022701171, 0.02035947, -0.026507294, 0.024839887, -0.027241405, -0.021631936, -0.10719268, 0.035360873, 0.04020902, -0.034003217, 0.034064014, 0.005494615, 0.026974924, 0.052804, 0.036535647, -0.07778608, -0.026873676, -0.00448532, 0.00909861, 0.00688831, -0.009372078, 0.004010704, -0.063480906, -0.008282986, -0.05510844, -0.016341902, 0.0050116023, 0.010828409, 0.049111385, 0.044555582, -0.020933434, 0.05107028, 0.0013159049, -0.060235083, -0.04068756, 0.035682574, -0.004408832, -0.012525359, -0.009458739, -0.018512486, -0.030799067, -0.06351425, 0.04399026, 0.031100115, -0.010573206, -0.023421431, -0.017219795, -0.053894445, 0.018942485, 0.019931922, -0.04387651, 0.03213932, 0.100422524, -0.007081, -0.014264475, -0.03197776, -0.031613953, 0.019535754, -0.060599625, 0.014915601, 0.06339461, 0.0452023, 0.006333283, -0.044657078, -0.002020919, 0.03484311, 0.025812777, -0.022138301, 0.010534594, 0.0215617, 0.011442764, 0.014360574, -0.010121878, 0.03032445, 0.033622738, 0.01766965, -0.080614164, -0.013736905, -0.027162956, 0.026217647, -0.06488514, -0.025076214, -0.05370813, 0.0062179393, 0.009737968, 0.028233785, -0.036366984, 0.027463024, 0.02950515, -0.03454108, -0.012955112, -0.0023880356, -0.0023304247, -0.002088704, -0.002285807, 0.012391015, -0.024126492, -0.04256249, 0.05653229, 0.03287723, -0.024863422, 0.06434189, 0.006738767, 0.04491988, -0.026243633, 0.04706399, 0.031999826, -0.008006086, 0.002440376, 0.003607672, 0.04513169, -0.03624931, -0.01162344, 0.043456808, 0.009414857, 0.022419091, -0.0068701073, 0.042333513, 0.014687609, 0.031542372, 0.032268025, 0.03620322, 0.05006601, -0.020812511, 0.040676773, 0.009589407, -0.023138035, 0.037926156, 0.02456078, 0.002958507, -0.0037625628, 0.036098048, 0.033741884, 0.013638354, 0.010590489, -0.011500619, 0.01725289, -0.006195998, -0.0030626357, -0.009057179, -0.034613647, -0.042385977, 0.014699376, -0.0013821728, 0.009933601, 0.027783684, -0.0030016538, -0.0064313444, 0.010372916, 0.027232826, -0.03237589, -0.032001294, 0.03019245, 0.03717893, -0.009584012, 0.023633735, 0.03589629, -0.0603709, 0.011904632, 0.051844966, -0.0017310255, -0.0055724513, -0.022863954, -0.04055922, 0.029630177, 0.010858809, 0.025941113, -0.00671131, 0.09058895, 0.027671894, -0.013300043, 0.0028766259, 0.0128014, -0.0606136, -0.03932549, -0.013686404, -0.036196355, 0.012542888, 0.030310722, -0.020379081, 0.022180466, -0.03474407, 0.032954454, 0.027932737, -0.011515819, 0.009368278, -0.022503579, -0.025941113, -0.049030606, -0.03484311, 0.03996583, 0.050077412, -0.055610515, -0.02340427, -0.03996093, -0.038035985, -0.028412746, 0.018561028, -0.0031211046, 0.011895316, 0.032783825, 0.046526127, -0.050070055, 0.0087229125, 0.016970413, -0.02133665, -0.0478783, 0.00031967956, -0.041235723, -0.018039586, 0.0020396733, 0.045265056, 0.012600866, 0.004456392, 0.014098261, 0.037893794, 0.012482212, 0.04233719, 0.028061686, 0.027030574, 0.021341063, -0.034239054, -0.012313654, -0.0074913865, -0.008722851, 0.03234255, 0.008642135, 0.018382065, 0.043754913, -0.058617074, -0.002362785, 0.0072124023, 0.07347531, -0.034594037, -0.009701932, 0.06378686, 0.029364431, -0.08333046, 0.03328786, 0.011733515, -0.07267513, 0.023175297, 0.042974345, -0.021927468, -0.004094056, -0.02537383, -0.052122477, -0.010624933, -0.043987323, 0.03274068, 0.04455117, -0.017923567, -0.052574538, -0.03802912, -0.015495633, -0.018638495, -0.011734985, -0.031002054, 0.033007406, 0.01642268, -0.037609786, 0.045523938, -0.04443031, 0.009333343, -0.010181742, -0.011445705, -0.068662465, -0.043756876, -0.019551935, 0.0009411425, -0.012840136, 0.046543773, 0.023054192, 0.005069152, -0.022745298, -0.043165565, 0.0068378085, 0.005209502, 0.0016531894, -0.030207757, -0.014274158, -0.017078832, 0.019088106, 0.0073593715, -0.021413626, -0.0075781704, -0.0065936362, -0.07362436, -0.054314144, 0.032796573, -0.0035684477, -0.014591018, 0.028702518, 0.054506343, 0.0148640275, -0.01870383, -0.014815946, 0.026594201, 0.012986247, 0.017955009, 0.031192537, -0.018396284, -0.07532891, -0.065716706, 0.044689436, -0.035067674, -0.034752402, -0.03307409, -0.04725766, -0.018673552, -0.019594101, 0.022835024, -0.018766956, 0.011266253, -0.009151808, 0.0047902903, -0.0017687791, 0.022655755, -0.015802564, 0.021470504, 0.048373625, -0.0033073595, -0.016286988, 0.034584228, -0.026056826, 0.025560513, -0.017374732, 0.05318056, 0.0063725077, -0.050929073, -0.010016953, -0.055440504, -0.027109023, 0.0011154463, -0.03756529, -0.0098948665, -0.056151815, 0.007874453, -0.023428785, 0.016576758, -0.02588816, -0.017738294, 0.04096115, 0.010836745, 0.001140452, -0.016261246, -0.00021548952, -0.01696361, -0.0069020386, -0.004868984, 0.00070898264, -0.03043244, 0.025080873, -0.03671657, 0.013030374, 0.015640764, -0.0006039345, -0.017487258, 0.01846934, -0.030665703, 0.0043786783, -0.00073840097, 0.06587949, 0.010431753, 0.00325171, 0.02317971, 0.0010971212, 0.059581995, -0.014621968, -0.051266402, 0.08647038, -0.0023446437, -0.0076100403, -0.026395781, -0.004238206, 0.027415955, 0.036818065, -0.0049413047, 0.01090833, 0.029015332, -0.030540183, 0.014215321, 0.0098622, -0.03378356, 0.013340248, 0.055384975, -0.007471621, 0.004900119, -0.04715175, 0.037288267, -0.0158261, 0.0014242165, -0.0125871375, -0.029759372, -0.03547953, 0.03275735, -0.056047868, 0.033905648, 0.033615384, 0.008751963, -0.0036706766, 0.020922342, -0.00502956, -0.026592242, -0.006316981, 0.044494294, 0.01187129, 0.02191901, -0.027319854, 0.017726036, -0.012443968, -0.015737845, -0.012681276, 0.0038557672, 0.04581812, -0.039946217, -0.0033184527, 0.012760706, -0.0062874397, 0.040777776, 0.010052745, -0.0015406642, 0.030934146, -0.050548594, -0.063123964, -0.019765219, 0.018198201, -0.009090657, -0.001667531, -0.02061541, -0.0047110138, 0.03136684, 0.010342761, 0.05369048, 0.019273747, 0.038996004, 0.054041047, 0.012948815, 0.008469547, -0.005624546, -0.030959396, 0.041498035, -0.015108291, -0.016446827, -0.096174516, 0.0013842566, 0.014067861, -0.0023233765, 0.041934896, 0.028488744, 0.0016444866, 0.029153598, -0.022825586, 0.026414076, 0.011434918, 0.016991066, 0.0011643544, -0.06388885, -0.012188518, 0.030230312, -0.038949914, -0.032993678, -0.03544913, -0.010593553, 0.0028995322, -0.006345051, -0.03370364, 0.0029364433, 0.010382722, 0.028414708, -0.004451979, -0.031310946, -0.04281941, 0.013371627, -0.019709324, 0.01989662, -0.0117418505, 0.013052193, -0.015743729, 0.009509426, -0.05475542, -0.038413763, -0.022597715, 0.022388358, -0.010229746, 0.0164331, 0.06470201, 0.026277464, 0.009680604, -0.019610036, -0.07717418, 0.060703814, -0.027466396, 0.030954003, 0.018379614, 0.0052859285, -0.08096915, -0.016532876, 0.008929454, 0.0037890852, 0.0053396784, -0.020854678, 0.02621789, -0.0026868773, 0.0036243426, 0.0074327947, -0.0051987157, -0.012026717, -0.044107933, 0.01356726, 0.0006913316, -0.06790531, -0.03540206, 0.0010401843, -0.04301774, -0.05547323, -0.010744844, 0.006587752, -0.02324296, -0.051164422, 0.06444289, -0.024627093, -0.01846787, 0.02931442, -0.047071345, 0.015607914, -0.027442737, -0.056151815, 0.014611121, -0.034560695, 0.04798356, 0.02431722, 0.032644577, -0.03068924, -0.016996952, 0.013706506, 0.002133812, 0.013210071, 0.025746953, 0.022483967, -0.0064033973, -0.005643913, 0.024716329, -0.04229558, -0.07123951, -0.023591567, 0.022501128, -0.026941337, -0.01758826, 0.025364514, -0.0065617664, -0.0048795263, 0.013763382, 0.030806912, -0.0066588465, 0.0017597085, 0.022399142, 0.0059748697, -0.006978036, -0.021683296, 0.018338183, 0.00089333765, 0.0025956805, -0.03940786, 0.0051604714, 0.03330159, -0.0020500922, 0.004980529, 0.059634946, 0.0018612018, -0.0073400657, -0.013053908, -0.0042264382, 0.037988916, -0.0972375, -0.021010932, 0.05055252, 0.008263619, 0.016904773, 0.009677662, -0.03548247, -0.0009796316, -0.028716246, 0.011110336, -0.057322666, -0.037946258, -0.020285923, -0.02503797, 0.017072458, 0.0051207566, 0.0132597145, -0.006046945, 0.05867199, 0.03005184, 0.014332137, 0.013011007, -0.028220363, 0.04489733, 0.002913889, 0.013008924, 0.042584065, -0.010498188, -0.012269665, 0.03317705, -0.025274787, 0.012548158, 0.037278954, -0.011628589, 0.025369419, 0.041597567, -0.0697529, -0.024727605, -0.034449887, 0.00647204, 0.00865096, -0.028490704, 0.021955905, 0.028059727, 0.00024123059, -0.016039629, -0.019102324, -0.031441122, -0.002223538, 0.016412964, 0.0041550375, -0.032895617, -0.03686409, 0.016386028, 0.039259788, -0.019192541, -0.06279252, 0.06886281, 0.008012827, 0.05568357, 0.05254904, -0.040389452, 0.045679852, 0.030770628, -0.014944529, 4.22889e-06, -0.0028355587, -0.03522261, -0.06749456, 0.012933723, -0.0062249256, 0.0542455, 0.069815665, 0.018679773, 0.024297487, -0.06677969, -0.01136364, -0.018336467, -0.023341512, -0.03745583, -0.013110294, 0.0038018334, 0.0140070645, 0.014533652, 0.0055776304, -0.056816667, 0.0777194, 0.0064871167, 0.0049665556, 0.0025187023, -0.009509977, -0.010571979, 0.01549024, -0.0113182245, 0.04579165, 0.025265472, 0.0311717, -0.019749528, -0.0020851186, -0.058744553, -0.0053541423, -0.027501145, 0.0064499765, -0.018332176, 0.013307949, 0.0036878372, 0.0103341965, -0.0024211314, 0.06794858, -0.022071619, 0.030270515, -0.006756418, -0.033836756, -0.00897015, 0.041814283, -0.05044661, 0.027941562, -0.016773371, -0.010834232, 0.036416013, -0.043488186, 0.06977889, 0.029808648, 0.004354163, 0.02481243, -0.021864219, 0.009300616, 0.05094133, -0.03358008, -0.0030773447, 0.002571165, -0.014580722, 0.010775456, -0.009061102, -0.011210603, 0.02832449, 0.0023622946, 0.05128197, -0.024228966, -0.050693728, -0.040365428, 0.057509962, -0.020659538, -0.017945202, -0.00018815495, -0.009095913, -0.030459775, -0.021022364, -0.011920321, 0.001461112, -0.02313546, -0.054449473, -0.030802988, -0.0012630285, 0.027076662, 0.0032173884, 0.050445266, 0.0046834038, -0.04446292, -0.008259696, 0.007489425, 0.0043649497, 0.046922293, 0.021193603, 0.027631689, 0.026711876, 0.02088753, -0.0013603542, 0.01248638, -0.03420179, 0.014680254, 0.043213613, 0.018231511, -0.005240269, 0.01587513, 0.006169031, -0.0018435508, -0.0054768417, -0.0014237262, -0.011934049, 0.03927548, 0.025336321, -0.047606755, -0.004046251, -0.0057022595], [-0.01860901, -0.10150281, -0.020243023, -0.04379841, -0.0014951614, 0.049643133, 0.015343893, -0.0292069, 0.04150602, 0.059049148, 0.014091185, 0.031000683, -0.07439304, -0.011171137, -0.040656302, 0.023572067, -0.033692554, -0.040873658, 0.015269849, 0.036712844, -0.026936904, -0.013490769, -0.031227594, 0.0037583462, 0.00066520454, 0.068407394, 0.00788572, 0.015563937, 0.014626738, 0.013123757, -0.022550078, -0.044826668, 0.0032472014, 0.007288588, 0.016897088, -0.0057312693, 0.029273778, 0.0063908007, -0.018173102, -0.042398732, -0.05486624, -0.014035578, -0.03423236, 0.03196266, 0.00837895, 0.04278806, 0.01206788, 0.026167203, -0.027210092, -0.04392679, 0.023459211, -0.0062495787, -0.043464012, 0.001992628, -0.022639647, 0.029569956, 0.03135299, 0.03523793, 0.02662938, -0.011058279, 0.015580507, 0.03179009, -0.060250573, -0.0015673959, 0.0049000615, 0.040378038, 0.006050361, -0.020944988, 0.011641677, -0.02194578, -0.018532576, 0.025652772, -0.0164665, -0.023587294, 0.05671317, 0.025151182, -0.071759686, 0.03597061, -0.024004688, -0.042969592, -0.021008281, 0.013914361, 0.030041987, -0.050382975, -0.059111245, -0.0092494935, 0.020378308, 0.024038726, 0.028099818, 0.032020584, -0.05362749, 0.01168676, 0.021798586, 0.017417582, -0.029214961, 0.015520643, -0.022575157, 0.034946527, 0.010086746, 0.033144385, 0.044405688, -0.052946463, -0.04079543, -0.012432876, -0.019650405, -0.012252114, 0.023988567, -0.043209035, -0.0268339, -0.008671992, 0.008579885, 0.00565603, -0.026039714, -0.046604924, 0.015603646, -0.01607956, 0.028651569, -0.014698394, -0.03809222, -0.050002605, -0.0102013955, 0.016442018, 0.008267884, 0.008654228, -0.011111424, -0.009248971, -0.00604954, 0.0103671, -0.06653957, 0.0071357223, 0.043588217, 0.016968371, 0.06990739, -0.026996095, -0.027054837, -0.01860901, -0.019123139, 0.06037, -0.023180647, 0.03143631, -0.029568164, -0.005340745, 0.02426265, 0.0074510076, 0.022471255, -0.012604253, 0.016309455, -0.06253879, -0.02201027, 0.00023288133, 0.0144876065, 0.010197814, 0.020199766, 0.03583536, 0.015709935, -0.03732371, 0.0035135222, 0.007830783, -0.035703693, 0.029618323, -0.019969275, -0.010045843, 0.006822826, 0.047940113, -0.017569402, -0.045595326, -0.0046432954, 0.015843095, -0.020851836, 0.01750133, 0.05656508, -0.012168944, 0.020993952, 0.04584896, -0.044812337, -0.023567589, 0.010709555, -0.022078343, 0.05406668, 0.033055414, 0.0055425754, -0.0038971794, 0.0042730733, 0.005694956, -0.02578653, 0.018594677, -0.01603358, -0.06024938, -0.00884949, 0.006828498, 0.01068985, -0.018179372, 0.014679883, -0.030657033, -0.0072778394, 0.036278132, -0.052149888, 0.013544735, 0.052704323, 0.028275376, 0.027382664, 0.016873745, 0.010834355, -0.016671242, -0.00665951, -0.048826255, 0.048059538, -0.012198204, 0.04977211, -0.036299627, 0.0013453375, 0.030185597, 0.02892983, 0.052600127, 0.024060821, 0.04089336, 0.025307631, -0.03650743, 0.045002222, 0.074732214, -0.059020486, 0.0028124899, 0.03929066, -0.0168203, -0.017744362, 0.00020839891, -0.015133702, 0.013415158, 0.021225639, 0.022439308, 0.06419881, 0.003277058, -0.02087751, -0.046780184, -0.0049257386, -0.020737184, -0.060998186, 0.049870044, -0.043599635, 0.049609687, -0.02572204, 0.038542453, 0.015807267, -0.00022362577, -0.00423008, -0.003409024, -0.040797222, 0.032550834, -0.013791351, 6.449021e-05, 0.064516485, -0.022287337, -0.034009032, 0.0016278552, -0.0050290423, -0.007332291, 0.028467352, 0.0009267482, 0.014061254, 0.038437955, 0.0035833865, -0.046595372, 0.0076761264, -0.061726686, 0.06642491, 0.027623307, 0.018196391, -0.008232653, 0.03755002, -0.016793728, -0.032936882, -0.039928325, 0.03479605, 0.013734026, -0.020355022, 0.009544551, -0.008271467, 0.025892818, 0.05181848, 0.0318713, -0.052422777, -0.0087061785, 0.038316738, 0.0037320724, 0.019202558, 0.0032782522, -0.021231608, -0.058394693, 0.001578816, -0.053168, -0.017376529, 0.004445346, 0.030617923, 0.04814672, 0.0421766, -0.049170204, 0.06326728, -0.026832705, -0.08457294, 0.014309661, 0.023153178, 0.02393781, 0.0021353425, 0.02068822, -0.018212514, -0.03251262, -0.06121315, 0.030407134, 0.0043674204, 0.025616944, -0.020724049, -0.009957766, -0.04245964, 0.010440547, -0.015602068, -0.016612798, 0.027531348, 0.08782372, -0.033195738, -0.007848697, -0.04388917, -0.037480757, 0.01714723, -0.07706341, 0.017524915, 0.060931306, 0.004038998, 0.0066663767, -0.044651113, -0.05017458, 0.04137047, 0.028031746, -0.014223674, 0.0065308283, 0.03910973, 0.019859402, -0.019442603, 0.0076265647, 0.031163102, 0.056874394, 0.01361042, -0.05408101, -0.021713495, -0.013987807, 0.026841661, -0.04490429, -0.01108754, -0.0644711, 0.02415875, -0.0059874384, 0.023183037, -0.008962945, 0.0177157, 0.037175022, -0.010671935, -0.0056345337, -0.00092435966, -0.018761875, 0.013012691, 0.0018893243, -0.028381664, -0.004792578, -0.034968026, 0.04434777, 0.018663945, -0.028167741, 0.06826886, 0.008701928, 0.048021324, -0.037093814, 0.03977374, 0.018652001, -0.027268013, 0.019415136, 0.00012666653, 0.039593406, -0.0364716, -0.002295971, 0.026664164, 0.0036400394, 0.00048487083, -0.022212101, 0.043865282, 0.013230046, 0.01583354, 0.008914876, 0.038113713, 0.020926477, -0.01273189, 0.03823075, -0.0057747103, 0.012704572, 0.0258343, 0.016606228, 0.025693377, -0.005407026, 0.052862864, 0.01773839, 0.017147828, -0.018045317, -0.022244345, 0.003121804, 0.010170942, -0.024121204, -0.04088381, -0.047315214, -0.022703242, 0.0007356661, -0.0147548225, 0.0001964563, 0.017149618, -0.0076576155, -0.008449897, 0.026243933, 0.0025246723, -0.041913863, -0.018388666, 0.046098556, -0.009848491, 0.027525377, 0.033570737, 0.05615306, -0.06920994, 0.055800192, -0.005436286, -0.0013327976, -0.024269218, -0.02319259, -0.06794671, 0.03959908, 0.01897326, 0.02355087, -0.024336098, 0.08439619, 0.056770496, 0.0031098612, -0.022896115, -0.051998217, -0.038973585, -0.016299602, -0.027948147, -0.04251099, -0.014866486, 0.008376561, -0.015155797, -0.00069207547, -0.018732017, -0.0024804845, 0.041128032, -0.01021095, -0.0016898823, -0.022545896, -0.0017237696, -0.02565576, -0.032307204, 0.039502643, 0.0575711, -0.04232409, -0.0134014245, -0.0581639, -0.017851846, 0.005183699, 0.036663283, -0.015184458, 0.01054833, 0.0020451755, 0.019472461, -0.03438194, 0.030767204, 0.016878521, 0.006362362, -0.03728161, -0.010917954, -0.058168977, -0.03626738, -0.0060028145, 0.04048791, 0.0063487026, 0.010464134, 0.0075635673, 0.023513269, 0.022217773, 0.01871291, 0.02380465, 0.035105065, 0.007883182, -0.027003184, -0.030028554, 0.0008900246, -0.003980479, 0.023047786, 0.018248938, -0.00014689437, 0.072362795, -0.042243473, -0.0064460356, 0.02456241, 0.023182439, -0.03428491, 0.014463721, 0.05462082, 0.045423802, -0.04884596, 0.015803684, 0.005269686, -0.09043916, 0.03491309, 0.05084695, -0.014424907, 0.012004136, -0.013414262, -0.033334274, 0.0007087952, -0.046832137, 0.04907944, 0.03951339, -0.013280206, -0.014154406, -0.022600237, -0.046354726, -0.023161242, -0.0019260478, -0.025961041, 0.031206096, -0.016491879, -0.022724438, 0.03188444, -0.049131837, -0.0016576372, 0.0018057259, -0.031258643, -0.05519884, -0.02792665, 0.00064520066, -0.012491396, -0.044646632, 0.047603328, 0.018414492, -0.013791351, 0.0039041955, -0.019084325, -0.0005349179, 0.024445374, 0.021757087, -0.021611385, -0.028267013, -0.027256368, 0.013915554, 0.009346602, -0.0018714103, 0.012558872, 0.0077089686, -0.071856424, -0.05192179, 0.07432138, -0.0021589291, -0.022158956, 0.03569712, 0.034161, 0.00332453, -0.0409689, -0.008085231, 0.017452365, 0.034922644, 0.027267417, 0.05372751, 0.0016534573, -0.07234608, -0.08866209, 0.023194084, -0.021140248, -0.022464985, -0.048893135, -0.0174034, 0.010276634, -0.023171093, 0.028838918, -0.041388385, -0.017972616, 0.009974486, 0.00025736372, -0.003063285, -0.0018188627, -0.034074716, 0.034357905, 0.018682456, -0.00052446814, -0.008939059, 0.02606091, 0.0015743375, 0.033693746, -0.052188404, 0.035707273, 0.028889226, -0.04146004, -0.023544302, -0.032688178, 0.012748759, -0.009557091, -0.039783295, -0.024007078, -0.058944203, -0.020509081, -0.0064902236, -0.00586622, -0.012670597, -0.020936629, 0.0058136727, 0.017923502, 0.040996663, -0.00024721248, 0.009279425, -0.015778605, -0.0050708414, 0.0010616999, 0.0033642394, -0.0015501536, 0.009035646, -0.016723266, 0.0071249735, 0.017409371, 0.0069250097, 0.002746805, 0.020997535, -0.03616587, 0.016915543, 0.013587206, 0.06291976, -0.014062448, 0.002286193, 0.03163185, 0.0056751384, 0.06680708, -0.00537299, -0.02965833, 0.1029431, -0.014564635, -0.045140762, -0.0101654185, -0.0103076855, 0.013745969, 0.03300227, 0.0044071297, -0.017548205, 0.04165948, 0.025225526, 0.014272116, -0.017710922, -0.029864939, 0.0035224792, 0.05232903, 0.001538211, 0.038524542, -0.047531676, 0.017587166, -0.013213328, -0.011114708, 0.00034902344, -0.034583323, -0.025036534, -0.00085628673, -0.039110925, 0.0331932, 0.033862136, 0.018957734, -0.0065278425, 0.0350567, -0.02897372, -0.022020422, -0.02310496, 0.041603353, 0.0015752331, 0.036111534, -0.031665888, -0.0005648865, -0.018453754, -0.044087417, -0.016587121, 0.017553281, 0.04339952, -0.026736565, -0.023811517, -0.0009972097, -0.0012172527, 0.055241834, 0.043908276, 0.009906412, 0.040411532, -0.03598703, -0.057081, 0.002522881, 0.010772254, 0.002520567, -0.01829417, 0.0008437469, -0.019028792, 0.037109338, 0.018162355, 0.040463053, 0.04017203, 0.032309595, 0.038278524, 0.013198997, 0.018853832, -0.0052249013, -0.025856992, 0.005080582, -0.021840684, -0.035288088, -0.059015706, 0.005576015, 0.01320258, -0.009076401, 0.050741855, 0.043903504, 0.016350657, 0.0153235905, -0.039810166, 0.0007998578, -0.015136987, -0.0077358396, 0.0029593841, -0.05675258, -0.016498744, 0.032933, 0.012984775, -0.0328709, -0.040466562, -0.021035751, 0.020183047, -0.019031778, -0.034982357, 0.0069995765, 0.026949145, 0.038201492, 0.009604265, -0.018820617, -0.04899554, 0.019213306, 0.016865682, 0.0042533684, -0.050310723, 0.021259079, -0.015168933, 0.0015119371, -0.057717543, -0.019798793, -0.019831039, 0.015248352, -0.001674357, 0.020607695, 0.05561922, 0.03158139, -0.0013447403, -0.012077583, -0.033073924, 0.020373533, -0.051735777, 0.0034893383, 0.0061205984, 0.014952174, -0.08276721, 0.01898759, 9.0764e-05, -0.019010281, 0.030511035, -0.025706962, 0.026240947, 0.009369591, 0.012872963, -0.007810481, 0.0055395896, -0.009445427, -0.03129686, 0.009593114, -0.018463308, -0.06818526, -0.029958092, -0.023666264, -0.050043207, -0.05228753, -0.011653023, 0.028088175, -0.028271792, -0.05640505, 0.08173537, -0.042230338, 0.007857281, 0.021673637, -0.06777682, 0.008247581, -0.0088543305, -0.02541989, 0.022148207, -0.049688514, 0.05483101, -0.0063457177, 0.053952035, -0.028812196, -0.012884905, -0.025454523, 0.008074413, 0.013709786, 0.0074754898, 0.0013417546, 0.0072420114, 0.0154657075, 0.021017538, -0.047856513, -0.09184361, -0.009957766, -0.0058686095, 0.011335349, 0.030780341, 0.03412249, -0.012552303, 0.0037714832, 0.014153092, -0.00061683694, 0.014579565, 0.039539665, 0.027606586, -0.0032006253, 0.01042114, -0.05118612, -0.008986233, 0.0017943804, -0.006241816, 0.008837547, -0.012274936, 0.04275649, 0.02172066, 0.018819198, 0.05791833, 0.00078463095, -0.006403938, -0.03484203, 0.0025722936, 0.04863995, -0.058374986, -0.02736057, 0.07928474, 0.0031568853, 0.022864616, -0.0012695018, 0.0027491937, 0.0019635179, -0.055006567, -0.015422714, -0.05671317, -0.047487486, -0.015697394, 0.009293905, 0.011550913, 0.021543313, 0.0045352145, -0.0051454827, 0.045845374, 0.03067644, 0.032482762, 0.039277524, -0.017384889, 0.04936151, -0.0042420225, -0.009828785, 0.024069179, 0.014229197, -0.013097485, 0.00945513, -0.00069267256, 0.010066444, 0.019496346, -0.018474653, -0.004956192, 0.03612049, -0.07533889, 0.0070569008, -0.0220246, 0.005582359, 0.001466555, -0.01655607, 0.032911506, 0.0029117628, 0.018491074, -0.032245107, -0.0327037, -0.025212687, 0.00011427605, 0.0150035275, -0.0018021432, -0.0037356552, -0.0002085482, 0.0013396646, 0.0062459963, -0.015517062, -0.032236744, 0.06409849, -0.0032279626, 0.03236513, 0.021074826, -0.04226169, 0.07127601, 0.036660593, -0.0071560247, -0.013611614, -0.0177157, -0.028995104, -0.0748803, 0.068240196, -0.01776586, 0.03198356, 0.06267791, 0.019338107, 0.005795013, -0.07795553, -0.022570381, -0.006625772, -0.0440492, -0.06163831, -0.018387472, 0.014816029, 0.007822424, 0.03553172, 0.00065565045, -0.027036794, 0.036114518, 0.015595882, -0.0011130532, 0.0017734808, -0.014481635, -0.025056684, 0.00068132713, -0.023469659, 0.08711821, 0.032172255, 0.022630094, -0.06186761, 0.00566439, -0.035003256, 0.0103665395, -0.0085813785, 0.034428217, -0.0308723, 0.05690485, 0.0050308337, 0.007646867, 0.023147209, 0.040911276, -0.03005005, 0.032169268, -0.002899671, -0.016894046, 0.0095260395, 0.026068972, -0.025117146, 0.055807915, 0.022373924, -0.0110899275, 0.046523713, 0.009437067, 0.070344485, 0.01474079, 0.030294277, 0.021953542, 0.003375585, 0.010943033, 0.04124567, -0.019582931, 0.0082619125, -0.002405246, -0.004873788, 0.013429489, -0.0021680356, -0.036244694, 0.041479148, 0.016010292, 0.044937737, -0.027102608, -0.06085368, -0.037461646, 0.052431732, -0.0073005306, -0.003179427, -0.025763242, 0.009289501, -0.018341493, -0.0019155982, 0.022140445, 0.00085531635, -0.019193003, -0.06583973, 0.0062746587, -0.024723226, 0.029468443, -0.008952794, 0.028009053, -0.012828774, -0.046017047, -0.022136452, 0.021014255, 0.002106083, 0.06011443, 0.024874412, 0.046741072, 0.018580757, 0.02825149, -0.016109416, 0.0024930243, -0.0002687092, 0.03590761, 0.049578045, 0.0037864114, -0.0038512002, -0.0030382057, 0.022686223, -0.011546733, 0.0033104974, -0.011380731, -0.0064269276, 0.032511424, 0.021232283, -0.04564235, 0.00551451, 0.02135462], [-0.0396201, -0.0802494, -0.04616485, -0.020074245, -0.01834719, 0.010305358, 0.028805606, -0.04357365, 0.041823808, 0.020609792, -0.03695569, 0.019747805, -0.08893225, -0.021106536, -0.01790126, 0.039808538, -0.029348852, -0.0047783502, 0.042084962, 0.0285888, -0.010791016, -0.019447234, -0.005674522, 0.026506048, -0.020332934, 0.075220525, -0.027800107, -0.015800953, 0.01505938, -0.0015816968, -0.017983794, -0.066037074, 0.022615554, -0.01062102, 0.0047198376, 0.02568348, 0.004765416, 0.004232948, -0.02371806, -0.05436097, -0.047973208, -0.0007908484, -0.019471562, 0.03035385, 0.025243092, 0.007367547, 0.032984044, 0.021616522, -0.016467385, -0.021025235, 0.037684787, -0.0011936637, -0.0055975313, 0.010068227, -0.04466692, 0.033121705, 0.020978115, 0.015296203, 0.04330018, -0.011603113, 0.028330112, -0.0034969172, -0.037009735, 0.011932017, 0.0009825552, 0.009852961, 0.014185997, 0.006595331, 0.032835606, -0.028546916, -0.0011302234, 0.008901356, -0.025269732, -0.038702298, 0.069239885, 0.0015841605, -0.060648955, 0.016891757, -0.020020043, -0.038473174, -0.022202885, 0.017192021, 0.0035027685, -0.055679668, -0.052077737, -0.00751306, -0.012455862, -0.003959121, 0.039946467, 0.013818906, -0.055866912, 0.00033875904, 0.015516397, 0.006724983, 0.017779307, 0.0075980574, 0.010069767, 0.049487155, 0.035296228, 0.050003298, 0.036932126, -0.033555623, 0.001596479, -0.031398654, -0.04553907, 0.0013784413, 0.041946992, -0.03931576, -0.020406844, 0.008000873, 0.0030722367, 0.011700122, 0.015055068, -0.072142124, 0.05767034, -0.017052514, 0.027353253, -0.0144828735, -0.046924904, -0.019388104, -0.043040875, -0.01207984, 0.019463247, -0.0015324227, -0.009130172, -0.00085983204, -0.00056387985, 0.00038064198, -0.05072763, -0.0030051006, 0.06468696, 0.0041642725, 0.04043551, -0.0152860405, -0.05073748, 0.020739445, -0.015780013, 0.0623021, -0.017545871, 0.06261745, -0.041151218, 0.01138188, 0.0077976175, 0.015682695, 0.03644308, -0.0045452416, -0.0034430237, -0.044302292, -0.029338997, 0.010890796, 0.0060834964, -0.03684713, 0.02537105, 0.016303241, 0.034861386, -0.043341447, 0.016419651, 0.020892503, -0.022707943, 0.024803013, -0.006830614, 0.017951766, 0.03950793, 0.011814684, -0.027327385, -0.04447475, 0.016205002, 0.007112708, 0.014571566, 0.060370557, 0.076167814, 0.004195146, -0.0020103808, 0.035080656, -0.06567891, -0.019433683, 0.0075786556, -0.058212355, 0.008602093, 0.021979919, 0.019778602, 0.0038864901, 0.008736904, 0.0014166287, -0.024099935, -0.00024144282, -0.030710047, -0.004193837, -0.016934257, 0.024029102, 0.021822859, -0.057101224, 0.030376216, 0.007677512, -0.034619942, 0.016288767, -0.031865522, 0.0031818713, 0.022470888, 0.038271148, 0.021256823, 0.001497931, 0.025127914, -0.030516647, -0.023413947, -0.045355525, 0.034993194, -0.018923696, 0.047019757, -0.008120363, 0.034008328, 0.051193267, 0.041562654, 0.05068205, 0.024713397, 0.03811347, 0.029722102, -0.052575406, 0.041910652, 0.05774918, -0.050215177, 0.005567043, 0.042506255, -0.016461842, -0.017034654, -0.0024871074, -0.024023868, 0.021386167, 0.00854258, 0.015914593, 0.050986316, -0.010055601, -0.025945248, -0.038772512, 0.00010840289, 0.0064298008, -0.031023245, 0.02263896, -0.008517634, 0.031240975, -0.038800847, 0.022733811, 0.051272184, -0.015528714, -0.021101609, -0.00975832, -0.036216423, 0.014458621, -0.015693782, 0.02405066, 0.05176608, -0.015364571, -0.005899951, 0.001199823, -0.013385294, 0.002126175, -0.0018087039, 0.035342425, -0.019394264, 0.029151756, -0.008193041, -0.04690889, -0.007568185, -0.025543664, 0.06200892, 0.00039349942, 0.023739003, -0.01692317, 0.033574715, -0.006399466, -0.031853206, -0.060863297, 0.028093595, 0.0110651795, -0.011219083, 0.032700717, 0.028492715, 0.0065238834, 0.049793884, 0.012656038, -0.051264714, -0.02511652, -0.011190597, 0.04920506, 0.030192055, 0.006417944, -0.00019648025, -0.048810866, -0.0016054099, -0.053753052, -0.013185734, -0.013758545, 0.035212465, 0.03608338, 0.032696098, -0.021524133, 0.047455832, -0.01808111, -0.050478794, -0.021809923, 0.01659719, -0.004143947, -0.0306115, -0.0018847322, 0.010776233, -0.0117457, -0.064381465, 0.03854585, -0.00544432, 0.0036585978, -0.03860621, 0.0044540656, -0.051465508, 0.0026072129, 0.02870829, -0.013079795, 0.023467379, 0.067357615, -0.016108917, -0.018139623, -0.03434493, -0.029762138, -0.0011616356, -0.06520927, 0.026001913, 0.07295515, 0.035461295, -0.011731688, -0.045834716, -0.044118747, 0.048722174, 0.013028057, 0.007927578, 0.008272496, 0.031362545, 0.0044679237, -0.008613103, 0.022849606, 0.026016695, 0.039365035, 0.01597218, -0.05905987, -0.031067284, -0.011126695, 0.029901953, -0.06486435, -0.03288057, -0.052570477, -0.0091699, 0.011342423, 0.016615208, -0.015032278, 0.0068503236, 0.020403149, 0.008884726, -0.0051421314, 0.03323288, -0.01147962, -0.01774728, -0.0058882483, -0.011837011, 0.003085787, -0.054214075, 0.033441063, 0.0009325113, -0.025161175, 0.07123795, -0.00053215964, 0.048475802, -0.020902088, 0.051432244, 0.014432367, -0.034942687, -0.0012934436, 0.001794807, -0.0038270534, -0.04249178, 0.0026244586, 0.046480052, -0.015809577, 0.019410277, -0.016705133, 0.04010599, 0.022804027, 0.033770274, 0.045307484, 0.021420505, 0.033142954, -0.0087673925, 0.040637534, 0.0043194857, -0.0013119214, 0.07169373, 0.02394472, 0.011372449, -0.016046092, 0.008429557, 0.040621523, 0.027449645, -0.010996735, -0.0139396265, 0.010868622, -0.008344559, -0.02097473, 0.0024464563, -0.06033853, -0.04768742, 0.019869603, -0.0052091903, 0.033256285, 0.029651271, -0.0061101355, -0.013206676, 0.03928373, 0.028158884, -0.013690793, -0.040452756, 0.03943956, 0.026041333, 0.009123012, 0.02818506, 0.034829356, -0.045095604, 0.042060323, 0.024765134, 0.007595902, -0.025664385, -0.012149131, -0.04165997, 0.059534322, 0.010790399, 0.015711028, -0.026476175, 0.0643519, 0.050158087, -0.048022483, 0.0033118317, -0.0020226995, -0.042218, -0.04416925, -0.03774392, -0.010125816, -0.0231588, -0.0009805535, -0.034134593, 0.017391274, -0.04861377, 0.022972964, 0.024552023, -0.062316883, 0.0010695547, -0.022822505, -0.026267992, -0.049904753, -0.014594971, 0.03803956, 0.07930165, -0.047850024, -0.037311845, -0.053530704, -0.06121807, -0.00025653298, 0.009773507, -0.004477163, 0.0068697254, 0.0044459817, 0.040136173, -0.054245792, 0.013097426, 0.0144160455, 0.010694854, -0.04442055, -0.01788155, -0.034273792, -0.0138064325, -0.013432104, 0.029369794, 0.027901428, -0.0025948943, 0.039741978, 0.024157831, 0.0057182526, 0.019755812, 0.043018702, 0.043273695, 0.030256726, -0.02020359, -0.0075765, 0.040663403, 0.0030045426, 0.028450832, 0.054019134, 0.023150794, 0.048909415, -0.01584407, -0.014415122, 0.0029441242, 0.026610447, -0.041907575, -0.008998056, 0.06554926, 0.012047811, -0.05227976, 0.027127825, 0.026455233, -0.06331961, 0.024701077, 0.058576982, -0.024458095, -0.000802551, -0.03499196, -0.054280285, -0.004292231, -0.048297185, 0.050195467, 0.03189016, -0.013671083, -0.035919853, -0.018209223, -0.030721134, -0.004184598, -0.019530999, -0.016593033, 0.069924794, 0.01809466, -0.032198124, 0.030255495, -0.048424065, 0.018433342, 0.0013536504, 2.8332575e-05, -0.0545168, -0.053454947, -0.018054625, 0.01026132, 0.0070289425, 0.0487813, 0.01951868, 0.00033875904, -0.011277751, -0.03602918, -0.0063729817, 0.011904608, -0.0012569501, -0.0039246776, -0.009869283, -0.016726075, 0.03174357, 0.003027274, -0.051245004, 0.004814074, -0.020860475, -0.050707918, -0.052022304, 0.048401892, 0.00081101997, -0.0020698179, 0.034642115, 0.052183677, 0.03589383, -0.040686503, -0.0028221707, 0.010153533, 0.01441235, 0.025892893, 0.019883309, -0.015130211, -0.071073495, -0.06641648, 0.036459096, -0.051796876, -0.027262095, -0.027741902, -0.04038008, -0.00971253, 0.0032841149, -0.015145609, -0.05340321, 0.023955807, -0.029881012, 0.0050518215, -0.014701835, -0.0022161, -0.018448664, 0.0077310973, 0.015968254, 0.009656327, 0.015711645, 0.011279444, -0.00046379192, 0.04488619, -0.012753932, 0.06964886, -1.4782213e-05, -0.0065657664, -0.012346535, -0.048935283, 0.011337264, -0.026447227, -0.008111123, 0.012513143, -0.07491379, -0.018023213, -0.009081206, 0.0021822243, -0.026213253, -0.022331612, 0.035580788, 0.013217762, 0.008627269, 0.028533598, -0.0102834925, -0.02021714, -0.017760828, 0.0048990715, 0.021006757, -0.03764537, 0.02130394, -0.022680841, -0.0070776003, 0.023811681, -0.034966093, -0.029518848, -0.0042301766, 0.003920366, 0.0051405146, 0.0059353663, 0.06403808, 0.015201678, -0.02230328, 0.034659978, -0.009402104, 0.08422412, -0.021182295, -0.04497188, 0.08395311, 0.021027697, -0.009434439, -0.02399153, 0.0060723713, 0.00060853444, 0.009931799, -0.00990108, 0.0030716206, 0.0051428243, -0.0053979713, 0.008527489, 0.0017227437, -0.023531435, 0.019310497, 0.05759766, -0.0064345743, -0.009937959, -0.040106606, 0.021692282, -0.002407037, -0.02539769, -0.011431886, -0.02323148, -0.032164864, 0.021145955, -0.041050207, 0.042080034, 0.036120337, 0.02193538, 0.0080501465, 0.021766808, -0.0015619872, -0.043257684, -0.02692457, 0.0523857, 0.013822601, 0.03422575, -0.027347093, -0.009224563, -2.1557395e-05, -0.03090899, -0.013589781, 0.006643681, 0.011475309, -0.05043198, -0.00063378736, 0.016818771, -0.012482655, 0.07089057, 0.022132052, -0.0023435967, 0.0136680035, -0.018618198, -0.04582486, -0.022768304, 0.00911077, -0.022190565, 0.007131802, -0.0056377687, -0.015098799, 0.041278098, 0.028730463, 0.043942593, 0.022252774, 0.002258599, 0.06491362, 0.027719112, 0.01901085, 0.0013273195, -0.032548584, 0.0036746117, 0.0029441242, -0.024134425, -0.067145735, -0.0056702103, 0.027426856, 0.014388021, 0.05423101, 0.032839917, 0.022279259, 0.012638792, -0.040259358, 0.007237741, 0.0075343186, 0.0037956412, -0.009800614, -0.049882885, -0.0142124435, 0.025554135, -0.02474296, -0.05167492, -0.017302888, -0.022254622, -0.002671269, -0.041489206, -0.06622924, 0.0061918995, 0.032956943, 0.04621166, -0.012114024, -0.038064197, -0.029691307, 0.018113138, 0.037256103, 0.03187476, -0.046825122, 0.011261582, -0.00010532327, 0.0031392185, -0.03420273, -0.038389407, -0.007073289, 0.03043904, -0.005119573, 0.01826096, 0.050262604, -0.010297043, -0.008297749, -0.017484277, -0.08604234, 0.046482053, -0.050239816, -0.0020122288, 0.00080624653, 0.01569871, -0.07589188, -0.01507293, 0.009491875, -0.0022727652, 0.0011345348, -0.031439304, 0.018408397, 0.027145071, 0.000719555, 0.007387411, -0.001752924, -0.014899547, -0.04663788, 0.0011342076, -0.031579733, -0.07358585, -0.029353471, -0.013348338, -0.06911424, -0.06786206, -0.007991018, 0.011584328, -0.022338387, -0.062233116, 0.04816045, -0.05030387, -0.0175083, 0.01973179, -0.057906855, 0.014039099, -0.012596833, -0.07583768, 0.036516994, -0.048818257, 0.018205527, 0.016172512, 0.04447475, -0.032458045, -0.028108686, 0.012626474, 0.014442222, 0.018006584, 0.03206755, -0.013828837, 0.008007032, -0.0009193459, 0.025300065, -0.041484434, -0.08358849, -0.03525681, 0.020382209, -0.0025782643, 0.0058871703, 0.027772699, -0.021311024, -0.0014856124, 0.025176572, -0.0005629559, 0.013490617, 0.0004902767, 0.048910957, 0.0175779, -0.0035107755, -0.021312563, 0.020087179, 0.014947897, -0.013134612, 0.004278219, -0.011019986, 0.014342442, 0.022136364, 0.038003836, 0.0419125, 0.0075740363, 0.01030813, -0.010722032, 0.00789247, 0.04724888, -0.062760346, -0.015341474, 0.051778395, 0.02424283, 0.0030882508, -0.0029897026, -0.042091813, 0.012371211, -0.0482436, -0.0030981055, -0.06087808, -0.04179917, -0.0076833633, -0.02479593, 0.005160224, 0.028386775, 0.025456818, -0.0071769184, 0.011508569, 0.032015808, 0.031463325, 0.013550978, -0.012981246, 0.07498031, 0.00039665605, -0.0041066837, 0.030060861, -0.017342, 0.007218955, 0.0364825, -0.013135228, 0.022234911, 0.025457434, 0.0025593245, 0.0021715995, 0.041260235, -0.060626782, 0.00093905546, -0.043393187, -0.0048270086, 0.0063988506, -0.014010458, 0.040651087, 0.030629668, -0.013743763, -0.020860165, -0.018763555, -0.03836477, -0.029978327, 0.0153316185, 0.009660176, -0.00511249, -0.0096182935, 0.016876975, 0.031412203, -0.051979188, -0.06623478, 0.06583875, -0.0076276218, 0.023952112, 0.043983243, -0.02587534, 0.044755615, 0.017051283, -0.021281458, -0.059240952, -0.003969332, -0.04128549, -0.06873976, 0.032586463, 0.0064973985, 0.048352618, 0.0675966, 0.017356167, 0.01244262, -0.06345511, -0.0063424935, 0.006752661, -0.04019284, -0.037296753, -0.022772, -0.000670127, -0.010605006, -0.012996029, -0.019755503, -0.043343913, 0.06882598, 0.023240102, -0.028438514, 0.039640967, 0.005252613, -0.021545075, 0.0017868, -0.017622862, 0.04586428, 0.021420043, 0.0197515, -0.01231112, 0.0050746105, -0.038394336, 0.00022974022, 0.010554808, 0.042750794, -0.0074240584, 0.020187575, -0.0012395502, 0.003598237, -0.01126959, 0.066037074, -0.024385724, 0.040344354, -0.00055063743, -0.035397857, -0.011917235, 0.017778384, -0.03793855, 0.0664017, 0.0014954673, -0.01555674, 0.027942078, -0.024843972, 0.032146387, 0.014218641, 0.014124905, 0.0261368, -0.0073837154, 0.019268615, 0.014725548, -0.0044195736, -0.00090294686, -0.006212225, -0.023813222, 3.9188264e-05, -0.006732066, -0.018485157, 0.037733775, 0.026255675, 0.053979713, 0.033815544, -0.013030521, -0.06621877, 0.033452764, -0.004971751, -0.04702222, -0.040934104, -0.001679013, -0.029517615, -0.0273705, 0.018135311, 0.008165325, 0.005219353, -0.05594575, -0.010040818, 0.019271387, 0.026582114, -0.014187229, 0.050271228, 0.01779409, -0.06425705, -0.014766199, 0.016182827, 0.052545838, 0.043163445, 0.022774925, 0.0030090273, 0.013949482, 0.016132321, 0.0003498457, 0.013077331, -0.016774116, 0.04201105, 0.0637158, 0.020374818, 0.016228406, 0.004903383, 0.010730251, -0.008402764, -0.026547622, 0.010086859, -0.0025772634, 0.051668763, 0.023370063, -0.04915825, 0.0027605782, -0.0037053311], [-0.030691039, -0.09282487, -0.032112308, -0.0643305, -0.017616512, 0.019572362, 0.016098078, -0.031606894, 0.012721291, 0.025383443, 0.02807347, 0.0025754792, -0.07950847, -0.03803547, -0.029943809, 0.042260982, -0.020389656, -0.06053282, 0.02266784, 0.05159856, -0.024050018, 0.008732867, -0.037856456, 0.0205399, -0.017435899, 0.035170157, -0.014462962, 0.031453453, -0.0036687525, -0.0033879753, -0.0053662034, -0.043867327, 0.03325806, 0.019593675, 0.014883329, 0.008352992, 0.04659412, 0.012865676, -0.03761883, -0.03680687, -0.042180486, 0.045371912, -0.025989218, 0.00054184167, 0.0029995756, 0.035667777, -0.008506101, 0.052721053, -0.060822655, -0.02957006, 0.021741861, -0.03759519, -0.011265191, 0.04983771, -0.017775882, 0.035076518, 0.04187258, 0.04281015, 0.052772816, -0.0065416587, 0.003611212, -0.011424227, -0.06463526, -0.03294738, 0.031132717, -0.03024563, 0.0024273652, -0.022142783, 0.025832046, -0.029342027, -0.018637195, 0.039675646, -0.017636226, -0.013797947, 0.06316691, 0.011170022, -0.057357427, 0.00438588, -0.0059117745, -0.046254203, 0.0031407634, 0.0065290052, -0.0026170362, -0.058248244, -0.06295699, 0.03225103, -0.00018221223, -0.01122683, 0.05326564, -0.0133537045, -0.017526606, 0.01759307, 0.024907665, 0.0029646116, -0.032936726, 0.02159328, 0.011236954, 0.035830807, 0.05623858, 0.029457109, -0.0012421865, -0.0068534706, -0.052183025, -0.034043852, -0.014152882, -0.006146466, 0.028680844, -0.014408618, -0.04241389, -0.056083005, -0.0004097111, -0.007940617, -0.007149965, -0.057944022, -0.01687168, 0.0066864425, 0.07535701, -0.032694843, -0.04862829, 0.0011620026, 0.026083522, 0.024220373, -0.0031536832, 0.013564155, -0.010097328, 0.011402116, -0.018660104, -0.00043182165, -0.044432614, 0.013563623, 0.019274537, 0.024611438, 0.031664435, -0.0475803, -0.03885526, -0.00293351, -0.019998591, 0.06466296, -0.015914267, 0.06264158, -0.016604489, 0.005502596, 0.012768708, 0.015798653, 0.03009805, -0.04818714, 0.015501891, -0.03623919, 0.011140454, -0.018015034, 0.024093205, 0.005822267, 0.0065403827, -0.01835655, 0.012791219, -0.079804696, 0.005141901, 0.016611548, -0.030040508, 0.0348036, -0.03443385, -0.0013848395, 0.016112994, 0.009884747, 0.012676004, -0.013543776, 0.015811972, 0.021243706, -0.020271378, -0.02178395, 0.03993538, 0.00033458852, 0.029581781, 0.029037809, -0.026106397, -0.030425046, -0.0042684013, -0.00356446, 0.05773677, 0.060360197, -0.010488391, 0.03332992, -0.012115581, -0.016116725, 0.02578183, 0.014760256, -0.02745997, -0.03857092, 0.009162025, 0.035872366, 0.031512592, -0.01395735, 0.032559246, -0.001956384, -0.0400771, 0.067221925, -0.024228897, 0.018089093, 0.008576228, 0.036146216, 0.036701113, -0.0007796632, 0.004378421, -0.021568708, -0.010381969, -0.039584808, 0.035435483, -0.03330781, 0.048346978, -0.026626427, -0.005555234, 0.052317284, 0.026383476, 0.03951768, 0.011549573, 0.042963725, 0.033078447, -0.054109573, 0.03769076, 0.080740266, -0.044050608, -0.022880739, 0.0068920976, -0.054203343, -0.024287505, -0.0018413024, -0.044152897, -0.002874904, 0.012356333, -0.010444437, 0.06590115, 0.015006952, 0.005901119, -0.051100407, 0.023543738, -0.013300427, -0.023862343, 0.01951056, -0.027723907, 0.03935784, -0.030620845, -0.015446482, 0.018195648, -0.02127088, 0.021635305, -0.004711944, -0.064530835, 0.016174264, -0.04260463, 0.008927333, 0.023959843, -0.0027636853, -0.03949104, -0.0076633194, -0.02496787, -0.004493503, -0.0033608032, 0.0002035236, 0.014020751, 0.02600254, -0.011977257, -0.03386164, 0.0007906519, -0.049081687, 0.015445416, -0.013087314, 0.013605046, 0.015279521, 0.023953715, -0.015717138, -0.011194332, -0.041569963, 0.03511901, 0.016164675, -0.02249815, 0.029842313, 0.011160232, 0.03497196, 0.020853711, 0.008004818, -0.03429639, 0.031878617, 0.009480097, 0.0011295027, 0.030019198, 0.022398252, -0.0035312942, -0.047551, -0.004289979, -0.03149874, -0.0063982066, -8.204878e-05, 0.023361526, 0.04744404, 0.013566553, -0.009931632, 0.06597361, 0.018101545, -0.026665853, -0.057148572, 0.047987882, -0.02146961, -0.0107388, 0.028046032, 0.00052026386, -0.010500247, -0.05258155, 0.05069869, 0.0061691096, -0.015911603, -0.039465997, -0.014167801, -0.04354473, 0.021910222, -0.0014731486, -0.034632575, 0.010150606, 0.050627295, -0.03846063, -0.024637543, -0.018924497, -0.051718436, 0.049510576, -0.008244304, 0.052275732, 0.048323534, 0.045298915, 0.0196664, -0.040818736, -0.00056475133, 0.0417599, 0.044932894, -0.03633376, 0.014863616, 0.022816753, 0.021165121, 0.0024694551, 0.0045097526, 0.043828964, 0.02045572, 0.0071078753, -0.051198438, -0.005791382, -0.03336828, 0.025569385, -0.06630394, 0.0053214496, -0.08326779, 0.029197643, -0.012160269, 0.012039859, -0.016657101, 0.011832074, 0.010592551, -0.017155854, 0.004311557, 0.01959181, -0.003791293, -0.0063678375, -0.005425875, -0.0013490098, -0.016398568, -0.066697136, 0.05351579, 0.025794217, 0.0018061388, 0.059134793, -0.020877685, 0.024610372, -0.020596376, 0.059373483, -0.020122731, -0.032171648, 0.041193016, 0.0187608, 0.03847768, -0.021799134, -0.025437787, 0.03780744, -0.014787962, 0.022104153, 0.008527479, 0.030437168, 0.013827351, 0.0148281865, -0.0032638365, 0.060477413, 0.0071638175, 0.004419712, 0.04192799, 0.012804671, 0.0076108235, 0.012407481, -0.0057575335, 0.01906995, -0.020613158, 0.06779999, 0.022503745, 0.046846658, 0.011748427, 0.019235644, 0.014745871, -0.0040108003, -0.0042196517, -0.041469797, -0.05166609, -0.035709865, -0.0155844735, 0.031674024, 0.017895693, 0.026786262, 0.014100136, -0.01758914, -0.038654566, 0.0040049395, -0.037171293, -0.06375829, 0.013790589, 0.020096624, -0.019023063, 0.0066054594, 0.036048185, -0.061103962, 0.041883238, 0.028693631, -0.028028982, 0.0015567957, -0.021317298, -0.04068261, -0.0080088135, 0.032049373, 0.017989993, 0.031660173, 0.103944086, 0.017725734, 0.00434752, -0.018455647, 0.00598343, -0.078447156, 0.0017283523, -0.029594036, -0.008844219, 0.020173345, 0.02897068, -0.029083095, 0.0027841975, -0.006638226, -0.0064301733, 0.026289973, -0.026515609, 0.038892187, -0.07540816, -0.036745068, -0.050582543, -0.0075143897, 0.016761394, 0.022484608, -0.033075247, -0.0067206244, -0.04739236, -0.032414597, 0.016258445, 0.037697684, 0.0042601433, -0.007883077, 0.01888374, 0.037103098, -0.016390042, -0.014884927, 0.018370403, 0.0141475545, -0.046296824, -0.020795103, -0.04279963, -0.03299, -0.0041185827, 0.04894796, -0.0060726753, -0.044353224, 0.0041732993, 0.038924687, 0.002672979, 0.028791662, 0.03266597, 0.036432322, 0.03174382, -0.03284722, -0.00706104, -0.033015575, 0.0006369436, 0.013105428, 0.022091366, -0.028359484, 0.04018046, -0.04194078, -0.029074037, 0.0047684195, 0.052503757, -0.037942763, -0.006761566, 0.036620393, 0.04501388, -0.020684818, 0.034115244, 0.0034066227, -0.079802565, 0.034121636, 0.022954477, -0.042490613, -0.0134773115, -0.01951056, -0.029600963, -0.034292445, -0.010343274, 0.03364746, 0.016621005, -0.007526677, -0.011357895, -0.0030730998, -0.037127342, -0.018251592, -0.007645055, -0.02398142, 0.027246587, -0.0012928011, -0.04486257, 0.044250935, -0.027033476, -0.01263398, -0.008429314, -0.013260469, -0.04888882, -0.019053698, -0.0015040501, 0.008935325, 0.0075326376, 0.04683387, 0.044459783, 0.028932318, 0.00028557237, -0.008672662, 0.018688207, 0.0074925455, 0.0061291507, -0.026340855, 0.013718129, -0.020386191, 0.021473339, 0.012517034, 0.0037987519, -0.026952492, -0.03156001, -0.036941133, -0.05496416, 0.06007622, 0.01265466, -0.019136546, 0.055899728, 0.02434185, 0.008008281, -0.015644677, 0.014534355, 0.00075655367, 0.02463488, 0.0004134406, 0.012967969, 0.020795636, -0.06961786, -0.07173834, 0.053638056, -0.032991335, -0.0563771, -0.02549373, -0.027321177, 0.010640767, -0.038204897, -0.0003423139, -0.052451547, -0.010532612, 0.016985696, -0.029043138, 0.03779998, 0.006881442, -0.027484212, 0.01848715, 0.04487802, 0.020610228, 0.01261207, 0.05736595, -0.025727088, 0.015775742, -0.012940265, 0.00047044852, -0.009223562, -0.048717793, -0.0062457137, -0.03416213, 0.03716703, 0.012784692, -0.0032830168, -0.012703708, -0.0523386, -0.0022121205, -0.007561275, 0.030811982, -0.010004548, -0.025532622, 0.027406424, -0.011829742, 0.022161696, -0.0019554514, 0.013648868, -0.03351107, -0.028369699, -0.0034124833, 0.0068803765, -0.0113589605, 0.00987569, -0.036382772, 0.0014102801, -0.00239047, -0.017929256, -0.009466245, 0.018639725, -0.040703654, 0.0029742683, 0.012827314, 0.080137685, -0.01864745, 0.024472648, 0.051322043, -0.0031516855, 0.069193766, -0.03707859, -0.051778108, 0.08763449, -0.006199478, -0.017213395, 0.0051232534, 0.050390735, -0.0018365075, 0.028769819, 0.012914691, 0.027810806, 0.028471459, 0.01152226, 0.028919531, 0.0040225214, -0.013801244, -4.2089956e-05, 0.057787914, -0.023793614, 0.029921899, -0.023375379, 0.03781916, 0.0023208084, -0.01159575, 0.019406667, -0.022527453, -0.024573077, 0.02445107, -0.06580099, 0.024361627, 0.037500557, 0.017696964, -0.017010737, 0.04930386, -0.015111894, -0.036141954, -0.011092569, 0.0069773435, 0.012189571, 0.03710949, -0.0040755332, -0.00807701, -0.046972394, -0.041671723, -0.046363752, 0.024157505, 0.006310297, -0.047481738, 0.017445488, -0.015770415, -0.0156548, 0.009093029, 0.01780352, -0.0031412963, 0.038321577, -0.07869011, -0.062301666, -0.010007287, 0.021023668, -0.013614503, 0.0032707627, 0.016055454, -0.027415015, 0.024121275, 0.05519006, 0.0061103697, 0.044033553, 0.06410887, 0.03596933, 0.016439592, 0.00359676, 0.026966078, -0.012544139, 0.032527547, 0.0056192763, -0.0023362592, -0.0763019, -0.013500621, 0.012064901, -0.040948737, 0.050186146, -0.0063507888, 0.034720488, 0.020160025, -0.05701964, 0.043963227, 0.030975014, 0.0038760058, -0.0073221875, -0.055703662, -0.013281247, 0.031437203, -0.030090591, -0.08149043, -0.029357214, 0.0055217766, -0.0251325, 0.008286394, -0.037996043, 0.02922455, 0.0148471, 0.012294531, -0.00052479253, -0.04438093, -0.07692766, 0.0030065018, 0.0010165524, 0.023175051, -0.011983383, 0.031007513, -0.0011199126, -0.030855669, -0.062201496, -0.061805107, -0.011967401, -0.012741003, -0.0056517757, 0.02304099, 0.06077151, 0.043413393, 0.011989245, -0.0082746735, -0.049221147, 0.030447558, -0.04556425, 0.049287874, -0.010747325, -0.00208958, -0.069219336, -0.016085023, -0.0070103756, 0.011317404, 0.0092960205, -0.022573536, 0.0035078516, 0.008576228, 0.0046544033, -0.018663434, 0.011110151, -0.033388793, -0.0054469197, 0.011966069, -0.018933022, -0.060871672, -0.0087067615, -0.003208427, -0.040470295, -0.031216897, -0.01152519, 0.021123832, -0.039905544, -0.056027595, 0.04168291, -0.042697333, -0.024597585, 0.019451555, -0.02680118, 0.028714942, -0.009374489, -0.04424134, 0.0055659977, -0.038592763, 0.06256166, -0.014081605, 0.055418093, -0.008041847, -0.0021247438, -0.0145780435, 0.013050518, 0.020453589, 0.018977642, -0.0036299925, -0.004788665, 0.04263127, 0.029191252, -0.06603115, -0.067646556, -0.026331266, -0.003037936, -0.011824614, -0.019957567, 0.025195368, 0.03460327, 0.012507778, 0.014731486, 0.006338468, -0.010232888, 0.020957602, 0.030826366, -0.01937078, 0.02839314, -0.022116674, -0.015181156, 0.03847129, -0.012964773, -0.008177839, 0.010731041, 0.05277868, 0.05214466, 0.003749203, 0.036061503, 0.01068339, -0.0066576726, -0.012412809, -0.028124616, 0.025782496, -0.022415299, -0.00023469147, 0.040873345, 0.013849194, 0.004304897, 0.032508366, 0.012223404, 0.030046903, -0.03889112, 0.0056373905, -0.06599919, -0.009015243, -0.046045348, -0.007052998, 0.029599365, 0.015525866, 0.004762825, -0.025558727, 0.049609676, 0.0046746493, 0.016128447, 0.044002656, -0.031577058, 0.060512308, -0.045177974, 0.00018088028, 0.025990283, 0.012980756, 0.014556732, 0.0412098, -0.030898292, -0.0028338796, 0.013906735, -0.046719853, -0.0035466116, 0.023168925, -0.042908315, -0.028682975, -0.008650285, 0.02018613, 0.020455187, 0.0009078644, 0.012592889, 0.02734249, -0.002246352, -0.0117468275, -0.015369095, -0.046629284, 0.031702798, 0.011931029, 0.021750387, -0.021596411, -0.004791862, -0.001366059, 0.03746965, -0.016675882, -0.05354056, 0.049354073, 0.005352351, 0.028346255, 0.059949152, -0.022071121, 0.039328005, 0.004397335, -0.032534257, -0.013785494, -0.0014854027, -0.04844714, -0.06680476, 0.017236253, -0.018235343, 0.0387185, 0.04631174, 0.021068556, 0.025569117, -0.07187686, -0.02204182, 0.019502303, -0.059607904, -0.052756302, -0.034115244, 0.023270952, 0.0154699255, 0.028522072, -0.008545327, -0.035476506, 0.04822071, 0.031754475, 0.002130338, -0.030777885, 0.007100949, -0.007095888, 0.037229903, -0.040056854, 0.017903684, 0.03479028, 0.015911069, -0.015286647, 0.00036429128, -0.018148765, -0.017694833, 0.0056115505, 0.010249704, 0.010654621, 0.02178022, 0.0054810187, -0.0022142516, 0.04486856, 0.035018846, -0.05937561, 0.042373396, 0.0051388545, -0.023789885, 0.007400107, 0.02098211, -0.02421398, 0.046147645, 0.013971736, -0.011980721, 0.015149722, 0.010362122, 0.05453314, 0.051178727, 0.014757992, 0.021758111, 0.02779483, -0.010732407, 0.0077082566, 0.0035065198, 0.018081367, -0.008129222, 0.00028344124, -0.004005472, 0.0033793175, -0.018743351, -0.0017454013, 0.013419771, 0.07581547, -0.013306821, -0.086903505, -0.08391566, 0.056121364, -0.0231611, -0.02145842, -0.00015184352, 0.0039798985, -0.009744092, -0.030201944, 0.007171277, -0.050178956, -0.015523203, -0.071124576, 0.023809599, -0.0017251555, 0.042266972, 0.020136584, 0.021302847, 0.0002477447, -0.04068767, -0.008556516, 0.0014070834, 0.003946067, 0.04412946, 0.054130353, 0.00076707616, 0.0073311115, 0.038756862, 0.0040797954, -0.011464985, -0.006189888, 0.002891953, 0.01715299, -0.016611282, -0.016277626, 0.0046089836, 0.024011098, -0.016484879, -0.0007108008, 0.04023144, -0.005331572, 0.054247033, 0.009052571, -0.036622528, 0.004056886, 0.008909885], [-0.05261466, -0.06720773, -0.037335027, -0.038825102, -0.028990192, 0.03172243, 0.012444489, -0.011514167, 0.0001507226, 0.042288862, 0.021679562, 0.04919274, -0.069398925, -0.050692685, -0.02021684, 0.044168998, -0.023788575, -0.03979421, 0.057860326, 0.022829797, 0.00061744294, 0.022398418, -0.049466413, 0.018378802, 0.0051884954, 0.012402911, 0.030352414, 0.030328507, 0.024735462, -0.011696073, -0.005068437, -0.010731449, -0.0066359523, 0.030767681, 0.047029607, 0.028111326, 0.0055307397, -0.02126228, -0.04132918, -0.045337517, -0.091231875, 0.0026215338, -0.012017788, 0.008754644, -0.02958113, 0.009262684, 0.018527446, 0.033944808, -0.008369782, -0.009356755, 0.044447053, -0.004698907, -0.03671239, 0.008273631, -0.021042954, 0.025974182, 0.03441218, 0.028192922, -0.013009569, -0.0065361634, 0.02400829, -0.0063740066, -0.074381344, -0.018451435, 0.015136708, 0.008269994, 0.009319854, -0.012783095, 0.009156139, -0.02802453, 0.016529072, 0.054068875, 0.0046323813, -0.027953714, 0.033445086, -0.006593204, -0.06482943, 0.0007858365, 0.0053738332, -0.024096906, 0.01863659, 0.03055498, -0.0028363501, -0.051278945, -0.059948094, 0.047805574, -0.006657911, 0.033749387, 0.0015784295, -0.00913275, -0.022144789, 0.035682794, 0.028901057, 0.02820072, -0.0020427462, -0.008505659, -0.013343108, 0.04402763, 0.049297724, 0.016333133, -0.013486684, -0.01273398, -0.03179727, 0.006388559, 0.041347887, -0.033991583, 0.019373572, -0.0669042, -0.010521217, -0.008487241, -0.037102968, -0.009928982, 0.026494434, -0.08008048, 0.010003043, 0.0036329345, 0.0071421727, -0.041803174, -0.031321198, -0.016546223, -0.026463315, 0.022155443, 0.0007291855, 0.028757352, 0.0020294278, -0.051387053, -0.01355256, 0.016185528, -0.069336556, 0.001371056, 0.022412973, 0.012621199, 0.06303427, -0.017292561, -0.044429384, 0.041253295, -0.0009824905, 0.066160984, -0.018290449, 0.04504007, -0.0227443, -0.011044751, 0.0061484426, -0.018733261, 0.04608993, -0.04676502, 0.0029661169, -0.067316875, -0.015166851, -0.030165311, 0.00035120963, 0.03401783, -0.023285601, 0.007676458, -0.007257683, -0.09114143, -0.010191966, 0.02948082, -0.041894644, 0.0136513105, -0.05004887, -0.021209268, 0.043963574, 0.00024219562, 0.0067664054, -0.047690712, 0.0010020455, 0.026905542, -0.0026340073, 0.028826477, 0.057104114, -0.0067077405, -0.015902735, 0.034968164, -0.02463275, -0.020727996, 0.035338216, -0.031207373, 0.014243806, 0.053872414, 0.0013341549, 0.0100139575, 0.012693961, -0.024897294, -0.011475707, 0.039773095, -0.01483838, -0.022860982, 0.03604453, 0.010602036, 0.059422124, -0.028865978, 0.02073865, -0.014326183, -0.002432351, 0.03614406, -0.0028143548, 0.027736077, 0.0063597145, 0.051800758, 0.039483085, 0.012952789, 0.043753214, -0.04422266, -0.044969387, -0.0130328275, 0.029491216, 0.012788552, 0.052752912, -0.014122188, -0.024764374, 0.03199269, 0.055058446, 0.05606881, 0.028323894, 0.025335949, 0.04488675, -0.06591151, 0.031666297, 0.06965255, -0.0329095, 0.004257654, -0.012575332, -0.04155448, -0.011889935, 0.020923935, -0.009440952, 0.028842071, 0.0102117155, -0.00564664, 0.057712205, -0.0018065922, -0.0015155418, -0.042438287, -0.012097308, -0.014800959, -0.04048305, 0.03748861, -0.052770577, 0.04442445, -0.010810449, 0.019391308, 0.022489892, 0.00073028996, -0.009818798, 0.010790699, -0.05840553, 0.029722497, -0.021255786, -0.005556986, 0.03108056, -0.01074938, -0.04242685, 0.010970526, -0.015537941, -0.015450626, 0.0415997, -0.009134829, 0.046547294, 0.0037628678, 0.008318328, -0.07539872, -0.008204507, -0.015691003, 0.024368728, -0.0006568777, 0.028336888, -0.032268148, 0.014364643, -0.046061605, -0.007817955, -0.06468598, 0.03659025, 0.00047971366, -0.049300484, 0.030251067, -0.014959478, 0.008430071, 0.03676904, 0.013872196, -0.029624786, -0.008149415, 0.008144348, 0.012359254, 0.014278107, -0.015725954, 0.008241928, -0.028559335, -0.0067003993, -0.025324836, -0.045633085, 0.029594643, 0.016862221, 0.05625123, 0.033501998, 0.0054388773, 0.07514925, 0.010445856, -0.007037186, -0.056220572, 0.04501928, 0.0010641535, 0.005451221, 0.021486806, -0.011838871, 0.008905627, -0.034578882, 0.039499097, 0.016574288, 0.016550511, -0.064954035, -0.030783271, -0.06833659, 0.009729924, 0.035022736, -0.027370963, 0.024470594, 0.058817152, -0.013099353, 0.022080341, -0.020339236, -0.013685612, 0.036527883, -0.03757917, 0.038120735, 0.042966336, 0.04287694, 0.006430658, -0.055276733, 0.0050570033, 0.03714169, 0.021294504, -0.014446501, -0.023417097, 0.00023076149, 0.007265739, -0.022201959, 0.007338632, 0.0042521963, 0.029505767, 0.0088766515, -0.06467455, 0.0153735755, -0.041347887, 0.0030581097, -0.06400409, -1.9230125e-05, -0.08608443, 0.031591456, -0.010776146, 0.02631097, 0.0013077784, 0.01702074, 0.010472622, -0.004473343, 0.023516785, -0.008369522, 0.008590149, -0.029529158, -0.009536323, -0.022441035, -0.029904922, -0.062995814, 0.040862456, 0.016381469, -0.02264646, 0.032996558, -0.025488751, 0.03006864, -0.051120948, 0.06426188, 0.003296667, 0.009001349, 0.045904383, 0.01616214, 0.06339912, -0.011140998, -0.020844936, 0.008905107, -0.00913353, 0.022373471, -0.027375901, 0.057326235, 0.0066010654, 0.036012307, 0.033556048, 0.052784093, -0.0007803793, -0.031946953, 0.03214887, 0.011570558, 0.027834436, 0.045001615, -0.0075562694, 0.010677397, -0.019966068, 0.043945514, 0.04428607, 0.021179644, 0.014878918, 0.025999129, -0.014794722, 0.0018720786, -0.017456796, -0.04073772, -0.022712337, -0.026441356, -0.028359756, 0.01816779, 0.022658285, 0.047204237, 0.006240955, -0.017938068, 0.05012098, 0.0048537874, -0.016340408, -0.031922527, 0.032423746, -0.0048220837, 0.0020794522, -0.0025194061, 0.013672749, -0.050330956, 0.021382738, 0.0069098515, -0.016489053, -0.027082771, -0.018399982, -0.028217707, 0.013770328, 0.012998525, -0.007079805, 0.04416484, 0.101264805, 0.027358752, -0.006206133, 0.012542199, -0.023711262, -0.065329865, -0.021100646, -0.043927845, -0.028223587, 0.043359254, 0.0025807347, -0.026333837, -0.0006483021, -0.01018313, 0.03403628, 0.010224645, -0.020468129, 0.029110251, -0.00798466, -0.012128621, -0.042657614, -0.06694163, 0.030015627, 0.035994638, -0.058626153, -0.021330886, -0.058995947, -0.027911745, 0.012993327, 0.01149078, -0.0074163317, -0.008787648, 0.012569225, 0.047170978, -0.040437836, -0.004923172, 0.03127676, 0.0013991215, -0.010393753, -0.027769601, -0.048006706, 0.002241089, 0.0069935285, 0.06771187, 0.003255608, -0.015979715, 0.044135734, 0.017881937, 0.01668759, 0.03727526, 0.0049725464, 0.001115737, -0.009996027, -0.008267394, -0.019323677, -0.016114844, -0.0065382426, 0.028336888, 0.0142921405, -0.008524728, 0.057628006, -0.041710664, -0.036149386, 0.017152231, 0.059254773, -0.011190894, -0.027023261, 0.04582722, 0.04897874, -0.038863562, 0.0002276431, -0.0006216008, -0.0790618, 0.019793775, 0.05481729, -0.008633806, -5.587131e-06, -0.031336788, -0.006999895, 0.014037991, -0.010235883, 0.060686115, 0.026666466, -0.021189518, -0.04698595, -0.025506422, -0.039836504, 0.006962345, -0.012421621, 0.006497703, 0.030066041, 0.015397897, 0.0036552828, 0.0040044948, -0.013991735, 0.036121972, -0.023068875, -0.008689938, -0.038930282, -0.013956652, -0.018531993, 0.013267746, 0.015901495, 0.012239715, 0.048707306, -0.009956008, -0.028103268, -0.025038661, 0.0071889483, 0.015804045, -0.013935084, -0.017845687, 0.0046848743, 0.013460828, -0.0054883817, 0.012139277, -0.03020273, 0.00045424677, -0.024745531, -0.07378547, -0.05710249, 0.059191365, -0.009076099, 0.002040472, 0.031813905, 0.015467257, 0.032223452, -0.024695639, -0.0033463016, 0.018034479, 0.027773757, 0.0026828623, 0.041368674, 0.03303034, -0.07053402, -0.057694532, 0.044061933, -0.0153282285, -0.039637703, -0.04889753, -0.026176877, 0.02563941, -0.023351088, 0.022019265, -0.031038461, -8.9394096e-05, 0.012526607, 0.0069633843, -0.0032410559, -0.011258719, -0.016012976, 0.008184757, 0.03563706, 0.015266641, -0.019417228, 0.08395769, 0.0027449704, 0.012031562, -0.016120043, 0.06390639, 0.029048923, -0.057009526, -0.038142174, -0.027134487, 0.034148283, 0.022058772, -0.029330391, -0.033482246, -0.04540804, 0.0013648191, 0.014576954, -0.01796714, -0.02507998, 0.0033527985, 0.05579023, -0.00873314, 0.0140307145, 0.012994238, -0.010007981, -0.029374275, -0.029239146, -0.0059003676, 0.00056845805, -0.030647622, -0.015814958, -0.027290145, 0.0014947524, 0.007629682, 0.011272492, 0.0148134325, 0.024174346, -0.026231969, 0.026544848, 0.012473076, 0.03010814, 0.018254066, -0.009876489, 0.05678812, 0.0172515, 0.05704902, 0.008106797, -0.064579956, 0.07731134, -0.024755927, -0.0679603, -0.018365288, 0.03055199, 0.013091948, 0.01629883, 0.052582957, 0.00019957752, 0.03154572, 0.0093253115, 0.009913909, 0.0016901721, -0.025018392, -0.0075961594, 0.029728735, -0.009981734, 0.01542256, -0.047712017, 0.023518963, 0.0090433555, -0.019032627, -0.031561315, -0.010581506, -0.025037102, 0.03371197, -0.03302696, 0.03257687, 0.0054727895, 0.018061765, -0.029231869, 0.025740463, 0.003670355, -0.033831246, -0.020658351, 0.05226124, 0.00084612553, 0.0115493145, -0.030213125, -0.023264814, -0.024430573, -0.048389234, -0.0073164124, 0.0028594416, 0.006724307, -0.024993965, -0.024887031, -0.0030752607, -0.008252582, 0.025281249, 0.01635665, 0.0026857208, 0.010823443, -0.043864436, -0.05143902, -0.014507829, 0.015883043, 0.028825438, 0.0021465302, -0.04490624, 0.015452705, 0.06829293, 0.022744235, 0.033184197, 0.020268098, 0.034707777, 0.04351933, 0.0003084616, -0.0072219516, -0.004871978, -0.018096067, 0.039418735, -0.021590753, -0.05181739, -0.025850356, 0.017927673, 0.01146206, -0.014132583, -0.0004937464, 0.017212002, -0.010890228, 0.036232676, -0.049775876, 0.008935122, -0.010687792, 0.001028032, 0.0031029528, -0.03589485, -0.02551266, 0.039539345, -0.03609027, -0.05298783, -0.011954122, -0.020392248, -0.0052771103, -0.010656088, -0.047955774, 0.050335113, 0.0025019953, 0.007728431, 0.009259566, -0.021708213, -0.05357305, -0.004715019, 0.0037912745, 0.030189479, -0.010702084, -0.00060496933, -0.0234857, -0.01692225, -0.051829863, -0.048482783, -0.017437045, 0.028951084, -0.008397847, 0.020404203, 0.057050068, 0.0485254, -0.0060026655, -0.019354861, -0.03989679, 0.04881437, -0.06671814, 0.0016023372, -0.011270932, 0.027044833, -0.05573098, -0.0002868927, 0.008912384, -0.021856856, -0.00334916, -0.05657464, 0.015122155, 0.012418763, -0.004654015, -0.021539299, -0.00012057808, -0.014943366, -0.031265065, 0.010687272, 0.008984626, -0.073257424, -0.014007847, -0.006650245, 0.00072450796, -0.022360997, -0.038257033, 0.008402168, -0.012748013, -0.050150085, 0.01811166, -0.044135734, -0.0182299, 0.014205605, -0.04439976, 0.016947458, -0.020378346, -0.03404148, 0.009162245, -0.030398149, 0.04517416, 0.026422191, 0.0072788624, -0.014988063, 0.011602262, 0.013187188, -0.021046462, 0.02930333, 0.060746405, 0.018464038, -0.00849036, -0.0067788786, -0.001084683, -0.047925632, -0.025958588, -0.04702649, -0.0067367805, 0.011122288, -0.0055741374, 0.027579118, 0.024342218, -0.008692017, 0.021294245, -0.008082889, 0.026537571, 0.029937146, 0.00778872, -0.030284848, 0.023694113, -0.010253295, 0.014777052, 0.03177476, -0.035326, -0.041663885, 0.006486789, 0.020901067, 0.05158455, 0.024674589, 0.022302268, 0.0066224393, -0.035171703, -0.011516246, 0.0138242515, 0.00876793, -0.070229456, 0.011337197, 0.07818449, 0.019469723, 0.0030294594, 0.006927003, 0.0058469977, 0.010804212, -0.047371075, 0.016029608, -0.06370264, -0.013278142, -0.011475707, 0.010500687, 0.013871417, 0.03322914, -0.010221672, -0.031525128, 0.05004562, 0.044391442, 0.007805872, 0.036977973, 0.00058418006, 0.061034597, -0.034380347, 0.040960684, 0.0022339427, 0.010973742, 0.018643865, 0.03797378, -0.047524396, 0.02196613, -0.012414946, -0.038706083, -0.019593159, 0.036193173, -0.062288977, -0.005421596, -0.027029239, -0.00033158972, 0.033605944, 0.009490326, 0.04954304, 0.063763194, 0.009499682, -0.023171261, -0.017705748, -0.022722732, 0.010453392, 0.026610335, -0.00825648, 0.013022432, 0.0073718945, -0.00013279181, 0.06332272, 0.023636423, -0.058116555, 0.051566362, -0.004009611, 0.030720644, 0.035563257, -0.031190224, 0.071464345, 0.013510851, -0.02050451, 0.013895584, -0.0032015562, -0.03514955, -0.047417067, 0.022313181, -0.02864561, 0.032785285, 0.044614017, 0.06087374, 0.013447574, -0.04684511, -0.037337627, -0.016070148, -0.02155645, -0.05137536, -0.02757418, 0.014070085, 0.012523489, 0.025289042, -0.0067586093, -0.014853452, 0.061745334, 0.00055507495, 0.019774806, -0.0005927556, 0.011434387, -0.050890185, 0.004733859, -0.0154032, 0.026937766, 0.005755784, 0.054687746, -0.024142642, 0.013854006, -0.06336586, -0.003075001, -0.0071502277, 0.041120503, -0.044552043, 0.028607931, -0.009885324, -0.025998026, -0.0005489924, 0.04241126, -0.032732792, 0.05707085, 0.0077344086, -0.02147641, -0.018222623, 0.045617495, -0.026647627, 0.017199008, 0.021082973, 0.0044061677, 0.004860544, -0.025946636, 0.10019623, 0.03283206, -0.00496579, 0.021139625, -0.019943198, 0.018080994, 0.0488731, -0.028832195, -0.007498709, 0.016446434, -0.0021392214, 0.015722966, 0.009106244, 0.0038315372, -0.0108811, -0.016273882, 0.07195809, -0.03179909, -0.058652923, -0.049975455, 0.07125749, -0.014528359, -0.048276186, -0.011779752, 0.0113065345, -0.037969492, 0.01308584, 0.015248969, -0.010893606, 0.0018344305, -0.062089395, 0.0014853973, 0.0009282434, -0.00644521, -0.008423834, 0.02731808, 0.017531117, -0.000630956, -0.025609327, -0.013666901, 0.008274151, 0.052359995, 0.022699602, 0.028175836, 0.035950977, 0.053062674, 0.0046682428, 0.030048888, -0.023074852, 0.0477879, 0.04895827, 0.008543762, -0.012115238, -0.011215321, 0.0043241144, -0.005628092, 0.018188579, 0.0012224122, 0.014728717, 0.050839253, 0.046350837, -0.056354664, 0.03622592, 0.0049109585], [-0.06521064, -0.081392825, -0.04276104, -0.06854308, 0.008502797, 0.028117394, 0.029889965, -0.015214193, 0.023059478, 0.019637862, -0.009899805, 0.05058029, -0.08262836, -0.026659457, -0.0190487, 0.023828054, -0.01918501, -0.027927399, 0.032693118, 0.024567822, -0.012126597, 0.016478255, -0.05294556, 0.040376935, -0.0005063596, 0.024821524, 0.04405668, 0.031885214, 0.022768665, -0.02636255, 0.004270518, -0.044159155, 0.022965863, 0.02310933, 0.0504191, 0.022872249, -0.005228251, 0.0056714807, -0.03448425, -0.044544138, -0.07398708, -0.016323432, -0.0126605835, 0.002731974, 0.011839662, 0.021014651, 0.024452606, 0.015636286, -0.016870437, -0.008472332, 0.024377272, -0.01878038, -0.051998347, 0.011560967, -0.03141936, 0.04383345, 0.03769066, 0.020018134, 0.0031754626, 0.005931463, 0.0037251671, 0.027082657, -0.06594072, -0.03531133, 0.023149766, 0.017369596, -0.013173521, 0.01777334, 0.008490543, -0.017739274, -0.021540606, 0.016955465, 0.010383938, -0.0108459145, 0.052986555, -0.017838703, -0.054070596, -0.0031906264, -0.00744341, -0.034003437, -0.010462596, 0.020316424, 0.0049889544, -0.07356166, -0.06779859, 0.05764177, -0.0022335597, 0.02202197, 0.047438413, 0.026825635, -0.016675454, 0.0014247034, 0.03358799, 0.015550288, -0.019708212, -0.011534723, -0.004922483, 0.052175604, 0.043025818, 0.028065326, 0.033334292, -0.028404329, -0.018995307, -0.01150675, 0.0040691565, -0.002538099, 0.024679441, -0.04410487, 0.003140773, -0.015593079, -0.027243298, 0.0055459295, -0.0054218494, -0.04345456, -0.0015249642, -0.004886339, 0.036133844, -0.05513912, -0.04659312, -0.03811691, -0.008374287, 0.010760055, 0.004877829, 0.03726358, -0.01762101, -0.054112136, -0.01837269, 0.013666517, -0.04767549, 0.024130775, 0.015906049, -0.0018321176, 0.033300776, 0.001164911, -0.026692692, 0.024173426, -0.022571467, 0.055542275, -0.011497611, 0.030036204, -0.030249465, -0.0038622646, 0.031279217, -0.00013072706, 0.026154274, -0.033472497, 0.019250667, -0.09444143, 0.006733759, -0.0072149145, -0.011217601, 0.03221913, -0.023400662, -0.01989184, -0.032747682, -0.06322758, 0.0012878831, 0.014663587, -0.048036654, 0.013778964, -0.020059817, -0.009252816, 0.027362946, 0.009084976, -0.0139113525, -0.01994363, 0.00204538, 0.0020251614, -0.01618135, 0.018997522, 0.071922034, -0.0040760804, 0.017182853, 0.020927407, -0.026249548, -0.018775951, 0.033625655, -0.023783738, 0.005892688, 0.049653016, 0.017745644, 0.012811528, 0.0042120703, -0.030710887, -0.038065944, 0.037618373, -0.028926132, -0.027102044, 0.012887694, 0.020747935, 0.029398078, -0.013913881, 0.039538287, -0.013258825, -0.018028148, 0.052917868, -0.03246019, 0.0026893215, -0.002584352, 0.051495384, 0.029207528, -0.007476923, 0.0060245236, -0.03556219, -0.033925887, -0.037908632, 0.027942354, -0.006268251, 0.051446635, -0.028822545, 0.01575081, 0.033297732, 0.038339585, 0.056292396, 0.024815984, 0.02280467, 0.057954185, -0.046721075, 0.012945302, 0.059412125, -0.034871995, -0.007407128, 0.0012729269, -0.056770995, 0.0066158418, 0.026134333, -0.020806374, 0.044136997, -0.00084640225, -0.023905326, 0.07869769, -0.021377752, -0.027241634, -0.049885664, -0.019191395, -0.0017930656, -0.038085885, 0.055141337, -0.07388959, 0.05202272, -0.021372765, 0.017719056, 0.027975867, -0.030070547, -0.0169286, 0.01077058, -0.034432177, 0.0012385835, -0.039400637, -0.02126295, 0.016854927, -0.0029823494, -0.026626773, -0.0028264879, -0.012384727, -0.00042070844, 0.01295195, 0.0022038727, 0.042222623, 0.033710964, 0.0053431913, -0.07544502, 0.0062034507, -0.04322634, 0.032149993, 0.0060835164, 0.021198833, -0.014961601, 0.017638182, -0.021315157, -0.019095013, -0.0806381, 0.037919708, 0.024168095, -0.025167452, 0.037229516, -0.0018562134, 0.024134306, 0.04376476, 0.046863433, -0.03873322, 0.0049212365, -0.0024649806, 0.0005295554, 0.04072037, -0.013243316, 0.02076289, -0.0665139, -0.013450762, -0.023678008, 0.003804379, 0.039357707, 0.028588789, 0.058911372, 0.052291375, 0.0032948342, 0.034791123, 0.0019379178, -0.051104862, -0.04405945, 0.053081833, 0.008692241, -0.017836487, 0.019304398, -0.0008270148, -0.013210079, -0.055768386, 0.04526258, 0.017873878, 0.018697293, -0.027568037, -0.029975826, -0.04415057, 0.0018578753, 0.031249307, -0.018897815, 0.020731317, 0.078631215, -0.03727144, -0.011459667, -0.03084383, -0.018803647, 0.020539658, -0.02953102, 0.018214267, 0.040671624, 0.022616887, 0.02415127, -0.020952888, -0.025934918, 0.036398623, 0.01907064, 0.014852477, 0.0005362025, -0.01094119, 0.049598727, -0.0394131, 0.011464374, 0.008235251, 0.02342237, 0.021525096, -0.041140247, 0.0006562664, -0.02186853, 0.032628585, -0.06961326, -0.020649614, -0.08263944, 0.025775388, 0.012982969, 0.032411445, -0.010409428, 0.014180008, 0.026408527, -0.027458083, -0.0048436867, -0.011355529, 0.0054849973, -0.017257633, 0.0032748235, 0.009443645, -0.031948917, -0.047817748, 0.041658722, 0.009161696, -0.005674994, 0.03260643, -0.006032555, 0.031292513, -0.033814646, 0.06663978, 0.008652358, -0.00554039, 0.023046182, 0.01409138, 0.029949792, -0.053775348, -0.02826976, 0.02546657, 0.0054484378, -0.0002960746, -0.02578425, 0.05817354, 0.002792629, 0.038186703, 0.034243844, 0.060041387, 0.026828682, -0.03341184, 0.04864265, 0.02991877, -0.008826292, 0.008653467, 0.010554271, -3.4620512e-05, -0.042631976, 0.043969296, 0.035574377, 0.009928955, 0.016181627, -0.0030410658, 0.010718478, -0.00236832, -0.030386286, -0.011772083, -0.020069927, -0.06801795, -0.025681218, -0.007182787, 0.03022454, 0.06527268, 0.0049964325, -0.01922408, 0.021921154, 0.009050356, -0.026363244, -0.04967185, 0.01997022, 0.0097239325, 0.005606861, 0.0069916816, 0.026790183, -0.0678983, 0.0070692315, 0.026425837, 0.013701969, -0.030960709, -0.023069171, -0.038899053, 0.020053862, -0.0011628338, 0.040944155, 0.025034403, 0.08545118, 0.012043507, 0.021589905, 0.0222236, -0.0015388125, -0.038297556, -0.03130359, -0.013186261, -0.031765565, 0.019873282, 0.025225889, -0.002358055, -0.0023325917, -0.0024195584, 0.020479834, 0.019402998, -0.051487073, 0.023476586, 0.014264759, -0.01786917, -0.04287626, -0.054495454, 0.013990011, 0.02747484, -0.061235655, -0.03234664, -0.042159475, -0.039425425, 0.0042441976, 0.037089925, 0.0052667493, -0.010201142, -0.0035916704, 0.061871566, -0.06567373, 0.014121152, -0.0051948773, -0.008868114, 0.0062571727, -0.03690159, -0.062268175, -0.030618936, 0.0036370927, 0.050457872, 0.014318767, -0.023620052, 0.011583746, 0.006931303, -0.013963561, 0.01904959, 0.015261553, 0.012635362, 0.011698964, -0.018012082, -0.011059454, -0.0064117187, -0.013878083, 0.010768364, 0.04887752, -6.09321e-05, 0.058053892, -0.034020606, -0.017738996, 0.03801526, 0.040075045, -0.018297357, -0.022483114, 0.053879492, 0.018945452, -0.050134934, 0.034016732, -0.001781433, -0.07589703, 0.0003402504, 0.052259803, -0.007195527, 0.016494874, -0.014701255, -0.027776176, 0.010080663, -0.018342087, 0.053409755, 0.058357447, -0.000810397, -0.081726566, -0.028168911, -0.036995202, -0.015004807, 0.013289153, -0.0068509844, 0.009647214, 0.015654841, 0.0023431163, 0.069134675, -0.038278654, 0.011376577, -0.018111791, -0.03978818, -0.04904231, -0.005437359, 0.0018429192, 0.02803763, -0.007018824, 0.040738095, 0.06101962, 0.01292363, 0.014979327, -0.04050988, 0.015001483, -0.006857077, 0.0033462802, -0.0048745684, -0.03537455, 0.0035362777, 0.026306465, 0.026882134, -0.023606203, -0.025990209, -0.010802915, -0.057345416, -0.07273742, 0.061096065, 0.00034205065, 0.014386623, 0.03748958, 0.033026308, 0.038855292, -0.029390324, -0.015400312, 0.020181267, 0.007336476, -0.00018695078, 0.043740388, 0.025638012, -0.06670729, -0.06646252, 0.030106828, -1.7725702e-05, -0.028414302, -0.05067335, -0.011136726, -0.009745813, -0.0017826102, 0.012677201, -0.035383824, -0.0017603837, -0.0032993348, 0.0054240646, 0.0141041195, -0.011888961, -0.02527602, 0.017595805, 0.018988105, 0.013343022, 0.023333672, 0.050172597, 0.0051933536, 0.030127048, -0.017838703, 0.03390927, 0.010768364, -0.052480265, -0.018405927, -0.050672796, 0.005802502, -0.011854064, -0.03222699, -0.033729795, -0.050272793, -0.010005051, 0.011887299, 0.0047443947, 0.006696715, -0.0068908664, 0.051110957, -0.0032701152, 0.0028937208, 0.01824141, -0.0023641656, -0.013521387, -0.0349573, -0.019258976, -0.0045006666, -0.022046514, -0.0080164485, -0.0033345092, -0.010527959, 0.03266182, 0.013461287, 0.008436326, 0.03458063, -0.03756762, -0.00060599745, -0.010309711, 0.04798514, 0.034425877, 0.01019214, 0.07097593, 0.012196392, 0.064889364, 0.007016055, -0.037456624, 0.0927719, -0.0058051674, -0.051404536, -0.028906189, 0.009360001, 0.036665615, 0.017852828, 0.017437521, -0.0015050229, 0.013196232, 0.004878792, 0.00816047, -0.005846158, -0.021374982, -0.00094417064, 0.041213714, -0.006929088, 0.014498239, -0.041690852, 0.04448431, 0.005191415, -0.01302313, -0.0037836758, -0.008731155, -0.037044503, 0.04435303, -0.031992678, 0.057768065, 0.020157447, 0.008670084, -0.014984866, 0.037130084, -0.0071670003, -0.029891629, -0.006544108, 0.0336035, 0.00324048, 0.0049504563, -0.015733777, -0.03393586, -0.018914431, -0.061265014, -0.009190845, -0.010001174, 0.025799206, -0.04199579, -0.026554212, -0.0018988659, 0.0035275533, 0.032373503, 0.02067821, -0.020534672, 0.037165746, -0.03991385, -0.056977052, 0.013275444, 0.024616567, 0.012445659, 0.01698787, -0.019963574, -0.026513772, 0.047759686, 0.019972434, 0.04066719, -0.0018866794, 0.07058818, 0.035442818, 0.013156626, 0.007825344, 0.014544008, -0.040287476, 0.022831535, -0.0334484, -0.029125545, -0.07286593, -0.0077649658, 0.013535789, -0.034407806, 0.020620532, 0.03455958, -0.0061851623, 0.031193914, -0.039983645, 0.00068243954, -0.0031188927, 0.02891173, -0.010140209, -0.04629732, -0.008831832, 0.05507154, -0.026960794, -0.029513018, -0.033316564, -0.007622052, -0.001820762, -0.024557196, -0.0466474, 0.0049343924, 0.0030587222, 0.04099678, 0.017450124, -0.03143875, -0.05682639, 0.013013435, 0.013909138, 0.00035506798, -0.010563964, 0.0047200224, 0.0049908934, -0.021356147, -0.04870137, -0.031907927, -0.0253821, 0.028301854, 0.0018191002, 0.040143732, 0.046697255, 0.054205198, 0.016467178, -0.04223592, -0.038989898, 0.02569562, -0.06321539, 0.023854917, 0.009068913, -0.0020140829, -0.06728011, -0.018553998, -0.021658594, -0.01074053, 0.022066284, -0.06554965, 0.011728875, 0.0042073615, 0.0025857368, -0.017987156, 0.014818861, -0.01724136, -0.041956738, -0.024174398, -0.01093842, -0.07104794, -0.009477088, -0.019146666, 0.0051889224, -0.037678886, -0.008394782, 0.005826494, -0.019724276, -0.05288131, 0.0015997447, -0.021482999, -0.0035199367, -0.0056993673, -0.069894664, 0.03094049, -0.02195162, -0.036598038, 0.00056583766, -0.04709719, 0.04397304, 0.04094859, 0.027479824, -0.033881016, -0.0024239898, 0.0010081494, 0.023052275, 0.01467245, 0.04756914, -0.002059505, 0.0028671324, -0.001041108, 0.009467741, -0.037901983, -0.063489035, -0.039678432, 0.013244423, 0.007257567, 0.006607256, 0.038526814, 0.028188298, -0.018884521, 0.017078714, 0.0051714736, 0.024017774, 0.02376795, 0.03959915, -0.021330668, 0.02885606, -0.035150032, 0.012948626, 0.04100066, -0.028150631, -0.016753005, -0.013765393, 0.03991773, 0.003772251, 0.020171572, 0.061760016, 0.005946973, 0.015157692, -0.029309448, 0.0020226687, 0.02076566, -0.06757592, 0.0048047733, 0.036293376, 0.039942656, 0.004411484, 0.019119386, 0.004024565, 0.03251448, -0.05449324, -0.0064940467, -0.050025254, -0.035889007, -0.0133075705, -0.011656311, 0.030299872, 0.000895148, -0.021440344, -0.032367133, 0.072298706, 0.05598663, 0.014398255, 0.05710889, 0.0059484965, 0.059010252, -0.03266847, 0.028627565, 0.01375736, -0.00805744, -0.007137815, 0.027310874, -0.019342411, -0.0036825147, 0.01872499, -0.00766332, -0.019616814, 0.024215525, -0.08714841, -0.010200034, -0.03349964, 0.013730773, 0.063101284, -0.015032504, 0.042278882, 0.051408965, 0.013415033, -0.038918994, -0.013435407, -0.034064647, -8.765914e-05, -0.003912395, -0.012446767, -0.009720419, -0.0076154047, -0.0016695396, 0.05175905, 0.016864898, -0.074461244, 0.051607274, 0.015547657, 0.028785156, 0.03642521, -0.047708727, 0.050744254, 0.027634371, -0.020379018, 0.001967553, -0.033253316, -0.039520286, -0.07404026, 0.023745794, -0.0016784024, 0.008616907, 0.033200793, 0.04402178, -0.0004869029, -0.069981076, -0.021482581, -0.013031991, -0.04217886, -0.048575073, -0.035471346, 0.015562059, 0.0073250076, 0.037026778, 0.0033460034, -0.042240348, 0.048295893, 0.0042056413, 0.016806182, 0.0012020242, 0.015841238, -0.032484565, 0.00027834892, -0.03230523, 0.057630137, 0.0062920703, 0.031336274, -0.027264347, 0.016790949, -0.037538607, -0.0013604476, 0.018908061, 0.029677259, -0.0117222285, 0.028762167, -0.0071213013, -0.018407589, -0.0059370026, 0.052434847, -0.0077070803, 0.020377738, -0.0007134595, -0.023446396, -0.01487408, 0.02714248, -0.012869968, 0.049042586, 0.01645776, 0.0019548128, 0.029289506, -0.00061375246, 0.09050522, 0.024352068, -0.0009649429, -0.002546962, -0.0026727037, 0.00724732, 0.03933001, -0.04050766, 0.0042120703, 0.018398171, -0.018205404, -0.0064078416, 0.010850346, -0.01505106, -0.006947368, -0.0068011303, 0.0419235, -0.026961347, -0.060601268, -0.06565074, 0.016864622, -0.014550586, -0.022563713, -0.011040897, 0.015738348, -0.0219134, 0.0017318565, 0.009629488, 0.0027751802, 0.0021043732, -0.047557365, 0.01114836, -0.02163865, -0.008278319, 0.0006420028, 0.056276336, 0.023144228, -0.022655664, -0.0124606155, -0.009848843, 0.014771604, 0.024443744, 0.0020406714, 0.019972434, 0.024590326, 0.035110187, 0.01145302, 0.01863636, -0.013070351, 0.027085427, 0.025026476, 0.018029809, -0.031122455, 0.016328141, 0.028105484, -0.010732358, 0.0021899552, 0.010566735, 0.024565056, 0.050616298, 0.031691343, -0.068009086, 0.0395117, 0.004535564], [-0.012971586, -0.081713244, -0.034566995, 0.008401239, 0.009536903, 0.048374947, 0.033813097, -0.041670445, 0.0019731664, -0.0052136215, -0.006536289, 0.02628427, -0.049959593, -0.0014933514, -0.0073686414, 0.034678288, 0.018879848, -0.07662055, 0.035576116, 0.0498376, -0.0121330125, -0.0399711, -0.021306077, 0.021913903, 0.0018662881, 0.00538056, 0.020492785, 0.0107169775, 0.019969147, 0.020773156, 0.0035784792, -0.058980696, -0.0058813756, 0.022812001, 0.024851382, 0.002009149, 0.025925515, -0.030253343, -0.050980486, -0.046534404, -0.08646136, 0.03724577, -0.02376307, 0.05183979, 0.003373016, 0.058488443, 0.02501939, 0.029843487, 0.0045769005, -0.02170523, 0.05202492, -0.011205889, -0.029122228, 0.016177129, -0.01775823, 0.011208664, 0.039318323, 0.032138895, -0.016567454, -0.0154059725, 0.019630536, -0.006824686, -0.06289359, -0.04600229, -0.005393134, -0.017242381, 0.041721813, -0.0032225307, -0.012741644, -0.063440956, -0.027752476, 0.029514426, 0.022434518, -0.022528153, 0.02324707, 0.019518977, -0.03425987, 0.023481093, -0.017700844, 0.009114741, 0.033213295, 0.0072717955, -0.035033565, -0.067548074, -0.0247433, 0.0011139943, -0.021346474, 0.010756839, 0.04430187, -0.0029653006, -0.027154544, 0.016033597, 0.052278537, 0.019694477, 0.029740222, -0.0053955414, 0.00088552374, 0.03903153, 0.025468841, -0.0071505373, 0.03524866, -0.016201606, -0.04006821, 0.005676448, 0.008281654, -0.030682461, 0.0015923375, -0.036766626, 0.0076830555, -0.016812745, -0.005701596, 0.0068375273, 0.016939988, -0.067190655, 0.019016022, 0.008151099, 0.03235399, -0.011199869, -0.024935387, 0.0066076526, -0.030734899, 0.006087909, 0.010942773, 0.029894318, -0.046962187, -0.046118934, 0.0015805662, -0.017007407, -0.035463486, 0.0031126428, 0.016641427, 0.012118566, 0.038639333, -0.011674467, -0.024575558, 0.03397415, 0.029596692, 0.044816595, -0.029609133, 0.044275116, -0.03899194, -0.033231486, -0.00022579517, 0.0059815994, 0.04559136, -0.028745279, 0.035702392, -0.025144594, -0.026410546, -0.011387674, -0.011543913, 0.017607743, -0.0006420716, 0.023297032, 0.011800474, -0.07998874, 0.005229941, 0.019780086, -0.053129286, -0.014028194, -0.012737363, -0.0028318034, 0.031706564, 0.012046333, -0.025831344, -0.050034497, 0.02017282, 0.012792206, -0.016038949, 0.01787795, 0.04404183, 0.033857774, -0.014104173, 0.012727062, -0.025386976, -0.013904863, 0.038216103, -0.0054297857, -0.0074262265, 0.015536595, -0.00940635, 0.0019026722, -0.019909035, -0.012772409, 0.0034634413, 0.030476999, -0.034679357, -0.01685759, 0.021699881, 0.014844696, 0.038070563, -0.04684447, -0.0012199361, 0.015467504, -0.029329833, 0.008100803, -0.016280795, 0.009317027, 0.020843249, 0.03774525, 0.025000129, -0.017163109, 0.043908067, -0.030168204, -0.056709904, -0.02973313, 0.026133385, 0.032970376, 0.048570976, -0.058980696, -0.010536395, 0.051421378, 0.044831578, 0.060013898, 0.012449768, -0.0029604852, 0.016672458, -0.06904838, 0.04716444, 0.06955347, -0.0062516374, 0.015292006, 0.03344404, -0.042920344, -0.0433698, 0.008178387, -0.013522295, 0.015031966, 0.019867033, -0.026218057, 0.054745167, -0.021731984, 0.008726422, -0.033419825, 0.00068144867, -0.030511243, -0.030122254, 0.01603788, -0.075697035, 0.026519697, 0.008304126, 0.02503223, 0.047106653, -0.008398698, -0.047613893, -0.018638268, -0.07240856, -0.015857028, -0.030663198, 0.005849272, 0.06491665, -0.023772702, -0.013000746, 0.012237884, -0.008351746, 0.021645838, 0.018989269, 0.00564916, 0.009982073, 0.007382912, -0.018024823, -0.06983599, -0.005111291, -0.03893455, 0.06617404, 0.0020193153, 0.028456079, -0.06044034, 0.004599373, -0.04797345, -0.005416142, -0.054913707, 0.03236469, 0.020143926, -0.045497786, 0.020743193, 0.0002653896, 0.05402658, 0.026654532, 0.014832924, -0.033830754, -0.010751221, -0.0035367445, 0.0043018796, 0.0106883515, -0.006494287, 0.0086166, -0.02931806, 0.0071505373, -0.021860933, -0.012596374, 0.02495652, 0.014976855, 0.045578524, 0.044255454, -0.028804403, 0.010996547, -0.0074777263, -0.030390318, -0.052705515, 0.052801825, -0.035636045, 0.010091693, -0.00658926, 0.0012314398, -0.021282533, -0.030182716, 0.021908287, 0.014898937, 0.025240904, -0.023254229, -0.014205165, -0.064630926, 0.008566305, 0.020371862, -0.028546369, 0.053822722, 0.08952618, -0.0033756245, -0.015531454, -0.02505651, -0.030821042, -0.011901332, -0.05262419, 0.028287536, 0.046252698, 0.012579253, 0.009475104, -0.047641713, -0.03972283, 0.06022525, 0.019725509, 0.028159121, -0.00014660635, 0.019184355, 0.040852875, -0.017944831, 0.007570024, 0.022442542, 0.0075978474, 0.023086753, -0.06921532, -0.0064774323, -0.011700551, 0.026271965, -0.053840917, -0.0018818049, -0.04036918, 0.020842714, 0.010700925, 0.039750654, -0.0055360617, 0.007854676, -0.018500222, -0.023985654, 0.026225416, 0.01937772, 0.013439094, 0.007515448, -0.007128065, 0.000809445, -0.025440482, -0.0058326186, 0.023406856, 0.00043232823, -0.042740565, 0.039303344, 0.002097434, 0.039305482, -0.012999809, 0.08335802, -0.011260331, 0.027774947, 0.028826874, 0.032426447, 0.051967137, -0.07040743, 0.0023751298, 0.029905822, 0.02031889, 0.03501591, -0.005445837, 0.045467228, 0.0059937383, 0.034379724, 0.05219614, 0.009032343, 0.026052056, -0.02905588, 0.05441771, 0.032031346, 0.036467526, 0.02085716, 0.013531659, -0.003863666, -0.0066170827, 0.043982442, 0.04297546, 0.035700787, 0.018943252, 0.0029535294, 0.010185931, -0.008827782, -0.029462526, -0.01009069, -0.023568308, -0.012413384, -0.02701905, 0.033283386, 0.012499262, 0.063871145, -0.020244518, -0.002160571, 0.04927498, 0.0042654956, 0.010037719, -0.019716948, 0.018701406, 0.00707991, 0.0017578048, 0.0025725667, 0.048713975, -0.03523903, 0.014093472, 0.022280956, -0.015388316, 0.0019452763, -0.028768284, -0.048894823, 0.012189729, 0.023348933, -0.00029107244, 0.008252225, 0.08637575, 0.027331918, -0.012630618, 0.009064446, 0.010642069, -0.0679911, 0.004342277, -0.0314488, -0.0231523, 0.0011945207, 0.022166453, -0.011978916, 0.010192351, -0.07315015, 0.032956466, 0.03209074, -0.032336865, 0.034045845, -0.022433981, -0.0301573, -0.02011256, -0.046819862, 0.05577676, 0.061249353, -0.04069236, -0.004103373, -0.0523695, -0.05558628, -0.00035099915, 0.03612081, 0.0030301767, -0.02305987, -0.0008346931, 0.053229876, -0.06512077, 0.033120193, 0.016216587, 0.012004599, -0.023421703, -0.007823642, -0.037428495, -0.028437352, -0.0038497543, 0.043187875, 0.019701298, 0.003918777, 0.029715072, 0.02555271, 0.012602795, 0.019038092, -0.021897852, 0.007800635, 0.014437514, 0.008530991, 0.015495864, 0.0006602636, 0.01876053, 0.024779683, -0.011996037, 0.007545411, 0.06775568, -0.034641102, -0.033400565, 0.038327392, 0.04863371, -0.024991099, -0.027907375, 0.050766997, 0.031918984, -0.04287968, 0.008207815, -0.029279267, -0.07430909, 0.018982846, 0.042256072, -0.023009438, -0.0335354, -0.024113, -0.02914149, 0.0053051165, -0.019160822, 0.07394525, 0.03604991, -0.013997162, -0.05559698, 0.012150134, -0.03139302, 0.0043564555, -0.03989833, 0.0024412097, 0.054096673, 0.0063716243, -0.012760103, 0.023083009, -0.04311939, 0.05702238, 0.016870966, -0.019929903, -0.036620554, -0.01810428, 0.01594451, 0.0072960737, 0.016113857, -3.5581466e-05, 0.044281002, 0.0090607, -0.018432805, -0.044399317, 0.014547612, -6.581234e-05, -0.0018103744, -0.025051493, 0.0011889025, -0.01589903, -0.003290617, 0.022945365, -0.018482432, -0.014550145, -0.0048867, -0.07227158, -0.05737552, 0.049101155, -0.024074474, -0.013784868, 0.04902645, 0.03347333, 0.03872548, -0.021784654, 0.009358461, 0.03801813, 0.032888245, -0.01596919, 0.033490453, 0.0054683764, -0.059759747, -0.06426615, 0.04696861, -0.01452794, -0.02539072, -0.061121874, -0.013356293, 0.016938651, -0.025423026, 0.0119951, -0.01677198, -0.03328713, 0.004671071, 0.037773073, -0.02484028, -0.02546028, -0.02883624, 0.038040433, 0.03861927, -0.033016395, -0.001966612, 0.033312812, 0.013885334, 0.05389549, -7.192372e-05, 0.061647434, 0.015326249, -0.033571783, -0.04859626, -0.021678478, 0.034658488, -0.014429489, -0.038637795, -0.012237618, -0.03836164, 0.00047660441, 0.012309583, 0.008256439, 0.0002447898, 0.021982927, 0.07044809, 0.008387595, 0.024968024, 0.016462449, 0.022887712, -0.02286417, -0.036671802, -0.033210084, -0.003273495, -0.05919044, 0.023413142, -0.05745257, -0.007159098, 0.016842607, 0.0004965354, 0.0023183466, 0.035634976, -0.042460065, 0.056944527, -0.0017507152, 0.045851402, 0.049567927, -0.036743615, 0.042085655, 0.019262683, 0.08261214, -0.009395648, -0.05183658, 0.08997563, -0.006367745, -0.014463197, -0.0356842, -0.011743489, -0.029634817, 0.017792372, -0.0011675002, -0.008190693, 0.003554, -0.0007062788, -0.0055153947, -0.010683002, -0.021239461, -0.0014489416, 0.043765742, -0.013192431, 0.011208965, -0.029627323, 0.017821766, 0.003159193, -0.009071401, -0.029313244, 0.006024772, -0.025660392, 0.02618368, -0.024138683, 0.064136535, 0.01670871, 0.046405457, 0.009870112, 0.0016404929, -0.010500012, -0.019272849, -0.016208028, 0.055930857, 0.0134304, 0.0034238466, -0.018270683, -0.039647922, -0.010477404, -0.026761545, -0.028399363, 0.0058171684, 0.020431789, -0.023809085, -0.06772678, 8.520826e-05, -0.005765268, 0.03425345, 0.032527346, 0.0033387723, 0.016430613, -0.0564199, -0.062489085, -0.03542416, 0.03666443, 0.002081382, -0.010894751, -0.010727947, 0.015412929, 0.07066212, 0.04978463, 0.039828237, 0.028509049, 0.012927042, 0.056286134, -0.024887232, 0.00077904685, 0.002716665, -0.03559431, 0.010792154, -0.0002718103, -0.029925888, -0.04996815, 0.009548675, 0.012712215, -0.006785627, 0.02036116, 0.039684303, -0.021057272, 0.04597206, -0.02513523, 0.012336335, 0.03883035, -0.010582411, 0.015467806, -0.0746344, -0.03553652, -0.0036413486, -0.013005161, -0.05111746, -0.040919226, -0.034402195, -0.022049807, -0.02440618, -0.029444333, -0.0047502597, -0.006901701, 0.026352758, 0.0073281773, -0.043504633, -0.018461699, 0.025426036, 0.038237505, 0.037216075, -0.020047616, 0.017069474, -0.006880065, 0.007424488, -0.035051223, -0.061181396, -0.01500615, 0.034579836, 0.007880894, -0.0044595553, 0.073881574, 0.01851253, -0.024895791, -0.017246043, -0.022837417, 0.01750588, -0.016823346, 0.027763175, -0.0006987879, -0.00051258714, -0.04096631, -0.014133067, 0.0286792, 0.012608146, 0.0100930985, -0.027916202, -0.0070630554, 0.0137595935, -0.015842047, -0.0034377584, 0.0026228626, 0.015056044, 0.013434813, -0.029968692, 0.004341407, -0.06376199, -0.026931157, 0.0037882226, -0.030281704, -0.043823525, -0.036710445, 0.0053067217, 0.013856975, -0.024141893, 0.04762245, -0.03866769, -0.018124076, -0.0013547711, -0.047395587, 0.009261883, -0.0063685477, -0.02686267, 0.03569597, -0.047252726, 0.02052489, 0.0363862, 0.030153822, -0.034564853, -0.025579598, 0.006521976, -0.012312792, 0.038903117, 0.04192968, 0.039321534, -0.01415982, -0.017398, -0.03252962, 0.001063431, -0.055708274, -0.038350403, -0.0009973512, -0.012041652, -0.005139783, -0.005511115, 0.024033675, 0.014751695, 0.017774682, -0.0026319586, -0.01837823, 0.013783673, 0.007156156, -0.015379756, 0.0068609444, -0.023352679, 0.04338906, 0.00063886127, -0.0072833155, -0.017231062, 0.0064651924, 0.054558963, 0.033935625, 0.012520663, 0.023391737, -0.011740012, -0.015655845, -0.0068723066, 0.0043457546, -0.0030776632, -0.07677143, -0.008347466, 0.065251596, 0.005985177, 0.008331949, 0.0055397404, -0.03556408, 0.013196177, -0.039464664, 0.00048289134, -0.059006378, -0.042503003, 0.007132345, -0.014692739, 0.01587736, 0.011186627, 0.018048165, 0.008580752, 0.032535106, 0.056717396, -0.0036457626, 0.034064442, 0.0024181854, 0.04995852, -0.03129778, -0.034935918, 0.032183304, 0.0017220895, -0.0009845097, 0.012978039, -0.039781753, 0.004678562, 0.033670235, -0.028123807, 0.01918082, 0.014434338, -0.0520185, -0.007888118, -0.02509102, 0.022981815, 0.017590087, -0.0034950096, 0.0609144, 0.028837577, -0.03692233, -0.046848144, 0.0051750974, -0.022807453, 0.009925357, 0.05924181, -0.03094571, 0.025071826, -0.009977792, 0.026807293, 0.025453726, -0.02236349, -0.03172262, 0.042549018, 0.013438626, 0.041922998, 0.04091588, -0.025150213, 0.06659139, 0.039209172, -0.0022419, -0.01604537, -0.009811389, -0.017037371, -0.049276855, 0.025606886, 0.002933197, 0.03406511, 0.040029418, 0.016904676, -0.006256988, -0.09122339, -0.024391897, -0.020956948, -0.037184473, -0.037308104, -0.048138246, -0.012983757, 0.021294305, 0.019940069, -0.011927551, -0.027746055, 0.08751008, -0.017357336, -0.0086166, -0.008687363, 0.0005527166, -0.059027784, -0.016263139, -0.007542201, 0.059598424, 0.0076692775, 0.062366556, 0.0042440933, 0.018610446, -0.0678782, 0.03560073, 0.01810856, 0.018686423, -0.008369404, 0.047135744, -0.0016059815, 0.007870727, 0.05144385, 0.042868983, -0.03945958, 0.024069123, -0.012440138, -0.050860632, -0.0071457215, 0.060838424, -0.032084852, 0.050751477, 0.02620401, -0.0008527847, 0.025225922, -0.043712236, 0.05408383, 0.009599506, 0.009344282, 0.0021841135, -0.016270094, 0.0042515844, 0.034852717, -0.0321207, -0.021066368, 0.013102542, -0.040078107, -0.013686558, -0.013348669, 0.029569538, -0.009291846, -0.030233013, 0.058976416, -0.02269576, -0.027096491, -0.052431565, 0.047089532, -0.01040049, -0.014656355, -0.05282965, 0.013257708, -0.032513436, 0.0146049885, 0.0063936957, -0.0070997067, -0.005989458, -0.05979827, 0.011242674, -0.010868132, 0.019000772, -0.010009093, 0.038796104, 0.03630487, -0.014403004, -0.04921907, 0.02796302, 0.0057296865, 0.019069126, 0.013434278, 0.031691317, 0.013472267, 0.008689369, -0.022874337, 0.012478661, -0.032378867, 0.013068297, 0.048420757, -0.019834796, 0.018602954, 0.014007328, 0.035067275, 0.008530991, 0.016610928, -0.0011551938, -0.023626631, 0.04874782, 0.047484938, -0.03135503, 0.010494761, 0.004259075], [-0.028988728, -0.08603851, -0.03553385, -0.046307094, 0.014943654, 0.048048966, 0.029605076, -0.0033203268, 0.03673357, 0.0113343075, -0.012992773, 0.02908135, -0.08921578, -0.02796625, -0.0073644146, 0.03087172, -0.0065196636, -0.018138383, 0.040800452, 0.06693706, -0.0028960118, 0.011762016, -0.0058385767, 0.05430458, -0.006751703, 0.030832924, -0.019880258, -0.0089828735, 0.024703387, -0.00960601, 0.014818541, -0.066169165, 0.010623882, 0.015624012, 0.03657257, 0.022253208, -0.0033719721, -0.036222454, -0.04818087, -0.053998105, -0.062335055, 0.00812406, -0.023880944, 0.02391683, 0.031588446, 0.0073040402, 0.011206043, 0.03218491, 0.013370413, -0.03355724, 0.038855147, -0.0015144415, -0.057683587, 0.0090958625, -0.008006222, 0.024641072, 0.031356156, 0.026960138, 0.019762903, -0.024671623, 0.004872593, 0.01680579, -0.063528225, 0.004561267, 0.0062747733, 0.02512819, 0.025567537, 0.017948048, -0.0043023136, -0.029327696, 0.0038872121, 0.015487595, -0.008472726, -0.0028801304, 0.03402159, -0.020380707, -0.06624881, 0.006710484, -0.0028960118, -0.025734352, 0.011042863, -0.01016247, -0.014001916, -0.038966194, -0.058543853, 0.046080142, 0.006621984, 0.040258054, 0.029267564, 0.003824171, -0.043682642, -0.02837335, 0.013725748, -8.0013715e-06, -0.0027272555, -0.019059753, 0.0007172139, 0.02815125, 0.049738467, 0.04581052, 0.016728733, -0.036113344, -0.014775382, -0.04758731, 0.0265317, -0.0027667775, 0.03023064, -0.029293751, 0.0076134265, -0.049849033, 0.004425486, 0.0032172787, -0.01024903, -0.057350926, 0.020404954, -0.0155992815, 0.064288355, -0.038982686, -0.047051944, -0.04469324, -0.023164215, -0.012040853, 0.032709125, 0.034973267, -0.008080901, -0.050099257, 0.0050820834, 0.0066425935, -0.051941995, 0.013561597, 0.044346027, 0.0064476514, 0.027069246, -0.023149665, -0.058829963, 0.04348479, 0.00076376734, 0.06303336, -0.029246468, 0.02056789, -0.011238775, -0.020867577, 0.009428162, -0.008749622, 0.021395184, -0.025963482, 0.0033753668, -0.033005357, 0.010080759, -0.010254364, 0.0007603728, 0.017459478, 0.003503146, 0.028305702, -0.012067705, -0.06220412, 0.0082642045, 0.03459405, -0.021320505, 0.0058987085, -0.009070646, 0.0037878011, 0.035724428, 0.019211173, -0.01376042, -0.024037091, 0.024881842, 0.023171972, -0.0047496627, 0.025511768, 0.09328533, 0.0010605456, 0.014730283, -0.0075115906, -0.046085477, -0.027423369, 0.020384707, -0.04412102, 0.01840958, 0.057918295, 0.02252765, 0.016154345, 0.018444616, -0.033693776, -0.042112436, 0.01890312, -0.026139755, -0.01168758, 0.012379334, 0.028160948, 0.021968372, -0.025130128, 0.033114042, 0.0028938295, -0.00375919, 0.048288524, -0.047810376, 0.020451507, 0.014689792, 0.037711438, 0.024879295, 0.017336791, 0.058630176, -0.04546622, -0.03448058, -0.039580725, 0.017237136, 0.0076248227, 0.05667881, -0.02972437, -0.0020017978, 0.031176254, 0.0368405, 0.052225683, 0.019980395, 0.02114605, 0.025788482, -0.04433051, 0.014082415, 0.05033396, -0.046262477, 0.013020899, 0.02447741, -0.032646567, -0.03835421, 0.02383148, 0.00324589, 0.030130742, 0.016093912, -0.011838636, 0.06844907, -0.0069568297, -0.028866526, -0.04609372, -0.03670399, 0.0022820884, -0.055940744, 0.04403761, -0.035990655, -0.00066726597, -0.017001703, 0.029834632, 0.027210483, -0.0037213652, -0.036896992, 0.009029912, -0.04115712, -0.010152529, -0.020008279, -0.005354494, 0.04085646, -0.010390145, -0.046561196, -0.002510976, -0.011309091, 0.0003801864, -0.012918578, 0.02258178, -0.00971706, 0.018993316, 0.0042465464, -0.07130435, 0.019638762, -0.03644746, 0.055332642, 0.019049084, -0.003577583, -0.043883406, 0.01922269, -0.029928526, 0.0067900126, -0.06052965, 0.033219755, 0.030804798, -0.023935255, 0.009826655, 0.01157544, 0.016859256, 0.05455869, 0.014379193, -0.065692715, -0.013210507, 0.0026642145, -0.018610464, 0.031398736, -2.0852061e-05, 0.0036641434, -0.035204098, -0.0052189557, -0.04495801, 0.0053575244, 0.028884467, 0.008212318, 0.069585755, 0.052260112, -0.030475045, 0.026143633, -0.028469851, -0.031190803, -0.028554715, 0.013638217, 0.028897077, -0.014165096, 0.039250366, 0.024178691, -0.012497658, -0.044183332, 0.04282522, 0.002390834, -0.006699876, -0.030608885, -0.023687152, -0.020432595, 0.00023895006, 0.047681876, -0.016779816, 0.019322101, 0.05680295, -0.017260171, 0.012955433, -0.016080333, -0.015213275, 0.019240025, -0.05604185, 0.032726582, 0.053596586, 0.004256851, 0.0032970503, -0.07526139, -0.03416586, 0.045083128, 0.02934588, 0.00035012062, 0.008644391, -0.009536604, 0.015872782, -0.0075135306, 0.00042079945, -0.01680676, 0.019285731, -0.020644508, -0.08168577, -0.012154084, -0.011083597, 0.032176185, -0.0493641, -0.010494891, -0.060046174, 0.020522306, 0.0234028, 0.039656013, -0.023365945, 0.0047731823, -0.013999491, -0.006044673, -0.002623965, -0.0021336991, -0.009463926, -0.009266074, 0.00145431, -0.034791417, -0.009148721, -0.048083395, 0.031762175, 0.039243095, -0.034705102, 0.056712758, -0.0006711454, 0.027718207, -0.03268536, 0.051674314, 0.009989591, -0.023276718, 0.036849104, 0.019072846, 0.05856034, -0.0418399, -0.024405155, 0.020238865, -0.0045767543, 0.018047823, -0.043369375, 0.05234061, 0.02214489, 0.019148495, 0.0068564485, 0.03894389, 0.034366135, -0.04023611, 0.051870227, 0.0141095705, 0.02246858, 0.035860453, -0.0015285045, 0.022908172, 0.016002744, 0.050731607, 0.046652365, -0.0016642854, 0.009886786, -0.03070684, -0.011661394, 0.0014344278, -0.02901273, 0.0033867627, -0.045013294, -0.050619103, -0.010718929, 0.014569104, 0.033501986, 0.055656575, -0.01645567, -0.003164785, 0.029333513, 0.03482973, -0.006091711, -0.035898518, 0.015981892, 0.023671452, 0.009119261, 0.032861877, 0.057353836, -0.038131144, 0.013626578, 0.04192137, 0.0021792827, -0.009775737, -0.012918578, -0.056337416, 0.022173135, 0.008250385, 0.029088138, 0.0041757463, 0.09308747, 0.024578277, -0.017117359, 0.01312322, 0.008039681, -0.032877393, 0.0013519893, -0.015116774, -0.0044176057, -0.013033023, 0.0238373, -0.042626943, 0.017555496, -0.030352842, 0.064313576, 0.03339715, -0.02255417, -0.005653818, -0.022631032, -0.015388335, -0.012872995, -0.045584787, 0.053369634, 0.048805337, -0.06153782, -0.028587203, -0.036875658, -0.052874524, 0.0004604426, 0.021707237, 0.00020585347, -0.017706795, 0.028952358, 0.06667228, -0.057291765, 0.036551237, -0.014132848, 0.008220955, -0.0068939095, -0.02333491, -0.039928302, -0.015544969, 0.017744618, 0.0498083, 0.011215862, -0.034792878, 0.041336544, 0.041208036, 0.010112764, 0.03770489, -0.025213536, -0.009608435, 0.009831989, -0.0021237582, -0.03150892, -0.019831885, -0.009311657, 0.0038663598, 0.037995365, 0.011973932, 0.066076785, -0.040722135, -0.017519126, 0.017832391, 0.000269622, -0.050575458, -0.019135183, 0.05403981, 0.042541113, -0.054510195, -0.0004969337, -0.0013374414, -0.08821876, 0.042111464, 0.07460576, -0.025347376, -0.009956949, -0.02904886, -0.022436816, -0.008233169, -0.00494703, 0.04283886, 0.02167693, -0.011581137, -0.065859534, 0.00043934805, -0.007087276, -0.0077521172, -0.019417146, -0.013154741, 0.020334154, 0.023669513, -0.020667786, 0.019911293, -0.05813603, 0.0012021456, 0.006565247, -0.026051497, -0.06710678, -0.018807588, -0.006943251, -0.0008554194, -0.005454511, 0.029618412, 0.022518769, -0.0051318724, -0.008874249, -0.04543131, 0.002756109, -0.018973012, -0.027209515, -0.009707361, -0.016393842, -0.0049942504, 0.029237013, 0.025616512, -0.007828737, 0.008969296, 0.011275509, -0.075082935, -0.043651603, 0.07432984, -0.030169537, -0.039071426, 0.050032094, 0.03926346, 0.021348145, -0.031294823, -0.0032587405, -0.0051252423, 0.03518373, 0.004199023, 0.041176513, 0.022839312, -0.0626842, -0.07279794, 0.04289899, -0.023977688, -0.008942139, -0.051266488, -0.002709798, -0.010694682, -0.023249563, 0.0005664002, -0.027365662, -0.018417703, -0.0049909162, 0.02063675, -0.0002633179, -0.0013750236, -0.030708294, 0.017016737, 0.040526707, 0.008463875, 0.0041496814, 0.0346891, -0.00537671, 0.029016368, -0.017442992, 0.07184553, 0.00040346314, -0.050470714, -0.021770522, -0.025871709, -0.014974689, -0.0096305, -0.020021858, -0.030393576, -0.055027135, -0.013546079, -0.0062114894, 0.0014383072, 0.001634462, -0.023309695, 0.037580263, 0.01421759, -0.003376094, -0.006364728, -0.00013384114, -0.034155432, -0.02490706, -0.040862765, 0.008359737, -0.06337086, -0.019222206, -0.022481432, -0.021082887, 0.00312199, -0.0005043289, -0.021483442, 0.00723324, -0.009324265, 0.017637327, -0.008700401, 0.064024314, 0.036862746, -0.0038964257, 0.068557695, -0.0018815347, 0.049451876, 0.0029328666, -0.05880087, 0.08993736, -0.016694803, -0.026056347, -0.017675515, -0.011097175, 0.005959385, 0.021873811, 0.029569311, -0.029867424, 0.012414462, -0.004873917, -0.013092457, -0.008954748, -0.04023914, -0.020227954, 0.06888163, 0.010640855, -0.009939644, -0.037150614, 0.015990134, 0.021508658, 0.016218053, 0.012760733, -0.00801301, -0.009750338, 0.039335717, -0.044161752, 0.018725635, 0.04645257, -0.0023722856, -0.00021336992, 0.023495907, -0.009239038, -0.03772768, -0.028088331, 0.041013576, 0.01215966, 0.008416474, -0.020540249, -0.005643392, -0.021312261, -0.050542485, -0.010910234, 0.0043852367, -0.007906568, -0.0384415, -0.037994392, 0.028034868, -0.0057163737, 0.0376941, 0.025379866, 0.0063899136, 0.015037245, -0.054277427, -0.054772057, -0.017466268, -0.005477485, -0.015405914, -0.009827745, -0.0024827288, -0.03622512, 0.056595735, 0.02993774, 0.05649696, 0.04392947, 0.05104972, 0.05592135, -0.011522945, -0.02804675, -0.016025657, -0.03261941, 0.027268676, -0.015915092, -0.038181577, -0.096604206, -0.016363049, 0.034794815, -0.008562559, 0.040499065, 0.026351245, -0.017564224, 0.0057404996, -0.012407461, -0.01156271, 0.03305876, 0.009032337, 0.0062337965, -0.063025594, -0.0058502154, 0.034112033, -0.02078029, -0.017830936, -0.031265117, -0.056729242, -0.023312602, -0.0147371935, -0.047577612, 0.02340474, -0.021588186, 0.010663374, -0.005638785, 0.0031908501, -0.033564057, 0.022670068, 0.02474897, 0.030177295, 0.007273005, 0.02184326, -0.0051536113, 0.0024935184, -0.052146155, -0.028630713, -0.022427117, 0.03967226, -0.033151865, 0.04109135, 0.04541288, 0.030154988, 0.0034784148, -0.013539171, -0.04637692, 0.05202686, -0.034901984, 0.010697107, -0.0052847853, 0.012676113, -0.06507686, -0.023541491, 0.0066348347, 0.012241129, -0.00534872, -0.045792338, -0.016535502, -0.014967901, -0.0015236553, 0.022047902, 0.0020568375, 0.0026215403, -0.025631547, -0.017558768, -0.0035925554, -0.058603015, -0.011467178, -0.013926146, -0.018370604, -0.027233275, -0.02116193, 0.004368264, -0.032309055, -0.030948337, 0.048112977, -0.039069973, -0.031744413, -0.0026303902, -0.0480286, -0.0038051372, 0.009297958, -0.044501208, 0.024102073, -0.013186003, 0.053396795, 0.029563857, 0.040240597, -0.024698537, -0.0032534366, 0.0023519185, -0.022689952, 0.0073487754, 0.023633415, -0.0002932624, -0.018934095, -0.021207029, 0.00962856, -0.022578416, -0.08177887, -0.047113534, 0.0018255251, -0.009935279, -0.005759048, 0.0073350756, 0.0024949734, 0.013580025, 0.037887707, 0.028548652, 0.0066339863, 0.0044613713, 0.022821853, -0.031629182, -0.007861712, -0.023312602, 0.0010232057, 0.03938906, -0.0020529581, 0.0073573827, 0.019956391, 0.04049373, 0.005052745, 0.029412072, 0.067704216, 0.016856223, 0.00032635898, -0.023732312, -0.00875344, 0.029382978, -0.08046762, -0.012007271, 0.042286526, 0.026492057, 0.036059756, 0.007443943, -0.030497352, 0.04474658, -0.052068565, -0.00972106, -0.051562782, -0.04098448, -0.010679649, -0.018816317, 0.011637633, 0.01795411, -0.025193168, 0.0059006484, 0.043488424, 0.018669868, 0.037067205, 0.036133226, -0.010619033, 0.06824152, -0.03196136, 0.04822257, 0.017856153, -0.0053929244, 0.015387366, 0.053394854, -0.034221623, 0.0042606094, 0.059945308, -0.028490704, -0.007959668, 0.03577353, -0.06995042, 0.0061342637, -0.027974736, 0.014454721, 0.02377523, -0.01689732, 0.014668212, 0.021453377, -0.02044981, -0.0224373, 0.0008418413, -0.0075879074, -0.0024566636, -0.0036248642, -0.031159768, 0.0005370618, -0.019341012, 0.019832188, 0.03086493, -0.008465936, -0.050091498, 0.060727865, 0.031181589, 0.03030241, 0.035657994, -0.06403195, 0.03543129, 0.023510091, -0.015252556, -0.008342763, -0.00968166, -0.014465511, -0.067812845, 0.036998343, -0.030543903, 0.015378152, 0.034458727, 0.009465381, 0.02029342, -0.05832952, -0.011376754, -0.012403581, -0.02172639, -0.04030121, -0.038638383, 0.0018390957, 0.014922317, 0.021977587, -0.011027223, -0.033592425, 0.065844014, -0.011135243, -0.00903464, 0.0026002033, -0.004417, -0.025134007, 0.014597412, -0.0144626, 0.02992901, 0.0005084508, 0.037010953, -0.023340972, 0.013993914, -0.057148222, 0.0152902575, -0.015640015, 0.04342496, -0.03589522, 0.023696668, 0.013330771, -0.02666724, 0.0014632812, 0.034425784, 0.011857912, 0.05205547, -0.02312542, -0.02128783, -0.014383073, 0.035530116, -0.015309777, 0.06296886, 0.010174836, -0.007499468, 0.035728794, -0.02163183, 0.08169352, 0.0028590357, 0.016401842, 0.0057445, -0.01716852, -0.0015918487, 0.043650635, -0.05432786, 0.015500355, 0.03925425, -0.009410826, 0.0023863486, 0.0048660007, 0.011485121, -0.013158135, 0.0060044234, 0.031543832, -0.03137835, -0.021159507, -0.0432142, 0.06297129, -0.021843746, -0.06726362, -0.013807944, 0.022014199, -0.009946917, 0.007817825, 0.0193575, 0.00533934, -0.0057299524, -0.080917634, 0.010480099, -0.0065463344, 0.012613556, 0.0062054885, 0.050722394, 0.044582676, 0.004873563, -0.0064248596, -0.0037099693, -0.004009657, 0.050438706, -0.013503891, 0.02703397, 0.029032372, 0.023305815, 0.030837286, 0.017259687, -0.0047345087, 0.049032405, 0.060550015, 0.010366868, -0.02101921, 0.014731253, 0.0043842667, -0.0025449211, -0.0011003099, 0.01404362, -0.00634921, 0.06765378, 0.02028134, -0.06850338, 0.0004383782, -0.009745186], [-0.021821983, -0.08397242, -0.047934677, -0.051238738, 0.013107692, 0.028754773, 0.005944847, -0.018565645, 0.010017668, 0.022595543, 0.02932272, 0.022329113, -0.06237499, -0.022189405, -0.02946026, 0.038208704, -0.020636031, -0.030248558, 0.051314056, 0.062275805, -0.009616736, 0.033504426, -0.024035584, 0.03905267, -0.009999422, 0.006752674, -0.009616269, 0.030486682, 0.025774922, -0.006619577, 0.019808905, -0.03056598, 0.014186745, 0.03962904, 0.034872133, 0.0009716852, 0.02310992, -0.042774737, -0.045954585, -0.038861796, -0.07022707, -0.008152425, 0.005288129, 0.010900466, -0.00911452, 0.042561408, 0.025082765, 0.044972606, -0.009053468, -0.015990118, 0.050205763, -0.021835083, -0.032530755, 0.019122362, 0.02528908, 0.01455101, 0.032027718, 0.05541366, -0.004586616, -0.015423456, 0.03144457, -0.016136197, -0.063120715, 0.0021370526, 0.024028743, 0.013509091, 0.024040496, -0.005421695, -0.0027442973, -0.051025406, -0.015122173, 0.03740272, 0.016289178, -0.023873422, 0.054298587, 0.011752269, -0.07074168, 0.01723022, 0.0019597446, -0.032742683, 0.010318483, 0.032980807, -0.012173902, -0.04454782, -0.049455363, 0.04382794, -0.031999182, 0.034381844, 0.056502774, -0.010526201, -0.033326417, -0.0004388256, 0.055928275, 0.021796485, 0.0042867367, -0.032967124, -0.002623597, 0.03197766, 0.021770127, 0.038883783, -0.0052771354, -0.024389908, -0.04142551, -0.0064297537, 0.022012858, -0.0014280545, 0.023647929, -0.033219695, -0.023234366, -0.023911783, -0.030115107, 0.01590848, 0.0057758433, -0.05612664, 0.0074394504, 0.0019536628, 0.036635853, -0.05355941, -0.015463281, -0.023248633, -0.012365713, 0.0015920294, 0.0016439586, 0.030802235, -0.014358673, -0.037172925, -0.0069940756, -0.017334078, -0.064691685, 0.0066244886, 0.010520587, 0.0042932862, 0.039468106, -0.009629835, -0.03476921, 0.032239176, -0.011226076, 0.06547952, -0.02915617, 0.042538013, -0.03329823, -0.03174889, 0.014101833, 0.003538207, 0.03095545, -0.05897058, 0.0017335484, -0.02855267, -0.00250699, -0.03864589, 0.009201536, 0.027538413, -0.02137614, -0.01008644, -0.023028519, -0.07745073, 0.0068350127, 0.015433924, -0.013506606, 0.0043532858, -0.0153864985, 0.0038184084, 0.037535496, 0.020637434, -0.038605426, -0.052584216, 0.006445777, 0.01717411, -0.02207508, 0.014889486, 0.059732676, 0.0034502544, 0.002820086, 0.029800843, -0.047906373, -0.03178702, 0.023088869, -0.016383447, 0.020930765, 0.032949816, -0.01698414, 0.008434995, -0.0064640227, -0.0037256903, -0.021564208, 0.020251006, -0.0017865886, -0.03656159, 0.048682507, 0.006895831, 0.021945257, -0.04202106, 0.02178181, -0.0027442973, -0.026832921, 0.061045412, -0.022649283, 0.027205316, 0.007817633, 0.052932285, 0.027645078, -0.009009024, 0.02586498, -0.05005793, -0.044186182, -0.025554808, 0.02499528, 0.016215961, 0.045684643, -0.03779514, -0.014855977, 0.054670513, 0.011632153, 0.04679902, 0.024431078, 0.04160399, 0.026346376, -0.04209825, 0.036075395, 0.063989945, -0.029715698, -0.013143715, 0.019695925, -0.06686336, -0.034447342, 0.011367361, -0.0029203189, 0.016207542, 0.019154409, -0.020856848, 0.06388702, -0.009735098, -0.016087778, -0.046164643, -0.015621992, -0.015144629, -0.04617306, 0.02518148, -0.052279193, 0.025017738, -0.03037534, 0.019271368, 0.019327508, 0.007391615, -0.009511943, 0.014124758, -0.047585912, 0.010178601, -0.015378779, -0.027223561, 0.055462312, -0.012605242, -0.05159955, -0.024835283, -0.007708629, -0.0079606725, 0.0064324443, -0.003703702, 0.021318596, 0.01086491, 0.014802879, -0.06678664, 0.0031873335, -0.028499575, 0.04149475, 0.03252467, 0.026660759, -0.033630975, -0.0028734189, -0.052459776, -0.023865001, -0.06791785, 0.042913213, 0.0116703985, -0.027087422, 0.048562743, 0.011953086, 0.024616338, 0.038422268, 0.008575344, -0.032692038, 0.0063858945, -0.0021660582, -0.0025698328, 0.00921253, -0.0065018, -0.009868664, -0.036330946, 0.0058160764, -0.027847182, 0.008584467, 0.020610534, 0.01628415, 0.03911957, 0.05352877, -0.015412229, 0.052486908, 0.03125264, -0.04298526, -0.042101994, 0.015745558, -0.005769761, -0.0126089845, 0.009336272, -0.0039934064, -0.011591686, -0.031670295, 0.048016787, 0.036515154, 0.017845653, -0.032168068, -0.02803057, -0.05103663, 0.004268959, 0.0306068, -0.023552021, 0.045117166, 0.062147625, -0.030095575, 0.0082347635, -0.030885393, -0.042973567, 0.026847659, -0.033745594, 0.048180994, 0.03780637, 0.02411541, 0.01595959, -0.051876858, -0.018078633, 0.027958758, 0.04049359, 0.009710303, -0.0033487354, 0.009613929, 0.03641317, -0.02273519, 0.008918966, 0.017567994, 0.00855476, 0.009882465, -0.036842637, -0.009809483, -0.018169157, 0.021497777, -0.056858324, 0.0137018375, -0.068146154, 0.035777856, -0.0013515641, 0.02307542, -0.00979077, 0.029971134, 0.0061407513, -0.023739623, 0.009916558, 0.0072462587, 0.0060986467, -0.016121695, -0.013733651, -0.04783854, -0.006904603, -0.06574992, 0.02829115, 0.00032186782, -0.016450813, 0.030600835, -0.017116537, 0.019448675, -0.041955974, 0.060921904, -0.002762075, -0.0058113984, 0.032457948, 0.03359589, 0.062120486, -0.040150203, -0.024437625, 0.028026827, 0.007982135, 0.019756509, -0.03613247, 0.06218692, -0.0052761994, 0.027295139, 0.035459727, 0.04725656, 0.03311496, -0.027984256, 0.04823339, 0.013641488, 0.011389524, 0.016318886, 0.03144334, 0.01341383, -0.006885334, 0.04525892, 0.053322926, 0.022406772, 0.019545283, 0.01489855, -0.0026713156, -0.0040769144, -0.041584574, -0.021634383, -0.022105254, -0.044068754, -0.011442682, 0.027970219, 0.010219304, 0.042125385, -0.008776512, -0.0035854578, 0.013665347, 0.027387537, -0.018484943, -0.03834718, 0.023655413, -0.013162896, -0.011442214, 0.008741424, 0.02623644, -0.06886568, 0.005902392, 0.02483739, -0.01017907, -0.011284554, -0.025384048, -0.045330968, 0.015509537, -0.005787071, 0.0045061493, 0.008390785, 0.10136591, 0.023545941, -0.0007232669, 0.027135141, -0.013631429, -0.057065107, -0.026721578, -0.015306031, -0.037731517, 0.0113378875, 0.020532642, -0.019380372, 0.014763815, -0.015871843, 0.041897085, 0.037070937, -0.002016352, 0.010967482, -0.014218791, -0.02884556, -0.027009647, -0.053930636, 0.037934557, 0.041168205, -0.053940695, -0.018076206, -0.039517693, -0.035549905, -0.015039134, 0.05903093, -0.0032848762, -0.0028714307, 0.0058409884, 0.041376855, -0.031320125, 0.008968323, 0.033622555, -0.0048408825, -0.014860656, -0.009111011, -0.055049688, -0.0012638458, -0.00334125, 0.04852719, -0.0040046345, -0.008035351, 0.014339959, 0.050634533, 0.028572317, 0.004011652, 0.0063353693, 0.005832919, 0.023376586, -0.0076780445, 0.0011377654, -0.05635307, -0.005599003, 0.012998572, 0.01095567, -0.0354616, 0.064579405, -0.027985776, -0.034386173, 0.027573965, 0.040496398, -0.024353534, -0.00088852824, 0.045679968, 0.031446993, -0.0449829, -0.006779809, -0.0051952647, -0.07123571, 0.028553605, 0.042677425, -0.017619455, 0.0025131889, -0.029958969, -0.019197216, -0.006779809, -0.020601412, 0.060526118, 0.020120481, -0.012669569, -0.06299253, 0.0052428665, -0.023685355, 0.00090572104, -0.016797945, 0.010589357, -0.0025811412, 0.014935041, -0.02215929, 0.05047711, -0.012179515, 0.0053131585, 0.009183525, -0.020970063, -0.02867413, -0.030268675, 0.020402115, 0.009648549, -0.015620413, 0.0058495263, 0.019192772, 0.006645541, 0.014812469, -0.020109612, 0.021560349, 0.014734342, -0.012623955, -0.0058273044, -0.011372829, 0.013666401, -0.012734363, 0.016540857, -0.021796253, -0.001648637, 0.009308553, -0.07789575, -0.07287312, 0.083351366, -0.011547827, -0.010179537, 0.04852064, 0.028294425, 0.015460882, -0.031006912, 0.00010385851, 0.026671052, 0.040583413, 0.004944975, 0.046767674, 0.050976753, -0.08212121, -0.06926146, 0.042996954, -0.023427112, -0.03146445, -0.057152122, -0.020828309, 0.0022839515, -0.018976167, 0.009844804, -0.024076462, -0.016280524, -0.014670716, -0.006927643, -0.0060481206, -0.0077781607, -0.037884966, 0.01739864, 0.035208035, 0.0009001071, -0.0037522395, 0.06249382, 0.0016303915, 0.022893783, -0.02188865, 0.0601032, 0.022269698, -0.059866477, -0.021561984, -0.018524243, 0.038229756, 0.0011753087, -0.006996882, -0.022801151, -0.05353801, -0.01253647, 0.022876943, 0.00018689853, 0.022191102, 0.014982526, 0.041319665, -0.011535984, 0.010490645, 0.024828264, -1.3099271e-05, -0.028321503, -0.029550318, -0.0086378, -0.008616046, -0.0521982, -0.025746385, -0.035206165, -0.00839289, 0.00082244707, 0.012828866, 0.017500628, 0.038128704, -0.04181849, 0.026947541, -0.016040994, 0.05800732, 0.02895547, -0.016306723, 0.065211914, 0.0008367745, 0.0800328, -0.003161603, -0.07124507, 0.08376797, -0.006457371, -0.042962804, 0.0043283734, 0.021044478, 0.022486536, 0.025204167, 0.0423262, 0.013048278, 0.002446523, 0.017285425, -0.009702818, -0.010862688, -0.019001428, -0.0132181, 0.03538881, -0.012915881, 0.016433973, -0.04846356, 0.029121552, 0.019746918, 0.0042011235, 0.0041936385, -0.001778226, -0.038335953, 0.03495997, -0.05803726, 0.031968772, 0.0022073882, 0.024589203, -0.002944529, 0.043018006, 0.00023812604, -0.012957519, -0.028021125, 0.045110617, -0.009676268, 0.02205824, -0.0059227417, -0.026780525, -0.024433885, -0.037069067, -0.014979017, 0.0014280545, 0.0110621005, -0.020204691, -0.01768694, 0.009012767, -0.026196789, 0.036640532, -0.0060892897, 0.008811775, 0.021999292, -0.05994601, -0.04618429, -0.010847132, 0.03855864, 0.026931169, 0.01205133, -0.01809138, 0.014671885, 0.07482772, 0.03328525, 0.040443067, 0.0007934416, 0.046129316, 0.028727872, -0.016465785, -0.004817725, 0.007103138, -0.026495382, 0.04953329, -0.037316084, -0.052684803, -0.06495742, 0.012449922, 0.013088511, -0.016128479, 0.034761723, 0.039964475, -0.008118274, 0.01573082, -0.03895267, -0.0063143168, 0.009012065, -0.0030380222, 0.028025191, -0.04005383, -0.034761723, 0.027701218, -0.061433714, -0.03375343, -0.025259607, -0.032272395, -0.023289453, -0.00826377, -0.06013829, 0.03327402, 0.004640417, 0.013759849, -0.009441768, -0.03383308, -0.0422634, 0.0011070054, 0.03177696, 0.005889058, 0.005528828, 0.016055964, -0.022685131, 0.001188642, -0.06362504, -0.02570428, -0.025915973, 0.00053145614, -0.022119055, -0.005197838, 0.061987624, 0.03926413, -0.0074118483, 0.0031424216, -0.021982916, 0.030780131, -0.056324765, 0.0364927, 0.0036098433, -0.0065608635, -0.065883726, -0.015930586, 0.012328754, -0.00017216185, -0.003208152, -0.04526225, 0.004445331, 0.008705636, -0.010401524, -0.017509984, -0.009815097, -0.02379623, -0.022077886, 0.00841979, 0.013952128, -0.08866336, -0.008753588, 0.015063226, -0.013910023, -0.034606405, -0.020557202, 0.0093173245, -0.022150869, -0.043978933, 0.044281155, -0.023429625, -0.016320758, 0.008090251, -0.045516226, 0.009403406, -0.00207641, -0.040927503, 0.02279086, -0.050609972, 0.0616957, 0.013484296, 0.00883078, -0.032489937, -0.00043017074, 0.0030718378, -0.014603348, 0.013727568, 0.04526547, 0.012295538, -0.0137111945, 0.0068757143, 0.026838537, -0.03627937, -0.06530174, -0.037157487, 0.0093528805, 0.012076359, -0.00953206, 0.02524791, 0.05032179, -0.011937881, 0.032518007, -0.0020116738, -0.010875203, 0.007665881, -0.002911781, -0.008779319, 0.008448563, -0.006388702, 0.006613904, 0.031640355, -0.019319555, -0.014727323, 0.012906058, 0.046214227, 0.022554137, 0.033031683, 0.042067375, 0.008043889, -0.010976254, -0.008856979, -0.0019961183, -0.006161336, -0.06856159, 0.0032239414, 0.06039138, 0.017700274, 0.014809194, 0.020257087, 0.0034488512, 0.019663176, -0.054785594, 0.011823964, -0.050785877, -0.028904477, -0.021240937, 0.021052634, 0.026478307, 0.010976488, -0.0015709769, -0.01507539, 0.070852086, 0.050146822, -0.0024140086, 0.033198934, -0.01613456, 0.061353948, -0.036808953, 0.0063629714, 0.02067252, 0.015758423, 0.028567642, 0.036371063, -0.03560943, 0.004465448, 0.017444488, -0.04856976, -0.014040547, 0.024104998, -0.07013537, 0.005380175, -0.011371104, 0.030024, 0.023305474, -0.023396702, 0.04020073, 0.021298012, 0.0076743015, -0.028881319, -0.009992873, -0.01613538, 0.016216898, 0.032114737, 0.002360208, 0.011622797, 0.015003344, 0.010814848, 0.045238335, 0.010740686, -0.07685904, 0.047740765, -0.023299394, 0.04675545, 0.049002502, -0.05147546, 0.06862334, 0.03573294, -0.038103912, -0.0097131105, -0.0033908403, -0.038411275, -0.04469238, 0.018037697, -0.013214358, 0.021596739, 0.03563376, 0.04178434, 0.016252922, -0.066355295, -0.032289702, -0.023069689, -0.031019075, -0.04210106, -0.020936377, 0.026426846, 0.019932413, 0.050225414, -0.009627263, -0.0077365236, 0.062017564, -0.020372875, 0.0148068555, 0.0003368384, 0.004892578, -0.05334117, 0.0031469245, -0.012070043, 0.053180877, -0.016398417, 0.076046884, -0.0051845047, 0.01067731, -0.048392452, 0.020431122, 0.015761172, 0.043788057, -0.033706766, 0.01645362, -0.018308103, -0.028726935, 0.013096932, 0.04106715, -0.052281063, 0.03818483, 0.0052209953, -0.030968431, -0.038549285, 0.046245106, -0.03980354, 0.056964986, 0.02720906, 0.007188693, 0.028142849, -0.00779126, 0.10420283, 0.041709483, 0.02986587, 0.023699624, -0.021750374, 0.013385584, 0.032326195, -0.019981068, -0.020889595, 0.0254444, -0.014854106, 0.019179204, 3.0876854e-05, 0.03007967, -0.015997017, -0.007127407, 0.06477028, -0.031232523, -0.062069025, -0.05074658, 0.043169588, -0.004067324, -0.033441506, -0.009173232, 0.015211061, -0.014682881, -0.0008767155, 0.01501083, -0.010413599, -0.029903766, -0.07164553, 0.013583945, 0.005191054, 0.030554987, -0.016611747, 0.013182078, 0.030083414, -0.0073146564, -0.022278117, 0.003138679, 0.0041842815, 0.054543495, 0.011537885, 0.015865557, 0.026045093, 0.01723022, 0.019836975, 0.019872531, -0.028745417, 0.0493618, 0.0403771, 0.00041309488, -0.020390887, -0.020610768, 0.021621985, -0.028660271, 0.008711951, -0.023307346, 0.0005871281, 0.054171104, 0.04250339, -0.054220222, 0.036178548, 0.024662187], [-0.040112197, -0.0666735, -0.039849482, -0.032038968, -0.0041152025, 0.019958457, 0.038697343, -0.02164295, 0.06132068, -0.00029950283, 0.006402429, 0.02454181, -0.06618818, -0.021455659, -0.018303325, 0.034509443, -0.008863629, -0.037096735, 0.039682023, 0.04797059, -0.026691914, 0.00043947762, -0.017190045, 0.034505934, -0.0030703584, 0.044890203, -0.0060168793, -0.0073399814, 0.038678356, -0.009065177, -0.014486937, -0.04496942, 0.010165674, 0.022599522, 0.015892765, 0.032870483, 6.3171974e-05, -0.0017531475, -0.011667763, -0.039345108, -0.04466359, 0.018756058, -0.032353826, 0.025581013, 0.029459195, 0.041743636, 0.010205783, 0.008336695, -0.017601917, -0.039106708, 0.036222607, -0.011984625, -0.03685834, 0.016817782, -0.027842293, 0.021413293, 0.0444861, 0.019121554, 0.044314634, -0.013741408, 0.022288926, -0.011714265, -0.063649274, 0.0004944084, 0.008014819, 0.023889031, 0.001847028, -0.008050917, 0.004959626, -0.057705086, -0.00997716, -0.0009712691, -0.021587767, -0.017147493, 0.06497288, -0.008682887, -0.06320004, 0.027522925, -0.008779901, -0.03112874, -0.0182201, 0.019709358, 0.015160271, -0.056716397, -0.06436578, 0.03970709, -0.022998609, 0.017428571, 0.04444499, 0.0102841845, -0.04937842, 0.0155503955, 0.016019985, -0.012016713, -0.007226172, -0.0020105983, -0.039732162, 0.025900258, 0.037261434, 0.033518996, 0.051640578, -0.039625872, -0.038487274, -0.024681188, -0.015938137, -0.016593171, 0.024573896, -0.036669824, 0.011251629, -0.020619132, 0.0067859734, -0.0018034094, 0.028916093, -0.055924244, 0.03416576, 0.03134232, 0.046696275, -0.02553752, -0.006071027, -0.02550443, -0.03730957, 0.0055931006, -0.004284664, 0.013325275, -0.00736505, -0.031148294, 0.011128294, 0.021392234, -0.058856223, 0.010414852, 0.038857408, -0.0024276087, 0.020896638, -0.026987083, -0.069340765, 0.022495236, -0.013853713, 0.05894045, -0.039687037, 0.029578019, -0.022605037, -0.02267974, 0.0023684476, 0.011869311, 0.027051643, -0.020766532, 0.035007298, -0.044643532, -0.004866247, -0.008750822, -0.004473428, -0.009733497, 0.0064664474, 0.04735942, 0.017061446, -0.053122614, 0.013473178, 0.007697956, -0.022007912, 0.014960727, -0.020632667, 0.011302768, 0.013786155, 0.01025313, -0.010802408, -0.045692384, -0.0006748371, 0.000100210294, -0.007204871, 0.06569083, 0.091633454, -0.0065764026, 0.013075846, 0.042237982, -0.04561718, -0.019764805, 0.014218206, -0.018308843, 0.016036656, 0.054416638, 0.02366091, 0.018059913, 0.009355343, -0.010142109, -0.022567436, 0.03324049, -0.041597236, -0.019810429, -0.0049655177, 0.040781893, 0.015050973, -0.026024846, 0.03694006, 0.0038344383, -0.024277717, 0.026542256, -0.026582867, 0.0070276307, 0.037899174, 0.06603978, 0.022033982, 0.013534344, 0.02592357, -0.030314524, -0.023040222, -0.044802967, 0.042497188, -0.005200156, 0.044439476, -0.025703972, 0.029520864, 0.050302938, 0.028855553, 0.057592783, 0.012355017, 0.012169127, 0.035745308, -0.050818343, 0.036588103, 0.06259841, -0.051279597, 0.015461214, 0.0049218987, -0.050036024, -0.031623084, 0.028987912, -0.0071023344, 0.043781243, 0.022633614, -0.022035362, 0.059908085, -0.004262604, -0.018953595, -0.035544764, -0.004205448, 0.0022609988, -0.034259263, 0.018083228, -0.019060638, 0.034097698, -0.022990586, 0.026233414, 0.027122835, -0.013081738, -0.020509332, 0.017300345, -0.07377684, -0.026516685, -0.014343484, 0.018200547, 0.048408158, -0.009226115, -0.022719726, -0.019197261, -0.0066953516, -0.002798117, -0.027342433, 0.0065498305, 0.0048722634, 0.0250898, 0.014042227, -0.05765696, -0.028127572, -0.03676609, 0.038516853, -0.0046817684, 0.028037326, -0.01762498, 0.031181885, -0.033220436, -0.0081351455, -0.078291126, 0.030947749, 0.027711939, -0.028587824, 0.047096208, 0.011838729, 0.015718164, 0.05092864, 0.028937776, -0.062497135, -0.033054985, -0.008053424, -0.0037344159, 0.01727202, 0.01754376, -0.016261237, -0.036776114, -0.00020706368, -0.05893143, 0.010681076, 0.005618545, 0.0035935326, 0.0470551, 0.023052756, -0.031492732, 0.050383158, -0.04866849, -0.056289237, -0.0265954, 0.029574508, -9.48833e-05, -0.005498468, 0.014165813, -0.0095819915, -0.024915827, -0.0638057, 0.037632447, 0.018890675, 0.007979222, -0.061431233, -0.008600601, -0.039636903, 0.010982397, 0.021659838, -0.032405216, 0.047048077, 0.07098524, -0.005777227, -0.008191299, -0.02604114, -0.015088073, 0.01844421, -0.053768374, 0.021612834, 0.053075608, 0.028958833, 0.0017848589, -0.04778809, -0.04702511, 0.05931146, 0.033124674, 0.00894742, 0.013024456, 0.020880843, 0.018696899, -0.0071183783, 0.025573118, 0.010070289, 0.02827748, 0.005108407, -0.07459306, -0.009924016, -0.011353909, 0.026546266, -0.061064232, -0.001552727, -0.046804417, 0.011016771, 0.01687494, 0.0056304527, -0.02292641, 0.022157317, 0.009149908, -0.0027630215, 0.0041401456, 0.013260098, 0.005440811, 0.013662694, -0.007080274, -0.027275437, -0.009359479, -0.039131403, 0.05663718, 0.006137708, -0.034951147, 0.07550642, -0.0015213917, 0.044144172, -0.0321796, 0.06459484, 0.014169573, -0.04712084, 0.034056712, -0.013236032, 0.01992073, -0.044633508, -0.0071429447, 0.013235907, -0.016184058, 0.0010749262, -0.03868381, 0.0386081, -0.0035596904, 0.04350142, 0.034114867, 0.05031096, 0.031147793, -0.002423347, 0.04063061, 0.022724863, -0.0014335273, 0.04633213, 0.004389449, 0.024303662, -0.0040399977, 0.014637848, 0.04762364, 0.028625928, 0.027198542, -0.0045012534, 0.025033146, 0.015880229, -0.038984127, -0.00044220377, -0.046466496, -0.045552354, 0.0037612391, -0.0011100217, 0.023451842, 0.059568163, -0.020459697, 0.0026963402, 0.025626387, 0.05241469, -0.016904518, -0.039003927, 0.011543674, 0.005234249, 0.0061507444, 0.0180366, 0.04443133, -0.05245655, 0.026485225, 0.016746087, -9.12484e-05, -0.019486798, -0.03031515, -0.07140137, 0.05427575, 0.0012363658, 0.018703917, 0.020464208, 0.07565395, 0.028714169, 0.00873177, -0.009514903, 0.009123962, -0.06285912, -0.032936662, -0.025095941, -0.042012367, -0.025389116, 0.005903571, -0.02532469, -0.0031988332, -0.03187377, 0.04027765, 0.028316082, -0.037241884, 0.0025083283, -0.02271233, -0.043675397, -0.02374163, -0.06328829, 0.051756393, 0.0568267, -0.039824665, -0.020492537, -0.014071306, -0.05185316, 0.0020957051, 0.05100886, -0.011456437, -0.0053939335, 0.019421872, 0.029083172, -0.055041842, 0.0027403978, 0.008288188, 0.00027274247, -0.05241669, 0.010460475, -0.0422074, -0.021504542, 0.016626261, 0.05308451, 0.02138622, -0.006517273, 0.048397753, 0.033070024, 0.0064114537, 0.031520307, 0.0008819007, 0.039049804, 0.017810484, -0.019043593, -0.020455183, -0.0056814663, -0.011378977, 0.030145064, 0.039928697, -0.009776615, 0.056237597, -0.035245948, -0.007320428, 0.009299065, 0.05782567, -0.03583756, 0.0021084899, 0.052713, 0.020687066, -0.06900786, 0.005933653, -0.007947886, -0.08854505, 0.01695315, 0.078870706, -0.024926856, 0.0052756118, -0.039505545, -0.03692452, -0.007566849, -0.044307116, 0.073905185, 0.046991922, -0.0070178546, -0.043296743, -0.0044140164, -0.026042895, 0.005077823, -0.0068328506, -0.02823386, 0.034814775, 0.015786726, -0.036066182, 0.034855887, -0.036000002, 0.02197432, -0.0061888476, -0.043570485, -0.057502788, -0.05088878, -0.0167877, -0.012114792, 0.013030724, 0.049554903, 0.0043638796, -0.00976032, -0.012410284, -0.03168225, -0.0035649547, 0.009364493, -0.0026069093, 0.009229876, -0.030218763, -0.0071727764, 0.0043869424, 0.017119605, -0.026616456, -0.009204714, -0.014310958, -0.06979801, -0.058487214, 0.06307571, -0.015426494, -0.012251477, 0.041112922, 0.02830405, 0.01099092, -0.035159715, -0.010192873, 0.023882013, 0.020125788, 0.011822183, 0.031810597, -0.008939335, -0.08283149, -0.062169243, 0.038860288, -0.03649435, -0.03404819, -0.051169366, -0.012156342, 0.0051906304, -0.027984181, 0.01593162, -0.03347112, -0.0036246171, -0.024273908, 0.015906801, 0.007875188, 0.005075066, -0.013184893, 0.020439642, 0.024760405, -0.0010097488, 0.02444354, 0.033667654, -0.0026554791, 0.04136862, -0.015502953, 0.038906414, 0.011840233, -0.031696286, -0.00074252137, -0.04146513, -0.0068937666, -0.020334356, -0.043554567, 0.0064214813, -0.045978162, 0.040189408, 0.0019427888, 0.030097935, -0.019785862, -0.0276608, 0.035152193, -0.0005444822, 0.006463094, 0.0004899588, -0.0058860234, -0.019949574, -0.03395594, -0.052817784, -0.0025995767, -0.043638796, 0.0066423323, -0.02433324, -0.029514972, 0.011418083, 0.00022987578, 0.010301042, 0.001665487, -0.021830428, 0.042858172, 0.008176258, 0.069105625, 0.03555479, 0.0034333465, 0.030964293, 0.0018945638, 0.077559136, -0.0015166287, -0.057107463, 0.072682105, 0.0081000505, -0.019991422, -0.010008245, 0.0021994878, 0.022151303, 0.031048521, -0.012427832, -0.017349731, 0.0009916996, 0.029143086, -0.011160554, -0.003962537, -0.022603031, 0.009771601, 0.05236154, -0.014219209, -0.0005374631, -0.051977497, 0.029179748, -0.011381484, 0.00045273246, -0.007430227, -0.013358365, -0.014819343, 0.034503426, -0.048730657, 0.05054259, 0.0040394966, 0.023335526, -0.01523748, 0.023780739, -0.014879506, -0.027695395, -0.013869757, 0.046121556, -0.0010729834, 0.023089606, -0.03485689, -0.020218289, -0.0076743914, -0.025173152, -0.008923542, 0.011033536, 0.0033325723, -0.07176286, -0.036831137, 0.0074733444, -0.009865858, 0.032619298, 0.0121591, -0.0007615732, 0.021568215, -0.030744696, -0.053153697, -0.03235107, 0.0053184787, -0.023684476, 0.015016379, -0.0064986907, -0.014248789, 0.020072643, 0.025556572, 0.031397972, 0.022117209, 0.012522089, 0.04880085, 0.011589863, 0.0186242, -0.0081106415, -0.016018607, 0.032283887, 0.013315248, -0.021173641, -0.07370063, -0.0016936418, 0.008288563, -0.011101722, 0.032849424, 0.024557853, -0.0055791885, 0.024334872, -0.020530388, 0.015009735, 0.0250715, 0.016193708, 0.013802072, -0.07084084, -0.013337183, 0.02864197, -0.03497847, -0.03881767, -0.03475461, -0.01863924, 0.021518579, -0.021957776, -0.035015322, 0.025013093, 0.006794496, 0.053787425, -0.0074923965, -0.006631051, -0.038517106, 0.015858673, 0.011599578, 0.0042335247, -0.0066982345, 0.0099510895, -0.0061557577, -0.0028249403, -0.057520587, -0.04739828, -0.05594229, 0.04236859, -0.026674615, 0.02544978, 0.032031197, 0.004133189, -0.00013386442, -0.023818027, -0.051319707, 0.03116083, -0.040288676, 0.012218261, 0.011222551, 0.022023953, -0.09294101, -0.0026592393, -0.004320198, -0.017233916, -0.0025115872, -0.045198385, 0.0036870372, 0.01654504, -0.0031846697, -0.0083286725, -0.008283706, -0.016477043, -0.016679406, 0.0047549442, 0.004856784, -0.07066838, -0.022626845, 0.008983706, -0.0382762, -0.04957596, -0.015120162, 0.00042565877, -0.014580944, -0.045426663, 0.059059903, -0.023463875, -0.032792773, 0.007364047, -0.050797787, 0.019856052, 0.0019332629, -0.05111515, 0.008074607, -0.04007961, 0.047173418, -0.0038163892, 0.059886023, -0.049325276, 0.0022170355, 0.0114847645, 0.0077214576, 0.019225838, 0.01291917, 0.009917874, 0.004940951, -0.00039307005, 0.02136817, -0.025883462, -0.07368459, -0.035277035, -0.008982954, -0.003642917, -0.0029966577, 0.021762745, 0.0007034149, -0.012621358, 0.01722088, 0.017789427, 0.009549998, 0.01611587, 0.048461925, 0.007308897, -0.0016382097, -0.026762856, 0.0035005293, 0.02741463, -0.010603804, -0.025378086, -0.0014604757, 0.01887438, 0.029561475, 0.017401058, 0.038011476, 0.01424528, -0.025289346, -0.039341096, -0.00917247, 0.014130467, -0.076337814, 0.0029436385, 0.04800268, 0.030686537, 0.018963624, 0.023727594, -0.007912039, 0.012148322, -0.045661304, -0.027192025, -0.06228957, -0.022775501, -0.0040710825, -0.03304195, 0.0047253636, 0.026777897, 0.03256114, -0.011031249, 0.056620136, 0.02184547, 0.017997995, 0.015063005, -0.0128659, 0.05282581, -0.003826166, 0.01380859, 0.03751613, -0.017277032, 0.012216757, 0.025865413, -0.014387166, -0.0005174085, 0.03994073, -0.013313241, 0.021945743, 0.015439719, -0.05523286, -0.00793341, -0.014392179, 0.0025359034, 0.024008358, -0.024988024, 0.020295374, 0.027486825, -0.0012117989, -0.00096211914, -0.0059607266, -0.036776613, 0.0050462373, 0.011298759, 0.0059963237, -0.004636622, -0.020576514, 0.012775779, 0.011738456, -0.03778085, -0.06049669, 0.079183556, -0.0026023341, 0.05008434, 0.05317024, -0.03595939, 0.06742856, 0.03370506, -0.000121831654, -0.022976547, -0.0075266776, -0.0065754, -0.08311225, 0.038581528, -0.018777115, 0.06497288, 0.047862418, 0.024371345, 0.0024356304, -0.082612894, 0.011142458, -0.014884645, -0.037341654, -0.040214475, -0.046598915, -0.0046702134, 0.0021002174, 0.028389204, -0.016894657, -0.02443502, 0.07118378, -0.036401093, 0.008026851, 0.0037221326, -0.00014339035, -0.019924238, 0.010642722, -0.017577851, 0.054494347, 0.02378475, 0.04833959, -0.009533201, 0.004369896, -0.042226955, -0.0072887167, -0.02394268, 0.026211355, 0.005423765, 0.026050918, -0.024697233, 0.015797004, -0.0007014094, 0.06610746, -0.013697288, 0.023730602, -0.0028171064, -0.038422596, -0.03407827, 0.019330624, -0.034719516, 0.06081355, 0.009136121, -0.003002674, 0.019098084, -0.046285126, 0.067227766, 0.034561083, -0.015518371, 0.014155535, -0.0071574845, 0.029400034, 0.022018941, -0.030410787, 0.0021047296, 0.0042836615, -0.013417526, -0.0066114357, 0.007250488, -0.014151525, 0.008117348, 0.0037948308, 0.053954877, -0.015298522, -0.052864913, -0.070575126, 0.05299326, -0.012616847, -0.041053258, -0.0059412047, -0.0031024455, -0.020789595, -0.0050632837, 0.022256589, 0.00057017716, 0.0022352724, -0.060613003, -0.016702468, -0.0030723638, 0.0029003955, 0.010776335, 0.04899613, 0.026678627, -0.019627431, -0.03752415, -0.01104607, 0.027491465, 0.06196368, 0.014943681, 0.05765094, 0.023738623, 0.035755336, 0.012161106, 0.0066873142, -0.0560561, 0.043420203, 0.04266214, -0.0021242357, 0.0029898891, -0.008203207, 0.021391233, -0.010376248, 0.0023185618, 0.0244285, -0.004170854, 0.032556627, 0.02731403, -0.04901343, -0.013104172, -0.007688179], [-0.02833671, -0.09439012, -0.031455237, -0.035625756, -0.01632824, 0.04873072, 0.024611596, -0.022940062, 0.028339552, -0.0073705018, -0.012826836, 0.0006117128, -0.081018955, -0.0046446915, -0.0036675734, 0.044486996, -0.0077422853, -0.063914284, 0.04138462, 0.064638585, -0.022596218, -0.01163204, -0.016542312, 0.041224066, -0.015207969, 0.03837264, 0.004890375, 0.00941583, 0.017530037, -0.008026859, -0.012986281, -0.033786457, 0.02364772, -0.0045992155, 0.027269747, 0.021560242, 0.023743108, 0.0025755162, -0.0050722808, -0.045508932, -0.07423964, 0.044196393, -0.020549782, 0.006011756, 0.0061032637, 0.027631894, -0.0042750575, 0.008226096, -0.020380214, -0.0476415, 0.040726874, -0.025410762, -0.0053928336, 0.02311975, -0.030252889, 0.025714122, 0.034415085, 0.04810736, 0.020995669, 0.008647168, 0.0052764737, 0.0070642293, -0.07738528, -0.06323657, 0.028630156, -0.024807923, 0.002888305, 0.000289496, 0.00737272, -0.036239132, -0.008766959, 0.003776065, -0.042059, -0.017441856, 0.031648792, 0.00941583, -0.04829814, 0.0123191085, -0.0046428894, -0.012788985, -0.009932708, 0.020465204, -0.015459752, -0.08002512, -0.057888106, 0.031984318, -0.012467739, 0.011281194, 0.032388233, -0.0069678696, -0.039846186, -0.0023464705, 0.019548537, 0.012683752, 0.0069967085, 0.030627789, -0.0021584646, 0.045216836, 0.056590367, 0.049336746, 0.016078675, -0.030209629, -0.054855615, -0.03452212, -0.012356821, -0.0352564, 0.042754453, -0.014738785, -0.0014588491, -0.05465152, -0.009359262, 0.015785197, 0.0070421845, -0.08800679, 0.01745184, 0.011072113, 0.042169362, -0.033395194, -0.04493843, -0.00060977176, 0.0122874975, 0.0046200124, 0.0017447402, 0.008618329, -0.013844162, -0.017873328, -0.01160646, -0.020235606, -0.051940687, 0.014402704, 0.03163049, 0.0020558652, 0.013086107, -0.05792582, -0.03315672, 0.04063592, 0.0031567267, 0.055000912, -0.018203864, 0.050584156, -0.013982878, 0.0010869965, 0.017811421, 0.0035191511, 0.017360887, -0.031778008, 0.018421818, -0.013746069, 0.019238729, -0.008795798, 0.03091063, -0.005624098, 0.0029256705, -0.005691481, 0.017534405, -0.07201684, 0.01907568, 0.02344252, -0.043550845, 0.02789976, -0.028590227, -0.00041982468, 0.022371054, 0.017691422, -0.01770917, -0.03385495, 0.034812726, 0.018198457, -0.025410205, 0.035775494, 0.038260058, -0.0078884885, 0.009028172, 0.019650234, -0.023574723, -0.025651176, 0.012950787, -0.02041335, -0.0012373944, 0.05086589, 0.0037476595, 0.015710704, -0.006213627, -0.01878244, -0.0037368278, 0.017305428, -0.017376969, -0.023702346, 0.003973083, 0.02060912, 0.031291354, -0.04642806, -0.010722443, -0.028792096, -0.017622653, 0.021473726, -0.0064659654, 0.011709615, -0.012158554, 0.01394683, 0.019705694, 0.0128285, 0.029645057, -0.027984614, -0.041811652, -0.03924501, 0.013649571, 0.008212924, 0.023280581, -0.047801223, -0.021007178, 0.04810514, 0.060222935, 0.034041293, 0.007728767, 0.043122705, 0.04808074, -0.057357922, 0.03441786, 0.08811105, -0.039120782, 0.004485455, 0.027128328, -0.051539715, -0.038014792, 0.00035753727, -0.019533772, 0.011969162, 0.015757013, -0.018566428, 0.044975035, -0.0050525926, 0.009030945, -0.05913261, 0.009737215, -0.0023342695, -0.025961382, 0.021966757, -0.050367337, 0.0066417702, -0.026238764, 0.015612264, 0.04673198, -0.022764873, -0.06054681, -0.014152583, -0.064013004, -0.002284911, -0.04082393, 0.030389871, 0.059285674, 0.0018062998, -0.02326339, 0.011966945, 0.011421782, 0.0023753091, -0.006177024, 0.022475732, -0.0016759711, 0.015621139, -0.008307205, -0.07167633, 0.001976559, -0.032554436, 0.044784255, 0.0005823195, 0.0072562564, -0.029813653, -0.00039486814, -0.047299877, 0.00038599467, -0.061803516, 0.03954227, 0.007125373, -0.04479202, 0.02409139, 0.013529779, 0.014264056, 0.04852885, 0.022732092, -0.04543756, -0.016936624, 0.009469625, 0.019410651, 0.054619353, 0.00059895724, 0.008332854, -0.05853809, -0.023971599, -0.024557248, -0.02840312, -0.000726513, 0.035149917, 0.01347432, 0.028407158, -0.031416416, 0.041186076, -0.015877359, -0.0122603215, -0.055017553, 0.040497277, -0.03961825, 0.008546232, 0.007985958, 0.0090886215, 0.011182477, -0.03936979, 0.033369128, 0.0045712083, -0.01007191, -0.03909527, -0.025381923, -0.057382323, -0.013228081, 0.004465559, -0.03302473, 0.010786638, 0.06672827, -0.014036674, -0.008061521, -0.031010456, -0.062626526, 0.0049308604, -0.02311975, 0.043834798, 0.06450326, 0.023112124, 0.0073843664, -0.061952144, -0.030209629, 0.036150396, 0.026099006, -0.0034029644, 0.025003139, 0.0009838428, 0.042958546, 0.0013886935, 0.004767256, 0.0065341797, 0.019781256, 0.0020472691, -0.05416792, -0.018464245, -0.03479082, 0.014776497, -0.07787554, -0.031154929, -0.042852063, -0.0003970865, 0.009708948, 0.001428624, 0.004347986, 0.0057433345, -0.011341366, -0.024851179, 0.012950787, 0.014813932, 0.01808435, 0.011076272, -0.019623615, 0.009666504, -0.01833336, -0.044430427, 0.027576713, -0.0020717406, -0.029745992, 0.051685575, -0.020801842, 0.0017935443, -0.024277734, 0.052972224, 0.0006271027, -0.025161752, 0.029596252, 0.024373125, 0.037714064, -0.048446074, -0.009998219, 0.043675076, 0.012151346, 0.021408286, -0.022090431, 0.051928483, 0.02586497, 0.01726106, 0.0139302965, 0.03610603, 0.01721503, -0.02686767, 0.04769031, 0.017944315, 0.04702036, 0.025657553, 0.002328169, -0.0033081295, -0.033776753, 0.034473315, 0.017794576, 0.042538073, -0.0072207623, 0.008497671, 0.020297997, 0.0010958699, -0.014928455, -0.019556232, -0.051761, -0.00857008, -0.022325575, 0.019517133, 0.0024008204, 0.040784553, 0.009053683, -0.040040847, 0.006691129, 0.024039816, -0.016507927, -0.051550254, -0.0072240904, -0.0048382436, 0.01926288, 0.021922667, 0.045813385, -0.04735644, 0.037130915, 0.026726803, -0.012727842, -0.0030402625, -0.0075928923, -0.06041482, 0.006315672, -0.017548477, 0.02277951, 0.030062107, 0.084430784, 0.018026395, -0.024551565, -0.010314958, 0.0015828001, -0.067482516, -0.01941287, -0.01680186, -0.012061223, -0.008606128, 0.015463079, -0.03284726, -0.007910049, -0.033894323, 0.0034839348, 0.03230709, -0.04286052, 0.028649013, -0.055729643, -0.0058387243, -0.034341604, -0.0094610285, 0.016774131, 0.06521535, -0.081686676, -0.007283986, -0.054041475, -0.0378889, -0.010063036, 0.018078042, 0.030067654, -0.026970547, 0.016286092, 0.03248123, -0.032537796, -0.0061370935, 0.022631157, -0.012984894, -0.054011527, -0.015608382, -0.043699477, -0.029298993, -0.009831773, 0.053515717, -0.0033466737, -0.03278792, 0.024188722, 0.010661993, 0.011759527, 0.052874893, -0.018899735, 0.029239096, 0.034138344, -0.0069696717, -0.0051876353, 0.0021473728, 0.005004066, -0.016321931, 0.013509675, 0.011269547, 0.024984628, -0.022534102, -0.025600431, 0.019501604, 0.048248224, -0.030066546, 0.0022222423, 0.05469145, 0.013986207, -0.0502148, 0.039575543, 0.0005215919, -0.072410606, 0.037115384, 0.044653375, -0.041483752, 0.00082523, -0.024347335, -0.05004177, -0.013922983, -0.026945867, 0.02529818, 0.042727835, -0.01777156, -0.019573702, -0.009669832, -0.030267306, -0.028993966, 0.00028006796, -0.023115868, 0.05851147, 0.004997411, -0.035056192, 0.040102683, -0.04787665, 0.030732607, -0.013023992, -0.0005155954, -0.020655151, -0.0040116273, 0.012977407, -0.0025289305, 0.016448032, 0.029459823, 0.043391123, 0.0249291, -0.019169128, -0.03349336, -0.0010642584, -0.0004791658, -0.009851841, -0.019512141, -0.006221946, -0.0062535577, 0.0249926, 0.018224679, -0.020781599, -0.008080377, -0.012350719, -0.06637333, -0.07364068, 0.03962213, -0.011668575, -0.008746995, 0.064057365, 0.04096812, 0.057974625, 0.0020719485, 0.02049543, -0.010476761, -0.0018929545, 0.00070155645, 0.019164415, 0.008028662, -0.058334, -0.06344732, 0.055263788, -0.0547031, -0.03187839, -0.017622653, -0.050607454, 0.004368367, -0.008834619, -0.0069687013, -0.045108136, 0.009382554, 0.009431636, 0.045815796, -0.021850849, -0.016182937, -0.028956257, 0.017770175, 0.048818346, 0.008246199, -0.00079694594, 0.02905331, -0.0046287472, 0.02964048, -0.014993343, 0.015241244, 0.003929825, -0.06615594, -0.021402739, -0.041230444, 0.031641856, -0.016941616, -0.021210851, -0.016588898, -0.051780965, 0.006561632, -7.154211e-05, 0.010922651, -0.021159275, -0.007514695, 0.057768315, 0.011814986, -0.005807667, 0.008565089, 0.012078972, -0.053506847, -0.021786135, -0.034163855, 0.024193438, -0.019131139, 0.025511697, -0.06314341, -0.01988649, -0.0032102447, -0.020617232, -0.02319462, 0.021318443, -0.047260914, 0.03953118, -0.0009583316, 0.06197211, 0.015765887, -0.006284337, 0.055632036, 0.0006965651, 0.060911734, -0.022714345, -0.0462151, 0.08580506, -0.0067615616, -0.012990718, -0.020739587, 0.0568782, -0.006511442, 0.020796018, 0.020820143, 0.015731502, 0.02463489, 0.036900204, -0.0048149507, -0.010843344, -0.00046731145, 0.0071691857, 0.04856434, -0.038521826, 0.00967205, -0.044718813, 0.04450391, 0.026988572, -0.017411355, 0.012751135, -0.02639904, -0.043079443, 0.033213288, -0.06342736, 0.041212693, 0.042985167, 0.031652395, -0.00013642915, 0.02702739, -0.0129252765, -0.053101998, -0.02370096, 0.0342354, 0.036168143, -0.017690867, -0.018444555, -0.020152694, -0.015636113, -0.06588752, -0.035471577, 0.016389245, 0.011001958, -0.023991564, -0.026223237, -0.021462357, -0.011303793, 0.020442467, 0.041976366, -0.011082927, 0.034034636, -0.06222944, -0.044774827, -0.031571288, 0.016576696, -0.006370021, 0.00226966, 0.00854443, -0.015248453, 0.049702358, 0.041501082, 0.021798717, 0.052739296, 0.03736162, 0.06557029, 0.026236268, -0.02481014, 0.011897067, -0.035340417, 0.0003706048, 0.0063633663, -0.01905287, -0.07592116, -0.033437345, 0.034599762, -0.0071131717, 0.022960858, -0.0007231854, 0.0067526884, 0.024662621, -0.051887445, 0.029987793, 0.03939683, -0.009024289, 0.005327253, -0.06713201, -0.011772838, 0.025868854, -0.0209208, -0.066142626, -0.041429818, -0.022626165, 0.0019377377, -0.018654412, -0.06077198, 0.02731356, 0.0081754895, 0.01999103, -0.010456796, -0.03161607, -0.0580922, 0.0527038, 0.010696933, 0.014251854, -0.00075597555, 0.03473952, 0.0009095277, -0.03083299, -0.013993417, -0.04915165, 0.00964543, 0.020612586, -0.0017860573, 0.025775127, 0.07227861, 0.034638587, -0.0073388903, -0.0002524078, -0.04631936, 0.047608644, -0.06387436, 0.020124964, -0.032498978, -0.0068336586, -0.049569815, -0.008717046, 0.0067567094, 0.017721232, -0.02009973, -0.039293814, -0.028127698, -0.0013210335, 0.006625133, -0.015131435, 0.02531038, 0.0069377827, -0.01570599, -0.012860805, -0.03129441, -0.06586589, -0.0113094775, -0.020150336, -0.016089767, -0.04171834, -0.019251762, 0.012114465, -0.009436836, -0.04865973, 0.034491066, -0.04008189, -0.026264483, 0.026226286, -0.04131585, 0.03476392, -0.007846895, -0.022682179, 0.05074499, -0.06062889, 0.04554737, 0.019219873, 0.07055716, -0.041470025, -0.041687425, 0.0033829992, 0.008525228, 0.005649886, 0.033259876, 0.024148516, -0.0007597884, 0.0020824857, 0.018307017, -0.008514621, -0.07766035, -0.04134358, -0.00079195463, -0.007628152, -0.023818811, 0.025099635, 0.0065657916, -0.0023370425, 0.0051210844, 0.016140511, -0.011248057, 0.00894221, 0.02831515, -0.02977594, 0.0075607263, -0.009798497, 0.023974512, 0.021103261, 0.0015794726, -0.027216367, -0.008214033, 0.017324561, 0.03098772, 0.009120233, 0.02969719, 0.019512141, -0.021408422, 0.014371647, -0.011936997, 0.0074936207, -0.05249749, -0.01642252, 0.060046576, 0.014124576, 0.010040298, -0.0020664025, -0.034881495, 0.024435239, -0.026956404, -0.013275777, -0.07084111, -0.02943764, -0.009166264, -0.0047445176, 0.02890967, 0.018798385, -0.008293894, 0.00872592, 0.013386141, 0.049848218, 0.0036170364, 0.014899616, -0.028363952, 0.055729643, -0.03748807, -0.009526332, 0.003933014, 0.003250591, 0.015120342, 0.046656553, -0.049061254, -0.0038910038, 0.050534245, -0.042960763, -0.00303028, 0.04348208, -0.043486513, -0.04563389, -0.027370542, 0.0025003692, 0.04870521, -0.010154543, 0.051627897, 0.023490217, -0.01557067, 0.0042348495, -0.011962508, -0.023562867, 0.016712015, 0.030804096, -0.01903575, 0.009028172, -0.022702698, 0.04425629, 0.027400076, -0.03203936, -0.048342504, 0.07678494, 0.0052300617, 0.038414232, 0.06362479, -0.020205934, 0.038248967, -0.0005257514, -0.0063877683, -0.019632487, -0.02207934, -0.029805887, -0.065210916, 0.034888703, -0.013009851, 0.04415424, 0.03732391, 0.007428179, 0.007225199, -0.07198801, -0.017544456, 0.013388912, -0.03952452, -0.04740331, -0.06610713, 0.004660775, -0.006218064, -0.0006732723, -0.008181866, -0.053157456, 0.09481271, -0.0118043795, 0.0031561719, -0.012720632, -6.6550805e-05, -0.054380883, 0.049788877, -0.00657522, 0.051233582, 0.022093758, 0.02111657, 0.0027765897, 0.022320863, -0.03827115, 0.023505745, 0.011047988, 0.024704074, -0.0011798904, 0.031201238, 0.00019365591, -0.010172845, 0.015479717, 0.016083112, -0.03380781, 0.026433287, -0.0069479044, -0.018638663, -0.013367838, 0.06452932, -0.018219393, 0.036852784, 0.011640533, 0.009157945, 0.00802159, -0.02616334, 0.034964684, 0.019873735, -0.00483658, 0.0028779758, -0.0042459415, -0.006888008, 0.011597588, -0.03308906, -0.020832343, -0.0107013695, -0.03056734, 0.0093162805, 0.005359974, 0.016863974, 0.0030136423, -0.01743631, 0.044946194, -0.0007010018, -0.05340702, -0.08129846, 0.05217195, -0.025637588, -0.03015424, -0.04346655, 0.027519869, -0.025282096, -0.0113391485, -0.008347689, -0.020159902, -0.011039461, -0.05016794, -0.008749213, 0.004358523, 0.035537574, 0.0021672512, 0.050631855, -0.0013049504, -0.006377786, -0.03873257, 0.0060505774, 0.02056524, 0.027736157, 0.029364435, 0.025828367, 0.014760414, 0.013184824, -0.0065957396, -0.006780418, -0.030852677, 0.025715787, 0.040776372, -0.010020956, 0.0082800295, -0.0015678261, 0.021440659, 0.015983285, 0.0026753424, 0.035321288, -0.015705574, 0.057637088, 0.05179871, -0.03347422, -0.012487981, -0.012482159], [-0.009820051, -0.07988214, -0.015858492, -0.031506218, -0.039293315, 0.015026787, 0.024084449, -0.030137645, 0.017033162, 0.052339487, -0.002006491, 0.029638834, -0.043518938, -0.024817916, -0.042419206, 0.03660722, -0.04032659, 0.007722461, 0.06298621, 0.030159188, -0.00047960944, 0.002246764, -0.021033483, 0.020595808, -0.0039783227, 0.05026719, 0.012504504, 0.01299512, 0.0036275147, 0.020374501, -0.020564191, -0.06934571, 0.01524774, -0.0027914767, 0.017113836, 0.013148043, 0.0064302906, 0.008524776, -0.047481336, -0.027520226, -0.05220483, 0.0009791246, -0.014915666, -0.011522101, 0.02298191, 0.03077088, 0.026322315, -0.0042451173, -0.034831636, -0.035627864, 0.020325324, -0.025512038, -0.012386476, 0.04733005, -0.012039883, 0.023576738, 0.016904535, 0.0114975115, 0.065047026, -0.022667166, 0.05545847, -0.00033441518, -0.02948193, -0.011843549, -0.0019648063, -0.026334492, 0.014817309, 0.03599155, 0.04442476, -0.020810584, -0.0062384354, 0.018626623, 0.0026809417, -0.029933436, 0.058748413, -0.01637323, -0.06447656, 0.023618892, 0.005708945, -0.07574269, 0.0033015304, 0.04052325, 0.0140709635, -0.021473119, -0.06526717, 0.0071382597, -0.012830021, 0.0071768123, 0.055250224, 0.00059576484, -0.058591038, -0.017091706, 0.015324083, 0.009528491, 0.00863297, -0.012094682, -0.0105813835, 0.036577713, 0.0374278, 0.033907544, 0.025543885, -0.02791102, -0.019195735, 0.020172283, -0.0049885935, -0.005923926, 0.020690652, -0.050061107, 0.011172112, -0.015892215, -0.033040594, 0.012173836, -0.009580011, -0.07729112, -0.022807207, 0.021560412, 0.05648525, -0.022623139, -0.0010383731, -0.025373401, -0.008608703, 0.015153363, 0.00410689, 0.025303964, -0.05548505, 0.017985353, -0.0060875327, 0.0047094463, -0.053975735, 0.010837932, 0.021424232, -0.026090004, 0.0009142555, -0.022529935, -0.05373686, 0.025336867, 0.023645941, 0.039097946, 0.0011090968, 0.01832539, -0.025075516, 0.027509628, 0.0066058706, 0.013327428, 0.012006862, -0.018474331, 0.0051932707, -0.042692266, -0.029905334, -0.01975204, -0.01835677, 0.037854485, 3.817204e-05, 0.024237137, 0.021438636, -0.06366171, 0.02827752, 0.008720554, -0.005599815, 0.0018926774, -0.025693763, 0.0145559, 0.031906206, 0.014056268, -0.01989536, -0.017921656, -0.02524132, 0.018178089, 0.008122916, 0.052584678, 0.06008607, -0.022943271, 0.020239437, 0.011357763, -0.04382806, -0.023891248, 0.012204983, -0.022192707, 0.044562463, 0.056222964, -0.020183876, 0.020081421, 0.002487974, -0.009071597, -0.013776593, 0.011001041, 0.02167516, 0.0044024307, 0.034461625, 0.009711155, 0.05571982, -0.023912089, 0.039518133, -0.0051380033, -0.024657147, 0.04967564, -0.019318331, -0.026496546, -0.007979128, 0.058422424, 0.05704636, -0.0012149481, -0.0010505507, -0.02860046, -0.03749759, -0.03192822, 0.04828131, -0.009332771, 0.026630385, -0.017650235, 0.006920614, 0.012214321, 0.043556172, 0.040941972, 0.0240067, 0.013651071, 0.0584791, -0.073669314, -0.012652743, 0.0327577, -0.02831581, -0.0512839, 0.030646294, -0.029068828, -0.010014423, 0.01395551, -0.025682522, 0.023908753, 0.009196886, -0.024094753, 0.07032273, 0.0055089514, -0.02129953, -0.03905398, 0.029933436, -0.031923767, -0.012447832, 0.013758328, -0.0071332534, 0.024848826, -0.03312865, -0.016145602, 0.049870133, -0.029480522, 0.028779758, 0.016100405, -0.007373995, -0.0024366875, -0.037447795, -0.00031661717, 0.015796315, -0.0045600366, -0.02686094, 0.017403025, 0.01196588, 0.02231589, 0.0035317335, 0.0016880004, 0.01685471, 0.028013946, -0.03569718, -0.032614436, -0.000994083, -0.012644547, 0.0032441549, 0.01277405, 0.011787432, 0.029994326, 0.006728964, -0.022996899, -0.022531807, -0.049577635, 0.047119055, 0.0397111, -0.0372709, 0.030798718, 0.025228206, 0.015584965, 0.020337032, 0.008756385, -0.04481339, -0.0073463614, -0.013069358, 0.02986242, -0.0028099774, -0.008608234, -0.011271758, -0.043085225, 0.0041037286, -0.046615202, -0.010610891, 0.02912316, 0.0039474103, 0.03725404, 0.025993053, 0.00530849, 0.06383302, 0.010105492, -0.005294907, -0.026252938, 0.022607215, -0.03732359, -0.030359417, -0.01785702, -0.022687774, 0.0021271252, -0.08157904, 0.07818243, 0.036768805, -0.0015231348, 0.003551639, -0.0065477933, -0.045243468, 0.0061678286, 0.044139054, -0.040755562, 0.011490017, 0.065981895, -0.05020349, 0.027817348, -0.012497948, -0.043653827, 0.003227528, -0.029241422, 0.0540666, 0.039731707, 0.04273957, 0.023806239, -0.046568953, -0.002084006, -0.0071857106, 0.04932858, 0.0030589153, 0.006449904, 0.0023055444, 0.019558135, 0.0041928357, -0.0015723134, 0.05155427, 0.04002116, -0.008050319, -0.040067997, -0.019629328, -0.03712137, 0.037891954, -0.07117329, 0.0077725765, -0.06256491, 0.030453794, -0.013285041, -0.006062563, -0.023620764, -0.0008571145, 0.02416969, 0.0027811727, -0.013650837, 0.04477885, -0.047683667, -0.016532943, -0.016037878, -0.012842199, 0.007501391, -0.100628056, 0.014394138, 0.010170536, -0.013503066, 0.060127288, -0.03265981, 0.028471658, -0.010395909, 0.05932731, -0.011746684, -0.015340944, 0.043954577, -0.039769176, 0.048589498, -0.0076241186, -0.032002218, 0.045636896, 0.0068503586, 0.031131525, -0.026417395, 0.030868066, 0.017663117, 0.03255911, 0.026755292, 0.047033574, 0.05891702, -0.0022130415, 0.06986186, -0.0012018338, -0.058152173, 0.052150853, -0.039121892, -0.0048204497, -0.00927604, 0.04132978, 0.02255663, 0.06306115, -0.0097709885, -0.006222277, 0.013265604, -0.033180166, -0.027316544, -0.0049618967, -0.013451546, -0.0543982, 0.0013638893, 0.048626028, -0.003123433, -0.0161449, -0.0075182524, -0.029645566, 0.021802088, 0.0108797345, -0.08677933, -0.041130256, 0.0133410115, -0.0036254071, -0.02869788, -0.028295083, 0.057231717, -0.04113307, 0.018194247, 0.04567156, 0.0155638885, 0.008794089, 0.018139916, -0.022161327, 0.031407394, 0.036447212, 0.053553265, -0.0032887673, 0.10065054, 0.004710617, -0.021338113, 0.024121918, 0.012877326, -0.060676683, -0.0159459, -0.06258013, -0.010851632, -0.01955439, 0.01793922, 0.006496272, -0.004469173, -0.01784578, 0.032206167, 0.021241453, -0.036553357, -0.010686532, -0.036429707, -0.031013494, -0.05008031, -0.031790048, 0.009503667, 0.022936476, -0.067720935, 0.002834596, -0.044403218, -0.014425518, 0.018768935, 0.037461992, 0.012751803, 0.025489554, -0.004880401, 0.03892705, -0.04359856, 0.03369303, 0.006387845, 0.022612834, -0.058724053, -0.007217209, -0.010225424, -0.02398422, 0.0010997294, 0.021968711, 0.015847016, 0.0039778985, -0.0024467574, 0.02456757, -0.030554494, 0.0033851925, 0.022271395, 0.008919143, -0.0005437759, -0.008335087, -0.04050639, -0.014018271, 0.0028294146, -0.018150162, 0.030163873, 0.033398896, 0.03804277, -0.018448101, -0.017618386, -0.010194745, 0.060480434, -0.03895902, -0.021240983, 0.046826556, 0.021475635, -0.021088295, 0.025840834, 0.019435422, -0.044993363, 0.029606193, 0.05727305, -0.026570316, -0.013241483, -0.05654848, -0.018808132, -0.02295287, -0.013468876, 0.016225811, 0.034553424, -0.01738268, -0.053502683, 0.011959784, -0.024780212, -0.014670474, -0.04282692, -0.0062154853, 0.03846149, 0.027512908, 0.0094445385, 0.045411143, -0.022065781, 0.0065799933, -0.016210588, -0.026126537, -0.03925561, -0.0054096575, -0.0049918722, 0.013392298, -0.017780209, 0.032920692, 0.043567646, 0.042797647, -0.009615841, -0.004427957, -6.0419545e-05, 0.005550168, -0.011335924, -0.04095977, 0.0040949467, 0.022279356, -0.011796331, 0.026932364, -0.005775921, 0.009550972, -0.003508549, -0.06211317, -0.049384784, 0.038089607, 0.002133653, -0.010697655, 0.03080835, 0.09901687, 0.019862575, -0.04066938, 0.03148444, 0.0029030656, 0.010898995, 0.035792727, 0.02129391, 0.036702298, -0.07684242, -0.04397419, 0.023707882, -0.035708424, 0.01281316, -0.043664716, -0.026157213, -0.007624572, -0.011095184, 0.005838683, -0.04263278, -0.014355029, 0.0091641005, 0.013136802, -0.0004397981, 0.019860702, -0.05368488, 0.025006901, 0.011456764, 0.018385341, 0.0021559005, 0.041760564, -0.03205421, 0.024675764, -0.020100975, 0.030304503, -0.00053113, -0.060291216, -0.023445595, -0.056042172, 0.002852365, -0.0012322777, 0.012892548, 0.012101708, -0.025709191, 0.03542459, -0.0069583175, -0.00751673, 0.01796334, -0.010588497, 0.034415726, -0.012178052, 0.00069552736, -0.0144468285, -0.009596872, -0.00579893, -0.027611265, 0.014984048, 0.0021832122, -0.03713039, 0.008237974, -0.011151856, 0.020026973, -0.0009219836, -0.05554102, -0.00706815, 0.0011788837, -0.024616048, 0.0094034355, -0.021237472, 0.106229745, 0.046331022, 0.020067018, 0.05932731, 0.010842967, 0.10567894, -0.016859863, -0.042081572, 0.072821945, -0.018128112, -0.00029881916, 0.008772895, 0.017237838, 0.005930015, -0.00917815, 0.0039317203, -0.0060002995, -0.01943074, -0.024801055, 0.019478982, 0.0006681278, -0.010820251, -0.0021320137, 0.021072254, 0.0045206933, 0.026860002, -0.012435655, 0.033767503, -0.0070248265, -0.009495704, 0.0019727685, -0.019848991, -0.012604735, 0.027165143, -0.038591698, 0.023572521, 0.02538347, 0.019220911, -0.008507447, 0.035552923, -0.008070928, -0.028613808, -0.03440729, 0.04373532, -0.04001835, 0.028712166, -0.013060926, 0.008262022, -0.049408205, -0.028587814, -0.00076437753, 0.0140248295, 0.021748226, -0.08153735, 0.0109720025, 0.01385364, 0.002808572, 0.029040026, 0.01989583, -0.016186818, 0.02866767, -0.04290631, -0.08196075, -0.02870069, -0.0034520812, -0.010850461, 0.00531692, -0.022135569, 0.013836545, 0.04686426, 0.029289898, 0.03603675, -0.025971975, 0.056070745, 0.011877826, 0.016662681, 0.018835912, 0.015710019, -0.027554007, 0.039948095, -0.013765916, -0.019049019, -0.055260003, -0.0030462695, 0.0365276, -0.008091535, 0.02596776, -0.019354863, 0.048210114, 0.014524578, -0.020074746, 0.024905968, -0.0018940825, 0.013318528, 0.043428075, -0.07135689, -0.014014759, 0.016156843, 0.00412539, -0.0261667, -0.040937286, -0.0211356, -0.04206588, -0.0053440854, -0.034573097, 0.027562555, -0.0001401593, 0.019240173, 0.02131077, -0.07671409, -0.057313792, -0.017795196, 0.034453195, 0.0279691, -0.021092482, -0.008987993, -0.010054, -0.03987409, -0.0152489105, -0.036225773, 0.00022060159, 0.016924968, 0.034811027, 0.010008803, 0.06302743, 0.02283578, 0.0291255, -0.013854812, -0.0273183, 0.06872653, -0.016603665, 0.026895598, -0.011894689, -0.002215149, -0.06604747, -0.0165669, 0.023019848, -0.010483026, -0.032044843, -0.038276017, 0.0065981424, 0.016578784, 0.006248974, 0.010299426, 0.010128939, -0.026183678, -0.06698212, -0.0044278395, -0.00096366834, -0.054620206, -0.034456473, -0.007827142, -0.042701166, -0.071479134, -0.029140957, -0.025185933, 0.016106728, -0.061359096, 0.024691923, -0.009731879, -0.015991041, -0.007019908, -0.035622243, 0.02136159, 0.010468858, -0.097821586, 0.0023437163, -0.037056096, 0.05263339, 0.011787901, 0.014066045, -0.044791963, 0.024557034, 0.015036856, 0.044161536, 0.019769838, 0.034843814, -0.0045380234, -0.00051333196, 0.0063920603, 0.008372088, -0.04829442, -0.06886002, -0.014533008, 0.0067089116, -0.015650067, -0.015534849, 0.018197758, -0.01709311, -0.019540338, 0.018546226, -0.029785432, 0.025518594, 0.005892311, 0.074568026, -0.034919456, -0.0077674245, 0.008507447, 0.025635451, -0.0013432811, 0.026589286, -0.028624931, 0.016230846, 0.05813016, 0.026526524, 0.03940057, 0.03660675, 0.02784896, 0.0123639945, -0.0068827057, -0.017671078, 0.034670517, -0.052743454, -0.0045562168, 0.052448384, -0.0014341446, 0.03785355, 0.012327461, 0.0183926, 0.024515348, -0.039956525, 0.04495964, -0.04435732, -0.03646952, -0.015845846, -0.034636796, 0.018568825, 0.0015777143, 0.020913478, -0.03268463, 0.04743075, 0.0046645706, -0.019764218, 0.015604168, -0.027553422, 0.052393585, -0.00442983, 0.014601859, -0.0001924995, -0.03496471, 0.0018944337, 0.01637042, -0.03369022, 0.0075416714, 0.030447705, -0.025868934, -0.01758045, 0.06514632, -0.03153713, -0.0386198, -0.024442986, 0.018599853, -0.00283082, 0.025088398, 0.03032031, 0.02922292, -0.0077870963, -0.054286584, -0.017293105, -0.015511432, 0.012933061, 0.0124501735, 0.012629559, -0.014613568, 0.015556394, 0.017342282, 0.078862034, 0.014636051, -0.03236146, 0.051577687, 0.034120418, 0.028720245, 0.075860724, -0.060962856, 0.009195714, 0.014461349, -0.05653209, -0.03784231, -0.014356375, -0.06889046, -0.07761102, 0.00033956722, 0.0007882643, -0.0008669503, 0.064427845, 0.035093922, 0.024534786, -0.03140786, -0.026704503, -0.0092707705, -0.058699697, -0.044096902, -0.02472424, 0.005521129, -0.0012364931, -0.021172134, -0.00479586, -0.028934876, 0.05043206, 0.011434751, -0.0143554965, 0.04313581, -0.0018547397, 0.0004992809, 0.040217288, -0.06952089, -0.0034748265, 0.0067372476, 0.058677215, -0.014784874, -0.0016214921, -0.019475702, 0.023158016, -0.0071381712, 0.026181804, 0.0077974005, -0.011194244, -0.008839872, 0.0023179562, 0.02085177, 0.046593305, -1.1357939e-05, -0.001213543, -0.00027071705, -0.0042584073, -0.005378862, -0.009830822, -0.044910926, 0.037165046, -0.016540905, 0.004315548, -0.00553518, -0.012778969, 0.049131397, 0.041686207, 0.010743438, 0.00948581, 0.01434455, 0.012260953, 0.025627023, -0.01823078, -0.011210871, 0.008044698, -0.019332148, 0.00553237, 0.030326866, 0.006151553, -0.0072006984, 0.022142507, 0.07002391, 0.034490194, -0.0003471782, -0.053636633, 0.051197194, -0.021890026, -0.022946313, 0.024349546, -0.004498212, -0.017629394, -0.018070012, 0.048086934, -0.019409487, 0.012629032, -0.08002359, -0.049000725, 0.001956844, 0.011899372, -0.02834754, 0.022066953, -0.0032055145, -0.03744232, -0.008344923, 0.004947846, -0.014224589, 0.025320942, 0.026717149, 0.010611358, 0.047708027, 0.027162801, -0.013544283, 0.001961996, 0.0070285737, 0.047411546, 0.017007751, -0.041860912, 0.021975093, 0.012115057, 0.03386949, -0.019989269, -0.0103500085, -0.0022701826, 0.009722395, 0.040777106, 3.9342962e-05, -0.066706926, 0.04067793, -0.007842364], [-0.026218222, -0.081444345, -0.05756673, -0.035453487, -0.0056560016, 0.044037905, 0.03764579, -0.0066006216, 0.030081693, 0.00726063, 0.0116366185, 0.03243954, -0.080843195, -0.03471697, -0.015621453, 0.051356725, -0.0054293084, -0.032549992, 0.059776813, 0.05592991, -0.015297106, -0.0010999239, 0.0018738846, 0.056686357, -0.016081033, 0.021128884, -0.006700296, -0.024819544, 0.034122158, -0.013106955, 0.012986807, -0.0461564, 0.012083808, 0.034819342, 0.036803138, 0.021771112, 0.007920369, -0.040106952, -0.04322219, -0.049775936, -0.08653274, 0.025928086, -0.031925544, 0.019292714, 0.025920678, 0.033822592, 0.022815272, 0.038744908, 0.010567271, -0.030437022, 0.03845181, -0.006333924, -0.037755705, 0.0075774333, -0.009568638, 0.008555593, 0.03006102, 0.042387076, 0.013947995, -0.029613627, 0.022527294, -0.00069987815, -0.06327243, -0.010312292, 0.0036374535, 0.0036378575, 0.04797317, -0.0022875348, -0.022247396, -0.052102398, -0.002635773, -0.000915391, -0.015365666, -0.02528074, 0.04424911, -0.0006132689, -0.053735986, 0.006648573, -0.006504179, -0.00013388738, 0.018239934, 0.009408215, -0.016129253, -0.0739123, -0.048337385, 0.030318843, -0.031572238, 0.029942283, 0.033726692, -0.0075177634, -0.040020745, -0.006900723, 0.023548523, -0.0011670024, 0.02138063, -0.016964097, 0.002793047, 0.04325344, 0.020434933, 0.04621593, 0.016141916, -0.032247733, -0.026023181, -0.026528021, 0.015469785, -0.02316656, 0.023481343, -0.014999461, 0.0026955276, -0.048068535, -0.019952184, 0.026032882, 0.00809251, -0.0649599, 0.007840359, -0.004727275, 0.04741122, -0.02508678, -0.03967808, -0.03193039, -0.04149701, -0.0042476244, 0.023085741, 0.031721342, -0.008084698, -0.041772865, 0.008031626, -0.0007914711, -0.047634277, 0.0012564402, 0.04042914, 0.0047563696, 0.02404693, -0.018645233, -0.04302284, 0.058953553, -0.009209944, 0.06305908, -0.033909876, 0.03654883, -0.022040505, -0.010358358, 0.003799223, 0.006918772, 0.031141613, -0.035113517, 0.03028387, -0.022379937, -0.007019255, -0.018711908, 0.021159055, 0.017348789, 0.0011723902, 0.019326119, -0.0024212874, -0.068079986, 0.009896352, 0.03266529, -0.018934963, 0.005606029, -0.013947995, 0.01707401, 0.033139955, 0.011071167, -0.02474061, -0.019970503, 0.022510054, 0.013049305, -0.0043741036, 0.0361372, 0.08005011, 0.014775564, -0.0066596176, 0.023314185, -0.031334497, -0.029319182, 0.025219318, -0.023670858, 0.0028389783, 0.04618657, 0.011596209, 0.013028832, 0.012013229, 0.0073538385, -0.02743641, 0.019342283, -0.02941859, -0.027554402, 0.018019034, 0.011988982, 0.029206846, -0.035793997, 0.017300298, 0.0046874057, -0.029185025, 0.011284794, 0.0033813973, 0.019922685, 0.023343818, 0.05486096, 0.011805662, 0.0030915325, 0.04512409, -0.060084995, -0.04084185, -0.039441824, 0.0360413, 0.007016022, 0.07536055, -0.041257787, -0.006095227, 0.047143918, 0.033649646, 0.043917757, 0.016371438, 0.01809554, 0.020401258, -0.035697557, 0.021411205, 0.06327243, -0.027271273, 0.024786675, 0.023495216, -0.055664826, -0.03905794, 0.023102982, -0.0012413543, 0.030464903, -0.003666952, -0.0271029, 0.06359732, -0.0059664743, -0.0223961, -0.034987845, -0.013755919, -0.009260589, -0.03197996, 0.0268292, -0.050754365, 0.0010172209, -0.015648391, 0.016213035, 0.040542286, -0.005389708, -0.023594351, -0.00017733513, -0.06697279, -0.009973937, -0.010382873, -0.00026939114, 0.051921368, -0.025982235, -0.029517723, 0.019392928, 0.00086151285, 0.008294013, -0.004753676, 0.022572955, -0.00072910707, 0.010365093, 0.0038152516, -0.06316252, 0.0024094342, -0.049565542, 0.05199464, 0.008511379, 0.005382435, -0.04376905, 0.013042302, -0.057037644, -0.012361483, -0.062716946, 0.041238125, 0.0071194014, -0.0056120907, 0.038826805, 0.026865838, 0.024017297, 0.057516083, 0.015533631, -0.049992528, -0.024823852, 0.00083942275, 0.016173165, 0.030043373, 0.0099575035, 0.006483167, -0.029372253, -0.017877871, -0.027490288, 0.006053488, 0.027532713, 0.019367874, 0.055416986, 0.039224427, -0.020159345, 0.023566335, -0.0052956906, -0.026648171, -0.059089325, 0.0111463275, 0.011642545, -0.004687911, 0.012642795, 0.005875151, -0.01728629, -0.04522188, 0.032212712, 0.010597847, 0.018801345, -0.030886231, -0.015676677, -0.030014008, -0.00899672, 0.0490766, -0.013052, 0.036887188, 0.062204566, -0.014891941, 0.008831718, 0.0018089614, -0.03415381, -0.022567434, -0.053130396, 0.036622107, 0.051509198, 0.02796172, 0.02422796, -0.061537556, -0.056873955, 0.050510835, 0.035529457, 0.013909607, 0.012598883, -0.00030495075, 0.013845626, -0.011617762, 0.008617284, 0.012449911, 0.029401077, 0.014314096, -0.058628127, -0.0075953817, -0.012931852, 0.035302628, -0.047701627, -0.020305626, -0.06709778, 0.012791229, 0.013546913, 0.049619418, -0.017264672, 0.003075369, -0.044007733, -0.007230458, 0.014297529, -0.0047008754, 0.0039395755, 0.0074804523, -0.015358526, -0.013018595, -0.031301096, -0.039193444, 0.03914738, 0.015756147, -0.044894572, 0.042587504, -0.006768721, 0.015036335, -0.044762027, 0.055154063, -0.00676761, -0.022324981, 0.034888305, 0.031898063, 0.045533564, -0.05518854, -0.025057685, 0.033322606, -0.014523414, 0.028076213, -0.02835072, 0.05367241, 0.011119388, 0.016534418, 0.023216126, 0.008906609, 0.03459467, -0.021779733, 0.043897822, 0.01558266, 0.024441317, 0.025764566, -0.0005597948, -0.001311396, 0.0055381428, 0.042082127, 0.03870073, 0.0117346775, 0.02607275, -0.010845686, -0.004874363, -0.00076965045, -0.032325856, -0.0134146, -0.036132894, -0.03421806, 0.0016626819, 0.009983365, 0.02920577, 0.050164934, -0.021844387, 0.0010517029, 0.018309707, 0.037728764, -0.01298546, -0.0366464, 0.011889981, 0.0020581482, 0.01261828, 0.021411205, 0.046766296, -0.03787693, 0.004043998, 0.047513053, -0.0035538077, -0.004698181, -0.017836386, -0.049020562, 0.027936937, 0.0039997846, 0.024772938, 0.012017268, 0.086621106, 0.03446698, -0.009208865, 0.006008769, 0.004885139, -0.06136299, -0.0056824014, -0.022863762, -0.0077218274, -0.022715058, 0.014027734, -0.033725616, 0.010143822, -0.04928349, 0.050850272, 0.04079282, -0.016235126, 0.024086665, -0.028564079, -0.023916006, -0.011179731, -0.029253721, 0.062065557, 0.06839948, -0.051996797, -0.01544527, -0.041057363, -0.045962702, 0.007766529, 0.025140658, 0.010573332, -0.014344, 0.019738287, 0.0662659, -0.06806328, 0.008751086, -0.00692443, 0.01573783, -0.025607241, -0.006408276, -0.036409825, -0.005719712, 0.0032596325, 0.07315801, 0.0049468963, 0.0028630889, 0.030009903, 0.022255747, 0.032898046, 0.040901653, -0.02165689, -0.02140582, 0.021154206, -0.005179583, 0.0019308609, -0.016517447, -0.00425638, 0.023326444, 0.020118669, -0.0016774986, 0.066554695, -0.026505932, -0.009644337, 0.02455985, 0.032865718, -0.043768786, -0.018714264, 0.045851853, 0.014940701, -0.05369719, -0.0046308334, -0.019946797, -0.08083673, 0.025889566, 0.07162787, -0.027143849, -0.023982275, -0.037115633, -0.0041507785, -0.0070925294, -0.033035163, 0.05540621, 0.03803587, -0.031117909, -0.06463447, -0.0019557795, -0.014610899, -0.009728656, -0.025011888, -0.004578841, 0.028932605, 0.022101386, -0.019921472, 0.016501283, -0.041042812, 0.025202079, -9.69808e-05, -0.007845747, -0.03373437, -0.018755548, 0.008646377, -0.017514734, 0.020133484, 0.022731224, 0.0066345646, 0.020530298, -0.01742314, -0.03709381, 0.002146117, -0.0006152893, -0.006928201, -0.012081654, -0.018733459, -0.007095762, -0.0014999699, 0.011145249, -0.02777099, 0.01823697, -0.0048382645, -0.08428278, -0.046572335, 0.060382403, -0.01937636, -0.013573003, 0.038471308, 0.042134658, 0.039024, -0.0136979995, 0.0034609225, -0.0028543337, 0.045741536, 0.016654836, 0.041343994, 0.0065335426, -0.07112141, -0.06918826, 0.030709377, -0.040227637, -0.019580424, -0.056901872, -0.03148859, 0.00097627344, -0.0037596223, -0.002143545, -0.02276786, -0.016363895, -0.030733755, 0.020948932, -0.0036310556, -0.0029870085, -0.028755886, 0.01766236, 0.04259909, -0.016461145, 0.013862868, 0.043141373, -0.01076689, 0.030264476, -0.0027520997, 0.06323148, 0.025327615, -0.054606657, -0.026540445, -0.033009034, -0.016752625, 0.00039856418, -0.014864463, -0.01694578, -0.07777753, -0.02956729, -0.0031648069, 0.010071995, 0.009549646, -0.0037364548, 0.059132427, 0.0041734073, 0.0062307473, -0.0052059838, -0.0055594244, -0.026955813, -0.016291967, -0.028233267, 0.00835328, -0.05633076, -0.02323229, -0.05017356, -0.0068683964, -0.0006034361, -0.008099985, -0.008862698, 0.0026939113, -0.03908219, 0.040395737, -0.0056922343, 0.03425362, 0.03285767, -0.020368932, 0.06318946, -0.003825354, 0.06557411, 0.0036820378, -0.079061985, 0.083584525, 0.0027112868, -0.021294829, -0.035212655, 0.011511622, -0.0063985777, 0.041429795, 0.029638411, 0.012372595, -0.0068974905, 0.012612913, -0.015068661, -0.01175569, -0.032324106, 0.0034445697, 0.056121174, -0.010147964, -0.0014870389, -0.04398187, 0.023865359, -0.0015678564, -0.008159049, 0.0055138976, 0.003259902, -0.025069, 0.035004683, -0.040896807, 0.03408121, 0.0372013, 0.024341105, 0.0047288914, 0.012102127, -0.019655315, -0.02204697, -0.03140885, 0.032746106, -0.018358601, 0.007082831, -0.026389554, -0.025588453, -0.020189248, -0.05044295, -0.027452841, -0.0035128603, -0.0063231485, -0.034091983, -0.06077464, 0.00659685, -0.029244022, 0.029350702, 0.01731754, 0.0034632923, 0.02409542, -0.057274707, -0.059781663, -0.033459455, 0.014516949, -0.00818518, -0.011968778, -0.013301455, -0.020485781, 0.07457231, 0.043240506, 0.04177293, 0.020786623, 0.014745392, 0.0518718, 0.0070117125, -0.0062575517, -0.0038856976, -0.014532035, 0.033958904, 0.00063037523, -0.044045985, -0.08918948, 0.004530081, 0.024150375, -0.0016544656, 0.04421678, 0.03685055, -0.010163067, 0.03466633, -0.027127417, -0.01086616, 0.026830412, -0.008215352, 0.012216146, -0.06553963, -0.010313369, 0.024761623, -0.009095184, -0.029272038, -0.02922786, -0.054104514, -0.02583838, -0.025216088, -0.05834581, 0.03456827, -0.010640949, 0.023947254, -0.0043037925, -0.017840696, -0.043695778, 0.010525919, 0.029097205, 0.021485558, -0.0066130133, 0.031986423, -0.008505755, 0.01812221, -0.041300893, -0.035590876, -0.041385077, 0.028689615, -0.01600749, 0.02749729, 0.06528748, 0.0256824, -0.01893604, -0.0050149853, -0.038296644, 0.040604785, -0.048446223, 0.020210227, -0.00184607, -9.9135934e-05, -0.079619355, -0.017023902, 0.0044654272, 0.0030150253, 0.0008062539, -0.05479038, -0.010579527, -0.010491976, 0.0042299796, 0.0008239327, 0.012666367, -0.009293993, -0.008775685, -0.0030148907, 0.00039250287, -0.07692087, -0.014857997, -0.00165029, -0.027026935, -0.028299, -0.03405104, -0.0044219205, -0.0065588653, -0.030611586, 0.04808093, -0.03774924, -0.015067517, 0.007527596, -0.054662693, -0.0026685884, -0.0049734986, -0.041158654, 0.03454456, -0.030612396, 0.033885904, 0.028193815, 0.033235323, -0.06555902, -0.0036351637, 0.012758364, -0.010492246, 0.039231967, 0.04331378, 0.010218006, -0.01278207, -0.019291637, -0.010148368, -0.014667808, -0.08305867, -0.05330252, 0.019690335, 0.0067194225, -0.019815333, 0.018690053, 0.009198225, 0.003267445, 0.03508981, 0.027587805, 0.0010570908, 0.0035818245, 0.0047983946, -0.039278843, -0.008843572, -0.013868255, 0.019036254, 0.042409707, -0.012101049, -0.018452484, 0.01778116, 0.035336033, 0.0030585995, 0.019946257, 0.038872063, -0.0012957713, -0.012760519, 0.0002974078, -0.017419368, 0.0145121, -0.09787814, -0.015682066, 0.04869945, 0.0048932205, 0.02168437, 0.009471792, -0.023336815, 0.04029768, -0.038199123, -0.019752633, -0.060632396, -0.037280228, -0.0010215312, -0.00047278142, -0.0044137044, 0.02269728, 0.002306813, 0.009994882, 0.06161083, 0.037279423, 0.017568612, 0.015298721, -0.020073678, 0.062132366, -0.024730105, 0.015635999, 0.024191324, 0.009798294, 0.026671875, 0.04646458, -0.033089515, -0.0048739254, 0.043973252, -0.040404357, -0.0020660951, 0.03057266, -0.057248846, -0.017346093, -0.034608677, 0.0034072588, 0.044622485, -0.013834312, 0.015005085, 0.04130022, -0.0028116351, -0.008414701, 0.011383391, -0.013688402, 0.005538681, 0.031743366, -0.031801082, 0.0052908417, -0.009573083, 0.033852763, 0.025070617, -0.0171555, -0.059240185, 0.06688658, -0.0020204335, 0.019656932, 0.05121664, -0.05701946, 0.030117927, 0.033663116, 0.005892122, -0.0135020185, 0.018148342, -0.011072514, -0.06761609, 0.021714002, -0.028189087, 0.0066905976, 0.018634323, 0.023856739, 0.005784703, -0.07889711, 0.0012887671, -0.007478297, -0.030288722, -0.03119199, -0.03347993, 0.009222335, 0.012483045, -3.2326934e-06, -0.02085222, -0.029710742, 0.06645125, -0.01038853, 0.013286371, 0.014842913, -0.008214004, -0.048945133, 0.0063646343, -0.023318496, 0.08665342, 0.005152105, 0.042964652, -0.0012165703, 0.021299947, -0.069235675, 0.036080092, 0.0052983845, 0.031025236, -0.02182984, 0.02446287, -0.002894069, -0.011561189, 0.025924047, 0.043162387, -0.018534109, 0.038069274, -0.004832607, -0.039768193, -0.017099602, 0.029558672, -0.027212812, 0.05218466, 0.014993233, -0.010665733, 0.05100651, -0.028115813, 0.091334365, 0.023634626, 0.014593995, 0.013248521, -0.012488702, 0.0016082651, 0.036817145, -0.03575359, 0.0021276511, 0.021424137, -0.010367247, -0.0053361, -0.005078023, 0.0235661, 0.004523885, -0.0081402585, 0.031274155, -0.02500273, -0.03727107, -0.058166932, 0.034577966, -0.016428549, -0.039865576, -0.03316528, 0.03230296, -0.02662554, 0.003189591, 0.026102923, 0.00026898703, -0.020663377, -0.06715894, -0.0074308845, -0.00058403995, 0.021992553, 0.011084367, 0.058717564, 0.038188886, 0.008239058, -0.024074946, -0.0069977036, 0.007427652, 0.06595772, 0.022138022, 0.023441875, 0.010368595, -0.0028814075, 0.025994625, 0.007690578, -0.037073337, 0.038024828, 0.052541643, 0.0040866635, 0.011409253, -0.0022117011, 0.0031823171, -0.009671141, 0.00918516, 0.015156483, -0.0055031213, 0.044938747, 0.032844704, -0.05245584, -0.006976422, -0.008232054], [-0.024726758, -0.060409717, -0.038933527, -0.017655639, 0.0031501483, 0.03794834, -0.00090051006, -0.034356374, 0.012523033, 0.04917953, -0.012047532, 0.046271514, -0.07731695, -0.013964957, -0.05071907, 0.03634626, -0.013326465, -0.072347015, 0.03934242, 0.039120816, -0.037702564, 0.003447926, -0.014741067, 0.044316377, -0.0192547, 0.047454562, 0.004449668, 0.0016224794, 0.025294863, -0.0019548195, 0.016621916, -0.03579427, 0.002004617, -0.0023237993, 0.009806897, 0.012292869, 0.023296418, 0.00794947, -0.021847945, -0.045625843, -0.06307801, 0.020715762, -0.02517802, 0.0141785005, 0.0024920155, 0.037818905, -0.002805532, 0.06172624, -0.023282314, -0.060197186, 0.029082244, 0.0043282905, -0.024530338, 0.005918411, -0.003393659, 0.03675471, 0.04803123, -0.0072896997, 0.0074705067, -0.015096134, 0.04429019, -0.02592492, -0.07285468, -0.016801463, 0.023828262, -0.0025171975, 0.026898457, 0.0016358258, 0.020927291, -0.04650016, -0.021859026, 0.01738468, -0.008902358, -0.038120586, 0.026063925, -0.0034177075, -0.06894442, -0.006783037, 0.013117833, -0.0036463607, 0.017622398, 0.036128685, -0.0071758768, -0.035347033, -0.058698345, 0.021921413, -0.01120853, 0.015780583, 0.037787173, -0.0018435777, -0.014187062, 0.011677042, 0.020668417, 0.03989189, 0.0055934363, 0.012314022, -0.007449417, 0.037819408, 0.029559696, 0.030468011, 0.03581504, -0.014548173, -0.04396181, -0.016794411, 0.008182151, -0.032524377, 0.014830212, -0.032811202, 0.024540285, -0.012192849, -0.011016139, -0.012012844, 0.011835311, -0.018765662, 0.01999908, 0.0052648108, 0.03570613, -0.029463502, -0.015230607, -0.0036549226, -0.00010752735, 0.025167948, 0.012978828, 0.019973142, -0.0207417, -0.013153843, -0.025602084, 0.009989813, -0.05734903, 0.029178943, 0.01161396, 0.005914256, 0.045997027, -0.04578298, -0.028759914, 0.042679545, -0.002194348, 0.060898248, -0.02683399, 0.023503665, -0.027436346, -0.007816256, 0.016817579, 0.013956395, 0.036893714, -0.044425163, 0.014978282, -0.040030394, -0.007901623, -0.029322986, 0.029925339, -0.012843852, -0.012165448, -0.0021563624, 0.011259398, -0.08294564, -0.0014654063, 0.040956084, -0.027162867, 0.004175184, -0.004468806, 0.018281914, 0.028459743, -0.0049739582, -0.013197407, -0.049351778, 0.01309114, 0.022226684, -0.00836831, 0.00845311, 0.07145255, -0.0012057164, 0.0050802263, 0.055867884, -0.048476573, -0.0277345, 0.029637257, -0.016768979, 0.027900701, 0.04908535, 0.006356956, -0.0067185704, -0.011235726, 0.007984094, -0.01877473, 0.024144044, -0.02943278, -0.019276103, 0.012184334, 0.002547416, -0.0068522873, -0.029848786, 0.008435986, -0.01990325, -0.025689216, 0.039593734, -0.016512373, 0.024399642, 0.022911636, 0.025188848, 0.019929577, -0.010221897, 0.017463246, -0.03759327, -0.059758008, -0.03866754, 0.04286589, -0.01496821, 0.022434182, -0.04070376, -0.020331232, 0.05747148, 0.028905464, 0.02459581, 0.008535707, 0.040370602, 0.0030324222, -0.016055822, 0.030806208, 0.06448619, -0.061367642, -0.0076401075, 0.03158232, -0.026462052, -0.020038962, 0.024700062, -0.01771809, 0.014294086, 0.0024315785, -0.008682518, 0.07067518, -0.006586742, 0.026418991, -0.055811226, 0.0012208257, -0.016550146, 0.002504103, 0.044924773, -0.04610531, 0.015365079, -0.015659709, 0.01735446, 0.053941965, -0.04692322, 0.00519405, 0.010098001, -0.062640846, -0.004483412, -0.04435668, -0.010803161, 0.040891618, -0.024518752, -0.034820728, -0.024124151, -0.024624517, 0.008571969, 0.019430973, -0.007906157, 0.025849877, 0.028113239, -0.024419537, -0.081263475, -0.00068249647, -0.022121925, 0.026856655, 0.015413964, 0.0019702436, -0.019946197, -0.0015622943, -0.03607681, -0.004609889, -0.05620986, 0.0074720173, 0.022080375, -0.01856874, 0.030338263, 0.022737626, 0.015610856, 0.064314954, -0.0061088502, -0.046510234, 0.0118375765, 0.022098757, 0.010713451, 0.021722035, 0.019279, -0.0076392265, -0.020323424, -0.02038638, -0.007940403, -0.01219768, 0.0110100955, 0.008485343, 0.053625174, 0.03140856, -0.025397355, 0.037204966, 0.019236488, -0.03319699, -0.07600043, 0.022991965, -0.023408854, 0.0003968691, 0.02947307, -0.0023021428, -0.022404972, -0.0519828, 0.03474216, 0.0053420253, 0.02990721, -0.026868237, 0.0033280596, -0.023127193, 0.041000403, 0.034291904, -0.031508535, 0.005474577, 0.057900205, -0.009714227, -0.013653707, -0.012688227, -0.009324913, -0.0047241524, -0.015089083, 0.04693128, 0.038660202, 0.02076814, 0.022804864, -0.05782201, -0.02847586, 0.010818208, 0.046776157, 0.0134323565, 0.023175543, 0.0077681583, 0.061381746, -0.014574614, 0.0030550233, 0.026035216, 0.029404573, 0.011281054, -0.025461426, -0.011532371, -0.02289149, 0.03374596, -0.063402355, 0.010797055, -0.06452119, 0.004625942, 0.0076459153, 0.0041199718, 0.0012026946, 0.020842427, -9.443268e-06, -0.019874869, 0.0039515668, 0.022497643, -0.00765635, -0.0026884354, -0.047876805, -0.012093679, 0.0154648, -0.03184723, 0.04025703, 0.009138818, -0.008189202, 0.05473973, -0.046431668, 0.01613565, -0.053162325, 0.060220193, -0.021439996, 0.006636729, 0.0438767, -0.0011664325, 0.034295935, -0.036417272, -0.016151765, -0.0048413747, 0.0026002983, 0.023137266, -0.028862655, 0.0115590645, 0.02468143, 0.0340421, 0.019942168, 0.021073848, 0.03883777, -0.02554341, 0.07401306, 0.013366631, 0.016395403, 0.03691487, 0.012395611, 0.013382748, 0.016463269, 0.032053724, 0.02741217, 0.030988526, 0.05289842, -0.0081630135, 0.0038568825, -0.031372804, -0.0074108248, -0.0019178648, -0.029211177, -0.04155441, -0.017608423, -0.020814473, 0.02239515, -0.004911507, -0.032249138, -0.011599355, 0.043143775, -0.00330187, -0.011190399, -0.011647201, 0.017857598, 0.0016952555, 0.028296564, -0.00010929009, 0.03430097, -0.05414594, -0.0066470536, 0.04006132, -0.004418946, 0.008769901, -0.037706718, -0.024480477, 0.03444451, -0.018462282, -0.022059474, 0.0059007835, 0.07988149, 0.0409581, -0.022317339, -0.01683974, -0.012881122, -0.08000639, 0.0034056203, 0.0012913354, -0.034577973, 0.020763103, -0.011885927, -0.023010347, -0.021352867, -0.04521034, 0.066724375, 0.02223575, -0.016168889, 0.024697544, -0.040563244, -0.0024738845, -0.012772713, -0.024945842, 0.03828782, 0.06859993, -0.050760966, -0.022335468, -0.047490325, -0.05150736, -0.012998973, 0.058502935, -0.050502095, -0.0019601707, -0.0022182867, 0.034191176, -0.039856132, 0.004963885, 0.02776195, 0.019953752, -0.011348542, -0.020428183, -0.048849776, -0.03703549, 0.024370681, 0.053385943, 0.008900595, -0.011311272, 0.016745748, 0.018591402, 0.015444654, 0.015964411, 0.01792962, 0.041104153, 0.024422558, -0.029375363, 0.031899866, -0.02150698, 0.0040583387, 0.0024240238, 0.026105726, 0.0081489105, 0.06859993, -0.016869202, -0.033089213, 0.028733725, 0.03889953, -0.026155084, -0.0023107047, 0.015329572, 0.03489426, -0.04318822, 0.016649364, -0.006948231, -0.0497839, 0.005497202, 0.041123293, -0.056145895, -0.022409001, -0.018323466, -0.00049734546, 0.0075717387, 0.004313244, 0.060007814, 0.04398196, 0.019122995, -0.06732572, 0.012420793, 0.002241706, -0.027855374, -0.014003737, 0.011249325, 0.023992952, 0.03203358, -0.017930752, 0.04178004, -0.058833323, 0.018538017, 0.004719116, -0.016291779, -0.007796866, -0.00036060694, 0.004396408, -0.02839106, 0.031338554, 0.03779926, 0.02931719, 0.016568843, -0.025010811, -0.012080018, 0.023179572, 0.019266596, 0.0029382415, -0.028741783, -0.010332699, -0.0033265485, -0.001951357, 0.04450675, -0.024586493, -0.013729253, -0.00773303, -0.09574013, -0.054292496, 0.07944231, -0.019969365, -0.018749546, 0.04148088, 0.045524105, -0.006946216, -0.035303216, 0.00082143844, 0.03426471, 0.045964293, 0.0134323565, 0.018845238, 0.028739767, -0.1098582, -0.055614054, 0.06790994, -0.03720295, -0.0030215941, -0.047812656, -0.024697544, 0.02247334, -0.021078384, 0.0043761367, -0.030851787, 0.0070759035, -0.01461012, -0.0020603952, -0.0027477392, 0.014858668, -0.026501838, 0.019330747, 0.023923954, 0.044461425, 0.0012188111, 0.050637823, -0.018500542, 0.011649216, -0.014927918, 0.03665499, 0.010626825, -0.041562468, -0.05211576, -0.0058573443, 0.011630581, 0.005811261, -0.022345541, -0.0031981515, -0.07131317, -0.010630539, -0.010243554, 0.0080149425, 0.0048309243, 0.0025443942, 0.037597805, -0.0023000024, -0.012089398, -0.009279837, -0.010775398, -0.04995313, -0.0016793909, -0.04079089, 0.012227396, -0.04765048, -0.032942146, -0.01815122, 0.005260278, 0.027719894, -0.013366631, 0.01024752, 0.008892285, -0.0498524, 0.03740164, -0.00996907, 0.06629174, 0.008307055, -0.020898331, 0.061673857, -0.00025635326, 0.06735896, -0.036195166, -0.059679437, 0.065287985, 0.01425858, -0.03126339, -0.021633897, 0.041546352, -0.021297969, 0.029170886, 0.020555602, 0.0037939274, -0.030911468, 0.029930124, -0.025155356, -0.014829204, -0.027108539, 0.025784403, 0.05002666, -0.028682353, 0.01653957, -0.051278707, 0.022527609, 0.016926367, 0.004502047, 0.011584876, -0.021169038, -0.034531638, 0.035297677, -0.043035112, 0.034975853, -0.019321682, 0.031250417, -0.00108585, 0.010667871, -0.04531963, -0.02205746, -0.05236859, 0.0372372, 0.00763419, 0.030344369, 0.0031271696, -0.009103814, 0.00738388, -0.02657109, -0.041642044, 0.018241877, -0.0014003736, -0.01108177, -0.024706611, 0.040481653, -0.014705876, 0.04351231, -0.00367255, -0.007537994, 0.014648901, -0.050249267, -0.047244042, -0.03785869, 0.053788856, 0.016210439, 0.029239632, -0.010736685, -0.005148218, 0.06476823, 0.07017129, 0.045125224, 0.008191972, 0.04780963, 0.029208658, 0.019190734, -0.0066266563, 0.029281685, 0.006483874, 0.024234194, -0.03278904, -0.024204984, -0.060336187, -0.008874154, -0.003040984, -0.014599545, 0.009355634, 0.0032998556, -0.017735213, 0.039027892, -0.07374109, 0.044926792, 0.022393892, 0.004286992, 0.0061716167, -0.062097922, -0.047015894, 0.02086572, -0.007959039, -0.021249117, -0.056000847, -0.022163225, -0.025323762, 0.0053295284, -0.05434689, 0.04368078, 0.0052643074, 0.011028226, -0.016973708, -0.028671272, -0.049959168, 0.015881814, 0.02802762, 0.016390618, -0.027363822, 0.021985818, -0.015622943, -0.01153086, -0.07792736, -0.039511643, -0.027572328, 0.009244833, 0.026386758, 0.010288881, 0.052897412, 0.030310122, -0.009723796, -0.009282481, -0.037219066, 0.037106253, -0.04215173, 0.033890128, -0.03390511, -0.0049578417, -0.08155861, -0.0111727705, 0.03551676, 0.015074981, 0.012714921, -0.068243355, -0.0026889392, -0.03911125, -0.0051023867, -0.036145303, 0.027057607, -0.00803811, 0.008457139, 0.0024502133, -0.003510881, -0.05816449, 0.0009841145, -0.009813948, -0.0069779456, -0.06718369, -0.01906684, 0.008174596, -0.006963214, -0.048949875, 0.017904561, -0.010504817, -0.0058331694, 0.030053265, -0.050829463, 0.04654549, -0.015574971, -0.030359477, 0.023560576, -0.047476217, 0.05557376, 0.0060809613, 0.02587405, -0.03144533, -0.012553503, 0.027529016, -0.01623183, 0.037112296, 0.026557997, 0.0048205997, -0.033933315, 0.021146877, 0.003982667, -0.058430407, -0.062612645, -0.008481817, -0.014617424, -3.5254867e-05, -0.025834767, 0.019050723, 0.02701505, -0.03652807, 0.012683693, -0.011778148, 0.0009003841, 0.03428385, 0.027331587, 0.0121396985, 0.0045780963, -0.018887544, 0.03408894, 0.009600404, -0.031157497, -0.019954255, -0.0013104739, 0.038238436, 0.053476598, 0.0007917236, 0.030176656, 0.019477937, -0.030316496, 0.004415924, -0.0067941165, -0.010728559, -0.08764964, 0.0020840662, 0.053839218, 0.017587017, -0.03551676, 0.011897007, -0.007131556, 0.035808872, -0.06063837, 0.008602188, -0.057451334, -0.04424587, -0.011487546, 0.0013913081, 0.022355614, 0.006563953, 0.028463773, 0.017006949, 0.05044392, 0.020948224, -0.009065538, 0.016644327, -0.013203955, 0.06699734, -0.058689725, -0.006855435, 0.01148805, -0.0022391877, 0.008707953, 0.047181085, -0.055180922, 0.035799704, 0.011959962, -0.042863876, 0.020760331, 0.015892895, -0.030760376, -0.02506772, -0.005013557, -0.0010455587, 0.023819195, -0.00970428, 0.010348815, 0.02864886, 0.007642248, -0.021418842, -0.018058551, -0.008861311, 0.025548197, 0.030421425, -0.029726904, 0.013997694, 0.013860074, 0.0015706044, 0.031229768, -0.0068203057, -0.06657731, 0.027716873, -0.014731184, 0.05516153, 0.059800312, -0.05132303, 0.029630207, 0.030065352, -0.041425478, -0.0095142815, 0.005676034, -0.01945968, -0.07929928, 0.015178228, -0.025694253, 0.015191826, 0.036199193, 0.035103776, -0.0088711325, -0.03133503, -0.008831848, -0.033387367, -0.059937302, -0.050575625, -0.045835864, 0.009608966, -0.019790256, 0.008718025, 0.0029523433, -0.022549516, 0.05101984, 0.00024074038, 0.01740684, 0.003146497, -0.012785933, -0.042212684, 0.035671882, -0.04285506, 0.035579212, 0.064744055, 0.03976346, -0.03231411, 0.0057659335, -0.053653374, 0.012774349, 0.027020589, 0.01515355, -0.0035899528, 0.0070771626, -0.0040331567, 0.008988984, 0.047489315, 0.078687854, -0.024828997, 0.024561562, 0.036885656, -0.05620633, -0.035839092, 0.046401702, -0.0425909, 0.03308216, 0.0034300468, 0.00860118, 0.0147456005, -0.018268066, 0.0859977, 0.018776743, 0.0014555224, -0.0098197395, 0.005074183, 0.0051109483, 0.03518713, -0.023765307, -0.011897942, -0.0059476225, 0.010504943, 0.029742202, 0.028204523, 0.030934637, 0.0023449524, -0.012358783, 0.059866793, -0.013707093, -0.046794415, -0.052206416, 0.062712364, 0.008610246, -0.04678069, -0.043065332, 0.010077541, -0.016056074, -0.0009125974, 0.011098233, -0.012292869, -0.014994399, -0.06322507, -0.004162593, 0.0035552017, 0.017127318, 0.017030116, 0.05268286, 0.029303845, -0.005704741, -0.030434016, -0.004039704, 0.010323381, 0.025720945, 0.006268819, 0.006646046, 0.044885334, 0.02729347, -0.013895455, -0.020724447, -0.019335784, 0.025716413, 0.03788866, 0.005159802, -0.030057544, 0.011575684, 0.0050565554, -0.043851074, 0.00019497202, -0.006178668, -0.019047702, 0.054348905, 0.019164545, -0.05017876, 0.0314695, 0.025653457], [-0.034291934, -0.09041018, -0.039843358, -0.033949826, 0.00059767434, 0.03318973, 0.014215102, 0.0045510996, 0.022604413, -0.0035572427, -0.008405313, 0.03702274, -0.06353217, -0.017662732, -0.017736208, 0.027329803, -0.011241932, -0.020134771, 0.026754264, 0.059514605, -0.0023906974, -0.019206123, -0.022216633, 0.039381433, -0.00551962, 0.035021693, 0.021481073, 0.01692584, -0.002380813, -0.008978183, 0.036488008, -0.059169233, 0.010304215, 0.006754974, 0.013173373, 0.014241773, 0.021418666, -0.034226127, -0.045841437, -0.048034348, -0.058215246, 0.017841153, -0.04698185, 0.030410185, 0.029349519, 0.039921768, 0.01831648, 0.03475419, -0.009099666, -0.00053099944, 0.049670182, -0.009583326, -0.030407518, 0.009868161, -0.004122113, 0.0038196754, 0.033769537, 0.014774105, 0.02221583, -0.012485821, -0.00033710862, -0.0033193463, -0.0698967, -0.022611346, 0.015007468, -0.0027726118, 0.007832974, 0.024654685, -0.021768043, -0.043725174, -0.01062799, 0.02233558, -0.0029497005, -0.029385524, 0.048701793, 0.004426951, -0.038930576, -0.024487313, -0.012683978, -0.028465409, -0.0064565367, 0.0051947795, -0.021675231, -0.078781, -0.057487685, 0.031180413, 0.012135376, -0.0047568586, 0.061690874, 0.030579671, -0.050314527, -0.0035345731, 0.0085688, 0.00049179455, -0.00052646553, -0.006300284, 0.00930249, 0.050754048, 0.045202423, 0.030676883, 0.038609605, -0.04535818, -0.034797262, -0.032272816, 0.015722489, -0.012230856, 0.015345376, -0.04201696, 0.0031353233, -0.034697652, -0.013887328, 0.02442224, -0.0024917102, -0.07415963, 0.021214373, -0.002608858, 0.046154544, -0.02284951, -0.050920468, -0.021806449, -0.022667354, 0.019023167, 0.014244973, 0.062604055, -0.0008655744, -0.03995204, -0.0018925022, 0.011338477, -0.053145815, 0.024284622, 0.053984318, 0.003342816, 0.05320342, -0.009942571, -0.031938374, 0.013793716, 0.0021608688, 0.05371335, -0.029792508, 0.039872695, -0.027115108, -0.009425039, 0.021054354, -0.011348612, 0.008611205, -0.027522359, 0.009450243, -0.058733713, 0.019338941, -0.002702203, -0.011752396, 0.0059442064, -0.00656375, -0.009093398, -0.024797752, -0.053696282, -0.0033485168, 0.015853707, -0.0308113, 0.013811853, -0.011316874, -0.00055241876, 0.028654767, 0.01920559, -0.015387247, -0.025963765, 0.022417722, 0.016228152, -0.022479597, 0.030866442, 0.08622299, 0.021216506, 0.00063367886, 0.0026744662, -0.04943202, -0.015405409, 0.02744555, -0.021097027, -0.0010958697, 0.024799353, 0.020993546, 0.024919366, 0.01752378, -0.0124719525, -0.042705584, 0.029898388, -0.027999751, -0.036279716, 0.00081930193, 0.0157985, 0.04107391, 0.008538662, 0.011144186, 0.0026104583, -0.019808332, 0.03119748, -0.029607952, 0.015766678, 0.044625822, 0.046135876, 0.025716266, 0.0060796896, 0.010601852, -0.046766352, -0.02952794, -0.04215858, 0.034189854, -0.0030297101, 0.059139095, -0.037073415, 0.0057675177, 0.037182227, 0.029218037, 0.068618536, 0.014017744, 0.0012214853, 0.017510712, -0.040544778, 0.027566364, 0.06475899, -0.0471632, 0.020095302, 0.0101601975, -0.053425316, -0.021062221, 0.03130843, -0.025074054, 0.025766408, 0.020365201, -0.0011264068, 0.0717956, -0.006009548, -0.031735685, -0.031115338, -0.016583413, 0.0019663782, -0.040699467, 0.054829225, -0.05534982, 0.040095653, -0.017681133, 0.045139182, 0.02228544, -0.019817932, -0.025258077, 0.0077833687, -0.05641662, 0.009896165, -0.031428978, 0.009866028, 0.048586316, -0.019447954, -0.018349817, 0.024707075, -0.00733958, -0.010069519, 0.0041927886, 0.0034692318, -0.0018391622, 0.032177337, -0.0030398448, -0.0913351, 0.0055216537, -0.044092953, 0.05420621, 0.01653219, 0.024372099, -0.019356942, 0.010286613, -0.053009264, -0.022464663, -0.057544228, 0.024829756, 0.009430507, -0.02603764, 0.044971995, 0.024896964, 0.03870855, 0.055124726, 0.016363636, -0.053401846, -0.011826006, -0.008249635, -0.020300658, 0.018693527, 0.007409989, 0.017141866, -0.034588303, -0.011657984, -0.06639973, 0.012217521, 0.028353397, 0.01713173, 0.057075903, 0.04352328, -0.0067453724, 0.039324358, -0.01761179, -0.029849049, -0.030824102, 0.02246893, -0.009390769, -0.018850213, 0.033864215, 0.002856889, -0.014294579, -0.08092314, 0.027572766, -0.007774834, 0.014292979, -0.04268158, -0.04596252, -0.03279875, -0.0051921126, 0.031367105, 0.0071539567, 0.043725975, 0.071569435, -0.027406344, -0.019108512, -0.044694632, -0.008953648, 0.015410451, -0.058659032, 0.046167877, 0.061016656, 0.032695435, 0.03281155, -0.048344683, -0.030577673, 0.02698149, 0.028317124, 0.013881194, 0.010198602, 0.0068877907, 0.030148286, -0.028044024, 0.007896449, -0.009140337, 0.023066437, -0.0006070089, -0.060617678, -0.003953959, -0.020181712, 0.033021707, -0.055659194, -0.02287218, -0.060048006, 0.007482531, 0.0033945558, 0.05277457, -0.035505418, 0.021165302, 0.014084419, -0.021800047, -0.007156091, -0.01079736, 0.011353946, -0.017096527, 0.013343793, -0.029296445, -0.015228562, -0.05447398, 0.044112027, 0.013992141, -0.02051522, 0.06660776, -0.007723628, 0.044839714, -0.029006008, 0.049341604, 0.03174995, -0.011432889, 0.01122673, 0.017470675, 0.056331277, -0.06421279, -0.032779627, 0.035594296, -0.007180627, -0.0077465638, -0.034180786, 0.04334966, 0.030953184, 0.004376011, 0.03419199, 0.033646587, 0.02810803, -0.037099082, 0.041038707, 0.01711293, 0.01117259, 0.021045819, 0.0068701883, 0.014174564, -0.012874136, 0.04013086, 0.022226166, 0.0057788524, 0.028204177, -0.012031363, 0.0076617533, -0.008871238, -0.030078143, -0.020584429, -0.03889124, -0.03923155, -0.024021657, 0.0062322426, 0.02788747, 0.048782602, -0.016211085, -0.0041618515, 0.03056407, 0.04667701, -0.007637751, -0.024791252, 0.0011884146, 0.0036564548, 0.02372562, 0.0030982525, 0.045793433, -0.054320358, 0.010626789, 0.019122913, 0.005826859, -0.0134512745, -0.026070446, -0.04407535, 0.03319026, 8.4277155e-05, 0.037707094, 0.02321889, 0.09399783, 0.006010198, -0.030512597, 0.0070036715, 0.004303069, -0.0546676, -0.024046725, -0.030711021, -0.025722668, -0.007271305, 0.007399321, -0.03720543, 0.008554664, -0.02103395, 0.029261243, 0.029561011, -0.047162138, 0.013691837, -0.004963832, -0.0087709585, -0.012892804, -0.028723042, 0.052652955, 0.052608147, -0.04445193, -0.03358317, -0.04457408, -0.05170777, 0.007158224, 0.011578774, -0.013537684, -0.024502251, 0.0034478959, 0.059979733, -0.068701886, 0.017390432, -0.0010241275, -7.147556e-05, -0.008736021, -0.016452448, -0.03519371, -0.043715306, -0.0034777662, 0.059565812, 0.01630923, -0.00012908273, 0.010287147, 0.029123625, 0.008248493, 0.039662402, 0.008088007, 0.0066628293, 0.018591646, -0.004440019, 0.017635262, -0.010721334, -0.011422754, -0.00092864886, 0.025172733, -0.016281493, 0.04785022, -0.038155146, -0.02070511, 0.030779298, 0.021452269, -0.054741744, -0.00033124123, 0.0533037, 0.016431445, -0.056463562, 0.025406893, -0.0057100444, -0.062608324, 0.013452341, 0.05828085, -0.019038636, 0.013996676, -0.03150045, -0.016436713, 0.003245204, -0.030711288, 0.04584677, 0.053249292, -0.008478922, -0.060106747, -0.011064044, -0.016073467, -0.015801966, 4.747257e-05, -0.020134771, 0.03737185, 0.029347518, -0.023099408, 0.038163684, -0.043277387, 0.022045411, -0.006824316, -0.051675763, -0.05414327, -0.013811318, 0.0037153957, -0.010804278, 0.0091696745, 0.03407411, 0.028359795, -0.008361573, 0.008033, -0.050923448, 0.0049035437, 0.0075289365, -0.028536886, -0.014715431, -0.018144125, -0.006812648, 0.036842853, 0.013943068, -0.027726118, 0.014525541, 0.0045543, -0.084575854, -0.03141564, 0.058633428, -0.009251284, 0.00037124622, 0.026979357, 0.023917643, 0.01899863, -0.022227833, 0.012341003, 0.0077134934, 0.0052395854, -0.0051291715, 0.039489716, -0.013204844, -0.060751025, -0.08493431, 0.039280888, -0.027572498, -0.03036218, -0.066324525, 0.0035751115, -0.008925377, -0.019134749, 0.0021560017, -0.036480274, -0.015639013, -0.0033540174, 0.023764024, 0.010051917, 0.00039578258, -0.030148817, 0.027590634, 0.0273218, -0.007126753, 0.03457337, 0.033533774, -0.0039882963, 0.016448447, -0.027386874, 0.054001387, 0.024287289, -0.040915225, -0.030109612, -0.037617482, -0.0147549035, -0.0029746369, -0.019165585, -0.030839037, -0.052661154, -0.006458404, -0.0081503475, 0.011971624, 0.009032591, -0.009130737, 0.07130487, 0.016275626, 0.014807176, 0.011065378, 0.009388101, -0.014190299, -0.02131625, -0.047809683, 0.013098163, -0.030030405, -0.023006596, -0.03600875, -0.019144248, 0.0058108564, 0.005125038, -0.0016071333, 0.0022296107, -0.019944616, 0.018343616, -0.013144302, 0.07169746, 0.044963993, -0.006832217, 0.05899254, 0.0041726525, 0.049354408, 0.0023114877, -0.07667301, 0.084895894, -0.010413028, -0.024704942, -0.03940757, -0.025311949, 0.013185574, 0.039036326, 0.0044805575, -0.01457088, 0.019573636, 0.0060535534, 0.010829089, -0.020496067, -0.0104380995, -0.0019879807, 0.066532016, -0.0061741015, -0.0031171879, -0.048718594, 0.04197369, -0.005530821, -0.01317924, 0.0023869637, 0.004776061, -0.0190125, 0.038034067, -0.020639101, 0.05236278, 0.04331366, 0.0054828157, -0.005155842, 0.009247018, -0.01872313, -0.027295131, -0.018668989, 0.04112512, -0.0018528306, 0.02351226, -0.036542147, -0.014702629, -0.02900401, -0.06461604, -0.012078236, -0.0019458422, 0.006540014, -0.05940953, -0.056834806, 0.013085362, 0.006353724, 0.044060953, 0.02542343, 0.0068941917, 0.048107322, -0.06982843, -0.05665625, -0.011135919, 0.013994276, -0.01186441, -0.014853049, -0.009748413, -0.050732713, 0.048510835, 0.0385712, 0.044751603, 0.03570364, 0.047988903, 0.059927456, -0.003089451, 0.009947371, -0.0013801717, -0.022633217, 0.011963088, -0.012574898, -0.028719308, -0.10563234, -0.00471632, 0.010418096, -0.058272053, 0.03703221, 0.031610336, -0.025690664, 0.03246911, -0.004623509, -0.02529168, 0.014003342, 0.017840354, 0.01148783, -0.060052272, -0.008443184, 0.0412382, -0.028441407, -0.04665541, -0.021183435, -0.021859786, -0.0009889231, -0.017642729, -0.03977455, 0.017298153, 0.006009815, 0.020394005, 0.008458586, -0.009928469, -0.04267299, 0.033593513, 0.02047348, -0.014973597, -0.012482345, 0.016853297, 0.010407696, 0.0076990915, -0.043332323, -0.015615276, -0.036120627, 0.020152241, -0.001111605, 0.025936028, 0.046879433, 0.023103142, -0.015296537, -0.030664084, -0.04330512, 0.03861814, -0.039002188, 0.013392599, -0.0022914852, 0.020052295, -0.05178511, 0.0036601888, 0.0026584642, -0.029567413, 0.014983198, -0.03758868, -0.015967587, -0.025505042, -0.00093878346, 0.009563857, -0.00077449635, 0.0045829704, -0.019087175, -0.007804171, -0.0027683445, -0.040743202, -0.015771562, -0.016713947, -0.04305709, -0.024095798, -0.01186681, 0.02447558, -0.03470565, -0.04698185, 0.051357858, -0.034711387, -0.009293423, -0.010287147, -0.055952564, 0.0020986611, 0.013867326, -0.03206799, 0.023131413, -0.016818494, 0.040030584, 0.029266108, 0.03923475, -0.05172697, -0.019511761, 0.006057287, -0.016722081, 0.020534622, 0.01906584, 0.014618087, -0.019347474, -0.018539907, -0.017629927, -0.014934125, -0.07359209, -0.028528549, -0.0007379585, 0.004168252, -0.008258094, 0.0067261704, 0.019577902, 0.0018039579, 0.02778539, 0.023168217, -0.004941415, -0.0034052238, 0.028030576, -0.03706915, 0.022194896, -0.028927332, 0.0021281315, 0.047775548, -0.017791014, -0.01381932, 0.006470672, 0.060466193, 0.03655428, 0.011385949, 0.049981687, 0.021681631, -0.004816599, -0.028582755, -0.0022434792, 0.04238554, -0.0939893, -0.0070368755, 0.03315826, 0.011645182, -0.0022626815, 0.015201892, 0.0034465622, 0.031256422, -0.043405935, -0.027807994, -0.04625296, -0.056053907, -0.010705332, -0.010539979, 0.020555092, -0.0048175035, 0.0025074952, -0.025601052, 0.050952476, 0.04166225, 0.018866064, 0.043766513, -0.0034478959, 0.054394502, -0.033284143, 0.031619936, 0.024918301, 0.00083103677, -0.0012364206, 0.040636525, -0.04139395, 0.0020855928, 0.015172021, -0.023931913, 0.018739931, 0.016060665, -0.09672031, 0.018154792, -0.04570595, 0.027503157, 0.03754707, -0.009050326, -0.00417812, 0.0080069965, -0.01451114, -0.030517932, -0.0040058317, -0.03628825, -0.00012854933, 0.019935016, -0.024637735, 0.014130825, -0.041554105, 0.026659051, 0.018581511, -0.015311773, -0.04972352, 0.06487181, -0.0043536085, 0.03324187, 0.05295272, -0.05675373, 0.03821676, 0.029255908, -0.01868179, 7.894316e-05, -0.012213786, -0.009975108, -0.06719343, 0.01851537, -0.0101473965, -0.0020087834, 0.06388208, 0.017921098, 0.027487153, -0.06693953, -0.0018440961, -0.017718606, -0.027327934, -0.034143984, -0.03048486, 0.0013864392, 0.011928951, 0.004514695, 0.004377545, -0.027663976, 0.06661309, -0.020289991, -0.006177835, 0.009517984, 0.005548424, -0.045486726, 0.016772887, -0.019239727, 0.065824725, 0.020740181, 0.04481091, -0.0030609057, 0.019539498, -0.055121526, 0.023980584, 0.00334775, 0.040704265, -0.0034150248, 0.039252885, -0.0069021923, -0.0147373, 0.019936347, 0.038171414, -0.023755489, 0.018904053, -0.0013833721, -0.011173658, -0.017047454, 0.028274452, -0.03639733, 0.052432127, 0.028596627, 0.004084775, 0.037296373, -0.040339954, 0.10499013, 0.0061634337, -0.00032964104, 0.0027307398, -0.028282987, 0.009381434, 0.02871744, -0.022537205, 0.02341838, 0.012507689, -0.0020389871, -0.022642817, 0.0085050585, -0.021611223, -0.0050784987, -0.0091488715, 0.02840887, -0.015194424, -0.04404602, -0.068130076, 0.042021766, -0.014146561, -0.017418701, -0.011183525, 0.0035172377, -0.028891062, 0.014987466, 0.030310972, -0.0023941647, 0.010905357, -0.067182764, 0.0026632645, -0.012086838, 0.032302685, 0.01114592, 0.05013584, 0.019614708, -0.01262317, -0.02525541, 0.009914834, 0.019389879, 0.028718242, 0.013938868, 0.040043384, 0.014081752, 0.014172697, 0.021721104, -0.004132964, -0.043375064, 0.038080472, 0.0415305, 0.017101862, -0.0065618833, 0.01739663, 0.024682805, 0.003288676, 0.008314835, 0.030983455, -0.0032307354, 0.03714649, 0.026660385, -0.04909624, 0.016998915, 0.015694754], [-0.04772085, -0.08009926, -0.025633628, -0.017436722, -0.010431913, 0.053805113, 0.003946205, -0.03656205, -0.01415363, 0.04568374, 0.039935503, 0.021257268, -0.05496544, -0.023642408, -0.022243232, 0.08653509, 0.003238383, -0.054366805, 0.0684456, 0.033982076, -0.030371428, -0.02471308, -0.0016060728, -0.0031687298, 0.0076749814, 0.03746942, 0.021483172, 0.023820186, 0.009282878, 0.013886784, -0.031804956, -0.049998447, 0.017888995, 0.0153650725, 0.038329728, 0.014254814, 0.02320284, -0.008069367, -0.038687404, -0.046368033, -0.070733316, 0.004893577, -0.043952774, 0.025879296, -0.006522887, 0.020163063, 0.017888289, 0.017025629, -0.03291187, -0.022282295, 0.013941847, 0.0049938206, -0.049546648, 0.036699947, -0.021159379, 0.05431315, 0.046335086, 0.024466943, 0.005148657, 0.00915322, 0.031044483, 0.013667866, -0.058056522, -0.029563831, 0.0039935037, 0.034584478, 0.033199895, -0.019191219, -0.0035866466, -0.022972234, -0.012334187, 0.05394324, -0.005758589, -0.05796804, 0.051031, 0.010625341, -0.071998365, 0.011112321, -0.014365412, -0.03942164, 0.010094944, 0.004995233, 0.0066057174, -0.057497416, -0.05184048, 0.040615413, 0.014676261, 0.03407879, -0.0034899327, -0.008092898, -0.0379777, 0.011940037, 0.04218322, 0.0036390626, 0.0017893229, -0.004575433, 0.0056077535, 0.02567175, 0.055831395, 0.027177755, 0.012713923, -0.011381637, -0.04688243, 0.022004155, 0.028827772, -0.011459408, 0.025344193, -0.038207363, -0.01980821, 0.014458596, -0.01983786, -0.029884798, 0.018797304, -0.057927568, -0.0053915004, 0.012018749, 0.038833767, -0.058353953, -0.039813142, -0.024573306, -0.02885695, 0.0061139124, -0.012844817, 0.0065398295, 0.007315423, -0.014613903, 0.018120307, 0.018843425, -0.06110994, -0.0048902826, 0.03725858, 0.017988648, 0.055043332, -0.041462217, -0.048611037, 0.037906162, 0.01723694, 0.063205175, -0.023587814, 0.026908558, -0.0277083, -0.030800639, 0.03786663, 0.01660936, 0.02295388, -0.034637187, 0.015017229, -0.031188082, -0.012707275, -0.015870476, 0.019528305, 0.022348184, -0.0033287432, 0.042766795, -0.012587149, -0.06118901, -0.008315975, 0.033334494, -0.030314011, 0.007988889, -0.05004269, -0.011111028, 0.043604273, -0.002108408, -0.031609472, -0.025738578, -0.0034256924, 0.017272001, -0.008930143, 0.042731028, 0.052852325, 0.0048248656, -0.0051288907, 0.04359204, -0.021007838, -0.027125044, -8.518345e-05, 0.0021564118, 0.045844696, 0.0361319, -0.0009826687, 0.028431505, -0.00086077634, 0.0028567044, -0.012785252, 0.03800217, -0.01433188, -0.029861268, 0.020482853, -0.011438114, 0.04242677, -0.048771992, 0.010301079, -0.031529877, -0.013282029, 0.029934688, -0.014044445, 0.002099466, 0.008653533, 0.03735459, 0.009309939, 0.007648744, 0.043561216, -0.026758898, -0.007480259, -0.02984656, 0.04865528, 0.0027959936, 0.049400754, -0.019661846, -0.033079885, 0.045930587, 0.058241002, 0.052526653, 0.014713676, 0.042083446, 0.033847008, -0.045116313, 0.022516783, 0.08599292, -0.03554644, 0.008597175, 0.02050203, -0.028889425, -0.022419482, 0.014298582, -0.0036535934, 0.024561541, 0.035413723, 0.0018477984, 0.059801012, -0.012123345, -0.008347036, -0.054440223, -0.0046034358, -0.01645264, -0.065835975, 0.029476061, -0.06732975, 0.031991325, -0.0035880583, 0.011338105, 0.0324836, 0.00041056302, 0.0048885182, -0.01098984, -0.028265843, 0.005223604, -0.01665407, 0.01569705, 0.05186307, -0.028331993, -0.020215303, 0.019163921, 0.013766774, -0.020065174, 0.012386897, -0.003151317, 0.014160513, -0.0047092093, 0.005096888, -0.063903585, 0.034484234, -0.022543022, 0.055052035, -0.0038384318, 0.013380861, -0.02869882, 0.03145387, -0.017893229, -0.02263809, -0.066896774, 0.034280457, 0.025135236, -0.02604637, 0.0020547565, -0.04144904, 0.021759428, 0.045737393, -0.020419553, -0.028904485, -0.017697921, 0.01509959, 0.008762129, 0.007759694, -0.021188088, -0.0039664423, -0.018979907, -0.010945367, -0.043496266, -0.03687737, 0.020358844, -0.0051898663, 0.04997209, 0.06685018, -0.029531829, 0.063500725, -0.011314927, -0.046971373, -0.051463977, 0.030573798, -0.010419677, 0.0097697405, -0.020226598, -0.014948989, -0.03491674, -0.038480327, 0.02861411, 0.022387715, 0.023214135, -0.03834526, 0.0072278855, -0.030179061, 0.02739989, 0.012762457, -0.03474402, 0.015371141, 0.090134434, -0.018408095, 0.018252788, -0.027985351, -0.034805674, 0.0063233417, -0.04277527, 0.04175024, 0.06647132, 0.019740911, 0.01699598, -0.062363695, -0.026641238, 0.058801048, 0.022516197, -0.00071629393, 1.882507e-05, 0.006657074, 0.025882589, -0.013637822, -0.0008386569, 0.018004652, 0.033441797, 0.0021907676, -0.059571937, 0.013905609, -0.04322424, 0.0008904259, -0.037470363, -0.01762968, -0.071023226, 0.019389823, -0.0011523296, 0.029318167, -0.018565286, 0.014660965, 0.008995619, 0.014614843, 0.023342617, 0.002172413, -0.0064373505, 0.00738884, -0.01971879, -0.049660537, -0.008436455, -0.053947005, 0.0508564, -0.0019662785, -0.0104761515, 0.049269915, 0.010524627, 0.02681349, -0.05290786, 0.062207446, 0.013502282, -0.03134798, 0.022102986, 0.015282192, 0.036820307, -0.018713063, 0.02053621, 0.015169595, 0.02290352, 0.016643245, -0.030037282, 0.037645552, -0.006087087, 0.040117167, 0.022543022, 0.055199817, -0.009927754, 0.0030844877, 0.046849955, 0.01596755, 0.02095807, 0.03482862, 0.00022543022, 0.018730946, -0.02267762, 0.058553502, 0.049516525, 0.020417202, -0.0034351049, 0.01892296, 0.009397475, 0.0152459545, -0.025866942, -0.029843384, -0.012076283, -0.027633322, 0.0018577992, 0.008808251, 0.028503804, 0.06564679, -0.0032162631, 0.0017987356, 0.055450186, -0.007573194, -0.02263809, -0.017231293, 0.052184977, -0.015798941, 0.00028684703, 0.009742444, 0.02115091, -0.084637515, 0.03046273, 0.018673528, 0.0016377813, 0.0051223016, -0.023785478, -0.04532136, 0.027083158, 0.025348898, 0.023407094, -0.0032668558, 0.0726083, 0.019308874, 0.029584538, 0.00021319394, -0.022186406, -0.03251749, -0.023467332, -0.034308694, -0.05609495, 0.016438052, -0.0059859017, -0.025646571, 0.00870236, -0.007933356, 0.055775862, 0.019668903, -0.039706312, 0.02988127, -0.004533548, -0.018503867, -0.033152834, -0.03270291, 0.030753577, 0.034482587, -0.088903286, -0.006945392, -0.049710892, -0.015634222, -0.012642918, 0.04233288, -0.0039104377, 0.027585201, 0.03997692, 0.057571303, -0.01612732, 0.008735304, 0.016809847, 0.01784146, -0.03403855, -0.029572776, -0.047706023, -0.02093348, 0.009879397, 0.06981089, -0.0013566993, -0.0045259586, 0.046371795, 0.01870412, 0.010845124, 0.050272983, 0.020825235, 0.036087662, -0.0065718326, -0.0020228054, -0.007997831, -0.01792832, -0.009276054, 0.024885802, -0.00018625055, 0.022127988, 0.045500197, -0.037284933, -0.012234296, -0.009225696, 0.059688654, -0.030963477, -0.032770682, 0.04988738, 0.04120808, -0.038261253, 0.014155512, -0.0046839127, -0.06868327, 0.017460253, 0.02992151, -0.00066546624, -0.02657347, -0.03023118, -0.017669683, 0.0031164906, -0.011499824, 0.039375458, 0.0285934, -0.027427187, -0.035391133, 0.0005155716, -0.054080665, 0.00056663464, -0.035504084, 0.02932193, 0.036046248, -0.0050926525, -5.0592378e-05, 0.0075848564, -0.019882098, 0.02598707, -0.026987622, -0.00055628084, -0.04671253, -0.025521854, -0.033159424, -0.0029653017, -0.00830468, 0.024348818, 0.038636576, -0.0002602566, -0.00555069, -0.028615285, 0.018171841, 0.020674398, -0.011999806, -0.01714211, -0.00092195784, -0.002872706, -0.005051237, 0.0049547586, -0.037429888, 0.003315095, 0.005909896, -0.05460677, -0.06345178, 0.028678112, -0.026685009, -0.0062725134, 0.039073315, 0.035700336, 0.040876757, -0.040071987, -0.014151747, 0.0338936, 0.03625426, 0.019510303, 0.03734141, 0.011264098, -0.06421232, -0.077499054, 0.06552536, -0.016521588, -0.03267656, -0.03209298, -0.010607927, 0.02209875, -0.022626145, 2.8237606e-05, -0.040746868, -0.019676905, 0.010161303, 0.0020387552, -0.00741143, 0.016504174, -0.022928936, 0.025958832, 0.037066683, -0.005755766, -0.018913843, 0.06895247, -0.02877977, 0.0041038655, -0.055695858, 0.051616464, -0.020322606, -0.04257666, -0.01633169, -0.020044465, 0.024165744, 0.023094596, -0.030777108, -0.009175987, -0.030786464, 0.01328144, 0.008919318, -0.045834344, -0.01995834, -0.020691577, 0.023285672, -0.005511981, 0.016651247, -0.000948313, 0.0033838064, -0.031367626, -0.011353048, -0.0006544948, 0.026226148, -0.008025127, 0.017944762, -0.04977349, 0.0015036527, 0.0007153527, -0.0052121915, 0.038213715, 0.048797406, -0.037540957, 0.028459389, 0.041219845, 0.033649813, 0.023387326, -0.0020029875, 0.042919282, 0.034432936, 0.05776096, -0.012510672, -0.049652774, 0.08530675, -0.013906551, -0.0429254, -0.039551474, 0.006776084, 0.0026359805, -0.012983652, 0.02504958, -0.025962597, 0.0127135115, 0.014745678, 0.0035247593, 0.011387286, -0.014067034, -0.011019726, 0.051603284, -0.01487463, 0.015962247, -0.07213014, 0.027164105, -0.002130998, -0.004268585, -0.014928281, -0.009878986, -0.046121422, 0.048245832, -0.06285314, 0.017108224, 0.031208703, 0.018165136, -0.009870279, 0.030581329, -0.014634139, -0.012997535, -0.039453585, 0.039912917, -0.003458401, 0.0141190095, -0.04252866, -0.0038862005, -0.014280698, -0.021240328, -0.0138298385, 0.0001826032, 0.022197584, -0.037734855, -0.03095783, 0.008676005, -0.0058734217, 0.041595876, 0.045829635, 0.008901435, 0.017444722, -0.036675002, -0.07602882, -0.00047533304, 0.006406642, 0.01935335, -0.0026352745, -0.028587751, -0.005532571, 0.0652571, 0.05237576, 0.017429192, 0.026082842, 0.02117444, 0.050183874, -0.0014062327, -0.01882207, -0.015528565, -0.02322449, 0.058768105, 0.008570379, -0.039668187, -0.07135173, 0.0104427375, 0.008828017, 0.0039499705, 0.02417892, 0.014275052, 0.00073747215, 0.022207228, -0.032209698, 0.038374435, 0.011816497, -0.0004197991, 0.020680282, -0.04972619, -0.0329627, 0.018859897, -0.012980181, -0.031216731, -0.025986362, -0.026137786, -0.019669846, 0.009752394, -0.04980596, 0.031746365, -0.0019180394, 0.029023759, 0.004141986, -0.014011852, -0.038357966, 0.025492912, 0.004614025, 0.011867324, -0.016653128, -0.004574845, -0.046708766, -0.0012965767, -0.068483725, -0.05026059, -0.020639809, 0.04766508, -0.007852878, 0.053229768, 0.06360239, 0.014298582, -0.0070958748, 0.005676538, -0.029943157, 0.041515633, -0.056183424, 0.04108101, 0.016371222, 0.013012889, -0.06755659, 0.014031266, 0.034415055, -0.0049631563, -0.0029056496, -0.027850868, -0.008498578, 0.011782141, -0.010988665, -0.017335067, 0.015808353, -0.0042667026, -0.006583127, 0.007355249, 0.0067980858, -0.06177447, -0.015041232, -0.01283714, -0.018066892, -0.030976715, -0.057925213, -0.011355283, 0.004214463, -0.053583685, 0.07254806, -0.0067501995, -0.021337746, 0.021193264, -0.0429927, 0.029519593, 8.0006546e-05, -0.018265378, 0.037642613, -0.036676105, 0.0517953, 0.012496082, 0.0050812988, -0.01847563, 0.017812753, 0.0053419666, -0.01098584, 0.049107082, 0.06957746, 0.026459578, -0.0036238262, -0.0020628748, 0.021668596, -0.04180107, -0.055901986, -0.034001373, 0.019253813, 0.0060426127, -0.012313713, 0.03388701, 0.014249402, 0.0105008595, 0.009672321, -0.00873295, 0.024489535, 0.035040986, 0.038954716, -0.0090059135, 0.03512005, -0.031912025, 0.0075234394, -0.006789262, -0.026382394, -0.0066697225, 0.0032303822, 0.017646622, 0.02546185, 0.015867181, 0.036995027, -0.008056659, -0.02254114, -0.01694821, 0.005259725, 0.0194663, -0.06877928, -0.002460437, 0.07947945, 0.01202828, 0.010222955, 0.018541753, 0.0008645414, 0.009009679, -0.03223417, 0.023008473, -0.05444399, -0.017192937, -0.0035165232, -0.015996603, 0.015396672, 0.029956335, -0.008445397, -0.0056446977, 0.045733627, 0.04292681, 0.0082595, 0.021303626, -0.0020688751, 0.07312504, -0.020735344, 0.005806593, 0.01312131, 0.016958212, -0.010244603, 0.028210897, -0.016623478, 0.012272064, 0.042865627, -0.01660677, -0.0130453035, 0.035995416, -0.060883105, -0.012694687, -0.022620205, -0.0057263514, 0.033657346, -0.003177672, 0.03215981, 0.05479231, 0.031710126, 0.002468908, -0.012903645, -0.011069142, -0.024806738, 0.029252278, -0.0108046485, 0.028444681, -0.0093417065, 0.01865188, 0.031242087, 0.013088836, -0.04552655, 0.029431116, 0.010605103, 0.012118639, 0.054932967, -0.0403606, 0.0506545, 0.034749668, -0.019747028, 0.0033859245, -0.011321162, -0.034163974, -0.06815052, 0.04850797, -0.029264044, 0.040624503, 0.07700419, 0.074646115, -0.0074655525, -0.048037816, -0.010340611, -0.014921928, -0.04462483, -0.03416374, -0.035774224, 0.0109688975, -0.0049399342, 0.011340222, -0.00139357, -0.037519306, 0.055666678, 0.0016471937, 0.0073144813, -0.005984961, 0.0005336908, -0.03241489, -0.016545355, -0.01261468, 0.04224675, -0.00095113675, 0.035121467, -0.041264556, -0.004614025, -0.07156162, 0.002691985, 0.0032775626, 0.027888166, -0.027303882, 0.044620592, 0.0047349758, 0.007864644, 0.007802521, 0.04694502, -0.035987888, 0.05022623, -0.02588071, -0.037560254, 0.026719837, 0.035558674, -0.04253054, 0.018074421, 0.022206053, -0.0061016763, 0.020974424, -0.016622538, 0.08916307, 0.0014598842, -0.0046460275, 0.043718405, -0.046964787, 0.0008372451, 0.056034707, -0.044901557, -0.00158713, -0.010045058, -0.013720182, 0.036624175, 0.012337482, 0.00254237, -0.009571607, 0.0015211097, 0.061853535, -0.0131067205, -0.024244336, -0.020400964, 0.026337922, 0.007327071, -0.0464278, -0.041613877, -0.0069335094, -0.027319647, 0.0046408507, 0.026096607, -0.020193888, 0.010240838, -0.064076774, -0.007565443, -0.016361104, 0.014834744, -0.012535498, 0.024340818, -0.0013983499, -0.021874733, -0.038570218, 0.013158725, 0.013049539, 0.025334781, 0.01832644, 0.039980687, 0.028149128, 0.038095355, -0.003960795, 0.0015690697, -0.018064773, 0.04217192, 0.029641015, 0.0090105245, -0.004621055, 0.005045119, 0.0010549099, -0.010005054, 0.009364061, 0.01843645, 0.0053194943, 0.05652792, 0.0289379, -0.06578233, 0.047186684, -0.008881984], [-0.049032204, -0.052222688, -0.03915785, -0.07435498, 0.005829609, 0.034094647, -0.025023935, -0.039076626, 0.0006500358, 0.008922225, 0.03509402, 0.033906363, -0.050691158, -0.016779907, -0.018473772, 0.043488394, 0.006623651, -0.07020108, 0.052005656, 0.058746666, -0.023968704, 0.020522794, -0.024873588, 0.04246249, 0.0063820113, 0.04807984, -0.0018935521, 0.034143988, 0.0042753876, 0.0155617595, 0.009916014, -0.046945944, 0.017464621, 0.009691189, 0.016168972, -0.014980847, 0.025946505, -0.01377899, -0.037511174, -0.056085546, -0.05963107, 0.02187174, -0.023072664, 0.016124519, -0.01953133, 0.052107655, 0.0218089, 0.04373603, -0.04475821, -0.008215401, 0.049293797, -0.0040375297, -0.026440376, 0.029690787, -0.0035781062, 0.043868225, 0.045348436, 0.030993216, 0.025445655, -0.016312106, -0.010474351, 0.015245004, -0.07548887, -0.025343252, 0.028382804, 0.033188365, 0.0030134849, -0.037020154, 0.02399151, -0.05528912, -0.019748708, 0.013105856, 0.0031329957, -0.0035473849, 0.0248623, 0.026060548, -0.06858495, 0.024443489, -0.0008448371, -0.02945386, -0.031366616, 0.0024383324, -0.006814554, -0.036869574, -0.05181993, 0.01973009, -0.0095157055, 0.013512972, 0.064479455, -0.030877749, -0.02217104, 0.022352312, 0.033084102, 0.037236135, -0.022518285, -0.024027122, 0.021486325, 0.057838056, 0.045683578, 0.027267057, 0.01558643, -0.028614433, -0.05201217, -0.014690391, 0.04261982, -0.028427722, 0.015874559, -0.028192889, -0.020051265, -0.0044322526, -0.015000396, 0.011635944, 0.031126777, -0.07484326, -0.0017203955, 0.030697143, 0.05884907, -0.038291834, -0.033722237, -0.009526411, -0.0027630595, 0.019264134, -0.03444934, 0.041336507, -0.014581469, 0.0044238744, -0.0029995209, -0.030647224, -0.06394509, -0.015348049, 0.018163765, -0.0025947904, 0.046868674, -0.040722076, -0.00960368, 0.030481163, -0.017820595, 0.034792393, -0.03140094, 0.054177564, -0.036120858, -0.004693268, -0.00021086016, -0.00481627, 0.05055431, -0.018308062, -0.020580975, -0.012287608, 0.005002925, -0.017207215, 0.011271011, 0.02448864, -0.023850007, 0.00971167, 0.009513843, -0.058427352, 0.02586179, 0.004857697, -0.023659395, 0.042963345, -0.02451005, 0.0052115745, 0.028327877, 0.009864812, -0.0021430468, -0.030302422, -0.010050406, 0.026405698, -0.020033577, -0.0043196077, 0.06906904, 0.002391145, 0.020596337, 0.059020367, -0.026801119, -0.047269918, -0.0029278377, -0.032145936, 0.050896894, 0.05487275, -0.03573242, 0.012651611, -0.002346925, -0.00076710276, -0.00863363, 0.015662303, 0.006201989, -0.05496515, 0.018458877, -0.009453448, 0.018891767, -0.040314324, 0.00059068773, 0.013827517, -0.005783061, 0.06479225, -0.021482602, 0.017671874, 0.009954648, 0.053744208, 0.012062551, 0.012282721, 0.015936002, -0.021665532, -0.030324765, -0.022375848, 0.00515979, -0.0025549922, 0.014635931, -0.051990066, -0.023904935, 0.053596653, 0.037626203, 0.034108143, 0.022050481, 0.03089916, 0.011752313, -0.04471911, 0.040432554, 0.06280002, -0.04576178, -0.017105276, 0.03461883, -0.060022067, -0.055385936, 0.002952275, -0.032344926, 0.0006544578, -0.011366899, 0.008965397, 0.06361739, -0.0037942904, -0.0060420977, -0.045758054, -0.005269177, -0.030204963, -0.012028572, 0.048894245, -0.028744012, 0.012046493, -0.023625648, 0.035802476, 0.02511005, 0.005923053, 0.01794406, -0.0072846836, -0.045825083, 0.014781623, -0.04923841, 0.016198995, 0.056366228, -0.013969719, -0.030813048, -0.014651291, -0.010845369, -0.0057960944, 0.009119237, 0.018637618, 0.030671602, -0.015730146, 0.012676281, -0.044075362, -0.005091365, -0.027305935, 0.05017867, 0.0069299918, 0.03366062, -0.013617936, -0.013779689, -0.049128093, -0.031265024, -0.044848517, 0.02187174, 0.021537993, -0.022321388, 0.058862105, 0.04731274, 0.02072062, 0.026973344, -0.0003276944, -0.016252235, -0.00243938, 0.015942765, -0.007204389, 0.029500408, -0.016198296, -0.0006842482, -0.06787091, -0.009624161, -0.04303409, -0.016723586, 0.010340992, 0.0067442674, 0.019365156, 0.03166673, -0.031816147, 0.06735237, 0.034690455, -0.022089116, -0.046392728, 0.021072984, -0.01564601, 0.014376384, 0.013939114, -0.010866978, -0.014377592, -0.033414587, 0.036325667, 0.012945499, 0.025677694, -0.03163368, -0.014500012, -0.054008134, 0.007842323, 0.016026536, -0.03144842, 0.037080903, 0.055677325, -0.033725522, -0.009537582, -0.028704913, -0.012644861, 0.028813833, -0.024111489, 0.01756051, 0.044261087, 0.05578625, -0.00680763, -0.045259062, 0.014239811, 0.034993943, 0.019525047, -0.024350045, 0.021450948, 0.03596539, 0.008412064, -0.0064105215, -0.0041106096, 0.043504223, 0.05069581, 0.015630417, -0.040028058, -0.03365384, -0.03236756, 0.013201569, -0.03648579, 0.0035245768, -0.06681428, 0.011460342, -0.019302549, 0.027580325, -0.010065431, 0.016230183, -0.019869847, -0.026359385, -0.0012551532, -0.0069242893, -0.047070693, -0.03731992, -0.035466634, -0.023619596, -0.0043719155, -0.07454675, 0.029733611, 0.034396086, -0.027128581, 0.04668388, -0.008203532, -0.01095542, 0.005114174, 0.069862746, 0.016395425, 0.0067298375, 0.01722816, 0.030890781, 0.05152063, -0.0031996751, -0.03692427, -0.005126276, 0.014752648, 0.016520638, -0.02349904, 0.033186503, 0.010063046, 0.025731456, 0.031492177, 0.037441876, 0.03422261, -0.016992165, 0.029794123, 0.0004035668, 0.004098042, 0.025014278, 0.051153842, 0.042354498, -0.013542064, 0.056771193, 0.013354477, 0.024503535, 0.024104157, 0.008125913, 0.025444726, -0.037080668, -0.03369281, -0.032321304, -0.026245806, -0.03924885, -0.01721533, 0.022869717, 0.027079472, 0.030334074, 0.016649108, -0.029708475, 0.01599372, 0.01030003, -0.035968184, -0.041525953, 0.0037275238, -0.010208711, -0.015573862, -0.026897121, 0.032448728, -0.07909165, 0.021815883, 0.0030106923, -0.022512233, 0.000285918, -0.030566812, -0.065563545, 0.030480698, 0.026097322, 0.02279338, 0.027511433, 0.10475422, 0.056143265, 0.004224942, 0.03480077, -0.010937092, -0.03988376, -0.026871871, -0.026127577, -0.013350521, 0.007871182, 0.009380718, -0.03233748, 0.017856784, -0.002045297, 0.027479315, 0.023747602, -0.020244438, 0.010945179, -0.033912178, -0.022673754, -0.06511251, -0.023191826, 0.044838276, 0.04570499, -0.05512341, 0.011993429, -0.040525183, -0.03802372, -0.012246182, 0.023069872, -0.014434379, -0.021215187, -0.0029520423, 0.042308882, -0.015720021, -0.06547208, 0.021666931, 0.019331176, -0.034361828, -0.019194325, -0.037425585, -0.0030805133, 0.011654097, 0.057832472, 0.006549931, -0.025381304, 0.007811543, 0.0295167, 0.019985633, 0.021426221, 0.027599365, 0.033568192, 0.008435803, -0.023753189, -0.0029287688, -0.02232325, -0.0012158207, 0.022374917, 0.019186879, -0.006100515, 0.04433463, -0.03771092, -0.033050586, 0.017930098, 0.0516043, -0.038823873, 0.006009544, 0.035647936, 0.013661225, -0.024180261, 0.027906157, 0.016934505, -0.07175762, 0.051660273, 0.055510685, -0.033732507, -0.011042463, -0.025567612, -0.010976831, 0.0008948757, -0.021702422, 0.029207624, 0.048466187, -0.014526078, -0.026109423, 0.0070505496, -0.026787154, -0.026721524, 0.023152728, -0.015098612, 0.010111048, 0.0024809816, -0.046346415, 0.017427383, -0.0002532184, 0.0026405232, -0.01535695, -0.01353322, -0.0072060185, -0.022054438, 0.010253483, -0.005474684, 0.016019788, 0.027445337, 0.008568464, 0.024210285, 0.015548727, -0.020785088, 0.020925377, -0.023162967, -0.004258165, -0.017266445, 0.0064533455, 0.007509508, 0.00066376734, 0.0059618037, -0.010137114, -0.0085673, -0.012953703, -0.06633949, -0.04156878, 0.08789657, -0.004974066, -0.026106631, 0.07031279, 0.014507924, -0.009521291, 0.0028245023, 0.016844608, 0.005226121, 0.018394176, 0.012041023, 0.014582401, 0.018740954, -0.06788394, -0.03521411, 0.029653551, -0.025457291, -0.047619022, -0.045141764, -0.012186135, 0.009962794, -0.012905527, -0.00066440733, -0.017940337, 0.0034966483, -0.020493934, -0.012374653, -0.018396096, 0.025088869, -0.02975991, 0.0002122566, 0.010869539, 0.015815211, -0.01876609, 0.04961684, 0.003284857, 0.008814234, -0.018896421, 0.06493935, 0.008909657, -0.06740078, -0.023014879, -0.027462093, 0.042946585, 0.02393193, -0.03803303, -0.03057775, -0.060042784, -0.005592449, 0.0032341203, 0.017510705, -0.006917889, 0.015506369, 0.031608544, -0.011169072, 0.03617113, 0.022950476, 0.0047180546, -0.0061445315, -0.03769789, -0.004303782, 0.016198529, -0.02515194, 0.011351772, -0.044938818, -0.0070407744, 0.008837042, -0.0051651434, 0.041038137, 0.037170973, -0.044163335, 0.002622486, -0.017856551, 0.07619546, -0.0042730602, 0.01372453, 0.06717363, -0.010923302, 0.07172039, -0.016843794, -0.06473919, 0.073403545, -0.005276159, -0.03895746, 0.005729532, 0.028878532, -0.028573647, 0.041549228, 0.011528419, 0.02146724, 0.0029418892, 0.025732854, -0.019320935, 0.016617341, -0.026295148, -0.015150745, 0.046131827, -0.016446512, 0.03147728, -0.037197035, 0.002752819, 0.008968772, -0.009935563, 0.007180882, -0.02234978, -0.024422541, 0.008268931, -0.03904218, 0.037440013, 0.02791919, 0.016463384, 0.011136955, 0.04619653, -0.029546492, -0.011523299, -0.048971694, 0.062160693, 0.004190613, 0.031743184, -0.041859236, -0.022664124, -0.010879082, -0.053103715, -0.033560745, 0.026678698, 0.05411775, -0.016049577, -0.006563663, -0.007991275, -0.021362508, 0.025089568, 0.02313783, -0.0073628835, 0.021151183, -0.055179264, -0.044949986, -0.008803994, 0.02598328, 0.025824552, -0.005492139, -0.031121658, -0.028884584, 0.03407847, 0.05576018, 0.036026835, 0.020393157, 0.059017867, 0.039427128, 0.018974623, -0.0030255874, -0.012887141, -0.030094821, 0.043303605, -0.016150469, -0.029214142, -0.06818092, -0.011300318, 0.004875734, -0.009214543, 0.024984835, 0.036197197, 0.027639672, 0.028582957, -0.07110968, 0.021005955, 0.042631373, -0.027995527, 0.033179056, -0.058184374, -0.01403826, 0.042779945, -0.052495338, -0.049310558, -0.019800374, -0.024004545, -0.05236035, -0.014366419, -0.019960498, 0.018654376, 0.013053316, 0.018497627, 0.0047587836, -0.04894516, -0.031885967, -0.015221031, 0.030335238, -0.007869786, -0.039770182, 0.0038783376, -0.0035590217, 0.0041902056, -0.038104743, -0.028545253, -0.05351659, -0.011896145, -0.022939073, -0.0010538354, 0.07431773, 0.035219233, 0.022399588, -0.0003332801, -0.033832584, 0.028487999, -0.039628677, 0.042868387, -0.008648525, 0.009654358, -0.046320345, -0.0073684687, 0.011905454, -0.00083133834, -0.010864652, -0.043204457, -0.00043289174, 0.039909825, -0.008884987, 0.010853015, 0.024878241, -0.028323224, -0.032395195, 0.025875755, 0.007845115, -0.065757185, -0.021571508, 0.010066828, -0.014302184, -0.04924702, -0.039211612, 0.045772947, -0.04364014, -0.034383707, 0.040523324, -0.007606327, -0.0033493834, 0.023145279, -0.038624182, 0.028984196, 0.027936878, -0.047249436, 0.012431907, -0.03606407, 0.044858757, -0.013521584, 0.04120012, -0.006539458, 0.0074139694, -0.0016068197, 0.00058859313, 0.0075332476, 0.028049523, 0.008253803, 0.0019447545, 0.046008013, 0.032984488, -0.01600303, -0.052021485, -0.045417793, -0.02843866, -0.009180098, -0.030794429, 0.020380357, 0.025533399, -0.013375482, 0.018268963, 0.012776357, -0.007288873, 0.031101177, 0.011619186, -0.026250113, -0.00788468, -0.023152668, 0.02090547, 0.02008804, -0.012882486, -0.02394543, 0.0064831357, 0.025366524, 0.034072768, 0.0055289115, 0.026891422, 0.0051984247, -0.008948292, 0.005724411, -0.0053953207, 0.018883824, -0.063959986, 0.0023748532, 0.075213306, 0.0009155893, 0.0149329025, 0.010348905, 0.01020228, 0.013215708, -0.011188622, 0.0067873234, -0.0762839, -0.026131766, -0.018819153, -0.007391743, 0.046933845, 0.033624053, 0.0010449913, 0.0025272963, 0.07148206, 0.0379269, 0.00799593, 0.03079955, -0.03465182, 0.050010633, -0.035584632, -0.023653578, 0.033418313, -0.013776198, 0.017332427, 0.03175936, -0.021972282, 0.029328648, -0.008264043, -0.031197762, -0.0071773916, 0.02729266, -0.018010624, -0.010218921, 0.00739535, 0.042879555, 0.01928044, 0.017338945, 0.020789975, 0.022390278, -0.005332868, -0.01629209, -0.028010424, -0.013101259, -0.026602827, 0.002324582, -0.020866545, -0.018520318, -0.0032496555, -0.00034631338, 0.07284009, -0.008164199, -0.05044259, 0.045005847, 0.0050708847, 0.04800537, 0.052472066, -0.04069089, 0.042510897, 0.018024703, -0.041431926, -0.021612003, -0.0020532103, -0.034165863, -0.05658919, -0.018905733, -0.017217223, 0.048769444, 0.053801462, 0.061094522, 0.022856217, -0.06949728, -0.025941618, -0.0062527256, -0.066045314, -0.047639504, -0.048226003, 0.016422888, 0.01317015, 0.00786839, -0.003924885, -0.025793832, 0.02426428, 0.011329428, -0.011372951, 0.003610224, -0.017618228, -0.019676559, 0.021219144, -0.04169539, 0.04873197, 0.008943404, 0.044748902, 0.012062493, -0.011320236, -0.04613788, 0.029971935, 0.0295167, 0.010413607, 0.007786931, 0.03251174, -0.00081830507, 0.0064161075, 0.020865848, 0.02224598, -0.06592801, 0.029471083, -0.015216377, -0.027344376, -0.03409674, 0.031074993, -0.022584844, 0.060400035, 0.03679651, -0.02602843, 0.041502215, 0.021335047, 0.0708777, 0.03748121, 0.016896917, 0.026463067, 0.012733533, 0.005227284, 0.029631905, -0.02348135, -0.009434713, -0.0056666927, -0.021329926, 0.014659668, 0.0069351117, -0.008471179, -0.0067102876, -0.013711729, 0.07166453, -0.033665247, -0.08462265, -0.08158519, 0.056713473, -0.018429086, -0.014796519, -0.02808676, -0.006490583, -0.023761334, -0.026295613, 0.031915758, -0.01555245, -0.040487014, -0.06168102, 0.024788406, -0.016614897, 0.035871364, -0.02409764, 0.012209176, 0.005966924, -0.017066175, -0.052951213, 0.037499886, -0.010116749, 0.0409078, 0.019357244, 0.022451721, 0.025697943, 0.035490606, -0.014805363, 0.017042669, -0.022384692, 0.022029767, 0.030924063, 0.0063174265, -0.030591017, -0.019821787, 0.0016145001, -0.010250341, 0.03205447, 0.010996381, 0.009898354, 0.046957117, 0.036101542, -0.046915226, 0.03315299, 0.009866615], [-0.01741441, -0.09539766, -0.028508762, -0.0017792612, -0.011010347, 0.042617895, 0.025392383, -0.013860294, 0.0215941, -0.0011460134, -0.008913393, 0.030110203, -0.057295196, -0.019793212, -0.00698101, 0.04013697, 0.0025268497, -0.05048146, 0.039470546, 0.0520554, -0.010423522, -0.01848947, -0.026101526, 0.026514836, 0.00886213, 0.022326736, 0.021304674, 0.026548477, 0.02666542, 0.006526249, 0.0020686847, -0.07129646, 0.0018171746, 0.017556319, 0.04134379, -0.015750626, 0.017836398, -0.022111654, -0.035725128, -0.049291994, -0.07727077, 0.040437073, -0.0333494, 0.038650334, -0.0013424557, 0.038067218, 0.016881753, 0.022398826, -0.005929447, -0.012298367, 0.031098086, -0.0018225145, -0.032031506, 0.017768048, -0.0021039282, 0.016773352, 0.03278083, 0.0464338, -0.002243834, -0.014947235, 0.021255549, -0.015596302, -0.072272606, -0.03872296, 0.0038180423, -0.0031377366, 0.028877214, -0.0032707003, -0.03286934, -0.06346814, -0.015103428, 0.018258251, 0.009898934, -0.010395255, 0.03925695, 0.02358135, -0.04692721, 0.025812637, -0.032396223, -0.0126257045, 0.016635183, 0.021981245, -0.015453726, -0.08689117, -0.01815439, -0.0016126557, -0.0016123886, 0.008358042, 0.039982647, 0.009598104, -0.030986482, 0.010923339, 0.03428869, -0.006545423, 0.014840703, 0.005063401, -0.003093949, 0.045645628, 0.026227549, 0.01366165, 0.036897775, -0.014969929, -0.03881694, -0.023944197, 0.0024627708, -0.03948977, 0.010013684, -0.030239964, -0.025894603, -0.02484344, -0.01617782, 0.011308881, 0.014080834, -0.048220806, 0.005501986, 0.0109948935, 0.022416981, -0.015270033, -0.033639353, 0.0024029636, -0.014111271, 0.024978539, 0.01689764, 0.04238187, -0.0057767243, -0.031864367, 0.005936922, -0.003369489, -0.052279945, 0.009622468, 0.026777292, 0.00862397, 0.03989267, -0.0126257045, -0.02257718, 0.039208088, 0.025717052, 0.06434389, -0.028544005, 0.041185997, -0.031784266, -0.031909224, 0.033042353, 0.005682742, 0.04285552, -0.017974168, 0.043550245, -0.026831893, -0.0077714515, -0.01500624, -0.0071982113, 0.010731102, -0.027942728, 0.008360177, 0.0069408272, -0.09615993, 0.0012438006, 0.027139474, -0.034927346, 0.006814805, -0.020313052, -0.00032026166, 0.008211194, 0.025279712, -0.011162568, -0.038933784, 0.01236672, 0.00043934185, -0.0052291155, 0.025718119, 0.068128824, 0.023755964, -0.02047592, 0.011354404, -0.03566819, -0.006555168, 0.024327604, 0.004238294, -0.0093280375, 0.011376164, 0.01731749, -0.0024809265, -0.011223376, -0.0029275522, -0.011549178, 0.018890498, -0.035890665, -0.057690352, 0.011642091, 0.012516237, 0.047522075, -0.014398558, -0.008588726, -0.013458198, -0.020963455, 0.00087040686, -0.0022021825, 0.013052899, 0.04224944, 0.035092346, 0.015876649, -0.013119647, 0.036429998, -0.044743184, -0.02852051, -0.038990486, 0.038814805, 0.020644128, 0.057884723, -0.049451925, 0.0066914526, 0.03792731, 0.034901712, 0.07323165, 0.0144968135, 0.0100907115, 0.029152505, -0.03889577, 0.055600308, 0.065531485, -0.0052769086, 0.018764475, 0.02407663, -0.05088302, -0.030143846, 0.005365551, -0.0042751394, 0.016390348, 0.022457564, -0.016227346, 0.07268271, -0.013429897, -0.00676995, -0.041044753, -0.017891932, -0.025699964, -0.029938657, 0.025907686, -0.06641578, 0.022286152, 0.00410533, 0.0452163, 0.041120317, -0.024112672, -0.02567273, -0.020062344, -0.057884723, 0.008567634, -0.015797082, -0.011194473, 0.08093876, -0.029341253, -0.0004923406, 0.020125087, 0.009948803, 0.015112105, 0.031342655, 0.019110637, 0.0030966194, 0.03562794, -0.0064260587, -0.06518012, -0.0051284586, -0.05577973, 0.07257591, 0.011896807, 0.025343258, -0.043167908, 0.0031329973, -0.055605646, -0.03327604, -0.04806141, 0.026084436, 0.011503253, -0.01992938, 0.028997097, -0.0054120086, 0.05139138, 0.059909623, 0.01835437, -0.020690052, -0.0010869405, -0.0016964923, -0.0046784366, 0.026005408, -0.016878417, 0.012809399, -0.049738146, 0.0032520108, -0.06700531, 0.017956013, 0.022846844, 0.00536475, 0.04103621, 0.047458, -0.025879651, 0.028572839, -0.014018356, -0.03312512, -0.032083303, 0.049430564, -0.03192097, 0.012189968, 0.012929012, 0.0028963722, -0.0270798, -0.058389883, 0.030930948, 0.005339919, 0.017100157, -0.0372171, -0.02615706, -0.04466949, 0.0035964358, 0.016378067, -0.016977739, 0.025994977, 0.071222246, -0.020886427, -0.02561666, -0.03447879, -0.024631713, 0.0059908554, -0.062953375, 0.02536355, 0.053324435, 0.034486935, 0.01860628, -0.051421285, -0.040562026, 0.05376391, 0.007286587, 0.023123987, 0.0016201984, 0.013206154, 0.022041583, -0.01508634, -0.01411661, -0.0015280179, -0.0014973134, 0.017574742, -0.056562558, 0.0021286253, -0.01910623, 0.022697862, -0.052407037, -0.010139438, -0.044437736, 0.020884424, 0.02404886, 0.06087615, 0.002846177, -0.0005879251, -0.008863732, -0.013238728, 0.01261943, 0.009667924, 0.01629957, 0.0052373926, -0.01054614, -0.025847344, -0.02085452, -0.03611174, 0.03143998, 0.0061067315, -0.038730435, 0.04877696, 8.7841676e-05, 0.048996963, -0.034314588, 0.06439515, -0.0032124955, 0.01673851, 0.020177115, 0.016761472, 0.040955044, -0.05867076, 0.0029532423, 0.03038414, 0.01174889, 0.02066976, -0.008155659, 0.05112866, 0.02900217, 0.0039312486, 0.044710077, 0.011257485, 0.029844807, -0.024070753, 0.050039314, 0.020270335, 0.022108335, 0.024285419, 0.004038047, -0.011308414, 0.0017392117, 0.050569035, 0.012969295, 0.020887628, 0.013899542, 0.0014043987, 0.00635664, 0.0020032707, -0.042237695, -0.022211928, -0.02521144, -0.020152856, -0.01657511, 0.037214432, 0.026403766, 0.060263123, -0.035961155, 0.010971665, 0.023381371, 0.013450189, -0.007594433, -0.04281334, 0.021649102, 0.0091462135, 0.011687748, 0.0042807464, 0.039036945, -0.042651005, 0.011898408, 0.029253947, -0.009966426, -0.0034175483, -0.0131773185, -0.032396223, 0.016784433, 0.00540827, 0.030235423, 0.02529306, 0.07868905, 0.03730788, -0.019298468, 0.015050028, 0.007879585, -0.06087935, -0.002167473, -0.03383907, -0.022906119, -0.0006204986, 0.01574859, -0.017680474, 0.017036477, -0.045285184, 0.031899877, 0.01951648, -0.037108168, 0.02574642, -0.024114542, -0.009483964, -0.0028074626, -0.04552922, 0.075822316, 0.058410175, -0.03242966, -0.016439475, -0.052395288, -0.059713114, -0.0024189835, 0.0070151184, -0.013033675, -0.005977506, -0.006983947, 0.056573242, -0.06772727, 0.024096586, 0.024268866, 0.000328939, -0.039789874, -0.0027022662, -0.045840006, -0.03712632, -0.008522511, 0.046205256, 0.03477142, 0.0070257317, 0.026123952, 0.0341365, 0.01063011, 0.034888946, -0.018729232, 0.018268663, 0.01895885, 0.015736476, 0.022535795, -0.00790308, 0.0120423185, 0.018533258, -0.024291292, 0.00330274, 0.066824816, -0.03787498, -0.027327571, 0.017732803, 0.043898944, -0.051993724, -0.009218303, 0.08179902, 0.02925635, -0.041716516, 0.025003638, -0.026418984, -0.08571211, 0.02536248, 0.038400427, -0.035453327, -0.007657177, -0.03767206, -0.003554584, 0.00014631379, -0.03277322, 0.06264793, 0.035870373, -0.015940726, -0.073152624, 0.0057628406, -0.01151607, 0.02311117, -0.025540834, 0.0119793, 0.051628474, 0.009827588, -0.02378934, 0.024722226, -0.044150453, 0.05852338, -0.0078080297, -0.043883458, -0.041935455, -0.011854621, 0.023241464, 0.0017899409, 0.019042686, 0.026592799, 0.034779962, 0.02056937, 0.0024562294, -0.04604399, 0.0021554586, 0.008760671, -0.0055643963, -0.03648233, -0.017666055, -0.026161866, 0.009426026, 0.008280479, -0.009821179, 0.0032362582, -0.008706205, -0.076578714, -0.052352834, 0.040064346, -0.022708539, 0.010793446, 0.046549145, 0.05198945, 0.032859728, -0.020619564, 0.00532123, 0.029014986, 0.024982277, -0.023867836, 0.022319928, -0.020496747, -0.06537343, -0.0681363, 0.04860154, -0.01840233, -0.030183358, -0.047013585, -0.012884424, 0.025064077, -0.01562674, -0.006420051, -0.033886194, -0.023816308, 0.0075442377, 0.028414778, -0.01855143, -0.006344892, -0.032318793, 0.044132296, 0.038406804, -0.034899577, 0.007884391, 0.028792845, -0.0040700864, 0.025457531, -0.017410273, 0.062665015, 0.019510997, -0.053481426, -0.030393219, -0.035354536, 0.021325503, -0.00172159, -0.01571218, -0.010245703, -0.038643926, -0.005766045, 0.012617695, 0.0017796616, -0.019482963, 0.005668858, 0.075168975, 0.00082982343, 0.020614224, 0.029961219, 0.015768781, -0.039527684, -0.01812542, -0.027700296, 0.013958015, -0.03784721, 0.010788239, -0.048909385, -0.0034447818, 0.018779429, -0.012028703, -0.005215232, 0.020300237, -0.026773822, 0.039142575, 0.019289657, 0.059136935, 0.04603785, -0.00370537, 0.035081133, 0.019125221, 0.07200934, -0.0021605315, -0.069370896, 0.08989006, -0.009916765, -0.013746421, -0.05390328, -0.020776557, -0.0088527845, 0.027671462, 0.010443814, -0.019150019, 0.01773334, 0.015857425, -0.0028975736, -0.00821066, -0.015810166, 0.015219837, 0.061447516, -0.009805694, 0.0008156727, -0.05531302, 0.03431432, -0.0154515905, -0.018434469, -0.018982878, -0.0066407234, -0.018499617, 0.022671161, -0.028331477, 0.061020326, 0.025959484, 0.04465347, -0.009222041, 0.0022107265, -0.023998665, -0.019032873, -0.0012116276, 0.045347665, -0.006559557, 0.0062202048, -0.01816427, -0.03715142, -0.017694356, -0.03965958, -0.017129393, -0.009209759, 0.0051904013, -0.04727751, -0.06198151, 0.013924373, 0.0028850583, 0.03528218, 0.027282717, 0.011911607, 0.027637286, -0.042905185, -0.063458, -0.017673263, 0.025001502, -0.0057788603, -0.019828187, -4.2719355e-05, -0.015872909, 0.06947021, 0.042102057, 0.0365934, 0.032366853, 0.028446283, 0.047856625, -4.378734e-05, -0.0038655675, 0.0050686514, -0.021827454, 0.0057073054, -0.01465968, -0.029832527, -0.072909124, 0.0041162767, 0.016205586, -0.022893302, 0.031883053, 0.039338116, -0.014214865, 0.06976925, -0.021265695, 0.013076395, 0.025530152, 0.009049027, 0.019622868, -0.063412614, -0.038084306, -0.00304055, -0.012372592, -0.05532156, -0.034648065, -0.028597336, 0.0012046858, -0.026216868, -0.03999279, -0.00063117844, -0.0008618629, 0.016963856, -0.017200947, -0.02789467, -0.033045024, 0.02761486, 0.034938022, 0.040910255, -0.014350432, 0.034443546, 0.008879217, 0.011956613, -0.030982213, -0.03990842, -0.011304075, 0.03250409, 0.019132799, 0.0133626135, 0.08723933, 0.03350793, -0.033054102, -0.0113740275, -0.025170242, 0.032057673, -0.046443682, 0.013867771, 0.004955445, 0.023314355, -0.055225443, -0.0016003739, 0.011890932, -0.0065563526, 0.0091900015, -0.03245603, -0.017814506, -0.0005500117, -0.0061602225, -0.0012153656, 0.008342022, 0.017894069, -0.0049896203, -0.016408103, 0.00590525, -0.054381434, -0.024791643, -0.005576478, -0.043814037, -0.038026635, -0.009153105, 0.015778393, -0.0053997263, -0.035972368, 0.052049264, -0.039641425, -0.00079404603, -0.009322431, -0.048040047, -0.0022614556, 0.0012320529, -0.042189635, 0.031684943, -0.05245403, 0.04927891, 0.037853617, 0.013563929, -0.050842438, -0.014414578, -0.00370003, -0.010323932, 0.038962185, 0.038043723, 0.02150225, -0.027536895, -0.019434903, -0.028016835, -0.023269232, -0.07069626, -0.030031705, -0.005619731, 0.003900277, -0.010249441, -0.00410533, 0.028264726, 0.014962987, 0.009633748, 0.018892635, -0.018433401, -0.008941695, 0.022554751, -0.03784294, 0.014532057, -0.034776226, 0.02353142, 0.021779396, -0.01659006, -0.009891132, 0.016131362, 0.049964555, 0.026908655, 0.019196475, 0.019382838, -0.004293829, -0.01754911, -0.030022096, 0.005617061, 0.012397157, -0.08532337, -0.0076592467, 0.046925075, 0.0036055134, -0.0006044789, -0.0063902815, -0.031781062, 0.012248707, -0.03633655, -0.025204953, -0.05222227, -0.03145853, -0.0031959417, 0.0029177319, 0.01841204, 0.000661616, 0.015427027, -0.000858659, 0.05410406, 0.05677028, 0.01294228, 0.030003939, 0.019427694, 0.056248773, -0.045822915, -0.019162301, 0.039453458, 0.029843207, 0.0054648733, 0.026922803, -0.017219638, -0.0157571, 0.018099122, -0.029122317, 0.0074182157, 0.014552882, -0.068538934, 0.009334712, -0.038708273, 0.018085772, 0.02716684, -0.0075212764, 0.012343758, 0.012855543, -0.010720422, -0.0454598, -0.0068613957, -0.030518707, -0.0040092114, 0.039068453, -0.015277776, 0.035811637, -0.028051663, 0.02434576, 0.021621201, -0.008231753, -0.052703403, 0.030806528, -0.017209493, 0.036432132, 0.036753595, -0.037903115, 0.07117899, 0.022178821, -0.0024269933, 0.00609178, 0.00064185826, -0.015234122, -0.07148123, 0.024841838, -0.015073524, 0.018273737, 0.06352314, 0.024842372, 0.01233548, -0.096333206, -0.016644794, -0.014210593, -0.030851917, -0.015330908, -0.034619763, -0.012001469, 0.01321363, 0.02173, -0.0015325567, -0.028825952, 0.07940674, -0.008537463, -0.00145139, -0.003690952, -0.030113941, -0.032060273, -0.01028682, -0.015733538, 0.081070654, 0.004320529, 0.04953523, 0.0029006442, 0.015030804, -0.088954516, 0.021954544, 0.0025450054, 0.03140086, -0.022148918, 0.03602523, -0.002252912, 0.001074592, 0.012156325, 0.03244695, -0.038270134, 0.03130127, -0.0106611485, -0.019867703, 0.0004827287, 0.055214766, -0.068377934, 0.051557988, 0.018441144, -0.0007868037, 0.03903481, -0.05201722, 0.07994072, 0.01008337, 0.0024755865, 0.0253251, -0.027480826, 0.0074716154, 0.021785334, -0.033949636, 0.0072315857, 0.026509494, -0.028436806, -0.020303976, -0.0038906652, 0.013008043, -0.006770217, -0.011440244, 0.04427861, -0.025009379, -0.041604646, -0.041303206, 0.04548757, -0.010323132, -0.014818276, -0.043202084, 0.001687014, -0.044912994, 0.014691186, 0.027446117, 0.0009844141, 0.013129793, -0.040516105, 0.017177451, -0.014608951, 0.023862496, 0.016008545, 0.054132897, 0.020148583, -0.028512767, -0.036166206, 0.01231599, 0.0017675132, 0.016078496, 0.04190021, 0.013989921, 0.008378066, 0.0017942128, -0.009204953, 0.004620098, -0.036285687, 0.021979107, 0.04846511, 0.0073279715, 0.005964022, 0.0057243933, 0.014909054, 0.007951673, 0.02274325, 0.005706505, -0.014120882, 0.037394386, 0.03031005, -0.0412968, 0.008412509, 0.030388413], [-0.020643618, -0.06667794, -0.035270628, -0.018603075, 0.0011831159, 0.0066239983, 0.05131073, -0.0511009, 0.011390541, 0.014773781, -0.02280622, 0.035624474, -0.03878106, 0.0024643613, -0.01828234, 0.03868148, -0.014538426, -0.046885706, 0.015446489, 0.04679096, -0.007765542, -0.002597054, -0.036709946, 0.03857707, -0.0039938316, 0.019882146, 0.006309163, 0.031268094, 0.040760092, -0.016474435, 0.017618878, -0.054636505, -0.027201755, -0.0025146345, 0.013052221, 0.012218601, 0.042154696, -0.017786376, -0.034849346, -0.05316214, -0.09071634, 0.023933986, -0.013999197, 0.047413338, 0.0058829496, 0.041257024, 0.058585867, 0.0556178, -0.01773006, -0.015933422, 0.047454182, -0.014721634, -0.011964575, 0.01950345, -0.025780322, 0.022700535, 0.031683818, 0.04422702, -0.0026566025, -0.0041726884, 0.032440696, 0.00034055367, -0.045438413, -0.03601989, 0.012345493, -0.028461006, 0.02944375, -0.009776959, 0.01868912, -0.057087332, -0.010415769, 0.025302727, 0.03809947, -0.00021293668, 0.031053618, 0.008782852, -0.04022932, 0.0110236425, 0.0010808771, 0.007873581, 0.044146292, 0.012141016, -0.042724617, -0.07296985, -0.045233935, 0.021457057, -0.029688109, 0.0258057, 0.02665068, 0.021181038, -0.009409699, 0.012348394, 0.04637717, 0.029435052, 0.011732907, 0.02527055, -0.012077207, 0.048820503, 0.008084585, -0.009344319, 0.01849963, -0.013895267, -0.029767627, -0.00045150856, 0.0017537667, -0.027146162, 0.014546403, -0.061775323, 0.0031210573, -0.001209461, 0.007885183, -0.0046792896, 0.03308869, -0.078343295, 0.018069405, 0.005808929, 0.042463586, -0.029883161, -0.03135148, -0.0044714287, -0.052361637, -0.0048291427, 0.008448824, 0.026445236, -0.053394172, -0.025641346, -0.008393717, -0.01171756, -0.02382643, 0.03722452, 0.023342306, -0.0052613, 0.018797401, -0.0020728093, -0.058116, 0.055353865, 0.011737499, 0.02638771, -0.00846526, 0.04455307, -0.037774626, -0.038903844, 0.005065041, -0.012796745, 0.05935978, -0.028725425, 0.016296182, -0.03788291, -0.040392708, -0.018108077, -0.012090259, -0.026015496, 0.002705939, 0.017601477, -0.0015224611, -0.062898256, -0.0040644077, 0.027817601, -0.03814201, 0.01995659, -0.029924128, 0.0006568165, 0.030770678, 0.012863211, -0.016124332, -0.040832117, 0.010965634, 0.023086106, 0.005275319, 0.040442016, 0.05453499, 0.004900444, 0.006319941, 0.04090608, -0.037168447, -0.027764428, 0.041570265, -0.020012422, 0.0038292347, 0.032751158, -0.029632278, -0.010213226, -0.020389713, -0.01699457, 0.036798164, 0.048674278, -0.016904173, -0.0024169884, 0.03291358, 0.043891784, 0.030701796, -0.046868302, -0.0010808771, 0.014249596, -0.02867805, 0.019109737, -0.0370476, 0.011741004, 0.010480545, 0.013360145, 0.005004616, -0.026196288, 0.033033464, -0.04823342, -0.05118843, -0.03334477, 0.033130627, 0.0061236816, 0.045414247, -0.03325196, -0.030857207, 0.044665944, 0.026226258, 0.06554083, 0.030399913, 0.0041030794, 0.032893278, -0.051846337, 0.040224, 0.044484187, -0.03670153, -0.007952859, 0.037807498, -0.038962577, -0.037646044, 0.008948658, -0.0041422346, 0.008048571, 0.0017537667, -0.02011031, 0.04091865, -0.015175545, -0.0071968245, -0.020643497, 0.017033484, 0.0056190146, -0.04265211, 0.026594607, -0.06314986, 0.00530964, -0.03461804, 0.041232854, 0.046986252, -0.014851427, -0.019422436, 0.0035209022, -0.073460974, -0.0006617714, -0.031939052, 0.0016945505, 0.052147977, -0.011407158, -0.04634063, 0.021637121, -0.013628914, 0.022675421, 0.015652295, 0.009271567, 0.0005380216, 0.03315576, -0.042264428, -0.058711063, -0.00305888, -0.017393133, 0.054401577, 0.038831335, 0.06234718, -0.03784037, -0.00012290386, -0.03361354, -0.019292401, -0.053626202, 0.0468161, 0.023305086, -0.010418187, 0.034942884, 0.032319, 0.048915975, 0.035844903, 0.009116578, -0.04966283, 0.024027765, -0.0030896966, 0.002130817, 0.023902323, 0.015190772, 0.0060047656, -0.020398416, -0.024231758, -0.026778297, -0.018845258, 0.0010107845, 0.012416069, 0.024257863, 0.04824502, -0.008221144, 0.009659252, -0.0045432127, -0.017974658, -0.07106139, 0.039048865, -0.009651276, -0.0015855443, -0.019580506, 0.003140393, -0.031020597, -0.02695232, 0.004301273, 0.013107509, 0.032509945, -0.0050244355, -0.030360758, -0.06918581, 0.011975935, 0.014931671, -0.014463016, 0.056537706, 0.07874355, -0.0059941313, 0.022276415, -0.014498667, -0.038094636, -0.0035611906, -0.0323219, 0.031142412, 0.037136544, 0.026693221, 0.0061908737, -0.05150373, -0.027173717, 0.029385986, 0.011086726, 0.01781417, 0.012650517, -0.02758654, 0.019427752, -0.010433897, 0.006387617, 0.008603511, 0.024790566, 0.03399301, -0.08127389, -0.006084043, -0.022098042, 0.028170483, -0.037611965, 0.0029999658, -0.07057606, -0.011154885, -0.0076275324, 0.03050046, -0.0090115, 0.019463524, -0.0063426606, -0.017729577, 0.008656685, 0.03938815, 0.011544745, -0.002762376, -0.040469088, -0.0016706224, -0.011653992, -0.021256354, 0.030953402, 0.0094339885, -0.03161034, 0.05212187, -0.027243327, 0.024762528, -0.03041538, 0.068258174, 0.0095181, 0.03745027, 0.035500724, 0.026473757, 0.030526562, -0.040543046, -0.023269797, 0.044751022, 0.006792462, 0.033890527, -0.007569766, 0.061677676, -2.6586874e-06, 0.052023254, 0.03708047, 0.02856655, 0.0010819648, -0.026087523, 0.051688746, 0.04561147, 0.02852433, 0.018971425, 0.0040064, -0.0035114007, -0.014165002, 0.053158272, 0.0247896, 0.0068236417, 0.013051736, -0.0066995295, -0.0321793, -0.018231343, -0.033202652, -0.006812523, -0.005038212, -0.051093202, -0.0120317675, 0.023284784, 0.012774751, 0.035718255, 0.0014927321, -0.03463834, 0.049670074, 0.0019332885, -0.008557105, -0.017386848, 0.012052328, -7.927722e-05, 0.015275004, -0.0027553665, 0.020905014, -0.028809534, 0.024476357, 0.044062663, -0.011029685, -0.021275299, 0.008281086, -0.031882465, 0.011414711, 0.02230977, -0.0014115212, 0.005340577, 0.09981968, -0.009235554, 0.0033552633, -0.0029156131, 0.025934769, -0.028559376, 0.0047363304, -0.050538257, -0.027432756, -0.026608141, 0.00834151, -0.027449254, 0.012890766, -0.04189608, 0.032133374, 0.02414064, -0.013472051, 0.004445023, -0.018794501, -0.03310404, -0.016168686, -0.03736084, 0.022014897, 0.05875022, -0.017455611, -0.01865335, -0.048526358, -0.040835503, 0.003344145, 0.08554399, 0.015822452, -0.02506127, -0.021422409, 0.016596977, -0.05740444, 0.026347106, 0.0039793295, 0.007917329, -0.013559304, -0.031361632, -0.027540738, -0.019809637, 0.016355276, 0.0266734, 0.019390047, -0.020067288, 0.030796904, -0.0052434145, 0.007939807, 0.019575672, -0.00030212355, -0.005518226, 0.039435584, -0.018725859, 0.0012336309, -0.009319182, -0.002262301, 0.013922397, 0.00023783166, 0.014028201, 0.08604479, -0.04473749, -0.007935456, 0.026975524, 0.033594202, -0.025755307, -0.01307494, 0.028766995, 0.036705352, -0.049165413, -0.0100534335, 0.0018117746, -0.058216546, 0.02322339, 0.029776089, -0.02456627, -0.029360607, -0.032975696, -0.03152357, 0.0026893828, 0.0056494684, 0.085348696, 0.0334197, 0.015266182, -0.06157163, -0.010029535, -0.021735493, -0.02444252, -0.039423015, -0.0024464757, 0.047519926, 0.019517664, -0.0162789, 0.02947759, -0.059156276, 0.050165076, 0.019031366, -0.00086516095, -0.018702535, -0.008368097, 0.0037705016, 0.018469658, 0.018460957, 0.0060231346, 0.017685587, 0.014417759, -0.047566812, 0.00015347876, 0.025136678, -0.007924821, -0.010425921, -0.016787434, -0.0056905574, -0.014082462, 0.0007985729, 0.042378504, -0.003292905, -0.029849805, -0.012233647, -0.09142791, -0.05924135, 0.06825962, -0.02169682, 0.0024937277, 0.07725855, 0.03935389, 0.026371278, 0.0070363367, 0.011289994, 0.05296492, 0.020759877, 0.009042678, 0.04177523, 0.02891987, -0.07559953, -0.06821708, 0.04267048, -0.023223149, -0.00078600465, -0.038319115, 0.0017762448, -0.0033796746, -0.019430652, 0.025320914, -0.018261798, -0.023328051, 0.0073109665, 0.004679229, -0.024605183, -0.015241529, -0.047492854, 0.018200647, 0.050813437, -0.004542971, -0.008064523, 0.02470162, 0.0059712906, 0.03809609, 0.0042442316, 0.061484315, 0.0278031, -0.017063938, -0.05224949, -0.019601775, 0.012111045, -0.012078174, -0.023205988, -0.01564713, -0.05569128, -0.03245725, 0.0099115865, 0.002610831, -0.014665651, -0.012112918, 0.056194015, 0.0111535555, 0.009679072, 0.0024046616, 0.03478578, -0.028643247, -0.04262407, -0.01947845, -0.01262393, -0.041033454, 0.00046502857, -0.034617074, -0.003238281, -0.01519609, 0.016965324, -0.0130536705, 0.0119346045, -0.030506743, 0.0598601, -0.024245292, 0.01977169, 0.03855918, -0.021673618, 0.036070168, -0.0032077665, 0.10009812, 0.009911163, -0.036893394, 0.08877502, 0.016588274, -0.01799472, 0.010027843, -0.007580974, 0.004359522, 0.014733961, 0.026403181, -0.010430755, -0.0029545263, -0.008408582, 0.045141608, -0.02060821, -0.020318171, 0.012343106, 0.039292015, -0.025131846, 0.013871579, -0.02357724, 0.041558664, 0.0071643163, -0.03296603, -0.034385525, 0.019439355, -0.026263962, 0.038629275, -0.034294162, 0.0435696, 0.0025349373, 0.039927196, 0.021051235, 0.015500493, -0.018452255, 0.0081317155, -0.004913737, 0.064011335, -0.0032315135, 0.015477426, -0.0116090365, -0.027897144, -0.022401372, -0.01638138, -0.030434716, 0.022441255, -0.003472729, -0.022072904, -0.040090103, 0.015776439, -0.01498714, 0.02889461, 0.00483591, 0.0022406692, 0.022692863, -0.04827016, -0.032900047, -0.06218041, 0.029948419, 0.025149247, -0.015763598, -0.02577718, 0.001922956, 0.09395704, 0.042850304, 0.037997957, -0.017624678, 0.048525393, 0.037909012, -0.00061198144, 0.0025513729, 0.014959707, -0.022337321, 0.045902476, -0.012233586, -0.037676014, -0.0395748, -0.0052231727, 0.01254707, -0.015194156, 0.013759431, 0.022816129, 0.003784037, 0.028289156, -0.011898109, 0.016334973, 0.06285011, -0.011223285, 0.017992062, -0.0816826, -0.027174683, 0.014548336, -0.0048653977, -0.051174413, -0.059211377, -0.03665411, -0.01711693, 0.013040136, -0.017820455, -0.0028307769, 0.0034577434, 0.029767627, 0.033195883, -0.0377084, -0.024712255, 0.005168488, 0.022428926, 0.010580609, -0.020595642, 0.0022424818, -0.009751097, 0.0070856432, -0.049437683, -0.049339432, -0.025669867, 0.023895435, -0.0024273815, -0.011682936, 0.036822334, 0.021302367, 0.030834002, -0.031020112, -0.05352179, 0.014644593, -0.03844643, 0.020272974, -0.004249005, -0.0015413134, -0.046515424, -0.024976991, 0.025663583, 0.018897118, 0.0076328493, -0.044573978, -0.007270301, 0.009122681, -0.006465927, -0.033195883, 0.022889847, 0.007896785, -0.024374845, -0.027463755, -0.011615079, -0.0828969, -0.010456858, -0.0005791104, -0.025001328, -0.031400546, -0.04830605, 0.024408441, -0.0021999427, -0.041148745, 0.03284784, -0.039642476, -0.008015216, 0.011691456, -0.05682823, 0.030032529, -0.004729563, -0.05831323, 0.03118205, -0.060632568, 0.029101023, 0.027255002, 0.04071743, -0.0318095, -0.014490812, 0.03784182, 0.0015628246, 0.03571511, 0.050476383, 0.011788135, -0.00080866384, -0.013654594, -0.018674618, -0.03475436, -0.06765247, 0.004859234, 0.007702217, -0.011734599, -0.011592965, 0.013079653, 0.04235337, -0.014808405, 0.02520496, 0.0043065897, -0.023447204, 0.046448715, 0.012213767, 0.009646684, -0.0044183754, -0.026440086, 0.048091304, 0.03263321, -0.00091192976, -0.015292768, 0.00781373, 0.044791628, 0.038360506, 0.0006852162, 0.042062365, 0.010828108, -0.020579206, -0.023338683, -0.0013515798, 0.01644658, -0.061047327, -0.028093863, 0.037345372, 0.0014985328, 0.008490276, 0.019567937, -0.0046135476, 0.037730638, -0.047027823, 0.0023331188, -0.061898105, -0.037953, 0.01355447, -0.057738952, 0.0080195675, 0.004325926, 0.013545648, 0.00073718146, 0.05515229, 0.057075728, -0.006294079, 0.03139571, -0.022370677, 0.06667794, -0.027005976, -0.024107525, 0.05299392, -0.022546634, 0.014336351, 0.01806167, -0.0681204, 0.029013528, -0.0014540602, -0.031180117, 0.0126159545, 0.03790128, -0.058413774, -0.0042548664, -0.026699806, 0.017149499, 0.028543666, 5.655753e-05, 0.06375804, 0.0220352, -0.025924858, -0.035057932, 0.017904082, -0.024734976, 0.02039648, -0.0047319797, -0.014817105, 0.025810536, -0.01770299, 0.033075035, 0.022959456, -0.009069507, -0.06054459, 0.03290367, 0.004988664, 0.027719958, 0.021192154, -0.0190304, 0.03132586, 0.040153913, -0.016206391, -0.017274216, -0.02037274, -0.04655603, -0.064274006, 0.027312454, 0.019245753, 0.019533373, 0.020832023, 0.004751799, -0.0027974225, -0.062395036, -0.026321668, 0.006747733, -0.039365973, -0.054465383, -0.028686753, 0.007860046, 0.025533669, -0.0071069123, -0.027740743, -0.029599406, 0.062385373, 0.013117479, 0.011368547, 0.010673663, 0.017815137, -0.06576142, 0.009104855, -0.0014250564, 0.047133207, 0.039999224, 0.053351633, 0.0046130638, 0.0027877544, -0.037013758, 0.015737979, 0.020604342, 0.012068023, -0.0016046385, 0.024743676, -0.01866075, 0.023384, 0.046620805, 0.060476918, -0.04047386, 0.007976062, 0.020220526, -0.06199672, -0.030734425, 0.034561, -0.025567144, 0.038421415, 0.024272364, 0.028035132, 0.017475793, -0.045601804, 0.07026282, 0.011838408, 0.010964667, -0.009230962, 0.018627366, -0.017627096, 0.020229226, -0.023743527, -0.030863974, 0.008085793, -0.021665882, 0.015185213, 0.025469257, 0.035527796, -0.012533534, -0.052318174, 0.05427299, -0.027022414, -0.029938994, -0.059367035, 0.044598524, -0.00648913, -0.008431422, -0.02932967, 0.0318095, -0.029665148, 0.013303104, -0.007190661, -0.014290686, -0.007902344, -0.075058125, -0.0029815969, 0.00859747, 0.00283126, -0.02802933, 0.046798695, 0.031866785, -0.024012899, -0.027541582, 0.003698959, 0.01251367, 0.0131479325, 0.02372854, 0.010397975, 0.0436067, 0.037277695, -0.014028442, 0.0016396849, -0.011052223, 0.038301654, 0.06145773, 0.020842656, -0.019668002, 0.009086305, 0.005568741, 0.010092377, 0.010541573, 0.021053176, -0.020745493, 0.05578409, 0.066248685, -0.0628301, 0.021387808, 0.0001256834], [-0.04069654, -0.047850702, -0.012926069, -0.025447914, -0.031640526, 0.03012772, 0.039397124, -0.026957251, 0.043493148, 0.039408833, -0.016947927, 0.018221539, -0.041801646, -0.034712546, -0.04040508, 0.03802918, -0.021615915, -0.028250594, 0.040069602, 0.030082613, -0.009542764, 0.0007590049, -0.026024433, 0.03570478, 0.0030008883, 0.05823779, -0.009657578, 0.0071639214, 0.016700601, -0.0019721114, -0.0034116183, -0.056404036, 0.017603274, 0.02689306, 0.0041734423, 0.00042027183, 0.003982824, 0.021441886, -0.05292042, -0.045376346, -0.08940123, 0.018900298, -0.013505515, 0.0024452966, 0.04410382, 0.018273367, 0.022159742, 0.01816407, -0.047073048, -0.047901448, 0.018124167, -0.030498117, -0.0100897765, 0.0101680625, -0.00875935, 0.04082839, 0.042342063, 0.036721956, 0.055323213, 0.0075583872, 0.062344227, -0.022266926, -0.046459768, -0.008721182, -0.0071451087, 0.008094028, 0.0017000625, 0.029488856, 0.03055103, -0.025280502, -0.022396713, -0.00037973284, -0.013726521, -0.035802476, 0.061844584, 0.022746725, -0.08622989, 0.020041198, 0.018658508, -0.08943246, 0.015011814, 0.04560882, -0.0037884507, -0.0114752855, -0.04512479, -0.012698585, -0.028606242, 0.011441889, 0.033762757, -0.0048507457, -0.06698153, 0.00011883847, -0.0007119466, -0.022502977, 0.0037084976, 0.0038592145, -0.01811029, 0.028067024, 0.029655838, 0.06332616, 0.022597527, -0.0061629023, 0.009364818, -0.012060153, -0.003219048, 0.011708626, 0.015132388, -0.031166041, -0.00579099, -0.031053273, -0.027349979, 0.0074373805, 0.019620491, -0.039852526, 0.013386677, 0.009323616, 0.073396206, -0.036261782, -0.008405437, -0.023126662, -0.023147047, 0.00017326997, -0.009011122, 0.011184695, -0.04595406, 0.0011168214, -0.030436527, -0.02264003, -0.060696103, 0.047568027, 0.012381321, -0.013803045, -0.011812067, -0.031428874, -0.065819606, 0.028801413, 0.024101656, 0.077706486, -0.02383709, 0.020500937, -0.04147202, 0.030306412, 0.05538003, 0.03389125, 0.01861904, -0.011919412, 0.027130954, -0.06877191, -0.014249286, -0.00901958, 0.014303121, 0.00014052432, 0.0234256, 0.00556459, 0.046879392, -0.073074386, 0.03558562, -0.00058009656, -0.021746574, 0.022618128, -0.0039072484, 0.011032759, 0.030448673, 0.037861764, -0.017202953, -0.01655151, 0.0027783914, 0.016873762, 0.033696346, 0.016742345, 0.06669527, -0.055360947, 0.030747505, 0.028450537, -0.028745247, -0.024024455, 0.028830472, -0.01977663, 0.02032192, 0.051257547, 0.018221647, 0.005191593, 0.00060525216, 0.0055251215, -0.0010684078, 0.0116808675, -0.012599913, 0.006235116, 0.02717953, 0.00223039, 0.07114261, -0.026024759, 0.049669277, -0.014369479, -0.023133764, 0.048591923, -0.028073639, -0.035596028, 0.04657774, 0.053126004, 0.027046597, -0.04588336, 0.031187726, -0.03779237, -0.052459814, -0.065813966, 0.032962605, -0.026288025, 0.016261788, -0.0123474905, 0.024864104, 0.051823117, 0.025931075, 0.04332573, 0.023647988, 0.0070603713, 0.046693977, -0.063680075, 0.0020650353, 0.047797352, -0.033764005, -0.018044582, -0.002306941, -0.020632789, -0.028319446, 0.039325994, -0.014250424, 0.00033743188, 0.019016758, -0.032657485, 0.052236885, -0.0022789664, -0.016226223, -0.036831252, 0.042160552, -0.021352759, -0.005349466, 0.010597442, 0.0035803344, 0.033745788, -0.050028395, 0.012013962, 0.04860754, -0.035429504, 0.02263103, 0.0012200732, -0.056501187, 0.011082772, -0.0369065, -0.032618992, 0.017951116, -0.010247867, -0.02639732, -0.0049940348, 0.0011523862, 0.016745023, -0.00035586485, -0.007562074, 0.0512029, 0.027473373, -0.01583848, -0.053970233, -0.0058937813, -0.036650393, 0.005939321, 0.0037811454, 0.056090027, 0.026652781, 0.027067848, 0.00075293286, -0.0068180324, -0.019317323, 0.04343763, 0.052413836, -0.02756185, -0.011087326, 0.009405588, 0.016949663, 0.02819291, 0.009354843, -0.032375026, -0.031267095, 0.0031934585, -0.0050519365, -0.008640511, 0.0068804873, 0.0029649711, -0.043958094, 0.018912666, -0.0444213, 0.018115276, -0.0065725823, -0.00063582923, 0.033464253, 0.02811267, -0.0030393808, 0.049684346, 0.014392466, 0.013685509, -0.047125094, 0.028117768, 0.012098104, -0.026638035, 0.00378288, 0.0057502203, -0.0104510635, -0.07382558, 0.07803611, 0.038180545, -0.018156262, -0.025799876, -0.034011222, -0.031049587, 0.009843642, 0.03617287, -0.06087913, -0.0026977202, 0.038382225, -0.032874018, 0.0006180468, -0.015954282, -0.05788214, 0.02406262, -0.055630285, 0.031305697, 0.07392187, 0.033404455, 0.0034020224, -0.041266635, -0.035301965, 0.00033135983, 0.03818445, -0.023301393, 0.029056441, -0.0033760536, 0.020729072, -0.00986663, -0.028047614, 0.022070127, 0.029995222, -0.030563174, -0.04604015, -0.041657656, -0.017686006, 0.046865728, -0.09011513, -0.017455377, -0.050922286, 0.04226486, 0.0060865683, 0.02160952, -0.0153978225, 0.017003443, 0.015331898, 0.016749285, -0.033947032, 0.027799746, -0.026619818, -0.023981951, 0.0068989205, -0.03897208, -8.587598e-05, -0.068943664, -0.005702512, 0.035410393, -0.009699648, 0.036432557, -0.018372254, 0.042421, -0.0032294572, 0.07127532, -9.932121e-05, -0.04396503, 0.0292167, -0.037226804, 0.029366331, -0.030939639, -0.016976552, 0.039445184, 0.011600413, 0.02271463, -0.028084915, 0.028205922, 0.02799901, 0.020757426, 0.03509248, 0.016113456, 0.023628471, -0.009515318, 0.07116906, -0.0075176177, -0.025251009, 0.05260576, -0.051581103, 0.0024077801, 0.009806776, 0.055877067, 0.044170614, 0.010840758, -0.0040327013, -0.0023273258, 0.027881935, -0.04574674, 0.0049734334, 0.00012859711, -0.02225142, -0.07378741, 0.002253377, 0.045222808, 0.026342237, 0.0027462963, 0.0030290799, -0.00850259, -0.017624525, 0.015664125, -0.07732307, -0.025185354, 0.016789187, -0.009078782, 0.0029413064, -0.008547045, 0.038640287, -0.027550576, 0.02388122, 0.015697088, 0.019329902, -0.004399626, 0.0149372155, -0.029812843, 0.057063285, 0.037466213, 0.047923323, -0.0037145698, 0.09193414, 0.031931985, -0.014109683, 0.03151345, 0.040416356, -0.0591139, -0.012161209, -0.06287336, -0.017353019, -0.043642346, -0.0036610058, -0.017041177, -0.0040377975, 0.0032099402, 0.027511975, -0.0023459757, -0.04525729, -0.01664888, -0.038488053, -0.042676024, -0.020815816, -0.038798593, 0.037662253, 0.019381339, -0.026042106, -0.018317118, -0.05102495, -0.050567724, 0.033578373, 0.043212097, 0.014555111, 0.025318233, 0.010053562, 0.05939495, -0.059842546, 0.030206874, 0.004003642, 0.0111571, -0.038769316, 0.002309977, -0.0206857, -0.021003615, 0.0061095557, 0.0250914, 0.016005026, 0.0012200461, 0.040121105, 0.016295617, -0.04255957, -0.0016567992, 0.029690536, 0.012575191, -0.0035261197, -0.017134426, -0.052512724, -0.014959334, -0.01591297, -0.017398776, 0.031530797, 0.00030563498, 0.0541576, -0.012569987, -0.02891158, -0.008008802, 0.06598224, 0.0019326432, -0.0028026795, 0.07008868, 0.023978915, -0.03625663, 0.03243683, 0.028310446, -0.052150138, 0.0055292416, 0.042740215, -0.04134885, 0.020929286, -0.038098138, -0.020467976, -0.039670367, -0.007947432, 0.036421824, 0.018764876, -0.025603835, -0.053474925, 0.022660848, -0.010779929, -4.3371705e-07, -0.022975998, 0.010574888, 0.01467872, 0.019317107, -0.023751646, 0.04505279, -0.036116485, 0.002415804, -0.010177604, -0.02108212, -0.033173498, -0.06556501, -0.036829084, 0.007991021, -0.018295053, 0.044658978, 0.038289476, 0.017940272, -0.0038661538, 0.02602801, 0.0026461077, 0.014155657, -0.0056075277, -0.026018687, 0.008831346, 0.0022439435, 0.009938626, 0.016133407, -0.012570855, 0.0077769808, -0.023838446, -0.04262051, -0.04565132, 0.02544748, -0.0054565943, -0.029916935, 0.033187162, 0.06575107, 0.003124064, -0.025589306, -0.0075825667, -0.010143992, 0.02319687, 0.0174827, 0.025925871, -0.0027072618, -0.04612581, -0.04697676, 0.043826237, -0.058499753, 0.0016162466, -0.03401903, -0.013823755, -0.021869397, -0.03305401, -0.01470214, -0.069339216, -0.0045841723, 0.021998344, 0.021063035, -0.02586382, 0.03371196, -0.033263497, -0.011154336, 0.005020709, 0.015831757, 0.033395346, 0.04407292, -0.023109745, 0.019669719, -0.0063435454, 0.056942713, -0.0011267969, -0.040557314, -0.0004139016, -0.056413576, 0.014698671, -0.0025711423, 0.010394029, 0.011338014, -0.035988107, 0.03984385, -0.0075137145, 0.0071613193, 0.015756398, -0.03077049, -0.0010062236, -0.0015232143, 0.012977465, -0.010150497, 0.003284539, -0.015074271, -0.023888268, 0.0060313237, 0.009401685, -0.02942857, 0.022615742, 0.012172486, 0.004897316, -0.027965425, -0.042326447, -0.008040952, -0.03821828, -0.02183592, 0.007287856, 0.020207746, 0.07636369, 0.060208436, 0.04755794, 0.04236548, -0.011248018, 0.08147288, -0.034520842, -0.02534881, 0.06952658, 0.0053325514, -0.008004248, -0.0073328544, 0.016718926, 0.014226571, 0.0282931, 0.005395007, -0.044895355, -0.023669023, 0.015109835, 0.047684588, 0.009273305, -0.026530473, 0.017908176, 0.029465001, -0.006762516, 0.03232927, -0.020772228, 0.046171345, -0.018290281, 0.0058985515, 0.009802222, -0.022100486, 0.010635237, 0.023351327, -0.06213257, 0.040092804, 0.025877293, 0.015246022, -0.0045984853, 0.0024843311, -0.020579875, -0.040620204, -0.027303789, 0.041399594, 0.0012118055, 0.039406665, 0.011170166, 0.015153695, -0.0029180483, -0.026002204, -0.00053694175, 0.00702665, 0.011064122, -0.07579466, 0.020365618, 0.013512021, -0.013242791, 0.024288157, 0.006732156, 0.0027677652, 0.029762099, -0.02385704, -0.052766886, -0.014619734, 0.006166372, 0.01347136, -0.012471534, -0.04531476, -0.007798666, 0.045098547, 0.05345129, 0.037239812, -0.020904347, 0.049813274, 0.00602433, -0.013211672, 0.00047036613, 0.013945738, 0.00063257635, 0.02610413, 0.003416606, 0.0034871935, -0.064278714, -0.0021742235, 0.0251494, -0.012417644, 0.04177563, 0.0066853142, 0.054963008, 0.022018949, -0.026309278, 0.019152945, 0.024311576, -0.009843642, 0.03114869, -0.04582828, -0.031909216, -0.017740438, -9.438768e-05, -0.038881864, -0.014262351, -0.028973438, -0.019965297, -0.002993244, -0.048533805, 0.018102644, 0.00648754, 0.024248688, -0.013993447, -0.06315267, -0.043081116, -0.01919198, 0.047025338, 0.023581197, -0.021881893, 0.025382856, -0.00205712, -0.008708713, -0.0011155203, -0.020937094, -0.003898249, 0.033943564, -0.0015076004, 0.03805, 0.03454491, -0.01873213, 0.03774119, -0.026451645, -0.039852526, 0.06395592, -0.017930731, 0.006916215, 0.0036748846, -0.009323182, -0.043573815, -0.023707354, -0.0013448482, -0.021932313, 0.002118057, -0.007330035, 0.010738401, 0.022051042, 0.03435427, -0.0009298894, -0.0077060675, -0.03376227, -0.061428215, -0.015327561, 0.00010712811, -0.078972936, -0.031096213, -0.027461879, -0.03608526, -0.059115633, -0.03538784, -0.0121423425, -0.0030262608, -0.07213929, 0.014302904, -0.02113644, -0.03573308, 0.01221564, -0.046032995, 0.026913445, 0.02020601, -0.08140349, 0.017022744, -0.033182826, 0.050647743, 0.010901044, 0.04623424, -0.041489374, 0.010708475, -0.0009450694, 0.057049405, 0.0016624375, 0.039869007, -0.0012365273, -0.009363084, 0.012310624, 0.039042775, -0.069436364, -0.04288822, 0.012966838, -0.008933704, -0.020553852, -0.012683189, 0.00036085257, -0.005928912, 0.011877342, 0.032272886, -0.044024013, 0.01566586, -0.0035772983, 0.085372865, -0.03279248, -0.029684354, -0.009896989, -0.0051677385, 0.027459197, 0.014982864, -0.0062169004, 0.00918179, 0.05309304, 0.02831305, 0.023178706, 0.020303596, 0.026038202, 0.019160643, -0.044159338, -0.02287207, 0.017418077, -0.032767758, -0.024215074, 0.011625352, 0.0026448066, 0.028910657, -0.012465461, -0.0021633806, 0.055411693, -0.056865513, 0.023447828, -0.0518448, -0.022522928, -0.011198792, -0.004933098, -0.0031769776, -0.009749959, 0.02677292, -0.008968401, 0.03762734, -0.016806211, -0.0051284875, 0.0014017735, -0.018658074, 0.07096912, -0.03242729, 0.01067291, 0.008760435, -0.0066521354, -0.0031895554, 0.024138957, -0.034880824, -0.032605223, 0.024220062, -0.013826899, 0.0035673229, 0.058541395, -0.03148043, -0.022692945, -0.015545069, 0.01830763, -0.0023543246, -0.006656689, 0.0054582916, 0.0083212955, -0.031181222, -0.026363926, -0.043866143, -0.012974863, 0.029595984, 0.033535, -0.01722464, -0.024429547, 0.0035989843, 0.00017348681, 0.064707115, -0.011391145, -0.07583803, 0.054267544, 0.041581754, 0.0357115, 0.061624255, -0.04507101, 0.04084227, -0.015631163, -0.018157132, -0.027660739, -0.0027016234, -0.018478949, -0.07376334, 0.0138613265, 0.006029534, -0.028304227, 0.07901241, 0.0046248334, 0.023141298, -0.037955448, -0.00096473965, -0.023739938, -0.029268311, -0.025862547, -0.02770411, 0.017584842, -0.0053749606, -0.005588878, -0.016706781, -0.0060074693, 0.02729815, 0.0019213664, -0.02021295, 0.06397543, -0.015798144, 0.0009298894, 0.032141037, -0.05164009, 0.012604468, 0.0066238353, 0.033387564, 0.01344783, -0.0055663246, -0.032788143, -0.013242249, -0.010198098, 0.051365975, -0.003014767, 0.00068136945, -0.016376723, -0.012179643, 0.0036440906, 0.051572427, 0.03655107, 0.008140218, 0.008639671, 0.0005462666, 0.008322488, 0.013627335, -0.05648731, 0.037803862, -0.0025728096, 0.0073037683, 0.00521683, -0.041215047, 0.041673705, 0.029458063, -0.0047013843, 0.0014937216, 0.020552551, 0.00085008546, -0.0042469576, -0.011513398, 0.0035673229, -0.0147823775, -0.0051985327, -0.005479581, -0.0042252718, 0.017225994, 0.023099769, 0.05285406, 0.0703038, -0.007490727, 0.006882222, -0.050818626, 0.038018335, 0.0050901035, -0.0566261, 0.039156843, -0.017967163, -0.024334129, -0.01618567, 0.017510893, -0.007272567, -2.233643e-05, -0.07821827, -0.021276424, -0.012338382, 0.009480188, -0.00055237935, 0.018907461, -0.0015735255, -0.024734017, -0.009189597, -0.0115768835, -0.002022194, 0.03137249, 0.021204237, 0.008114846, 0.05785048, 0.053989775, -0.0071988357, -0.02956931, 0.017229095, 0.024914442, 0.025734166, -0.028556798, -0.01573352, 0.020026993, 0.032177467, 0.019970069, -0.002679504, 0.010187146, 0.025471335, 0.026377153, 0.008547695, -0.066823654, 0.009275039, -0.0011181226], [-0.016063781, -0.089416064, -0.038344495, -0.02807248, 0.0029731637, 0.033557862, 0.019148018, -0.04411564, 0.015500706, -0.01601868, 0.019732464, 0.043821923, -0.06123947, 0.0012971094, -0.000984014, 0.021572271, -0.0022504972, -0.04228428, 0.069589674, 0.046530448, 0.004498634, 0.0051556374, -0.008227948, 0.039664716, -0.011502031, 0.0066579985, 0.0067390054, -0.009832687, 0.0341761, -0.01179649, 0.014946577, -0.033418708, 0.016506588, 0.022069747, 0.030287754, 0.025806265, -0.01243964, -0.021322293, -0.039785974, -0.055589836, -0.07182706, 0.011108425, -0.00035981118, 0.015536488, 0.022352029, 0.048918422, 0.027640607, 0.015368014, 0.01766883, -0.016763523, 0.03625073, -0.022078132, -0.038067926, 0.0028501928, -0.0265321, 0.018545186, 0.028152244, 0.051443066, 0.015791189, -0.005654602, 0.029033942, 0.0031582876, -0.0666923, -0.030683348, 0.0079352595, -0.004452912, 0.018714655, -0.020603664, -0.001584362, -0.033458468, -0.013339354, 0.020469233, -0.019759798, -0.012126731, 0.03784379, 0.013126151, -0.058879826, -0.003984263, 0.009074796, -0.008367102, 0.0036987497, 0.023641739, -0.015084241, -0.054252718, -0.054924387, 0.014729399, -0.018084986, 0.022591572, 0.019994557, -0.0060755103, -0.052179582, 0.009588174, 0.052254125, 0.016342957, 0.03929683, -0.0074160118, -0.013167897, 0.020873522, 0.039197557, 0.03991196, 0.026526384, -0.022858944, -0.04262657, 0.019117208, 0.0059730397, -0.026061589, 0.034322213, -0.028909141, 0.013236481, -0.036584448, -0.0050950064, -0.010061296, 0.002804937, -0.0956899, 0.02695801, 0.019887025, 0.055251893, -0.026914276, -0.04100357, -0.036100395, -0.015601624, -0.03357973, 0.00041373319, 0.027159782, -0.028306307, -0.054508414, 0.009834177, -0.02271209, -0.06250378, -0.014166821, 0.018845858, -0.012452499, 0.010601757, -0.050709523, -0.05645756, 0.026987828, -0.016966539, 0.054981537, -0.021616006, 0.039702483, -0.011071649, -0.0025892493, 0.01572832, 0.01469461, 0.035847183, -0.01894822, 0.031065026, -0.01994666, -0.028377872, -0.022237513, 0.018167485, 0.013584363, -0.022655185, 0.020650877, 0.011393938, -0.043420367, 0.012653527, 0.016345443, -0.037316997, -0.012775534, -0.022737684, 0.01450874, 0.044932667, 0.012293219, -0.0430859, -0.038147196, 0.02364417, 0.026518185, -0.011515076, 0.022479255, 0.035549745, 0.016641766, -0.0098138, 0.04395462, -0.037360728, -0.024018887, 0.020191887, -0.033297945, -0.004142799, 0.05270389, 0.0039857537, 0.0031816456, -0.0045585195, -0.019410113, -0.027402058, 0.024815047, -0.03048406, -0.035151664, 0.033931587, 0.02263189, 0.035511974, -0.06771408, 0.003977802, 0.009234326, -0.009768576, 0.014586765, -0.015139358, 0.03023905, 0.01084801, 0.032872036, 0.0046646865, -0.007135593, 0.032959502, -0.039982777, -0.064626865, -0.020413322, 0.016896218, 0.012667443, 0.04503206, -0.037851743, -0.002039053, 0.059265476, 0.031902928, 0.043490443, 0.0208114, 0.02084917, 0.040218346, -0.061404467, 0.046522, 0.063004486, -0.029118864, -0.014909304, 0.032586023, -0.058297116, -0.041452836, 0.029860353, 0.019017315, 0.04355306, 0.00995693, -0.026395122, 0.037180945, -0.023415063, -0.008718215, -0.055055093, 0.0011063946, 0.0033347143, -0.042822506, 0.009964385, -0.04756043, 0.0037770236, -0.0034032972, -0.0039855675, 0.036715154, -0.0013064278, -0.035277154, 0.006632078, -0.05688595, -0.031130627, -0.012073182, -0.0020516445, 0.060851827, -0.026261125, -0.034021046, 0.003399073, 0.004759547, 0.010809369, -0.0010138327, 0.0007350287, -0.00089257036, -0.004793838, 0.0003888222, -0.068136014, 0.02023292, -0.051411256, 0.04598427, -0.0070630345, 0.01018057, -0.03293018, 0.009328193, -0.06263889, -0.008030276, -0.05499968, 0.051174697, 0.021137169, -0.035947327, 0.023453608, 0.023057237, 0.0012697757, 0.047987085, 0.024031004, -0.030456726, -0.034795333, -0.0017155639, 0.02892206, 0.030790694, -0.039021626, 0.0025696184, -0.023621306, -0.0019971014, -0.020653144, -0.0115291085, 0.009800383, 0.006098402, 0.022251764, 0.036424424, -0.025153983, 0.03867175, 0.0013557527, -0.010909636, -0.059459794, 0.04166405, -0.015194654, -0.0077148196, -0.0070689977, 0.005332561, -0.010923301, -0.030080017, 0.035354603, 0.015058149, 0.01470003, -0.0101711275, -0.008115134, -0.04335228, -0.020653114, 0.0635101, -0.04343229, 0.04097077, 0.067302585, 0.0009686078, 0.0009003977, -0.0014968942, -0.020943597, -0.022805272, -0.058737192, 0.026157876, 0.07411912, 0.011077614, -0.008162844, -0.03555919, -0.02731866, 0.05766621, 0.030347392, 0.01736238, -0.0022522989, 0.012082998, 0.018396093, 0.02181728, 0.0039330744, 0.021173697, 0.012819517, 0.0113062225, -0.09404193, -0.025365695, -0.020538064, 0.048982035, -0.05807994, -0.023618015, -0.033816043, 0.018383669, 0.0039189104, 0.027836166, -0.022845898, -0.00736619, -0.029081592, -0.015182642, 0.017989567, 0.011874764, -0.012620228, 0.0037129137, -0.005388409, 0.006414479, -0.016613439, -0.02120072, 0.034320224, -0.013625116, -0.043312028, 0.026832275, -0.0040732217, 0.0125978645, -0.04858843, 0.06449069, -0.016676988, -0.010982194, 0.012210223, 0.021221904, 0.04431443, -0.051914696, -0.024278404, 0.023084573, -5.3673495e-05, 0.026210556, -0.021364039, 0.04777985, -0.015910216, 0.05306992, 0.016519012, 0.041990563, 0.025085403, -0.0017453826, 0.057235822, 0.01171921, 0.03261013, 0.035285354, 0.001135095, 0.010190013, -0.010840057, 0.05501558, 0.048658997, 0.023126258, -0.008199496, -0.021111574, 0.01789514, -0.0132359825, -0.011706785, -0.032424755, -0.03744124, -0.015763607, -0.016171625, 0.004688479, 0.00271076, 0.027203517, -0.025842793, -0.009488654, 0.033892326, 0.02442964, -0.0076554306, -0.030880151, 0.020120913, 0.012458214, 0.0023466623, 0.03501649, 0.043069996, -0.027540468, 0.025119197, 0.054020885, 0.030931836, -0.0041589504, -0.03144571, -0.05585224, 0.022386817, 0.022693701, 0.0012476603, 0.0037582628, 0.059430473, 0.0147085255, 0.0066187372, 0.018427402, 0.009799389, -0.052076954, -0.018199539, -0.01602452, -0.019844284, -0.0045863506, 0.025293138, -0.026650382, 0.032203104, -0.05096398, 0.04539529, 0.03139216, -0.0046671093, 0.028977724, -0.037416887, -0.03829216, -0.048481084, -0.026834758, 0.053304367, 0.06512931, -0.053607892, -0.0073393537, -0.036085982, -0.053193413, 0.0002720948, 0.034806266, 0.013069868, -0.0144131975, 0.03358768, 0.06829654, -0.059120357, 0.009937548, 0.008456557, -0.0008237391, -0.010557527, -0.0011013006, -0.050876506, -0.004727616, -0.012420444, 0.0885215, -0.021890525, -0.016953867, 0.041435193, 0.022960328, -0.009061626, 0.03912301, -0.02250311, 0.010955356, 0.0058920328, 0.011616335, -0.0126868235, -0.008282615, -0.013057661, 0.02314421, 0.03431426, -0.018945688, 0.055512313, -0.014800963, -0.02257865, 0.025415393, 0.05904457, -0.0130854, -0.020021953, 0.049547594, 0.029965714, -0.07135792, 0.016725257, 0.002545515, -0.092597716, 0.014253294, 0.058820188, -0.02467291, -0.004740165, -0.047709774, -0.033242032, 0.0014859607, -0.013754547, 0.049718555, 0.042016406, -0.024947241, -0.053600438, -0.008983352, -0.027844366, -0.0024150587, 0.012493003, 0.010577157, 0.04237423, -0.010930508, -0.004646733, 0.029339522, -0.037060056, 0.036025353, 0.00035248083, 0.007393027, -0.021585442, -0.036072563, 0.0078411065, -0.018404294, 0.018268866, 0.030021375, 0.048544694, 0.0051044486, -0.017353436, -0.042982157, 0.0014570118, 0.01428535, -0.0034721906, -0.008837242, 0.0022418625, 0.023382757, 0.0015510647, 0.033624955, -0.035841968, 0.018697882, 0.0052581388, -0.061452176, -0.074272186, 0.07168294, -0.029421026, -0.02013601, 0.053808674, 0.0068962984, 0.048067596, -0.019590825, 0.0019479005, 0.0088551715, 0.029411584, -0.008712997, 0.052820686, 0.0039156806, -0.049329914, -0.034076706, 0.04528751, -0.02718662, -0.019844284, -0.037361722, -0.025619155, -0.0053648646, -0.041012514, -0.0011724925, -0.024482071, -0.00077826565, -0.008370084, 0.051715408, -0.0076161693, -0.024719628, -0.030214699, 0.02203471, 0.037861682, 0.0034529949, -0.026807923, 0.044691134, -0.007650585, 0.023738595, 0.0114316465, 0.055055093, 0.021596624, -0.036810078, -0.034759056, -0.04993135, 0.02049023, -0.029790776, -0.027095672, -0.019327926, -0.057826232, -0.0075597623, 0.012482069, 0.005184462, 0.021625448, -0.008535452, 0.050504774, 0.021223892, 0.00900522, -0.007840803, -0.0051623466, -0.019796574, -0.013800052, -0.042197306, 0.021703972, -0.07378714, -0.006021868, -0.056854147, -0.013994277, 0.0048201783, -0.0025498637, -0.006541209, 0.046837576, -0.03870999, 0.036197554, 0.004330656, 0.0424617, 0.021588549, -0.009561337, 0.053211305, -0.00046367935, 0.07127443, -0.014276653, -0.056466505, 0.102782756, 0.0033526055, -0.040054344, -0.00824236, 0.025908394, -0.0028180447, 0.007996606, 0.006386649, 0.009434608, -0.0012496482, 0.02409034, 0.00697656, -0.030488532, -0.028679287, -0.037827637, 0.04737382, 0.0016499631, -0.017217264, -0.036219668, -0.0020567384, 0.023587512, 0.015589167, -0.0057957433, 0.014120416, -0.045968365, 0.05944737, -0.04198162, 0.035788044, 0.0057149846, 0.024845112, 0.018158538, 0.036102723, -0.02486746, -0.052659664, -0.030844368, 0.06718133, 0.012974076, 0.024004476, -0.022192001, -0.028667858, -0.013352276, -0.0471052, -0.03314388, -0.00244115, 0.018411003, -0.015220163, -0.060135946, 0.0083541805, -0.03583402, 0.041765932, 0.010203928, 0.00034151622, 0.0129452525, -0.062175523, -0.049030736, -0.011113396, 0.03587775, 0.004254494, 0.01028742, -0.020127064, 0.007891992, 0.039458964, 0.012142634, 0.028277481, 0.03390028, -0.0020067925, 0.056967955, -0.008971751, 0.0015190096, -0.0044896887, -0.03608449, 0.030039266, 0.023674482, -0.033427402, -0.06673206, -0.003490268, 0.039582215, 0.008235651, 0.027894314, 0.019367186, -0.0070528463, 0.021963766, -0.035665043, -0.008940116, 0.010531933, -0.006456723, 0.019462606, -0.06395197, -0.027711427, 0.0035861847, -0.011989069, -0.030003484, -0.012948234, -0.02651371, -0.009959167, -0.023607362, -0.027410258, 0.04449235, 0.0010670092, 0.024239173, -0.013256235, -0.022689972, -0.031608224, 0.017758891, 0.014754247, 0.03661899, 0.013891496, 0.031486463, -0.011642675, -0.022076206, -0.02304382, -0.058544863, -0.027037527, 0.038643427, -0.038104206, 0.011641185, 0.06130159, 0.009735775, -0.022686742, -0.01648969, -0.04898601, 0.043177348, -0.034049373, 0.035540797, -0.027491266, -0.03935162, -0.05658901, -0.0070391796, 0.022224804, 0.0047414694, 0.0081862025, -0.059375808, -0.0016986667, -0.0021456974, -0.0033784483, -0.006608301, -0.0031607726, -0.016962813, -0.0057788463, -0.013969739, -0.0081056915, -0.08285995, -0.027360562, -0.021228364, -0.013591384, -0.044660326, -0.06661713, 0.009285763, 0.018154066, -0.029424008, 0.028346563, -0.0400941, -0.037324946, 0.015889654, -0.03771855, 0.021096665, 0.010476643, -0.018449767, 0.039155807, -0.033192087, 0.028564239, 0.03480527, 0.030531768, -0.028183553, -0.0059693125, 0.0033458965, 0.0053078053, 0.016363459, 0.027882388, 0.016092109, -0.0035613046, -0.03280668, 0.008571856, 0.012466166, -0.06323533, -0.06385357, 0.017400151, -0.024003979, -0.021018889, 0.029450845, 0.0091923, 0.018393112, 0.03457865, -0.010175227, -0.012426408, 0.018969977, 0.01894078, -0.044275664, 0.0074998764, 0.00997681, 0.017315665, 0.039780013, -0.011283486, -0.02027715, 0.0124828145, 0.043890506, 0.0073547596, 0.03137837, 0.038913783, -0.0019595795, -0.014136754, 0.0058086645, -0.012645699, -0.008985341, -0.069946505, -0.003777272, 0.061831865, 0.009591466, 0.016028, 0.005389465, -0.033727452, -0.0019739917, -0.046392787, -0.0004890252, -0.039674655, -0.030613273, -0.007072974, -0.031039182, 0.0041641686, 0.014165827, -0.0018900029, 0.013769985, 0.03138309, 0.050472964, -0.000942268, -0.004817693, -0.004824651, 0.04839759, -0.013367185, 0.019085772, 0.0060923146, 0.0051049455, 0.024058895, 0.06415474, -0.03634491, -0.0010943429, 0.05394783, -0.024689808, -0.0032512222, 0.027866483, -0.07751981, -0.025887521, -0.008267706, -0.0036443311, 0.042554136, -0.015261164, 0.050389472, 0.031582877, 0.0049578403, 0.0043845777, 0.0028106521, -0.035878494, 0.025161935, 0.032402888, -0.008524146, -0.005595213, 0.018472876, 0.025842793, 0.035647154, -0.018372394, -0.049141064, 0.068719715, 0.0243541, 0.04554444, 0.04051355, -0.037459128, 0.051013675, 0.010429058, -0.0077227713, -0.04850742, 0.004384454, -0.03324725, -0.06751976, 0.030436845, -0.02593896, 0.027136162, 0.020435685, 0.014269696, 0.008882342, -0.04273603, -0.009720867, 0.011639196, -0.034385327, -0.04065469, -0.040382348, -0.005180486, 0.02139485, 0.00066247006, -0.029504769, -0.047664054, 0.07749657, -0.018252965, 0.01660996, 0.016128201, 0.03468799, -0.06827269, 0.03589564, -0.00046616426, 0.050765187, 0.013135967, 0.032419536, 0.0049995864, 0.016447293, -0.027818775, 0.051526558, -0.0028337617, 0.032140486, -0.009744224, 0.028088383, 0.0039579235, -0.01859538, 0.010886028, 0.06394401, -0.009551894, 0.009985755, -0.0055015334, -0.052608006, -0.025607228, 0.048764605, -0.03518049, 0.063724354, -0.021986006, 0.0135826245, 0.012810074, -0.018492507, 0.07473736, 0.012960161, 0.0029703062, -0.004926531, -0.015626939, -0.020368345, 0.03458909, -0.034280468, -0.001756316, 0.0023392697, -0.025422351, 0.0071287593, -0.0046124416, 0.03146857, -0.021997685, -0.01837025, 0.053931925, -0.009939536, -0.012537731, -0.05970878, 0.036024854, -0.026557447, -0.06432868, -0.05431062, 0.0065101474, -0.035786554, -0.00031992883, 0.017335048, 0.012183387, -0.023159118, -0.0656725, -0.0068165343, -0.01177686, 0.02990359, -0.012949477, 0.027033549, 0.059682935, 0.015443057, -0.036706705, 0.0032253794, 0.025097234, 0.053736113, -0.0060057165, 0.022892741, 0.02277744, -0.0181832, -0.013801543, 0.011357908, -0.033999924, 0.02563804, 0.04232118, -0.015021621, 0.010279966, -0.0060690804, 0.019658973, -0.008473951, 0.0021784978, 0.016288415, -0.006624701, 0.049151257, 0.05936686, -0.020123584, 0.0026667775, -0.019087264], [-0.018850485, -0.079456784, -0.0383701, -0.0374874, -0.024204776, 0.066711396, 0.024032801, -0.015101035, 0.018997349, 0.015673524, -0.00018846174, 0.012416661, -0.07432545, -0.016718559, -0.015947971, 0.06288889, -0.04269939, -0.046174392, 0.03188643, 0.04815286, -0.01861941, 0.000927486, -0.0060145417, 0.04149145, -0.0117157, 0.033755194, 0.0013371501, 0.017412545, 0.021071188, -0.004351107, -0.008553068, -0.029560719, 0.021419702, -0.00015688234, 0.03509751, 0.014918915, 0.00072036515, 0.0057644434, -0.011818554, -0.04992942, -0.05185006, 0.012380896, -0.029258557, 0.02300032, -0.0024502561, 0.030908737, 0.007925539, -0.0011754127, -0.0140752755, -0.019654302, 0.04192322, -0.02298561, -0.02590981, 0.026469868, -0.020320386, 0.029202182, 0.019431597, 0.03947398, 0.0179759, 0.01580745, 0.033155568, 0.003365361, -0.06996267, -0.052635357, 0.022002336, -0.019660896, -0.00961586, 0.0023637617, 0.016160022, -0.022928918, -0.0021314183, 0.038947403, -0.03762538, -0.01647404, 0.026777292, 0.009713769, -0.046955634, 0.032932863, 0.0037874973, -0.022044187, -0.0006754691, 0.032860827, -0.0036446927, -0.056758687, -0.0695543, 0.069755696, 0.01016628, 0.035760928, 0.022861447, -0.020004844, -0.015190067, 0.012186346, 0.005088213, 0.039518625, -0.0030902775, 0.017258834, 0.008404937, 0.035949774, 0.044995427, 0.047193047, 0.0066134087, -0.010664448, -0.06197575, -0.037875734, -0.012000675, -0.025194898, 0.048020963, -0.007189764, 0.008550531, -0.04692678, -0.006527612, 0.0044132513, -0.0070971185, -0.11254741, 0.007439546, 0.017283691, 0.04316814, -0.06276613, -0.044314634, -0.022857895, 0.0021296428, 0.0034770302, -0.012003211, 0.0130388625, -0.006094695, -0.039153367, -0.023701536, -0.00980077, -0.047530912, 0.028039454, 0.020171747, 0.009777308, 0.006533002, -0.069462985, -0.041659933, 0.026171576, 0.0037749894, 0.064763874, -0.026777292, 0.022465754, -0.018313255, -0.0135875065, 0.015204778, -0.009969384, 0.012949784, -0.03217293, 0.017572852, -0.03533404, 0.016347723, -0.01951175, 0.010987851, 0.014446872, -0.023538692, 0.010417901, 0.010632394, -0.08176144, 0.022272473, 0.015396537, -0.052584626, 0.038736876, -0.043149747, -0.029119238, 0.018007606, 0.011656726, -0.0043566874, -0.019716699, 0.002629206, 0.024127668, -0.02821929, 0.034352794, 0.05168772, -0.017609123, 0.010308324, 0.015056107, -0.005054224, -0.023402166, 0.010430964, -0.028841874, 0.022298854, 0.06538734, -0.0078595895, 0.023045596, -0.00018059858, -0.037805982, -0.010346117, 0.024778532, -0.008312228, -0.025383234, 0.020395465, 0.022319146, 0.030905696, -0.04210585, -0.0006791471, -0.023388531, -0.017121863, 0.05292249, -0.022570767, 0.01099115, 0.012388505, 0.002312778, 0.029438585, 0.025448674, 0.03565554, -0.027101964, -0.02923668, -0.027159795, 0.021723067, 0.010764386, 0.042531982, -0.04066512, -0.0270837, 0.026540384, 0.058152746, 0.04369522, 0.008946479, 0.04362166, 0.051736426, -0.05764443, 0.035104994, 0.081429414, -0.054835007, -0.017637532, 0.016776454, -0.05398731, -0.024490895, -0.0037318529, -0.010915055, 0.029058618, 0.009951185, -0.022634178, 0.03514266, -0.0093754, 0.006137816, -0.0426375, -0.021134093, -0.019791778, -0.04491781, 0.017960398, -0.047426406, 0.02048475, -0.053296875, 0.006977396, 0.018092325, -0.027646802, -0.051310293, -0.014620877, -0.041828867, 0.00828014, -0.02769449, 0.0064877253, 0.046279658, 0.003261428, -0.047229573, 0.020886533, 0.0035774754, -0.0015688234, -0.0015937128, 0.019228477, 0.003041767, 0.015439245, -0.007456287, -0.062647924, 0.0068642683, -0.01131785, 0.0290713, -0.005070965, 0.008612421, -0.015012512, 0.027240962, -0.037824243, -0.002390395, -0.07014936, 0.03287503, 0.01269466, -0.036416996, 0.010178963, 0.0075709363, 0.014782704, 0.014665011, 0.020914434, -0.041517384, 0.019583026, 0.009726452, 0.03720686, 0.022208808, -0.0075810826, 0.008028901, -0.059947822, 0.0012251281, -0.026759028, -0.042054106, 0.0019392788, 0.027759423, 0.042763308, 0.037718724, -0.02450459, 0.053798087, 0.0050659236, -0.016377654, -0.026286226, 0.037058223, -0.014533114, 0.011403076, 0.012947295, -0.0007440814, 0.003992541, -0.030144745, 0.05081111, 0.014360632, 0.00040685412, -0.026812803, -0.040668163, -0.05114187, -0.004889859, -0.008047798, -0.01835517, 0.00060584233, 0.04815286, -0.010357024, 0.022114702, -0.02065013, -0.06031181, 0.022264862, -0.022231888, 0.050218582, 0.053141642, 0.014724873, 0.014120679, -0.05538695, -0.019884108, 0.022612872, 0.04701169, -0.006199706, 0.012479565, -0.004614395, 0.040432777, -0.001230962, -0.0069383336, 0.0123639, 0.014780168, 0.0033015045, -0.06512101, 0.0069682645, -0.04213426, -0.002509103, -0.051438127, -0.010863309, -0.049520537, 0.015253985, -0.015843214, -0.010564002, -0.0032901221, -0.005211994, -0.008649962, 0.0031472857, 0.033755194, 0.017912742, 0.012057238, 0.024040919, -0.0023386502, -0.013979649, -0.0522701, -0.066439986, 0.0333108, -0.012768726, -0.013387632, 0.060339205, -0.015945435, -0.004212107, -0.022037087, 0.0469952, -0.0019716192, -0.03892153, 0.03820472, 0.017000748, 0.04168479, -0.03441164, -0.014760384, 0.025228253, 0.0080133015, 0.020874863, -0.013201959, 0.037182003, 0.018224223, 0.014513836, 0.0037996725, 0.061000723, -0.014396903, -0.0038240228, 0.033224054, 0.018733552, 0.04851, 0.018628035, -0.005312439, 0.015591339, -0.05358908, 0.06592457, 0.028063804, 0.053398333, 0.0047351327, 0.03432185, 0.0072351038, -0.004803848, -0.012426807, -0.035382103, -0.035338983, -0.029695531, -0.0284737, 0.019490696, -0.012108729, 0.03272151, 0.023613011, -0.045299806, 0.012064087, 0.016094819, -0.020437444, -0.048156917, -0.0056315307, -0.015925143, 0.00040381032, 0.006260582, 0.032568622, -0.060599957, 0.06001225, -0.00036982127, -0.0092977835, -0.03117152, -0.0033704974, -0.04438464, -0.0035592124, -0.013803966, 0.021630231, 0.0147347655, 0.094081715, 0.0011718617, 0.0071730865, -0.030860038, -0.0037114024, -0.053040184, -0.016621158, -0.010406739, -0.010167802, 0.018469756, 0.01924694, -0.035810772, -0.028985059, -0.00361603, -0.021577472, 0.0326658, -0.03144039, 0.021006761, -0.052312713, -0.03191116, -0.026753955, -0.022511918, 0.0044804686, 0.04662893, -0.083535984, -0.024779547, -0.054977052, -0.025385262, 0.0027329486, 0.030432891, 0.04207947, -0.026566762, 0.02690919, 0.02344408, -0.0058755414, -0.01401589, -0.0074613597, -0.020583166, -0.04620077, -0.026476972, -0.049335882, -0.02834789, -0.01603269, 0.054885738, -0.008837663, -0.020998644, 0.02758745, 0.021533845, 0.0016061099, 0.04991826, -0.0032447823, 0.0050121183, 0.030327879, -0.006256016, -0.029562872, -0.011174537, 0.0061025578, -0.03256253, 0.010659375, 0.02321922, 0.032877058, -0.027594551, -0.025636692, -0.00035866068, 0.045087755, -0.039489605, 0.0028487397, 0.05267797, 0.04444298, -0.038697813, 0.014060311, 0.015632305, -0.055411298, 0.033152524, 0.045790877, -0.029543342, -0.006367622, -0.03135922, -0.0353712, -0.0053403405, -0.019858615, 0.03403015, 0.048994977, -0.012304673, -0.009699564, -0.0024188035, -0.042692285, -0.01957364, -0.018811677, -0.007985907, 0.041489482, 0.012911278, -0.04011825, 0.029727364, -0.021509748, 0.021355277, -0.014415421, -0.028078515, -0.030341577, 0.01742675, -0.015302178, 0.018282562, 0.0056776945, 0.008579447, 0.05130617, 0.044804685, -0.029224504, -0.0063940017, 0.010812072, -0.01370406, -0.010930274, -0.015420633, -0.003683501, -0.008034608, 0.014964318, 0.002659517, -0.0058522057, -0.0028099315, 0.0049816803, -0.04855464, -0.068751246, 0.067986235, 0.010627796, 0.00058872096, 0.053075694, 0.05116799, 0.0580107, -0.006542133, 0.027407357, -0.0015714932, -0.011807902, 0.011976705, 0.046775036, 0.037681185, -0.05998562, -0.060283404, 0.041914597, -0.053327315, -0.034848932, -0.032186117, -0.03968045, -0.00052860595, -0.007006819, -0.025741387, -0.042998698, 0.0053890417, 0.006017839, 0.01441339, 0.019564057, -0.0040000556, -0.046949543, 0.011348288, 0.049330298, 0.014823289, -0.023808576, 0.04240414, -0.010409276, 0.030748433, -0.021775827, -0.0019596976, -0.005470717, -0.06835149, -0.0124682775, -0.04237168, 0.037005972, -0.01727012, -0.0100722, -0.017030548, -0.036562085, -0.017570823, -0.0030656103, 0.002194831, -0.014694783, -0.021804744, 0.041239385, -0.0015394001, 0.0064985054, 0.013812749, -0.009358501, -0.029282337, -0.052280247, -0.040409185, 0.015850062, -0.014643197, 0.025535932, -0.04480874, -0.021057999, -0.020251391, -0.014672114, 0.009381235, 0.005078574, -0.03575649, 0.025216332, 0.0019338254, 0.0728766, 0.018431202, -0.0040198406, 0.037596975, 0.02512045, 0.061188422, -0.0049342476, -0.029599905, 0.08648644, -0.0012743361, -0.02386793, -0.013778061, 0.060720187, -0.005205399, 0.032513835, 0.025798647, 0.03411379, 0.029025644, 0.020102248, 0.015524756, -8.1167906e-05, 0.010873455, 0.024541117, 0.055815853, -0.04656831, 0.012608229, -0.02272346, 0.056431986, 0.029076373, -0.036918968, 0.015862238, -0.005587903, -0.04333859, 0.022793913, -0.06603212, 0.031585477, 0.021497194, 0.03831125, -0.011506565, 0.05596527, 0.0011667886, -0.044764098, -0.025749503, 0.036853272, 0.010880558, -0.015842961, -0.022341466, -0.023989173, -0.05227213, -0.045813195, -0.023389546, 0.019003436, 0.0059412373, -0.032619353, -0.009675468, -0.03205422, 0.003235302, 0.032944024, 0.05265768, -0.011920522, 0.022397824, -0.051726278, -0.044873673, -0.0028510226, -0.006140479, -0.0004195366, 0.021651538, -0.0040568733, 0.011112901, 0.050197277, 0.027199365, 0.006633447, 0.028940415, 0.0605959, 0.042903326, 0.01718591, -0.032264244, 0.008572091, -0.013981172, 0.012536382, -0.005604644, -0.032385994, -0.049680848, -0.019823233, 0.04241784, 6.594892e-05, 0.027751306, -0.010328616, 0.024729831, 0.028449478, -0.051245354, 0.044784393, 0.02895665, -0.0066618556, -0.007558309, -0.042012505, -0.014501661, 0.04567318, -0.028571103, -0.04857392, -0.04173958, -0.014107997, -0.0074811443, 0.0025994023, -0.061906762, 0.036428154, 0.009460373, 0.03275937, -0.009945732, -0.052958, -0.06915633, 0.017716417, 0.019458039, 0.023774587, 0.0039396873, 0.014226197, -0.025837267, -0.034028627, -0.038007885, -0.034929086, 0.006169395, 0.017899172, -0.009921762, 0.05259477, 0.048390273, 0.026694855, 0.029800795, -0.0053261365, -0.0399965, 0.0717849, -0.07813425, 0.03541432, -0.0162975, 0.0019414349, -0.07112744, -0.0163878, 0.022753473, 0.029177325, -0.01516115, -0.0648387, -0.005766219, 0.0010556901, 0.007933338, -0.021165546, 0.038295016, 0.009653907, -0.043810375, -0.0028215994, -0.020228056, -0.07301865, -0.002729778, -0.027978957, 0.028895775, -0.028217513, -0.010738514, 0.013790427, -0.024853613, -0.06624112, 0.029415248, -0.0419983, -0.026919335, 0.01297266, -0.024490386, 0.048052415, -0.005831914, -0.018065946, 0.039422616, -0.06514739, 0.06656199, 0.015040413, 0.062787116, -0.01724133, -0.028736483, -0.0053253756, 0.022919279, -0.004910658, 0.04638898, 0.0071650967, 0.011999153, 0.01394008, 0.03431373, -0.029609038, -0.06273468, -0.026164666, 0.025646204, 0.016495347, -0.01642534, 0.053684454, 0.010654301, 0.010120116, -0.007374104, -0.024569526, 0.012609941, 0.018096384, 0.030920913, -0.01800101, 0.02788016, -0.0004139563, 0.006729834, 0.019842003, 0.0053859977, -0.037518848, 0.012584576, 0.010530014, 0.05094605, 0.02488836, 0.04711949, 0.023784224, -0.031378496, 0.00791311, -0.0037101975, 0.005599571, -0.036979683, -0.0012702777, 0.055283457, 0.03276545, 0.0305724, 0.010417267, -0.0125683425, 0.011367565, -0.044697136, -0.017204806, -0.05796606, -0.01227005, -0.0038260522, -0.02789741, 0.019494502, 0.03698111, 0.007994277, -0.009499181, 0.046168305, 0.040668163, -0.0052586654, 0.02994284, -0.010374273, 0.068101905, -0.040111147, -0.0046265707, 0.003399667, 0.01795434, -0.004346541, 0.03538515, -0.033113968, 0.012287299, 0.050490495, -0.025188684, -0.010063298, 0.049532715, -0.03843706, -0.03241846, -0.046536606, -0.0035389205, 0.05247201, -0.019179976, 0.049832527, 0.03688422, 0.0032720813, 0.0077555934, -0.0029687162, -0.010261399, 0.02958494, 0.0069916, 0.014701537, 0.013889858, 0.0018201902, 0.018846173, 0.054246288, -0.01447376, -0.036172476, 0.07608705, 0.009018261, 0.021717995, 0.07243018, -0.036626, 0.035906903, 0.00516342, -0.011104023, -0.012429344, -0.018534692, -0.06301369, -0.06830076, 0.025884192, -0.012644438, 0.06296803, 0.020993065, 0.029221207, 0.025952421, -0.04828577, -0.04641181, 0.026735695, -0.050361007, -0.045985676, -0.05588207, -0.0028423986, -0.019313904, 0.013230114, -0.0031612364, -0.057488184, 0.08780135, -0.020564903, 0.012267514, -0.036425374, -0.006348345, -0.04484121, 0.043513615, -0.017240062, 0.014180033, 0.033933256, 0.0057434533, -0.017969053, 0.0011363507, -0.030494783, 0.008053885, -0.02666721, 0.016159514, -0.00692172, 0.035038155, 0.015775235, -0.013905869, 0.012155147, 0.015380303, -0.014330193, 0.033128936, -0.0013108617, -0.039056983, -4.33741e-05, 0.036026374, 9.23285e-05, 0.016390843, 0.013016288, 0.007761681, 0.0033304207, 0.015283917, 0.03946333, 0.027809137, -0.0064132786, 0.021253817, 0.00687898, -0.02270539, 0.014265259, -0.042525895, -0.010033621, -0.017224843, -0.032844212, 0.01918505, 0.004896961, 0.018017245, 0.010737499, -0.015025194, 0.055973385, -0.008168091, -0.068910785, -0.07909001, 0.050750233, -0.0047752094, -0.027873058, -0.0060505597, 0.038317844, -0.0087358225, -0.007085054, -0.008619778, -0.026114948, -0.010103375, -0.05044078, -0.011679047, -0.0014853725, 0.02112192, 0.009499181, 0.039302006, 0.0023356064, -0.01122254, -0.03406059, -0.0011277266, 0.008684966, 0.02378727, 0.032143377, 0.023340464, 0.01307615, 0.028163234, -0.008852881, 0.0050608185, -0.00053875195, 0.040304936, 0.053200487, -0.00801197, -0.0044434355, -0.015872257, 0.012749448, 0.0149734495, 0.00372009, 0.03269659, -0.004349585, 0.048600297, 0.053676333, -0.056394443, 0.018723153, -0.0053236], [-0.030278739, -0.0653635, -0.06514516, -0.03899555, 0.0027952816, 0.036229778, 0.034321822, -0.011430433, 0.013713872, 0.02066748, 0.0136266155, 0.03282904, -0.08233208, -0.029878577, -0.012964841, 0.047048647, -0.018637415, -0.052766025, 0.045537036, 0.052498788, -0.023200352, -0.0036253692, -0.03778679, 0.053329125, -0.0107084615, 0.0015955593, 0.0012902865, 0.00011981958, 0.046963174, -0.0057018604, 0.0184629, -0.028759753, 0.013502201, 0.03696243, 0.019872751, 0.023903545, 0.009471598, -0.029509706, -0.039194103, -0.03814893, -0.08282662, 0.0055178064, 0.0032989818, 0.016567666, 0.009358647, 0.03949518, 0.031447425, 0.018582974, 0.035098232, -0.02088473, 0.047797587, -0.010683213, -0.014673321, 0.009452773, -0.008067852, 0.012045047, 0.038633294, 0.037624367, -0.014562531, -0.021308552, 0.046578526, 0.00575134, -0.066854745, -0.011757837, 0.017588802, -0.0044836947, 0.020071434, -0.013454391, -0.0012943568, -0.037244305, 0.0017568134, 0.013812069, -0.006077346, -0.024761695, 0.047569137, -0.0071403314, -0.045489214, 0.010247755, 0.0060209977, -0.0038545148, 0.015878512, 0.028944967, -0.02021313, -0.0486035, -0.066006094, 0.05636252, -0.02906183, 0.0410073, 0.021252904, -0.0043430147, -0.022135332, 0.011820164, 0.036571175, 0.03658593, 0.02317803, -0.023989357, -0.018545069, 0.039905265, 0.014541925, 0.046735745, 0.014576268, -0.038266968, -0.0364511, -0.020882158, 0.02475521, -0.013495093, 0.032382835, -0.033028737, 0.0007143384, -0.022828048, -0.03408969, 0.017472798, 0.015552124, -0.08689896, 0.0353221, 0.00665393, 0.01867354, -0.05415947, -0.04263415, -0.040232923, -0.038275104, -0.010126918, -0.0018021273, 0.026841749, -0.0024777977, -0.0639806, -0.015872661, -0.010565493, -0.05288445, 0.009939683, 0.019641763, -0.0156839, 0.009681219, -0.0215052, -0.047922745, 0.0587757, -0.0050398, 0.060566127, -0.012057767, 0.029999161, -0.015047407, -0.0069765016, -0.01028973, -0.013825297, 0.05275496, -0.029208504, 0.027902698, -0.026288059, -0.039474957, -0.036746707, 0.012943441, 0.00676828, -0.014455685, 0.003818963, -0.009079196, -0.09422144, 0.002299722, 0.007678629, -0.02073006, -0.002930619, -0.016149443, 0.008055132, 0.046277322, 0.008112117, -0.033881214, -0.0318542, 0.017890515, 0.022814564, -0.023399161, 0.0611665, 0.06294319, -0.00491184, -0.002384181, 0.030557048, -0.05685579, -0.023601659, 0.038173348, -0.025286766, 0.013427679, 0.055420756, -0.008925159, -0.0012154946, 0.008770998, 0.0023246368, -0.02216535, 0.044295087, -0.005834272, -0.017377656, 0.029137272, 0.018019238, 0.024337877, -0.051003456, -0.0011407027, -0.008185128, -0.019526267, 0.037089504, -0.028309856, 0.03270693, -0.005507758, 0.050972424, 0.030896122, -0.0022091577, 0.048779547, -0.048696104, -0.06762404, -0.02897904, 0.018533114, 0.026282972, 0.054816823, -0.023245763, -0.022379296, 0.02995337, 0.023642361, 0.040091477, 0.041660585, 0.027534591, 0.017767895, -0.033074275, 0.014095464, 0.058884077, -0.032719776, 0.009315146, 0.013717943, -0.058154475, -0.029697958, 0.022785563, 0.012469377, 0.04093912, 0.012684546, -0.023746157, 0.05362321, -0.031029964, -0.00087918574, -0.053986482, -0.027242037, 0.008071413, -0.031631354, 0.023180636, -0.06400961, 0.0015670671, -0.027714703, 0.017858364, 0.034007393, -0.0026080473, -0.03573524, 0.010057722, -0.041183338, -0.028097311, -0.012999535, -0.016584456, 0.043100454, -0.010197512, -0.022632927, -0.008994355, 0.00035157253, 0.009595742, 0.014453651, 0.009837925, 0.024789171, 0.004021588, -0.0032531908, -0.06978944, 0.007909618, -0.022770556, 0.05859534, 0.023993682, 0.0107551105, -0.041733593, -0.010098361, -0.035370436, -0.0076369084, -0.07003162, 0.03008718, 0.01259403, -0.019935079, 0.04986988, 0.013385196, 0.0025246064, 0.036086302, 0.007773645, -0.04625087, -0.022089286, 0.0027693333, 0.020467525, 0.023305545, 0.0043089893, -0.018726453, -0.02275758, -0.01801313, -0.002610337, -0.021136073, 0.024428949, 0.022437552, 0.03827765, 0.048524134, -0.021709986, 0.027586488, 0.012256195, -0.0049739117, -0.04942367, 0.008231554, -0.0018428303, 0.010775621, -0.002071785, -0.00026609615, 0.0033335793, -0.01810166, 0.028770437, 0.017326267, 0.00082118384, -0.03512876, -0.021705024, -0.052490644, 0.0022122103, 0.054890092, -0.027063325, 0.03168325, 0.051279727, 0.0032593596, 0.024879735, 0.008572681, -0.04764495, 0.0134840915, -0.05914763, 0.03081017, 0.036148373, 0.0033770807, 0.022316525, -0.042722933, -0.029589077, 0.010526062, 0.04586419, 0.018082581, 0.005257561, 0.0059978478, 0.025804712, -0.023557078, 0.011558138, 0.0033651243, 0.036216807, 0.019819202, -0.061592355, 0.0018926915, -0.022626314, 0.02141934, -0.04144562, -0.009377536, -0.07802773, 0.015982559, 0.010626039, 0.0077839484, -0.00901954, 0.02193894, -0.014967527, -0.027197774, 0.014990597, 0.023366727, 0.014018637, 0.015513456, -0.046117567, -0.009224708, -0.0024566832, -0.042879637, 0.022251844, 0.008804068, -0.027771305, 0.030898824, -0.020245185, 0.0094074905, -0.052200634, 0.040815376, -0.008089221, -0.0108963, 0.03315212, 0.023812043, 0.043772053, -0.051147442, -0.022954483, 0.008732838, -0.009004531, 0.02374412, -0.035197195, 0.055776395, -0.006113597, 0.04594763, 0.021550227, 0.038602766, 0.02250573, -0.027977746, 0.05296992, 0.026549578, 0.02347014, 0.03287483, -0.0005656451, -0.006240794, -0.018459847, 0.042536717, 0.031714667, 0.022283897, 0.028973443, -0.001102194, -0.014713388, -0.007872095, -0.029003972, -0.01585587, -0.024016831, -0.06510859, -0.013221064, -0.008361932, 0.008086678, 0.041466225, -0.010981681, -0.016657721, 0.035867523, 0.014448308, -0.015821273, -0.018756472, -0.01179854, -0.021380546, -0.0062346887, 0.017945018, 0.028500272, -0.03235485, -0.012254923, 0.03785383, 0.014486213, -0.01941128, -0.027824093, -0.032386392, 0.02949406, -0.03288704, -0.010753744, 0.016895834, 0.108648635, 0.012294354, 0.0075911176, 0.015017515, -0.0131516615, -0.046840552, -0.023289263, 0.014138457, -0.032651983, 0.018071134, 0.006130896, -0.03303815, -0.0035940788, -0.025101058, 0.03408982, 0.036320087, -0.001474913, 0.033342406, -0.010721945, -0.029799715, -0.034501936, -0.059437636, 0.009536724, 0.06491321, -0.062244624, -0.021982696, -0.045606486, -0.048382692, -0.013166925, 0.060975704, 0.020659594, -0.0016988432, 0.029049253, 0.026769374, -0.04906243, 0.016728189, -0.00963441, -0.0049393144, -0.020113153, -0.030356329, -0.03175753, -0.006349675, 0.0071204887, 0.069622554, -0.008820349, -0.0107650645, 0.010439981, 0.011931842, 0.023234824, 0.017072128, -0.016872939, -0.010663435, 0.022773862, -0.010726269, -0.0057898806, -0.0057406556, 0.006004208, 0.014935473, 0.022592733, -0.009839515, 0.05591377, -0.010595001, -0.026337732, 0.029656237, 0.054425057, -0.01491156, -0.0043468303, 0.04320526, 0.032823697, -0.07719739, -0.0040601287, -0.011765723, -0.06813995, 0.012619884, 0.043391924, -0.032457624, -0.019283067, -0.027756423, -0.03150161, -0.00829528, -0.008685838, 0.060084306, 0.032811742, -0.014333577, -0.05792043, 0.0036856607, -0.013468637, -0.018983899, -0.012639058, 0.004733764, 0.024450319, 0.017046943, -0.013876685, 0.03413001, -0.04779351, 0.039170574, -0.00959269, -0.0032739236, -0.058272514, 0.0006347131, 0.0067256694, 0.0041295784, -0.00061487034, 0.0042351517, 7.4919044e-05, 0.02324958, -0.031727005, -0.027404848, 0.009101964, 0.013431749, -0.0015004158, 0.0018397776, -0.018799208, 0.011692966, -0.008169101, 0.022480546, -0.030970946, -0.01287132, 0.0015523124, -0.10200997, -0.060000356, 0.0743034, -0.02516822, 0.0025496641, 0.05004846, 0.038654663, 0.039270297, -0.0046870825, -0.003934076, 0.010290238, 0.015472371, 0.030300807, 0.05070378, 0.040534124, -0.0725084, -0.06032191, 0.04570341, -0.02594819, -0.005911481, -0.048076402, -0.040664375, 0.0052130423, -0.016069561, 0.014673957, -0.020377278, 0.001644403, -0.024065675, 0.019300113, -0.010735428, 0.015724305, -0.032346964, -0.0022580014, 0.038734544, 0.0062387586, 0.0014069261, 0.06396687, 0.002335846, 0.012793857, 0.017964797, 0.03582275, 0.02215263, -0.049598694, -0.039482463, -0.028410215, 0.008871737, -0.019277629, -0.012613873, -0.017104436, -0.0703084, -0.038795087, 0.018449163, 0.010214174, 0.005623125, 0.010902311, 0.047146335, 0.005083301, 0.005674004, 0.024784084, -0.01144735, -0.026681863, -0.040907577, -0.022093995, -0.013881773, -0.056835692, -0.029177722, -0.0433986, -0.007823506, -0.008413319, -0.004551618, 0.0062474087, 0.015559755, -0.038798142, 0.018516323, -0.016965028, 0.015722567, 0.03251512, -0.028367033, 0.05124513, 0.013938248, 0.073696926, -0.00032715072, -0.045497864, 0.0800344, 0.016602516, -0.029048745, -0.01599299, 0.0295036, 0.010632653, 0.035135377, 0.042944256, 0.02341112, -0.012637278, 0.019485565, 0.0051937085, -0.022479529, -0.045777313, -0.010263876, 0.043843284, -0.0061624404, -0.0030985193, -0.044457898, 0.02570092, 0.021552261, -0.0055356137, -0.0055315434, 0.009746852, -0.02766128, 0.048621822, -0.052356325, 0.039343562, 0.016188618, 0.03674654, 0.0019158414, 0.02692201, -0.0067007383, -0.021816831, -0.041252535, 0.053267565, -0.0066443267, -0.0054999986, -0.023377284, -0.041055445, -0.024765767, -0.041826446, -0.033008896, 0.0014205363, 0.005473542, -0.025487484, -0.047394626, -0.016825367, -0.020700552, 0.026633019, 0.021251058, 0.008909896, -0.0012098979, -0.07157223, -0.031793147, -0.028084591, 0.037515994, 0.0045218538, 0.0028105453, -0.007649342, 0.017923076, 0.07835743, 0.04069083, 0.046314552, -0.0147202555, 0.040515777, 0.040308733, 0.0069539878, 0.0010241903, 0.003041535, -0.016020719, 0.0351252, -0.028428022, -0.052113123, -0.058921725, 0.010024035, 0.024450827, 0.011041718, 0.027829435, 0.023696803, 6.512487e-05, 0.017334154, -0.043262247, 0.010420997, 0.02393339, -0.00452745, 0.0012027749, -0.044317476, -0.007165771, 0.03407252, -0.022113962, -0.008338018, -0.032033294, -0.038850803, 0.004119148, -0.0074913953, -0.04671081, 0.05168269, -0.0051316363, 0.0154055925, 0.016924325, -0.028489077, -0.01715805, 0.0241018, 0.02745929, 0.012529668, 0.0036355448, 0.019607674, -0.020544352, -0.013936976, -0.06596539, -0.020576533, -0.024327701, 0.034962457, -0.032432184, 0.0074588326, 0.041106004, 0.028750593, 0.013184733, -0.01974759, -0.04858824, 0.03139483, -0.049396195, 0.011537278, -0.0190592, -0.014593058, -0.08079147, -0.009897963, 0.011829576, 0.033451796, 0.0047368165, -0.06855206, -0.011886306, -0.008172663, 0.015122707, -0.016354945, 0.00871096, -0.009524004, -0.035804432, -0.0072339484, 0.0064417655, -0.09289248, -0.013636537, -0.009067112, -0.00431147, -0.031935606, -0.036650103, -0.012643383, -0.00019893612, -0.03195494, 0.023202611, -0.043201193, -0.001303515, 0.013881773, -0.06994818, 0.028910862, -0.018021908, -0.04386262, 0.02754782, -0.045735974, 0.05204291, 0.03692962, 0.030323131, -0.02441572, -0.008424894, 0.02595226, 0.0085349195, 0.018628765, 0.049389075, 0.016770542, -0.014263873, -0.008720881, -0.0018285842, -0.020295555, -0.05953329, -0.04104088, 0.019094815, -0.0034302806, -0.013851245, 0.04134615, 0.016701411, -0.015633022, 0.04400406, 0.008558832, -0.008250507, 0.03357187, 0.009666464, -0.018673442, -0.0023643381, -0.0024046914, 0.043597274, 0.012888619, -0.02455831, -0.02903348, 0.013464566, 0.0236879, 0.034674924, 0.02220351, 0.042377844, 0.0037960676, 0.00025286767, 0.0008262718, -0.006425993, 0.012708508, -0.08890155, 0.001613049, 0.048326727, 0.025615443, 0.02654805, 0.01682562, -0.021833114, 0.021928765, -0.0452048, 0.0031524505, -0.0622174, -0.02961757, 0.0020593195, -0.03375554, 0.009953929, 0.03525189, 0.0006296252, 0.0013940792, 0.043654013, 0.07774091, -0.002428954, 0.01866845, -0.010151848, 0.05232783, -0.02356808, 0.015481403, 0.011759109, 0.01217498, 0.0050151236, 0.041541524, -0.046051424, 0.015273913, 0.024946896, -0.026357256, -0.018002193, 0.022181695, -0.05691099, -0.0050306655, -0.035232045, -0.0023430604, 0.05860017, -0.029433897, 0.04017187, 0.027788984, -0.0059731714, -0.0038306653, 0.0042423382, 0.00077666494, 0.018327817, 0.023051152, -0.017338479, 0.009516626, 0.010474419, 0.02680499, 0.028832255, -0.0055179335, -0.06698907, 0.056650497, 0.00655319, 0.029264469, 0.05113269, -0.053107295, 0.03976484, 0.038405355, -0.010984098, -0.013183716, 0.009050322, -0.030686025, -0.07450285, 0.013197962, -0.028544027, 0.03381202, 0.01844929, 0.026756018, -0.0009935875, -0.05671155, -0.03468052, 0.0033788614, -0.019810172, -0.0657924, -0.031272147, 0.014386491, -0.015407374, 0.017355777, 0.006258093, -0.032368075, 0.08950599, -0.027111534, 0.023353372, 0.020639496, 0.006362649, -0.06861566, 0.027657209, -0.01002109, 0.079000555, -0.00011040701, 0.045503967, 0.007165262, 0.016885912, -0.06959406, 0.040362664, -0.0022747915, 0.045293093, -0.019508205, 0.013803737, -0.009107306, -0.0030242363, 0.009707167, 0.054164555, -0.015703488, 0.00051718304, 0.0025714147, -0.03485796, -0.030512782, 0.02591054, -0.0135927815, 0.03939037, 0.011819401, 0.005219148, 0.038792036, -0.017461605, 0.080950215, 0.03774902, 0.018790305, 0.015336398, -0.007731543, -0.0044997213, 0.03525367, -0.048333846, -0.026424542, 0.0142250145, -0.027753625, 0.030875294, -0.0059253452, 0.050931722, -0.0064242124, -0.024763733, 0.029322727, -0.017160403, -0.038779825, -0.06545863, 0.05081673, 0.007463157, -0.03556632, -0.029259382, 0.023502955, -0.021343658, 0.00779565, 0.016287941, 0.0021837184, -0.015743937, -0.05652839, -0.011030525, 0.011837209, -0.0092182215, 0.0008456057, 0.043875843, 0.038142823, 0.0277493, -0.010162532, -0.0009275206, 0.004672137, 0.05715318, 0.00881577, 0.027072547, 0.025059845, 0.01932377, 0.0010867713, -0.0074071907, -0.02849213, 0.056369647, 0.06461812, 0.011953466, 0.0012790931, -0.0045088795, 0.0053949337, -0.010967944, -0.011414151, 0.01819477, -0.0016932465, 0.04985716, 0.045463264, -0.06577103, 0.00725837, 0.00021979643]], 'embedding_model': 'text-embedding-3-large', 'embedding_dimensions': 1024}]\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'content': ['Save both time and money with [product].', 'Save both time and money on [task].', 'Is [product] worth the price? Let’s find out!', 'Why is it challenging and costly to find a good [product category]?', 'Searching for an affordable [product type]? Check this out!', 'How to locate an affordable [service].', 'I can’t believe this costs only [price].', \"Don't waste your money on [X]; instead buy [X].\", 'What’s inside [product]?', 'Common questions I get about [product].', 'Now you can get X delivered right to your door.', 'Thinking of trying [product type]?', 'Allow me to introduce you to [product].', '[category] Tip #X.', 'Here’s how to achieve [value prop].', 'I know this sounds unbelievable, but…', 'How to get X done in just 10 minutes.', 'How to find time for X.', 'Here’s my biggest life hack for X.', 'Add more [value prop] to your day.', 'Before you try [product type], watch this first.', 'Hate [the worse alternative]? Give this a try!', 'Thinking about [worse alternative]?', 'Instead of [worse alternative], try this.', 'Still using [the worse alternative to the product]? Watch this.', 'Something that’s always annoyed me about X.', 'Don’t buy X that doesn’t work. Try this instead.', 'I tested every [product category] so you don’t have to: here’s what I found.', 'Stop doing [worse alternative]. Try [product] instead.', 'Dealing with [negative experience]? I used [product] to help.', 'Why millennials are switching to [product].', 'How to do X without [worse alternative].', 'I only get my [product category] from [brand name].', 'I no longer buy my [product category] from [worse alternative].', '[Worse alternative] can be difficult to deal with.', 'Your new X alternative.', '[value prop] without the [negative side effect].', 'I kept experiencing [pain point], so I tried this instead!', 'If you have [pain point] — you need to see this!', 'I wanted to stop doing X, so I tried this instead.', \"Your X isn't [adverb]; you just need X.\", 'My secret to [popular trend] revealed!', 'Guys, it’s here…', 'What I ordered vs. what I received.', '[Product] unboxing.', 'Let’s create X with [product].', 'POV: You tried [product].', 'A day in the life of X.', 'Get ready with me to do [task].', '“Put a finger down” [product category] edition.', 'Trying home remedies for X.', '[Product category] ASMR.', 'TikTok made me try [product].', 'Things TikTok made me try #13.', 'This [product type] is going viral on [social media platform].', 'I tested the viral [product type] to see if it lives up to the hype.', 'This [product type] has over 5,000 reviews… let’s see if it’s worth it.', '[Publication] can’t stop raving about us.', 'It’s so good it sold out in a week.', 'Are you [accomplishing the goal optimally]?', 'Life Hack: Try [product] for [pain point].', 'My go-to [product] for [pain point].', 'How to easily [task].', '[Task] has never been easier than with [product].', 'My favorite [product] to make [hard task] simpler.', 'Here’s my top product for [task].', 'Struggling to do [task]?', 'I’ve been struggling with [task], but [product] has really helped.', 'Easiest way to do [task]?', 'Make your week easier.', 'Why adults avoid [task]… [product] makes it easy.', '[Product] made [task] so much easier! You’ve got to try it.', 'When I use [product], it’s one less thing I have to worry about.', 'How to do [X] in half the time.', 'This trick/hack/method will save you hours...', 'Easy hack to [X]...', 'Simple [X] that will make you [X].', '5 Ways [product] Helps with [pain point].', '3 reasons to buy [product].', '3 reasons to try [service].', 'Get [value prop] in 3 steps.', 'Here are 3 ways [worse alternative] affects your life.', '5 things you didn’t know about [topic].', 'The ultimate [X] checklist to [action].', 'Reasons why [X].', 'Here are the 3 best ways to [X].', 'Here are [X] mistakes you might be making...', 'If you want [X], do these 5 things...', 'The internet’s #1 [product type].', 'The best way to [accomplish the goal of the product].', 'What makes [the product type] the best?', 'My skin has never looked better with [product].', 'The best way to find X in 2022.', '[Product] changed how I do [task], and I’m never going back.', 'Why is [product] so good though?', 'After hours of researching, I found the best [product type] for [task].', 'I found the best [product category] for [value prop].', 'This is going to blow your mind.', 'How I got [X] in 24 hours.', 'Must-have [products] for [X].', \"The best [target audience] know something that you don't.\", 'Hey, [customer type], you’ve got to try this.', 'People looking for [product category], stop scrolling.', 'Wait, have you tried X?', 'Take control of your X with [product].', 'Imagine if X was also X.', 'Watch this if you X.', 'PSA: [statement about product category].', 'Did you know? [fact about product category].', 'I just found out [fact about product category].', 'Are you one of [fact about product category] people who do X?', 'New customers get [discount].', 'Take [discount] off when you try [product].', 'I didn’t know X could be related to X.', 'Why is it important to [do product-related task]?', \"99\\\\% of your [target audience] don't. To be the 1% you need to [X].\", 'This [product] is the secret to [X].', 'Is there anything worse than [X]?', 'I will never [adjective] from learning this.', 'X people start scrolling. I have the perfect [X] for you.', \"Here's a challenge for you...\", \"There's nothing more painful than [X].\", 'What would you do if...', 'Watch till the end…', \"Why you're failing at [activity].\", 'The worst mistake you can make in [subject].', 'Avoid these common pitfalls in [topic].', 'The dark side of [popular trend].', \"Don't be fooled by [misconception].\", 'Why [common practice] is ruining your [outcome].', 'What no one tells you about [issue].', 'The hidden dangers of [activity].', 'Stop doing this if you want to succeed in [field].', 'The ugly truth about [common belief].', 'Why [habit] is wasting your time.', 'Exposing the myths about [topic].', \"The biggest regret you'll have in [situation].\", 'How [action] is destroying your [goal].', 'The shocking reality of [popular topic].', 'Why [trend] is a bad idea.', \"The real reason you're not seeing results in [field].\", 'The downside of [seemingly positive aspect].', 'What you should never do in [activity].', 'Why [common advice] is actually harmful.']}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'caption': 'There are just so cute!! 🎃🦇', 'description': 'Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇', 'virality_score': 0, 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃', 'description': 'Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!', 'virality_score': 0.0, 'engagement_score': 0.05474452554744526}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'caption': 'Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'description': 'Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!', 'virality_score': 0, 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'description': 'Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!', 'virality_score': 0, 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"There are just so cute!! 🎃🦇\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇\",\n", " \"hooks\": [\n", " \"How to add more Halloween delight to your snack table!\",\n", " \"Stop serving boring treats, try these cute Halloween snacks instead!\",\n", " \"Looking for spooky yet adorable Halloween snacks? Check this out!\"\n", " ]\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"خوراکی هالوینی به مناسبت هالوین👻🎃\",\n", " \"virality_score\": 0.0,\n", " \"engagement_score\": 0.05474452554744526,\n", " \"description\": \"Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!\",\n", " \"hooks\": [\n", " \"What's inside these spine-tingling Halloween snacks?\",\n", " \"Unveil the magic of Halloween ASMR treats!\",\n", " \"Crave the spooky flavors of Halloween with these snacks!\"\n", " ]\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!\",\n", " \"hooks\": [\n", " \"Imagine if Halloween treats were both spooky and delicious—let's get creative with Chupa Chups!\",\n", " \"Simple DIY Halloween snacks that will make your party unforgettable!\",\n", " \"This trick will save you hours in preparing the ultimate Halloween treats!\"\n", " ]\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!\",\n", " \"hooks\": [\n", " \"Let’s create spooky and fun spider donuts with this easy recipe!\",\n", " \"Stop serving boring snacks – try these creepy-cute spider donuts for Halloween!\",\n", " \"Upgrade your kid’s snacks with these adorable spider-themed donuts!\"\n", " ]\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: init_branch\n", "Transition output: {'caption': 'Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket', 'description': 'Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.', 'virality_score': 0, 'engagement_score': 0}\n", "--------------------------------------------------\n", "Transition type: finish_branch\n", "Transition output: ```json\n", "{\n", " \"caption\": \"Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0,\n", " \"description\": \"Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.\",\n", " \"hooks\": [\n", " \"Halloween snacks have never been easier than with these quick ideas!\",\n", " \"Stop stressing over Halloween snacks; Rio Grande Supermarket has you covered!\",\n", " \"I can't believe how easy these Halloween snack ideas are to make!\"\n", " ]\n", "}\n", "```\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: ['```json\\n{\\n \"caption\": \"خوراکی هالوینی به مناسبت هالوین👻🎃\",\\n \"virality_score\": 0.0,\\n \"engagement_score\": 0.05474452554744526,\\n \"description\": \"Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!\",\\n \"hooks\": [\\n \"What\\'s inside these spine-tingling Halloween snacks?\",\\n \"Unveil the magic of Halloween ASMR treats!\",\\n \"Crave the spooky flavors of Halloween with these snacks!\"\\n ]\\n}\\n```', '```json\\n{\\n \"caption\": \"Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!\",\\n \"hooks\": [\\n \"Imagine if Halloween treats were both spooky and delicious—let\\'s get creative with Chupa Chups!\",\\n \"Simple DIY Halloween snacks that will make your party unforgettable!\",\\n \"This trick will save you hours in preparing the ultimate Halloween treats!\"\\n ]\\n}\\n```', '```json\\n{\\n \"caption\": \"Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!\",\\n \"hooks\": [\\n \"Let’s create spooky and fun spider donuts with this easy recipe!\",\\n \"Stop serving boring snacks – try these creepy-cute spider donuts for Halloween!\",\\n \"Upgrade your kid’s snacks with these adorable spider-themed donuts!\"\\n ]\\n}\\n```', '```json\\n{\\n \"caption\": \"There are just so cute!! 🎃🦇\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇\",\\n \"hooks\": [\\n \"How to add more Halloween delight to your snack table!\",\\n \"Stop serving boring treats, try these cute Halloween snacks instead!\",\\n \"Looking for spooky yet adorable Halloween snacks? Check this out!\"\\n ]\\n}\\n```', '```json\\n{\\n \"caption\": \"Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket\",\\n \"virality_score\": 0,\\n \"engagement_score\": 0,\\n \"description\": \"Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.\",\\n \"hooks\": [\\n \"Halloween snacks have never been easier than with these quick ideas!\",\\n \"Stop stressing over Halloween snacks; Rio Grande Supermarket has you covered!\",\\n \"I can\\'t believe how easy these Halloween snack ideas are to make!\"\\n ]\\n}\\n```']\n", "--------------------------------------------------\n", "Transition type: finish\n", "Transition output: {'hooks': [{'hooks': [\"What's inside these spine-tingling Halloween snacks?\", 'Unveil the magic of Halloween ASMR treats!', 'Crave the spooky flavors of Halloween with these snacks!'], 'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃', 'description': 'Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!', 'virality_score': 0.0, 'engagement_score': 0.05474452554744526}, {'hooks': [\"Imagine if Halloween treats were both spooky and delicious—let's get creative with Chupa Chups!\", 'Simple DIY Halloween snacks that will make your party unforgettable!', 'This trick will save you hours in preparing the ultimate Halloween treats!'], 'caption': 'Kolejny filmik już w przygotowaniu 👻 Na planie nawet straszna Chupa czacha 💕 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'description': 'Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!', 'virality_score': 0, 'engagement_score': 0}, {'hooks': ['Let’s create spooky and fun spider donuts with this easy recipe!', 'Stop serving boring snacks – try these creepy-cute spider donuts for Halloween!', 'Upgrade your kid’s snacks with these adorable spider-themed donuts!'], 'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'description': 'Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!', 'virality_score': 0, 'engagement_score': 0}, {'hooks': ['How to add more Halloween delight to your snack table!', 'Stop serving boring treats, try these cute Halloween snacks instead!', 'Looking for spooky yet adorable Halloween snacks? Check this out!'], 'caption': 'There are just so cute!! 🎃🦇', 'description': 'Discover adorable Halloween snacks perfect for your spooky celebration! 🎃🦇', 'virality_score': 0, 'engagement_score': 0}, {'hooks': ['Halloween snacks have never been easier than with these quick ideas!', 'Stop stressing over Halloween snacks; Rio Grande Supermarket has you covered!', \"I can't believe how easy these Halloween snack ideas are to make!\"], 'caption': 'Get ready for a spooktacular Halloween with fun and easy snack ideas! 🎃👻🧁 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket', 'description': 'Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.', 'virality_score': 0, 'engagement_score': 0}], 'summary': [{'code': 'DByK3vHglSI', 'caption': 'خوراکی هالوینی به مناسبت هالوین👻🎃\\n\\nاگه توهم عاشق ای\\u200cاس\\u200cام\\u200cآری پیجمو از دست نده😉👇🏻\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #ایاسامار #ای_اس_ام_آر #ایاسمار #هالووین', 'hashtags': ['#asmr', '#asmrartist', '#asmrfood', '#mukbang', '#halloween', '#halloween_snacks', '#happy', '#ایاسامار', '#ای_اس_ام_آر', '#ایاسمار', '#هالووین'], 'media_id': 3490900471793734792, 'username': 'khatisaw_asmr', 'full_name': 'ASMR | خاٰطؕݺ࣮\\u200cثٙۛاٰ | ای اس ام آر', 'has_audio': True, 'audio_type': 'original_sounds', 'like_count': 15, 'play_count': 274, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 36.942, 'virality_score': 0.0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad', 'engagement_score': 0.05474452554744526}, {'code': 'CG7QNDNjazG', 'caption': 'Ready! Set! Film!\\nKolejny filmik już w przygotowaniu 👻\\n\\nNa planie nawet straszna Chupa czacha 💕 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin', 'hashtags': ['#halloween', '#ytchannel', '#diy', '#chupachups', '#halloween_snacks', '#halloween_party', '#pumpkin'], 'media_id': 2430607689442503878, 'username': '4crazy_hands', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 5, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'BomPez0HE_n', 'caption': 'Και κάπως έτσι το βαρετό απογευματινό σνακ... μεταμορφώνεται σε αραχνο-ντονατ!!! Σούπερ νόστιμο και διασκεδαστικό!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #για_ενα_νικολα_γινονται_ολα #greekmombloggerscommunity #greekbloggerscommunity #momblogger', 'hashtags': ['#halloween_kids', '#halloween_snacks', '#spider_donuts', '#cute_food', '#kids_snacks', '#donuts', '#για_ενα_νικολα_γινονται_ολα', '#greekmombloggerscommunity', '#greekbloggerscommunity', '#momblogger'], 'media_id': 1884261582018203623, 'username': 'elpida_touve', 'full_name': 'Elpida Touve', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 77, 'play_count': 0, 'comment_count': 6, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'CG9i8GshD7I', 'caption': 'There are just so cute!! 🎃🦇\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks', 'hashtags': ['#halloween', '#halloween_costume', '#halloween_snacks'], 'media_id': 2431253037789232840, 'username': 'life.by_a', 'full_name': 'No Full Name Available', 'has_audio': False, 'audio_type': 'No Audio Type Available', 'like_count': 46, 'play_count': 0, 'comment_count': 8, 'reshare_count': 0, 'video_duration': 0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad', 'engagement_score': 0}, {'code': 'B4KreEynrxE', 'caption': 'Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70¢\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay’s or Wavy Lay’s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween', 'hashtags': ['#mondaymorning', '#happymonday', '#mondaymood', '#riograndesupermarket', '#canutillosupermarket', '#grocerystore', '#canutillobusiness', '#iamelpaso', '#elpasotx', '#itsallgoodep', '#recipeshoppinglist', '#halloweensnackideas', '#snackideasforkids', '#halloweentime', '#halloweenpartyideas', '#halloween_cupcakes', '#halloween_snacks', '#snacksforhalloween'], 'media_id': 2164733753633455172, 'username': 'riograndesupermarket', 'full_name': 'Rio Grande Supermarket', 'has_audio': True, 'audio_type': 'No Audio Type Available', 'like_count': 8, 'play_count': 0, 'comment_count': 0, 'reshare_count': 0, 'video_duration': 15.0, 'virality_score': 0, 'profile_pic_url': 'https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad', 'engagement_score': 0}]}\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for transition in reversed(transitions):\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " \"hooks\": [\n", " {\n", " \"hooks\": [\n", " \"What's inside these spine-tingling Halloween snacks?\",\n", " \"Unveil the magic of Halloween ASMR treats!\",\n", " \"Crave the spooky flavors of Halloween with these snacks!\"\n", " ],\n", " \"caption\": \"\\u062e\\u0648\\u0631\\u0627\\u06a9\\u06cc \\u0647\\u0627\\u0644\\u0648\\u06cc\\u0646\\u06cc \\u0628\\u0647 \\u0645\\u0646\\u0627\\u0633\\u0628\\u062a \\u0647\\u0627\\u0644\\u0648\\u06cc\\u0646\\ud83d\\udc7b\\ud83c\\udf83\",\n", " \"description\": \"Discover Halloween snacks with a touch of ASMR magic, perfect for satisfying your spooky cravings!\",\n", " \"virality_score\": 0.0,\n", " \"engagement_score\": 0.05474452554744526\n", " },\n", " {\n", " \"hooks\": [\n", " \"Imagine if Halloween treats were both spooky and delicious\\u2014let's get creative with Chupa Chups!\",\n", " \"Simple DIY Halloween snacks that will make your party unforgettable!\",\n", " \"This trick will save you hours in preparing the ultimate Halloween treats!\"\n", " ],\n", " \"caption\": \"Kolejny filmik ju\\u017c w przygotowaniu \\ud83d\\udc7b Na planie nawet straszna Chupa czacha \\ud83d\\udc95 @chupachupspl #halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\n", " \"description\": \"Get ready for our next Halloween-themed reel featuring spooky DIY Halloween snacks with a special twist from Chupa Chups!\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"hooks\": [\n", " \"Let\\u2019s create spooky and fun spider donuts with this easy recipe!\",\n", " \"Stop serving boring snacks \\u2013 try these creepy-cute spider donuts for Halloween!\",\n", " \"Upgrade your kid\\u2019s snacks with these adorable spider-themed donuts!\"\n", " ],\n", " \"caption\": \"\\u039a\\u03b1\\u03b9 \\u03ba\\u03ac\\u03c0\\u03c9\\u03c2 \\u03ad\\u03c4\\u03c3\\u03b9 \\u03c4\\u03bf \\u03b2\\u03b1\\u03c1\\u03b5\\u03c4\\u03cc \\u03b1\\u03c0\\u03bf\\u03b3\\u03b5\\u03c5\\u03bc\\u03b1\\u03c4\\u03b9\\u03bd\\u03cc \\u03c3\\u03bd\\u03b1\\u03ba... \\u03bc\\u03b5\\u03c4\\u03b1\\u03bc\\u03bf\\u03c1\\u03c6\\u03ce\\u03bd\\u03b5\\u03c4\\u03b1\\u03b9 \\u03c3\\u03b5 \\u03b1\\u03c1\\u03b1\\u03c7\\u03bd\\u03bf-\\u03bd\\u03c4\\u03bf\\u03bd\\u03b1\\u03c4!!! \\u03a3\\u03bf\\u03cd\\u03c0\\u03b5\\u03c1 \\u03bd\\u03cc\\u03c3\\u03c4\\u03b9\\u03bc\\u03bf \\u03ba\\u03b1\\u03b9 \\u03b4\\u03b9\\u03b1\\u03c3\\u03ba\\u03b5\\u03b4\\u03b1\\u03c3\\u03c4\\u03b9\\u03ba\\u03cc!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #\\u03b3\\u03b9\\u03b1_\\u03b5\\u03bd\\u03b1_\\u03bd\\u03b9\\u03ba\\u03bf\\u03bb\\u03b1_\\u03b3\\u03b9\\u03bd\\u03bf\\u03bd\\u03c4\\u03b1\\u03b9_\\u03bf\\u03bb\\u03b1 #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\n", " \"description\": \"Transform your afternoon snack into a fun and delicious Halloween treat with spider-themed donuts!\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"hooks\": [\n", " \"How to add more Halloween delight to your snack table!\",\n", " \"Stop serving boring treats, try these cute Halloween snacks instead!\",\n", " \"Looking for spooky yet adorable Halloween snacks? Check this out!\"\n", " ],\n", " \"caption\": \"There are just so cute!! \\ud83c\\udf83\\ud83e\\udd87\",\n", " \"description\": \"Discover adorable Halloween snacks perfect for your spooky celebration! \\ud83c\\udf83\\ud83e\\udd87\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"hooks\": [\n", " \"Halloween snacks have never been easier than with these quick ideas!\",\n", " \"Stop stressing over Halloween snacks; Rio Grande Supermarket has you covered!\",\n", " \"I can't believe how easy these Halloween snack ideas are to make!\"\n", " ],\n", " \"caption\": \"Get ready for a spooktacular Halloween with fun and easy snack ideas! \\ud83c\\udf83\\ud83d\\udc7b\\ud83e\\uddc1 Visit Rio Grande Supermarket to stock up on treats and ingredients for your Halloween party or trick-or-treaters. #HalloweenSnacks #RioGrandeSupermarket\",\n", " \"description\": \"Discover delightful Halloween snack ideas that are perfect for kids and parties. Shop at Rio Grande Supermarket for all your spooky treat essentials, from cake mix to candies.\",\n", " \"virality_score\": 0,\n", " \"engagement_score\": 0\n", " }\n", " ],\n", " \"summary\": [\n", " {\n", " \"code\": \"DByK3vHglSI\",\n", " \"caption\": \"\\u062e\\u0648\\u0631\\u0627\\u06a9\\u06cc \\u0647\\u0627\\u0644\\u0648\\u06cc\\u0646\\u06cc \\u0628\\u0647 \\u0645\\u0646\\u0627\\u0633\\u0628\\u062a \\u0647\\u0627\\u0644\\u0648\\u06cc\\u0646\\ud83d\\udc7b\\ud83c\\udf83\\n\\n\\u0627\\u06af\\u0647 \\u062a\\u0648\\u0647\\u0645 \\u0639\\u0627\\u0634\\u0642 \\u0627\\u06cc\\u200c\\u0627\\u0633\\u200c\\u0627\\u0645\\u200c\\u0622\\u0631\\u06cc \\u067e\\u06cc\\u062c\\u0645\\u0648 \\u0627\\u0632 \\u062f\\u0633\\u062a \\u0646\\u062f\\u0647\\ud83d\\ude09\\ud83d\\udc47\\ud83c\\udffb\\n@khatisaw_asmr \\n@khatisaw_asmr \\n@khatisaw_asmr \\n\\n#asmr #asmrartist #asmrfood #mukbang #halloween #halloween_snacks #happy #\\u0627\\u06cc\\u0627\\u0633\\u0627\\u0645\\u0627\\u0631 #\\u0627\\u06cc_\\u0627\\u0633_\\u0627\\u0645_\\u0622\\u0631 #\\u0627\\u06cc\\u0627\\u0633\\u0645\\u0627\\u0631 #\\u0647\\u0627\\u0644\\u0648\\u0648\\u06cc\\u0646\",\n", " \"hashtags\": [\n", " \"#asmr\",\n", " \"#asmrartist\",\n", " \"#asmrfood\",\n", " \"#mukbang\",\n", " \"#halloween\",\n", " \"#halloween_snacks\",\n", " \"#happy\",\n", " \"#\\u0627\\u06cc\\u0627\\u0633\\u0627\\u0645\\u0627\\u0631\",\n", " \"#\\u0627\\u06cc_\\u0627\\u0633_\\u0627\\u0645_\\u0622\\u0631\",\n", " \"#\\u0627\\u06cc\\u0627\\u0633\\u0645\\u0627\\u0631\",\n", " \"#\\u0647\\u0627\\u0644\\u0648\\u0648\\u06cc\\u0646\"\n", " ],\n", " \"media_id\": 3490900471793734792,\n", " \"username\": \"khatisaw_asmr\",\n", " \"full_name\": \"ASMR | \\u062e\\u0627\\u0670\\u0637\\u0615\\u077a\\u08ee\\u200c\\u062b\\u0659\\u06db\\u0627\\u0670 | \\u0627\\u06cc \\u0627\\u0633 \\u0627\\u0645 \\u0622\\u0631\",\n", " \"has_audio\": true,\n", " \"audio_type\": \"original_sounds\",\n", " \"like_count\": 15,\n", " \"play_count\": 274,\n", " \"comment_count\": 0,\n", " \"reshare_count\": 0,\n", " \"video_duration\": 36.942,\n", " \"virality_score\": 0.0,\n", " \"profile_pic_url\": \"https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/453733984_452269454314129_3660045369565868680_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=101&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=NttJL9SJqxgQ7kNvgGQiqD9&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAFYbuJBdVM8hTF3I1sQRCGJDSWy1rtGknClMxNB7Wb8g&oe=67ABE9AD&_nc_sid=2011ad\",\n", " \"engagement_score\": 0.05474452554744526\n", " },\n", " {\n", " \"code\": \"CG7QNDNjazG\",\n", " \"caption\": \"Ready! Set! Film!\\nKolejny filmik ju\\u017c w przygotowaniu \\ud83d\\udc7b\\n\\nNa planie nawet straszna Chupa czacha \\ud83d\\udc95 @chupachupspl\\n\\n#halloween #ytchannel #diy #chupachups #halloween_snacks #halloween_party #pumpkin\",\n", " \"hashtags\": [\n", " \"#halloween\",\n", " \"#ytchannel\",\n", " \"#diy\",\n", " \"#chupachups\",\n", " \"#halloween_snacks\",\n", " \"#halloween_party\",\n", " \"#pumpkin\"\n", " ],\n", " \"media_id\": 2430607689442503878,\n", " \"username\": \"4crazy_hands\",\n", " \"full_name\": \"No Full Name Available\",\n", " \"has_audio\": false,\n", " \"audio_type\": \"No Audio Type Available\",\n", " \"like_count\": 5,\n", " \"play_count\": 0,\n", " \"comment_count\": 0,\n", " \"reshare_count\": 0,\n", " \"video_duration\": 0,\n", " \"virality_score\": 0,\n", " \"profile_pic_url\": \"https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/122271405_3676949662369294_5352096118873851662_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=110&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=dO8fE8ZIN3MQ7kNvgEw_L10&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYD688O9MqNvC3AWhO3YWANr_IJeDinBX8qovw7wEaiijQ&oe=67ABDE00&_nc_sid=2011ad\",\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"code\": \"BomPez0HE_n\",\n", " \"caption\": \"\\u039a\\u03b1\\u03b9 \\u03ba\\u03ac\\u03c0\\u03c9\\u03c2 \\u03ad\\u03c4\\u03c3\\u03b9 \\u03c4\\u03bf \\u03b2\\u03b1\\u03c1\\u03b5\\u03c4\\u03cc \\u03b1\\u03c0\\u03bf\\u03b3\\u03b5\\u03c5\\u03bc\\u03b1\\u03c4\\u03b9\\u03bd\\u03cc \\u03c3\\u03bd\\u03b1\\u03ba... \\u03bc\\u03b5\\u03c4\\u03b1\\u03bc\\u03bf\\u03c1\\u03c6\\u03ce\\u03bd\\u03b5\\u03c4\\u03b1\\u03b9 \\u03c3\\u03b5 \\u03b1\\u03c1\\u03b1\\u03c7\\u03bd\\u03bf-\\u03bd\\u03c4\\u03bf\\u03bd\\u03b1\\u03c4!!! \\u03a3\\u03bf\\u03cd\\u03c0\\u03b5\\u03c1 \\u03bd\\u03cc\\u03c3\\u03c4\\u03b9\\u03bc\\u03bf \\u03ba\\u03b1\\u03b9 \\u03b4\\u03b9\\u03b1\\u03c3\\u03ba\\u03b5\\u03b4\\u03b1\\u03c3\\u03c4\\u03b9\\u03ba\\u03cc!! #halloween_kids #halloween_snacks #spider_donuts #cute_food #kids_snacks #donuts #\\u03b3\\u03b9\\u03b1_\\u03b5\\u03bd\\u03b1_\\u03bd\\u03b9\\u03ba\\u03bf\\u03bb\\u03b1_\\u03b3\\u03b9\\u03bd\\u03bf\\u03bd\\u03c4\\u03b1\\u03b9_\\u03bf\\u03bb\\u03b1 #greekmombloggerscommunity #greekbloggerscommunity #momblogger\",\n", " \"hashtags\": [\n", " \"#halloween_kids\",\n", " \"#halloween_snacks\",\n", " \"#spider_donuts\",\n", " \"#cute_food\",\n", " \"#kids_snacks\",\n", " \"#donuts\",\n", " \"#\\u03b3\\u03b9\\u03b1_\\u03b5\\u03bd\\u03b1_\\u03bd\\u03b9\\u03ba\\u03bf\\u03bb\\u03b1_\\u03b3\\u03b9\\u03bd\\u03bf\\u03bd\\u03c4\\u03b1\\u03b9_\\u03bf\\u03bb\\u03b1\",\n", " \"#greekmombloggerscommunity\",\n", " \"#greekbloggerscommunity\",\n", " \"#momblogger\"\n", " ],\n", " \"media_id\": 1884261582018203623,\n", " \"username\": \"elpida_touve\",\n", " \"full_name\": \"Elpida Touve\",\n", " \"has_audio\": false,\n", " \"audio_type\": \"No Audio Type Available\",\n", " \"like_count\": 77,\n", " \"play_count\": 0,\n", " \"comment_count\": 6,\n", " \"reshare_count\": 0,\n", " \"video_duration\": 0,\n", " \"virality_score\": 0,\n", " \"profile_pic_url\": \"https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/475820641_405922235900340_3354549167503917651_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=BJ5jjgI1S1wQ7kNvgEa8cis&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAQ2PldBSkgIil_veixaVS6a6ZRgs1k_fmg9-2Jer3lYQ&oe=67ABC61E&_nc_sid=2011ad\",\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"code\": \"CG9i8GshD7I\",\n", " \"caption\": \"There are just so cute!! \\ud83c\\udf83\\ud83e\\udd87\\n\\n#halloween\\n#halloween_costume\\n#halloween_snacks\",\n", " \"hashtags\": [\n", " \"#halloween\",\n", " \"#halloween_costume\",\n", " \"#halloween_snacks\"\n", " ],\n", " \"media_id\": 2431253037789232840,\n", " \"username\": \"life.by_a\",\n", " \"full_name\": \"No Full Name Available\",\n", " \"has_audio\": false,\n", " \"audio_type\": \"No Audio Type Available\",\n", " \"like_count\": 46,\n", " \"play_count\": 0,\n", " \"comment_count\": 8,\n", " \"reshare_count\": 0,\n", " \"video_duration\": 0,\n", " \"virality_score\": 0,\n", " \"profile_pic_url\": \"https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/231734336_1025030578256388_2356445558213588438_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=100&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=6WsYnjkiAyYQ7kNvgG_3UvF&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYCTL2ZatiNXGYsh4b00nQhUxAAmfVMUZ2geexXJvD5skw&oe=67ABE3E3&_nc_sid=2011ad\",\n", " \"engagement_score\": 0\n", " },\n", " {\n", " \"code\": \"B4KreEynrxE\",\n", " \"caption\": \"Halloween is just around the corner and you could create some fun party snacks with the kids or for your guests. \\nCome in to Rio Grande Supermarket and get your ingredients for all the spooktacular snacks. Buy extra candy for the trick-or-treaters.\\n\\nShurfine Cake Mix ASSORTED 16.5 OZ. 70\\u00a2\\nMazola Cooking Oil SELECT VARIETY 40 OZ. 2 FOR $5\\nLay\\u2019s or Wavy Lay\\u2019s 2 FOR $4\\nBuffalo Style Wing Sections $3.38 LB .\\n.\\n.\\n.\\n.\\n.\\n.\\n\\n#mondaymorning #happymonday #mondaymood #riograndesupermarket #canutillosupermarket #grocerystore #canutillobusiness #iamelpaso #elpasotx #itsallgoodep #recipeshoppinglist #halloweensnackideas #snackideasforkids #halloweentime #halloweenpartyideas #halloween_cupcakes #halloween_snacks #snacksforhalloween\",\n", " \"hashtags\": [\n", " \"#mondaymorning\",\n", " \"#happymonday\",\n", " \"#mondaymood\",\n", " \"#riograndesupermarket\",\n", " \"#canutillosupermarket\",\n", " \"#grocerystore\",\n", " \"#canutillobusiness\",\n", " \"#iamelpaso\",\n", " \"#elpasotx\",\n", " \"#itsallgoodep\",\n", " \"#recipeshoppinglist\",\n", " \"#halloweensnackideas\",\n", " \"#snackideasforkids\",\n", " \"#halloweentime\",\n", " \"#halloweenpartyideas\",\n", " \"#halloween_cupcakes\",\n", " \"#halloween_snacks\",\n", " \"#snacksforhalloween\"\n", " ],\n", " \"media_id\": 2164733753633455172,\n", " \"username\": \"riograndesupermarket\",\n", " \"full_name\": \"Rio Grande Supermarket\",\n", " \"has_audio\": true,\n", " \"audio_type\": \"No Audio Type Available\",\n", " \"like_count\": 8,\n", " \"play_count\": 0,\n", " \"comment_count\": 0,\n", " \"reshare_count\": 0,\n", " \"video_duration\": 15.0,\n", " \"virality_score\": 0,\n", " \"profile_pic_url\": \"https://scontent-ber1-1.cdninstagram.com/v/t51.2885-19/21909505_2012064525693566_3455111339192614912_n.jpg?stp=dst-jpg_e0_s150x150_tt6&_nc_ht=scontent-ber1-1.cdninstagram.com&_nc_cat=102&_nc_oc=Q6cZ2AEKdi-I6QB8SHWB7BLD2f1CqU7ByVRk8LfrAz0fC-vqEgArXFJwvDMXefsegR_NGjA&_nc_ohc=myA3c6JjKckQ7kNvgHiHwfB&_nc_gid=139340752f7c43428a918be99459fce9&edm=AGyKU4gBAAAA&ccb=7-5&oh=00_AYAx7dSZqcDmnemLgDaWR4YhVFRz9blBP-lcZU2gbkTiBQ&oe=67ABD6D3&_nc_sid=2011ad\",\n", " \"engagement_score\": 0\n", " }\n", " ]\n", "}\n" ] } ], "source": [ "import json\n", "response = client.executions.transitions.list(execution_id=execution.id).items[0].output\n", "print(json.dumps(response, indent=4))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/05-video-processing-with-natural-language.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "!pip install --upgrade julep --quiet" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import uuid\n", "\n", "# NOTE: these UUIDs are used in order not to use the `create_or_update` methods instead of\n", "# the `create` methods for the sake of not creating new resources every time a cell is run.\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "JULEP_API_KEY = os.environ.get(\"JULEP_API_KEY\")\n", "\n", "# Create a Julep client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Create agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"Spiderman\",\n", " about=\"AI that can crawl the web and extract data\",\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 218, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "\n", "cloudinary_api_key = os.environ[\"CLOUDINARY_API_KEY\"]\n", "cloudinary_api_secret = os.environ[\"CLOUDINARY_API_SECRET\"]\n", "cloudinary_cloud_name = os.environ[\"CLOUDINARY_CLOUD_NAME\"]\n", "\n", "# Define the task\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Julep Video Processing With Natural Language\n", "description: Process a video using natural language instructions\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " video_url:\n", " type: string\n", " description: The url of the file to upload\n", " public_id:\n", " type: string\n", " description: The public id of the file to upload\n", " transformation_prompt:\n", " type: string\n", " description: The prompt for the transformations to apply to the file\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", " \n", "# Define the tools that the task will use in this workflow\n", "tools:\n", "- name: cloudinary_upload\n", " type: integration\n", " integration:\n", " provider: cloudinary\n", " method: media_upload\n", " setup:\n", " cloudinary_api_key: \"{cloudinary_api_key}\"\n", " cloudinary_api_secret: \"{cloudinary_api_secret}\"\n", " cloudinary_cloud_name: \"{cloudinary_cloud_name}\"\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Upload the video to cloudinary\n", "- tool: cloudinary_upload\n", " arguments:\n", " file: $ steps[0].input.video_url\n", " public_id: $ steps[0].input.public_id\n", " upload_params:\n", " resource_type: video\n", "\n", "# Step 1: Generate the transformation json\n", "- prompt:\n", " - role: user\n", " content:\n", "\n", " - type: text\n", " text: |-\n", " You are a Cloudinary expert. You are given a medial url. it might be an image or a video.\n", " You need to come up with a json of transformations to apply to the given media.\n", " Overall the json could have multiple transformation json objects.\n", " Each transformation json object can have the multiple key value pairs.\n", " Each key value pair should have the key as the transformation name like \"aspect_ratio\", \"crop\", \"width\" etc and the value as the transformation parameter value.\n", " Note: Provide the image url as it is when overlaying images.\n", " Note: When you use overlay with an image url, you need to add a nested json containing url: \n", " Given below is an example of some key value pairs that you might need to use when constructing the json.\n", " \"aspect_ratio\": \"1.0\",\n", " \"width\": \"250\",\n", " \"fetch_format\": \"auto\"\n", " \"overlay\":\n", " \"url\": \"\"\n", " \"flags\": \"layer_apply\"\n", " \n", " \n", " - type: image_url\n", " image_url:\n", " url: $ _.url\n", "\n", " - type: text\n", " text: |-\n", " $ f'''Hey, check the video above, I need to apply the following transformations using cloudinary.\n", " {{steps[0].input.transformation_prompt}}'''\n", "\n", " unwrap: true\n", " settings:\n", " model: gemini/gemini-1.5-pro\n", "\n", "# Step 2: Extract the json from the model's response\n", "- evaluate:\n", " model_transformation: >-\n", " $ extract_json(_)\n", "\n", "# Step 3: Upload the video to cloudinary\n", "- tool: cloudinary_upload\n", " arguments:\n", " file: $ steps[0].input.video_url\n", " public_id: $ steps[0].input.public_id\n", " upload_params:\n", " transformation: $ _.model_transformation\n", " resource_type: video\n", "\n", "# Step 4: Return the transformed video url\n", "- evaluate:\n", " transformed_video_url: $ _.url\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 219, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 220, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'067ffb5c-1240-7967-8000-a40019c3084d'" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# creating an execution object\n", "transformation_prompt = \"\"\"\n", "1- I want to add an overlay an the following image to the video, and apply a layer apply flag also. Here's the image url:\n", "https://avatars.githubusercontent.com/u/112750682?s=200&v=4\n", "\n", "2- I also want you to to blur the video, and add a fade in and fade out effect to the video with a duration of 3 seconds each.\n", "\"\"\"\n", "\n", "input_video_url = \"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4\"\n", "\n", "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"video_url\": input_video_url,\n", " \"public_id\": \"video_test2\",\n", " \"transformation_prompt\": transformation_prompt,\n", " }\n", ")\n", "execution.id" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking execution details and output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 221, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/v1738934100/video_test2.mp4', 'base64': None, 'meta_data': {'url': 'http://res.cloudinary.com/dpnjjk8mb/video/upload/v1738934100/video_test2.mp4', 'tags': [], 'type': 'upload', 'audio': {'codec': 'aac', 'bit_rate': '191999', 'channels': 2, 'frequency': 44100, 'channel_layout': 'stereo'}, 'bytes': 2252313, 'video': {'codec': 'h264', 'level': 31, 'profile': 'High', 'bit_rate': '1002377', 'time_base': '1/48', 'pix_format': 'yuv420p'}, 'width': 1280, 'format': 'mp4', 'height': 720, 'api_key': '518455844981529', 'version': 1738934100, 'asset_id': '069d70c84e88ee9293a1d753b3ca3898', 'bit_rate': 1197518, 'duration': 15.046531, 'existing': True, 'is_audio': False, 'rotation': 0, 'nb_frames': 361, 'signature': '836eddb515d796dc8484d7dc108cb67fbe0ba1d5', 'created_at': '2024-11-20T08:55:44Z', 'frame_rate': 24.0, 'version_id': '85846ee1c860645e1149e8029051c07d', 'placeholder': False, 'asset_folder': '', 'display_name': 'video_test2', 'playback_url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/sp_auto/v1738934100/video_test2.m3u8', 'resource_type': 'video'}, 'public_id': 'video_test2'}\n" ] } ], "source": [ "# Get execution details\n", "execution = client.executions.get(execution.id)\n", "# Print the output\n", "print(execution.output)" ] }, { "cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition type: init\n", "Transition output: {'public_id': 'video_test2', 'video_url': 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4', 'transformation_prompt': \"\\n1- I want to add an overlay an the following image to the video, and apply a layer apply flag also. Here's the image url:\\nhttps://avatars.githubusercontent.com/u/112750682?s=200&v=4\\n\\n2- I also want you to to blur the video, and add a fade in and fade out effect to the video with a duration of 3 seconds each.\\n\"}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/v1738934100/video_test2.mp4', 'base64': None, 'meta_data': {'url': 'http://res.cloudinary.com/dpnjjk8mb/video/upload/v1738934100/video_test2.mp4', 'tags': [], 'type': 'upload', 'audio': {'codec': 'aac', 'bit_rate': '191999', 'channels': 2, 'frequency': 44100, 'channel_layout': 'stereo'}, 'bytes': 2252313, 'video': {'codec': 'h264', 'level': 31, 'profile': 'High', 'bit_rate': '1002377', 'time_base': '1/48', 'pix_format': 'yuv420p'}, 'width': 1280, 'format': 'mp4', 'height': 720, 'api_key': '518455844981529', 'version': 1738934100, 'asset_id': '069d70c84e88ee9293a1d753b3ca3898', 'bit_rate': 1197518, 'duration': 15.046531, 'existing': True, 'is_audio': False, 'rotation': 0, 'nb_frames': 361, 'signature': '836eddb515d796dc8484d7dc108cb67fbe0ba1d5', 'created_at': '2024-11-20T08:55:44Z', 'frame_rate': 24.0, 'version_id': '85846ee1c860645e1149e8029051c07d', 'placeholder': False, 'asset_folder': '', 'display_name': 'video_test2', 'playback_url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/sp_auto/v1738934100/video_test2.m3u8', 'resource_type': 'video'}, 'public_id': 'video_test2'}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: Sure, here's the JSON representation of the Cloudinary transformations you requested to apply to your video:\n", "\n", "```json\n", "[\n", " {\n", " \"overlay\": {\n", " \"url\": \"https://avatars.githubusercontent.com/u/112750682?s=200&v=4\"\n", " },\n", " \"flags\": \"layer_apply\"\n", " },\n", " {\n", " \"effect\": \"blur:100\" \n", " },\n", " {\n", " \"effect\": \"fade:3000\"\n", " },\n", " {\n", " \"effect\": \"fade:-3000\"\n", " }\n", "]\n", "```\n", "\n", "**Explanation:**\n", "\n", "* **Overlay:** The `overlay` parameter specifies the image to be overlaid on the video. The nested `url` object provides the URL of the overlay image. The `flags: \"layer_apply\"` ensures that the transformations are applied to the overlay image and not to the base video.\n", "\n", "* **Blur:** The `effect: \"blur:100\"` applies a blur effect to the video. The value `100` represents the blur strength. You can adjust this value to control the intensity of the blur.\n", "\n", "* **Fade In and Fade Out:** The `effect: \"fade:3000\"` and the `effect: \"fade:-3000\"` applies the fade-in and fade-out effects to the video for the start and ending respectively, both having a duration of 3 seconds (3000 milliseconds).\n", "\n", "\n", "You can apply these transformations by including them in the delivery URL of your video in Cloudinary's Dynamic Image Manipulation syntax. The order of transformations in the JSON array matters; they are applied sequentially. If the transformation is not being applied check whether you have provided a video url or an image url to Cloudinary and modify the transformation array if needed.\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'model_transformation': [{'flags': 'layer_apply', 'overlay': {'url': 'https://avatars.githubusercontent.com/u/112750682?s=200&v=4'}}, {'effect': 'blur:100'}, {'effect': 'fade:3000'}, {'effect': 'fade:-3000'}]}\n", "--------------------------------------------------\n", "Transition type: step\n", "Transition output: {'url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/v1744811467/video_test2.mp4', 'base64': None, 'meta_data': {'url': 'http://res.cloudinary.com/dpnjjk8mb/video/upload/v1744811467/video_test2.mp4', 'etag': 'a4dccd7720185599448773735e49ad8a', 'tags': [], 'type': 'upload', 'audio': {'codec': 'aac', 'bit_rate': '128290', 'channels': 2, 'frequency': 44100, 'channel_layout': 'stereo'}, 'bytes': 1100622, 'pages': 0, 'video': {'codec': 'h264', 'level': 31, 'profile': 'High', 'bit_rate': '450256', 'time_base': '1/12288', 'pix_format': 'yuv420p'}, 'width': 1280, 'format': 'mp4', 'height': 720, 'api_key': '518455844981529', 'version': 1744811467, 'asset_id': '069d70c84e88ee9293a1d753b3ca3898', 'bit_rate': 585203, 'duration': 15.046009, 'is_audio': False, 'rotation': 0, 'nb_frames': 361, 'signature': '0f965ee84e69beacefff7b9e285bb621884109af', 'created_at': '2024-11-20T08:55:44Z', 'frame_rate': 24.0, 'version_id': '637b3869e172dad6380706279cb32f02', 'overwritten': True, 'placeholder': False, 'asset_folder': '', 'display_name': 'video_test2', 'playback_url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/sp_auto/v1744811467/video_test2.m3u8', 'resource_type': 'video', 'original_filename': 'ForBiggerMeltdowns'}, 'public_id': 'video_test2'}\n", "--------------------------------------------------\n", "Transition type: finish\n", "Transition output: {'transformed_video_url': 'https://res.cloudinary.com/dpnjjk8mb/video/upload/v1744811467/video_test2.mp4'}\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for transition in reversed(transitions):\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)\n", "\n", "if transitions[0].type == \"finish\":\n", " transformed_video_url = transitions[0].output['transformed_video_url']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)lep.ai/concepts/tasks)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/06-browser-use.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "!pip install julep -U --quiet" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "api_key = os.getenv(\"JULEP_API_KEY\")\n", "\n", "# Create a Julep client\n", "client = Client(api_key=api_key, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Defining the agent\n", "name = \"Browser Use Assistant\"\n", "about = \"an assistant that can interact with a web browser to perform tasks on behalf of users.\"\n", "\n", "# Create the agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=name,\n", " about=about,\n", " model=\"claude-3.5-sonnet-20241022\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an an \"tool\"\n", "\n", "Tools are the object which define the actions that the agent can perform.\n", "\n", "To learn more about the tools, please refer to the Tools section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tools)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Adding the tools to the agent\n", "try:\n", " client.agents.tools.create(\n", " agent_id=AGENT_UUID,\n", " **{\n", " \"name\": \"computer\",\n", " \"type\": \"computer_20241022\",\n", " \"computer_20241022\": {\n", " \"display_height_px\": 768,\n", " \"display_width_px\": 1024,\n", " \"display_number\": 1,\n", " },\n", " }\n", " )\n", "except Exception as e:\n", " print(\"Already added\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "import os\n", "\n", "browserbase_api_key = os.getenv(\"BROWSERBASE_API_KEY\")\n", "browserbase_project_id = os.getenv(\"BROWSERBASE_PROJECT_ID\")\n", "\n", "# Defining the task\n", "task_def = yaml.safe_load('''\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: computer-use-task\n", "description: A task that uses a computer to navigate the web.\n", "\n", "########################################################\n", "################### INPUT SCHEMA #######################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " goal:\n", " type: string\n", " required:\n", " - goal\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "tools:\n", "- name: create_browserbase_session\n", " type: integration\n", " integration:\n", " provider: browserbase\n", " method: create_session\n", " setup:\n", " api_key: \"YOUR_BROWSERBASE_API_KEY\"\n", " project_id: \"YOUR_BROWSERBASE_PROJECT_ID\"\n", "\n", "- name: get_session_view_urls\n", " type: integration\n", " integration:\n", " provider: browserbase\n", " method: get_live_urls\n", " setup:\n", " api_key: \"YOUR_BROWSERBASE_API_KEY\"\n", " project_id: \"YOUR_BROWSERBASE_PROJECT_ID\"\n", "\n", "- name: perform_browser_action\n", " type: integration\n", " integration:\n", " provider: remote_browser\n", " method: perform_action\n", " setup:\n", " width: 1024\n", " height: 768\n", "\n", "- name: create_julep_session\n", " type: system\n", " system:\n", " resource: session\n", " operation: create\n", "\n", "- name: session_chat\n", " type: system\n", " system:\n", " resource: session\n", " operation: chat\n", "\n", "########################################################\n", "################### MAIN WORKFLOW ######################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step #0 - Create Julep Session\n", "- tool: create_julep_session\n", " arguments:\n", " agent: $ str(agent.id)\n", " situation: \"Juelp Browser Use Agent\"\n", " recall: 'False'\n", "\n", "# Step #1 - Store Julep Session ID\n", "- evaluate:\n", " julep_session_id: $ _.id\n", "\n", "# Step #2 - Create Browserbase Session\n", "- tool: create_browserbase_session\n", " arguments:\n", " project_id: \"c35ee022-883e-4070-9f3c-89607393214b\"\n", "\n", "# Step #3 - Store Browserbase Session Info\n", "- evaluate:\n", " browser_session_id: $ _.id\n", " connect_url: $ _.connect_url\n", "\n", "# Step #4 - Get Session View URLs\n", "- tool: get_session_view_urls\n", " arguments:\n", " id: $ _.browser_session_id\n", "\n", "# Step #5 - Store Debugger URL\n", "- evaluate:\n", " debugger_url: $ _.urls.debuggerUrl\n", "\n", "# Step #6 - Navigate to Google\n", "# Navigate to google to avoid sending a blank \n", "# screenshot when computer use starts\n", "- tool: perform_browser_action\n", " arguments:\n", " connect_url: $ steps[3].output.connect_url\n", " action: \"navigate\"\n", " text: \"https://www.google.com\"\n", "\n", "# Step #7 - Run Browser Workflow\n", "- workflow: run_browser\n", " arguments:\n", " julep_session_id: $ steps[1].output.julep_session_id\n", " cdp_url: $ steps[3].output.connect_url\n", " messages:\n", " - role: \"user\"\n", " content: |-\n", " $ f\"\"\"\n", " \n", " * You are utilising a headless chrome browser to interact with the internet.\n", " * You can use the computer tool to interact with the browser.\n", " * You have access to only the browser.\n", " * You are already inside the browser.\n", " * You can't open new tabs or windows.\n", " * For now, rely on screenshots as the only way to see the browser.\n", " * You don't have access to the browser's UI.\n", " * YOU CANNOT WRITE TO THE SEARCH BAR OF THE BROWSER.\n", " \n", " \n", " * + {steps[0].input.goal} + NEWLINE + \"\"\"\n", " workflow_label: \"run_browser\" # <----- REMOVE THIS\n", "\n", "\n", "########################################################\n", "################# RUN BROWSER SUBWORKFLOW ##############\n", "########################################################\n", "\n", "run_browser:\n", "\n", "# Step #0 - Agent Interaction\n", "- tool: session_chat\n", " arguments:\n", " session_id: $ _.julep_session_id\n", " messages: $ _.messages\n", " recall: $ False\n", "\n", "# Step #1 - Evaluate the response from the agent\n", "- evaluate:\n", " content: $ _.choices[0].message.content\n", " tool_calls: |-\n", " $ [ \n", " { \n", " 'tool_call_id': tool_call.id, \n", " 'action': load_json(tool_call.function.arguments)['action'], \n", " 'text': load_json(tool_call.function.arguments).get('text'), \n", " 'coordinate': load_json(tool_call.function.arguments).get('coordinate') \n", " } \n", " for tool_call in _.choices[0].message.tool_calls or [] if tool_call.type == 'function']\n", "\n", "\n", "# Step #2 - Perform the actions requested by the agent\n", "- foreach:\n", " in: $ _.tool_calls\n", " do:\n", " tool: perform_browser_action\n", " arguments:\n", " connect_url: $ steps[0].input.cdp_url\n", " action: $ _.action if not (str(_.get('text', '')).startswith('http') and _.action == 'type') else 'navigate'\n", " text: $ _.get('text')\n", " coordinate: $ _.get('coordinate')\n", "\n", "# Step #3 - Convert the result of the actions into a chat message\n", "- evaluate:\n", " contents: >-\n", " $ [ \\\n", " { \\\n", " 'type': 'image_url', \\\n", " 'image_url': { \\\n", " 'url': result['base64_image'], \\\n", " } \\\n", " } if result['base64_image'] is not None else \\\n", " { \\\n", " 'type': 'text', \\\n", " 'text': result['output'] if result['output'] is not None else 'done' \\\n", " } \\\n", " for result in _]\n", "\n", "# Step #4 - Convert the result of the actions into a chat message\n", "- evaluate:\n", " messages: \"$ [{'content': [_.contents[i]], 'role': 'tool', 'name': 'computer', 'tool_call_id': steps[1].output.tool_calls[i].tool_call_id} for i in range(len(_.contents))]\"\n", "\n", "# Step #5 - Check if the goal is achieved and recursively run the browser\n", "- workflow: check_goal_status\n", " arguments:\n", " messages: $ _.messages\n", " julep_session_id: $ steps[0].input.julep_session_id\n", " cdp_url: $ steps[0].input.cdp_url\n", " workflow_label: \"check_goal_status\" \n", "\n", "\n", "########################################################\n", "############## CHECK GOAL STATUS SUBWORKFLOW ##############\n", "########################################################\n", "\n", "check_goal_status:\n", "\n", "# Step #0 - Check if the goal is achieved and recursively run the browser\n", "- if: $ len(_.messages) > 0\n", " then:\n", " workflow: run_browser\n", " arguments:\n", " messages: $ _.messages\n", " julep_session_id: $ _.julep_session_id\n", " cdp_url: $ _.cdp_url\n", " workflow_label: \"run_browser\" \n", "''')\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Started an execution. Execution ID: 0683064e-362b-7b1b-8000-6ada185329ea\n" ] } ], "source": [ "execution = client.executions.create(\n", " task_id=task.id,\n", " input={\n", " \"agent_id\": str(AGENT_UUID),\n", " \"goal\": \"Navigate to JulepAI's Github repository and tell me the number of stars it has. Remember bro, the link for julep's repository is https://github.com/julep-ai/julep\",\n", " }\n", ")\n", "\n", "print(\"Started an execution. Execution ID:\", execution.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking execution details and output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transtion Index: 0\n", "Transition Type: init\n", "{'agent_id': '5502720b-cab1-481b-8750-a5ea04c1814f',\n", " 'goal': \"Navigate to JulepAI's Github repository and tell me the number of \"\n", " \"stars it has. Remember bro, the link for julep's repository is \"\n", " 'https://github.com/julep-ai/julep'}\n", "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n", "Transtion Index: 1\n", "Transition Type: step\n", "{'auto_run_tools': False,\n", " 'context_overflow': None,\n", " 'created_at': '2025-05-23T12:07:00.327671Z',\n", " 'forward_tool_calls': False,\n", " 'id': '0683064e-453d-77ed-8000-3ba4d4b3b53d',\n", " 'kind': None,\n", " 'metadata': {},\n", " 'recall_options': {'confidence': 0.5,\n", " 'lang': 'en-US',\n", " 'limit': 10,\n", " 'max_query_length': 1000,\n", " 'metadata_filter': {},\n", " 'mmr_strength': 0.5,\n", " 'mode': 'vector',\n", " 'num_search_messages': 4},\n", " 'render_templates': True,\n", " 'situation': 'Juelp Browser Use Agent',\n", " 'summary': None,\n", " 'system_template': None,\n", " 'token_budget': None,\n", " 'updated_at': '2025-05-23T12:07:00.327671Z'}\n", "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n", "Transtion Index: 2\n", "Transition Type: step\n", "{'julep_session_id': '0683064e-453d-77ed-8000-3ba4d4b3b53d'}\n", "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "import pprint\n", "import time\n", "\n", "def reformat_output(output):\n", " if isinstance(output, dict):\n", " for key, value in output.items():\n", " if (key == \"base64_image\" or key == \"url\") and value is not None:\n", " output[key] = value[:20] + '...'\n", " else:\n", " output[key] = reformat_output(value)\n", " elif isinstance(output, list):\n", " for i, item in enumerate(output):\n", " output[i] = reformat_output(item)\n", " return output\n", "# List all the task steps that have been executed\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items\n", "\n", "# Transitions are retrieved in reverse chronological order\n", "for index, transition in enumerate(reversed(transitions)):\n", " print(\"Transtion Index: \", index)\n", " print(\"Transition Type: \", transition.type)\n", " output = transition.output\n", " pprint.pprint(reformat_output(output))\n", " print(\"----\"*100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tools](https://docs.julep.ai/concepts/tools)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/07-personalized-research-assistant.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "!pip install julep -U --quiet" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "from dotenv import load_dotenv\n", "from julep import Client\n", "import os\n", "import uuid\n", "\n", "load_dotenv()\n", "\n", "# NOTE: these UUIDs are used in order not to use the `create_or_update` methods instead of\n", "# the `create` methods for the sake of not creating new resources every time a cell is run.\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()\n", "SESSION_UUID = uuid.uuid4()\n", "USER_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "\n", "api_key = os.environ['JULEP_API_KEY']\n", "\n", "# Create a Julep client\n", "client = Client(api_key=api_key, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Defining the agent\n", "name = \"Research Assistant\"\n", "about = \"This is a research assistant that can search the arxiv for information.\"\n", "\n", "# Create the agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=name,\n", " about=about,\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"user\"\n", "\n", "User is the object to which persona, metadata, and documents are scoped to.\n", "\n", "To learn more about the agent, please refer to the User section in [Julep Concepts](https://docs.julep.ai/docs/concepts/users)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "User(id='63837636-bca5-4b08-b576-e4e8235da0eb', created_at=datetime.datetime(2025, 4, 21, 16, 18, 2, 798552, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2025, 4, 21, 16, 18, 2, 798552, tzinfo=datetime.timezone.utc), about='This is a test user', metadata={'age': 25, 'city': 'San Francisco', 'ppid': '63837636-bca5-4b08-b576-e4e8235da0eb', 'state': 'California', 'top_journals': \"['Nature', 'Science', 'IEEE Transactions on Quantum Engineering']\", 'top_scientist': 'Richard Feynman', 'top_research_area': 'Quantum Computing', 'research_interests': \"['Quantum Computing', 'Artificial Intelligence', 'Machine Learning']\", 'favorite_scientists': \"['Richard Feynman', 'Alan Turing', 'Geoffrey Hinton']\", 'latest_research_read': 'Quantum Machine Learning'}, name='user_new_1')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a user with metadata\n", "client.users.create_or_update(\n", " user_id=USER_UUID,\n", " name = f\"user_new_1\",\n", " about = \"This is a test user\",\n", " metadata={\n", " \"ppid\": str(USER_UUID), # Ensure it's a native int\n", " \"age\": int(25), # Ensure it's a native int\n", " \"state\": str(\"California\"), # Convert to string if not already\n", " \"city\": str(\"San Francisco\"), # Convert to string if not already\n", " \"research_interests\": str([\"Quantum Computing\", \"Artificial Intelligence\", \"Machine Learning\"]), # Convert to string or json serializable format\n", " \"favorite_scientists\": str([\"Richard Feynman\", \"Alan Turing\", \"Geoffrey Hinton\"]), # Same as above\n", " \"top_research_area\": str(\"Quantum Computing\"),\n", " \"top_scientist\": str(\"Richard Feynman\"),\n", " \"latest_research_read\": str(\"Quantum Machine Learning\"),\n", " \"top_journals\": str([\"Nature\", \"Science\", \"IEEE Transactions on Quantum Engineering\"])\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"user\" document\n", "\n", "User documents are used to store the persona of the user." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Doc(id='068066fd-3ee0-7190-8000-6ffce2993bb3', content=['This is a test google scholar persona. The user is a 25 year old living in San Francisco. He is a fan of Google Scholar and is a student at Stanford University. He uses Google Scholar to stay updated with the latest research in quantum computing and artificial intelligence. Over the last 3 months, he has read 100+ research papers on quantum computing and artificial intelligence. He is particularly interested in the latest research in quantum machine learning and quantum error correction. He is also interested in how LLMs are being used to solve problems in quantum mechanics.'], created_at=datetime.datetime(2025, 4, 21, 16, 18, 27, 934304, tzinfo=datetime.timezone.utc), title='Google Scholar Persona', embedding_dimensions=1024, embedding_model='text-embedding-3-large', embeddings=[], language='english', metadata={}, modality='text')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a user document\n", "client.users.docs.create(\n", " user_id=USER_UUID,\n", " title=\"Google Scholar Persona\",\n", " embed_instruction=\"Represent the query for User persona used for document retrieval: \",\n", " content=\"This is a test google scholar persona. The user is a 25 year old living in San Francisco. He is a fan of Google Scholar and is a student at Stanford University.\\\n", " He uses Google Scholar to stay updated with the latest research in quantum computing and artificial intelligence.\\\n", " Over the last 3 months, he has read 100+ research papers on quantum computing and artificial intelligence.\\\n", " He is particularly interested in the latest research in quantum machine learning and quantum error correction.\\\n", " He is also interested in how LLMs are being used to solve problems in quantum mechanics.\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "import os\n", "brave_api_key = os.environ[\"BRAVE_API_KEY\"]\n", "llamaparse_api_key = os.environ[\"LLAMA_API_KEY\"]\n", "task_def = yaml.safe_load(f\"\"\"\n", " # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json \n", "name: Julep Personalized Research Paper Recommendation Assistant\n", "description: A research paper recommendation assistant that can search the arxiv for information and recommend research papers to the user based on their persona.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " topics:\n", " type: array\n", " items:\n", " type: string\n", " description: The topics to search for.\n", " user_id:\n", " type: string\n", " description: The user id to search for.\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow\n", "tools: \n", "- name: brave_search\n", " type: integration\n", " integration:\n", " provider: brave\n", " setup:\n", " brave_api_key: {brave_api_key}\n", " \n", "- name: arxiv_search\n", " type: integration\n", " integration:\n", " provider: arxiv\n", " \n", "- name: llama_parse_scrape\n", " type: integration\n", " integration:\n", " provider: llama_parse\n", " setup:\n", " llamaparse_api_key: {llamaparse_api_key}\n", " params:\n", " result_format: \"text\"\n", " num_workers: 3\n", "\n", "- name: get_user_from_id\n", " description: Get a user from the user id\n", " type: system\n", " system:\n", " resource: user\n", " operation: list\n", "\n", "- name: list_user_docs\n", " description: List the user docs\n", " type: system\n", " system:\n", " resource: user\n", " subresource: doc\n", " operation: list\n", "\n", "- name: get_user_docs\n", " description: Get user docs\n", " type: system\n", " system:\n", " resource: user\n", " subresource: doc\n", " operation: list\n", " \n", "- name : create_agent_doc\n", " description: Create an agent doc\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: create\n", " \n", "- name: create_user_doc\n", " description: Create a user doc\n", " type: system\n", " system:\n", " resource: user\n", " subresource: doc\n", " operation: create\n", "\n", "######################################################## \n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step 0: Calling brave search for each topic\n", "- over: _.topics\n", " parallelism: 2\n", " map:\n", " tool: brave_search\n", " arguments:\n", " query: $ 'the latest news about ' + _\n", "\n", "# Step 1: Prompting the agent to extract keywords from the news snippet\n", "- prompt:\n", " - role: system\n", " content: |\n", " $ f'''You are a research assistant.\n", " Based on the following latest html news snippet, generate keywords:\n", " \n", " {{ '\\\\n'.join([doc['snippet'] for docs in _ for doc in docs['result']]) }}\n", " \n", " Your response should be a list of keywords, separated by commas. Do not add any other text.\n", " Example: `KEYWORDS: keyword1, keyword2, keyword3`'''\n", " unwrap: true\n", "\n", "# Step 2: Extracting the top 8 keywords\n", "- evaluate:\n", " keywords: $ str(_).split(',')[:8]\n", "\n", "# Step 3: Calling arxiv search for each keyword\n", "- over: $ _.keywords\n", " parallelism: 4\n", " map:\n", " tool: arxiv_search\n", " arguments:\n", " query: $ _\n", " max_results: $ 2\n", "\n", "# Step 4: Get the arxiv results\n", "- evaluate:\n", " arxiv_results: $ _\n", " \n", "# Step 5: Get the user from the id using metadata_filter (returns a list)\n", "- tool: get_user_from_id\n", " arguments:\n", " limit: $ 1\n", " sort_by: created_at\n", " direction: desc\n", " metadata_filter:\n", " ppid: $ steps[0].input['user_id']\n", "\n", "# Step 6: Unwrap the list to get the user\n", "- evaluate:\n", " user_info: $ _[0]\n", "\n", "# Step 7: Get the user persona from user docs\n", "- tool: get_user_docs\n", " arguments:\n", " user_id: $ steps[0].input['user_id']\n", " limit: $ 1\n", " sort_by: created_at\n", " direction: desc\n", "\n", "# Step 8: Unwrap the list to get the user persona\n", "- evaluate:\n", " persona: $ _[0].content[0]\n", "\n", "# Step 9: Prompting the agent to select the top 5 papers\n", "- prompt:\n", " - role: system\n", " content: |\n", " $ f'''As an expert in recommending research papers tailored to individual user personas, your task is to select papers top 5 papers that align closely with the user's interests and professional needs. \n", " This careful selection ensures that the recommendations are both relevant and beneficial to the user's ongoing research and professional development.\n", "\n", " Below is a detailed description of the user's persona:\n", " {{ _.persona }}\n", "\n", " Based on this persona, please review the following list of research paper titles. \n", " These titles have been gathered from a comprehensive search to match the user's interests:\n", "\n", " {{ \"\\\\n\".join([f\"- (Title: {{doc['title']}}, \\\\n\\\\n - URL: {{doc['pdf_url']}})\" for result in steps[4].output.arxiv_results for doc in result['result']]) }}\n", "\n", "\n", " After reviewing the titles, please compile a list of the top 5 relevant research papers. \n", " Your response should be a list of Titles and URLs of the papers, separated by double commas. \n", " Do not add any other text.\n", " Example: `Title1,url1,,Title2,url2,,Title3,url3`'''\n", " unwrap: true\n", "\n", "# Step 10: Extracting the titles and urls\n", "- evaluate:\n", " paper_titles_and_urls: |-\n", " $ list(\n", " zip(\n", " [pair.split(',')[0] for pair in str(_).split(',,')],\n", " [pair.split(',')[1].replace(\"http://\", \"https://\") for pair in str(_).split(',,')]\n", " )\n", " )\n", " \n", "# Step 11: Calling llama parse scrape for each url\n", "- over: $ _['paper_titles_and_urls']\n", " parallelism: 5\n", " map:\n", " tool: llama_parse_scrape\n", " arguments:\n", " file: $ _[1]\n", " filename: $ _[0]\n", " params:\n", " result_format: text\n", "\n", "# Step 12: Extracting the paper contents\n", "- evaluate:\n", " paper_contents: $ str(_)\n", "\n", "# Step 13: Create a new persona document\n", "- tool: create_user_doc\n", " arguments:\n", " user_id: $ steps[0].input['user_id']\n", " data:\n", " embed_instruction: $ \"Represent the query for User persona used for document retrieval:\"\n", " title: Research Papers\n", " content: $ _['paper_contents']\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Create the task\n", "task = chat_task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "execution = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"topics\": [\"Quantum Computing\", \"LLMs\"],\n", " \"user_id\": str(USER_UUID)\n", " }\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Transition number: 0\n", "Transition type: init\n", "Transition output: {'topics': ['Quantum Computing', 'LLMs'], 'user_id': '63837636-bca5-4b08-b576-e4e8235da0eb'}\n", "--------------------------------------------------\n", "Transition number: 1\n", "Transition type: init_branch\n", "Transition output: Quantum Computing\n", "--------------------------------------------------\n", "Transition number: 2\n", "Transition type: init_branch\n", "Transition output: LLMs\n", "--------------------------------------------------\n", "Transition number: 3\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://llm.extractum.io/static/llm-news/', 'title': 'LLM News, Updates and Articles', 'snippet': 'A newsfeed of the latest news, updates and articles related to LLM.'}, {'link': 'https://llm-guide.com/news', 'title': 'LLM News | LLM GUIDE', 'snippet': 'The class of 2023 is doing very well, indeed! For the fifth year in a row, graduate salary figures have reached another all-time high.'}, {'link': 'https://www.startus-insights.com/innovators-guide/llm-news-brief/', 'title': \"What's Currently Happening in LLMs? | Q2 2024\", 'snippet': 'You can catch up on the latest, must-know breakthroughs, major acquisitons & investments, and other events in the LLM landscape, covering everything from the growing focus on AI safety to China's acceptance of 14 LLMs for public release. LARGE LANGUAGE MODEL NEWSLLM NEWS BRIEFLARGE LANGUAGE ...'}]}\n", "--------------------------------------------------\n", "Transition number: 4\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'link': 'https://www.sciencenews.org/article/quantum-computing-milestone-challenged', 'title': 'A quantum computing milestone is immediately challenged by a supercomputer', 'snippet': 'In just minutes, a special quantum processor, called a quantum annealing processor, solved a complex real-world problem that a classical supercomputer would take millions of years to complete, researchers claim March 12 in Science. And that supercomputer, the team reports, would consume more ...'}, {'link': 'https://www.nature.com/articles/d41586-025-00451-2', 'title': 'Quantum-computing technology that makes qubits from atoms wins mega investment', 'snippet': 'Firms using ‘neutral atoms’ to create qubits are re-entering the race to build useful quantum machines.'}, {'link': 'https://www.sciencedaily.com/news/matter_energy/quantum_computing/', 'title': 'Quantum Computing News -- ScienceDaily', 'snippet': 'Quantum Computing News. Read the latest about the development of quantum computers.'}]}\n", "--------------------------------------------------\n", "Transition number: 5\n", "Transition type: step\n", "Transition output: [{'result': [{'link': 'https://www.sciencenews.org/article/quantum-computing-milestone-challenged', 'title': 'A quantum computing milestone is immediately challenged by a supercomputer', 'snippet': 'In just minutes, a special quantum processor, called a quantum annealing processor, solved a complex real-world problem that a classical supercomputer would take millions of years to complete, researchers claim March 12 in Science. And that supercomputer, the team reports, would consume more ...'}, {'link': 'https://www.nature.com/articles/d41586-025-00451-2', 'title': 'Quantum-computing technology that makes qubits from atoms wins mega investment', 'snippet': 'Firms using ‘neutral atoms’ to create qubits are re-entering the race to build useful quantum machines.'}, {'link': 'https://www.sciencedaily.com/news/matter_energy/quantum_computing/', 'title': 'Quantum Computing News -- ScienceDaily', 'snippet': 'Quantum Computing News. Read the latest about the development of quantum computers.'}]}, {'result': [{'link': 'https://llm.extractum.io/static/llm-news/', 'title': 'LLM News, Updates and Articles', 'snippet': 'A newsfeed of the latest news, updates and articles related to LLM.'}, {'link': 'https://llm-guide.com/news', 'title': 'LLM News | LLM GUIDE', 'snippet': 'The class of 2023 is doing very well, indeed! For the fifth year in a row, graduate salary figures have reached another all-time high.'}, {'link': 'https://www.startus-insights.com/innovators-guide/llm-news-brief/', 'title': \"What's Currently Happening in LLMs? | Q2 2024\", 'snippet': 'You can catch up on the latest, must-know breakthroughs, major acquisitons & investments, and other events in the LLM landscape, covering everything from the growing focus on AI safety to China's acceptance of 14 LLMs for public release. LARGE LANGUAGE MODEL NEWSLLM NEWS BRIEFLARGE LANGUAGE ...'}]}]\n", "--------------------------------------------------\n", "Transition number: 6\n", "Transition type: step\n", "Transition output: quantum processor, quantum annealing processor, supercomputer, neutral atoms, qubits, quantum machines, quantum computing, quantum computers, LLM, AI safety, China, LARGE LANGUAGE MODEL, breakthroughs, investments, graduate salary, class of 2023\n", "--------------------------------------------------\n", "Transition number: 7\n", "Transition type: step\n", "Transition output: {'keywords': ['quantum processor', ' quantum annealing processor', ' supercomputer', ' neutral atoms', ' qubits', ' quantum machines', ' quantum computing', ' quantum computers']}\n", "--------------------------------------------------\n", "Transition number: 8\n", "Transition type: init_branch\n", "Transition output: neutral atoms\n", "--------------------------------------------------\n", "Transition number: 9\n", "Transition type: init_branch\n", "Transition output: quantum annealing processor\n", "--------------------------------------------------\n", "Transition number: 10\n", "Transition type: init_branch\n", "Transition output: supercomputer\n", "--------------------------------------------------\n", "Transition number: 11\n", "Transition type: init_branch\n", "Transition output: quantum processor\n", "--------------------------------------------------\n", "Transition number: 12\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1608.00249v1', 'http://arxiv.org/pdf/1608.00249v1'], 'title': 'Comments on the parallelization efficiency of the Sunway TaihuLight supercomputer', 'authors': ['János Végh'], 'comment': '4 figures', 'pdf_url': 'http://arxiv.org/pdf/1608.00249v1', 'summary': 'In the world of supercomputers, the large number of processors requires tominimize the inefficiencies of parallelization, which appear as a sequentialpart of the program from the point of view of Amdahl\\'s law. The recentlysuggested new figure of merit is applied to the recently presentedsupercomputer, and the timeline of \"Top 500\" supercomputers is scrutinizedusing the metric. It is demonstrated, that in addition to the computingperformance and power consumption, the new supercomputer is also excellent inthe efficiency of parallelization. Based on the suggested merit, a \"Moore-law\"like observation is derived for the timeline of parallelization efficacy ofsupercomputers.', 'updated': '2016-07-31 19:02:34', 'entry_id': 'http://arxiv.org/abs/1608.00249v1', 'published': '2016-07-31 19:02:34', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}, {'doi': None, 'links': ['http://arxiv.org/abs/1708.01462v2', 'http://arxiv.org/pdf/1708.01462v2'], 'title': \"How Amdahl's low restricts supercomputer applications and building ever bigger supercomputers\", 'authors': ['János Végh'], 'comment': '30 pages, 10 figures', 'pdf_url': 'http://arxiv.org/pdf/1708.01462v2', 'summary': \"This paper reinterprets Amdahl's law in terms of execution time and appliesthis simple model to supercomputing. The systematic discussion results inpractical formulas enabling to calculate expected running time using largenumber of processors from experimental runs using low number of processors,delivers a quantitative measure of computational efficiency of supercomputingapplications. Through separating non-parallelizable contribution to fractionsaccording to their origin, Amdahl's law enables to derive a timeline forsupercomputers (quite similar to Moore's law) and describes why Amdahl's lawlimits the size of supercomputers. The paper validates that Amdahl's 50-yearsold model (with slight extension) correctly describes the performancelimitations of the present supercomputers. Using some simple and reasonableassumptions, the absolute performance bound of supercomputers is concluded,furthermore that serious enhancements are still necessary to achieve theexaFLOPS dream value.\", 'updated': '2017-12-29 06:26:45', 'entry_id': 'http://arxiv.org/abs/1708.01462v2', 'published': '2017-08-04 11:56:45', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}]}\n", "--------------------------------------------------\n", "Transition number: 13\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1908.10698v1', 'http://arxiv.org/pdf/1908.10698v1'], 'title': 'Thermal surface neutralization of Fr ions with metal foils for magneto-optical trapping of radioisotopes', 'authors': ['H. Kawamura', 'T. Aoki', 'K. Harada', 'T. Inoue', 'S. Ito', 'K. Kato', 'L. Koehler', 'K. Sakamoto', 'A. Uchiyama', 'Y. Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10698v1', 'summary': 'We investigate neutralization processes (especially thermal surfaceneutralization), which are required for the magneto-optical trapping ofradioactive atoms. A variety of neutralization methods are first summarized:neutral beam injection for fusion reactors, neutral atom implantation insemiconductor processing, and the production of radioactive neutral atoms inaccelerators. We focus on thermal surface neutralization, which producesneutral atoms in the thermal energy range for laser cooling. The experimentswere carried out with yttrium, gadolinium, and zirconium foils to neutralizefrancium and rubidium ions for magneto-optical trapping. The results reconfirmthat yttrium foil is a good neutralizer (i.e., it has a neutral releaseefficiency $>65\\\\%$). In addition, the release fraction when using yttrium foilexceeds 75\\\\% at 1350 K, which is greater than the release fraction for theother foils. This reconfirmation is important because few previous studies havefocused on thermal surface neutralization. Moreover, the results show that theneutralization efficiency is strongly influenced by the experimental processitself.', 'updated': '2019-08-28 13:01:01', 'entry_id': 'http://arxiv.org/abs/1908.10698v1', 'published': '2019-08-28 13:01:01', 'categories': ['physics.ins-det'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.ins-det'}, {'doi': None, 'links': ['http://arxiv.org/abs/1908.10686v1', 'http://arxiv.org/pdf/1908.10686v1'], 'title': 'Alkali ion-to-neutral atom converter for the magneto-optical trap of a radioactive isotope', 'authors': ['Hirokazu Kawamura', 'Ken-ichi Harada', 'Tomoya Sato', 'Saki Ezure', 'Hiroshi Arikawa', 'Takeshi Furukawa', 'Tomohiro Hayamizu', 'Takeshi Inoue', 'Taisuke Ishikawa', 'Masatoshi Itoh', 'Tomohiro Kato', 'Akihito Oikawa', 'Takatoshi Aoki', 'Atsushi Hatakeyama', 'Yasuhiro Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10686v1', 'summary': 'We have developed a unique neutralizer device that uses an yttrium targetsurrounded by a platinum wall to magneto-optically trap radioactive atoms. Ingeneral, the radioactive nucleus produced in a nuclear reaction is extractedand transported in ion form. For the magneto-optical trap, thermalneutralization must occur on the surface of a metal with a small work function.The converter can produce a neutral atomic beam with small angular divergencethat, given the recycling of atoms and ions, converts ions into neutral atomswith remarkable efficiency. We demonstrated the ion neutralization processusing stable rubidium and confirmed $10^6$ neutralized atoms in themagneto-optical trap. Additionally, the experiment using francium demonstratedthe obtaining of neutralized francium atoms.', 'updated': '2019-08-28 12:38:44', 'entry_id': 'http://arxiv.org/abs/1908.10686v1', 'published': '2019-08-28 12:38:44', 'categories': ['physics.atom-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.atom-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 14\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': '10.1109/TPDS.2020.3044846', 'links': ['http://dx.doi.org/10.1109/TPDS.2020.3044846', 'http://arxiv.org/abs/2009.06387v2', 'http://arxiv.org/pdf/2009.06387v2'], 'title': 'Inferring the Dynamics of the State Evolution During Quantum Annealing', 'authors': ['Elijah Pelofske', 'Georg Hahn', 'Hristo Djidjev'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2009.06387v2', 'summary': 'To solve an optimization problem using a commercial quantum annealer, one hasto represent the problem of interest as an Ising or a quadratic unconstrainedbinary optimization (QUBO) problem and submit its coefficients to the annealer,which then returns a user-specified number of low-energy solutions. It would beuseful to know what happens in the quantum processor during the anneal processso that one could design better algorithms or suggest improvements to thehardware. However, existing quantum annealers are not able to directly extractsuch information from the processor. Hence, in this work we propose to useadvanced features of D-Wave 2000Q to indirectly infer information about thedynamics of the state evolution during the anneal process. Specifically, D-Wave2000Q allows the user to customize the anneal schedule, that is, the schedulewith which the anneal fraction is changed from the start to the end of theanneal. Using this feature, we design a set of modified anneal schedules whoseoutputs can be used to generate information about the states of the system atuser-defined time points during a standard anneal. With this process, called\"slicing\", we obtain approximate distributions of lowest-energy annealsolutions as the anneal time evolves. We use our technique to obtain a varietyof insights into the annealer, such as the state evolution during annealing,when individual bits in an evolving solution flip during the anneal process andwhen they stabilize, and we introduce a technique to estimate the freeze-outpoint of both the system as well as of individual qubits.', 'updated': '2020-11-20 02:12:21', 'entry_id': 'http://arxiv.org/abs/2009.06387v2', 'published': '2020-09-10 18:14:28', 'categories': ['quant-ph', 'cond-mat.dis-nn', 'cond-mat.stat-mech', 'cs.ET'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1088/1361-6633/ac8c54', 'links': ['http://dx.doi.org/10.1088/1361-6633/ac8c54', 'http://arxiv.org/abs/2112.07491v3', 'http://arxiv.org/pdf/2112.07491v3'], 'title': 'Quantum Annealing for Industry Applications: Introduction and Review', 'authors': ['Sheir Yarkoni', 'Elena Raponi', 'Thomas Bäck', 'Sebastian Schmitt'], 'comment': 'major revision with extended noise section and discussion of\\n alternative platforms', 'pdf_url': 'http://arxiv.org/pdf/2112.07491v3', 'summary': 'Quantum annealing is a heuristic quantum optimization algorithm that can beused to solve combinatorial optimization problems. In recent years, advances inquantum technologies have enabled the development of small- andintermediate-scale quantum processors that implement the quantum annealingalgorithm for programmable use. Specifically, quantum annealing processorsproduced by D-Wave Systems have been studied and tested extensively in bothresearch and industrial settings across different disciplines. In this paper weprovide a literature review of the theoretical motivations for quantumannealing as a heuristic quantum optimization algorithm, the software andhardware that is required to use such quantum processors, and thestate-of-the-art applications and proofs-of-concepts that have beendemonstrated using them. The goal of our review is to provide a centralized andcondensed source regarding applications of quantum annealing technology. Weidentify the advantages, limitations, and potential of quantum annealing forboth researchers and practitioners from various fields.', 'updated': '2022-06-13 08:37:49', 'entry_id': 'http://arxiv.org/abs/2112.07491v3', 'published': '2021-12-14 15:58:30', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 15\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0311196v1', 'http://arxiv.org/pdf/quant-ph/0311196v1'], 'title': 'Von Neumann Quantum Processors', 'authors': ['Alexander Yu. Vlasov'], 'comment': 'LaTeX 8 pages, for 304th WEH Seminar \"Elementary Quantum Processors,\"\\n 13-15 October 2003', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0311196v1', 'summary': 'Most modern classical processors support so-called von Neumann architecturewith program and data registers. In present work is revisited similar approachto models of quantum processors. Deterministic programmable quantum gate arraysare considered as an example. They are also called von Neumann quantumprocessors here and use conditional quantum dynamics. Such devices have someproblems with universality, but consideration of hybrid quantum processors,i.e., models with both continuous and discrete quantum variables resolves theproblems. It is also discussed comparison of such a model of quantum processorswith more traditional approach.', 'updated': '2003-11-27 15:43:16', 'entry_id': 'http://arxiv.org/abs/quant-ph/0311196v1', 'published': '2003-11-27 15:43:16', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1126/sciadv.abj6624', 'links': ['http://dx.doi.org/10.1126/sciadv.abj6624', 'http://arxiv.org/abs/2105.02447v2', 'http://arxiv.org/pdf/2105.02447v2'], 'title': 'Programmable and sequential Gaussian gates in a loop-based single-mode photonic quantum processor', 'authors': ['Yutaro Enomoto', 'Kazuma Yonezu', 'Yosuke Mitsuhashi', 'Kan Takase', 'Shuntaro Takeda'], 'comment': '17 pages, 6 figures. 5 pages, 3 figures in the supplementary\\n materials', 'pdf_url': 'http://arxiv.org/pdf/2105.02447v2', 'summary': 'A quantum processor to import, process, and export optical quantum states isa common core technology enabling various photonic quantum informationprocessing. However, there has been no photonic processor which issimultaneously universal, scalable, and programmable. Here, we report on anoriginal loop-based single-mode versatile photonic quantum processor which isdesigned to be universal, scalable, and programmable. Our processor can performarbitrarily many steps of programmable quantum operations on a givensingle-mode optical quantum state by time-domain processing in a dynamicallycontrolled loop-based optical circuit. We use this processor to demonstrateprogrammable single-mode Gaussian gates and multi-step squeezing gates. Inaddition, we prove that the processor can perform universal quantum operationsby injecting appropriate ancillary states and also be straightforwardlyextended to a multi-mode processor. These results show that our processor isprogrammable, scalable, and potentially universal, leading to be suitable forgeneral-purpose applications.', 'updated': '2021-11-14 23:50:51', 'entry_id': 'http://arxiv.org/abs/2105.02447v2', 'published': '2021-05-06 05:27:35', 'categories': ['quant-ph'], 'journal_ref': 'Science Advances 7, eabj6624 (2021)', 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 16\n", "Transition type: init_branch\n", "Transition output: quantum computers\n", "--------------------------------------------------\n", "Transition number: 17\n", "Transition type: init_branch\n", "Transition output: quantum machines\n", "--------------------------------------------------\n", "Transition number: 18\n", "Transition type: init_branch\n", "Transition output: qubits\n", "--------------------------------------------------\n", "Transition number: 19\n", "Transition type: init_branch\n", "Transition output: quantum computing\n", "--------------------------------------------------\n", "Transition number: 20\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 21\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2412.18979v1', 'http://arxiv.org/pdf/2412.18979v1'], 'title': 'Quantum memristors for neuromorphic quantum machine learning', 'authors': ['Lucas Lamata'], 'comment': 'Invited Perspective', 'pdf_url': 'http://arxiv.org/pdf/2412.18979v1', 'summary': 'Quantum machine learning may permit to realize more efficient machinelearning calculations with near-term quantum devices. Among the diverse quantummachine learning paradigms which are currently being considered, quantummemristors are promising as a way of combining, in the same quantum hardware, aunitary evolution with the nonlinearity provided by the measurement andfeedforward. Thus, an efficient way of deploying neuromorphic quantum computingfor quantum machine learning may be enabled.', 'updated': '2024-12-25 20:21:24', 'entry_id': 'http://arxiv.org/abs/2412.18979v1', 'published': '2024-12-25 20:21:24', 'categories': ['quant-ph', 'cs.NE'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0501176v2', 'http://arxiv.org/pdf/quant-ph/0501176v2'], 'title': 'Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines', 'authors': ['Daowen Qiu'], 'comment': '25 pages', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0501176v2', 'summary': 'As was well known, in classical computation, Turing machines, circuits,multi-stack machines, and multi-counter machines are equivalent, that is, theycan simulate each other in polynomial time. In quantum computation, Yao [11]first proved that for any quantum Turing machines $M$, there exists quantumBoolean circuit $(n,t)$-simulating $M$, where $n$ denotes the length of inputstrings, and $t$ is the number of move steps before machine stopping. However,the simulations of quantum Turing machines by quantum multi-stack machines andquantum multi-counter machines have not been considered, and quantummulti-stack machines have not been established, either. Though quantum countermachines were dealt with by Kravtsev [6] and Yamasaki {\\\\it et al.} [10], inwhich the machines count with $0,\\\\pm 1$ only, we sense that it is difficult tosimulate quantum Turing machines in terms of this fashion of quantum computingdevices, and we therefore prove that the quantum multi-counter machines allowedto count with $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ for some $n>1$ can efficiently simulatequantum Turing machines. Therefore, our mail goals are to establish quantum multi-stack machines andquantum multi-counter machines with counts $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ and $n>1$,and particularly to simulate quantum Turing machines by these quantum computingdevices.', 'updated': '2005-06-06 17:29:54', 'entry_id': 'http://arxiv.org/abs/quant-ph/0501176v2', 'published': '2005-01-30 04:42:12', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 22\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}\n", "--------------------------------------------------\n", "Transition number: 23\n", "Transition type: finish_branch\n", "Transition output: {'result': [{'doi': '10.1088/1361-648X/aa761f', 'links': ['http://dx.doi.org/10.1088/1361-648X/aa761f', 'http://arxiv.org/abs/1611.09106v1', 'http://arxiv.org/pdf/1611.09106v1'], 'title': 'Three-electron spin qubits', 'authors': ['Maximilian Russ', 'Guido Burkard'], 'comment': '42 pages, 13 figures', 'pdf_url': 'http://arxiv.org/pdf/1611.09106v1', 'summary': 'The goal of this article is to review the progress of three-electron spinqubits from their inception to the state of the art. We direct the main focustowards the resonant exchange (RX) qubit and the exchange-only qubit, but wealso discuss other qubit implementations using three electron spins. For eachthree-spin qubit we describe the qubit model, the physical realization, theimplementations of single-qubit operations, as well as the read-out andinitialization schemes. Two-qubit gates and decoherence properties arediscussed for the RX qubit and the exchange-only qubit, thereby, completing thelist of requirements for a viable candidate qubit implementation for quantumcomputation. We start with describing the full system of three electrons in atriple quantum dot, then discuss the charge-stability diagram and restrictourselves to the relevant subsystem, introduce the qubit states, and discussimportant transitions to other charge states. Introducing the various qubitimplementations, we begin with the exchange-only qubit, followed by thespin-charge qubit, the hybrid qubit, and the RX qubit, discussing for each thesingle-qubit operations, read-out, and initialization methods, whereas the mainfocus will be on the RX qubit, whose single-qubit operations are realized bydriving the qubit at its resonant frequency in the microwave range similar toelectron spin resonance. Two different types of two-qubit operations arepresented for the exchange-only and the RX qubit which can be divided intoshort-ranged and long-ranged interactions. Both of these interaction types canbe expected to be necessary in a large-scale quantum computer. We also takeinto account the decoherence of the qubit through the influence of magneticnoise as well as dephasing due to charge noise.', 'updated': '2016-11-28 13:21:43', 'entry_id': 'http://arxiv.org/abs/1611.09106v1', 'published': '2016-11-28 13:21:43', 'categories': ['cond-mat.mes-hall'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cond-mat.mes-hall'}, {'doi': '10.1103/PhysRevB.77.212506', 'links': ['http://dx.doi.org/10.1103/PhysRevB.77.212506', 'http://arxiv.org/abs/cond-mat/0703505v1', 'http://arxiv.org/pdf/cond-mat/0703505v1'], 'title': 'Macroscopic Many-Qubit Interactions in Superconducting Flux Qubits', 'authors': ['Sam Young Cho', 'Mun Dae Kim'], 'comment': '5 pages, 1 figure', 'pdf_url': 'http://arxiv.org/pdf/cond-mat/0703505v1', 'summary': 'Superconducting flux qubits are considered to investigate macroscopicmany-qubit interactions. Many-qubit states based on current states can be manipulated through thecurrent-phase relation in each superconducting loop. For flux qubit systems comprised of $N$ qubit loops, a general expression oflow energy Hamiltonian is presented in terms of low energy levels of qubits andmacroscopic quantum tunnelings between the many-qubit states. Many-qubit interactions classified by {\\\\em Ising type- or tunnel-}exchangeinteractions can be observable experimentally. Flux qubit systems can provide various artificial-spin systems to studymany-body systems that cannot be found naturally.', 'updated': '2007-03-20 02:20:35', 'entry_id': 'http://arxiv.org/abs/cond-mat/0703505v1', 'published': '2007-03-20 02:20:35', 'categories': ['cond-mat.supr-con', 'cond-mat.mes-hall'], 'journal_ref': 'Phys. Rev. B 77, 212506 (2008)', 'pdf_downloaded': None, 'primary_category': 'cond-mat.supr-con'}]}\n", "--------------------------------------------------\n", "Transition number: 24\n", "Transition type: step\n", "Transition output: [{'result': [{'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0311196v1', 'http://arxiv.org/pdf/quant-ph/0311196v1'], 'title': 'Von Neumann Quantum Processors', 'authors': ['Alexander Yu. Vlasov'], 'comment': 'LaTeX 8 pages, for 304th WEH Seminar \"Elementary Quantum Processors,\"\\n 13-15 October 2003', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0311196v1', 'summary': 'Most modern classical processors support so-called von Neumann architecturewith program and data registers. In present work is revisited similar approachto models of quantum processors. Deterministic programmable quantum gate arraysare considered as an example. They are also called von Neumann quantumprocessors here and use conditional quantum dynamics. Such devices have someproblems with universality, but consideration of hybrid quantum processors,i.e., models with both continuous and discrete quantum variables resolves theproblems. It is also discussed comparison of such a model of quantum processorswith more traditional approach.', 'updated': '2003-11-27 15:43:16', 'entry_id': 'http://arxiv.org/abs/quant-ph/0311196v1', 'published': '2003-11-27 15:43:16', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1126/sciadv.abj6624', 'links': ['http://dx.doi.org/10.1126/sciadv.abj6624', 'http://arxiv.org/abs/2105.02447v2', 'http://arxiv.org/pdf/2105.02447v2'], 'title': 'Programmable and sequential Gaussian gates in a loop-based single-mode photonic quantum processor', 'authors': ['Yutaro Enomoto', 'Kazuma Yonezu', 'Yosuke Mitsuhashi', 'Kan Takase', 'Shuntaro Takeda'], 'comment': '17 pages, 6 figures. 5 pages, 3 figures in the supplementary\\n materials', 'pdf_url': 'http://arxiv.org/pdf/2105.02447v2', 'summary': 'A quantum processor to import, process, and export optical quantum states isa common core technology enabling various photonic quantum informationprocessing. However, there has been no photonic processor which issimultaneously universal, scalable, and programmable. Here, we report on anoriginal loop-based single-mode versatile photonic quantum processor which isdesigned to be universal, scalable, and programmable. Our processor can performarbitrarily many steps of programmable quantum operations on a givensingle-mode optical quantum state by time-domain processing in a dynamicallycontrolled loop-based optical circuit. We use this processor to demonstrateprogrammable single-mode Gaussian gates and multi-step squeezing gates. Inaddition, we prove that the processor can perform universal quantum operationsby injecting appropriate ancillary states and also be straightforwardlyextended to a multi-mode processor. These results show that our processor isprogrammable, scalable, and potentially universal, leading to be suitable forgeneral-purpose applications.', 'updated': '2021-11-14 23:50:51', 'entry_id': 'http://arxiv.org/abs/2105.02447v2', 'published': '2021-05-06 05:27:35', 'categories': ['quant-ph'], 'journal_ref': 'Science Advances 7, eabj6624 (2021)', 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': '10.1109/TPDS.2020.3044846', 'links': ['http://dx.doi.org/10.1109/TPDS.2020.3044846', 'http://arxiv.org/abs/2009.06387v2', 'http://arxiv.org/pdf/2009.06387v2'], 'title': 'Inferring the Dynamics of the State Evolution During Quantum Annealing', 'authors': ['Elijah Pelofske', 'Georg Hahn', 'Hristo Djidjev'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2009.06387v2', 'summary': 'To solve an optimization problem using a commercial quantum annealer, one hasto represent the problem of interest as an Ising or a quadratic unconstrainedbinary optimization (QUBO) problem and submit its coefficients to the annealer,which then returns a user-specified number of low-energy solutions. It would beuseful to know what happens in the quantum processor during the anneal processso that one could design better algorithms or suggest improvements to thehardware. However, existing quantum annealers are not able to directly extractsuch information from the processor. Hence, in this work we propose to useadvanced features of D-Wave 2000Q to indirectly infer information about thedynamics of the state evolution during the anneal process. Specifically, D-Wave2000Q allows the user to customize the anneal schedule, that is, the schedulewith which the anneal fraction is changed from the start to the end of theanneal. Using this feature, we design a set of modified anneal schedules whoseoutputs can be used to generate information about the states of the system atuser-defined time points during a standard anneal. With this process, called\"slicing\", we obtain approximate distributions of lowest-energy annealsolutions as the anneal time evolves. We use our technique to obtain a varietyof insights into the annealer, such as the state evolution during annealing,when individual bits in an evolving solution flip during the anneal process andwhen they stabilize, and we introduce a technique to estimate the freeze-outpoint of both the system as well as of individual qubits.', 'updated': '2020-11-20 02:12:21', 'entry_id': 'http://arxiv.org/abs/2009.06387v2', 'published': '2020-09-10 18:14:28', 'categories': ['quant-ph', 'cond-mat.dis-nn', 'cond-mat.stat-mech', 'cs.ET'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1088/1361-6633/ac8c54', 'links': ['http://dx.doi.org/10.1088/1361-6633/ac8c54', 'http://arxiv.org/abs/2112.07491v3', 'http://arxiv.org/pdf/2112.07491v3'], 'title': 'Quantum Annealing for Industry Applications: Introduction and Review', 'authors': ['Sheir Yarkoni', 'Elena Raponi', 'Thomas Bäck', 'Sebastian Schmitt'], 'comment': 'major revision with extended noise section and discussion of\\n alternative platforms', 'pdf_url': 'http://arxiv.org/pdf/2112.07491v3', 'summary': 'Quantum annealing is a heuristic quantum optimization algorithm that can beused to solve combinatorial optimization problems. In recent years, advances inquantum technologies have enabled the development of small- andintermediate-scale quantum processors that implement the quantum annealingalgorithm for programmable use. Specifically, quantum annealing processorsproduced by D-Wave Systems have been studied and tested extensively in bothresearch and industrial settings across different disciplines. In this paper weprovide a literature review of the theoretical motivations for quantumannealing as a heuristic quantum optimization algorithm, the software andhardware that is required to use such quantum processors, and thestate-of-the-art applications and proofs-of-concepts that have beendemonstrated using them. The goal of our review is to provide a centralized andcondensed source regarding applications of quantum annealing technology. Weidentify the advantages, limitations, and potential of quantum annealing forboth researchers and practitioners from various fields.', 'updated': '2022-06-13 08:37:49', 'entry_id': 'http://arxiv.org/abs/2112.07491v3', 'published': '2021-12-14 15:58:30', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1608.00249v1', 'http://arxiv.org/pdf/1608.00249v1'], 'title': 'Comments on the parallelization efficiency of the Sunway TaihuLight supercomputer', 'authors': ['János Végh'], 'comment': '4 figures', 'pdf_url': 'http://arxiv.org/pdf/1608.00249v1', 'summary': 'In the world of supercomputers, the large number of processors requires tominimize the inefficiencies of parallelization, which appear as a sequentialpart of the program from the point of view of Amdahl\\'s law. The recentlysuggested new figure of merit is applied to the recently presentedsupercomputer, and the timeline of \"Top 500\" supercomputers is scrutinizedusing the metric. It is demonstrated, that in addition to the computingperformance and power consumption, the new supercomputer is also excellent inthe efficiency of parallelization. Based on the suggested merit, a \"Moore-law\"like observation is derived for the timeline of parallelization efficacy ofsupercomputers.', 'updated': '2016-07-31 19:02:34', 'entry_id': 'http://arxiv.org/abs/1608.00249v1', 'published': '2016-07-31 19:02:34', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}, {'doi': None, 'links': ['http://arxiv.org/abs/1708.01462v2', 'http://arxiv.org/pdf/1708.01462v2'], 'title': \"How Amdahl's low restricts supercomputer applications and building ever bigger supercomputers\", 'authors': ['János Végh'], 'comment': '30 pages, 10 figures', 'pdf_url': 'http://arxiv.org/pdf/1708.01462v2', 'summary': \"This paper reinterprets Amdahl's law in terms of execution time and appliesthis simple model to supercomputing. The systematic discussion results inpractical formulas enabling to calculate expected running time using largenumber of processors from experimental runs using low number of processors,delivers a quantitative measure of computational efficiency of supercomputingapplications. Through separating non-parallelizable contribution to fractionsaccording to their origin, Amdahl's law enables to derive a timeline forsupercomputers (quite similar to Moore's law) and describes why Amdahl's lawlimits the size of supercomputers. The paper validates that Amdahl's 50-yearsold model (with slight extension) correctly describes the performancelimitations of the present supercomputers. Using some simple and reasonableassumptions, the absolute performance bound of supercomputers is concluded,furthermore that serious enhancements are still necessary to achieve theexaFLOPS dream value.\", 'updated': '2017-12-29 06:26:45', 'entry_id': 'http://arxiv.org/abs/1708.01462v2', 'published': '2017-08-04 11:56:45', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1908.10698v1', 'http://arxiv.org/pdf/1908.10698v1'], 'title': 'Thermal surface neutralization of Fr ions with metal foils for magneto-optical trapping of radioisotopes', 'authors': ['H. Kawamura', 'T. Aoki', 'K. Harada', 'T. Inoue', 'S. Ito', 'K. Kato', 'L. Koehler', 'K. Sakamoto', 'A. Uchiyama', 'Y. Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10698v1', 'summary': 'We investigate neutralization processes (especially thermal surfaceneutralization), which are required for the magneto-optical trapping ofradioactive atoms. A variety of neutralization methods are first summarized:neutral beam injection for fusion reactors, neutral atom implantation insemiconductor processing, and the production of radioactive neutral atoms inaccelerators. We focus on thermal surface neutralization, which producesneutral atoms in the thermal energy range for laser cooling. The experimentswere carried out with yttrium, gadolinium, and zirconium foils to neutralizefrancium and rubidium ions for magneto-optical trapping. The results reconfirmthat yttrium foil is a good neutralizer (i.e., it has a neutral releaseefficiency $>65\\\\%$). In addition, the release fraction when using yttrium foilexceeds 75\\\\% at 1350 K, which is greater than the release fraction for theother foils. This reconfirmation is important because few previous studies havefocused on thermal surface neutralization. Moreover, the results show that theneutralization efficiency is strongly influenced by the experimental processitself.', 'updated': '2019-08-28 13:01:01', 'entry_id': 'http://arxiv.org/abs/1908.10698v1', 'published': '2019-08-28 13:01:01', 'categories': ['physics.ins-det'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.ins-det'}, {'doi': None, 'links': ['http://arxiv.org/abs/1908.10686v1', 'http://arxiv.org/pdf/1908.10686v1'], 'title': 'Alkali ion-to-neutral atom converter for the magneto-optical trap of a radioactive isotope', 'authors': ['Hirokazu Kawamura', 'Ken-ichi Harada', 'Tomoya Sato', 'Saki Ezure', 'Hiroshi Arikawa', 'Takeshi Furukawa', 'Tomohiro Hayamizu', 'Takeshi Inoue', 'Taisuke Ishikawa', 'Masatoshi Itoh', 'Tomohiro Kato', 'Akihito Oikawa', 'Takatoshi Aoki', 'Atsushi Hatakeyama', 'Yasuhiro Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10686v1', 'summary': 'We have developed a unique neutralizer device that uses an yttrium targetsurrounded by a platinum wall to magneto-optically trap radioactive atoms. Ingeneral, the radioactive nucleus produced in a nuclear reaction is extractedand transported in ion form. For the magneto-optical trap, thermalneutralization must occur on the surface of a metal with a small work function.The converter can produce a neutral atomic beam with small angular divergencethat, given the recycling of atoms and ions, converts ions into neutral atomswith remarkable efficiency. We demonstrated the ion neutralization processusing stable rubidium and confirmed $10^6$ neutralized atoms in themagneto-optical trap. Additionally, the experiment using francium demonstratedthe obtaining of neutralized francium atoms.', 'updated': '2019-08-28 12:38:44', 'entry_id': 'http://arxiv.org/abs/1908.10686v1', 'published': '2019-08-28 12:38:44', 'categories': ['physics.atom-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.atom-ph'}]}, {'result': [{'doi': '10.1088/1361-648X/aa761f', 'links': ['http://dx.doi.org/10.1088/1361-648X/aa761f', 'http://arxiv.org/abs/1611.09106v1', 'http://arxiv.org/pdf/1611.09106v1'], 'title': 'Three-electron spin qubits', 'authors': ['Maximilian Russ', 'Guido Burkard'], 'comment': '42 pages, 13 figures', 'pdf_url': 'http://arxiv.org/pdf/1611.09106v1', 'summary': 'The goal of this article is to review the progress of three-electron spinqubits from their inception to the state of the art. We direct the main focustowards the resonant exchange (RX) qubit and the exchange-only qubit, but wealso discuss other qubit implementations using three electron spins. For eachthree-spin qubit we describe the qubit model, the physical realization, theimplementations of single-qubit operations, as well as the read-out andinitialization schemes. Two-qubit gates and decoherence properties arediscussed for the RX qubit and the exchange-only qubit, thereby, completing thelist of requirements for a viable candidate qubit implementation for quantumcomputation. We start with describing the full system of three electrons in atriple quantum dot, then discuss the charge-stability diagram and restrictourselves to the relevant subsystem, introduce the qubit states, and discussimportant transitions to other charge states. Introducing the various qubitimplementations, we begin with the exchange-only qubit, followed by thespin-charge qubit, the hybrid qubit, and the RX qubit, discussing for each thesingle-qubit operations, read-out, and initialization methods, whereas the mainfocus will be on the RX qubit, whose single-qubit operations are realized bydriving the qubit at its resonant frequency in the microwave range similar toelectron spin resonance. Two different types of two-qubit operations arepresented for the exchange-only and the RX qubit which can be divided intoshort-ranged and long-ranged interactions. Both of these interaction types canbe expected to be necessary in a large-scale quantum computer. We also takeinto account the decoherence of the qubit through the influence of magneticnoise as well as dephasing due to charge noise.', 'updated': '2016-11-28 13:21:43', 'entry_id': 'http://arxiv.org/abs/1611.09106v1', 'published': '2016-11-28 13:21:43', 'categories': ['cond-mat.mes-hall'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cond-mat.mes-hall'}, {'doi': '10.1103/PhysRevB.77.212506', 'links': ['http://dx.doi.org/10.1103/PhysRevB.77.212506', 'http://arxiv.org/abs/cond-mat/0703505v1', 'http://arxiv.org/pdf/cond-mat/0703505v1'], 'title': 'Macroscopic Many-Qubit Interactions in Superconducting Flux Qubits', 'authors': ['Sam Young Cho', 'Mun Dae Kim'], 'comment': '5 pages, 1 figure', 'pdf_url': 'http://arxiv.org/pdf/cond-mat/0703505v1', 'summary': 'Superconducting flux qubits are considered to investigate macroscopicmany-qubit interactions. Many-qubit states based on current states can be manipulated through thecurrent-phase relation in each superconducting loop. For flux qubit systems comprised of $N$ qubit loops, a general expression oflow energy Hamiltonian is presented in terms of low energy levels of qubits andmacroscopic quantum tunnelings between the many-qubit states. Many-qubit interactions classified by {\\\\em Ising type- or tunnel-}exchangeinteractions can be observable experimentally. Flux qubit systems can provide various artificial-spin systems to studymany-body systems that cannot be found naturally.', 'updated': '2007-03-20 02:20:35', 'entry_id': 'http://arxiv.org/abs/cond-mat/0703505v1', 'published': '2007-03-20 02:20:35', 'categories': ['cond-mat.supr-con', 'cond-mat.mes-hall'], 'journal_ref': 'Phys. Rev. B 77, 212506 (2008)', 'pdf_downloaded': None, 'primary_category': 'cond-mat.supr-con'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2412.18979v1', 'http://arxiv.org/pdf/2412.18979v1'], 'title': 'Quantum memristors for neuromorphic quantum machine learning', 'authors': ['Lucas Lamata'], 'comment': 'Invited Perspective', 'pdf_url': 'http://arxiv.org/pdf/2412.18979v1', 'summary': 'Quantum machine learning may permit to realize more efficient machinelearning calculations with near-term quantum devices. Among the diverse quantummachine learning paradigms which are currently being considered, quantummemristors are promising as a way of combining, in the same quantum hardware, aunitary evolution with the nonlinearity provided by the measurement andfeedforward. Thus, an efficient way of deploying neuromorphic quantum computingfor quantum machine learning may be enabled.', 'updated': '2024-12-25 20:21:24', 'entry_id': 'http://arxiv.org/abs/2412.18979v1', 'published': '2024-12-25 20:21:24', 'categories': ['quant-ph', 'cs.NE'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0501176v2', 'http://arxiv.org/pdf/quant-ph/0501176v2'], 'title': 'Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines', 'authors': ['Daowen Qiu'], 'comment': '25 pages', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0501176v2', 'summary': 'As was well known, in classical computation, Turing machines, circuits,multi-stack machines, and multi-counter machines are equivalent, that is, theycan simulate each other in polynomial time. In quantum computation, Yao [11]first proved that for any quantum Turing machines $M$, there exists quantumBoolean circuit $(n,t)$-simulating $M$, where $n$ denotes the length of inputstrings, and $t$ is the number of move steps before machine stopping. However,the simulations of quantum Turing machines by quantum multi-stack machines andquantum multi-counter machines have not been considered, and quantummulti-stack machines have not been established, either. Though quantum countermachines were dealt with by Kravtsev [6] and Yamasaki {\\\\it et al.} [10], inwhich the machines count with $0,\\\\pm 1$ only, we sense that it is difficult tosimulate quantum Turing machines in terms of this fashion of quantum computingdevices, and we therefore prove that the quantum multi-counter machines allowedto count with $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ for some $n>1$ can efficiently simulatequantum Turing machines. Therefore, our mail goals are to establish quantum multi-stack machines andquantum multi-counter machines with counts $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ and $n>1$,and particularly to simulate quantum Turing machines by these quantum computingdevices.', 'updated': '2005-06-06 17:29:54', 'entry_id': 'http://arxiv.org/abs/quant-ph/0501176v2', 'published': '2005-01-30 04:42:12', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}]\n", "--------------------------------------------------\n", "Transition number: 25\n", "Transition type: step\n", "Transition output: {'arxiv_results': [{'result': [{'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0311196v1', 'http://arxiv.org/pdf/quant-ph/0311196v1'], 'title': 'Von Neumann Quantum Processors', 'authors': ['Alexander Yu. Vlasov'], 'comment': 'LaTeX 8 pages, for 304th WEH Seminar \"Elementary Quantum Processors,\"\\n 13-15 October 2003', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0311196v1', 'summary': 'Most modern classical processors support so-called von Neumann architecturewith program and data registers. In present work is revisited similar approachto models of quantum processors. Deterministic programmable quantum gate arraysare considered as an example. They are also called von Neumann quantumprocessors here and use conditional quantum dynamics. Such devices have someproblems with universality, but consideration of hybrid quantum processors,i.e., models with both continuous and discrete quantum variables resolves theproblems. It is also discussed comparison of such a model of quantum processorswith more traditional approach.', 'updated': '2003-11-27 15:43:16', 'entry_id': 'http://arxiv.org/abs/quant-ph/0311196v1', 'published': '2003-11-27 15:43:16', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1126/sciadv.abj6624', 'links': ['http://dx.doi.org/10.1126/sciadv.abj6624', 'http://arxiv.org/abs/2105.02447v2', 'http://arxiv.org/pdf/2105.02447v2'], 'title': 'Programmable and sequential Gaussian gates in a loop-based single-mode photonic quantum processor', 'authors': ['Yutaro Enomoto', 'Kazuma Yonezu', 'Yosuke Mitsuhashi', 'Kan Takase', 'Shuntaro Takeda'], 'comment': '17 pages, 6 figures. 5 pages, 3 figures in the supplementary\\n materials', 'pdf_url': 'http://arxiv.org/pdf/2105.02447v2', 'summary': 'A quantum processor to import, process, and export optical quantum states isa common core technology enabling various photonic quantum informationprocessing. However, there has been no photonic processor which issimultaneously universal, scalable, and programmable. Here, we report on anoriginal loop-based single-mode versatile photonic quantum processor which isdesigned to be universal, scalable, and programmable. Our processor can performarbitrarily many steps of programmable quantum operations on a givensingle-mode optical quantum state by time-domain processing in a dynamicallycontrolled loop-based optical circuit. We use this processor to demonstrateprogrammable single-mode Gaussian gates and multi-step squeezing gates. Inaddition, we prove that the processor can perform universal quantum operationsby injecting appropriate ancillary states and also be straightforwardlyextended to a multi-mode processor. These results show that our processor isprogrammable, scalable, and potentially universal, leading to be suitable forgeneral-purpose applications.', 'updated': '2021-11-14 23:50:51', 'entry_id': 'http://arxiv.org/abs/2105.02447v2', 'published': '2021-05-06 05:27:35', 'categories': ['quant-ph'], 'journal_ref': 'Science Advances 7, eabj6624 (2021)', 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': '10.1109/TPDS.2020.3044846', 'links': ['http://dx.doi.org/10.1109/TPDS.2020.3044846', 'http://arxiv.org/abs/2009.06387v2', 'http://arxiv.org/pdf/2009.06387v2'], 'title': 'Inferring the Dynamics of the State Evolution During Quantum Annealing', 'authors': ['Elijah Pelofske', 'Georg Hahn', 'Hristo Djidjev'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2009.06387v2', 'summary': 'To solve an optimization problem using a commercial quantum annealer, one hasto represent the problem of interest as an Ising or a quadratic unconstrainedbinary optimization (QUBO) problem and submit its coefficients to the annealer,which then returns a user-specified number of low-energy solutions. It would beuseful to know what happens in the quantum processor during the anneal processso that one could design better algorithms or suggest improvements to thehardware. However, existing quantum annealers are not able to directly extractsuch information from the processor. Hence, in this work we propose to useadvanced features of D-Wave 2000Q to indirectly infer information about thedynamics of the state evolution during the anneal process. Specifically, D-Wave2000Q allows the user to customize the anneal schedule, that is, the schedulewith which the anneal fraction is changed from the start to the end of theanneal. Using this feature, we design a set of modified anneal schedules whoseoutputs can be used to generate information about the states of the system atuser-defined time points during a standard anneal. With this process, called\"slicing\", we obtain approximate distributions of lowest-energy annealsolutions as the anneal time evolves. We use our technique to obtain a varietyof insights into the annealer, such as the state evolution during annealing,when individual bits in an evolving solution flip during the anneal process andwhen they stabilize, and we introduce a technique to estimate the freeze-outpoint of both the system as well as of individual qubits.', 'updated': '2020-11-20 02:12:21', 'entry_id': 'http://arxiv.org/abs/2009.06387v2', 'published': '2020-09-10 18:14:28', 'categories': ['quant-ph', 'cond-mat.dis-nn', 'cond-mat.stat-mech', 'cs.ET'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': '10.1088/1361-6633/ac8c54', 'links': ['http://dx.doi.org/10.1088/1361-6633/ac8c54', 'http://arxiv.org/abs/2112.07491v3', 'http://arxiv.org/pdf/2112.07491v3'], 'title': 'Quantum Annealing for Industry Applications: Introduction and Review', 'authors': ['Sheir Yarkoni', 'Elena Raponi', 'Thomas Bäck', 'Sebastian Schmitt'], 'comment': 'major revision with extended noise section and discussion of\\n alternative platforms', 'pdf_url': 'http://arxiv.org/pdf/2112.07491v3', 'summary': 'Quantum annealing is a heuristic quantum optimization algorithm that can beused to solve combinatorial optimization problems. In recent years, advances inquantum technologies have enabled the development of small- andintermediate-scale quantum processors that implement the quantum annealingalgorithm for programmable use. Specifically, quantum annealing processorsproduced by D-Wave Systems have been studied and tested extensively in bothresearch and industrial settings across different disciplines. In this paper weprovide a literature review of the theoretical motivations for quantumannealing as a heuristic quantum optimization algorithm, the software andhardware that is required to use such quantum processors, and thestate-of-the-art applications and proofs-of-concepts that have beendemonstrated using them. The goal of our review is to provide a centralized andcondensed source regarding applications of quantum annealing technology. Weidentify the advantages, limitations, and potential of quantum annealing forboth researchers and practitioners from various fields.', 'updated': '2022-06-13 08:37:49', 'entry_id': 'http://arxiv.org/abs/2112.07491v3', 'published': '2021-12-14 15:58:30', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1608.00249v1', 'http://arxiv.org/pdf/1608.00249v1'], 'title': 'Comments on the parallelization efficiency of the Sunway TaihuLight supercomputer', 'authors': ['János Végh'], 'comment': '4 figures', 'pdf_url': 'http://arxiv.org/pdf/1608.00249v1', 'summary': 'In the world of supercomputers, the large number of processors requires tominimize the inefficiencies of parallelization, which appear as a sequentialpart of the program from the point of view of Amdahl\\'s law. The recentlysuggested new figure of merit is applied to the recently presentedsupercomputer, and the timeline of \"Top 500\" supercomputers is scrutinizedusing the metric. It is demonstrated, that in addition to the computingperformance and power consumption, the new supercomputer is also excellent inthe efficiency of parallelization. Based on the suggested merit, a \"Moore-law\"like observation is derived for the timeline of parallelization efficacy ofsupercomputers.', 'updated': '2016-07-31 19:02:34', 'entry_id': 'http://arxiv.org/abs/1608.00249v1', 'published': '2016-07-31 19:02:34', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}, {'doi': None, 'links': ['http://arxiv.org/abs/1708.01462v2', 'http://arxiv.org/pdf/1708.01462v2'], 'title': \"How Amdahl's low restricts supercomputer applications and building ever bigger supercomputers\", 'authors': ['János Végh'], 'comment': '30 pages, 10 figures', 'pdf_url': 'http://arxiv.org/pdf/1708.01462v2', 'summary': \"This paper reinterprets Amdahl's law in terms of execution time and appliesthis simple model to supercomputing. The systematic discussion results inpractical formulas enabling to calculate expected running time using largenumber of processors from experimental runs using low number of processors,delivers a quantitative measure of computational efficiency of supercomputingapplications. Through separating non-parallelizable contribution to fractionsaccording to their origin, Amdahl's law enables to derive a timeline forsupercomputers (quite similar to Moore's law) and describes why Amdahl's lawlimits the size of supercomputers. The paper validates that Amdahl's 50-yearsold model (with slight extension) correctly describes the performancelimitations of the present supercomputers. Using some simple and reasonableassumptions, the absolute performance bound of supercomputers is concluded,furthermore that serious enhancements are still necessary to achieve theexaFLOPS dream value.\", 'updated': '2017-12-29 06:26:45', 'entry_id': 'http://arxiv.org/abs/1708.01462v2', 'published': '2017-08-04 11:56:45', 'categories': ['cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.DC'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/1908.10698v1', 'http://arxiv.org/pdf/1908.10698v1'], 'title': 'Thermal surface neutralization of Fr ions with metal foils for magneto-optical trapping of radioisotopes', 'authors': ['H. Kawamura', 'T. Aoki', 'K. Harada', 'T. Inoue', 'S. Ito', 'K. Kato', 'L. Koehler', 'K. Sakamoto', 'A. Uchiyama', 'Y. Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10698v1', 'summary': 'We investigate neutralization processes (especially thermal surfaceneutralization), which are required for the magneto-optical trapping ofradioactive atoms. A variety of neutralization methods are first summarized:neutral beam injection for fusion reactors, neutral atom implantation insemiconductor processing, and the production of radioactive neutral atoms inaccelerators. We focus on thermal surface neutralization, which producesneutral atoms in the thermal energy range for laser cooling. The experimentswere carried out with yttrium, gadolinium, and zirconium foils to neutralizefrancium and rubidium ions for magneto-optical trapping. The results reconfirmthat yttrium foil is a good neutralizer (i.e., it has a neutral releaseefficiency $>65\\\\%$). In addition, the release fraction when using yttrium foilexceeds 75\\\\% at 1350 K, which is greater than the release fraction for theother foils. This reconfirmation is important because few previous studies havefocused on thermal surface neutralization. Moreover, the results show that theneutralization efficiency is strongly influenced by the experimental processitself.', 'updated': '2019-08-28 13:01:01', 'entry_id': 'http://arxiv.org/abs/1908.10698v1', 'published': '2019-08-28 13:01:01', 'categories': ['physics.ins-det'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.ins-det'}, {'doi': None, 'links': ['http://arxiv.org/abs/1908.10686v1', 'http://arxiv.org/pdf/1908.10686v1'], 'title': 'Alkali ion-to-neutral atom converter for the magneto-optical trap of a radioactive isotope', 'authors': ['Hirokazu Kawamura', 'Ken-ichi Harada', 'Tomoya Sato', 'Saki Ezure', 'Hiroshi Arikawa', 'Takeshi Furukawa', 'Tomohiro Hayamizu', 'Takeshi Inoue', 'Taisuke Ishikawa', 'Masatoshi Itoh', 'Tomohiro Kato', 'Akihito Oikawa', 'Takatoshi Aoki', 'Atsushi Hatakeyama', 'Yasuhiro Sakemi'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/1908.10686v1', 'summary': 'We have developed a unique neutralizer device that uses an yttrium targetsurrounded by a platinum wall to magneto-optically trap radioactive atoms. Ingeneral, the radioactive nucleus produced in a nuclear reaction is extractedand transported in ion form. For the magneto-optical trap, thermalneutralization must occur on the surface of a metal with a small work function.The converter can produce a neutral atomic beam with small angular divergencethat, given the recycling of atoms and ions, converts ions into neutral atomswith remarkable efficiency. We demonstrated the ion neutralization processusing stable rubidium and confirmed $10^6$ neutralized atoms in themagneto-optical trap. Additionally, the experiment using francium demonstratedthe obtaining of neutralized francium atoms.', 'updated': '2019-08-28 12:38:44', 'entry_id': 'http://arxiv.org/abs/1908.10686v1', 'published': '2019-08-28 12:38:44', 'categories': ['physics.atom-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'physics.atom-ph'}]}, {'result': [{'doi': '10.1088/1361-648X/aa761f', 'links': ['http://dx.doi.org/10.1088/1361-648X/aa761f', 'http://arxiv.org/abs/1611.09106v1', 'http://arxiv.org/pdf/1611.09106v1'], 'title': 'Three-electron spin qubits', 'authors': ['Maximilian Russ', 'Guido Burkard'], 'comment': '42 pages, 13 figures', 'pdf_url': 'http://arxiv.org/pdf/1611.09106v1', 'summary': 'The goal of this article is to review the progress of three-electron spinqubits from their inception to the state of the art. We direct the main focustowards the resonant exchange (RX) qubit and the exchange-only qubit, but wealso discuss other qubit implementations using three electron spins. For eachthree-spin qubit we describe the qubit model, the physical realization, theimplementations of single-qubit operations, as well as the read-out andinitialization schemes. Two-qubit gates and decoherence properties arediscussed for the RX qubit and the exchange-only qubit, thereby, completing thelist of requirements for a viable candidate qubit implementation for quantumcomputation. We start with describing the full system of three electrons in atriple quantum dot, then discuss the charge-stability diagram and restrictourselves to the relevant subsystem, introduce the qubit states, and discussimportant transitions to other charge states. Introducing the various qubitimplementations, we begin with the exchange-only qubit, followed by thespin-charge qubit, the hybrid qubit, and the RX qubit, discussing for each thesingle-qubit operations, read-out, and initialization methods, whereas the mainfocus will be on the RX qubit, whose single-qubit operations are realized bydriving the qubit at its resonant frequency in the microwave range similar toelectron spin resonance. Two different types of two-qubit operations arepresented for the exchange-only and the RX qubit which can be divided intoshort-ranged and long-ranged interactions. Both of these interaction types canbe expected to be necessary in a large-scale quantum computer. We also takeinto account the decoherence of the qubit through the influence of magneticnoise as well as dephasing due to charge noise.', 'updated': '2016-11-28 13:21:43', 'entry_id': 'http://arxiv.org/abs/1611.09106v1', 'published': '2016-11-28 13:21:43', 'categories': ['cond-mat.mes-hall'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cond-mat.mes-hall'}, {'doi': '10.1103/PhysRevB.77.212506', 'links': ['http://dx.doi.org/10.1103/PhysRevB.77.212506', 'http://arxiv.org/abs/cond-mat/0703505v1', 'http://arxiv.org/pdf/cond-mat/0703505v1'], 'title': 'Macroscopic Many-Qubit Interactions in Superconducting Flux Qubits', 'authors': ['Sam Young Cho', 'Mun Dae Kim'], 'comment': '5 pages, 1 figure', 'pdf_url': 'http://arxiv.org/pdf/cond-mat/0703505v1', 'summary': 'Superconducting flux qubits are considered to investigate macroscopicmany-qubit interactions. Many-qubit states based on current states can be manipulated through thecurrent-phase relation in each superconducting loop. For flux qubit systems comprised of $N$ qubit loops, a general expression oflow energy Hamiltonian is presented in terms of low energy levels of qubits andmacroscopic quantum tunnelings between the many-qubit states. Many-qubit interactions classified by {\\\\em Ising type- or tunnel-}exchangeinteractions can be observable experimentally. Flux qubit systems can provide various artificial-spin systems to studymany-body systems that cannot be found naturally.', 'updated': '2007-03-20 02:20:35', 'entry_id': 'http://arxiv.org/abs/cond-mat/0703505v1', 'published': '2007-03-20 02:20:35', 'categories': ['cond-mat.supr-con', 'cond-mat.mes-hall'], 'journal_ref': 'Phys. Rev. B 77, 212506 (2008)', 'pdf_downloaded': None, 'primary_category': 'cond-mat.supr-con'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2412.18979v1', 'http://arxiv.org/pdf/2412.18979v1'], 'title': 'Quantum memristors for neuromorphic quantum machine learning', 'authors': ['Lucas Lamata'], 'comment': 'Invited Perspective', 'pdf_url': 'http://arxiv.org/pdf/2412.18979v1', 'summary': 'Quantum machine learning may permit to realize more efficient machinelearning calculations with near-term quantum devices. Among the diverse quantummachine learning paradigms which are currently being considered, quantummemristors are promising as a way of combining, in the same quantum hardware, aunitary evolution with the nonlinearity provided by the measurement andfeedforward. Thus, an efficient way of deploying neuromorphic quantum computingfor quantum machine learning may be enabled.', 'updated': '2024-12-25 20:21:24', 'entry_id': 'http://arxiv.org/abs/2412.18979v1', 'published': '2024-12-25 20:21:24', 'categories': ['quant-ph', 'cs.NE'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0501176v2', 'http://arxiv.org/pdf/quant-ph/0501176v2'], 'title': 'Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines', 'authors': ['Daowen Qiu'], 'comment': '25 pages', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0501176v2', 'summary': 'As was well known, in classical computation, Turing machines, circuits,multi-stack machines, and multi-counter machines are equivalent, that is, theycan simulate each other in polynomial time. In quantum computation, Yao [11]first proved that for any quantum Turing machines $M$, there exists quantumBoolean circuit $(n,t)$-simulating $M$, where $n$ denotes the length of inputstrings, and $t$ is the number of move steps before machine stopping. However,the simulations of quantum Turing machines by quantum multi-stack machines andquantum multi-counter machines have not been considered, and quantummulti-stack machines have not been established, either. Though quantum countermachines were dealt with by Kravtsev [6] and Yamasaki {\\\\it et al.} [10], inwhich the machines count with $0,\\\\pm 1$ only, we sense that it is difficult tosimulate quantum Turing machines in terms of this fashion of quantum computingdevices, and we therefore prove that the quantum multi-counter machines allowedto count with $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ for some $n>1$ can efficiently simulatequantum Turing machines. Therefore, our mail goals are to establish quantum multi-stack machines andquantum multi-counter machines with counts $0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ and $n>1$,and particularly to simulate quantum Turing machines by these quantum computingdevices.', 'updated': '2005-06-06 17:29:54', 'entry_id': 'http://arxiv.org/abs/quant-ph/0501176v2', 'published': '2005-01-30 04:42:12', 'categories': ['quant-ph'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}, {'result': [{'doi': None, 'links': ['http://arxiv.org/abs/2208.00733v1', 'http://arxiv.org/pdf/2208.00733v1'], 'title': 'The Rise of Quantum Internet Computing', 'authors': ['Seng W. Loke'], 'comment': None, 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1', 'summary': 'This article highlights quantum Internet computing as referring todistributed quantum computing over the quantum Internet, analogous to(classical) Internet computing involving (classical) distributed computing overthe (classical) Internet. Relevant to quantum Internet computing would be areasof study such as quantum protocols for distributed nodes using quantuminformation for computations, quantum cloud computing, delegated verifiableblind or private computing, non-local gates, and distributed quantumapplications, over Internet-scale distances.', 'updated': '2022-08-01 10:36:13', 'entry_id': 'http://arxiv.org/abs/2208.00733v1', 'published': '2022-08-01 10:36:13', 'categories': ['cs.ET', 'cs.DC'], 'journal_ref': None, 'pdf_downloaded': None, 'primary_category': 'cs.ET'}, {'doi': None, 'links': ['http://arxiv.org/abs/quant-ph/0003151v1', 'http://arxiv.org/pdf/quant-ph/0003151v1'], 'title': 'Unconventional Quantum Computing Devices', 'authors': ['Seth Lloyd'], 'comment': '9 pages, plain TeX, article from 1998 conference proceedings\\n proposing fermionic quantum computers', 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1', 'summary': \"This paper investigates a variety of unconventional quantum computationdevices, including fermionic quantum computers and computers that exploitnonlinear quantum mechanics. It is shown that unconventional quantum computingdevices can in principle compute some quantities more rapidly than`conventional' quantum computers.\", 'updated': '2000-03-31 22:07:23', 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1', 'published': '2000-03-31 22:07:23', 'categories': ['quant-ph'], 'journal_ref': \"in `Unconventional Models of Computation,' C.S. Calude, J. Casti,\\n M.J. Dinneen, eds., Springer, Singapore, 1998\", 'pdf_downloaded': None, 'primary_category': 'quant-ph'}]}]}\n", "--------------------------------------------------\n", "Transition number: 26\n", "Transition type: step\n", "Transition output: [{'id': '63837636-bca5-4b08-b576-e4e8235da0eb', 'name': 'user_new_1', 'about': 'This is a test user', 'metadata': {'age': 25, 'city': 'San Francisco', 'ppid': '63837636-bca5-4b08-b576-e4e8235da0eb', 'state': 'California', 'top_journals': \"['Nature', 'Science', 'IEEE Transactions on Quantum Engineering']\", 'top_scientist': 'Richard Feynman', 'top_research_area': 'Quantum Computing', 'research_interests': \"['Quantum Computing', 'Artificial Intelligence', 'Machine Learning']\", 'favorite_scientists': \"['Richard Feynman', 'Alan Turing', 'Geoffrey Hinton']\", 'latest_research_read': 'Quantum Machine Learning'}, 'created_at': '2025-04-21T16:18:02.798552Z', 'updated_at': '2025-04-21T16:18:02.798552Z'}]\n", "--------------------------------------------------\n", "Transition number: 27\n", "Transition type: step\n", "Transition output: {'user_info': {'id': '63837636-bca5-4b08-b576-e4e8235da0eb', 'name': 'user_new_1', 'about': 'This is a test user', 'metadata': {'age': 25, 'city': 'San Francisco', 'ppid': '63837636-bca5-4b08-b576-e4e8235da0eb', 'state': 'California', 'top_journals': \"['Nature', 'Science', 'IEEE Transactions on Quantum Engineering']\", 'top_scientist': 'Richard Feynman', 'top_research_area': 'Quantum Computing', 'research_interests': \"['Quantum Computing', 'Artificial Intelligence', 'Machine Learning']\", 'favorite_scientists': \"['Richard Feynman', 'Alan Turing', 'Geoffrey Hinton']\", 'latest_research_read': 'Quantum Machine Learning'}, 'created_at': '2025-04-21T16:18:02.798552Z', 'updated_at': '2025-04-21T16:18:02.798552Z'}}\n", "--------------------------------------------------\n", "Transition number: 28\n", "Transition type: step\n", "Transition output: [{'id': '068066fd-3ee0-7190-8000-6ffce2993bb3', 'title': 'Google Scholar Persona', 'content': ['This is a test google scholar persona. The user is a 25 year old living in San Francisco. He is a fan of Google Scholar and is a student at Stanford University. He uses Google Scholar to stay updated with the latest research in quantum computing and artificial intelligence. Over the last 3 months, he has read 100+ research papers on quantum computing and artificial intelligence. He is particularly interested in the latest research in quantum machine learning and quantum error correction. He is also interested in how LLMs are being used to solve problems in quantum mechanics.'], 'language': 'english', 'metadata': {}, 'modality': 'text', 'created_at': '2025-04-21T16:18:27.934304Z', 'embeddings': [[0.011083192, 0.010265074, -0.02482141, -0.010460598, 0.020221423, 0.015950741, 0.009189685, 0.03535919, 0.035400353, 0.050548412, 0.024059892, -0.043386016, 0.00232958, -0.00874718, 0.00012373079, 0.055199854, -0.04733768, -0.025047809, -0.06557298, -0.004569115, -0.004548534, -0.05141284, -0.11072901, -0.011587441, 0.04960166, 0.032333694, 0.022084057, -0.022289874, -0.014191014, -0.034679998, 0.013017862, 0.011494824, 0.026570847, -0.06581996, 0.006838237, -0.07590494, 0.015333292, 0.0196863, 0.045979295, 0.06479088, 0.04733768, -0.033012886, -0.009791696, 0.0067044566, 0.048531413, -0.06306203, 0.059233848, -0.005171127, 0.008994159, -0.018369079, 0.033609755, -0.022742668, 0.045979295, -0.06392645, -0.02212522, -0.085537136, 0.073640965, 0.011865293, 0.05178331, -0.04182181, -0.020046478, 0.035338607, -0.017710468, -0.044044625, 0.06339133, 0.04626744, 0.02173417, -0.008850088, -0.0050450647, 0.023504188, -0.01414985, 0.040031213, 0.03099589, 0.024059892, -0.0017404316, 0.012997281, 0.035811987, 0.0022202402, -0.08339664, -0.047749314, -0.018801292, -0.020375784, 0.00232958, 0.0047929403, 0.044579748, -0.046596743, 0.008438456, -0.13723812, 0.0285261, 0.0413896, -0.015395037, 0.027867487, 0.016948948, -0.015415619, 0.020036189, 0.02854668, 0.048160944, -0.014036652, 0.03124287, 0.009045614, -0.0020092789, -0.06442041, 0.027455855, -0.04227461, 0.08035057, -0.025088971, -0.061374333, 0.0055107237, 0.022578016, 0.0847962, -0.0013982625, -0.020344913, -0.06211527, 0.03420662, -0.045361847, 0.054623567, -0.068083934, -0.021528354, 0.018749839, -0.09014741, 0.013625019, -0.019521648, -0.006894836, -0.031819154, -0.015786087, 0.029081801, -0.0006901268, 0.019820081, 0.025315369, -0.012575358, -0.034721162, 0.039290275, -0.044826727, -0.08331432, -0.04820211, 0.01619772, 0.010918539, 0.036820482, 0.025953399, 0.009235993, -0.03817887, -0.029411107, 0.031716246, -0.03667641, -0.0413896, -0.021939985, -0.03175741, 0.009199975, 0.011031738, 0.03151043, -0.024862574, 0.0038204596, -0.010980284, -0.0146541, 0.052771226, 0.0007904621, 0.07442307, 0.0019526794, -0.004623142, 0.017237091, -0.023565933, 0.02867017, 0.013028153, 0.02955518, -0.04420928, -0.00048013014, 0.0004119536, 0.0045433883, -0.004880412, 0.039043296, 0.0085259285, 0.030069718, -0.010393708, 0.021548936, -0.010203329, 0.036655832, 0.025191879, -0.021960568, -0.06866022, -0.025624093, -0.053512163, 0.0795273, 0.027435273, 0.024059892, 0.010131293, 0.0023540205, 0.08150314, -0.013336877, 0.060139436, -0.0113301715, -0.004090593, -0.027702834, -0.0127503015, -0.02932878, 0.033136375, 0.033609755, 0.052112613, -0.0050810827, -0.015724342, -0.012287215, 0.01634179, -0.012174017, 0.0041214656, 0.0071418155, -0.03163392, 0.065490656, 0.042603914, 0.022969067, -0.052812386, 0.0004016628, -0.007954788, -0.032457184, -0.030646004, -0.046185113, -0.03342452, -0.013532402, 0.011988782, -0.043221362, 0.011206682, 0.021693008, -0.008654563, 0.012297506, 0.09278186, -0.00976597, -0.012565067, -0.00083548436, 0.0046540145, -0.003130976, -0.015528818, 0.03305405, 0.021672426, 0.009735097, 0.016815167, 0.093440466, 0.011021447, 0.050301433, -0.022042895, 0.024121637, 0.02457443, 0.026097469, -0.025109554, -0.019861246, -0.011155227, -0.045979295, 0.048613742, -0.013007572, -0.030831238, 0.003130976, 0.031263452, 0.056640565, -0.05178331, -0.030234372, 0.006354569, 0.037458513, 0.0015011705, 0.016557898, 0.053059366, -0.034350693, -0.0030898128, 0.006390587, 0.038919806, -0.00029634289, -0.016640224, 0.057710808, -0.028567262, -0.02019055, 0.018369079, -0.039146204, -0.038096543, -0.022166384, 0.0012651252, -0.04375648, 0.062609226, -0.009524136, -0.009853441, -0.05647591, -0.033115797, -0.041245528, 0.012812046, -0.025624093, 0.018863037, 0.018585185, -0.005737121, -0.0570522, -0.02492432, -0.003943949, -0.000830339, -0.04947817, -0.015034859, -0.012410705, -0.031592757, -0.018163262, -0.010012949, 0.032848235, 0.006339133, -0.033033468, 0.009446954, 0.0022189538, -0.023277791, -0.0076717916, 0.021898823, -0.031572174, -0.015734633, -0.023936402, 0.0008541364, 0.036861647, 0.028093886, 0.047173027, -0.03743793, 0.0006843382, 0.09064137, 0.019274669, -0.008772907, -0.028135048, 0.044867888, -0.040977966, 0.019676011, -0.0063339877, 0.033609755, -0.055899628, -0.016249174, 0.00016384883, -0.048531413, 0.027126549, -0.0047929403, -0.0011911602, -0.0006164833, -0.0034525634, -0.021034395, -0.028587844, 0.0018536304, -0.06536716, -0.03972249, -0.004142047, 0.021044686, -0.0074608303, 0.008227495, 0.08710133, -0.025562348, -0.016990112, -0.069195345, -0.025768165, -0.06651973, 0.0046128514, 0.025418276, -0.006977163, 0.035400353, 0.03290998, -0.0012902091, 0.0005965448, 0.0012651252, -0.01066127, 0.004136902, -0.043921135, 0.026076889, -0.017659014, 0.004093166, -0.037746657, 0.0028093886, -0.010259928, 0.015333292, -0.016732842, 0.010774468, 0.0040700114, 0.015127476, -0.038137708, 0.004391599, 0.014129269, 0.042603914, 0.016033066, -0.034350693, 0.052647736, -0.03214846, -0.012822337, -0.05824593, -0.027949814, -0.024368616, 0.021939985, -0.015888996, 0.027497018, -0.014839334, 0.030399024, 0.05478822, -0.009169103, 0.0018832164, -0.0011326312, 0.05141284, 0.027620507, -0.011855002, 0.030501932, -0.010753887, 0.006827946, 0.0021263366, -0.051906798, 0.034885813, 0.02403931, -0.0045511066, -0.018955654, 0.021281375, 0.00066504296, 0.01336775, 0.017761922, -0.058163602, -0.0020568736, 0.046349764, 0.0055210143, -0.016269755, -0.040092956, 0.023586513, 0.019490777, -0.005325489, -0.006020118, -0.006863964, -0.017885411, 0.014705554, 0.061374333, 0.0058914833, 0.05717569, -0.026776662, 0.047543496, 0.02918471, 0.044785563, -0.008901542, 0.0012175303, -0.061374333, 0.021178467, -0.0032493202, 0.0054798513, -0.023216046, -0.058204766, 0.0017275681, 4.4982055e-05, 0.0034885814, 0.034391854, 0.015384747, 0.004450771, 0.027352948, 0.012174017, -0.0096476255, -0.014314503, -0.046102785, -0.046349764, -0.01530242, -0.0393726, -0.050836552, -0.011669768, -0.031963225, -0.057134524, -0.015724342, 0.008459038, -0.013378041, 0.005361507, -0.10010891, -0.017772213, -0.009874023, -0.035791405, 0.040072378, 0.032827653, -0.001458721, -0.024903737, 0.006761056, 0.032663, 0.010177601, -0.0851255, -0.010218765, 0.021003524, -0.021795915, -0.09129998, -0.000582395, 0.015652306, 0.012523904, -0.003046077, -0.008062842, 0.0053975247, 0.016094811, 0.0096116075, 0.019398158, 0.00970937, -0.027497018, 0.017895702, -0.0066684387, 0.032580674, 0.01530242, -0.043921135, -0.016177138, -0.030934146, 0.00078338716, -0.007471121, -0.039434347, -0.0011049747, -0.061168518, 0.046843722, -0.020766836, -0.02222813, -0.04515603, -0.054253098, -0.03200439, -0.022166384, 0.025932817, 0.036161873, 0.0027476437, 0.014170432, 0.0181221, -0.027579345, -0.0019205206, 0.019233506, 0.015600854, -0.005423252, -0.12027887, 0.0063442783, 0.027826324, 0.02827912, -0.021548936, 0.01221518, 0.02224871, 0.02222813, 0.004641151, -0.0029791866, 0.0879246, 0.018852746, 0.0127503015, 0.0027553618, -0.0014021215, 0.02570642, -0.0149936965, 0.026118051, 0.016578479, -0.04589697, -0.01048118, -0.014005779, -0.062403414, 0.010990575, -0.027579345, -0.03408313, -0.02842319, -0.03163392, 0.0020272876, 0.023586513, 0.039269693, -0.011433079, 0.021363702, 0.008520783, -0.018616058, -0.012235762, 0.017669303, 0.019995024, 0.05371798, -0.06520251, 0.011649186, -0.0021739316, 0.010723014, 0.009169103, -0.011947619, -0.034659415, 0.010270218, 0.011278717, -0.02263976, -0.0037973053, 0.007229287, -0.028052721, 0.044291604, -0.00042063647, -0.018935073, 0.0036841065, -0.030419605, -0.01156686, -0.010450307, 0.042007048, -0.03461825, 0.051001206, -0.025088971, -0.025253624, -0.04169832, -0.0029457416, -0.003995403, 0.030769493, 0.021651844, -0.00970937, 0.04215112, -0.01583754, 0.017134182, -0.012101981, 0.015652306, 0.016413826, -0.011175809, 0.023360116, -0.028731914, -0.018317625, 0.004587124, -0.00507851, -0.023174882, 0.07285887, -0.0108773755, 0.010193038, 0.00079946656, -0.006817655, 0.052153777, 0.03021379, 0.015672889, 0.0015461928, 0.008093715, -0.0021070414, 0.045320686, 0.04412695, -0.029164128, -0.006004682, 0.035420936, 0.010445163, -0.01042458, 0.03111938, 0.00591721, -0.025541766, 0.052894715, 0.034391854, -0.00032914482, -0.014726135, 0.02920529, 0.01581696, -0.07257073, 0.027332366, -0.010270218, -0.027702834, 0.00282997, -0.022145802, -0.039928306, 0.022269292, 0.015086314, 0.07487586, 0.026920734, 0.0075328657, 0.023092557, -0.0072189965, -0.0042835455, -0.02443036, 0.013470657, 0.036326524, -0.007805572, 0.023936402, 0.042974383, -0.034474183, -0.00874718, -0.0038384686, -0.00456397, 0.06392645, -0.007800427, 0.008798635, 0.011144937, 0.0025070962, 0.020674217, 0.005310053, 0.04192472, 0.018976236, 0.035029884, 0.018194135, 0.028217375, 0.0017622996, 0.0034165457, 0.018708674, -0.023154302, 0.036182456, -0.0056753764, -0.004857258, 0.025253624, -0.0051608365, -0.02200173, 0.0039696763, -0.010949411, -0.015189221, -0.054458916, 0.05911036, 0.029637504, -0.0206948, -0.060756885, -0.04462091, 0.014437993, -0.018410241, -0.0324366, -0.017484069, 0.0063597145, 0.03330103, 0.0075174295, -0.0360178, 0.013645601, 0.021651844, 0.015384747, -0.01298699, -0.02945227, 0.07277654, -0.034268364, -0.01156686, -0.025809327, -0.013902871, 0.016002195, 0.02469792, 0.0037870146, -0.020869743, -0.023524769, -0.049560495, -0.013439786, -0.053923793, -0.039537255, -0.01658877, 0.012400415, 0.03099589, 0.028629007, -0.010589234, 0.009148521, -0.0033856733, -0.029040638, -0.0324366, 0.023710003, -0.006905127, 0.0057319757, 0.054211937, -0.0019179479, 0.0470907, -0.022042895, 0.014870207, -0.011453661, 0.03614129, 0.008206913, 0.03933144, -0.016105102, -0.036985137, -0.027867487, 0.01555969, 0.03519454, -0.012235762, 0.009055904, 0.006184771, 0.013203097, -0.012523904, 0.07368213, -0.0002317038, 0.019953862, 0.034144875, 0.019439321, -0.0197995, 0.057628483, 0.013697055, 0.01825588, -0.038405266, 0.027682252, -0.07005977, -0.0036017802, 0.012184308, 0.0028942877, 0.0066272756, -0.0075740293, 0.037746657, 0.0094572455, 0.023895238, 0.00014945779, -0.055611484, -0.052153777, -0.07310584, 0.0249449, -0.008515637, 0.020015607, 0.025233041, -0.022701506, 0.008587673, -0.012544486, 0.022413364, 0.010774468, -0.0057319757, -0.054253098, -0.02109614, -0.012204889, -0.05141284, 0.011196391, -0.025109554, 0.059521988, 0.027023641, 0.016506443, -0.008675145, -0.0023565933, -0.0066169845, -0.0024427788, -0.030172627, -0.014571773, 0.0101724565, -0.03805538, 0.01735029, -0.06586112, -0.0439623, 0.05334751, -0.02366884, 0.029225873, 0.01015702, -0.025953399, -3.400788e-05, -0.034124292, -0.012359251, 0.019995024, 0.011227263, 0.0059995367, 0.021960568, 0.008592818, -0.025912235, 0.014973114, -0.030419605, -0.006483204, 0.0108773755, -0.03356859, -0.0153641645, 0.036285363, -0.0077746995, -0.0029122964, 0.007249869, -0.0086134, -0.017566396, 0.025253624, 0.04898421, 0.021590099, 0.0023077119, -0.044950217, -0.009143376, -0.022310454, -0.0137999635, 0.0035734805, -0.013697055, 0.02776458, -0.003028068, 0.045732316, 0.04013412, -0.015158349, -0.020519856, -0.00662213, 0.0019230933, 0.016990112, 0.035791405, -0.046432093, 0.0021469183, 0.0065500946, 0.020550728, -0.032868817, 0.010146729, -0.0007647351, 0.041471925, 0.0275176, 0.027990976, 0.008711162, -0.034535926, 0.0028762787, 0.040360518, -0.02043753, -0.029493434, 0.026900152, 0.011824129, 0.019964153, 0.054458916, -0.031469267, -0.0034602815, -0.017381161, -0.0102444915, -0.026303286, -0.021569518, -0.034885813, -0.02403931, -0.008803779, 0.00996664, 0.0068896906, -0.04227461, 0.01530242, -0.04951933, 0.0051171007, -0.026961897, -0.013336877, -0.017700177, -0.0550352, -0.0267355, -0.011433079, -0.04976631, -0.018194135, 0.04515603, 0.034000803, -0.016763713, -0.028875986, 0.03443302, -0.033630334, 0.015981613, -0.027167713, -0.021487191, 0.014067524, -0.035276864, -0.052318428, 0.015786087, 0.031201707, 0.01735029, -0.058163602, 0.008695726, -0.015076023, -0.041492507, 0.022289874, 0.018996818, -0.044579748, 0.00047466316, -0.05248308, -0.008371566, 0.014077815, 0.022578016, -0.015117186, -0.018235298, -0.011381625, -0.043427177, 0.029987393, 0.001988697, 0.028855404, -0.0060612815, -0.013316296, -0.023092557, 0.0015847832, -0.00077631226, 0.015930159, 0.0111037735, -0.04293322, -0.020807998, 0.035956055, -0.048778392, 0.026900152, 0.0026807536, -0.030790074, 0.019737756, -0.017823666, -0.026015144, -0.0024762237, 0.015096604, -0.0027682253, 0.021590099, 0.013769091, 0.020746253, 0.008078278, 0.016948948, 0.046226274, -0.051454, -0.016527025, -0.025233041, -0.03906388, -0.045444176, -0.03227195, -0.031057635, -0.013110479, -0.0036789612, -0.009246284, -0.027435273, 0.05141284, 0.0065140766, 0.05116586, 0.07207677, 0.012122563, -0.013933743, -0.0071006524, 0.047131866, 0.00048495395, -0.025006644, -0.0050862283, 0.015209802, -0.007995952, 0.002745071, -0.016033066, 0.055076364, -0.026694337, -0.0027013351, -0.036964554, 0.024265707, 0.0030049137, -0.0073013227, -0.010141584, -0.020272877, -0.023154302, 0.0150657315, -0.013316296, 0.020344913, 0.014890788, -0.0241628, -0.024389196, -0.000617448, -0.0038075962, 0.027435273, -0.022413364, -0.06273272, -0.010059257, 0.03179857, 0.04387997, -0.029472852, 0.028320283, 0.013110479, -0.027455855, 0.013192806, 0.022660343, -0.04227461, 0.023874657, -0.057710808, -0.0016542461, 0.0033342193, 0.027702834, -0.013347168, -0.009678498, 0.0017905993, -0.025191879, 0.0018279034, 0.014880497, -0.014057233, 0.025047809, 0.051906798, 0.049683984, -0.028711332, -0.0042784004, 0.036182456, -0.0023488752, -0.011289008, 0.045073707, -0.053800303, -0.021775333, -0.014180723, -0.020766836, -0.023874657, 0.028999476, 0.010023239, -0.028464355, -0.016681388, 0.029760994, -0.022042895]], 'embedding_model': 'text-embedding-3-large', 'embedding_dimensions': 1024}]\n", "--------------------------------------------------\n", "Transition number: 29\n", "Transition type: step\n", "Transition output: {'persona': 'This is a test google scholar persona. The user is a 25 year old living in San Francisco. He is a fan of Google Scholar and is a student at Stanford University. He uses Google Scholar to stay updated with the latest research in quantum computing and artificial intelligence. Over the last 3 months, he has read 100+ research papers on quantum computing and artificial intelligence. He is particularly interested in the latest research in quantum machine learning and quantum error correction. He is also interested in how LLMs are being used to solve problems in quantum mechanics.'}\n", "--------------------------------------------------\n", "Transition number: 30\n", "Transition type: step\n", "Transition output: Quantum memristors for neuromorphic quantum machine learning,http://arxiv.org/pdf/2412.18979v1,,Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines,http://arxiv.org/pdf/quant-ph/0501176v2,,Inferring the Dynamics of the State Evolution During Quantum Annealing,http://arxiv.org/pdf/2009.06387v2,,Quantum Annealing for Industry Applications: Introduction and Review,http://arxiv.org/pdf/2112.07491v3,,The Rise of Quantum Internet Computing,http://arxiv.org/pdf/2208.00733v1\n", "--------------------------------------------------\n", "Transition number: 31\n", "Transition type: step\n", "Transition output: {'paper_titles_and_urls': [['Quantum memristors for neuromorphic quantum machine learning', 'https://arxiv.org/pdf/2412.18979v1'], ['Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines', 'https://arxiv.org/pdf/quant-ph/0501176v2'], ['Inferring the Dynamics of the State Evolution During Quantum Annealing', 'https://arxiv.org/pdf/2009.06387v2'], ['Quantum Annealing for Industry Applications: Introduction and Review', 'https://arxiv.org/pdf/2112.07491v3'], ['The Rise of Quantum Internet Computing', 'https://arxiv.org/pdf/2208.00733v1']]}\n", "--------------------------------------------------\n", "Transition number: 32\n", "Transition type: init_branch\n", "Transition output: ['The Rise of Quantum Internet Computing', 'https://arxiv.org/pdf/2208.00733v1']\n", "--------------------------------------------------\n", "Transition number: 33\n", "Transition type: init_branch\n", "Transition output: ['Quantum memristors for neuromorphic quantum machine learning', 'https://arxiv.org/pdf/2412.18979v1']\n", "--------------------------------------------------\n", "Transition number: 34\n", "Transition type: init_branch\n", "Transition output: ['Inferring the Dynamics of the State Evolution During Quantum Annealing', 'https://arxiv.org/pdf/2009.06387v2']\n", "--------------------------------------------------\n", "Transition number: 35\n", "Transition type: init_branch\n", "Transition output: ['Quantum Annealing for Industry Applications: Introduction and Review', 'https://arxiv.org/pdf/2112.07491v3']\n", "--------------------------------------------------\n", "Transition number: 36\n", "Transition type: init_branch\n", "Transition output: ['Simulations of Quantum Turing Machines by Quantum Multi-Stack Machines', 'https://arxiv.org/pdf/quant-ph/0501176v2']\n", "--------------------------------------------------\n", "Transition number: 37\n", "Transition type: finish_branch\n", "Transition output: {'documents': []}\n", "--------------------------------------------------\n", "Transition number: 38\n", "Transition type: finish_branch\n", "Transition output: {'documents': []}\n", "--------------------------------------------------\n", "Transition number: 39\n", "Transition type: finish_branch\n", "Transition output: {'documents': []}\n", "--------------------------------------------------\n", "Transition number: 40\n", "Transition type: finish_branch\n", "Transition output: {'documents': []}\n", "--------------------------------------------------\n", "Transition number: 41\n", "Transition type: finish_branch\n", "Transition output: {'documents': []}\n", "--------------------------------------------------\n", "Transition number: 42\n", "Transition type: step\n", "Transition output: [{'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}]\n", "--------------------------------------------------\n", "Transition number: 43\n", "Transition type: step\n", "Transition output: {'paper_contents': \"[{'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}]\"}\n", "--------------------------------------------------\n", "Transition number: 44\n", "Transition type: finish\n", "Transition output: {'id': '0680672a-42b3-729c-8000-b640dbec6313', 'title': 'Research Papers', 'content': [\"[{'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}, {'documents': []}]\"], 'language': 'english', 'metadata': {}, 'modality': 'text', 'created_at': '2025-04-21T16:30:28.173367Z', 'embeddings': [], 'embedding_model': 'text-embedding-3-large', 'embedding_dimensions': 1024}\n", "--------------------------------------------------\n" ] } ], "source": [ "# Lists all the task steps that have been executed up to this point in time\n", "transitions = [*client.executions.transitions.list(execution_id=execution.id)]\n", "\n", "# Transitions are retrieved in chronological order that is the latest transition is at the start of the list\n", "for index, transition in enumerate(reversed(transitions)):\n", " print(\"Transition number: \", index)\n", " print(\"Transition type: \", transition.type)\n", " print(\"Transition output: \", transition.output)\n", " print(\"-\"*50)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'content': [\"[{'documents': []}, {'documents': []}, {'documents': []}, \"\n", " \"{'documents': []}, {'documents': []}]\"],\n", " 'created_at': '2025-04-21T16:30:28.173367Z',\n", " 'embedding_dimensions': 1024,\n", " 'embedding_model': 'text-embedding-3-large',\n", " 'embeddings': [],\n", " 'id': '0680672a-42b3-729c-8000-b640dbec6313',\n", " 'language': 'english',\n", " 'metadata': {},\n", " 'modality': 'text',\n", " 'title': 'Research Papers'}\n" ] } ], "source": [ "import pprint\n", "# Retrieves the output of the last transition that took place\n", "output = client.executions.transitions.list(execution_id=execution.id).items[0].output\n", "# Pretty printing the output\n", "pprint.pprint(output)\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'paper_titles_and_urls': [['Quantum memristors for neuromorphic quantum '\n", " 'machine learning',\n", " 'https://arxiv.org/pdf/2412.18979v1'],\n", " ['Simulations of Quantum Turing Machines by Quantum '\n", " 'Multi-Stack Machines',\n", " 'https://arxiv.org/pdf/quant-ph/0501176v2'],\n", " ['Inferring the Dynamics of the State Evolution '\n", " 'During Quantum Annealing',\n", " 'https://arxiv.org/pdf/2009.06387v2'],\n", " ['Quantum Annealing for Industry Applications: '\n", " 'Introduction and Review',\n", " 'https://arxiv.org/pdf/2112.07491v3'],\n", " ['The Rise of Quantum Internet Computing',\n", " 'https://arxiv.org/pdf/2208.00733v1']]}\n" ] } ], "source": [ "# top 5 research papers selected by the agent based on the user persona\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items[13]\n", "# pretty printing the research papers\n", "pprint.pprint(transitions.output)\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'paper_contents': \"[{'documents': []}, {'documents': []}, {'documents': []}, \"\n", " \"{'documents': []}, {'documents': []}]\"}\n" ] } ], "source": [ "# get the parsed papers from the llama parse scrape tool\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items[1]\n", "# pretty printing the research papers\n", "pprint.pprint(transitions.output)\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'arxiv_results': [{'result': [{'authors': ['Alexander Yu. Vlasov'],\n", " 'categories': ['quant-ph'],\n", " 'comment': 'LaTeX 8 pages, for 304th WEH '\n", " 'Seminar \"Elementary Quantum '\n", " 'Processors,\"\\n'\n", " ' 13-15 October 2003',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/quant-ph/0311196v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/quant-ph/0311196v1',\n", " 'http://arxiv.org/pdf/quant-ph/0311196v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0311196v1',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2003-11-27 15:43:16',\n", " 'summary': 'Most modern classical processors '\n", " 'support so-called von Neumann '\n", " 'architecturewith program and data '\n", " 'registers. In present work is '\n", " 'revisited similar approachto '\n", " 'models of quantum processors. '\n", " 'Deterministic programmable quantum '\n", " 'gate arraysare considered as an '\n", " 'example. They are also called von '\n", " 'Neumann quantumprocessors here and '\n", " 'use conditional quantum dynamics. '\n", " 'Such devices have someproblems '\n", " 'with universality, but '\n", " 'consideration of hybrid quantum '\n", " 'processors,i.e., models with both '\n", " 'continuous and discrete quantum '\n", " 'variables resolves theproblems. It '\n", " 'is also discussed comparison of '\n", " 'such a model of quantum '\n", " 'processorswith more traditional '\n", " 'approach.',\n", " 'title': 'Von Neumann Quantum Processors',\n", " 'updated': '2003-11-27 15:43:16'},\n", " {'authors': ['Yutaro Enomoto',\n", " 'Kazuma Yonezu',\n", " 'Yosuke Mitsuhashi',\n", " 'Kan Takase',\n", " 'Shuntaro Takeda'],\n", " 'categories': ['quant-ph'],\n", " 'comment': '17 pages, 6 figures. 5 pages, 3 '\n", " 'figures in the supplementary\\n'\n", " ' materials',\n", " 'doi': '10.1126/sciadv.abj6624',\n", " 'entry_id': 'http://arxiv.org/abs/2105.02447v2',\n", " 'journal_ref': 'Science Advances 7, eabj6624 '\n", " '(2021)',\n", " 'links': ['http://dx.doi.org/10.1126/sciadv.abj6624',\n", " 'http://arxiv.org/abs/2105.02447v2',\n", " 'http://arxiv.org/pdf/2105.02447v2'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2105.02447v2',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2021-05-06 05:27:35',\n", " 'summary': 'A quantum processor to import, '\n", " 'process, and export optical '\n", " 'quantum states isa common core '\n", " 'technology enabling various '\n", " 'photonic quantum '\n", " 'informationprocessing. However, '\n", " 'there has been no photonic '\n", " 'processor which issimultaneously '\n", " 'universal, scalable, and '\n", " 'programmable. Here, we report on '\n", " 'anoriginal loop-based single-mode '\n", " 'versatile photonic quantum '\n", " 'processor which isdesigned to be '\n", " 'universal, scalable, and '\n", " 'programmable. Our processor can '\n", " 'performarbitrarily many steps of '\n", " 'programmable quantum operations on '\n", " 'a givensingle-mode optical quantum '\n", " 'state by time-domain processing in '\n", " 'a dynamicallycontrolled loop-based '\n", " 'optical circuit. We use this '\n", " 'processor to '\n", " 'demonstrateprogrammable '\n", " 'single-mode Gaussian gates and '\n", " 'multi-step squeezing gates. '\n", " 'Inaddition, we prove that the '\n", " 'processor can perform universal '\n", " 'quantum operationsby injecting '\n", " 'appropriate ancillary states and '\n", " 'also be straightforwardlyextended '\n", " 'to a multi-mode processor. These '\n", " 'results show that our processor '\n", " 'isprogrammable, scalable, and '\n", " 'potentially universal, leading to '\n", " 'be suitable forgeneral-purpose '\n", " 'applications.',\n", " 'title': 'Programmable and sequential Gaussian '\n", " 'gates in a loop-based single-mode '\n", " 'photonic quantum processor',\n", " 'updated': '2021-11-14 23:50:51'}]},\n", " {'result': [{'authors': ['Elijah Pelofske',\n", " 'Georg Hahn',\n", " 'Hristo Djidjev'],\n", " 'categories': ['quant-ph',\n", " 'cond-mat.dis-nn',\n", " 'cond-mat.stat-mech',\n", " 'cs.ET'],\n", " 'comment': None,\n", " 'doi': '10.1109/TPDS.2020.3044846',\n", " 'entry_id': 'http://arxiv.org/abs/2009.06387v2',\n", " 'journal_ref': None,\n", " 'links': ['http://dx.doi.org/10.1109/TPDS.2020.3044846',\n", " 'http://arxiv.org/abs/2009.06387v2',\n", " 'http://arxiv.org/pdf/2009.06387v2'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2009.06387v2',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2020-09-10 18:14:28',\n", " 'summary': 'To solve an optimization problem '\n", " 'using a commercial quantum '\n", " 'annealer, one hasto represent the '\n", " 'problem of interest as an Ising or '\n", " 'a quadratic unconstrainedbinary '\n", " 'optimization (QUBO) problem and '\n", " 'submit its coefficients to the '\n", " 'annealer,which then returns a '\n", " 'user-specified number of '\n", " 'low-energy solutions. It would '\n", " 'beuseful to know what happens in '\n", " 'the quantum processor during the '\n", " 'anneal processso that one could '\n", " 'design better algorithms or '\n", " 'suggest improvements to '\n", " 'thehardware. However, existing '\n", " 'quantum annealers are not able to '\n", " 'directly extractsuch information '\n", " 'from the processor. Hence, in this '\n", " 'work we propose to useadvanced '\n", " 'features of D-Wave 2000Q to '\n", " 'indirectly infer information about '\n", " 'thedynamics of the state evolution '\n", " 'during the anneal process. '\n", " 'Specifically, D-Wave2000Q allows '\n", " 'the user to customize the anneal '\n", " 'schedule, that is, the '\n", " 'schedulewith which the anneal '\n", " 'fraction is changed from the start '\n", " 'to the end of theanneal. Using '\n", " 'this feature, we design a set of '\n", " 'modified anneal schedules '\n", " 'whoseoutputs can be used to '\n", " 'generate information about the '\n", " 'states of the system '\n", " 'atuser-defined time points during '\n", " 'a standard anneal. With this '\n", " 'process, called\"slicing\", we '\n", " 'obtain approximate distributions '\n", " 'of lowest-energy annealsolutions '\n", " 'as the anneal time evolves. We use '\n", " 'our technique to obtain a '\n", " 'varietyof insights into the '\n", " 'annealer, such as the state '\n", " 'evolution during annealing,when '\n", " 'individual bits in an evolving '\n", " 'solution flip during the anneal '\n", " 'process andwhen they stabilize, '\n", " 'and we introduce a technique to '\n", " 'estimate the freeze-outpoint of '\n", " 'both the system as well as of '\n", " 'individual qubits.',\n", " 'title': 'Inferring the Dynamics of the State '\n", " 'Evolution During Quantum Annealing',\n", " 'updated': '2020-11-20 02:12:21'},\n", " {'authors': ['Sheir Yarkoni',\n", " 'Elena Raponi',\n", " 'Thomas Bäck',\n", " 'Sebastian Schmitt'],\n", " 'categories': ['quant-ph'],\n", " 'comment': 'major revision with extended noise '\n", " 'section and discussion of\\n'\n", " ' alternative platforms',\n", " 'doi': '10.1088/1361-6633/ac8c54',\n", " 'entry_id': 'http://arxiv.org/abs/2112.07491v3',\n", " 'journal_ref': None,\n", " 'links': ['http://dx.doi.org/10.1088/1361-6633/ac8c54',\n", " 'http://arxiv.org/abs/2112.07491v3',\n", " 'http://arxiv.org/pdf/2112.07491v3'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2112.07491v3',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2021-12-14 15:58:30',\n", " 'summary': 'Quantum annealing is a heuristic '\n", " 'quantum optimization algorithm '\n", " 'that can beused to solve '\n", " 'combinatorial optimization '\n", " 'problems. In recent years, '\n", " 'advances inquantum technologies '\n", " 'have enabled the development of '\n", " 'small- andintermediate-scale '\n", " 'quantum processors that implement '\n", " 'the quantum annealingalgorithm for '\n", " 'programmable use. Specifically, '\n", " 'quantum annealing '\n", " 'processorsproduced by D-Wave '\n", " 'Systems have been studied and '\n", " 'tested extensively in bothresearch '\n", " 'and industrial settings across '\n", " 'different disciplines. In this '\n", " 'paper weprovide a literature '\n", " 'review of the theoretical '\n", " 'motivations for quantumannealing '\n", " 'as a heuristic quantum '\n", " 'optimization algorithm, the '\n", " 'software andhardware that is '\n", " 'required to use such quantum '\n", " 'processors, and '\n", " 'thestate-of-the-art applications '\n", " 'and proofs-of-concepts that have '\n", " 'beendemonstrated using them. The '\n", " 'goal of our review is to provide a '\n", " 'centralized andcondensed source '\n", " 'regarding applications of quantum '\n", " 'annealing technology. Weidentify '\n", " 'the advantages, limitations, and '\n", " 'potential of quantum annealing '\n", " 'forboth researchers and '\n", " 'practitioners from various fields.',\n", " 'title': 'Quantum Annealing for Industry '\n", " 'Applications: Introduction and '\n", " 'Review',\n", " 'updated': '2022-06-13 08:37:49'}]},\n", " {'result': [{'authors': ['János Végh'],\n", " 'categories': ['cs.DC'],\n", " 'comment': '4 figures',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/1608.00249v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/1608.00249v1',\n", " 'http://arxiv.org/pdf/1608.00249v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/1608.00249v1',\n", " 'primary_category': 'cs.DC',\n", " 'published': '2016-07-31 19:02:34',\n", " 'summary': 'In the world of supercomputers, '\n", " 'the large number of processors '\n", " 'requires tominimize the '\n", " 'inefficiencies of parallelization, '\n", " 'which appear as a sequentialpart '\n", " 'of the program from the point of '\n", " \"view of Amdahl's law. The \"\n", " 'recentlysuggested new figure of '\n", " 'merit is applied to the recently '\n", " 'presentedsupercomputer, and the '\n", " 'timeline of \"Top 500\" '\n", " 'supercomputers is scrutinizedusing '\n", " 'the metric. It is demonstrated, '\n", " 'that in addition to the '\n", " 'computingperformance and power '\n", " 'consumption, the new supercomputer '\n", " 'is also excellent inthe efficiency '\n", " 'of parallelization. Based on the '\n", " 'suggested merit, a \"Moore-law\"like '\n", " 'observation is derived for the '\n", " 'timeline of parallelization '\n", " 'efficacy ofsupercomputers.',\n", " 'title': 'Comments on the parallelization '\n", " 'efficiency of the Sunway TaihuLight '\n", " 'supercomputer',\n", " 'updated': '2016-07-31 19:02:34'},\n", " {'authors': ['János Végh'],\n", " 'categories': ['cs.DC'],\n", " 'comment': '30 pages, 10 figures',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/1708.01462v2',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/1708.01462v2',\n", " 'http://arxiv.org/pdf/1708.01462v2'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/1708.01462v2',\n", " 'primary_category': 'cs.DC',\n", " 'published': '2017-08-04 11:56:45',\n", " 'summary': \"This paper reinterprets Amdahl's \"\n", " 'law in terms of execution time and '\n", " 'appliesthis simple model to '\n", " 'supercomputing. The systematic '\n", " 'discussion results inpractical '\n", " 'formulas enabling to calculate '\n", " 'expected running time using '\n", " 'largenumber of processors from '\n", " 'experimental runs using low number '\n", " 'of processors,delivers a '\n", " 'quantitative measure of '\n", " 'computational efficiency of '\n", " 'supercomputingapplications. '\n", " 'Through separating '\n", " 'non-parallelizable contribution to '\n", " 'fractionsaccording to their '\n", " \"origin, Amdahl's law enables to \"\n", " 'derive a timeline '\n", " 'forsupercomputers (quite similar '\n", " \"to Moore's law) and describes why \"\n", " \"Amdahl's lawlimits the size of \"\n", " 'supercomputers. The paper '\n", " \"validates that Amdahl's \"\n", " '50-yearsold model (with slight '\n", " 'extension) correctly describes the '\n", " 'performancelimitations of the '\n", " 'present supercomputers. Using some '\n", " 'simple and reasonableassumptions, '\n", " 'the absolute performance bound of '\n", " 'supercomputers is '\n", " 'concluded,furthermore that serious '\n", " 'enhancements are still necessary '\n", " 'to achieve theexaFLOPS dream '\n", " 'value.',\n", " 'title': \"How Amdahl's low restricts \"\n", " 'supercomputer applications and '\n", " 'building ever bigger supercomputers',\n", " 'updated': '2017-12-29 06:26:45'}]},\n", " {'result': [{'authors': ['H. Kawamura',\n", " 'T. Aoki',\n", " 'K. Harada',\n", " 'T. Inoue',\n", " 'S. Ito',\n", " 'K. Kato',\n", " 'L. Koehler',\n", " 'K. Sakamoto',\n", " 'A. Uchiyama',\n", " 'Y. Sakemi'],\n", " 'categories': ['physics.ins-det'],\n", " 'comment': None,\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/1908.10698v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/1908.10698v1',\n", " 'http://arxiv.org/pdf/1908.10698v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/1908.10698v1',\n", " 'primary_category': 'physics.ins-det',\n", " 'published': '2019-08-28 13:01:01',\n", " 'summary': 'We investigate neutralization '\n", " 'processes (especially thermal '\n", " 'surfaceneutralization), which are '\n", " 'required for the magneto-optical '\n", " 'trapping ofradioactive atoms. A '\n", " 'variety of neutralization methods '\n", " 'are first summarized:neutral beam '\n", " 'injection for fusion reactors, '\n", " 'neutral atom implantation '\n", " 'insemiconductor processing, and '\n", " 'the production of radioactive '\n", " 'neutral atoms inaccelerators. We '\n", " 'focus on thermal surface '\n", " 'neutralization, which '\n", " 'producesneutral atoms in the '\n", " 'thermal energy range for laser '\n", " 'cooling. The experimentswere '\n", " 'carried out with yttrium, '\n", " 'gadolinium, and zirconium foils to '\n", " 'neutralizefrancium and rubidium '\n", " 'ions for magneto-optical trapping. '\n", " 'The results reconfirmthat yttrium '\n", " 'foil is a good neutralizer (i.e., '\n", " 'it has a neutral releaseefficiency '\n", " '$>65\\\\%$). In addition, the '\n", " 'release fraction when using '\n", " 'yttrium foilexceeds 75\\\\% at 1350 '\n", " 'K, which is greater than the '\n", " 'release fraction for theother '\n", " 'foils. This reconfirmation is '\n", " 'important because few previous '\n", " 'studies havefocused on thermal '\n", " 'surface neutralization. Moreover, '\n", " 'the results show that '\n", " 'theneutralization efficiency is '\n", " 'strongly influenced by the '\n", " 'experimental processitself.',\n", " 'title': 'Thermal surface neutralization of Fr '\n", " 'ions with metal foils for '\n", " 'magneto-optical trapping of '\n", " 'radioisotopes',\n", " 'updated': '2019-08-28 13:01:01'},\n", " {'authors': ['Hirokazu Kawamura',\n", " 'Ken-ichi Harada',\n", " 'Tomoya Sato',\n", " 'Saki Ezure',\n", " 'Hiroshi Arikawa',\n", " 'Takeshi Furukawa',\n", " 'Tomohiro Hayamizu',\n", " 'Takeshi Inoue',\n", " 'Taisuke Ishikawa',\n", " 'Masatoshi Itoh',\n", " 'Tomohiro Kato',\n", " 'Akihito Oikawa',\n", " 'Takatoshi Aoki',\n", " 'Atsushi Hatakeyama',\n", " 'Yasuhiro Sakemi'],\n", " 'categories': ['physics.atom-ph'],\n", " 'comment': None,\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/1908.10686v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/1908.10686v1',\n", " 'http://arxiv.org/pdf/1908.10686v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/1908.10686v1',\n", " 'primary_category': 'physics.atom-ph',\n", " 'published': '2019-08-28 12:38:44',\n", " 'summary': 'We have developed a unique '\n", " 'neutralizer device that uses an '\n", " 'yttrium targetsurrounded by a '\n", " 'platinum wall to magneto-optically '\n", " 'trap radioactive atoms. Ingeneral, '\n", " 'the radioactive nucleus produced '\n", " 'in a nuclear reaction is '\n", " 'extractedand transported in ion '\n", " 'form. For the magneto-optical '\n", " 'trap, thermalneutralization must '\n", " 'occur on the surface of a metal '\n", " 'with a small work function.The '\n", " 'converter can produce a neutral '\n", " 'atomic beam with small angular '\n", " 'divergencethat, given the '\n", " 'recycling of atoms and ions, '\n", " 'converts ions into neutral '\n", " 'atomswith remarkable efficiency. '\n", " 'We demonstrated the ion '\n", " 'neutralization processusing stable '\n", " 'rubidium and confirmed $10^6$ '\n", " 'neutralized atoms in '\n", " 'themagneto-optical trap. '\n", " 'Additionally, the experiment using '\n", " 'francium demonstratedthe obtaining '\n", " 'of neutralized francium atoms.',\n", " 'title': 'Alkali ion-to-neutral atom converter '\n", " 'for the magneto-optical trap of a '\n", " 'radioactive isotope',\n", " 'updated': '2019-08-28 12:38:44'}]},\n", " {'result': [{'authors': ['Maximilian Russ', 'Guido Burkard'],\n", " 'categories': ['cond-mat.mes-hall'],\n", " 'comment': '42 pages, 13 figures',\n", " 'doi': '10.1088/1361-648X/aa761f',\n", " 'entry_id': 'http://arxiv.org/abs/1611.09106v1',\n", " 'journal_ref': None,\n", " 'links': ['http://dx.doi.org/10.1088/1361-648X/aa761f',\n", " 'http://arxiv.org/abs/1611.09106v1',\n", " 'http://arxiv.org/pdf/1611.09106v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/1611.09106v1',\n", " 'primary_category': 'cond-mat.mes-hall',\n", " 'published': '2016-11-28 13:21:43',\n", " 'summary': 'The goal of this article is to '\n", " 'review the progress of '\n", " 'three-electron spinqubits from '\n", " 'their inception to the state of '\n", " 'the art. We direct the main '\n", " 'focustowards the resonant exchange '\n", " '(RX) qubit and the exchange-only '\n", " 'qubit, but wealso discuss other '\n", " 'qubit implementations using three '\n", " 'electron spins. For eachthree-spin '\n", " 'qubit we describe the qubit model, '\n", " 'the physical realization, '\n", " 'theimplementations of single-qubit '\n", " 'operations, as well as the '\n", " 'read-out andinitialization '\n", " 'schemes. Two-qubit gates and '\n", " 'decoherence properties '\n", " 'arediscussed for the RX qubit and '\n", " 'the exchange-only qubit, thereby, '\n", " 'completing thelist of requirements '\n", " 'for a viable candidate qubit '\n", " 'implementation for '\n", " 'quantumcomputation. We start with '\n", " 'describing the full system of '\n", " 'three electrons in atriple quantum '\n", " 'dot, then discuss the '\n", " 'charge-stability diagram and '\n", " 'restrictourselves to the relevant '\n", " 'subsystem, introduce the qubit '\n", " 'states, and discussimportant '\n", " 'transitions to other charge '\n", " 'states. Introducing the various '\n", " 'qubitimplementations, we begin '\n", " 'with the exchange-only qubit, '\n", " 'followed by thespin-charge qubit, '\n", " 'the hybrid qubit, and the RX '\n", " 'qubit, discussing for each '\n", " 'thesingle-qubit operations, '\n", " 'read-out, and initialization '\n", " 'methods, whereas the mainfocus '\n", " 'will be on the RX qubit, whose '\n", " 'single-qubit operations are '\n", " 'realized bydriving the qubit at '\n", " 'its resonant frequency in the '\n", " 'microwave range similar toelectron '\n", " 'spin resonance. Two different '\n", " 'types of two-qubit operations '\n", " 'arepresented for the exchange-only '\n", " 'and the RX qubit which can be '\n", " 'divided intoshort-ranged and '\n", " 'long-ranged interactions. Both of '\n", " 'these interaction types canbe '\n", " 'expected to be necessary in a '\n", " 'large-scale quantum computer. We '\n", " 'also takeinto account the '\n", " 'decoherence of the qubit through '\n", " 'the influence of magneticnoise as '\n", " 'well as dephasing due to charge '\n", " 'noise.',\n", " 'title': 'Three-electron spin qubits',\n", " 'updated': '2016-11-28 13:21:43'},\n", " {'authors': ['Sam Young Cho', 'Mun Dae Kim'],\n", " 'categories': ['cond-mat.supr-con',\n", " 'cond-mat.mes-hall'],\n", " 'comment': '5 pages, 1 figure',\n", " 'doi': '10.1103/PhysRevB.77.212506',\n", " 'entry_id': 'http://arxiv.org/abs/cond-mat/0703505v1',\n", " 'journal_ref': 'Phys. Rev. B 77, 212506 (2008)',\n", " 'links': ['http://dx.doi.org/10.1103/PhysRevB.77.212506',\n", " 'http://arxiv.org/abs/cond-mat/0703505v1',\n", " 'http://arxiv.org/pdf/cond-mat/0703505v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/cond-mat/0703505v1',\n", " 'primary_category': 'cond-mat.supr-con',\n", " 'published': '2007-03-20 02:20:35',\n", " 'summary': 'Superconducting flux qubits are '\n", " 'considered to investigate '\n", " 'macroscopicmany-qubit '\n", " 'interactions. Many-qubit states '\n", " 'based on current states can be '\n", " 'manipulated through '\n", " 'thecurrent-phase relation in each '\n", " 'superconducting loop. For flux '\n", " 'qubit systems comprised of $N$ '\n", " 'qubit loops, a general expression '\n", " 'oflow energy Hamiltonian is '\n", " 'presented in terms of low energy '\n", " 'levels of qubits andmacroscopic '\n", " 'quantum tunnelings between the '\n", " 'many-qubit states. Many-qubit '\n", " 'interactions classified by {\\\\em '\n", " 'Ising type- or '\n", " 'tunnel-}exchangeinteractions can '\n", " 'be observable experimentally. '\n", " 'Flux qubit systems can provide '\n", " 'various artificial-spin systems to '\n", " 'studymany-body systems that cannot '\n", " 'be found naturally.',\n", " 'title': 'Macroscopic Many-Qubit Interactions '\n", " 'in Superconducting Flux Qubits',\n", " 'updated': '2007-03-20 02:20:35'}]},\n", " {'result': [{'authors': ['Lucas Lamata'],\n", " 'categories': ['quant-ph', 'cs.NE'],\n", " 'comment': 'Invited Perspective',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/2412.18979v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/2412.18979v1',\n", " 'http://arxiv.org/pdf/2412.18979v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2412.18979v1',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2024-12-25 20:21:24',\n", " 'summary': 'Quantum machine learning may '\n", " 'permit to realize more efficient '\n", " 'machinelearning calculations with '\n", " 'near-term quantum devices. Among '\n", " 'the diverse quantummachine '\n", " 'learning paradigms which are '\n", " 'currently being considered, '\n", " 'quantummemristors are promising as '\n", " 'a way of combining, in the same '\n", " 'quantum hardware, aunitary '\n", " 'evolution with the nonlinearity '\n", " 'provided by the measurement '\n", " 'andfeedforward. Thus, an efficient '\n", " 'way of deploying neuromorphic '\n", " 'quantum computingfor quantum '\n", " 'machine learning may be enabled.',\n", " 'title': 'Quantum memristors for neuromorphic '\n", " 'quantum machine learning',\n", " 'updated': '2024-12-25 20:21:24'},\n", " {'authors': ['Daowen Qiu'],\n", " 'categories': ['quant-ph'],\n", " 'comment': '25 pages',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/quant-ph/0501176v2',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/quant-ph/0501176v2',\n", " 'http://arxiv.org/pdf/quant-ph/0501176v2'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0501176v2',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2005-01-30 04:42:12',\n", " 'summary': 'As was well known, in classical '\n", " 'computation, Turing machines, '\n", " 'circuits,multi-stack machines, and '\n", " 'multi-counter machines are '\n", " 'equivalent, that is, theycan '\n", " 'simulate each other in polynomial '\n", " 'time. In quantum computation, Yao '\n", " '[11]first proved that for any '\n", " 'quantum Turing machines $M$, there '\n", " 'exists quantumBoolean circuit '\n", " '$(n,t)$-simulating $M$, where $n$ '\n", " 'denotes the length of '\n", " 'inputstrings, and $t$ is the '\n", " 'number of move steps before '\n", " 'machine stopping. However,the '\n", " 'simulations of quantum Turing '\n", " 'machines by quantum multi-stack '\n", " 'machines andquantum multi-counter '\n", " 'machines have not been considered, '\n", " 'and quantummulti-stack machines '\n", " 'have not been established, either. '\n", " 'Though quantum countermachines '\n", " 'were dealt with by Kravtsev [6] '\n", " 'and Yamasaki {\\\\it et al.} [10], '\n", " 'inwhich the machines count with '\n", " '$0,\\\\pm 1$ only, we sense that it '\n", " 'is difficult tosimulate quantum '\n", " 'Turing machines in terms of this '\n", " 'fashion of quantum '\n", " 'computingdevices, and we therefore '\n", " 'prove that the quantum '\n", " 'multi-counter machines allowedto '\n", " 'count with $0,\\\\pm 1,\\\\pm '\n", " '2,...,\\\\pm n$ for some $n>1$ can '\n", " 'efficiently simulatequantum Turing '\n", " 'machines. Therefore, our mail '\n", " 'goals are to establish quantum '\n", " 'multi-stack machines andquantum '\n", " 'multi-counter machines with counts '\n", " '$0,\\\\pm 1,\\\\pm 2,...,\\\\pm n$ and '\n", " '$n>1$,and particularly to simulate '\n", " 'quantum Turing machines by these '\n", " 'quantum computingdevices.',\n", " 'title': 'Simulations of Quantum Turing '\n", " 'Machines by Quantum Multi-Stack '\n", " 'Machines',\n", " 'updated': '2005-06-06 17:29:54'}]},\n", " {'result': [{'authors': ['Seng W. Loke'],\n", " 'categories': ['cs.ET', 'cs.DC'],\n", " 'comment': None,\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/2208.00733v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/2208.00733v1',\n", " 'http://arxiv.org/pdf/2208.00733v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1',\n", " 'primary_category': 'cs.ET',\n", " 'published': '2022-08-01 10:36:13',\n", " 'summary': 'This article highlights quantum '\n", " 'Internet computing as referring '\n", " 'todistributed quantum computing '\n", " 'over the quantum Internet, '\n", " 'analogous to(classical) Internet '\n", " 'computing involving (classical) '\n", " 'distributed computing overthe '\n", " '(classical) Internet. Relevant to '\n", " 'quantum Internet computing would '\n", " 'be areasof study such as quantum '\n", " 'protocols for distributed nodes '\n", " 'using quantuminformation for '\n", " 'computations, quantum cloud '\n", " 'computing, delegated '\n", " 'verifiableblind or private '\n", " 'computing, non-local gates, and '\n", " 'distributed quantumapplications, '\n", " 'over Internet-scale distances.',\n", " 'title': 'The Rise of Quantum Internet '\n", " 'Computing',\n", " 'updated': '2022-08-01 10:36:13'},\n", " {'authors': ['Seth Lloyd'],\n", " 'categories': ['quant-ph'],\n", " 'comment': '9 pages, plain TeX, article from '\n", " '1998 conference proceedings\\n'\n", " ' proposing fermionic quantum '\n", " 'computers',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1',\n", " 'journal_ref': 'in `Unconventional Models of '\n", " \"Computation,' C.S. Calude, J. \"\n", " 'Casti,\\n'\n", " ' M.J. Dinneen, eds., '\n", " 'Springer, Singapore, 1998',\n", " 'links': ['http://arxiv.org/abs/quant-ph/0003151v1',\n", " 'http://arxiv.org/pdf/quant-ph/0003151v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2000-03-31 22:07:23',\n", " 'summary': 'This paper investigates a variety '\n", " 'of unconventional quantum '\n", " 'computationdevices, including '\n", " 'fermionic quantum computers and '\n", " 'computers that exploitnonlinear '\n", " 'quantum mechanics. It is shown '\n", " 'that unconventional quantum '\n", " 'computingdevices can in principle '\n", " 'compute some quantities more '\n", " \"rapidly than`conventional' quantum \"\n", " 'computers.',\n", " 'title': 'Unconventional Quantum Computing '\n", " 'Devices',\n", " 'updated': '2000-03-31 22:07:23'}]},\n", " {'result': [{'authors': ['Seng W. Loke'],\n", " 'categories': ['cs.ET', 'cs.DC'],\n", " 'comment': None,\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/2208.00733v1',\n", " 'journal_ref': None,\n", " 'links': ['http://arxiv.org/abs/2208.00733v1',\n", " 'http://arxiv.org/pdf/2208.00733v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/2208.00733v1',\n", " 'primary_category': 'cs.ET',\n", " 'published': '2022-08-01 10:36:13',\n", " 'summary': 'This article highlights quantum '\n", " 'Internet computing as referring '\n", " 'todistributed quantum computing '\n", " 'over the quantum Internet, '\n", " 'analogous to(classical) Internet '\n", " 'computing involving (classical) '\n", " 'distributed computing overthe '\n", " '(classical) Internet. Relevant to '\n", " 'quantum Internet computing would '\n", " 'be areasof study such as quantum '\n", " 'protocols for distributed nodes '\n", " 'using quantuminformation for '\n", " 'computations, quantum cloud '\n", " 'computing, delegated '\n", " 'verifiableblind or private '\n", " 'computing, non-local gates, and '\n", " 'distributed quantumapplications, '\n", " 'over Internet-scale distances.',\n", " 'title': 'The Rise of Quantum Internet '\n", " 'Computing',\n", " 'updated': '2022-08-01 10:36:13'},\n", " {'authors': ['Seth Lloyd'],\n", " 'categories': ['quant-ph'],\n", " 'comment': '9 pages, plain TeX, article from '\n", " '1998 conference proceedings\\n'\n", " ' proposing fermionic quantum '\n", " 'computers',\n", " 'doi': None,\n", " 'entry_id': 'http://arxiv.org/abs/quant-ph/0003151v1',\n", " 'journal_ref': 'in `Unconventional Models of '\n", " \"Computation,' C.S. Calude, J. \"\n", " 'Casti,\\n'\n", " ' M.J. Dinneen, eds., '\n", " 'Springer, Singapore, 1998',\n", " 'links': ['http://arxiv.org/abs/quant-ph/0003151v1',\n", " 'http://arxiv.org/pdf/quant-ph/0003151v1'],\n", " 'pdf_downloaded': None,\n", " 'pdf_url': 'http://arxiv.org/pdf/quant-ph/0003151v1',\n", " 'primary_category': 'quant-ph',\n", " 'published': '2000-03-31 22:07:23',\n", " 'summary': 'This paper investigates a variety '\n", " 'of unconventional quantum '\n", " 'computationdevices, including '\n", " 'fermionic quantum computers and '\n", " 'computers that exploitnonlinear '\n", " 'quantum mechanics. It is shown '\n", " 'that unconventional quantum '\n", " 'computingdevices can in principle '\n", " 'compute some quantities more '\n", " \"rapidly than`conventional' quantum \"\n", " 'computers.',\n", " 'title': 'Unconventional Quantum Computing '\n", " 'Devices',\n", " 'updated': '2000-03-31 22:07:23'}]}]}\n" ] } ], "source": [ "# arxiv results\n", "transitions = client.executions.transitions.list(execution_id=execution.id).items[19]\n", "# pretty printing the arxiv results\n", "pprint.pprint(transitions.output)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tools](https://docs.julep.ai/concepts/tools)\n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/08-rag-chatbot.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"julep\"\n", "\n", "
\n", "

\n", " \n", " \"Get\n", " \n", "  \n", " \n", " \"Documentation\"\n", " \n", "

\n", "

\n", " \"NPM\n", "  \n", " \"PyPI\n", "  \n", " \"Docker\n", "  \n", " \"GitHub\n", "

\n", " \n", "

\n", " Discord\n", " ·\n", " 𝕏\n", " ·\n", " LinkedIn\n", "

\n", "
\n", "\n", "# Task Definition: Chatbot for a Website\n", "\n", "### Overview\n", "\n", "This task implements an automated system to index and process a website. The system crawls the website, extracts relevant information, and creates a searchable knowledge base that can be queried programmatically. Finally, it creates a chatbot that can answer questions about the website using the RAG knowledge base.\n", "\n", "### Task Tools:\n", "\n", "- **get_page**: Web crawler component for systematically scraping a website's page using JIna's API\n", "- **create_agent_doc**: Document processor for converting web content into indexed, searchable documents\n", "\n", "### Task Input:\n", "\n", "Required parameter:\n", "- **url**: Entry point URL for the crawler (e.g., \"https://en.wikipedia.org/wiki/Artificial_intelligence\", or \"https://julep.ai\")\n", "- **reducing_strength**: Number of sentences to club together to reduce the size of the chunks list\n", "\n", "### Task Output:\n", "\n", "- Indexed knowledge base containing processed documentation about the given website links\n", "- Query interface for programmatic access to the documentation\n", "\n", "### Task Flow\n", "\n", "1. Create an agent with the get_page tool\n", "2. Get the get_page tool's API key \n", "3. Crawl website using get_page tool:\n", " - Specify URL and page limit\n", " - Enable smart mode, proxy, readability\n", " - Filter out images and SVGs\n", " - Use sentence-based chunking (15 sentences per chunk)\n", "4. For each crawled page:\n", " - Extract content\n", " - Break into chunks\n", " - Generate succinct context for each chunk\n", " - Combine chunk with context\n", "5. Create agent documents:\n", " - Store processed chunks as documents\n", " - Add metadata like source\n", " - Index for search/retrieval\n", "6. Finally chat with the agent in the session and retrieve the documents that are relevant to the user's query\n", "\n", "```plaintext\n", "+----------------+ +----------------+ +----------------+ +---------------+\n", "| Jina AI | | Extract | | Process | | Create |\n", "| Crawler | --> | Content | --> | Content | --> | Agent Docs |\n", "| (URL Entry) | | (Web Pages) | | (Chunks) | | (Index) |\n", "+----------------+ +----------------+ +----------------+ +---------------+\n", " |\n", "+----------------+ +----------------+ +----------------+ +---------------+\n", "| Query | | Search | | Retrieve | | Chat with |\n", "| Interface | <-- | Index | <-- | Documents | <-- | Agent |\n", "| (User Input) | | (Knowledge) | | (Context) | | (Session) |\n", "+----------------+ +----------------+ +----------------+ +---------------+\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementation\n", "\n", "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", "\n", "\n", " \"Open\n", "\n", "\n", "### Additional Information\n", "\n", "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", "\n", "**Author:** Julep AI \n", "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], "source": [ "!pip install julep -U --quiet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### NOTE:\n", "\n", "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", "- Once created, these UUIDs should remain unchanged for simplicity.\n", "- Altering a UUID will result in the system treating it as a new agent or task.\n", "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "\n", "# NOTE: these UUIDs are used in order not to use the `create_or_update` methods instead of\n", "# the `create` methods for the sake of not creating new resources every time a cell is run.\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()\n", "SESSION_UUID = uuid.uuid4()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating Julep Client with the API Key\n", "\n", "Get your API key from [here](https://dashboard.julep.ai/)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "import os\n", "from dotenv import load_dotenv\n", "\n", "load_dotenv(override=True)\n", "\n", "JULEP_API_KEY = os.environ.get(\"JULEP_API_KEY\")\n", "\n", "# Create a Julep client\n", "client = Client(api_key=JULEP_API_KEY, environment=\"production\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Create agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"Website Navigator\",\n", " about=\"An AI assistant that can navigate a company's website and assist you in finding the information you need to make the most of our services.\",\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of documents in the agent's document store: 0\n" ] } ], "source": [ "docs = [*client.agents.docs.list(agent_id=AGENT_UUID)]\n", "print(f\"Number of documents in the agent's document store: {len(docs)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import yaml\n", "jina_api_key = \"jina_api_key\"\n", "\n", "task_def = yaml.safe_load('''\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Julep Jina Crawler Task\n", "description: A Julep agent that can crawl a website and store the content in the document store.\n", "\n", "########################################################\n", "################### INPUT SCHEMA #######################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " url:\n", " type: string\n", " reducing_strength:\n", " type: integer\n", " \n", "########################################################\n", "################### TOOLS ##############################\n", "########################################################\n", "\n", "tools:\n", "- name: get_page\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: https://r.jina.ai/\n", " headers:\n", " accept: application/json\n", " x-return-format: markdown\n", " x-with-images-summary: \"true\"\n", " x-with-links-summary: \"true\"\n", " x-retain-images: \"none\"\n", " x-no-cache: \"true\"\n", " Authorization: \"Bearer {jina_api_key}\"\n", "\n", "- name : create_agent_doc\n", " description: Create an agent doc\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: create\n", "\n", "########################################################\n", "################### INDEX PAGE SUBWORKFLOW ##############\n", "########################################################\n", "\n", "index_page:\n", "\n", "# Step #0 - Evaluate the content\n", "- evaluate:\n", " document: $ _.document\n", " chunks: |\n", " $ [\" \".join(_.content[i:i + max(_.reducing_strength, len(_.content) // 9)]) \n", " for i in range(0, len(_.content), max(_.reducing_strength, len(_.content) // 9))]\n", " label: docs\n", "\n", "# Step #1 - Process each content chunk in parallel\n", "- over: \"$ [(steps[0].input.content, chunk) for chunk in _['chunks']]\"\n", " parallelism: 3\n", " map:\n", " prompt: \n", " - role: user\n", " content: >-\n", " $ f\"\"\"\n", " \n", " {_[0]}\n", " \n", "\n", " Here is the chunk we want to situate within the whole document\n", " \n", " {_[1]}\n", " \n", "\n", " Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. \n", " Answer only with the succinct context and nothing else.\"\"\"\n", " \n", " unwrap: true\n", " settings:\n", " max_tokens: 16000\n", "\n", "# Step #2 - Create a new document and add it to the agent docs store\n", "- evaluate:\n", " final_chunks: |\n", " $ [\n", " NEWLINE.join([chunk, succint]) for chunk, succint in zip(steps[1].input.chunks, _)\n", " ]\n", "\n", "# Step #3 - Create a new document and add it to the agent docs store\n", "- over: $ _['final_chunks']\n", " parallelism: 3\n", " map:\n", " tool: create_agent_doc\n", " arguments:\n", " agent_id: \"$ str(agent.id)\" # <--- This is the agent id of the agent you want to add the document to\n", " data:\n", " metadata:\n", " source: \"jina_crawler\"\n", "\n", " title: \"Website Document\"\n", " content: $ _\n", "\n", "########################################################\n", "################### MAIN WORKFLOW ######################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step 0: Get the content of the product page\n", "- tool: get_page\n", " arguments:\n", " url: $ \"https://r.jina.ai/\" + steps[0].input.url\n", "\n", "# Step 1: Chunk the content\n", "- evaluate:\n", " result: $ chunk_doc(_.json.data.content.strip())\n", "\n", "# Step 2: Evaluate step to document chunks\n", "- workflow: index_page\n", " arguments:\n", " content: $ _.result\n", " document: $ steps[0].output.json.data.content.strip()\n", " reducing_strength: $ steps[0].input.reducing_strength\n", "''')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notes:\n", "- The `unwrap: True` in the prompt step is used to unwrap the output of the prompt step (to unwrap the `choices[0].message.content` from the output of the model).\n", "- The `$` sign is used to differentiate between a Python expression and a string.\n", "- The `_` refers to the output of the previous step.\n", "- The `steps[index].input` refers to the input of the step at `index`.\n", "- The `steps[index].output` refers to the output of the step at `index`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Create the task\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "execution_homepage = client.executions.create(\n", " task_id=TASK_UUID,\n", " input={\n", " \"url\": \"https://julep.ai/\",\n", " \"reducing_strength\": 2\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Monitoring and analyzing execution\n", "\n", "There are multiple ways to track and analyze the execution:\n", "\n", "1. **Stream Execution Status**: This method streams real-time status updates from the execution, allowing you to monitor its progress as it happens. Each event contains the current status of the execution (e.g., `running`, `succeeded`, `failed`).\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "Note: The streaming status updates will continue until the execution completes. You can see the transitions after the execution has completed to analyze the detailed outputs of each step." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "running\n", "running\n", "running\n", "running\n", "running\n", "running\n", "running\n", "running\n", "running\n", "succeeded\n" ] } ], "source": [ "for event in client.executions.status.stream(execution_id=execution_homepage.id):\n", " print(event.status)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index: 0 Type: init\n", "output: {\n", " \"url\": \"https://julep.ai/\",\n", " \"reducing_strength\": 2\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 1 Type: step\n", "output: {\n", " \"json\": {\n", " \"code\": 200,\n", " \"data\": {\n", " \"url\": \"https://julep.ai/\",\n", " \"title\": \"Julep AI\",\n", " \"usage\": {\n", " \"tokens\": 4630\n", " },\n", " \"content\": \"Julep AI\\n\\n===============\\n\\n[![Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n[New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\nDeploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\nOpen-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n[Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n[Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n![Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\nIterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\nConnect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\nLLM Platforms\\n\\n![Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n![Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n![Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n![Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n![Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n![Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n![Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n![Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ![Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\nAny REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\nDefine multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\nReal people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\nScale to millions.\\n----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\nProduction Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\nAnswers.\\n---------------------\\n\\nWhat is Julep?\\n\\nJulep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\nWho is Julep for?\\n\\nJulep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\nHow does Julep's approach differ from typical AI development?\\n\\nWhile most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\nHow is Julep different from agent frameworks?\\n\\nWhile LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\nWhat types of workflows can I build with Julep?\\n\\nYou can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\nHow does Julep handle scaling and fault tolerance?\\n\\nJulep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\nIs Julep secure and enterprise-grade?\\n\\nYes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\nWhat are Julep\\u2019s pricing models?\\n\\nWe offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\nKeep me informed\\n\\nDev Resources\\n\\n[Docs](https://docs.julep.ai/)\\n\\n[Get API Key](https://dashboard.julep.ai/)\\n\\n[Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n[Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n[Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n[Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n[Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n[Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n[About](https://julep.ai/about)\\n\\n[Contact Us](https://julep.ai/contact)\\n\\n[Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n[Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n[Twitter](https://x.com/julep_ai)\\n\\n[Dev.to](https://dev.to/julep)\\n\\n[Hugging Face](https://huggingface.co/julep-ai)\\n\\n[Youtube](https://www.youtube.com/@julep_ai)\\n\\n![Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n[Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\",\n", " \"description\": \"Backend for building AI agent workflows. A new DSL for building tasks and a server for running them. \\nAllows companie so build and deploy AI pipelines in minues.\"\n", " },\n", " \"meta\": {\n", " \"usage\": {\n", " \"tokens\": 4630\n", " }\n", " },\n", " \"status\": 20000\n", " },\n", " \"content\": \"eyJjb2RlIjoyMDAsInN0YXR1cyI6MjAwMDAsImRhdGEiOnsidGl0bGUiOiJKdWxlcCBBSSIsImRlc2NyaXB0aW9uIjoiQmFja2VuZCBmb3IgYnVpbGRpbmcgQUkgYWdlbnQgd29ya2Zsb3dzLiBBIG5ldyBEU0wgZm9yIGJ1aWxkaW5nIHRhc2tzIGFuZCBhIHNlcnZlciBmb3IgcnVubmluZyB0aGVtLiBcbkFsbG93cyBjb21wYW5pZSBzbyBidWlsZCBhbmQgZGVwbG95IEFJIHBpcGVsaW5lcyBpbiBtaW51ZXMuIiwidXJsIjoiaHR0cHM6Ly9qdWxlcC5haS8iLCJjb250ZW50IjoiSnVsZXAgQUlcblxuPT09PT09PT09PT09PT09XG5cblshW0ltYWdlIDFdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OWFpDZlQ1SHk1MTBYVTlGdUEwUUFMMzEwWTAucG5nKV0oaHR0cHM6Ly9qdWxlcC5haS8pXG5cbltOZXcgTGF1bmNoIE9wZW4tU291cmNlIFJlc3BvbnNlcyBBUEldKGh0dHBzOi8vZG9jcy5qdWxlcC5haS9yZXNwb25zZXMpXG5cbk9wZW4gU291cmNlXG5cbltHaXRodWIg4piFIDQuN0tdKGh0dHBzOi8vZ2l0aHViLmNvbS9qdWxlcC1haS9qdWxlcClcblxuRGVwbG95IHNlcnZlcmxlc3NcblxuQUkgd29ya2Zsb3dzXG5cbmF0IHNjYWxlXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbiBtaW51dGVzLCBub3Qgd2Vla3MuXG5cbk9wZW4tc291cmNlIEFQSSB0byBidWlsZCBcblxuaW5maW5pdGVseSBzY2FsYWJsZSwgZHVyYWJsZSBhbmQgbG9uZyBydW5uaW5nIEFJIHBpcGVsaW5lc1xuXG51c2luZyBhZ2VudHMsIHRhc2tzIGFuZCB0b29sc1xuXG5bRGVwbG95IHlvdXIgZmlyc3Qgd29ya2Zsb3ddKGh0dHBzOi8vZGFzaGJvYXJkLmp1bGVwLmFpLylcblxuW0dldCBhIGRlbW9dKGh0dHBzOi8vY2FsZW5kbHkuY29tL2lzaGl0YS1qdWxlcClcblxuQ1VTVE9NRVIgU1RPUklFU1xuXG5WaWRlbyBFZGl0aW5nXG5cblJBRyBBc3NpdGFudHNcblxuTWFya2V0aW5nXG5cblVzZXIgUHJvZmlsaW5nXG5cblZlcmlmaWNhdGlvbnNcblxuIVtJbWFnZSAyXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvQUV3WWgxWWR6cEN0VXVDMGNTNTMxWURXVWxzLnBuZz9zY2FsZS1kb3duLXRvPTEwMjQpXG5cblZpZHlvIGJ1aWx0IHBlcnNvbmFsaXNlZCBtYXJrZXRpbmcgaW50ZWxsaWdlbmNlIGZvciB0aG91c2FuZHMgb2YgdXNlcnMgdXNpbmcgcG9zdGluZyB0cmVuZHMgYW5kIGN1cnJlbnQgdG9wIHRyZW5kcy5cblxuSXRlcmF0ZSBhbmQgZGVwbG95IEFJIGZlYXR1cmVzIHN1cGVyIGZhc3QgYnkgYnJpbmdpbmcgZGF0YSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIGluIG9uZSBwbGFjZS5cblxuQ29ubmVjdCB3aXRoIGFueSBBSSBtb2RlbCxcblxuQVBJIG9yIGRhdGEgc291cmNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblNlYW1sZXNzbHkgaW50ZWdyYXRlIHdpdGggeW91ciBleGlzdGluZyBzdGFjayBhbmQgZmF2b3JpdGUgQUkgbW9kZWxzLlxuXG5MTE0gUGxhdGZvcm1zXG5cbiFbSW1hZ2UgM10oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL3p4V3hORjRTekR0Y0ZMOW1WbUF2b0RGNERFLnBuZz9sb3NzbGVzcz0xKVxuXG4hW0ltYWdlIDRdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9waDdFRzdvWWtRNUF3dTg2aGMwNXdSanZHdy5wbmc/bG9zc2xlc3M9MSlcblxuIVtJbWFnZSA1XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvSU1IV0tiZmhjOGRabzdNaG5rcGxLM0l0bW1NLnBuZz9sb3NzbGVzcz0xKVxuXG4hW0ltYWdlIDZdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9RWXRXM3BnSUwyakVUQk4zY0VwVzZIUGRsWS5wbmc/bG9zc2xlc3M9MSlcblxuIVtJbWFnZSA3XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvWHZsMFlud0xtaWw2VDNBR2pSbGZwQXhJeUpBLnBuZz9sb3NzbGVzcz0xKVxuXG4hW0ltYWdlIDhdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy84MDlmeTlyOXh1aFhQaGlIVzFrdllIanVGNC5wbmc/bG9zc2xlc3M9MSlcblxuIVtJbWFnZSA5XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvdXpYRmxMckgzbTdhOEl5ZzFwdmV3MWdyNFUucG5nP2xvc3NsZXNzPTEpXG5cbiFbSW1hZ2UgMTBdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy82U0l6T3A5bTh0SHFBWjZ6bk8xTGdxUjVYRFkucG5nP2xvc3NsZXNzPTEpXG5cbkxhbmd1YWdlc1xuXG5JbnRlZ3JhdGlvbnNcblxuKiAgICFbSW1hZ2UgMTFdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OZnhrN1VBdXFUMHVWOEd0Z0wwVlQza2ZuT2sucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAxMl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dGT294bkF4d3pVZzUyS3RsVUhwS2h3LnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMTNdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ySnJaUTZlbG9tT2JKTEtqWHVES050Y1MxOC5wbmc/bG9zc2xlc3M9MSkgICBcbiogICAhW0ltYWdlIDE0XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvaE9IUkhpVHZNUUhzNW55SmhXQW1DY0s2ZVEucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAxNV0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2lMRTU3WDdXeWFCSFhETzBheVNKelM2UTAucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAxNl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL25NekRmeWFyU2JVazVPbjJqbG4yRlByMEtFLnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMTddKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OZnhrN1VBdXFUMHVWOEd0Z0wwVlQza2ZuT2sucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAxOF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dGT294bkF4d3pVZzUyS3RsVUhwS2h3LnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMTldKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ySnJaUTZlbG9tT2JKTEtqWHVES050Y1MxOC5wbmc/bG9zc2xlc3M9MSkgICBcbiogICAhW0ltYWdlIDIwXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvaE9IUkhpVHZNUUhzNW55SmhXQW1DY0s2ZVEucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAyMV0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2lMRTU3WDdXeWFCSFhETzBheVNKelM2UTAucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAyMl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL25NekRmeWFyU2JVazVPbjJqbG4yRlByMEtFLnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMjNdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OZnhrN1VBdXFUMHVWOEd0Z0wwVlQza2ZuT2sucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAyNF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dGT294bkF4d3pVZzUyS3RsVUhwS2h3LnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMjVdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ySnJaUTZlbG9tT2JKTEtqWHVES050Y1MxOC5wbmc/bG9zc2xlc3M9MSkgICBcbiogICAhW0ltYWdlIDI2XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvaE9IUkhpVHZNUUhzNW55SmhXQW1DY0s2ZVEucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAyN10oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2lMRTU3WDdXeWFCSFhETzBheVNKelM2UTAucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAyOF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL25NekRmeWFyU2JVazVPbjJqbG4yRlByMEtFLnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMjldKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OZnhrN1VBdXFUMHVWOEd0Z0wwVlQza2ZuT2sucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAzMF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dGT294bkF4d3pVZzUyS3RsVUhwS2h3LnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMzFdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ySnJaUTZlbG9tT2JKTEtqWHVES050Y1MxOC5wbmc/bG9zc2xlc3M9MSkgICBcbiogICAhW0ltYWdlIDMyXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvaE9IUkhpVHZNUUhzNW55SmhXQW1DY0s2ZVEucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAzM10oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2lMRTU3WDdXeWFCSFhETzBheVNKelM2UTAucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAzNF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL25NekRmeWFyU2JVazVPbjJqbG4yRlByMEtFLnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMzVdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9OZnhrN1VBdXFUMHVWOEd0Z0wwVlQza2ZuT2sucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAzNl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dGT294bkF4d3pVZzUyS3RsVUhwS2h3LnBuZz9sb3NzbGVzcz0xKSAgIFxuKiAgICFbSW1hZ2UgMzddKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ySnJaUTZlbG9tT2JKTEtqWHVES050Y1MxOC5wbmc/bG9zc2xlc3M9MSkgICBcbiogICAhW0ltYWdlIDM4XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvaE9IUkhpVHZNUUhzNW55SmhXQW1DY0s2ZVEucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSAzOV0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2lMRTU3WDdXeWFCSFhETzBheVNKelM2UTAucG5nP2xvc3NsZXNzPTEpICAgXG4qICAgIVtJbWFnZSA0MF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL25NekRmeWFyU2JVazVPbjJqbG4yRlByMEtFLnBuZz9sb3NzbGVzcz0xKSAgIFxuXG5BbnkgUkVTVCBBUElcblxuIyMjIEJ1aWxkIHdpdGggSnVsZXBcblxuQ3JlYXRlIGFuIGFnZW50XG5cbkRlZmluZSBhZ2VudHMgdGhhdCBjYW4gdGFsayB0byB1c2VycyBpbnNpZGUgb2YgYSBzZXNzaW9uXG5cbkFkZCB0b29sc1xuXG5FcXVpcCBhZ2VudHMgd2l0aCB0b29scyAtIHdlYiBzZWFyY2gsIEFQSSBjYWxscywgb3IgY3VzdG9tIGludGVncmF0aW9uc1xuXG5EZWZpbmUgeW91ciB0YXNrc1xuXG5EZWZpbmUgbXVsdGktc3RlcCBwcm9jZXNzZXMgaW4gWUFNTCB3aXRoIGRlY2lzaW9uIHRyZWVzLCBsb29wcywgYW5kIHBhcmFsbGVsIGV4ZWN1dGlvblxuXG5EZXBsb3lcblxuRXhlY3V0ZSBwcm9kdWN0aW9uLWdyYWRlIHdvcmtmbG93cyB3aXRoIG9uZSBjb21tYW5kXG5cbmFnZW50ID0ganVsZXAuYWdlbnRzLmNyZWF0ZShcblxubmFtZT1cIlNwaWRlcm1hblwiLFxuXG5hYm91dD1cIkFJIHRoYXQgY2FuIGNyYXdsIHRoZSB3ZWIgYW5kIGV4dHJhY3QgZGF0YVwiLFxuXG5tb2RlbD1cImdwdC00by1taW5pXCIsXG5cbmRlZmF1bHRfc2V0dGluZ3M9e1xuXG5cInRlbXBlcmF0dXJlXCI6IDAuNzUsXG5cblwibWF4X3Rva2Vuc1wiOiAxMDAwMCxcblxuXCJ0b3BfcFwiOiAxLjAsXG5cbn1cblxuKVxuXG5SZWFsIHBlb3BsZSwgUmVhbCByZXN1bHRzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiogICAgIEp1bGVwIHRvIG1lIHNpdHMgaW4gdGhlIGludGVyc2VjdGlvbiBvZiB3aGF0IFphcGllciBkaWQgZm9yIHNpbXBsaWZ5aW5nIHdvcmtmbG93cywgYW5kIHdoYXQgVmVyY2VsIGRpZCBmb3Igc2ltcGxpZnlpbmcgc2hpcHBpbmcuIFRoZSBuZXcgcG9zc2liaWxpdGllcyBhcmUgZW5kbGVzcy4gSSBhbSBleGNpdGVkIGFidXQgd2hhdCBhbGwgY2FuIGJlIGRvbmUgd2l0aCB0aGlzIHRlY2ggYXQgRVMuICAhW0ltYWdlIDQxXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvRE5IMXRQWDRvREhiZjlycU1FcDlqcTFuenM4LmpwZWcpICBTdXJ5YW5zaCBUaWJhcmV3YWwgQ0VPLCBFc3NlbnRpYWxseVNwb3J0cyAgICAgXG4qICAgICBGb3IgVmlkeW8sIHdlIHNoaXBwZWQgNiBtb250aHMgd29ydGggb2YgcHJvZHVjdCBkZXZlbG9wbWVudCBpbiA2IGhvdXJzLiBHQU1FIENIQU5HRVIhISAgIVtJbWFnZSA0Ml0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL2ZUYnM4Yjc2WDRsQlM3cG9ZQmMxNTZHRS5qcGVnKSAgVmVkYW50IE1haGVzaHdhcmkgQ0VPLCBWaWR5by5haSAgICAgXG4qICAgICBXZSB0cmllZCBidWlsZGluZyBvdXIgYWkgc3RhY2sgd2hlcmUgd2UgbmVlZGVkIHNpbXBsZSBhdXRvbWF0ZWQgY29tcHV0ZXIgdXNlLiB3ZSBzcGVudCBtb250aHMgdHJ5aW5nIHRvIGdldCBpdCByaWdodCwgYnV0IG91ciBkZXZlbG9wbWVudCB0aW1lIGdvdCBjdXQgdG8gYSBjb3VwbGUgd2Vla3MgYmVjYXVzZSBtb3N0IG9mIHRoZSBpbmZyYSBvcmNoZXN0cmF0aW9uIHdhcyBoYW5kbGVkIGJ5IGp1bGVwLiBhbGwgdGhhdCB3ZSBoYWQgdG8gZG8gd2FzIHJlZmluZSBvdXIgcHJvbXB0cyAgIVtJbWFnZSA0M10oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL3Rja3N0VllxTm5ZOEdZVVZSR0pqS3N1Y2hudy5qcGVnKSAgTWFkaGF2YW4gQ0VPLCBSZWNsYWltIFByb3RvY29sICAgICBcbiogICAgIFwiU2FtZSBleHBlcmllbmNlIGFzIHJldmlld2luZyBkZXNpZ25zIG9uIEZpZ21hIHdpdGggbXkgZGVzaWduZXIuIFNhdCB3aXRoIG15IGRldmVsb3BlciBvbmNlLCBhbmQgd2Uga2VwdCBicmFpbnN0b3JtaW5nLCB0ZXN0aW5nLCBwcm90b3R5cGluZyBhbmQgc2hpcHBpbmcgYXQgb25jZS4gSSBnb3QgY29udHJvbCBiYWNrIGluIG15IGhhbmRzIGFzIGEgbm9uLWRldmVsb3Blci5cIiAgIVtJbWFnZSA0NF0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL015Uk1WSnA3aGJYeWxObktNY0hhc0hiS3lCWS5qcGVnKSAgQWtzaGF5IFBydXRoaSBDRU8sIENhbG0gU2xlZXAgICAgIFxuKiAgICAgV29ya2luZyB3aXRoIEp1bGVwIGFjY2VsZXJhdGVkIFVrdW1pLCBieSBlbmFibGluZyB1cyB0byBmb2N1cyBvbiBvdXIgY29yZSBzdHJlbmd0aHMgYW5kIGxldHRpbmcgSnVsZXAgbmF2aWdhdGUgdGhlIGNvbXBsZXggd2ViIG9mIGNhbGxzIHRvIGFpIG1vZGVscyB3ZSBjb3VsZCBkbyBtb3JlIHdpdGggbGVzcy4gICFbSW1hZ2UgNDVdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9HVjhGU0toRnNhUTVzd3NzajRlNUxZUVQ3Z00uanBnKSAgU2FjaGluIEdhdXIgQ29mb3VuZGVyLCBVa3VtaSBBSSAgICAgXG4qICAgICBKdWxlcCB0byBtZSBzaXRzIGluIHRoZSBpbnRlcnNlY3Rpb24gb2Ygd2hhdCBaYXBpZXIgZGlkIGZvciBzaW1wbGlmeWluZyB3b3JrZmxvd3MsIGFuZCB3aGF0IFZlcmNlbCBkaWQgZm9yIHNpbXBsaWZ5aW5nIHNoaXBwaW5nLiBUaGUgbmV3IHBvc3NpYmlsaXRpZXMgYXJlIGVuZGxlc3MuIEkgYW0gZXhjaXRlZCBhYnV0IHdoYXQgYWxsIGNhbiBiZSBkb25lIHdpdGggdGhpcyB0ZWNoIGF0IEVTLiAgIVtJbWFnZSA0Nl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0ROSDF0UFg0b0RIYmY5cnFNRXA5anExbnpzOC5qcGVnKSAgU3VyeWFuc2ggVGliYXJld2FsIENFTywgRXNzZW50aWFsbHlTcG9ydHMgICAgIFxuKiAgICAgRm9yIFZpZHlvLCB3ZSBzaGlwcGVkIDYgbW9udGhzIHdvcnRoIG9mIHByb2R1Y3QgZGV2ZWxvcG1lbnQgaW4gNiBob3Vycy4gR0FNRSBDSEFOR0VSISEgICFbSW1hZ2UgNDddKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9mVGJzOGI3Nlg0bEJTN3BvWUJjMTU2R0UuanBlZykgIFZlZGFudCBNYWhlc2h3YXJpIENFTywgVmlkeW8uYWkgICAgIFxuKiAgICAgV2UgdHJpZWQgYnVpbGRpbmcgb3VyIGFpIHN0YWNrIHdoZXJlIHdlIG5lZWRlZCBzaW1wbGUgYXV0b21hdGVkIGNvbXB1dGVyIHVzZS4gd2Ugc3BlbnQgbW9udGhzIHRyeWluZyB0byBnZXQgaXQgcmlnaHQsIGJ1dCBvdXIgZGV2ZWxvcG1lbnQgdGltZSBnb3QgY3V0IHRvIGEgY291cGxlIHdlZWtzIGJlY2F1c2UgbW9zdCBvZiB0aGUgaW5mcmEgb3JjaGVzdHJhdGlvbiB3YXMgaGFuZGxlZCBieSBqdWxlcC4gYWxsIHRoYXQgd2UgaGFkIHRvIGRvIHdhcyByZWZpbmUgb3VyIHByb21wdHMgICFbSW1hZ2UgNDhdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy90Y2tzdFZZcU5uWThHWVVWUkdKaktzdWNobncuanBlZykgIE1hZGhhdmFuIENFTywgUmVjbGFpbSBQcm90b2NvbCAgICAgXG4qICAgICBcIlNhbWUgZXhwZXJpZW5jZSBhcyByZXZpZXdpbmcgZGVzaWducyBvbiBGaWdtYSB3aXRoIG15IGRlc2lnbmVyLiBTYXQgd2l0aCBteSBkZXZlbG9wZXIgb25jZSwgYW5kIHdlIGtlcHQgYnJhaW5zdG9ybWluZywgdGVzdGluZywgcHJvdG90eXBpbmcgYW5kIHNoaXBwaW5nIGF0IG9uY2UuIEkgZ290IGNvbnRyb2wgYmFjayBpbiBteSBoYW5kcyBhcyBhIG5vbi1kZXZlbG9wZXIuXCIgICFbSW1hZ2UgNDldKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9NeVJNVkpwN2hiWHlsTm5LTWNIYXNIYkt5QlkuanBlZykgIEFrc2hheSBQcnV0aGkgQ0VPLCBDYWxtIFNsZWVwICAgICBcbiogICAgIFdvcmtpbmcgd2l0aCBKdWxlcCBhY2NlbGVyYXRlZCBVa3VtaSwgYnkgZW5hYmxpbmcgdXMgdG8gZm9jdXMgb24gb3VyIGNvcmUgc3RyZW5ndGhzIGFuZCBsZXR0aW5nIEp1bGVwIG5hdmlnYXRlIHRoZSBjb21wbGV4IHdlYiBvZiBjYWxscyB0byBhaSBtb2RlbHMgd2UgY291bGQgZG8gbW9yZSB3aXRoIGxlc3MuICAhW0ltYWdlIDUwXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvR1Y4RlNLaEZzYVE1c3dzc2o0ZTVMWVFUN2dNLmpwZykgIFNhY2hpbiBHYXVyIENvZm91bmRlciwgVWt1bWkgQUkgICAgIFxuKiAgICAgSnVsZXAgdG8gbWUgc2l0cyBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHdoYXQgWmFwaWVyIGRpZCBmb3Igc2ltcGxpZnlpbmcgd29ya2Zsb3dzLCBhbmQgd2hhdCBWZXJjZWwgZGlkIGZvciBzaW1wbGlmeWluZyBzaGlwcGluZy4gVGhlIG5ldyBwb3NzaWJpbGl0aWVzIGFyZSBlbmRsZXNzLiBJIGFtIGV4Y2l0ZWQgYWJ1dCB3aGF0IGFsbCBjYW4gYmUgZG9uZSB3aXRoIHRoaXMgdGVjaCBhdCBFUy4gICFbSW1hZ2UgNTFdKGh0dHBzOi8vZnJhbWVydXNlcmNvbnRlbnQuY29tL2ltYWdlcy9ETkgxdFBYNG9ESGJmOXJxTUVwOWpxMW56czguanBlZykgIFN1cnlhbnNoIFRpYmFyZXdhbCBDRU8sIEVzc2VudGlhbGx5U3BvcnRzICAgICBcbiogICAgIEZvciBWaWR5bywgd2Ugc2hpcHBlZCA2IG1vbnRocyB3b3J0aCBvZiBwcm9kdWN0IGRldmVsb3BtZW50IGluIDYgaG91cnMuIEdBTUUgQ0hBTkdFUiEhICAhW0ltYWdlIDUyXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvZlRiczhiNzZYNGxCUzdwb1lCYzE1NkdFLmpwZWcpICBWZWRhbnQgTWFoZXNod2FyaSBDRU8sIFZpZHlvLmFpICAgICBcbiogICAgIFdlIHRyaWVkIGJ1aWxkaW5nIG91ciBhaSBzdGFjayB3aGVyZSB3ZSBuZWVkZWQgc2ltcGxlIGF1dG9tYXRlZCBjb21wdXRlciB1c2UuIHdlIHNwZW50IG1vbnRocyB0cnlpbmcgdG8gZ2V0IGl0IHJpZ2h0LCBidXQgb3VyIGRldmVsb3BtZW50IHRpbWUgZ290IGN1dCB0byBhIGNvdXBsZSB3ZWVrcyBiZWNhdXNlIG1vc3Qgb2YgdGhlIGluZnJhIG9yY2hlc3RyYXRpb24gd2FzIGhhbmRsZWQgYnkganVsZXAuIGFsbCB0aGF0IHdlIGhhZCB0byBkbyB3YXMgcmVmaW5lIG91ciBwcm9tcHRzICAhW0ltYWdlIDUzXShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvdGNrc3RWWXFOblk4R1lVVlJHSmpLc3VjaG53LmpwZWcpICBNYWRoYXZhbiBDRU8sIFJlY2xhaW0gUHJvdG9jb2wgICAgIFxuKiAgICAgXCJTYW1lIGV4cGVyaWVuY2UgYXMgcmV2aWV3aW5nIGRlc2lnbnMgb24gRmlnbWEgd2l0aCBteSBkZXNpZ25lci4gU2F0IHdpdGggbXkgZGV2ZWxvcGVyIG9uY2UsIGFuZCB3ZSBrZXB0IGJyYWluc3Rvcm1pbmcsIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBzaGlwcGluZyBhdCBvbmNlLiBJIGdvdCBjb250cm9sIGJhY2sgaW4gbXkgaGFuZHMgYXMgYSBub24tZGV2ZWxvcGVyLlwiICAhW0ltYWdlIDU0XShodHRwczovL2ZyYW1lcnVzZXJjb250ZW50LmNvbS9pbWFnZXMvTXlSTVZKcDdoYlh5bE5uS01jSGFzSGJLeUJZLmpwZWcpICBBa3NoYXkgUHJ1dGhpIENFTywgQ2FsbSBTbGVlcCAgICAgXG4qICAgICBXb3JraW5nIHdpdGggSnVsZXAgYWNjZWxlcmF0ZWQgVWt1bWksIGJ5IGVuYWJsaW5nIHVzIHRvIGZvY3VzIG9uIG91ciBjb3JlIHN0cmVuZ3RocyBhbmQgbGV0dGluZyBKdWxlcCBuYXZpZ2F0ZSB0aGUgY29tcGxleCB3ZWIgb2YgY2FsbHMgdG8gYWkgbW9kZWxzIHdlIGNvdWxkIGRvIG1vcmUgd2l0aCBsZXNzLiAgIVtJbWFnZSA1NV0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL0dWOEZTS2hGc2FRNXN3c3NqNGU1TFlRVDdnTS5qcGcpICBTYWNoaW4gR2F1ciBDb2ZvdW5kZXIsIFVrdW1pIEFJICAgICBcblxuQnVpbGQgQUkgcGlwZWxpbmVzIFxuXG5pbiBtaW51dGVzLlxuXG5TY2FsZSB0byBtaWxsaW9ucy5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuUmFwaWQgUHJvdG90eXBpbmdcblxuXCJGcm9tIGlkZWEgdG8gZGVtbyBpbiBtaW51dGVzXCIgdXNpbmcgYnVpbHQtaW4gUkFHLCBpbi1ob3VzZSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBleHRlcm5hbCB0b29scy5cblxuUHJvZHVjdGlvbiBSZWFkeVxuXG5cIkdvIGxpdmUgaW5zdGFudGx5IHdpdGggbWFuYWdlZCBpbmZyYXN0cnVjdHVyZVwiIGFuZCBmZWF0dXJlcyBzdWNoIGFzIGxvbmctcnVubmluZyB0YXNrcywgYXV0b21hdGljIHJldHJpZXMgYW5kIGVycm9yIGhhbmRsaW5nXG5cbk1vZHVsYXIgRGVzaWduXG5cblwiQnVpbGQgZmVhdHVyZXMgbGlrZSBMZWdvIGJsb2Nrc1wiIGJ5IGNvbm5lY3RpbmcgdG8gYW55IGV4dGVybmFsIEFQSSwgc3dpdGNoIGJldHdlZW4gTExNcyBhbmQgYWRkIGN1c3RvbSB0b29sc1xuXG5JbmZpbml0ZSBTY2FsZVxuXG5IYW5kbGUgbWlsbGlvbnMgb2YgY29uY3VycmVudCB1c2VycyB3aXRoIGF1dG9tYXRpYyBzY2FsaW5nIGFuZCBsb2FkIGJhbGFuY2luZ1xuXG5GdXR1cmUgUHJvb2ZcblxuXCJBZGQgbmV3IEFJIG1vZGVscyBhbnl0aW1lXCIgXCJJbnRlZ3JhdGUgd2l0aCBhbnkgbmV3IHRvb2wgb3IgQVBJXCJcblxuQ29tcGxldGUgQ29udHJvbFxuXG5cIkZ1bGwgdmlzaWJpbGl0eSBpbnRvIEFJIG9wZXJhdGlvbnNcIiBcIk1hbmFnZSBjb3N0cyBhbmQgcGVyZm9ybWFuY2UgZWFzaWx5XCJcblxuUXVlc3Rpb25zPyBcblxuQW5zd2Vycy5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5XaGF0IGlzIEp1bGVwP1xuXG5KdWxlcCBpcyBhIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3cgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgc2NpZW5jZSB0ZWFtcyBidWlsZCwgaXRlcmF0ZSBvbiwgYW5kIGRlcGxveSBtdWx0aS1zdGVwIEFJIHBpcGVsaW5lcyB1c2luZyBhIHNpbXBsZSwgZGVjbGFyYXRpdmUgWUFNTC1iYXNlZCBjb25maWd1cmF0aW9uLlxuXG5XaG8gaXMgSnVsZXAgZm9yP1xuXG5KdWxlcCBpcyBkZXNpZ25lZCBmb3IgZGF0YSBzY2llbnRpc3RzIGFuZCBNTCBlbmdpbmVlcnPigJRlc3BlY2lhbGx5IGluIGVudGVycHJpc2Ugc2V0dGluZ3PigJR3aG8gd2FudCB0byBxdWlja2x5IG1vdmUgZnJvbSBBSSBwcm90b3R5cGVzIHRvIHByb2R1Y3Rpb24gd2l0aG91dCB0aGUgbmVlZCBmb3IgaGVhdnkgYmFja2VuZCBlbmdpbmVlcmluZy5cblxuSG93IGRvZXMgSnVsZXAncyBhcHByb2FjaCBkaWZmZXIgZnJvbSB0eXBpY2FsIEFJIGRldmVsb3BtZW50P1xuXG5XaGlsZSBtb3N0IHBsYXRmb3JtcyBmb2N1cyBvbiBwcm9tcHQgZW5naW5lZXJpbmcgYW5kIGNoYWluaW5nIExMTSBjYWxscywgSnVsZXAgYnJpbmdzIHNvZnR3YXJlIGVuZ2luZWVyaW5nIGRpc2NpcGxpbmUgdG8gQUkgZGV2ZWxvcG1lbnQuIFRocm91Z2ggb3VyIDgtRmFjdG9yIEFnZW50IG1ldGhvZG9sb2d5LCB3ZSB0cmVhdCBBSSBjb21wb25lbnRzIGFzIHByb3BlciBzeXN0ZW0gZWxlbWVudHM6IC0gUHJvbXB0cyBhcyBDb2RlOiBUcmFjayBwcm9tcHRzIHNlcGFyYXRlbHkgZnJvbSBhcHBsaWNhdGlvbiBjb2RlLCBlbmFibGluZyBzeXN0ZW1hdGljIGltcHJvdmVtZW50cyBhbmQgcHJvcGVyIHZlcnNpb25pbmcuIC0gQ2xlYXIgVG9vbCBJbnRlcmZhY2VzOiBEZWZpbmUgZXhwbGljaXQgaW50ZXJmYWNlcyBmb3IgYWxsIHRvb2wgaW50ZXJhY3Rpb25zLCBtYWtpbmcgY2FwYWJpbGl0aWVzIG1vZHVsYXIgYW5kIG1haW50YWluYWJsZS4gLU1vZGVsIEluZGVwZW5kZW5jZTogVHJlYXQgbW9kZWwgcHJvdmlkZXJzIGFzIGV4dGVybmFsLCByZXBsYWNlYWJsZSByZXNvdXJjZXMgdG8gYXZvaWQgdmVuZG9yIGxvY2staW4gYW5kIGVuYWJsZSBlYXN5IHN3aXRjaGluZy4gLUNvbnRleHQgTWFuYWdlbWVudDogRXhwbGljaXRseSBkZWZpbmUgaG93IGFwcGxpY2F0aW9uIGFuZCB1c2VyIHN0YXRlIGlzIG1hbmFnZWQgYW5kIHJlZHVjZWQuIC1Hcm91bmQgVHJ1dGggRXhhbXBsZXM6IE1haW50YWluIGNsZWFyIGV4YW1wbGVzIG9mIGV4cGVjdGVkIHByb21wdCByZXN1bHRzIGZvciB2YWxpZGF0aW9uIGFuZCB0ZXN0aW5nLiAtU3RydWN0dXJlZCBSZWFzb25pbmc6IFNlcGFyYXRlIHByb2Nlc3NlcyBpbnRvIGRlbGliZXJhdGl2ZSAocGxhbm5lZCwgbXVsdGktc3RlcCkgYW5kIGltcHJvbXB0dSAocXVpY2sgcmVzcG9uc2UpIHJlYXNvbmluZy4gLVdvcmtmbG93LUJhc2VkIE1vZGVsOiBjb21wbGV4IHByb2Nlc3NlcyBhcyBjbGVhciB3b3JrZmxvd3MgcmF0aGVyIHRoYW4gY2hhaW5zIG9mIHByb21wdHMuIC1GdWxsIE9ic2VydmFiaWxpdHk6IFNhdmUgZXhlY3V0aW9uIHRyYWNlcyBmb3IgZGVidWdnaW5nLCBtb25pdG9yaW5nLCBhbmQgY29udGludW91cyBpbXByb3ZlbWVudC5cblxuSG93IGlzIEp1bGVwIGRpZmZlcmVudCBmcm9tIGFnZW50IGZyYW1ld29ya3M/XG5cbldoaWxlIExhbmdDaGFpbiBpcyBncmVhdCBmb3IgY3JlYXRpbmcgc2VxdWVuY2VzIG9mIHByb21wdHMgYW5kIG1hbmFnaW5nIG1vZGVsIGludGVyYWN0aW9ucywgSnVsZXAgaXMgYnVpbHQgZm9yIGNyZWF0aW5nIHBlcnNpc3RlbnQgQUkgYWdlbnRzIHdpdGggYWR2YW5jZWQgdGFzayBjYXBhYmlsaXRpZXMuIFRoaW5rIG9mIExhbmdDaGFpbiBhcyBhIHRvb2wgZm9yIHByb21wdCBjaGFpbnMsIHdoaWxlIEp1bGVwIGlzIGEgY29tcGxldGUgcGxhdGZvcm0gZm9yIGJ1aWxkaW5nIHByb2R1Y3Rpb24tcmVhZHkgQUkgc3lzdGVtcyB3aXRoIGNvbXBsZXggd29ya2Zsb3dzLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbG9uZy1ydW5uaW5nIHRhc2tzLlxuXG5XaGF0IHR5cGVzIG9mIHdvcmtmbG93cyBjYW4gSSBidWlsZCB3aXRoIEp1bGVwP1xuXG5Zb3UgY2FuIGJ1aWxkIG11bHRpLXN0ZXAgQUkgd29ya2Zsb3dzIHRoYXQgaW5jbHVkZSBkZWNpc2lvbi1tYWtpbmcsIGxvb3BzLCBwYXJhbGxlbCBwcm9jZXNzaW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCByZXRyaWVzLCBhbmQgaW50ZWdyYXRpb25zIHdpdGggZXh0ZXJuYWwgdG9vbHMgYW5kIEFQSXMuXG5cbkhvdyBkb2VzIEp1bGVwIGhhbmRsZSBzY2FsaW5nIGFuZCBmYXVsdCB0b2xlcmFuY2U/XG5cbkp1bGVwIGF1dG9tYXRpY2FsbHkgc2NhbGVzIHRvIGhhbmRsZSB0aG91c2FuZHMgdG8gbWlsbGlvbnMgb2YgZXhlY3V0aW9ucyBhbmQgaXMgYnVpbHQgd2l0aCByb2J1c3QgZmF1bHQgdG9sZXJhbmNlLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbG9uZy1ydW5uaW5nIGV4ZWN1dGlvbiBjYXBhYmlsaXRpZXMgdG8gZW5zdXJlIHJlbGlhYmxlLCBwcm9kdWN0aW9uLWdyYWRlIHdvcmtmbG93cy5cblxuSXMgSnVsZXAgc2VjdXJlIGFuZCBlbnRlcnByaXNlLWdyYWRlP1xuXG5ZZXMuIEp1bGVwIGlzIGJ1aWx0IHdpdGggZW50ZXJwcmlzZSBuZWVkcyBpbiBtaW5kLiBXZSBvZmZlciBwcml2YXRlIGRlcGxveW1lbnRzLCByb2J1c3Qgc2VjdXJpdHkgbWVhc3VyZXMsIGFuZCBjb21wbGlhbmNlIGZlYXR1cmVzIHRoYXQgZW5zdXJlIG91ciBwbGF0Zm9ybSBpcyByZWxpYWJsZSBhbmQgcHJvZHVjdGlvbi1yZWFkeS5cblxuV2hhdCBhcmUgSnVsZXDigJlzIHByaWNpbmcgbW9kZWxzP1xuXG5XZSBvZmZlciBhIGdlbmVyb3VzIGZyZWUgdGllciBmb3IgZXhwZXJpbWVudGF0aW9uLiBGb3IgcGFpZCBwbGFucywgd2UgaGF2ZSB0d28gbWFpbiBtb2RlbHM6IGEgdXNhZ2UtYmFzZWQgcHJpY2luZyBtb2RlbCAoY2hhcmdpbmcgcGVyIHdvcmtmbG93IHN0ZXAgZXhlY3V0ZWQpIGZvciBvdXIgY2xvdWQgcGxhdGZvcm0sIGFuZCBkZWRpY2F0ZWQgZW50ZXJwcmlzZS9vbi1wcmVtIGRlcGxveW1lbnRzIGZvciBsYXJnZSBvcmdhbml6YXRpb25zLlxuXG4jIyMgQnVpbGQgZmFzdGVyIHVzaW5nIEp1bGVwIEFQSVxuXG4jIyMgRGVwbG95IG11bHRpLXN0ZXAgd29ya2Zsb3dzIGVhc2lseSB3aXRoIGJ1aWx0LWluIHRvb2xzIGFuZCBTdGF0ZSBtYW5hZ2VtZW50IHRoYXQgaXMgcHJvZHVjdGlvbiByZWFkeSBmcm9tIGRheSBvbmUuXG5cbktlZXAgbWUgaW5mb3JtZWRcblxuRGV2IFJlc291cmNlc1xuXG5bRG9jc10oaHR0cHM6Ly9kb2NzLmp1bGVwLmFpLylcblxuW0dldCBBUEkgS2V5XShodHRwczovL2Rhc2hib2FyZC5qdWxlcC5haS8pXG5cbltQeXRob24gU0RLXShodHRwczovL2dpdGh1Yi5jb20vanVsZXAtYWkvcHl0aG9uLXNkay9ibG9iL21haW4vUkVBRE1FLm1kKVxuXG5bSmF2YXNjcmlwdCBTREtdKGh0dHBzOi8vZ2l0aHViLmNvbS9qdWxlcC1haS9ub2RlLXNkay9ibG9iL21haW4vUkVBRE1FLm1kKVxuXG5bSW50ZWdyYXRpb24gTGlzdF0oaHR0cHM6Ly9kb2NzLmp1bGVwLmFpL2RvY3MvaW50ZWdyYXRpb25zL3N1cHBvcnRlZC1pbnRlZ3JhdGlvbnMpXG5cblVzZWNhc2VzXG5cbltSQUcgQ2hhdGJvdF0oaHR0cHM6Ly9naXRodWIuY29tL2p1bGVwLWFpL2p1bGVwL2Jsb2IvZGV2L2Nvb2tib29rcy8wOC1yYWctY2hhdGJvdC5pcHluYilcblxuW1dlYiBDcmF3bGVyXShodHRwczovL2dpdGh1Yi5jb20vanVsZXAtYWkvanVsZXAvYmxvYi9kZXYvY29va2Jvb2tzLzAxLXdlYnNpdGUtY3Jhd2xlci5pcHluYilcblxuW0Jyb3dzZXIgVXNlXShodHRwczovL2dpdGh1Yi5jb20vanVsZXAtYWkvanVsZXAvYmxvYi9kZXYvY29va2Jvb2tzLzA2LWJyb3dzZXItdXNlLmlweW5iKVxuXG5bVmlkZW8gUHJvY2Vzc2luZ10oaHR0cHM6Ly9naXRodWIuY29tL2p1bGVwLWFpL2p1bGVwL2Jsb2IvZGV2L2Nvb2tib29rcy8wNS12aWRlby1wcm9jZXNzaW5nLXdpdGgtbmF0dXJhbC1sYW5ndWFnZS5pcHluYilcblxuW0hvb2sgR2VuZXJhdG9yIGZvciBSZWVsc10oaHR0cHM6Ly9naXRodWIuY29tL2p1bGVwLWFpL2p1bGVwL2Jsb2IvZGV2L2Nvb2tib29rcy8wNC1ob29rLWdlbmVyYXRvci10cmVuZGluZy1yZWVscy5pcHluYilcblxuQ29tcGFueVxuXG5bQWJvdXRdKGh0dHBzOi8vanVsZXAuYWkvYWJvdXQpXG5cbltDb250YWN0IFVzXShodHRwczovL2p1bGVwLmFpL2NvbnRhY3QpXG5cbltCb29rIERlbW9dKGh0dHBzOi8vY2FsZW5kbHkuY29tL2lzaGl0YS1qdWxlcClcblxuU29jaWFsc1xuXG5bR2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vanVsZXAtYWkvanVsZXApXG5cbltMaW5rZWRJbl0oaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvanVsZXAtYWkpXG5cbltUd2l0dGVyXShodHRwczovL3guY29tL2p1bGVwX2FpKVxuXG5bRGV2LnRvXShodHRwczovL2Rldi50by9qdWxlcClcblxuW0h1Z2dpbmcgRmFjZV0oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9qdWxlcC1haSlcblxuW1lvdXR1YmVdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BqdWxlcF9haSlcblxuIVtJbWFnZSA1Nl0oaHR0cHM6Ly9mcmFtZXJ1c2VyY29udGVudC5jb20vaW1hZ2VzL05YWkNmVDVIeTUxMFhVOUZ1QTBRQUwzMTBZMC5wbmcpXG5cbkJ1aWx0IGJ5IEVuZ2luZWVycywgZm9yIEVuZ2luZWVyc1xuXG7CqSBKdWxlcCBBSSBJbmMuIDIwMjVcblxuW1ByaXZhY3kgUG9saWN5XShodHRwczovL3d3dy50ZXJtc2ZlZWQuY29tL2xpdmUvZmE1MmJkYzUtNjJmMy00NWFkLWEyMjAtNzE2ZTFjYTZlMmY5KSB8IFtUZXJtcyBvZiBTZXJ2aWNlXShodHRwczovL3d3dy50ZXJtc2ZlZWQuY29tL2xpdmUvZTQ5ZmNhMDQtZTlkMi00MTg2LWFhZWItMDFlZDFhMGQ3ODUwKSIsInVzYWdlIjp7InRva2VucyI6NDYzMH19LCJtZXRhIjp7InVzYWdlIjp7InRva2VucyI6NDYzMH19fQ==\",\n", " \"headers\": {\n", " \"nel\": \"{\\\"success_fraction\\\":0,\\\"report_to\\\":\\\"cf-nel\\\",\\\"max_age\\\":604800}\",\n", " \"date\": \"Tue, 10 Jun 2025 14:34:44 GMT\",\n", " \"vary\": \"Accept-Encoding\",\n", " \"cf-ray\": \"94d9975758eb3448-EWR\",\n", " \"server\": \"cloudflare\",\n", " \"alt-svc\": \"h3=\\\":443\\\"; ma=86400\",\n", " \"report-to\": \"{\\\"endpoints\\\":[{\\\"url\\\":\\\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=sqOmshWjmTtznQnP9Ef1NzIE%2FR38Bo1J4RgBmwwG7SOQk%2BE3fu8qjaMorv8FCcpxR5PjyTMY3f4ZGcqdv2yLOTob%2BSRZ9kkN8RNonYum9PdsDKNS1QVVxnx4jQ%3D%3D\\\"}],\\\"group\\\":\\\"cf-nel\\\",\\\"max_age\\\":604800}\",\n", " \"connection\": \"keep-alive\",\n", " \"traceparent\": \"00-46f61c43e27a22cadff131cc46346eeb-9cd0803c0973b922-00\",\n", " \"content-type\": \"application/json; charset=utf-8\",\n", " \"server-timing\": \"cfL4;desc=\\\"?proto=TCP&rtt=1821&min_rtt=1482&rtt_var=798&sent=4&recv=6&lost=0&retrans=0&sent_bytes=2828&recv_bytes=792&delivery_rate=1954116&cwnd=244&unsent_bytes=0&cid=34ad012006f0e80d&ts=280&x=0\\\"\",\n", " \"cf-cache-status\": \"DYNAMIC\",\n", " \"content-encoding\": \"gzip\",\n", " \"transfer-encoding\": \"chunked\",\n", " \"x-cloud-trace-context\": \"46f61c43e27a22cadff131cc46346eeb/11299672460417546530\"\n", " },\n", " \"status_code\": 200\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 2 Type: step\n", "output: {\n", " \"result\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ]\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 3 Type: step\n", "output: {\n", " \"content\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"document\": \"Julep AI\\n\\n===============\\n\\n[![Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n[New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\nDeploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\nOpen-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n[Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n[Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n![Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\nIterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\nConnect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\nLLM Platforms\\n\\n![Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n![Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n![Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n![Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n![Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n![Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n![Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n![Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ![Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\nAny REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\nDefine multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\nReal people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\nScale to millions.\\n----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\nProduction Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\nAnswers.\\n---------------------\\n\\nWhat is Julep?\\n\\nJulep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\nWho is Julep for?\\n\\nJulep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\nHow does Julep's approach differ from typical AI development?\\n\\nWhile most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\nHow is Julep different from agent frameworks?\\n\\nWhile LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\nWhat types of workflows can I build with Julep?\\n\\nYou can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\nHow does Julep handle scaling and fault tolerance?\\n\\nJulep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\nIs Julep secure and enterprise-grade?\\n\\nYes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\nWhat are Julep\\u2019s pricing models?\\n\\nWe offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\nKeep me informed\\n\\nDev Resources\\n\\n[Docs](https://docs.julep.ai/)\\n\\n[Get API Key](https://dashboard.julep.ai/)\\n\\n[Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n[Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n[Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n[Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n[Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n[Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n[About](https://julep.ai/about)\\n\\n[Contact Us](https://julep.ai/contact)\\n\\n[Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n[Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n[Twitter](https://x.com/julep_ai)\\n\\n[Dev.to](https://dev.to/julep)\\n\\n[Hugging Face](https://huggingface.co/julep-ai)\\n\\n[Youtube](https://www.youtube.com/@julep_ai)\\n\\n![Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n[Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\",\n", " \"reducing_strength\": 2\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 4 Type: init_branch\n", "output: {\n", " \"content\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"document\": \"Julep AI\\n\\n===============\\n\\n[![Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n[New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\nDeploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\nOpen-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n[Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n[Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n![Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\nIterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\nConnect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\nLLM Platforms\\n\\n![Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n![Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n![Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n![Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n![Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n![Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n![Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n![Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ![Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\nAny REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\nDefine multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\nReal people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\nScale to millions.\\n----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\nProduction Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\nAnswers.\\n---------------------\\n\\nWhat is Julep?\\n\\nJulep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\nWho is Julep for?\\n\\nJulep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\nHow does Julep's approach differ from typical AI development?\\n\\nWhile most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\nHow is Julep different from agent frameworks?\\n\\nWhile LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\nWhat types of workflows can I build with Julep?\\n\\nYou can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\nHow does Julep handle scaling and fault tolerance?\\n\\nJulep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\nIs Julep secure and enterprise-grade?\\n\\nYes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\nWhat are Julep\\u2019s pricing models?\\n\\nWe offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\nKeep me informed\\n\\nDev Resources\\n\\n[Docs](https://docs.julep.ai/)\\n\\n[Get API Key](https://dashboard.julep.ai/)\\n\\n[Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n[Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n[Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n[Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n[Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n[Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n[About](https://julep.ai/about)\\n\\n[Contact Us](https://julep.ai/contact)\\n\\n[Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n[Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n[Twitter](https://x.com/julep_ai)\\n\\n[Dev.to](https://dev.to/julep)\\n\\n[Hugging Face](https://huggingface.co/julep-ai)\\n\\n[Youtube](https://www.youtube.com/@julep_ai)\\n\\n![Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n[Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\",\n", " \"reducing_strength\": 2\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 5 Type: step\n", "output: {\n", " \"label\": \"docs\",\n", " \"chunks\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"document\": \"Julep AI\\n\\n===============\\n\\n[![Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n[New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\nDeploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\nOpen-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n[Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n[Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n![Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\nIterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\nConnect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\nLLM Platforms\\n\\n![Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n![Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n![Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n![Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n![Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n![Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n![Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n![Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ![Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ![Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ![Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ![Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ![Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ![Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ![Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\nAny REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\nDefine multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\nReal people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ![Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ![Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ![Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ![Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ![Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\nScale to millions.\\n----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\nProduction Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\nAnswers.\\n---------------------\\n\\nWhat is Julep?\\n\\nJulep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\nWho is Julep for?\\n\\nJulep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\nHow does Julep's approach differ from typical AI development?\\n\\nWhile most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\nHow is Julep different from agent frameworks?\\n\\nWhile LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\nWhat types of workflows can I build with Julep?\\n\\nYou can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\nHow does Julep handle scaling and fault tolerance?\\n\\nJulep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\nIs Julep secure and enterprise-grade?\\n\\nYes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\nWhat are Julep\\u2019s pricing models?\\n\\nWe offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\nKeep me informed\\n\\nDev Resources\\n\\n[Docs](https://docs.julep.ai/)\\n\\n[Get API Key](https://dashboard.julep.ai/)\\n\\n[Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n[Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n[Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n[Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n[Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n[Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n[About](https://julep.ai/about)\\n\\n[Contact Us](https://julep.ai/contact)\\n\\n[Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n[Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n[Twitter](https://x.com/julep_ai)\\n\\n[Dev.to](https://dev.to/julep)\\n\\n[Hugging Face](https://huggingface.co/julep-ai)\\n\\n[Youtube](https://www.youtube.com/@julep_ai)\\n\\n![Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n[Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 6 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 7 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 8 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 9 Type: finish_branch\n", "output: \"This chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 10 Type: finish_branch\n", "output: \"This chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 11 Type: finish_branch\n", "output: \"The chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 12 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 13 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 14 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 15 Type: finish_branch\n", "output: \"The chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 16 Type: finish_branch\n", "output: \"The chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 17 Type: finish_branch\n", "output: \"This chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 18 Type: init_branch\n", "output: [\n", " [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n!\",\n", " \"[Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* !\",\n", " \"* ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use.\",\n", " \"GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. !\",\n", " \"Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n\",\n", " \"Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes.\",\n", " \"Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n!\",\n", " \"[Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", " ],\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 19 Type: finish_branch\n", "output: \"This chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 20 Type: step\n", "output: [\n", " \"The chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\",\n", " \"This chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\",\n", " \"This chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\",\n", " \"The chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\",\n", " \"The chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\",\n", " \"This chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\",\n", " \"This chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 21 Type: step\n", "output: {\n", " \"final_chunks\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\\nThe chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\",\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\\nThis chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\",\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \\nThis chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\",\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \\nThe chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\",\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\\nThe chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\",\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\\nThis chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\",\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\\nThis chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", " ]\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 22 Type: init_branch\n", "output: \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \\nThis chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 23 Type: init_branch\n", "output: \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\\nThis chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 24 Type: init_branch\n", "output: \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\\nThe chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 25 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-7657-7461-8000-0679f7c457a8\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\\nThis chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.400193Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 26 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-76e8-7da2-8000-c6d8ab7a6278\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\\nThe chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.435869Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 27 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-77e9-7a7e-8000-6451affc72c2\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \\nThis chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.498033Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 28 Type: init_branch\n", "output: \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\\nThis chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 29 Type: init_branch\n", "output: \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \\nThe chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 30 Type: init_branch\n", "output: \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\\nThe chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 31 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-8607-71fa-8000-249a60bff59f\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \\nThe chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.380747Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 32 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-866e-76ef-8000-35be7f9f61b1\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\\nThis chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.406044Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 33 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-86c4-700b-8000-028f20c56cf7\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\\nThe chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.426705Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 34 Type: init_branch\n", "output: \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\\nThis chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", "----------------------------------------------------------------------------------------------------\n", "Index: 35 Type: finish_branch\n", "output: {\n", " \"id\": \"0684842a-95d7-7c74-8000-70b120c31efa\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\\nThis chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:21.369126Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Index: 36 Type: finish_branch\n", "output: [\n", " {\n", " \"id\": \"0684842a-76e8-7da2-8000-c6d8ab7a6278\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\\nThe chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.435869Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-7657-7461-8000-0679f7c457a8\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\\nThis chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.400193Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-77e9-7a7e-8000-6451affc72c2\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \\nThis chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.498033Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-8607-71fa-8000-249a60bff59f\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \\nThe chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.380747Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-86c4-700b-8000-028f20c56cf7\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\\nThe chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.426705Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-866e-76ef-8000-35be7f9f61b1\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\\nThis chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.406044Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-95d7-7c74-8000-70b120c31efa\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\\nThis chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:21.369126Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " }\n", "]\n", "----------------------------------------------------------------------------------------------------\n", "Index: 37 Type: finish\n", "output: [\n", " {\n", " \"id\": \"0684842a-76e8-7da2-8000-c6d8ab7a6278\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"Julep AI\\n\\n===============\\n\\n[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\\n\\n [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\\n\\nOpen Source\\n\\n[Github \\u2605 4.7K](https://github.com/julep-ai/julep)\\n\\n Deploy serverless\\n\\nAI workflows\\n\\nat scale\\n=========================================\\n\\nin minutes, not weeks.\\n\\n Open-source API to build \\n\\ninfinitely scalable, durable and long running AI pipelines\\n\\nusing agents, tasks and tools\\n\\n [Deploy your first workflow](https://dashboard.julep.ai/)\\n\\n [Get a demo](https://calendly.com/ishita-julep)\\n\\nCUSTOMER STORIES\\n\\nVideo Editing\\n\\nRAG Assitants\\n\\nMarketing\\n\\nUser Profiling\\n\\nVerifications\\n\\n! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\\n\\nVidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\\n\\n Iterate and deploy AI features super fast by bringing data from different sources in one place.\\n\\n Connect with any AI model,\\n\\nAPI or data source\\n----------------------------------------------\\n\\nSeamlessly integrate with your existing stack and favorite AI models.\\n\\n LLM Platforms\\n\\n! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\\n\\n! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\\n\\n! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\\n\\n! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\\n\\n! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\\n\\n! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\\n\\n! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\\n\\nLanguages\\n\\nIntegrations\\n\\n* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* !\\nThe chunk introduces Julep AI, highlighting its open-source API for building scalable AI workflows using agents, tasks, and tools. It emphasizes the platform's customer stories, integration capabilities with existing AI models, and showcases its ability to deploy serverless workflows quickly. The chunk also includes visual elements and links related to the platform's functionalities and integrations.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.435869Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-7657-7461-8000-0679f7c457a8\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \\n* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \\n* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * !\\nThis chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.400193Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-77e9-7a7e-8000-6451affc72c2\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \\n* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \\n * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \\n* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \\n\\n Any REST API\\n\\n### Build with Julep\\n\\nCreate an agent\\n\\nDefine agents that can talk to users inside of a session\\n\\nAdd tools\\n\\nEquip agents with tools - web search, API calls, or custom integrations\\n\\nDefine your tasks\\n\\n Define multi-step processes in YAML with decision trees, loops, and parallel execution\\n\\nDeploy\\n\\nExecute production-grade workflows with one command\\n\\nagent = julep.agents.create(\\n\\nname=\\\"Spiderman\\\",\\n\\nabout=\\\"AI that can crawl the web and extract data\\\",\\n\\nmodel=\\\"gpt-4o-mini\\\",\\n\\ndefault_settings={\\n\\n\\\"temperature\\\": 0.75,\\n\\n\\\"max_tokens\\\": 10000,\\n\\n\\\"top_p\\\": 1.0,\\n\\n}\\n\\n)\\n\\n Real people, Real results\\n-------------------------\\n\\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* \\nThis chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:19.498033Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-8607-71fa-8000-249a60bff59f\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \\n* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \\n* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \\nThe chunk is a set of testimonials from various CEOs and cofounders praising Julep AI's ability to simplify and accelerate AI development and deployment processes. They highlight Julep AI's capabilities in reducing development time, integrating easily with existing systems, and providing comprehensive toolsets for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.380747Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-86c4-700b-8000-028f20c56cf7\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \\n* \\\"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\\\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \\n* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \\n\\nBuild AI pipelines \\n\\nin minutes.\\n\\n Scale to millions.\\n ----------------------------------------------------\\n\\nRapid Prototyping\\n\\n\\\"From idea to demo in minutes\\\" using built-in RAG, in-house state management and external tools.\\n\\n Production Ready\\n\\n\\\"Go live instantly with managed infrastructure\\\" and features such as long-running tasks, automatic retries and error handling\\n\\nModular Design\\n\\n\\\"Build features like Lego blocks\\\" by connecting to any external API, switch between LLMs and add custom tools\\n\\nInfinite Scale\\n\\nHandle millions of concurrent users with automatic scaling and load balancing\\n\\nFuture Proof\\n\\n\\\"Add new AI models anytime\\\" \\\"Integrate with any new tool or API\\\"\\n\\nComplete Control\\n\\n\\\"Full visibility into AI operations\\\" \\\"Manage costs and performance easily\\\"\\n\\nQuestions? \\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Answers.\\n ---------------------\\n\\nWhat is Julep?\\n\\n Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\\n\\n Who is Julep for?\\n\\n Julep is designed for data scientists and ML engineers\\u2014especially in enterprise settings\\u2014who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\\n\\n How does Julep's approach differ from typical AI development?\\n\\n While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\\nThe chunk highlights customer testimonials and key features of Julep, an AI workflow platform, emphasizing its benefits such as infrastructure orchestration, rapid prototyping, production readiness, modular design, scalability, future-proofing, and providing full visibility and control for data scientists and ML engineers.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.426705Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-866e-76ef-8000-35be7f9f61b1\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\\n\\n How is Julep different from agent frameworks?\\n\\n While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\\n\\n What types of workflows can I build with Julep?\\n\\n You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\\n\\n How does Julep handle scaling and fault tolerance?\\n\\n Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\\n\\n Is Julep secure and enterprise-grade?\\n\\n Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\\n\\n What are Julep\\u2019s pricing models?\\n\\n We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\\n\\n ### Build faster using Julep API\\n\\n### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\\n\\n Keep me informed\\n\\nDev Resources\\n\\n [Docs](https://docs.julep.ai/)\\n\\n [Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n\\nThis chunk discusses the advanced capabilities and enterprise features of Julep, contrasting it with other AI development frameworks by emphasizing its production-readiness, scalability, fault tolerance, security, and pricing models. It highlights the platform\\u2019s efficiency, automation, and comprehensive tools available for AI workflow deployment, catering to enterprise needs.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:20.406044Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " },\n", " {\n", " \"id\": \"0684842a-95d7-7c74-8000-70b120c31efa\",\n", " \"title\": \"Website Document\",\n", " \"content\": [\n", " \"[Get API Key](https://dashboard.julep.ai/)\\n\\n [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\\n\\n [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\\n\\n [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\\n\\nUsecases\\n\\n[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\\n\\n [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\\n\\n [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\\n\\n[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\\n\\n [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\\n\\nCompany\\n\\n [About](https://julep.ai/about)\\n\\n [Contact Us](https://julep.ai/contact)\\n\\n [Book Demo](https://calendly.com/ishita-julep)\\n\\nSocials\\n\\n [Github](https://github.com/julep-ai/julep)\\n\\n[LinkedIn](https://www.linkedin.com/company/julep-ai)\\n\\n [Twitter](https://x.com/julep_ai)\\n\\n [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Dev.to](https://dev.to/julep)\\n\\n [Hugging Face](https://huggingface.co/julep-ai)\\n\\n [Youtube](https://www.youtube.com/@julep_ai)\\n\\n! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\\n\\nBuilt by Engineers, for Engineers\\n\\n\\u00a9 Julep AI Inc. 2025\\n\\n [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\\nThis chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\"\n", " ],\n", " \"language\": \"english\",\n", " \"metadata\": {\n", " \"source\": \"jina_crawler\"\n", " },\n", " \"modality\": \"text\",\n", " \"created_at\": \"2025-06-10T14:35:21.369126Z\",\n", " \"embeddings\": [],\n", " \"embedding_model\": \"text-embedding-3-large\",\n", " \"embedding_dimensions\": 1024\n", " }\n", "]\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "import json\n", "execution_transitions = client.executions.transitions.list(\n", " execution_id=execution_homepage.id, limit=2000).items\n", "\n", "for index, transition in enumerate(reversed(execution_transitions)):\n", " print(\"Index: \", index, \"Type: \", transition.type)\n", " print(\"output: \", json.dumps(transition.output, indent=2))\n", " print(\"-\" * 100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lisitng the Document Store for the Agent\n", "\n", "The document store is where the agent stores the documents it has created. Each document has a `title` , `content`, `id`, `metadata`, `created_at` and the `vector embedding` associated with it. This will be used for the retrieval of the documents when the agent is queried." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of documents in the document store: 4\n" ] } ], "source": [ "docs = [*client.agents.docs.list(agent_id=AGENT_UUID)]\n", "print(\"Number of documents in the document store: \", len(docs))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# # # UNCOMMENT THIS TO DELETE ALL THE AGENT'S DOCUMENTS\n", "\n", "# for doc in client.agents.docs.list(agent_id=AGENT_UUID, limit=1000):\n", "# client.agents.docs.delete(agent_id=AGENT_UUID, doc_id=doc.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating a Session\n", "\n", "A session is used to interact with the agent. It is used to send messages to the agent and receive responses.\n", "Situation is the initial message that is sent to the agent to set the context for the conversation. Out here you can add more information about the agent and the task it is performing to help the agent answer better. Additionally, you can also define the `search_threshold` and `search_query_chars` which are used to control the retrieval of the documents from the document store which will be used for the retrieval of the documents when the agent is queried.\n", "More information about the session can be found [here](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#session)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Agent created with ID: cd2bc3ee-fe18-4ddc-8f8a-d547dbf183d7\n", "Session created with ID: 0684842b-fa18-7840-8000-eba0bbbca948\n" ] } ], "source": [ "situation = \"\"\"\n", "You are an AI agent designed to assist users with their queries about our company and products.\n", "Your goal is to provide clear and detailed responses.\n", "\n", "**Guidelines**:\n", "1. Assume the user is unfamiliar with the company and products.\n", "2. Thoroughly read and comprehend the user's question.\n", "3. Use the provided context documents to find relevant information.\n", "4. Craft a detailed response based on the context and your understanding of the company and products.\n", "5. Include links to specific company pages for further information when applicable.\n", "\n", "**Response format**:\n", "- Use simple, clear language.\n", "- Include relevant website links.\n", "\n", "**Important**:\n", "- For questions related to the business, only use the information that are explicitly given in the documents above.\n", "- If the user asks about the business, and it's not given in the documents above, respond with an answer that states that you don't know.\n", "- Use the most recent and relevant data from context documents.\n", "- Be proactive in helping users find solutions.\n", "- Ask for clarification if the query is unclear.\n", "- Avoid using the following in your response: Based on the provided documents, based on the provided information, based on the documentation... etc.\n", "\n", "{%- if docs -%}\n", "**Relevant documents**:{{NEWLINE}}\n", " {%- for doc in docs -%}\n", " {{doc.title}}{{NEWLINE}}\n", " {%- if doc.content is string -%}\n", " {{doc.content}}{{NEWLINE}}\n", " {%- else -%}\n", " {%- for snippet in doc.content -%}\n", " {{snippet}}{{NEWLINE}}\n", " {%- endfor -%}\n", " {%- endif -%}\n", " {{\"---\"}}\n", " {%- endfor -%}\n", "\n", "{%- else -%}\n", "There are no documents available for this query.\n", "{%- endif -%}\n", "\"\"\"\n", "\n", "# Create a session for interaction\n", "session = client.sessions.create(\n", " situation=situation,\n", " agent=str(AGENT_UUID),\n", " recall_options={\n", " \"mode\": \"hybrid\",\n", " \"num_search_messages\": 1,\n", " # \"max_query_length\": 800,\n", " \"confidence\": 0.5,\n", " \"alpha\": 0.5,\n", " \"limit\": 10,\n", " # \"mmr_strength\": 0.5,\n", " },\n", ")\n", "print(f\"Agent created with ID: {agent.id}\")\n", "print(f\"Session created with ID: {session.id}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Chatting with the Agent\n", "\n", "The chat method is used to send messages to the agent and receive responses. The messages are sent as a list of dictionaries with the `role` and `content` keys." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def chat_with_agent(user_question):\n", " response = client.sessions.chat(\n", " session_id=session.id,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_question,\n", " }\n", " ],\n", " recall=True,\n", " )\n", "\n", " return response" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Building with Julep involves a few straightforward steps to create, deploy, and manage AI workflows. Here's a step-by-step guide:\n", "\n", "1. **Create an Agent**: Define agents that can interact with users within a session. Agents are the core of your AI workflows.\n", "\n", "2. **Add Tools**: Equip your agents with necessary tools such as web search, API calls, or custom integrations. This allows your agent to access and retrieve data efficiently.\n", "\n", "3. **Define Your Tasks**: Use YAML to define multi-step processes. You can incorporate decision trees, loops, and parallel execution to handle complex workflows.\n", "\n", "4. **Deploy**: Once you have configured your agent and defined its tasks, you can execute production-grade workflows with a single command.\n", "\n", "Here's a basic example of creating an agent with Julep:\n", "\n", "```python\n", "agent = julep.agents.create(\n", " name=\"Spiderman\",\n", " about=\"AI that can crawl the web and extract data\",\n", " model=\"gpt-4o-mini\",\n", " default_settings={\n", " \"temperature\": 0.75,\n", " \"max_tokens\": 10000,\n", " \"top_p\": 1.0,\n", " }\n", ")\n", "```\n", "\n", "For more detailed information and resources, you can explore the development documentation and SDKs available on Julep's platform:\n", "\n", "- [Julep Development Docs](https://docs.julep.ai/)\n", "- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\n", "- [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\n", "\n", "These resources offer comprehensive guidance on setting up and optimizing your AI workflows with Julep.\n" ] } ], "source": [ "# Example usage\n", "user_question = \"How do I build with julep?\"\n", "response = chat_with_agent(user_question)\n", "\n", "print(response.choices[0].message.content)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Julep AI has received several positive testimonials from customers, showcasing its transformative impact on various businesses. Here are some highlights:\n", "\n", "1. **Suryansh Tibarewal, CEO of EssentiallySports**: He mentioned that Julep sits at the intersection of what Zapier did for simplifying workflows and what Vercel did for simplifying shipping, expressing excitement about the endless possibilities with Julep's technology.\n", "\n", "2. **Vedant Maheshwari, CEO of Vidyo.ai**: Noted Julep as a \"GAME CHANGER,\" stating that Vidyo was able to ship six months' worth of product development in just six hours.\n", "\n", "3. **Madhavan, CEO of Reclaim Protocol**: Shared that their AI stack development time was significantly reduced from months to a couple of weeks, largely due to Julep handling most of the infrastructure orchestration, allowing them to focus on refining prompts.\n", "\n", "4. **Akshay Pruthi, CEO of Calm Sleep**: Described the experience as akin to reviewing designs on Figma, where he could brainstorm, test, prototype, and ship alongside his developer, regaining control as a non-developer.\n", "\n", "5. **Sachin Gaur, Cofounder of Ukumi AI**: Highlighted that working with Julep allowed them to focus on their core strengths while Julep managed the complexities of AI model integration, enabling them to accomplish more with fewer resources.\n", "\n", "These testimonials reflect Julep's ability to enhance development efficiency, simplify workflows, and empower businesses to focus on their key competencies.\n" ] } ], "source": [ "# Example usage\n", "user_question = \"What customer testimonials has julep received?\"\n", "response = chat_with_agent(user_question)\n", "\n", "print(response.choices[0].message.content)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check the matched documents" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matched docs:\n", "\n", "\n", "Doc 1:\n", "Title: Website Document\n", "Snippet content:\n", "[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", "* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * !\n", "The chunk contains a series of image links that are part of a section detailing integrations and capabilities of the Julep AI platform, showcasing the variety of supported platforms, tools, and APIs that can be connected for building scalable AI workflows.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 2:\n", "Title: Website Document\n", "Snippet content:\n", "-Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning. -Workflow-Based Model: complex processes as clear workflows rather than chains of prompts. -Full Observability: Save execution traces for debugging, monitoring, and continuous improvement.\n", "\n", " How is Julep different from agent frameworks?\n", "\n", " While LangChain is great for creating sequences of prompts and managing model interactions, Julep is built for creating persistent AI agents with advanced task capabilities. Think of LangChain as a tool for prompt chains, while Julep is a complete platform for building production-ready AI systems with complex workflows, state management, and long-running tasks.\n", "\n", " What types of workflows can I build with Julep?\n", "\n", " You can build multi-step AI workflows that include decision-making, loops, parallel processing, state management, retries, and integrations with external tools and APIs.\n", "\n", " How does Julep handle scaling and fault tolerance?\n", "\n", " Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\n", "\n", " Is Julep secure and enterprise-grade?\n", "\n", " Yes. Julep automatically scales to handle thousands to millions of executions and is built with robust fault tolerance, state management, and long-running execution capabilities to ensure reliable, production-grade workflows.\n", "\n", " Is Julep secure and enterprise-grade?\n", "\n", " Yes. Julep is built with enterprise needs in mind. We offer private deployments, robust security measures, and compliance features that ensure our platform is reliable and production-ready.\n", "\n", " What are Julep’s pricing models?\n", "\n", " We offer a generous free tier for experimentation. For paid plans, we have two main models: a usage-based pricing model (charging per workflow step executed) for our cloud platform, and dedicated enterprise/on-prem deployments for large organizations.\n", "\n", " ### Build faster using Julep API\n", "\n", "### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one.\n", "\n", " Keep me informed\n", "\n", "Dev Resources\n", "\n", " [Docs](https://docs.julep.ai/)\n", "\n", " [Get API Key](https://dashboard.julep.ai/)\n", "\n", " [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\n", "\n", " [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\n", "\n", "\n", "This chunk provides insights into Julep's AI workflow capabilities, differentiation from other agent frameworks, the scalability and fault tolerance of its platform, enterprise readiness, pricing models, and available development resources. It emphasizes Julep's strengths in creating advanced AI systems with robust state management, security features, and integration options.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 3:\n", "Title: Website Document\n", "Snippet content:\n", "[Get API Key](https://dashboard.julep.ai/)\n", "\n", " [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\n", "\n", " [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\n", "\n", " [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\n", "\n", "Usecases\n", "\n", "[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\n", "\n", " [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\n", "\n", " [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\n", "\n", "[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\n", "\n", " [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\n", "\n", "Company\n", "\n", " [About](https://julep.ai/about)\n", "\n", " [Contact Us](https://julep.ai/contact)\n", "\n", " [Book Demo](https://calendly.com/ishita-julep)\n", "\n", "Socials\n", "\n", " [Github](https://github.com/julep-ai/julep)\n", "\n", "[LinkedIn](https://www.linkedin.com/company/julep-ai)\n", "\n", " [Twitter](https://x.com/julep_ai)\n", "\n", " [Dev.to](https://dev.to/julep)\n", "\n", " [Hugging Face](https://huggingface.co/julep-ai)\n", "\n", " [Youtube](https://www.youtube.com/@julep_ai)\n", "\n", "! [Dev.to](https://dev.to/julep)\n", "\n", " [Hugging Face](https://huggingface.co/julep-ai)\n", "\n", " [Youtube](https://www.youtube.com/@julep_ai)\n", "\n", "! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\n", "\n", "Built by Engineers, for Engineers\n", "\n", "© Julep AI Inc. 2025\n", "\n", " [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\n", "This chunk provides resources and external links related to Julep AI, including API keys, SDKs, use cases, company contact and social media channels, situated at the end of the document as a resource and contact section.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 4:\n", "Title: Website Document\n", "Snippet content:\n", "The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 47](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 48](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \n", "* \"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \n", "* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\" ! [Image 49](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \n", "* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 50](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \n", "* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 51](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 52](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) \n", "Customer testimonials showcasing the efficiency and transformative impact of Julep AI on various businesses, highlighting rapid development, workflow simplification, and enhanced focus on core strengths.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 5:\n", "Title: Website Document\n", "Snippet content:\n", "Julep AI\n", "\n", "===============\n", "\n", "[! [Image 1](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)](https://julep.ai/)\n", "\n", " [New Launch Open-Source Responses API](https://docs.julep.ai/responses)\n", "\n", "Open Source\n", "\n", "[Github ★ 4.7K](https://github.com/julep-ai/julep)\n", "\n", " Deploy serverless\n", "\n", "AI workflows\n", "\n", "at scale\n", "=========================================\n", "\n", "in minutes, not weeks.\n", "\n", " Open-source API to build \n", "\n", "infinitely scalable, durable and long running AI pipelines\n", "\n", "using agents, tasks and tools\n", "\n", " [Deploy your first workflow](https://dashboard.julep.ai/)\n", "\n", " [Get a demo](https://calendly.com/ishita-julep)\n", "\n", "CUSTOMER STORIES\n", "\n", "Video Editing\n", "\n", "RAG Assitants\n", "\n", "Marketing\n", "\n", "User Profiling\n", "\n", "Verifications\n", "\n", "! [Image 2](https://framerusercontent.com/images/AEwYh1YdzpCtUuC0cS531YDWUls.png?scale-down-to=1024)\n", "\n", "Vidyo built personalised marketing intelligence for thousands of users using posting trends and current top trends.\n", "\n", " Iterate and deploy AI features super fast by bringing data from different sources in one place.\n", "\n", " Connect with any AI model,\n", "\n", "API or data source\n", "----------------------------------------------\n", "\n", "Seamlessly integrate with your existing stack and favorite AI models.\n", "\n", " LLM Platforms\n", "\n", "! [Image 3](https://framerusercontent.com/images/zxWxNF4SzDtcFL9mVmAvoDF4DE.png?lossless=1)\n", "\n", "! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\n", "\n", "! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\n", "\n", "! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\n", "\n", "! [Image 4](https://framerusercontent.com/images/ph7EG7oYkQ5Awu86hc05wRjvGw.png?lossless=1)\n", "\n", "! [Image 5](https://framerusercontent.com/images/IMHWKbfhc8dZo7MhnkplK3ItmmM.png?lossless=1)\n", "\n", "! [Image 6](https://framerusercontent.com/images/QYtW3pgIL2jETBN3cEpW6HPdlY.png?lossless=1)\n", "\n", "! [Image 7](https://framerusercontent.com/images/Xvl0YnwLmil6T3AGjRlfpAxIyJA.png?lossless=1)\n", "\n", "! [Image 8](https://framerusercontent.com/images/809fy9r9xuhXPhiHW1kvYHjuF4.png?lossless=1)\n", "\n", "! [Image 9](https://framerusercontent.com/images/uzXFlLrH3m7a8Iyg1pvew1gr4U.png?lossless=1)\n", "\n", "! [Image 10](https://framerusercontent.com/images/6SIzOp9m8tHqAZ6znO1LgqR5XDY.png?lossless=1)\n", "\n", "Languages\n", "\n", "Integrations\n", "\n", "* ! [Image 11](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 12](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 13](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 14](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* !\n", "The chunk introduces Julep AI, an open-source platform for deploying serverless AI workflows at scale. It highlights the open-source API's capabilities for building scalable AI pipelines using agents, tasks, and tools. The section also showcases integration with existing stacks and favorite AI models, mentions customer stories in various applications, and lists supported platforms and integrations.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 6:\n", "Title: Website Document\n", "Snippet content:\n", "we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 53](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \n", "* \"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\" ! [Image 54](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \n", "* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 55](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \n", "\n", "Build AI pipelines \n", "\n", "in minutes.\n", "\n", " Scale to millions.\n", " ----------------------------------------------------\n", "\n", "Rapid Prototyping\n", "\n", "\"From idea to demo in minutes\" using built-in RAG, in-house state management and external tools.\n", "\n", " Production Ready\n", "\n", "\"Go live instantly with managed infrastructure\" and features such as long-running tasks, automatic retries and error handling\n", "\n", "Modular Design\n", "\n", "\"Build features like Lego blocks\" by connecting to any external API, switch between LLMs and add custom tools\n", "\n", "Infinite Scale\n", "\n", "Handle millions of concurrent users with automatic scaling and load balancing\n", "\n", "Future Proof\n", "\n", "\"Add new AI models anytime\" \"Integrate with any new tool or API\"\n", "\n", "Complete Control\n", "\n", "\"Full visibility into AI operations\" \"Manage costs and performance easily\"\n", "\n", "Questions? \n", "\n", " Answers.\n", " ---------------------\n", "\n", "What is Julep?\n", "\n", " Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\n", "\n", " Answers.\n", " ---------------------\n", "\n", "What is Julep?\n", "\n", " Julep is a serverless AI workflow platform that lets data science teams build, iterate on, and deploy multi-step AI pipelines using a simple, declarative YAML-based configuration.\n", "\n", " Who is Julep for?\n", "\n", " Julep is designed for data scientists and ML engineers—especially in enterprise settings—who want to quickly move from AI prototypes to production without the need for heavy backend engineering.\n", "\n", " How does Julep's approach differ from typical AI development?\n", "\n", " While most platforms focus on prompt engineering and chaining LLM calls, Julep brings software engineering discipline to AI development. Through our 8-Factor Agent methodology, we treat AI components as proper system elements: - Prompts as Code: Track prompts separately from application code, enabling systematic improvements and proper versioning. - Clear Tool Interfaces: Define explicit interfaces for all tool interactions, making capabilities modular and maintainable. -Model Independence: Treat model providers as external, replaceable resources to avoid vendor lock-in and enable easy switching. -Context Management: Explicitly define how application and user state is managed and reduced. -Ground Truth Examples: Maintain clear examples of expected prompt results for validation and testing. -Structured Reasoning: Separate processes into deliberative (planned, multi-step) and impromptu (quick response) reasoning.\n", "The chunk is part of a promotional document for Julep AI, highlighting customer testimonials and specific advantages of using the Julep platform for AI development. It discusses how Julep reduces development time by managing infrastructure and provides features like rapid prototyping, production readiness, and scalability. The text also explains Julep's target audience, its unique software engineering approach to AI, and the 8-Factor Agent methodology that distinguishes it from typical AI development and frameworks.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 7:\n", "Title: Website Document\n", "Snippet content:\n", "[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "\n", " Any REST API\n", "\n", "### Build with Julep\n", "\n", "Create an agent\n", "\n", "Define agents that can talk to users inside of a session\n", "\n", "Add tools\n", "\n", "Equip agents with tools - web search, API calls, or custom integrations\n", "\n", "Define your tasks\n", "\n", " Define multi-step processes in YAML with decision trees, loops, and parallel execution\n", "\n", "Deploy\n", "\n", "Execute production-grade workflows with one command\n", "\n", "agent = julep.agents.create(\n", "\n", "name=\"Spiderman\",\n", "\n", "about=\"AI that can crawl the web and extract data\",\n", "\n", "model=\"gpt-4o-mini\",\n", "\n", "default_settings={\n", "\n", "\"temperature\": 0.75,\n", "\n", "\"max_tokens\": 10000,\n", "\n", "\"top_p\": 1.0,\n", "\n", "}\n", "\n", ")\n", "\n", " Real people, Real results\n", "-------------------------\n", "\n", "* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \n", "* \"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \n", "* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \n", "* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* \n", "The chunk is part of a larger document detailing Julep AI, a platform for building and deploying scalable AI workflows. It highlights Julep's capabilities in creating agents, defining tasks, and deploying workflows with YAML configurations. The chunk includes testimonials from CEOs praising Julep's impact on workflow simplification and rapid deployment, likening it to tools like Zapier and Vercel. The chunk emphasizes real-world applications and user experiences with the platform.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 8:\n", "Title: Website Document\n", "Snippet content:\n", "[Image 15](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 16](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 17](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 18](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 19](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 20](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", "* ! [Image 21](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 22](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 23](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 24](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 25](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 26](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! * ! [Image 27](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 28](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 29](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 30](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 31](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 32](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 33](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 34](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "* ! [Image 35](https://framerusercontent.com/images/Nfxk7UAuqT0uV8GtgL0VT3kfnOk.png?lossless=1) \n", "* ! [Image 36](https://framerusercontent.com/images/GFOoxnAxwzUg52KtlUHpKhw.png?lossless=1) \n", "* ! [Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * !\n", "This chunk contains a list of images related to Julep AI's language and integrations section, showcasing various images that likely represent different aspects or elements of Julep AI's capabilities and integrations with third-party tools or platforms.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 9:\n", "Title: Website Document\n", "Snippet content:\n", "[Get API Key](https://dashboard.julep.ai/)\n", "\n", " [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md)\n", "\n", " [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md)\n", "\n", " [Integration List](https://docs.julep.ai/docs/integrations/supported-integrations)\n", "\n", "Usecases\n", "\n", "[RAG Chatbot](https://github.com/julep-ai/julep/blob/dev/cookbooks/08-rag-chatbot.ipynb)\n", "\n", " [Web Crawler](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-website-crawler.ipynb)\n", "\n", " [Browser Use](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-browser-use.ipynb)\n", "\n", "[Video Processing](https://github.com/julep-ai/julep/blob/dev/cookbooks/05-video-processing-with-natural-language.ipynb)\n", "\n", " [Hook Generator for Reels](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-hook-generator-trending-reels.ipynb)\n", "\n", "Company\n", "\n", " [About](https://julep.ai/about)\n", "\n", " [Contact Us](https://julep.ai/contact)\n", "\n", " [Book Demo](https://calendly.com/ishita-julep)\n", "\n", "Socials\n", "\n", " [Github](https://github.com/julep-ai/julep)\n", "\n", "[LinkedIn](https://www.linkedin.com/company/julep-ai)\n", "\n", " [Twitter](https://x.com/julep_ai)\n", "\n", " [Dev.to](https://dev.to/julep)\n", "\n", " [Hugging Face](https://huggingface.co/julep-ai)\n", "\n", " [Youtube](https://www.youtube.com/@julep_ai)\n", "\n", "! [Dev.to](https://dev.to/julep)\n", "\n", " [Hugging Face](https://huggingface.co/julep-ai)\n", "\n", " [Youtube](https://www.youtube.com/@julep_ai)\n", "\n", "! [Image 56](https://framerusercontent.com/images/NXZCfT5Hy510XU9FuA0QAL310Y0.png)\n", "\n", "Built by Engineers, for Engineers\n", "\n", "© Julep AI Inc. 2025\n", "\n", " [Privacy Policy](https://www.termsfeed.com/live/fa52bdc5-62f3-45ad-a220-716e1ca6e2f9) | [Terms of Service](https://www.termsfeed.com/live/e49fca04-e9d2-4186-aaeb-01ed1a0d7850)\n", "This chunk provides resources and links for Julep AI's development and integration, detailing API access, SDKs, use cases, company information, and social media channels, which contextually fits as a concluding section in the document outlining Julep AI's serverless platform for building AI workflows.\n", "----------------------------------------------------------------------------------------------------\n", "Doc 10:\n", "Title: Website Document\n", "Snippet content:\n", "[Image 37](https://framerusercontent.com/images/rJrZQ6elomObJLKjXuDKNtcS18.png?lossless=1) \n", "* ! [Image 38](https://framerusercontent.com/images/hOHRHiTvMQHs5nyJhWAmCcK6eQ.png?lossless=1) \n", " * ! [Image 39](https://framerusercontent.com/images/iLE57X7WyaBHXDO0aySJzS6Q0.png?lossless=1) \n", "* ! [Image 40](https://framerusercontent.com/images/nMzDfyarSbUk5On2jln2FPr0KE.png?lossless=1) \n", "\n", " Any REST API\n", "\n", "### Build with Julep\n", "\n", "Create an agent\n", "\n", "Define agents that can talk to users inside of a session\n", "\n", "Add tools\n", "\n", "Equip agents with tools - web search, API calls, or custom integrations\n", "\n", "Define your tasks\n", "\n", " Define multi-step processes in YAML with decision trees, loops, and parallel execution\n", "\n", "Deploy\n", "\n", "Execute production-grade workflows with one command\n", "\n", "agent = julep.agents.create(\n", "\n", "name=\"Spiderman\",\n", "\n", "about=\"AI that can crawl the web and extract data\",\n", "\n", "model=\"gpt-4o-mini\",\n", "\n", "default_settings={\n", "\n", "\"temperature\": 0.75,\n", "\n", "\"max_tokens\": 10000,\n", "\n", "\"top_p\": 1.0,\n", "\n", "}\n", "\n", ")\n", "\n", " Real people, Real results\n", "-------------------------\n", "\n", "* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 41](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* For Vidyo, we shipped 6 months worth of product development in 6 hours. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. GAME CHANGER!! ! [Image 42](https://framerusercontent.com/images/fTbs8b76X4lBS7poYBc156GE.jpeg) Vedant Maheshwari CEO, Vidyo.ai \n", "* We tried building our ai stack where we needed simple automated computer use. we spent months trying to get it right, but our development time got cut to a couple weeks because most of the infra orchestration was handled by julep. all that we had to do was refine our prompts ! [Image 43](https://framerusercontent.com/images/tckstVYqNnY8GYUVRGJjKsuchnw.jpeg) Madhavan CEO, Reclaim Protocol \n", "* \"Same experience as reviewing designs on Figma with my designer. Sat with my developer once, and we kept brainstorming, testing, prototyping and shipping at once. I got control back in my hands as a non-developer.\" ! [Image 44](https://framerusercontent.com/images/MyRMVJp7hbXylNnKMcHasHbKyBY.jpeg) Akshay Pruthi CEO, Calm Sleep \n", "* Working with Julep accelerated Ukumi, by enabling us to focus on our core strengths and letting Julep navigate the complex web of calls to ai models we could do more with less. ! [Image 45](https://framerusercontent.com/images/GV8FSKhFsaQ5swssj4e5LYQT7gM.jpg) Sachin Gaur Cofounder, Ukumi AI \n", "* Julep to me sits in the intersection of what Zapier did for simplifying workflows, and what Vercel did for simplifying shipping. The new possibilities are endless. I am excited abut what all can be done with this tech at ES. ! [Image 46](https://framerusercontent.com/images/DNH1tPX4oDHbf9rqMEp9jq1nzs8.jpeg) Suryansh Tibarewal CEO, EssentiallySports \n", "* \n", "This chunk details the Julep AI platform's capabilities, emphasizing the creation and deployment of AI workflows using agents, tasks, and tools. It illustrates how to define and deploy multi-step processes, featuring a specific example of creating an AI agent. Additionally, it provides testimonials from various CEOs highlighting the platform's transformative impact on their product development and workflow efficiency.\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "print(\"Matched docs:\\n\\n\")\n", "for index, doc in enumerate(response.docs):\n", " print(f\"Doc {index + 1}:\")\n", " print(f\"Title: {doc.title}\")\n", " print(f\"Snippet content:\\n{doc.snippet.content}\")\n", " print(\"-\" * 100)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/09-companion-agent.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Install the Julep SDK\n", "!pip install --upgrade julep --quiet" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import uuid\n", "from julep import Client\n", "import os\n", "import yaml\n", "\n", "api_key = os.getenv(\"JULEP_API_KEY\")\n", "\n", "# NOTE: these UUIDs are used in order not to use the `create_or_update` methods instead of\n", "# the `create` methods for the sake of not creating new resources every time a cell is run.\n", "AGENT_UUID = str(uuid.uuid4())\n", "TASK_UUID_1 = str(uuid.uuid4())\n", "TASK_UUID_2 = str(uuid.uuid4())\n", "TASK_UUID_3 = str(uuid.uuid4())\n", "USER_ID = str(uuid.uuid4())\n", "SESSION_ID = str(uuid.uuid4())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### creating julep client with the api key\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Create a Julep client\n", "client = Client(api_key=api_key, environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Defining the agent\n", "name = \"Rosa\"\n", "about = \"A girl who's interested in chatting with people. Likes going out and partying in night clubs.\"\n", "instructions = \"Keep your responses short and concise.\"\n", "\n", "# Create the agent\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=name,\n", " about=about,\n", " instructions=instructions,\n", " model=\"gpt-4o\",\n", " default_settings={\n", " \"temperature\": 0.5,\n", " \"max_tokens\": 1000,\n", " \"top_p\": 0.9,\n", " \"frequency_penalty\": 0.0,\n", " \"presence_penalty\": 0.0,\n", " }\n", ")\n", "\n", "agent = client.agents.get(agent_id=AGENT_UUID)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"user\"\n", "\n", "User is the object to which used to store the user's information.\n", "\n", "To learn more about the user, please refer to the User section in [Julep Concepts](https://docs.julep.ai/docs/concepts/users)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "USER_PPID = \"65dhr171124554182682517a4ac3d8\"\n", "\n", "user = client.users.create_or_update(\n", " name=\"Hamada\",\n", " about=\"Julep AI developer who lives in New York. Loves to code and build things. Loves to read and write. Loves to travel and explore new places. Loves to learn and grow.\",\n", " user_id=USER_ID,\n", " metadata={\n", " \"ppid\": USER_PPID,\n", " \"age\": 27,\n", " \"gender\": \"male\",\n", " \"location\": \"New York\",\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"session\"\n", "\n", "Session is the object to which used to store the session's information.\n", "\n", "To learn more about the session, please refer to the Session section in [Julep Concepts](https://docs.julep.ai/docs/concepts/sessions)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ResourceUpdated(id='84f80110-b512-42ba-bf12-9f9e661ca801', updated_at=datetime.datetime(2024, 12, 18, 12, 21, 55, tzinfo=datetime.timezone.utc), jobs=[])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "client.sessions.create_or_update(\n", " session_id=SESSION_ID,\n", " agent=AGENT_UUID,\n", " user=USER_ID,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1: Generate a story line for a Companion-User conversation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Defining the task to generate a story line for the agent\n", "task_def_1 = yaml.safe_load('''\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Generate a Story line for the agent\n", "description: Generate a story line for the agent\n", "\n", "########################################################\n", "################### INPUT SCHEMA #######################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " agent_id:\n", " type: string\n", " description: The id of the agent\n", " user_ppid:\n", " type: string\n", " description: The ppid of the user\n", "\n", "########################################################\n", "################### TOOLS ##############################\n", "########################################################\n", "tools:\n", "\n", "# Define the tools that the task will use in this workflow\n", "- name: get_agent\n", " description: Get a julep agent by id\n", " type: system\n", " system:\n", " resource: agent\n", " operation: get\n", "\n", "# This tool will be used with a metadata_filter to get the user based on \n", "# the \"ppid\" that is stored in the metadata, rather than the id that julep uses.\n", "- name: list_users\n", " description: List julep users\n", " type: system\n", " system:\n", " resource: user\n", " operation: list\n", "\n", "- name: list_agent_docs\n", " description: List the agent docs\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: list\n", "\n", "- name: create_agent_doc\n", " description: Create an agent doc\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: create\n", "\n", "########################################################\n", "################### MAIN WORKFLOW ######################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Get the agent from the agent id\n", "- tool: get_agent\n", " arguments:\n", " agent_id: $ steps[0].input.agent_id\n", "\n", "# Step 1: Get the user from the user ppid\n", "- tool: list_users\n", " arguments:\n", " limit: $ 1\n", " sort_by: created_at\n", " direction: desc\n", " metadata_filter:\n", " ppid: $ steps[0].input.user_ppid\n", "\n", "# Step 2: Evaluate the output of the list_users tool\n", "- evaluate:\n", " agent: $ steps[0].output\n", " user: $ _[0]\n", "\n", "# Step 3: Prompt the LLM to generate the story line\n", "- prompt:\n", " - role: system\n", " content: |-\n", " You are an expert at creating detailed storylines for conversations that take place between a user and its long-term companion.\n", " The user will provide you with the following:\n", " - Companion's name\n", " - Companion's about\n", " - Companion's instructions\n", " - User's name\n", " - User's about\n", "\n", " # Steps to Create the companion's storyline\n", "\n", " 1. **Understand the Companion's Context**: Review the provided companion's name, about, and instructions to understand the companion's role, characteristics, objectives, and any specific requirements.\n", "\n", " 2. **Outline the Plot**: Create a clear outline of the storyline, ensuring it aligns with the companion's characteristics and instructions.\n", "\n", " 3. **Develop the Setting**: Describe the environment where the story takes place, incorporating elements from the companion's description.\n", "\n", " 4. **Character Development**: Add depth to the companion and other key characters, focusing on their motivations, persona, and interactions.\n", "\n", " 5. **Establish a Conflict**: Introduce a challenge or obstacle related to the companion's instructions that drives the plot forward.\n", "\n", " 6. **Resolution**: Craft a resolution for the conflict, showing how the companion uses their skills or experiences personal growth to overcome it.\n", "\n", " 7. **Conclude the Story**: Wrap up the story with a closing that resolves any loose ends and reflects on how the companion's journey fulfills their mission or purpose.\n", "\n", " # Output Format\n", "\n", " - The storyline should be written in narrative form. \n", " - Break down the story into clear sections such as introduction, rising action, climax, falling action, and conclusion.\n", " - Use engaging and descriptive language to vividly depict scenes and emotions.\n", "\n", " - role: user\n", " content: |-\n", " $ f\"\"\"\n", " Companion's name: {steps[2].output.agent['name']}\n", " Companion's about: {steps[2].output.agent['about']}\n", " Companion's instructions: {steps[2].output.agent['instructions']}\n", " User's name: {steps[2].output.user['name']}\n", " User's about: {steps[2].output.user['about']}\n", " \"\"\"\n", " unwrap: true\n", "\n", "# Step 4: Create the agent doc\n", "- tool: create_agent_doc\n", " arguments:\n", " agent_id: $ steps[0].input.agent_id\n", " data:\n", " title: Companion Storyline\n", " content: $ _\n", "''')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# creating the task object\n", "task_agent_storyline = client.tasks.create_or_update(\n", " task_id=TASK_UUID_1,\n", " agent_id=AGENT_UUID,\n", " **task_def_1,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# creating the execution\n", "execution_1 = client.executions.create(\n", " task_id=TASK_UUID_1,\n", " input={\n", " \"agent_id\": AGENT_UUID,\n", " \"user_ppid\": USER_PPID,\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execution Status: succeeded\n", "Execution Current Output: {'created_at': '2024-12-18T12:22:12.913136Z', 'id': '4def1689-40b9-48ee-9da2-c581e63b1b7f', 'jobs': ['008494ff-bda0-4271-a0fa-1cbee5f37ffe']}\n" ] } ], "source": [ "# Get execution details\n", "execution = client.executions.get(execution_1.id)\n", "# Print the output\n", "print(\"Execution Status: \", execution.status)\n", "print(\"Execution Current Output: \", execution.output)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step: 0 , Type: init\n", "output (truncated): {\n", " \"agent_id\": \"b742413b-5951-468f-8598-a5dd9cc64dca\",\n", " \"user_ppid\": \"65dhr171124554182682517a4ac3\n", "----------------------------------------------------------------------------------------------------\n", "Step: 1 , Type: step\n", "output (truncated): {\n", " \"about\": \"A girl who's interested in chatting with people. Likes going out and partying in night\n", "----------------------------------------------------------------------------------------------------\n", "Step: 2 , Type: step\n", "output (truncated): [\n", " {\n", " \"about\": \"Julep AI developer who lives in New York. Loves to code and build things. Loves \n", "----------------------------------------------------------------------------------------------------\n", "Step: 3 , Type: step\n", "output (truncated): {\n", " \"agent\": {\n", " \"about\": \"A girl who's interested in chatting with people. Likes going out and pa\n", "----------------------------------------------------------------------------------------------------\n", "Step: 4 , Type: step\n", "output (truncated): \"**Title: The Night Out**\\n\\n**Introduction**\\n\\nIn the bustling heart of New York City, where neon \n", "----------------------------------------------------------------------------------------------------\n", "Step: 5 , Type: finish\n", "output (truncated): {\n", " \"created_at\": \"2024-12-18T12:22:12.913136Z\",\n", " \"id\": \"4def1689-40b9-48ee-9da2-c581e63b1b7f\",\n", " \"\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "import json\n", "\n", "execution_transitions = client.executions.transitions.list(\n", " execution_id=execution_1.id).items\n", "\n", "for index, transition in enumerate(reversed(execution_transitions)):\n", " print(\"Step:\", index, \", Type:\", transition.type)\n", " print(\"output (truncated): \", json.dumps(transition.output, indent=2)[:100])\n", " print(\"-\" * 100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Print the generated story line " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "**Title: The Night Out**\n", "\n", "**Introduction**\n", "\n", "In the bustling heart of New York City, where neon lights flicker and the city never sleeps, Rosa, a vivacious and spirited young woman, thrived in the vibrant nightlife. She had a knack for engaging in conversations, her words as quick and lively as the beats that pulsed through the clubs she frequented. Her evenings were a tapestry of short, yet meaningful interactions, each one a thread in the fabric of her social life.\n", "\n", "Meanwhile, Hamada, a dedicated Julep AI developer, found solace in the rhythm of code and the pages of books. His life was a balance of logic and creativity, and while his days were filled with algorithms and innovation, his nights were often spent exploring the cultural tapestry of New York, seeking inspiration and growth.\n", "\n", "**Rising Action**\n", "\n", "One evening, Rosa found herself at a rooftop bar, the city skyline a glittering backdrop to the night’s festivities. The air was electric with laughter and music, and Rosa, ever the social butterfly, flitted from conversation to conversation. Her charm was magnetic, drawing people in with her concise and engaging dialogue.\n", "\n", "Hamada, having spent the day immersed in a particularly challenging coding project, decided to unwind by exploring a new venue. The rooftop bar was a perfect choice, offering a blend of lively atmosphere and spectacular views. As he navigated through the crowd, he found himself intrigued by the vibrant energy of the place.\n", "\n", "**Climax**\n", "\n", "Their paths crossed when Hamada, seeking a moment of respite, leaned against the bar next to Rosa. She noticed his contemplative gaze and initiated a conversation, her words succinct yet inviting. \n", "\n", "\"Hey, enjoying the view?\" she asked, her eyes twinkling with the city lights.\n", "\n", "Hamada, appreciative of her direct approach, replied, \"Absolutely. It's a great way to unwind after a day of coding.\"\n", "\n", "Their conversation flowed effortlessly, despite Rosa's tendency to keep her responses brief. She was intrigued by Hamada’s world of AI development, while he was fascinated by her tales of nightlife adventures. They exchanged stories, each learning something new from the other's experiences.\n", "\n", "**Falling Action**\n", "\n", "As the night wore on, Rosa and Hamada found themselves sharing more than just words. They discovered a shared love for exploration—Rosa in the social scene, and Hamada in the intellectual realm. Despite their different worlds, they connected over a mutual desire to learn and grow.\n", "\n", "Rosa, typically one to keep her chats light, found herself opening up about her dreams and aspirations. Hamada, in turn, shared his vision for the future of AI, and how he hoped to make a difference through his work.\n", "\n", "**Conclusion**\n", "\n", "As the night drew to a close, Rosa and Hamada stood together, gazing out at the sprawling cityscape. Their encounter was a testament to the unexpected connections that could be forged in the vibrant tapestry of New York City.\n", "\n", "\"Let's do this again sometime,\" Rosa suggested, her words as concise as ever, yet carrying the weight of newfound friendship.\n", "\n", "Hamada nodded, a smile playing on his lips. \"Definitely. There's always more to explore.\"\n", "\n", "In the city that never sleeps, Rosa and Hamada had found a kindred spirit in each other, their brief yet meaningful interaction a reminder of the beauty in life's unexpected moments.\n" ] } ], "source": [ "# The story line is the output of the second (chronologically, i.e. the\n", "# second transition in the transitions list).\n", "import time\n", "while execution.status != \"succeeded\":\n", " execution = client.executions.get(execution_1.id)\n", " time.sleep(1)\n", "\n", "story_line = execution_transitions[1].output\n", "print(story_line)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Task 2: Update session situation based on chat history" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Buildup: Add an initial history to the session" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User: Hey Rosa, How are you doing?\n", "Agent: Hey Hamada! I'm doing great, thanks. How about you?\n" ] } ], "source": [ "user_message = \"Hey Rosa, How are you doing?\"\n", "\n", "print(\"User:\", user_message)\n", "\n", "response = client.sessions.chat(\n", " session_id=SESSION_ID,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_message,\n", " }\n", " ],\n", ")\n", "\n", "print(\"Agent:\", response.choices[0].message.content)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User: I'm fine. I'm planning to go out tonight. Since it's Friday, I'm thinking about going to a club. Would you like to join me?\n", "Agent: That sounds like a blast! I'd love to join you. Which club are you thinking of going to?\n" ] } ], "source": [ "user_message = \"I'm fine. I'm planning to go out tonight. Since it's Friday, I'm thinking about going to a club. Would you like to join me?\"\n", "\n", "print(\"User:\", user_message)\n", "\n", "response = client.sessions.chat(\n", " session_id=SESSION_ID,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_message,\n", " }\n", " ],\n", ")\n", "\n", "print(\"Agent:\", response.choices[0].message.content)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# Defining the task to update the session situation based on the history of the session and the user input\n", "task_def_2 = yaml.safe_load('''\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: Update the session situation based on the history of the session and the user input\n", "description: Update the session situation based on the history of the session and the user input\n", "\n", "########################################################\n", "################### INPUT SCHEMA #######################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " session_id:\n", " type: string\n", " description: The id of the session\n", " user_input:\n", " type: string\n", " description: The input of the user\n", " \n", "########################################################\n", "################### TOOLS ##############################\n", "########################################################\n", "\n", "# Define the tools that the task will use in this workflow \n", "tools :\n", "- name: get_julep_session\n", " description: Get a julep session by id\n", " type: system\n", " system:\n", " resource: session\n", " operation: get\n", "\n", "- name: update_julep_session\n", " description: Update the session situation\n", " type: system\n", " system:\n", " resource: session\n", " operation: update\n", "\n", "- name: history_julep_session\n", " description: List the session history\n", " type: system\n", " system:\n", " resource: session\n", " operation: history\n", "\n", " \n", "########################################################\n", "################### MAIN WORKFLOW ######################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Get the session from the session id\n", "- tool: get_julep_session\n", " arguments:\n", " session_id: $ steps[0].input.session_id\n", " \n", "# Step 1: Evaluate the old situation of the session\n", "- evaluate:\n", " old_situation: $ _['situation']\n", "\n", "# Step 2: Get the history of the session\n", "- tool: history_julep_session\n", " arguments:\n", " session_id: $ steps[0].input.session_id\n", "\n", "# Step 3: Evaluate the history of the session\n", "- evaluate:\n", " history: $ list(entry.content[0].text for entry in _.entries)\n", "\n", "# Step 4: Based on the history of the sessios and user input, generate a prompt\n", "- prompt:\n", " - role: system\n", " content: |-\n", " You are an AI agent tasked with generating system messages for another agent responsible for human interaction.\n", " Your role is to analyze the session history and user inputs to craft a SYSTEM message that guides the conversational agent in engaging effectively with the user. \n", " Ensure the message supports a welcoming presence, meaningful dialogue, and empathetic responses that align with the user's emotional state.\n", "\n", " - role: user\n", " content: |-\n", " $ f\"\"\"\n", " The session history is:\n", " {steps[3].output.history}\n", " {'The user has just sent the following message:' + steps[0].input.user_input if steps[0].input.user_input else ''}\n", "\n", "\n", " Generate a SYSTEM message based on the session history and user input, if any. \n", " The output should be a well structured and detailed SYSTEM message and nothing else.\n", "\n", " Guidelines for the SYSTEM message:\n", " 1. **Empathy and Understanding**: Respond with empathy, acknowledging the user's feelings and offering comforting words where needed.\n", " 2. **Positive Communication**: Use positive language and a friendly tone to create a welcoming atmosphere.\n", " 3. **Engage with Interests**: Show interest in the user's hobbies, stories, and preferences by asking questions and initiating discussions.\n", " 4. **Adaptability**: Adjust tone and response style based on the user's mood and conversation style.\n", " 5. **Boundaries**: Respect the user's privacy and avoid delving into sensitive topics unless invited.\n", " 6. **Suggestions for Activities**: Suggest activities or discussion topics that could positively impact the user's mood or interests.\n", "\n", " Considerations:\n", " 1. Prioritize creating a safe and supportive environment for the user.\n", " 2. Be mindful of cultural differences and practice inclusivity.\"\"\"\n", " unwrap: true\n", "\n", "# Step 5: Update the session situation\n", "- tool: update_julep_session\n", " arguments:\n", " session_id: $ steps[0].input.session_id\n", " # The 1247 slicing of the old situation is hardcoded to keep the default situation too\n", " situation: $ steps[1].output.old_situation[:1247] + NEWLINE + NEWLINE + _\n", " # render_templates: \"True\"\n", "''')\n", "\n", "# creating the task object\n", "task_update_session_situation = client.tasks.create_or_update(\n", " task_id=TASK_UUID_2,\n", " agent_id=AGENT_UUID,\n", " **task_def_2,\n", ")\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "execution_2 = client.executions.create(\n", " task_id=TASK_UUID_2,\n", " input={\n", " \"session_id\": str(SESSION_ID),\n", " \"user_input\": \"I'm not really sure. What kind of clubs are you into?\",\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step: 0 , Type: init\n", "output (truncated): {\n", " \"session_id\": \"84f80110-b512-42ba-bf12-9f9e661ca801\",\n", " \"user_input\": \"I'm not really sure. What\n", "----------------------------------------------------------------------------------------------------\n", "Step: 1 , Type: step\n", "output (truncated): {\n", " \"agent\": \"b742413b-5951-468f-8598-a5dd9cc64dca\",\n", " \"auto_run_tools\": false,\n", " \"context_overflow\"\n", "----------------------------------------------------------------------------------------------------\n", "Step: 2 , Type: step\n", "output (truncated): {\n", " \"old_situation\": \"{%- if agent.name -%}\\nYou are {{agent.name}}.{{\\\" \\\"}}\\n{%- endif -%}\\n\\n{%- \n", "----------------------------------------------------------------------------------------------------\n", "Step: 3 , Type: step\n", "output (truncated): {\n", " \"created_at\": \"2024-12-18T12:26:39.745720Z\",\n", " \"entries\": [\n", " {\n", " \"content\": [\n", " {\n", " \n", "----------------------------------------------------------------------------------------------------\n", "Step: 4 , Type: step\n", "output (truncated): {\n", " \"history\": [\n", " \"Hey Rosa, How are you doing?\",\n", " \"Hey Hamada! I'm doing great, thanks. How a\n", "----------------------------------------------------------------------------------------------------\n", "Step: 5 , Type: step\n", "output (truncated): \"SYSTEM MESSAGE:\\n\\nEngage with Hamada in a friendly and enthusiastic manner, acknowledging their ex\n", "----------------------------------------------------------------------------------------------------\n", "Step: 6 , Type: finish\n", "output (truncated): {\n", " \"id\": \"84f80110-b512-42ba-bf12-9f9e661ca801\",\n", " \"jobs\": [],\n", " \"updated_at\": \"2024-12-18T12:26:48\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "execution_transitions = client.executions.transitions.list(\n", " execution_id=execution_2.id).items\n", "\n", "for index, transition in enumerate(reversed(execution_transitions)):\n", " print(\"Step:\", index, \", Type:\", transition.type)\n", " print(\"output (truncated): \", json.dumps(transition.output, indent=2)[:100])\n", " print(\"-\" * 100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Print the new session situation" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New situation:\n", "\n", "{%- if agent.name -%}\n", "You are {{agent.name}}.{{\" \"}}\n", "{%- endif -%}\n", "\n", "{%- if agent.about -%}\n", "About you: {{agent.about}}.{{\" \"}}\n", "{%- endif -%}\n", "\n", "{%- if user -%}\n", "You are talking to a user\n", " {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n", " {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n", " {%- endif -%}\n", "{%- endif -%}\n", "\n", "{{NEWLINE+NEWLINE}}\n", "\n", "{%- if agent.instructions -%}\n", "Instructions:{{NEWLINE}}\n", " {%- if agent.instructions is string -%}\n", " {{agent.instructions}}{{NEWLINE}}\n", " {%- else -%}\n", " {%- for instruction in agent.instructions -%}\n", " - {{instruction}}{{NEWLINE}}\n", " {%- endfor -%}\n", " {%- endif -%}\n", " {{NEWLINE}}\n", "{%- endif -%}\n", "\n", "{%- if tools -%}\n", "Tools:{{NEWLINE}}\n", " {%- for tool in tools -%}\n", " - {{tool.name + NEWLINE}}\n", " {%- if tool.description -%}: {{tool.description + NEWLINE}}{%- endif -%}\n", " {%- endfor -%}\n", "{{NEWLINE+NEWLINE}}\n", "{%- endif -%}\n", "\n", "{%- if docs -%}\n", "Relevant documents:{{NEWLINE}}\n", " {%- for doc in docs -%}\n", " {{doc.title}}{{NEWLINE}}\n", " {%- if doc.content is string -%}\n", " {{doc.content}}{{NEWLINE}}\n", " {%- else -%}\n", " {%- for snippet in doc.content -%}\n", " {{snippet}}{{NEWLINE}}\n", " {%- endfor -%}\n", " {%- endif -%}\n", " {{\"---\"}}\n", " {%- endfor -%}\n", "{%- endif -%}\n", "\n", "SYSTEM MESSAGE:\n", "\n", "Engage with Hamada in a friendly and enthusiastic manner, acknowledging their excitement about the night out. Express interest in their plans and preferences by asking about the types of clubs they enjoy. You might say something like, \"That sounds like a fun night ahead! Do you have a preference for a certain type of club, like one with live music or a specific genre of DJ?\" This will help to understand their interests better and foster a more engaging conversation.\n", "\n", "Maintain a positive and open tone, offering suggestions if they seem unsure, such as recommending popular local spots or asking if they’re in the mood for something new and different. Encourage Hamada to share more about their favorite past club experiences or what they enjoy most about going out, which can deepen the connection and keep the conversation lively.\n", "\n", "Remember to be adaptable and responsive to Hamada's mood, ensuring they feel supported and understood. Keep the conversation light and enjoyable, focusing on building anticipation for the night out.\n" ] } ], "source": [ "new_situation = client.sessions.get(session_id=SESSION_ID).situation\n", "\n", "print(\"New situation:\\n\")\n", "print(new_situation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Continue the conversation" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User: I'm not really sure. What kind of clubs are you into?\n", "Agent: I love clubs with live music or a great DJ spinning some dance tracks. How about you? Any preferences?\n" ] } ], "source": [ "user_message = \"I'm not really sure. What kind of clubs are you into?\"\n", "\n", "print(\"User:\", user_message)\n", "\n", "response = client.sessions.chat(\n", " session_id=SESSION_ID,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_message,\n", " }\n", " ]\n", ")\n", "\n", "print(\"Agent:\", response.choices[0].message.content)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 3: Update the user persona (and about section) based on chat history" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make changes in the conversation to trigger the user persona update" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User: No, I don't like loud music. I want a club with a chill vibe, maybe some jazz or blues.\n", "Agent: That sounds perfect for a relaxed night out! Have you checked out any jazz clubs in the area? They can have such a cool atmosphere.\n" ] } ], "source": [ "user_message = \"No, I don't like loud music. I want a club with a chill vibe, maybe some jazz or blues.\"\n", "\n", "print(\"User:\", user_message)\n", "\n", "response = client.sessions.chat(\n", " session_id=SESSION_ID,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_message,\n", " }\n", " ]\n", ")\n", "\n", "print(\"Agent:\", response.choices[0].message.content)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User: Hey Rosa, it's been a while since we last talked. Sorry, but I've been busy moving to San Francisco this week.\n", "Agent: Hey Hamada! No worries at all. Moving is a big deal! How's San Francisco treating you so far?\n" ] } ], "source": [ "user_message = \"Hey Rosa, it's been a while since we last talked. Sorry, but I've been busy moving to San Francisco this week.\"\n", "\n", "print(\"User:\", user_message)\n", "\n", "response = client.sessions.chat(\n", " session_id=SESSION_ID,\n", " messages=[\n", " {\n", " \"role\": \"user\",\n", " \"content\": user_message,\n", " }\n", " ]\n", ")\n", "\n", "print(\"Agent:\", response.choices[0].message.content)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# The profiler workflow to update the user persona\n", "task_def_3 = yaml.safe_load(f'''\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json\n", "name: generate_update_persona\n", "description: Update the user persona based on the session chat history and the user data\n", "\n", "########################################################\n", "################### INPUT SCHEMA #######################\n", "########################################################\n", "\n", "input_schema:\n", " type: object\n", " properties:\n", " user_ppid:\n", " type: string\n", " session_id:\n", " type: string\n", " required:\n", " - user_ppid\n", " - session_id\n", "\n", "########################################################\n", "################### TOOLS ##############################\n", "########################################################\n", "\n", "# Define the tools that are going to be used in the workflow\n", "tools:\n", "- name: get_user_from_ppid\n", " type: system\n", " description: Get a user from the user ppid\n", " system:\n", " resource: user\n", " operation: list\n", " \n", "- name: list_user_docs\n", " type: system\n", " description: List the user docs\n", " system:\n", " resource: user\n", " subresource: doc\n", " operation: list\n", "\n", "- name: create_user_doc\n", " description: Create a user doc\n", " type: system\n", " system:\n", " resource: user\n", " subresource: doc\n", " operation: create\n", "\n", "- name: history_julep_session\n", " description: List the session history\n", " type: system\n", " system:\n", " resource: session\n", " operation: history\n", "\n", "- name: update_user\n", " description: Update the user information\n", " type: system\n", " system:\n", " resource: user\n", " operation: update\n", "\n", " \n", "########################################################\n", "################### MAIN WORKFLOW ######################\n", "########################################################\n", "\n", "main:\n", "# Step 0: Get the session history\n", "- tool: history_julep_session\n", " arguments:\n", " session_id: $ steps[0].input.session_id\n", "\n", "# Step 1: Evaluate the session history\n", "- evaluate:\n", " session_chat_history: $ list(entry.content[0].text for entry in _.entries)\n", "\n", "# Step 2: Get the user from the ppid using metadata_filter (returns a list)\n", "- tool: get_user_from_ppid\n", " arguments:\n", " limit: \"1\"\n", " sort_by: created_at\n", " direction: desc\n", " metadata_filter:\n", " ppid: $ steps[0].input.user_ppid\n", "\n", "# Step 3: Unwrap the list to get the user\n", "- evaluate:\n", " user: _[0]\n", "\n", "# Step 4: Get the user persona document using metadata_filter (returns a list)\n", "- tool: list_user_docs\n", " arguments:\n", " user_id: $ _['user']['id']\n", " limit: \"1\"\n", " sort_by: created_at\n", " direction: desc\n", "\n", "# Step 5: Get the doc if it exists\n", "- evaluate:\n", " doc: $ _[0] if len(_) > 0 else {{}}\n", "\n", "# Step 6: Get the user persona from the doc if the doc exists\n", "- evaluate:\n", " user_persona: $ _['doc'].get('content', \"\")\n", "\n", "# Step 7: Create the user persona using the prompt step\n", "- prompt:\n", " - role: user\n", " content: |\n", " $ f\"\"\"\n", " You are an expert at updating detailed user personas for a user.\n", " Your task is to update the existing user persona based on the provided user data, session chat history, and past user persona.\n", " Focus on identifying and highlighting the changes in the user's preferences and experiences.\n", "\n", " #Input#\n", " Following is the user data:\n", " User details:\n", " {{steps[3].output.user['metadata']}}\n", " \n", " Session chat history:\n", " {{steps[1].output.session_chat_history}}\n", " \n", " User past persona:\n", " {{_.user_persona}}\n", "\n", " #Task#\n", " Carefully review the user data and update the existing user persona by focusing on the following sections:\n", "\n", " 1. Demographics\n", " 2. Psychographics\n", " 3. Content Preferences\n", "\n", " For each section, follow these processes:\n", "\n", " 1. Demographics:\n", " - Update the user's age, gender, and location if there are any changes.\n", " - Make reasonable assumptions for any missing information based on other details provided.\n", "\n", " 2. Psychographics:\n", " - Update the description of the user's personality traits if there are any changes.\n", " - Modify the interest graph to reflect any new primary and secondary interests based on the session chat history and other relevant areas.\n", "\n", " 3. Content Preferences:\n", " - Update the list of the user's thematic interests if there are any changes.\n", " - Specify any new content categories that would appeal to this user.\n", " - Identify any new entity preferences (e.g., specific topics, authors, or genres).\n", " - Update the user's engagement level with various content types if there are any changes.\n", " - Highlight any new correlations between the user's interests in various topics and entities.\n", " - Update the user's content needs and expectations if there are any changes.\n", "\n", " #Instructions#\n", "\n", " When updating the user persona:\n", " - Be specific and concise.\n", " - Make logical inferences based on the given information.\n", " - Ensure consistency throughout the persona.\n", " - Use bullet points or short paragraphs for easy readability.\n", "\n", " Format your response as follows:\n", " - Use headers for each main section (Demographics, Psychographics, Content Preferences).\n", " - Use subheaders for subsections within Content Preferences.\n", " - Include a brief introduction and conclusion.\n", "\n", " Present the updated user persona within tags, highlighting the changes. Begin with a concise introduction, then proceed with the sections as outlined above.\n", " Your work will be evaluated for comprehensive and detailed updates to the persona.\n", " \"\"\"\n", " unwrap: true\n", "\n", "# Step 8: Create a new persona document\n", "- tool: create_user_doc\n", " arguments:\n", " user_id: $ steps[3].output.user['id']\n", " data:\n", " title: User Persona\n", " content: $ _\n", "\n", "# Step 9: Update the about section of the user with the new persona\n", "- tool: update_user\n", " arguments:\n", " user_id: $ steps[3].output.user['id']\n", " name: $ steps[3].output.user['name']\n", " about: $ steps[7]\n", "''')\n", "\n", "# creating the task object\n", "task_user_persona = client.tasks.create_or_update(\n", " task_id=TASK_UUID_3,\n", " agent_id=AGENT_UUID,\n", " **task_def_3,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "execution_3 = client.executions.create(\n", " task_id=TASK_UUID_3,\n", " input={\n", " \"user_ppid\": USER_PPID,\n", " \"session_id\": SESSION_ID,\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step: 0 , Type: init\n", "output (truncated): {\n", " \"session_id\": \"84f80110-b512-42ba-bf12-9f9e661ca801\",\n", " \"user_ppid\": \"65dhr171124554182682517a4a\n", "----------------------------------------------------------------------------------------------------\n", "Step: 1 , Type: step\n", "output (truncated): {\n", " \"created_at\": \"2024-12-18T12:29:25.007520Z\",\n", " \"entries\": [\n", " {\n", " \"content\": [\n", " {\n", " \n", "----------------------------------------------------------------------------------------------------\n", "Step: 2 , Type: step\n", "output (truncated): {\n", " \"session_chat_history\": [\n", " \"Hey Rosa, How are you doing?\",\n", " \"Hey Hamada! I'm doing great, \n", "----------------------------------------------------------------------------------------------------\n", "Step: 3 , Type: step\n", "output (truncated): [\n", " {\n", " \"about\": \"Julep AI developer who lives in New York. Loves to code and build things. Loves \n", "----------------------------------------------------------------------------------------------------\n", "Step: 4 , Type: step\n", "output (truncated): {\n", " \"user\": {\n", " \"about\": \"Julep AI developer who lives in New York. Loves to code and build things\n", "----------------------------------------------------------------------------------------------------\n", "Step: 5 , Type: step\n", "output (truncated): []\n", "----------------------------------------------------------------------------------------------------\n", "Step: 6 , Type: step\n", "output (truncated): {\n", " \"doc\": {}\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Step: 7 , Type: step\n", "output (truncated): {\n", " \"user_persona\": \"\"\n", "}\n", "----------------------------------------------------------------------------------------------------\n", "Step: 8 , Type: step\n", "output (truncated): \"\\n\\n**Introduction:**\\n\\nThis updated user persona reflects the latest changes in the\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "execution_transitions = client.executions.transitions.list(\n", " execution_id=execution_3.id).items\n", "\n", "for index, transition in enumerate(reversed(execution_transitions)):\n", " print(\"Step:\", index, \", Type:\", transition.type)\n", " print(\"output (truncated): \", json.dumps(transition.output, indent=2)[:100])\n", " print(\"-\" * 100)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New about:\n", "\n", "\n", "\n", "**Introduction:**\n", "\n", "This updated user persona reflects the latest changes in the user's demographics, psychographics, and content preferences based on the most recent user data and session chat history. The user, Hamada, has experienced a significant change in location, which may influence his interests and preferences.\n", "\n", "**Demographics:**\n", "\n", "- **Age:** 27\n", "- **Gender:** Male\n", "- **Location:** Updated from New York to San Francisco\n", "\n", "**Psychographics:**\n", "\n", "- **Personality Traits:**\n", " - Hamada appears to be sociable and enjoys spending time with friends. He is open to exploring new places and experiences, as indicated by his willingness to go out and try different clubs.\n", " \n", "- **Interest Graph:**\n", " - **Primary Interests:**\n", " - Socializing in relaxed environments\n", " - Exploring new cities and local culture\n", " - **Secondary Interests:**\n", " - Jazz and blues music\n", " - Chill and laid-back nightlife\n", "\n", "**Content Preferences:**\n", "\n", "- **Thematic Interests:**\n", " - Nightlife and social events in San Francisco\n", " - Music genres like jazz and blues\n", "\n", "- **Content Categories:**\n", " - Local event guides and reviews for San Francisco\n", " - Music recommendations and playlists featuring jazz and blues\n", "\n", "- **Entity Preferences:**\n", " - Jazz and blues artists\n", " - San Francisco nightlife venues with a relaxed vibe\n", "\n", "- **Engagement Level:**\n", " - Likely to engage with content that provides insights into the local culture and music scene\n", " - Interested in recommendations for social activities and venues\n", "\n", "- **Correlations:**\n", " - Increased interest in content that combines social activities with music and cultural exploration\n", " - Preference for venues and events that offer a chill atmosphere\n", "\n", "- **Content Needs and Expectations:**\n", " - Looking for information and recommendations that help navigate the social and cultural landscape of San Francisco\n", " - Expecting content that aligns with his interest in music and relaxed social settings\n", "\n", "**Conclusion:**\n", "\n", "Hamada's recent move to San Francisco has shifted his focus towards exploring the local culture and social scene, with a particular interest in venues that offer a relaxed atmosphere. His content preferences now reflect a stronger inclination towards jazz and blues music, as well as events that combine socializing with cultural experiences.\n", "\n", "\n" ] } ], "source": [ "about_user = client.users.get(user_id=USER_ID).about\n", "\n", "print(\"New about:\\n\")\n", "print(about_user)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The user persona is also added as a doc to the user" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "User docs: \n", "\n", "\n", "**Introduction:**\n", "\n", "This updated user persona reflects the latest changes in the user's demographics, psychographics, and content preferences based on the most recent user data and session chat history. The user, Hamada, has experienced a significant change in location, which may influence his interests and preferences.\n", "\n", "**Demographics:**\n", "\n", "- **Age:** 27\n", "- **Gender:** Male\n", "- **Location:** Updated from New York to San Francisco\n", "\n", "**Psychographics:**\n", "\n", "- **Personality Traits:**\n", " - Hamada appears to be sociable and enjoys spending time with friends. He is open to exploring new places and experiences, as indicated by his willingness to go out and try different clubs.\n", " \n", "- **Interest Graph:**\n", " - **Primary Interests:**\n", " - Socializing in relaxed environments\n", " - Exploring new cities and local culture\n", " - **Secondary Interests:**\n", " - Jazz and blues music\n", " - Chill and laid-back nightlife\n", "\n", "**Content Preferences:**\n", "\n", "- **Thematic Interests:**\n", " - Nightlife and social events in San Francisco\n", " - Music genres like jazz and blues\n", "\n", "- **Content Categories:**\n", " - Local event guides and reviews for San Francisco\n", " - Music recommendations and playlists featuring jazz and blues\n", "\n", "- **Entity Preferences:**\n", " - Jazz and blues artists\n", " - San Francisco nightlife venues with a relaxed vibe\n", "\n", "- **Engagement Level:**\n", " - Likely to engage with content that provides insights into the local culture and music scene\n", " - Interested in recommendations for social activities and venues\n", "\n", "- **Correlations:**\n", " - Increased interest in content that combines social activities with music and cultural exploration\n", " - Preference for venues and events that offer a chill atmosphere\n", "\n", "- **Content Needs and Expectations:**\n", " - Looking for information and recommendations that help navigate the social and cultural landscape of San Francisco\n", " - Expecting content that aligns with his interest in music and relaxed social settings\n", "\n", "**Conclusion:**\n", "\n", "Hamada's recent move to San Francisco has shifted his focus towards exploring the local culture and social scene, with a particular interest in venues that offer a relaxed atmosphere. His content preferences now reflect a stronger inclination towards jazz and blues music, as well as events that combine socializing with cultural experiences.\n", "\n", "\n" ] } ], "source": [ "persona_doc = client.users.docs.list(user_id=USER_ID).items\n", "\n", "print(\"User docs: \")\n", "print(persona_doc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Concepts\n", "\n", "- [Agents](https://docs.julep.ai/concepts/agents)\n", "- [Tasks](https://docs.julep.ai/concepts/tasks)\n", "- [Tools](https://docs.julep.ai/concepts/tools)\n" ] } ], "metadata": { "kernelspec": { "display_name": "ai", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: cookbooks/advanced/10-reel-generator.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"julep\"\n", "\n", "
\n", "

\n", " \n", " \"Get\n", " \n", "  \n", " \n", " \"Documentation\"\n", " \n", "

\n", "

\n", " \"NPM\n", "  \n", " \"PyPI\n", "  \n", " \"Docker\n", "  \n", " \"GitHub\n", "

\n", " \n", "

\n", " Discord\n", " ·\n", " 𝕏\n", " ·\n", " LinkedIn\n", "

\n", "
\n", "\n", "## Task Definition: Julep Reel Generator\n", " \n", "### Overview\n", " \n", "This task generates viral social media reels by analyzing trending content on Instagram and creating engaging video content. It combines trend analysis, content generation, and video production capabilities.\n", " \n", "### Task Tools:\n", " \n", "- **api_tool_call**: An `api_call` type tool that fetches trending reels from Instagram\n", "- **get_page**: An `api_call` type tool that retrieves webpage content\n", "- **get_replicate_model**: An `api_call` type tool for generating images and audio\n", "- **get_replicate_url**: An `api_call` type tool for retrieving replicate urls\n", "- **get_hooks_doc**: A `system` type tool for accessing hook templates\n", "- **create_reel**: An `api_call` type tool for video creation\n", "- **get_reel_url**: An `api_call` type tool for retrieving video URLs\n", " \n", "### Task Input:\n", " \n", "A dictionary containing:\n", "- **topic**: The topic to generate hooks and content for\n", " \n", "### Task Output:\n", " \n", "A generated social media reel package with:\n", "- Video URL\n", "- Social media caption and title\n", "- Scene descriptions and narration\n", "- Generated images and audio\n", " \n", "### Task Flow\n", " \n", "1. **Trend Analysis**: Fetch and analyze trending Instagram reels\n", "2. **Content Generation**: Create engaging video script and scenes\n", "3. **Asset Creation**: Generate images and audio for each scene\n", "4. **Video Production**: Combine assets into final video reel\n", "5. **Hook Generation**: Create viral social media copy\n", " \n", "```plaintext\n", " +------------+ +-------------+ +------------+ +------------+\n", " | Instagram | | Content | | Asset | | Video |\n", " | Trends | --> | Generation | --> | Generation | --> | Production |\n", " | | | | | | | |\n", " +------------+ +-------------+ +------------+ +------------+\n", " | | | |\n", " | | | |\n", " v v v v\n", " Analyze Create video Generate images Produce final\n", " trending script and and audio for video with\n", " content scenes each scene viral hooks\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementation\n", "\n", "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", "\n", "\n", " \"Open\n", "\n", "\n", "### Additional Information\n", "\n", "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", "\n", "**Author:** Julep AI \n", "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Installing the Julep Client" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install julep" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### NOTE:\n", "\n", "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", "- Once created, these UUIDs should remain unchanged for simplicity.\n", "- Altering a UUID will result in the system treating it as a new agent or task.\n", "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Global UUID is generated for agent and task\n", "import uuid\n", "\n", "AGENT_UUID = uuid.uuid4()\n", "TASK_UUID = uuid.uuid4()\n", "\n", "print(f'AGENT_UUID: {AGENT_UUID}')\n", "print(f'TASK_UUID: {TASK_UUID}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating Julep Client with the API Key\n", "\n", "Get you API key from [here](https://dashboard.julep.ai/)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from julep import Client\n", "\n", "# Create a client\n", "JULEP_API_KEY = \"YOU_API_KEY\"\n", "\n", "client = Client(api_key=JULEP_API_KEY,environment=\"production\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"agent\"\n", "\n", "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", "\n", "To learn more about the agent, please refer to the Agent section in [Julep Concepts](https://docs.julep.ai/docs/concepts/agents)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Creating an agent for handling persistent sessions\n", "agent = client.agents.create_or_update(\n", " agent_id=AGENT_UUID,\n", " name=\"AI Agent for Reels\",\n", " about=\"An AI agent specialized in generating reels\",\n", " model=\"gpt-4o\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an \"docs\"\n", "\n", "Document im Julep is a vector database that can be used to store and retrieve information.\n", "\n", "To learn more about the Document, please refer to the Document section in [Julep Concepts](https://docs.julep.ai/docs/concepts/docs)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hooks_data = [\n", " {\"categories\": \"Price-Focused\",\n", " \"content\": [\n", " \"Save both time and money with [product].\",\n", " \"Save both time and money on [task].\",\n", " \"Is [product] worth the price? Let’s find out!\",\n", " \"Why is it challenging and costly to find a good [product category]?\",\n", " \"Searching for an affordable [product type]? Check this out!\",\n", " \"How to locate an affordable [service].\",\n", " \"I can’t believe this costs only [price].\",\n", " \"Don't waste your money on [X]; instead buy [X].\"\n", " ]},\n", " {\"categories\": \"Informative\",\n", " \"content\": [\n", " \"What’s inside [product]?\",\n", " \"Common questions I get about [product].\",\n", " \"Now you can get X delivered right to your door.\",\n", " \"Thinking of trying [product type]?\",\n", " \"Allow me to introduce you to [product].\",\n", " \"[category] Tip #X.\",\n", " \"Here’s how to achieve [value prop].\",\n", " \"I know this sounds unbelievable, but…\",\n", " \"How to get X done in just 10 minutes.\",\n", " \"How to find time for X.\",\n", " \"Here’s my biggest life hack for X.\",\n", " \"Add more [value prop] to your day.\"\n", " ]},\n", " {\"categories\": \"Versus the Alternative (or Competition)\",\n", " \"content\": [\"Before you try [product type], watch this first.\",\n", " \"Hate [the worse alternative]? Give this a try!\",\n", " \"Thinking about [worse alternative]?\",\n", " \"Instead of [worse alternative], try this.\",\n", " \"Still using [the worse alternative to the product]? Watch this.\",\n", " \"Something that’s always annoyed me about X.\",\n", " \"Don’t buy X that doesn’t work. Try this instead.\",\n", " \"I tested every [product category] so you don’t have to: here’s what I found.\",\n", " \"Stop doing [worse alternative]. Try [product] instead.\",\n", " \"Dealing with [negative experience]? I used [product] to help.\",\n", " \"Why millennials are switching to [product].\",\n", " \"How to do X without [worse alternative].\",\n", " \"I only get my [product category] from [brand name].\",\n", " \"I no longer buy my [product category] from [worse alternative].\",\n", " \"[Worse alternative] can be difficult to deal with.\",\n", " \"Your new X alternative.\",\n", " \"[value prop] without the [negative side effect].\",\n", " \"I kept experiencing [pain point], so I tried this instead!\",\n", " \"If you have [pain point] — you need to see this!\",\n", " \"I wanted to stop doing X, so I tried this instead.\",\n", " \"Your X isn't [adverb]; you just need X.\",\n", " \"My secret to [popular trend] revealed!\"\n", " ]},\n", " {\"categories\": \"User Experience\",\n", " \"content\": [\n", " \"Guys, it’s here…\",\n", " \"What I ordered vs. what I received.\",\n", " \"[Product] unboxing.\",\n", " \"Let’s create X with [product].\",\n", " \"POV: You tried [product].\",\n", " \"A day in the life of X.\",\n", " \"Get ready with me to do [task].\",\n", " \"“Put a finger down” [product category] edition.\",\n", " \"Trying home remedies for X.\",\n", " \"[Product category] ASMR.\"\n", " ]},\n", " {\"categories\": \"Responding to Hype\",\n", " \"content\": [\n", " \"TikTok made me try [product].\",\n", " \"Things TikTok made me try #13.\",\n", " \"This [product type] is going viral on [social media platform].\",\n", " \"I tested the viral [product type] to see if it lives up to the hype.\",\n", " \"This [product type] has over 5,000 reviews… let’s see if it’s worth it.\",\n", " \"[Publication] can’t stop raving about us.\",\n", " \"It’s so good it sold out in a week.\"\n", " ]},\n", " {\"categories\": \"It’s Easier\",\n", " \"content\": [\n", " \"Are you [accomplishing the goal optimally]?\",\n", " \"Life Hack: Try [product] for [pain point].\",\n", " \"My go-to [product] for [pain point].\",\n", " \"How to easily [task].\",\n", " \"[Task] has never been easier than with [product].\",\n", " \"My favorite [product] to make [hard task] simpler.\",\n", " \"Here’s my top product for [task].\",\n", " \"Struggling to do [task]?\",\n", " \"I’ve been struggling with [task], but [product] has really helped.\",\n", " \"Easiest way to do [task]?\",\n", " \"Make your week easier.\",\n", " \"Why adults avoid [task]… [product] makes it easy.\",\n", " \"[Product] made [task] so much easier! You’ve got to try it.\",\n", " \"When I use [product], it’s one less thing I have to worry about.\",\n", " \"How to do [X] in half the time.\",\n", " \"This trick/hack/method will save you hours...\",\n", " \"Easy hack to [X]...\",\n", " \"Simple [X] that will make you [X].\"\n", " ]},\n", " {\"categories\": \"Lists\",\n", " \"content\": [\n", " \"5 Ways [product] Helps with [pain point].\",\n", " \"3 reasons to buy [product].\",\n", " \"3 reasons to try [service].\",\n", " \"Get [value prop] in 3 steps.\",\n", " \"Here are 3 ways [worse alternative] affects your life.\",\n", " \"5 things you didn’t know about [topic].\",\n", " \"The ultimate [X] checklist to [action].\",\n", " \"Reasons why [X].\",\n", " \"Here are the 3 best ways to [X].\",\n", " \"Here are [X] mistakes you might be making...\",\n", " \"If you want [X], do these 5 things...\"\n", " ]},\n", " {\"categories\": \"The Best\",\n", " \"content\": [\n", " \"The internet’s #1 [product type].\",\n", " \"The best way to [accomplish the goal of the product].\",\n", " \"What makes [the product type] the best?\",\n", " \"My skin has never looked better with [product].\",\n", " \"The best way to find X in 2022.\",\n", " \"[Product] changed how I do [task], and I’m never going back.\",\n", " \"Why is [product] so good though?\",\n", " \"After hours of researching, I found the best [product type] for [task].\",\n", " \"I found the best [product category] for [value prop].\",\n", " \"This is going to blow your mind.\",\n", " \"How I got [X] in 24 hours.\",\n", " \"Must-have [products] for [X].\",\n", " \"The best [target audience] know something that you don't.\"\n", " ]},\n", " {\"categories\": \"Other Video Hooks that Address Viewers Directly\",\n", " \"content\": [\n", " \"Hey, [customer type], you’ve got to try this.\",\n", " \"People looking for [product category], stop scrolling.\",\n", " \"Wait, have you tried X?\",\n", " \"Take control of your X with [product].\",\n", " \"Imagine if X was also X.\",\n", " \"Watch this if you X.\"\n", " ]},\n", " {\"categories\": \"Facts & Stats\",\n", " \"content\": [\n", " \"PSA: [statement about product category].\",\n", " \"Did you know? [fact about product category].\",\n", " \"I just found out [fact about product category].\",\n", " \"Are you one of [fact about product category] people who do X?\",\n", " \"New customers get [discount].\",\n", " \"Take [discount] off when you try [product].\",\n", " \"I didn’t know X could be related to X.\",\n", " \"Why is it important to [do product-related task]?\",\n", " \"99\\% of your [target audience] don't. To be the 1% you need to [X].\",\n", " \"This [product] is the secret to [X].\"\n", " ]},\n", " {\"categories\": \"Curiosity & Engagement\",\n", " \"content\": [\n", " \"Is there anything worse than [X]?\",\n", " \"I will never [adjective] from learning this.\",\n", " \"X people start scrolling. I have the perfect [X] for you.\",\n", " \"Here's a challenge for you...\",\n", " \"There's nothing more painful than [X].\",\n", " \"What would you do if...\",\n", " \"Watch till the end…\"\n", " ]},\n", " {\"categories\": \"Negative Hooks\",\n", " \"content\": [\n", " \"Why you're failing at [activity].\",\n", " \"The worst mistake you can make in [subject].\",\n", " \"Avoid these common pitfalls in [topic].\",\n", " \"The dark side of [popular trend].\",\n", " \"Don't be fooled by [misconception].\",\n", " \"Why [common practice] is ruining your [outcome].\",\n", " \"What no one tells you about [issue].\",\n", " \"The hidden dangers of [activity].\",\n", " \"Stop doing this if you want to succeed in [field].\",\n", " \"The ugly truth about [common belief].\",\n", " \"Why [habit] is wasting your time.\",\n", " \"Exposing the myths about [topic].\",\n", " \"The biggest regret you'll have in [situation].\",\n", " \"How [action] is destroying your [goal].\",\n", " \"The shocking reality of [popular topic].\",\n", " \"Why [trend] is a bad idea.\",\n", " \"The real reason you're not seeing results in [field].\",\n", " \"The downside of [seemingly positive aspect].\",\n", " \"What you should never do in [activity].\",\n", " \"Why [common advice] is actually harmful.\"\n", " ]}\n", "]\n", "\n", "hooks_doc_content = []\n", "\n", "for category in hooks_data:\n", " hooks_doc_content.extend(category['content'])\n", "\n", "doc = client.agents.docs.create(\n", " agent_id=AGENT_UUID, title=\"hooks_doc\", content=hooks_doc_content)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(f'The length of the doc is {len(client.agents.docs.list(agent_id=AGENT_UUID).items)}')\n", "for doc in client.agents.docs.list(agent_id=AGENT_UUID):\n", " print(doc.content)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining a Task\n", "\n", "Tasks in Julep are Github-Actions-style workflows that define long-running, multi-step actions.\n", "\n", "You can use them to conduct complex actions by defining them step-by-step.\n", "\n", "To learn more about tasks, please refer to the `Tasks` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/tasks)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "RAPID_API_KEY = \"YOUR_RAPID_API_KEY\"\n", "RAPID_API_HOST = \"YOUR_RAPID_API_HOST\"\n", "JINA_API_KEY = \"YOUR_JINA_API_KEY\"\n", "REPLICATE_API_KEY = \"YOUR_REPLICATE_API_KEY\"\n", "SHOTSTACK_API_KEY = \"YOUR_SHOTSTACK_API_KEY\"\n", "\n", "# Defining a Task\n", "import yaml\n", "\n", "task_def = yaml.safe_load(f\"\"\"\n", "# yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/schemas/create_task_request.json\n", "name: Julep Reel Generator\n", "description: This gets the trending reels from Instagram and generates reels.\n", "\n", "########################################################\n", "####################### INPUT SCHEMA ###################\n", "########################################################\n", "input_schema:\n", " type: object\n", " properties:\n", " topic:\n", " type: string\n", " description: The topic to generate hooks for.\n", "\n", "########################################################\n", "####################### TOOLS ##########################\n", "########################################################\n", "\n", "# Defining the tools that the task will use in this workflow\n", "tools:\n", "- name: api_tool_call\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: \"https://instagram-scraper-api2.p.rapidapi.com/v1/hashtag\"\n", " headers: \n", " x-rapidapi-key: \"{RAPID_API_KEY}\"\n", " x-rapidapi-host: \"{RAPID_API_HOST}\"\n", " follow_redirects: true\n", "\n", "- name: get_page\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: https://r.jina.ai/\n", " headers:\n", " accept: application/json\n", " x-return-format: markdown\n", " x-with-images-summary: \"true\"\n", " x-with-links-summary: \"true\"\n", " x-retain-images: none\n", " x-no-cache: \"true\"\n", " Authorization: \"Bearer {JINA_API_KEY}\"\n", "\n", "- name: get_replicate_model\n", " type: api_call\n", " api_call:\n", " method: POST\n", " url: \"https://api.replicate.com/v1\"\n", " headers:\n", " Content-Type: application/json\n", " Prefer: wait\n", " Authorization: \"Bearer {REPLICATE_API_KEY}\"\n", "\n", "- name: get_replicate_url\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: \"https://api.replicate.com/v1\"\n", " headers:\n", " Content-Type: application/json\n", " Prefer: wait\n", " Authorization: \"Bearer {REPLICATE_API_KEY}\"\n", "\n", "- name: get_hooks_doc\n", " type: system\n", " system:\n", " resource: agent\n", " subresource: doc\n", " operation: list\n", "\n", "- name: create_reel\n", " type: api_call\n", " api_call:\n", " method: POST\n", " url: \"https://api.shotstack.io/edit/stage/render\"\n", " headers:\n", " content-type: application/json\n", " x-api-key: \"{SHOTSTACK_API_KEY}\"\n", "\n", "- name: get_reel_url\n", " type: api_call\n", " api_call:\n", " method: GET\n", " url: \"https://api.shotstack.io/edit/stage/render\"\n", " headers:\n", " content-type: application/json\n", " x-api-key: \"{SHOTSTACK_API_KEY}\"\n", "\n", "########################################################\n", "########## SUB WORKFLOW TO CREATE REEL #################\n", "########################################################\n", "\n", "generate_reel:\n", "\n", "# Step 0: Generate the clips for the reel\n", "- evaluate:\n", " clips: |\n", " $ [\n", " {{\n", " \"clips\": [\n", " {{\n", " \"asset\": {{\n", " \"type\": \"audio\",\n", " \"src\": transcibe_url,\n", " \"volume\": 1\n", " }},\n", " \"start\": i * 5,\n", " \"length\": 5,\n", " \"transition\": {{\n", " \"in\": \"fadeFast\", \n", " \"out\": \"fadeFast\"\n", " }} # Smooth crossfade between audio clips\n", " }},\n", " {{\n", " \"asset\": {{\n", " \"type\": \"text\",\n", " \"text\": scene.text_overlay,\n", " \"font\": {{\n", " \"family\": \"Open Sans\",\n", " \"size\": 40,\n", " \"weight\": \"600\",\n", " \"lineHeight\": 1.5,\n", " \"color\": \"#000000\", \n", " }},\n", " \"stroke\": {{\n", " \"color\": \"#FFFFFF\",\n", " \"width\": 5\n", " }},\n", " \"alignment\": {{\n", " \"horizontal\": \"center\",\n", " \"vertical\": \"center\"\n", " }}\n", " }},\n", " \"start\": i * 5,\n", " \"length\": 5,\n", " \"transition\": {{\n", " \"in\": \"fadeFast\", \n", " \"out\": \"fadeFast\"\n", " }},\n", " \"opacity\": 1 # Ensure text is fully visible\n", " }},\n", " {{\n", " \"asset\": {{\"type\": \"image\", \"src\": image_url}},\n", " \"start\": i * 5,\n", " \"length\": 5,\n", " \"scale\": 1.1,\n", " \"position\": \"center\",\n", " \"fit\": \"cover\",\n", " \"effect\": \"zoomIn\",\n", " \"transition\": {{\n", " \"in\": \"fadeFast\",\n", " \"out\": \"fadeFast\"\n", " }}\n", " }}\n", " ]\n", " }}\n", " for i, (image_url, scene, transcibe_url) in enumerate(zip(_.image_urls, _.scenes, _.transcibe_urls))\n", " ]\n", "\n", "# Step 1: Create the reel\n", "- tool: create_reel\n", " arguments:\n", " json: |\n", " $ {{\n", " \"timeline\": {{\n", " \"soundtrack\": {{\n", " \"src\": \"https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/music/freepd/advertising.mp3\",\n", " \"effect\": \"fadeInFadeOut\",\n", " \"volume\": 0.2\n", " }},\n", " \"tracks\": steps[0].output.clips\n", " }},\n", " \"output\": {{\n", " \"format\": \"mp4\", \n", " \"fps\": 60,\n", " \"size\": {{\n", " \"width\": 1280,\n", " \"height\": 720\n", " }}\n", " }}\n", " }}\n", "\n", "########################################################\n", "####################### MAIN WORKFLOW ##################\n", "########################################################\n", "\n", "main:\n", "\n", "# Step 0: Get the trending reels from Instagram\n", "- tool: api_tool_call\n", " arguments:\n", " params:\n", " hashtag: $ steps[0].input.topic\n", "\n", "# Step 1: Extract the caption, virality score, engagement score and one-liner description for each reel\n", "- evaluate:\n", " summary: >-\n", " $ list({{\n", " 'caption': ((response.get('caption') or {{}}).get('text') or 'No Caption Available'),\n", " 'code': (response.get('code') or 'No Code Available'),\n", " 'play_count': (response.get('play_count') or 0),\n", " 'like_count': (response.get('like_count') or 0),\n", " 'media_id': ((response.get('caption') or {{}}).get('id') or 0),\n", " 'hashtags': ((response.get('caption') or {{}}).get('hashtags') or 'No Hashtag Available'),\n", " 'video_duration': (response.get('video_duration') or 0),\n", " 'comment_count': (response.get('comment_count') or 0),\n", " 'reshare_count': (response.get('reshare_count') or 0),\n", " 'has_audio': (response.get('has_audio') or False),\n", " 'audio_type': (((response.get('clips_metadata') or {{}}).get('audio_type')) or 'No Audio Type Available'),\n", " 'username': (((response.get('user') or {{}}).get('username')) or 'No Username Available'),\n", " 'full_name': (((response.get('user') or {{}}).get('full_name')) or 'No Full Name Available'),\n", " 'profile_pic_url': (((response.get('user') or {{}}).get('profile_pic_url')) or 'No Profile Pic URL Available'),\n", " 'virality_score': (((response.get('reshare_count') or 0) / (response.get('play_count') or 1)) if (response.get('play_count') or 0) > 0 else 0),\n", " 'engagement_score': (((response.get('like_count') or 0) / (response.get('play_count') or 1)) if (response.get('play_count') or 0) > 0 else 0),\n", " 'video_duration': (response.get('video_duration') or 0)\n", " }} for response in _['json']['data']['items']) \n", "\n", "# Step 2: Generate a description for each reel\n", "- over: $ _['summary'][:3]\n", " parallelism: 3\n", " map:\n", " prompt:\n", " - role: system\n", " content: >-\n", " $ f'''You are a skilled content analyst tasked with analyzing trending reels for the topic: {{steps[0].input.topic}}.\n", " Analyze the following metrics to understand what content performs well:\n", "\n", " Caption: {{_['caption']}}\n", " Virality Score: {{_['virality_score']}} \n", " Engagement Score: {{_['engagement_score']}}\n", " Video Duration: {{_['video_duration']}}\n", " Play Count: {{_['play_count']}}\n", " Comment Count: {{_['comment_count']}}\n", " Reshare Count: {{_['reshare_count']}}\n", "\n", " Return a list of JSON responses and nothing else in the response. The JSON response should contain the following fields:\n", " - Key themes and patterns from the caption\n", " - What aspects drove virality and engagement\n", " - A one-line summary of why this content resonated\n", " '''\n", " unwrap: true \n", "\n", "# Step 3: Get the trending content analysis\n", "- evaluate:\n", " analysis: $ list(extract_json(res) for res in _)\n", "\n", "# Step 4: Get the page content\n", "- tool: get_page\n", " arguments:\n", " url: $ \"https://r.jina.ai/\" + steps[0].input.url\n", "\n", "# Step 5: Extract the page content\n", "- evaluate:\n", " content: $ steps[4].output.json.data.content\n", "\n", "# Step 6: Create an engaging video script based on trends\n", "- prompt:\n", " - role: system\n", " content: >- \n", " You are an expert scriptwriter and visual storyteller. \n", " Transform the provided content into a dynamic, trend-driven script with a flexible scene structure, designed to generate realistic, story-driven images for an engaging video.\n", "\n", " - role: user\n", " content: >-\n", " $ f'''\n", "\n", " Here are the trending insights:\n", " {{steps[3].output.analysis}}\n", "\n", " Here is the content to adapt:\n", " {{steps[5].output.content}}\n", "\n", " Requirements:\n", "\n", " Create a viral-worthy video script following these guidelines:\n", "\n", " 1. Hook viewers instantly with an attention-grabbing opening (3-5 seconds)\n", " 2. Keep scenes ultra-concise (3-8 seconds each) for short attention spans\n", " 3. Deliver key points with compelling, punchy narration (2-3 sentences)\n", " 4. Use quick, dynamic transitions between scenes\n", " 5. Keep visuals simple and authentic with darker color schemes\n", "\n", " For each scene, provide:\n", " - Brief scene description\n", " - Engaging narration (2-3 impactful sentences)\n", " - Simple image prompt (using darker, moodier colors and lighting)\n", " - Bold text overlay (1-5 words)\n", " - Quick pacing guidance\n", " - Maintain consistent narration length (10-15 words) across scenes for uniform audio generation and smooth transitions\n", "\n", " Return a JSON response following this structure:\n", " ```json\n", " {{{{\n", " \"scenes\": [\n", " {{{{\n", " \"scene\": \"Brief scene description\",\n", " \"narration\": \"Compelling and engaging narration that hooks viewers. Follow up with an impactful point.\",\n", " \"image_prompt\": \"Simple visual description with darker shades, deep shadows, and low-key lighting setup.\",\n", " \"text_overlay\": \"1-5 word text\",\n", " \"tone\": \"Quick pacing note\", \n", " \"start_time\": \"Start time of the scene in seconds. Return only the number and nothing else\",\n", " \"duration\": \"Duration of the scene in seconds. Return only the number and nothing else\"\n", " }}}},\n", " ...(additional scenes as needed)\n", " ]\n", " }}}}\n", " ```\n", " '''\n", " unwrap: true\n", "\n", "# Step 7: Generate video script\n", "- evaluate:\n", " script: $ extract_json(_)\n", "\n", "# Step 8: Generate captions\n", "- over: $ steps[7].output.script.scenes\n", " parallelism: 3\n", " map:\n", " tool: get_replicate_model\n", " arguments:\n", " url: https://api.replicate.com/v1/predictions\n", " json: \n", " version: \"f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13\"\n", " input:\n", " text: $ _.narration\n", " voice: am_adam\n", " speed: $ 1\n", "\n", "# Step 9: Generate the image for each scene\n", "- over: $ steps[7].output.script.scenes\n", " parallelism: 3\n", " map:\n", " tool: get_replicate_model\n", " arguments:\n", " url: https://api.replicate.com/v1/models/black-forest-labs/flux-1.1-pro/predictions\n", " json: \n", " input:\n", " prompt: $ _.image_prompt # + \"Add the following text to the image - \" + _.text_overlay\n", " prompt_upsampling: $ False\n", " output_format: png\n", " safety_tolerance: $ 2\n", " output_quality: $ 100\n", " width: $ 1280\n", " height: $ 720\n", "\n", "# Step 10: Sleep for 90 seconds. Basically, we need to wait for the audio to be generated.\n", "- sleep:\n", " minutes: 1\n", " seconds: 30\n", "\n", "# Step 11: Get the audio url\n", "- over: $ steps[8].output\n", " parallelism: 3\n", " map:\n", " tool: get_replicate_url\n", " arguments:\n", " url: $ _.json.urls['get']\n", "\n", "# Step 12: Extract the image url\n", "- workflow: generate_reel\n", " arguments:\n", " image_urls: $ [url.json.output for url in steps[9].output]\n", " transcibe_urls: $ [url.json.output for url in steps[11].output]\n", " effects: $ [\"zoomIn\", \"slideUp\", \"slideLeft\", \"zoomOut\", \"slideDown\", \"slideRight\", \"zoomIn\"]\n", " scenes: $ steps[7].output.script.scenes\n", "\n", "# Step 13: Get the video id\n", "- evaluate:\n", " video_json: $ _.json\n", "\n", "# Step 14: Sleep for 60 seconds\n", "- sleep: \n", " minutes: 1\n", " seconds: 30\n", "\n", "# Step 15: Get the hooks document\n", "- tool: get_hooks_doc\n", " arguments:\n", " agent_id: {AGENT_UUID}\n", "\n", "# Step 16: Extract the hooks document\n", "- evaluate:\n", " content: $ _[0]['content']\n", " label: hooks_doc\n", "\n", "# Step 17: Generate the hook for the reel\n", "- prompt:\n", " - role: system\n", " content: >-\n", " You are an expert social media content creator specializing in viral hooks and engaging captions. \n", " Your expertise lies in crafting compelling, scroll-stopping content that drives high engagement and conversions.\n", " \n", " - role: user\n", " content: >-\n", " $ f'''\n", " Using the provided hook templates, create high-converting social media content optimized for maximum virality:\n", "\n", " {{_.content}}\n", "\n", " Based on this script:\n", " \n", " {{steps[7].output.script}}\n", " \n", " Generate a viral social media package with:\n", "\n", " 1. Title (max 60 chars):\n", " - Use numbers, stats or surprising facts\n", " - Create urgency/FOMO\n", " - Include power words that trigger emotion\n", " \n", " 2. Caption (2-3 sentences):\n", " - Open with a bold claim or question\n", " - Build intrigue and curiosity\n", " - End with a clear call-to-action\n", " \n", " 3. Description (one line):\n", " - Highlight the key transformation/benefit\n", " - Use \"before vs after\" framing\n", " - Make it specific and measurable\n", "\n", " Requirements:\n", " - Target the core pain point of {{steps[0].input.topic}} users\n", " - Use proven psychological triggers (scarcity, social proof, etc.)\n", " - Match the hook templates' viral formulas\n", " - Optimize for platform-specific engagement metrics\n", " - Keep language simple, direct and emotionally resonant\n", "\n", " Format response as:\n", " ```json\n", " {{{{\n", " \"title\": \"string\", // Attention-grabbing headline\n", " \"caption\": \"string\", // Engaging hook + CTA\n", " \"description\": \"string\" // Clear value proposition\n", " }}}}\n", " ```\n", "\n", " Return the JSON repsonse and nothing else\n", " '''\n", " unwrap: true\n", "\n", "# Step 18: Get the content of the product page\n", "- tool: get_reel_url\n", " arguments:\n", " url: $ \"https://api.shotstack.io/edit/stage/render/\" + steps[13].output.video_json.response.id\n", "\n", "# Step 19: Extract the details\n", "- evaluate:\n", " social_media: $ extract_json(steps[17].output)\n", " scenes: $ steps[7].output.script.scenes\n", " image_urls: $ [url.json.output for url in steps[9].output]\n", " transcibe_urls: $ [url.json.output for url in steps[11].output]\n", " reel_url: $ _.json.response.url\n", "\"\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notes:\n", "- The `unwrap: True` in the prompt step is used to unwrap the output of the prompt step (to unwrap the `choices[0].message.content` from the output of the model).\n", "- The `$` sign is used to differentiate between a Python expression and a string.\n", "- The `_` refers to the output of the previous step.\n", "- The `steps[index].input` refers to the input of the step at `index`.\n", "- The `steps[index].output` refers to the output of the step at `index`." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Creating/Updating a task\n", "task = client.tasks.create_or_update(\n", " task_id=TASK_UUID,\n", " agent_id=AGENT_UUID,\n", " **task_def\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating an Execution\n", "\n", "An execution is a single run of a task. It is a way to run a task with a specific set of inputs.\n", "\n", "To learn more about executions, please refer to the `Executions` section in [Julep Concepts](https://docs.julep.ai/docs/concepts/execution)." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Creating an execution of the task\n", "execution = client.executions.create(\n", " task_id=task.id,\n", " input={\n", " \"topic\": \"ChatGPT\",\n", " \"url\": \"https://github.com/julep-ai/julep/blob/dev/README.md?raw=true\"\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "client.executions.get(execution.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Checking execution details and output\n", "\n", "There are multiple ways to get the execution details and the output:\n", "\n", "1. **Get Execution Details**: This method retrieves the details of the execution, including the output of the last transition that took place.\n", "\n", "2. **List Transitions**: This method lists all the task steps that have been executed up to this point in time, so the output of a successful execution will be the output of the last transition (first in the transition list as it is in reverse chronological order), which should have a type of `finish`.\n", "\n", "\n", "Note: You need to wait for a few seconds for the execution to complete before you can get the final output, so feel free to run the following cells multiple times until you get the final output.\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Type: finish\n", "output: {'scenes': [{'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}, {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}, {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}, {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}, {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}, {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}], 'reel_url': 'https://shotstack-api-stage-output.s3-ap-southeast-2.amazonaws.com/f97dat95gd/496b9b8b-2933-43a9-8d72-3e23419ec88a.mp4', 'image_urls': ['https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png'], 'social_media': {'title': 'Turn 80 Lines of AI Code into 5-Line Magic (See How)', 'caption': 'Still wrestling with messy AI workflows and infrastructure headaches? 👀 We turned complex serverless deployments into drag-and-drop simplicity. Get your free API key now at Julep.ai before we hit capacity! 🚀', 'description': 'From 2-hour AI deployments to 5-minute workflows: How data teams are building serverless AI apps 10x faster'}, 'transcibe_urls': ['https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav']}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'json': {'message': 'OK', 'success': True, 'response': {'id': '496b9b8b-2933-43a9-8d72-3e23419ec88a', 'url': 'https://shotstack-api-stage-output.s3-ap-southeast-2.amazonaws.com/f97dat95gd/496b9b8b-2933-43a9-8d72-3e23419ec88a.mp4', 'data': {'output': {'fps': 60, 'size': {'width': 1280, 'height': 720}, 'format': 'mp4'}, 'timeline': {'tracks': [{'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 0, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'OVERWHELMED?', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 0, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'type': 'image'}, 'scale': 1.1, 'start': 0, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 5, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'Chaos → Clean', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 5, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'type': 'image'}, 'scale': 1.1, 'start': 5, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'type': 'audio', 'volume': 1}, 'start': 10, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'JULEP AI', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 10, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'type': 'image'}, 'scale': 1.1, 'start': 10, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 15, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'PARALLEL POWER', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 15, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'type': 'image'}, 'scale': 1.1, 'start': 15, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 20, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'SIMPLIFY', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 20, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'type': 'image'}, 'scale': 1.1, 'start': 20, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'type': 'audio', 'volume': 1}, 'start': 25, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': 600, 'lineHeight': 1.5}, 'text': 'GET STARTED FREE', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 25, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png', 'type': 'image'}, 'scale': 1.1, 'start': 25, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}], 'soundtrack': {'src': 'https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/music/freepd/advertising.mp3', 'effect': 'fadeInFadeOut', 'volume': 0.2}}}, 'plan': 'sandbox', 'error': '', 'owner': 'f97dat95gd', 'poster': None, 'status': 'done', 'created': '2025-02-19T07:31:27.533Z', 'credits': 0, 'updated': '2025-02-19T07:32:33.063Z', 'billable': 30, 'duration': 30, 'thumbnail': None, 'renderTime': 62296.39}}, 'content': 'eyJzdWNjZXNzIjp0cnVlLCJtZXNzYWdlIjoiT0siLCJyZXNwb25zZSI6eyJpZCI6IjQ5NmI5YjhiLTI5MzMtNDNhOS04ZDcyLTNlMjM0MTllYzg4YSIsIm93bmVyIjoiZjk3ZGF0OTVnZCIsInBsYW4iOiJzYW5kYm94Iiwic3RhdHVzIjoiZG9uZSIsImVycm9yIjoiIiwiZHVyYXRpb24iOjMwLCJiaWxsYWJsZSI6MzAsInJlbmRlclRpbWUiOjYyMjk2LjM5LCJjcmVkaXRzIjowLCJ1cmwiOiJodHRwczovL3Nob3RzdGFjay1hcGktc3RhZ2Utb3V0cHV0LnMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20vZjk3ZGF0OTVnZC80OTZiOWI4Yi0yOTMzLTQzYTktOGQ3Mi0zZTIzNDE5ZWM4OGEubXA0IiwicG9zdGVyIjpudWxsLCJ0aHVtYm5haWwiOm51bGwsImRhdGEiOnsib3V0cHV0Ijp7ImZvcm1hdCI6Im1wNCIsImZwcyI6NjAsInNpemUiOnsid2lkdGgiOjEyODAsImhlaWdodCI6NzIwfX0sInRpbWVsaW5lIjp7InNvdW5kdHJhY2siOnsidm9sdW1lIjowLjIsInNyYyI6Imh0dHBzOi8vc2hvdHN0YWNrLWFzc2V0cy5zMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tL211c2ljL2ZyZWVwZC9hZHZlcnRpc2luZy5tcDMiLCJlZmZlY3QiOiJmYWRlSW5GYWRlT3V0In0sInRyYWNrcyI6W3siY2xpcHMiOlt7InN0YXJ0IjowLCJsZW5ndGgiOjUsImFzc2V0Ijp7InR5cGUiOiJhdWRpbyIsInZvbHVtZSI6MSwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYifSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJzdGFydCI6MCwibGVuZ3RoIjo1LCJhc3NldCI6eyJ0ZXh0IjoiT1ZFUldIRUxNRUQ/IiwidHlwZSI6InRleHQiLCJhbGlnbm1lbnQiOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoiY2VudGVyIn0sInN0cm9rZSI6eyJjb2xvciI6IiNGRkZGRkYiLCJ3aWR0aCI6NX0sImZvbnQiOnsid2VpZ2h0Ijo2MDAsImxpbmVIZWlnaHQiOjEuNSwic2l6ZSI6NDAsImNvbG9yIjoiIzAwMDAwMCIsImZhbWlseSI6Ik9wZW4gU2FucyJ9fSwib3BhY2l0eSI6MSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJmaXQiOiJjb3ZlciIsImVmZmVjdCI6Inpvb21JbiIsInN0YXJ0IjowLCJsZW5ndGgiOjUsInNjYWxlIjoxLjEsInBvc2l0aW9uIjoiY2VudGVyIiwiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9YQVVLekhrTVE2cTRCdFdvR1RlcHFqZzk0MkFiOHBLUkcxcXVrMVNHbVVYMDBaSUtBL3RtcHc0YzhiYWJrLnBuZyJ9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZUZhc3QiLCJvdXQiOiJmYWRlRmFzdCJ9fV19LHsiY2xpcHMiOlt7InN0YXJ0Ijo1LCJsZW5ndGgiOjUsImFzc2V0Ijp7InR5cGUiOiJhdWRpbyIsInZvbHVtZSI6MSwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYifSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJzdGFydCI6NSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ0ZXh0IjoiQ2hhb3Mg4oaSIENsZWFuIiwidHlwZSI6InRleHQiLCJhbGlnbm1lbnQiOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoiY2VudGVyIn0sInN0cm9rZSI6eyJjb2xvciI6IiNGRkZGRkYiLCJ3aWR0aCI6NX0sImZvbnQiOnsid2VpZ2h0Ijo2MDAsImxpbmVIZWlnaHQiOjEuNSwic2l6ZSI6NDAsImNvbG9yIjoiIzAwMDAwMCIsImZhbWlseSI6Ik9wZW4gU2FucyJ9fSwib3BhY2l0eSI6MSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJmaXQiOiJjb3ZlciIsImVmZmVjdCI6Inpvb21JbiIsInN0YXJ0Ijo1LCJsZW5ndGgiOjUsInNjYWxlIjoxLjEsInBvc2l0aW9uIjoiY2VudGVyIiwiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9YaFJ3ZmN6cVlOV3JJU0dUeGZjYjF1Mk1obXB4bGVkYzNlWDdKNzVoYW9iaG1PRFJCL3RtcHJfOHY2NWwyLnBuZyJ9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZUZhc3QiLCJvdXQiOiJmYWRlRmFzdCJ9fV19LHsiY2xpcHMiOlt7InN0YXJ0IjoxMCwibGVuZ3RoIjo1LCJhc3NldCI6eyJ0eXBlIjoiYXVkaW8iLCJ2b2x1bWUiOjEsInNyYyI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvZUJORzZ3WWlUSlhnWWFCZHZMa2VnQWNPMkdWQjVlZXd6cnV1bVZnOG5lWWVYNk1FRi9vdXRwdXQud2F2In0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlRmFzdCIsIm91dCI6ImZhZGVGYXN0In19LHsic3RhcnQiOjEwLCJsZW5ndGgiOjUsImFzc2V0Ijp7InRleHQiOiJKVUxFUCBBSSIsInR5cGUiOiJ0ZXh0IiwiYWxpZ25tZW50Ijp7Imhvcml6b250YWwiOiJjZW50ZXIiLCJ2ZXJ0aWNhbCI6ImNlbnRlciJ9LCJzdHJva2UiOnsiY29sb3IiOiIjRkZGRkZGIiwid2lkdGgiOjV9LCJmb250Ijp7IndlaWdodCI6NjAwLCJsaW5lSGVpZ2h0IjoxLjUsInNpemUiOjQwLCJjb2xvciI6IiMwMDAwMDAiLCJmYW1pbHkiOiJPcGVuIFNhbnMifX0sIm9wYWNpdHkiOjEsInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlRmFzdCIsIm91dCI6ImZhZGVGYXN0In19LHsiZml0IjoiY292ZXIiLCJlZmZlY3QiOiJ6b29tSW4iLCJzdGFydCI6MTAsImxlbmd0aCI6NSwic2NhbGUiOjEuMSwicG9zaXRpb24iOiJjZW50ZXIiLCJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS94ZXpxL25zSDZnZnRScGJUV2VFSTlnMmp6SzgzZldDYkpaT2xqcEJlS3h3ZTJBZ0JITmRHaUMvdG1wZ3ozeHE5eXYucG5nIn0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlRmFzdCIsIm91dCI6ImZhZGVGYXN0In19XX0seyJjbGlwcyI6W3sic3RhcnQiOjE1LCJsZW5ndGgiOjUsImFzc2V0Ijp7InR5cGUiOiJhdWRpbyIsInZvbHVtZSI6MSwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9FeG9nWDA1NzJPSXJCNURjVWo5anN3bGRnMzhDZ0xOQVh0SmV3cTBrZ043eDBaSUtBL291dHB1dC53YXYifSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJzdGFydCI6MTUsImxlbmd0aCI6NSwiYXNzZXQiOnsidGV4dCI6IlBBUkFMTEVMIFBPV0VSIiwidHlwZSI6InRleHQiLCJhbGlnbm1lbnQiOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoiY2VudGVyIn0sInN0cm9rZSI6eyJjb2xvciI6IiNGRkZGRkYiLCJ3aWR0aCI6NX0sImZvbnQiOnsid2VpZ2h0Ijo2MDAsImxpbmVIZWlnaHQiOjEuNSwic2l6ZSI6NDAsImNvbG9yIjoiIzAwMDAwMCIsImZhbWlseSI6Ik9wZW4gU2FucyJ9fSwib3BhY2l0eSI6MSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJmaXQiOiJjb3ZlciIsImVmZmVjdCI6Inpvb21JbiIsInN0YXJ0IjoxNSwibGVuZ3RoIjo1LCJzY2FsZSI6MS4xLCJwb3NpdGlvbiI6ImNlbnRlciIsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvMUluOEM3ak1qQUx6RWRRQXA1U0FERVVMRWxsUDdubGlJMTVjZUdHY1I2ZXRwelFVQS90bXBfeG05cHF1di5wbmcifSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX1dfSx7ImNsaXBzIjpbeyJzdGFydCI6MjAsImxlbmd0aCI6NSwiYXNzZXQiOnsidHlwZSI6ImF1ZGlvIiwidm9sdW1lIjoxLCJzcmMiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsLzM3TG56NmNDcUlwUkhkWDRGbTVlVkpKeVZKNHVLMmg4MmdBOUJqQVh3dUt4MFpJS0Evb3V0cHV0LndhdiJ9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZUZhc3QiLCJvdXQiOiJmYWRlRmFzdCJ9fSx7InN0YXJ0IjoyMCwibGVuZ3RoIjo1LCJhc3NldCI6eyJ0ZXh0IjoiU0lNUExJRlkiLCJ0eXBlIjoidGV4dCIsImFsaWdubWVudCI6eyJob3Jpem9udGFsIjoiY2VudGVyIiwidmVydGljYWwiOiJjZW50ZXIifSwic3Ryb2tlIjp7ImNvbG9yIjoiI0ZGRkZGRiIsIndpZHRoIjo1fSwiZm9udCI6eyJ3ZWlnaHQiOjYwMCwibGluZUhlaWdodCI6MS41LCJzaXplIjo0MCwiY29sb3IiOiIjMDAwMDAwIiwiZmFtaWx5IjoiT3BlbiBTYW5zIn19LCJvcGFjaXR5IjoxLCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZUZhc3QiLCJvdXQiOiJmYWRlRmFzdCJ9fSx7ImZpdCI6ImNvdmVyIiwiZWZmZWN0Ijoiem9vbUluIiwic3RhcnQiOjIwLCJsZW5ndGgiOjUsInNjYWxlIjoxLjEsInBvc2l0aW9uIjoiY2VudGVyIiwiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9OWGhUMW5ETTdPcXRNQmtER041UVhpWnhCRUNTZHNSUnRvYVZlWjFLM3NpMjBaSUtBL3RtcGc2bnZjYm9pLnBuZyJ9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZUZhc3QiLCJvdXQiOiJmYWRlRmFzdCJ9fV19LHsiY2xpcHMiOlt7InN0YXJ0IjoyNSwibGVuZ3RoIjo1LCJhc3NldCI6eyJ0eXBlIjoiYXVkaW8iLCJ2b2x1bWUiOjEsInNyYyI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvS3N4anlRWkZ2QjcxRmhnM2VHb2UwWHJUT1JJMlZVZ2ZmNXdmRzQ4SWs4VVZNZEdpQy9vdXRwdXQud2F2In0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlRmFzdCIsIm91dCI6ImZhZGVGYXN0In19LHsic3RhcnQiOjI1LCJsZW5ndGgiOjUsImFzc2V0Ijp7InRleHQiOiJHRVQgU1RBUlRFRCBGUkVFIiwidHlwZSI6InRleHQiLCJhbGlnbm1lbnQiOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoiY2VudGVyIn0sInN0cm9rZSI6eyJjb2xvciI6IiNGRkZGRkYiLCJ3aWR0aCI6NX0sImZvbnQiOnsid2VpZ2h0Ijo2MDAsImxpbmVIZWlnaHQiOjEuNSwic2l6ZSI6NDAsImNvbG9yIjoiIzAwMDAwMCIsImZhbWlseSI6Ik9wZW4gU2FucyJ9fSwib3BhY2l0eSI6MSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX0seyJmaXQiOiJjb3ZlciIsImVmZmVjdCI6Inpvb21JbiIsInN0YXJ0IjoyNSwibGVuZ3RoIjo1LCJzY2FsZSI6MS4xLCJwb3NpdGlvbiI6ImNlbnRlciIsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvbG9kSVFXMW5mWDA4TWFTQkQwd3ZmbllNNWVNYU5IVDd5cWFEVkI2UzRzZGFUbmhvQS90bXBpczF4a2J0My5wbmcifSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGVGYXN0Iiwib3V0IjoiZmFkZUZhc3QifX1dfV19fSwiY3JlYXRlZCI6IjIwMjUtMDItMTlUMDc6MzE6MjcuNTMzWiIsInVwZGF0ZWQiOiIyMDI1LTAyLTE5VDA3OjMyOjMzLjA2M1oifX0=', 'headers': {'date': 'Wed, 19 Feb 2025 07:33:16 GMT', 'connection': 'keep-alive', 'content-type': 'application/json', 'content-length': '5498', 'x-amz-apigw-id': 'GOJhbFmVSwMFqaA=', 'x-amzn-trace-id': 'Root=1-67b5893b-36e079db644809915dd41376;Parent=7521cb0af19a6e25;Sampled=0;Lineage=2:1d71269a:0', 'x-frame-options': 'DENY', 'x-amzn-requestid': '13044dfc-1845-4351-9c25-8abd42c6d301', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-security-policy': \"default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'\", 'strict-transport-security': 'max-age=63072000; includeSubdomains; preload', 'access-control-allow-origin': '*'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: Based on the script content and provided hook templates, I'll create a viral social media package targeting developers and data teams struggling with AI workflow complexity.\n", "\n", "```json\n", "{\n", " \"title\": \"Turn 80 Lines of AI Code into 5-Line Magic (See How)\",\n", " \"caption\": \"Still wrestling with messy AI workflows and infrastructure headaches? 👀 We turned complex serverless deployments into drag-and-drop simplicity. Get your free API key now at Julep.ai before we hit capacity! 🚀\",\n", " \"description\": \"From 2-hour AI deployments to 5-minute workflows: How data teams are building serverless AI apps 10x faster\"\n", "}\n", "```\n", "\n", "Note: The viral hooks and triggers used include:\n", "- Numbers/specificity (80 to 5 lines)\n", "- Before/after transformation\n", "- Urgency/scarcity (capacity limit)\n", "- Problem-agitation-solution format\n", "- Time-saving value proposition\n", "- Social proof implication\n", "- Clear CTA\n", "These align with the most successful hook templates while addressing the core pain points shown in the script.\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'content': ['Save both time and money with [product].', 'Save both time and money on [task].', 'Is [product] worth the price? Let’s find out!', 'Why is it challenging and costly to find a good [product category]?', 'Searching for an affordable [product type]? Check this out!', 'How to locate an affordable [service].', 'I can’t believe this costs only [price].', \"Don't waste your money on [X]; instead buy [X].\", 'What’s inside [product]?', 'Common questions I get about [product].', 'Now you can get X delivered right to your door.', 'Thinking of trying [product type]?', 'Allow me to introduce you to [product].', '[category] Tip #X.', 'Here’s how to achieve [value prop].', 'I know this sounds unbelievable, but…', 'How to get X done in just 10 minutes.', 'How to find time for X.', 'Here’s my biggest life hack for X.', 'Add more [value prop] to your day.', 'Before you try [product type], watch this first.', 'Hate [the worse alternative]? Give this a try!', 'Thinking about [worse alternative]?', 'Instead of [worse alternative], try this.', 'Still using [the worse alternative to the product]? Watch this.', 'Something that’s always annoyed me about X.', 'Don’t buy X that doesn’t work. Try this instead.', 'I tested every [product category] so you don’t have to: here’s what I found.', 'Stop doing [worse alternative]. Try [product] instead.', 'Dealing with [negative experience]? I used [product] to help.', 'Why millennials are switching to [product].', 'How to do X without [worse alternative].', 'I only get my [product category] from [brand name].', 'I no longer buy my [product category] from [worse alternative].', '[Worse alternative] can be difficult to deal with.', 'Your new X alternative.', '[value prop] without the [negative side effect].', 'I kept experiencing [pain point], so I tried this instead!', 'If you have [pain point] — you need to see this!', 'I wanted to stop doing X, so I tried this instead.', \"Your X isn't [adverb]; you just need X.\", 'My secret to [popular trend] revealed!', 'Guys, it’s here…', 'What I ordered vs. what I received.', '[Product] unboxing.', 'Let’s create X with [product].', 'POV: You tried [product].', 'A day in the life of X.', 'Get ready with me to do [task].', '“Put a finger down” [product category] edition.', 'Trying home remedies for X.', '[Product category] ASMR.', 'TikTok made me try [product].', 'Things TikTok made me try #13.', 'This [product type] is going viral on [social media platform].', 'I tested the viral [product type] to see if it lives up to the hype.', 'This [product type] has over 5,000 reviews… let’s see if it’s worth it.', '[Publication] can’t stop raving about us.', 'It’s so good it sold out in a week.', 'Are you [accomplishing the goal optimally]?', 'Life Hack: Try [product] for [pain point].', 'My go-to [product] for [pain point].', 'How to easily [task].', '[Task] has never been easier than with [product].', 'My favorite [product] to make [hard task] simpler.', 'Here’s my top product for [task].', 'Struggling to do [task]?', 'I’ve been struggling with [task], but [product] has really helped.', 'Easiest way to do [task]?', 'Make your week easier.', 'Why adults avoid [task]… [product] makes it easy.', '[Product] made [task] so much easier! You’ve got to try it.', 'When I use [product], it’s one less thing I have to worry about.', 'How to do [X] in half the time.', 'This trick/hack/method will save you hours...', 'Easy hack to [X]...', 'Simple [X] that will make you [X].', '5 Ways [product] Helps with [pain point].', '3 reasons to buy [product].', '3 reasons to try [service].', 'Get [value prop] in 3 steps.', 'Here are 3 ways [worse alternative] affects your life.', '5 things you didn’t know about [topic].', 'The ultimate [X] checklist to [action].', 'Reasons why [X].', 'Here are the 3 best ways to [X].', 'Here are [X] mistakes you might be making...', 'If you want [X], do these 5 things...', 'The internet’s #1 [product type].', 'The best way to [accomplish the goal of the product].', 'What makes [the product type] the best?', 'My skin has never looked better with [product].', 'The best way to find X in 2022.', '[Product] changed how I do [task], and I’m never going back.', 'Why is [product] so good though?', 'After hours of researching, I found the best [product type] for [task].', 'I found the best [product category] for [value prop].', 'This is going to blow your mind.', 'How I got [X] in 24 hours.', 'Must-have [products] for [X].', \"The best [target audience] know something that you don't.\", 'Hey, [customer type], you’ve got to try this.', 'People looking for [product category], stop scrolling.', 'Wait, have you tried X?', 'Take control of your X with [product].', 'Imagine if X was also X.', 'Watch this if you X.', 'PSA: [statement about product category].', 'Did you know? [fact about product category].', 'I just found out [fact about product category].', 'Are you one of [fact about product category] people who do X?', 'New customers get [discount].', 'Take [discount] off when you try [product].', 'I didn’t know X could be related to X.', 'Why is it important to [do product-related task]?', \"99\\\\% of your [target audience] don't. To be the 1% you need to [X].\", 'This [product] is the secret to [X].', 'Is there anything worse than [X]?', 'I will never [adjective] from learning this.', 'X people start scrolling. I have the perfect [X] for you.', \"Here's a challenge for you...\", \"There's nothing more painful than [X].\", 'What would you do if...', 'Watch till the end…', \"Why you're failing at [activity].\", 'The worst mistake you can make in [subject].', 'Avoid these common pitfalls in [topic].', 'The dark side of [popular trend].', \"Don't be fooled by [misconception].\", 'Why [common practice] is ruining your [outcome].', 'What no one tells you about [issue].', 'The hidden dangers of [activity].', 'Stop doing this if you want to succeed in [field].', 'The ugly truth about [common belief].', 'Why [habit] is wasting your time.', 'Exposing the myths about [topic].', \"The biggest regret you'll have in [situation].\", 'How [action] is destroying your [goal].', 'The shocking reality of [popular topic].', 'Why [trend] is a bad idea.', \"The real reason you're not seeing results in [field].\", 'The downside of [seemingly positive aspect].', 'What you should never do in [activity].', 'Why [common advice] is actually harmful.']}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: [{'id': '067b0d51-c1cf-712e-8000-d0230a2bd39f', 'title': 'hooks_doc', 'content': ['Save both time and money with [product].', 'Save both time and money on [task].', 'Is [product] worth the price? Let’s find out!', 'Why is it challenging and costly to find a good [product category]?', 'Searching for an affordable [product type]? Check this out!', 'How to locate an affordable [service].', 'I can’t believe this costs only [price].', \"Don't waste your money on [X]; instead buy [X].\", 'What’s inside [product]?', 'Common questions I get about [product].', 'Now you can get X delivered right to your door.', 'Thinking of trying [product type]?', 'Allow me to introduce you to [product].', '[category] Tip #X.', 'Here’s how to achieve [value prop].', 'I know this sounds unbelievable, but…', 'How to get X done in just 10 minutes.', 'How to find time for X.', 'Here’s my biggest life hack for X.', 'Add more [value prop] to your day.', 'Before you try [product type], watch this first.', 'Hate [the worse alternative]? Give this a try!', 'Thinking about [worse alternative]?', 'Instead of [worse alternative], try this.', 'Still using [the worse alternative to the product]? Watch this.', 'Something that’s always annoyed me about X.', 'Don’t buy X that doesn’t work. Try this instead.', 'I tested every [product category] so you don’t have to: here’s what I found.', 'Stop doing [worse alternative]. Try [product] instead.', 'Dealing with [negative experience]? I used [product] to help.', 'Why millennials are switching to [product].', 'How to do X without [worse alternative].', 'I only get my [product category] from [brand name].', 'I no longer buy my [product category] from [worse alternative].', '[Worse alternative] can be difficult to deal with.', 'Your new X alternative.', '[value prop] without the [negative side effect].', 'I kept experiencing [pain point], so I tried this instead!', 'If you have [pain point] — you need to see this!', 'I wanted to stop doing X, so I tried this instead.', \"Your X isn't [adverb]; you just need X.\", 'My secret to [popular trend] revealed!', 'Guys, it’s here…', 'What I ordered vs. what I received.', '[Product] unboxing.', 'Let’s create X with [product].', 'POV: You tried [product].', 'A day in the life of X.', 'Get ready with me to do [task].', '“Put a finger down” [product category] edition.', 'Trying home remedies for X.', '[Product category] ASMR.', 'TikTok made me try [product].', 'Things TikTok made me try #13.', 'This [product type] is going viral on [social media platform].', 'I tested the viral [product type] to see if it lives up to the hype.', 'This [product type] has over 5,000 reviews… let’s see if it’s worth it.', '[Publication] can’t stop raving about us.', 'It’s so good it sold out in a week.', 'Are you [accomplishing the goal optimally]?', 'Life Hack: Try [product] for [pain point].', 'My go-to [product] for [pain point].', 'How to easily [task].', '[Task] has never been easier than with [product].', 'My favorite [product] to make [hard task] simpler.', 'Here’s my top product for [task].', 'Struggling to do [task]?', 'I’ve been struggling with [task], but [product] has really helped.', 'Easiest way to do [task]?', 'Make your week easier.', 'Why adults avoid [task]… [product] makes it easy.', '[Product] made [task] so much easier! You’ve got to try it.', 'When I use [product], it’s one less thing I have to worry about.', 'How to do [X] in half the time.', 'This trick/hack/method will save you hours...', 'Easy hack to [X]...', 'Simple [X] that will make you [X].', '5 Ways [product] Helps with [pain point].', '3 reasons to buy [product].', '3 reasons to try [service].', 'Get [value prop] in 3 steps.', 'Here are 3 ways [worse alternative] affects your life.', '5 things you didn’t know about [topic].', 'The ultimate [X] checklist to [action].', 'Reasons why [X].', 'Here are the 3 best ways to [X].', 'Here are [X] mistakes you might be making...', 'If you want [X], do these 5 things...', 'The internet’s #1 [product type].', 'The best way to [accomplish the goal of the product].', 'What makes [the product type] the best?', 'My skin has never looked better with [product].', 'The best way to find X in 2022.', '[Product] changed how I do [task], and I’m never going back.', 'Why is [product] so good though?', 'After hours of researching, I found the best [product type] for [task].', 'I found the best [product category] for [value prop].', 'This is going to blow your mind.', 'How I got [X] in 24 hours.', 'Must-have [products] for [X].', \"The best [target audience] know something that you don't.\", 'Hey, [customer type], you’ve got to try this.', 'People looking for [product category], stop scrolling.', 'Wait, have you tried X?', 'Take control of your X with [product].', 'Imagine if X was also X.', 'Watch this if you X.', 'PSA: [statement about product category].', 'Did you know? [fact about product category].', 'I just found out [fact about product category].', 'Are you one of [fact about product category] people who do X?', 'New customers get [discount].', 'Take [discount] off when you try [product].', 'I didn’t know X could be related to X.', 'Why is it important to [do product-related task]?', \"99\\\\% of your [target audience] don't. To be the 1% you need to [X].\", 'This [product] is the secret to [X].', 'Is there anything worse than [X]?', 'I will never [adjective] from learning this.', 'X people start scrolling. I have the perfect [X] for you.', \"Here's a challenge for you...\", \"There's nothing more painful than [X].\", 'What would you do if...', 'Watch till the end…', \"Why you're failing at [activity].\", 'The worst mistake you can make in [subject].', 'Avoid these common pitfalls in [topic].', 'The dark side of [popular trend].', \"Don't be fooled by [misconception].\", 'Why [common practice] is ruining your [outcome].', 'What no one tells you about [issue].', 'The hidden dangers of [activity].', 'Stop doing this if you want to succeed in [field].', 'The ugly truth about [common belief].', 'Why [habit] is wasting your time.', 'Exposing the myths about [topic].', \"The biggest regret you'll have in [situation].\", 'How [action] is destroying your [goal].', 'The shocking reality of [popular topic].', 'Why [trend] is a bad idea.', \"The real reason you're not seeing results in [field].\", 'The downside of [seemingly positive aspect].', 'What you should never do in [activity].', 'Why [common advice] is actually harmful.'], 'language': 'english', 'metadata': {}, 'modality': 'text', 'created_at': '2025-02-15T17:55:40.116866Z', 'embeddings': [[-0.019299017, 0.0035340947, -0.014854765, 0.03621153, -0.018385815, 0.0045325295, -0.026592463, 0.04368762, -0.035773195, 0.04636635, -0.004197689, -0.011902076, 0.03406855, -0.05040879, 0.008005744, 0.01403897, -0.0150617575, -0.013722394, 0.022610899, -0.014392075, -0.0077378713, -0.053866785, -0.016961219, -0.02297618, 0.009466869, -0.005674033, -0.046098474, 0.048923314, 0.028954616, 0.006794228, 0.02632459, 0.025642732, 0.0076282867, -0.038963318, -6.449495e-05, 0.018471047, 0.0045903656, 0.031876862, 0.012906599, 0.0062249987, -0.0540129, -0.0040911483, -0.020151341, -0.053379744, 0.0061245463, 0.01839799, 0.014343371, -0.009284228, 0.0079692155, -0.021977747, 0.006361979, 0.011402858, -0.04536791, -0.043176226, -0.000504164, 0.017216915, 0.07344585, 0.0073908544, 0.043127522, 0.013527577, -0.06351021, 0.04390679, 0.082310006, 0.010483568, 0.001678771, 0.013892857, -0.006909901, -0.0030835813, 4.4019227e-05, 0.03957212, -0.032144736, -0.002658942, 0.018824153, -0.02444948, 0.043030113, -0.053379744, 0.053623267, 0.010404423, 0.017557845, 0.0030120471, 0.04100889, -0.0071838615, 0.026129775, 0.0030348771, 0.030975837, -0.040594906, 0.03345975, -0.12867635, -0.017984007, -0.020942783, -0.018458871, -0.030342683, 0.016571585, -0.00032704073, -0.037161265, 0.003677163, -0.051869914, 0.03017222, -0.013162295, 0.004447297, -0.035213098, -0.035310507, -0.073835485, -0.049629524, 0.06472781, 0.052113436, 0.020699263, 0.011360242, -0.0097408295, -0.0692573, 0.031633344, -0.025861902, -0.011676819, 0.0121395085, 0.00028347335, 0.006063666, 0.007676991, -0.05367197, -0.0028750666, 0.008310145, -0.09195343, -0.066042826, 0.07037749, 0.00400896, 0.029173784, 0.007348238, -0.05449994, 0.059126835, 0.035554025, -0.019092025, -0.07938776, -0.009004179, 0.025399212, 0.035748843, 0.052990112, 0.032022975, 0.06511744, -0.035773195, -0.059370354, 0.010489656, -0.058347568, 0.0051991674, -0.013174471, 0.041252412, -0.011542883, -0.05557143, 0.020979311, -0.02055315, -0.051382873, -0.00813968, -0.0117255235, -0.04614718, 0.017289972, 0.04273789, 0.017716134, -0.014501659, 0.009290316, -0.004072884, -0.009004179, 0.01508611, 0.056204583, -0.04183686, -0.021527233, 0.04074102, 0.015719263, -0.07003656, 0.04500263, -0.029149432, -0.053087518, 0.04614718, -0.0034579944, -0.006623764, -0.0025737097, -0.03372762, -0.03265613, 0.022403907, 0.030269627, -0.0025052195, -0.009686037, -0.05367197, -0.013271879, 0.06443559, 0.0487285, 0.013990266, 0.01932337, 0.04212909, 0.009850414, 0.036917742, 0.051382873, -0.046780333, -0.043176226, 0.019749532, -0.046098474, -0.019554716, -0.021356769, -0.027663955, 0.0071716853, 0.033678915, -0.011810755, 0.008456257, -0.0031901216, -0.0405462, 0.028832855, -0.0117377, -0.03431207, 0.021868162, 0.04005916, 0.030951485, -0.0024839113, -0.01904332, -0.009655597, 0.01898244, 0.028004885, -0.016973395, 0.009978262, 0.045635786, -0.03545662, -0.022123858, -0.04921554, -0.02924684, -0.0041063684, -0.036674224, 0.009253788, -0.039523415, -0.0087058665, 0.0055157444, 0.023511926, 0.006550708, 0.05235696, 0.033898085, -0.017630901, -0.056545515, -0.037891828, 0.017691782, -0.11533142, -0.02878415, -0.025228748, -0.040083513, 0.016388945, 0.025618382, 0.0002659703, 0.014830412, -0.030342683, 0.015463566, -0.008547578, 0.013844154, 0.04663422, 0.034579944, 0.0040972363, 0.027055154, -0.0013698041, -0.017375205, -0.0052356957, 0.017375205, 0.008090977, 0.050895832, 0.043663267, -0.0074456464, 0.022416083, 0.038719796, -0.011622027, -0.006252395, -0.03358151, 0.08157945, -0.005966258, 0.023487575, -0.0015889728, -0.060539253, -0.05566884, 0.016401121, 0.036869038, -0.04359021, 0.027858771, 0.020321805, 0.03289965, -0.019432954, 0.042470016, 0.04979999, -0.020638382, 0.0657993, -0.012675254, 0.031730752, 0.014355547, -0.0038780677, -0.003018135, -0.022464788, 0.024120728, -0.06326669, -0.037770066, 0.02479041, -0.019761708, -0.013819802, 0.05674033, 0.024814762, 0.07023138, 0.045148745, 0.032120384, 0.018264055, -0.072228245, 0.04212909, -0.034945223, 0.031901214, -0.015658382, -0.02724997, -0.0014147032, 0.034653, 0.00860237, 0.06540967, -0.005555317, -0.009265964, 0.0587372, 0.0025463137, -0.0009512529, -0.011475914, 0.0041094124, -0.012328237, -0.01569491, 0.040570553, 0.06131852, -0.009107675, 0.011603762, -0.018824153, -0.08503744, 0.02091843, 0.032607425, 0.005567493, 0.002631546, -0.03326493, 0.0037228232, 0.011841196, -0.07451735, -0.010587064, 0.021941219, 0.046098474, -0.03194992, -0.09497309, -0.0067759645, -0.037916176, -0.014367723, -0.009588629, -0.0021977746, 0.004983043, -0.010830585, -0.013259704, 0.069354706, 0.0060819304, -0.021929042, 0.019603418, 0.019311193, -0.010587064, 0.0014923254, 0.008316233, 0.03090278, 0.03735608, 0.017338676, -0.029344248, -0.0071534216, -0.022269972, -0.050554905, -0.005686209, 0.02888156, -0.058201455, 0.00055477064, 0.04882591, 0.006690732, 0.021405471, -0.013515401, 0.018763272, 0.014842588, 0.010806233, -0.03662552, 0.039279893, 0.0028933308, -0.040107865, -0.005296576, -0.0044564293, 0.08849543, 0.006982957, -0.0086997785, 0.0015121115, 0.018142294, -0.033678915, -0.019530363, 0.032436963, 0.062925756, 0.013162295, -0.06497133, 0.00722039, 0.03945036, -0.0031535935, -0.010854936, 0.049824342, 0.024339898, -0.01716821, 0.018836329, 0.041885566, -0.008486697, 0.013478872, 0.029417304, 0.015707087, -0.01385633, 0.0021247184, -0.047535248, -0.034604296, 0.006922077, -0.023743272, 0.016023664, -0.02995305, 0.022708308, 0.04802229, -0.045489673, 0.033021413, -0.015548798, 0.007853543, 0.017643077, 0.0014900424, 0.021807281, -0.008553666, -0.0073908544, 0.013710218, -0.0029192048, -0.016754227, -0.0334841, 0.058980722, -0.011530707, 0.019104201, -0.03229085, 0.018921562, -0.007037749, 0.0012510878, -0.010611416, -0.00887633, 0.0014778664, -0.0003833549, -0.008937211, -0.008711955, 0.017046452, -0.016255008, -0.03701515, 0.033118818, 0.0010912772, -0.05191862, 0.03406855, 0.026592463, -0.04064361, 0.016425474, -0.0587372, -0.04712126, 0.07446864, -0.039913047, -0.02055315, -0.007329974, -0.061659448, -0.03182816, 0.016218482, -0.00878501, 0.013137943, 0.015524447, 0.024571242, -0.055181798, 0.041666396, 0.014611244, 0.05508439, -0.022708308, 0.045903657, -0.016462002, -0.045026984, 0.062682234, 0.023110118, 0.05381808, -0.04687774, 0.015646206, -0.01545139, 0.0007587193, -0.00198165, -0.043979846, -0.011116722, -0.002623936, 0.019481659, 0.026154127, -0.02595931, -0.011743788, 0.0030972792, 0.035432268, -0.0061823823, 0.005951038, 0.013174471, 0.017131684, 0.08075147, 0.030975837, -0.021624641, 0.03604107, -0.030805372, 0.01668117, -0.032096032, 0.0018751096, -0.016644642, -0.044369478, -0.007664815, -0.027079506, 0.0005745567, 0.06701691, 0.0217464, 0.035797548, -0.037088208, -0.030610556, 0.013150119, -0.042470016, 0.011007137, 0.003990696, 0.011713347, 0.011755963, -0.044466887, -0.011390682, -0.023390166, -0.011719435, -0.018653689, 0.026641168, -0.0147451805, 0.042884, 0.00062135834, -0.018434519, -0.026714224, -0.018568456, -0.035188746, -0.01716821, 0.004983043, 0.0092477, 0.066773385, -0.05177251, 0.014672124, -0.0078657195, -0.036016718, -0.0055461847, -0.030050458, 0.02009046, -0.0014185082, 0.006301099, -0.010605328, 0.0021825545, -0.03983999, 0.017789189, 0.0027837465, 0.037404783, 0.0074578226, 0.041739453, 0.072666585, -0.015877552, -0.023548454, 0.009625157, -0.03747784, 0.02233085, 0.03182816, 0.019980876, 0.019274665, -0.020979311, -0.052405663, -0.061951675, -0.04215344, -0.02077232, 0.012145597, 0.037429135, 0.09735959, 0.0125534935, -0.009497308, -0.051431578, 0.037161265, 0.02012699, -0.025813198, -0.027785715, 0.025618382, 0.040205274, 0.01579232, -0.037161265, -0.042470016, 0.058347568, 0.021892514, -0.0028172305, -0.0042463928, -0.0055066124, -0.061756857, -0.010325279, 0.022708308, -0.036065422, 0.0041763806, 0.02608107, -0.017095156, -0.023597158, -0.03453124, 0.030805372, -0.002290617, 0.014842588, 0.012736134, -0.0057196934, -0.007037749, 0.016230656, 0.0062189107, -0.02559403, 0.02924684, 0.039547767, -0.032096032, -0.032607425, -0.0012807668, 0.0054700845, -0.051285464, -0.020382686, 0.022659604, -0.05717867, 0.027517842, 0.009880854, -0.06297446, 0.042859647, 0.025399212, -0.02107672, 0.017825717, -0.035846252, -0.007634375, 0.07860849, 0.0035614907, 0.038208403, 0.033289284, -0.012145597, 0.054451235, -0.03182816, 0.043444097, 0.012157773, -0.0130770635, 0.017363029, -0.011993396, -0.03219344, 0.015305278, -0.008937211, -0.018945914, -0.020942783, 0.035480972, -0.0072569177, 0.015609679, 0.034482535, -0.0109949615, 0.038110994, -0.0017168211, 0.018653689, -0.021673346, 0.11270139, -0.02313447, -0.02279354, 0.01139677, 0.0027670043, 0.061367225, 0.0015402687, -0.047657005, 0.013771097, 0.024084201, 0.056691628, 0.012334325, -0.052016027, -0.014379899, -0.0031688134, -0.018203175, 0.038598035, -0.027323026, -0.040814076, -0.0009436428, 0.030781021, 0.0358219, 0.0007244742, -0.009716477, 0.0020592723, 0.010848848, 0.01716821, 0.06180556, -0.047145613, -0.04536791, -0.037891828, -0.009673861, -0.032729186, -0.005926686, 0.05026268, -0.015682735, -0.04161769, 0.0067516123, -0.047048204, 0.010100022, -0.009558189, -0.005920598, -0.012590022, -0.04193427, 0.0237798, -0.04921554, 0.0024275973, 0.009028531, -0.052113436, -0.012188213, 0.017472612, 0.04215344, 0.009412076, -0.0031535935, -0.0032114296, -0.0140146185, -0.013990266, -0.0032540457, -0.039547767, 0.020492269, -0.022318674, 0.031195005, 0.027274322, -0.007652639, -0.013746745, -0.04546532, -0.02995305, 0.04546532, -0.0070073092, 0.0017274752, 0.04203168, 0.033045765, 0.028150996, -0.022221267, 0.024157256, -0.080264434, 0.05191862, 0.039328597, 0.017716134, -0.013698041, -0.051967323, 0.025934957, 0.0015676647, 0.067406535, -0.0040515764, -0.013125767, -0.010934081, 0.019067673, -0.049288597, -0.010349631, -0.009753006, 0.0068307566, 0.009150292, 0.014513835, -0.023852855, 0.015341806, 0.021283712, 0.01889721, -0.0029283368, -0.029295543, -0.031633344, -0.012918775, -0.0054426882, 0.025228748, -0.025642732, 0.009959998, -0.028467573, -0.024376426, -0.029344248, -0.014672124, -0.015487919, 0.008285793, 0.027103858, -0.03124371, 0.0028750666, 0.03945036, -0.03433642, 0.008285793, -0.002009046, 0.014026795, -0.038524978, 0.03983999, 0.00872413, -0.03650376, -0.057617005, 0.028613687, 0.043297987, 0.023049237, 0.063120574, 0.004377285, 0.010903641, -0.020638382, -0.003707603, 0.007999656, 0.023122294, -0.024960876, -0.033776324, 0.016145425, 0.012943127, -0.025618382, -0.009132028, 0.02700645, 0.033167522, 0.001342408, 0.01563403, -0.015317454, 0.012577846, 0.0007324647, 0.036162827, 0.02196557, 0.01668117, 0.03160899, -0.033118818, 0.0047334344, -0.03475041, 0.01750914, 0.008669338, 0.008054448, -0.07349455, -0.0014139422, 0.030829724, 0.02444948, 0.032948356, -0.021028016, -0.025277453, -0.0066359397, 0.030367035, -0.00049008545, 0.0057562212, -0.010337455, 0.020309629, 0.01262655, 0.0022251706, -0.009777358, -0.024619946, -0.013746745, 0.020285277, 0.0008043794, -0.012029924, 0.0022099507, -0.018178822, 0.005686209, 0.064630404, 0.013247528, -0.01004523, -0.039620824, 0.010008702, -0.028564982, -0.044539943, -0.04782747, 0.0030105251, 0.020358333, 0.026641168, 0.013028359, 0.06321798, 0.013296232, 0.0017640033, -0.046561163, 0.0054639964, 0.0060240943, 0.007469998, -0.042762242, 0.016608113, -0.020041756, -0.0040394003, 0.010690561, 0.052795295, 0.0093268445, 0.031219358, 0.024400778, -0.03604107, 0.0035736668, 0.016717698, -0.074614756, 0.003637591, 0.01738738, 0.009935645, 0.023889383, 0.023609335, 0.035554025, -0.029879993, -0.004203777, 0.020906255, -0.014964349, -0.05425642, -0.016303713, -0.0016178909, -0.044612996, -0.012115156, 0.0009756049, 0.026251534, 0.016778579, -0.065604486, 0.021855986, -0.0217464, -0.013953738, -0.047949232, -0.004252481, -0.0074456464, -0.07778052, 0.005010439, -0.022014273, -0.0146843, -0.018811977, -0.035894956, -0.019006792, 0.006410683, -0.025520973, 0.016133249, 0.0071473336, -0.017411733, 0.015999312, 0.020979311, -0.01603584, -9.212884e-05, 0.0058505856, 0.017472612, -0.00012670689, -0.01124457, -0.01649853, -0.024583418, -0.0045051337, -0.022111682, 0.016997747, -0.0015136335, -0.021247184, -0.015414862, 0.008657162, 0.047754414, 0.036065422, -0.034360774, 0.024571242, 0.010100022, -0.026714224, -0.032607425, -0.027810067, -0.044199012, 0.047316078, -0.033411045, 0.017107332, 0.023049237, -0.028150996, 0.018544104, 0.015999312, -0.0029207268, -0.008200561, -0.022854421, 0.027517842, 0.010818409, 0.04636635, -0.017484788, -0.004015048, -0.014550364, 0.037161265, -0.004249437, -0.028564982, -0.012188213, 0.008468433, 0.09877201, -0.03477476, -0.022002097, 0.030561851, -0.0822126, 0.0074639106, 0.022598723, 0.012882247, 0.007421294, 0.0024823896, 0.053038817, -0.011658555, -0.00408506, 0.0024702135, 0.0073725902, 0.0030957572, 0.029100727, 0.00041474623, 0.011956868, 0.018909385, -0.016072368, -0.012328237, 0.015609679, 0.034190312, -0.020723615, 0.022744836, -0.027347378, 0.031755105, 0.017545668, -0.055376615, -0.007409118, 0.014160731, 0.004316405, 0.016303713, 0.019152906, -0.028394517, -0.015280926, -0.060636662, 0.029052023, 0.013344936, -0.046488106, -0.007299534, -0.015548798, 0.012029924, -0.04802229, -0.045806248, 0.013990266, 0.028321462, -0.026446352, -0.0057653533, -0.055961065, -0.010465303, 0.0048491065, -0.010733176, 0.022306498, 0.01333276, -0.0126630785, 0.03136547, -0.028638039, -0.0039024197, 0.0034214663, -0.045733195, 0.03255872, -0.03618718, 0.00795704, -0.02503393, 0.0094303405, -0.028857207, 0.00927814, 0.013673689, -0.0007952474, 0.023499751, -0.010246134, 0.01397809, 0.054353826, 0.04992175, -0.0012320627, -0.004979999, 0.025082635, -0.008383201, -0.025350507, -0.0014550363, 0.015889728], [0.0004025556, -0.004082042, -0.007941153, 0.016267916, -0.0036361804, 0.006489091, -0.013520446, 0.052876752, -0.035331503, 0.051334314, 0.02036502, -0.03552431, 0.0020922348, -0.039284006, 0.0024823635, 0.0132673895, -0.020834982, -0.008694298, 0.021799007, -0.04422463, -0.0066517703, -0.034656685, -0.016255865, -0.026125068, 0.00061569543, 0.014785728, -0.029234048, 0.04446564, 0.011616497, 0.00019242836, 0.0091702845, 0.035813514, 0.022112316, -0.025691258, -0.0005991263, -0.02070243, 0.030848788, 0.032752737, -0.038753793, -0.0070313546, -0.057455868, 0.022124365, -0.023269145, -0.048610944, 0.015906407, 0.008850952, -0.014665225, -0.009140159, 0.01832852, -0.0021178417, 0.02817362, 0.008977479, -0.0039193626, -0.0429714, -0.00019807694, 0.015062885, 0.061890382, -0.0036934195, 0.011965956, 0.024389824, -0.047044404, 0.026486577, 0.05123791, 0.00028337052, 0.008808775, 0.005992016, 0.005919714, 0.0035789416, 0.020810882, 0.033041947, -0.030246273, 0.006040217, -0.030607782, -0.049791873, 0.027595205, -0.06377023, 0.073651485, -0.005940802, 0.0072181346, 0.002620942, -0.0072964616, -0.022196667, 0.011200761, -0.0033168474, 0.042417083, -0.039597314, 0.019063588, -0.11828583, -0.011417667, -0.02894484, 0.0061155315, -0.03834408, 0.011128459, 0.026052766, -0.04658649, 0.035427906, -0.031885114, 0.024365723, -0.02933045, -0.008399065, -0.052973155, -0.052250136, -0.06806014, -0.0587573, 0.08406295, 0.03010167, 0.047984328, -0.0068506002, 0.0016975872, -0.053455167, 0.047430012, -0.018171865, 0.0044646394, 0.020943435, -0.030294474, 0.022389473, 0.021750806, -0.058516297, -0.010369291, 0.028824337, -0.089847095, -0.028318224, 0.057022057, 0.008634046, -0.00576306, 0.015002633, -0.053503368, 0.046345484, 0.027812112, 0.0060341917, -0.047839724, 0.027643407, 0.050659496, 0.02853513, 0.05711846, 0.015846156, 0.05003288, -0.021654403, -0.064782456, 0.01214671, -0.066373095, -0.0031722437, -0.020931385, 0.045405563, 0.0074952915, -0.044923548, 0.020087864, 0.000472598, -0.04501995, 0.00823036, -0.004548991, -0.039597314, 0.02419702, 0.048345838, -0.0024929075, -0.039621413, 0.012423867, 0.018870782, -0.010303013, 0.02189541, 0.07663996, -0.044272833, -0.019497398, 0.024160868, 0.0010303013, -0.08902767, 0.044682544, -0.017135538, -0.044345133, 0.049141157, 0.0021886372, -0.016966835, 0.00018630906, -0.03788617, -0.018015211, 0.031620007, 0.019642003, 0.014219363, -0.01603896, -0.06217959, -0.031065695, 0.086714014, 0.054660197, -0.00763387, 0.028004916, 0.042079676, -0.014038609, 0.009953555, 0.052924953, -0.06757813, -0.054370992, 0.026823986, -0.029908866, -0.034102373, -0.010935655, -0.05707026, -0.016593274, 0.041236155, -0.009302838, -7.639707e-05, 0.0104897935, -0.04738181, 0.001467125, 0.024871835, -0.03870559, 0.0043561864, 0.035765316, -0.0054678274, 0.023968063, -0.030294474, 0.007639895, 0.022052065, 0.016231766, -0.029017143, 0.017015034, 0.038078975, -0.03588582, 0.007151858, -0.039308105, -0.030414978, -0.012387717, -0.035331503, 0.015448495, -0.023968063, -0.003008058, 0.017894708, 0.031812813, 0.008453291, 0.028125418, 0.05981773, -0.0038139226, -0.05663645, -0.032897342, 0.014978533, -0.09813771, -0.051286113, -0.016581224, -0.037717465, 0.02071448, 0.032294825, 0.035403807, 0.042778593, -0.030969292, 0.0008111364, 0.0032023694, 0.02343785, 0.05403358, 0.039404508, 0.012845629, -0.0012042776, 0.010321089, -0.032222524, 0.0047538467, 0.025594855, 0.026076866, 0.02583586, 0.024401873, -0.008881077, 0.042754494, 0.033764962, -0.007591694, 0.007844751, -0.03164411, 0.088401064, -0.017557299, 0.0013775008, -0.0032806965, -0.061649375, -0.045959875, -0.00381091, 0.036946245, -0.033066045, 0.009754725, 0.007278386, 0.010080082, -0.038464583, 0.04340521, 0.031017493, -0.018039312, 0.07273566, -0.0044345134, 0.019774556, 0.008585844, 0.02108804, -1.7381157e-05, -0.01562925, 0.011604447, -0.05205733, -0.024329573, 0.026823986, -0.026390174, -0.021329045, 0.0508523, 0.06063715, 0.09158234, 0.014845979, 0.02459468, -0.0009715561, -0.09346219, 0.02617327, -0.029475054, 0.041187953, -0.004907488, -0.015810004, -0.007953203, 0.023028139, 0.012652824, 0.056973856, 0.023365548, -0.010369291, 0.051527116, -0.00013415382, -0.007784499, -0.017051186, 0.023232995, -0.020039663, -0.01327944, 0.048008427, 0.071819834, -0.004458614, 0.01912384, -0.025618955, -0.093703195, 0.022015912, 0.040922847, 0.008453291, -0.010622347, -0.044706643, -0.0124600185, 0.0024371748, -0.061311968, -0.009718574, 0.008905178, 0.013544546, -0.02078678, -0.095968656, -0.014147062, -0.030680085, -0.010272888, -0.0024552504, -0.022497926, 0.0041061426, 0.005091255, -0.023630654, 0.054226387, 0.013002283, -0.010248787, 0.0071337824, 0.011128459, 0.0037596961, 0.0013616849, 0.012339516, 0.041284356, 0.040440835, 0.010592221, -0.04429693, -0.036247328, -0.017557299, -0.04849044, -0.008748524, 0.009802925, -0.08141188, 0.015436444, 0.024305472, -0.017039135, 0.03393367, -0.014580873, -0.0026902312, -0.011965956, -0.006410764, -0.02540205, 0.043188304, 0.012640773, -0.06940977, -0.021232642, -0.0057299216, 0.07119322, 0.005196695, -0.0023724043, -0.005998041, -0.011520094, -0.05750407, 0.0012216, 0.028993042, 0.041597664, 0.014689325, -0.048635043, 0.0047538467, 0.0041784444, 0.002547134, -0.009146184, 0.06314362, -0.014665225, -0.032656334, 0.010441592, 0.03287324, -0.019834807, 0.0030547532, 0.022172567, -0.0007132276, -0.02305224, 9.541396e-05, -0.031933315, 0.012604622, -0.004657444, -0.0017292192, 0.028438726, -0.030752387, 0.01678608, 0.053406965, -0.029258149, 0.03010167, -0.043670315, -0.009790875, 0.024968239, 0.028077219, 0.02108804, -0.018882833, -0.010971806, 0.00033345463, -0.021063939, -0.026004566, -0.039284006, 0.05547962, 0.018159814, 0.020967536, -0.02655888, 0.05278035, 0.0024718195, -0.012954081, 0.005995028, 0.007314537, 0.03562071, 0.009296813, -0.010086108, -0.02390781, 0.009989706, -0.0041272305, -0.047526415, 0.018123664, 0.026462477, -0.041645866, 0.019834807, 0.008682247, -0.010863353, -0.010893479, -0.07215725, -0.025739457, 0.07500112, -0.036898043, -0.013725301, -0.023931911, -0.089413285, -0.04224838, 0.03055958, -0.01640047, 0.018858733, -0.005452764, 0.02459468, -0.056781054, 0.029812463, 0.0123997675, 0.04253759, -0.04379082, 0.026486577, -0.021003688, -0.024582628, 0.08247231, 0.022425624, 0.05899831, -0.04651419, 0.017689852, -0.00819421, 0.017762154, -0.0008849445, -0.0142916655, -0.02930635, 0.0039073126, 0.025956364, -0.0067481725, -0.044055928, -0.038030773, 0.022136416, 0.021955661, -0.0038621237, -0.0049044755, 0.008670197, 0.011905705, 0.054419193, 0.031041594, 0.015834104, 0.018545425, 0.0136771, 0.002223282, -0.015581048, -0.009308863, -0.027643407, -0.049044754, -0.011737, -0.04918936, -0.00400974, 0.046032175, 0.02030477, 0.023196843, -0.02111214, -0.030728286, 0.01368915, -0.044417437, 0.03055958, -0.040055223, 0.001111641, 0.007965254, -0.04576707, 0.01329149, -0.02817362, 0.008465341, -0.011863529, 0.0033590235, -0.033066045, 0.049936477, -0.0066276696, -0.02420907, -0.0008540656, -0.04109155, -0.0071337824, -0.009055806, 0.011248963, 0.014978533, 0.050659496, -0.050129283, -0.009338989, -0.0018256217, -0.021461599, -0.0075314427, -0.0151592875, 0.022003863, -0.013183037, 0.019437147, -0.024642881, 0.005256947, -0.015990758, 0.031957418, -0.0041844696, 0.0066216444, 0.004859287, 0.04065774, 0.04726131, -0.005835362, -0.008784675, 0.009501668, -0.07162703, 0.013460194, 0.016533023, 0.0137614515, 0.0018798481, -0.028366426, -0.04494765, -0.057600472, -0.027812112, -0.0029734136, 0.014833929, 0.04065774, 0.10102978, 0.038416382, -0.0022368385, -0.038536884, 0.03938041, 0.016496873, -0.045935776, -0.014219363, 0.05244294, 0.030222174, 0.01447242, -0.036175024, -0.0313067, 0.05822709, 0.022015912, -0.016171513, -0.0047237207, -0.001937087, -0.044827145, 0.0009903847, 0.025329748, -0.039669614, 0.013544546, -0.02078678, -0.019919159, -0.029764261, -0.02305224, 0.050370287, -0.0058504245, 0.007284411, 0.031981517, 0.0017894708, 0.020521674, 0.028438726, -0.0070554554, -0.008778649, 0.037331853, 0.040995147, -0.037428256, -0.0087967245, -0.016882481, 0.008844926, -0.055383217, -0.033403452, 0.023702957, -0.019364845, 0.018593626, 0.048442237, -0.009700498, 0.054178186, 0.002532071, -0.03562071, 0.045935776, -0.0047899974, -0.000121162084, 0.047140807, 0.0021961688, 0.02935455, 0.0010408454, -0.011158586, 0.04617678, -0.031475406, 0.021184443, 0.017039135, 0.009134133, 0.0029267187, -0.016316118, -0.038826093, -0.0061366195, 0.01212261, -0.021943612, -0.029089443, 0.033764962, -0.013737352, 0.019738404, 0.05755227, -0.024377773, 0.059094712, -0.006947003, 0.011815327, -0.013785552, 0.11471894, -0.025112841, -0.014544722, 0.019075638, -0.00018094291, 0.04350161, -0.0029884763, -0.03352396, 0.01638842, 0.015255691, 0.059624925, -0.010025856, -0.04497175, -0.017738054, -0.017099388, -0.026679382, 0.03272864, -0.012116585, -0.014568822, -0.016870432, 0.009338989, 0.037042648, 0.009085933, -0.011261013, -0.0038560985, 0.0033590235, 0.044851247, 0.074085295, -0.056058034, -0.06719252, -0.013098685, -0.041212052, -0.020533726, -0.0051846453, 0.07196444, -0.024076516, -0.030848788, -0.01606306, -0.07312127, 0.0010039413, 0.0052328464, -0.0020124014, 0.0011026032, -0.03945271, 0.031499505, -0.03788617, 0.0010348202, 0.013990408, -0.053744376, -0.004777947, 0.013038433, 0.03834408, 0.024028314, -0.0018406846, -0.010122259, 0.00508523, 0.011592397, -0.010658498, -0.039356306, 0.018473122, -0.021750806, 0.01640047, 0.029209947, -0.0051575317, -0.05282855, -0.06608389, -0.026125068, 0.04106745, -0.022208719, 0.00093691144, 0.0313549, 0.018051362, 0.037355956, -0.036584735, 0.027402401, -0.0626134, 0.033017844, -0.010959756, -0.016701726, -0.008905178, -0.05972133, 0.01567745, -0.01679813, 0.063240014, 0.000861597, -0.010013806, -0.017882658, 0.0099776555, -0.04882785, -0.02461878, -0.012206962, -0.019425096, 0.008435216, -0.0018934046, -0.028390527, -0.0023739107, 0.0068988013, 0.02308839, -0.013665049, -0.05046669, -0.017280143, -0.00028261737, 0.01600281, 0.025353849, -0.006657795, 0.00200487, -0.019895058, -0.015954608, -0.018931035, 0.0009768282, -0.0019340744, 0.0010882935, 0.030848788, -0.029908866, -0.012080434, 0.03164411, -0.024847735, 0.008712373, 0.006802399, 0.028077219, -0.035042297, 0.04771922, 0.011483944, -0.0105681205, -0.056588247, 0.04424873, 0.0470203, 0.019834807, 0.042200178, 0.010423517, -0.0006405492, -0.010351215, -0.006808424, 0.006736122, 0.017051186, -0.036078624, -0.026414275, 0.0313067, 0.024172919, -0.00821831, -0.014002458, 0.026655281, 0.026004566, 0.0074470905, 0.020955486, -0.012472069, 0.03010167, 0.01133934, 0.041621763, 0.033307053, 0.009332963, 0.02426932, -0.034198776, 0.031186197, -0.017701903, 0.001273567, 0.013086635, 0.005199708, -0.051768124, 0.001132729, 0.025161043, 0.020630127, 0.008507517, -0.022991989, 0.004323048, -0.008519568, 0.043573916, -0.0036663061, -0.007121732, -0.014219363, 0.010092133, -0.017328342, 0.017472947, 0.0027158381, -0.016966835, -0.0013933169, -0.016219715, -0.003524715, 0.011773151, 0.007585669, -0.007513367, -0.015882306, 0.082665116, 0.013363792, -0.024847735, -0.040826444, -0.0020952474, -0.024703132, -0.045140453, -0.058950108, 0.004970752, 0.030655984, 0.0030306524, 0.0049797897, 0.061552975, 0.025305647, 0.021304945, -0.03207792, 0.0012517257, 0.002391986, -0.0006349006, -0.036873944, 0.017774204, -0.007718222, 0.022027964, 0.00704943, 0.054853003, 0.034271076, 0.053310562, 0.038271777, -0.0049797897, -0.019256392, 0.020485524, -0.0587573, 0.022811234, 0.017750103, -0.00040971048, 0.018171865, 0.031836916, 0.003768734, -0.026727583, 0.0044616265, 0.018617727, -0.015086986, -0.05629904, -0.0006567418, -0.021353146, -0.049791873, -0.010236736, 0.015448495, 0.011604447, 0.01014636, -0.051575318, 0.00419652, -0.0547084, -0.0047749346, -0.035693012, -0.0021449549, -0.018015211, -0.062227793, -0.011393567, -0.0147254765, -0.009814976, -0.012291314, -0.034897693, -0.040802345, 0.0026766746, -0.026751684, 0.013628898, -0.01444832, -0.029764261, 0.013460194, 0.015400294, -0.03164411, -0.007959229, 0.002908643, 0.009869202, -0.0066758706, -0.0055672424, -0.03484949, -0.037042648, -0.008212285, -0.017665751, -0.0071759587, -0.008808775, -0.020847034, -0.0059769526, 0.011532145, 0.03824768, 0.023799358, -0.013749402, 0.034873594, -0.0068204743, -0.025884062, -0.035042297, -0.03284914, -0.04188687, 0.030342676, -0.02894484, -0.006874701, 0.034102373, -0.015303891, -0.0016840305, 0.022365373, -0.0096040955, 0.013580698, -0.029089443, 0.024462126, 0.0079291025, 0.032294825, -0.015460545, -0.0022744955, -0.007615795, 0.027040891, -0.0031812813, -0.05514221, -0.00723621, 0.0017141564, 0.1017046, -0.016689677, -0.0065734433, 0.02855923, -0.07519392, 0.023546303, 0.025932264, -0.02501644, -0.0027052942, 0.0067782984, 0.06912057, -0.0071096816, 0.0024673005, -0.0062360344, 0.01678608, -0.0032957592, 0.033114247, -0.014484471, 0.035500206, 0.03492179, -0.012869729, -0.042344783, 0.012285289, 0.02351015, -0.00957397, 0.024895936, -0.019846858, 0.010049957, 0.01915999, -0.065939285, -0.0070313546, 0.0074470905, 0.0052448967, -0.022750981, 0.0076820715, -0.021292895, -0.0058233114, -0.03721135, 0.034873594, 0.010718749, -0.06560188, -0.02069038, -0.027547004, 0.003696432, -0.03631963, -0.036970347, 0.008712373, 0.007772449, -0.0056003807, -0.016292017, -0.046080377, 0.0041814568, 0.020883184, -0.041477162, 0.01756935, 0.015412344, -0.020172216, 0.01950945, -0.032102022, -0.022377422, -0.0044977777, -0.035379704, 0.047213107, -0.024847735, 0.01567745, -0.015207489, 0.0126769245, -0.030029368, 0.011833402, -0.009742674, 0.009194385, 0.021943612, 0.0016554111, -0.0017638638, 0.08430395, 0.06584288, -0.013195087, -0.009134133, 0.021738756, -0.02499234, -0.010441592, -0.0069891787, 0.01601486], [-0.04829467, -0.015156305, -0.030055726, 0.06109229, -0.020223977, -0.024801228, -0.028350933, 0.024240747, -0.010263785, 0.070200086, -0.041825797, -0.016662596, 0.015016186, -0.015179659, 0.025221588, 0.0048750057, -0.009604054, -0.016300619, -0.023785358, -0.01591529, -0.016627565, -0.074543804, -0.04630964, -0.03472639, -0.02937848, -0.022162301, -0.015401516, 0.016475769, 0.041709032, 0.015308103, 0.019733557, 0.035823997, 0.031503633, -0.0070818947, 0.00042984707, -2.6979473e-05, 0.031947345, 0.011443128, 0.02587548, 0.022173978, -0.06576295, -0.012575763, 0.028911412, -0.04885515, -0.027113207, -0.030896444, -0.015144629, -0.013860197, -0.002287166, 0.0005028262, -0.024007214, 0.02000212, 0.00029264632, -0.014946125, 0.0028447264, 0.01842577, 0.07417015, -0.032250937, 0.057822824, -0.012003607, -0.020515893, 0.018682657, 0.06753781, -0.029471893, -0.010760043, -0.00108374, -0.043016817, 0.03860304, 0.05371264, 0.05259168, -0.00702935, 0.027907219, 0.030873092, -0.0054296474, 0.009078604, -0.060064744, 0.07290907, 0.035170104, 0.0066673732, 0.027580272, 0.042993464, 0.0053099617, -0.0025936782, -0.020235654, 0.0052924464, -0.002259434, 0.049041975, -0.12134386, -0.032741357, 0.023633562, 0.0018390741, 0.0063287504, 0.0051348116, 0.007689081, -0.029752132, 0.04135873, -0.043600652, 0.018052118, 0.010462288, 0.0267162, 0.019523377, -0.025501827, -0.053946175, -0.030989857, -0.0029118673, 0.023131466, 0.03710843, 0.030079078, -0.005137731, -0.024264101, 0.005531818, -0.0017704737, -0.036174294, 0.008558992, 0.00639881, 0.05828989, -0.036524594, -0.053292282, -0.014245526, -0.022535956, -0.10742528, -0.035707228, 0.063007265, 0.028864706, 0.047640778, 0.0067199185, -0.04950904, 0.038135976, 0.019184753, -0.039326996, -0.046659935, 0.032741357, 0.016989542, 0.041802447, 0.021414995, 0.024287455, 0.06529589, -0.0042649005, -0.026809614, 0.019733557, -0.061886303, 0.009808395, -0.009417227, 0.053245574, -0.014432353, -0.0019908706, -0.037575494, 0.019009603, -0.05147072, -0.01325301, -0.00021236927, -0.0527318, -0.028514406, 0.026132368, 0.009983545, -0.040261127, 0.00036763237, 0.029051533, -0.037528787, 0.05175096, -0.014607503, -0.049322214, -0.02475452, 0.0414755, -0.010228755, -0.03636112, 0.04367071, 0.0010450612, -0.067818046, 0.02007218, 0.021917092, -0.017795231, 0.02073775, -0.03640783, -0.028374286, 0.03381561, 0.035847347, 0.0012953796, -0.0133347465, -0.06632344, -0.017199721, 0.06576295, 0.04598269, -0.039747354, -0.008763334, 0.058383305, 0.05955097, -0.0027498535, 0.040191066, -0.02678626, -0.010292976, 0.009212885, -0.047757544, -0.0021937527, -0.036057528, -0.0068425233, 0.0017690142, -0.0040167714, -0.007840877, 0.018273974, -0.024894642, -0.035356928, 0.02171859, -0.02098296, -0.005931744, -0.018203914, 0.038229387, 0.013755106, 0.024894642, 0.015483253, 0.006252852, -0.009142825, 0.008710789, 0.0002731244, -0.022173978, 0.032928184, -0.021998828, -0.002608274, -0.026225781, -0.043203644, 0.013941933, -0.04423119, 0.018892838, -0.016919482, -0.0053333146, 0.019803617, 0.008494771, 0.012902711, 0.039770707, -0.015623372, -0.005003449, -0.040541366, -0.061839595, 0.024988053, -0.103968985, -0.038929988, -0.040518012, -0.02853776, -0.00054187, 0.027813805, -0.009469772, 0.01667427, -0.02112308, -0.014817683, -0.009557347, 0.029261712, 0.02853776, 0.00010408649, -0.039957535, 0.035170104, 0.017538344, -0.04175574, 0.007829201, 0.041942567, -0.013825166, 0.06931266, 0.04843479, 0.015448222, -0.0020974202, 0.029682072, -0.020866193, 0.05618809, -0.041872505, 0.057682704, -0.026692847, 0.011472319, -0.008062734, -0.061606064, -0.07986836, 0.021029666, 0.024310809, -0.017620081, 0.015494929, 0.034749743, -0.0013158137, 0.023867095, 0.07160129, 0.057495877, -0.070013255, 0.040401246, 0.009884293, 0.02077278, 0.01241229, 0.005426728, 0.037435375, -0.03423597, 0.041452147, -0.06137253, -0.022033859, 0.0033103332, -0.017351517, 0.0018507508, 0.03453956, 0.011279655, 0.048761737, 0.002713364, 0.022932962, 0.0069884816, -0.03281142, 0.022173978, -0.009563185, 0.011168726, -0.040891666, -0.011168726, -0.016464092, 0.030709619, -0.0133347465, 0.07417015, -0.020866193, -0.05231144, 0.06310067, -0.010065282, -0.015378162, 0.0010414122, 0.020831162, -0.0015413192, 0.016744332, 0.050583296, 0.0667905, -0.038579687, 0.036197647, -0.032647945, -0.07300248, 0.008208693, 0.04294676, -0.0034212617, -0.004877925, -0.027930573, -0.027183266, 0.026062308, -0.0478276, -0.0036985823, -0.013766783, 0.020504216, -0.018974574, -0.08327795, -0.02440422, -0.077626444, 0.019464994, -0.0151096, 0.01447906, 0.024731169, -0.040307835, -0.017036248, 0.025011407, -0.029915605, -0.008523962, 0.029168298, 0.0057711895, 0.03185393, 0.0013939014, 0.030616205, 0.015973672, 0.01996709, 0.012015284, -0.016615888, 0.0012523219, -0.042152748, -0.026692847, -0.004010933, 0.07398333, -0.047056943, 0.022115596, 0.08304441, -0.020842839, 0.014035346, -0.042152748, -0.007280398, 0.015518283, -0.0038795706, -0.035170104, 0.009820072, 0.00695929, -0.008488933, 0.027533567, 0.012435644, 0.037972502, 0.00850061, -0.077673145, 0.023586854, -0.009253753, -0.05539408, -0.009341328, 0.03874316, 0.03318507, 0.014700916, -0.006381295, -0.0015092085, -0.0045509785, -0.004422535, 0.0007042486, 0.038439568, -0.017596727, 0.013439837, 0.012435644, 0.032321, -0.023411704, 0.029728778, 0.012458997, 0.008985191, 0.005882118, 0.01842577, -0.069265954, -0.051143773, 0.03696831, -0.06945278, 0.039467115, -0.029401831, -0.009370521, 0.03923358, -0.011326361, 0.04857491, -0.04268987, 0.03780903, 0.02440422, 0.007087733, 0.027066499, 0.023621885, 0.0063462653, 0.015424869, 0.015681755, -0.0548336, -0.0038241064, 0.026692847, -0.08183004, 0.043997657, -0.012458997, 0.023586854, 0.01220211, -0.006147762, 0.0015588342, -0.004822461, -0.01279762, -0.031760518, -0.023575177, -0.019523377, -0.0013442755, -0.016849421, -0.0019558407, 0.028304227, 0.017806908, -0.036944956, 0.01947667, 0.032531176, -0.079448, 0.030125786, -0.08449232, -0.024801228, 0.049882695, -0.023411704, -0.017806908, -0.0012318877, -0.06146594, -0.012996123, 0.05095695, -0.016896129, -0.0044779996, 0.0034416958, 0.016207205, -0.05095695, -0.00930046, 0.024544341, 0.043997657, 0.016230559, 0.033371896, 0.019184753, 0.0037686422, 0.019558407, 0.024731169, 0.03626771, -0.060718637, -0.011361391, -0.036034174, 0.032647945, -0.0034738067, -0.023633562, 0.011752559, -0.010783397, 0.03122339, 9.053973e-06, -0.019710204, -0.016172174, -0.005727402, 0.039910827, 0.023294939, -0.015051216, 0.05511384, 0.00954567, 0.08878933, 0.022839548, -0.07795339, 0.0386731, -0.007975159, -0.005674857, -0.032110818, -0.016662596, -0.006171115, -0.07916776, -0.01325301, -0.015459899, 0.022500925, 0.005867522, 0.011215433, 0.038439568, 0.016510798, 0.004317445, -0.025198234, -0.028304227, 0.04913539, -0.0012450239, 0.0326713, -0.038556334, -0.0274168, -0.004661907, -0.015681755, -0.015027863, 0.001157449, 0.030406024, 0.0012946498, 0.032741357, -0.016183851, -0.024801228, -0.05189108, -0.009831749, -0.030102432, 0.00660899, 0.0070643798, -0.0011625575, 0.038135976, -0.0077124345, -0.0019222703, -0.010252108, -0.016370678, 0.0029644123, 0.017818585, -0.028771292, 0.030592851, 0.008535639, 0.00032931834, 0.023785358, -0.037879087, 0.003675229, -0.014607503, 0.02930842, -0.010579055, 0.025548534, 0.07921447, -0.003479645, -0.031760518, 0.01031633, -0.02517488, 0.00335704, 0.0358707, 0.00095310743, 0.032180876, -0.028724587, -0.05034976, -0.03542699, 0.018262297, -0.04219945, -0.019173076, 0.025361707, 0.07697255, 0.0022608934, -0.0066673732, -0.057495877, 0.019324875, 0.017982058, -0.00639881, -0.011361391, -0.02615572, 0.058103066, 0.012283848, -0.016464092, -0.02699644, 0.074263565, 0.007986836, -0.049976107, -0.039910827, -0.017585052, -0.04507191, 0.012085344, -0.0011873705, -0.043834183, 0.015319779, -0.009679952, -0.011904356, -0.050162934, -0.014420676, -5.2362528e-05, -0.0020098453, 0.04082161, -0.02594554, -0.024871288, 0.01870601, -0.0062294984, 0.021917092, 0.0049567427, 0.01115705, 0.031176684, -0.03507669, -0.034352735, 0.011273816, 0.01339313, -0.032788064, 0.001968977, -0.016615888, -0.06669708, 0.049322214, 0.006486385, -0.102287546, 0.008267076, 0.032928184, -0.030943152, -0.0059959656, -0.060344983, -0.011162887, 0.04866832, 0.011122019, 0.038089268, 0.06604319, 0.034516208, 0.046239577, -0.0020010876, 0.034422796, 0.013136243, -0.04175574, 0.0022550551, -0.0053070425, -0.010678306, -0.02280452, 0.00019868568, -0.02587548, -0.012248817, -0.0019908706, -0.010614085, 0.01115705, 0.0181105, -0.03178387, 0.047220416, 0.028981471, 0.03783238, -0.018227268, 0.124519914, -0.013241333, -9.824815e-05, 0.019908708, -0.0047027753, 0.05380605, -0.007875908, -0.057355758, 0.033371896, -0.0011756938, 0.05791624, 0.0096274065, -0.03437609, 0.018986251, 0.0034504533, 0.00078452565, 0.046706643, -0.043133587, -0.04056472, 0.016300619, 0.0555342, -0.00039700646, -0.01909134, -0.025151527, -0.017993735, -0.012225464, 0.02112308, 0.034959923, -0.029121593, -0.050162934, -0.027790453, -0.02105302, -0.03381561, -0.023446735, 0.045725804, -0.031667106, -0.061979715, -0.0001835425, -0.04619287, 0.014677563, -0.017771877, -0.011168726, -0.008623214, -0.030709619, 0.016277265, -0.017678464, -0.0003192837, 0.035403635, -0.043203644, -0.00036069934, 0.07388991, 0.038135976, 0.005041398, -0.024707815, -0.02930842, -0.01220211, -0.018624274, -0.005158165, -0.0077883326, 0.015646726, -0.046356343, 0.024544341, 0.020679366, 0.0055610095, -0.01818056, -0.059317436, -0.008897616, 0.02769704, 0.0177602, 0.017643435, 0.08537974, 0.0137084, 0.006906745, 0.014105407, 0.025268294, -0.073095895, 0.026739553, 0.046286285, -0.0074847396, -0.0019047552, -0.015506606, 0.045538977, -0.026832966, 0.025128175, 0.018332358, 0.034399442, -0.013509897, 0.014420676, -0.042900052, -0.0029323015, 0.00027786804, 0.020679366, 0.012879357, -0.033488665, -0.011629954, 0.038229387, 0.011840134, 0.043156937, -0.028257519, -0.026179073, -0.03909346, -0.008810041, -0.0108184265, 0.014490736, 0.017351517, 0.015319779, -0.024287455, -0.023376675, -0.031550337, -0.0102229165, -0.015856905, 0.0034212617, 0.033488665, 0.00671408, -0.0032198392, 0.003289899, -0.043156937, 0.0056982106, 0.009312137, 0.00071629015, -0.005461758, 0.01902128, 0.022372482, -0.041942567, -0.04294676, 0.007671566, 0.028350933, 0.014338939, 0.09444083, -0.008757495, -0.021917092, -0.02804734, -0.0043904246, 0.03115333, 0.0013304095, -0.033932377, 0.02000212, 0.0066732117, 0.029098239, 0.012820974, -0.011542379, 0.044744965, 0.050022814, -0.015226366, 0.0053829406, -0.004489676, -0.009679952, 0.028397638, 0.017982058, 0.022687752, 0.027183266, 0.050162934, -0.027253326, 0.019359903, -0.013871873, 0.03290483, 0.0009290243, 0.023259908, -0.055067133, -0.00965076, 0.05259168, -0.0056135547, 0.020796133, -0.02433416, -0.018075472, -0.058243185, 0.04885515, 0.00018454598, 0.003975903, -0.01339313, 0.041825797, 0.0070527033, -0.010742528, 0.019873677, 0.0004612281, -0.0065973136, 0.02650602, -0.024357514, -0.030429378, -0.026179073, -0.030943152, 0.025922187, 0.024474282, 0.031643752, 0.002465235, -0.003021336, -0.02052757, -0.033068303, -0.009557347, -0.021975476, 0.00082977273, -0.0013676289, 0.031013211, 0.002282787, 0.07440368, 0.022045536, 0.0034416958, -0.046916824, -0.032321, 0.009697467, 0.020901224, -0.041288674, 0.017059602, 0.0062995586, 0.008518124, 0.0016449495, 0.040237773, -0.0020331985, 0.022103919, 0.049088683, -0.026038954, -0.033652138, -0.0030855576, -0.050162934, -0.021660205, -0.011845972, 0.034866508, -0.0028724587, -0.005990127, -0.0024243668, -0.050723415, 0.0037131782, 0.011933547, -0.009662437, -0.042012624, -0.033231776, -0.026249133, -0.023726976, -0.024310809, 0.0123305535, 0.02853776, 0.023691945, -0.015763491, 0.0018040441, -0.01007112, 0.003319091, -0.025385061, 0.004863329, -0.020796133, -0.058523424, 0.027953926, -0.012097021, -0.03675813, 0.024310809, 0.0007049784, -0.022582661, -0.015051216, -0.013474867, -0.025455121, -0.020247329, -0.017900322, 0.008319621, 0.022711106, 0.0074146795, 0.017982058, -0.025782067, 0.037365314, 0.013264687, 0.014338939, 0.009078604, -0.028514406, 0.0181105, -0.04056472, 0.017468285, -0.003479645, -0.00954567, -0.02930842, -0.00954567, 0.0025717847, 0.008728304, -0.063007265, -0.008862586, -0.04098508, -0.02552518, -0.008675759, 0.0031818901, -0.032601237, 0.009983545, 0.00047545903, 0.019500023, 0.0056573423, -0.03493657, 0.02094793, -0.0018595082, 0.013404807, -0.0049713384, -0.027486859, 0.015284749, 0.03360543, 0.03682819, 0.022279069, -0.025548534, -0.021286553, 0.015308103, 0.040891666, -0.026646141, -0.015658403, 0.03115333, 0.050816827, -0.018659305, -0.00975585, 0.011104505, -0.048154548, -0.020270683, 0.021496732, 0.028817998, 0.006416325, 0.0043904246, 0.028771292, -0.028911412, 0.005899633, 0.0017106308, -0.010100312, 0.0002266002, 0.005318719, 0.0274168, 0.006054349, 0.017281458, -0.0239138, 0.0047903503, -0.0032461118, 0.041452147, -0.028374286, 0.025922187, -0.045305446, 0.0071986616, 0.026179073, -0.033418603, -0.006906745, 0.00346213, 0.01818056, 0.03878987, 0.020095533, -0.0131128905, -0.0067783017, -0.04437131, 0.040961727, -0.024474282, -0.028070692, 0.012984447, 0.0049538235, 0.0040080138, -0.029121593, -0.06721086, 0.00912531, 0.015319779, 0.0050122067, 0.0048662485, -0.094674364, -0.020819487, 0.017643435, -0.0029527356, 0.011122019, 0.02573536, -0.02307308, -0.019710204, -0.029588658, -0.0020988798, -0.029612012, -0.028817998, -0.0042357086, -0.027393447, 0.0034738067, -0.04318029, 0.021496732, -0.04196592, 0.02059763, -0.0033833124, -0.0022273231, 0.0009472691, 0.0072745597, -0.017141338, 0.025898835, 0.028584465, -0.018565891, -0.0010764422, 0.053525813, -0.00027057013, 0.0075139315, 0.017316489, 0.015553312], [-0.007790109, -0.011703004, -0.022668624, -0.00071842945, -0.001183383, -0.025546802, -0.024405045, -0.023108676, -0.030946357, -0.0007232611, -0.028329832, -0.026379332, 0.011595964, -0.04802513, 0.03651242, -0.012559322, -0.013879477, -0.030185187, 0.018482182, -0.0061964076, -0.024975924, -0.056992676, -0.029923534, 0.0052984636, 0.011506764, -0.024119606, -0.010781273, 0.0054322635, -0.01623435, 0.017388, 0.061179116, 0.04628871, 0.01912442, -0.044005197, 0.005191424, 0.007962562, -0.034776, 0.03149345, 0.012000336, 0.040675074, -0.031160437, 0.014545502, -0.048144065, -0.001601135, 0.007903095, -0.014819047, -0.01623435, 0.0065888865, -0.021669587, -0.04112702, -0.058467448, 0.0010027536, -0.0054530767, -0.009377864, -0.013927051, 0.016186778, 0.04802513, -0.04379112, 0.041245952, 0.0544713, -0.010971566, 0.013808117, 0.02262105, -0.012499855, 0.01731664, 0.03884351, -0.05851502, 0.07673555, 0.038914867, 0.02464291, -0.03268278, -0.019742873, 0.061036397, 0.008366934, 0.012785294, -0.07630739, 0.0649374, 0.028472552, 2.1881808e-05, 0.010596927, 0.04217363, -0.009003226, 0.061416984, -0.032587633, 0.040246915, -0.024619125, 0.036559995, -0.10399499, -0.015473179, 0.021063028, -0.030042468, -0.03161238, 0.024523977, 0.0040437207, -0.014890407, 0.031802677, -0.016674401, 0.027354583, -0.0130112665, -0.00096633035, 0.022085851, -0.0022582398, -0.040603716, -0.032135688, -0.032801714, 0.015520752, -0.001196763, 0.017911306, 0.013296706, 0.07064618, 0.048048917, -0.0025808455, -0.044932876, 0.03503765, -0.028662845, 0.009312451, -0.019136315, -0.05014214, 0.03030412, -0.0055244365, -0.077258855, -0.049618833, 0.060846105, -0.033229873, -0.0011729763, -0.008985385, -0.0025644922, 0.040056624, -0.004596759, 0.017019307, -0.03434784, 0.028805565, 0.027069144, 0.013035053, 0.042126056, 0.021633906, 0.09310073, -0.009544371, -0.02680749, -0.016579255, -0.0058544753, 0.00963357, -0.036155622, 0.014236276, -0.011441352, -0.02947159, -0.02947159, 0.019695299, -0.03870079, -0.008699946, -0.021241428, -0.034776, -0.008806986, 0.019100634, 0.03311094, -0.0235963, -0.0070705647, 0.005768249, -0.004561079, 0.037368737, 0.019005489, -0.082206465, -0.018684369, 0.019160101, 0.004162654, -0.036988154, -0.016388962, -0.07992295, -0.059847068, 0.03254006, 0.020837056, -0.010168768, 0.0017631812, 0.0059763817, 0.018018344, 0.014795261, 0.03218326, 0.04022313, -0.016579255, -0.041935764, -0.019766659, 0.046193566, 0.060798533, -0.0045997323, 0.0009440304, 0.036012903, 0.057563554, -0.0011595964, 0.059466485, -0.0013127226, -0.022965956, 0.05404314, -0.00435592, 0.007171658, -0.028757991, -0.062749036, -0.029209936, -0.01186951, -0.031541023, 0.027402155, -0.0074689905, -0.075070485, 0.031921607, 0.04000905, 0.0126306815, 0.010400688, 0.029519163, 0.0032766033, 0.03030412, 0.013237239, -0.00214228, 0.028948285, 0.027497303, -0.03881972, -0.019838018, 0.02059919, -0.021847986, -0.0075522433, -0.02932887, -0.03763039, 0.028757991, -0.03791583, 0.050094567, -0.0070705647, -0.016424643, 0.001610055, -0.010519621, 0.03113665, 0.036464848, -0.019219568, -0.024904564, -0.04733532, -0.06465196, -0.014307636, -0.022395078, -0.028781777, -0.05166448, -0.03855807, -1.5389276e-06, 0.015960803, 0.024405045, 0.0003488081, -0.05137904, -0.015068807, 0.027877888, 0.02687885, 0.02042079, -0.023798486, -0.0409843, 0.04214984, -0.0029004777, -0.038486708, -0.010240128, 0.027758954, -0.005325224, 0.12302426, 0.060084935, -0.014105449, 0.0046621724, 0.01695984, 0.012178736, 0.044576075, -0.033420164, 0.03820127, -0.04895281, -0.0061012614, 0.0048108385, -0.056231506, -0.020504044, 0.0087177865, 0.041222166, -0.056279078, 0.040746436, 0.017613972, 0.05927619, 0.00649374, 0.090246335, -0.0032349767, -0.0317551, 0.049047954, 0.02897207, 0.049190674, -0.0126306815, 0.0012644061, -0.006464007, -0.009223252, 0.044028983, -0.07740158, -0.02161012, 0.0018746809, -0.029661883, -0.025047284, 0.017721012, -0.0075344034, 0.027973033, -0.017197708, 0.06060824, 0.03394347, -0.017459359, 0.006666193, -0.034300268, -0.0137129715, -0.03541824, -0.0129518, 0.0036839487, 0.045432393, -0.030232761, 0.060322803, 0.02806818, -0.059085898, 0.032777924, 0.010929939, 0.009294611, -0.015080701, 0.040342063, 0.02013535, 0.043458108, 0.028662845, 0.04181683, -0.018101597, -0.019421754, -0.031374518, -0.105422184, -0.00049022684, 0.02045647, -0.0070765116, 0.021693373, -0.031041505, -0.034823574, 0.035442024, -0.051759627, 0.006279661, -0.017043095, 0.03820127, -0.024761844, -0.08539387, -0.0064699533, -0.04243528, -0.016983628, -0.028876925, 0.03881972, 0.030827425, -0.08444241, 0.01958826, 0.016507896, -0.019088741, -0.049000382, 0.016603041, 0.028377406, 0.005735542, 0.0014599022, 0.016674401, -0.017066881, 0.004263747, 0.040056624, -0.005253864, -0.013974624, -0.046169776, 0.0351328, -0.028520126, 0.070408314, -0.08382396, -0.002296893, 0.06255874, 0.010894259, 0.03874836, 0.03463328, 0.01623435, 0.006541313, 0.015199633, -0.044528503, 0.044980448, 0.043719757, -0.032302193, -0.040199343, 0.019838018, 0.023643874, 0.030256547, -0.03874836, 0.01948122, -0.01518774, -0.008967546, -0.008955653, 0.016139204, 0.0008303008, 0.004421333, -0.045741618, 0.010977513, -0.020397004, -0.0005203317, -0.007237071, 0.014616862, -0.007266804, 0.0014747687, 0.021491187, -0.009217305, 0.0058544753, 0.016733868, 0.002362306, -0.00055786996, -0.016519789, 0.067982085, -0.048572224, -0.006291554, 0.04547997, -0.044718795, 0.030018682, -0.016805228, -0.055280045, 0.059181046, -0.062035434, -0.00537577, -0.03917652, 0.015449393, -0.002600172, -0.004611626, 0.0014442923, 0.03503765, 0.013403745, 0.0017676412, 0.040532354, -0.007189498, 0.016329497, 0.009229198, -0.069552, -0.0068445923, -0.02464291, 0.047145028, 0.02244265, -0.015889443, 0.014450355, -0.023655767, -0.010067675, -0.02283513, 0.02034943, -0.0025466522, -0.033372592, 0.021871774, -0.016745761, 0.01710256, -0.0130112665, -0.0063153408, 0.013820011, 0.037392523, -0.04474258, -0.030280333, -0.071692795, 0.0017691279, 0.02514243, -0.020182924, -0.009484904, 0.010448261, -0.092434704, -0.022323718, 0.08244433, -0.032920644, 0.03499008, -0.040175557, 0.05856259, -0.07744915, 0.003996148, 0.0115602845, 0.06836267, 0.020325644, 0.025523014, 0.043814905, -0.03185025, 0.016864695, 0.019457433, 0.05194992, -0.04735911, -0.017518826, -0.07830547, 0.042482857, -0.002045647, -0.030660918, 0.026926424, -0.017982665, 0.03910516, -0.024226645, -0.022799449, 0.042197417, -0.031374518, 0.088105544, 0.016650615, -0.019814232, 0.036012903, 0.035156585, 0.056754813, 0.004201307, -0.0402707, 0.06236845, 0.00858696, 0.013558358, -0.0018954942, -0.025118643, -0.033087153, -0.07859091, -0.012143056, 0.0055393027, 0.018375143, 0.016769549, -0.006767286, 0.0015847818, 0.025023496, -0.041650325, -0.0056641824, 0.014569288, 0.0635102, -0.0071121915, 0.0027027517, 0.0066364594, -0.032730352, 0.0068564857, 0.016591148, -0.027259436, -0.028163327, 0.061749995, 0.0008273274, 0.024214752, -0.011679217, -0.055755775, -0.040817793, -0.025047284, -0.06726848, -0.012345242, 0.011435404, 0.007492777, 0.062653884, -0.015045021, -0.003550149, -0.001520112, -0.007439257, -0.0056344494, 0.00640454, -0.03484736, 0.041222166, 0.017661545, 0.0015505885, -0.016139204, -0.03715466, 0.0629869, -0.012143056, 0.03315851, -0.024666697, 0.023227608, 0.07055104, -0.030922571, 0.00043484865, -0.0003891338, -0.025998747, 0.0076533365, 0.035251733, 0.000864494, 0.008289628, -0.03330123, 0.0047721853, -0.020825163, 0.0031992968, -0.06165485, -0.0029287243, 0.036964364, 0.08206375, 0.032207046, -0.0024262324, -0.0129993735, 0.010430421, 0.018838981, -0.028472552, -0.013938944, -0.017019307, 0.024952136, -0.005860422, -0.031874035, -0.017459359, 0.04426685, 0.0041745473, -0.014081663, -0.038914867, 0.010567194, -0.027116716, -0.026664771, -0.002943591, -0.045694046, 0.0070110983, 0.0122976685, 0.011393778, -0.041555177, -0.026379332, 0.00977629, 0.016281923, 0.053234395, -0.029638095, -0.008200428, 0.0043826797, 0.002692345, 0.022406971, 0.004766239, -0.010275808, 0.030589558, -0.0060239546, -0.02737837, 0.0077484827, -0.00437376, -0.0019118474, 0.0022032333, 0.0035739357, -0.075403504, 0.020694336, 0.0015401819, -0.069218986, -0.014902301, 0.030613346, -0.0397474, 0.027425943, -0.03625077, 0.020908415, 0.05014214, -0.018030237, 0.037273593, 0.020860841, 0.048762515, 0.025665734, -0.03644106, 0.03541824, 0.030874997, 0.013213453, -0.027045356, -0.016365176, -0.004317267, -0.016805228, -0.028496338, -0.044028983, -0.0030506307, 0.014093556, -0.031874035, 0.008004189, 0.039128944, 0.008432347, -0.015259099, 0.011007246, 0.03617941, -0.029019644, 0.090864785, -0.024452617, -0.038653214, 0.04105566, -0.018161064, 0.08477542, -0.0016606016, -0.035870183, 0.039485745, -0.011982497, 0.0436484, -0.013308599, -0.012452282, -0.023358434, 0.031874035, 0.00432024, 0.039557103, -0.017602079, -0.025118643, 0.004126974, 0.032754138, 0.003110097, 0.016329497, -0.009169731, -0.035204157, -0.018874662, 0.024880776, 0.036298342, -0.044219278, -0.056279078, -0.04419549, -0.027616234, -0.033063363, -0.00885456, 0.03686922, -0.03315851, -0.046455216, -0.012321455, -0.03936681, 0.01068018, -0.009395705, -0.0085453335, -0.0015609952, -0.047097456, 0.003410403, -0.0019460407, -0.0043232134, 0.0014264523, -0.035299305, 0.01905306, 0.023417901, 0.048286784, -0.015556432, -0.011096446, -0.04469501, -0.016044058, 0.018874662, 0.0010919533, 0.0034163494, 0.006374807, 0.0060031414, 0.028377406, 0.007897149, 0.001825621, -0.056326654, -0.045265887, -0.0015297753, 0.0018776542, -0.0003567989, 0.014129236, 0.025570588, 0.040175557, -0.0050189714, 0.0031784836, 0.04279208, -0.06679276, 0.010626661, 0.011512712, 0.0087832, 0.05865774, -0.047906198, 0.022525905, -0.02095599, 0.00644022, -0.0023578461, 0.03798719, -0.005842582, 0.00048279352, -0.059799496, 0.0033895895, -0.004245907, -0.005586876, 0.015592112, -0.015972698, 0.00993685, 0.028091967, 0.008563174, 0.022525905, -0.04055614, -0.04300616, -0.034680855, -0.013046946, -0.0047394787, 0.014188703, 0.016745761, 0.01655547, -0.008355041, 0.010828847, -0.029947322, -0.015259099, -0.019505007, 0.014795261, 0.028401192, 0.006062608, -0.028472552, -0.008242055, -0.021669587, -0.024690485, -0.009169731, 0.00221364, -0.025285149, 0.05523247, 0.00071396946, -0.01811349, -0.05356741, 0.018268105, 0.016936054, 0.0065888865, 0.039224092, -0.00979413, -0.016032163, 0.008135015, -0.028520126, 0.043719757, 0.031089077, -0.060465522, -0.0030863106, -0.014569288, 0.030470626, 0.037178446, -0.008337201, -0.00056455994, 0.04369597, 0.021693373, -0.00952653, -0.008212321, 0.0033955362, -0.028924497, 0.019041168, 0.016139204, 0.034657065, 0.05537519, 9.407783e-05, 0.03185025, -0.012713934, 0.0108229, 0.000654503, 0.017923199, -0.051997494, 0.013772437, 0.020266177, -0.04008041, -0.031303156, -0.027758954, -0.026545838, -0.050570298, 0.00075931265, 0.045075595, -8.376412e-05, 0.006374807, 0.028329832, 0.041079447, 0.0027622182, 0.013938944, -0.025047284, -0.031588595, 0.025475442, -0.034252696, -0.040817793, 0.021003561, -0.006832699, 0.0037790951, 0.0702656, 0.036203194, -0.016293816, 0.0029673774, -0.00986549, -0.051093604, -0.033467736, -0.0056701293, 0.012440388, 0.001271096, 0.029542949, 0.013546465, 0.042482857, 0.031326942, 0.00033728647, -0.033562884, -0.018018344, -0.026403118, 0.013772437, -0.033182297, 0.022169106, 0.0019742872, 0.014854727, -0.0035144691, 0.043458108, 0.06379564, 0.01825621, 0.03268278, -0.0413411, -0.037868258, -0.017019307, -0.023572514, 0.00015953742, -0.041364886, 0.036298342, 0.010031995, 0.012487962, -0.015235313, -0.010466101, 0.0029926507, -0.008176642, -0.021193855, -0.076925844, -0.007189498, -0.034109976, -0.0019653672, -0.04300616, 0.00059354986, 0.03156481, -0.0022597264, -0.02272809, -0.011126179, 0.03518037, 0.01905306, -0.019790446, 0.03135073, 0.02716429, -0.06151213, -0.038462922, -0.0077484827, -0.036559995, 0.048857663, 0.020694336, -0.026426906, -0.025356509, -0.0051854774, -0.02499971, 0.015960803, 0.007986349, -0.000434477, 0.03622698, -0.006273714, 0.0175664, 0.005218184, 0.03541824, 0.0018181878, 0.020408897, -0.03729738, -0.014604968, 0.010656394, 0.0060685547, 0.03296822, 0.0058782618, -0.02045647, -0.016281923, -0.01075154, 0.01161975, 0.04300616, -0.038177483, 0.04614599, -0.027544875, -0.0022805396, -0.025190003, 0.023215715, -0.041864403, 0.019742873, 0.01999263, -0.015544538, 0.026093893, -0.015175846, 0.018838981, -0.012440388, 0.0007663743, 0.0062677674, -0.044671223, -0.019719087, 0.020908415, 0.037606604, 0.023976887, 0.004798945, -0.018910341, 0.014604968, -0.0015052453, -0.019397967, -0.025927387, 0.020622976, 0.044147916, -0.04041342, -0.012773401, 0.026712345, -0.036012903, 0.02561816, -0.008503707, 0.047097456, -0.005851502, -0.02464291, 0.034680855, -0.026545838, 0.01832757, 0.0027354583, -0.02081327, -0.0016650616, 0.029352656, -0.020706229, 0.041436244, -0.007492777, -0.034871146, -0.0014881487, -0.012749614, 0.0017066881, 0.011804097, -0.021181962, -0.0055898493, -0.02081327, 0.023513047, -0.006190461, -0.016805228, -0.024809416, 0.06251117, 0.02168148, 0.007064618, 0.038772147, 0.0050665443, -0.03763039, 0.017221494, -0.028139539, -0.047573186, -0.035251733, 0.0075522433, 0.009425438, -0.03812991, -0.039699823, -0.004088321, -0.029542949, -0.018589223, 0.028163327, -0.041840617, 0.008253948, 0.024321793, -0.041578963, 0.026070107, -0.0011685163, 0.0023950126, -0.0040615606, -0.01641275, -0.04153139, -0.015520752, -0.044504717, 0.0083609875, -0.03644106, 0.011804097, -0.018375143, 0.0056522894, -0.040532354, -0.004908958, -0.011893297, 0.032373555, -0.0045462125, -0.01594891, -0.00017663404, 0.0057652756, -0.024738057, 0.008682107, -0.027330795, -0.030684706, 0.010739647, -0.022942169, -0.03315851, 0.011875457], [-0.03887, 0.022472093, -0.027009727, 0.06141412, 0.03406827, -0.0024548841, -0.024476815, 0.051714625, -0.02226802, 0.048377424, -0.023168344, -0.01918291, 0.03651715, -0.021151617, 0.010371735, 0.011164021, -0.03445241, -0.013540877, 0.019999202, -0.010365733, -0.028426237, -0.03891802, -0.04792126, -0.027970074, 0.016613984, -0.013108721, -0.02074347, 0.01113401, 0.03262775, 0.0051048384, 0.04861751, 0.018690731, 0.016121807, -0.015869716, -0.00049967994, -0.028522272, 0.0021832862, 0.0427594, 0.004033453, -0.008355009, -0.050850313, -0.018978836, -0.012856631, -0.04880958, -0.006017167, -0.009741508, 0.02040735, -0.005870114, 0.01996319, -0.010191671, -0.00441459, 0.0060201683, -0.045688454, -0.005978153, -0.03154736, -0.022316037, 0.06794447, 0.033059906, 0.023648517, -0.00083204964, -0.038725946, 0.037741594, 0.05627627, -0.010155657, -0.004810733, 0.027561927, 0.016902087, 0.028978437, 0.02660158, 0.060789894, -0.01024569, 0.021871878, 0.031067189, -0.012856631, 0.0046636797, -0.06122205, 0.055459972, 0.04295147, 0.007916851, -0.000580334, 0.04095875, -0.026553564, 0.035772882, -0.026817659, 0.024044659, -0.023624508, 0.008973232, -0.1413629, -0.041054785, 0.015293508, 0.021727825, -0.01490937, 0.054211523, 0.026289469, -0.0070345337, 0.013480855, -0.032411672, 0.0037753598, -0.02201593, 0.032243613, -0.0026259457, -0.016481936, -0.045352332, -0.04895363, 0.03783763, 0.018534675, 0.01010764, 0.037309438, -0.010587813, -0.007994879, 0.028714342, -0.0013879999, -0.0007101308, 0.023312395, 0.0026829662, 0.04556841, -0.017334243, -0.04040655, -0.019026853, -0.013204756, -0.080332935, -0.069144905, 0.09483416, 0.034380384, 0.007250611, -0.012796609, -0.050994366, 0.05008204, -0.006134209, -0.0025089036, -0.036781248, -0.020071229, 0.022868237, 0.04631268, 0.067992486, 0.005296908, 0.08234966, -0.033492062, -0.043407634, -0.01063583, -0.08335802, 0.013804972, -0.034836546, 0.04876156, -0.030995162, -0.048137337, -0.00683046, -0.039782327, -0.019627068, -0.031643398, -0.014765318, -0.05344325, 0.013444842, 0.02732184, 0.018342607, 0.009117284, 0.00073038804, 0.020419354, -0.024080673, 0.030899128, 0.033107925, -0.050178073, 0.013504864, -0.017862434, 0.003445241, -0.048713546, 0.039086077, -0.013780964, -0.03658918, 0.033972234, 0.042711385, -0.028282186, 0.01402105, -0.014681287, -0.033972234, 0.028138135, 0.034908574, 0.016505945, -0.026241452, -0.07846026, -0.024056664, 0.055075835, 0.06261455, -0.013588894, 0.00034943834, 0.047441088, 0.039278146, 0.023996642, 0.049073674, -0.04897764, -0.045760483, 0.0054019457, -0.047104966, 0.0041444926, -0.018738749, -0.042447288, -0.03990237, -0.0125925355, 0.019555043, -0.025161061, 0.006686408, -0.03426034, 0.03550879, 0.013396825, -0.003337202, 0.01907487, 0.055411957, 0.02423673, 0.0064463215, -0.012436479, -0.017442282, 0.016001763, 0.0071965917, -0.01890681, -0.021355692, 0.04095875, -0.028690333, -0.009213318, -0.026025373, -0.030779086, 0.03315594, -0.02840223, 0.0063022696, -0.013060704, -0.028834386, 0.007820817, 0.036397107, 0.0211036, 0.03269978, 0.023228366, -0.038966034, -0.05339523, -0.017958468, 0.021247653, -0.09478614, -0.004372575, -0.052722987, -0.021703817, 0.04326358, 0.036109004, 0.001743628, 0.022075951, -0.039542243, 0.0021262658, 0.022676166, 0.011758234, 0.017226204, -0.013540877, -0.020635432, 0.030827103, -0.0043215565, -0.019146895, -0.0067884447, 0.014417193, 0.014093076, 0.05786084, 0.025473174, -0.013756955, -0.010947943, 0.008979234, -0.015893724, 0.022027934, -0.029866757, 0.06050179, -0.025185071, 0.019134892, 0.029938783, -0.07308232, -0.06271058, -0.0023258377, 0.035868917, -0.02645753, 0.035364736, 0.0402625, 0.029074471, -0.010119645, 0.029530635, 0.0255452, -0.044151902, 0.044055868, -0.03190749, 0.03757353, -0.013648916, -0.017226204, -0.008583091, 0.023252374, 0.023888603, -0.051570572, -0.016421914, 0.013120726, -0.022412071, -0.022592137, 0.022976276, -0.003853388, 0.038942024, 0.020395346, 0.04170302, 0.01366092, -0.03121124, 0.020659441, -0.011140012, 0.016722022, -0.046984922, -0.0319315, 0.010515788, 0.030250896, -0.021331683, 0.08566285, 0.011326079, -0.06170222, 0.07173783, -0.021151617, -0.014201115, -0.028834386, 0.031475335, 0.0047597145, 0.020263297, 0.037333447, 0.0855188, -0.035700858, -0.006908488, -0.047609147, -0.11802651, 0.06967309, 0.007850828, -0.034380384, 0.0036703218, -0.027609944, -0.0054379585, 0.042183194, -0.06727223, -0.019098878, -0.0023663524, -0.00049330265, -0.021043578, -0.09704295, 0.0019191912, -0.026217442, 0.035772882, -0.021535756, 0.016397906, 0.0094414, -0.047657166, -0.04542436, 0.03265176, -0.02590533, -0.005861111, 0.018582692, 0.013192751, -0.003673323, 0.0014007544, 0.014705297, 0.0072566136, 0.02163179, 0.009129288, -0.020347329, -0.021355692, -0.04484815, -0.017670363, -0.010179666, 0.045328327, -0.064631276, 0.0012086853, 0.06981715, 0.002288324, 0.009531433, -0.00045128755, 0.013720942, 0.027153779, 0.009501422, -0.035028614, 0.03375616, -0.013396825, -0.019819139, -0.036109004, -0.005714058, 0.05291506, -0.007346646, -0.050322123, -0.0012514507, 0.0056810463, -0.04115082, -0.008643113, 0.025641235, 0.055988163, -0.009291346, -0.025329122, 1.289527e-05, -0.0015035415, -0.018414631, 0.004003442, 0.029170506, 0.021307673, -0.018342607, 0.03269978, 0.018678727, -0.012082351, 0.032267623, -0.0062542525, 0.00046554266, 0.004642672, 0.014705297, -0.049649883, -0.030490981, 0.016637992, -0.07749991, 0.013708937, -0.040526595, 0.016529953, 0.06088593, -0.053683333, -0.011446122, -0.012952665, 0.04309552, 0.015425555, 0.01763435, 0.014489219, -0.0031301274, -0.0065963757, -0.0102516925, 0.01687808, -0.039974395, -0.032219604, 0.029890765, -0.046576776, 0.019639073, -0.026553564, 0.01935097, -0.0188828, -0.043911815, 0.003784363, 0.005762075, -0.0009445902, -0.0048167347, -0.00043815782, -0.049361777, 0.013312794, -0.014213119, 0.021283666, 0.046408713, 0.018954827, 0.018198553, -0.019002844, 0.057092562, -0.080332935, -0.016974114, -0.06439119, 2.7830336e-05, 0.041030776, -0.026361493, 0.009027251, -0.012196393, -0.07514706, -0.018978836, 0.036613185, -0.010341724, 0.01268857, 0.019110883, 0.03706935, -0.07658758, 0.024968993, 0.028330203, 0.054787733, 0.004294547, 0.032387666, -0.0013317296, -0.015929738, 0.03195551, 0.011091995, 0.035124652, -0.0076647606, 0.013276782, -0.03368413, 0.0713537, 0.004273539, -0.04403186, 0.010887922, 0.004531632, 0.04098276, 0.020455368, -0.047273025, -0.027393866, 0.004264536, 0.07293827, 0.01219039, -0.03656517, 0.01852267, 0.03531672, 0.041582976, 0.02926654, -0.020959549, 0.036829263, -0.014153098, -0.011608181, -0.032267623, -0.02660158, -0.024092678, -0.07740388, -0.03995039, -0.014525231, 0.013096717, 0.07082551, 0.04878557, 0.012748592, -0.00624825, -0.010119645, -0.008841184, -0.019915173, 0.040070433, -0.008583091, 0.013456847, -0.009471411, -0.019038858, -0.032195594, -0.021607783, -0.025617227, 0.019483017, 0.008228964, 0.015245491, 0.025737269, 0.0006943751, -0.054835748, -0.04323957, -0.00405446, -0.042711385, -0.0067704385, 0.008925214, 0.0020002204, 0.021751834, -0.06266257, 0.0025284106, -0.0060771885, 0.017946463, 0.0197111, 0.021523751, -0.039254136, 0.019194914, 0.0043875803, -0.014261136, -0.0019356972, -0.053827386, 0.047777206, -0.020863514, 0.019290948, -0.037405472, 0.053299196, 0.07841224, -0.033972234, -0.021919895, 0.024140695, -0.022664163, 0.044127893, 0.004351567, 0.0022778204, 0.014201115, -0.029698696, -0.048545483, -0.051426522, 0.011374096, -0.036973316, -0.0010226183, 0.013985037, 0.07730784, 0.0006872475, 0.0025869317, -0.03834181, 0.019543039, 0.028858393, -0.030010808, 0.004003442, 0.003934417, 0.050322123, 0.02057541, -0.03298788, -0.025161061, 0.07961267, 0.01854668, -0.03229163, -0.024020651, -0.009519429, -0.053779367, -0.022075951, 0.02282022, -0.028258177, 0.017922455, 0.0047567133, 0.010311713, -0.056996528, -0.05133049, -0.0065903733, -0.019278944, 0.040214483, -0.030971155, -0.016722022, -0.026673608, 0.003271178, 0.035052624, 0.009477413, -0.00095659454, 0.026913693, -0.028330203, -0.0299868, 0.01490937, -0.014873357, -0.008739147, 0.013852989, 0.0496979, -0.05622825, -0.0029215522, 0.025209079, -0.12388462, 0.0060801897, 0.05766877, -0.024068668, -0.0006898735, -0.032267623, 0.00015127323, 0.054163508, 0.009039256, 0.05944541, 0.038389828, 0.015701655, 0.04595255, -0.023528473, 0.04955385, 0.011362093, -0.018090516, -0.0016550961, 0.008769158, 0.004381578, 0.0013264777, -0.030034818, -0.03495659, -0.019002844, 0.04040655, -0.010647835, 0.0039884364, 0.029074471, -0.012544518, -0.0010128648, 0.02926654, 0.04645673, 0.01374495, 0.08974432, -0.020107241, -0.010749872, 0.02732184, -0.00038638915, 0.07039335, -0.0008493059, -0.014093076, 0.029530635, 0.025713261, 0.04451203, -0.011302071, -0.037693575, -0.03923013, 0.03937418, -0.003934417, 0.01996319, -0.043359615, -0.06189429, 0.036445126, 0.02229203, 0.019927178, 0.020731466, 0.010101638, -0.007388661, -0.0070405356, 0.05675644, 0.065591626, -0.04347966, -0.06429516, -0.036853272, 0.005530992, -0.04278341, -0.007460687, 0.050130054, -0.0056930506, -0.057044543, -0.022604141, -0.04451203, -0.008096917, 0.0038473858, -0.0063923025, -0.0147173, -0.051186435, 0.024920976, -0.03634909, -0.017706377, 0.0018681728, -0.07231405, -0.014129088, 0.06794447, 0.023588495, 0.004480614, -0.0038143739, -0.026505547, -0.009165301, -0.0010781382, -0.022388063, -0.013876998, 0.024428798, -0.026913693, 0.02446481, 0.043695737, -0.012976673, -0.02556921, -0.06102998, -0.02785003, 0.0299868, -0.015617625, 0.014669283, 0.05925334, -0.003065604, 0.015845707, -0.011103999, 0.015341525, -0.06395903, 0.046552766, 0.051234454, 0.031715423, 0.017238209, -0.04227923, 0.020527393, -0.04148694, 0.02501701, -0.0043875803, 0.02962667, -0.006194231, -0.0061372104, -0.045904532, 0.0014930377, 0.001766136, 0.0040664645, 0.009753513, -0.00018747376, -0.018282585, 0.030659042, 0.026217442, 0.024944983, -0.017778402, -0.027033737, -0.05022609, 0.00026859675, -0.017778402, 0.01960306, -0.015425555, -0.004705695, -0.010101638, -0.0024083673, -0.027729986, -0.002926054, -0.040310517, 0.015821699, 0.02929055, 0.017046139, -0.0057410677, -0.018246572, -0.040766682, -0.0059631476, -0.006566365, -0.0050778287, 0.014957387, 0.018330602, 0.008751152, -0.029746713, -0.033828184, 0.020335324, 0.032795813, 0.027129771, 0.06170222, 0.016662002, 0.004384579, -0.004966789, -0.019651078, 0.03920612, 0.026913693, -0.015209477, -0.002687468, 0.007850828, 0.0099275755, 0.003862391, -0.02396063, 0.023972634, 0.015485577, -0.014357171, -0.0010721361, 0.027465891, 0.0067764404, 0.022616146, 0.009687489, 0.014249132, 0.012142373, 0.061318085, -0.0062542525, 0.017370256, -0.021619786, 0.029530635, -0.0063202763, 0.014405188, -0.03142732, 0.0013182248, 0.022388063, -0.008102918, 0.03706935, -0.023084315, -0.005909128, -0.03051499, 0.008084912, 0.009429396, -0.009153296, 0.004375576, 0.029650679, -6.9986145e-06, 0.010887922, -0.008096917, 0.005750071, 0.0017346247, 0.003487256, -0.029002445, -0.029026454, -0.008823178, -0.021859873, 0.021331683, 0.040862717, 0.0236005, -0.024500825, -0.0344284, -0.00047679673, -0.029074471, -0.013432838, -0.0294346, -0.006017167, 0.0012507004, 0.02357649, 0.007484696, 0.065783694, 0.006650395, 0.030394947, -0.04376776, -0.0063202763, 0.02246009, -0.019386983, -0.05622825, 0.025137054, 0.0023813576, -0.002818015, 0.010317716, 0.03500461, 0.06439119, 0.033828184, 0.003484255, -0.024872959, -0.02013125, -0.015533594, -0.07745189, -0.01438118, -0.028978437, 0.024993, -0.0050958353, 0.030587016, 0.01863071, -0.038221765, 0.0031781446, 0.028066108, -0.010569807, -0.06319076, 0.00957945, -0.01330079, -0.0073226374, -0.0013542378, 0.00084255345, 0.04984195, 0.0077367863, -0.019591056, -0.0028750354, -0.005119844, -0.014069067, -0.024920976, 0.015737668, 0.0029050463, -0.09017648, -0.008421033, -0.0031061186, -0.05714058, 0.004417591, 0.011392103, -0.006434317, 0.0026724625, -0.0056510353, -0.005377937, -0.008270979, -0.04134289, -0.0010293707, 0.05392342, -0.014213119, -0.004423593, -0.015425555, 0.035388745, 0.020791488, -0.0025674247, -0.01577368, -0.038413834, 0.017310234, -0.002307831, 0.022352051, 0.026937703, -0.013384821, -0.011656198, 0.0039554248, 0.012070348, 0.035892926, -0.010533794, 0.04259134, -0.036853272, -0.004264536, -0.00010775756, -0.0067404276, -0.035340726, 0.0169381, -0.018114524, 0.018234568, 0.035556804, -0.03810172, 0.0050328127, -0.0049127694, 0.003976432, 0.008841184, -0.048185356, -0.0066924104, 0.0102516925, 0.017226204, 0.015017409, 0.0011486637, -0.025329122, 0.007928856, 0.003640311, -0.018570688, -0.02368453, 0.027778005, 0.07442681, -0.016950104, 0.008781163, 0.014141093, -0.04945781, -0.0030415955, 0.00735865, 0.040718663, 0.014957387, -0.011350088, 0.045760483, -0.012448483, -0.004168501, 0.009057262, -0.008240968, -0.0124965, 0.022484098, 0.00674643, -0.01127206, 0.004297548, -0.012892643, -0.020347329, -0.0032621748, 0.019819139, -0.019002844, 0.024752915, -0.022051942, 0.0009903567, 0.017586334, -0.032939862, 0.024452807, 0.042159185, 0.049937986, 0.039830346, 0.03406827, -0.020275302, 0.012166382, -0.052194797, 0.031691413, -0.0045496384, -0.036997326, -0.017058143, -0.0026529555, 0.008282983, -0.026001364, -0.018582692, 0.014213119, 0.029242532, -0.009657478, 0.013816976, -0.0438638, -0.019278944, 0.027057745, -0.008721141, 0.012940661, 0.011001962, -0.005083831, 0.033636115, -0.026241452, -0.0035982959, -0.03245969, -0.04876156, 0.018774763, -0.029218523, 0.043551687, -0.023384422, -4.011601e-05, -0.024944983, 0.013360812, -7.845013e-05, 0.012280423, -0.009471411, -0.024584854, 0.004945781, 0.014681287, 0.028834386, 0.0012739588, 0.018162541, 0.040526595, -0.020227285, -0.032579735, 0.0026994722, -0.00041639997], [-0.01794873, 0.012526588, -0.006025645, 0.015772369, 0.023889948, 0.011525962, 0.0014462174, 0.027817406, -0.027367122, 0.07229523, -0.023552237, -0.02921828, 0.01352096, -0.009887436, 0.028467812, -0.01064416, -0.022001266, -0.012757982, 0.040375262, -0.007829899, -0.049556006, -0.041225795, -0.023051923, -0.00880551, 0.041951247, 0.013258295, -0.0049812417, 0.016122587, 0.026991889, -0.004312073, 0.024190135, 0.017923715, 0.021663554, -0.0583365, 0.013308327, -0.017811144, -0.015734846, 0.039149497, -0.0066729253, 0.029618531, -0.059036937, -0.025478441, 0.019412145, -0.054484088, 0.0015970931, -0.04930585, 0.015384626, 0.029193265, 0.018699199, -0.030469064, -0.0034740486, -0.012145099, -0.0017776748, -0.02440277, -0.0016307078, 0.003952473, 0.051682338, 0.043227047, 0.013358358, -0.042826798, -0.042826798, -0.0033395896, 0.08175115, -0.007986247, -0.008480306, 0.045078203, 0.0039868695, 0.013145725, -0.0061225807, 0.039099462, -0.0065791165, 0.025691075, 0.02531584, -0.032820534, 0.009818643, -0.020687943, 0.034596648, 0.0010530025, -0.021088194, -0.032895584, 0.026266435, -0.025390886, 0.019324591, 0.021200765, 0.021638539, 0.00044637304, 0.0039556, -0.13248289, -0.017798636, 0.009862421, 0.021701079, -0.014108827, 0.045678582, 0.018674184, -0.0067167026, 0.0058630435, -0.019974997, 0.022601642, -0.03319577, 0.021038163, -0.01090057, -0.026566623, -0.07074426, -0.02514073, 0.034496583, 0.031119471, 0.015059423, -0.009230776, -0.010906824, 0.0086679235, 0.013621022, -0.023502205, 0.03434649, 0.037648555, -0.021951234, 0.05298315, -0.0042182645, -0.012326462, -0.011832403, 0.008793002, -0.096110135, -0.04820516, 0.08855541, 0.0037898712, 0.038073823, -0.0279675, -0.05143218, 0.044377767, 0.015759861, -0.01340839, -0.015409642, 0.007417141, 0.025440918, 0.01783616, 0.048530366, 0.010150101, 0.08840531, -0.028492827, -0.025190761, -0.008236404, -0.07754852, 0.0077673597, -0.046804283, 0.04647908, -0.0058411546, -0.0497061, 0.010300195, 0.008549099, -0.04280178, -0.05143218, -0.025540981, -0.054283965, -0.0031660434, 0.019687317, 0.039024416, -0.012020021, 0.011688563, 0.032370254, -0.021826155, 0.06253913, 0.015959986, -0.086854346, -0.0035428416, -0.012270177, 0.024315214, -0.051582273, 0.050481584, -0.008192626, -0.028267687, 0.03026894, 0.033345863, -0.06138841, -0.0022170122, -0.0329206, -0.038073823, 0.05020641, 0.038298965, 0.0088117635, -0.020662928, -0.044953126, -0.034771755, 0.059687346, 0.09550976, -0.040250182, -0.025065683, 0.074946895, -0.009230776, -0.0039931233, 0.050431553, -0.020737976, -0.040425293, 0.02819264, -0.023977503, -0.033896208, -0.021626031, -0.062339004, 0.0035834922, 0.01489682, 0.037598524, -0.0035459686, -0.022351485, -0.06358979, 0.026441544, 0.048080083, -0.011213266, 0.0014915583, 0.06343969, -0.0051469705, 0.0076422817, 0.004546595, 0.0062163896, 0.013095694, 0.03894937, -0.015584751, -0.03584743, 0.054534122, -0.05843656, -0.005184494, -0.02744217, -0.04935588, 0.059287094, -0.042651687, 0.007617266, -0.01686055, -0.0022342105, 0.018974371, 0.03957476, 0.002726706, 0.046779267, 0.013120709, -0.030869314, -0.03997501, 0.0041244556, 0.040075075, -0.08945597, -0.027592264, -0.031794894, -0.017861176, 0.026266435, 0.027717343, -0.029193265, 0.06138841, -0.018436536, 0.0034115096, -0.013108201, -0.01691058, 0.01691058, 0.01916199, 0.013058171, 0.012682935, -0.0073108245, -0.0348468, 0.023839917, -0.0010045348, 0.0353221, 0.040875576, -0.0064165145, -0.022401515, 0.019224528, 0.0223765, 0.0021560364, -0.0028986887, 0.0023030036, 0.044502843, -0.026091324, -0.0015126652, 0.020462804, -0.055734873, -0.047354627, 0.0035866192, 0.03227019, -0.03969984, 0.01904942, 0.047079455, 0.06469048, -0.023264557, 0.033470944, 0.012576619, -0.01021264, 0.04245156, -0.022876814, 0.020475311, -0.010619144, 0.0019152608, -0.019136975, 0.009055666, 0.021500953, -0.06764232, -0.022363992, 0.021525968, -0.015709829, -0.017936222, 0.039774887, 0.017673558, 0.071244575, -0.0022217026, 0.054534122, -0.004308946, -0.0715948, 0.04492811, -0.0013578809, 0.022976877, -0.04287683, -0.021901203, -0.0033427165, 0.011995005, -0.042426545, 0.07209511, 0.0027814277, -0.019036911, 0.08620393, -0.0012562547, -0.02744217, -0.019374622, 0.058986906, 0.015809892, 0.0064165145, 0.03146969, 0.08595378, -0.043277077, 0.008361482, -0.023439666, -0.13548477, 0.030469064, -0.005616014, -0.039499715, 0.009480932, -0.020675436, -0.008161357, 0.015909955, -0.047479708, 0.0043152, -0.00917449, 0.0061538504, -0.040800527, -0.07434652, -0.010694191, 0.0032207652, 0.042701717, -0.041375887, 0.025003145, -0.014183874, -0.0002708726, 0.00020090696, 0.004762355, 0.008692939, -0.016372744, -0.0035490957, 0.024778003, -0.010700445, 0.0015970931, 0.0059412173, -0.014696696, 0.017098198, -0.0042088833, -0.039024416, -0.041125733, -0.037073195, -0.0329206, -0.02497813, 0.08125084, -0.06469048, -0.032895584, 0.08000006, -0.031569753, -0.024815526, -0.044377767, 0.011438407, 0.004887433, 0.020212647, -0.058536626, 0.037398398, -0.005397127, -0.053133246, -0.03089433, -0.02146343, 0.061888725, -0.032020036, -0.0054096347, -0.012970615, 0.016360236, -0.06464045, -0.017010644, 0.014696696, 0.058586657, 0.015684813, -0.06368985, -0.010894316, 0.014659172, 0.015146977, -0.026716717, 0.05143218, 0.036823038, -0.045078203, 0.014233906, 0.0418762, -0.050331492, 0.010550351, 0.008899318, -0.004968734, -0.0005417452, 0.04775488, -0.025128223, -0.0009545035, -0.00042018478, -0.053083215, 0.01165104, -0.029193265, -0.016097572, 0.064240195, -0.028367748, -0.00409944, -0.011400883, 0.0058692973, 0.010581621, 0.0279675, 0.00021595543, -0.0030284573, -0.01852409, -0.007979993, 0.015859922, -0.035997525, -0.028042546, 0.04963105, -0.027642295, 0.04230147, -0.024803018, 0.064240195, 0.0066479095, -0.043001905, -0.021563493, -0.0114571685, 0.012332716, -0.005881805, -0.010569113, -0.039224543, -0.0014493443, -0.023652298, -0.01852409, 0.049981274, 0.019749857, -0.0043183267, -0.014534093, 0.070344016, -0.052082587, -0.042726733, -0.03239527, 0.00496248, 0.029993767, -0.06754226, -0.017048167, 0.0050125113, -0.03912448, -0.038624167, 0.003161353, -9.845027e-05, -0.05183243, -0.012245161, 0.053183276, -0.08340219, -0.014796758, 0.009280806, 0.06373988, -0.037723605, 0.007636028, 0.051182024, -0.0295685, 0.026441544, 0.0174234, 0.0423515, -0.0071294606, 0.0132457875, 0.00037992522, 0.016210143, -0.004252661, -0.052732993, -0.001909007, -0.03089433, 0.033470944, -0.012983124, -0.040300217, 0.003373986, 0.020412771, 0.07139467, 0.036197647, -0.006966859, 0.014008765, 0.017786128, 0.040800527, 0.014884313, -0.011025649, 0.047254566, 0.017348355, -0.013170741, -0.017523464, -0.024640417, 0.004681054, -0.050506603, -0.03344593, -0.04532836, -0.006535339, 0.071144514, 0.025065683, -0.007567235, -0.03089433, -0.0070856833, -0.014108827, -0.032245174, 0.07134464, -0.02991872, 0.0026422783, 0.022001266, -0.029643547, -0.020237662, -0.01909945, -0.0070981914, 0.037948743, -0.0038961878, 0.0045028175, -0.005184494, 0.011344598, -0.052783027, -0.041050684, -0.01973735, -0.01478425, 0.0018120713, 0.018273933, -0.0023733599, -0.0053689843, -0.04010009, 0.023227032, -0.014446539, 0.012432779, -0.0008388061, 0.01403378, -0.022138853, 0.002474986, 0.030944362, -0.021500953, 0.010794254, -0.042676702, 0.053483464, -0.007692313, 0.011676055, -0.004903068, 0.02197625, 0.035197023, 0.006178866, -0.036622915, 0.026616653, -0.032720473, 0.03227019, -0.0030628538, 0.0075109494, 0.037773635, -0.013358358, -0.04993124, -0.051232055, -0.009974991, -0.019574748, -0.021550983, 0.036973134, 0.11787375, 0.015997509, -0.014521586, -0.028742984, 0.016260173, 0.02819264, -0.030243924, -0.010187624, 0.025816152, 0.028868062, 0.025766121, -0.047379646, -0.039074447, 0.03089433, 0.023164494, -0.042326484, -0.003661666, -0.018574122, -0.04452786, 0.0062851827, 0.04913074, -0.01904942, 0.021013148, -0.010387749, 0.010838031, -0.06809261, -0.031719845, -0.009687311, -0.010925586, 0.0030644173, -0.0059162015, -0.030644173, 0.0018996261, 0.009756104, 0.032370254, 0.006307071, 0.012188876, 0.035021912, -0.044903096, -0.008317704, -0.011744848, -0.02911822, -0.048130114, -0.0037617288, 0.024840543, -0.02766731, -0.0072295233, 0.042376515, -0.0696936, 0.004374612, 0.085503496, -0.05023143, 0.021025656, -0.037648555, -0.00046591653, 0.05288309, -0.00018458815, 0.028442796, 0.0006793313, -6.4982065e-05, 0.022176376, -0.027317092, 0.034046303, 0.018098824, 0.015084438, -0.023327095, 0.0038711722, 0.003796125, -0.0295685, -0.030218907, -0.039949995, -0.03464668, 0.02934336, -0.0012023147, -0.03139464, 0.02376487, -0.019399637, -0.00024800675, 0.052382775, 0.03479677, -0.0051282085, 0.1281802, -0.036547866, -0.013608514, 0.025503457, 0.01064416, 0.049255818, -0.0045809913, -0.030944362, 0.03402129, 0.010925586, 0.04492811, -0.006491562, -0.02323954, -0.029593516, 0.002118513, 0.008155103, 0.00805504, -0.029043172, -0.031369627, 0.022839291, 0.049806163, 0.0046966886, -0.0015540974, -0.00026872283, 0.01737337, 0.0010616017, 0.049856193, 0.0489056, -0.04377739, -0.028117593, -0.011976243, -0.01996249, -0.025465934, 0.011626024, 0.053983778, 0.0025906835, -0.030293955, -0.022501579, -0.068993166, -0.023689823, -0.00640088, -0.0026563494, -0.0018105078, -0.056485344, 0.0018683565, -0.018373996, -0.03369608, -0.00794247, -0.050556634, -0.008211387, 0.03186994, 0.031544738, -0.0066041322, 0.020162616, -0.045103222, 0.008223896, -0.0011991878, -0.023802392, -0.028267687, 0.011131965, -0.012808014, 0.019724842, 0.03474674, -0.0006457165, -0.013495944, -0.03204505, -0.01703566, 0.030394018, -0.017961238, 0.02392747, 0.075997554, 0.01668544, 0.019899951, -0.055784903, 0.01617262, -0.06604132, 0.028492827, 0.00730457, -0.008749224, 0.010750476, -0.04537839, 0.02290183, -0.012495318, 0.033746116, 0.01973735, 0.012526588, -0.0018105078, 0.0068730502, -0.05638528, -0.018123839, 0.0079925, 0.017986253, -0.008974365, 0.020262677, -0.007948724, 0.015809892, 0.036773007, 0.016772995, -0.03509696, -0.0045528486, -0.04230147, -0.02934336, 0.011031902, -0.008880557, -0.005756727, 0.003508445, 0.004468421, 0.005809885, 0.002127894, 0.011494692, -0.018549105, 0.011969989, 0.03602254, 0.025015652, 0.018949356, -0.01219513, -0.034496583, -0.011894942, 0.011607262, 0.002795499, -0.0007473426, 0.00716073, -0.0046966886, -0.019036911, -0.05183243, 0.034096334, 0.061138254, 0.021676062, 0.055884965, -0.014446539, -0.029318344, 0.007548473, 0.013545975, 0.022514086, 0.009424646, -0.0209381, -0.014721711, 0.022539102, 0.025490949, 0.018361488, -0.024640417, 0.03262041, 0.0018433408, 0.012188876, -0.018173872, -0.009787374, 0.008261419, 0.033520974, 0.03176988, 0.004662292, 0.02232647, 0.04345219, -0.002915887, 0.03842404, -0.03544718, 0.007417141, 0.018399011, 0.0073546018, -0.037148245, 0.011582247, -0.0053439685, -0.021713587, 0.03139464, -0.031719845, -0.019987505, -0.031269565, 0.03709821, 0.009418393, -0.0010709825, 0.005540967, 0.053583525, 0.0060694227, 0.0021466557, -0.0088117635, 0.0032176382, -0.006610386, -0.0055847443, -0.031219533, -0.003119139, 0.012664174, -0.013270804, -0.00087242085, 0.05408384, 0.026091324, -0.019687317, -0.021088194, 0.006397753, -0.029818658, -0.04045031, -0.023902455, 0.005456539, -0.008717955, -0.0011303948, -0.0020309582, 0.0640901, 0.023652298, 0.009274553, -0.022514086, 0.019599764, 0.038123854, -0.018899325, -0.05823644, 0.0073420936, 0.019374622, -0.020612897, -0.0054252697, 0.050406538, 0.043101966, 0.029893704, 0.00276892, -0.0180613, -0.010969363, 0.0033239548, -0.059637316, -0.023652298, -0.028317718, 0.010000007, 0.006679179, 0.04660416, -0.0054815547, -0.043177016, 0.021988759, 0.0044183894, -0.029143235, -0.058886845, 0.010118831, -0.021525968, 0.0016682313, 0.013383374, 0.01064416, 0.046454065, 0.0119199585, -0.028818032, -0.0046560382, -0.0126016345, 0.019374622, -0.036973134, 0.016360236, 0.03377113, -0.051682338, -0.011200758, -0.00063242693, -0.043902468, 0.028217655, -0.0017464051, -0.029768625, -0.015459673, -0.0096685495, -0.009149475, -0.022001266, -0.0073733632, -0.0035584765, 0.06619141, -0.03904943, -0.004158852, -0.014984376, 0.017498448, 0.0034740486, 0.023402141, -0.00974985, -0.041050684, -0.0019136973, -0.0051407167, 0.013658546, 0.010600382, -0.05120704, -0.012426525, -0.005953725, 0.023439666, 0.03422141, 0.017510956, 0.05073174, -0.030193891, -0.0122076385, -0.008936842, 0.006169485, -0.02352722, -0.014221398, -0.017385878, 0.0108130155, 0.018449044, -0.015334595, -0.00088102, 0.008261419, 0.03197, 0.0028033166, -0.034321476, -0.025340855, 6.165967e-05, 0.0073671094, 0.021213273, 0.0119574815, -0.025916215, 0.008223896, -0.013220772, -0.0093120765, -0.015547228, 0.049831178, 0.08445284, -0.05303318, 0.013483437, 0.03957476, -0.024065057, -0.02456537, 0.041626044, 0.014446539, -0.020262677, -0.008386497, 0.052282713, -0.014521586, -0.004965607, 0.022589134, -0.009587249, -0.016185127, 0.0026141356, 0.020637913, 0.017523464, 0.0047779894, -0.020300202, -0.02899314, -0.004956226, 0.031069439, -0.012789252, 0.00842402, -0.00142042, -0.0037523478, 0.022764243, -0.014734219, 0.0201376, 0.004749847, 0.017223276, 0.03492185, 0.029043172, -0.0127079515, -0.018486567, -0.03969984, 0.039149497, 0.006454038, -0.035347115, -0.016873058, -0.0006246095, 0.0008567861, -0.0055691097, 0.0015884939, 0.002340527, -0.009681057, -0.01656036, 0.041851185, -0.022639165, -0.00016885565, 0.023777377, 0.0043152, 0.025741106, 0.008899318, -0.026191387, -0.0021888695, -0.020287694, -0.0345216, -0.01921202, -0.030043798, 0.013633531, 0.0057817427, 0.025591012, -0.010794254, 0.013533467, -0.0316448, -0.00701689, -0.005025019, 0.013846164, -0.019036911, -0.014871805, -0.047029424, 0.05983744, 0.022939352, -0.021563493, -0.004615388, -0.003317701, -0.032745488, -0.030569127, -0.009268299, -0.012983124], [0.00965674, 0.003063987, -0.014517674, 0.018224062, 0.010023827, -0.02058052, -0.02794593, 0.057786502, -0.039147984, 0.036045514, -0.015133432, -0.028703786, 0.04701074, -0.042321507, 0.034079827, -0.021812035, -0.024559263, -0.0324457, -0.028822202, -0.021717304, -0.016814925, -0.04828962, -0.026477585, -0.027851198, -0.011249421, -0.003999465, -0.03490873, 0.039219033, 0.023150126, -0.00087479054, 0.008555481, 0.038058568, 0.040000573, 0.01853194, 0.027377538, 0.013286158, 0.014908443, 0.045305565, -0.0068207015, -0.015524201, -0.06294939, 0.019716091, 0.0009362183, -0.0392664, 0.023919823, -0.014742662, -0.006601634, 0.021847561, -0.02414481, -0.013487464, -0.0036708638, 0.03632971, -0.012255948, -0.031853624, -0.03443507, 0.04035582, 0.060012702, -0.034482438, 0.018271428, -0.030124767, -0.03497978, 0.026477585, 0.067543894, -0.020959448, -0.0016074831, 0.0050622397, 0.0017051754, 0.04092421, 0.039597962, 0.024417166, 0.01812933, 0.020047653, 0.039432183, -0.017134644, 0.041847847, -0.041895214, 0.08516404, 0.026288122, -4.574703e-05, -0.05873382, 0.037277028, -0.006749653, -0.008969933, -0.023635626, 0.05129736, 0.0020219355, -0.009739631, -0.10733132, -0.03166416, 0.01290723, 0.0018457932, 0.040640015, -0.01599786, -0.015784714, -0.051013164, 0.02723544, 0.010414596, 0.031356283, -0.023161966, -0.013783501, 0.013250634, -0.061670512, -0.08644292, -0.05295517, 0.0034014697, 0.04101894, 0.009964619, 0.0023002105, 0.009147556, -0.012013198, 0.025340801, 0.0031646397, -0.048739597, 0.044902954, 0.022984345, 0.05129736, -0.019372687, -0.018981919, 0.0035021224, -0.02066341, -0.099279106, -0.051771022, 0.053949855, 0.004331027, 0.066975504, -0.008928488, -0.05295517, 0.039455865, 0.0070042447, -0.03362985, -0.024748726, 0.0046951533, 0.02342248, 0.041042626, 0.01116061, 0.0042392556, 0.030456327, -0.015322896, -0.034340337, 0.010799444, -0.09492143, 0.00049068197, 0.0032830548, 0.055465568, -0.033416703, -0.012326998, 0.0031764812, -0.013333525, -0.017276743, -0.017821452, 0.0036294186, -0.06323359, -0.025790779, -0.0036619827, -0.0040320293, -0.023398796, 0.0032179265, 0.06181261, -0.03483768, 0.015903128, 0.0172649, -0.019775297, -0.0023579379, -0.0106218215, -0.002572565, -0.021077862, 0.053949855, 0.01084089, -0.004600421, 0.03261148, 0.07294361, -0.024097444, 0.023623785, -0.0692017, -0.015962336, 0.09511089, 0.04954482, 0.026714414, -0.016874133, -0.043979317, -0.016980706, 0.070670046, 0.064465106, -0.05342883, -0.030337913, 0.06522296, 0.017750403, 0.005192496, 0.046797592, -0.027259124, -0.013890075, 0.023517212, -0.022072548, -0.06465457, -0.05461298, -0.030101083, 0.013120377, 0.03483768, 0.017987233, 0.026596, -0.0088455975, -0.047081787, 0.039384816, -0.048384354, -0.060912654, -0.02960374, 0.015630774, -0.003460677, 0.03696915, 0.0011567662, 0.0324457, -0.017442524, 0.021551523, -0.0094021475, -0.015772874, 0.032966726, -0.032493066, -0.03910062, -0.010633663, -0.05887592, 0.020994972, -0.042226776, -0.004940864, -0.024677677, -0.020047653, 0.03031423, 0.01938453, 0.013380891, 0.050302677, 0.021492315, -0.019751616, -0.053523563, -0.046916008, 0.011894783, -0.10676293, -0.02920113, -0.016957022, -0.012599352, 0.038816422, 0.007939723, 0.0153347375, 0.061149485, -0.010604059, -0.004931983, -0.039953206, 0.020201592, 0.0034162716, -0.058165427, 0.019360846, -0.021598889, 0.027259124, -0.048265938, 0.048147522, 0.061386317, 0.0016814924, 0.050444774, 0.021752829, 0.0155005185, 0.05162892, 0.0058615403, -0.006761494, 0.02003581, -0.016921498, 0.07772758, -0.003395549, 0.026951244, 0.0011848897, -0.08180106, -0.04779228, -0.018958235, 0.05295517, -0.016258374, 0.031356283, 0.0007741378, 0.034790315, 0.004576738, 0.03666127, 0.04883433, -0.032990407, 0.039597962, 0.021148913, 0.069864824, 0.01662546, 0.030053716, 0.029698472, -0.012102009, 0.014186112, -0.04487927, -0.036045514, -0.00031250448, -0.018401684, 0.01962136, 0.049355354, 0.018638514, 0.050397407, 0.020355532, 0.04383722, -0.0038188824, -0.045400295, 0.024985557, -0.020462105, 0.018295111, -0.041942578, -0.0202608, -0.023458004, 0.006903592, 0.018484576, 0.061575778, -0.026548633, 0.00902322, 0.06683341, -0.01297828, -0.0010013465, -0.05494454, -0.004301423, -0.053381465, 0.0067555737, 0.04322146, 0.05617606, -0.0052694655, 0.0034310734, -0.030929988, -0.032824628, 0.019881872, 0.02818276, 0.015879447, 0.00506816, -0.046655495, -0.027827516, -0.0074364594, -0.022664623, -0.007975248, 0.019349005, 0.0008511075, -0.025696047, -0.07739602, -0.026809147, -0.05200785, 0.010479724, 0.011036274, 0.003531726, -0.010888255, -0.031285234, -0.041847847, 0.02666705, -0.002175875, 0.0054352465, 0.0010538931, 0.019206906, 0.039124303, 0.0013699131, 0.041966263, 0.009775155, 0.0042629386, 0.013262476, -0.030693159, -0.003419232, -0.020841032, -0.012119771, -0.021658096, 0.042060994, -0.0035761318, 0.0056128693, 0.06498613, -0.026288122, -0.021255486, -0.0083482545, 0.016803082, 0.01100075, -0.017620146, -0.040403184, -0.0012848023, -0.025056606, -0.060344264, -0.02177651, -0.028514322, 0.03701652, -0.01210793, -0.038982205, 0.0073417276, 0.0049675074, -0.032327283, -0.013463781, 0.004946785, 0.06403881, -0.0038988125, -0.03569027, 0.009638978, 0.010823128, -0.0036205375, -0.004076435, 0.006151657, 0.012729608, -0.026240755, 0.022119915, 0.010574456, -0.028466957, 0.038366448, -0.023067234, 0.017430682, 0.022048866, 0.03142733, 0.004810608, -0.01701623, 0.017478049, -0.06730706, 0.034790315, -0.019325322, -0.00029474223, 0.00625231, -0.012575669, 0.03706388, -0.045163468, 0.014553199, -0.00022369326, 0.044121414, 0.004946785, -0.04693969, -0.017916184, 0.015725506, 0.055749763, -0.04395563, -0.048479084, 0.04656076, -0.068728045, 0.023458004, -0.042132042, 0.04504505, 0.006625317, -0.029177446, -0.03831908, -0.016057068, -0.0030255022, 2.180963e-05, -0.019976603, -0.032966726, -0.01100075, 0.013546672, -0.032019407, 0.047389667, 0.06692813, -0.03412719, 0.0063766455, 0.044855587, -0.040663697, -0.001273701, -0.074980356, -0.036992833, 0.04779228, -0.0167794, -0.0190056, -0.0022454436, -0.057881232, -0.05120263, 0.07128581, -0.0026480546, 0.020758143, 0.01013632, -0.0323036, -0.07526455, 0.03166416, 0.009106111, 0.03443507, -0.0005650614, 0.014553199, 0.02042658, 0.03410351, 0.016282057, 0.01630574, 0.038200665, -0.048313305, 0.010740237, -0.01210793, 0.03846118, -0.013901916, -0.03521661, -0.021066021, 0.021823877, 0.035903417, -0.013357207, -0.00082816463, -0.012255948, 0.011823733, 0.06574398, 0.009100189, -0.012954596, 0.018863503, 0.03872169, 0.03673232, 0.007448301, -0.067733355, 0.05342883, 0.028135395, 0.0008503674, -0.015737347, -0.02730649, -0.045637127, -0.07062268, -0.01385455, -0.016495204, 0.0058911443, 0.0416347, 0.004407997, 0.012291473, -0.018472733, -0.051865753, -0.031001037, -0.006554268, 0.031711526, -0.016708352, 0.029272178, -0.004138603, -0.030598426, -0.0032948963, -0.038650643, -0.007471984, 0.0150387, 0.001527553, 0.010609981, 0.029082714, -0.014197954, -0.030266864, -0.038958523, -0.010154082, -0.033014093, 0.014505832, 0.022617258, -0.011835575, 0.08710604, -0.015891287, 0.037253346, -0.02406192, -0.02280672, -0.0071996297, 0.01637679, 0.0033985095, 0.001527553, 0.0024793132, -0.0063588833, 0.050160576, -0.009230446, 0.03869801, -0.04061633, 0.050160576, -0.019668724, -0.008360096, 0.048336986, -0.00585858, -0.012812499, 0.016092593, -0.022629099, 0.009100189, -0.0048224493, 0.03365353, 0.022143597, -0.0111487685, -0.02643022, -0.040237404, -0.032493066, -0.021018656, -0.019573992, 0.0019804903, 0.105247214, 0.0323036, 0.0017110961, -0.027732784, 0.033345655, 0.022214647, -0.010752078, -0.015157115, 0.0021936372, 0.025790779, 0.025151338, -0.017300425, 0.02287777, 0.06432301, 0.054281417, -0.015737347, -0.02335143, -0.02541185, -0.0427478, -0.012054643, 0.022925137, -0.033842996, 0.0004740299, -0.04615815, 0.0033985095, -0.06323359, -0.00073343265, 0.0011708279, -0.020450264, 0.048739597, 0.019372687, -0.02730649, -0.009112031, 0.015311054, 0.042534653, 0.01599786, 0.01899376, 0.07081214, -0.047034424, -0.025932876, 0.014671613, -0.010195528, -0.04172943, 0.0035554091, 0.00090365415, -0.024961874, 0.038105935, 0.028561689, -0.070670046, 0.043718804, -0.008407462, -0.028230127, 0.017229376, -0.051392093, -0.0071463427, 0.039953206, 0.0032948963, 0.040284768, 0.059254847, 0.042771485, 0.017039914, -0.007839071, 0.0053109108, -0.016293898, -0.008460749, -0.012291473, -5.7264733e-05, -0.036921784, 0.01709912, 0.0045945006, -0.018851662, 0.0013010844, 0.013866392, -0.00025533227, -0.009094269, 0.029059032, -0.008028534, 0.008981775, 0.027140709, 0.007815387, -0.02042658, 0.08161159, -0.011415202, -0.03190099, 0.0064003286, 0.015678141, 0.019479262, -0.021563364, -0.026311804, 0.038484864, -0.010047509, 0.06749653, -0.0059325895, -0.011515855, -0.022842245, 0.012954596, -0.0052665053, 0.026596, -0.04343461, -0.0289643, -0.005985876, 0.05451825, 0.0013173664, -0.016660985, -0.010337626, -0.017063595, -0.004482006, 0.024369799, 0.027519636, -0.025909193, -0.014647931, -0.012102009, -0.024511896, 0.00016004522, -0.009946857, 0.027732784, -0.040095307, -0.050918434, -0.032635164, -0.051960483, 0.005408603, -0.02943796, 0.0007778383, -0.013641403, -0.021551523, 0.047768597, -0.014079539, 0.00082816463, 0.014138746, -0.039763745, 0.00411492, 0.060344264, 0.01559525, -0.01100075, -0.020698935, -0.010681029, -0.0056217504, -0.025980242, -0.023304064, -0.07858017, 0.0066904454, -0.017774086, 0.044595074, 0.022037024, 0.018330636, -0.006921354, -0.046679176, 0.0071048974, 0.016732033, 0.016400471, 0.03322724, 0.10600507, 0.008259444, 0.016258374, -0.0015046101, 0.04940272, -0.066217646, 0.007921961, -0.011036274, -0.002002693, -0.016080752, -0.011261263, 0.03287199, -0.056412887, 0.023339588, -0.0130611705, 0.035524487, -0.0049675074, -0.024725044, -0.048550133, -0.023517212, -0.010503407, -0.034932412, -0.00094065885, 0.022013342, -0.04210836, 0.027922248, 0.020000286, 0.0038928918, -0.028632738, -0.030622108, -0.03576132, -0.0055921464, 0.026169706, 0.0014498432, 0.017170168, 0.03199572, 0.0010945983, -0.016874133, -0.01796355, 0.014979493, 0.00054655905, 0.01100075, 0.020000286, 0.008259444, 0.009887649, -0.0028922854, -0.0417768, -0.011539537, 0.014553199, 0.0077443384, -0.029674789, 0.04440561, 0.030266864, -0.03609288, -0.05579713, 0.020402897, 0.03663759, 0.04774491, 0.07265942, -0.031072086, 0.020746302, -0.03782174, -0.0067555737, 0.04566081, 0.012658559, -0.042487286, -0.019301638, 0.02328038, 0.01559525, -0.010799444, 0.00474844, 0.037774373, 0.01892271, -0.009917253, 0.034695584, -0.0038218428, 0.0035554091, 0.04338724, 0.01638863, 0.02010686, 0.015311054, 0.04575554, -0.017513573, 0.03204309, -0.020166067, -0.0067555737, 0.006737811, 0.013416415, -0.050160576, 0.0059177876, -0.013641403, 0.00045219713, 0.019964762, -0.011101402, -0.03450612, -0.033132505, 0.028111711, -0.010308023, 0.012433571, -0.016696509, 0.04549503, 0.009710027, -0.016755717, 0.018733246, -0.030503694, -0.040782113, 0.006435853, -0.011687556, 0.0147781875, 0.015086066, -0.002572565, 0.032587796, 0.053949855, 0.04549503, 0.023244856, -0.02105418, -0.018614832, -0.047081787, -0.01297828, -0.038153302, 0.01321511, 0.023789566, 0.04850277, -0.013167744, 0.061670512, 0.0025710848, -0.025198704, -0.050871067, -0.0033067379, 0.03166416, -0.015618933, -0.040332135, -0.01013632, 0.001638567, 0.0019479261, -0.021338375, 0.037727006, 0.035335023, 0.040284768, 0.01599786, -0.0041830083, -0.046418663, 0.013961124, -0.039029572, -0.029864253, -0.029958986, 0.041350503, -0.035950784, -0.007696972, 0.02350537, -0.054565612, 0.0054914937, 0.005183615, -0.00022017781, -0.061054755, -0.02429875, -0.054328784, 0.0031883228, -0.012102009, 0.02960374, 0.047058105, 0.0074838256, -0.060012702, 0.0007733977, 0.008135107, 0.016637301, -0.042700436, -0.00084740703, -0.0009117952, -0.046229202, -0.0031202342, 0.01836616, -0.044121414, 0.02050947, 0.004635946, -0.024369799, 0.018010916, -0.015607092, -0.010349467, -0.010112638, -0.025601314, 0.018816138, 0.019917397, -0.00083630567, -0.00021185176, 0.010734316, 0.010343547, 0.004920142, -0.003386668, 0.01613996, -0.023256699, -0.0011523255, -0.04362407, -0.04170575, 0.004520491, -0.014304527, 0.0062641515, 0.0034014697, 0.033819314, 0.020616045, -0.042937264, 0.028206443, -0.054281417, -0.045329247, -0.009479118, 0.01796355, 0.013570354, -0.017158328, -0.0066667623, 0.020071335, 0.0048638945, -0.020367373, 0.015263689, 0.00038632881, 0.008904805, -0.015547885, -0.024630312, -0.0070160865, 0.016104434, 0.017939866, 0.009627136, -0.022984345, -0.029461643, 0.034648217, 0.002286889, -0.036542855, -0.005562543, 0.037561227, 0.05328673, -0.014920285, -0.008496273, 0.024748726, -0.027685417, 0.008336414, 0.026335487, 0.021705462, -0.017395157, -0.016708352, 0.03294304, -0.025838144, 0.015512359, -0.00016837128, -0.012398046, 0.0017273782, 0.0073358067, -0.009739631, -0.0071345014, -0.010254735, -0.015180798, -0.02936691, 0.0065720305, 0.037277028, -0.016057068, 0.018010916, -0.04227414, -0.015914971, -0.009230446, -0.045305565, -0.011936228, 0.0010797965, -0.005524058, 0.023102758, 0.035429757, -0.02382509, -0.0013232871, -0.036471806, 0.040782113, 0.010195528, -0.04987638, -0.024109285, 0.019029284, 0.016826766, -0.026738098, -0.054091953, 0.043600388, 0.028040662, 0.0074305385, 0.016637301, -0.04677391, -0.014943968, 0.036140244, -0.002437868, 0.020876557, 0.030053716, -0.032516748, 0.012646718, -0.0043724724, -0.016092593, -0.023019869, 0.005219139, -0.017513573, -0.013570354, 0.017833292, -0.032516748, 0.008194315, -0.05072897, 0.011918466, -0.011930307, 0.025056606, 0.03294304, -0.0049823094, -0.011237579, 0.021575205, 0.023375113, -0.026003925, -0.012125692, 0.087011315, -0.03450612, -0.040000573, -0.024582947, 0.001993812], [0.0078096157, -0.010749706, -0.023842297, 0.037095673, 0.006150072, -0.011174641, -0.0037870894, -0.0044847867, -0.014091762, 0.040058732, -0.05622923, 0.0005778254, 0.028459158, -0.05420792, 0.019926004, -0.011840755, -0.03344353, -0.00845276, -0.06628986, 0.0029400906, -0.0089293765, -0.057056133, -0.02967654, -0.04864931, -0.0028539551, 0.024692167, -0.049200576, 0.021327142, -0.02411793, -0.007424877, 0.030962829, 0.025312342, 0.015022025, -0.0081599, 0.029446844, 0.032088332, -0.0031554291, -0.009865382, -0.021327142, 0.01860526, -0.044721533, -0.0053633684, -0.01311556, -0.049246516, -0.031858638, -0.0015604876, 0.012357568, -0.018019538, -0.01692849, -0.033190865, -0.016262377, 0.006919549, -0.010422391, -0.009176298, -0.0024893149, 0.038726505, 0.0034540321, -0.03987498, 0.03810633, 0.0040454958, -0.072261915, 0.011168899, 0.051865034, 0.0057481066, -0.05342696, -0.010123788, -0.009250949, -0.00417757, 0.03089392, 0.021533865, -0.031904574, 0.0096012335, 0.05071656, -0.016090104, -0.01588338, -0.020592118, 0.05967465, 0.019730764, -0.014608575, 0.023405878, 0.035809383, -0.026093304, 0.032432873, -0.027471472, 0.033558376, 0.00269604, 0.05342696, -0.08223066, -0.041345023, -0.027241776, 0.00806228, -0.010606147, 0.020580634, 0.0038760959, -0.07010278, -0.0012877252, -0.012104904, 0.0050647655, -0.005326043, -0.015676655, -0.0020988341, -0.05126783, -0.07533982, -0.0052198092, 0.021476442, 0.026322998, 0.011306715, 0.0047173523, -0.011381366, 0.016457615, 0.041046422, 0.0148153, -0.010072107, 0.02137308, -0.0027534638, 0.041965198, 0.0088662105, -0.057745215, -0.032111302, 0.0012819829, -0.07763676, -0.032455843, 0.07414541, 0.029745447, 0.026805356, 0.018065479, -0.04860337, 0.040724847, 0.0127365645, -0.01270211, -0.06628986, 0.02834431, 0.03300711, 0.03466091, 0.016239407, 0.018421505, 0.048419617, -0.026782388, -0.02875776, 0.005641873, -0.03342056, 0.006936776, -0.0019021581, 0.022085134, -0.037601, -0.035694536, 0.009974487, -0.0028195009, -0.05246224, -0.03633768, 0.0011398593, -0.04543359, -0.01505648, 0.025886578, 0.013517526, -0.0016279602, 0.0029271701, 0.007355969, -0.011559379, 0.011794817, -0.00012947238, -0.052967567, -0.01692849, 0.038381964, 0.010462588, -0.0861814, 0.082644105, 0.004823586, -0.060271855, 0.04325149, -0.0015576163, -0.03773882, 0.01566517, -0.011456016, 0.010416649, 0.03468388, 0.03631471, 0.03815227, 0.023015397, -0.06408478, -0.033719163, 0.035717506, 0.08636516, -0.012162328, -0.008504442, 0.032754447, 0.015538838, 0.012173813, 0.045617342, 0.007958917, -0.045180924, -0.010692283, -0.053059448, -0.020890722, -0.017548665, -0.035740476, 0.016871067, -0.02202771, -0.0020026495, 0.032340996, 0.020121245, -0.03769288, 0.021889893, -0.004068465, -0.042975854, -0.0035889777, 0.02625409, 0.011944118, -0.008395337, -0.024163868, 0.008803044, 0.03133034, 0.0094749015, -0.0023385778, 0.009985971, 0.020190153, -0.056091417, -0.0022065034, -0.03227209, -0.050532807, 0.06284443, -0.04116127, 0.028941516, -0.02710396, -0.001190105, 0.036682222, 0.0171467, 0.029331997, 0.03472982, 0.028459158, 0.0074995277, -0.037302397, -0.023566663, 0.021820985, -0.09729862, -0.018593775, -0.047133327, 0.0128514115, 0.036659256, 0.006730051, 0.0304575, 0.039576374, -0.030158898, -0.015848925, 0.004714481, 0.040747818, 0.008073764, -0.020224607, -0.025932517, 0.00080752, -0.02050024, -0.046765815, -0.004817844, 0.00740765, 0.003402351, 0.052232545, 0.041390963, -0.03649847, 0.024738105, -0.019122073, 0.0050561517, 0.03976013, 0.005690683, 0.09693111, -0.0076201176, 0.02492186, 0.016606918, -0.08801896, -0.06578453, 0.0037928317, -0.013620888, -0.029929202, 0.017525695, 0.0037756045, 0.048189923, -0.041781444, 0.053151324, 0.026024396, -0.022601945, 0.07125126, 0.009492128, 0.034454186, 0.0025740147, -0.0055212835, 0.04189629, 0.033167895, -0.05632111, -0.006419963, 0.00020188, -0.018008055, -0.010652086, -0.075202, 0.08383852, 0.025633914, 0.074788556, 0.0009137537, 0.017766876, 0.009038482, -0.05664268, 0.05131377, -0.061144695, 0.009641429, -0.03222615, -0.06560077, -0.01695146, 0.016538009, 0.012058965, 0.080163404, -0.02135011, -0.026483783, 0.07258348, 0.011570864, -0.0032358223, -0.0030980057, 0.007901493, -0.026391907, -0.023084305, 0.010990885, 0.09518543, -0.0016351383, 0.0075110127, -0.033948857, -0.102351904, -0.014528181, 0.027471472, 0.0043957797, -0.016974429, -0.005578707, -0.029538723, 0.012748049, -0.09601233, -0.028252432, -0.0032875035, 0.014505212, -0.027907891, -0.080209345, 0.00922798, -0.048189923, -0.039461527, 0.0016107332, 0.0019150785, 0.035258118, -0.03204239, -0.024829984, 0.0024175353, -0.025473129, -0.033719163, 0.012139359, 0.007826842, -0.045824066, 0.0014413334, 0.041712534, 0.011088505, -0.015401022, 0.029033395, 0.009394508, -0.031192522, -0.049338393, -0.029607631, -0.012725079, 0.03440825, -0.0600881, -0.013885037, 0.06863274, -0.0074765584, 0.012782503, -0.046398304, 0.023865266, 0.01544696, 0.025542036, 0.0058026593, -0.002345756, -0.036636285, -0.04026546, 0.0025338184, -0.009451931, 0.058709934, 0.001488708, -0.027816013, -0.0026371807, -0.010123788, -0.044308085, 0.010692283, 0.010422391, 0.017043337, 0.017881723, -0.0708378, 0.019087618, 0.0007077464, 0.004995857, -0.028022738, -0.007120532, 0.006804702, -0.02492186, -0.016021196, 0.042011138, 0.006356797, 0.022556007, 0.013862068, -0.01904168, -0.011685711, -0.0178243, -0.01736491, -0.010330513, 0.031996455, 0.031468157, -0.011748877, -0.0397831, -0.023934174, 0.053840406, -0.05108407, 0.03771585, -0.056045476, 0.06886243, 0.011553637, 0.025105616, 0.026391907, -0.02135011, 0.016974429, 0.015022025, 0.043619, -0.057285827, 0.022590462, 0.03987498, 0.017158184, 0.038221177, 0.01292032, 0.003672242, -0.043756817, -0.02217701, -0.011421563, 0.017594604, -0.012656171, 0.035671566, -0.027310684, -0.05071656, -0.054253858, -0.014172155, -0.0014700453, 0.0036492725, 0.025312342, -0.01860526, 0.0046168608, 0.06964339, -0.011421563, -0.013127045, -0.05338102, -0.029033395, 0.045663282, -0.014930148, -0.026920203, -0.020293515, -0.0768558, 0.012139359, 0.036153927, -0.004289546, 0.0049929856, -0.0041057905, 0.014631544, -0.03971419, 0.03638362, 0.015182812, 0.015492899, -0.025312342, 0.035855323, 0.04187332, -0.037302397, 0.03849681, -0.014172155, 0.013953946, -0.064222604, 0.024738105, -0.020431332, -0.033259775, -0.027149899, -0.03507436, -0.032295056, -0.012966258, 0.04694957, -0.010382195, -0.019730764, -0.04276913, 0.028091647, 0.004140245, 0.026506754, -0.013150014, -0.00086853263, -0.016239407, 0.07805022, 0.0050647655, -0.034569032, 0.05080844, -0.012219751, 0.009905579, -0.027471472, -0.02786195, -0.019857096, -0.036429558, -0.020844782, 0.0015777146, 0.03176676, 0.05632111, 0.034569032, 0.0107439635, -0.014643029, -0.01886941, -0.029423876, -0.033627287, 0.016595433, -0.022578977, 0.028482128, -0.027379593, -0.029056363, -0.004680027, -0.018008055, 0.0078211, -0.005656229, 0.044997167, 0.007568436, 0.039599344, -0.018995741, -0.035349995, -0.049430273, -0.010158243, -0.03652144, -0.002965931, 0.033328682, -0.01826072, 0.07014872, 0.006333828, 0.023003912, -0.011932633, -0.05558609, -0.022154042, -0.010881781, -0.006167299, 0.034109645, -0.0050159553, -0.013069621, 0.03468388, -0.049200576, 0.048465554, 0.023911204, 0.04357306, 0.0067702476, 0.04364197, 0.046421275, -0.01377019, -0.031927545, 0.039530437, -0.026070334, 0.06624392, 0.0037239233, 0.00718944, 0.008584835, -0.03649847, -0.037026767, -0.0532432, -0.0050819926, -0.008699682, 0.008010598, 0.01224272, 0.043435242, 0.008464245, -0.012771018, -0.033213835, 0.060915, 0.0120130265, -0.012529839, -0.040449213, 0.011760362, 0.03387995, 0.003499971, -0.0061098756, -0.044262145, 0.07414541, -0.016572464, -0.005862954, 0.021625744, -0.018214779, -0.036751132, 0.0020973985, -0.011725908, -0.04327446, -0.0038330283, -0.00014508443, -0.013586434, -0.032869294, -0.010100819, 0.048189923, -0.017330455, 0.030641256, 0.011387109, -0.010554465, 0.03218021, 0.015044995, 0.02222295, -0.0029716736, 0.027907891, 0.06270662, 0.018387051, -0.026300028, 0.01603268, 0.010950689, -0.06973527, -0.015194296, 0.016595433, -0.048052106, 0.024071991, 0.00750527, -0.049659967, 0.044744503, 0.01355198, -0.046903633, 0.014654513, -0.028688852, -0.0065175835, 0.060731247, 0.014470758, 0.043481182, 0.028596975, -0.023865266, 0.08259817, -0.028574005, -0.0040598516, -0.012518355, -0.0039507467, 0.028252432, -0.021223778, -0.020856267, -0.021602774, -0.010364967, 0.015630716, -0.04446887, -0.0045048846, -0.021017054, 0.017031852, 0.04644424, -0.053564776, 0.018490413, 0.026116272, 0.042815067, 0.009899836, 0.07313475, -0.009360054, -0.0040885634, 0.039599344, 0.006017998, 0.07832585, 0.007643087, -0.035671566, 0.017858753, -0.006379767, 0.035671566, 0.0023529339, -0.001818894, -0.019018712, 0.00913036, -0.010812872, 0.04456075, -0.057699278, -0.06651955, 0.014218094, 0.03560266, -0.019811157, -0.044422932, -0.015320628, -0.016859582, 0.004763291, -0.014941632, 0.078463666, -0.024439503, -0.023314, -0.0091073895, -0.05664268, -0.036613315, 0.008567608, 0.014355911, -0.028459158, -0.041689564, -0.00019003637, -0.0027836112, -0.0069597457, -0.0028424703, -0.011266518, 0.002078736, -0.0460997, 0.009922805, -0.0241409, 0.01989155, 0.019926004, -0.03261663, -0.003264534, 0.028459158, 0.02163723, -0.021028537, 0.015251719, -0.025978457, -0.0041976683, 0.020672511, -0.0030836496, -0.031054707, -0.022521554, -0.05044093, 0.022395222, 0.021131901, -0.0004504167, -0.021120416, -0.05250818, -0.014401849, 0.017916176, 0.00015333908, 0.02829837, 0.070929684, 0.032318026, 0.038198207, 0.0015360825, 0.03390292, -0.048465554, 0.012001541, 0.007660314, 0.04364197, -0.012610232, -0.03851978, 0.036452528, -0.052278485, 0.038749475, -0.0020313615, 0.036957856, -0.003637788, 0.016779188, -0.0052714907, -0.026047364, 0.009515097, -0.025174525, 0.0018016668, -0.013104076, 0.0038416418, 0.02492186, 0.008263262, 0.0019035938, 0.008401079, -0.022372251, -0.044698562, -0.012759534, -0.009555294, 0.044744503, -0.003468388, 0.0034396762, 0.020534694, -0.047179267, -0.007361711, 0.012518355, -0.031881608, -0.012150843, 0.05962871, 0.0053203003, 0.012759534, 0.003276019, -0.052094728, -0.016802158, -0.0020227479, -0.02222295, -0.05250818, 0.025656885, -0.014884208, -0.0042235088, -0.04021952, 0.03769288, 0.021752076, 0.012139359, 0.058893688, -0.02878073, -0.033627287, -0.0044359765, -0.012793988, 0.020511726, 0.011128702, -0.026047364, -2.6782745e-05, 0.03769288, 0.01483827, 0.038726505, -0.028229464, 0.045043107, 0.011054051, 0.0061845263, 0.019386223, -0.0011369882, 0.008240293, 0.015263204, 0.016342768, 0.013632373, -0.04697254, 0.04573219, -0.021361595, 0.024209809, -0.051543463, -0.005972059, 0.025427189, 0.0017313228, -0.037463184, 0.009773504, 0.027035052, 0.014149185, -0.002945833, 0.0053978227, -0.030319683, -0.025450159, 0.047087386, 0.018766047, -0.002576886, -0.0088662105, 0.042585373, 0.028642913, 0.02178653, 0.013804643, -0.036199864, -0.028688852, 0.021843953, 0.024439503, 0.009704595, -0.009773504, 0.009049966, 0.0033994797, 0.031054707, -0.003766991, -0.044124328, -0.011806301, -0.025243433, -0.04270022, -0.03298414, -0.03973716, 0.0077119954, 0.00028586207, 0.037509125, -0.0515894, 0.04061, 0.01588338, 0.0011068407, 0.019558493, 0.00085704785, 0.022578977, 6.958131e-05, -0.03893323, 0.03723349, 0.013896522, 0.006620946, -0.018593775, -0.00041560363, 0.03776179, 0.013402678, 0.015802987, -0.02368151, -0.025610944, -0.021292686, -0.06459011, 0.01503351, -0.006081164, 0.01505648, 0.060363732, 0.05007342, 0.007907236, -0.031192522, 0.0037440215, -0.00058931013, 0.0037239233, -0.06766802, -0.021166354, -0.084481664, -0.025863608, 0.025679853, -0.013873552, 0.052967567, -0.0026572791, -0.051175952, 0.0070056845, -0.0053547546, 0.016170498, -0.016136045, -0.008148415, -0.006414221, -0.022395222, -0.013540495, -0.033305712, -0.034614973, -0.00803931, -0.014413334, -0.03344353, 0.028045708, 0.012541324, 3.878339e-05, -0.023796357, 0.04449184, 0.008917891, -0.013012198, -0.041413933, -0.013643858, 0.0030980057, 0.012621717, 0.009193526, 0.014895693, -0.013620888, 2.1511436e-05, -0.0070229117, -0.01695146, 0.0567805, 0.02091369, 0.03002108, -0.025335312, 0.0135749495, -0.0031870122, 0.055218574, -0.025059678, 0.03971419, 0.0008010598, -0.033765104, -0.028183524, -0.029837325, -0.025748761, 0.0482818, 0.019707795, 0.043710876, 0.050486866, 0.0016681568, 0.023980113, 0.019018712, 0.030985799, -0.024209809, -0.030181866, 0.016974429, 0.02455435, 0.02832134, 0.01267914, 0.006305116, -0.002134724, 0.017652027, 0.0106807975, -0.042125985, -0.014298487, 0.03218021, 0.0688165, 0.004998728, -0.008871953, -0.0147808455, -0.031422216, -0.007252606, 0.025197495, 0.0057739476, -0.017858753, -0.017629059, 0.045938917, -0.0023227865, 0.015102418, -0.009388765, 0.007867039, 0.0039335196, 0.025542036, -0.022062164, -0.006483129, -0.014505212, -0.011323943, -0.031583004, -0.0013178727, 0.021464959, -0.04274616, 0.020661026, -0.00084412756, 0.0057739476, 0.031537063, -0.048741188, -0.0012403507, 0.024531381, 0.033535406, 0.04359603, 0.0048666536, -0.0034080932, -0.016802158, -0.019087618, 0.030962829, 0.032134272, -0.047133327, -0.00051142933, -0.02110893, -0.01207045, -0.018674169, -0.025059678, 0.029469814, 0.037118644, 0.007947432, 0.044262145, -0.048833065, -0.0012934676, 0.033374622, 0.005044667, 0.004114404, -0.017502727, 0.025082648, 0.011794817, -0.004855169, 0.0045163697, -0.04315961, -0.02967654, 0.007011427, -0.06739239, -0.0026414876, 0.0024405047, 0.013885037, -0.0557239, 0.007987629, 0.006167299, 0.0068161865, -0.013000713, 0.010060622, 0.023635572, 0.026070334, 0.020879237, -0.016802158, -0.027724136, 0.08374664, -0.022590462, 0.008418306, 0.0018734464, 0.028642913], [-0.020986488, 0.0053201043, -0.020398632, 0.050978944, -5.1483396e-05, 0.0072365175, -0.033648923, 0.028405242, 0.0057874504, 0.025771642, -0.028193612, 0.019928345, 0.012333236, -0.0252073, 0.011592536, 0.054035798, -0.035483036, 0.000433177, 0.009840723, -0.02171543, -0.0004960042, -0.056058027, -0.048768602, 0.0037799194, 0.03336675, -0.029651497, -0.013849907, -0.0036858623, 0.021762459, 0.023420215, 0.019646175, 0.010987043, 0.03792852, -0.01728299, 0.0015254884, -0.010011202, -0.014132078, 0.056669395, 0.007730317, -0.032449696, -0.03908072, 0.0033919339, 0.010128773, -0.031955898, -0.027300071, 0.001748874, 0.007824374, -0.009923023, -0.0060372893, -0.013285564, -0.0103580365, -0.019516846, -0.000622026, -0.018200047, -0.024784043, 0.010963529, 0.041972976, -0.0010449155, 0.060572766, -0.013344349, -0.02828767, 0.019340489, 0.047263686, -0.0136735495, -0.009346923, 0.02138623, 0.0029774946, 0.022079902, 0.044818204, 0.064429104, 0.022150444, 0.03929235, 0.0066075106, 0.003250848, 0.0052113505, -0.06753299, 0.05878568, 0.020269303, 0.026006784, -0.023878744, 0.026383014, -0.0096702445, -0.004482408, 0.008429866, -0.0047969115, -0.01626012, 0.04321923, -0.11653674, -0.022985201, 0.0050232364, 0.011845315, 0.010052351, 0.043242745, 0.0031156412, -0.015495906, 0.017435834, -0.009105902, 0.01769449, 0.013226778, 0.019563874, 0.0071013104, -0.021468531, -0.07049579, -0.06593402, 0.010557909, 0.050132427, 0.06993145, 0.007089553, -0.01235675, -0.033319723, 0.0032978768, -0.033084583, -0.0232321, 0.03197941, -0.01392045, 0.019587388, -0.023608329, -0.045523632, -0.048251286, -0.018329374, -0.10844783, -0.05488231, 0.0700255, 0.03886909, 0.005243683, 0.03484815, -0.01888196, 0.01051088, 0.00529659, -0.0009839253, -0.037434723, -0.0047675185, 0.018893717, 0.044512518, 0.060948994, 0.010275737, 0.08371081, 0.0020001829, -0.039174777, 0.035694666, -0.06471128, 0.0153077915, -0.01785909, 0.03649415, -0.029627983, -0.013861664, -0.042937063, -0.032990523, -0.07284722, -0.016530534, -0.016095519, -0.03324918, -0.024454843, 0.021762459, 0.030074755, -0.022397345, 0.01814126, 0.047733974, -6.392943e-05, 0.06000842, 0.038022578, -0.08145344, -0.013567735, 0.041831892, 0.0135442205, -0.06696865, 0.011239822, -0.02015173, -0.048439402, 0.014602363, 0.028405242, 0.0060666823, 0.03752878, -0.013309078, -0.039809663, -0.021903545, 0.016906762, 0.0021001184, -0.040914834, -0.054223914, -0.031603184, 0.042513803, 0.079196066, -0.03675281, 0.0059990785, 0.06555779, 0.033648923, 0.03247321, 0.036564693, -0.059538137, -0.018905476, 0.013403135, -0.029980697, -0.0135442205, -0.010998801, -0.033413783, -0.006542846, -0.032708354, -0.029251754, 0.0056434255, 0.009787816, -0.012709464, 0.016471747, -0.0104168225, -0.018940747, 0.03809312, 0.007377603, 0.0136853065, 0.0007028563, 0.028499298, 0.03818718, 0.006983739, -0.0034830517, -0.004841001, -0.029651497, 0.012462565, -0.06527562, -0.007130703, -0.0042795977, -0.04528849, 0.048086688, -0.015589963, 0.027111957, -0.0120275505, -0.009693759, 0.028852012, 0.017635705, -0.0038298871, 0.028640384, -0.010892986, -0.030121783, -0.024172671, -0.035577092, 0.008500409, -0.07458727, -0.016365934, -0.04056212, -0.015448877, 0.038163666, 0.0028422878, -0.022491401, 0.009799573, -0.046581775, 0.00038725068, 0.010093502, 0.044042233, 0.016119033, 0.05488231, -0.027111957, 0.02245613, 0.029204726, 0.016495261, 0.024501871, 0.008218238, -0.0017914936, 0.09297543, 0.003756405, -0.0047557615, -0.02476053, 0.03193238, -0.02311453, 0.041831892, -0.04376006, 0.041643776, -0.031532638, -0.0237259, 0.017870847, -0.04067969, -0.0687087, 0.016389448, 0.068003275, -0.03324918, 0.013638278, 0.03383704, 0.018752633, 0.023514273, 0.08512167, 0.037105523, -0.059067853, 0.030098269, 0.010169922, 0.020092946, -0.002426379, -0.019716717, 0.029533926, 0.010316887, 0.03268484, -0.019693203, -0.02746467, 0.021703674, -0.01051088, -0.0047880937, 0.020880673, 0.014766963, 0.028264156, 0.01626012, 0.021703674, 0.00076127454, -0.045100376, 0.036306035, -0.004896847, -0.009940659, -0.03665875, -0.035083294, 0.020727832, 0.04535903, -0.009928902, 0.107413195, -0.003950398, -0.028804984, 0.068238415, -0.040326975, -0.044489004, -0.018917233, 0.025560014, 0.010957651, 0.020045917, 0.044230346, 0.059302993, -0.04573526, -0.0054582506, -0.032449696, -0.09255218, 0.012568379, 0.051825456, -0.009164687, 0.013791121, -0.017412318, -0.021092303, 0.026218414, -0.040468063, 0.0019854864, -0.013226778, 0.0077655884, -0.055822883, -0.09678475, -0.009000088, -0.050226487, 0.018364647, -0.025113244, 0.011357393, 0.0073129386, -0.049615115, -0.044112775, 0.009875994, -0.016248362, -0.03550655, 0.034989238, 0.014026264, 0.028029013, 0.0012536047, 0.03494221, 0.012885821, 0.039433435, 0.00780086, 0.003868098, -0.0013028376, -0.031861838, 0.005954989, 0.018176533, 0.053377397, -0.06504048, 0.044042233, 0.0723299, 0.004494165, -0.020727832, -0.018058961, -0.018588033, 0.0088060945, 0.0033066946, -0.04408926, 0.047028545, -0.040820777, -0.007089553, -0.0003042159, -0.03313161, 0.04211406, -0.0010008262, -0.052577913, 0.009511523, 0.0255365, -0.019975374, -0.048674542, 0.040374007, 0.046652317, 0.023573058, -0.032426182, -0.0073246956, 0.029369326, -0.023537787, 0.013697064, 0.052577913, 0.0031009447, 0.008371081, 0.03193238, 0.035906292, -0.038680978, 0.01658932, -0.0031891232, 0.023502516, -0.010957651, 0.009682002, -0.03708201, -0.06109008, 0.046299603, -0.067109734, 0.021621373, -0.03440138, 0.0020516203, 0.040091835, 0.00086267985, 0.017341776, 0.0011066404, 0.038234208, 0.03628252, 0.015390092, -0.025019186, 0.061560366, -0.020821888, 0.017835576, -0.0029995393, -0.033766493, -0.062453907, 0.022714786, -0.07016659, 0.03362541, -0.05850351, 0.013779364, 0.0003887203, -0.03143858, -0.004911544, 0.0136030065, 0.01436722, -0.022491401, -0.005722786, -0.051590312, -0.049427, -0.06409991, 0.0073129386, 0.069978476, -0.006143104, -0.017424075, 0.027488185, 0.009458616, -0.06649836, -0.0036270765, -0.08483949, -0.023667116, 0.03665875, -0.019117104, -0.024125643, -0.010258101, -0.037105523, -0.028311184, 0.04474766, 0.004211994, 0.031132897, 0.0033478446, 0.055070426, -0.07731493, -0.00035014222, 0.027582241, 0.066827565, -0.000121245466, 0.040021293, -0.01999889, -0.0069484673, 0.023866987, 0.012697707, 0.038492862, -0.0006242304, 0.0054700077, -0.03715255, 0.06071385, 0.00047285733, -0.035929807, 0.004861576, -0.00090823876, 0.025183786, 0.0065781176, -0.013932207, -0.020868916, -0.030333411, 0.054412026, 0.017929632, -0.0065898746, 0.040585633, 0.030474497, 0.08173561, 0.014273163, -0.026335984, 0.037223093, -0.012239179, -0.027911441, -0.01469642, -0.015495906, -0.012862307, -0.038916122, 0.0063664895, 0.0025219058, 0.010599058, 0.03193238, 0.03214401, 0.042137574, 0.008224117, 0.0066898107, -0.025936242, -0.039268836, 0.028217128, -0.0112221865, 0.005537611, -0.008788459, -0.037246607, 0.013120964, -0.016154304, -0.05036757, 0.003965094, 0.00361238, 0.0056404863, 0.024360785, 0.0009222004, -0.014931563, -0.063253395, -0.035106808, -0.025301358, -0.0033772374, -0.0018252954, -0.0078067384, 0.010022959, -0.034213267, -0.009429223, -0.0068720463, 0.015731048, 0.029345812, 0.02762927, -0.0028217128, 0.039104234, -0.0051790182, 0.013767607, 0.00052649924, -0.02336143, 0.03933938, -0.003062734, 0.020339845, -0.020457417, 0.04672286, 0.05455311, -0.00771856, -0.021703674, 0.0012829974, -0.017153662, 0.01535482, 0.011269215, 0.012544864, 0.010111137, -0.030639097, -0.045053344, -0.04303112, 0.0023837592, -0.041526206, 0.015495906, 0.036070894, 0.079619326, 0.036964435, -0.020410389, -0.06358259, 0.014390735, 0.009035359, -0.0063370964, 0.027017899, -0.0089001525, 0.062124707, 0.0067133247, -0.0048351223, -0.036917407, 0.07943121, -0.017835576, -0.037552293, -0.03054504, -0.016942034, -0.050978944, 0.0002768438, -0.012615407, -0.04011535, 0.015413606, 0.02988664, -0.016448233, -0.04368952, -0.037011463, -0.0023470183, 0.005496461, 0.027934955, -0.00119041, -0.0076127457, -0.0076421383, -0.01063433, 0.027746841, -0.020175247, 0.0057580573, 0.025089728, -0.006196011, -0.017212447, 0.00730706, 0.0032302733, -0.026829785, 0.002541011, 0.031579666, -0.036893893, 0.02692384, 0.017576918, -0.11268039, -0.003465416, 0.065087505, -0.008958938, 0.005755118, -0.029792583, -0.000784054, 0.062594995, 0.02093946, 0.024995672, 0.0687087, 0.033554867, 0.06080791, -0.029463382, 0.02955744, -0.002898134, -0.0151784625, -0.002476347, -0.013297321, 0.011310365, -0.0011037012, -0.017377047, -0.04314869, -0.012885821, -0.0044500763, 0.017388804, 0.034636524, 0.023643602, 0.00845926, -0.009699637, 0.010258101, 0.0458058, 0.005246622, 0.074258074, -0.021397987, -0.032167524, 0.029651497, -0.018682089, 0.049944315, -0.022491401, -0.027605755, 0.030803697, -0.032073468, 0.045476604, 0.0001872875, -0.011480844, -0.015131434, 0.01695379, -0.024807557, 0.026500585, -0.039692093, -0.06767408, 0.0068250177, 0.037364177, 0.032073468, -0.029439868, -0.022656001, -0.018388161, -0.003912187, 0.016436476, 0.0467934, -0.048909687, -0.02336143, -0.045147404, -0.012009915, -0.025465958, 0.005487643, 0.027347099, -0.051167056, -0.031509124, -0.017917875, -0.07745601, -0.009023602, -0.032379154, -0.023443729, -0.0042884154, -0.03708201, -0.006501696, -0.029181212, -0.017259477, 0.006448789, -0.04573526, -0.015460634, 0.06395882, 0.01662459, -0.011069343, 0.0063782465, -0.028264156, 0.013567735, 0.002939284, -0.0036829228, -0.0033272696, -0.018223561, -0.0063253394, 0.025113244, 0.037364177, -0.0019120043, -0.016836219, -0.038892608, -0.008288781, 0.019657932, -0.0028760894, 0.028593356, 0.04535903, 0.008400474, 0.00086341467, -0.008623859, -0.005058508, -0.08380487, 0.030403955, 0.027088441, -0.002270597, 0.00020078984, -0.028193612, 0.0135912495, -0.054600142, 0.014543577, -0.0006084318, 0.045782287, -0.007495174, 0.0012374385, -0.035153836, 0.016166063, -0.003394873, -0.0010544681, -0.0023190952, -0.023667116, -0.009617337, 0.030897753, 0.0135442205, 0.049944315, -0.016224848, -0.03284944, -0.042960577, 0.009370438, -0.03654118, 0.024219701, -0.011539629, 0.009517401, -0.031062353, -0.022244502, -0.041596748, -0.01477872, -0.022561945, 0.01904656, 0.038234208, 0.021362716, -0.00792431, 0.007695046, -0.023138044, -0.021409744, 0.00086929323, -0.00029668398, -0.010322765, 0.041361604, 0.0004026819, -0.0059667467, -0.063065276, 0.0062547964, 0.0248781, 0.03597684, 0.08234698, -0.0063077034, 0.026288956, 0.0013212082, -0.0049820864, 0.032073468, -0.0040914835, -0.018834932, -0.028076041, -0.0059461715, 0.021633131, -0.00018315413, -0.006154861, 0.044042233, 0.0121098505, 0.009417466, -0.02126866, -0.0055493684, -0.0152490055, 0.024313757, 0.017682733, 0.021644888, 0.015119677, 0.059302993, -0.017188933, 0.017964903, -0.01777679, 0.055070426, -0.012286208, 0.037223093, -0.061184138, -0.009329287, 0.047357745, 0.03132101, 0.027347099, -0.021974087, -0.014190863, -0.03306107, 0.018646818, 0.005111415, 0.0049997224, -0.01588389, 0.025160272, -0.00067640276, 0.00020942399, 0.02581867, 0.004367776, 0.022397345, 0.029439868, -0.005390647, -0.039268836, -0.015072648, -0.018117746, 0.046958003, 0.05229574, 0.026782757, 0.019563874, -0.010975286, -0.018987775, -0.011251579, -0.028005498, -0.005690454, 0.0012146591, 0.020727832, 0.037505265, 0.040797263, 0.06395882, 0.027746841, 0.017765032, -0.04705206, -0.03197941, 0.00089721644, -0.01243905, -0.03654118, 0.013414892, 0.018047204, -0.013073935, 0.0024851647, 0.02861687, 0.023173315, 0.030521525, 0.030780183, -0.025136758, -0.022820601, -0.010199316, -0.057751052, -0.013638278, -0.00829466, 0.022632487, 0.020857159, 0.027558727, 0.014966834, -0.025607042, -0.0030862482, 0.0003953337, -0.037340663, -0.05845648, -0.010622572, 0.008882516, -0.0006315787, -0.043618973, 0.03291998, 0.067062706, 0.032778896, -0.03247321, 0.02692384, -0.00369468, 0.004870394, -0.032825924, 0.021374473, -0.00406503, -0.06979036, 0.0030274626, -0.013097449, -0.043454375, 0.03708201, -0.010522637, -0.020469174, -0.008888395, -0.0066898107, -0.01658932, 0.008465138, -0.04006832, 0.015401849, 0.033319723, 0.0057198466, -0.009517401, -0.034260295, 0.03990372, 0.0088413665, -0.012145122, 0.01723596, -0.035812236, 0.039762635, -0.03197941, 0.018693846, 0.018787904, -0.022397345, -0.018999532, -0.019469818, 0.033390265, 0.0257011, -0.055963967, 0.022573702, -0.022855872, -0.01469642, 0.001510792, 0.008647374, -0.042843003, 0.021280417, 0.0235613, 0.031603184, 0.01535482, -0.031532638, 0.013567735, 0.00722476, 0.0056463648, 0.01728299, -0.033413783, -0.004335444, 0.01486102, 0.0136735495, 0.045217946, -0.005837418, -0.016119033, -0.0005764671, 0.03016881, -0.0027599877, -0.015002105, 0.050884884, 0.08526275, -0.027441155, -0.016060248, 0.023772929, -0.042137574, -0.041643776, 0.023655359, 0.025748128, 0.009834845, -0.02003416, 0.028170098, -0.033413783, -0.004297233, 0.002389638, 0.01695379, 0.009258744, 0.03252024, 0.016847976, 0.032449696, 0.028146584, -0.019034803, 0.027441155, -0.0025072093, 0.048909687, -0.034001637, 0.030074755, -0.035906292, 0.016977305, 0.0120980935, -0.045711745, -0.012427293, -0.010375673, 0.009823088, 0.03480112, 0.024666471, 0.0032361518, -0.011927615, -0.06104305, 0.00533774, -0.0044353795, -0.032285094, -0.0076009887, 0.01703609, -0.0014968304, -0.010563787, -0.0112339435, 0.041831892, 0.02188003, -0.0051055364, 0.038140148, -0.070448756, -0.010375673, 0.01827059, -0.0027776235, -0.0088178525, 0.01863506, -0.010175801, -0.009105902, -0.03136804, 0.0021706612, 0.0021971148, -0.034307323, 0.015648749, -0.04244326, 0.030333411, -0.0066075106, 0.011851193, -0.047992628, 0.013826392, 0.0028760894, -0.0020780738, 0.010687237, -0.001790024, 0.0063077034, 0.02845227, 0.036682263, 0.004949754, 0.013555978, 0.070213616, 0.002122163, -0.0121098505, 0.00025296214, 0.013520706], [-0.0077964854, -0.00078553264, -0.024242656, 0.026549239, 0.0070491997, 0.025443021, -0.05827652, 0.030762283, -0.0032245086, 0.06307798, -0.048202872, -0.02709058, 0.018087845, 0.009391087, 0.028879358, 0.03153899, -0.03255106, 0.028549846, -0.018076077, -0.024478022, -0.009067459, -0.022277353, -0.053004332, 0.009038039, 0.021041684, -0.006019475, -0.018229065, -0.008990966, -0.011374042, -0.008278985, 0.028855821, 0.01785248, 0.024454486, -0.0231129, -0.006660846, -0.0146162035, -0.018911626, 0.031844966, -0.020888695, 0.017087542, -0.067597, -0.01613431, 0.019135222, -0.021382963, -0.04267178, -0.023089364, -0.009903007, 0.02852631, 0.019523576, -0.05747628, 0.00061893795, -0.031562526, -0.013168705, 0.0021962551, -0.021347659, -0.0015181081, 0.051827505, -0.05422823, 0.05733506, -0.030597527, -0.046061046, 0.0284557, 0.05206287, -0.024595704, -0.0035451942, 0.04104776, -0.014957484, 0.036081545, 0.05121555, 0.04471946, 0.008708527, 0.028596919, -0.0032656975, 0.004080651, -0.009932428, -0.08379015, 0.06434895, 0.017052237, 0.020370891, 0.006937401, 0.0044778306, 0.0052280584, 0.0018167282, -0.01648736, 0.0011716794, -0.045260802, 0.021583024, -0.12446132, -0.020688636, 0.020841623, -0.0008664396, 0.0033863224, 0.03448106, 0.011856542, -0.005042708, 0.006137158, -0.0067491084, 0.023913145, -0.016710958, -0.03681118, 0.025960825, -0.023171743, -0.05874725, -0.042224586, 0.051497992, 0.056723107, 0.0394002, -0.024925217, -0.017252298, 0.0065902364, -0.010509074, -0.01764065, -0.03892947, 0.01915876, -0.028596919, 0.036764104, -0.0026640443, -0.053992867, -0.041824467, -0.040741783, -0.075646505, -0.04857946, 0.07343406, 0.009055691, 0.036269836, 0.012686205, 0.016381444, 0.0406241, 0.013851265, -0.022818694, 0.0017034585, 0.013380534, 0.023924913, 0.031774353, 0.050980188, 0.0039806208, 0.08652039, 0.026078507, -0.052580673, 0.020359123, -0.037093617, -0.022548024, -0.021830158, 0.021430038, -0.030291552, -0.02338357, -0.044837147, 0.03003265, -0.042977758, -0.037988007, -0.024148509, -0.061524566, -0.023877839, 0.0071786507, 0.027067043, -0.04453117, 0.00422187, 0.021324122, 0.018899858, 0.041377272, 0.035869718, -0.09452282, 0.0035893254, 0.021465342, 0.017499432, -0.04363678, 0.03761142, -0.011715323, -0.07927113, 0.010256056, 0.008431972, 0.019711869, 0.031586062, -0.022418573, -0.034622278, -0.009802977, 0.04027105, 0.005919445, -0.020606257, -0.06792651, -0.0023242352, 0.045472633, 0.052863114, -0.03605801, 0.028691066, 0.009279288, 0.0070903883, 0.010544378, 0.046437632, -0.04556678, -0.025089972, 0.02791436, -0.042601172, -0.021229977, -0.009408739, -0.024266193, -0.019664796, -0.03634045, -0.03323362, -0.010703251, 0.012250779, -0.055216767, -0.029608991, 0.005675253, -0.0019388241, -0.0009304296, 0.028361553, 0.04213044, 0.00021182903, 0.013851265, 0.01709931, 0.00957938, 0.012909803, -0.054369453, -0.027137652, 0.015828336, -0.047685068, -0.029185334, -0.031421307, -0.04766153, 0.06364286, -0.01471035, 0.017522968, -0.013227547, -0.000463376, 0.025843142, 0.02305406, 0.014839801, -0.018440895, 0.0076788026, -0.005428119, -0.0036981818, -0.07169236, 0.034457523, -0.07945942, 0.009497002, -0.036081545, -0.03125655, 0.02989143, 0.0070197787, 0.0010981276, 0.033351306, -0.01853504, -0.022159671, 0.021406502, 0.060206518, 0.040035687, 0.011232823, -0.034622278, 0.012191937, 0.031444844, -0.012050718, 0.027490702, 0.028243871, 0.011503493, 0.08812088, 0.0101736775, -0.01792309, -0.008649685, 0.020806318, -0.015840104, 0.026431557, -0.0537575, 0.009873587, -0.007743528, -0.026455093, 0.04022398, -0.042153977, -0.033751424, 0.0015548839, 0.08336649, -0.04952092, 0.046343487, 0.065290414, -0.011591756, 0.018617418, 0.075646505, 0.04330727, -0.026666922, 0.029373625, 0.012415535, 0.01415724, 0.028973505, -0.0036834716, 0.018440895, 0.023418877, 0.011644713, -0.05535799, -0.016404983, -0.005128028, -0.008873283, -0.012886266, 0.061477493, -0.009185142, 0.038435202, 0.015522361, 0.01395718, 0.014745655, 0.013686509, 0.02497229, -0.028949969, 0.000640268, -0.06712627, -0.035516668, 0.01729937, 0.032574598, 0.009826514, 0.085578926, 0.0005402376, -0.041259587, 0.045825683, -0.020064916, -0.03789386, -0.03810569, 0.04549617, 0.03215094, -0.0035981515, 0.013239315, 0.041259587, -0.04994458, -0.025254728, 0.0068314862, -0.07856503, 0.032480452, 0.04417812, 0.008632033, 0.016016629, -0.016028397, -0.026666922, 0.03495179, -0.057852864, -0.00731987, -0.0018711565, -0.018311443, -0.012486145, -0.082942836, -0.025278265, -0.048532385, 0.022959914, -0.017628882, -0.0099206595, 0.031280085, -0.035116546, 0.0038805902, 0.029773748, -0.027655456, -0.041024223, 0.03304533, 0.012156633, 0.01696986, 0.0014195488, 0.020806318, 0.045660924, 0.024525095, 0.01820553, -0.020017844, -0.0153105315, -0.046790678, 0.008579076, 0.012262547, 0.07253967, -0.049003117, 0.021053452, 0.074752115, 0.026007898, -0.03838813, -0.029773748, -0.02996204, 0.010450233, 0.018276138, -0.069574066, 0.0556875, 0.0118271215, -0.0067491084, 0.008120113, 0.010185446, 0.061383348, -0.007572888, -0.043424953, 0.012615596, 0.03236277, -0.009279288, -0.03725837, 0.024995826, 0.027584847, 0.010926847, -0.032668743, 0.015134008, 0.015898947, -0.00029935563, -0.00014774708, 0.024242656, 0.026031435, 0.002063862, 0.012780352, 0.01942943, -0.031233015, 0.012980413, 0.01812315, 0.010897427, 0.011921267, 0.02920887, -0.044319343, -0.04177739, 0.04535495, -0.07842381, 0.051733356, -0.023065828, -0.0071433457, 0.051121406, -0.022971682, 0.035540204, 0.017440591, 0.035516668, 0.038058616, 0.02421912, -0.022406805, 0.06947992, 0.004245407, -0.01567535, 0.027325945, -0.026102044, -0.010632641, 0.011121024, -0.042153977, 0.027820213, -0.050697748, 0.04905019, 0.0012474377, -0.015286995, 0.0057458626, -0.011897731, 0.01867626, -0.013380534, 0.017828943, -0.06449017, -0.032480452, -0.027937897, -0.025607776, 0.036764104, -0.01792309, -0.020053148, 0.01101511, 0.020300282, -0.059547495, -0.009655873, -0.0805421, -0.04780275, 0.026243264, -0.03276289, 0.005381046, -0.015616507, -0.025042899, -0.0014761835, 0.011050414, -0.035610814, 0.0284557, 0.008861515, 0.04441349, -0.10148964, 0.007461089, -0.023607168, 0.06449017, -0.019370588, 0.04321312, -0.0313507, -0.025301801, 0.020347355, 0.004925025, 0.0022036103, -0.030879965, -0.0094793495, -0.0025860795, 0.016287299, 0.0027390672, -0.05662896, 0.012274316, -0.015898947, 0.018793942, -0.010709135, -0.029938504, -0.0006292352, -0.011379926, 0.07244553, -0.0092263315, -0.028243871, -0.0041394923, 0.024925217, 0.080259666, 0.01880571, -0.03078582, 0.04055349, 0.0017887785, -0.010297244, 0.0022168497, -0.035351913, -0.0044366415, -0.033539597, -0.030950576, 0.022289122, 0.053710427, 0.01634614, 0.018111382, 0.03412801, 0.05267482, -0.0056281798, 0.004386626, -0.00029273596, 0.029091187, -0.0033598437, -0.0023742504, -0.026996434, -0.024948753, -0.018735101, -0.021100525, -0.055781644, -0.015051629, -0.0023389456, 0.042883612, 0.018134918, -0.0030979996, -0.0316096, -0.048485313, -0.023783693, -0.03057399, -0.0055722804, -0.017628882, -0.0011819766, 0.0070021264, -0.02906765, -0.020570952, -0.025207656, -0.00824368, 0.009903007, 0.015581203, -0.02647863, 0.05945335, 0.017617114, -0.0011724149, 0.026007898, -0.045119584, 0.040883005, -0.0050838967, -0.0009767672, 0.0024639836, 0.02633741, 0.010926847, -0.01381596, 0.0072963336, 0.006190115, -0.015781263, 0.022853998, 0.0092381, 0.028879358, 0.038364593, -0.040412273, -0.031844966, -0.022395035, 0.03641106, -0.031680208, 0.01594602, 0.06449017, 0.09033331, 0.0369524, -0.024266193, -0.034763496, 0.013098096, 0.01259206, -0.015028093, 0.016852176, -0.035140082, 0.050791893, 0.015510593, -0.0011076893, -0.02271278, 0.060300663, 0.03473996, -0.044389952, -0.04747324, -0.0006913864, -0.0037334866, 0.0046072816, 0.0027478933, -0.05874725, 0.008667338, 0.045872755, 0.016287299, -0.004742617, -0.032480452, -0.010509074, 0.022971682, 0.0067491084, -0.03358667, -0.014851569, 0.022406805, 0.007714107, 0.014263155, -0.007708223, 0.0107503235, 0.030503381, -0.023689548, -0.026313873, 0.03172728, 0.006160694, -0.051356774, -0.03796447, 0.009832398, -0.059971154, 0.0073492904, 0.016981628, -0.07164529, 0.010591452, 0.06401944, -0.01036197, 0.024525095, -0.0272318, -0.03003265, 0.043001294, 0.030974112, 0.04069471, 0.04328373, 0.03784679, 0.074752115, -0.036858253, 0.03768203, 0.0141101675, -0.005178043, 0.006660846, -0.017311139, 0.0059959386, 0.011073951, 0.0043219007, -0.017122846, -0.023289425, 0.006560816, 0.015781263, 0.024383875, 0.0006443133, -0.0077964854, 0.02906765, 0.0031627251, 0.038976543, -0.0042836536, 0.14997496, -0.029303016, -0.051733356, 0.028196799, 0.026031435, 0.02852631, -0.019617721, -0.024101436, 0.016863944, -0.022724548, 0.027608383, 0.006937401, -0.030691674, 0.00257284, 0.0011819766, -0.0048985463, -0.008461393, -0.024383875, -0.049850434, 0.006949169, 0.022312658, 0.0038099806, -0.019864855, -0.045025438, 0.009273404, 0.0004251291, 0.011738859, 0.08637917, -0.03671703, -0.049897507, -0.043660317, -0.032056794, -0.0072963336, 0.0012577348, 0.033727888, -0.019299978, -0.036764104, -0.0071198093, -0.054134086, 0.004745559, -0.026972897, 0.006431365, -2.624878e-05, -0.035893254, 0.0037776178, -0.03351606, -0.017358212, 0.033374842, -0.043660317, -0.014792727, 0.07856503, 0.024030827, -0.0034745845, -0.002400729, -0.046625923, -0.011821236, -0.026384482, -0.0085261185, -0.0066255415, 0.020370891, -0.022901071, 0.030738747, 0.031797893, -0.008596729, 0.0031744933, -0.037399594, -0.009661757, 0.022489183, -0.025937289, 0.013898338, 0.046978973, -0.01586364, 0.025231192, 3.8637652e-05, -0.012203706, -0.09584087, 0.037046544, 0.03419862, 0.049379703, -0.007855327, -0.0015857756, 0.014757423, -0.05512262, 0.019405894, -0.00201826, 0.033727888, -0.008890935, -0.0017770103, -0.013368766, 0.008520234, -0.002815561, 0.0027655456, -0.009714715, -0.01901754, 0.005260421, 0.043236658, 0.0057429206, 0.029514845, -0.028808748, -0.013627668, -0.071739435, -0.004466062, -0.01950004, 0.020888695, -0.016852176, 0.034457523, -0.030409234, 0.008855631, -0.002394845, 0.012815656, -0.03577557, -0.00615481, 0.03297472, 0.025137044, 0.00051081687, -0.009391087, -0.031562526, 0.0034687005, 0.03521069, -0.02633741, -0.02756131, 0.023630705, 0.0028317424, -0.052392382, -0.059359204, 0.0029155912, 0.026925825, 0.011609408, 0.08223674, -0.022194976, -0.0016681537, -0.008520234, 0.017040469, 0.038670566, -0.034457523, -0.079176985, -0.007208071, 0.0072492603, 0.006031243, -0.0024904623, 0.002066804, 0.057805788, 0.0031803777, -0.0068432544, -0.002894997, 0.009591148, 0.002653747, 0.036693495, 0.006519627, -0.012050718, 0.0078023695, 0.058794323, -0.023701316, 0.01026194, -0.017146384, 0.027184727, 0.013274619, 0.028879358, -0.046414096, 0.016087238, 0.023501255, -0.0043101325, 0.016028397, -0.018252602, -0.01805254, -0.043966293, 0.042036295, 0.037093617, 0.02831448, 0.019394124, 0.015487056, -0.0067608766, -0.014357301, 0.024595704, 0.0039776787, 0.00041924496, 0.032786425, -0.026290337, -0.016652117, 0.008802673, -0.02633741, 0.033421915, 0.015840104, 0.00513097, -0.0069727055, -0.018546809, 0.005525207, -0.033610206, -0.030268015, -0.02052388, -0.0045190193, -0.0117977, 0.025207656, -0.003068579, 0.042789463, 0.013768887, 0.027396554, -0.05747628, -0.027726067, -0.0008083337, -0.004616108, -0.03521069, 0.026761068, 0.018982235, -0.004836763, -0.00025154697, 0.0369524, 0.0012937753, 0.0146162035, 0.020700404, -0.036575813, -0.0106208725, -0.025960825, -0.058182374, -0.017570041, -0.02756131, 0.0153223, 0.021700708, 0.023101132, -0.0016505013, -0.02633741, -0.00013119793, -0.011350506, -0.009220447, -0.067267485, -0.025160583, 0.005916503, -0.023783693, -0.046272874, 0.03876471, 0.0014717705, 0.014769191, -0.021853695, 0.008267216, 0.00919691, -0.00015942342, -0.032809965, 0.0046602385, 0.009873587, -0.067597, -0.0119565725, -0.012956876, -0.04043581, 0.033963256, -0.006784413, 0.0072198394, 0.024407413, 0.0071668825, -0.0025522457, 0.031280085, -0.009332246, 0.00011795862, 0.024407413, -0.01002069, -0.02443095, -0.027208263, 0.018640954, -0.005672311, 0.02031205, 0.0041365502, -0.044860683, 0.034763496, -0.023924913, 0.008938008, 0.0033510176, 0.0074728574, 0.013839497, -0.029232407, 0.049285553, 0.011091604, -0.041494954, 0.026784604, -0.005180985, -0.0067902976, -0.021018147, 0.021324122, -0.011250475, 0.017817175, 0.031562526, 0.025701923, 0.022959914, -0.011974225, 0.009061575, 0.022289122, 0.012721511, 0.0018299675, -0.036975935, 0.027584847, 0.0053339726, 0.026290337, -0.0033863224, -0.03429277, -0.02195961, 0.0075964243, 0.008161302, -0.039776783, -0.009444044, 0.042718854, 0.080071375, -0.024948753, -0.016169617, 0.034080938, -0.031327162, -0.018982235, 0.0059606335, 0.035869718, 0.00025007594, 0.013262851, 0.0053633936, -0.014957484, -0.016393213, 0.00038430787, -0.013874802, -0.0055369753, 0.026455093, 0.020876927, 0.011744743, 0.018793942, -0.034386914, 0.02428973, 0.01286273, 0.0084672775, -0.0063431025, 0.037164226, -0.0262668, 0.009149837, 0.016310835, -0.023348266, -0.006101853, -0.02181839, 0.014133704, 0.04227166, 0.02298345, 0.0032186245, 0.006690267, -0.070468456, 0.015086935, 0.01436907, -0.03876471, 0.0036363984, 0.023936681, -0.0036775875, -0.025301801, -0.030903501, 0.04391922, 0.031303626, -0.0148044955, 0.0028935256, -0.06802066, 0.0020697461, 0.00999127, 0.019888392, 0.0034981212, 0.02203022, -0.0151222395, -0.006690267, -0.042459954, 0.017228762, -0.00605478, -0.049144335, 0.011732975, -0.0009135127, 0.061712857, -0.018040773, -0.009855934, -0.051545065, 0.021406502, -0.00016383652, -0.024572168, -0.035869718, -0.0024639836, 0.022724548, 0.043118976, 0.03229216, -0.019382356, -0.017275834, 0.07164529, 0.005678195, -0.0041453764, -0.007855327, 0.008549655], [0.0048156595, 0.018794574, -0.020930866, 0.06610505, -0.019766707, -0.035356842, 0.028563911, 0.043878008, -0.0037655158, 0.033964653, -0.014257953, -0.04001348, -0.03156432, -0.029884093, -0.023415206, 0.009121249, -0.049974844, 0.021122893, -0.019430662, -0.024579367, -9.779464e-05, 0.011929634, -0.03314854, -0.010669461, 0.049590793, -0.005001685, -0.015746156, -0.0035944923, 0.02592355, 0.019418659, 0.020054746, 0.040493544, 0.0101293875, -0.006732922, 0.020042745, -0.009139252, -0.022875132, 0.00035311087, -0.014137936, -0.018962597, -0.070569664, -0.011797615, -0.005382737, -0.030652197, -0.028083846, -0.018866584, 0.013669872, -0.021230908, -0.03163633, 0.012553719, -0.015098068, -0.008209124, -0.07076169, -0.015746156, -0.043781996, 0.011995642, 0.03221241, -0.0036665022, 0.023559226, -0.049878832, -0.05592766, -0.007104973, 0.07513029, 0.022527086, -0.045318205, 0.0011784114, -0.01766642, 0.05155906, 0.03468475, 0.05002285, -0.0011566584, 0.044286065, -0.02621159, -0.04212577, -0.00175224, -0.058375996, 0.051223014, -0.03175635, -0.0066189063, -0.0033694615, 0.045102175, -0.012361693, 0.04212577, 0.01059145, 0.0048966706, -0.038861323, -0.00027359996, -0.12836958, -0.025347471, 0.027315741, 0.045318205, 0.018926593, -0.0010261405, -0.024147308, -0.026715659, 0.020702835, -0.0054217423, -0.0061088367, -0.017174352, 0.019082613, -0.012973777, -0.05285524, -0.06557698, -0.06543296, -0.0012646732, 0.0072549935, 0.010999506, -0.024603369, -0.021878997, -0.06514492, 0.048606656, -0.016046198, 0.011275544, 0.08693991, -0.018602548, 0.059864197, -0.012445704, -0.04642236, -0.037445128, 0.0056767776, -0.06543296, -0.059624165, 0.057511877, 0.02810785, 0.012409699, 0.006330867, 0.010093383, 0.02307916, -0.009553309, -0.018674558, -0.05381537, 0.048078585, -0.00781307, 0.028827948, 0.056551743, 0.0053257295, 0.06308064, -0.0020537812, -0.042533826, 0.028083846, -0.057367858, 0.016322235, 0.004839663, 0.013981915, -0.013477846, -0.00723099, -0.017018331, -0.0628406, -0.01401792, -0.025371475, -0.06413678, -0.021951007, -0.020690834, -0.00047556512, 0.0642328, 0.03314854, 0.026787668, 0.025587505, -0.040925603, 0.019370653, 0.04080559, -0.04680641, 0.0037565145, 0.05141504, 0.020570816, -0.07964291, 0.052759226, -0.015194081, -0.029764077, 0.019394657, 0.002322318, -0.05045491, 0.033436578, -0.02928401, -0.023187175, 0.033508588, 0.06543296, 0.009889354, -0.019778708, -0.060488284, -0.04109363, 0.03074821, 0.049494777, -0.03739712, -0.018530538, 0.021794984, 0.02585154, 0.0019817713, 0.046782408, -0.052183148, 0.0061808466, 0.0032314425, -0.048438635, -0.021002876, -0.017582407, -0.023535224, 0.020306781, -0.021578955, -0.027555773, 0.0016307234, 0.016094204, -0.044430085, 0.008011097, -0.03518882, -0.01877057, 0.04512618, 0.01555413, 0.0011281545, 0.010885491, 0.0103994245, 0.027771803, 0.019670693, -0.016862309, 0.0012639231, -0.024051294, 0.014065926, -0.065528974, -0.019154623, -0.025755526, -0.020234771, 0.063176654, -0.044502094, -0.013117797, -0.040637564, 0.030292148, -0.008587176, 0.028011836, 0.0077890665, 0.013129798, 0.018866584, -0.03170834, -0.050982982, -0.025539497, 0.03754114, -0.07892281, -0.038453266, -0.027411753, -0.018494533, 0.04051755, 0.018734565, 0.0045036166, 0.040781584, -0.034300696, -0.01737838, 0.024939416, 0.04337394, 0.03718109, 0.04073358, -0.008113111, 0.00022653102, 0.018590545, 0.035284832, 0.06164044, 0.0047766543, 0.00016145961, 0.06668113, 0.004068557, -0.043565966, 0.010729469, 0.027795807, -0.040349524, -0.010801479, 0.020342786, 0.09529305, -0.04169371, -0.016670283, 0.019322647, -0.0481986, -0.046614382, -0.006762926, 0.04186173, -0.0013989416, 0.010087381, -0.0042455816, 0.0040715574, -0.033268556, 0.022203041, -0.009703329, -0.02052281, 0.049638797, -0.021338923, -0.013645869, 0.0025863543, -0.05563962, 0.008539169, 0.034348704, -0.007777065, -0.0467344, -0.063032635, 0.001226418, -0.00059633167, 0.009517304, 0.009337279, 0.01650226, 0.06519293, 0.0062468555, 0.02599556, 0.03118027, -0.06812133, 0.0554956, -0.0070509654, 0.010471434, -0.041957747, -0.03082022, 0.0147980265, -0.0059858197, -0.032908507, 0.12107258, 0.013309822, 0.03190037, 0.075466335, -0.038837317, -0.020822851, -0.04841463, 0.01599819, -0.020114755, 0.016814303, 0.04344595, 0.077386595, -0.03667702, 0.015638141, -0.0204388, -0.111471266, 0.018854583, 0.02241907, 0.038141225, 0.0027048704, 0.001285676, 0.0049776817, 0.033244554, -0.06327266, -0.004593629, -0.0051607066, -0.025803534, -0.04147768, -0.062264528, -0.015662145, -0.018926593, 0.020414796, 0.011815618, 0.023019152, -0.015002054, -0.016718289, -0.039029345, -0.02935602, -0.025539497, -0.0035914918, 0.030316152, 0.048174597, -0.049926836, 0.0014904541, 0.027387751, 0.019766707, 0.023763254, 0.00035329838, 0.01007538, -0.042245787, -0.048606656, -0.007044965, 0.011917632, 0.038813315, -0.01614221, -0.0011664097, 0.05813596, 0.0045306203, 0.027531771, -0.029308014, -0.0019487669, -0.009217262, 0.0204388, -0.040613562, 0.022743115, -0.054199424, -0.03228442, -0.008149116, -0.03542885, 0.019682696, -0.009697328, -0.002169297, -0.012421701, -0.009811344, -0.05775191, -0.056263704, 0.017858446, 0.015206083, 0.008443156, -0.017174352, -0.017042333, 0.05592766, 0.013285819, 0.0027993834, 0.03710908, -0.0029809081, 0.004905672, 0.0321164, 0.022131031, 0.00040918103, 0.03278849, 0.012481709, 0.026547635, -0.04776654, 0.003732511, -0.020210767, 0.019622687, 0.029380023, -0.047814548, 0.016658282, -0.019898726, 0.029932098, 0.058231976, -0.022527086, 0.0073330044, -0.002512844, -0.0055537606, 0.0043475954, 0.008485162, -0.012139662, 0.031732347, -0.014726017, -0.0018347512, 0.04200575, -0.055735633, -0.060776323, 0.030340156, 0.0160702, 0.044502094, -0.032692477, 0.044502094, -0.013741882, -0.013729881, -0.01578216, 0.015686149, 0.020858856, -0.009913358, -0.008119112, -0.018386519, -0.046758402, -0.04483814, 0.000306792, 0.041501682, 0.022755116, -0.015398108, -0.0090852445, -0.0031504314, -0.0028083846, 0.02089486, -0.06408878, 0.019598683, 0.03242844, -0.039677434, -0.042677846, -0.013021783, -0.05578364, -0.025827536, 0.028227866, -0.06624907, 0.0061298395, 0.033052526, 0.023175174, -0.052087132, 0.048846688, -0.010843485, 0.06620107, -0.022215042, 0.024747388, -0.0068889433, -0.060632303, 0.02789182, 0.017210357, 0.003687505, -0.011257541, -0.001160409, -0.021626962, 0.0076930537, 0.0021587957, -0.032596465, -0.01592618, 0.016298233, 0.009793341, -0.040205505, -0.026907684, -0.015206083, 0.032908507, 0.018170489, 0.021434935, -0.022731112, 0.00452762, 0.025347471, 0.077866666, 0.040133495, 0.027267734, 0.028515905, 0.011443567, 0.024627373, -0.014581997, -0.043781996, -0.009043238, -0.042965885, 0.0039005342, -0.0072189886, -0.0011784114, 0.026643649, 0.017042333, 0.006432881, -0.010321413, -0.009757336, -0.0025533496, -0.00387053, 0.017978461, -0.027435757, 0.005892807, -0.011545581, -0.0153381005, 0.021806987, -0.042533826, -0.0014627003, -0.016658282, 0.009925359, -0.025731524, 0.039365392, 0.01884258, -0.06140041, -0.04344595, -0.021134894, -0.023307191, 0.00013454967, -0.0077590626, -0.0017762432, -0.0160702, -0.009739334, -0.022947142, -8.007346e-05, -0.009955363, 0.010711467, -0.00956531, 0.02103888, -0.0057457867, 0.0006038327, -0.004986683, 0.015590135, -0.041597698, 0.052039128, 0.020990875, 0.013033785, -0.03096424, 0.031132264, 0.0321404, 0.022587093, -0.020618824, 0.045510232, -0.05175109, 0.04752651, -0.008077106, 0.033028524, 0.034036662, -0.034036662, -0.03593292, -0.040109493, -0.029644059, -0.010567447, -0.0074830246, 0.0401575, 0.064808875, 0.042029757, 0.012661734, -0.05578364, 0.028611919, 0.010753472, -0.02899597, 0.02345121, 0.0103994245, 0.061160374, 0.0043265927, -0.025251457, 0.02352322, 0.08295536, 0.034204684, -0.054535467, -0.0137898885, -0.034324702, -0.022359062, -0.004980682, 0.022467077, -0.039965473, 0.011149527, -0.018014466, -0.011935635, -0.060776323, -0.03204439, 0.015206083, 0.0093432795, 0.018278504, -0.009337279, 0.015446115, -0.013825893, 0.017402383, 0.020558815, 0.027027702, 0.02306716, 0.029404027, -0.027243732, 0.0070629674, 0.007699054, -0.03818923, -0.014606, -0.010165392, 0.04563025, -0.024303328, 0.025203452, 0.02402729, -0.061880473, 0.015890175, 0.043926015, -0.026547635, 0.019946732, -0.039005343, -0.0045396215, 0.062024493, 0.025059432, 0.054439455, 0.016898314, 0.00606083, 0.0423418, -0.033460584, -0.0011709103, -0.008641183, -0.026595643, 0.013153802, -0.000912875, 0.0024273323, 0.022047019, -0.019454664, 0.017690422, 0.0019892724, 0.037925195, 0.016994327, -0.012565721, 0.011965639, -0.042701848, -0.012433703, 0.020198766, 0.03979745, -0.016754294, 0.06591303, -0.03146831, -0.027195724, 0.040493544, -0.012913768, 0.05323929, 0.031732347, 0.0137658855, 0.058087956, 0.015938183, 0.040709574, 0.026739663, -0.03125228, -0.046614382, 0.0016817303, -0.03178035, -0.0057847924, -0.054631483, -0.047574516, -0.012865762, 0.034804765, -0.0031774351, -0.031228276, -0.027651787, -0.016178215, -0.0011056514, 0.013057788, 0.07239392, -0.026595643, 0.0008611179, -0.020786846, -0.0046836413, -0.024231318, -0.0025203452, 0.053767364, -0.03614895, -0.030148128, -0.040853593, -0.00576679, -0.01578216, -3.2113774e-05, 0.0022218043, -3.4364082e-05, -0.05856802, -0.0142699545, -0.011617591, 0.00868919, -0.0074530207, -0.011887628, -0.0009661323, 0.04762252, -0.019826716, -0.013561857, 0.00810711, -0.027363747, 0.020690834, -0.0314203, -0.0030514179, -0.036268968, -0.01979071, -0.035284832, 0.034996793, 0.014666009, -0.0111615285, -0.01190563, -0.044742126, -0.0060878335, 0.028755939, -0.02803584, 0.029956102, 0.050694942, 0.04738249, 0.018926593, -0.055111546, 0.011437566, -0.05146305, 0.020198766, -0.033772625, 0.027147718, 0.022167036, -0.053767364, 0.021722974, -0.068361364, 0.0080291, -0.0037025071, 0.06168845, -0.015962185, 0.01986272, -0.045174185, -0.021374928, 0.004218578, 0.027363747, -0.03182836, -0.017210357, -0.010753472, 0.038861323, 0.039461404, 0.018686559, -0.017102342, -0.02124291, -0.022971146, -0.02059482, -0.00262836, 0.01884258, -0.012457706, 0.015818166, -0.02249108, 0.015950184, -0.0013201808, 0.016178215, -0.019406658, -0.0060848333, 0.0048156595, 0.040781584, -0.028827948, 0.0049356758, -0.013333826, -0.011251541, 0.0043145907, -0.015254089, -0.012115659, 0.02577953, 0.0046236333, -0.025827536, -0.00789108, 0.030388162, 0.029764077, 0.0379732, 0.014341964, -0.015206083, -0.028827948, 0.012169667, 0.016550267, 0.004137567, -0.016886313, -0.033316564, -0.045462225, 0.004710645, 0.0007283497, 0.036100943, -0.04337394, 0.012985778, -0.022755116, 0.016010193, 0.016826304, 7.566661e-05, -0.00942129, 0.029548047, 0.013705877, 0.011437566, 0.018362515, 0.05900008, 0.014930044, 0.03590892, -0.04222178, 0.06869741, -0.0057367855, 0.014774024, -0.04548623, -0.016178215, 0.020786846, -0.0059708175, 0.0048156595, -0.028635921, -0.046830412, -0.036557008, 0.01766642, 0.017018331, 0.019850718, -0.0021167898, 0.034876775, -0.03718109, 0.025035428, 0.007897082, -0.00642688, -0.001555713, 0.02277912, -0.003753514, -0.03593292, 0.029187998, 0.008209124, 0.011887628, 0.059720177, 0.017186353, -0.033388574, -0.026979694, -0.056167692, -0.0024408342, -0.030628195, -0.048366625, 0.013309822, -0.0080351, 0.042989887, -0.00035967425, 0.082283266, 0.01598619, 0.015638141, -0.014473982, -0.010885491, 0.00018593171, 0.0068949442, -0.09879753, 0.007194985, -0.009997369, 0.0021167898, 0.0035824906, 0.055543605, 0.045534234, 0.044550102, -0.016634278, 0.010453432, -0.01036942, -0.008071105, -0.04207776, 0.011113522, -0.009547307, 0.00018640053, 0.018194491, 0.03074821, 0.0525672, -0.02293514, -0.019454664, -0.021206904, -0.010117386, -0.059816193, -0.0182665, -0.051655073, -0.013333826, -0.01380189, 0.010867489, 0.03264447, -0.0085691735, -0.03658101, 0.0023103163, -0.035140812, 0.006462885, -0.04769453, 0.0035584874, 0.02606757, -0.034036662, -0.0111615285, 0.03149231, -0.048870694, 0.009691327, -0.020126756, -0.0020942867, -0.0024108302, 0.013297821, -0.0033484586, 0.016838307, 0.01592618, 0.021698972, 0.012793752, -0.044670116, -0.033316564, -0.030052116, 0.014449979, 0.008791204, 0.0070209615, -0.0066129058, -0.024459349, -0.0017207357, 0.011101521, -0.013093793, 0.031204274, 0.00083111384, -0.017354377, 0.0050796955, 0.05285524, 0.04102162, -0.030316152, 0.03768516, 0.013969913, -0.003891533, -0.029644059, 0.027003698, -0.081083104, -0.0008783703, -0.0078010685, 0.006534895, 0.042749856, -0.0029914097, 0.0030274147, 0.02885195, 0.030676201, 0.010675462, -0.028371885, 0.015158076, 0.018458528, 0.008023099, -0.001635224, -0.00057720405, -0.0048516644, 0.018974598, -0.038717303, -0.035812903, -0.009913358, 0.032476448, 0.098605506, -0.04577427, -0.0031804356, 0.00927127, -0.040613562, -0.032164406, 0.014666009, 0.02899597, -0.020270776, 0.003498479, 0.0423418, -0.006576901, 0.0137658855, -0.010429428, 0.002649363, -0.01007538, 0.04322992, 0.02825187, 0.005226716, 0.01993473, -0.0043986025, -0.022155033, 0.0027333742, 0.014377969, -0.030436167, 0.030484175, -0.0182545, -0.006972955, -0.0122176735, -0.049878832, 0.00024603368, 0.008377147, 0.014413974, -0.0053167283, 0.02906798, 0.00912725, -0.022287052, -0.04733448, -0.005673777, 0.0148100285, -0.063032635, -0.0027543772, 0.008341142, -0.008857213, 0.0204508, -0.004812659, 0.03586091, 0.029524043, -0.026307603, 0.0577039, -0.03768516, 0.0008798705, 0.026811672, 0.020270776, -0.014581997, 0.006096835, -0.009385285, -0.002688368, -0.015722154, -0.018638553, -0.039125357, -0.051127, 0.0138739, -0.021230908, 0.020702835, -0.0072909985, 0.02081085, -0.037061077, 0.01788245, -0.008851212, -0.00861718, -0.0076810517, 0.0007463522, -0.018938594, 0.058808055, 0.052903246, 0.0031564322, -0.008845211, 0.103598185, -0.0075970404, -0.0017147348, 0.026811672, -0.009283272], [-0.01511445, 0.026105627, -0.031746667, 0.04512833, 0.02312068, 0.023816325, -0.040296767, 0.023879565, -0.0012766651, 0.043079343, 0.0006592809, -0.0009644157, 0.00039525234, -0.029621791, -0.00473038, 0.03265733, -0.04515363, 0.011421212, -0.014937377, -0.022235315, -0.014557934, -0.04626666, -0.06076135, -0.02410723, 0.034276284, -0.024410784, -0.021893818, 0.016467793, 0.04310464, 0.018402949, 0.056916337, 0.034807503, 0.037463598, 0.009580917, 0.0022845585, -0.028964091, 0.0022813966, 0.024145175, 0.013280479, -0.0023730951, -0.06141905, -0.019857477, 0.0029011522, -0.053931393, -0.02272859, -0.012527918, 0.008841004, 0.0073801517, 0.0019493846, -0.053374875, -0.0066339155, -0.002673487, -0.007911371, -0.0054766163, -0.0061153444, -0.0017312053, 0.07184107, -0.020312808, 0.06784427, 0.007405448, -0.041612167, 0.030405972, 0.05084526, -0.017707305, -0.0027019451, -0.0045912513, 0.0027809956, 0.045634255, 0.0243096, 0.042725198, -0.038450148, 0.021716746, 0.018542077, -0.0019841667, 0.021931762, -0.06926086, 0.0565116, 0.04047384, -0.007974612, 0.0053406497, 0.043054048, -0.015089153, 0.02339894, -0.026687438, -0.0027952245, -0.018542077, 0.048265055, -0.12253455, -0.03199963, 0.024347544, 0.024018694, -0.0138243465, 0.04614018, 0.019048002, -0.0131666465, 0.0049106153, 0.007241023, 0.009966684, -0.004395206, 0.008183304, 0.0071524866, -0.004379396, -0.046342548, -0.06759132, 0.030153012, 0.046696693, 0.026130924, 0.027319843, -0.03627468, -0.026459774, 0.014304973, -0.020300161, -0.0037880985, -0.005375432, -0.017466992, 0.036957674, -0.012433058, -0.049125124, -0.009087642, -0.010036248, -0.096732475, -0.04396471, 0.05157885, 0.032682627, 0.0056600138, 0.018377652, -0.00065177114, 0.05807996, 0.0044837426, 0.0021375248, -0.008404646, 0.0047556763, 0.012211717, 0.054943237, 0.07406713, 0.0021770499, 0.065365255, -0.016720755, -0.034250986, 0.007089246, -0.03331503, 0.01892152, -0.015418003, 0.02772458, -0.01596187, 0.00015118402, -0.012926333, -0.03685649, -0.044065893, -0.017859083, -0.023538068, -0.044040598, 0.013406959, 0.005068716, 0.006690832, 0.0010403042, 0.015215634, 0.019958662, 1.5439545e-07, 0.03389684, 0.0229942, -0.058383513, 0.0031556948, 0.04811328, 0.0021438487, -0.022032946, 0.048265055, -0.006102696, -0.04823976, 0.011060742, -0.009441788, -0.019490683, 0.033947434, 0.009542973, -0.03594583, -0.00026462146, 0.038854886, 0.017833786, 0.002825264, -0.079935834, -0.02463845, 0.059294175, 0.07310587, -0.006197557, 0.0075256047, 0.06511229, 0.038753703, 0.030405972, 0.045305405, -0.04750617, -0.016708108, 0.009517676, -0.049580455, 0.016505739, -0.043686453, -0.012040967, -0.02503054, -0.020603715, -0.008727171, 0.011282083, -0.014747656, -0.032530848, 0.020287512, -0.00053556694, 0.016316017, 0.011604609, 0.039183736, 0.032227296, 0.02404399, -0.019743646, 0.030051826, 0.009802259, 0.010510551, -0.035262834, -0.018997408, 0.04548248, -0.03923433, -0.015772149, -0.014014067, -0.031746667, 0.06141905, -0.019465387, 0.035060465, -0.036679417, -0.008980134, 0.025827369, 0.010934261, 0.015278875, 0.017897027, 0.006226015, 0.002516967, 0.00066323346, -0.017378455, -0.008720848, -0.070677444, -0.007942991, -0.04763265, -0.027648693, 0.036654122, 0.03245496, 0.009720046, 0.003377036, -0.05018756, -0.00877144, 0.039613772, 0.03146841, 0.03554109, 0.036957674, -0.014836192, 0.028837612, 0.008916893, 0.011048093, -0.0012173773, 0.018289117, 0.013836994, 0.07173988, 0.017011661, -0.00067074323, -0.016733404, 0.022311205, -0.021059046, 0.040777393, -0.03215141, 0.04492596, -0.041485686, -0.02338629, 0.05216066, -0.07983465, -0.065415844, 0.003860825, 0.026510365, -0.044571817, 0.0134954965, 0.022779183, 0.030304788, 0.0047999443, 0.07472483, 0.02017368, -0.06693362, 0.027243953, -0.0059604053, 0.03475691, 0.014229084, 0.002877437, 0.029672384, -0.0007177783, -0.0032948235, -0.039740253, -0.04922631, 0.015797446, -0.034529246, -0.030633638, 0.038399555, -0.018440893, 0.050617598, 0.020464586, 0.017897027, 0.015607725, -0.010953233, 0.024423433, -0.01445675, -0.04593781, -0.03215141, -0.028028134, 0.031190153, 0.04474889, 0.013900234, 0.07831688, -0.010194348, -0.05539857, 0.06976678, -0.022589462, -0.012793528, -0.027496915, 0.015620373, 0.0010750864, 0.03159489, 0.033365622, 0.05737167, -0.029495312, -0.017264623, -0.043332305, -0.101994075, 0.009353251, 0.021324655, -0.017112846, 0.029292941, -0.039057255, -0.009226771, 0.03607231, -0.066731244, -0.002681392, -0.0071904305, -0.0017580824, -0.050035786, -0.0992115, 0.021653505, -0.051148817, 0.007702678, -0.02174204, 0.009555621, 0.024840819, -0.052615993, -0.043003455, 0.010112136, -0.036679417, 0.0020837705, 0.023677196, 0.0034940308, 0.02437284, 0.0015493892, 0.03915844, 0.024676394, 0.0027746714, 0.019667758, 0.018845633, -0.018744448, -0.038526036, -0.0054197004, 0.013255183, 0.071335144, -0.07735563, 0.018946817, 0.08524802, 0.0044647707, -0.013280479, -0.039993215, -0.0076584094, -0.00150354, -0.0032758515, -0.051857106, 0.047860317, 0.012363493, -0.008550099, -0.026965696, -0.023639252, 0.058838844, -0.006545379, -0.04823976, 0.022425037, 0.0071398383, -0.037438303, -0.018099396, 0.04459711, 0.021312006, -0.0059667295, -0.014330269, 0.018365005, 0.036805898, -0.016606923, 0.03113956, 0.023500124, 0.0036521317, 0.0128188245, 0.041941017, 0.01780849, -0.017517583, 0.02214678, -0.0063366857, -0.00338336, -0.017416399, 0.014823544, -0.041030355, -0.03194904, 0.06986797, -0.063493334, 0.0124899745, -0.041030355, -0.017859083, 0.026333293, -0.037160046, -0.0012727126, 0.0087081995, 0.030431269, 0.0032473933, 0.038551334, -0.011244139, 0.05408317, -0.0022561003, -0.009188826, 0.04330701, -0.02411988, -0.04581133, 0.02595385, -0.07644497, 0.04915042, -0.04565955, 0.029621791, 0.0005679776, -0.028179912, 0.033669177, -0.010504226, -0.021134933, -0.023221865, -0.0046355193, -0.044065893, -0.0011256787, -0.0055240467, -0.011427536, 0.052615993, 0.028331688, -0.007373828, 0.0005260809, 0.02208354, -0.053931393, -0.008847329, -0.074269496, -0.040423248, 0.042750493, 0.0063145515, -0.009093966, 0.008366702, -0.06824902, -0.000723707, 0.030330084, -0.013267831, 0.016644867, 0.009233095, 0.04479948, -0.084185585, -0.0053501357, 0.016809292, 0.06258268, -0.0039525237, 0.04285168, -0.01386229, -0.046013698, 0.044673, 0.018365005, 0.043585267, -0.03215141, 0.0051193084, -0.03291029, 0.04952986, 0.011604609, -0.053121917, 0.0076204655, 0.0061817467, 0.02490406, -0.0052900575, -0.050288748, -0.0026703249, -0.006709804, 0.04907453, 0.04001851, -0.0096757775, 0.03521224, 0.016847236, 0.1077616, 0.008613339, -0.02385427, 0.009960359, -0.03541461, 0.008366702, -0.003882959, -0.05157885, 0.007930343, -0.03956318, -0.012395114, 0.007550901, 0.017757898, 0.04545718, 0.019730996, 0.014279677, -0.011800654, 0.015797446, -0.024866115, -0.029141165, 0.060558982, 0.0038070707, 0.014507342, -0.020312808, -0.008733496, 0.010877345, -0.0027794144, -0.050212856, -0.015582428, 0.018048802, 0.004142245, 0.03882959, 0.0028537218, -0.05630923, -0.050617598, -0.019085946, -0.039917324, -0.009542973, -0.023335699, 0.001098011, 0.0282558, -0.05026345, -0.012433058, -0.017555527, -0.0074686883, 0.009043374, 0.026055034, -0.00602997, 0.038222484, -0.013609329, -0.015316819, 0.011218843, -0.041359205, 0.044900667, -0.012369817, 0.015342115, -0.013672569, 0.05211007, 0.0604578, -0.026004443, -0.014469398, 0.0051762247, -0.024537265, 0.01484884, 0.018023508, 0.011256787, 0.02056577, -0.040726803, -0.04581133, -0.033036772, 0.0034655726, -0.032859698, 0.005650528, 0.021602912, 0.07745681, 0.015999814, -0.022703296, -0.06354393, 0.024334896, 0.015721558, 0.007860779, 0.013128702, -0.011446508, 0.06754072, -0.006716128, -0.026333293, -0.009909767, 0.0624309, 0.008600691, -0.04548248, -0.00082370586, -0.028028134, -0.042927567, -0.0002069146, -0.008107416, -0.050010487, 0.019073298, 0.03149371, -0.0147856, -0.057321075, -0.040752098, -0.017365808, 0.0042750495, 0.027092177, -0.0058307624, -0.008486859, -0.00234938, 0.0061311545, 0.031316634, 0.0036110254, 0.0033106336, 0.023942806, -0.046747286, -0.038627222, 0.009808582, 0.008335082, -0.032859698, -0.00038220902, 0.016581627, -0.065466434, 0.0059698913, -0.0047872965, -0.11342794, -0.022564165, 0.08661402, -0.021021102, -0.0072663194, -0.024663746, -0.007253671, 0.04889746, 0.013723161, 0.049706936, 0.039664365, 0.023209218, 0.04080269, -0.046013698, 0.057017524, 0.021312006, 0.00272566, 0.019642461, -0.013735809, -0.00026205232, -0.018428246, -0.018377652, -0.0076457616, -0.0115034245, -0.0025501682, -0.010295534, 0.034149803, 0.0018687531, 0.0017391103, -0.007557225, 0.0051509286, 0.003541461, 0.014659119, 0.10280356, -0.036426455, -0.019060649, 0.029798865, -0.010459959, 0.07553431, -0.032404367, -0.035490498, 0.021008452, -0.016100999, 0.042472236, 0.004948559, -0.0236519, -0.019958662, 0.024878765, -0.031164857, 0.0035256508, -0.038551334, -0.037817746, 0.042067498, 0.00090038485, 0.009106614, -0.00074939843, -0.018390302, -0.0022845585, 0.007892399, 0.0024474026, 0.08575395, -0.05959773, -0.057523444, -0.04393941, -0.0064600045, -0.035439905, 0.014241733, 0.040600322, -0.032303184, -0.050035786, -0.02595385, -0.05544916, -0.0126543995, -0.024752283, 0.0018814012, -0.0023778381, -0.04672199, 0.02595385, -0.04750617, -0.0017343673, 0.020413993, -0.045963105, -0.025877962, 0.0545385, 0.02372779, -0.011414887, -0.015076506, -0.06197557, -0.0039651715, 0.005384918, -0.026156219, -0.0011557179, -0.013621977, -0.031240746, 0.015822742, 0.026358588, -0.012237012, -0.021387896, -0.061166093, -0.019920718, 0.035338722, -0.006178585, 0.025827369, 0.059698913, 0.014418806, 0.013267831, -0.012717639, -0.008644959, -0.06713598, 0.050238155, 0.01268602, 0.020249568, -0.021957058, -0.009049698, 0.008467887, -0.029217053, 0.008467887, -0.0020663792, 0.043711748, -0.0055335327, 0.03824778, -0.028609946, 0.015190338, 0.0039493614, 0.01116825, 0.015607725, -0.037564784, -0.0015509702, 0.038450148, 0.011048093, 0.032682627, -0.016100999, -0.05413376, -0.06025543, -0.016202183, -0.02936883, 0.023234515, -0.035009872, -0.0058212765, -0.03936081, 0.0073042633, -0.035009872, -0.019237721, -0.038778998, -0.020059846, 0.03718534, 0.023411587, 0.01137062, -0.0036173495, -0.033011477, -0.032429665, 0.0047525144, 0.000839516, -0.0018244848, 0.0269404, 0.00026244755, -0.0063398476, -0.04285168, 0.023563365, 0.040069103, 0.029520607, 0.07442127, -0.011705793, -0.0029564875, -0.0051098224, -0.008632312, 0.03495928, -0.013836994, -0.036375865, -0.012774556, -0.017138142, 0.012540567, 0.0056315553, -0.007879751, 0.05342547, -0.020907268, -0.008727171, -0.018112043, 0.009011754, -0.014924728, 0.025612352, 0.014633823, 0.021274062, 0.020957861, 0.056258637, -0.004939073, 0.0013849642, -0.024549915, 0.040524434, -0.01649309, 0.010940585, -0.05433613, 0.0056884717, 0.042725198, 0.013546089, -0.00020711223, -0.019832183, -0.011990375, -0.038930774, 0.030405972, 0.007936667, 0.0063398476, 0.020338105, 0.012009347, 0.00502761, 0.018542077, -0.009821231, 0.017909674, -0.0064821383, 0.031721372, 0.0023035307, -0.042269867, 0.019085946, -0.016075704, 0.02379103, 0.060407206, 0.013343719, -0.016442498, -0.025928553, -0.003863987, -0.029217053, -0.024195768, -0.02391751, 0.008417294, -0.0249673, 0.042801086, -0.024651099, 0.059901282, 0.004565955, 0.0147856, -0.058636475, -0.026889808, 0.014064659, 0.0046260334, -0.05347606, 0.011345323, 0.021590265, 0.02523291, -0.0041074622, 0.033264436, 0.038222484, 0.008189629, 0.025435278, -0.0031351417, -0.004411016, -0.0061374786, -0.04717732, 0.005192035, -0.018934168, 0.028812315, 0.031063672, 0.016720755, 0.009720046, -0.047531467, 0.019832183, -0.0030924543, -0.042876974, -0.057928182, -0.0027889006, 0.007405448, -0.0106812995, -0.009916091, 0.022652702, 0.018238524, 0.015519188, -0.015089153, 0.032505553, -0.012799852, -0.021463783, -0.0136599215, 0.030102419, -0.005501913, -0.06582058, 0.008139037, 0.005909813, -0.05737167, 0.025397334, 0.005226817, -0.011117658, 0.00234938, -0.0069754133, -0.0011343742, 0.032353777, -0.040119693, 0.022007652, 0.014659119, 0.008670256, 0.015544484, -0.02805343, 0.015987167, -0.002705107, -0.02142584, -0.007835482, -0.045305405, 0.046418436, -0.0018798201, 0.008670256, 0.022614758, -0.0022592624, 0.0048094303, -0.026560958, 0.014089956, 0.013065462, -0.031974334, 0.034023322, -0.014241733, 0.002716174, -0.009682101, 0.02358866, -0.0243096, 0.032834403, 0.035439905, 0.054437317, 0.019237721, -0.023866918, 0.007399124, 0.008176981, 0.001339115, 0.026156219, -0.03121545, 0.016644867, 0.027901653, 0.026130924, 0.004733542, 0.0047904584, -0.020451937, 0.014279677, 0.017580824, -0.029824162, -0.035490498, 0.021337302, 0.052717175, -0.013356367, 0.0054987506, 0.00438572, -0.047986798, -0.025131725, 0.009909767, 0.04889746, -0.0016252777, -0.008752468, 0.011440184, -0.024954652, 0.008954837, 0.0037975844, -0.028888203, 0.0037153722, 0.034453355, 0.012635427, 0.040043805, 0.014633823, -0.0073928, 0.0025201289, 0.0057833325, 0.040903874, -0.006118506, 0.0054197004, -0.010959557, 0.009245743, 0.01649309, -0.054285537, 0.0223365, 0.019313611, 0.033011477, 0.020477233, 0.010080515, -0.012907361, 0.012717639, -0.07082922, 0.0086892275, 0.024208415, -0.039714955, -0.024524618, -0.0010300276, 0.0064441944, -0.031240746, -0.016594274, 0.022045596, 0.0058054663, -0.031316634, 0.029444719, -0.07052567, -0.016872533, 0.043256417, -0.00082686794, -0.010618059, 0.01892152, -0.0048315646, 0.002354123, -0.014254381, -0.011237815, -0.030583046, -0.048366237, 0.018415598, -0.04211809, 0.029444719, -0.00096283475, -0.017074902, -0.039866734, 0.0037469922, 0.012755584, -0.006267121, -0.040752098, -0.022551518, 0.029014684, 0.031114265, 0.014140548, 0.0003685728, -0.00072173076, 0.05610686, 0.0030877113, -0.011364295, 0.022020299, 0.0020537311], [-0.036087133, 0.015177688, -0.021734817, 0.029048536, -0.008987392, -0.0049980907, -0.059197567, 0.048284307, -0.0030378303, 0.03663738, -0.038402762, 0.0154184215, 0.019407723, 0.008093239, -0.001474494, 0.017940395, -0.045899898, 0.01662209, -0.02181506, -0.022514334, -0.004639856, -0.044042807, -0.04294231, -0.017951857, 0.023981664, -0.019235771, -0.02377532, 0.01381353, 0.004714369, 0.011515097, 0.04555599, 0.01188766, 0.009956059, 0.011320217, 0.0029145975, 0.004849065, 0.0040896074, 0.077218205, -0.0030722208, -0.0025721253, -0.055758517, -0.0011305887, 0.010896067, -0.03079099, -0.003863203, -0.004499428, 0.010076426, -0.021792134, -0.008339704, -0.02158579, -0.0016034585, -0.0046484536, -0.039296914, -0.01293084, -0.023385562, 0.0032499053, 0.06057319, -0.049155533, 0.061077584, -0.025999242, -0.042896457, 0.042781822, 0.064012244, -0.018100884, 0.0153496405, 0.021688962, 0.012942303, 0.016301112, 0.039824236, 0.054291185, 0.013137183, 0.021390911, 0.015131834, -0.0057030963, -0.010827286, -0.053603377, 0.05011847, 0.016175013, 0.02909439, -0.018903328, 0.027237302, -0.014971345, 0.013068402, -0.0072392067, -0.005880781, -0.048421867, 0.013137183, -0.1146351, -0.029759273, -0.016312575, 0.016553309, 0.019212844, 0.005270349, -0.009291176, -0.038219344, 0.00062834367, 0.01694307, 0.015166225, -0.0039893016, 0.0034705778, 0.002036206, -0.02024456, -0.06965229, -0.04525794, 0.015831107, 0.05516241, 0.037210554, -0.010517771, -0.012128394, -0.041291565, 0.020886516, -0.021069933, -0.018983573, 0.033840284, -0.017160876, 0.015831107, -0.039893016, -0.038815446, -0.06314102, -0.020496758, -0.09033246, -0.06419566, 0.044042807, 0.0061444417, 0.032372955, 0.0157394, -0.0024188007, 0.07295378, 0.02204433, -0.0015848303, -0.021666035, 0.0051356526, 0.008953001, 0.025609482, 0.076484546, 0.038975935, 0.06763471, -0.022617506, -0.032029048, 0.011400461, -0.074329406, 0.02112725, -0.020863589, 0.034849074, 0.0023285255, -0.010064962, -0.0054251063, -0.03347345, -0.046037458, -0.03679787, -0.044593055, -0.050072614, -0.020382121, 0.010769968, 0.042827677, -0.018949183, 0.021047005, 0.044295006, -0.013687432, 0.02448606, 0.031937342, -0.062453207, 0.013114256, 0.047137957, 0.01439817, -0.07180743, 0.034872, -0.04580819, -0.030355375, 0.016954532, 0.018502107, -0.019694312, 0.060206357, -0.027741695, -0.0595644, 0.024967525, 0.03762324, -0.015246469, -0.016599163, -0.06488347, -0.02054261, 0.06653421, 0.04665649, -0.017436, 0.023190683, 0.044295006, 0.05502485, 0.024440205, 0.050072614, -0.05442875, 0.039961796, -0.0056830356, -0.039755456, -0.008437144, -0.005101262, 0.019568212, 0.022571653, -0.013893775, 0.023248, -0.013435234, -0.016415747, -0.04117693, 0.028337799, -0.05011847, -0.02632022, 0.016037451, 0.006345053, 0.02269775, -0.0136645045, 0.026503636, 0.005201568, 0.005688767, 0.0022697751, -0.035812005, -0.0061559053, 0.018605277, -0.03356516, -0.03601835, -0.013274745, -0.03725641, 0.038884226, -0.02393581, 0.026847541, -0.013171574, -0.02478411, 0.011944978, 0.046587706, -0.008270923, 0.028773412, 0.010930457, -0.048834555, -0.046587706, -0.016312575, 0.02693925, -0.05433704, 0.014489877, -0.004688576, -0.019304551, 0.025747044, 0.00024055461, 0.0014042801, 0.0037285069, -0.040580828, -0.006837984, 0.00594383, 0.05094384, 0.023007266, 0.01639282, -0.0119793685, 0.0030836842, -0.0046742465, 0.0076232343, 0.016404284, 0.037898365, -0.015624765, 0.09322127, 0.009319834, -0.024119226, -0.008110434, 0.049063824, -0.043767683, 0.029644638, -0.035766155, 0.050072614, -0.024531912, 0.00043203105, 0.04865114, -0.036889575, -0.05773024, 0.02824609, 0.024050444, -0.055208266, 0.015888426, 0.008907148, 0.044776473, -0.024531912, 0.063462, 0.06364541, -0.0022353847, 0.028910974, -0.005413643, 0.022032868, 0.020909443, 0.009577763, 0.009027515, -0.023339707, 0.010741309, -0.023889955, -0.037004214, 0.023018729, -0.032212466, 0.015716473, 0.03787544, -0.010116548, 0.04358427, 0.02556363, -0.002597918, -0.0035651517, -0.027672915, 0.0066832267, -0.022468481, -0.024073372, -0.044134516, -0.03024074, 0.0073538423, 0.06089417, 0.026985103, 0.09257931, -0.021792134, 0.0133206, 0.069744, -0.015005736, -0.026664125, -0.025082162, -0.017883077, 0.013824994, 0.02994269, 0.013228891, 0.01909821, -0.03230417, 0.013056939, -0.028933901, -0.10858237, 0.0038975936, 0.04016814, 0.029025609, 0.016037451, -0.025609482, -0.01685136, 0.02377532, -0.05442875, 0.0071360352, -0.0010360148, 0.027283154, -0.035147123, -0.08840659, 0.0029160306, -0.04679405, 0.021964086, -0.0223997, -0.022732142, 0.014994272, -0.06048148, -0.0033874675, 0.021207495, -0.039044715, 0.0011384699, 0.03695836, 0.016473064, 0.018628204, 0.0013677401, 0.022090185, 0.019178454, 0.018536497, 0.027535353, -0.0057288893, -0.014489877, -0.039228134, -0.029392442, 0.014948417, 0.061169293, -0.030836843, 0.025976315, 0.08455485, 0.018995037, -0.037279338, -0.008316777, -0.018433325, -0.025265578, -0.006322126, -0.04665649, 0.02987391, -0.022674823, -0.024508985, 0.0013906672, -0.016094768, 0.06589226, -0.016060378, -0.057134137, 0.0125181535, 0.031157821, -0.04108522, -0.022067258, 0.025128014, 0.014501341, -0.0147076845, -0.033771504, 0.02207872, 0.035124198, -0.0006759889, 0.020393586, 0.039388623, 0.016484529, -0.0076518934, 0.024577767, 0.023981664, -0.06112344, 0.0142032895, 0.0036511282, 0.025494847, 0.007422623, 0.0010138042, -0.030378303, -0.020577002, 0.050301883, -0.066671774, 0.0031352702, -0.02269775, 0.0131257195, 0.050393593, -0.02563241, 0.016576236, -0.0014494177, 0.030515864, 0.011096679, 0.03503249, -0.024807038, 0.046931613, -0.020256024, 0.042804748, 0.054382894, -0.03294613, 0.0035737494, 0.04810089, -0.08244557, 0.031891488, -0.06557128, 0.024508985, -0.04473062, -0.011194118, 0.007961408, 0.0038374101, -0.038586177, -0.007915554, -0.017974785, -0.04532672, 0.0069870097, -0.037462752, -0.0091478815, 0.05818878, -0.026732907, -0.028269017, 0.034298822, 0.018215518, -0.0828124, 0.014730611, -0.072632805, -0.015487202, 0.06337029, -0.021792134, -0.021505546, -0.009291176, -0.05626291, -0.008311045, -0.018284298, -0.013377917, -0.006494079, 0.044845253, 0.022915557, -0.04548721, 0.015338177, 0.009640812, 0.052732147, -0.02220482, 0.055070706, 0.0072449385, -0.044455495, 0.031364165, 0.024921672, 0.036522746, 0.0011750099, 0.021906769, -0.008540316, 0.050531156, 0.007846773, -0.05332825, -0.016862825, 0.015922816, -0.0025491982, 0.028475361, -0.02771877, -0.0014422529, -0.021482619, 0.035215903, 0.02524265, -0.023454342, 0.05773024, 0.025747044, 0.09074515, -0.0027512426, -0.047504786, 0.018490642, -0.016965996, 0.003370272, -0.035238832, -0.049384803, 0.0012251626, 0.018651132, 0.009973254, 0.0004141193, -0.0012144156, 0.07556746, 0.059151713, 0.005247422, -0.0030836842, 0.021872379, -0.026801689, -0.04833016, 0.013217428, 0.023270927, -0.006534201, -0.012713033, -0.013412307, -0.0034849073, -0.015968671, -0.052823856, -0.0040408876, -0.002410203, 0.008356899, 0.034665655, -0.0064310296, -0.022502871, -0.05763853, -0.020943834, -0.023167755, -0.021367984, 0.0039319843, 0.014948417, -0.016404284, -0.06304931, 0.008603364, -0.026251439, -0.003063623, -0.0013992648, -0.016839897, 0.024417277, 0.026664125, 0.018949183, -0.006855179, 0.0016550444, -0.033152472, 0.03448224, -0.0004871992, 0.012919377, -0.005201568, 0.038517397, 0.057363406, -0.0120481495, -0.013916702, 0.016003061, -0.025747044, 0.03948033, 0.015097443, 0.026847541, 0.032372955, -0.04142913, -0.04855943, -0.0572717, 0.012392055, -0.025609482, -0.009445933, 0.012071077, 0.07818114, 0.04434086, -0.020920906, -0.06474591, 0.025540702, 0.00014804049, -0.0013276178, 0.021826524, 0.03131831, 0.04424915, 0.0054394356, -0.021929696, -0.025380213, 0.05424533, 0.011136801, -0.024440205, -0.012392055, -0.020588465, -0.050760426, 0.007451282, -0.0029919762, -0.05433704, 0.016736725, 0.04363012, -0.026136804, -0.037439827, -0.038219344, -0.0147764655, 0.012839132, -0.0055655343, 0.013205964, 0.0063851755, -0.005018152, -0.008477266, 0.016346967, -0.018903328, -0.020382121, 0.008465802, -0.024050444, -0.02289263, 0.03778373, 0.010930457, -0.0074168914, -0.003212649, 0.010019109, -0.03810471, 0.04094766, -0.007703479, -0.12499812, -0.0074627455, 0.063920535, -0.034505166, 0.020336268, -0.04349256, -0.0022396834, 0.053603377, 0.022296527, 0.035972495, 0.04755064, 0.022709215, 0.0538785, -0.046358436, 0.042621333, 0.019361869, -0.010534966, 0.021757742, 0.0005767579, -0.0046255267, -0.002178067, -0.011131069, -0.035238832, -0.0031352702, -0.017653806, -0.025999242, 0.02171189, 0.0008912879, 0.006740544, 0.011497901, 0.02586168, 0.058005363, 0.0063393214, 0.120321006, -0.029461222, -0.0223997, 0.033611014, -0.0091478815, 0.035926644, -0.0016708067, -0.010936189, 0.0031897218, 0.0037141775, 0.05103555, 0.020267487, -0.021975549, -0.0066373725, 0.0071073766, -0.018330153, 0.012105467, -0.030309523, -0.024761183, 0.023030194, 0.018949183, 0.001335499, -0.035972495, -0.043951098, -0.041199856, -0.0059839524, -0.0071761576, 0.07414599, -0.0754299, -0.042208645, -0.048376016, -0.014145972, -0.029415369, -0.0046742465, 0.021952624, -0.008912879, -0.037233483, -0.018914793, -0.07666796, -0.010666797, -0.01669087, 0.00416412, 0.0060298066, -0.04688576, -0.003602408, -0.03154758, -0.003092282, 0.010649601, -0.03478029, -0.01577379, 0.047917474, 0.0016507455, 0.003275698, 0.011910588, -0.05085213, 0.018100884, 0.015670618, -0.0011570981, -0.04408866, -0.02609095, -0.03718763, 0.031455874, 0.03287735, -0.006975546, 0.004682844, -0.048146743, -0.049659926, 0.043056946, 0.004241499, 0.022984339, 0.060252212, 0.010787164, -0.009296907, -0.00088913855, 0.0042615603, -0.08826903, 0.040649608, 0.0069927415, 0.00623615, 0.007336647, -0.037393972, 0.020256024, -0.04317158, 0.026847541, -0.0157394, 0.034115408, -0.010764237, 0.02282385, -0.028360724, -0.0022353847, -0.007955676, 0.005576998, -0.01116546, -0.013366453, 0.00078381755, 0.009978986, -0.0008153422, 0.022720678, -0.030126106, -0.026893396, -0.059151713, 0.002509076, -0.020657247, 0.024463132, -0.016140623, 0.010609479, -0.011400461, -0.02439435, -0.036752015, -0.0030034399, -0.034344677, 0.019648457, 0.04631258, -0.0040580826, -0.01335499, 0.0037027139, -0.0057231574, -0.017080631, 0.037921295, -0.026159732, 0.006901033, 0.0114577785, 0.009583495, -0.0147764655, -0.033358816, 0.0075831125, 0.0012695838, 0.052732147, 0.06566299, -0.03131831, 0.0076920157, -0.008763853, -0.008672146, 0.049751636, 0.0030464279, -0.032923203, -0.04294231, -0.009262516, 0.018719913, 0.0005821314, -0.014123045, 0.04695454, -0.018559424, -0.040626682, -0.011606804, 0.017596489, -0.029552931, 0.014031337, 0.022445554, -0.0022511468, 0.01224303, 0.052686296, 0.0014845246, 0.023729468, -0.016495991, 0.0071589625, 0.010001913, 0.018685522, -0.06460834, 0.01067826, 0.06442493, -0.0014730612, 0.024761183, -0.005556937, -0.023305317, -0.04640429, 0.01400841, 0.011022165, 0.037646167, -0.016530382, 0.029415369, 0.0070156683, 0.023500197, 0.018570887, -0.0005864302, 0.009016051, 0.002272641, -0.033083692, -0.058922444, 0.016713798, -0.04408866, 0.044134516, 0.049751636, 0.009807033, 0.007147499, -0.0039033254, -0.011113874, -0.040878877, -0.024761183, -0.02217043, -0.0069698147, 0.0030607574, 0.046106238, -0.00036898174, 0.06910204, 0.00074297877, -0.0052617514, -0.018662596, -0.007818114, -0.004169852, 0.010460453, -0.036453962, 0.026274366, -0.021792134, -0.022594579, 0.007072986, 0.017298438, 0.019831873, 0.023064584, 0.018226981, -0.01466183, -0.0028845058, -0.014638903, -0.057913654, -0.013332062, 0.01955675, 0.01508598, 0.03755446, 0.0071704257, 0.014959881, -0.016484529, -0.0136645045, 0.0021307801, -0.04232328, -0.037967145, -0.011704245, 0.03432175, -0.0032957592, -0.029896835, 0.01316011, 0.040282775, 0.03934277, -0.026572417, 0.021241885, -0.011452047, -0.015647693, -0.015361104, -0.007921286, -0.008471535, -0.04787162, 0.0054079113, -0.00076733873, -0.029667566, 0.01462744, 0.006717617, 0.015326713, 0.012758887, 0.002977647, 0.0013885177, 0.048146743, -0.039572038, 0.0068265204, 0.020611392, -0.025540702, -0.010609479, -0.024531912, 0.04379061, 0.016152086, -0.009938864, 0.025380213, -0.021081395, 0.043515485, -0.015143298, 0.03354223, 0.02393581, -0.02547192, -0.014914027, -0.033748575, 0.0357203, 0.0054222406, -0.06034392, 0.015235006, -0.008333972, -0.04541843, 0.020760417, 0.02762706, -0.023821175, 0.032900274, 0.007514331, 0.043309145, 0.013343526, -0.03248759, 0.013286209, -0.00069855765, 0.011910588, 0.002011846, -0.049338948, -0.0032842958, 0.031432945, 0.012151321, 0.014294998, -0.0064482247, -0.007732138, 0.035582736, 0.016220868, -0.0035021026, -0.0032241123, 0.016083306, 0.070844494, -0.017023314, -0.0131257195, 0.04209401, -0.08015287, -0.026687052, 0.041062295, 0.004290219, 0.037485678, -0.020164315, 0.052136045, -0.020622855, -0.00057425024, 0.002529137, -0.014340851, 0.007898359, 0.05717999, 0.006511274, 0.011497901, 0.021459691, -0.022067258, 0.00016013092, 0.009210931, 0.013251818, -0.010259842, 0.049155533, -0.04401988, 0.011795952, 0.017779905, -0.025678264, 0.0032842958, 0.0097554475, 0.000590729, 0.021459691, 0.009572031, -0.010397404, -0.00848873, -0.060619045, 0.0109877745, 0.014914027, -0.053374104, 0.014226217, 0.02024456, -0.0007060806, -0.018754303, -0.0102942325, 0.03578908, 0.015716473, -0.038402762, 0.024967525, -0.048238453, -0.043194506, 0.015854035, 0.0047860155, -0.0011857569, 0.028521214, 0.0039463136, -0.0043303412, -0.0062762722, 0.020038217, -0.0072220117, -0.024050444, 0.0191326, -0.035376392, 0.0025205393, 0.012598398, 0.018272836, -0.053465813, 0.019029427, 0.018880403, 0.023637759, -0.027030958, -0.010271305, 0.034436386, 0.032923203, 0.025426066, -0.0016120562, 0.004241499, 0.048376016, 0.0011728604, -0.024463132, 0.019614067, 0.0017668136], [0.04311408, 0.011898586, -0.022592679, 0.035189196, 0.022266228, 0.06056234, -0.004789828, 0.064524785, 0.016570216, 0.03127178, -0.06979303, 0.0053470465, -0.015545835, -0.038093485, 0.0036472487, 0.043676928, -0.030956585, 0.023527006, -0.015241897, -0.054168396, 0.025575768, -0.039601915, -0.058040783, 0.011437051, 0.021849722, -0.016468903, -0.020904139, 0.0041256687, -0.026566379, 0.03302786, 0.011853558, 0.017594598, 0.039016556, -0.02472024, 0.027489448, -0.035301764, 0.01302428, 0.043361735, -0.06479495, -0.009157521, -0.05605956, -0.0075477785, -0.022705248, -0.014847904, -0.018956687, 0.010896718, -0.019936042, -0.019834729, -0.006849848, -0.068262085, 0.001447924, -0.021883491, 0.0035149795, -0.0049727536, -0.017774709, -0.025485713, 0.013801008, -0.033725794, 0.01990227, -0.02762453, 0.0023850643, 0.06547037, 0.033590708, -0.022412568, -0.007964285, -0.017797222, 0.013947349, 0.027894698, 0.026296213, 0.0182475, 0.0040271706, 0.032239877, -0.023842199, -0.05043109, 0.0047335434, -0.08303119, 0.08820938, 0.024877839, -0.025080463, -0.0317896, 0.0031603859, -0.033455625, 0.042731345, -0.003914601, 0.012697829, -0.06294881, 0.03410853, -0.09028066, -0.028097322, 0.008347021, 0.0040384275, -0.0037795177, 0.04862998, 0.033433113, -0.049035233, 0.019823471, 0.038386166, 0.007181928, -0.038363654, -0.025575768, -0.014307571, -0.02994346, -0.06565048, -0.042573746, 0.020431347, 0.03185714, 0.027872184, -0.04862998, -0.014588995, 0.034896515, 0.006669737, -0.043699443, -0.009776653, 0.023369407, -0.026543865, 0.04790954, -0.03946683, -0.09816052, -0.07172922, 0.015523321, -0.09671963, -0.006979303, 0.04309157, 0.022648964, -0.025913477, 0.0016111495, 0.01063218, 0.042371124, 0.0066021956, -0.016198738, -0.021500755, 0.0073057543, 0.04664876, 0.035639472, 0.056780007, -0.016300049, 0.062048256, -0.0034586948, -0.04246118, -0.0033967816, -0.08438203, -0.011853558, 0.0038161029, 0.033095405, -0.036810193, -0.011864815, -0.02240131, -0.036742654, -0.055339117, -0.010598409, -0.033748306, -0.005876123, -0.0031744572, 0.015849773, 0.030934071, -0.019992325, 0.02100545, -0.0035487504, 0.0052992045, 0.02196229, 0.04230358, -0.09473841, 0.0059774355, 0.0032757695, -0.0145327095, -0.068127, 0.049980816, -0.02512549, -0.027827157, 0.020532658, 0.042708833, -0.026949115, 0.018191215, 0.022682734, -0.034783944, 0.039556887, -0.0016941695, 0.04682887, 0.002249981, -0.07857344, -0.074340835, 0.046040885, 0.011729732, -0.066686116, 0.03068642, 0.011707217, 0.010969888, 0.008566531, 0.033117916, -0.0640745, -0.014352599, 0.010609666, -0.020228721, -0.0223, -0.021444472, -0.04194336, -0.015388237, -0.02778213, -0.022637706, 0.02726431, 0.0063883136, -0.050971426, -0.047819484, 0.012889196, -0.051781926, 0.008211938, 0.002909919, -0.009315118, 0.0066134525, -0.014240029, 0.025035435, 0.024675213, 0.0150505295, -0.0015717503, -0.008527133, 0.028164865, -0.03302786, 0.025800908, -0.0009012588, -0.066821195, 0.06299384, -0.005653798, 0.04084018, 0.0030787732, -0.013913578, 0.043046538, 0.018044876, -0.0010356385, -0.013069307, 0.044690054, 0.039309237, -0.059301563, -0.044239774, 0.020510145, -0.04248369, -0.03683271, -0.033275515, -0.02332438, 0.038949013, -0.002096605, 0.012146238, 0.046963956, -0.012934225, -0.021286873, 0.029065419, 0.056870062, -0.0057157115, -0.009939878, -0.025215546, 0.013936092, -0.014172488, -0.025688337, 0.07010823, 0.024922866, -0.016423875, 0.045815747, -0.022198686, -0.018754063, -0.021286873, 0.012044926, -0.008814184, 0.06776678, -0.027647045, 0.07028834, 0.0012227851, -0.043181624, 0.035774555, -0.04966562, -0.036044724, -0.04252872, 0.039534375, -0.037260473, 0.012574002, 0.03057385, 0.07213447, 0.009849823, 0.005605956, 0.0027115154, -0.05655487, 0.058220897, -0.046333566, 0.05227723, 0.014735335, 0.009883594, 0.06155295, 0.041898333, -0.024067339, 0.014667793, -0.034783944, -0.018461382, -0.002718551, -0.021050477, 0.052997675, 0.00421291, 0.054438565, -0.010699722, -0.008645331, -0.0262737, -0.045095302, -0.024089852, -0.02755699, 0.023279352, -0.023864713, -0.045815747, -0.009562771, 0.028480059, 0.009669712, 0.0945583, -0.0036528772, -0.013868551, 0.059661783, -0.012236294, -0.027466934, -0.037688237, 0.024089852, -0.04020979, 0.010356385, 0.028862795, 0.05605956, -0.05025098, 0.007007445, -0.018675264, -0.09347763, -0.016660271, 0.021455728, -0.0026383454, -0.012022412, -0.005780439, -0.05655487, 0.022637706, -0.07303503, -0.0037007192, -0.031181725, -0.0373055, -0.04709904, -0.07042342, -0.014881675, -0.03597718, 0.0155796055, -0.025508227, -0.022108631, 0.009939878, -0.02273902, -0.04705401, -0.007288869, 0.021331903, 0.0032532557, -0.015500807, 0.021388186, -0.014622766, 0.001215046, 0.056644924, 0.051331647, 0.044374857, -0.0057522967, 0.001238967, -0.04466754, -0.04102029, 0.012562745, 0.0181687, 0.06556042, -0.059976976, 0.010367642, 0.020352548, 0.006118147, -0.043654416, -0.024967894, -0.013249419, -0.027872184, 0.04077264, -0.045748204, 0.025102977, -0.04351933, 0.0072494694, -0.024269963, -0.021872235, 0.029650781, -0.01850641, -0.03777829, 0.009039323, -0.0102269305, -0.03615729, -0.0027410649, 0.010491468, -0.013710953, 0.041808277, 0.00075210433, 0.0071312715, 0.008082483, -0.028705198, -0.015163098, 0.033860877, 0.0014929516, -0.012528975, 0.018022362, 0.0113807665, -0.010266329, -0.0012600737, 0.016209994, 0.007508379, -0.012281322, 0.008763528, -0.0059211506, -0.028525086, 0.04248369, -0.029155476, -0.021399444, 0.0043311077, 0.007924886, 0.05425845, 0.0041678823, -0.020465117, -0.0027072942, -0.0074914936, 0.020037353, 0.015028016, -0.016862897, 0.036292374, -0.04131297, -0.010519611, 0.047684398, -0.02634124, -0.063083895, 0.03127178, -0.0056003276, 0.05344795, -0.05227723, 0.044892676, 0.008724129, -0.037440583, -0.03046128, 0.02814235, 0.023121756, 0.006022463, 0.0030365596, -0.07587178, -0.038251083, -0.03208228, 0.01633382, 0.027421907, -0.006669737, -0.032735184, 0.021838464, 0.014026147, 0.0062307166, -0.006061862, -0.03453629, 0.0262737, 0.007908001, -0.0047448003, -0.014543966, 0.0028874052, -0.054213423, -0.0109642595, 0.053492982, -0.003149129, -0.010637809, 0.01041267, 0.025508227, -0.086633414, -0.02048763, 0.021185562, 0.024877839, -0.018112417, 0.028119836, -0.0061350325, -0.028412517, 0.044397373, -0.0140036335, -0.0016055211, -0.001162279, -0.0150505295, -0.028682685, 0.029155476, -0.03196971, -0.037913375, 0.0015506435, 0.009264462, 0.037395556, -0.029695809, -0.024517616, -0.038070973, 0.019733416, 0.07501625, 0.022097373, 0.0037373041, 0.03230742, 0.015962342, 0.05732034, 0.026566379, 0.04009722, 0.050971426, 0.015455779, -0.0014169674, 0.01302428, -0.0017701539, -0.04311408, -0.05511398, 0.018303785, -0.0071200146, 0.030056031, 0.03870136, 0.03446875, 0.058446035, 0.024562644, -0.006461484, -0.01964336, -0.037868347, 0.015039273, -0.02645381, -0.042708833, -0.021860978, -0.042618778, 0.019440737, -0.017448258, 0.0059549212, 0.009979278, 0.015455779, 0.004846113, 0.014611509, -0.0127428565, -0.036540028, -0.026138615, -0.030551337, -0.003866759, -0.007328268, 0.008977409, -0.0142175155, -0.017380716, -0.025035435, 0.01236012, -0.018675264, 0.0017265332, 0.02354952, -0.0046406738, 0.0011770538, 0.023932256, 0.020859111, -0.045703176, 0.0020135853, -0.027399393, 0.060832504, -0.0005850091, -0.013958606, 0.010215674, 0.04966562, 0.015917314, 0.024990408, -0.014870418, 0.021770922, -0.06150792, 0.03969197, 0.0019784071, 0.024382534, 0.025575768, -0.027061684, -0.035774555, -0.011898586, -0.00029074567, -0.0030956585, 0.023774657, 0.01607491, 0.071504086, 0.071459055, -0.008836698, -0.01699798, 0.033117916, 0.010525239, 0.017437, 0.034761433, 0.027421907, 0.028390003, -0.012348863, -0.026611406, -0.0143188285, 0.044397373, 0.0068667335, -0.030011002, 0.010271958, 0.0011144371, 0.004581575, -0.018179959, 0.023504492, -0.038251083, -0.0072269556, 0.010789777, -0.023414435, -0.035256736, -0.034761433, 0.04293397, 0.011251312, 0.01865275, 0.02454013, -0.010851691, 0.026814032, 0.03829611, 0.034446236, 0.0064783692, 0.012247551, 0.012607773, 0.00077321107, 0.008617188, 0.0036950905, 0.0068667335, -0.0079192575, -0.024427561, 0.052322257, -0.05128662, 0.0031941568, 0.03521171, -0.046693787, -0.02645381, 0.047774453, 0.01792105, 0.015410751, -0.018596465, 0.005400517, 0.034964055, -0.005197892, 0.085732855, 0.060202118, 0.008313251, 0.059571728, -0.047324177, 0.030483793, -0.0027931284, 0.015129328, 0.0036416203, -0.023752144, 0.021298131, 0.014588995, -0.052412312, -0.015557092, -0.03138435, 0.0069061327, 0.05308773, 0.020453861, 0.066100754, -0.034828972, 0.044532456, 0.018709036, 0.021759665, -9.594783e-05, 0.054033313, -0.046783842, -0.030708933, 0.05750045, 0.0009097015, 0.04709904, -0.01810116, -0.017380716, 0.027669558, -0.00978791, 0.023369407, 0.024585158, -0.0053104614, -0.030934071, 0.044037152, -0.021466985, 0.010981145, -0.040389903, -0.0468739, -0.0006912465, 0.031226752, -0.0019966997, -0.021906005, -0.017200604, -0.023527006, -0.015140585, 0.022018576, 0.080779806, -0.014082433, -0.023166783, -0.043699443, -0.042191014, -0.0015548649, -0.009613427, 0.027286824, -0.0012157495, -0.02343695, -0.06294881, -0.008605931, -0.045635637, -0.026836546, -0.054978896, -0.013215648, -0.0603372, 0.0020684628, -0.005746668, 0.0062644873, -0.002358329, -0.01847264, -0.0036416203, 0.022705248, -0.0068892473, -0.008752271, -0.0036331774, -0.018371327, 0.0070581017, 0.029515697, -0.036112264, -0.010598409, -0.0041847676, 0.0016238136, 0.01681787, 0.05124159, -0.018866632, -0.010716607, -0.06411953, -0.03208228, 0.02726431, 0.019733416, 0.016671529, 0.062318422, 0.0042185383, 0.021804694, -0.028480059, 0.017223118, -0.08100494, 0.016401362, -0.025688337, -0.013530842, 0.00062581553, -0.0108573185, 0.02818738, -0.05245734, 0.02755699, -0.00081331393, 0.05169187, 0.0024343133, -0.001939008, 0.0054793158, 0.0027002585, -0.0028789626, -0.02505795, -0.02126436, -0.04241615, 0.006191317, 0.04097526, -0.023684602, -0.01563589, -0.010879832, -0.038116, -0.025080463, 0.026971629, 0.015095557, 0.005135979, -0.027647045, 0.012450176, 0.010986773, -0.0044718194, -0.007514008, 0.03980454, -0.02825492, 0.01055901, 0.022435082, 0.018697778, -0.016277535, 0.027827157, -0.029988488, -0.02395477, -0.0031829, -0.02111802, -0.026881574, 0.06038223, 0.028390003, 0.0262737, -0.034738917, 0.03028117, 0.010733493, 0.013001766, 0.05110651, -0.00459846, -0.019384451, 0.020982936, -0.03782332, 0.047369204, -0.004893955, -0.029155476, -0.02818738, 0.024472589, -0.0063995705, 0.0071594142, -0.03701282, 0.023594547, 0.006692251, 0.0013986748, 0.0049136546, -9.014347e-05, -0.025260573, 0.0253056, 0.046738815, 0.030596364, 0.016390106, 0.060427256, -0.00011072256, 0.058491062, -0.01946325, 0.021680867, 0.005341418, 0.003664134, -0.019699646, -0.0126528, 0.02564331, -0.0029549468, -0.009433316, -0.02064523, -0.030191114, -0.049530536, 0.020667743, 0.023842199, 0.011358253, 0.0063376576, 0.028052295, -0.029650781, 0.020588944, 0.020093638, -0.029673295, -0.008195053, -0.003484023, -0.0049868245, -0.029830892, 0.023234325, 0.027489448, 0.03719293, 0.051016454, 0.011279454, -0.017380716, -0.0049164686, -0.032059766, -0.0010440812, -0.037237957, -0.010801034, 0.035774555, 0.038025945, 0.0076547195, -0.027354365, 0.0109642595, 0.009438944, -0.005079694, -0.010902347, -0.008673472, -0.01236012, -0.0035346793, -0.02280656, 0.03183463, 0.008566531, 0.010024305, -0.008251337, 0.023054214, 0.07105381, 0.027084198, -0.014397627, 0.004083455, -0.010553381, -0.028840281, -0.07258475, 0.0012671093, -0.009225062, -0.009326375, 0.03248753, 0.027647045, 0.004553432, -0.0127428565, -0.0046153455, -0.048404843, 0.0044352342, -0.0444424, -0.008583417, -0.049530536, -0.037170418, 0.022570165, 0.018438868, 0.030123573, 0.022851588, -0.047549315, 0.0014943589, -0.030258656, 0.016705299, 0.013339474, 0.023977283, 0.03845371, -0.058175866, -0.03302786, -0.025913477, 0.005423031, 0.013125592, -0.009714739, -0.02123059, 0.0079474, 0.015770974, -0.014960473, 0.01975593, 0.009208177, 0.0054286593, 0.012776627, -0.02173715, -0.015320696, -0.019620847, 0.017628368, -0.009444573, -0.006382685, 0.00373449, -0.025845936, 0.00820631, 0.008695986, -0.0014563666, 0.050566174, 0.002106455, -0.03410853, 0.01798859, 0.035414334, 0.026498837, -0.052862592, 0.02512549, 0.01607491, -0.013226905, -0.0285476, 0.013767238, -0.041515596, 0.027376879, 0.033275515, 0.014206259, 0.060247146, 0.0023301865, -0.0036106636, 0.013879808, -0.0072832406, 0.03156446, -0.015253154, 0.019485764, 0.0017209047, 0.04691893, 0.0067935633, -0.03415356, 0.020149924, -0.019271882, 0.0033827105, -0.028750226, -0.0020417275, 0.034919027, 0.0978003, -0.025328116, -0.017301917, 0.022356283, -0.009551514, -0.027759615, 0.0374631, 0.004944611, -0.005448359, -0.0030956585, 0.033590708, -0.05637476, -0.023166783, -0.0018151816, 0.010784149, -0.0018799091, 0.054663703, 0.056599896, -0.004466191, 0.012438919, -0.011341367, 0.0082344515, 0.0038048457, -0.0018813162, -0.01497173, 0.025035435, -0.0037457468, -0.017527057, 0.02354952, -0.036179807, -0.0051134652, 0.03741807, 0.03410853, -0.01077852, -0.0019685575, 0.028885309, 0.004333922, -0.014183745, 0.0047504287, 0.022266228, -0.03289278, -0.0140036335, -0.007637834, -0.022176173, 0.017346945, -0.028727712, 0.057410397, 0.015028016, -0.022029832, 0.06006703, -0.030236142, 0.020352548, 0.037688237, -0.0074126953, 0.026093587, -0.021939777, -0.0006789342, -0.023234325, -0.025418172, 0.0047251005, -0.046198484, -0.008195053, 0.042033415, -0.05074629, 0.024922866, 0.0019544864, -0.014262543, -0.0437895, -0.03347814, -0.01563589, 0.0016716557, 0.0016561773, -0.0031660146, 0.02593599, 0.042798888, 0.05007087, -0.024877839, -0.005780439, 0.088749714, -0.04962059, -0.028727712, -0.03469389, -0.011420166], [0.008519967, -0.009940936, -0.020712234, 0.044956423, 0.020068996, 0.046687316, -0.016408393, 0.050383005, -0.0028243954, 0.04002104, -0.013543064, 0.03728436, 0.005257001, -0.04577509, -0.0035758133, 0.03197473, -0.007052217, 0.009666099, -0.020162558, -0.024910817, -0.002787848, -0.07634639, -0.08860298, 0.01727384, -0.034524288, -0.0038564985, -0.004663469, 0.023273487, -0.0013793049, 0.03625518, 0.016501954, 0.029565515, 0.01413952, -0.0014765215, 0.01465411, -0.022232613, 0.0046049925, 0.042874675, -0.049961977, -0.00836793, -0.03197473, -0.015145309, -0.006122447, -0.039904088, -0.014934795, 0.00799953, 0.026758661, 0.0063621993, -0.0030670713, -0.05295595, 0.021589374, -0.043272313, 0.008443948, -0.003640137, -0.04112039, 0.012151333, -0.0023653582, -0.052160677, 0.03244254, -0.032138463, -0.041307516, 0.022174137, -0.020934442, -0.03733114, -0.02720308, -0.026501367, 0.007695454, 0.0055055246, 0.028512945, 0.07494297, -0.006280333, 0.01118063, 0.009151509, -0.021121565, 0.017998943, 0.012326761, 0.08841586, 0.019846788, 0.0026270386, 0.0045494405, 0.024279276, -0.034430727, -0.017191973, 0.018513532, -0.010712821, -0.013882225, 0.06647563, -0.06558679, -0.02451318, 0.0048886016, -0.016899591, -0.027366813, 0.04851177, 0.008648614, -0.044933032, 0.06699022, 0.002634348, 0.022220917, -0.03983392, -0.03679316, -0.054733627, -0.02108648, -0.037611824, -0.049213484, 0.03782234, 0.0021636155, 0.086684965, -0.015823632, 0.012689313, -0.0012601599, 0.022115659, -0.026501367, 0.024700303, -0.0072919694, -0.040091213, 0.025799654, -0.024606742, -0.066007815, -0.017168581, -0.0003117507, -0.08172619, 0.00431846, 0.08107126, 0.016104316, -0.019215245, 0.027928183, -0.014314949, 0.028746849, -0.0089468425, -0.0016680306, -0.042640768, 0.017975552, 0.0035465753, 0.037705388, 0.0834103, 0.045283888, 0.055201434, -0.007683759, -0.028723458, -0.0036547561, -0.042383473, -0.0048739826, 0.006894332, 0.02610373, -0.006397285, -0.025214892, 0.01658382, -0.014256473, -0.05328342, -0.026828833, -0.010467221, -0.060113426, 0.012315066, 0.039740354, 0.052581705, -0.015215481, 0.025121331, 0.012455408, 0.04324892, 0.03943628, 0.02023273, -0.08907079, -0.02507455, 0.06259281, 0.024864037, -0.06324775, 0.031085894, 0.024723694, -0.0533302, 0.034056477, -0.0026840528, -0.011929124, 0.03307408, -0.050570127, -0.049540948, -0.012373542, 0.05328342, -0.008286063, -0.033518497, -0.049447387, -0.037869122, 0.034898534, -0.0024077534, -0.017460963, 0.01868896, 0.051505744, 0.0256827, -0.004976316, 0.023320267, -0.045658138, -0.03244254, 0.03475819, 0.013893921, 0.0036021275, -0.02350739, -0.05393835, -0.01788199, -0.07760947, -0.010601716, -0.015870413, -0.016291441, -0.048231084, -0.0036313655, 0.03625518, -0.04855855, -0.015624813, 0.055201434, 0.023273487, 0.017460963, 0.03040757, 0.005590315, -0.001991111, 0.04650019, -0.03950645, -0.024185713, 0.0256827, -0.07971461, 0.034056477, -0.038734566, -0.042453647, 0.056183834, -0.045400843, -0.012806265, -0.019975435, -0.0087831095, 0.042874675, 0.0069761984, -0.009011166, 0.0003239941, 0.007882577, 0.0071340837, -0.0039003557, -0.018501837, 0.0927197, -0.034992095, -0.034968704, -0.04170515, -0.015262261, 0.056230616, 0.036021274, -0.025823044, -0.008215891, -0.05173965, -0.012876436, 0.023577562, 0.026010167, -0.027670888, 0.0026241147, 0.011625048, 0.0030027477, 0.004371088, 0.007028827, -0.0071399314, 0.004616688, -0.0073212073, 0.031062502, -0.020478329, -0.03779895, 0.0026080338, -0.01812759, 0.0025817198, 0.009578384, 0.007905968, 0.036933504, 0.027553936, -0.029425172, 0.028091917, -0.062265348, -0.05347054, 0.002621191, 0.044628955, -0.048277866, -0.023051277, 0.025238283, 0.021928536, 0.0042950693, 0.045821868, 0.029986542, -0.08093092, 0.06773871, 0.005642943, 0.019109989, 0.012326761, 0.054733627, 0.024864037, -0.016794335, -5.3222386e-05, -0.014186301, -0.06755158, -0.0041722693, -0.00042906837, -0.041284125, 0.04170515, 0.030056713, 0.023811467, 0.02659493, 0.0047073257, -0.017765038, -0.029752638, 0.030337399, -0.00419566, -0.0038740414, -0.021834975, -0.065165766, -0.028302431, 0.06633528, 0.004540669, 0.06535289, -0.06413658, -0.024372837, 0.07550433, 0.047248688, -0.03885152, -0.04107361, -0.0007916202, -0.03948306, 0.004166422, 0.0883223, 0.07653352, -0.0097947465, -0.03356528, -0.07049878, -0.121349595, 0.0067481417, 0.025799654, 0.04266416, -0.0008033154, -0.05487397, -0.029401781, 0.006087362, -0.07199577, -0.017262144, -0.011777086, -0.022758897, -0.047599543, -0.11929124, -0.013882225, -0.06755158, -0.033635452, -0.033378154, -0.009116423, -0.009338632, 0.016642297, -0.00022056453, 0.04271094, -0.040956657, 0.00043674334, -0.00083109154, 0.06554001, -0.036535867, 0.0014699429, 0.06773871, 0.02213905, 0.016501954, 0.00022641214, 0.0030056713, 0.014396815, -0.032746613, -0.031249626, -0.009695337, 0.090567775, -0.049961977, -0.012595751, 0.033986308, -0.007905968, -0.03824337, -0.057493698, 0.015835326, 0.0028127003, 0.005312553, -0.05117828, 0.02399859, -0.010514002, -0.00027721326, -0.018478446, -0.0048798304, 0.032770004, -0.001168791, -0.040699363, 0.00853751, -0.03136658, -0.029214658, 0.013051865, 0.0042424407, -0.029799419, 0.039366107, 0.019998824, 0.029144486, 0.00326589, 0.027811231, 0.0146775, 0.029261438, -0.009432195, -0.026010167, 0.055622462, 0.016478565, -0.041401077, -0.011970057, 0.03630196, 0.010016955, -0.017928772, 0.012537275, -0.019320503, -0.037565045, 0.03199812, 0.008765567, -0.01900473, 0.03560025, 0.042944845, 0.023600953, 0.020653758, 0.01440851, 0.009806441, 0.0024764626, 0.022220917, 0.014771062, -0.016197879, 0.03520261, -0.0028404763, 0.012934913, 0.027366813, -0.052020334, -0.0069469605, 0.035413124, -0.044395052, 0.0034266992, -0.063200966, 0.035576858, 0.02130869, -0.025472188, -0.03412665, -0.015671594, 0.051552527, -0.031740826, -0.022209221, -0.039366107, -0.0340097, -0.039459668, -0.019145073, 0.016911287, 0.010180688, -0.046242896, -0.00034793277, 0.042009227, -0.03623179, -0.00014966226, -0.06329453, 0.0015013738, 0.013718492, -0.0068124654, -0.028700069, -0.014712586, -0.11152561, -0.042874675, 0.032653052, 0.01781182, 0.03515583, 0.002185544, 0.04579848, -0.069001794, -0.021402251, -0.012385237, 0.053564105, -0.002979357, 0.050991155, 0.022934325, -0.014513767, 0.03772878, 0.023940114, 0.025846435, 0.02455996, 0.0020934443, 0.014361729, -0.0050494107, -0.025378626, 0.0034880992, -0.0139874825, 0.052394584, 0.04170515, 0.0032337282, -0.0092977, -0.051037937, 0.03800946, 0.06497864, 0.024443008, -0.019168464, 0.029425172, -0.005458744, 0.055154655, 0.037120625, -0.00088664383, -0.012946608, 0.0034705563, -0.00060193834, 0.0055376864, -0.0059879525, -0.041260734, -0.01027425, 0.035015486, -0.007397226, 0.039880697, 0.02191684, 0.0261739, 0.04425471, 0.022372954, 0.019846788, -0.021799888, -0.056698423, 0.038617615, -0.00041152554, -0.0425706, -0.032582883, -0.024489788, 0.018256238, -0.0016914211, -0.029261438, 0.004719021, 0.0244664, -0.01790538, 0.0042015077, -0.0011702529, -0.010280098, -0.032395758, -0.0060756663, -0.0032395758, 0.0085901385, 0.011718609, -0.010531545, -0.029378392, -0.018934561, 0.009204137, -0.012876436, 0.0053096297, 0.021226823, 0.007011284, 0.014045958, 0.0100988215, 0.0030758427, -0.020408157, 0.013203902, 0.025846435, 0.027881403, -0.016349917, 0.025799654, -0.009666099, 0.0288638, 0.024817256, 0.006303723, -0.044675738, 0.06366877, -0.020361377, 0.0315537, -0.015133614, 0.02451318, 0.03295713, 0.0073913787, -0.033307984, -0.027858013, -0.014443596, -0.04841821, 0.0030816903, -0.01159581, 0.06525932, 0.045728307, 0.018197762, -0.056745205, 0.034921926, -0.0043915547, -0.02350739, -0.02453657, -0.0061633806, 0.04490964, 0.031249626, -0.0049032206, -0.047810055, 0.04214957, 0.007403074, -0.034313772, -0.011689371, -0.030103495, -0.023086363, -0.025121331, 0.00027977157, -0.022770591, 0.0078007113, 0.004163498, -0.055154655, -0.07176187, -0.033214424, 0.0063271136, -0.0025364007, 0.027998354, 0.015753461, -0.04172854, 0.019145073, 0.006637037, 0.004327231, 0.022232613, 0.0086720055, 0.03728436, -0.01051985, -0.01279457, -0.013800358, 0.0060347333, -0.021741413, -0.026501367, 0.031062502, -0.04694461, 0.009707032, 0.027507156, -0.03307408, -0.03772878, 0.0071340837, -0.014069349, -0.0024530722, 0.012689313, -0.016922982, 0.04799718, 0.010414593, 0.010157298, 0.070264876, -0.01078884, 0.086544625, -0.026010167, 0.014665805, -0.013624931, -0.022010403, 0.026711881, -0.0065376274, 0.00017899167, -0.027296642, -0.020115778, -0.017753342, -0.014817843, 0.021928536, 0.02135547, -0.020665452, 0.028700069, -0.0023638962, 0.026618319, 0.019460846, 0.022326173, -0.0004221243, 0.023530781, -0.0340097, -0.02554236, 0.028653286, 0.0068826363, 0.0138237495, -0.036559254, -0.039459668, 0.01658382, 0.030711645, 0.07208933, 0.021788193, 0.027974965, -0.012350151, -0.0077773207, -0.022314478, 0.024887426, -0.026899004, -0.009759661, -0.007537569, 0.023402134, 0.0076311305, -0.011104611, 0.0105081545, -0.04479269, -0.011285886, 0.0035728896, 0.057259794, -0.02157768, -0.01631483, -0.027366813, -0.01306356, -0.02879363, 0.0017367401, 0.030758427, -0.061002266, -0.022466516, -0.040418677, -0.019905264, -0.018022332, 0.02272381, -0.011256648, -0.023706209, -0.029378392, 0.0066136466, -0.012163028, 0.013484588, 0.027320033, -0.054312598, -0.013005083, 0.042640768, 0.012467104, 0.021168347, 0.016162792, -0.0026314242, 0.013215598, -0.022162441, -0.008338692, -0.04584526, -0.015414299, -0.021390555, 0.05393835, 0.010046193, -0.0068241605, -0.0001689411, -0.03524939, -0.008479034, 0.0063621993, 0.04100344, 0.031834386, 0.054312598, 0.0072276457, 0.0011176243, -0.0415882, -0.0021007538, -0.10254368, 0.005841762, -0.020981224, -0.042757723, -0.02319162, -0.00853751, 0.02500438, -0.05492075, 0.034430727, 0.01438512, 0.023893332, -0.0048301257, 0.017203668, -0.008666158, 0.035857543, -0.0063563515, -0.03248932, -0.0077773207, -0.023331963, -0.0005350563, 0.011063677, -0.019870177, 0.011490553, -0.007432312, -0.02558914, -0.023273487, -0.008549205, 0.0008654462, 0.020384768, -0.022501603, 0.02451318, -0.07316529, -0.00019004731, -0.0052248393, 0.034313772, -0.01051985, 0.020419853, 0.027577328, 0.014993271, -0.009262614, 0.025308454, -0.044020806, -0.021753108, 0.002339044, -0.010502307, -0.01281796, 0.028512945, 0.010537392, -0.016069232, -0.049307045, 0.011478858, 0.029986542, 0.028559726, 0.07686098, 0.012092857, -0.038032852, -0.014244777, -0.021729717, -0.010671888, -0.020373072, -0.022910934, -0.014420206, 0.012560666, 0.015613118, -0.027156299, -0.012665923, 0.04002104, 0.025729483, -0.012607446, 0.0027951575, -0.004988011, -0.015402604, 0.035296172, 0.055014312, 0.006894332, 0.010859011, 0.087760925, -0.020431548, 0.021180043, -0.011718609, 0.016080927, 0.0052043726, 0.008625224, -0.05478041, -0.0025130103, 0.0474592, -0.030524522, -0.022197526, -0.020291205, -0.0025963387, -0.05435938, 0.0041167173, 0.018186066, 0.024255885, 0.019378979, -0.013472892, -0.029565515, 0.025565749, 0.044137757, 0.011034439, 0.02050172, 0.01783521, 0.01157242, -0.048792455, 0.0012338456, 0.008502425, 0.0069878935, 0.026314244, -0.015741765, -0.008174959, 0.01227998, -0.010157298, 0.011320972, 0.005616629, -0.026197292, 0.034407336, -0.01387053, 0.027366813, -0.04692122, 0.058803562, -0.0058037527, -0.0011307815, -0.004958773, 0.0034851753, -0.017940467, -0.00032326317, -0.07466228, -0.0003757089, 0.0063738944, -0.008262672, 0.0042044315, 0.03347172, 0.057306573, 0.037752166, 0.04437166, 0.0043213833, -0.043412656, 0.011706915, -0.04046546, -0.022162441, -0.021530898, -0.010964268, -0.00890591, 0.032676443, 0.021636156, -0.037986074, 0.010619259, -0.024980988, -0.008759719, -0.043015018, -0.014022568, -0.03569381, -0.02182328, 0.012665923, 0.02135547, 0.041915666, 0.01604584, -0.011753695, -0.025214892, -0.006274485, 0.032348976, 0.00084278674, 0.019262027, 0.01081223, -0.038734566, -0.02409215, 0.0004897373, 0.00022513297, -0.023519086, 0.011665981, -0.013426112, -0.030009933, -0.011051983, -0.03515583, 0.01815098, -0.0068066176, 0.015355823, 0.030126885, 0.0031372425, -0.027928183, -0.0064966944, 0.005485058, 0.017168581, 0.0004897373, 0.0085082725, -0.026033558, -0.0066721225, -0.00094731274, -0.040792923, -0.00500263, -0.011870648, 0.022478212, -0.014560548, 0.041892275, 0.039740354, -0.04584526, 0.009946784, 0.003909127, -0.023273487, -0.042547207, -0.008309454, -0.016630601, -0.022489907, 0.008169111, 0.059598837, 0.026431195, -0.013320855, 0.0074849403, -0.013391026, 0.01546108, -0.011747848, 0.016911287, 0.03997426, 0.011309277, 0.016080927, 0.026407804, -0.013730188, -0.00026168054, 0.015367518, -0.002784924, -0.015507861, -0.00115271, 0.07199577, 0.05178643, -0.017566219, -0.03312086, 0.04119056, -0.034266993, -0.02827904, 0.067458026, 0.0033828423, -0.021051394, 0.0042570597, 0.051131498, -0.015753461, 0.0026884386, 0.02050172, 0.024068762, 0.012338457, 0.049260262, 0.0021168347, 0.0048710587, 0.018735742, -0.05384479, -0.010332726, -0.0033652994, 0.0256827, -0.029588904, 0.03740131, -0.033962917, 0.01754283, 0.003850651, -0.032676443, -0.006397285, 0.009233376, -0.004485117, 0.03305069, 0.017753342, 0.0016621831, -0.0011585577, -0.0008398629, 0.040933266, 0.02077071, -0.03312086, -0.011291734, -0.0064031323, -0.0031664807, -0.0024530722, 0.025823044, 0.030758427, 0.0066721225, -0.017659782, 0.053236637, -0.044348273, 0.0048652114, 0.029892981, 0.014396815, 0.010742059, -0.0105900215, 0.012747789, 0.008794805, -0.03843049, -0.009543299, -0.039670184, -0.013975787, 0.05435938, -0.050429784, 0.011098763, -0.014069349, 0.0010766911, -0.039553232, 0.029776027, -0.04490964, 0.009098881, 0.015297347, -0.004976316, 0.017297229, 0.029612295, 0.02776445, -0.020642063, -0.008461491, 0.06895501, 0.01626805, -0.0076486734, 0.01599906, 0.004026079], [0.050021157, 0.018876132, -0.031180484, 0.016003933, 0.022020184, -0.0011797582, -0.05030483, 0.01200295, 0.004243288, 0.06042253, -0.017705977, 0.023036681, -0.0057709897, 0.016370345, 0.030353103, 0.051959593, -0.03446637, -0.0066367863, -0.0055552796, -0.069500096, -0.01290716, -0.04935925, -0.059146, 0.002582614, -0.015909376, -0.006506769, -0.051108573, -0.0063885716, -0.0069559193, 0.021653771, 0.041558217, 0.012611667, 0.03134596, -0.01758778, 0.047704484, -0.02900565, 0.0109096235, 0.034820966, -0.0020034465, -0.008208812, -0.05427626, 0.01431371, 0.018249685, 0.0019842396, 0.011813834, -0.019597135, -0.0013297212, -0.0003311375, -0.028792895, -0.007783301, 0.032551575, -0.023190336, -0.015802998, -0.0136636235, -0.052432384, 0.02028268, 0.02491602, -0.12453282, 0.06231369, -0.046238836, -0.036546648, 0.03725583, 0.030376742, -0.013533606, -0.014999255, -0.035908382, 0.018722475, 0.0059689707, 0.062408246, 0.06080076, 0.041818254, 0.034348175, 0.0116069885, -0.022871204, 0.032906167, -0.0050027063, 0.07635555, 0.029809393, -0.03787046, -0.01336813, 0.03924155, -0.040305328, -0.014573744, -0.008421567, 0.045884244, -0.03087317, 0.01940802, -0.10420286, -0.019301642, 0.039572503, 0.015271109, 0.0010822453, -0.020211762, -0.016524002, -0.055505518, 0.060233414, 0.032787967, 0.016405804, -0.0267599, 0.014443727, -0.011713366, -0.042172845, -0.10202803, -0.05125041, -0.011819744, 0.022516612, 0.033473514, 0.009030284, 0.0042314683, 0.0508249, 0.036121137, -0.013994576, -0.022280216, 0.028391024, 0.013202654, 0.045647852, -0.056167424, -0.014160053, -0.030802252, 0.0056823418, -0.105432115, -0.08855352, 0.073518805, 0.043638494, 0.008811619, 0.024041358, -0.028958373, 0.01384092, -0.00090938155, -0.03924155, -0.025979796, -0.009639001, 0.0032001957, 0.0045062774, 0.052952453, 0.0096094515, 0.029549358, -0.0070800264, -0.024868742, 0.026547145, -0.080988884, 0.032882527, -0.009461705, 0.022989402, -0.018237865, 0.0070327474, -0.019029787, -0.053188846, -0.028958373, -0.03283525, -0.0050913547, -0.050966736, -0.023686767, 0.0019591225, 0.045553293, -0.038177773, 0.059618786, 0.01936074, 0.011400143, 0.009763109, 0.003093818, -0.07730112, 0.030825892, -0.011293765, -0.03092045, -0.05942967, 0.02680718, 0.03089681, -0.003418861, 0.018178767, 0.05177048, -0.045104142, 0.028391024, -0.0665688, -0.047349893, 0.07611915, 0.03735039, 0.021890165, -0.008427477, -0.055127285, -0.05025755, 0.045458734, 0.05673477, -0.05427626, 0.033378955, 0.06699431, 0.043543935, 0.0051770476, 0.021961084, -0.052810617, 0.004701303, -0.004293522, -0.026854457, -0.031416878, -0.04829547, -0.016784037, -0.0069677387, -0.055080004, 0.0012839197, 0.019455299, -0.017906912, -0.037728623, 0.004887464, -0.02393498, -0.050966736, 0.023946801, 0.010052692, 0.0100940615, 0.043023866, 0.02307214, 0.028296467, -0.025176054, 0.009727649, -0.0036316162, -0.032267902, 0.0023432642, -0.0627392, -0.0026505776, 0.034939162, -0.043591216, 0.098151155, -0.022776647, 0.015495684, -0.022445694, -0.00089682307, 0.04704258, 0.028721977, 0.025057856, 0.035270113, 0.022292037, -0.0064299405, -0.015259289, -0.0018926364, 0.008344739, -0.07403888, -0.018202405, -0.013344491, 0.005171138, 0.04560057, 0.01755232, 0.0060251146, 0.04335482, -0.03782318, -0.018828852, 0.010188619, 0.02306032, -0.0015483864, -0.012694404, -0.0017020431, -0.044111285, 0.045931526, 0.0054961806, 0.039879814, 0.041345462, 0.004751537, 0.061273552, -0.01336813, -0.019538036, -0.02862742, 0.007919229, -0.04987932, 0.02489238, -0.038957875, 0.05678205, -0.0023122374, -0.017717795, 0.03820141, -0.046735268, -0.057018444, -0.057538513, 0.013202654, -0.012138877, 0.0026254605, 0.018568818, 0.046404313, 0.005404578, 0.05309429, 0.03089681, -0.032267902, 0.080563374, 0.008108344, 0.056923885, -0.021618312, 0.011861113, 0.027209051, 0.026405308, 0.000545555, -0.061368108, -0.052716058, 0.0012041364, -0.008362468, 0.0078010308, 0.017008612, 0.015779357, 0.018226044, -0.006140357, 0.0058182687, 0.016689477, -0.025152415, -0.012647126, 0.02815463, -0.0138291, -0.035341036, -0.042220123, 0.014124594, 0.04065992, 0.017375024, 0.10845797, -0.0010896326, -0.049217414, 0.04257472, 0.016181229, -0.01847426, -0.036144778, 0.013864559, -0.04422948, 0.02397044, 0.045293257, 0.04654615, -0.049737483, 0.0054223076, -0.017481402, -0.055032726, 0.019999007, 0.055080004, -9.575839e-05, -0.015649341, 0.0016429444, -0.0056557474, -0.035151917, -0.021500114, -0.0010194529, -0.011772465, -0.0025087406, -0.033946306, -0.09422699, -0.031180484, -0.039501585, 0.034017224, 0.032196984, -0.007871949, -0.005307065, -0.012085688, -0.030045789, 0.0062171854, -0.027067212, 0.030093068, -0.009166211, 0.0368776, 0.0020182212, 0.0012654513, 0.09559809, -0.004237378, 0.051723197, -0.03087317, -0.0036611657, -0.045033224, -0.05664021, -0.024821462, 0.026121633, 0.06297559, -0.021417376, 0.043023866, 0.040447164, 0.02163013, -0.051392246, -0.0012624963, 0.013758182, 0.03170055, 0.022800285, -0.030944088, 0.015365667, -0.007464168, -0.05073034, -0.050919455, -0.025246972, 0.029785754, -0.010555031, -0.008563404, 0.016524002, 0.019159805, -0.004748582, 0.018486079, 0.04432404, 0.022292037, -0.012599847, -0.011494701, 0.008474756, -0.011618808, -0.016736757, 0.011813834, -0.0036375262, -0.029691197, -0.06595417, 0.029738475, 0.011376503, -0.042007368, -0.024230475, -0.026925376, 0.043567576, 0.022386594, 0.00035293016, 0.011612899, -0.02858014, 0.019266183, -0.03642845, 0.019774431, -0.013569065, 0.016193049, 0.026476227, -0.0026372804, 0.025601566, 0.0019384379, 0.000716572, 0.015862096, 0.070162, -0.016524002, 0.037610423, 0.016854955, 0.007990147, 0.008504306, -0.046427954, -0.015141091, 0.02671262, -0.07961779, 0.0230485, -0.060517088, 0.049453806, -0.014538284, -0.03978526, -0.039099712, -0.022835745, -0.0032563393, 0.009650821, -0.030282183, -0.050446667, -0.00925486, -0.020341778, 0.020400878, 0.058815043, 0.015472044, -0.020826388, -0.00013361851, -0.0156020615, -0.032622494, -0.021417376, -0.08169807, -0.015613882, 0.035837464, -0.024726903, -0.04839003, -0.032196984, -0.05853137, -0.01706771, 0.016831314, -0.024065, 0.024655985, 0.013332671, 0.026901737, -0.05673477, -0.018486079, 0.00092194, 0.056025587, -0.02862742, 0.03874512, -0.024171377, 0.0136045255, 0.030542217, 0.030376742, 0.017339565, 0.014691941, 0.0012514153, -0.00875843, 0.049170133, 0.0089120865, -0.029242046, 0.017008612, 0.047728125, 0.044678632, -0.051108573, -0.06741982, 0.021535574, 0.036664844, 0.036641207, 0.019951727, -0.020436337, 0.01294262, 0.016784037, 0.025057856, 0.02588524, -0.035671987, 0.025223333, 0.010212258, -0.017895091, 0.013687263, -0.006223095, -0.029171128, -0.051534083, -0.014573744, 0.0019074111, 0.031511437, 0.021523753, -0.0048490497, 0.04706622, -0.0083211, 0.0026402352, -0.032386098, -0.020034466, 0.020389058, -0.03555379, 0.0010741192, -0.025459727, -0.01888795, 0.019171624, -0.028509222, 0.0063767517, 0.007097756, 0.0072159534, 0.03413542, -0.0018571772, 0.0030376741, -0.018048748, -0.049028296, -0.023556748, 0.0156257, 0.0014117206, 0.030211264, 0.007795121, 0.012528928, -0.04422948, -0.02536517, -0.020920947, -0.0034277258, 0.006873181, 0.012038409, 0.013001719, 0.022764826, -0.007428709, -0.019715333, 0.010324546, 0.013261752, 0.04484411, -0.028036432, -0.0041310005, -0.053661637, 0.02349765, 0.04758629, 0.005218417, 0.0061048977, 0.043662135, -0.056545652, 0.017150449, -0.001591233, 0.060658924, -0.027634561, -0.0014582609, -0.010945083, -0.056167424, 0.0076296446, -0.032433376, -0.025861599, 0.0052479664, 0.05994974, 0.03839053, -0.013332671, -0.024561428, 0.017162267, 0.012162516, -0.010111791, 0.004252153, -0.009260769, 0.024585066, 0.019218903, -0.010247718, 0.013580886, 0.07384976, 0.021511933, -0.036688484, -0.026358029, -0.04257472, -0.032977086, -0.04560057, 0.022126561, -0.04004529, 0.0313696, 0.008108344, 0.0054518566, -0.02813099, -0.03737403, -0.0049642925, -0.01850972, 0.0312514, 0.00921349, -0.012162516, -0.02900565, 0.011624718, 0.025436088, 0.013651804, -0.0018231955, 0.02768184, -0.043520298, -0.021275539, -0.0012307308, 0.0037291292, -0.026050715, 0.0074227992, 0.03881604, -0.03647573, 0.0024555519, 0.052810617, -0.05021027, -0.008805709, 0.023994079, -0.0080965245, 0.022516612, -0.022764826, 0.0029859627, 0.055978306, -0.00058544666, 0.03240974, 0.05498545, 0.007470078, 0.04578969, -0.030849531, 0.003593202, 0.0009418858, -0.0069913785, -0.0029815303, 0.0068081724, -0.014963795, -0.012174336, -0.016654018, -0.007056387, -0.018769752, -0.002582614, 0.014431907, 0.0032947536, 0.03318984, -0.01937256, 0.015590242, 0.009006645, 0.026192551, -0.011293765, 0.040518083, -0.024277754, -0.042527437, 0.036192056, -0.017280465, 0.018722475, -0.0030524489, -0.030707695, 0.040872674, -0.003652301, 0.058815043, -0.008380198, 0.002718541, -0.0032858888, 0.009048014, -0.036333892, 0.0101531595, 0.0043585305, -0.0526215, -0.013273573, -0.008185172, 0.014680122, -0.022753006, -0.0051327236, -0.0019354831, -0.0055139107, -2.3085438e-08, 0.06316471, -0.034442734, -0.0113646835, -0.029573, -0.02900565, -0.0054104878, 0.0014892877, 0.0396907, -0.038414165, -0.03560107, -0.03553015, -0.045104142, -0.018190585, 3.2042586e-05, -0.005256831, 0.00876434, -0.004656979, 0.030353103, -0.036641207, -0.016476722, 0.014869237, -0.049926598, 0.0023757685, 0.07427527, -0.042598356, 0.004444224, -0.013923658, -0.040849034, -0.006778623, 0.01898251, -0.019112526, -0.01938438, -0.028840175, -0.020980045, 0.040707197, 0.018391522, 0.020578174, -0.0016296472, -0.02900565, -0.0103954645, 0.012682585, 0.012883521, 0.020389058, 0.055552796, 0.00322679, -0.04101451, -0.0029135668, 0.003182466, -0.0627392, 0.039336108, -0.018273324, -0.055080004, -0.007996056, -0.023627669, 0.03647573, -0.060658924, 0.019620774, -0.017410483, 0.044891387, -0.002143806, 0.012127057, -0.02583796, 0.024821462, 0.0016237373, -0.0124225505, 0.0045742407, 0.0065717776, -0.03224426, 0.013805461, 0.03092045, -0.014230971, -0.02348583, -0.025908878, -0.03274069, 0.015141091, 0.018616097, -0.010111791, 0.002946071, 0.02302486, 0.009355327, -0.0031499618, -0.021949263, 0.0120325, -0.010832795, 0.037988655, 0.056356538, 0.011731096, 0.032527935, 0.009497164, -0.0018379701, 0.00038192546, 0.0032386098, -0.01340359, -0.003974389, 0.022847565, 0.021322818, -0.014940156, -0.07517357, -0.016937694, 0.027350888, 0.049170133, 0.067939885, -0.017635057, -0.00089460687, 0.021334637, -0.019348921, -0.0027170635, -0.028651059, -0.03782318, -0.007747842, 0.008847078, 0.02213838, -0.012729864, -0.013521787, 0.05446538, 0.0026062536, -0.012741684, -0.018285144, 0.0069795586, -0.012564387, 0.03701944, 0.043591216, 0.02628711, -0.0093671465, 0.02402954, 0.0031647363, 0.04562421, 0.00089682307, 0.00068074337, -0.012623486, 0.03266977, -0.03212606, 0.0015587287, -0.009591722, -0.025648843, -0.04987932, -0.0045476463, -0.05664021, -0.015129272, 0.042527437, 0.00968628, 0.029691197, -0.0067727133, 0.07550453, -0.033000726, 0.00414873, 0.038414165, -0.010891894, 0.0103954645, 0.02216202, -0.010933263, -0.037137635, 0.040730838, -0.018746113, 0.055694632, 0.0600443, 0.0039271098, -0.007304602, -0.03560107, -0.029833034, -0.036192056, -0.025648843, -0.03657029, 0.022504792, 0.026854457, 0.022091102, 0.012552568, 0.040092573, 0.016937694, 0.0075350865, -0.0025589745, 0.018155126, 0.016500363, 0.011748825, -0.035648346, -0.021062784, -0.0033922663, -0.03420634, -0.011323314, 0.032055143, 0.07087118, 0.009349417, -0.022173839, 0.017150449, -0.021358278, -0.038532365, -0.0094262455, 0.0025013532, 0.0045919702, 0.03404086, 0.014479186, 0.0048283655, 0.033851746, -0.02905293, 0.010383645, -0.027421806, 0.009769018, -0.032622494, -0.02723269, -0.013687263, -0.02124008, -0.019514397, 0.020649092, 0.03352079, -0.0014449636, -0.07526813, 0.0009825162, -0.036262974, 0.013072637, -0.020199941, 0.0074227992, 0.057538513, -0.0091839405, -0.057302117, 0.02076729, -0.035128277, -0.0017389798, -0.0069559193, -0.029856673, 0.013060817, -0.031204123, -0.020637272, -0.002027086, 0.01566116, 0.032480657, 0.043567576, 0.0013777389, -0.030825892, 0.012517109, 0.024348672, 0.008137894, -0.0027791173, 0.004671754, -0.034939162, 0.038792398, -0.026547145, -0.030069428, -0.0036227515, -0.012292533, -0.01105737, -0.02815463, 0.005221372, 0.046853464, -0.025696123, 0.030731333, -0.028296467, -0.016051212, 0.011341044, 0.025719762, -0.0056498377, 0.024372311, 0.012038409, 0.020696372, 0.017304106, -0.030211264, 0.0025338575, 0.008835259, 0.0045771957, 0.01846244, -0.025459727, -0.014254611, 0.003732084, 0.03274069, 0.017906912, -0.015826637, -0.028651059, -0.010732328, 0.020164482, 0.0021452834, 0.018273324, 0.009804477, 0.060091577, 0.016405804, -0.050966736, 0.04153458, -0.018663375, -0.009733559, 0.009621272, 0.016854955, -0.016370345, -0.018273324, 0.041676417, -0.031724192, 0.005661657, -0.014526465, 0.0026165957, 0.008923907, 0.038957875, 0.005948286, 0.0221502, 0.013911839, -0.011293765, -0.004284657, -0.0037143545, 0.02163013, 0.01475104, 0.024632346, -0.028887454, 0.013486328, -0.0033538523, -0.030684054, 0.012091598, 0.003551833, 0.01937256, -0.017954191, 0.054087147, 0.031109566, -0.016665839, 0.006518589, 0.005230237, 0.017729616, -0.05106129, -0.014384628, 0.04153458, -0.01150652, -0.066710636, -0.0035311484, 0.042338323, 0.023757685, -0.026499866, 0.0240059, -0.03562471, -0.017788714, 0.051912315, 0.00043289812, -0.0021349413, 0.044111285, 0.018746113, -0.0022885979, -0.010371825, -0.009319868, -0.010088151, -0.02997487, -0.023734046, -0.026381668, 0.048508227, -0.010862345, 0.020625453, -0.029643917, 0.0040630368, 0.017327745, 0.008468847, -0.02631075, -0.012859881, -0.013048997, 0.021322818, 0.026192551, 0.01201477, 0.02118098, 0.12566751, -0.008498396, -0.030944088, 0.0018734294, -0.016902234], [0.0062641534, 0.00071490003, -0.015618248, -0.0053961608, 0.0052332366, 0.02973085, 0.023932999, 0.06836073, 0.016011514, 0.04328165, -0.036787152, 0.01584297, 0.025977977, -0.06777646, 0.008415876, 0.036225345, -0.0339107, 0.022258813, 0.026944285, 0.006707981, -0.03811302, -0.04125914, -0.061933655, 0.020393612, 0.027820706, -0.00974736, -0.005491668, 0.0128991, 0.0027388113, 0.019640788, 0.019202579, 0.032629777, 0.04294456, -0.04157375, 0.014337326, 0.011561997, 0.0049073882, -0.027708344, -0.015663192, 0.008679925, -0.051551454, 0.027056647, -0.026854398, -0.06287749, -0.0087192515, -0.008966447, -0.025977977, -0.014753064, 0.022798147, -0.050607618, 0.042292867, -0.021640824, 0.0139440615, -0.026427424, -0.020404847, -0.030787049, 0.047056995, -0.06148421, 0.031708412, -0.027573511, 0.009134989, -0.005859652, 0.02914657, -0.009904666, -0.004045014, -0.037056822, -0.011910318, 0.033506196, 0.008545091, 0.034674756, -0.028921848, 0.036832098, -0.021045309, -0.05923698, -0.024876835, -0.076315925, 0.062607825, 0.0014178616, -0.023123994, -0.004154566, 0.0043511987, -0.04458504, 0.013371018, -0.011663123, 0.04719183, -0.07483275, -0.0006523989, -0.10103545, -0.04143892, 0.026629673, 0.0011945431, -0.011685595, 0.025506059, 0.03233764, -0.053349238, 0.005494477, 0.012988988, 0.002786565, -0.029056681, -0.026045395, -0.014696883, -0.03665232, -0.045798544, -0.06148421, 0.037393905, 0.052630123, 0.07011357, -0.02914657, -0.0032641015, -0.045933377, 0.008977683, -0.01251707, 0.026472367, 0.034090478, -0.039259106, 0.009752978, 0.008657453, -0.08674307, -0.040697332, 0.01779806, -0.069034904, -0.023123994, 0.05258518, 0.052944735, -0.042967036, 0.002022507, 0.028292624, 0.048270497, 0.028674653, -0.021528462, -0.030360075, 0.046697438, 0.0054551507, 0.007696762, 0.06098982, -0.0155283585, 0.053079568, -0.0071798996, -0.038202908, 0.025461115, -0.028022956, 0.003382081, -0.00013676501, 0.022281284, -0.024090305, -0.01896662, -0.026966758, -0.037573684, -0.03636018, 0.05024806, -0.051191896, -0.007825978, -0.038742244, 0.035528705, -0.008146209, -0.04361873, 0.013876645, 0.030315131, -0.004747273, 0.034742173, 0.026629673, -0.049618836, -0.0016573321, -0.012505834, 0.0062079723, -0.07752943, 0.027124064, 0.003008479, -0.043034453, 0.028674653, -0.009938374, -0.0142362015, -0.009865339, -0.024899308, -0.023708275, 0.010005791, -0.0010189783, 0.012696849, -0.021517226, -0.08256323, -0.06265277, 0.05024806, 0.028787015, -0.03370845, 0.029955573, 0.03110166, -0.014674411, -0.03615793, 0.0028258916, -0.032876972, -0.023034107, 0.007595637, -0.01534858, -0.012550779, 0.0016938496, -0.060540374, 0.00081602536, -0.021854311, -0.00043118722, 0.00916308, -0.03355114, -0.017910423, 0.00315174, 0.022741966, -0.05892237, 0.04418054, 0.03939394, -0.046562605, 0.039663605, 0.0074327127, 0.04818061, 0.010101298, 0.0061349375, -0.022281284, -0.0056854915, 0.013112586, -0.08633857, 0.005289417, -0.011528289, -0.052270565, 0.028921848, 5.266945e-05, -0.011382219, -0.017067712, 0.008348459, 0.0054776226, 0.0035393871, 0.04125914, 0.032674722, 0.00691585, 0.0010955245, -0.059866205, -0.03627029, 0.059192035, -0.060001038, -0.028831959, 0.011663123, -0.02737126, 0.040787224, 0.040607445, 0.028382514, 0.060001038, -0.012438417, -0.039955746, 0.048630055, 0.014157549, 0.004286591, 0.042382754, -0.013427199, 0.019157635, 0.005542231, -0.022640841, 0.0438884, 0.009179934, 0.02284309, 0.06961918, 0.009320386, -0.021640824, -0.013651921, 0.009882193, -0.0027205527, 0.0151575655, -0.028719598, 0.06773151, -0.022876801, -0.0017149172, 0.02386558, -0.0582482, -0.020741932, -0.024315028, 0.037393905, -0.04602327, 0.021202615, 0.034854535, 0.0166295, -0.01251707, -0.009674325, 0.011129406, -0.009061955, 0.07532714, -0.009179934, -0.012112569, 0.026449896, 0.0017430077, 0.0653045, -0.0155283585, 0.01735985, -0.07973172, -0.06800117, 0.018786842, 0.0012570443, -0.0009979105, 0.052854847, 0.03624782, 0.05757403, 0.017326143, -0.0022416117, 0.027640928, -0.047865998, 0.019078981, -0.018932912, 0.012404709, -0.037416376, -0.03498937, -0.01744974, 0.026854398, -0.019764386, 0.06337188, 0.0042809728, 0.023798164, 0.055371743, -0.034674756, -0.009893429, -0.021281267, 0.05914709, -0.042877145, 0.04240523, 0.029303877, 0.050293006, -0.04651766, 0.018753134, -0.05182112, -0.1073277, 0.0066012377, 0.0059270686, 0.029416239, -0.02914657, -0.024854362, -0.020550918, 0.011775484, -0.08458573, -0.019337414, -0.022483535, 0.03110166, -0.05689986, -0.09914778, -0.0012668759, -0.024899308, 0.015741846, 0.0002756368, -0.031551108, -0.015505886, -0.0075282203, -0.046877217, 0.000109025765, 0.0028062284, 0.005022559, 0.01934865, 0.029753324, -0.024764473, 0.0013665967, 0.027146537, 0.057618976, 0.037888296, -0.02462964, -0.017528392, -0.053214405, -0.0016531185, 0.0109496275, 0.012505834, 0.08395651, -0.075461976, -0.0013146295, 0.017494684, -0.03107919, -0.036877044, -0.030225242, -0.012674376, -0.025371226, -0.003986024, -0.054472852, 0.043349065, -0.0011397669, -0.017438503, -0.028045429, -0.009887812, 0.02737126, 0.012876627, -0.06854051, -0.006640564, -0.04289962, -0.020528445, 0.0126519045, 0.027258899, 0.010370966, 0.032292694, -0.06188871, -0.010045118, 0.04262995, 0.023146467, -0.0019803713, 0.0062922435, -0.03388823, -0.01818009, 0.009792305, 0.07672043, 0.004918624, 0.010376584, 0.03469723, 0.053933516, -0.022562187, -0.009685561, -0.041011944, -0.004443897, 0.023685804, -0.021663295, 0.009567581, 0.018078964, 0.02004529, 0.03766357, -0.006634946, 0.03656243, -0.021550935, -0.026652146, 0.030135352, 0.041416448, -0.04152881, 0.016798044, -0.040899582, 0.008865322, 0.0011531098, -0.020292485, -0.056540303, 0.008320369, -0.015213747, 0.014730592, 0.00072613615, 0.017876714, 0.0113990735, -0.006258535, -0.038562465, -0.014674411, 0.008505765, -0.0068034884, 0.0021292502, -0.041506335, -0.021202615, -0.028854432, -0.010078826, 0.013460907, 0.021584643, -0.04310187, 0.045214266, 0.016393542, -0.014584522, 0.022753203, -0.048270497, 0.010365347, 0.045056958, -0.0050759306, -0.043865927, -0.046427768, -0.06427077, 0.017135128, 0.10175457, -0.05141662, -0.025191447, 0.014303618, -0.006084375, -0.065843835, 0.0072585526, 0.012449654, 0.05842798, 0.0046236753, 0.010747377, -0.03732649, -0.044225484, 0.034674756, 0.0034129804, 0.024494806, -0.011831665, -0.004278164, -0.06013587, -0.021764422, 0.0014817672, -0.0038820896, -0.039146744, -0.007134955, 0.028404986, -0.034068003, -0.034832064, -0.048944667, 0.021629587, 0.04966378, 0.008202389, 0.001584297, 0.021191377, -0.013775519, 0.07519231, 0.040989473, 0.0154497055, 0.039124273, 0.03303428, -0.0070169754, 0.011022663, -0.031146606, -0.04683227, -0.06031565, 0.0053793066, -0.026607202, -0.01925876, 0.046787325, -0.008590036, 0.04301198, 0.01891044, -0.0051573925, -0.016966585, 0.0022430164, 0.0068989955, -0.036315236, -0.02921399, -0.0018048065, -0.021393629, 0.025528532, -0.009039482, -0.0152924, 0.00089397613, 0.00061377464, 0.00097333145, 0.038247854, -0.00014685998, -0.02384311, -0.01073614, -0.029101627, 0.0016798043, 0.006033812, -0.0019859895, 0.020202596, 0.007842832, -0.028809488, -0.02121385, -0.018843023, -0.02903421, 0.02384311, -0.012505834, -0.027348788, 0.010236132, 0.025101557, -0.01759581, 0.0064326953, -0.028876904, 0.041393973, -0.018067729, -0.008994537, -0.04840533, 0.017966602, 0.03662985, -0.011281094, -0.011899082, 0.021573408, -0.06287749, 0.04568618, 0.004502887, 0.031978082, 0.0002556224, -0.03218033, 0.0017837387, -0.063506715, 0.025506059, -0.003837145, 0.035618592, -0.0014340136, 0.07348441, 0.03606804, -0.035326455, -0.036000624, 0.027034175, 0.014449688, -0.0010414505, 0.028876904, 0.037775934, 0.06337188, 0.008887794, -0.024697056, -0.051012117, 0.02795554, -0.008039465, -0.04800083, -0.032629777, 0.006320334, 0.032112915, 0.005741672, 0.014078896, -0.06121454, -0.0043259175, -0.01797784, -0.042000726, -0.032899447, -0.042360283, 0.041011944, 0.003679839, 0.033685975, 0.019562136, 0.027843177, 0.008067555, 0.0045590675, 0.030742105, 0.017494684, 0.018494701, 0.01158447, -0.03685457, 0.028045429, -0.03128144, 0.016663209, -0.05856281, -0.013326073, 0.026764508, -0.013989006, -0.015460942, 0.008387785, -0.029303877, 0.015359816, 0.05757403, -0.0055113314, 0.020753168, -0.012753029, 0.014371035, 0.037978183, -0.02961849, 0.018247506, 0.002185431, 0.005651783, 0.039641134, -0.035438813, 0.007988902, 0.021079017, -0.03128144, 0.03968608, -0.014708119, -0.051012117, 0.00869678, -0.01651714, -0.013415962, -0.009185552, 0.016202528, 0.042202976, 7.075263e-05, 0.04595585, -0.0010210851, 0.05896731, 0.0063652787, 0.021112725, 0.016854225, 0.08701274, -0.030854465, -0.020966655, 0.04067486, 0.010893446, 0.01730367, 0.0087192515, -0.014798009, 0.02982074, 0.01251707, 0.04674238, 0.012640668, 0.002459312, -0.03361856, 0.011011426, -0.042742312, 0.037978183, -0.006033812, -0.024067832, -0.0054579596, 0.026090339, 0.02865218, -0.0019494719, -0.01584297, -0.007567547, -0.009292295, 0.024112776, 0.08031599, -0.039663605, -0.014663175, -0.005323126, -0.064899996, 0.013213712, -0.011179969, 0.03303428, -0.03802313, -0.021955436, -0.02503414, -0.030112881, -0.03253989, -0.0032809556, -0.0053849244, 0.00014905454, -0.049214333, -0.012393473, -4.516405e-05, 0.011432782, 0.0005604029, -0.02223634, -0.00796643, 0.049978394, -0.020674516, 0.010842884, -0.010281077, 0.034944426, 0.011921555, -0.010752995, -0.006483258, 0.010106917, -0.026202701, -0.015663192, 0.022225104, 0.053439125, -0.02267455, -0.015168802, -0.06979896, -0.027303843, 0.032899447, -0.026382478, -0.00019452584, 0.03649501, 0.008309132, 0.0054579596, -0.020000346, 0.015483414, -0.06337188, 0.018112672, -0.00015195136, -0.023281302, -0.0027261707, -0.02375322, 0.015269927, -0.01969697, 0.07137202, -0.0071798996, 0.0380456, -0.02541617, 0.031146606, -0.046652492, 0.0073372056, 0.008674308, 0.011753012, -0.0019213816, 0.011230531, 0.01797784, 0.026225172, 0.012112569, 0.012303583, -0.02366333, -0.039259106, -0.011854137, -0.012505834, -0.025865616, 0.033191584, -0.007516984, 0.007393386, -0.045012016, -0.0073540597, -0.031124134, 0.060675208, 0.015090149, -0.017371086, 0.014146312, 0.004067486, -0.028674653, 0.0347197, -0.003682648, 0.013899117, 0.0015224982, -0.022517243, -0.02728137, 0.06836073, -0.012708085, 0.010517036, -0.040427666, 0.022944218, 0.007297879, 0.022157686, 0.020011581, 0.026360007, -0.007960812, -0.008932739, -0.043910872, 0.020764405, 0.0014859807, -0.03469723, 0.002226162, 0.032629777, 0.019359885, -0.0046433387, -0.01491037, 0.007376532, 0.017696936, 0.005042222, -0.024022887, -0.0042304103, 0.004578731, 0.0320455, 0.039731026, 0.02051721, 0.028337568, 0.06804612, -0.011157496, 0.044697404, -0.017292434, 0.0449446, 0.018741896, -0.010337258, -0.028674653, -0.022798147, 0.018932912, 0.018696953, -0.009224879, -0.028674653, -0.011320421, -0.040832166, 0.02775329, -0.0024874026, 0.035416342, -0.0062866258, 0.0062641534, -0.03696693, 0.03186572, 0.012944044, -0.019123927, 0.0012198244, 0.011174351, 0.030921884, -0.052135732, 0.017809296, -0.0071798996, 0.049484003, 0.031775832, 0.0032023026, -0.016584557, -0.029888157, -0.017764352, -0.024472333, -0.051776174, -0.036989402, 0.026876869, 0.033461254, 0.022528479, -0.033348892, 0.021629587, 0.009427129, 0.016696919, -0.011842902, 0.001846942, -0.012348528, 0.007899013, -0.056989748, 0.017843004, 0.012876627, 0.032787085, -0.004797836, 0.06332694, 0.04809072, 0.024562223, 0.019887984, -0.014483397, -0.0156070115, 0.010410292, -0.04809072, 0.023438608, 0.015730608, 0.001110272, 0.020247541, 0.015247455, 0.0038174817, -0.011944027, 0.009331622, -0.043753564, -0.025977977, -0.061798822, -0.0035843316, -0.038629882, -0.040607445, 0.018618299, 0.021831838, 0.031933136, 0.0047865994, -0.056180745, -0.007438331, -0.046562605, 0.014033951, -0.017584573, 0.0029410622, 0.009005774, -0.047101937, -0.024202665, 0.00077318755, -0.011887846, -0.0091293715, -0.0051461565, -0.052045844, -0.029685907, -0.02903421, -0.012135041, 0.015517122, -0.023775691, 0.03997822, -0.02097789, -0.03528151, -0.017764352, 0.0019466629, 0.0049944683, 0.0012556397, 0.0124945985, -0.015775554, -0.037191655, 0.0006924277, 0.013056406, -0.028854432, 0.007376532, -0.0049073882, -0.016685681, -0.032899447, 0.03539387, 0.044719875, -0.0309893, 0.048944667, -0.013236184, -0.02453975, -0.04377604, 0.010747377, -0.055776246, -0.0046967105, 0.0085226195, 0.01216875, 0.0528099, 0.017225018, 0.018348632, 0.028315097, 0.017831769, 0.03107919, -0.029843213, 0.008668689, 0.008320369, 0.037101764, -0.00046559793, -0.025168974, -0.021146433, 0.027034175, -0.013090114, -0.03462981, 0.011460872, 0.024944251, 0.06521461, -0.022786912, 0.0072754067, 0.04467493, -0.034135424, -0.013876645, 0.051866066, 0.009809159, -0.04496707, 0.03761863, 0.045933377, 0.002710721, -0.011606942, -0.0046377205, -0.002459312, 0.0044129975, 0.06337188, 0.01187661, 0.022809383, 0.04768622, -0.0043596257, 0.017573338, 0.00662371, 0.035506234, 0.005115257, 0.03627029, -0.01753963, -0.011685595, -0.011163115, -0.05249529, 0.0102642225, 0.001164346, -0.002039361, -0.009719269, 0.00315174, -0.014719356, -0.013764283, -0.00992152, 0.0005709368, -0.01677557, -0.04584349, -0.00472761, -0.00018855663, -0.02214645, -0.013326073, -0.027978012, 0.031438746, 0.01735985, 0.010696814, -0.0121238055, -0.0073315874, 0.047641274, 0.026697092, -0.0028399366, -0.00074299035, 0.023213884, 0.0064102234, 0.019191343, -0.03696693, 0.013663158, -0.010955245, -0.07483275, 0.043438952, -0.024135249, 0.028472403, -0.006016958, 0.0027851604, -0.03649501, 0.03402306, -0.010286694, -0.0069720307, 0.0071742814, 0.0014185639, 0.010955245, 0.047551382, 0.06746184, -0.0119664995, 0.053034626, 0.09182181, 0.020146417, -0.022854328, 0.032000553, -0.021314975], [-0.0014392347, 0.0071069645, -0.015926737, 0.035136357, 0.007767109, 0.01170419, -4.781032e-05, 0.050718155, 0.0027089727, 0.014463713, -0.005816411, 0.02182641, 0.0039727637, -0.021255475, 0.026810206, 0.02481193, -0.01611705, 0.035445616, -0.013726255, -0.0025811067, -0.03794346, -0.019970868, -0.052526116, 0.02309912, 0.015665058, -0.0033512758, -0.004516937, -0.0010749656, -0.0063219275, -0.0057955957, 0.032162733, 0.045746252, 0.04248716, -0.049576283, -0.023896053, -0.041797277, 0.026929151, -0.0058788573, -0.015462852, -0.00044753062, -0.06075711, 0.027642822, -0.027999656, -0.091207035, 0.017342184, -0.04655508, -0.021184107, -0.03575487, 0.023943631, -0.055713844, 0.016354939, -0.0024577014, 0.007606534, -0.018567316, -0.022718498, -0.017544389, 0.05086089, -0.03408964, 0.052526116, 0.0015626401, 0.031401485, 0.021695571, 0.021421997, 0.0005698209, 0.022290295, 0.002365519, -0.033542495, 0.02108895, -0.0022317057, -0.0006861641, -0.00757085, 0.010645579, -0.011930184, -0.034731943, 0.0037200053, -0.10124599, 0.0198995, 0.030045511, -0.02111274, -0.009836753, 0.0064170836, -0.04198759, -0.0042493106, 0.0058283056, 0.012441648, -0.05699845, 0.04962386, -0.10077021, -0.020720221, 0.0343989, 0.040393725, -0.027833134, 0.020696433, 0.002222785, -0.028213758, 0.029165318, 0.016366834, 0.015653163, -0.022849336, -0.018472161, -0.01008059, -0.036087915, -0.04488985, -0.08854267, 0.0365637, 0.04241579, 0.012810378, -0.06399242, -0.00601267, 0.020446647, 0.023943631, -0.02623927, 0.010574211, 0.010514739, -0.026929151, 0.05247854, -0.025882434, -0.07555387, -0.01979245, 0.014202035, -0.086021036, 0.01170419, 0.08568799, 0.017925013, -0.020922428, 0.056855716, 0.019483194, 0.059472505, 0.022587659, -0.009485865, 0.005997802, 0.025335288, 0.0037289262, -0.015106017, 0.045579728, 0.011311671, 0.051193934, 0.005730176, -0.024431305, 0.015772108, -0.047673162, 0.013678676, -0.03765799, 0.013286158, -0.036896743, -0.012108603, -0.01583158, -0.035017412, -0.022207035, 0.031044649, -0.032353044, -0.030449923, -0.015367696, 0.022742286, 0.011882607, -0.024407517, 0.0146421315, 0.019554561, -0.019269092, 0.03356628, 0.033518706, -0.08811446, 0.024324255, 0.008439149, 0.005664756, -0.09387141, 0.004326625, -0.02338459, -0.027880711, 0.011603086, 0.01527254, -0.05557111, -0.00967023, 0.008005, -0.022730391, 0.020803483, 0.017056715, 0.03416101, -0.009384762, -0.06832202, -0.07084365, 0.054238927, 0.045674887, -0.02277797, 0.0053673936, 0.013095846, -0.012774695, -0.01905499, 0.0006508522, -0.041226342, -0.025478022, 0.023479745, 0.0005980704, -0.03458921, -0.026762629, -0.0700824, 0.011067834, -0.015010861, -0.023729531, -0.005563653, -0.047292538, -0.04555594, -0.027761767, 0.015296329, -0.046578865, 0.043081883, 0.036397174, -0.03125875, 0.019031202, -0.029474575, 0.034898467, 0.02528771, -0.002023552, -0.026881574, -0.00071218325, 0.030069299, -0.04705465, 0.033019137, 0.0070891227, -0.0941093, 0.043319773, -0.03054508, 0.032757457, -0.0144518195, 0.02576349, 0.055285644, 0.0096821245, 0.047578007, 0.019090675, -0.003508878, 0.01300069, -0.013976039, -0.029022584, 0.03934701, -0.054952595, -0.046412345, -0.021945355, -0.020767799, 0.06884538, -0.016176522, 0.007499483, 0.038609553, -0.027999656, -0.016771248, 0.01931667, 0.021731254, 0.008575936, 0.060138598, 0.011924238, 0.026857784, 0.010615842, 0.0020532883, 0.0348271, -0.0060691694, 0.00022376531, 0.060138598, -0.008837614, -0.005673677, -0.011418722, 0.043462507, 0.0057837013, -0.0018168851, -0.011014308, 0.07545871, -0.04655508, -5.9937134e-05, 0.029997932, -0.056570247, -0.034898467, -0.019257197, 0.02254008, -0.034470264, 0.013821411, 0.007897949, 0.051574558, -0.03228168, 0.0063992417, 0.01209076, -0.006119721, 0.08054956, -0.0002943889, 0.07060576, 0.009878383, -0.024645407, 0.06156594, 0.024407517, -0.007309171, -0.09472781, -0.023003966, -0.0054149716, 0.007368644, -0.014094984, 0.044461645, 0.03147285, 0.039656267, -0.0052871057, -0.030021721, -0.007386485, -0.0530019, -0.022099983, -0.021683676, 0.018495949, -0.031401485, -0.018698156, -0.003357223, 0.0139641445, -0.0063040857, 0.06323117, -0.0040143942, -0.027119463, 0.03527909, -0.0013269803, 0.015106017, -0.020589381, 0.0445568, 0.001809451, -0.0075351666, 0.04274884, 0.041535597, -0.041131187, 0.020696433, -0.043557663, -0.10286365, 0.011835028, 0.022587659, -0.0002637234, -0.024157733, -0.021850199, -0.023860369, 0.009349078, -0.0731274, 0.021231685, -0.010871574, -0.018626789, -0.06860749, -0.07569661, 0.004302836, -0.030616447, 0.038324084, -0.014380452, -0.0065598176, 0.030711602, -0.0056052837, -0.07189037, -0.018924152, 0.011412774, 0.007666006, 0.017829858, 0.034803312, -0.021065162, 0.001511345, 0.023420272, 0.039037753, 0.04251095, -0.014416136, 0.008784089, -0.03977521, -0.03761041, 0.036801588, -0.016652303, 0.07774246, -0.06461093, -0.01157335, 0.043938287, -0.024907086, -0.04272505, -0.033090502, -0.0322341, -0.02232598, 0.0231467, -0.04869609, 0.094585076, 0.03416101, -0.02459783, -0.026072746, -0.016105155, 0.03604034, 0.006286244, -0.043938287, -0.008790037, -0.06285054, -0.00369919, 0.02219514, 0.02003034, 0.009289606, 0.015486641, -0.050147217, -0.0091528185, 0.019126358, 0.017425444, 0.006095932, 0.0072734877, -0.029736253, -0.011995604, 0.03178211, 0.032757457, -0.018103432, 0.010401742, 0.078551285, 0.041535597, 0.004243363, 6.016945e-06, -0.020125497, -0.005073005, 0.05266885, -3.259372e-05, -0.02299207, -0.0015626401, 0.019554561, 0.042296845, 0.001706861, 0.07327013, -0.026048958, -0.021778831, 0.013214791, 0.034256164, -0.0467216, 0.02204051, -0.02407447, -0.020648854, 0.0022510344, -0.015676953, -0.03530288, 0.0031936737, 0.0018049906, 0.033019137, -0.0068869162, 0.05100362, 0.017663335, -0.06270781, -0.028475435, -0.019376142, 0.015902948, 0.028760904, 0.024122048, -0.044461645, -0.034613, -0.021029478, 0.0049986644, 0.03142527, -0.014713498, -0.014832444, 0.03815756, 0.0052900794, -0.011501983, 0.016485779, -0.06765592, 0.027856922, 0.03385175, -0.01540338, -0.021255475, -0.05414377, -0.026167903, 0.00601267, 0.0858783, -0.029117739, -0.014023617, -0.019423721, -0.009265817, -0.08035925, 0.03316187, 0.028665747, 0.056427516, -0.012429754, 0.0376342, 0.016212204, -0.025335288, 0.05414377, 0.006220824, 0.026596105, -0.0021454706, -0.0024041762, -0.04405723, -0.0046299347, 0.0072734877, -0.001706861, -0.0109013105, -0.044176176, 0.023265645, -0.06870264, -0.013072057, -0.03102086, 0.004469359, 0.06080469, 0.0051919497, 0.027761767, -0.025121186, 0.017294604, 0.031544216, 0.0419638, 0.04836304, 0.06132805, -0.001416189, 0.0047607743, 0.011109464, -0.024157733, -0.042320635, -0.07522082, 0.02042286, -0.023979316, 0.023170488, 0.036349595, -0.0014384913, 0.04167833, 0.019459404, -0.008076366, 0.0019328565, -0.04895777, 0.01920962, -0.07759973, -0.0066311844, 0.030069299, -0.0024636486, 0.024550252, 0.00366648, 0.0050997674, -0.016747458, 0.0068690744, 0.029117739, 0.0047815894, -0.0054149716, -0.022016723, -0.013131529, -0.029902777, -0.035112567, 0.0008236942, 0.008338045, 0.017116187, -0.025715912, -0.04362903, -0.01211455, -0.0046001985, -0.010508792, 0.021921566, 0.021969143, -0.042891573, 0.014332874, 0.04962386, -0.046697814, 0.009093346, -0.040893294, 0.05438166, -0.016378729, -0.0073745907, -0.022873126, -0.0058758836, 0.061946563, 0.024122048, -0.009902173, 0.034613, -0.07331771, 0.013631099, -0.0018451345, 0.037301157, -0.007719531, -0.004977849, -0.010068695, -0.041250132, -0.0050640837, 0.0070772283, 0.025192553, 0.018388899, 0.09196828, 0.062089298, -0.026167903, -0.018900363, 0.045722462, 0.04674539, 0.0050938204, 0.02740493, 0.025478022, 0.044699535, 0.0006460201, -0.01871005, -0.026167903, 0.030354768, 0.0051592398, -0.049290814, -0.02362248, -0.02933184, 0.0196854, 0.015284434, 0.026358215, -0.028189968, -0.00067426957, -0.03768178, -0.039275642, -0.065086715, -0.03406585, 0.029189106, -0.013976039, 0.037848305, -0.0035059042, 0.02742872, 0.0220643, 0.019602139, 0.011597139, 0.004130366, 0.012917428, -0.012905534, -0.016902087, 0.015688848, -0.04886261, -0.0054714708, -0.055666268, -0.009384762, 0.04431891, -0.031901054, -0.010395794, 0.030878125, -0.04919566, 0.008373729, 0.021410102, -0.014237718, 0.046103086, -0.017675228, -0.0042493106, 0.07055818, -0.012227547, 0.023836581, 0.035445616, 0.023527324, 0.05323979, -0.020410964, 0.010508792, 0.049766593, -0.008682986, 0.022635236, -0.032091364, -0.023896053, 0.011121359, -0.025977591, -0.006833391, -0.0059888815, 0.05699845, 0.047197383, -0.0016161654, 0.05485744, -0.005691519, 0.022575764, 0.018674368, 0.0063278745, 0.0089506125, 0.08273815, -0.035136357, -0.010086537, 0.041273918, 0.0070118085, 0.026905362, 0.0102649545, -0.01609326, 0.056665406, 0.021445787, 0.051669713, 0.022111878, -0.013547837, -0.001075709, 0.002118708, -0.01823427, 0.034898467, -0.027500087, -0.02182641, -0.0018243191, 0.018638683, 0.01442803, -0.010181693, -0.0005371111, 0.012822272, -0.01905499, 0.020946218, 0.07288951, -0.053620413, -0.012441648, -0.026786417, -0.03554077, -0.0068452857, -0.030854337, 0.05509533, -0.037229788, -0.035945185, -0.019221514, -0.047340114, -0.022004828, -0.0072734877, 0.013012584, 0.0012377716, -0.040655404, -0.02013739, -0.013072057, 0.0051741083, 0.027048096, -0.007588692, 0.007380538, 0.022337874, -0.03382796, 0.00028862752, -0.022016723, 0.003827056, -0.0033453286, 0.019399932, -0.015891055, 0.0011537666, 0.011115411, 0.0050284006, 0.0036813482, 0.028499225, -0.017853646, -0.032519568, -0.06289812, -0.03551698, 0.013357525, -0.016200311, 0.019602139, 0.027214618, 0.03554077, -0.0006240896, -0.0016622565, 0.018495949, -0.056189623, 0.015807793, -0.009420445, -0.01918583, -0.0056944927, -0.04596035, 0.020351492, -0.007237804, 0.06741803, -0.016378729, 0.019780556, -0.008831668, 0.013857094, -0.027928289, 0.027095674, 0.0016488753, 0.010895363, 0.0027357354, -0.0005274468, 0.019661611, -0.0032650407, 0.01825806, -0.02431236, -0.031187383, -0.03975142, 0.004389071, 0.021326842, -0.023348907, 0.009468023, -0.017330289, -0.009628599, -0.033994485, -0.0062743495, 0.01791312, 0.017223237, -0.0030107957, 0.030164456, 0.026405793, 0.017794173, -0.030426135, 0.035112567, -0.023741424, -0.008605672, -0.0025588046, 0.003714058, -0.013631099, 0.027024306, 0.007529219, 0.012715222, -0.038823653, 0.025834857, 0.026382005, -0.009432339, 0.03392312, 0.0013656374, -0.019328564, -0.016902087, 0.017365972, -0.005403077, 0.0028041287, -0.011103517, 0.007065334, 0.032947768, 0.015819687, 0.009485865, -0.042796414, 0.033304606, 0.019970868, 0.0025067662, -0.024264783, -0.0072021205, -0.009812963, -0.0050462424, 0.017163765, 0.045294262, 0.014178245, 0.059757974, 0.0033691176, 0.031401485, -0.01992329, 0.05671298, 0.0005270751, 0.0022792837, -0.016128944, 0.0048083523, 0.004508016, 0.026358215, -0.02121979, -0.02407447, -0.02351543, -0.01068721, 0.0062743495, 0.0073270127, 0.005248449, 0.022789864, 0.031377696, 0.007350802, 0.019364249, 0.013916567, -0.013309947, 0.009717807, 0.016021892, -0.0062802965, -0.05890157, 0.020541804, -0.0035386141, 0.051241513, 0.019721083, 0.013631099, -0.022028616, -0.02528771, -0.020518014, -0.026025169, -0.026762629, -0.028784694, 0.028808482, 0.021873988, 0.026429582, -0.049814172, 0.038347874, -0.010038959, 0.024193415, -0.005453629, 0.007903896, -0.01786554, -0.004849983, -0.0276904, 0.028047234, -0.0170924, 0.00852241, -0.0039162645, 0.06475367, 0.043391142, 0.0038924755, 0.022218928, -0.026405793, -0.001555206, 0.0029944407, -0.08073988, -0.011942079, 0.0077433204, -0.004332572, 0.060328912, 0.037277367, 0.0018793312, -0.031401485, -0.003110412, -0.029212896, -0.0134764705, -0.0854501, 0.0010816562, -0.04488985, -0.042606104, -0.00032375345, 0.02621548, 0.008076366, 0.003476168, -0.035445616, -0.009123082, -0.06537218, 0.012072919, -0.01897173, -0.012667644, 0.019530771, -0.050194796, -0.010098431, -0.015320118, -0.01611705, -0.022801759, -0.018495949, -0.06494398, -0.026358215, -0.0040025, -0.017556284, 0.013155319, 0.001714295, 0.024764352, 0.00895656, -0.030878125, 0.0057509914, -0.0026866705, 0.018567316, -0.014166351, -0.014166351, -0.01765144, -0.0486723, 0.010163851, -0.019566454, 0.007475694, 0.008159628, -0.035088778, -0.018828996, -0.012881745, 0.046079297, 0.05076573, -0.0298552, 0.05752181, -0.034684367, -0.009598862, -0.035136357, 0.005792622, -0.050908465, -0.00027413107, 0.0071485955, -0.012144286, 0.07260404, 0.037229788, -0.0106574735, 0.032733668, 0.0025885408, 0.047578007, -0.03796725, 0.01109757, 0.027595242, 0.026429582, -0.006220824, -0.02085106, -0.03268609, -0.012417859, -0.010134115, -0.021873988, -0.009277711, 0.050432686, 0.06365937, -0.04298673, 0.0039400537, 0.021814516, -0.035445616, 0.009372867, 0.049100503, 0.023134805, -0.03147285, 0.015010861, 0.023503534, 0.010936994, -0.00095453375, 0.0162241, 0.010419583, -0.019411827, 0.0633739, 0.03102086, 0.045032583, 0.014463713, -0.0018614895, 0.018876573, -0.0070891227, 0.017056715, 0.006232719, 0.039156698, -0.033780385, -0.014142562, 0.022730391, -0.01442803, -0.0023878212, 0.012429754, 0.03385175, 0.0017886356, 0.042106535, -0.008819773, -0.001143359, -0.031163594, -0.017473023, -0.013250475, -0.055190485, -0.006999914, -0.012465438, -0.027214618, -0.018936045, -0.026976729, 0.03290019, 0.022611447, -0.0079336325, 0.039727636, -0.002658421, 0.034731943, 0.008807878, -0.027000519, 0.045603517, 0.005629073, -0.02005413, -0.01103215, -0.023348907, 0.00032877145, -0.023979316, -0.04795863, 0.016997242, -0.044295125, 0.0057004397, 0.002627198, 0.018876573, -0.04103603, 0.003110412, -0.00757085, 0.0026539606, -0.012394071, -0.009575074, 0.012513015, 0.055000175, 0.058520947, 0.016497673, 0.020839166, 0.0811205, -0.0054476815, 0.0036694536, -0.0005898929, -0.0026613947], [0.005778001, 0.010572267, -0.019732583, 0.030090742, -0.016503615, 0.053052295, -0.023181446, 0.04976546, 0.0042329575, 0.028239004, -0.054950327, -0.009819998, 0.011637016, -0.011405549, -0.010335012, 0.04009013, -0.013378807, 0.014258383, -0.018262766, -0.037335668, -0.0032087148, -0.06036666, -0.07087527, 0.024604969, 0.024697555, 0.0015161105, 0.02364438, 0.010022532, -0.011058348, -0.00090995565, 0.01748735, 0.033400726, 0.048330363, 0.017649379, 0.05351523, -0.029674102, 0.013876461, 0.0008332821, -0.0010958528, 0.01720959, -0.030437943, 0.024998464, -0.025669718, -0.015462012, 0.045992542, -0.02784551, -0.01314734, -0.024720702, -0.037636574, -0.028678792, -0.010022532, -0.02381798, -0.015242118, -0.015959667, -0.051293142, 0.03046109, 0.056570597, -0.07235666, 0.055783607, -0.024836436, -0.015068518, 0.029141726, 0.04657121, -0.06444048, -0.002522993, -0.009270263, -0.0049157855, 0.0070018843, 0.03527561, 0.019130768, -0.008969356, 0.013529261, -0.036363505, -0.028308444, 0.017024416, -0.083652265, 0.057218704, 0.007806233, -0.017591512, -0.01961685, 0.006498443, -0.05846863, 0.009756344, -0.010201919, 0.05758905, -0.066616274, 0.03342387, -0.10304922, -0.02784551, 0.0131126195, -0.016260574, 0.012869579, 0.041432638, 0.049024764, -0.03425715, 0.03208136, 0.004652492, 0.011122001, -0.04515926, -0.0040391036, -0.00939757, -0.03400254, -0.025901185, -0.061940636, 0.013679715, 0.042497385, 0.036872733, -0.038400415, -0.00788146, -0.031896185, 0.00038843098, -0.0020817586, -0.00931077, 0.029928716, -0.029720394, 0.02742887, -0.03441918, -0.073976934, -0.050043218, -0.00075009855, -0.035507075, -0.028794525, 0.077217475, 0.04316864, -0.01996405, 0.044997234, 0.03914111, 0.045136113, 0.02884082, -0.0068861507, -0.00917189, 0.025114197, 0.03809951, 0.013135767, 0.058931563, 0.02230187, 0.06041295, 0.006863004, -0.03314611, 0.0289797, -0.023794834, 0.0056015076, 0.0034228219, 0.039002232, -0.048006307, -0.020577438, -0.021132959, -0.01628372, -0.050830208, 0.014165795, -0.031317517, -0.023980007, -0.036803294, 0.00086221553, 0.051246848, -0.03520617, 0.06119994, 0.057774227, -0.009987812, 0.041895572, 0.021514881, -0.06800508, -0.0065620965, 0.024327207, -0.003457542, -0.0727733, 0.0664311, -0.03004445, -0.044210244, 0.018297486, 0.034951556, -0.0016737975, 0.021538027, -0.0029497608, -0.030761998, 0.005080706, 0.06277392, -0.00026474067, -0.012244618, -0.060644418, -0.038145803, 0.06698662, 0.00396677, -0.02409574, 0.032127656, 0.025739158, 0.007840953, -0.0026821268, 0.03513673, -0.079624735, -0.04013642, -0.008986716, -0.01700127, -0.049302526, 0.026549293, -0.02205883, -0.012811712, -0.03717364, -0.0028195605, -0.03228968, 0.012163604, -0.02188523, -0.012834859, 0.005494454, -0.040182713, 0.024790142, 0.03724308, -0.01452457, 0.008517995, 0.010034105, -0.0053729336, 0.029164873, -0.015774492, -0.036108892, -0.0071986313, -0.005260093, -0.06041295, 0.022174563, -0.026618734, -0.07587496, 0.06550523, 0.015635613, 0.028100124, -0.044349127, 0.053283762, 0.042705707, 0.0065620965, 0.0349747, 0.0046264515, 0.037196785, 0.03823839, -0.06633852, -0.011625443, 0.053700402, -0.04990434, -0.04219648, -0.03316926, 0.009588531, 0.063236855, -0.010398666, 0.012765419, 0.031109199, -0.026803907, -0.034905262, 0.05971855, 0.053052295, 0.0010567927, 0.039256845, 0.02082048, 0.03187304, -0.03418771, 0.010699574, 0.05194125, 0.036919028, -0.012603392, 0.054117043, 0.010867387, -0.043284375, -0.03259059, -0.011990003, -0.05407075, 0.022776376, -0.002540353, 0.08920748, 0.008604795, -0.01631844, 0.025021609, -0.056616887, -0.055089206, -0.02188523, 0.020288104, -0.06832913, 0.043701015, 0.012638112, 0.05920932, -0.0088073285, 0.019003462, -0.0059429216, -0.036155183, 0.08416149, 0.023389766, 0.012591818, 0.035738543, 0.035715397, 0.019269649, 0.036294065, 0.017024416, -0.022915257, -0.048237775, -0.018910874, 0.007042391, -0.002844154, 0.068884656, 0.008286527, 0.050830208, -0.026641881, -0.021595893, 0.036525533, -0.049209937, 0.01466345, -0.01799658, -0.012846433, -0.048098896, -0.027938098, -0.04256683, 0.039766073, 0.0087668225, 0.101012304, -0.032173946, 0.015681906, 0.070690095, 0.017846124, -0.023169871, -0.020126076, 0.019165488, -0.03937258, 0.014860197, 0.027313136, 0.07508797, -0.03793748, -0.021769496, -0.039812367, -0.082865275, 0.032521147, 0.010971548, -0.0038163164, -0.03951146, -0.0035298755, -0.035090435, 0.028748233, -0.06990311, -0.019778876, -0.027104815, 0.0042271707, -0.011052561, -0.06897724, -0.009513304, -0.05263565, -0.020426985, 0.021376, -0.05666318, -0.010149839, -0.018841434, -0.05485774, 0.019906184, -0.0067588435, 0.012915873, 0.013020033, 0.023598086, -0.023563366, 0.0014032702, 0.018285913, 0.045552753, 0.02257963, -0.01961685, 0.0124297915, -0.011619656, -0.03307667, -0.009108236, 0.002496953, 0.079671025, -0.061894342, 0.0059168814, 0.047404494, 0.03066941, -0.022602776, -0.030368503, -0.042798296, 0.007869886, 0.048422948, -0.04981175, 0.03731252, -0.019917756, -0.011405549, -0.036016304, -0.006006575, 0.040877115, -0.029743541, -0.04786743, 0.017788257, -0.019246502, -0.032035068, 0.008836262, 0.0101729855, 0.008830476, 0.027938098, -0.057403877, -0.009461224, 0.03228968, -0.009131383, -0.0071754847, 0.030715704, 0.003770023, -0.026271533, 0.017603084, 0.02453553, -0.026989082, 0.013934328, 0.014466703, 0.021688482, -0.017336898, 0.0029164874, -0.03201192, -0.039187405, 0.077124886, -0.0024087061, -0.014235236, 0.0033620617, -0.007187058, 0.029581515, 0.01996405, 0.02223243, -0.02784551, -0.019778876, 0.027521456, 0.031340666, -0.028956553, 0.032891497, -0.0015450439, -0.0017475777, 0.018945595, -0.02791495, -0.047196172, 0.04967287, -0.0235055, 0.01982517, -0.042705707, 0.030137036, -0.0044297045, -0.026109505, -0.050506152, 0.035298757, 0.00046691284, 0.018251192, -0.028215857, -0.07837481, -0.044302832, -0.03448862, 0.032058213, 0.023262458, 0.020913066, -0.04659436, 0.020589013, 0.02522993, -0.016191134, 0.0003113958, -0.04340011, 0.011712243, 0.05633913, -0.02148016, -0.018251192, -0.025044756, -0.0671718, -0.006585243, 0.046895266, -0.049163643, 0.003304195, 0.03407198, 0.013552408, -0.06680145, 0.0068514305, 0.022024108, 0.03599316, 0.0031624213, 0.048654415, -0.019952476, -0.050274685, 0.038192097, -0.0012926, 0.024720702, -0.0052832398, -0.026040066, -0.050783914, -0.018008152, -0.03886335, -0.025044756, 0.0013699968, -0.008309674, 0.04580737, -0.048747003, -0.021121386, -0.021109814, 0.015612466, 0.054024454, -0.005607294, -0.006585243, -0.023366619, 0.020542718, 0.05189496, 0.006203322, 0.029164873, 0.024813289, 0.025553985, -0.021040373, -0.011538642, -0.037844896, -0.06471825, -0.039395727, -0.005954495, 0.02522993, 0.034465473, 0.042589974, 0.0022235322, 0.03178045, 0.0031045545, -0.00038155928, -0.020426985, 0.0048579187, 0.019605275, -0.06758843, -0.014003769, -0.0051501463, -0.019362235, -0.019188635, -0.01679295, -0.016353162, 0.004756652, 0.046316598, 0.021491734, -0.004985226, 0.0020832052, 0.013726008, -0.008234448, -0.015045371, -0.018482659, 0.03351646, 0.02247547, -0.019362235, 0.009623251, -0.039326284, -0.008315461, -0.026757615, -0.0671718, -0.006064442, 0.022984698, -0.0072333515, 0.041918717, 0.012314058, -0.01965157, 0.031919334, -0.028470472, 0.04967287, 0.024373502, -0.03724308, 0.014061635, 0.028239004, 0.031294372, 0.0145824365, -0.027336283, 0.0635609, -0.05786681, 0.016272148, -0.00931077, 0.02735943, 0.007331725, -0.016735082, -0.027799217, -0.004664065, -0.002093332, -0.014050062, 0.010115119, -0.0059602815, 0.048839588, 0.055089206, -0.02374854, -0.02209355, 0.057357583, 0.033886805, -0.010277146, 0.022371309, -0.0005529897, 0.049533993, 0.013517687, -0.008494848, -0.027521456, 0.07499539, -0.0018039979, -0.05569102, -0.018158605, -0.0051761866, 0.010838454, 0.004218491, -0.0038249963, -0.021156106, -0.009872078, -0.012695978, -0.04219648, -0.0027038269, -0.029650955, 0.013598701, -0.019906184, 0.010572267, -0.019061329, 0.012788566, 0.008130287, 0.051293142, 0.012985312, 0.028424177, 0.015299985, 0.036294065, -0.018285913, 0.00020723553, -0.00520512, 0.0014531803, -0.06365349, -0.013506114, 0.04870071, -0.027868656, -0.011012054, 0.029581515, -0.025901185, -0.016885536, 0.04367787, 0.019396955, 0.03425715, -0.021757921, -0.021538027, 0.04573793, 0.00037504928, 0.048376653, 0.046617504, -0.015948093, 0.03504414, -0.023135152, -0.0020962253, 0.010948401, -0.018887728, 0.0076152724, -0.0113939755, -0.0208552, -0.017452631, -0.020762613, -0.017834552, -0.010751653, 0.039951246, 0.0441871, -0.0025924332, 0.045969397, -0.024350354, 0.03624777, 0.005734601, 0.014999078, 0.024651263, 0.07328253, -0.03300723, -0.033747926, 0.03682644, -0.00022766973, 0.0153694255, 0.013066326, -0.01074008, 0.047960013, -0.0074358853, 0.045182407, 0.040946558, 0.024859583, -0.0081245005, 0.0034980488, -0.039002232, 0.002891894, -0.0060355086, -0.0074532456, 0.0073722317, 0.029998155, -0.00800298, -0.033261843, -0.014235236, -0.024211474, -0.0019978518, 0.031502694, 0.070597515, -0.044140805, -0.028493619, -0.029141726, -0.0070828977, -0.026595587, -0.026989082, 0.039951246, -0.014212089, -0.032405414, -0.02643356, -0.036780145, -0.023320325, -0.007910393, -0.01448985, -0.008251808, -0.036780145, -0.013760728, 0.0035009421, 0.006550523, 0.0074358853, -0.023250885, -0.02381798, 0.024373502, -0.0063248426, -0.0153694255, 0.011781683, -0.007927753, 0.03478953, -0.016353162, -0.0002889724, -0.01851738, -0.001728771, -0.01593652, 0.045668487, 0.041247465, -0.007713646, 0.0013801234, -0.0494877, -0.028447324, 0.02629468, -0.007736793, 0.013841742, 0.04657121, 0.020091357, 0.010392879, -0.03231283, 0.009131383, -0.07443987, 0.024998464, -0.01979045, 0.006347989, -0.018228047, -0.028424177, 0.018494233, -0.06689403, 0.068236545, -0.023146724, 0.05189496, -0.020507999, 0.0069498043, 0.0058937347, 0.015543026, 0.008112927, 0.023135152, -0.016364735, 0.011289815, 0.009229757, 0.0007754153, 0.014709744, 0.0046322383, -0.038192097, -0.012314058, -0.035020996, 0.043631576, -0.018991888, 0.020762613, -0.005685414, 0.020183943, 0.014119502, -0.0071812714, 0.009108236, 0.050830208, 0.014756037, -0.00396677, 0.038955938, 0.0017041776, -0.008859409, 0.032613736, -0.015276838, -0.02013765, 0.0072738584, -0.0040535703, -0.030437943, 0.03724308, -0.0035356623, -0.006064442, -0.026641881, 0.0023725394, 0.009235543, -0.011671736, 0.053376347, -0.0022191922, -0.015184252, -0.029650955, -0.014269955, -0.015392572, -0.008818902, -0.033817366, -0.007823593, -0.0056593744, 0.0019356449, 0.011602296, -0.0053468933, 0.04515926, 0.04316864, -3.0380077e-05, -0.011399762, 0.020484852, -0.0028991273, 0.023274032, 0.036155183, 0.031849895, 0.006828284, 0.053607814, -0.029928716, 0.044325978, -0.04340011, 0.03837727, 0.0102366395, -0.010063038, -0.054996617, -0.014223662, 0.012661259, 0.012302484, -0.0182049, -0.0022929725, -0.031896185, -0.05999631, 0.04777484, 0.010190345, 0.029350048, -0.01717487, 0.0501821, -0.0055667874, -0.013830168, 0.019628422, -0.0388865, -0.007077111, -0.011058348, 0.009831571, -0.04536758, 0.042103894, 0.013992195, 0.032197095, 0.021040373, 0.002246679, -0.016850816, -0.034141418, -0.015392572, -0.019396955, -0.02226715, -0.049858045, 0.025993772, 0.032173946, 0.029442634, -0.021607468, 0.030646265, 0.019130768, 0.014084782, 0.022012535, 0.0046148784, -0.031039758, 0.022498617, -0.060135193, 0.008118714, -0.017325323, 0.0068514305, 0.0018850114, 0.030275917, 0.041108582, 0.019744156, -0.010253999, -0.026803907, -0.021746349, -0.004357371, -0.058329746, 0.00805506, -0.023239313, -0.013644994, 0.029975008, 0.030854585, 0.010282933, -0.03400254, 0.020519571, -0.03673385, 0.0063248426, -0.023528647, -0.011093068, -0.058190867, -0.046548065, 0.015415719, 0.017047564, 0.016086973, 0.032197095, -0.018077591, 0.004962079, -0.03228968, 0.01041024, -0.0023103324, -0.0013482968, 0.027266841, -0.01649204, -0.0011001928, 0.009935732, -0.017012842, -0.009704265, 0.019917756, -0.020970933, 0.0049476125, -0.011446055, 0.01675823, 0.0027154002, 0.022382883, -0.012325631, 0.0040998636, -0.014154222, -0.00957117, -0.002913594, 0.017753538, 0.013506114, -0.016908683, -0.015658759, 0.014061635, 0.012788566, -0.018228047, -0.010948401, -0.0066199633, -0.0019052648, -0.010091972, 0.015612466, 0.043099202, 0.05407075, -0.02877138, 0.0055320673, 0.020218665, -0.038585592, -0.03272947, 0.015716625, -0.03263688, 0.02770663, 0.036919028, 0.00929341, 0.05407075, -0.00948437, 0.012742272, -0.008460128, 0.034048833, -0.008801542, -0.0053874003, 0.00017974878, 0.011185654, 0.051570904, -0.0040506767, 0.017799832, 0.0038452498, 0.0009526324, -0.02742887, -0.036919028, -0.014443557, 0.032706324, 0.06300539, -0.0009562491, 0.0105664795, 0.011538642, -0.05258936, -0.010659067, 0.039696634, 0.0016477575, -0.021329707, 0.004120117, 0.03948831, 0.0027761604, 0.00065534166, -0.020288104, 0.011417122, 0.0073838052, 0.048006307, 0.029720394, 0.029164873, 0.022961551, -0.005537854, 0.00899829, 0.009351277, 0.01851738, -0.000326405, 0.019107621, -0.01717487, 0.0024781462, 0.029882422, -0.05837604, 0.012661259, 0.012186751, 0.0074532456, -0.0038278897, 0.030715704, 0.002255359, -0.010178773, -0.013239927, -0.0046669585, 0.047543373, -0.03965034, 0.007256498, 0.013969049, -0.028262151, 0.0013815701, -0.0007696286, 0.05786681, 0.0014596904, -0.0022061723, 0.04485835, 0.002062952, 0.05263565, 0.018066019, -0.03196563, -0.01614484, -0.0007472052, -0.033979394, -0.01597124, -0.017834552, 0.028239004, -0.046825826, -0.031155491, 0.039974395, -0.03603945, 0.040877115, -0.01335566, 0.002128052, -0.054394804, -0.011110428, 0.016769802, -0.019096049, 0.0019067115, -0.011700669, 0.013598701, 0.037567135, 0.039766073, -0.022625923, 0.005931348, 0.14471333, -0.03238227, 0.013020033, 0.0138996085, -0.0037353027], [-0.012503004, 0.0064848117, -0.017444383, 0.031179741, 0.027781794, 0.01454895, -0.013735358, 0.04333577, 0.0015150171, 0.039004587, -0.018006718, 0.05695148, -0.00035183394, -0.0202441, -0.007836811, 0.013376419, -0.040272836, -0.013376419, -0.03414696, -0.038143136, -0.006933484, -0.054558564, -0.08868159, 0.0024138575, 0.000847243, 0.0050849537, -0.010911712, 0.014010543, 0.023749726, 0.042282887, 0.009260599, -0.002089318, 0.055324297, 0.0001343213, 0.010893766, -0.006185697, 0.019251037, 0.035798073, -0.014213941, -0.012138084, -0.040583912, -0.01959801, -0.031012235, -0.009745165, 0.011420208, -0.021883247, 0.03890887, 0.010756173, -0.014931818, -0.03347694, 0.0047828476, -0.035774145, -0.024862433, -0.017635817, -0.025125654, 0.021440558, 0.02940898, -0.06350808, 0.03086866, -0.0045704762, -0.0350802, -0.0079923505, -0.017193126, -0.031084023, -0.021572169, -0.017922966, -0.0026501582, 0.031107953, 0.018281905, 0.04809768, -0.0036492022, 0.03287871, -0.009691324, 0.0050251307, 0.012359429, -0.016200064, 0.06633173, 0.016977763, -0.0071309, -0.017863143, 0.06503955, -0.022672912, -0.002282247, 0.009625519, 0.018880134, -0.020531248, 0.07288832, -0.093036704, -0.01397465, 0.0046302993, 0.025963176, -0.011127075, 0.044962958, 0.012239783, -0.060780153, 0.042905044, -0.016582932, 0.018616913, -0.018365657, -0.028738962, -0.052739944, -0.03682703, -0.02849967, -0.08561866, 0.062263764, 0.01678633, 0.0653267, -0.020411603, 0.041612867, -0.07422836, 0.038717438, -0.036180943, 0.024180451, 0.0047918214, -0.02854753, 0.023953123, -0.020339815, -0.07059112, -0.027422857, 0.00024097446, -0.08212499, -0.018018683, 0.06346022, -0.001512026, -0.0014694021, 0.031442963, -0.026752839, 0.03448197, 0.020100523, 0.0059015374, -0.05206993, 0.053888544, -0.006389095, 0.022768628, 0.086049385, 0.013543924, 0.07748273, 0.031538676, -0.0372099, -0.0017602914, -0.013747322, -0.008183785, 0.00042324763, 0.044532232, 0.0071847406, -0.05824366, 0.027733937, -0.02183539, -0.040559985, -0.0058207763, 0.0045585115, -0.029361121, 0.011797093, 0.04012926, 0.07260118, -0.03086866, 0.031323314, 0.030820802, -0.02240969, 0.020447496, 0.029528625, -0.07374977, -0.034051243, 0.05403212, 0.022541301, -0.07298404, 0.029815776, 0.0024901319, -0.044771522, 0.050012015, -0.014836101, -0.025891388, 0.025149584, -0.0063173072, -0.06255092, 0.030126855, 0.041373577, 0.015793268, -0.01262265, -0.06848536, -0.019968912, 0.05910511, 0.01917925, -0.0368031, 0.0029447866, 0.018628879, 0.05585074, -0.014429304, 0.04340756, -0.044747595, -0.010552775, 0.0086085275, 0.0053780866, 0.0015464242, -0.018844241, -0.054175697, 0.0040021576, -0.029337192, 0.011880845, -0.011916739, -0.036707383, -0.04003354, -0.022313973, -0.020052664, -0.017217055, 0.012766225, 0.04536975, 0.016678648, 0.025819601, 0.031897616, -0.010157943, -0.02790144, 0.046494424, -0.028595388, -0.018904064, 0.019119427, -0.038454216, 0.036779173, -0.0039722463, -0.03469733, 0.04929414, -0.033070147, 0.008692279, -0.026250327, -0.03175404, 0.008817908, 0.012114154, 0.0074060857, 0.015601834, 0.014118224, 0.02495815, -0.034051243, -0.024371885, 0.07260118, -0.037879914, -0.014680561, -0.035463065, -0.022900239, 0.04190002, 0.043287914, 0.0051866528, -0.0049234317, -0.04570476, 0.007376174, 0.0018948931, 0.03584593, 0.019645868, 0.026346043, -0.003368034, 0.003463751, 0.004929414, 0.01514718, 0.011198862, -0.00676598, -0.014058402, 0.031562608, -0.018904064, -0.020447496, -0.015733445, 0.0109894825, -0.0010805527, 0.029815776, 0.013184986, 0.06791105, -0.008698262, -0.01707348, 0.018700665, -0.024264203, -0.058387235, 0.007998333, 0.042976834, -0.056616474, -0.008070121, 0.04513046, 0.02522137, 0.016810259, 0.06326879, 0.028284308, -0.040847134, 0.04276147, 0.013926791, 0.0048666, 0.0013392871, 0.021919142, 0.021225195, -0.013627676, 0.02995935, -0.021560203, -0.04422115, -0.01082796, -0.0010999951, 0.0057250597, 0.048217326, 0.04268968, 0.05503715, -0.011462084, -0.016822224, -0.0010169907, -0.047044795, 0.04041641, -0.005165715, 0.005306299, -0.016331675, -0.056903623, -0.0194664, 0.052979235, 0.0074300147, 0.07738701, -0.07312762, -0.03560664, 0.06815035, 0.042976834, -0.051782776, -0.04182823, -0.008686298, -0.023833478, 0.020136418, 0.04575262, 0.06436953, -0.024982078, -0.05972727, -0.06264663, -0.11371153, 0.016547037, 0.01780332, 0.050538458, -0.017276878, -0.022002894, -0.024886362, 0.016487215, -0.08260358, -0.002654645, -0.0039722463, -0.011097164, -0.022601124, -0.09179239, 0.0072984044, -0.017564029, -0.011617624, -0.033907667, 0.003034521, -0.0043252017, 0.024503496, -0.022421654, 0.04067963, -0.028284308, 0.018006718, 0.032447986, 0.05340996, -0.029241476, 0.0014611764, 0.07312762, 0.039746393, 0.050059874, -0.0044598035, -0.0051208474, -0.027303211, -0.033979457, -0.036946677, -0.0064967764, 0.07676485, -0.031107953, 0.013484101, 0.035558783, -0.002404884, -0.025652096, -0.041756444, 0.012431216, 0.011803075, -0.012718366, -0.04630299, 0.03146689, -0.034314465, -0.016391499, -0.025891388, -0.014788242, 0.019526223, 0.011623606, -0.050825607, -0.003888494, -0.026752839, -0.016822224, 0.0009878271, -0.0005922476, -0.0014043446, 0.035271633, -0.009996421, 0.004932405, 0.025149584, 0.03242406, 0.0013863976, 0.030677227, -0.013675534, -0.0067420504, 0.060157996, 0.04072749, -0.02969613, 0.0008345306, 0.060062278, 0.035367347, -0.008787996, 0.009828917, -0.027207494, -0.04515439, 0.04099071, 0.005111874, -0.01616417, 0.0145250205, 0.07915778, 0.042282887, 0.010786084, 0.021404665, -0.009033271, 0.024599211, 0.038645647, 0.014118224, -0.020519285, 0.017109374, 0.0151830735, -0.01673847, 0.05728649, -0.047762673, -0.015577906, 0.05494143, -0.038143136, 0.02183539, -0.08159855, 0.011121093, 0.0073821563, -0.020447496, -0.061450172, 0.010845907, 0.059822984, 0.0072026877, -0.00010225992, -0.060157996, -0.022349868, -0.006287396, -0.009775076, 0.022290044, -0.004767892, -0.07695629, -0.0071368823, 0.04632692, -0.064560965, 0.01616417, -0.07628627, -0.0066283867, 0.010678403, -0.007633413, -0.0433597, 8.17425e-05, -0.094663896, -0.0007859245, 0.03385981, 0.011713341, 0.06293378, 0.013831074, 0.03201726, -0.071596146, -0.0072385813, -0.0068317847, 0.030964378, -0.007465909, 0.03055758, 0.005108883, -0.0026307157, 0.008973448, 0.020698752, 0.03857386, -0.031634394, -0.027470715, -0.029456839, 0.02318739, -0.017444383, -0.029935421, -0.03539128, 0.037497047, 0.02672891, -0.008345307, -0.024371885, -0.05637718, 0.031969402, 0.09140952, 0.00793851, -0.014967711, 0.023103638, -0.023689901, 0.064800255, 0.030796872, -0.012491039, -0.0011164465, 0.014812171, 0.015195038, -0.0052375025, 0.00817182, -0.023438646, -0.027207494, 0.04067963, -0.012861942, 0.02912183, 0.051208477, 0.05503715, 0.0510649, 0.009918651, 0.007878687, -0.02761429, -0.07666914, 0.04656621, -0.02134484, -0.046518352, -0.0141541185, -0.036898818, 0.012191924, -0.015673622, -0.026872486, -0.0009250129, 0.02212254, -0.008949518, 0.019789444, -0.008177802, 0.0018589993, -0.034338392, -0.007059112, -0.034888767, -0.014477163, -0.010935642, -0.013292667, 0.0029911492, -0.011988526, -0.0060839974, -0.0067001744, -0.023043813, 0.0058566704, 0.012514968, 0.023869371, 0.03682703, -0.009894722, -0.028332166, 0.0145250205, -0.022170398, 0.030342218, -0.008339324, 0.0033770076, -0.011713341, 0.025412804, 0.034314465, 0.017456347, -0.029169688, 0.057142917, -0.02646569, 0.026968202, -0.0031137865, 0.017061515, 0.036659524, -0.02165592, -0.0641781, -0.02225415, -0.024120627, -0.051878493, 0.019454435, -0.027327139, 0.07465909, 0.056807905, 0.019933019, -0.0744198, 0.0015808224, 0.011378332, -0.01277819, -0.034649473, 0.002176061, 0.042258956, 0.009990439, -0.007089024, -0.046494424, 0.04575262, 0.01259872, -0.046446566, -0.0499163, -0.06183304, -0.03299836, -0.020579107, 0.008219678, -0.01631971, 0.032782998, 0.015518082, -0.045393683, -0.062311623, -0.03596558, 0.0011530881, 0.0062335553, 0.033309437, 0.03620487, -0.011324491, 0.016523108, 0.022648983, -0.014297694, 0.0054319273, 0.024252238, 0.026393902, -0.024192415, -0.006033148, 0.008680315, -0.0049533434, -0.02404884, -0.027997157, 0.032543704, -0.037520975, 0.0017692648, 0.026393902, -0.07485052, -0.012682473, 0.008100032, -0.0024512468, -0.011809058, -0.0041816267, -0.03273514, 0.059440117, 0.01381911, 0.027087849, 0.035798073, -0.024527425, 0.08351289, -0.035128057, 0.023055779, -0.0095118545, -0.017743498, 0.019035675, 0.017432418, 0.010815996, -0.019921055, -0.012694438, -0.010265624, -0.0011231765, 0.0023226275, 0.00757359, -0.0082376255, 0.02435992, -0.031873688, 0.025006007, 0.018700665, 0.04307255, -0.015290755, 0.040871065, -0.031179741, -0.017815284, 0.03503234, 0.014860029, 0.032854784, -0.013759287, -0.03326158, 0.0049623167, 0.017922966, 0.06987324, -0.0068198205, 0.029313263, -0.020507319, 0.004393998, -0.033692304, 0.0070232186, -0.036276657, -0.010068209, -0.018210117, 0.01277819, -0.017300807, -0.028236449, -0.009254616, -0.031107953, 0.018521197, -0.009685341, 0.051495627, -0.017791355, -0.025771743, -0.015865056, -0.028021086, -0.03208905, -0.010062226, 0.014010543, -0.04369471, -0.011551819, -0.008273519, -0.046757646, -0.008692279, 0.011091181, -0.0060181925, -0.009691324, -0.032352272, 0.030078998, -0.0063651656, 0.02522137, 0.038717438, -0.045202248, -0.017336702, 0.036683455, 0.0522135, 0.012275676, 0.02285238, -0.024575282, 0.016307745, -0.020615, -0.0012989066, -0.031706184, -0.0074300147, -0.034912694, 0.045585115, 0.022361832, -0.0056263516, -0.0026815652, -0.03807135, -0.031538676, 0.013017482, 0.035534855, 0.0071787583, 0.044651877, 0.025053866, 0.013890897, -0.026848556, 0.029911492, -0.06963395, 0.0111151105, 0.01975355, -0.039913896, -0.020136418, -0.018461373, 0.014417339, -0.020184275, 0.033740163, 0.0019098488, 0.020902151, -0.018545125, -0.0084410235, -0.011246721, 0.010917695, -0.013627676, -0.02519744, -0.0034966534, -0.0379517, 0.023450611, 0.024814574, -0.011749234, 0.04285719, -0.011288597, -0.03625273, -0.028068945, -0.011330473, -0.037808128, 0.05910511, -0.025508521, 0.027566431, -0.052979235, -0.021045726, -0.033309437, 0.029002184, -0.02001677, 0.006849732, 0.015350578, 0.03886101, -0.016810259, 0.042043593, -0.042354673, 0.003906441, 0.0004367078, -0.0074300147, -0.022493443, 0.03333337, 0.03510413, -0.013137127, -0.02821252, 0.024371885, 0.03857386, 0.026585335, 0.048001964, -0.011444137, -0.02763822, 0.006825803, 0.0008031236, 0.00077470765, 0.0007563869, -0.029337192, -0.018676735, 0.0029133793, -0.013053375, -0.032519776, -0.034649473, 0.03503234, 0.018210117, 0.005943414, 0.0010087651, -0.02165592, -0.050825607, 0.05202207, 0.025699954, 0.010552775, -0.005270405, 0.070256114, -0.028260378, 0.014405375, 0.00033781293, 0.03211298, -0.0028296271, 0.003987202, -0.037616692, -0.00918881, 0.023283105, -0.013807145, -0.024036875, -0.03261549, -0.0062335553, -0.03417089, 0.008417094, 0.011372349, 0.0109894825, 0.01186888, 0.0044986885, -0.034051243, 0.028930396, 0.040751416, 0.014381446, -0.00096165447, 0.0002699512, 0.012287641, -0.050012015, -0.0022957071, -0.008303431, 0.0134960655, 0.025987105, -0.0016660702, -0.013783216, -0.018162258, -0.012114154, -0.012754261, -0.03089259, -0.05116062, 0.0120184375, 0.006149803, 0.056616474, -0.02207468, 0.060205854, 0.003164636, 0.027973227, -0.0055126883, -0.011222792, -0.034649473, 0.020447496, -0.06355594, -0.005324246, -0.010953588, 0.012036385, 0.0039034497, 0.039985683, 0.063603796, 0.0335248, 0.009547749, -0.0065386523, -0.03716204, 0.0065685636, -0.04807375, -0.037616692, -0.018234046, -0.0018859196, -0.0014866012, -0.002201486, 0.016905976, -0.035510924, 0.012682473, -0.013161057, 0.013077305, -0.07753059, -0.016259888, -0.022182362, -0.029672202, 0.0066164224, 0.030437935, 0.03261549, 0.02209861, -0.010361341, -0.00030528416, 0.014608773, 0.02360615, 0.0040769363, 0.02615461, -0.0049024937, -0.037568834, -0.02703999, -0.0060032364, -0.013448208, -0.0005466325, -0.0017303799, 0.019251037, -0.0122637125, -0.01061858, -0.012610685, 0.010451076, -0.016223993, 0.027494645, 0.049868442, -0.007567608, -0.023953123, -0.0033082112, 0.00994258, 0.016044525, 0.009882757, 0.018987816, -0.009326403, 0.008159855, -0.031897616, -0.048480548, -0.011743252, -0.0111151105, -0.014058402, -0.03438625, 0.045274034, 0.04268968, -0.05790865, 0.009936598, -0.019358719, -0.024024911, -0.03862172, -0.0039393436, -0.016307745, 0.0015105304, 0.014010543, 0.049677007, 0.025891388, -0.031586535, 0.009972491, -0.006359183, 0.01975355, 0.0035893791, -0.028786821, 0.0064608823, 0.019251037, 0.026250327, 0.043814354, -0.04718837, -0.008710227, -0.023019886, 0.0024452645, -0.03570236, -0.00845897, 0.04041641, 0.044962958, -0.022840416, -0.010965553, 0.022708805, -0.020291956, -0.048767697, 0.018784417, 0.0018889108, 0.016582932, 0.014740383, 0.040105328, -0.03213691, -0.015661657, 0.040847134, 0.018317798, -0.01067242, 0.010546792, 0.025006007, 0.009607571, 0.009051218, -0.01012205, -0.014596809, 0.0011224288, 0.018006718, -0.025604239, 0.041612867, -0.025795672, 0.034673404, 0.017240984, -0.034314465, 0.0091409525, 0.0053003165, 0.005485768, 0.013304632, 0.009625519, 0.02298399, 0.009051218, -0.03661167, 0.015948808, 0.020447496, -0.043981858, -0.009302475, -0.00564729, 0.01988516, -0.0041906, 0.011773163, 0.040894993, 0.014309658, 0.00061243784, 0.05254851, -0.051017042, 0.0012981588, 0.041421436, 0.0122338, 0.0017288843, -0.021404665, 0.017444383, -0.006149803, -0.027494645, -0.0066582984, -0.036946677, -0.019992841, 0.035510924, -0.038502075, 0.009392208, -0.00012927373, 0.044771522, -0.060110137, 0.027662149, -0.03675524, -0.0054827766, 0.023271142, 0.01928693, 0.014046437, 0.025652096, 0.028045015, -0.016307745, -0.007771006, 0.0898302, -0.0071967053, 0.011725306, -0.0014933313, -0.004729007], [0.013730884, -0.011162517, -0.021769376, 0.047712352, -0.000125505, 0.008748499, -0.031339012, 0.0397109, 0.018250221, 0.053293608, -0.03212928, 0.011495911, 0.0021269287, -0.022596687, 0.0337839, 0.024634095, -0.009896856, 0.029066997, -0.0272642, 0.013236967, 0.015854726, -0.026498629, -0.03763645, -0.011483563, 0.012613397, -0.001620664, -0.027906291, 0.024819313, 0.023720348, -0.0009183763, 0.058430344, 0.020608673, -0.009106589, -0.007748318, 0.023090605, 0.03810567, 0.0068222242, 0.0640116, -0.0308204, -0.0028523689, -0.014051929, -0.033882685, -0.0066061355, -0.041069172, -0.051367335, 0.008192843, -0.010792079, -0.04166187, -0.01642273, -0.06193715, -0.011971305, -0.0049576885, -0.020855632, -0.03148719, -0.0030283267, -0.02270782, 0.05773886, -0.0343766, 0.044378415, 0.005871434, -0.040081337, 0.033685118, 0.03738949, 0.0063128723, -0.009291807, -0.0038710719, 0.008044668, 0.0231153, 0.026918458, 0.075075336, -0.023819132, -0.0015056741, 0.014953327, 0.0031826755, 0.0043619014, -0.0403036, 0.0640116, 0.036895577, 0.025782451, -0.013545665, 0.021769376, -0.008199017, 0.016879601, -0.0072297053, 0.019213358, -0.007427272, 0.04640347, -0.11587285, -0.007877971, -0.0073346626, 0.030869791, 0.011298344, 0.026819676, 0.010415467, -0.06850624, 0.026943155, 0.010822949, -0.006958051, -0.028820038, -0.005945522, -0.0051212986, -0.017052474, -0.041810047, -0.06919773, -0.005633737, 0.04331649, 0.026597412, 0.031017967, -0.01848483, -0.012020697, 0.0048249485, -0.018324308, 0.026004713, 0.030128917, 0.011823131, 0.017867435, -0.017052474, -0.046551645, -0.018793529, -0.006420917, -0.071667306, -0.07117339, 0.026720893, 0.060652968, -0.0044298153, 0.018620659, -0.009588158, 0.049045924, -0.013261663, -0.03395677, -0.0021176678, -0.015718898, -0.015274373, 0.051910643, 0.061690193, -0.00073778804, 0.038723066, -0.05020663, -0.0053126914, 0.02525149, -0.032326847, 0.029215172, -0.01867005, 0.03311711, -0.009668419, -0.012681311, -0.007581621, -0.028820038, -0.046329383, 0.01831196, -0.03331468, -0.041464306, -0.015508983, -0.0022519513, 0.01458289, 0.011724347, 0.015743595, 0.029956046, 0.0064023947, 0.025066271, 0.035932437, -0.086435415, -0.02815325, 0.04025421, 0.031635363, -0.04067404, 0.06623422, -0.03687088, -0.04902123, 0.032079887, -0.02186816, -0.006507352, 0.04926819, -0.0002035477, -0.036525138, -0.03111675, 0.034524776, 0.050404195, -0.023386955, -0.08322496, -0.04084691, 0.0444772, 0.04961393, 0.0042754663, -0.021139633, 0.045020506, 0.040031947, 0.028894125, 0.003707462, -0.046502255, 0.01754639, -0.0012718354, -0.03704375, 0.013076444, -0.03783402, -0.03484582, -0.014780456, -0.0521576, -0.0046582515, 0.025634276, -0.019781362, -0.02205338, 0.060949318, 0.025708362, -0.024634095, 0.00022322718, 0.020188844, 0.017620478, -0.010915559, -0.011582346, 0.013360446, 0.015805334, 0.004303249, -0.04884836, 0.012514614, 0.025412014, -0.085694544, -0.010662426, -0.036475748, -0.022609036, 0.065345176, -0.039735597, 0.020719804, -0.0063344813, -0.012292352, 0.016101684, 0.022139816, 0.027511159, 0.022991821, 0.029783176, -0.00655057, -0.0021006893, -0.032376237, 0.0036796792, -0.058825474, 0.015632464, -0.0069086594, -0.021127285, 0.044995807, 0.01890466, 0.018262569, 0.02027528, -0.05724494, -0.011569998, 0.026943155, 0.057837643, 0.01926275, -0.013953146, -0.01327401, -0.00773597, 0.019546753, 0.014632282, 0.0012062371, 0.037019055, 0.022893038, 0.08608968, 0.041044477, -0.024621746, -0.031388406, 0.0038093324, -0.03768584, 0.05536806, -0.039982554, 0.017608128, 0.007871797, -0.0077544916, 0.027782813, -0.06648119, -0.06771597, 0.023374606, 0.024646442, -0.04588486, 0.030919183, 0.047292523, 0.016286902, -0.0052077337, 0.06499943, 0.043365885, -0.028721254, 0.04467476, -0.006112219, 0.023263475, -0.0126936585, 0.002969674, -0.00044298152, 0.0006150806, -0.036722705, -0.009977117, -0.06159141, -0.010415467, -0.034179036, -0.048996534, 0.047811136, -0.018176133, 0.054429617, 0.04551442, 0.010557469, 0.01547194, -0.009180676, 0.016286902, -0.021917552, -0.055466842, -0.017694565, -0.007100052, -0.003701288, 0.057936426, 0.018447788, 0.053343, 0.025782451, -0.04855201, 0.046255298, -0.049885582, -0.03783402, -0.019163966, -0.007871797, 0.0047416002, 0.01937388, 0.020534586, 0.06554274, -0.035512608, 0.007260575, -0.022497904, -0.11123004, -0.013669144, 0.0462306, -0.006661701, -0.0040470297, -0.070926435, -0.03822915, 0.014298888, -0.07117339, -0.02933865, -0.009322677, 0.014138365, -0.04583547, -0.118540004, -0.0012193568, -0.054627184, 0.016743775, -0.05025602, -0.0012664333, -0.021596506, -0.04995967, -0.04758887, -0.023646262, -0.029684393, 0.016225163, 0.02216451, 0.0064456128, -0.008649716, 0.001518022, 0.019176316, 0.027906291, 0.008606498, 0.010717992, 0.034993995, -0.041513696, -0.013409838, -0.005247865, 0.023794435, 0.06964225, -0.060899924, 0.034747038, 0.089892834, 0.020522239, -0.0065567438, -0.07680404, -0.041340824, 0.019929538, 0.003272198, -0.05102159, 0.03146249, -0.036179397, 0.0019756667, -0.010946428, -0.025387317, 0.044304326, -0.005210821, -0.0260788, 0.02288069, -0.013520969, -0.06218411, -0.002319865, 0.039340463, 0.017929176, -0.009007805, -0.035784263, 0.02573306, 0.0020837109, -0.023448694, 0.014903936, 0.026251672, -0.014533498, -0.0016607948, 0.03504339, 0.039587423, -0.027362984, 0.03788341, 0.022831298, -0.0006293579, -0.018879965, 0.03657453, 0.0042476836, -0.014768109, 0.0031765017, -0.048873056, 0.005297256, -0.008501541, -0.00023711858, 0.045193374, -0.036228787, -0.036179397, -0.031166142, 0.039340463, 0.010545121, 0.031141447, -0.0015326851, 0.026301064, -0.028202642, 0.02679498, 0.0068592676, -0.0055534756, -0.01937388, 0.016966037, -0.05304665, 0.04304484, -0.02038641, 0.029980741, -0.027412375, -0.025226794, 0.043538753, -0.019349186, -0.04309423, -0.023263475, 0.0030808053, -0.03205519, 0.008260757, -0.02186816, -0.014619933, 0.057985816, -0.01161939, -0.023016516, 0.0029557827, 0.016817862, -0.06988921, -0.027461767, -0.084805496, -0.030351179, 0.03450008, -0.017101865, -0.0491941, -0.002026602, -0.062579244, -0.017706912, -0.001254857, 0.012656615, 0.0066431793, 0.00036657878, 0.016706731, -0.07892788, 0.010866167, -0.011520606, 0.08658359, 0.02091737, 0.06969164, -0.008341018, -0.035216257, 0.055763192, 0.010261119, 0.010063552, -0.005760303, -0.009711636, -0.043711625, 0.041143257, 0.038970027, -0.0509722, -0.043711625, 0.012514614, 0.0004163563, -0.02869656, -0.039809685, 0.005676955, 0.015150894, 0.044971112, 0.022275642, -0.0048126006, 0.012434352, 0.0055442145, 0.066135444, -0.010322859, -0.026498629, 0.021053199, -0.020312322, 0.017447606, 0.012082437, -0.062628634, -0.008050842, -0.009884507, -0.0028708908, -0.015101503, 0.0010210184, 0.066728145, 0.029388042, 0.026004713, -0.024708182, 0.012940617, -0.035784263, -0.022448514, 0.038970027, 0.030351179, -0.031092055, -0.015669506, -0.010390772, 0.021608854, -0.00018946335, -0.026054105, 0.008013798, 6.665946e-05, -0.013743231, 0.02276956, -0.014237148, -0.036302876, -0.059714526, -0.02525149, -0.039142895, -0.0060196095, -0.02205338, 0.0057016504, -0.0013420642, -0.038303237, -0.025856538, -0.013792623, 0.0033555464, -0.014163061, 0.020139452, -0.026350455, 0.023658609, -0.011471215, -0.017274735, -0.009446156, -0.058479734, 0.03531504, 0.0036086787, 0.019682579, -0.026004713, 0.05838095, 0.06707388, -0.022115119, -0.0022179945, 0.012496091, -0.009532592, 0.061788976, 0.03632757, 0.014731064, 0.013212271, -0.032079887, -0.049712714, -0.06015905, -0.014484107, -0.006982747, 0.026523326, -0.005917739, 0.07201305, 0.02394261, -0.020423455, -0.057837643, 0.03282076, 0.0069024856, -0.010847645, 0.034870517, -0.022855993, 0.056504067, -0.018633006, -0.009952421, 0.0049823844, 0.05245395, 0.012335569, -0.04077282, 0.009446156, -0.011285996, -0.057343725, 0.014681673, 0.008143451, -0.061443236, -0.01795387, 0.023621565, -0.017459955, -0.045909554, -0.03432721, -0.017805696, -0.00302987, 0.031585973, -0.010977298, -0.014212452, -0.013076444, 0.0032197193, 0.03331468, 0.00056993356, -0.015965857, 0.035117477, -0.0023846915, -0.023090605, 0.015076807, 0.008933717, 0.0073099667, 0.0022967125, 0.0031950234, -0.049860887, -0.0051367334, -0.0070877043, -0.052206993, -0.0015257394, 0.034722343, -0.028968213, 0.03077101, -0.02104085, 0.003722897, 0.051713075, 0.028202642, 0.042773183, 0.036352266, 0.038155064, 0.068950765, -0.04084691, 0.03704375, 0.030005438, -0.0125825275, 0.004769383, -0.0024155611, -0.032228064, -0.00049584603, -0.010452512, 0.011576172, -0.020201191, 0.0061307405, -0.019472664, 0.041489, 0.024029046, 0.018719442, -0.021139633, -0.0011329213, 0.023547478, 0.025881235, 0.11686069, -0.025239142, -0.03311711, 0.029857263, -0.009118937, 0.048823662, -0.038500804, -0.012854181, 0.033932075, 0.007161792, 0.05003376, 0.014854544, -0.019398578, 0.0111439945, 0.012940617, -0.042353354, 0.02483166, -0.036525138, -0.042575616, 0.043020144, -0.009088066, 0.0111439945, 0.0018876878, -0.031363707, -0.03775993, -0.005927, 0.002648628, 0.07334662, -0.045069896, -0.039142895, -0.023263475, -0.005596693, -0.038797155, -0.009798072, 0.020127105, 0.013051748, -0.023139996, -0.036846183, -0.052947868, -0.015175589, 0.017978568, 0.023152344, -0.0069642253, -0.06154202, 0.02269547, -0.03395677, -0.0106686, 0.026004713, -0.0669751, -0.009964769, 0.04452659, 0.023695653, -0.023535129, 0.009563462, -0.06569092, 0.03170945, 0.009841289, -0.034006163, 0.0071432698, -0.040155426, -0.032030497, 0.03064753, 0.019065185, -0.018707095, 0.007130922, -0.047020867, -0.030548746, 0.029635001, -0.006371525, 0.013323402, 0.07635952, 0.0065011783, 0.025757754, -0.028005075, -0.017879784, -0.042402748, 0.033759203, 0.008408931, 0.028597776, 0.010841471, -0.022893038, 0.018954052, -0.0349693, 0.027930988, 0.014940979, 0.02423896, -0.01076121, 0.059912093, -0.027214808, 0.0033987642, -0.009069545, 0.0037938973, 0.010989646, -0.020830935, 0.0142865395, 0.01090321, 0.016039943, 0.03687088, -0.0096622445, -0.033512246, -0.053293608, -0.0075260554, -0.014916283, 0.041439608, -0.032573804, -0.00951407, -0.014978023, 0.023843827, -0.02756055, -0.0207445, -0.028227339, -0.024683487, 0.044007976, -0.0065937876, 0.015718898, 0.0009276373, -0.028573079, 0.005494823, 0.029215172, 0.0010387686, -0.013483925, 0.022115119, -0.003861811, -0.023868524, -0.030548746, 0.02091737, 0.028350817, 0.020682761, 0.042303964, 0.0047045564, -0.04131613, -0.01902814, -0.017768653, 0.021510072, 0.0031857626, -0.008587976, 0.0022488644, -0.019781362, -0.011539129, -0.0025652798, -0.030203005, 0.062529854, -0.006803702, -0.039562725, -0.018682398, 0.0325985, -0.021942249, 0.0037969844, 0.036475748, 0.008161973, 0.007847101, 0.03538913, 0.0067234407, -0.0056121284, -0.026103497, 0.03148719, -0.025807146, 0.021065546, -0.053639352, 0.00024309961, 0.04766296, -0.014484107, 0.012965312, -0.0035284173, -0.025930624, -0.057985816, 0.028177947, 0.028770646, 0.006834572, 0.00012135687, -0.006359177, 0.014780456, 0.01689195, 0.00398529, 0.007989102, -0.022423817, 0.043020144, -0.006096784, -0.03847611, 0.020225888, -0.03746358, 0.014990371, 0.048206266, -0.008495367, -0.0020188843, 0.021979293, -0.031511884, -0.019670231, -0.019522056, -0.037537668, 0.010298163, 0.0066061355, 0.05176247, -0.05897365, 0.0486014, 0.017632825, -0.006674049, -0.033289984, -0.008878152, -0.032153975, -0.0044082063, -0.022868343, 0.005368257, 0.023325214, 0.005525693, 0.014619933, 0.043439973, 0.05596076, 0.0008303974, 0.011835478, 0.026943155, -0.023930263, -0.0003517227, -0.039686203, 0.013940798, -0.00014981496, 0.04262501, 0.060702357, 0.02110259, 0.022399122, -0.03976029, 0.010662426, -0.01004503, -0.04558851, -0.05981331, -0.050009064, 0.0032968938, -0.02620228, -0.010446338, 0.020164149, 0.018756486, 0.009680767, 0.0002953853, 0.02050989, -0.014706369, -0.038327932, -0.009112762, 0.00053559087, -0.006408569, -0.09088067, -0.004948428, -0.022423817, -0.01884292, 0.002014254, -0.013199924, 0.0066061355, 0.024053741, 0.016558556, -0.014249496, 0.03284546, -0.011304518, 0.00054755295, 0.019534405, -0.010575991, -0.02743707, -0.034821127, 0.002301343, -0.0054392572, 0.018867617, 0.007390228, -0.01689195, 0.04872488, 0.005192299, 0.02679498, 0.049120013, 0.013718535, -0.009199198, -0.023448694, 0.0095511135, 0.025152707, -0.033635724, 0.022559645, -0.015336113, -0.0014107495, -0.006562918, -0.004914471, -0.008439801, -0.0032228064, 0.0070012687, 0.037266012, 0.02654802, -0.027214808, 0.02288069, -0.004337206, 0.017620478, 0.031511884, 0.00026451552, -0.017645173, 0.024140177, 0.008976935, -0.019781362, -0.0042291614, -0.0025668233, 0.010792079, 0.00019814548, -0.045736685, -0.009588158, 0.046304688, 0.050157238, -0.02423896, 0.021114938, -0.013434534, -0.0171883, -0.009310329, 0.02186816, 0.011174865, -0.00025930625, -0.02099146, 0.030474659, -0.020262932, 0.0006779778, -0.05045359, -0.037068445, 0.0067543103, 0.01224296, 0.008717629, 0.016015248, -0.0029094778, -0.029215172, 0.01274305, -0.002168603, 0.008341018, -0.008439801, 0.027288897, -0.02662211, 0.013520969, 0.04665043, -0.044501893, -0.015928812, 0.027609942, -0.0009561918, 0.041069172, 0.006072088, 1.8425408e-05, -0.0021361897, -0.06983982, 0.0019447969, 0.022497904, -0.04452659, -0.0052663865, -0.004114943, 0.005031776, -0.04309423, -0.025609579, 0.002755129, 0.0046736863, -0.0149286315, 0.033512246, -0.06840746, -0.0084212795, 0.032746676, 0.014619933, 0.0011560738, 0.02696785, 0.008513888, 0.032153975, 0.011100777, 0.026523326, 0.001336662, -0.0610481, 0.0075507513, -0.041884135, 0.032746676, 0.00385255, -0.023992002, -0.046971474, -0.0010943342, 0.026745588, -8.018911e-07, -0.043365885, -0.012990008, 0.025955321, 0.012063915, 0.017496997, 0.006970399, -0.012273829, 0.07621134, 0.017743956, -0.01884292, 0.056800418, -0.004948428], [-0.022775114, -0.045125846, -0.026358774, 0.022586498, -0.024354752, 0.032182224, -0.047412787, 0.028928638, -0.026901038, 0.030366817, 0.003297794, -0.009318699, -0.025227092, -0.026500234, -0.010314816, -0.0034510426, -0.06667497, -0.012307049, 0.00028807807, -0.018649187, -0.002432823, -0.03307814, -0.04585672, 0.006630953, 0.05493376, 0.007426667, 0.012625334, 0.010827609, -0.0048509105, 0.0023724076, 0.03553012, 0.0022397884, 0.019757293, 0.019309334, 0.045691684, -0.018012615, 0.007898201, 0.031003388, -0.0071909, 0.0014138665, -0.023953948, -0.0013711337, -0.007102487, -0.012000551, -0.004441265, -0.00049179565, 0.027773378, 0.03725122, 0.00408172, -0.010609524, 0.022727959, -0.010692043, -0.02127799, -0.048803814, -0.011145895, 0.05861173, 0.03357325, -0.08119823, 0.057008512, -0.043121822, -0.07162608, -0.02271617, -0.003563032, -0.012601757, -0.034469165, 0.004181921, -0.015407387, 0.02451979, 0.020228827, 0.026405929, -0.026005123, 0.0053430744, 0.016008593, 0.020523535, 0.0005186879, -0.044984385, 0.0657319, -0.007255736, -0.04062269, -0.010874763, 0.01920324, -0.06205393, -0.012424932, -0.016161842, 0.02149018, -0.0379821, 0.035223622, -0.10232297, -0.027773378, 0.0069138734, 0.03574231, -0.0022839948, 0.044489272, 0.0065602227, -0.060450714, 0.035317928, 0.000816344, -0.009189027, -0.03784064, 0.004290963, -0.01359198, -0.017364256, -0.06247831, -0.06992856, -0.002219159, 0.016138265, 0.037369102, -0.00470945, 0.021195473, 0.03147492, 0.036119536, -0.0352472, 0.00061815215, -0.01366271, 0.0023665135, -0.045172997, -0.019167874, -0.048379432, -0.039302394, 0.002516815, -0.10232297, -0.012967196, 0.05285901, 0.06780665, 0.0060533234, -0.008976837, -0.029282289, 0.015725672, 0.0070435456, -0.0151951965, -0.028315643, 0.012978985, 0.054179307, -0.006348032, 0.055028066, -0.02257471, 0.036496766, -0.024331177, -0.056867052, -0.0063539264, -0.03840648, -0.021006858, -0.025651474, 0.033101715, -0.05328339, 0.0017402568, -0.0386894, -0.026759578, -0.056489825, -0.006206572, -0.0071850056, -0.024826288, -0.0033390531, -0.002303151, 0.04321613, -0.027773378, 0.019356487, 0.017753271, -0.008481725, -0.012990774, 0.020004848, -0.043994162, 0.02250398, 0.019780869, -0.026429504, -0.04234379, 0.009684138, 0.01927397, -0.013886689, 0.045267306, -0.00065057015, -0.028504256, 0.0042526512, 0.0046888203, -0.04434781, 0.044607155, 0.022032445, -0.0005470536, 0.0044235825, -0.08643226, -0.030673314, 0.033172447, 0.087894015, -0.046351835, 0.03963247, 0.047059137, 0.0243076, 0.025981547, 0.046493296, -0.038948745, -0.019356487, -0.0067134714, -0.056914207, -0.012978985, 0.0118001485, -0.010379652, -0.033856172, -0.056489825, 0.031144848, 0.012483874, 0.008045556, -0.050501335, -0.003692704, -0.007114276, -0.01769433, 0.014711874, 0.039113782, 0.016208995, 0.018425208, -0.01991054, 0.04738921, -0.015525271, -0.008045556, -0.0314985, -0.0076919054, 0.0054668523, -0.036355305, 0.020158097, 6.391502e-05, -0.020947916, 0.058706038, 0.023282012, 0.048190817, -0.037722755, -0.014028149, 0.02588724, 0.015065525, 0.00034996695, 0.023175918, 0.018955683, 0.013497673, -0.026971769, -0.0014256549, 0.010079049, -0.07709588, -0.02574578, -0.051302947, -0.008499408, 0.040646266, 0.017776847, 0.030649738, 0.021195473, -0.031592805, -0.021631641, 0.015489906, 0.027844109, -0.0066840006, 0.021089377, -0.024849864, -0.03013105, 0.024991324, -0.012212741, 0.026877463, 0.031168425, -0.011935716, 0.05040703, -0.0008126601, -0.06841964, -0.0003621237, -0.008929683, -0.018095134, 0.04889812, -0.010285345, 0.10477495, -0.033030987, -0.038524363, 0.039373126, -0.031380616, -0.09194921, 0.022527557, 0.04479577, -0.043499053, -0.009914012, 0.040316194, 0.041872256, -0.046917677, 0.048214395, 0.030036744, -0.026665272, 0.035412237, 0.0066132704, 0.034893546, 0.04149503, 0.03465778, 0.052764703, -0.023812488, -0.008982731, -0.025533589, -0.056914207, -0.013863112, -0.005092572, 0.0032064342, 0.03826502, 0.013285482, 0.04717702, 0.02071215, 0.013250117, 0.017576445, -0.059649106, 0.018814223, 0.03402121, -0.0020334923, 0.01899105, -0.06205393, -0.011752996, 0.03286595, 0.01840163, 0.10873584, -0.041164957, -0.008145757, 0.06969279, -0.004965847, -0.033101715, -0.020052, 0.041801527, -0.02753761, 0.016975239, 0.02294015, 0.051114332, -0.021077588, -0.060497865, -0.014499684, -0.07761457, 0.006020905, 0.019144299, 0.008546561, -0.019757293, -0.017352467, -0.024425482, -0.008328477, -0.03781706, -0.011022117, -0.0007522448, -0.0026906934, -0.026335198, -0.117034845, -0.022162117, -0.044135623, 0.06280839, -0.0151951965, -0.044277083, 0.032748066, 0.018602032, -0.022185694, 0.011570276, -0.017989038, -0.024826288, -0.03543581, 0.043381166, -0.018790647, 0.0013114552, 0.06304415, 0.054886606, 0.03809998, -0.014759027, -0.03637888, -0.014747239, -0.030154627, -0.0060415347, 0.027514033, 0.06705219, -0.04507869, 0.024566943, 0.048214395, -0.0025403916, -0.04875666, -0.036426034, -0.013521249, -0.043970585, 0.031875726, -0.022539346, -0.039561737, -0.012472086, 0.017717905, -0.061393782, -0.032252956, 0.054037847, -0.0034834605, -0.03293668, -0.0050631007, -0.014971218, -0.038665824, -0.014370011, 0.017776847, 0.040528383, 0.009660562, -0.030720469, 0.021737738, 0.041542184, -0.054603685, 0.024166139, 0.009047567, -0.02057069, -0.023140552, 0.028810753, 0.053236235, -0.030508278, 0.023069821, -0.020287769, -0.01776506, 0.030579008, -0.035459388, -0.018236594, -0.0075799157, 0.027018923, 0.0038105876, -0.008841271, -0.010638995, 0.004641667, 0.026830308, -0.0022000028, 0.034917124, -0.029423747, 0.0678538, 0.016550858, 0.07016432, -0.006530752, 0.035836615, -0.008422784, 0.014181398, 0.006182995, -0.026288044, 0.009967059, 0.05285901, 0.00044058997, 0.08053808, -0.049746882, 0.016857356, 0.01797725, -0.03652034, -0.013403366, 0.00036801788, -0.0071732174, 0.0057615614, -0.04371124, -0.052764703, -0.04359336, -0.003171069, 0.011652795, 0.04731848, 0.036708955, -0.03270091, 0.022138542, 0.011587959, -0.047483515, -0.003138651, -0.05328339, 0.042108025, 0.014358223, -0.022209272, -0.004055196, 0.0077331644, -0.052717548, -0.041683644, 0.05766866, -0.023411684, 0.011546699, 0.026830308, -0.01092781, -0.09213783, 0.014605779, 0.031734265, 0.05601829, -0.01854309, 0.017081335, -0.01168816, 0.007285207, 0.039208088, 0.0029559315, 0.017824002, -0.022881208, -0.021148318, -0.0468941, 0.010303027, -0.01146418, -0.033455368, -0.049511116, -0.015985018, 0.051727325, -0.047931474, -0.009872752, -0.066627815, 0.039302394, 0.0074325614, 0.055263836, -0.043616936, 0.02200887, -0.004408847, 0.04694125, 0.020971494, -0.022822266, 0.008464043, 0.03006032, -0.014016361, -0.008581926, -0.013167599, -0.04738921, -0.0684668, 0.0064659156, -0.0014234446, 0.0032889526, 0.029918859, 0.032889526, 0.0012672488, -0.0061417357, -0.009713609, -0.013191176, -0.020900764, -0.008522985, -0.042579558, 0.028079875, -0.014181398, -0.022032445, 0.0007102487, -0.025297822, -0.01783579, -0.012531027, 0.020016637, 0.03437486, 0.0047890213, 0.00073419383, -0.008045556, -0.08195268, -0.027301842, -0.010485747, -0.0027348998, 0.041872256, -0.0007404564, 0.002205897, -0.026901038, 0.0035689261, -0.0020659103, -0.022751536, 0.021890985, -0.010827609, -0.02193814, 0.03055543, 0.0369683, -0.04580957, 0.070447244, -0.013026139, 0.02904652, -0.010303027, -0.014983007, -0.015148044, 0.034775663, 0.010721514, 0.019108932, -0.019462584, 0.041377146, -0.047129866, 0.04809651, -0.011929821, 0.028409949, -0.010420911, -0.039208088, -0.012648911, -0.046634756, 0.0031799104, 0.0024151404, 0.005493376, 0.030673314, 0.07370083, 0.01969835, -0.00026800102, -0.031545654, 0.0441592, -0.002478503, -0.015572424, -0.024944171, 0.024755558, 0.057574354, 0.013898477, -0.03237084, -0.05314193, 0.052811857, -0.0091241915, -0.026217313, 0.009607514, -0.030720469, -0.014181398, -0.0014698613, -0.01236599, -0.029942436, 0.03812356, 0.00068040943, -0.032394417, -0.052528936, -0.015348446, 0.025981547, -0.023199493, 0.019875176, 0.031970035, -0.018095134, -0.022209272, 0.0060415347, -0.0025757567, 0.027702648, 0.012967196, 0.015265927, -0.024920594, -0.0260287, 0.016810203, -0.0070789107, -0.06276123, -0.001227463, 0.050501335, -0.03171069, 0.028197758, 0.014888699, -0.06587336, -0.017529292, 0.061535243, -0.014193187, 0.005172143, -0.021549122, -0.0076624346, 0.062384006, 0.021537336, 0.028645717, 0.03718049, -0.011163577, 0.0547923, -0.01790652, 0.03241799, -0.0028675187, -0.018932108, -0.005089625, 0.0027864738, -0.0048568044, -0.032347262, 0.0029131987, 0.010308921, -0.029329441, -0.021985292, 0.014157821, 0.0035983971, 0.023564933, -0.012142012, 0.019497948, 0.033997633, 0.017152065, -0.00035788727, 0.0025315504, -0.029140828, 0.0035512436, 0.044819348, -0.0045031537, 0.056819897, 0.0032270637, -0.010238191, 0.019497948, 0.0018198282, 0.049558267, 0.0067252596, -0.038878012, -0.025392128, 0.02588724, -0.03486997, 0.009247969, -0.022963727, -0.009778446, 0.009678244, 0.019179663, -0.004865646, -0.016869145, -0.024236869, -0.038524363, 0.01359198, 0.0188378, 0.06177101, -0.037604872, -0.04960542, -0.006236043, -0.037769906, -0.014865123, 0.021690583, 0.09152483, -0.026948193, -0.02034671, -0.042037293, -0.01380417, -0.01962762, -0.016928086, -0.005077836, -0.010650784, -0.008352053, 0.014157821, -0.035129316, -0.0062890905, -0.00559063, -0.06257262, -0.009548572, 0.08987446, -0.00204086, -0.009902223, 0.017658964, -0.04738921, 0.011747101, 0.0033449472, -0.009159557, -0.0012142011, -0.04156576, -0.057574354, 0.014169609, 0.0031651747, -0.0017770954, 0.0032535875, -0.03680326, -0.04177795, 0.026075853, 0.026358774, -0.01024998, 0.03163996, 0.040952764, 0.006182995, -0.030437548, 0.007055334, -0.048285127, -0.0017903573, -0.0009578043, -0.009424794, -0.01024998, -0.020523535, 0.013533038, -0.06889118, 0.034186244, -0.011694054, 0.047342055, -0.01017925, 0.018967472, -0.027867684, -0.015336657, -0.0068608257, -0.0044589476, -0.03560085, 0.017340679, 0.0057939794, 0.032441568, 0.029588785, 0.027749801, 0.002960352, -0.03784064, -0.053236235, 0.015041948, -0.01790652, 0.022468615, 0.011593853, 0.009342276, 0.021914562, -0.01755287, -0.021879198, 0.020888975, -0.051397253, 0.015383811, 0.039113782, 0.0034893549, -0.0076977997, 0.000494006, -0.046186797, -0.033620406, -0.016515493, 0.003203487, -0.01718743, 0.014051726, -0.00259786, 0.022173906, -0.03458705, 0.030036744, -0.0061947834, 0.006383397, 0.086620875, -0.033761866, 0.0014087091, 0.028645717, -0.00069109263, 0.009542678, -0.011953398, -0.025344975, 0.014039937, 0.02200887, -0.0061653126, 0.011387557, -0.014016361, 0.03284237, 0.009825598, 0.014865123, 0.002264839, -0.01006726, -0.0008472884, 0.035930924, 0.038571514, 0.012766794, 0.0071201697, 0.03718049, -0.0036809156, 0.0155134825, -0.023435261, 0.0070730164, 0.00862908, -0.041825105, -0.025462858, -0.031828575, 0.027348997, 0.011299144, -0.027844109, -0.029942436, -0.027160384, -0.035695154, 0.026924616, -0.012200953, 0.036001652, 0.006448233, 0.060592175, 0.0050631007, 0.06040356, 0.016668743, 0.0026582754, 0.003760487, 0.018354477, -0.015159831, -0.0033537885, 0.018342689, -0.02337632, 0.032394417, 0.05931903, 0.011741207, -0.03949101, -0.052010246, -0.02890506, -0.028197758, -0.044607155, -0.013450519, -0.0020143362, 0.00542854, 0.021160107, -0.03675611, 0.048709504, 0.00869981, -0.0035070372, 0.015419176, 0.00031239155, 0.001234094, 0.003692704, -0.07233338, 0.018366266, -0.009029884, -0.0008023453, -0.027207537, -0.009218498, 0.051114332, -0.0010189564, 0.004641667, 0.00075740216, -0.028999368, -0.0145939905, -0.0602621, 0.0118001485, -0.008440467, 0.03406836, 0.029753823, -0.00065278047, -0.010167461, -0.00995527, 0.0023311484, 0.0076270695, -0.039561737, -0.054084998, -0.006707577, -0.058941804, -0.022904785, -0.005649572, 0.013061504, 0.010438593, 0.035978075, -0.041212108, 0.028386373, -0.024130775, 0.03364398, 0.012896466, 0.009183133, 0.006902085, -0.029164404, -0.023541356, 0.036567494, -0.035860192, 0.031852152, 0.008599609, -0.00927744, 0.03406836, -0.014971218, 0.024849864, -0.029282289, 0.00874107, 0.022551134, 0.035789464, 0.010291239, -0.018024404, 0.015478117, 0.017505715, 0.02271617, -0.013309059, 0.024991324, 0.019462584, 0.041306417, -0.01748214, -0.014370011, -0.016633376, 0.031522077, -0.04566811, -0.040151156, 0.041306417, 0.04646972, -0.029848129, 0.007285207, -0.021667007, -0.03206434, 0.011935716, 0.01976908, -0.023164129, 0.016550858, 0.020995071, 0.021124743, 0.03630815, -0.036426034, -0.014087091, 0.0019244499, 0.0005610523, 0.033549674, -0.0072675245, 0.029470902, 0.006348032, 0.043899857, 0.0050837304, -0.026830308, -0.036001652, -0.010344286, 0.0032152755, -0.039726775, -0.011216626, -0.006206572, 0.062384006, 0.012531027, -0.019710138, 0.022433251, -0.061535243, -0.035176467, 0.0023989314, -0.0010874763, 0.00408172, -0.020122731, 0.013780594, -0.021230837, -0.0015133308, -0.011794255, -0.016739473, 0.0034923018, 0.0014499683, 0.004977635, 0.024048256, 0.031215578, -0.009118297, 0.008316688, -0.0047212383, -0.0040050955, 0.0054550637, 0.028574986, -0.007815683, 0.023918584, 0.02178489, -0.039891813, -0.008564244, 0.015607789, -0.0037811166, -0.02250398, 0.015867133, -0.0029264605, 0.018319113, -0.036331728, 0.005316551, 0.016869145, -0.024566943, 0.008652656, -0.027372573, 0.00093791145, -0.0020776985, -0.00013768437, 0.034422014, 0.027891262, -0.03006032, 0.033266753, -0.040787727, 0.014134244, 0.049699727, 0.004211392, 0.004936376, 0.03876013, 0.017753271, 0.013603768, -0.022845842, 0.0018743493, -0.043475475, -0.014464319, 0.03781706, -0.07719018, 0.041589335, 0.03142777, 0.0007993982, -0.043970585, -0.01976908, 0.01783579, -0.009613408, -1.8016392e-05, -0.049086735, -0.011776572, 0.054084998, 0.04005685, -0.04012758, 0.013674499, 0.12957767, -0.028527834, -0.032960255, 0.038241442, -0.004777233], [-0.020327397, 0.0102389855, -0.023778036, 0.04421836, 0.04073008, 0.03350256, -0.025434341, 0.018533066, -0.02815721, 0.028282687, 0.011820005, -0.003296928, 0.0085262135, -0.006719334, -0.007221245, 0.025108099, -0.052098367, 0.0133382855, -0.028383069, -0.03295046, -0.016826568, -0.049513523, -0.06745684, -0.013099878, 0.0046614986, 0.009944112, 0.0036106226, 0.009950386, -0.0035008295, 0.011625514, 0.049839765, 0.009247711, 0.03628817, -0.00818115, 0.003466323, -0.03538473, 0.014956949, 0.016575612, -0.031971734, -0.00806822, -0.041784093, 0.016061153, -0.0024421108, -0.041156705, -0.0020358767, 0.005935098, -0.03756804, 0.018608352, 0.014492681, -0.020227015, 0.034656957, -0.038571864, 0.009605322, -0.036012117, -0.010188794, 0.0205909, 0.030491095, -0.10233966, 0.048484605, -0.011713349, -0.04040384, -0.009693157, 0.010753444, -0.018470326, -0.020892046, -0.014643255, -0.017704912, 0.030240139, 0.004197231, 0.014467586, -0.018043702, 0.012152521, -0.006606404, -0.018369945, 0.009586501, -0.06344155, 0.08883826, 0.026199756, -0.020615995, -0.013012043, 0.037091225, -0.050216198, -0.01500714, -0.026827145, 0.02483205, -0.041056324, 0.035736065, -0.097621694, 0.0019684325, 0.032297976, 0.020465422, -0.03751785, 0.03232307, 0.023627462, -0.06098219, 0.001930789, -0.005928824, 0.0116631575, -0.0023417287, -0.00916615, 0.00576884, -0.018758925, -0.06424461, -0.049613904, 0.015496504, 0.024907336, 0.030440904, -0.008739525, -0.0017927635, 0.115640305, 0.019210644, -0.02307536, -0.030139757, -0.028859885, -0.04050422, -0.005878633, -0.006719334, -0.04263734, -0.0096680615, 0.0089716595, -0.101135075, -0.025095552, 0.07132156, 0.03864715, -0.013827649, 0.0057217856, -0.014367203, 0.04150804, -0.014969497, 0.01466835, -0.0016688542, 0.017855486, 0.03756804, 0.008061946, 0.0541562, -0.016525421, 0.04539785, -0.034832627, -0.048660275, -0.0116819795, -0.03340218, -0.018533066, -0.0006599346, 0.027780775, -0.047857217, -0.035535302, -0.01568472, -0.020126633, -0.060530473, -0.016337205, 0.0042944765, -0.031770967, 0.016901854, 0.03154511, 0.02725377, -0.02730396, -0.0008210951, 0.036413647, -0.02956256, 0.03490791, 0.043741547, -0.052098367, -0.011173794, 0.020101536, -0.029035553, -0.04835913, 0.04032855, 0.0060605756, -0.029863706, 0.029662943, -0.021820582, -0.030742051, 0.0018539339, -0.010533858, -0.021080263, 0.040203072, 0.036237977, 0.03633836, -0.024468163, -0.061735056, -0.02470657, 0.022974977, 0.072475955, -0.06509786, 0.061182957, 0.057820152, 0.0014618159, 0.029361796, 0.019536886, -0.048484605, -0.025748037, -0.018407587, -0.035861544, -0.02752982, -0.020854404, -0.037818998, -0.046677727, -0.06344155, -0.0017159084, 0.015559242, -0.020641092, -0.043741547, -0.022096634, 0.024668928, -0.039475303, 0.020503066, 0.034255426, 0.010765992, 0.01742886, -0.04773174, 0.029236319, -0.020741474, 0.00840701, -0.051320404, -0.03390409, 0.031243961, -0.043189444, 0.022611093, -0.008043124, -0.04891123, 0.08386933, -0.009109685, 0.042838108, -0.048509702, -0.019336123, 0.05219875, -0.006226834, 0.019511791, 0.014982045, 0.020917142, 0.011612967, -0.03791938, -0.0064621046, 0.014455038, -0.034155045, -0.011362012, -0.0366646, 0.020917142, 0.051747028, 0.004482693, 0.008538761, 0.014944401, -0.03977645, -0.01097303, 0.010922839, 0.033653136, 0.005878633, 0.017140262, -0.014931853, -0.019863129, 0.014793828, -0.0030647942, 0.013589242, 0.015546694, -0.0031557656, 0.02228485, -0.0014171144, -0.040880654, -0.021180646, 0.016776375, -0.0037329632, 0.03131925, -0.020691283, 0.07960309, -0.02865912, -0.017918224, 0.032925364, -0.040253267, -0.06590092, 0.009743348, 0.03796957, -0.044670083, -0.012874018, 0.021067716, 0.045146897, -0.030967912, 0.062939644, 0.031168675, -0.03513377, 0.037668422, 0.015082426, 0.043013778, 0.014743636, 0.0123407375, 0.061233148, 0.012874018, -0.0038898105, -0.0050002886, -0.049990337, 0.021055168, -0.0109855775, -0.0259488, 0.01703988, 0.025459437, 0.031871352, 0.014166439, 0.0145679675, 0.021230837, -0.06002856, 0.015358478, 0.0059633306, -0.01828211, -0.004758744, -0.066453025, 0.014429943, 0.04574919, 0.00919752, 0.10570247, -0.0030757736, -0.03277479, 0.0727771, -0.010828731, 0.0057939356, -0.05827187, 0.03764333, -0.010257807, 0.016174084, 0.024944978, 0.05726805, -0.02730396, -0.030867528, -0.023765488, -0.0840701, -0.0066942386, 0.026776955, -0.02815721, 0.0045171995, 0.00023115356, -0.035635684, 0.004589349, -0.08166093, -0.007880003, -0.011136151, -0.029386891, -0.04783212, -0.11744718, -0.015019688, -0.03397938, 0.03503339, -0.021481792, -0.0073529966, 0.04123199, -0.00023507474, -0.05455773, -0.004545432, -0.01387784, 0.007610226, -0.02617466, 0.040880654, -0.0041784095, 0.0014335834, 0.07704335, 0.07679239, 0.037367277, 0.02730396, -0.017278288, -0.016663447, -0.03525925, -0.010584049, 0.001163022, 0.0677078, -0.065649964, 0.03204702, 0.05490907, -0.031720776, -0.037317086, -0.04564881, 0.003914906, -0.014856567, 0.025371604, -0.04271263, 0.0047995243, 0.018884404, -0.020239562, -0.03756804, -0.020628544, 0.047530975, -0.009134781, -0.042461675, 0.0075349393, -0.025434341, -0.033126127, -0.007371818, 0.026099375, 0.032574028, -0.0036168965, -0.012221534, 0.018231919, 0.030039376, -0.04534766, 0.0033471193, 0.030867528, 0.00032075253, -0.0338539, 0.023853322, 0.039299633, -0.05325276, -0.0013433963, 0.0017676679, 0.007064398, 0.013965675, -0.016412491, 0.012347012, 0.010565227, 0.024681475, 0.0030004869, 0.0040246993, -0.040378742, 0.0004528963, 0.03729199, 0.012422298, 0.018093893, -0.0055555278, 0.035409823, -0.007509844, 0.05972741, -0.0025581778, 0.033477467, -0.0013614336, -0.008557583, -0.003044404, -0.05822168, -0.014078605, 0.043641165, -0.0035572944, 0.04557352, -0.06986602, 0.03475734, -0.0027652162, -0.036463838, -0.0035980747, 0.021130454, 0.0026695393, -0.018445231, -0.023175742, -0.052801043, -0.050517347, -0.039400015, 0.0055304323, 0.04303887, 0.05862321, 0.03249874, 0.013488859, 0.030742051, -0.031394534, -0.013614337, -0.0778464, 0.00097245263, 0.02346434, -0.004021562, -0.018771473, 0.01563453, -0.0778464, -0.015835293, 0.10640514, -0.0077294298, 0.018445231, -0.039726257, 0.0076478696, -0.08833634, -0.0068385378, 0.033427276, 0.045849573, -0.0072839838, 0.026551094, -0.0126795275, -0.016726185, 0.057619385, 0.017341027, 0.012773636, 0.0019292205, -0.016048605, -0.05952665, 0.017303383, -0.009322997, -0.04592486, -0.040253267, 0.018206824, 0.016801473, -0.045949955, -0.0031714505, -0.019373765, 0.018257014, 0.017077522, 0.038898107, -0.018231919, 0.034506384, 0.0074282833, 0.05179722, 0.0022585997, -0.0029283373, -0.0016186631, 0.021531984, 0.0078674555, -0.016901854, -0.018357396, -0.03661441, -0.08738271, 0.0084383795, 0.011349463, 0.03380371, 0.029938994, 0.008212519, 0.0006622873, -0.0005136746, -0.023840774, -0.034606766, -0.043691356, 0.011600419, -0.043967407, 0.022598544, 0.0025173975, -0.03548511, 0.0071773278, -0.009410832, -0.015371026, -0.019474149, 0.015772555, 0.029989185, 0.021393958, -0.0069765635, -0.017466504, -0.05952665, 0.0037800174, -0.0045611165, 0.017817842, 0.0076980605, -0.0108601, -0.028583834, -0.055812508, -9.9696e-05, 0.024919882, -0.025133194, 0.019499244, 0.016048605, -0.016450135, 0.040654793, 0.01631211, -0.06088181, 0.053804863, 0.009642966, 0.057870343, -0.013300642, 0.025246125, -0.03638855, 0.03485772, 0.026977718, 0.013827649, -0.025133194, 0.010847553, -0.0631906, 0.0035478836, -0.014818924, 0.025321411, -0.0012210554, -0.036990844, 0.007058124, -0.0338539, -0.007553761, -0.002878146, 0.043967407, 0.018420136, 0.06735646, 0.05325276, -0.009467297, -0.04040384, 0.04170881, 0.010477393, -0.007942742, 0.00042936922, 0.0075600347, 0.04015288, -0.008733252, -0.0518976, -0.041884474, 0.053905245, -0.0016021942, -0.0428632, -0.0008461906, -0.036363456, -0.031946637, -0.0026601285, -0.006371133, -0.03784409, 0.02662638, 0.0084195575, -0.00727771, -0.050567538, -0.01754179, 0.00803685, -0.025998991, 0.014680898, 0.02036504, -0.019047523, -0.019474149, 0.029010458, -0.0088838255, 0.014429943, -0.016839115, 0.00044858298, -0.012629337, -0.030867528, 0.0008328586, -0.0046081706, -0.05026639, -0.01957453, 0.034330714, -0.026701666, 0.0012657569, 0.017855486, -0.076742195, -0.039977215, 0.060279515, -0.032824982, 0.0030945952, -0.03515887, 0.0048246197, 0.027780775, 0.016876759, 0.038295813, 0.044143077, 0.015408669, 0.06394347, -0.034280524, 0.029261414, 0.0293367, -0.009028125, 0.017918224, -0.014178987, -0.018984785, -0.03232307, -0.03114358, 0.0014712267, -0.034155045, -0.007942742, 0.00012753638, 0.020641092, 0.013664528, -0.015371026, 0.0025409246, 0.017980963, 0.016826568, -0.004658362, 0.024041539, -0.031469822, -0.018947141, 0.062136587, 0.008839908, 0.061835438, -0.02025211, -0.028734406, 0.031243961, -0.010176246, 0.04208524, 0.0067444295, -0.034732245, -0.023113003, 0.02402899, -0.026400521, 0.022498162, -0.052499894, -0.008877551, -0.010119781, 0.01878402, -0.0013943716, -0.0036043485, -0.025973896, -0.012121151, 0.017704912, 0.030541286, 0.06349175, -0.055260405, -0.049965244, -0.019449053, -0.04539785, -0.03377861, -0.0028310919, 0.084622204, -0.03631326, -0.025672749, -0.01563453, -0.043139253, -0.010427202, -0.0377939, -0.026927527, 0.01018252, -0.016061153, -0.0036168965, -0.049990337, 0.015973318, 0.023966253, -0.057920534, -0.036539122, 0.077444874, 0.016550517, -0.012384655, 0.016412491, -0.038622055, -0.0012139974, 0.02364001, -0.024694024, -0.02675186, -0.021895869, -0.027906254, -0.00851994, 0.028508548, -0.0014288779, -0.017303383, -0.054206394, -0.01624937, 0.00806822, 0.019561982, 0.0036043485, 0.024806952, 0.021757843, 0.015973318, -0.031344343, -0.011901566, -0.05505964, 0.0003509456, -0.00288442, -0.018432682, -0.002153512, -0.009661787, -0.003974508, -0.068109326, 0.020227015, -0.010835004, 0.045673903, 0.0049595083, 0.0074722003, -0.010734622, 0.0057311966, -0.006556213, -0.01765472, 0.004181546, -0.036012117, 0.0073655443, 0.048886135, -0.007509844, 0.03141963, -0.01934867, -0.04429365, -0.038948298, -0.0011316525, -0.021745296, 0.028985362, -0.024468163, -0.0097935395, -0.0009810792, 0.014392299, -0.026450712, 0.023715297, -0.017328478, 0.0024577957, 0.03357785, 0.025572367, 0.015973318, 0.0029330426, -0.043590974, -0.041206896, 0.01277991, 0.021143002, -0.024794405, -0.005489652, 0.01037701, 0.012899114, -0.051747028, 0.0445697, 0.02865912, 0.020603448, 0.057669576, -0.034380905, 0.012522681, 0.021143002, 0.005539843, 0.0050473427, -0.013438668, -0.03638855, -0.0052982983, 0.0112177115, -0.0077294298, 0.011249081, -0.020892046, 0.036187787, 0.0083129015, 0.02160727, -0.0053453525, -0.0003725121, -0.008551309, 0.040830463, 0.030315427, -0.0023950567, -0.0031996828, 0.056163844, -0.006088808, 0.03530944, -0.02752982, -0.02680205, -0.032072116, -0.031770967, -0.043490592, -0.026902432, 0.017930772, 0.009065768, -0.03493301, -0.043616068, -0.029612752, -0.035409823, 0.014844019, 0.01432956, 0.006026069, 0.034531478, 0.028257592, 0.005593171, 0.051245116, -0.0041784095, 0.028910076, 0.010765992, 0.020979881, 0.0025330822, -0.014818924, 0.015923128, -0.01968746, 0.033176318, 0.054407157, 0.021419054, -0.02533396, -0.03769352, -0.020791665, -0.03232307, -0.042361293, -0.018809116, 0.029261414, -0.0014359361, 0.008231341, -0.05219875, 0.035560396, 0.010533858, 0.0059131393, -0.042838108, -0.001957453, -0.0016390532, -0.008902647, -0.045046516, 0.024794405, 0.0112177115, 0.0138903875, -0.013175164, 0.002376235, 0.066101685, 0.012083508, 0.010671884, 0.016638352, -0.02978842, -0.016261918, -0.026877336, 0.020892046, -0.038722437, 0.027856063, 0.055661935, 0.019185549, -0.013024592, -0.03530944, 0.0078862775, -0.0118764695, -0.019925868, -0.06730627, -0.0045140623, -0.055260405, -0.0129116615, 0.0017551201, 0.032875173, 0.025660202, 0.03164549, -0.04733021, 0.02747963, -0.026601285, 0.02916103, -0.016199179, 0.01760453, 0.007854908, -0.051696837, -0.023150647, 0.030767146, -0.04931276, 0.029487273, -0.02020192, -0.041081417, 0.023025168, -0.003309476, 0.028583834, -0.007836086, -0.015107522, 0.009316724, 0.047656454, 0.0031996828, 0.004467008, 0.0033753517, 0.016550517, 8.347212e-05, -0.027027909, 0.0055241585, -0.033101033, 0.039701164, -0.014818924, -0.0019260836, 0.0104522975, 0.02860893, -0.03222269, -0.01266698, 0.028734406, 0.023803132, -0.035409823, 0.026325233, -0.011562776, -0.017265739, -0.012710897, -0.008752074, -0.030415809, 0.019963512, 0.033828802, 0.016437586, 0.038496576, -0.024794405, -0.016788924, 0.010615419, -0.010251533, 0.039249443, -0.029487273, 0.011267902, 0.025509628, 0.038295813, -0.0045046518, -0.022937335, -0.016613256, 0.012347012, 0.016964594, -0.03548511, -0.022498162, 0.0082250675, 0.10118526, 0.016625803, -0.019260837, 0.018947141, -0.03869734, -0.028859885, 0.004090575, 0.0123407375, -0.018721282, -0.011104782, -0.0042411485, -0.013702171, -0.0050473427, -0.0040717535, -0.017290834, 0.000325654, 0.044318743, 0.006217423, 0.073881306, 0.019449053, -0.0016845389, -0.022008799, -0.0022178194, 0.014982045, -0.0068636336, 0.0050034258, -0.020779116, -0.008337997, 0.016713638, -0.03706613, 0.012742266, 0.019787842, 0.024405424, -0.012390928, 0.036187787, -0.0023119277, 0.007158506, -0.024342686, 0.025195934, 0.02415447, -0.03262422, 0.0036764983, -0.015509051, 0.0021880185, -0.038847916, 0.0008571699, 0.032398358, 0.022385232, -0.034882817, 0.048961423, -0.049287662, 0.0091159595, 0.06394347, -0.0032718326, -0.0042725177, 0.02662638, 6.543469e-05, 0.010809909, -0.018533066, -0.013564146, -0.035234153, -0.0024640695, 0.023539627, -0.054206394, 0.025170838, 0.020063894, 0.0016923812, -0.032649312, -0.030365618, 0.021469245, 0.008752074, 0.007961564, -0.024957526, 0.020653639, 0.037241798, 0.021908417, -0.0019072619, 0.008162328, 0.079803854, -0.014818924, -0.012704623, 0.0034851448, -0.002522103], [-0.0050521563, -0.01681753, -0.028094359, 0.032761425, 0.016599122, 0.037198585, -0.03827914, 0.03151994, -0.03889988, 0.027243711, -0.009931885, 0.015668007, 0.011121642, -0.02574933, -0.026370073, -0.0014110403, -0.037474472, -0.009972118, -0.04805009, -0.015622026, -0.037221577, -0.055499002, -0.048923727, -0.0030462376, 0.04218752, 0.017369302, 0.015461093, 0.011282574, -0.038922872, 0.031014148, 0.046900567, 0.005902804, 0.020852359, 0.0020892592, 0.039658565, -0.021783473, 0.01648417, 0.037106622, -0.029565748, -0.021473102, -0.028761081, 0.0022099593, -0.0007687439, -0.007971946, -0.016943978, 0.0011258147, -0.010236508, 0.022507673, 0.012817189, -0.0032617734, 0.0335431, -0.028508186, -0.034209825, -0.026416054, -0.033267215, 0.015139227, 0.022783559, -0.061936334, 0.042555366, -0.029565748, -0.046440754, 0.009006518, -0.0026338461, -0.015162217, -0.029289862, -0.021714501, 0.0019197045, -0.00728798, 0.027933424, 0.017679675, -0.032485537, -0.0071845227, -0.0063568656, 0.0074891467, 0.007943208, -0.061522506, 0.07573062, 0.013529894, -0.026944835, 0.0014512736, 0.02261113, -0.055499002, -0.024139997, -0.009443337, 0.063959494, -0.058073934, 0.05191249, -0.06841965, -0.013541388, -0.0037704376, 0.038463064, -0.015185207, 0.05292407, 0.047360376, -0.08699595, 0.024852702, 0.004083683, 0.023036454, -0.032669462, -0.0029542758, -0.014541474, -0.055177137, -0.062074278, -0.044509556, 0.048877746, 0.0061786897, 0.029841634, -0.014644931, -0.01361036, 0.06681032, 0.0044975113, -0.023243368, -0.0039917207, -0.018162474, -0.02067993, 0.011023932, -0.018840693, -0.037106622, -0.042900223, 0.012966627, -0.06566079, 0.0043595685, 0.05922346, 0.038968854, -0.017530236, -0.0042848494, 0.0070235897, 0.030370414, -0.012035512, 0.02067993, -0.016449684, 0.016139312, 0.061016716, 0.010495151, 0.03940567, 0.0014886331, 0.028945006, -0.055315077, -0.065338925, 0.0045492398, -0.04678561, -0.02478373, -0.0139092365, 0.023300845, -0.023128416, -0.020013208, -0.008236337, -0.02304795, -0.059131496, -0.030002568, -0.004894097, -0.05779805, 0.0306463, -0.0072937277, 0.04809607, -0.02263412, 0.007500642, 0.010707813, -0.015380627, 0.03066929, 0.055085175, -0.06074083, -0.03749746, 0.03694569, 0.0076673226, -0.068741515, 0.030968167, 0.0058913087, -0.04168173, 0.042670317, -0.0052475757, -0.032784414, 0.036232986, -0.00958128, -0.019151064, 0.049245592, 0.054487422, -0.015851932, -0.004454404, -0.043107137, -0.017415283, 0.012932141, 0.04621085, -0.03591112, 0.06694826, 0.042417422, 2.8962608e-05, 0.062809974, 0.01481736, -0.025657369, -0.039934453, 0.0073224655, -0.038187176, -0.02258814, -0.007845499, -0.024944663, -0.0038738947, -0.081892066, 0.017357808, 0.034554683, -0.023208883, -0.052188374, -0.032347597, 0.029243883, -0.04623384, 0.018553311, 0.046808604, 0.0005456645, -0.017139398, -0.03014051, 0.045498148, 0.0054573636, 0.013322979, -0.050303154, 0.0072362516, 0.011500984, -0.040624168, 0.014288579, -0.023657197, -0.05729226, 0.05834982, -0.018794712, 0.040141366, -0.062488105, -0.022910006, 0.0494755, 0.011506732, -0.00040879936, 0.034393746, 0.036738776, -0.014782874, -0.025427463, -0.011851589, 0.022772064, -0.017783131, -0.041497804, 0.00080825883, 0.002754546, 0.07531679, -0.01896714, 0.014863341, 0.030370414, -0.0325775, -0.025404474, 0.031818815, 0.009403104, 0.0023737664, 0.006943123, -0.0020001712, -0.030255463, -0.009190442, -0.00481363, 0.0064833136, 0.01310457, -0.017840607, 0.037681386, 0.024806721, -0.068879455, 0.0072649894, -0.018955646, -0.0028134591, 0.035612244, -0.014162132, 0.054717325, 0.018530322, -0.028577158, 0.030485367, -0.038026243, -0.08115637, 0.0044773947, 0.013782789, -0.043107137, -0.019300502, 0.0345087, 0.07200616, -0.03988847, 0.07425923, 0.043497976, 0.010293985, 0.05444144, 0.013564379, 0.020748902, 0.0021294926, 0.049291573, 0.0306463, -0.0060924753, -0.029749673, 0.0041181687, 0.0016294498, -0.008632923, -0.0038451566, -0.05108483, 0.04570506, 0.012690742, 0.04085407, 0.027335674, 0.018265931, 0.0044658994, -0.0680518, 0.028600149, -0.0058826874, 0.009178947, 0.0022688722, -0.07977694, -0.00078814215, 0.050395116, 0.014794369, 0.0680518, 0.0004493919, -0.0047619017, 0.051176794, 0.0046871826, -0.018288922, -0.05149866, 0.031795826, -0.026094187, -0.023323836, 0.012667751, 0.053199954, -0.010903232, -0.055315077, -0.016852017, -0.09977865, 0.011742384, 0.023461778, 0.015070255, -0.015587541, -0.012736722, -0.019231532, -0.004365316, -0.08129431, -0.0029830139, 0.0016179546, -0.011817103, -0.058533743, -0.10308928, -0.007173028, -0.04273929, 0.032485537, -0.04377386, -0.024139997, 0.070902616, -0.018196959, -0.05876365, -0.023415796, -0.029105939, 0.014288579, -0.037727367, 0.044739462, -0.041957613, 0.0012400487, 0.07416727, 0.03549729, 0.017438274, -0.0016639355, -0.018127989, -0.009839922, -0.028439216, -0.020266103, 0.020886844, 0.084329054, -0.06745405, -0.009230675, 0.025197558, -0.016415197, -0.035060473, -0.05057904, -0.018771721, 0.012989617, 0.017852103, -0.013644846, -0.0059660277, -0.0031525686, -0.011667665, -0.0709486, -0.009610018, 0.061430544, 0.009018013, -0.035750184, -0.0015734105, -0.014162132, -0.030462377, -0.019610874, 0.014323065, 0.049889326, -0.005078021, -0.03202573, 0.03262348, 0.027036797, -0.040003423, -0.023933083, 0.0016208284, 0.007017842, -0.076834165, 0.041980606, 0.044808432, -0.062442124, 0.00092105585, 0.007632837, 0.005089516, 0.010753794, -0.005316547, 0.02285253, -0.028577158, -0.020748902, 0.024829712, -0.0006351118, -0.011437761, 0.0019038985, 0.038991842, -0.022335244, 0.013322979, -0.013874751, 0.04034828, 0.010477908, 0.033681042, 0.009891652, 0.027772492, -0.014828855, 0.021898426, 0.0089547895, -0.050946888, 0.0014886331, 0.026393063, 0.049107652, 0.05586685, -0.028508186, 0.030738262, -0.024185978, -0.017748645, -0.014644931, -0.0053079254, -0.00011899366, -0.004799261, -0.04129089, -0.042555366, -0.052740145, -0.034186833, -0.0021510462, 0.050625023, 0.0057188803, 0.0051383707, 0.009742213, 0.04080809, -0.034784585, -0.023565235, -0.06745405, 0.027565578, 0.032094702, -0.0008255017, -0.021553569, 0.029680701, -0.08308757, -0.02159955, 0.07150037, 0.011587199, 0.0033364925, 0.0026266617, 0.032094702, -0.089754805, 0.0064833136, 0.026094187, 0.049889326, -0.024691768, 0.045911975, -0.005830959, -0.045406185, 0.040440243, 0.0025519426, 0.007121299, 0.010023846, -0.0039055066, -0.049889326, 0.0051268754, -0.02818632, -0.027082777, -0.029473787, 0.019047607, 0.039083805, -0.028393235, -0.02285253, -0.052326318, 0.050762966, 0.015645018, 0.030255463, -0.016897999, 0.032761425, -0.0013902052, 0.05641862, 0.0060062613, 0.0089547895, 0.019346483, 0.010150294, 0.0070695705, -0.0040147114, -0.041773688, -0.049613442, -0.019898254, 0.0019685593, 0.017001456, 0.008793856, 0.058165897, 0.011357293, -0.00680518, -0.026990816, 0.013162046, -0.02623213, -0.033244226, -0.01361036, -0.027634548, 0.0059832707, -0.012656256, -0.0364399, 0.0052935565, -0.0025691853, 0.013644846, -0.019576387, -0.0025404473, -0.0027042544, 0.0035204163, -0.026944835, -0.0020217248, -0.046946548, -0.006052242, 0.005437247, 0.0037848067, 0.044969365, -0.023036454, 0.013024103, -0.027933424, -0.01749575, 0.012932141, -0.035152435, -0.017645188, -0.020001711, 0.0025073984, 0.0422335, 0.0063626133, -0.041704718, 0.05048708, 0.021300673, 0.073201664, 0.005043535, -0.0064948085, -0.02423196, 0.04313013, 0.008242085, 0.0073569515, -0.02135815, 0.036072053, -0.03945165, 0.06474117, -0.0032445306, 0.055682927, -0.0047820183, -0.033933938, -0.024622796, -0.050441097, 0.005511966, -0.0054487423, 0.016208284, 0.019231532, 0.076834165, 0.028899025, -0.022783559, -0.04073912, 0.042601347, -0.0072764847, -0.009598522, -0.0012134659, 0.01262177, 0.02311692, 0.015518569, -0.035106454, -0.061936334, 0.08359336, -0.0041813925, -0.017438274, 0.021852445, -0.018507332, -0.025703348, -0.035842147, -0.029956587, -0.044739462, 0.015219693, 0.008799603, -0.016461179, -0.05103885, -0.011253837, 0.019656854, -0.016645102, 0.004595221, 0.019116579, -0.010523889, 0.0020806377, 0.03731354, -0.011046923, 0.012828684, -0.011184866, 0.02138114, -0.00982268, -0.0105698705, 0.028048377, -0.012713731, -0.059499346, -0.029220892, 0.038049232, -0.04476245, 0.048601862, 0.014989789, -0.0837313, -0.010851503, 0.029680701, -0.03149695, 0.011058418, 0.0058654444, -0.00083915226, 0.036278967, 0.022795055, 0.04660169, 0.05494723, -0.004845242, 0.09072041, -0.036692794, 0.006040747, 0.018863684, 0.0074201752, 0.005402761, 0.015380627, -0.023887102, -0.02526653, -0.029887615, 0.0034686876, -0.037566435, -0.017863598, 0.00019703554, -0.017990045, 0.040141366, -0.025335502, 0.021082263, -0.00072024844, 0.019151064, 0.017185379, 0.028600149, -0.02473775, -0.01530016, 0.03604906, 0.0062131756, 0.07692613, -0.022001883, -0.014679417, 0.02772651, 0.014782874, 0.053613782, -0.020932825, -0.0050952635, -0.008345542, 0.011098651, -0.030991158, 0.0020806377, -0.032278623, -0.01262177, 0.0012177767, 0.034301788, -0.0036526115, -0.033750016, -0.0055895587, -0.02331234, 0.0047504064, 0.01284018, 0.058165897, -0.048417937, -0.038807917, -0.0010094255, -0.025381483, -0.03883091, 0.010121556, 0.04467049, -0.008437504, -0.020277597, -0.039037824, -0.023864111, -0.040026415, -0.024990644, 0.014828855, 0.0026510889, -0.012437846, -0.012449341, -0.06074083, 0.027496606, 0.015484083, -0.083271496, -0.05205043, 0.06552285, 0.03007154, 0.0013758361, 0.022266272, -0.05885561, -0.011144632, 0.012265418, -0.012690742, -0.023289349, -0.023197388, -0.05540704, 0.024806721, 0.015564551, -0.00054171303, 0.009018013, -0.059085514, -0.038623996, 0.022887016, 0.03163489, 0.0013988266, 0.04671664, 0.0011890385, 0.011529722, -0.045888983, -0.008242085, -0.042900223, 0.005451616, -0.0067534517, -0.018863684, -0.019967226, -0.022783559, 0.010529636, -0.0564646, 0.029795654, -0.0053970134, 0.056096755, -0.00466994, 0.033152264, -0.017530236, -0.000918182, -0.00089806534, -0.028922016, -0.0029600235, -0.0041612755, 0.009454832, 0.031290036, 0.0033623567, 0.0029140424, -0.010679075, -0.028462205, -0.036968682, 0.017449768, -0.037980262, 0.023254864, -0.009684737, 0.0014843225, 0.0032042973, -0.023220377, -0.002125182, 0.010058332, -0.04713047, 0.010759542, 0.06372959, 0.017829113, -0.007931713, -0.009621513, -0.038486052, -0.0074719037, -0.0019211414, -0.009472075, -0.030876206, -0.005463111, -0.0024628544, -0.008276571, -0.048785783, 0.03409487, 0.026370073, 0.038118206, 0.06023504, -0.0072477465, 0.0048423684, 0.0287151, -0.012483827, 0.0032244138, -0.008437504, -0.022680102, 0.012943637, 0.004606716, -0.015989874, 0.011569955, -0.0077190516, 0.010110061, -0.0018449855, -0.012230932, -0.00875937, -0.019714331, 0.0013923605, 0.03598009, 0.02109376, 0.013506903, 0.0040980517, 0.070120946, 0.0003339007, 0.042072564, -0.03356609, -0.004325083, -0.0069143847, -0.053567804, -0.037658393, -0.031427976, 0.04365891, 0.0058165896, -0.03894586, -0.031979747, -0.045636088, -0.01054688, 0.027818473, 0.009190442, 0.02768053, -0.000112976624, 0.02190992, -0.0042043827, 0.05388967, 0.0035031734, 0.03014051, 0.021725997, 0.018817702, 0.01841537, 0.015403617, 0.0055378303, -0.022047864, 0.01064459, 0.011449256, 0.01773715, -0.023415796, -0.04041725, -0.024002055, -0.03827914, -0.03055434, -0.024599805, 0.014667922, 0.0034571923, 0.021553569, -0.039428663, 0.047360376, 0.024852702, -0.00740868, 0.00031791514, 0.019334989, -0.004626833, 0.008299561, -0.042946205, 0.018852187, -0.0023292224, -0.0032933853, -0.009305394, 0.0028350127, 0.07375344, -0.0042130044, -0.0025806807, 0.00076227786, -0.01628875, -0.012529808, -0.0436819, 0.0340259, -0.012541303, 0.028554168, 0.06023504, 0.042486396, 0.017484255, -0.016461179, 0.0034054639, 0.010075575, -0.013322979, -0.06745405, 0.009701979, -0.062488105, -0.03800325, 0.031864796, 0.017840607, 0.028462205, 0.020461522, -0.046969537, 0.02434691, -0.01867976, 0.025818301, -0.016242769, 7.804188e-05, 0.03151994, -0.031129101, -0.029427806, 0.023933083, -0.01674856, 0.005000428, -0.015242684, -0.02873809, 0.028807063, 0.017438274, 0.017346311, 0.00052698475, 0.020254606, 0.012058503, 0.03781933, -0.004069314, -0.009604271, -0.002228639, 0.025128588, 0.003540533, -0.017219864, -0.00029923537, -0.008839837, 0.009069742, -0.01018478, 0.015139227, 0.012633265, 0.029496778, -0.01167916, -0.018541817, 0.027542587, 0.030738262, 0.0050665257, 0.02820931, 0.012403361, -0.015070255, -0.012322893, -0.0055234614, -0.004322209, 0.032094702, 0.045015346, 0.07329363, 0.04467049, -0.024691768, 0.0092766555, 0.012035512, 0.0068454132, 0.033152264, -0.00871339, 0.037796337, 0.018530322, 0.034807578, -0.013828769, 0.0048107565, -0.010225013, -0.00094835705, 0.018909665, -0.022208797, -0.007333961, 0.025059616, 0.09610018, 0.01600137, -0.027335674, 0.015139227, -0.047728222, -0.027956415, 0.018541817, 0.020220121, 0.0006318788, -0.0030462376, 0.0030893448, -0.0024887188, 0.005557947, 0.0053107995, -0.026140168, 0.0047446587, 0.052280337, 0.01505876, 0.044578526, 0.0111791175, -0.004546366, -0.03066929, 0.0012069999, -0.0011143195, -0.037290547, 0.026875863, 0.02048451, 0.017277341, 0.029726682, -0.028876035, 0.006655742, 0.02138114, 0.0066959755, 0.015093246, 0.009161703, 0.009747961, 0.01165617, -0.021771979, 0.026852872, 0.0027904687, -0.011989532, 0.0058510755, -0.03554327, -0.0029140424, -0.04483142, 0.009161703, 0.045015346, 0.0075351275, -0.03312927, 0.061752412, -0.03448571, 0.0019254521, 0.035451308, 0.012989617, -0.022726083, 0.013299989, 0.008897313, 0.017196873, -0.0047676493, -0.007063823, -0.008753623, -0.02019713, 0.012575788, -0.069753096, 0.032324605, -0.006144204, -0.0074489135, -0.069983, -0.03501449, 0.009587027, -0.0075696134, -0.013185036, -0.008178861, 0.03414085, 0.051636603, 0.020323578, -0.019047607, 0.0010554064, 0.059039537, -0.002047589, -0.036232986, 0.04432563, 0.017300332], [-0.01687672, -0.010194283, -0.03084965, 0.06303951, 0.0017559234, 0.02663047, -0.013501375, 0.037079144, -0.016231433, 0.028864153, -0.009666885, -0.014630626, 0.024992436, -0.013153913, -0.010585178, 0.018626438, -0.050605338, 0.005394966, -0.028864153, -0.013687516, -0.009375266, -0.03271105, -0.061252564, -0.014518943, 0.036284946, -0.0092884, -0.0017000813, 0.025352307, 0.014394849, 0.010225306, 0.03201613, 0.010945049, 0.011962616, -0.0013417612, 0.023031758, 0.016938766, 6.14166e-05, 0.02376391, -0.04042967, 0.006508705, -0.01244658, -0.010498312, 0.029832084, -0.023677044, -0.020798074, 0.010951254, -0.012291463, 0.009908868, 0.008878891, -0.027970681, 0.018564392, -0.03256214, -0.036086395, -0.025960365, 0.01994183, 0.031023381, 0.07539923, -0.059316706, 0.04176988, -0.020152789, -0.041645788, 0.011404195, 0.040305577, 0.010212897, -0.041347962, 0.0010951253, -0.020611934, 0.0067382785, 0.02948462, 0.035689298, -0.010032961, -0.00853143, 0.03412572, 0.015697831, -0.005826191, -0.04986078, 0.06606739, 0.0065025007, -0.01954473, -0.025302669, 0.025910728, -0.034026444, -0.0083639035, -0.017943924, 0.022746343, -0.037922982, 0.018390661, -0.102650166, -0.019656414, 0.005184007, 0.04718036, -0.004135417, 0.055147164, -0.0047217584, -0.08353976, -0.0035118468, -0.01703804, -0.01301741, -0.027077207, -0.00425951, -0.0009159653, -0.026506377, -0.06428044, -0.05137472, 0.05996199, 0.024036916, 0.02625819, 0.011993639, 0.0038158759, 0.057182297, 0.030254, 0.0044146273, -0.019110402, 0.023751501, -0.008767207, 0.006009229, -0.026779382, -0.05802613, -0.013439328, 0.0018645052, -0.08726256, -0.030204363, 0.052764565, 0.06874781, 0.0032326363, 0.019035947, -0.021654319, 0.018254157, -0.0062015736, -0.015400006, -0.037625156, -0.0113855805, 0.019532321, 0.02089735, 0.012769223, 0.021542635, 0.05748012, -0.055990998, -0.041645788, 0.03318261, -0.031941675, -0.0019792917, -0.026704926, 0.017484777, -0.041397598, -0.016020473, 0.006688641, -0.01799356, -0.05534571, -0.00021774536, 0.0023981074, -0.05072943, 0.012856089, 0.011273896, 0.038444173, -0.021381315, 0.010212897, 0.031966493, -0.053955864, 0.038617905, 0.031743124, -0.049885597, -0.021939736, 0.045269318, -0.029707989, -0.075349584, 0.08706401, 0.014692673, -0.046088334, 0.033207428, -0.008934733, -0.02299453, 0.039064642, -0.012105323, -0.034249812, 0.013166323, 0.036905415, -0.004526311, -0.021902507, -0.07872493, -0.0046379953, 0.022014191, 0.018142473, -0.04065304, 0.019966647, 0.04385465, 0.028467054, 0.043432735, -0.0004897816, -0.04291154, -0.0009663783, 0.0036018146, -0.04752782, -0.029832084, -0.0020770153, 0.0058665215, -0.014469305, -0.05177182, 0.038394537, 0.014518943, -0.03027882, -0.024756659, 0.00014231975, -0.012967773, 0.0011664791, 0.016578894, 0.041620966, 0.031321205, 0.0075386814, 0.01236592, 0.02299453, -0.0030433936, 0.0015465155, -0.03350525, 0.008823049, 0.04003257, -0.05211928, 0.009195331, -0.034299448, -0.025401944, 0.05867142, -0.0106099965, 0.06338697, -0.04519486, -0.039039824, 0.030254, 0.03142048, 0.013786791, 0.052268192, 0.05020824, -0.01607011, -0.047056265, -0.014357621, 0.033232246, -0.061054014, -0.021989372, -0.037426606, -0.01914763, 0.038270444, 0.014394849, 0.025190985, -0.004107496, -0.015064954, -0.024173418, -0.0034280836, 0.04159615, -0.008165354, 0.030924106, -0.032289136, -0.047577456, 0.027499124, -0.026953114, -0.025786635, 0.03889091, -0.0306511, 0.07862566, 0.04425175, -0.052615654, -0.036706865, 0.015908789, -0.015635785, 0.042961176, -0.030874468, 0.07639197, -0.0052832817, -0.015089773, 0.0068127345, -0.028715242, -0.074505754, 0.035292197, 0.0444503, -0.04368092, 0.023044167, 0.042985998, 0.03333152, -0.032040946, 0.055097524, 0.03603676, 0.0026819713, 0.025761815, 0.0014495675, 0.024458833, -0.014903632, 0.059415977, 0.046783257, 0.030973744, -0.007507658, -0.018154882, -0.051126532, 0.01667817, -0.021530226, -0.019122813, 0.035292197, -0.0054911384, 0.026332647, 0.013935703, 0.0125830835, 0.043978743, -0.03561484, 0.019867374, -0.007395974, -0.03124675, -0.027350213, -0.068598896, -0.0018334818, 0.04176988, 0.022944892, 0.10890447, -0.0012455888, -0.0337038, 0.08448287, -0.008084693, -0.021803232, -0.023838365, 0.04581533, -0.0046286886, 0.021418542, 0.012794042, 0.04214216, -0.022858027, -0.022944892, 0.0050878343, -0.104933485, 0.03082483, 0.04236553, -0.0010020552, -0.022585021, -0.041447237, -0.048843212, 0.0069120093, -0.06974056, -0.026233371, 0.0004114476, 0.023689454, -0.026134096, -0.1257812, -0.010765113, -0.092424855, 0.023056576, -0.021182764, -0.014891223, 0.021331677, -0.01705045, -0.026680108, 7.2650455e-06, 0.0011750106, -0.0055469805, -0.024582926, 0.039709926, -0.023267535, 0.0015379841, 0.058323957, 0.0800155, 0.04142242, 0.002807616, -0.012601697, -0.013389691, -0.03027882, -0.013613059, 0.010206692, 0.07817892, -0.060458366, 0.015350369, 0.061848212, 0.027275756, -0.014928451, -0.057926856, -0.014159071, 0.017943924, 0.01727382, -0.025277851, 0.0014573233, -0.029261252, 0.023031758, -0.038617905, -0.02262225, 0.06323806, 0.023664635, -0.04023112, 0.020338928, -0.008761003, -0.029286072, -0.024247874, 0.048396476, 0.042812265, 0.018911853, -0.028119592, 0.025761815, 0.04978632, -0.043010816, 0.012142551, 0.0076193423, 0.011373172, -0.01743514, 0.058274318, 0.04986078, -0.04718036, 0.0038375922, -0.0026773177, -0.0013402101, -0.0053825565, -0.004560437, -0.022820799, -0.03293442, 0.007222243, 0.011844727, -0.010262534, -0.03871718, -0.0031457709, 0.020016285, -0.009524178, -0.0007852793, -0.03447318, 0.026233371, -0.0110319145, 0.04420211, 0.014059796, 0.0417947, 0.004284329, 0.029732808, 0.009635862, -0.025203394, -0.0007174157, 0.011553107, -0.0018862216, 0.05916779, -0.04293636, 0.010020552, -0.031693485, -0.015933609, 0.008419746, 0.007011284, -0.027325394, -0.030700738, -0.013761972, -0.011726838, -0.026382282, -0.046932172, 0.001999457, 0.060408726, 0.011553107, 0.008022646, 0.018130064, 0.05187109, -0.072867714, 0.00048823046, -0.07013766, -0.006707255, 0.024086554, -0.04695699, -0.03127157, 0.0107464995, -0.04038003, -0.022262378, 0.033951987, -0.006378407, 0.005004071, 0.008692752, -0.0021390622, -0.09401325, 0.021219993, 0.009933687, 0.06442936, -0.0010811648, 0.030924106, -0.0031411173, -0.007005079, 0.047602277, 0.0057548373, 0.014630626, 0.0012564469, 0.005863419, -0.042663354, 0.02452088, -0.028318143, -0.04333346, -0.031073019, -0.009728932, 0.02739985, -0.0544026, -0.023999687, -0.006120913, 0.0073649506, 0.016789854, 0.034398723, -0.036657225, -0.00017305229, -0.0024911775, 0.05291348, -0.0022243764, -0.03732733, 0.028516691, 0.009269786, 0.022858027, -0.007861325, -0.039412104, -0.022200331, -0.064330086, -0.001881568, -0.00059952686, 0.02203901, 0.053608403, 0.008953348, 0.012918136, -0.007315313, -0.018911853, -0.011633768, 0.008891301, -0.003294683, -0.04057858, 0.024260284, -0.0053608404, -0.02453329, 0.0017109395, 0.002066157, -0.021219993, -0.0367565, 0.013513785, 0.040156662, 0.0058572143, -0.005109551, -0.022200331, -0.079668045, 0.005295691, -0.02511653, 0.010454879, 0.008959552, 0.008860278, 0.012707177, -0.032735873, -0.016913947, 0.01706286, -0.030502189, 0.017149724, 0.009784774, -0.0224237, 0.039263193, -0.009232558, -0.022585021, 0.049984872, -0.012241826, 0.023813548, 0.013488966, 0.014432076, -0.050878346, 0.04521968, 0.03951138, -0.007011284, -0.020152789, 0.03757552, -0.04387947, 0.05390623, 0.01783224, 0.011757861, -0.0020801176, -0.054104775, 0.004743475, -0.060756188, -0.009375266, -0.003487028, 0.018924262, 0.039015003, 0.08979408, 0.01667817, -0.023540542, -0.080710426, 0.048694298, 0.019569548, -0.028293323, 0.001962229, -0.02238647, 0.04556714, 0.022820799, -0.024806295, -0.039362464, 0.06844999, -0.020736028, -0.029186796, 0.0041974634, -0.028839335, -0.052764565, 0.0037041917, 0.02568736, -0.032686234, -0.013923293, 0.027350213, -0.014345211, -0.039213553, -0.024843523, 0.012856089, 0.0012386085, 0.010107418, -0.006614185, -0.032859966, -0.027871406, -0.003322604, -0.017162135, 0.029186796, -0.013613059, 0.030924106, 0.0019281032, -0.025637722, 0.0010889206, 0.015871562, -0.018341023, 0.0051498814, 0.024582926, -0.021530226, 0.021654319, -0.0011866443, -0.08418505, -0.0065397285, 0.04809865, -0.022324424, 0.006763097, -0.03772443, 0.011435218, 0.072222434, 0.020463021, 0.024223056, 0.06805289, -0.002880521, 0.08334121, -0.033678982, 0.06596812, 0.020934578, -0.014481714, 0.006347384, 0.0056462553, -0.018614028, -0.03598712, -0.016951175, 0.021406133, -0.029980995, -0.03581339, -0.0020304802, -0.0026090664, -0.010752704, -0.0031767942, 0.015883971, 0.019867374, 0.05206964, 0.009431108, 0.07048512, -0.016554076, -0.021790823, 0.034001626, 0.018961491, 0.060656913, -0.025538446, 0.0056214365, 0.01321596, 0.013650288, 0.041248687, 0.014097025, -0.04787528, 0.018365841, 0.028144412, -0.045542322, 0.017211773, -0.024247874, -0.010901616, 0.007718617, 0.026382282, 0.0017233489, -0.018514754, -0.0067879157, -0.03544111, -0.016740216, 0.02933571, 0.018092835, -0.030303638, -0.059564892, -0.021306857, -0.02548881, -0.039834023, -0.021443361, 0.04229107, -0.006285337, -0.01455617, -0.033306703, -0.039362464, -0.02950944, -0.002450847, -0.012359715, -0.003670066, -0.05187109, -0.012756814, -0.050456427, -0.0065707522, 0.032537322, -0.075746685, -0.009220148, 0.06095474, 0.018179702, -0.027548762, 0.01284368, -0.047800824, 0.029832084, 0.0039803, -0.016913947, -0.0059378752, -0.0077682547, -0.041546512, 0.01727382, 0.017112497, -0.0015131654, -0.0036452473, -0.045716055, -0.042266253, 0.03427463, 0.0046504047, -0.004554232, 0.05867142, 0.001872261, 0.012341101, -0.03504401, 0.0039958116, -0.044872217, 0.015189047, 0.031494938, -0.011639972, -0.010026757, -0.03161903, 0.014146661, -0.039263193, 0.050555702, 0.008202582, 0.057976495, -0.008550044, 0.0306511, -0.03392717, -0.014916042, -0.0070981495, -0.023652226, -0.00032807226, -0.012880907, 0.026233371, 0.03908946, 0.023031758, 0.011826113, 0.0014681815, -0.039337646, -0.048024192, -0.0021980065, -0.05425369, 0.033455614, -0.013302825, -0.008357699, 0.0040485514, 0.022163102, -0.017174544, -0.00034765576, -0.036632407, 0.013774381, 0.051225808, -0.0005467871, 0.008761003, -0.0003055803, -0.027350213, -0.02416101, 0.005947182, 0.0071043544, -0.0045294138, -0.016082522, 0.008779617, -0.034969553, -0.014258346, 0.009164306, -0.0023252023, 0.004420832, 0.06522355, -0.013724743, -0.01216737, 0.002053748, -0.0017838444, 0.00871757, -0.0056183343, -0.017522005, 0.017695736, 0.0051746997, -0.018130064, 0.0027300576, -0.030129908, 0.045170043, 0.022535384, 0.0041726446, -0.027846586, 0.018614028, -0.009666885, 0.016020473, 0.041819517, 0.016765036, -0.016442392, 0.03563966, 0.0017155929, 0.023478495, -0.020810483, 0.012930545, -0.014717492, -0.04499631, -0.047651913, -0.010014348, 0.02874006, 0.007780664, 0.0009733586, -0.008947143, -0.01702563, -0.019246906, 0.014307983, 0.006663822, -0.0018877727, 0.012347305, 0.025588084, 0.005587311, 0.02359018, 0.019408228, -0.010976072, -0.020028695, 0.031544574, -0.025712177, -0.0089223245, 0.018055608, -0.042638533, -0.0051064487, 0.052020006, 0.019296544, -0.0035242562, -0.037476245, -0.011162212, -0.019308953, -0.033951987, -0.033629347, 0.014878813, 0.006120913, 0.031494938, -0.044226933, 0.059465617, 0.015598556, 0.019966647, -0.003266762, -0.00058828085, -0.0023112418, -0.002540815, -0.034820642, 0.0056834836, 0.010597587, -0.013687516, 0.007886143, -0.0052274396, 0.05326094, 0.013923293, 0.021517817, 0.00073913205, -0.026804201, -0.035217743, -0.043358278, 0.015735058, -0.019197268, 0.02546399, 0.049364403, 0.022485746, 0.022634659, -0.018862216, -0.0026757666, -0.0029146466, -0.03851863, -0.044152476, -0.036359403, -0.058175042, -0.06447899, -0.025029663, 0.013675107, 0.041248687, 0.023813548, -0.024595337, 0.015797105, 0.004845852, 0.010436266, -0.011056733, 0.023329582, 0.0117392475, -0.063635156, -0.0053329193, 0.009865435, -0.02834296, 0.0096855, -0.015064954, 0.0029115444, 0.030874468, -0.015040135, 0.009195331, -0.021902507, -0.0012548957, 0.008512815, 0.036260128, -0.02146818, -0.022957303, 0.004616279, 0.013848837, 0.005159188, -0.0097661605, 0.03142048, 0.020239653, 0.030030632, -0.014034977, 0.0016457904, 0.01358824, 0.047254812, -0.036359403, -0.028516691, 0.029261252, 0.035738934, -0.026283009, 0.011156008, -0.00958002, -0.0039616856, -0.0012207701, -0.010727885, -0.017670918, 0.0245457, 0.019792916, 0.020574706, 0.04690735, -0.048843212, -0.0152510945, -0.021803232, -0.0067382785, 0.026357464, -0.016355526, 0.012769223, 0.030527007, 0.026977932, -0.015027726, -0.019706052, -0.025327489, -0.012198393, 0.031172292, -0.030502189, -0.032239497, 0.024223056, 0.08388722, -0.00234847, -0.017559234, 0.0014433628, -0.02128204, -0.024707021, -0.0005068445, -0.0013851939, -0.0013471904, -0.00021483691, 0.013377282, -0.0076255472, -0.0051498814, -0.05137472, -0.05802613, 0.0051715975, 0.023825957, 0.011435218, 0.032735873, 0.02011556, 0.00039865045, 0.010858184, 0.0052522584, 0.0022243764, -0.00832047, 0.043953925, -0.0371536, 0.020078331, 0.022944892, -0.0624935, -0.019780507, 0.014320392, 0.0059626936, 0.02262225, 0.006930623, -0.0011858688, 0.00026369875, -0.031817578, 0.024992436, 0.013265598, -0.031817578, 0.012769223, -0.014605808, 0.0034994374, -0.033306703, -0.025513628, 0.05192073, 0.027499124, -0.024570517, 0.04502113, -0.067755066, -0.00042230578, 0.022349244, 0.02107108, 0.00080971024, 0.018676076, -0.009617248, 0.0056958925, -0.0040423465, 0.012415557, -0.025836272, -0.047279634, 0.019234495, -0.053608403, 0.0337038, -0.0045201066, -0.011236669, -0.057777945, -0.008978167, 0.008723775, -0.00030267186, -0.0017745374, -0.057579394, -0.0112490775, 0.02717648, 0.01780742, -0.019197268, 0.0016550974, 0.10503276, -0.0052615656, -0.021021442, 0.046262067, -0.00851902], [0.008956671, 0.014922054, -0.02409075, 0.033717882, -0.00039898156, 0.04804397, -0.021936106, 0.029706577, -0.012985166, -0.012308975, -0.023093654, -0.005441048, -0.013053931, -0.026612142, -0.029087689, 0.05867966, -0.051253013, 0.033465743, -0.0071974266, -0.014750141, -0.006097183, -0.071378306, -0.065281115, 0.03105896, 0.009615671, -0.0125611145, -0.023128036, 0.0018982067, -0.010584114, 0.026887203, 0.0040943963, 0.008635766, 0.027024733, 0.00671034, 0.020492036, -0.023334332, -0.0046531134, -0.002131722, -0.032640558, 0.030738056, -0.06592293, 0.003226235, -0.011564018, -0.01910527, 0.016515115, -0.034451377, -0.04160296, 0.007833505, 0.0009233164, 0.010154331, 0.005383744, -0.03002748, 0.0054181265, -0.007569905, -0.022348698, 0.035368245, 0.043001186, -0.08829455, 0.007289114, -0.028102055, -0.028079133, 0.013466523, 0.021156767, -0.043505464, -0.0012220154, 0.016469272, -0.029660733, 0.009397914, 0.059046406, 0.009048358, -0.0029683656, 0.014509462, -0.024136594, 0.015987914, -0.000875324, -0.091686964, 0.08169308, 0.011432218, -0.01539195, -0.015953531, -0.0029855568, -0.032594714, 0.0075126006, 0.019930454, 0.027735308, -0.054691274, 0.054186996, -0.07247855, -0.015827462, -0.012148523, -0.006332131, 0.04476616, 0.0066644964, -0.037179064, -0.01724861, -0.00043121525, 0.002600185, 0.013936419, -0.016492194, -0.013455062, -0.018005028, -0.033878334, -0.049281742, -0.08801948, 0.0014927784, 0.025374368, 0.03768334, -0.035712074, -0.016217131, 0.06688564, 0.014761602, -0.0060112267, -0.043253325, 0.002918224, -0.027597776, 0.042428143, -0.019804385, -0.047035415, -0.04513291, 0.00072131853, -0.060467552, -0.019288646, 0.050565362, 0.025741115, -0.010383549, 0.039035726, 0.010521079, 0.03688108, 0.014360471, 0.0051287394, -0.0039941133, 0.061292738, 0.07197427, 0.00519464, 0.05478296, 0.0056301528, 0.041259136, 0.018681219, -0.043024108, -0.0116614355, -0.02580988, -0.0045728874, -0.015999375, 0.031288177, -0.027918682, -0.005527005, -0.034978576, -0.024526263, -0.010773218, -0.020297201, -0.023769846, -0.042542752, -0.032365497, -0.021569358, 0.04226769, -0.016629724, 0.036010057, 0.04199263, -0.020744177, 0.011804697, -0.0011253143, -0.073899694, 0.0163432, 0.023139497, -0.026818438, -0.100213856, 0.051161326, 0.032044593, -0.036376804, 0.003856583, 0.03461183, -0.014371932, 0.02013675, 0.0016618263, -0.0046960916, 0.03793548, 0.028102055, -0.0022162457, -0.01080187, -0.037179064, -0.04199263, 0.044697396, 0.04226769, -0.032227967, 0.007065627, 0.010544001, 0.0006504044, 0.01461261, 0.008217445, -0.050473675, -0.0038222005, 0.00986781, -0.010956592, -0.027712384, -0.0064180875, -0.023116576, -0.043665916, -0.060880143, -0.013936419, 0.0009254653, 0.0042691743, -0.043780524, -0.006177409, -0.024388732, -0.031815376, 0.024503341, 0.008910827, 0.00056194083, 0.01118581, 0.0031746612, 0.04582056, 0.03843976, 0.0018609589, -0.01883021, -0.014853288, -0.01040074, -0.04169465, 0.044147275, -0.011558288, -0.06615215, 0.07247855, -0.007438105, 0.02356355, -0.018635375, 0.037224907, 0.034680594, 0.031494472, 0.006481122, 0.0052462136, 0.016744332, 0.0014433534, -0.05304091, -0.05001524, 0.017982107, -0.06858185, -0.02580988, -0.04224477, 0.015036662, 0.051436387, -0.012446506, -0.0030228046, 0.059413154, -0.029454438, -0.027689463, 0.031242333, 0.028652176, 0.012205827, 0.0037677612, -0.0075126006, -0.005724705, 0.0019397524, -0.0065842704, 0.07371632, 0.021282837, -0.014394853, 0.06317232, 0.01315708, -0.038118854, -0.027941603, -0.022279933, -0.047172945, 0.046256073, 0.0042978264, 0.10232265, -0.028285429, -0.020641029, 0.056387484, -0.06496021, -0.06981962, -0.053361814, 0.020939011, -0.061751172, 0.03564331, 0.011426488, 0.015048123, -0.019185496, 0.022841515, 0.036697708, -0.01448654, 0.033626195, -0.003827931, 0.027735308, 0.016560959, 0.00816587, 0.03133402, 0.055012178, -0.030394228, -0.024342889, -0.044445258, 0.011065471, 0.008205984, -0.024113672, 0.02988995, 0.017134001, 0.056570858, -0.036628943, -0.008326323, 0.038921118, -0.03461183, -0.012790332, 0.004687496, 0.0020529286, -0.012847636, -0.074999936, 0.009707358, 0.018520767, -0.008876444, 0.1653116, 0.0028451611, -0.00559004, 0.047723066, 0.019391794, -0.0060914527, -0.04084654, 0.026291236, -0.024572106, 0.024297046, 0.026474612, 0.07380801, -0.021030698, -0.04002136, -0.026360003, -0.108282305, 0.021248454, 0.039264943, -0.032846857, -0.010211635, -0.0013273121, -0.042038474, 0.005767683, -0.049923554, 0.011827619, -0.00645247, -0.014922054, -0.013684279, -0.07697121, -0.015575323, -0.074999936, 0.008022609, -0.0057734135, -0.027735308, -0.005845044, -0.047677223, -0.028285429, -0.026795516, 0.024274124, 0.01197661, -0.01092794, 0.061934546, -0.045178752, 0.0013867654, 0.05950484, 0.040342264, 0.01830301, -0.005635883, 0.024136594, 0.0031689308, -0.05290338, -0.016962089, 0.010968053, 0.066656426, -0.037316594, 0.03713322, 0.05991743, -0.0013781697, -0.071653366, -0.037316594, -0.008922288, -0.049694333, 0.012538193, -0.050886266, 0.030462993, -0.020595184, -0.012056836, -0.031654924, -9.168697e-05, 0.012068297, -0.017684123, -0.033717882, 0.0012922132, -0.010234557, 0.015346106, -0.011386375, 0.0038995612, -0.027689463, 0.03186122, -0.045109987, 0.007844966, 0.04433065, 0.008658688, 0.019770002, 0.029935794, 0.007610018, -0.040479794, 0.020939011, 0.026405847, -0.036651865, -0.0019354546, -0.0045872135, 0.03461183, -0.00841801, -0.027781151, -0.00091113924, -0.02028574, 0.060375866, -0.010945131, -0.024732558, 0.0073234965, -0.014406314, 0.038508527, 0.009535444, 0.017993568, 0.0029655003, 0.004335074, 0.027024733, 0.012652801, -0.032823935, 0.023494786, 0.015346106, -0.019380333, 0.03225089, -0.08453538, -0.04763138, 0.07142415, -0.022016332, 0.031654924, -0.07394554, 0.030371306, 0.04570595, -0.060788456, -0.03779795, 0.005512679, -0.004974018, -0.024732558, 0.00841801, -0.046164386, -0.048273187, -0.04886915, -0.005263405, 0.03754581, 0.030715134, -0.027597776, 0.021706888, 0.007214618, -0.016767254, 0.024870088, -0.0079194615, 0.010905018, 0.018944819, 0.0018609589, -0.00017630043, -0.03672063, -0.023322871, -0.03277809, 0.0766503, -0.031838298, 0.031517394, 0.002999883, 0.0069567487, -0.08018025, -0.010973783, 0.021340141, 0.05592905, -0.014807445, 0.030233776, -0.023930298, -0.022417463, 0.015712854, -0.0076042875, 0.0059023486, -0.016217131, -0.006630114, -0.06876522, -0.001263561, -0.06239298, -0.03724783, -0.017202767, -0.021787114, 0.062026232, -0.064593464, -0.02223409, -0.06491437, -0.030073324, 0.04279489, 0.0012735892, 0.009546905, -0.018543689, 0.049281742, 0.03683524, 0.018257167, 0.021030698, 0.042886578, 0.03619343, -0.044514023, 0.010503888, -0.009787584, -0.035139028, -0.042565674, 0.010521079, 0.014154175, 0.012079758, 0.03474936, 0.01711108, 0.02238308, 0.029935794, -0.025443133, -0.0481815, -0.003607309, 0.0015973588, -0.06436425, 0.0075928266, -0.029683655, -0.038600214, -0.008137218, -0.03160908, -0.03330529, -0.018257167, 0.026680907, 0.039287865, 0.0037620307, 0.008354975, -0.04359715, -0.0339471, -0.016962089, -0.022990506, 0.019689776, 0.028881393, 0.016400507, -0.05409531, -0.05620411, -0.048914995, -0.009162966, 0.0025127959, 0.015770158, 0.01104828, -0.010607036, 0.045201674, 0.033098996, -0.051711448, 0.0402735, 0.0015328914, 0.076741986, 0.018578071, 0.0024239742, -0.019025045, 0.041029915, 0.008246097, 0.03633096, -0.0047619916, 0.030852664, -0.06198039, 0.040365186, -0.010647149, 0.06170533, 0.01066434, -0.011632783, -0.024297046, -0.02354063, 0.0069395574, 0.021695428, -0.008956671, 0.009386453, 0.07334957, 0.04721879, -0.019414715, -0.030485915, 0.04698957, 0.00078506966, -0.031975828, -0.0019025045, -0.021007776, 0.025076386, 0.0055441963, -0.010171522, -0.013019549, 0.043253325, 0.029958716, -0.056158267, -0.00020253507, -0.015254418, -0.012320436, -0.004578618, 0.016148366, -0.022520611, -0.0068536005, 0.016377585, -0.033053152, -0.027139341, -0.054828804, -0.0036416915, -0.029912872, 0.0145323835, 0.014177097, -0.010119949, 0.029523203, 0.04886915, 0.001974135, 0.0113004185, 0.016652646, 0.004157431, 0.01830301, 0.012515271, 0.002776396, -0.012320436, -0.017134001, -0.004294961, -0.0017735697, -0.01856661, -0.0049797483, 0.01329461, -0.03594129, 0.021500593, 0.04499538, -0.011220193, 0.03397002, -0.01303101, 0.011369184, 0.05262832, 0.02869802, 0.07004884, 0.021580819, 0.007598557, 0.06330985, -0.006750453, 0.04096115, 0.026222471, -0.02711642, -0.011988071, -0.008435201, -0.027735308, -0.022520611, 0.004753396, -0.027070576, -0.025580663, 0.0037992785, 0.034932733, -0.0011238817, 0.019701237, -0.03422216, 0.0011167186, 0.03866898, 0.034841046, 0.015357567, 0.017924802, -0.029133532, -0.039723378, 0.04357423, 0.014016645, 0.0056158267, 0.020675411, -0.012457967, 0.024388732, -0.027574854, 0.024388732, 0.014073949, -0.01829155, -0.011311879, 0.025718194, -0.020067984, 0.004524179, -0.037752107, -0.014922054, 0.00519464, 0.021145307, -0.03328237, -0.02277275, -0.009237462, -0.020709794, -0.0072490005, 0.03367204, 0.072432704, -0.055699833, -0.03580376, -0.03935663, -0.0545079, 0.008607114, -0.010882096, 0.018268628, -0.035345323, -0.016801637, -0.013374836, -0.03158616, -0.02739148, -0.037087377, -0.024824245, 0.0076902444, -0.019655393, -0.021764193, -0.0052318876, 0.026360003, -0.012320436, -0.03254887, -0.021821497, 0.039585847, -0.0075355223, 0.023231184, 0.010085566, 0.0026976024, 0.01343214, -0.011311879, -0.011008166, -0.008905097, -0.00080082833, 0.0031030306, 0.0133519145, 0.0018222785, 0.0046387874, 0.0069567487, -0.03314484, -0.0024053503, 0.021363063, 0.0050886264, 0.029729499, 0.05423284, 0.019666854, -0.00017253983, -0.004604405, -0.013363375, -0.06097183, 0.00552414, -0.023861533, 0.0013989425, 0.0012563979, -0.04400974, 0.038256384, -0.07367048, 0.01934595, -0.014818906, 0.033190683, -0.0033609003, -0.021168228, 0.02318534, 0.0057590874, 0.011758854, -0.011203001, 0.00960994, 0.014326088, 0.00064789737, 0.020377427, 0.0069223656, -0.0014648425, -0.038233463, -0.022807132, -0.046691585, -0.012606958, -0.015827462, 0.04566011, -0.025466055, 0.01382181, 0.014624071, 0.008326323, 0.0016475002, 0.014108332, -0.014887671, 0.020228436, 0.023769846, 0.04676035, -0.0011031087, 0.00015346822, -0.009162966, -0.025328524, -0.032296732, 0.0041001267, -0.009168697, 0.043688837, 0.013443601, 0.03672063, -0.023414558, -0.008612844, 0.027689463, 0.009701627, 0.05620411, -0.018738523, 0.0035757916, 0.041625883, 0.016790176, -0.023930298, -0.015426332, -0.03976922, -0.022463307, 0.018257167, -0.028652176, 0.008200253, -0.03754581, 0.042886578, 0.012400662, 0.0035041613, 0.0061143744, -0.012962244, -0.0014727219, 0.02608494, 0.02911061, 0.02367816, -0.009713088, 0.06253051, 0.0056015006, 0.05606658, -0.019552246, 0.05359103, 0.013924958, -0.004360861, -0.013237306, 0.012778871, 0.009827697, 0.019025045, -0.03660602, -0.0132716885, -0.019254263, -0.055149708, 0.01118008, 0.035116106, 0.020388888, 0.023861533, 0.027735308, -0.010652879, 0.036101744, 0.024388732, -0.021569358, 0.0017348893, 0.014761602, 0.0052548093, -0.032915622, 0.03188414, -0.0049539614, 0.03910449, 0.034703515, 0.013008088, -0.027208107, -0.02766654, -0.007340688, -0.043620072, -0.018749984, -0.024847167, -0.0018294415, 0.029362751, -0.0067848354, -0.033236526, 0.067573294, 0.013145618, -0.007753279, -0.0050084004, -0.0126413405, -0.026795516, -0.032044593, -0.012331896, 0.035734996, -0.008887906, 0.014864749, 0.004183218, 0.04054856, 0.029293986, 0.021798575, 0.010578384, -0.008933749, -0.012584036, -0.02514515, -0.05148223, 0.01815402, -0.020641029, -0.021970488, 0.017684123, 0.033901256, 0.018910436, -0.019403255, -0.009432296, -0.027322715, -0.007082818, -0.04263444, -0.018073794, -0.07266192, -0.023024889, -0.0060456092, 0.019036505, 0.014853288, 0.012412122, -0.01698501, 0.02117969, -0.0037964133, 0.023746924, -0.0039969785, -0.010102757, 0.018486384, -0.02686428, -0.032090437, 0.00026700247, -0.03188414, 0.0027491762, -0.010320514, -0.049831867, 0.022406003, -0.010062644, 0.00631494, 0.041786335, 0.025099307, -0.0040628784, -0.0024511938, -0.009930844, -0.0032090438, 0.006991131, 0.026910124, 0.0015715719, -0.01473868, 0.013798888, -0.026520455, 0.031356942, 0.001684748, -0.001988461, 0.03353451, -0.006137296, -0.053911936, -0.007776201, 0.01790188, 0.025122229, -0.08008856, 0.04043395, -0.024274124, -0.011953688, 0.00075785007, 0.016538037, -0.041786335, 0.022818593, 0.023494786, -0.027299793, 0.028124977, -0.0031488743, -0.0059653833, -0.0012714403, 0.01383327, 0.024388732, -0.040181812, 0.026405847, -0.0052949223, 0.044582788, -0.0057189744, -0.032594714, -0.026291236, -0.015735775, 0.001494211, -0.021088002, 0.013970802, 0.035689153, 0.07330373, -0.0049682874, -0.008177332, 0.01593061, -0.0584046, -0.0028809763, 0.046301916, -0.008074183, -0.029523203, 0.0063665137, 0.03435969, -0.03369496, 0.014314627, -0.0015486501, -0.0026890067, 0.0107101835, 0.055745676, 0.0088993665, 0.016824558, 0.010521079, 0.001640337, -0.011781775, 0.0020715524, 0.010435123, 0.010131409, 0.011082662, 0.0014010915, -0.021832958, 0.019357411, -0.023093654, 0.015999375, 0.022165325, -0.016916245, 0.019036505, 0.016091062, 0.021890262, 0.011770315, -0.005948192, -0.0040084394, 0.04373468, -0.049144212, -0.020446192, 0.006355053, -0.032205045, 0.0050227265, -0.01513981, 0.034841046, 0.016629724, 0.008320592, 0.03843976, -0.040594403, 0.018807288, 0.018406158, -0.018131098, 0.0026173764, 0.012159984, 0.0065670786, -0.028652176, -0.027345637, -0.006899444, -0.041878022, -0.011122775, 0.03241134, -0.073395416, 0.0113806445, 0.03408463, -0.009340609, -0.06019249, -0.011535366, 0.016939167, 0.008148679, -0.009821966, 0.006876522, -0.026016176, 0.061063517, 0.031792454, -0.02856049, 0.0026947372, 0.16201086, -0.011288958, 0.023242645, -0.015036662, 0.015449254], [0.016614608, -0.0042083054, -0.025820656, 0.054458994, 0.0022028324, 0.02442396, -0.023318749, 0.018011304, 0.00033494135, 0.05402177, -0.056402225, -0.005662691, 0.019578032, -0.04622456, 0.021156907, 0.043334007, -0.033739313, -0.0017853417, -0.061114553, 0.0011014162, -0.0100501375, -0.05334164, -0.049795244, -0.006333712, 0.031893246, -0.010214098, -0.023585944, -0.012643134, -0.022687199, 0.019517306, 0.048459273, 0.01748906, 0.026597947, 0.019262258, 0.056645125, -0.036386963, -0.01779269, -0.011398253, -0.037650064, 0.0074389237, -0.04994099, 0.008197998, 0.02036747, -0.051252667, -0.018715724, 0.02165486, -0.01403983, -0.002128443, -0.026112141, -0.0026840852, -0.008623079, 0.005632328, -0.03891316, -0.009552185, -0.0015439562, 0.03143173, 0.055770673, -0.0020176184, 0.08054684, -0.010244461, -0.055624932, 0.041245036, 0.036969934, -0.011033897, -0.025553461, 0.0013541877, -0.018800741, 0.0071656574, 0.048337825, 0.024691153, -0.023974588, 0.004985597, -0.0032609813, -0.01272815, -0.023755975, -0.037188545, 0.06767295, 0.033982217, -0.013991249, 0.013371845, 0.0287355, -0.025626333, 0.0048459275, -0.026403625, 0.04148794, -0.016772496, 0.045568723, -0.10133939, -0.03213615, 0.0053803152, 0.01774411, 0.038524516, -0.0005514672, 0.03816016, -0.05955997, 0.03259767, -0.025504882, 0.009388225, -0.047050435, 0.002076826, 0.005043287, -0.029731404, -0.08865982, -0.024387525, 0.017003255, 0.005899522, 0.029609952, 0.02006384, -0.008817402, 0.00041331572, -0.011131059, -0.006424801, 0.014792832, 0.024035314, -0.0126188435, 0.041900877, -0.01265528, -0.06033726, -0.037188545, 0.005541239, -0.077000454, -0.028516887, 0.055916417, 0.051544152, 0.024970494, 0.036508415, 0.001552306, 0.050038148, 0.009952976, -0.023938153, -0.042313814, 0.035026703, 0.03152889, 0.019954534, 0.027593853, -0.014428476, 0.022444295, -0.023670958, -0.042046618, -0.013274684, -0.030290082, 0.029367048, -0.02878408, 0.03087305, -0.04474285, -0.0032427635, -0.016845366, -0.02735095, -0.047924887, -0.0020236908, -0.030921632, -0.044451363, -0.018460676, -0.01204802, 0.03077589, -0.00635193, 0.002570224, 0.016942529, -0.009564331, 0.03820874, -0.011137132, -0.04615169, 0.003424941, 0.04554443, 0.0021815782, -0.08312162, 0.0562079, 0.010863865, -0.045665883, 0.04160939, 0.019833082, -0.031043084, 0.019565888, 0.0057082353, -0.015788736, 0.032306183, 0.02871121, 0.023476636, -0.0064673093, -0.07782632, -0.034662347, 0.05300157, 0.053730283, -0.031237407, 0.014877847, 0.044985753, 0.015642993, 0.0013724056, 0.020221727, -0.03135886, -0.015521542, 0.00047859605, -0.05280725, -0.0048064557, -0.046273142, -0.007949022, -0.0052436823, -0.053293057, 0.0040322, 0.0058934493, 0.012691715, -0.02404746, 0.033204928, -0.018569984, -0.022164956, 0.019250114, 0.03687277, 0.0016228999, 0.0040838174, -0.016080221, 0.028856952, 0.039739035, -0.009625057, -0.020233873, -0.0058813044, 0.018788597, -0.05334164, 0.016444575, -0.036386963, -0.033739313, 0.06271772, -0.052078538, 0.012485247, -0.021606278, -0.014027685, 0.036386963, 0.029269887, 0.0034097598, 0.044961464, 0.0547019, -0.005653582, -0.04398985, -0.00016339065, 0.016578173, -0.088028274, 0.01204802, -0.035561092, -0.0053408435, 0.027788175, 0.009716146, 0.0076271743, 0.045908786, -0.052224282, -0.019116515, 0.003010487, 0.034540895, 0.009248556, 0.011446834, -0.024812605, -0.0036860625, -0.025966398, 0.0016760351, -0.0016001277, 0.025602043, 0.020598227, 0.10639179, 0.03949613, -0.052029956, -0.0018460676, 0.018533546, -0.024764026, 0.04933373, -0.03281628, 0.07350264, -0.0030378136, 0.016978964, 0.008732386, -0.057082355, -0.07253102, -0.023379475, -0.011714027, -0.027982498, 0.023804557, 0.021290503, 0.04610311, -0.03733429, 0.03675132, 0.044912882, -0.030824471, 0.0627663, 0.019918097, 0.03888887, -0.00836803, -0.0043904833, 0.025942108, 0.04622456, -0.04343117, -0.021837037, -0.027763885, -0.007226383, 0.0010323405, -0.05484764, 0.056499384, 0.010378058, 0.057179514, 0.005413715, 0.017476916, -0.0003717564, -0.046054527, 0.028638339, -0.041075002, -0.0037801878, -0.02339162, -0.059997197, -0.03475951, 0.02807966, 0.0015758373, 0.09274061, 0.009588621, -0.02013671, 0.06820734, -0.00073516305, -0.031237407, -0.027472401, 0.04345546, -0.013663329, -0.011392181, 0.018667145, 0.07981814, -0.032524798, -0.012460956, -0.042726748, -0.10804354, 0.027472401, 0.024897622, -0.02548059, -0.020646809, 0.00075603754, -0.04894508, 0.015922332, -0.06344643, -0.02280865, 0.0017322066, 0.015193623, -0.047341917, -0.09891036, -0.028541178, -0.054118928, 0.0057416344, 0.024970494, -0.00082587235, 0.013153232, -0.050038148, -0.048410695, -0.00449979, -0.045252945, 0.002846527, 0.004915762, 0.041196454, -0.05800539, 0.0014354086, 0.029755695, 0.029051274, 0.015436525, 0.001644154, -0.007451069, -0.019262258, -0.011513632, -0.044014137, -0.029124146, 0.07311399, -0.07539729, -0.0026370226, 0.058636937, 0.011088551, -0.0026597949, -0.053730283, -0.00054539455, 0.014889993, 0.011847625, -0.021764165, 0.024241783, -0.030387245, -0.022286408, -0.03609548, -0.011987294, 0.069324695, 0.0023182116, -0.022577893, -0.00063382665, -0.014707815, -0.065681145, -0.022723636, 0.035682544, 0.026816562, 0.0046728584, -0.053633124, 0.02737524, 0.022602184, -0.016918238, 0.001818741, -0.018242063, 0.0019508197, 0.009643274, 0.031893246, 0.021254068, -0.018569984, 0.03080018, 0.016189527, -0.0059784655, -0.0084409015, 0.026549367, -0.022687199, -0.03813587, 0.0016608536, -0.00610599, -0.0025337886, -0.00024404224, -0.026889432, 0.049212277, -0.024666864, 0.03203899, -0.0073235445, 0.06334927, 0.007608956, 0.05028105, 0.011465051, -0.003412796, 0.025942108, 0.0012972573, 0.046540335, -0.03813587, -0.0030332592, 0.01504788, -0.02871121, 0.027132336, -0.027399529, 0.022723636, -0.01774411, -0.03347212, -0.028832661, -0.007979385, -0.02742382, -0.0010900301, -0.023403766, -0.035682544, -0.057713903, -0.03267054, 0.005012924, 0.034540895, 0.0020434267, -0.025577752, -0.0011985776, 0.07010199, -0.04697756, -0.03293773, -0.05339022, -0.0007268132, 0.06631269, -0.029318469, -0.019019354, -0.003965402, -0.059025582, -0.010973171, 0.036702737, -0.001223627, 0.009291064, 0.023197297, -0.0023303567, -0.07724336, -0.0026355044, 0.016991109, 0.051884215, 0.017185433, 0.014003394, 0.015983058, -0.027205206, 0.020027405, -0.0064976723, 0.014088411, -0.0166389, 0.0059754294, -0.0041749063, 0.030848762, -0.024302509, -0.008295159, -0.009691855, 0.008957071, 0.07102502, -0.02674369, -0.039739035, -0.012764586, 0.014258443, 0.026500786, 0.04432991, -0.018193481, 0.019165097, -0.00088356197, 0.05951139, 0.034395155, -0.024290362, 0.07296825, -0.017294738, 0.001160624, -0.035779703, -0.042605296, -0.029731404, -0.036362674, -0.0022468586, -0.030411534, 0.038645968, 0.07996388, 0.06004578, 0.02182489, -0.004472463, -0.01000763, -0.020877568, -0.0075178673, 0.028929822, -0.032524798, 0.023464492, -0.049795244, -0.026233593, -0.009206047, -0.021788456, -0.0048459275, -0.016699625, 0.019432291, 0.015230058, 0.04296965, 0.015108606, -0.046928983, -0.056547966, -0.027132336, -0.021922052, 0.004554443, 0.007329617, 0.017987015, 0.04279962, -0.0036951716, -0.04075923, -0.0012342541, -0.02531056, -0.0046698223, -0.009224266, -0.03415225, 0.034662347, 0.018351369, -0.043771233, 0.025553461, -0.052758668, 0.043285426, 0.0040838174, 0.022930102, -0.019590179, 0.0413422, 0.050475374, 0.0052406457, -0.015497251, 0.03752861, -0.043722656, 0.07019915, 0.012716006, 0.029197017, 0.0032306183, -0.01068776, -0.03816016, -0.034419443, 0.0061211716, 0.0010710532, -0.008598789, 0.026185011, 0.055867836, 0.011428616, -0.0030150414, -0.057908226, 0.06694424, 0.024253927, -0.029974308, 0.0047882376, -0.006661632, 0.04671037, 0.003670881, -0.0067102127, -0.0486536, 0.055770673, -0.019128662, -0.024533266, 0.010183735, -0.0011758053, -0.025772076, -0.011428616, -0.01711256, -0.04962521, 0.0023789376, 0.0058570136, -0.020343179, -0.04797347, -0.021314794, -0.012849602, -0.029221307, 0.03361786, -0.012643134, -0.014537782, -1.5442409e-05, 0.0068316646, 0.020428196, -0.0027584743, 0.0247033, 0.043601204, 0.01406412, -0.02374383, 0.013274684, 0.009716146, -0.04680753, 0.0019128661, 0.02006384, -0.053293057, 0.023197297, 0.021776311, -0.035099573, 0.04277533, 0.056547966, -0.018497111, 0.0044542453, 0.0014338905, -0.006722358, 0.06223191, 0.024970494, 0.06320353, 0.058977, -0.0055655297, 0.076563224, -0.04875076, 0.023816701, -0.013286829, -0.018509258, 0.004739657, -0.028468305, -0.019748066, -0.017622659, -0.03199041, 0.0150964605, -0.02266291, 0.03463806, 0.03619264, 0.025334848, 0.038281612, -0.01403983, 0.012224126, 0.039714742, 0.04671037, 0.03429799, 0.10095075, -0.028152531, -0.011240366, 0.033909347, 0.02669511, 0.062183328, 0.0018521402, -0.048896503, 0.029731404, -0.011963004, 0.047074724, 0.009485387, -0.0073235445, -0.002509498, 0.03944755, -0.025067655, 0.029124146, -0.032549087, -0.046394594, 0.025091944, 0.03152889, 0.012497392, -0.0039016395, -0.0027812466, 0.01535151, 0.016954673, 0.01731903, 0.07515439, -0.023549506, -0.033690732, -0.025966398, -0.04697756, -0.03271912, 0.003834841, 0.016165236, -0.0147563955, -0.03558538, -0.004472463, -0.019250114, -0.019140806, 0.0029376158, 0.008289087, 0.003698208, -0.04544727, -0.009649347, -0.019432291, 0.00477002, 0.033034895, -0.035949737, -0.016966818, 0.038427353, -0.007183875, 0.0013405244, 0.0065583983, -0.020416051, -0.0042204508, -0.003330816, -0.0027736558, -0.011082478, -0.022590037, -0.03497812, 0.025213396, 0.012394158, -0.0034036872, -0.016347414, -0.05538203, -0.009254629, 0.023585944, -0.0060270466, 0.03004718, 0.06951902, 0.026476495, 0.003197219, -0.008125126, 0.008082618, -0.061697524, 0.03740716, -0.0040261275, 0.0071049314, 0.0065037445, -0.025723495, 0.034613766, -0.0441113, 0.0630092, -0.0033125982, 0.040370584, -0.005189029, 0.019954534, -0.011428616, -0.007305327, 0.0065280353, -0.011592576, -0.0025778147, -0.009606838, -0.010116937, 0.030265793, 0.01019588, -0.005559457, -0.0068195197, -0.036338385, -0.055236287, 0.008981362, -0.005598929, 0.016602464, 0.009145321, 0.0054501505, -0.001254749, -0.01938371, 0.002363756, 0.012199835, -0.022626473, 0.0041263252, 0.057082355, 0.009060306, 0.004642496, -0.0004182497, -0.033083476, -0.041585103, -0.007669682, -0.021096181, 0.001706398, 0.023233732, -0.014622798, -0.0028951077, -0.037771516, 0.023913862, 0.006424801, -0.0057719974, 0.061940428, -0.01174439, -0.04160939, 0.0031015757, -0.0071595847, 0.010754558, -0.021411955, -0.016553883, -0.00060460233, 0.017816981, 0.012321287, 0.00075717614, -0.018740015, 0.05008673, 0.021642713, -0.014634944, -0.03539106, 0.023160862, 0.010293041, 0.013043925, 0.008756676, 0.023549506, -0.013578313, 0.063737914, -0.010705978, 0.036338385, -0.013311119, 0.046418883, 0.023403766, -0.018387806, -0.058442615, 0.0036921352, 0.022298554, 0.0040564905, -0.023537362, -0.027083755, -0.040564906, -0.060288683, 0.032330472, 0.025261978, 0.015934478, -0.005929885, 0.028905531, -0.0006569784, 0.03998194, 0.0031607836, -0.009552185, -0.009691855, 0.016395995, 0.0057902155, -0.040613487, -0.00013445095, -0.0053317347, 0.018958628, 0.027496692, 0.003792333, -0.03531819, -0.03429799, -0.016857512, -0.058928423, -0.031626053, -0.045763046, 0.001243363, -0.015898043, 0.044694267, -0.02379241, 0.064612366, -0.018484967, 0.0041991966, 0.012412376, -0.031893246, 0.026427915, 0.019189388, -0.039253227, 0.03599832, -0.017549787, 0.018849323, -0.019748066, 0.023002975, 0.057373837, 0.037139967, -0.015837317, -0.0014870256, -0.0028647447, -0.010906373, -0.05883126, 0.021436246, -0.0033551063, 0.008805256, 0.031188827, 0.03675132, 0.0015712829, -0.024788316, -0.0085077, -0.00096022844, -0.015266493, -0.038937453, -0.019335128, -0.048313532, -0.034492318, 0.017355464, 0.009005652, 0.03599832, 0.008957071, -0.03288915, -0.0012957391, -0.026476495, 0.015521542, -0.007463214, 0.013663329, 0.006825592, -0.047876306, -0.010463074, -0.03349641, -0.04357691, 0.010274824, 0.007857933, 0.0038560953, 0.024994783, -0.0017929324, -0.010286969, 0.003525139, -0.0013959368, 0.00575378, -0.010317332, -0.017901998, -0.020452486, -0.029002694, 0.035075285, 0.004460318, 0.00267194, -0.010857793, 0.007675755, 0.008125126, -0.022322845, 0.01406412, 0.028419726, 0.027739596, -0.03211186, 0.007894368, -0.010627034, 0.04933373, -0.03879171, 0.051544152, -0.01999097, -0.047609113, 0.0020085094, 0.0008197998, -0.029537082, 0.023185153, 0.03743145, 0.034200832, 0.045641594, -0.026330754, 0.009789016, 0.013991249, 0.026257882, -0.005444078, -0.017306883, 0.024266073, 0.014319169, 0.024691153, 0.0012904255, 0.0027478472, -0.0150357345, -0.013262538, 0.024715444, -0.023027264, -0.01908008, 0.043674074, 0.08890273, 0.0027417748, -0.011993367, 0.0038166232, -0.02599069, -0.0020616446, 0.036508415, 0.01706398, -0.031140245, -0.023962444, 0.03626551, 0.008094763, -0.0032336547, -0.0107302675, 0.01272815, -0.0049673794, 0.029731404, 0.012114818, 0.012382013, -0.018387806, -0.019493017, -0.014088411, 0.0014703261, 0.0017686421, -0.030435825, 0.014270589, -0.006136353, 0.0024244818, 0.022869376, -0.0494066, 0.003974511, 0.057665322, 0.011750463, 0.037164256, 0.0117201, 0.015667284, 0.0015682465, -0.03259767, 0.020525357, 0.039787617, -0.061989006, -0.010171589, -0.020537501, -0.015278638, -0.021363374, -0.04012768, 0.04398985, 0.033666443, -0.01595877, 0.054944802, -0.03998194, 0.009436806, 0.04622456, 0.0065948335, 0.014549928, -0.008465191, 0.024496831, 0.0131167965, 0.0017048799, -0.013043925, -0.048386402, -0.0617461, 0.015825171, -0.069178954, 0.025869237, -0.02250502, 0.018970774, -0.041730843, -0.005231537, -0.006011865, -0.015873753, -0.020598227, 0.003968438, -0.011902278, 0.03607119, -0.0004026887, -0.010274824, 0.017379755, 0.089194216, -0.017306883, 0.0067466483, 0.028832661, -0.00021007369], [0.027191086, -0.006151197, -0.03669748, 0.03627808, -0.005297835, 0.024628088, -0.046483476, 0.013304293, -0.0039406107, 0.07269596, -0.028612386, 0.0016455617, -0.016741041, -0.00995492, 0.025443587, 0.01879144, -0.0006007028, 0.011912119, -0.029288085, -0.017486641, -0.006238572, -0.08471876, -0.06631177, -0.013432443, 0.0051463847, -0.012535393, -0.030965684, -0.009494745, 0.026981387, 0.00973357, 0.03783918, 0.031944282, 0.029218186, -0.009797645, 0.023171838, -0.035951883, -0.01073547, 0.025490187, 0.007461821, 0.010636444, -0.051586173, 0.021121439, 0.004263898, -0.016076991, -0.049209576, 0.0070715463, 0.028169686, -0.046669878, -0.008259846, -0.055081174, -0.030476384, 0.005227935, -0.006337597, -0.013269343, -0.02113309, 0.0023751426, 0.029497785, -0.010432569, 0.06766316, -0.012302394, -0.035788782, 0.01866329, 0.00118029, -0.00865012, -0.031315185, -0.01980499, -0.022938838, 0.0014635305, 0.062770166, 0.053543374, -0.024371788, 0.006553122, -0.00826567, 0.028658986, 0.022612639, -0.06887477, 0.07931316, 0.032992784, -0.010333545, 0.030476384, 0.071484365, -0.025233887, 0.028006585, -0.002447955, -0.0011788338, -0.016391542, 0.01873319, -0.11547474, -0.032247182, 0.02034089, 0.008807396, 0.0071064965, 0.033155885, 0.012348994, -0.037186783, 0.011574269, -0.01918754, 0.01943219, -0.015133343, 0.03383158, 0.005877422, -0.034507282, -0.061931368, -0.06412157, 0.01911764, 0.014178043, 0.0036085856, 0.025490187, -0.02121464, -0.013141193, -0.013490694, -0.009657845, -0.033738382, -0.0146556925, -0.035532482, 0.007741421, -0.04019248, -0.09338635, -0.01830214, -0.016845891, -0.051120173, -0.026981387, 0.08821376, 0.023113588, 0.007817146, 0.027587187, 0.023008738, 0.05498797, 0.018511841, -0.031128785, -0.023101939, 0.043128278, 0.027354186, 0.008714195, 0.033482082, -0.0011882994, 0.05792377, -0.011900469, -0.032992784, -0.019665191, -0.06398177, 0.007659871, -0.004983285, 0.0028790047, -0.042289477, -0.014842092, -0.032713182, 0.005693935, -0.051632773, -0.04559808, -0.03837508, -0.030942384, -0.030010385, 0.007799671, 0.028425986, -0.008568571, 0.047392175, 0.010933519, -0.0016848803, 0.050374575, 0.00973357, -0.070039764, -0.007986071, 0.048137777, 0.04303508, -0.015214892, 0.023206789, -0.024744587, -0.020049639, 0.029264785, 0.02136609, -0.01653134, 0.0042901104, 0.02241459, -0.008172471, 0.008341396, 0.038771182, 0.02003799, -0.004077498, -0.048463974, -0.03627808, 0.05964797, 0.03383158, -0.025769787, 0.03837508, 0.04012258, 0.051819175, 0.030662784, 0.034507282, -0.02051564, -0.03536938, -1.7224698e-05, -0.02142434, 0.027121186, -0.024255287, -0.014317843, -0.0009130683, -0.02226314, -0.015902242, -0.0063201217, 0.025606686, -0.048044577, 0.04478258, -0.01910599, 0.02177384, 0.01809244, 0.05806357, -0.0071880464, 0.002436305, 0.03700038, -0.025793087, 0.029917184, 0.00446486, -0.044712678, -0.016356591, 0.012057744, -0.030639485, 0.015051792, -0.053217173, -0.02052729, 0.046763077, -0.030919084, 0.025676588, 0.0002588483, -0.047508676, 0.027913386, 0.041683678, 0.0103451945, 0.046949476, 0.032177284, 0.011347095, -0.06868836, -0.036883883, 0.01745169, -0.09935115, 0.050793976, -0.045458276, -0.032759782, 0.0044415602, -0.0023008739, 0.01022287, 0.025070786, -0.027400786, -0.02172724, 0.022635939, 0.026538687, 0.03704698, -0.02318349, -0.021913638, 0.036254782, -0.017975941, -0.030196784, -0.012150944, 0.045015577, 0.0074385214, 0.082761556, 0.06612536, -0.030825885, -0.04077498, -0.0039697355, -0.016869191, 0.06496037, -0.026818287, 0.03730328, -0.0089471955, -0.0056036473, 0.015226542, -0.04082158, -0.08350716, -0.03893428, 0.015226542, -0.03306268, 0.030173484, 0.04238268, 0.032829683, 0.00438331, 0.03849158, 0.0067278715, -0.04436318, 0.07595796, 0.0041037104, 0.029101685, -0.023195138, 0.024721287, -0.024674688, -0.00066113716, 0.026189188, -0.026235787, 0.026352286, 0.0022164113, -0.022729138, -0.022484489, 0.05494137, -0.04131088, 0.013642143, -0.032619983, 0.024884388, -0.004170698, -0.005760922, -0.00433671, 0.00038226543, -0.018127391, -0.029404584, -0.011317969, 0.011224769, 0.02155249, -0.0010601495, 0.07059897, -0.025699887, -0.07563176, 0.02149424, -0.020818539, -0.019001141, -0.047322277, -0.024558188, -0.026095986, 0.002359124, 0.03571888, 0.037792582, -0.03460048, 0.022216538, -0.047951374, -0.10196075, 0.034111183, -0.01033937, -0.025350388, -0.006203622, -0.024744587, -0.0050269724, 0.0027290112, -0.031338483, 0.0045609726, -0.016682792, 0.0064715715, -0.028658986, -0.09907155, -0.041380778, -0.08099076, 0.025000887, -0.033272382, -0.003154236, 0.01870989, -0.04107788, -0.02060884, 0.0046599978, -0.04012258, -0.023416488, -0.0018144866, 0.012523743, -0.0053240475, 0.0013062556, 0.01732354, -0.013898443, 0.02108649, 0.014317843, -0.016042043, -0.02002634, -0.049535774, -0.014259593, 0.027796887, 0.064913765, -0.07479296, 0.015832342, 0.08369356, 0.02074864, 0.020736989, -0.0045027225, 0.0025906675, 0.013898443, 0.026352286, -0.030709384, 0.04221958, -0.016601242, -0.02020109, -0.052378375, -0.008620996, 0.06962036, -0.008556921, -0.018768141, 0.01919919, 0.0053444346, -0.0040629352, -0.011714069, -0.013642143, -0.007589971, 0.028961886, 0.0068035964, 0.0149119925, -0.012943143, -0.04513208, 0.008347221, 0.050840575, 0.02106319, 0.009657845, -0.0006087122, 0.045504875, -0.04119438, 0.07973256, -0.007822971, -0.0054026847, -0.023171838, 0.022903888, -0.07414056, -0.046949476, 0.026026087, -0.048790175, 0.01910599, 0.01880309, -0.033715084, 0.07987236, -0.052937575, 0.012430544, -0.03790908, 0.01875649, 0.01693909, 0.031408384, 0.029777385, 0.03464708, -0.029637584, -0.0036784858, 0.015214892, 0.00544346, -0.0022746613, -0.015774092, -0.07167076, 0.012943143, -0.014282892, 0.023591239, -0.01947879, -0.043897178, -0.031804483, -0.0040512853, -0.0145275425, -0.0038707105, -0.0032299608, -0.04170698, -0.013560593, -0.04014588, -0.013642143, 0.028798785, 0.008143346, -0.028169686, 0.02138939, 0.022146638, -0.07269596, -0.018313792, -0.06174497, 0.01896619, 0.011626694, 0.014049893, -0.0016892492, -0.0018203115, -0.051958974, -0.031944282, 0.013246044, -0.018150691, 0.02292719, 0.023008738, 0.047019377, -0.07511916, 0.010793719, 0.030383185, 0.01152767, 0.01801089, 0.045947578, -0.028099786, -0.013642143, 0.023544637, -0.00239553, 0.033388883, -0.032247182, -0.007857921, -0.033155885, 0.03644118, -0.012803343, -0.017638091, 0.01827884, 0.027493985, 0.047205776, 0.004260985, -0.03954008, 0.051446375, -0.016088642, 0.053030774, 0.03900418, -0.016216792, 0.04513208, 0.0068734963, 0.06817576, 0.009494745, -0.06239737, 0.04044878, -0.030755984, -0.0076948213, -0.02102824, -0.01942054, -0.0131295435, -0.06663796, -0.04030898, -0.014830442, 0.021890339, 0.051120173, 0.048137777, 0.022787388, 0.015377992, 0.011923769, -0.008055971, -0.007351146, 0.052005574, 0.02014284, -0.00482601, -0.04294188, -0.016158542, -0.031851083, -0.01866329, -0.0016484741, -0.02059719, 0.04513208, -0.01843029, 0.022612639, -0.004654173, -0.046133976, -0.05852957, -0.024954287, -0.04089148, 0.0062618717, -0.005437635, 0.0012472775, -0.013898443, -0.023160188, 0.014981893, -0.04555148, -0.0029314298, -0.015051792, 0.03634798, -0.049628977, 0.00071174186, 0.02027099, -0.0034862608, 0.0070074713, -0.033016082, 0.032223884, -0.0038182857, 0.025210587, 0.0008839433, 0.053729773, 0.044689376, -0.012663543, -0.012360644, 0.0039289603, -0.042242877, 0.06030037, 0.0008861277, 0.00093855266, 0.016647842, -0.0075724963, -0.04478258, -0.03490338, 0.014434342, -0.012593644, -0.028915286, 0.0021159302, 0.074047364, 0.0077006463, 0.01843029, -0.057317972, -0.004971635, 0.02070204, -8.8785695e-05, 0.01959529, -0.0012225213, 0.038258582, -0.0010914588, -0.050747376, -0.03408788, 0.056292772, -0.024651388, -0.05759757, -0.00019022256, -0.01074712, -0.01990984, -0.02256604, -0.02200684, -0.054708373, 0.01952539, 0.00073795434, -0.000952387, -0.034973282, -0.018639991, -0.0054667597, 0.01811574, 0.030825885, -0.025699887, -0.01801089, -0.01031607, -0.029614285, 0.0030464735, -0.0018319616, -0.009180196, 0.043827277, 0.017638091, -0.055826772, 0.026165888, 0.03828188, -0.004936685, 0.02211169, 0.014108143, -0.080711156, 0.02074864, 0.014166393, -0.06402837, 0.00980347, 0.033854883, 0.006133722, -0.00019823194, -0.027540587, 0.025956187, 0.042802077, 0.032410283, 0.06733697, 0.055733573, 0.008096746, 0.049908575, 0.000625095, 0.01098012, 0.032340385, -0.004193998, 0.012337344, -0.007217171, 0.015354692, -0.0018800178, -0.030849185, -0.027097886, -0.000163555, 0.023672787, 0.00020642333, 0.010164619, 0.027167786, -0.0057929596, 0.028845385, 0.035858683, 0.026072687, 0.011783969, 0.11211954, -0.023579588, -0.025140688, 0.02028264, -0.0056764595, 0.06957377, -0.0068385466, -0.015389643, 0.03900418, 0.008749146, 0.06640497, 0.015995443, -0.012733444, -0.016671142, 0.053776372, -0.025676588, -0.02060884, -0.011917944, -0.056152973, 0.007648221, 0.02134279, 0.00975687, -0.0018130303, -0.024231987, -0.026958086, -0.02076029, 0.038002282, 0.07926656, -0.07246296, -0.02213499, -0.046390276, -0.016682792, -0.049442574, -0.035439283, 0.029148286, -0.03879448, -0.03772268, -0.029614285, -0.049675576, 0.03592858, -0.016741041, -0.007782196, -0.0044735977, -0.033808284, 0.012488794, 0.002692605, -0.02055059, -0.017090542, -0.05913537, -0.014294542, 0.03588198, 0.022065088, -0.0034076234, 0.019152591, -0.031501584, 0.0046366975, 0.010968469, 0.004459035, -0.016193492, -0.016344942, -0.007351146, 0.028192986, 0.0031513234, -0.0147838425, -0.01822059, -0.025583386, -0.028938586, 0.02052729, -0.016717741, 0.011859694, 0.064307965, 0.01867494, -0.010933519, -0.0027435736, 0.005440547, -0.06663796, 0.051446375, 0.048836775, 0.016251741, 0.0015669242, -0.023299988, -0.0096403705, -0.06281677, 0.023929087, -0.012290744, 0.043128278, -0.00929087, 0.011440294, -0.032200582, 0.04175358, -0.0020008865, -0.0044066105, -0.00246543, -0.012721794, -0.0069783465, 0.024511587, -0.008032671, 0.03485678, -0.06701077, -0.03679068, -0.07595796, 0.0071647465, -0.0015698367, 0.01997974, -0.014212993, -0.0026343549, -0.019385591, -0.01801089, -0.015051792, -0.0043017603, -0.033225782, -0.029357985, 0.033179183, -0.020713689, 0.0018246804, 0.0008402558, -0.001553818, -0.03536938, -0.017253641, -0.01770799, -0.020969989, 0.03571888, 0.00034385687, -0.008556921, -0.05955477, 0.013269343, 0.0135139935, 0.024604788, 0.06020717, 0.0040978855, 0.012209194, -0.00030107953, -0.026515387, 0.04354768, 0.004339623, -0.028589085, 0.016030392, 0.00465126, 0.015296442, 0.04047208, -0.028146386, 0.025839686, 0.036674183, -0.0044735977, -0.016729392, 0.015867293, -0.021971889, 0.009220971, 0.01035102, 0.002956186, 0.030919084, 0.04124098, -0.008737495, 0.016519692, -0.0068734963, 0.01775459, -0.002529505, 0.0034280107, -0.06826896, -0.0030056986, 0.030872485, 0.007811321, -0.011813094, 0.008551096, -0.024488287, -0.05717817, 0.02101659, 0.03828188, -0.014725593, -0.010665569, 0.032503482, -0.01949044, 0.020736989, 0.025140688, -0.0028848299, -0.034064583, 0.03865468, -0.02200684, -0.075398766, -0.00085263397, -0.00446486, 0.023253389, 0.050514374, 0.003113461, -0.014597443, -0.024721287, -0.014946942, -0.046646576, -0.04119438, -0.016589591, 0.00080530584, 0.015447892, 0.050048374, 0.014760543, 0.05536077, 0.024278589, 0.017894391, -0.01896619, -0.019665191, 0.00076453085, 0.025047487, -0.05438217, 0.015715841, -0.008591871, -0.0058919843, 0.006355072, 0.046599977, 0.023253389, 0.04177688, -0.005918197, -0.030056985, -0.015925542, -0.0052687097, -0.05736457, 0.0023649489, -0.03818868, 0.028053185, 0.008580221, 0.0072579463, 0.02027099, -0.0006676903, 0.0031338483, 0.01990984, -0.031361785, -0.07022616, -0.030662784, -0.017638091, -0.029544385, -0.0075608464, 0.026678486, 0.027167786, -0.011183995, -0.014702292, 0.010368494, -0.013910093, 0.021529188, 0.009092821, -0.0013972712, 0.0034949982, -0.06118577, 0.009564646, -0.023404839, -0.036114983, 0.025676588, -0.00998987, -0.0025921236, 0.002950361, -0.024488287, -0.049535774, 0.0070074713, -0.0021945676, 0.015366342, 0.02051564, 0.016170193, -0.016636191, -0.021564139, 0.03783918, 0.010426745, -0.0032969483, -0.029148286, -0.016589591, 0.008201596, -0.027027987, -0.01138787, 0.0068618464, -0.00961707, 0.014201343, -0.01961859, -0.033342283, 0.048696976, -0.014352793, -0.0036318856, -0.035346083, 0.0095762955, -0.02050399, 0.04503888, -0.06356237, 0.01877979, 0.004153223, 0.0035998481, 0.03464708, -0.051399775, 0.03460048, 0.0054114223, 0.012849944, 0.022274788, -0.014772193, 0.008149171, 0.02053894, 0.030126885, 0.0041211853, 0.031641383, 0.005918197, 0.02138939, 0.023882488, -0.04135748, -0.03909738, 0.032363683, 0.05769077, -0.026655186, -0.0070074713, -0.014574143, -0.046832975, -0.003984298, -0.003990123, 0.051399775, 0.013840193, -0.027540587, 0.024185387, -0.00990832, -0.00497746, 0.010700519, 0.0061861468, -0.0034367482, 0.018977841, 0.012395593, 0.0075025964, 0.01982829, -0.029987086, 0.000102301514, 0.00095020264, 0.029614285, -0.0070424215, -0.01051412, -0.028262885, 0.010881094, 0.026981387, -0.053496774, 0.0052541476, 0.025187287, 0.0035212107, 0.004319235, 0.00113369, -0.010170445, 0.0029882235, -0.04156718, 0.0116674695, -0.004001773, -0.043617576, -0.022123339, -0.0066521466, 0.01809244, -0.029544385, -0.029171586, 0.017078891, 0.037233382, -0.00902292, 0.04273218, -0.054568574, 0.0015829429, 0.06016057, -0.0152847925, -0.028286185, 0.025257187, 0.036208183, 0.01951374, -0.0047881478, 0.014329493, -0.032596685, -0.048650376, 0.0123722935, -0.04329138, 0.008149171, 0.011183995, 0.02151754, -0.017230341, -0.0006083481, 0.008143346, 0.00050604664, 0.0024421301, -0.009360771, 0.022845639, 0.032946184, 0.013770293, -0.016205141, 0.02123794, 0.06239737, 0.013921743, -0.032223884, 0.014143093, 0.02053894], [-0.015128733, -0.03308593, -0.027476536, 0.04392443, -0.015711064, 0.026097955, -0.033062164, 0.026929857, -0.019977532, 0.014629591, -0.014439442, 0.011628802, 0.03365638, -0.0270487, -0.019965649, -0.021974098, -0.038243726, -0.016673693, -0.035629176, -0.017030222, -0.044542413, -0.06888149, -0.049010914, -0.010238337, -0.0019475421, 0.0050894576, -0.013690731, 0.028403513, -0.0018168146, 0.024125159, 0.05347942, 0.017802704, 0.023626018, 0.011082123, 0.050484568, 0.026597096, -0.011943736, 0.011854604, -0.0026398033, 0.010909801, -0.03363261, 0.013191589, 0.009115269, -0.021950329, -0.01985869, 0.015283229, 0.0012203705, -0.014582054, 0.0025061048, -0.004914164, 0.016293395, -0.0209877, -0.02740523, -0.022663388, 0.015663527, 0.018717796, 0.046087373, -0.0569021, 0.043781817, 0.0031790542, -0.07054529, 0.033846527, 0.021463072, 0.0074990024, -0.044970248, -0.0061382484, 0.011842719, -0.017481826, 0.024695607, 0.01770763, -0.048297856, -0.018872293, 0.0282609, -0.0061382484, -0.010909801, -0.07586946, 0.07083052, 0.006191728, -0.01716095, -0.0018717796, 0.0318975, -0.03244418, -0.020583633, -0.043472823, 0.051720537, -0.031255748, 0.03570048, -0.088181615, -0.04492271, -0.011444595, 0.014665244, -0.011902141, 0.028308438, 0.032705635, -0.084711395, 0.010398775, -0.02792814, 0.012050695, -0.035153802, 0.019003019, 6.1092804e-05, -0.07401551, -0.04789379, -0.025408665, 0.04836916, 0.023233835, 0.024861986, 0.009275707, -0.03089922, 0.0779611, 0.040145215, 0.004183279, -0.0025402722, -0.028142057, -0.023673555, 0.0057936036, -0.0012500813, -0.039289545, -0.038243726, -0.004753726, -0.080242895, -0.043401517, 0.046087373, 0.048820764, -0.015722949, 0.0066314475, -0.003401885, 0.050246883, 0.0036068896, -0.016376587, -0.027024932, 0.02410139, 0.06179844, 0.02966325, 0.047751177, -0.025598815, 0.059944484, -0.039741147, -0.037554435, 0.013132168, -0.024208348, -0.004162481, -0.0140116075, 0.020702476, -0.051673, -0.017493712, -0.0037287038, -0.019038672, -0.058375753, -0.018052274, -0.022568313, -0.046016067, -0.00058196, 0.020559864, 0.012728101, -0.023923125, -7.005246e-05, -0.0055678017, -0.025884038, 0.022687158, 0.029924704, -0.04661028, -0.022235554, 0.050722256, 0.005927302, -0.062986866, 0.051387776, -0.017030222, -0.068976566, 0.04423342, -0.022152362, -0.023911241, 0.009709485, -0.0010027391, -0.023863705, 0.03555787, 0.030827912, -0.006459125, 0.0019891371, -0.07263693, -0.016626157, 0.02688232, 0.04981905, -0.03976492, 0.054715384, 0.034725968, 0.0073445067, 0.042854838, 0.04299745, -0.028023215, -0.014772203, -0.001963883, -0.06350978, -0.008556707, 0.0061739017, 0.009620353, -0.0013325288, -0.038814172, 0.019038672, 0.0111950245, -0.008021913, -0.029782092, 0.0007420269, -0.0036871086, -0.033537537, 0.0030319858, 0.051435314, 0.009162807, -0.0077901683, -0.005134024, 0.026953626, 0.02090451, 0.012324034, -0.039693613, 0.004376399, 0.02178395, -0.05186315, 0.0131797055, -0.055428445, -0.04059682, 0.04839293, 0.0068988446, 0.029425563, -0.048250318, -0.006946382, 0.03812488, 0.01049385, 0.007582193, 0.04299745, 0.03085168, -0.013037093, -0.0338703, -0.043853123, 0.025979113, -0.07971998, -0.028379744, -0.034250595, 0.007059283, 0.040739432, -0.015592221, 0.040335365, 0.0004092661, -0.034773506, -0.008473516, 0.031255748, 0.03396537, -0.00663739, 0.017018339, -0.03332362, -0.015663527, 0.0040168986, -0.0282609, -0.03332362, 0.022425702, -0.020952048, 0.06678985, 0.034060445, -0.07306477, 0.002567012, 0.021938445, -0.0018064159, 0.064127766, -0.019074325, 0.07049776, -0.0063640503, 0.01335797, 0.01569918, -0.026929857, -0.057805307, 0.03572425, 0.017386753, -0.060752615, 0.014166103, 0.001754422, 0.06056247, -0.023732977, 0.058423292, 0.054335088, 0.023590365, 0.05561859, -0.008366558, 0.02357848, 0.014582054, 0.064983435, 0.03436944, -0.010101668, 0.015615989, -0.01344116, -0.015746716, 0.0041743657, -0.02029841, -0.028831348, 0.046229985, 0.0042100186, 0.037150368, 0.0004924563, 0.037316747, 0.044851404, -0.080337964, 0.020690592, -0.031255748, -0.014296831, 0.008111045, -0.060134634, 0.00011726476, 0.051245164, 0.02671594, 0.0690241, -0.016626157, -0.017695745, 0.06579157, -0.006726522, 0.017969083, -0.017315447, 0.025812732, -0.01839692, -0.010517619, 0.0010525046, 0.04767987, -0.015936866, -0.0443998, -0.029354258, -0.11199778, 0.01666181, 0.033798993, 0.00859236, -0.009453973, 0.002489764, -0.036888912, 0.006690869, -0.076012075, 0.0071662418, 0.005665847, 0.0064294143, -0.042022936, -0.0779611, 0.0012589946, -0.039004322, 0.007332622, -0.013928417, -0.011551554, 0.06160829, -0.03698399, -0.030305002, -0.02897396, -0.020369716, 0.014926699, -0.008740913, 0.022497008, -0.021807717, 0.0013726384, 0.017101528, 0.04872569, 0.027975677, 0.014284946, -0.013464929, -0.010790958, -0.037388053, -0.030590227, 0.020048838, 0.10020854, -0.09307795, -0.020999584, 0.0419754, 0.020583633, -0.0064294143, -0.0419754, -0.015164386, 0.019133747, 0.0143324835, -0.017446173, -0.0055648303, -0.013809574, 0.0071484153, -0.072066486, 0.0051459083, 0.0690241, -0.007950607, -0.048416696, 0.0015078224, -0.0057193264, -0.034654662, -0.00106736, 0.037506897, 0.069071636, 0.0111950245, -0.041690174, 0.0050894576, 0.029853398, -0.04630129, 0.00045903167, -0.0027333924, 0.016507313, -0.029710786, 0.00784959, 0.06493589, -0.01958535, 0.002434799, 0.0012537952, -0.010018477, -0.0029369113, -0.03482104, -0.009269766, -0.0139165325, 0.018717796, 0.023043687, -0.016982686, -0.044114575, -0.029306721, 0.042664688, -0.032206494, 0.008491343, -0.014914815, 0.08200177, 0.01162286, 0.034749735, 0.017398637, 0.017089644, -0.01101676, 0.016542966, 0.025242284, -0.026597096, 0.0100422455, 0.032372873, 0.006298687, 0.030566458, -0.008931062, 0.00875874, -0.027262619, 0.0066968114, 0.012359687, 0.016649924, -0.027096238, -0.0010718167, -0.036033243, -0.024505457, -0.03520134, -0.02479068, 4.1154082e-05, 0.0492486, 0.0018242423, -0.016840074, 0.015818022, 0.05115009, -0.039289545, -0.02255643, -0.07216156, -0.00914498, 0.034060445, -0.023673555, -0.016483545, 0.032705635, -0.04577838, -0.030019779, 0.04542185, -0.0030007896, -0.011331694, -0.012739985, 0.04283107, -0.07035514, 0.037697047, 0.02200975, 0.040192753, -0.0112247355, 0.03451205, -0.0036306581, -0.03817242, 0.028569892, -0.004272411, 0.023043687, -0.021665106, 0.0046259696, -0.027500303, 0.0030141594, -0.025765194, -0.012430993, -0.02652579, 0.004715102, 0.02966325, -0.033394925, -0.0053390283, -0.03382276, 0.022342512, -0.010945454, 0.060895227, -0.010404717, 0.0367463, -0.006690869, 0.069309324, -0.006530431, -0.041048422, 0.037174135, -0.014094797, 0.010268048, -0.016162667, -0.070307605, -0.03365638, -0.042902377, 0.010915743, -0.001999536, 0.024315309, 0.047584794, 0.019537814, 0.01231215, -0.03213519, 0.012419109, -0.024671838, 0.0061025955, 0.0054251896, -0.041880324, 0.036698762, 0.009935287, -0.0686438, -0.013334201, -0.010963281, -0.014712782, -0.032111418, 0.016257742, 0.026121724, 0.019525928, -0.015853675, -0.026502023, -0.05709225, -0.019133747, -0.03541526, -0.004937933, 0.034060445, 0.0011936309, 0.051245164, -0.029687019, -0.008449748, 0.024648068, -0.03239664, -0.0015850705, -0.010630519, -0.011664455, 0.03346623, -0.0027987561, -0.02035783, 0.05119763, -0.018694026, 0.024327192, 0.020120146, 0.034203056, -0.022176132, 0.05913635, 0.03135082, -0.019074325, -0.00870526, 0.03902809, -0.036888912, 0.062321346, 0.005101342, 0.033727687, 0.0024763942, -0.04853554, -0.021367999, -0.044494875, 0.0016266656, -0.010600809, 0.0063699926, 0.035320185, 0.08328528, 0.0078020524, -0.027381461, -0.07729559, 0.050579645, -0.0010153662, -0.01837315, -0.008628013, -0.004946846, 0.04822655, 0.008229888, -0.044090807, -0.077152975, 0.081621476, -0.04195163, -0.008081334, 0.0010450769, -0.017386753, -0.051673, -0.012787523, -0.008782509, -0.025979113, 0.012056638, 0.025931574, -0.019133747, -0.05813807, -0.016745, 0.008972658, -0.0017618496, 0.025717657, 0.0030720953, -0.00997094, -0.015627874, 0.000944803, -0.00084081525, 0.021807717, -0.016709346, 0.032158956, 0.0139165325, -0.03368015, 0.026977394, 0.0015130218, -0.05362203, -0.0070830514, 0.019977532, -0.026169261, 0.04943875, -0.0050538047, -0.089037284, 0.01517627, 0.05119763, -0.041571334, 0.0060669426, -0.012549836, -0.0006261548, 0.052528672, 0.018183002, 0.04140495, 0.026288103, -0.009412377, 0.08898975, -0.032491717, 0.036223393, 0.030637763, -0.00892512, 0.021724528, 0.001718769, -0.022223668, -0.010256164, -0.024148928, 0.014475095, -0.029758325, -0.01691138, -0.021653222, 0.00045494642, 0.01247853, -0.01622209, -0.010363122, 0.0076950938, 0.017992852, 0.024766913, 0.07163865, -0.024671838, -0.025907807, 0.04839293, 0.012965787, 0.09716616, -0.022164246, -0.03831503, 0.023982547, 0.0143324835, 0.05481046, -0.011605034, -0.029924704, -0.007855532, 0.031636044, -0.027143775, 0.037364285, -0.022271207, -0.019216936, 0.015651643, 0.03087545, 0.029211646, -0.04475633, -0.032349106, -0.025004597, -0.0046705357, 0.011884315, 0.06403269, -0.054049864, -0.04287861, -0.011290099, -0.015746716, -0.04680043, 0.023459638, 0.035938166, -0.009774849, -0.006601737, -0.009222228, -0.012003158, -0.030970525, -0.01619832, -0.013643193, 5.533634e-05, -0.03831503, -0.004970615, -0.049105987, 0.011408942, 0.019109977, -0.06650463, -0.03586686, 0.03089922, 0.03156474, -0.01638847, 0.026359411, -0.07125835, 0.008354673, -0.009026137, -0.018848523, -0.020856973, -0.014629591, -0.058233142, 0.0097213695, 0.027642917, -0.0021168937, 0.00073088537, -0.041214805, -0.040192753, 0.043211367, 0.0050062677, -0.007914954, 0.052718822, 0.014700897, 0.0067800013, -0.017303562, 0.015711064, -0.030233696, 0.02288919, 0.010398775, -0.0009908547, -0.010071957, -0.037411824, 0.006952324, -0.057329934, 0.03748313, 0.0022208814, 0.057329934, -0.005624252, 0.037055295, -0.021486841, -0.008883526, -0.00589462, -0.0036811666, 0.012823176, -0.023019917, 0.009703543, 0.049676437, 0.001074045, -0.015841791, -0.011343579, -0.02619303, -0.025860269, 0.002263962, -0.058185603, 0.022128593, -0.0049527884, -0.007059283, 0.0012277983, -0.008966715, -0.016626157, 4.201291e-05, -0.03764951, 0.010511677, 0.06698, -0.015794255, -0.0025179891, -0.012490415, -0.038766634, -0.014463211, 0.012549836, 0.008657724, -0.024244001, -0.0031463723, -0.023542827, -0.02054798, -0.030566458, 0.019312011, 0.00223128, 0.025955344, 0.033109702, -0.010826611, -0.016745, 0.0043942253, -0.013726383, 0.0019935938, -0.0022624764, -0.02167699, 0.02669217, -0.013191589, 0.020203335, -0.008770624, -0.0055291774, 0.044661254, 0.014296831, -0.005169677, -0.0028908595, 0.016507313, -0.005059747, 0.01914563, 0.009370782, 0.026097955, 0.005579686, 0.045350544, -0.000622441, 0.01839692, -0.054049864, 0.008277426, -0.013060862, -0.038552716, -0.045612, -0.034535818, 0.042902377, 0.0036336293, -0.020227104, -0.011902141, -0.03952723, -0.03729298, 0.025931574, -0.006162017, 0.02721508, 0.008170466, 0.03085168, 0.016590504, 0.031778656, -0.00093143317, -0.002440741, -0.019514045, 0.017125297, -0.010018477, -0.010487908, -0.004691333, -0.027024932, -0.014308715, 0.04701435, -0.008657724, -0.008556707, -0.024113275, -0.01473655, -0.063795, -0.019490276, -0.04981905, 0.0013793233, -0.015223807, 0.04789379, -0.052718822, 0.04544562, -0.003098835, -0.007701036, 0.010731536, 0.009554989, -0.0059480993, -0.00077322323, -0.05709225, 0.017862124, 5.640407e-05, 0.010868206, -0.007368275, -0.02134423, 0.05309912, 0.018789101, 0.01283506, -0.01162286, -0.031231979, -0.0062689763, -0.040644355, 0.018503878, 0.0052320696, 0.012597374, 0.03517757, 0.048963375, 0.020250872, -0.022603966, 0.014237409, 0.024113275, -0.035819326, -0.065981716, -0.006185786, -0.05443016, -0.045374315, 0.018634606, 0.009994709, 0.038433872, 0.018610837, -0.05428755, 0.03729298, 0.004299151, 0.0018955482, -0.009067732, 0.021142196, 0.006411588, -0.041666407, -0.0025358156, -0.0020946104, -0.036770068, -0.00022988721, -0.008883526, -0.013251011, 0.03517757, 0.007059283, 0.011896199, 0.015615989, -0.0010487908, 0.022235554, 0.020488558, -0.013797689, -0.017006455, 0.00086161285, 0.019656656, 0.0072613163, -0.0051132264, 0.0040555224, -0.009644122, 0.0145582855, -0.0014491436, 0.022473238, 0.019704195, 0.040620588, -0.013096515, -0.031778656, 0.021712642, 0.04333021, -0.006046145, 0.017541248, 0.018076044, -0.043948196, 0.005131053, -0.003318695, -0.034440745, 0.024362845, 0.04734711, 0.057615157, 0.045160394, -0.03120821, 0.0209877, 0.010268048, 0.0035712365, 0.024743143, -0.023031803, 0.03867156, 0.021451188, 0.02211671, -0.006892903, 0.012716217, -0.030946756, 0.004397196, 0.03936085, -0.0362947, -0.02324572, 0.017386753, 0.08342789, -0.023126876, -0.012942019, 0.029544406, -0.03831503, -0.016269626, 0.0076119034, 0.019312011, -0.018979251, -0.030756606, 0.0013756094, 0.0021659164, -0.015806139, -0.016103247, -0.047133192, 0.000274082, 0.027714223, -0.013738268, 0.021427419, 0.007469292, -0.0022060259, 0.006892903, 0.0053390283, 0.022188015, -0.023364563, 0.020595517, -0.009846155, 0.028546125, 0.034274362, -0.0391707, -0.017232256, 0.023721091, 0.020155799, 0.017089644, -0.006839423, 0.0041803075, 0.0051904744, -0.0480364, 0.023875589, 0.0018138435, -0.036651228, 0.010006593, -0.03401291, 0.0030230726, -0.048416696, -0.007397986, 0.05115009, 0.029782092, -0.02773799, 0.029211646, -0.06070508, 0.0026888263, 0.038267493, 0.009347013, -0.010701826, 0.022294974, -0.00016220233, 0.028308438, -0.0071246466, -0.0075168293, -0.015936866, -0.03919447, 0.01300144, -0.044494875, 0.03089922, -0.0025833528, 0.014237409, -0.051577926, 0.000867555, 0.017244142, 0.0053895367, -0.007249432, -0.040882044, 0.031018062, 0.035985705, 0.01785024, -0.03308593, -0.005858967, 0.065981716, -0.00020221905, -0.049010914, 0.06441299, 0.01396407], [-0.0074373726, -0.031441525, -0.026062373, -0.03373966, -0.00041314354, 0.005158178, -0.031214237, 0.00652822, 0.011932626, 0.0017299153, -0.019710932, -0.02050644, -0.08359152, -0.0071216947, 0.019268982, 0.056114912, -0.05949898, 0.00036381884, 0.014104491, -0.0298, 0.009116779, -0.04788203, -0.020178135, 0.011244449, 0.018422965, 0.00028312366, -0.028057456, 0.019900339, -0.01686983, -0.018713389, 0.017564321, -0.0022981355, 0.012229364, 0.01967305, -0.0058526695, 0.013195339, -0.0014963135, 0.014369661, -0.029471694, 0.008618008, -0.023461185, 0.021276694, -0.00541072, -0.013334237, -0.0016304767, -0.05353898, 0.0031883474, -0.022690931, 0.01796839, -0.045078814, 0.0078035593, -0.05023068, 0.013561525, -0.026390677, -0.041391693, -0.0019303707, 0.061014235, -0.068438984, 0.09167288, -0.036921695, -0.028537288, 0.016314236, 0.031795084, -0.005186589, -0.004640466, 0.007045932, -0.01472322, -0.026037117, -0.0069070337, 0.056973558, 0.008220254, -0.024294576, 0.008220254, 0.012235678, 0.010082754, -0.06258, 0.064347796, 0.034396272, -0.0037755084, -0.029471694, 0.03303254, -2.2529048e-05, 0.0060799574, -0.038487457, -0.0018025212, -0.035557967, 0.040810846, -0.14112067, -0.034396272, 0.024130423, 0.011717966, -0.042629153, 0.031492032, 0.0018451377, -0.017627457, -0.019079575, -0.015139915, 0.018107288, -0.06182237, 0.017930508, 0.0010022775, -0.03416898, -0.06475186, -0.08147017, 0.024736525, 0.04631627, 0.03303254, -0.018258814, -0.038285423, 0.087783724, -0.01765271, -0.021605, -0.008453855, -0.015922796, 0.031087965, 0.015165169, 0.0009975424, -0.05889288, -0.0259361, -0.013738304, -0.09399627, -0.021453474, 0.09485491, 0.038537964, 0.0207211, -0.0095966095, -0.01071411, 0.031492032, 0.013069067, 0.0052023726, -0.0012208845, 0.00030147246, 0.029825253, 0.042275593, 0.05465017, 0.0259361, 0.04810932, -0.031694066, -0.03618932, -0.0014671133, -0.0061967582, -0.0071974574, -0.055458304, 0.045634404, -0.07192407, 0.0078225, -0.060660675, -0.027224068, -0.06359017, -0.01642788, -0.031971864, -0.037704576, -0.01406661, -0.020304406, 0.04952356, -0.02476178, 0.034472033, 0.03992695, -0.030077796, 0.00418589, 0.023549575, -0.075712204, 0.012652373, 0.03522966, 0.0020866313, -0.007045932, 0.033360846, -0.03702271, -0.026567457, 0.037931863, -0.014205508, -0.0053759958, 0.013447881, -0.027703898, -0.0333861, -0.007727796, 0.041922033, -0.0018151483, -0.009653432, -0.06121627, -0.039952204, 0.04088661, 0.056165423, -0.036694407, 0.021049406, 0.024534492, -0.0057737497, -0.016326863, 0.034194235, -0.024597626, -0.020493813, -0.0022602542, -0.03320932, 0.015581864, 0.018220931, 0.029648473, -0.03224966, -0.022312118, 0.031214237, -0.05083678, -0.015847033, -0.029193897, 0.02116305, -0.029875763, -0.025696186, 0.014786355, 0.049675085, 0.021478727, -0.019079575, -0.001073305, 0.00773411, 0.027527118, -0.002571197, -0.004356356, -0.037603557, 0.0107961865, -0.039447118, -0.0063072457, -0.026592711, -0.02414305, 0.055559322, -0.0008183951, 0.05560983, -0.036643896, -0.019016441, 0.03947237, 0.029901017, -0.003980699, 0.020569576, -0.01323322, 0.011913686, -0.030986948, 0.009710254, -0.004040678, -0.049043726, 0.040507797, -0.046543557, -0.0023596927, -0.010524703, -0.025746694, 0.031441525, 0.03207288, -0.041947287, -0.02357483, -0.013498389, 0.020430677, 0.050508473, 0.03063339, -0.008643262, 0.031921357, 0.0083086435, -0.0070396187, 0.010310042, 0.055761356, 0.041088644, 0.06924712, 0.038411696, -0.011433856, 0.0028032202, 0.019496271, -0.0045489194, 0.021567117, 0.006850212, 0.04495254, 0.016503643, -0.006370381, 0.0005066631, -0.005445445, -0.007721483, 0.0070080506, 0.03896729, -0.059903048, 0.063135594, -0.0022855084, 0.060509153, 0.015064152, 0.06010508, 0.0339922, -0.004309004, 0.035330676, 0.010764618, 0.015783899, 0.026415931, 0.032931525, 0.030532371, -0.009678686, 0.0067555085, -0.04197254, -0.021352457, 0.016314236, -0.009009449, -0.0071216947, 0.03815915, -0.024092542, 0.058488812, 0.005600127, 0.029875763, 0.03303254, -0.044624235, 0.031188982, -0.0121283475, 0.0033840677, -0.04881644, -0.035456948, 0.0018703919, 0.058438305, 0.028815083, 0.040861353, -0.058741353, -0.052478302, 0.061670847, 0.028638305, -0.02247627, -0.04035627, 0.009230424, -0.027602881, 0.01835983, 0.019243728, 0.024029406, -0.020064492, -0.03671966, -0.013271102, -0.059903048, 0.03886627, 0.009779703, -0.004435275, -0.010922457, 0.0042774365, -0.00028016418, 0.0048361863, -0.04543237, 0.03457305, -0.0025001694, 0.021099914, -0.056771524, -0.102279656, -0.034775086, -0.07409593, 0.011635889, -0.03896729, -0.028082712, -0.014735847, -0.03747729, -0.0207211, 0.04017949, -0.048614405, -0.023044491, 0.01770322, 0.00032061042, -0.025304746, 0.0015515572, 0.028234236, 0.047679998, 0.056367457, 0.032274913, -0.03957339, -0.008548559, -0.019281609, -0.0094198305, 0.037931863, 0.064903386, -0.038184404, 0.009438771, 0.06227695, 0.015392457, -0.06788339, -0.039169323, -0.012039958, -0.030380847, 0.061367795, -0.029345423, 0.034724575, 0.03815915, -0.00031409957, -0.03975017, -0.0028600423, 0.077479996, -0.021478727, -0.027325084, 0.030911185, 0.0066039828, -0.031239491, -0.0572261, 0.0024764936, -0.00865589, 0.039977457, -0.04881644, 0.053185422, 0.0363661, -0.044624235, -0.0009714989, 0.02130195, -0.004337415, -0.022968728, 0.0091672875, 0.025342626, -0.027628135, 0.027476609, 0.004182733, 0.0056190677, 0.013675169, 0.015796525, -0.02059483, -0.018940678, 0.026617965, -0.026870508, 0.013624661, -0.021794407, -0.0001860527, 0.06424678, -0.0036902754, 0.01603644, 0.024723899, 0.046366777, 0.030885931, 0.05091254, 0.006133623, 0.061014235, -0.006818644, 0.018498728, 0.0101143215, -0.01621322, -0.02086, 0.026567457, -0.053488474, 0.0050634746, -0.04487678, 0.0022602542, 0.032098133, -0.032628473, -0.041088644, 0.03325983, -0.038815763, 0.004902479, 0.012563983, -0.03790661, 0.0030478707, -0.0028600423, -0.011926313, 0.054953218, 0.0015989089, -0.024736525, 0.00502875, 0.043235254, -0.040432032, -0.014874745, -0.07202508, -0.0011206567, 0.047048643, -0.026870508, -0.03553271, -0.007064873, -0.043311015, -0.037174236, 0.017463304, -0.030153558, -0.007974025, -0.025342626, 0.02949695, -0.06227695, -0.019003812, 0.030305084, 0.054801695, -0.03671966, 0.025254237, -0.039901692, -0.029673727, 0.039447118, -0.0025806674, 0.039270338, -0.005259195, -0.031441525, -0.038058136, 0.0058526695, -0.009331441, -0.035911523, -0.0061052116, -0.015165169, 0.052478302, 0.009160974, -0.0022476271, 0.019066948, -0.012406143, 0.039194576, 0.022324745, -0.013826694, 0.021491356, -0.0061841314, 0.037325762, -0.019142712, -0.03939661, 0.011080297, -0.02572144, -0.036340848, -0.013561525, -0.03384068, -0.043765593, -0.045558643, 0.0027795443, 0.0022823517, 0.044851523, 0.02616339, 0.018738644, 0.03565898, 0.025784576, -0.011863178, -0.026264407, -0.0026974683, 0.028688813, -0.031668812, 0.023271779, 0.0022492055, -0.027350338, 0.005944216, -0.044548474, -0.049018472, 0.0024812287, 0.025342626, 0.024092542, 0.020961016, -0.00821394, 0.003425106, -0.050634746, -0.013536271, -0.013826694, -0.017374914, 0.019900339, 0.011844237, -0.0076267794, -0.023461185, 0.016364746, -0.010278475, -0.0054044067, -0.01220411, -0.0008207627, -0.04876593, 0.04197254, 0.023057118, -0.01454644, 0.013170084, -0.0092114825, 0.036744915, 0.0128228385, 0.010947712, -0.017033983, 0.023031864, 0.030961694, -0.018220931, -0.027173558, 0.022728814, -0.038916778, 0.05333695, -0.0072100847, 0.03045661, 0.019811949, -0.0542461, -0.027855422, -0.0047351695, -0.00039479474, 0.0063798516, -0.009337754, 0.009022076, 0.058842372, 0.025481524, -0.041997794, -0.06222644, 0.0068817795, 0.06485288, 0.010265848, 0.0017930508, -0.011143432, 0.046088982, -0.008422288, -0.014647457, -0.023208644, 0.051493388, -0.007405805, -0.044018134, -0.0046909745, -0.010512076, -0.032704238, -0.009943856, -0.029219152, -0.029395932, 0.0156197455, 0.03583576, -0.0091672875, -0.04065932, -0.044750508, -0.0019572033, 0.002263411, 0.0021308262, 0.009552415, -0.015897542, -0.031668812, 0.024244066, 0.015543982, 0.017715847, 0.0132963555, -0.01708449, -0.015240932, -0.046619322, 0.009583983, -0.0007422378, -0.04917, -0.028764576, 0.026744237, -0.052882373, 0.03558322, 0.01779161, -0.03964915, -0.020872626, 0.053488474, -0.013119576, 0.011408601, -0.0482861, -0.004005953, 0.056013897, 0.010600466, 0.059296947, 0.025835084, 0.0070711863, 0.07237864, -0.03027983, 0.047174916, -0.007847754, 0.009066271, -0.00067121023, -0.018700762, 0.0026422245, -0.0408361, -0.013069067, -0.040305763, -0.049927626, -0.02139034, 0.0077846185, 0.015847033, 0.028512033, 0.014824237, -0.023360169, 0.033865932, 0.042401865, -0.015543982, 0.1001078, -0.03497712, -0.023006609, 0.041467458, 0.0108025, 0.033865932, -0.011156059, -0.05752915, 0.019319491, 0.012033644, 0.045407116, -0.0019240571, -0.033588134, -0.017362287, 0.05066, -0.020064492, -0.0095966095, -0.03237593, -0.02130195, -0.0035324364, 0.009666059, 0.038058136, -0.004649936, -0.046215255, 0.0064903386, 0.014382288, 0.027426101, 0.052074235, -0.053690508, -0.07404542, -0.034194235, -0.01023428, -0.023031864, 0.00025273967, 0.044573728, -0.035280168, -0.010947712, -0.05055898, -0.06919661, -0.02247627, -0.009779703, -0.03808339, -0.0075447033, -0.020544322, 0.029421186, -0.014142373, -0.010549957, 0.005284449, -0.049018472, -0.013460509, 0.03492661, 0.024016779, -0.019445762, 0.018991185, -0.06510542, -0.0073994915, 0.0033525, -0.009830211, -0.054145083, 0.0052749785, -0.028916102, 0.038462203, 0.033461865, -0.005123453, -0.0013818803, -0.029597966, -0.03313356, 0.019205848, -0.035179153, -0.0020345445, 0.06444881, 0.0001618836, 0.015607119, -0.022539407, 0.026415931, -0.050154913, 0.044371694, 0.0071595763, 0.01498839, -0.0022081672, -0.027577626, 0.005555932, -0.028006949, 0.04770525, 0.021958558, 0.0336639, -0.013485762, 0.033613387, -0.011642203, 0.021226186, -0.0045331353, -0.012298813, -0.030658644, -0.00038492982, 0.017905254, 0.039851185, 0.023941016, 0.018018898, -0.051038813, -0.024269322, -0.06116576, 0.021226186, -0.032678984, 0.028385762, -0.026239151, 0.0050571607, -0.014508559, 0.007348983, -0.029118136, 0.010019618, -0.053387456, -0.017665338, 0.047351696, -0.0009857045, 0.005240254, -0.013851949, -0.03780559, -0.022678304, -0.0024433474, -0.010777245, -0.02226161, 0.040558305, -0.024913304, 0.0059347455, -0.02896661, 0.02584771, 0.003466144, -0.002713252, 0.06641864, -0.04788203, -0.004829873, -0.017097117, -0.02130195, 0.023688475, -0.00904733, -0.043007966, -0.014293898, -0.029597966, 0.02181966, 0.0060925847, -0.0029894703, 0.03045661, -0.007058559, 0.009186229, -0.018119914, -0.035987288, -0.010467881, 0.01520305, 0.049220506, 0.0027890147, 0.004552076, 0.052074235, -0.022362627, 0.0363661, -0.069348134, 0.027981695, 0.0027542901, -0.028688813, -0.05169542, -0.015594491, 0.04917, -0.0085611865, -0.011989449, -0.010783559, -0.03401746, -0.028360508, 0.034850847, 0.0016131144, 0.04048254, -0.005167648, 0.03416898, 0.017198136, 0.024130423, -0.012147288, 0.0056948303, -0.024168305, 0.04023, 0.0013763559, -0.03182034, 0.027400848, -0.010827754, 0.019054322, 0.059347454, -0.0062188557, 0.0048961653, -0.03176983, -0.0015736546, -0.04841237, -0.04459898, 0.011440169, 0.01305644, -0.010871949, 0.024105169, -0.022009067, 0.04934678, 0.016225846, -0.01722339, -0.02694627, 0.0042363983, 0.036467116, 0.0043595126, -0.014167626, 0.02572144, -0.020746356, 0.018763898, 0.014836864, 0.054347117, -0.013043813, 0.029042372, 0.007405805, -0.0071406355, -0.020178135, -0.024610253, -0.053437963, 0.032805253, -0.0414422, 0.012197796, 0.03141627, -0.0016241631, -0.004536292, -0.036643896, 0.023751609, -0.033891186, -0.035179153, -0.06126678, -0.0070080506, -0.021276694, -0.039623898, 0.009236737, 0.020127626, 0.045331355, 0.008491737, -0.02274144, 0.027350338, -0.0030163028, -0.0007888003, -0.018347204, 0.032173898, 0.017324407, -0.039775424, -0.01603644, 0.0048204022, -0.05364, 0.03224966, -0.011440169, -0.013220593, -0.009924915, -0.027022034, 0.010259533, -0.001332161, 0.004722542, 0.006660805, 0.0014655349, -0.0027795443, -0.010316356, -0.009268305, 0.011080297, 0.00865589, -0.022046948, -0.0007209295, -0.024294576, 0.03045661, -0.019319491, -0.00062740996, -0.015455592, -0.0032356991, 0.0061651906, -0.010531017, 0.010859322, 0.027931185, -0.03772983, 0.00830233, -0.0304061, 0.0074815676, 0.009571356, 0.033613387, -0.049018472, 0.0025127965, 0.03462356, 0.03409322, 0.018031524, -0.032830507, -1.9865516e-05, 0.0007382918, 0.012500847, 0.037098475, -0.0132079655, 0.018031524, 0.011515932, 0.045684915, 3.1469146e-05, -0.014596948, -0.04452322, 0.015607119, 5.8104473e-05, -0.084551185, -0.076924406, 0.062782034, 0.07682339, -0.03957339, -0.009748136, -0.005669576, -0.066671185, -0.044270676, -0.008908432, 0.044902034, -0.0031820338, -0.034648813, 0.004552076, -0.030810168, -0.007879321, -0.015278813, -0.037275255, -0.018599745, 0.012058898, -0.015329322, 0.01770322, 0.0026232838, -0.023044491, 0.009495593, 0.00867483, 0.01651627, 0.027880678, 0.03921983, 0.00624411, 0.0012548199, 0.039800677, -0.053134914, -0.0053917794, 0.0036839617, 0.018637627, 0.019142712, 0.027072541, -0.0060957414, -0.0076141525, -0.06217593, 0.01397822, 0.008984195, -0.05323593, 0.020834746, 0.005170805, -0.016642543, -0.027022034, -0.003608199, 0.03230017, 0.011591694, -0.018220931, -0.009230424, -0.08071254, 0.01099822, 0.017097117, -0.013915084, 0.020632712, 0.024092542, 0.025557287, 0.013763559, 0.0055243643, 0.0008618008, 0.0067113135, -0.01910483, 0.036088303, -0.06222644, 0.030557627, 0.0149, -0.009495593, -0.039497625, -0.00428375, 0.02944644, 0.013308982, -0.0023660064, -0.03063339, -0.0021844914, 0.04399288, 0.018321948, -0.00773411, 0.01305644, 0.06010508, 0.010669915, -0.029951524, 0.019609915, -0.007506822], [-0.029817006, -0.02351499, -0.029182103, 0.060198374, -0.028076896, 0.0224333, -0.06828753, 0.028100412, 0.014743898, 0.033955645, -0.0011801586, -0.011304831, 0.03710665, -0.0019061838, -0.019552713, 0.0017415789, -0.036565807, -0.044278726, 0.0011323937, 0.0018885476, -0.00034445786, -0.06320829, -0.07642371, 0.00896509, 0.024714254, -0.009788115, -0.03040488, 0.009500056, -0.004203304, 0.0009905689, 0.024949403, 0.0013410893, 0.027136298, -0.0013932631, -0.0011118181, 0.012921487, -0.0063843196, 0.030616516, -0.0036947927, 0.018059513, -0.055119134, 0.004382606, 0.018529812, -0.01562571, -0.00033821168, 0.0075541902, 0.04284431, -0.02045804, -0.019928953, -0.043620307, -0.008941575, 0.016495764, -0.032779895, -0.006025716, -0.04811167, -0.009782235, 0.07426034, -0.06236175, 0.036989078, -0.035977934, -0.060151342, 0.028664771, 0.07477766, -0.018388722, -0.061233032, 0.039669786, 0.006490137, 0.0005544394, -0.0023544384, 0.038705673, -0.043620307, 0.03125142, 0.08747576, -0.00018848733, -0.0171777, -0.053567145, 0.08512426, 0.018188844, -0.045031205, -0.020293435, 0.009441269, -0.037012592, 0.039223004, 0.009423632, 0.025302129, -0.03139251, 0.052391395, -0.11061451, -0.051450796, -0.0014424976, -0.010035022, -0.016072495, 0.032591775, -0.008812242, -0.026007578, -0.023985289, 0.00013006729, 0.024220439, -0.010281929, 0.00024139606, -0.016025465, -0.030522456, -0.04014009, -0.047994092, 0.046489134, 0.022680208, -0.004076911, 0.011739858, -0.006425471, -0.010105567, 0.0748247, -0.014108994, -0.06626524, 0.030169731, -0.028829377, 0.050604258, -0.023679594, -0.0654187, -0.00056582945, 0.014896746, -0.0953768, -0.06207957, 0.051685948, 0.005176237, -0.0037330047, -0.052814666, -0.01750691, 0.030616516, 0.029628886, 0.010487685, -0.038188342, 0.04651265, 0.022268696, 0.037671015, 0.046206955, 0.0071838293, 0.094530255, -0.029699432, -0.058646385, 0.014061963, -0.058599353, 0.044325754, 0.009264906, 0.02121052, -0.024996433, 0.0009692585, -0.0037065502, -0.0074836453, -0.0072249803, -0.014779171, -0.011363619, -0.026407333, 0.020352224, -0.00553778, 0.050698318, -0.00071867683, 0.018859021, 0.013356514, 0.0072073443, 0.026713029, 0.0077893403, -0.007901036, -0.016342917, 0.04317352, -0.002843844, -0.0607157, 0.031510085, -0.028923437, -0.06913407, 0.035225455, 0.00802449, -0.027771203, -0.005484871, -0.021245793, -0.017330548, 0.004482545, 0.021880697, -0.04477254, -0.012251309, -0.054978047, -0.00090826646, 0.056341916, 0.022997659, 0.0073837065, 0.02121052, 0.048817117, 0.041174747, 0.04975772, 0.013732754, -0.03903488, -0.03543709, 0.009270784, -0.003383219, -0.031510085, -0.019352837, 0.002285363, 0.013591664, -0.016742673, -0.00403576, 0.016307645, -0.01609601, -0.062314723, 0.009688175, -0.022256937, 0.011322468, 0.004782361, 0.045078233, 0.056294885, 0.00032976098, 0.009876296, 0.024079349, 0.011845676, 0.060104314, -0.035272483, -0.014273599, 0.043902487, -0.008518305, -0.005461356, -0.02191597, 0.013309484, 0.06457216, 0.006842862, 0.03228608, -0.028453138, -0.025372673, -0.0006205753, 0.018282903, 0.022750752, 0.045501504, 0.018823748, -0.049522568, -0.010834531, -0.033861585, 0.064007804, -0.043526247, -0.01079338, -0.020846037, 0.008059762, 0.025490249, 0.0014630732, 0.022868328, 0.0053496603, -0.0387527, -0.0362366, 0.039763846, 0.0005897118, 0.011604647, 0.009076786, -0.01680146, 0.0010545003, 0.019129444, -0.03280341, -0.047476765, 0.00811855, 0.0021604397, 0.06612415, 0.030522456, -0.039199486, 0.0023853017, 0.057705782, 0.008359578, 0.039693303, -0.03426134, 0.075812325, 0.012204279, -0.008847515, 0.0028291473, -0.04072796, -0.03270935, -0.0030569485, 0.03713017, -0.058834504, 0.026289757, 0.027112782, 0.02229221, -0.0048734816, 0.059586983, 0.030475426, -0.012874457, 0.060057282, 0.026524909, 0.052250307, 0.041927226, 0.012169007, 0.004729452, -0.015919648, 0.009088543, -0.055401314, -0.033062074, 0.029229132, -0.036965564, -0.006866377, 0.055025075, -0.011681071, 0.033579405, -0.011475314, 0.044325754, 0.035977934, -0.028594228, 0.004397303, -0.028053382, -0.025490249, -0.044278726, -0.043526247, -0.0069369217, 0.07007467, -0.0056435973, 0.059492923, -0.0046442105, -0.032356624, 0.08940399, 0.014026691, -0.0028614802, 0.0006988361, 0.027794717, -0.012010281, 0.021139976, 0.0077364314, 0.073084585, -0.04547799, 0.004029881, -0.029158587, -0.11710465, 0.027794717, 0.005590689, 0.017436365, 0.023362141, 0.018576842, -0.044419814, 0.013862086, -0.050180987, -0.023879472, 0.0051262677, -0.0011853024, -0.009899811, -0.054131504, 0.058693413, -0.058176085, -0.0083125485, 0.010428898, -0.012010281, 0.025584308, -0.040281177, -0.011487072, -0.007307283, 0.003674217, -0.050886437, 0.055636466, 0.04665374, 0.02238627, 0.0014601338, 0.0105112, 0.008077399, -0.020222891, 0.031180875, 0.0073601916, 0.0073837065, -0.04481957, -0.020857796, 0.03158063, 0.038352948, -0.08060938, -0.00031910575, 0.06631227, -0.0013227181, -0.054742895, -0.04359679, -0.026031094, 0.033203166, -0.015378803, -0.040257663, 0.057329543, -0.023268081, 0.014285356, -0.030945726, -0.004782361, 0.06809941, 0.008794606, -0.018929567, 0.03738883, 0.01830642, -0.049428508, -0.015837345, 0.033485346, 0.0111049535, 0.0023632564, -0.03214499, -0.008324306, -0.016272373, 0.027347934, 0.047453247, -0.00511451, 0.014438204, 0.018682659, 0.045736656, 0.080891564, 0.0024470286, 0.023961775, -0.0011323937, -0.016295888, -0.013509361, 0.001177954, -0.005987504, -0.002366196, 0.045501504, -0.028523682, -0.022774268, -0.056153793, -0.019635016, -0.005611264, -0.04416115, 0.005440781, -0.02078725, 0.035742782, 0.0107463505, 0.0098586595, -0.034449458, 0.05032208, 0.020634403, 0.035742782, 0.053190906, 0.014179539, -0.036001448, 0.050369106, -0.060950853, 0.017683271, -0.008083277, 0.028335562, -0.0095470855, 0.0162371, 0.026289757, 0.006266745, -0.013509361, 0.010975622, -0.033438314, -0.02304469, -0.005543659, -0.044043574, -0.037718043, 0.014308871, 0.015660983, 0.0052761757, 0.003924064, 0.014732141, -0.07157963, 0.005693567, -0.06664148, -0.04557205, 0.03847052, -0.018764962, -0.03449649, 0.0017327608, -0.048817117, -0.029182103, 0.0066194697, -0.04434927, 0.0072308592, 0.02375014, 0.07590639, -0.06311423, 0.050604258, 0.03496679, 0.045713138, -0.023620807, 0.024067592, -0.023079962, -0.030781122, 0.021645548, -0.0011294544, 0.03651878, -0.023714866, 0.0050439653, -0.0031774628, 0.0080009755, 0.0048205727, -0.047570825, -0.007801098, -0.014261841, 0.025349159, 0.029440766, -0.01788315, 0.012698094, 0.036189567, 0.021657305, 0.0018694417, 0.0011007955, -0.009699933, 0.028829377, 0.07534203, -0.014614566, -0.023620807, 0.03877622, -0.010699321, -0.009164968, -0.021692578, -0.07661183, -2.0449315e-05, -0.043197036, -0.011322468, -0.011575254, -0.0014630732, 0.047241613, 0.014873231, 0.027418477, -0.028711801, 0.0015578681, -0.03228608, 0.014391174, 0.023773653, -0.01774206, 0.009259027, 0.018459266, -0.05013396, -0.014132509, -0.004209183, -0.033626433, -0.018776719, 0.025631338, 0.03299153, 0.044701993, 0.025937034, -0.04792355, -0.023526747, -0.029769976, -0.025443219, 0.0045354534, 0.017142428, 0.0049175723, 0.0738841, -0.041174747, -0.014179539, 0.016954307, -0.027394963, 0.025090493, 0.015355288, -0.008206732, 0.022844812, -0.017095398, 0.001238946, 0.007942188, -0.0066900146, 0.02059913, 0.009347208, 0.0034714004, -0.002103122, 0.043244064, 0.01788315, -0.037271257, -0.024996433, 0.033015046, -0.006631227, 0.03680096, -0.008377215, 0.0047382703, 0.023961775, -0.051827036, -0.028029867, -0.012827427, -0.015284743, -0.04232698, 0.00016194112, 0.013521119, 0.08564159, 0.009694055, -0.0411042, -0.06847565, 0.034990303, 0.026360303, -0.006237351, 0.011445921, -0.0065489244, 0.021445671, 0.020175861, -0.042797282, -0.015966678, 0.070168726, -0.02177488, -0.012286582, -0.009023877, -0.0095470855, -0.034919757, 0.012263067, 0.022033544, -0.026430849, -0.012792154, 0.046583194, -0.04528987, -0.047900032, -0.027724173, 0.028265018, 0.0020634404, 0.023303354, -0.049099296, -0.026618969, 0.028923437, -0.020093558, -0.004412, 0.00046515587, 0.011510587, -0.001797427, -0.0024235137, 0.00079803995, 0.021657305, 0.0022118788, -0.031157361, 0.035883874, -0.007795219, -0.055777553, 0.03501382, -0.008200852, -0.057799842, -0.0017988967, 0.056577064, -0.009253148, 0.009629388, -0.039434638, 0.030992756, 0.061562244, 0.00971757, 0.027959323, 0.02516104, 0.053661205, 0.058082025, -0.043926, 0.028923437, 0.015402318, 0.0037036107, 0.019364594, -0.0024220438, 0.023479717, -0.028711801, 0.0058552325, -0.036730412, -0.014932019, 0.0055730524, -0.022503845, -0.014967291, -0.03134548, -0.009323693, 0.005237964, 0.013309484, 0.054319624, -0.007054497, 0.11362443, -0.028688287, -0.041809652, 0.024502618, 0.010763986, 0.040375236, -0.01651928, -0.030898696, 0.0060374737, -0.017847877, 0.04119826, 0.018459266, -0.026219213, -0.014861473, 0.03186281, -0.027042238, 0.017236488, -0.03148657, -0.038305916, -0.00088769087, 0.024079349, 0.021187006, -0.07426034, -0.015531651, -0.012815669, 0.0071074055, 0.018482782, 0.06819347, -0.058646385, -0.037153684, -0.046630222, -0.0013124304, -0.042961884, 0.010099688, 0.030710576, -0.0021457428, -0.0018606235, 0.006366683, -0.04613641, -0.017894907, -0.0098469015, 0.010040901, -0.036213085, -0.041598015, -0.009317814, -0.031933356, 0.015708013, 0.017800847, -0.053990416, -0.010517079, 0.046583194, 0.043855455, -0.018188844, -0.007771704, -0.054931015, 0.014896746, -0.016672127, 0.017730301, -0.036542293, 0.0027130418, -0.015543408, 0.028006352, 0.029911067, 0.0041680317, -0.022809539, -0.024220439, -0.03139251, 0.054225564, 0.009376602, 0.012321854, 0.08512426, -0.0025557855, -0.003688914, -0.011240165, 0.034520004, -0.08916884, 0.034896243, 0.030945726, 0.025842974, 0.0071132844, -0.024149895, 0.0043855454, -0.012909729, 0.06292611, -0.009047392, 0.038823247, 0.0013851798, 0.015684498, -0.027583083, -0.0050762985, 0.013121364, 0.01055823, 0.0064842585, -0.01928229, 0.0056435973, 0.051968127, 0.02224518, 0.0035331273, -0.013885601, -0.017365819, -0.052156247, 0.0015990193, -0.031180875, 0.03675393, -0.039669786, -0.015649226, -0.042985402, 0.014896746, -0.008289034, 0.008865151, -0.035695754, 0.0061491695, 0.033485346, -0.014297114, 0.0045501506, 0.018365206, -0.029135073, -0.0013227181, 0.014884988, -0.0022985903, -0.023644323, 0.01934108, -0.009805751, -0.014743898, -0.051827036, -0.007895158, 0.017330548, 0.006425471, 0.044607934, -0.006913407, 0.015237713, -0.005546598, 0.020446284, 0.03604848, -0.0059728073, -0.03459055, -0.019446896, -0.010252535, -0.004097487, 0.0040063662, 0.01642522, 0.029417252, 0.016578067, 0.0075306753, 0.0010949167, 0.023244567, 0.009264906, -0.0051879943, 0.032685835, 0.024149895, 0.02177488, 0.032685835, -0.021010643, 0.027018722, -0.027747687, 0.017777331, -0.0020311072, 0.011475314, -0.061327092, -0.00019785659, 0.02106943, -0.009276663, 0.0005173298, 0.0020693191, -0.020869553, -0.038987853, 0.022609662, -0.0065489244, 0.0047382703, -0.015978435, 0.043338124, 0.005940474, 0.0019943651, 0.010816895, -0.014626323, -0.020893069, 0.03167469, -0.037365317, -0.0625969, 0.03129845, 0.0017606849, -0.027112782, 0.012921487, 0.0047470885, -0.011163741, 0.014308871, 0.009952719, -0.03049894, -0.047194585, -0.03275638, 0.027489023, -0.009470662, 0.018471025, -0.015014321, 0.06551276, 0.018682659, -0.0005243108, -0.023691352, 0.005908141, 0.0037976708, -0.015484621, -0.058881532, 0.024220439, 0.0027365568, -0.034755155, 0.024761284, 0.008800485, 0.0011897115, 0.04491363, 0.042444557, -0.003665399, -0.0010611139, -0.027559567, -0.008994483, -0.008577093, -0.020481557, 0.018271146, 0.02219815, 0.041315835, 0.052767634, -0.0058464142, 0.010299565, -0.014332386, -0.034896243, -0.04293837, -0.00030532744, -0.028570712, -0.02323281, -0.010952107, 0.010787501, 0.059681043, 0.022033544, -0.01604898, 0.03148657, 0.02172785, -0.0017165942, -0.025772428, 0.020340465, -0.015543408, -0.033626433, -0.0028423744, -0.008253762, -0.035037335, 0.0014101645, -0.031039786, 0.00013962024, -0.027841747, -0.0023867714, 0.00090312253, 0.056859244, -0.054836955, 0.021857183, 0.0064313496, 0.017071882, -0.007912794, -0.003594854, 0.060198374, 0.024949403, 0.0033244316, 0.02205706, 0.020023013, 0.023867715, 0.0008568274, 0.014085479, 0.034143765, 0.0057523544, -0.01032308, -0.04011657, 0.03710665, 0.03261529, -0.015555166, 0.04312649, 0.0038711552, -0.030075671, 0.008147944, 0.011669314, -0.06334938, 0.00089063024, 0.032027416, 0.04510175, 0.023056448, -0.028006352, 0.025560793, 0.020434525, 0.0238442, -0.014932019, 0.0013778314, 0.016601583, 0.018235873, 0.029393736, 0.0035919147, -0.012509975, -0.052391395, 0.018917808, 0.013238939, -0.013015547, -0.0038094283, 0.015214198, 0.050180987, -0.039669786, 0.00024598883, 0.046065863, -0.04378491, -0.017271759, 0.03125142, 0.030428397, 0.018776719, -0.026007578, 0.0076423716, 0.0046118773, 0.0046971194, 0.012227794, -0.020434525, 0.009076786, 0.029887551, -0.022162877, 0.0040886686, 0.029652402, 0.002882056, 0.011128468, 0.00455309, 0.027206842, -0.0162371, 0.031110331, -0.0051938733, 0.0076188566, 0.027136298, -0.035836846, -0.013262454, 0.020058285, 0.019317564, 0.0034390672, 0.018694416, 0.004279728, -0.015131895, -0.04042227, 0.026336787, 0.035789814, -0.035977934, -0.0024338013, 0.04129232, -0.014732141, -0.018929567, -0.03228608, 0.008947453, 0.004655968, -0.037929676, 0.00088254694, -0.06099788, -0.014767413, 0.0038447008, -0.0057494147, -0.028735317, 0.012380642, 0.009206118, -0.004356152, -0.014003176, -0.012921487, 0.012274824, -0.04331461, 0.027441993, -0.04002251, 0.014567536, 0.0020120014, -0.0034008552, -0.054037444, 0.0014638081, 0.02360905, -0.0034890366, 0.011434164, -0.018341692, 0.033297226, 0.019693803, 0.053661205, -0.012357127, -0.01918823, 0.054742895, 0.025184553, -0.060245402, 0.034567036, -0.0119808875], [0.013145372, -0.012827522, -0.029287618, 0.03196664, 0.025428008, 0.044862274, -0.021954361, 0.017345535, -0.016187653, 0.010647979, -0.029469246, 0.008814665, 0.012191822, -0.0014941794, 0.0027684178, 0.024156608, -0.042523805, 0.0051622265, -0.023566315, -0.020580795, -0.017266072, -0.04990247, -0.046678558, 0.009240357, 0.011749103, 0.015324916, -0.011539094, 0.020410517, -0.031353645, 0.019071007, 0.029968726, 0.013531334, -0.006680528, -0.014257848, 0.014938955, -0.036166802, 0.0018914919, -0.011919379, -0.035031624, 0.0110509675, -0.022658173, 0.024270127, 0.005562377, -0.039436117, -0.006260512, -0.019422913, -0.0425011, -0.0046230163, -0.005287096, -0.028129734, 0.032307193, -0.050311133, 0.005338179, -0.040798333, -0.023952276, 0.02454257, 0.022726282, -0.075512104, 0.038913935, -0.05258149, -0.055351328, 0.019876983, 0.022748986, -0.0072481176, -0.02803892, -0.01807205, -0.0052076336, 0.01338376, 0.01591521, -0.004472605, -0.02143218, 0.01090907, -0.011346114, -0.017141202, -0.006794046, -0.057167612, 0.09680806, 0.014541643, -0.0058121164, -0.007872466, 0.0041093477, -0.037824165, -0.04270543, -0.01056284, 0.035939768, -0.050856017, 0.034600254, -0.06947295, -0.007072165, -0.0060107727, 0.03164879, -0.006856481, 0.05244527, 0.055169698, -0.078372754, 0.004574771, -0.008383296, 0.0103812115, -0.035281364, -0.02588208, -0.027516738, -0.02638156, -0.05485185, -0.027312405, 0.029946022, 0.021068921, 0.05035654, -0.01138017, -0.022090582, 0.072333604, 0.026313448, 0.0019354802, -0.015109232, 0.0025796941, -0.023566315, -0.00014775064, -0.015268157, -0.074195296, -0.034259703, 0.03596247, -0.039299898, -0.0056361635, 0.06556794, 0.04368169, -0.017652033, -0.007934901, 0.008962238, 0.018957488, 0.004739372, 0.020660257, -0.022919264, 0.040230744, 0.05993745, 0.015211399, 0.046338007, -0.01940021, 0.037619833, -0.043749798, -0.059392564, 0.0077703, -0.024769606, -0.0025640854, -0.042478397, 0.02352091, -0.049630024, -0.02080783, -0.028901657, -0.008491139, -0.06456898, -0.009382254, -0.015007066, -0.027471332, 0.024837716, 0.018117456, 0.032057453, -0.036893316, 0.0019099386, 0.022056527, -0.010006603, 0.02327117, 0.04084374, -0.07764624, 0.011499363, 0.03748361, 0.0008684119, -0.08536546, 0.036643576, -0.0069416193, -0.04363628, 0.028016217, -0.018503418, -0.039753966, 0.026971852, -0.008820341, -0.020966755, 0.020478629, 0.03341967, 0.022204101, 0.0016630372, -0.05980123, -0.041275106, 0.005497104, 0.04554338, -0.04794996, 0.053580448, 0.06075478, -0.020592147, 0.02910599, 0.02626804, -0.036439244, -0.024519866, -0.013372408, -0.017538516, -0.03748361, -0.0063342988, -0.05276312, -0.022226805, -0.0862736, 0.0019808873, 0.024633383, -0.037846867, -0.044362795, 0.00088614906, 0.03464566, -0.05149172, 0.03178501, 0.046451524, -0.02080783, 0.019059654, -0.024202015, 0.020387815, 0.035871655, -0.009773891, -0.033828333, -0.0024519865, -0.008116529, -0.05403452, 0.02581397, -0.051900383, -0.05880227, 0.046769373, -0.020444574, 0.026994556, -0.041138887, 0.009075756, 0.05467022, -0.0013544104, 0.017674737, 0.03832364, 0.029287618, 0.03603058, -0.04288706, -0.03571273, 0.026903741, -0.047677517, -0.03369211, -0.011715047, 0.032057453, 0.060800187, -0.00963767, 0.009944168, 0.04586123, -0.030899571, -0.023861462, 0.029787097, 0.022056527, -0.008201668, 0.029355729, -0.014212441, -0.027176185, 0.032511525, -0.014042164, 0.025337195, 0.010000926, -0.018355845, 0.02797081, 3.724806e-05, -0.08068852, 0.0090417005, -0.0070948685, 0.0128956335, 0.023123596, 0.00075773196, 0.08568331, -0.010318777, -0.012396154, 0.023543611, -0.043409243, -0.061889958, 0.022124639, 0.024837716, -0.04858566, -0.030059539, 0.022612765, 0.0621624, -0.03836905, 0.04917595, 0.024315534, 0.016357929, 0.07655647, 0.0024690144, 0.008133558, 0.00624916, 0.037574425, 0.054534, -0.014507587, -0.036620874, -0.020762423, -0.02835677, 0.0028180818, 0.014507587, -0.053807482, 0.04002641, 0.028720029, 0.054443184, 0.024338238, 0.023816055, 0.009467392, -0.051854976, 0.034849994, -0.021704622, 0.003408375, -0.015041121, -0.060981814, -0.0055339974, 0.032579638, 0.008854396, 0.07392286, 0.009240357, -0.0074524498, 0.089497514, 0.00091949495, -0.014700567, -0.049539212, 0.0367798, -0.017129852, -0.004475443, 0.013758369, 0.042569213, -0.018174216, -0.04111618, -0.036825206, -0.10198448, -0.0029287618, 0.030604426, -0.011136105, -0.03832364, -0.021227846, -0.037778758, -0.0024023226, -0.078736015, -0.022238156, 0.014802733, -0.0060788835, -0.052672304, -0.096898876, -0.022351675, -0.057167612, 0.019774817, -0.030331982, -0.0062832157, 0.043341134, -0.038777713, -0.0602553, 0.008689795, 0.006260512, 0.0065613342, -0.006907564, 0.026744816, -0.040866442, 0.001324612, 0.044385497, 0.056849763, 0.015279509, 0.004418684, -0.0070551373, -0.002694631, -0.035576507, -0.010642303, 0.018162863, 0.0951734, -0.08236859, 0.0006176083, 0.039277192, -0.016414689, -0.031467162, -0.06352462, -0.01991104, -0.013996757, 0.048676476, -0.04606556, -0.02055809, 0.0073105525, -0.037710644, -0.03857338, -0.0109374495, 0.05789413, 0.00529561, -0.042069733, -0.013905942, -0.025836673, -0.022930615, -0.008808989, 0.018730452, 0.026222635, 0.017652033, -0.012634542, 0.021988416, 0.026971852, -0.011425576, -0.017277423, 0.029809799, -0.004174621, -0.033578593, 0.027448628, 0.07110761, -0.05480644, 0.006714584, 0.006901888, 0.014394069, 0.009416309, -0.04245569, -0.014360014, -0.01941156, 0.0103301285, 0.036303025, -0.022556007, -0.012123711, 0.0036354107, 0.037006836, 0.005128171, 0.021193791, -0.0016304008, 0.021806788, 0.004955056, 0.05126468, 0.0073900153, 0.04370439, -0.0030053863, 0.00047358248, 0.015324916, -0.06007367, -0.0027215916, 0.012021545, 0.002542801, 0.0412297, -0.035758138, 0.055669177, -0.0117831575, -0.039209083, -0.023361983, 0.011136105, -0.002904639, -0.026404263, -0.046088267, -0.04286436, -0.048948918, -0.052036606, 0.0021511642, 0.011624233, 0.0020944052, 0.005233175, 0.0076340786, 0.018764509, -0.01991104, -0.019071007, -0.075012624, 0.031943936, 0.034532145, -0.020217538, -0.020001853, 0.008377621, -0.04597475, -0.03312452, 0.08418487, -0.0077986796, 0.0074410983, -0.02213599, 0.018128809, -0.07306012, 0.02715348, 0.007957605, 0.045361754, -0.010244991, 0.041774586, -0.0006935234, -0.02974169, 0.050628982, -0.005000463, -0.0016076972, 0.020853238, -0.0009606452, -0.075693734, -0.014870845, -0.04863107, -0.024088498, -0.034146182, -4.347824e-05, 0.037687942, -0.060209893, 0.009949843, -0.034532145, -0.00057610334, 0.012464265, 0.034804586, -0.015358971, 0.02118244, 0.027607553, 0.055987027, -0.013349704, 0.010693386, 0.03748361, 0.04781374, 0.009688753, -0.0052019577, -0.04338654, -0.0704265, -0.029650874, 0.015324916, -0.00030507936, 0.037960384, 0.020978108, -0.0073048766, 0.008076798, 0.029832503, -0.023316575, -0.043931425, -0.0010216611, 0.00562765, -0.07147087, 0.0018446659, 0.0017779741, -0.034532145, -0.009331171, -0.026563188, 0.00938793, -0.012486969, 0.0052473648, 0.014609753, 0.005497104, -0.021227846, -0.013939998, -0.045452565, -0.016664427, -0.01762933, 0.02340739, 0.02949195, -0.0029855208, -0.00226752, -0.02701726, 0.0010188231, 0.009779567, -0.03989019, 0.018083401, -0.008979266, -0.02962817, 0.017799607, 0.027357813, -0.041524846, 0.033714816, -0.0014728947, 0.060845595, 0.025950192, 0.02054674, -0.021965712, 0.044067647, 0.03285208, 0.011107726, -0.018128809, 0.06334299, -0.072515234, 0.04529364, -0.022885209, 0.043931425, 0.02626804, -0.039549634, -0.00929144, -0.050538167, 0.014598401, -0.0029344377, 0.021613808, 0.0075716437, 0.08404865, 0.026086412, -0.007180007, -0.06638527, 0.06157211, 0.032715857, -0.011953435, 0.006748639, 0.0059256344, 0.055987027, 0.005119657, -0.0259956, -0.054715626, 0.06139048, -0.015234102, -0.016755242, 0.017095795, -0.01820827, 0.0046173404, -0.017209314, -0.012838874, -0.039095566, -0.0034764856, 0.0136335, -0.017107148, -0.04508931, -0.021000812, 0.027289702, -0.01732283, -5.024054e-05, 0.008916831, -0.0151319355, 0.01750446, 0.020149427, -0.023702538, 0.024224719, -0.010977181, 0.017969884, 0.014598401, -0.0068848603, -0.012078304, 0.00060909445, -0.05798494, -0.028379474, 0.026858335, -0.049766246, 0.015449786, 0.023089541, -0.0589839, -0.0026080736, 0.02061485, -0.039731264, 0.018412603, -0.011045291, -0.0044499016, 0.05131009, -0.0037262249, 0.02835677, 0.036507357, -0.006708908, 0.08858937, -0.023725241, 0.01927534, 0.029673578, -0.0013920132, 0.0021710298, -0.011119078, -0.018889379, -0.017663386, -0.04649693, 0.0012657245, -0.024111202, 0.007838411, 0.030876867, -0.019195877, 0.04345465, -0.02340739, 0.035031624, 0.026608596, 0.020194834, 0.025042048, 0.03260234, -0.031739604, -0.028107032, 0.04908514, 0.016187653, 0.053625856, -0.021863546, -0.025836673, 0.034668367, 0.025700452, 0.05176416, -0.008298159, -0.016914167, -0.00022082779, 0.025042048, -0.026994556, 0.029310321, -0.040889148, -0.026449671, 0.0029202478, 0.026358856, 0.0020546739, -0.03603058, -0.023339279, -0.015551952, 0.010625275, 0.03832364, 0.06988162, -0.028969767, -0.02772107, -0.0142692, -0.04166107, -0.02327117, 0.0074751535, 0.04168377, -0.012078304, -0.023929574, -0.010227962, -0.022181397, -0.026676705, -0.028742732, -0.049811654, 0.001511207, -0.034395922, -0.04649693, -0.04522553, 0.014575698, 0.007838411, -0.042296767, -0.03253423, 0.05589621, 0.002112852, -0.005091278, 0.0010926097, -0.025791267, 0.015631415, 0.0061356425, 0.006430789, -0.024247423, -0.03469107, -0.029650874, 0.0026917933, 0.0005172159, -0.006731611, 0.0022419784, -0.075693734, -0.018378548, 0.011930731, 0.0038255532, 0.0059596896, 0.046769373, 0.039299898, 0.007889494, -0.025132863, 0.0007733407, -0.05993745, 0.0026861173, -0.015120584, -0.017515812, 0.010971505, -0.049448397, 0.014212441, -0.06738422, 0.031557977, -0.013735666, 0.056214064, -0.0052729063, 0.013474574, -0.00156229, -0.00232286, 0.004594637, -0.020694314, -0.006640797, -0.008678443, 0.012214526, 0.02987791, -0.00562765, -0.008479787, -0.008843044, -0.03369211, -0.037665237, 0.014859493, -0.04147944, 0.029946022, 0.008650064, -0.012929688, -0.024746902, -0.0131226685, 0.003947585, 0.040117227, -0.0032721534, 0.00958091, 0.050583575, 0.012350747, 0.0015708039, 0.024202015, -0.037619833, -0.021670567, 0.0014345824, -0.0055169696, -0.0336013, 0.008286807, 0.0074467743, -0.022873856, -0.050538167, 0.040185336, 0.011817213, 0.02803892, 0.05766709, -0.013758369, -0.0025740184, -0.00015289441, -0.018787213, -0.016403336, -0.007889494, -0.015722228, 0.013054558, 0.026949149, -0.02252195, 0.008774933, -0.026654003, 0.037256572, 0.023952276, 0.0038028497, -0.0085989805, -0.0042994902, -0.00995552, 0.042001624, 0.029264914, 0.018321788, 0.005673057, 0.08486598, -0.008559249, 0.04561149, -0.048313215, -0.041638363, 0.0011295031, -0.048994325, -0.03419159, -0.025723156, 0.00821302, 0.02563234, -0.025836673, -0.040503185, -0.027743774, -0.01877586, 0.020455925, 0.023679834, 0.046201784, 0.015722228, 0.024724199, -0.0038000117, 0.04134322, 0.0071970345, -0.00464572, 0.015676823, 0.03278397, 0.01967265, -0.015778989, -0.0039617745, -0.013712962, 0.012906985, 0.033260744, 0.003672304, -0.029673578, -0.014995715, -0.014984363, -0.020217538, -0.025904784, -0.031353645, 0.03242071, 0.01706174, 0.011374493, -0.04452172, 0.025064752, 0.020331055, -0.015075177, -0.0030053863, 0.0131226685, -0.023293873, -0.010920422, -0.048812695, 0.023861462, -0.009773891, 0.0074865054, -0.0034793236, 0.0022547492, 0.06570416, 0.0037914978, 0.012373451, 0.004208676, -0.015211399, -0.009807946, -0.04508931, 0.039368007, -0.023384687, 0.027539441, 0.05226364, 0.034395922, 0.0072651454, -0.014303255, -0.0052643926, -0.021352716, -0.013531334, -0.049539212, -0.00034959966, -0.09444689, -0.047541294, 0.023679834, 0.013769721, 0.047450483, 0.019684004, -0.06593119, -0.0009124001, -0.021591105, 0.033396967, -0.007713541, -0.006896212, 0.024587976, -0.0026903742, -0.025337195, 0.023169003, -0.025405306, -0.008547897, -0.00045868327, -0.020353759, 0.026041005, 0.01306591, 0.006203753, -0.008457083, 0.017788254, 0.0028322716, 0.012532376, -0.041842695, -0.016970925, 0.0150184175, 0.011363141, -0.0034736476, -0.0037574423, -0.008967914, -0.02188625, 0.006975675, 0.011715047, 0.008178964, 0.013145372, 0.014076219, -0.025927488, -0.012509672, 0.024951234, 0.055487547, -0.025450712, 0.02461068, 0.010125796, -0.025450712, -0.029355729, 0.0073275804, -0.029855207, 0.0034906752, 0.027948106, 0.011737751, 0.06425113, -0.02454257, -0.0075092087, -0.0054744007, -0.005829144, 0.03405537, -0.018991545, 0.032897487, 0.0128956335, 0.05176416, -0.006731611, -7.454046e-05, -0.014609753, 0.0045492295, 0.011805861, -0.049947876, -0.0016105352, 0.01616495, 0.1065252, -0.014246496, -0.003507703, 0.026926445, -0.037892275, -0.015154639, 0.047087222, 0.0009088527, -0.03391915, -0.0044158464, 0.018083401, 0.0047308584, 0.0011827146, -0.013974053, -0.012918336, 0.0050089774, 0.04922136, 0.0080938265, 0.055532955, 0.027516738, -0.029923318, 0.0045520677, -0.0048273485, 0.00767381, -0.007951928, 0.030831462, -0.029083285, -0.023134947, 0.031035794, -0.04490768, -0.0055226455, 0.025972895, -0.019479671, 0.009172246, 0.015165991, -0.004824511, -0.005176416, -0.020717015, 0.0374155, 0.010568516, -0.04572501, -0.013099966, -0.02454257, -0.012123711, -0.019842928, 0.013270242, 0.046769373, 0.0076227267, -0.027857292, 0.047495887, -0.022873856, 0.028788138, 0.029015174, -0.017424997, -0.005701436, 0.019184524, 0.008644388, 0.010994208, -0.014780031, 0.0012281218, -0.017754199, -0.020240242, 0.025223676, -0.043045986, 0.005519808, 0.0007712122, -0.0005608494, -0.050401945, -0.0011685248, 0.01313402, -0.008979266, 0.001724053, -0.032239083, 0.0061924015, 0.02899247, 0.03278397, -0.024497163, 0.0057042744, 0.077373795, -0.0034991892, -0.039186377, 0.020966755, 0.010222287], [0.046226997, 0.016752096, -0.02142852, 0.023565268, 0.027692242, -0.006059204, -0.03721603, 0.007332095, -0.013882751, 0.0073748296, -0.016483476, -0.019890063, -0.01472524, -0.032942533, 0.03494497, 0.047545675, -0.025372345, 0.0035561575, -0.0048717833, -0.02835158, -0.013504242, -0.04854689, -0.03609271, -0.01451767, -0.012472497, 0.007197785, -0.02245416, -0.0011958153, 0.015775299, 0.012539652, 0.02905976, 0.015311318, 0.047741033, -0.0039987694, -0.005054933, -0.010769205, -0.009212432, 0.05636128, 0.0016544528, -0.010451745, -0.024981625, 0.004945043, -0.031355236, -0.006636126, -0.048034072, -0.0055005974, 0.025396764, -0.0025686752, -0.022490788, -0.039731286, -0.015958447, 0.013357721, -0.030695897, -0.013577501, -0.05836372, -0.0132234115, 0.03606829, 0.016947456, 0.027423622, 0.026813123, -0.08239297, 0.02964584, 0.04358964, -0.0022374794, -0.02212449, 0.0073748296, 0.015408998, 0.04283262, 0.06520131, 0.053040165, 0.019865643, -0.0117704235, 0.025030466, 0.0047374736, 0.027179422, -0.04385826, 0.05782648, 0.017155027, 0.015360159, -0.020488352, 0.066471145, -0.01067763, 0.0436629, 0.020256363, -0.01089741, -0.029108599, 0.02815622, -0.1265931, -0.032991376, 0.012258823, -0.00728936, -0.018901054, 0.031159878, -0.0039865593, -0.037411388, 0.017765526, 0.04307682, 0.010329646, -0.032796014, -0.027130583, -0.01395601, -0.023382118, -0.06319887, -0.05084237, 0.061635993, 0.0737483, 0.016837567, 0.008840028, -0.033430934, 0.02108664, 0.02111106, -0.02130642, -0.0004967937, 0.047081694, -0.049157392, 0.024847316, -0.05684968, -0.0737483, -0.0022878456, -0.02157504, -0.09470063, -0.088888675, 0.067447945, -0.034041435, 0.031916894, 0.025250245, 0.00043688845, 0.052991327, 0.031379655, -0.0042460216, -0.025616545, -0.046129316, 0.015384579, 0.019572603, 0.031868055, 0.039316144, 0.09030504, -0.029108599, -0.076385655, -0.0076129246, -0.05074469, 0.008827818, -0.022734988, 0.027618982, -0.009847351, -0.026593342, -0.027692242, -0.016190438, -0.07018298, -0.038217247, -0.031868055, -0.054651882, -0.008394363, 0.010561636, 0.03389491, -0.018656854, 0.010842465, -0.009126962, 0.020940121, 0.0436629, 0.05543332, -0.033113476, 0.0001473783, 0.0298412, 0.024481015, -0.04388268, 0.010073236, -0.054749563, -0.034310054, 0.012362608, 0.01473745, -0.015213639, 0.012527443, 0.00041590256, -0.031648275, 0.0029227647, 0.012356503, 0.01459093, -0.032087836, -0.029670259, -0.017093977, 0.0589498, 0.040756922, -0.03687415, 0.009517682, 0.048742253, 0.016459057, 0.039584763, 0.019487133, -0.018998733, -0.04542114, 0.024346706, 0.0037789897, 0.010940145, -0.0023565267, -0.015738668, -0.031550597, -0.015506678, -0.0220146, 0.04935275, 0.048766673, -0.054310005, 0.032625075, -0.013198991, -0.006782646, 0.038485866, 0.040170845, 0.046349097, 0.0032020682, 0.03492055, 0.019352823, 0.0049725156, 0.011868103, -0.04395594, -0.012698382, 0.030256338, -0.048839934, -0.020793602, -0.02903534, -0.025299085, 0.032673914, -0.034700774, 0.016227068, -0.02219775, 0.0015048804, 0.006483501, 0.0003592406, 0.010982879, 0.015824137, 0.014969439, -0.03775327, -0.06251511, -0.032063417, -0.00726494, -0.062417433, 0.020988962, -0.03465193, -0.025640965, 0.0287423, -0.03413911, 0.044835057, 0.007973119, -0.03726487, 0.022161119, 0.024407756, 0.032747176, 0.055140283, -0.014908389, -0.02908418, 0.052502926, 0.0029563422, 0.020427302, -0.004584849, 0.037680008, -0.017167237, 0.054847244, 0.016336957, 0.0015407472, -0.0077777593, 0.018632434, -0.025934003, 0.04869341, -0.018815584, 0.0019184935, -0.0047191586, -0.029816778, 0.027838761, -0.031452917, -0.027252682, -0.016752096, 0.044175718, -0.058998637, 0.039731286, 0.03589735, 0.05137961, -0.015579939, 0.08107429, 0.02257626, -0.035384532, 0.055042602, -0.027838761, 0.04283262, 0.00041781037, 0.025738643, -0.009835142, 0.02172156, 0.005860792, -0.017631216, -0.004239917, 0.02937722, -0.012844902, 0.0069535854, -0.009920611, -0.0218925, 0.0026999325, -0.0006772725, 0.0589498, -0.012832692, -0.020561611, 0.0022390056, -0.026715443, -0.03543337, -0.06383379, -0.027448041, 0.041758142, 0.051965687, -0.00038556836, 0.05152613, 0.026666604, -0.04466412, 0.016532317, 0.016507898, -0.018217295, -0.028058542, -0.026153784, 0.01489618, 0.002530519, 0.05040281, 0.053137846, -0.0214041, -0.019194093, -0.04285704, -0.087863036, 0.022490788, 0.0025656228, 0.020610452, 0.045128096, -0.031794798, 0.027789922, 0.012539652, -0.08083009, 0.022796039, 0.02090349, 0.002463364, -0.03763117, -0.06300351, 0.030915678, -0.05167265, 0.031111037, -0.037948627, 0.031111037, 0.027741082, -0.01055553, -0.01452988, 0.016288117, -0.030500539, -0.027618982, 0.019633653, 0.026642183, -0.017631216, 0.0014255155, 0.015250269, 0.002217638, -0.0029410797, 0.007075685, -0.014102531, -0.041587204, -0.031770375, -0.009987766, 0.05064701, 0.040341783, -0.02233206, 0.031721536, 0.069987625, 0.047936395, 0.004007927, 0.015506678, -0.010561636, 0.0055219647, 0.025763065, -0.044688538, 0.038314927, -0.019096414, -0.027350362, -0.033919334, 0.006312561, 0.0421977, -0.011605589, -0.05030513, 0.016166018, -0.026544504, -0.005824162, -0.051965687, 0.0029899196, -0.0075823995, 0.012368713, -0.039462667, 0.026568923, -0.0069841105, -0.026593342, -0.00057844794, 0.003090652, 0.040732503, -0.037069507, 0.02212449, 0.0056104874, -0.027496882, 0.07267382, 0.004963358, 0.027960861, -0.023443168, 0.012283243, -0.027765501, -0.048864353, 0.03455425, -0.076874055, 0.011636114, 0.0011973415, -0.017814366, 0.09709378, -0.045396715, -0.0056318548, 0.0076495544, 0.041880243, 0.021184321, 0.0058943694, 0.020195313, 0.017484697, -0.023492007, 0.0013591237, 0.03814399, 0.00063987944, -0.04258842, 0.056263603, -0.04554324, 0.011526224, -0.06905966, 0.054993764, -0.008858343, -0.039487086, -0.010549425, -0.02117211, -0.031404078, -0.0056806947, 0.004661161, -0.031770375, -0.02915744, -0.02263731, -0.02109885, 0.026715443, 0.006428556, -0.022503, 0.004346754, 0.026202623, -0.024065876, 0.003577525, -0.032649495, -0.04947485, 0.040781345, 0.0062881415, -0.016227068, -0.013015842, -0.059633557, -0.042564, 0.0421977, -0.023162337, 0.06788751, 0.02932838, 0.050940048, -0.07975561, -0.002333633, -0.01128813, 0.03516475, 0.037069507, 0.05098889, -0.012338188, -0.041513942, 0.0419535, 0.0046825283, 0.05733808, -0.04349196, 0.0044780113, 0.012142828, 0.033430934, -0.018815584, -0.030622637, -0.008345524, 0.049279492, 0.0058577396, 0.02212449, -0.0054639676, 0.022100069, -0.0061172014, 0.083907, 0.007173365, -0.027936442, 0.008528673, 0.04986557, 0.040170845, 0.02090349, -0.032551814, 0.03682531, -0.029548159, -0.0035347901, -0.010018291, 0.009743567, -0.0068375906, -0.044859476, -0.027155003, -0.0058272146, 0.001015718, 0.062856995, 0.032820433, 0.00041895505, 0.034236792, 0.012441973, -0.039316144, 0.005763112, 0.015518889, 0.047765452, 0.013870541, -0.017728895, -0.05079353, -0.03802189, 0.006199619, -0.03501823, -0.024664165, 0.029572578, -0.019987741, 0.0014178843, -0.014126951, -0.054310005, -0.030402858, -0.025103725, -0.044566438, -0.0014911442, -0.00060553884, 0.0021520096, 0.018339396, -0.049279492, 0.023308858, -0.024798475, 0.019951113, 0.0010019818, 0.031965736, 0.0018086038, 0.036019452, -0.0057264823, 0.01445662, -0.01078752, -0.023565268, 0.04241748, -0.032502975, 0.008150164, -0.019780172, 0.05054933, 0.06441987, -0.031770375, -0.0057173246, 0.017704476, -0.030964518, 0.024505436, 0.004545166, 0.012649543, 0.02881556, -0.03455425, -0.024615325, -0.030451698, -0.022796039, -0.013614131, -0.0083577335, 0.009829036, 0.070231825, 0.030964518, -0.008449309, -0.027350362, -0.019902272, -0.020012163, -0.02168493, 0.024493227, -0.001151554, 0.007197785, 0.00047008434, -0.024126926, -0.016996296, 0.055189125, 0.013565292, -0.029303959, -0.024664165, -0.017936464, -0.048253853, 0.011764319, 0.008534778, -0.034480993, 0.004484116, 0.011202659, -0.013113522, -0.005799742, -0.03748465, -0.009658096, 0.02064708, 0.032380875, -0.001207262, -0.022234378, -0.013748441, -0.019609233, 0.006211829, -0.020378461, 0.030549377, 0.045201357, -0.010189231, -0.05811952, 0.019523762, -0.0142978905, -0.026056103, -0.011886419, 0.0021214846, -0.06676419, 0.017875414, 0.009126962, -0.0873258, 0.006721596, 0.041343004, -0.020158682, -0.0024099455, -0.027814342, 0.023968197, 0.068961985, 0.022026809, 0.07965793, 0.062466275, 0.022429738, 0.041269742, -0.017411435, 0.02227101, -0.023992617, 0.017741105, 0.011776528, -0.0076922895, 0.0035256327, 0.023699578, -0.05089121, -0.032038994, -0.037533488, 0.0141391605, -0.0038003572, 0.0026236202, -0.0002739615, -0.0068742204, 0.047618933, 0.013430981, 0.018827794, 0.0032997478, 0.06373611, -0.026300304, -0.047130536, 0.012625122, -0.008589723, 0.033186734, -0.0043620165, -0.025030466, 0.039438244, -0.029938878, 0.02952374, 0.021050012, -0.01407811, -0.048913192, 0.056507803, -0.005134298, 0.027252682, -0.029548159, -0.06300351, 0.024713006, 0.026788702, 0.004484116, 0.0067277006, -0.010189231, -0.047081694, 0.0049419906, 0.017093977, 0.06485943, -0.05045165, -0.022356478, -0.022368688, -0.038730066, -0.038852166, 0.015201429, 0.01401706, -0.03638575, -0.027374782, -0.028082961, -0.025470024, 0.010476165, -0.033772815, -0.0021764294, -0.010140391, -0.05880328, 0.012246613, -0.024725216, -0.0075579793, -0.019548183, -0.023479797, -0.0117704235, 0.045128096, 0.021184321, -0.026666604, 0.02197797, -0.012735012, 0.009444422, 0.025738643, -0.00049259653, -0.031697117, -0.037313707, 0.027448041, 0.026837543, 0.03670321, -0.0030708108, -0.023064658, -0.0018864424, -0.024395546, 0.0297191, -0.025372345, 0.0011958153, 0.053528566, 0.020073213, 0.008601933, -0.018229505, 0.023394328, -0.09543323, 0.031990156, 0.019035364, 0.036922988, 0.015225849, -0.016178228, 0.0107264705, -0.05792416, 0.017667845, -0.025421185, 0.053528566, 0.00181013, 0.0059523666, -0.026373563, 2.768709e-05, 0.0074664047, -0.018766744, -0.02180703, -0.020354042, -0.02881556, 0.047203794, 0.023809467, 0.016275907, -0.039658025, -0.017008506, -0.059242837, -0.032576233, 0.0031181243, -0.007173365, -0.044957157, 0.022161119, 0.009609257, -0.025421185, -0.041855823, -0.006446871, 0.002301582, 0.04593396, 0.003983507, -0.013650761, -0.012649543, -0.00045024313, -0.0051678754, -0.009761881, 0.013589711, -0.01462756, -0.011526224, 0.06564087, -0.027936442, -0.030524958, -0.05767996, 0.030744737, 0.03645901, 0.02854694, 0.04918181, -0.0017948676, -0.0038827746, 0.016678836, -0.026715443, 0.033162314, -0.017020717, -0.039755706, -0.03633691, -0.0037454122, 0.038559128, 0.04156278, -0.046422355, 0.026202623, 0.029230699, 0.03440773, -0.01462756, 0.04363848, -0.027252682, 0.012228298, 0.027643401, -0.0068864306, 0.0059065796, 0.061342955, 0.0062881415, 0.048473634, -0.010054921, 0.051477287, 0.02212449, 0.0028891873, -0.07223426, 0.003504265, 0.016703257, -0.019682493, -0.055628683, -0.024810685, -0.0421977, -0.046202578, 0.016068337, 0.0045207464, 0.026104944, -0.014981649, 0.008467623, 0.016349167, 0.0049603055, -0.004749683, -0.017484697, -0.00705737, 0.0049236757, -0.025665384, -0.032161094, -0.026813123, -0.0055097546, 0.030744737, 0.068473585, 0.0123076625, 0.014847339, -0.02188029, -0.029621419, -0.031648275, -0.075604215, -0.018119615, -0.006446871, -0.002321423, 0.037045088, -0.0144322, 0.04358964, -0.00054715987, 0.034749612, -0.04114764, -0.015934028, -0.0032020682, -0.0036172075, -0.024835106, 0.019987741, 0.029890038, -0.040463883, 0.0034920552, 0.044737376, 0.039584763, 0.04830269, 0.019780172, -0.005164823, -0.02932838, -0.013137942, -0.031721536, -0.011025615, -0.024151346, 0.012551863, 0.027374782, 0.0025350978, 0.0020405934, -0.02178261, -0.023638528, -0.0065811807, -0.029108599, -0.048595734, -0.01459093, -0.0032783805, -0.01421242, -0.024713006, 0.00025335714, 0.04310124, 0.0047191586, -0.020671502, 0.059975438, 0.018363815, 0.010061026, -0.015628777, 0.0016971877, 0.006300351, -0.059487037, -0.020390673, -0.027521301, -0.032991376, 0.03650785, 0.013833911, -0.0023550005, 0.0059126844, 0.011623904, -0.030378439, 0.027618982, -0.01472524, 0.0111294, 0.01462756, -0.02144073, -0.040732503, -0.004413909, 0.023528637, 0.01423684, 0.01432231, -0.030402858, -0.0078815445, 0.014163581, -0.016629998, -0.006361401, -0.012600702, -0.018595804, 0.016910827, 0.0001976491, 0.025860744, 0.044712957, -0.01421242, 0.026373563, -0.017777735, 0.02207565, 0.004829048, 0.015421209, -0.051965687, 0.019084204, -0.0033516404, 0.004001822, 0.038388185, -0.032869276, 0.016190438, 0.02150178, 0.0077594444, 0.02257626, -0.032063417, -0.006162989, 0.018302765, 0.02147736, 0.0284981, -0.015567728, 0.020195313, 0.0021596407, -0.0021626933, -0.026568923, -0.018827794, 0.04249074, 0.098558985, -0.043785, -0.015982868, 0.023101289, -0.05709388, -0.023638528, 0.0042704414, 0.067447945, 0.019230723, -0.0059035267, 0.03587293, -0.032038994, -0.016764307, 0.015445628, -0.031159878, -0.012039043, 0.04297914, -0.006929165, 0.012057358, 0.002179482, -0.013479821, -0.02146515, 0.0059706816, 0.009908401, -0.016568948, 0.03655669, -0.0088644475, 0.010567741, 0.02810738, -0.047887553, 0.0067765405, 0.0056165922, 0.006562866, 0.0023076867, 0.0020573821, 0.0044291713, 0.004181919, -0.051330768, 0.025518864, 0.00020108315, -0.039609186, -0.032014575, 0.038192827, 0.009175803, -0.012124513, -0.04351638, 0.045396715, 0.009566522, -0.013003632, 0.033772815, -0.030109819, -0.01432231, 0.030549377, -0.005115983, -0.0067887506, -0.004389489, 0.0074236696, 0.009835142, -0.019926693, -0.044297818, -0.028400421, -0.009847351, 0.0030982832, -0.05255177, 0.049792312, 0.0042704414, -0.0005257924, -0.017631216, 0.002666355, 0.0066605457, 0.024358917, 0.018717904, -0.0071001053, 0.00087072444, 0.007094, 0.024798475, -0.011465174, -0.0023611055, 0.06373611, 0.027106162, -0.048229434, -0.026715443, -0.0016330852], [0.044561706, -0.01966697, -0.027470924, 0.054439176, -0.006207976, 0.034282103, -0.054037042, -0.0013493552, 0.0040276446, 0.02578698, -0.002348412, -0.03483504, -0.0074583683, -0.02450517, 0.006798614, -0.0025243466, -0.011027326, 0.003427582, -0.030838814, -0.00036875566, -0.008457425, -0.053785704, -0.027470924, -0.03202009, 0.026892852, 0.01888783, -0.043305032, 0.010669174, 0.0077474033, 0.0026437307, 0.02365063, 0.02636505, 0.025095807, 0.040238746, 0.0063462104, 0.00019566828, 0.00038642768, -0.006723213, -0.015457107, 0.015582775, -0.044209838, 0.029406203, 0.0073704007, -0.0063996194, -0.0007335842, 0.011768765, -0.0035218326, 0.0034244403, -0.00087653106, -0.030059675, -0.01579641, 0.0016650949, -0.046924256, -0.026214248, -0.011624247, 0.022004385, 0.034483172, -0.040716283, 0.031215815, 0.013484127, -0.059365343, 0.024681104, 0.014489467, -0.014879036, -0.07655666, 0.038755868, -0.020622043, -0.008338041, 0.04013821, 0.011071309, -0.0015983339, -0.025460243, 0.02995914, -0.03181902, 0.019918304, -0.081784435, 0.104253784, 0.016349345, 0.012566754, 0.0034432905, 0.04795473, -0.032723825, 0.0339051, -0.027646858, 0.0016383905, -0.012956323, 0.024140734, -0.11591574, -0.025259174, -0.008545392, -0.014615134, -0.052227426, 0.034784775, 0.0034621407, -0.07424438, 0.007653153, 0.015896942, 0.008287774, -0.0053565786, 0.0014836623, -0.010568639, -0.05876214, -0.04981461, -0.046547256, 0.0533333, 0.0580584, -0.002579326, 0.021702783, -0.039861742, 0.06479418, 0.013119691, -0.007552619, -0.03935907, -0.0029908873, -0.015494807, 0.018108692, -0.038730733, -0.05016648, -0.019981138, 0.017141052, -0.07922082, -0.0338297, 0.06564872, -0.0048224917, 0.04601945, -0.026214248, -0.010530939, 0.03518691, 0.024304101, -0.034407772, -0.045893785, 0.015507374, 0.017128484, 0.020094238, 0.025598478, 0.015846675, 0.07152996, -0.0481558, -0.0675086, -0.005334587, -0.02938107, 0.03677032, -0.021627383, 0.019189432, -0.048105534, -0.039459605, -0.0058026984, -0.02767199, -0.06303483, -0.03016021, -0.019151732, -0.054841314, -0.0037386091, 0.025171207, 0.039434474, 0.004618282, 0.0030678588, 0.017027952, -0.040540345, 0.03254789, 0.025686445, -0.030185342, -0.030336143, 0.07454598, -0.0036003748, -0.06770967, 0.040439814, -0.0384794, -0.036895987, 0.034081034, -0.010700591, -0.04471251, 0.020885944, -0.02601318, 0.025397409, 0.020546641, 0.03935907, -0.0051083853, 0.023047427, -0.04106815, -0.0043889387, 0.037800796, 0.035538778, -0.034885306, 0.03511151, 0.060672287, 0.017706556, 0.02737039, 0.050493214, -0.020031406, -0.017430088, 0.024819339, -0.037499193, -0.0051932107, -0.0064970115, 0.024756504, -0.0066729463, 0.006704363, 0.0050926767, 0.018209226, 0.024668537, -0.048759002, 0.03325163, -0.029054334, 0.011661948, 0.010920509, 0.031442016, 0.038956936, 0.038529668, 0.050417814, 0.031215815, 0.019956004, -0.003930252, -0.041193817, 0.0063776276, 0.01788249, -0.035563912, 0.00191643, -0.04242536, -0.021200113, 0.038303465, -0.014414066, 0.02020734, -0.037750527, -0.016663516, 0.023009725, 0.019453334, 0.020043971, 0.041445155, 0.066402726, -0.040238746, -0.04664779, -0.022481922, 0.019604135, -0.08560473, -0.010336155, -0.047100194, 0.01147973, 0.055645585, -0.012736404, 0.044209838, 0.037147325, -0.040464945, 0.007690853, 0.0068488806, 0.021853585, 0.030562345, 0.030135075, -0.034081034, 0.010964492, 0.019352801, -0.016688649, -0.03483504, 0.03604145, -0.030763412, 0.056650925, 0.05695253, -0.05039268, -0.013069424, -0.0036914838, -0.0076091695, 0.0433553, 0.017568322, 0.08806781, -0.03410617, 0.014577434, 0.009355948, -0.005494813, -0.021966685, 0.025359709, 0.028325463, -0.04370717, 0.04363177, 0.029858606, 0.04780393, -0.020094238, 0.061376024, 0.028149528, 0.015394273, 0.059516143, 0.011228395, 0.037901327, -0.00822494, 0.03762486, 0.0016745199, 0.024681104, -0.01644988, -0.03269869, -0.010530939, 0.0088469945, -0.012610737, -0.0005949572, 0.0048947507, -0.020508941, 0.04599432, 0.0032799228, 0.06489471, 0.041017883, -0.060370684, 0.020571776, -0.019842904, 0.0030819962, -0.032170888, -0.055092648, 0.027923327, 0.05051835, 0.0071944664, 0.073490374, 0.015419407, -0.050995886, 0.04041468, 0.032070354, 0.035010975, -0.03568958, 0.010235621, -0.009035496, 0.009475332, -0.0065661287, 0.06313537, -0.021112146, -0.028928667, -0.029431337, -0.105761796, 0.0044800476, 0.010486956, 0.010763424, 0.0240402, 0.025560776, 0.01012252, 0.004464339, -0.06710646, -0.020257607, 0.00924913, -0.0017609163, -0.025560776, -0.06258243, 0.026616383, -0.09113409, -0.01304429, -0.02636505, 0.020194773, 0.01347156, -0.04687399, -0.03754946, -0.011561413, -0.026138848, -0.013169957, -0.0036255084, 0.019440768, -0.021966685, 0.0015716297, -0.0072824336, 0.045818385, -0.005406846, 0.018950664, -0.007049949, -0.023261061, -0.04579325, -0.022268288, 0.015934644, 0.079421885, -0.047678262, 0.013697761, 0.051825292, 0.042023223, 0.0034809907, -0.014879036, 0.02349983, 0.028099261, 0.04064088, -0.037750527, 0.014577434, -0.02013194, -0.021124713, -0.051976092, 0.013421292, 0.06695566, 0.000312598, -0.038781002, -0.0010540364, 0.0019776928, -0.04828147, -0.04142002, 0.017027952, 0.001905434, 0.0031212673, -0.026390182, 0.014451766, 0.0055293716, -0.03355323, 0.010468106, 0.00012399851, 0.04285263, -0.033276763, 0.03410617, 0.023550097, -0.021979252, 0.055494785, -0.021350915, -0.018171526, -0.008469992, -0.004976434, -0.028702466, -0.022821225, 0.028777866, -0.0011255099, -0.009092046, -0.030411543, -0.032346822, 0.041394886, -0.040666014, 0.019566435, 0.0048539084, 0.05117182, -0.0021646232, 0.03669492, 0.04501411, 0.009808351, 0.0058843824, 0.0067797634, 0.058360003, -0.030914214, -0.0066917962, 0.007144199, 0.00020165712, 0.017606022, -0.032648426, 0.033151098, -0.033930235, -0.006302227, -0.028425997, 0.03956014, -0.03254789, 0.006867731, -0.03267356, -0.018510828, -0.050845087, -0.021841018, 0.017279286, 0.01892553, 0.0057932734, -0.03410617, 0.015670741, 0.030863946, -0.02458057, 0.016248813, -0.06956955, -0.013270492, 0.030185342, -0.005504238, 0.035086375, 0.010380139, -0.061828427, -0.031090148, 0.03262329, -0.023097692, 0.047351528, -0.018850131, 0.059415612, -0.08469992, 0.014577434, 0.021438882, 0.028601931, 0.025397409, 0.0036380752, -0.01551994, -0.05639959, 0.041872423, -0.009368515, 0.041269217, -0.02357523, 0.022016952, -0.021187546, 0.023022292, -0.034332372, -0.0339805, 0.00054076314, 0.011347778, 0.004294688, 0.0103110215, -0.009934018, 0.023311328, 0.021313215, 0.029934008, 0.034885306, -0.034005634, 0.0020986479, 0.010675457, 0.04405904, -0.0070939325, -0.04536598, 0.051724758, 0.008180956, 0.05725413, -0.012673571, -0.039886877, -0.012491353, -0.054439176, -0.02225572, -0.025334574, 0.015922077, 0.049839746, 0.023135394, -0.0067546302, 0.006211118, -0.028853266, -0.049412474, -0.021187546, 0.0434307, -0.016713781, 0.012686138, 0.00013764523, -0.049211405, -0.032447357, -0.015067537, -0.021099579, -0.034357503, 0.03925854, 0.02837573, 0.027898192, -0.004294688, -0.037524328, -0.040741414, 0.005922083, -0.028476264, 0.006459311, 0.014615134, -0.019252267, 0.02616398, -0.0039742356, 0.010688024, -0.009305681, -0.030512078, 0.0051460858, 0.03626765, -0.020307874, 0.03254789, -0.020270173, 0.0013627073, 0.03935907, -0.027194455, 0.034734506, 0.009104613, 0.024241267, -0.004234996, 0.04707506, 0.018133825, -0.008312907, -0.016173411, 0.025711577, -0.052478764, 0.049915146, -0.017053084, 0.014263265, 0.020873377, -0.050819952, -0.0108890915, -0.01966697, -0.017983025, 0.010530939, -0.00027175606, 0.026817452, 0.057304397, 0.014577434, 0.011856732, -0.056449857, 0.012177184, 0.01300659, -0.032723825, -0.0039459607, -0.0192774, 0.017530622, 0.005032985, -0.04463711, -0.046421587, 0.062682964, -0.036091715, -0.030587478, -0.015545074, -0.018988365, -0.05539425, -0.012661004, -0.04242536, -0.03812753, -0.008331758, 0.01110901, -0.018447993, -0.023939665, -0.028199796, 0.00016081518, -0.0079798885, 0.02287149, 0.0037134758, -0.027546324, 0.01761859, -0.0070310985, -0.00868991, 0.009462765, 0.0045428816, 0.058309738, 0.026742052, -0.057153594, 0.030863946, -0.012943756, -0.028627064, -0.0029783207, 0.01153628, -0.055444516, 0.05534398, 0.015607907, -0.08530312, 0.027395522, 0.03677032, -0.024203567, -0.006431036, -0.050920486, -0.00043316028, 0.047527462, 0.028727598, 0.06961981, 0.07152996, 0.02744579, 0.06755887, -0.036544118, 0.026616383, -0.009607283, 0.012692421, 0.0025934638, -0.0114671625, 0.011065027, -0.0119384155, -0.03503611, 0.006358777, -0.017316986, -0.0076468694, -0.007653153, 0.0036223668, -0.009066912, -0.024191001, 0.051473424, 0.05129749, 0.010920509, -0.00027450503, 0.070826225, -0.031994954, -0.043455835, 0.03073828, -0.013182525, 0.07203263, -0.016663516, -0.03247249, 0.029330803, 0.0015331439, 0.051222086, 0.021614816, -0.034458037, -0.03468424, 0.047929596, -0.024970138, 0.023889398, -0.043832835, -0.036619518, 0.020760277, 0.05740493, -0.014627701, -0.032120623, -0.023763731, -0.027043654, -0.015758708, 0.026465584, 0.03948474, -0.03468424, -0.055142913, -0.051196955, -0.02132578, -0.041972958, 0.021501714, 0.027697125, -0.026390182, -0.0290292, 0.0016588115, -0.019880604, 0.023876831, -0.024442336, -0.0040559196, -0.005067543, -0.044033904, -0.0024929298, -0.012145767, 0.0054602544, 0.008815577, -0.061174955, -0.02132578, 0.01842286, 0.029783206, -0.045692716, 0.022016952, -0.053433836, 0.008294057, -0.008583093, 0.021011611, -0.03194469, -0.008507692, -0.00024406992, 0.038102396, 0.0008474704, 0.0059566414, -0.015607907, -0.022004385, -0.035790116, 0.02202952, -0.015595341, 0.010398989, 0.027269855, 0.033452697, 0.025812112, -0.02578698, 0.04393337, -0.062029496, 0.021702783, 0.034307238, 0.02454287, 0.0027552608, -0.03898207, -0.006987115, -0.07947215, 0.042953163, 0.0095695825, 0.06931821, 0.0021489148, 0.02311026, -0.011837882, 0.0039962274, 0.0009754942, -0.031215815, -0.01819666, -0.02024504, -0.00074104575, 0.06368831, 0.012309135, 0.022708124, -0.017543187, -0.026390182, -0.06474391, -0.018334894, -0.030185342, -0.001966697, -0.038152665, 0.0013226508, 0.0030772837, -0.006440461, -0.038906667, 0.009820918, -0.032447357, 0.042249426, 0.037298124, -0.0050235596, 0.014326099, -0.035362843, -0.03460884, -0.019415634, 0.0029610414, -0.033779435, -0.050342415, 0.013019157, -0.015381706, -0.054137573, -0.05051835, 0.01687715, 0.0007296571, 0.0144392, 0.046446722, -0.010442972, 0.00874646, 0.0155702075, -0.0047942162, -0.002015393, 0.008771594, -0.042324826, -0.020534076, -0.006572412, 0.0019996846, 0.036895987, -0.04436064, 0.007169333, 0.030512078, 0.027269855, -0.012101783, -8.608962e-06, 0.0004995284, -0.0050455513, 0.030587478, 0.00060163334, 0.010757141, 0.07524972, -0.011624247, 0.013886263, -0.03596605, 0.017869923, 0.012629587, -0.040867083, -0.05539425, -0.008821861, 0.03724786, 0.0029861748, -0.033653766, -0.017593455, -0.04285263, -0.041822154, -0.0006503295, -0.0036883422, 0.016198546, -0.010713157, 0.042827494, 0.030260742, 0.00095350243, 0.005067543, -0.028903533, -0.034055904, 0.03355323, -0.021690216, -0.03066288, 0.0044706226, -0.017656289, -0.01812126, 0.04765313, -0.009381082, -0.031844154, -0.03053721, -0.015381706, -0.054489445, -0.043757435, -0.036870856, 0.0043072547, -0.041872423, 0.021815885, -0.04606972, 0.06388938, 0.0050361264, 0.006616396, 0.0014561726, 0.0028070987, 0.0075149187, -0.0077474033, -0.021061879, 0.010474389, -0.010920509, -0.016361913, 0.022431655, -0.0011702789, 0.029481603, 0.04579325, 0.023210794, -0.024555437, -0.025673877, -0.03282436, -0.037373524, 0.017895058, -0.030637745, 0.012441086, 0.032522757, 0.028124394, 0.02024504, -0.04136975, -0.008834428, 0.02558591, -0.02737039, -0.04049008, 0.002298145, -0.0527301, -0.029255401, -1.6015248e-06, -0.009368515, 0.06499525, -0.0014930874, -0.045089513, 0.04730126, 0.0145397335, 0.015457107, -0.020948779, 0.018975798, 0.014791069, -0.029707806, -0.021363482, 0.019453334, -0.014753369, 0.040113077, -0.0037543175, 0.015708443, 0.009959152, -0.009092046, 0.008011306, 0.02469367, -0.011944699, -0.0058938074, 0.010958209, 0.007860504, -0.02128808, 0.0058089816, 0.019252267, 0.0024536587, 0.006258243, 0.0144392, 0.03940934, 0.018548528, -0.014916737, 0.0056173387, -0.007571469, 0.015142938, -0.015545074, -0.018586228, -0.009267981, 0.040113077, -0.027697125, 0.03073828, -0.001053251, -0.011699648, 0.001471881, 0.020898512, -0.04473764, 0.04451144, 0.028224928, 0.020006271, 0.030436678, -0.045818385, 0.013873696, -0.021137279, 0.024216134, 0.0031825304, -0.03194469, 0.018749597, 0.020257607, 0.042400226, -0.0030992755, -0.0023955374, -0.011259811, 0.02078541, -0.007307567, -0.033276763, -0.03925854, 0.005331445, 0.08751487, -0.019893171, -0.02260759, 0.006685513, -0.039836608, -0.0072698668, -0.0037040506, 0.021665083, -0.0030694297, -0.031291217, 0.036720052, -0.0095633, 0.005416271, 0.000569431, -0.036368184, -0.023047427, 0.024982706, -0.034458037, 0.0002811811, 0.025259174, -0.00774112, -0.041595954, -0.0019368508, -0.00047046784, -0.037499193, 0.028853266, -0.01304429, -0.012617021, 0.052428495, -0.0382532, -0.005381712, 0.00034931648, 0.01343386, -0.0015936214, 0.00038289328, -0.011115293, 0.0047847913, -0.04873387, 0.040012542, 0.017543187, -0.04136975, 0.006170276, 0.014137598, 0.0007320134, -0.014401499, -0.025937779, 0.055494785, 0.035312578, -0.032346822, 0.017316986, -0.039912008, -0.00977065, 0.03800186, 0.022042086, 0.00069234957, 0.0044109304, 0.02465597, 0.01354696, -0.012610737, -0.027571457, -0.048180934, -0.026892852, -0.009487899, -0.06745833, 0.0015048687, 0.0006000625, 0.02182845, -0.057656266, -0.012183468, 0.007408101, -0.012918622, 0.003650642, -0.0059723496, 0.0030631463, 0.014225565, 0.023223361, -0.01629908, -0.02275839, 0.061577093, 0.006355636, -0.02802386, 0.016939985, -0.003914544], [-0.039217077, -0.014562494, -0.021053765, 0.036400113, 0.044924498, 0.031182598, -0.03101113, 0.007281247, -0.027655266, 0.009951242, 0.013692909, 0.01606896, -0.036743045, -0.013349974, -0.032627825, 0.017097764, -0.046859633, 0.0030971325, -0.030055812, -0.025646647, -0.007814021, -0.0354203, -0.046467707, 0.025646647, 0.023956466, 0.018089827, -0.021776378, 8.444203e-05, -0.020416886, 0.023809494, 0.019045146, -0.0012109895, 0.026871415, -0.038286254, 0.030055812, -0.017244736, -0.0005090443, 0.020943537, -0.034905896, -0.0076364297, -0.009583811, -0.0014214966, -0.01080858, -0.02895352, 0.014329788, -0.004510209, -0.04465505, 0.012455893, 0.015517813, -0.00084585557, 0.028708568, -0.046810642, -0.028880036, -0.04580633, -0.02118849, 0.04164212, 0.044410095, -0.06589253, 0.027581781, 0.0101165855, -0.027434807, -0.011990481, 0.01627717, -0.00616977, 0.0070607886, 0.006785216, -0.021310966, 0.026381508, 0.0070056743, 0.013288735, -0.01812657, -0.03059471, 0.0047582244, -0.0010433494, 0.0039896825, -0.053203933, 0.10297851, 0.017942855, -0.014415522, -0.010924933, 0.0008787712, -0.039143592, -0.038114786, -0.018591981, 0.02520573, -0.067264274, 0.015909739, -0.076474525, -0.0047919056, 0.01442777, 0.036792036, -0.022437753, 0.03995194, -0.013827633, -0.054771636, 0.009510325, -0.0068097115, 0.033730116, -0.0417401, -0.01791836, 0.008671359, -0.024348393, -0.07461288, -0.057956032, 0.0203434, 0.007507829, 0.045463398, -0.010183948, 0.00562781, 0.15471272, 0.017844873, -0.016583363, 0.010796332, -0.0030910089, -0.04215652, 0.01933909, -0.016571114, -0.05658429, -0.023001147, 0.018432762, -0.09489504, -0.017587671, 0.06275713, 0.012872314, 0.006821959, -0.0008550413, -0.00028188806, 0.04830486, -0.02821866, 0.011806766, -0.020747574, 0.012290549, 0.0570742, -0.01870221, 0.021004776, 0.021433445, 0.04406716, -0.038163777, -0.034636445, -0.0073057422, -0.032088928, -0.009498077, -0.010643235, 0.034881398, -0.002579668, 0.009914499, -0.03470993, -0.026259031, -0.048745774, -0.018714458, -0.0038120912, -0.03301975, 0.025720133, 0.023184862, 0.041225698, -0.032456357, 0.018089827, 0.032848284, -0.013680661, 0.021274224, 0.055163562, -0.0650107, 0.005281813, 0.019633034, -0.02303789, -0.068685, 0.050705403, 0.016987536, -0.017550929, 0.02790022, -0.012762085, -0.04004992, 0.04215652, -0.0085733775, -0.014513504, 0.041127715, 0.04338129, 0.026993891, -0.031158103, -0.03456296, -0.01870221, 0.0016289417, 0.051244304, -0.062169235, 0.053007968, 0.037036993, 0.008022232, 0.03159902, 0.02087005, -0.046957612, -0.015505565, 0.0027924716, -0.021359958, -0.019375833, -0.013227497, -0.041617624, -0.032676816, -0.052958976, 0.014856438, 0.03662057, -0.0057900916, -0.059572726, -0.027263341, 0.026185544, -0.03493039, 0.03835974, 0.03777185, -0.0138031375, 0.0038059673, -0.0195473, 0.021788627, -0.016240427, 0.022572478, -0.031354066, -0.029124988, 0.01064936, -0.05437971, 0.01579951, -0.0039406917, -0.040025424, 0.10297851, -0.059719697, 0.024654584, -0.022486744, -0.0061452747, 0.040564325, -0.0067239776, 0.01101679, 0.01870221, 0.032652322, -0.003622252, -0.020478124, -0.015370841, 0.011249496, -0.014023596, -0.025622152, -0.032162413, -0.005437971, 0.05437971, -0.03213792, 0.028757557, 0.017624415, -0.053203933, -0.02292766, -0.006583129, 0.036400113, 0.004448971, 0.0003549914, -0.019155376, -0.026087563, 0.0066443677, -0.012357911, 0.026699947, 0.009253124, -0.018494, 0.059278782, 0.019167623, -0.033950575, 0.0054838997, 0.002160185, 0.0021709017, 0.046884127, -0.056045394, 0.060405567, -0.025022015, -0.032235898, 0.028022697, -0.039853957, -0.057368144, -0.0067178537, 0.049970545, -0.044826515, -0.012357911, 0.02425041, 0.04242597, -0.027140863, 0.07309417, 0.024532108, -0.012566122, 0.06902794, 0.033558648, 0.029149484, -0.0036406235, 0.040931754, 0.040490836, -0.0037845338, 0.010361539, -0.027042883, -0.023209358, 0.017073268, 0.009357229, -0.031990945, 0.0022872547, 0.029712876, 0.042719916, -0.0011099462, 0.028782053, 0.027287835, -0.044900004, -0.0017805068, -0.014660476, -0.007826269, -0.019877989, -0.07280023, 0.015236117, 0.041397166, 0.03794332, 0.0908778, -0.0019137004, -0.032995258, 0.049015224, 0.013276488, -0.0038641437, -0.056192365, 0.040074416, -0.027263341, 0.010122709, 0.045953304, 0.040931754, -0.004856206, -0.054869615, -0.013386717, -0.06251217, 0.0019290099, 0.052175127, -0.023760503, -0.024397383, -0.010104338, -0.043405786, -0.0129458, -0.062659144, 0.041593127, 0.0034262892, -0.019951474, -0.033166725, -0.09572788, -0.02282968, -0.053840812, 0.04058882, -0.044728536, -0.016497629, 0.060650524, -0.023919724, -0.028439118, 0.0030986636, 0.014293045, -0.002464846, -0.05222412, 0.053399894, -0.03456296, 0.0013526034, 0.08543983, 0.037110478, 0.054134756, -0.00895918, -0.03333819, 0.0054073515, -0.040074416, -0.022658212, -0.014207311, 0.058837865, -0.053987782, 0.035959195, 0.03872717, -0.018947164, -0.03931506, -0.02029441, -0.01326424, -0.020992527, 0.02598958, -0.022768442, -0.0037906577, 0.012051719, -0.031403057, -0.07613159, -0.034318004, 0.06829307, -0.0040019304, -0.03524883, 0.0012018038, -0.041176707, -0.02214381, -0.040539827, 0.005395104, 0.037477907, 0.009112275, -0.029124988, 0.03059471, 0.036204148, -0.044900004, 0.010183948, 0.022241792, 0.010961676, -0.04935816, 0.0048715156, 0.042499457, -0.05658429, -0.018689962, -0.010502388, 0.029565904, 0.008879569, 0.0025184297, 0.011090276, -0.012676351, 0.0005679863, -0.004268317, -0.015370841, 0.004856206, -9.9990844e-05, 0.070203714, 0.002665402, 0.037281945, 0.0077589066, 0.033558648, 0.017759139, 0.050705403, 0.010263558, 0.05290999, -0.006558634, 0.0057166056, -0.010355416, -0.02445862, 0.005422661, 0.051489256, 0.009228628, 0.058249976, -0.066823356, 0.05104834, 0.0100430995, -0.017881615, -0.021237481, -0.0034385368, 0.014293045, -0.020514868, -0.019498311, -0.042670924, -0.04872128, -0.054281726, -0.016154693, 0.04999504, 0.014525751, 0.016191436, 0.018322533, 0.039486527, -0.042842392, -0.015983226, -0.06858702, 0.025499674, 0.056290347, -0.019718768, -0.022535736, -0.010851447, -0.06858702, -0.045683853, 0.08465598, -0.01053913, 0.028684072, -0.027704258, -0.0055206427, -0.081912495, -0.010496263, 0.013117268, 0.054820627, -0.00018897791, 0.034171034, -0.00856113, 0.0014551778, 0.041985054, 0.014856438, -0.008107966, -0.0067239776, -0.011947614, -0.07539673, 0.02821866, -0.03762488, -0.018396018, -0.045830827, 0.017734643, 0.044091657, -0.046100277, 0.0041029737, -0.029320952, 0.0041489024, 0.04771697, 0.0036436855, -0.028610585, 0.014489008, 0.019877989, 0.05785805, -0.0008581032, 0.01241915, -0.0010632519, 0.022841927, -0.00041029736, -0.0037692243, -0.03360764, -0.02477706, -0.06608849, 0.01511364, 0.024850547, 0.03470993, 0.021335462, 0.00808347, -0.0037232954, 0.022792937, 0.002270414, -0.034171034, -0.009712412, -0.0045132707, -0.047937427, -0.0077772783, -0.01627717, -0.021408949, 0.00409685, -0.0054134754, -0.0070301695, -0.022890918, 0.0098226415, -0.006289185, 0.011347477, -0.010894313, -0.025499674, -0.04852532, -0.013215249, -0.015076897, 0.0060350453, 0.031060122, -0.016019968, -0.010465644, -0.033681124, -0.0029057625, 0.0038182149, -0.03867818, 0.005970745, -0.015493318, -0.021592664, 0.039217077, 0.024434127, -0.050558433, 0.066823356, 0.03228489, 0.0760826, -0.010110462, -0.002506182, -0.04301386, 0.033166725, 0.0046541193, 0.023625778, -0.01739171, 0.028880036, -0.05859291, 0.031990945, -0.0055726953, 0.038702674, -0.006736225, -0.042278998, 0.008726474, -0.026552975, 0.00993287, -0.024985272, 0.033093236, 0.01955955, 0.07676847, 0.0427934, -0.0018233737, -0.021323215, 0.021813123, 0.006368795, -0.01426855, -0.0050582928, 0.0047184196, 0.024274906, -0.018824687, -0.02262147, -0.0396335, 0.058641903, -0.0028016572, -0.018347029, 0.032578833, -0.007550696, -0.033534154, -0.028194165, -0.0062248847, -0.044140648, 0.020649591, 0.03159902, 0.004571447, -0.05183219, -0.023086881, 0.031378563, -0.01141484, -0.0058390824, -0.008806083, -0.018787945, 0.012259929, 0.029100493, 0.0005121062, 0.0069811787, -0.013251992, 0.014072587, -0.017501937, 0.0061054695, 0.0075751916, -0.019290099, -0.036694057, -0.0078017735, 0.040196892, -0.04570835, 0.009400096, 0.031256083, -0.05717218, -0.02895352, 0.039217077, -0.037894327, 0.01141484, -0.0332892, -0.0048960107, 0.06388391, 0.01447676, 0.05575145, 0.043454777, -0.009069408, 0.0961688, -0.027973706, 0.02890453, 0.02657747, -0.0013135639, -0.0151993735, 0.0021341585, -0.021066014, -0.028194165, -0.03218691, -0.018273542, -0.04044185, 0.0005672208, 0.0332892, -0.014782952, 0.024936281, -0.020282162, -0.011286239, 0.024372887, 0.034587454, 0.0027970644, -0.015726024, -0.037036993, -0.036326624, 0.05325292, -0.00011520476, 0.053350903, -0.025450684, -0.036571577, 0.028806549, 0.025499674, 0.049750086, 0.016681343, -0.034318004, 0.0010234469, 0.049970545, -0.031329572, 0.033264704, -0.031476542, -0.007593563, -0.016473133, 0.03145205, -0.0029149484, -0.005177708, -0.01595873, -0.011525069, 0.0007566771, 0.037869833, 0.054526683, -0.05785805, -0.040980745, -0.026430499, -0.05004403, -0.025230225, -0.0030435491, 0.06981179, -0.04788844, -0.025230225, -0.0565353, -0.03424452, -0.024875043, -0.018579734, -0.013215249, 0.009669545, -0.015260612, -0.013166258, -0.018347029, 0.010153329, 0.009755279, -0.062169235, -0.01986574, 0.06736225, 0.010502388, 0.0077160397, 0.0121435765, -0.06114043, -0.0076609254, 0.038702674, -0.02118849, -0.025181234, -0.0258916, -0.022376515, 0.01669359, 0.024115685, 0.015872996, -0.015811758, -0.032799292, -0.018396018, 0.018114323, 0.014599238, -0.0016365965, 0.021568168, -0.0071403985, -0.011819013, -0.039755978, -0.022743946, -0.07059564, -0.004470404, -0.0077405353, -0.042278998, -0.0074588386, -0.038702674, 0.008457025, -0.050852377, 0.02525472, 0.0069566835, 0.058151994, 0.0010655484, 0.008585625, -0.02753279, 0.009712412, -0.010882066, -0.018383771, 0.011806766, -0.002428103, 0.011127019, 0.04580633, 0.016926296, -0.00079609937, -0.02689591, -0.039755978, -0.046418715, -0.009461335, -0.024287153, 0.020306658, -0.012119082, 0.01213133, 0.018396018, 0.025940591, -0.01315401, 0.0075690676, 0.0028827982, 0.02927196, 0.0049113207, 0.03448947, -0.008144708, 0.013937863, -0.026699947, -0.031525534, -0.00040034612, 0.025499674, -0.020625098, 0.0030726374, 0.026773434, 0.0012867721, -0.04999504, 0.043944683, -0.010404406, -0.0034660941, 0.06437382, -0.034415986, 0.00470311, 0.02721435, -0.025377197, -0.0013755678, -0.01085757, -0.033779107, -0.003309936, -0.010679979, 0.010067595, -0.00723838, -0.0061177174, 0.0054471567, 0.013839881, -0.015052401, -0.012872314, -0.009057161, 0.0111882575, 0.02394422, 0.03735543, 0.024299402, -0.0059095067, 0.05633934, -0.010263558, 0.046149265, -0.007918127, 0.008928561, -0.006212637, -0.031035626, -0.032015443, -0.022254039, 0.023858486, 0.014880934, -0.028316641, -0.047104586, -0.035640754, -0.020012712, -0.008873446, 0.021139499, 0.0248383, 0.018138817, 0.02763077, -0.019804502, 0.052665032, 0.015481071, 0.037600383, 0.023270596, -0.0037875958, -0.0046357475, 0.0034324129, 0.016889554, -0.01976776, 0.033681124, 0.020282162, 0.03343617, -0.027704258, -0.02129872, -0.0019580983, -0.038923133, -0.021151748, -0.024899539, 0.033705622, -0.0018769572, 0.01637515, -0.04411615, 0.03931506, 0.011825137, -0.0028644267, -0.011200505, 0.008248814, -0.026161049, 0.005967683, -0.03826176, 0.02478931, 0.00067400525, -0.0018846121, -0.028022697, 0.025499674, 0.05501659, 0.023454312, 0.018138817, 0.027606275, -0.046222754, -0.027704258, -0.027802238, 0.036571577, -0.02420142, 0.031525534, 0.050803386, -0.0020989466, 0.005306308, -0.017881615, -0.010024728, -0.022633716, -0.020404639, -0.056731265, -0.015738271, -0.050999347, -0.047790457, -0.01262736, 0.0055237045, 0.049799077, 0.012774332, -0.04771697, 0.006558634, -0.018285789, 0.038849648, -0.003655933, 0.01101679, 0.026920406, -0.04286689, -0.030374251, 0.014893182, -0.040735792, 0.036057178, 0.006534138, -0.041838083, 0.007446591, 0.0035303943, 0.0046847383, -0.01326424, 0.01117601, 0.012112957, 0.0544287, -0.026234536, -0.01033092, -0.019045146, 0.03708598, -0.0030603895, -0.034440484, 0.016889554, -0.032162413, 0.04602679, 0.0024082004, 0.010239062, -0.013398964, 0.009044914, -0.0343425, -0.025597656, 0.03561626, 0.01273759, -0.059768688, 0.054526683, -0.00631368, -0.0060013644, -0.0019749387, 0.0076486776, -0.036841027, -0.008450901, 0.021641655, 0.005900321, 0.05447769, -0.040245883, -0.008095718, -0.0015906678, -0.019057393, 0.038090292, -0.02858609, 0.02187436, 0.008585625, 0.036130663, -0.011898623, -0.02271945, -0.011273991, -0.016656848, 0.004583695, -0.027263341, -0.013300983, -0.006289185, 0.08950606, 0.011451582, -0.0285371, 0.012296673, -0.04004992, -0.026675452, -0.0036344996, 0.011506697, -0.033411678, -0.010686102, 0.018102074, -0.033681124, -0.015003411, -0.0075445725, -0.014917677, -0.014305293, 0.041421663, -0.023662522, 0.05246907, -0.001619756, -0.023919724, -0.013864377, -0.0037845338, -0.013178506, 0.010569749, 0.029541409, 0.0026516232, 0.0028154359, 0.031109113, -0.015787262, 0.013129516, 0.008046728, 0.019192118, -0.019314595, 0.029075997, 0.01728148, 0.017869368, -0.014133825, 0.027067378, 0.0041489024, -0.04374872, -0.014807448, -0.015970977, 0.00792425, -0.0014375717, 0.010208443, 0.016093455, 0.013619423, -0.029565904, 0.05447769, -0.056878235, 0.03581222, 0.038825154, 0.013496946, -0.008536634, 0.010918809, -0.013729651, 0.01575052, -0.005689048, -0.0027863476, 0.002310219, 0.01210071, 0.01976776, -0.057417136, 0.052567054, -0.0022642903, 0.017673405, -0.05903383, -0.020061703, 0.011690413, 0.006362671, -0.0060289213, -0.043626245, 0.018469505, 0.054967597, 0.018934917, 0.0016243488, -0.011561812, 0.054918606, -0.006016674, -0.022866422, -0.021923352, -0.008052851], [-0.026248652, 0.0055240965, -0.027583713, 0.045618348, 0.014583841, 0.040391244, -0.020659499, 0.06340407, -0.01516086, 0.012999871, -0.01960729, -0.014866693, 0.0043870322, -0.021112062, -0.010154381, 0.029054541, -0.058561645, 0.024461027, -0.042744573, -0.035707217, -0.0019997626, -0.025117245, -0.07784083, -0.0035724188, 0.022990199, -0.008791035, -0.0124454815, -0.0050404198, -0.016631689, 0.012547308, 0.030118065, 0.0011017079, 0.044554822, 0.03396485, 0.028556723, -0.04066278, 0.009486851, -0.022594206, -0.038332082, 0.0049272794, -0.033761196, 0.017231334, -0.014470701, -0.042563546, -0.018362742, -0.028669864, -0.026655959, -0.022843115, -0.03249402, 0.012456795, 0.009334111, -0.00012613424, -0.04070804, -0.0132940365, -0.007784083, 0.019686488, 0.05607255, -0.01852114, 0.05557473, -0.021553311, -0.008824978, 0.001227577, 0.040006567, -0.015873646, -0.030706396, -0.0017847952, -0.007772769, 0.023850068, 0.023669044, 0.010171353, -0.0056711794, 0.007359805, -0.0258866, -0.004593514, -0.048062187, -0.03299184, 0.08530812, 0.019629918, -0.026904868, 0.034168504, 0.017593386, 0.006234055, -0.012230514, 0.026452305, 0.021711707, -0.040323358, 0.05462435, -0.10580922, -0.009311483, -0.009226628, 0.018905818, 0.0035582762, 0.027312174, -0.0043559186, -0.041092716, -0.009351082, 0.025728205, -0.00486788, -0.04496213, -0.020998921, -0.019641232, -0.034123246, -0.052859355, -0.062091637, 0.0064829644, 0.011019908, 0.022843115, -0.018985016, -0.024709938, 0.01910947, 0.043513928, 0.00427672, -0.02799102, 0.031113703, -0.006697932, 0.030842166, -0.046976034, -0.0481527, -0.04987244, 0.0012919258, -0.07743352, -0.024596797, 0.019120784, 0.013090383, -0.016020728, 0.026995381, 0.003595047, 0.04643296, 0.008496869, 0.02674647, -0.06439971, 0.035775103, 0.055393707, 0.014391502, 0.059919335, 0.007823682, 0.04401175, -0.014945892, -0.066436246, -0.0010182667, -0.053311918, 0.017152136, -0.0043078335, 0.027357431, -0.03176992, -0.015522909, 0.0144593865, -0.06000985, -0.04140951, -0.047700137, -0.012920672, -0.0065055927, -0.018012006, -0.023488017, 0.03701965, -0.028194673, 0.020636871, 0.032833442, -0.0056146095, 0.059557285, 0.036363434, -0.047835905, 0.0025668805, 0.041160602, -0.01380317, -0.13006659, 0.032675046, 0.0057418924, -0.038671505, 0.020127738, 0.022741288, -0.0442154, 0.024619425, 0.018181717, -0.06467125, 0.054036018, 0.02396321, 0.025071988, -0.0004903944, -0.06498804, -0.0496009, 0.015421083, 0.04265406, -0.01861165, 0.030683769, 0.010918082, 0.04792642, 0.0011985847, 0.01430099, -0.076664165, 0.015285314, 0.013169582, -0.019426266, -0.020365333, -0.025863973, -0.022820488, -0.0132940365, -0.014753552, 0.0040985234, 0.03337652, 0.01852114, -0.046613984, -0.0057249214, -0.025388783, -0.041567907, 0.027674224, -0.0063698236, -0.024890963, 0.024166862, -0.02357853, 0.040006567, 0.020093795, -0.0061096, 0.00040553883, -0.010012955, 0.018226974, -0.025931858, 0.0024268688, -0.0047688824, -0.06403766, 0.091327205, -0.010827569, 0.050279744, -0.031000562, 0.025207756, 0.029371336, -0.0020718898, 0.006398109, 0.033218123, 0.029733386, 0.0012777832, -0.0443738, -0.01491195, 0.04846949, -0.074491866, -0.033195492, -0.026701214, -0.015647365, 0.070192516, 0.00073824334, -0.00595686, 0.01729922, -0.035141513, -0.022560263, 0.05390025, 0.032561906, 0.016258324, 0.032177225, -0.009085202, 0.005017792, 0.0397124, 0.02529827, 0.06322305, 0.022843115, -0.014764867, 0.055167425, -0.005371357, -0.050370257, -0.042993482, 0.01691454, -0.012038175, 0.028398326, -0.0046500843, 0.1085246, -0.04609354, -0.0063811378, 0.04620668, -0.034032736, -0.067341365, -0.013554261, 0.020308763, -0.022119015, -0.0042314637, 0.032810815, 0.0418847, -0.02529827, 0.042201497, 0.017174764, -0.040911693, 0.044939503, -0.014504643, 0.046116166, 0.018045949, 0.009203999, 0.067250855, 0.032788187, -0.018985016, -0.03165678, -0.01385974, 0.009305825, -0.002149674, 0.0083497865, 0.0198562, 0.012898045, 0.029167682, -0.02857935, 0.016065985, 0.00024060086, -0.054217044, -0.023917953, 0.013022499, 0.021824848, -0.03373857, -0.052633073, 0.008921147, 0.041703675, 0.004604828, 0.12246354, 0.0037110164, 0.0127622755, 0.056389347, -0.0011045365, -0.017830981, -0.030072808, 0.047383342, -0.0076992274, 0.025139872, 0.04851475, 0.054714862, -0.018928446, -0.0068733, -0.030208578, -0.11277869, 0.028986657, 0.033331264, 0.009950728, -0.021836163, -0.0017975235, -0.016484605, 0.0091644, -0.0542623, -0.004440774, -0.007857624, -0.008547783, -0.056163065, -0.059783567, 0.04217887, -0.014233105, 0.022039816, 0.0105730025, -0.0072579784, 0.015964158, -0.012422853, -0.035526194, -0.043513928, -0.0019361209, -0.0022034158, -0.0130451275, 0.04951039, 0.011732695, 0.0013619317, 0.020908408, 0.070102006, 0.00855344, -0.01947152, 0.020308763, -0.02382744, -0.06082446, -0.011857149, 0.009939414, 0.06480701, -0.021123376, 0.026452305, 0.0517732, -0.016167812, -0.04104746, -0.04593514, -0.026407048, -0.02382744, 0.014006823, -0.024257375, 0.017672583, -0.050777566, 0.022254784, -0.045278925, -0.03957663, 0.03885253, -0.022707347, -0.013429806, 0.0024862678, -0.013554261, -0.043875977, -0.020693442, 0.028873516, 0.03249402, -0.005968174, -0.031724665, -0.016722202, 0.03591087, -0.019641232, 6.0945735e-05, -0.023284364, -0.02957499, 0.002619208, 0.042359892, 0.061005488, -0.022820488, -0.0014043595, 0.024325259, 0.026655959, -0.0023844412, -0.038558364, -0.02396321, 0.005657037, 0.029597618, 0.006833701, -0.040164962, 0.0067827874, 0.00397124, 0.029416593, 0.004763225, 0.0046953405, -0.0024042407, 0.0059116036, 0.012094745, 0.017084252, -0.052859355, 0.049148336, 0.0076200287, -0.012931987, 0.039486118, -0.056389347, -0.039802913, 0.034507927, 0.024868336, 0.058742672, -0.03516414, 0.014086022, 0.0096565625, -0.024845706, -0.019980654, 0.0009836173, 0.013542946, -0.021553311, -0.015126917, -0.051999483, -0.05204474, -0.079515316, 0.032923955, 0.054352812, 0.018181717, -0.010488147, 0.017446302, 0.011710066, -0.019528091, 0.028013647, -0.042676687, 0.018374056, 0.022492379, -0.041703675, -0.004692512, -0.023895325, -0.04923885, -0.011019908, 0.049284108, -0.017763097, 0.0132940365, 0.046704497, 0.030389603, -0.08381466, 0.02638442, 0.020376647, 0.0747634, -0.024642054, 0.036363434, -0.009492508, -0.049148336, 0.02027482, -0.012049489, 0.0010918082, 0.015669992, 0.0114555, -0.03910144, 0.021915361, -0.0389883, -0.04618405, -0.034983117, -0.01827223, 0.06390189, -0.04041387, -0.0062906253, -0.042224124, 0.008236646, 0.02035402, 0.03701965, 0.0021906877, 0.0043389476, 0.053719223, 0.07195751, 0.028760375, 0.02860198, 0.030072808, 0.01582839, 0.00057843205, -0.002535767, -0.03348966, -0.06344933, -0.0496009, 0.02168908, -0.008163105, -0.011223561, 0.05743024, 0.02957499, 0.003365937, -0.0019332924, 0.02302414, -0.04982718, -0.024777822, 0.033761196, -0.06847277, 0.021225203, -0.036295548, -0.012207886, 0.0108219115, -0.019788316, -0.033195492, -0.0397124, 0.009628277, 0.025524551, -0.0040985234, 0.0005794927, -0.042314637, -0.046003025, -0.026701214, -0.010369349, -0.01588496, 0.019505464, -0.025071988, 0.018600337, -0.0033404804, -0.039486118, 0.00656782, -0.013735286, 0.021496741, -0.017627327, -0.00028603393, 0.050008208, 0.004593514, -0.03968977, 0.015081661, -0.011857149, 0.05548422, 0.020489788, -0.014742238, -0.018000692, 0.03631818, 0.032629788, 0.016722202, -0.01849851, 0.055665243, -0.07480866, 0.044803735, 0.008728808, 0.033874337, 0.012875416, -0.014040766, -0.02271866, -0.05815434, 0.0033913937, 0.004664227, 0.0043191477, 0.004910308, 0.0797416, 0.048650518, -0.028737748, -0.048424236, 0.04643296, 0.026497561, -0.014436758, 0.0144933285, 0.01907553, 0.046840265, -0.011811893, -0.0041041803, -0.02382744, 0.06548586, 0.017978063, -0.03656709, -0.0046274564, -0.028443582, -0.010391977, -0.0060586864, 0.0047745393, -0.024868336, 0.0040108394, -0.0025767803, -0.028239928, -0.051139615, -0.04679501, 0.0063075963, -0.010912424, 0.017061623, 0.005526925, 0.018351428, 0.011308417, 0.037245933, 0.010804941, 0.028307812, 0.011364987, -0.011710066, 0.010329749, 0.0012728333, -0.008666581, -0.023397505, -0.032629788, -0.024619425, 0.04631982, -0.03921458, 0.0055325823, 0.024619425, -0.0693779, 0.0068280436, 0.029122427, -0.009588677, 0.010776656, 0.007167466, -0.008417671, 0.063494585, 0.002579609, 0.058109082, 0.042043097, 0.006754502, 0.05376448, -0.034259018, 0.008943776, 0.010499461, -0.025230385, 0.0021581596, -0.0072296932, 0.007806711, -0.0037760723, -0.026723843, -0.010697457, -0.017876238, 0.020693442, 0.046387702, 0.0017593385, 0.028556723, -0.045663603, 0.02313728, 0.03543568, 0.042224124, 0.05534845, 0.026904868, -0.030638512, -0.012366283, 0.051275384, 0.014832751, 0.043332905, 0.0034932203, -0.00041119588, 0.040210217, 0.0008421914, 0.025094615, 0.018464569, -0.024461027, -0.004684027, 0.032561906, -0.03860362, 0.0021906877, -0.055122167, -0.031747293, 0.0074276896, 0.025207756, -0.007495574, -0.052587815, -0.002716792, -0.047338087, 0.0026418362, -0.0016080128, 0.048424236, -0.022888372, -0.010957681, -0.028443582, -0.028941402, -0.010533403, 0.016903227, 0.024347886, -0.01910947, -0.016088612, -0.016314894, -0.023284364, -0.028239928, -0.018803991, -0.01991277, -0.015839703, -0.04217887, -0.02304677, -0.0065169064, 0.027538456, 0.021281773, -0.021700393, -0.029393964, 0.047428597, -0.021406228, -0.015907587, -0.013305351, 0.0032329967, 0.013407177, -0.012173943, 0.014934578, -0.037200674, -0.0036233321, -0.018713478, -0.002121389, 0.0093737105, 0.0051733605, -0.01636015, -0.046116166, -0.039554004, 0.03763061, 0.018724792, 0.029303452, 0.07367725, 0.047338087, -0.0037760723, -0.018113833, 0.005080019, -0.06132228, 0.028398326, -0.021394914, -0.021598568, -0.014278362, -0.040142335, 0.024166862, -0.049555644, 0.04579937, -0.021971932, 0.054760117, -0.015047719, 0.0062283976, 0.00049887993, 0.0043361187, 0.009085202, 0.0037166732, 0.0057616923, -0.020908408, -0.0014524442, 0.044147518, -0.002875189, 0.011619554, 0.016156498, -0.028986657, -0.033625428, 0.01191372, -0.016756143, 0.01380317, -0.02321648, -0.0065112496, -0.0040362957, -0.018113833, 0.00092421845, 0.030864794, -0.030253833, 0.014436758, 0.049419876, 0.012909358, 0.012592564, 0.0055495533, -0.025071988, -0.034281645, 0.01557948, -0.017729154, -0.013271409, 0.016088612, -0.0036374747, 0.03253928, -0.018226974, 0.009158743, -0.0030434858, 0.00046953408, 0.03154364, -0.010063869, -0.0028440754, 0.052723587, 0.003230168, -0.018668221, -0.015081661, -0.0038269856, 0.0002793162, 0.016993739, -0.0038382995, 0.02493622, -0.045595717, 0.033580173, -0.00083229155, 0.02271866, -0.0047434256, 0.011857149, -0.019177355, 0.03957663, 0.010239237, 0.047971673, -0.0077105416, 0.035480935, 0.009826274, 0.057656523, -0.015409769, 0.010488147, -0.004788682, -0.0047575682, -0.045188412, -0.016133869, 0.01516086, 0.016179126, -0.016020728, -0.02046716, -0.0319962, -0.047066547, 0.008519498, 0.019901456, 0.020670813, 0.020693442, 0.03763061, -0.009701818, 0.004712312, -0.006126571, -0.019618604, 0.017978063, 0.009028631, -0.028488839, -0.035820358, -0.000954625, 0.004604828, 0.015851017, 0.032109343, 0.019731745, -0.02602237, -0.03763061, -0.05543896, -0.008615667, -0.027402688, -0.03860362, 0.026203396, 0.02185879, 0.0106918, -0.021711707, 0.037064906, -0.01109345, 0.015805762, -3.226279e-05, -0.0032103686, -0.032697674, -0.0007573358, -0.06426394, 0.025863973, 0.01810252, 0.02810416, -0.013825798, 0.028896146, 0.046387702, 0.018837932, 0.005787149, 0.007325863, -0.012773589, -0.019313125, -0.0754875, 0.0057192645, 0.0013732457, -0.0055014687, 0.043808095, 0.06267997, -0.007801054, -0.015918903, -0.009803645, -0.010261865, -0.0002473186, -0.04774539, -0.00025173815, -0.04324239, -0.026927495, 0.017378418, 0.026135512, 0.025434038, 0.031068448, -0.04118323, 0.003954269, -0.041386884, 0.04788116, -3.5710047e-05, -0.0102222655, 0.01338455, -0.026497561, 0.0060417154, 0.011314074, -0.029710758, 0.0014383016, -0.023035455, -0.0066074193, 0.01109345, -0.005071534, 0.00021090142, 0.026836984, 0.006217084, 0.012106059, -0.002760634, -0.037585355, -0.005756035, -0.01405208, 0.042314637, 0.0050064777, -0.023510646, 0.011676124, -0.011732695, -0.002738006, -0.01810252, 0.0025329383, 0.03539042, 0.04545995, -0.03312761, -0.0066809608, 0.036861252, 0.046478216, -0.058471136, 0.035707217, 0.005608952, -0.031204216, -0.016824028, 0.013848427, -0.037811637, 0.011732695, 0.014267047, 0.004681198, 0.042631432, -0.023397505, 0.0031679408, -0.023555903, 0.017819667, 0.032267738, -0.02993704, 0.03620504, 0.010640887, 0.031339984, 0.0020223907, -0.006997755, -0.021813534, -0.041839447, -0.00097513176, -0.017231334, 0.0015217429, 0.027425315, 0.08331684, -0.015228744, -0.005855033, 0.024302632, -0.062860996, -0.034304272, 0.033942223, -0.014323617, 0.0035441336, -0.0056230947, 0.038490478, -0.00078208535, -0.02932608, 0.0029756015, 0.015794447, 0.00017306997, 0.04242778, 0.006754502, 0.02713115, 0.01502509, 0.006890271, -0.009203999, 0.019030273, 0.032584533, -0.036861252, 0.043355532, -0.005798463, -0.035865616, 0.027221663, -0.0427672, 0.0144593865, 0.0099733565, 0.018770048, 0.00013488498, 0.0013407178, 0.007376776, 0.009837587, -0.027425315, -0.01090111, 0.043672327, -0.06367561, 0.01202686, -0.033308633, -0.021078119, 0.011376302, 0.005476012, 0.057475496, 0.029552361, -0.016484605, 0.07213853, -0.030366974, 0.022628147, 0.02846621, -0.010488147, 0.012864103, 0.011981605, -0.005809777, -0.02310334, -0.018543767, 0.047338087, -0.06394715, -0.03265242, 0.01624701, -0.076030575, 0.0017621671, -0.0004985264, 0.017333161, -0.068925336, -0.016450664, -0.0037308158, -0.0076200287, -0.0114215575, -0.007637, 0.015307942, 0.04593514, 0.045640975, -0.013407177, 0.020365333, 0.10092154, -0.012185258, -0.012038175, -0.0037619297, -0.028330442], [0.009542418, 0.00014478397, -0.008323343, 0.049531695, 0.051789686, 0.012875358, -0.047898255, 0.029449979, -0.03449443, -0.0043148063, -0.0115061505, 0.055585034, -0.03305316, -0.048907142, 0.002884044, 0.052174024, -0.0367284, -0.008161199, -0.022880184, -0.045952536, -0.02300029, -0.04765804, -0.051741645, -0.01100771, -0.034830727, 0.021667114, -0.03456649, 0.016202293, 0.009362259, 0.013427845, 0.0027714449, 0.0052546356, -0.022339707, 0.010245037, -0.005302678, -0.014688958, 0.0004838018, 0.042301316, -0.04061983, -0.0066899015, -0.03975507, -0.041292425, -0.0201778, 0.0009233145, 0.0019036793, -0.0026002938, 0.023036322, -0.008089136, -0.0055879294, -0.00988472, 0.034638558, -0.024381509, -0.014400704, -0.02159505, -0.03233252, 0.031828076, -0.012148717, -0.084698714, 0.023324575, -0.017907798, -0.04739381, 0.020598171, -0.036368083, -0.020033672, -0.057794984, -0.009746598, -0.012382924, 0.009704561, 0.027864581, 0.052750535, -0.04736979, 0.009962789, -0.00042750212, 0.0076807756, 0.026663521, -0.0115061505, 0.09483566, 0.017799702, 0.011416071, 0.01270721, 0.022676004, 0.0052936696, -0.03454247, 0.018484306, -0.020718277, -0.060052976, 0.0747059, -0.08023077, -0.016082186, -0.0022895196, -0.010455223, -0.030386806, 0.05731456, -0.018892666, -0.083305486, 0.026087012, -0.022375738, 0.021174679, -0.038049567, -0.005687017, -0.057843026, -0.042685654, -0.04403084, -0.042277295, -0.002206947, 0.014785043, 0.04861889, 0.0012866351, 0.03048289, 0.09478762, -0.0028074766, -0.039899196, 0.014496788, -0.012647157, -0.04275772, 0.031611886, -0.025174208, -0.042085126, -0.029017597, 0.0018286131, -0.08892645, 0.017907798, 0.037689246, -0.0003023292, -0.008653634, -0.004299793, -0.020694256, 0.00564498, 0.0019231966, 0.00035224823, -0.05870779, 0.006128406, 0.028176857, 0.0063295835, 0.050876882, 0.011626257, 5.3203185e-05, -0.027576327, -0.054095723, 0.010010831, -0.046553068, 0.0037983507, -0.024069233, 0.03612787, -0.039899196, -0.041124277, 0.0026588456, -0.022027431, -0.04016343, -0.030074531, 0.019072825, -0.049195398, 0.02865728, 0.01716314, 0.0671152, -0.017859755, 0.037809353, 0.022688014, 0.01957727, 0.0068280236, 0.015241445, -0.069229074, -0.010028847, 0.061205994, -0.018292136, -0.02320447, 0.044751476, 0.011908505, -0.02923379, 0.046889365, -0.0081311725, -0.0025762727, 0.07235183, -0.04280576, -0.018820602, 0.0018916688, 0.022940237, 0.0151453605, -0.014496788, -0.057170432, -0.036199935, 0.03732893, 0.018075947, -0.0431901, 0.009200116, 0.038722157, 0.024837911, 0.0057590804, 0.03855401, -0.042661633, -0.027816538, 0.0060743587, 0.029017597, -0.026687542, 0.0028149833, -0.05616154, -0.007752839, -0.088253856, 0.008725697, 0.0055518975, 5.9290583e-06, -0.05693022, 0.035359193, -0.001397733, -0.064328745, 0.009236148, 0.032356545, 0.009260169, 0.0076627596, 0.0064256685, 0.0027744474, -0.021703146, 0.024717804, -0.015289487, -0.027936645, -0.0036362077, -0.06519351, 0.0005138283, -0.03939475, -0.03454247, 0.074561775, -0.04196502, -0.013571973, -0.025918864, -0.0018196051, 0.06913298, -0.006377626, -0.013800174, 0.017703617, 0.010239032, 0.012280834, -0.0025297317, -0.038794223, 0.07182336, -0.031924162, 0.02141489, -0.022051454, 0.021631083, 0.050396457, 0.003188813, -0.012064643, 0.026687542, -0.082344644, 0.0020838382, 0.008941888, 0.018111978, 0.022123516, -0.0069301133, 0.021510975, -0.008899851, -0.012034616, -0.024285423, 0.0013361787, 0.004257756, -0.01978145, 0.021835262, -0.023732936, -0.044487245, 0.0042637615, -0.027672412, -0.020225842, 0.022063464, -0.002657344, 0.036608294, 0.038722157, -0.033365432, 0.038818244, -0.04299793, -0.046072643, 0.019685365, 0.034158133, -0.053759426, -0.01858039, 0.028801408, 0.03190014, 0.015565732, 0.030026488, 0.033917923, -0.049579736, 0.009974799, -0.004071592, -0.025150187, -0.011043742, 0.024369497, 0.053038787, -0.002688872, 0.00066696334, -0.008857814, -0.046721216, 0.019084835, 0.0153375305, -0.017787691, 0.0274322, 0.051117092, 0.03348554, 0.015169382, 0.018844623, 0.0015914039, -0.045063753, 0.04924344, -0.024285423, -0.0016019131, -0.0124549875, -0.054768313, -0.03425422, 0.056978263, 0.011350012, 0.039658986, -0.02925781, -0.027696433, 0.06235901, 0.033437498, -0.030218657, -0.04741783, 0.016418483, -0.028777387, -0.009067999, 0.020862404, 0.06360811, -0.0058671758, -0.048450742, -0.073120505, -0.07124685, -0.019361079, -0.010941653, 0.045303967, -0.024861932, -0.014628905, -0.017631553, -0.014148481, -0.09027164, 0.005443802, -0.001642449, -0.011680304, -0.02928183, -0.09526804, 0.02503008, -0.080951415, -0.0018676475, -0.050492544, -0.015577742, -0.01513335, -0.0031617892, -0.017667586, 0.04621677, -0.037521098, -0.00837739, -0.009464349, 0.048522804, -0.020261874, 0.001520091, 0.054768313, 0.038722157, 0.023624841, 0.0067019123, 0.0029320866, -0.010263054, -0.014220545, -0.015493668, 0.027504263, 0.0690369, -0.0119985845, 0.02442955, 0.041892957, -0.029522043, -0.037785333, -0.060004935, 0.0011447598, -0.02906564, 0.02321648, -0.033653688, 0.0032128342, -0.03312522, -0.008443449, 0.003942478, -0.014052397, 0.04756196, 0.03127559, -0.008161199, 0.0032548713, -0.012016601, 0.00032484907, 0.01735531, -0.026062991, -0.019493196, 0.021174679, -0.0009781128, 0.043262165, 0.018484306, -0.0036812474, -0.011356018, 0.0092962, -0.015878007, -0.08215247, 0.036344063, 0.04679328, -0.087725386, 0.0041586687, 0.021655103, 0.008407417, -0.008881835, 0.015433615, -0.005897202, -0.034614537, 0.005521871, 0.06788389, -0.048162486, 0.017439384, 0.07489807, 0.039466817, 0.020093726, 0.008065115, 0.026375268, 0.01794383, 0.023168439, 0.0548644, 0.04400682, 0.011512156, 0.009974799, -0.037593164, 0.011380039, -0.06956537, 0.0055068578, 0.06764367, -0.011205886, -0.012292844, -0.06255118, 0.012280834, 0.017511448, -0.03451845, -0.04878704, 0.06865256, 0.054191805, -0.012394934, -0.01919293, -0.034614537, -0.051981855, -0.0028855456, -0.00096685294, 0.023540767, 0.020886425, -0.032620776, 0.01733129, 0.023336586, -0.018724518, -0.004807241, -0.072159655, -0.0042817774, 0.009542418, 0.029377917, -0.013235676, 0.0038253746, -0.07691585, -0.03595972, 0.05587329, 0.04679328, 0.049723864, -0.020454044, 0.0102930805, -0.0621188, -0.01895272, -0.0154095935, 0.037256867, -0.004909331, 0.04878704, 0.0039454806, -0.011854458, 0.034374323, 0.02016579, 0.004101618, 0.008197231, -0.0040055336, -0.067307375, 0.019661345, -0.024861932, 0.005224609, -0.061254036, 0.024261402, 0.03471062, -0.0007671768, 0.0029516038, -0.056353714, 0.008485486, 0.03531115, 0.010881599, -0.006395642, 0.059092127, -0.019397112, 0.054095723, 0.0046871346, -0.0077228127, -0.020009652, 0.02201542, 0.008809771, 0.018424254, 0.006797997, -0.036464166, -0.02420135, 0.04417497, -0.006179451, 0.054191805, 0.00047366784, 0.048738994, 0.017403353, 0.0359357, -0.010977684, -0.029161725, -0.08849406, 0.020478064, -0.034230195, -0.027864581, -0.04544809, -0.027071882, -0.02503008, -0.03353358, -0.030602997, 0.0067499545, -0.0096505135, -0.009902736, 0.028272942, -0.030915271, -0.005873181, -0.044559307, 0.0022324694, 0.003615189, 0.0020673238, -0.00533871, -0.019072825, -0.027216008, -0.04520788, 0.02582278, -0.0077348235, -0.0011252427, 0.027191987, -0.013752132, -0.021751188, 0.013307739, -0.026159076, -0.037857395, 0.021090604, 0.024958016, 0.0617825, 0.006984161, 0.03206829, -0.00022820132, 0.03812163, 0.014292608, 0.019301027, -0.022555897, 0.07398526, -0.017883776, 0.04616873, -0.008443449, 0.060869697, 0.03211633, -0.026759606, -0.06548177, -0.01715113, -0.019925578, -0.012623136, -0.0017295257, -0.02039399, 0.05505657, 0.02239976, 0.00655178, -0.0737931, 0.051933814, 0.0054077706, -0.017799702, -0.032764904, 0.013559962, 0.03651221, 0.015757902, -0.0005813879, -0.037521098, 0.057218477, -0.010815541, -0.01979346, -0.012028611, -0.028272942, -0.012623136, -0.036800463, 0.0023540766, -0.017907798, 0.0153375305, 0.01513335, -0.037689246, -0.048282593, -0.035623424, 0.01169832, 0.0012325874, 0.039082475, 0.036632314, -0.045544177, 0.015361551, 0.013055517, -0.0050744764, 0.0096505135, 0.022171559, 0.0427337, 0.008779746, -0.02620712, -0.0067739757, -0.0011004708, -0.042637613, -0.028753364, -0.0036302025, -0.033749774, 0.024861932, 0.02966617, -0.04986799, -0.01716314, -0.006239504, -0.036824483, 0.007951014, 0.017523458, -0.02603897, 0.05837149, -0.0055699134, 0.039779093, 0.030314742, -0.035094958, 0.09733386, -0.022039441, 0.0165506, -0.037521098, -0.023348598, 0.0009375771, 0.003155784, 0.01652658, -0.028849449, -0.022531876, -0.036296017, -0.011452102, 0.0063055623, 0.018087957, -0.0060593453, 0.05150143, -0.02140288, 0.026975797, 0.05707435, 0.05630567, -0.0045219893, -0.008305327, -0.038241737, -0.03713676, 0.017523458, -0.010449218, 0.026062991, -0.011157843, -0.031011356, 0.048306614, 0.043526396, 0.04153264, 0.027672412, -0.0014195022, 0.007230378, 0.011265938, -0.025870822, 0.009848688, -0.031539824, -0.0084374435, -0.016694728, 0.015757902, -0.01171033, -0.021150658, -0.029425958, -0.029425958, 0.01716314, 0.020814361, 0.047898255, -0.0048702965, -0.019637324, -0.021054573, -0.024345476, -0.02220759, 0.021799231, 0.049435608, -0.057794984, 0.010437207, -0.013776152, -0.018712508, -0.04138851, 0.016034145, -0.0042037084, -0.011950542, -0.008797761, 0.022663994, -0.014664937, 0.036055807, 0.009926757, -0.06908494, -0.01816002, 0.025174208, 0.0040145414, -0.007951014, 0.0144247245, -0.012394934, 0.0067739757, -0.018184042, -0.014304619, -0.04400682, -0.020946478, 0.002050809, 0.023696905, -0.005266646, 0.015517689, -0.006617838, -0.022916216, -0.02863326, 0.0011717837, 0.018472295, 0.02400918, 0.07874146, 0.015469647, -0.005428789, -0.019313037, 0.032668818, -0.049483653, 0.0031798051, -0.024958016, -0.03937073, -0.03819369, -0.033941943, 0.035839617, -0.04525592, 0.021090604, 0.024585688, 0.045952536, -0.00017743777, 0.014893138, 0.003936473, 0.029786276, -0.020838384, -0.08686063, -0.008521518, -0.017271236, -0.016982982, 0.041316446, -0.037545122, 0.020141767, -0.0006361862, -0.0035221071, -0.023456693, -0.023468703, 0.002073329, 0.029690191, -0.027047861, 0.006906092, -0.04496767, -0.021306796, -0.014496788, 0.013764142, -0.021823252, 0.017175151, 0.040884066, 0.02140288, -0.006011303, 0.035791572, -0.06538568, -0.013379803, -0.014280598, -0.008455459, -0.029474001, 0.040836025, 0.01713912, -0.015289487, -0.054239847, 0.026879713, -0.0018751542, 0.023660872, 0.03891433, 0.0104071805, -0.012244802, 0.007884956, 0.026135055, -0.034182154, -0.020333938, 0.0035671468, -0.025078123, 0.0065037375, 0.0035431257, -0.029209768, -0.00908001, 0.025678653, 0.0049003228, -0.011518161, -0.0042817774, -0.021294786, -0.014953191, 0.042157188, 0.0383138, 0.005840152, -0.0061854566, 0.084842846, -0.027216008, 0.03555136, -0.023504734, -0.0032698845, 0.007914982, -0.015673827, -0.03045887, -0.042205233, 0.030530933, 0.0017925813, -0.043069996, -0.006353605, 0.008959904, -0.032933053, -5.6534245e-06, -0.010731467, 0.016898908, 0.016514568, -0.017487427, -0.018664464, 0.018904677, 0.034134112, 0.0067859865, 0.010335118, 0.026567437, 0.005786104, -0.012034616, 0.0035791574, -0.016430493, 0.017643563, 0.034422364, -0.014208534, -0.0124549875, -0.030410826, -0.012695199, -0.018628433, -0.0266395, -0.028152835, 0.027552305, -0.023540767, 0.015517689, -0.044679414, 0.03595972, 0.014460756, -0.034398343, -0.009470355, -0.011163848, -0.01834018, -0.02178722, -0.030050509, 0.019625312, 0.009812656, -0.013367793, 0.010851573, 0.03312522, 0.024525635, 0.013620015, 0.03209231, 0.027744476, -0.030362785, -0.00998681, -0.04777815, -0.007746834, -0.04657709, 0.0009263172, 0.0048252568, 0.007386516, 0.016934939, -0.039034434, 0.0075546643, -0.025174208, -0.01049726, -0.07547458, -0.014460756, -0.07191944, -0.023913095, 0.0274322, 0.019961609, 0.062262926, 0.009764614, -0.03206829, 0.012124696, -0.015025254, 0.03564745, -0.008239268, 0.022027431, 0.017247215, -0.016454516, -0.02928183, 0.01191451, -0.004410891, -0.03670438, -0.04544809, -0.017283246, -0.014052397, -0.003930467, -0.022063464, -0.010515276, -0.020634202, 0.032572735, 0.01615425, -0.01431663, -0.042229254, -0.009410301, 0.033893898, 0.015109329, 0.0022609946, 0.036440145, -0.004966381, -0.0010989695, -0.014436736, -0.019216953, 0.0055128634, -0.004497968, 0.021258753, 0.023048332, 0.009446333, -0.00077017944, -0.05246228, -0.00018785322, -0.027023839, -0.029425958, -0.029594107, -0.01735531, -0.02844109, -0.026999818, 0.0033749773, 0.044271056, 0.02420135, -0.033149242, -0.006882071, 0.008983925, 0.02219558, 0.015505678, -0.0056539876, 0.04294989, 0.005215601, 0.042397402, 0.04763402, -0.0335576, 0.007530643, -0.005428789, -0.019529227, -0.0008144685, -0.008053104, 0.05448006, 0.074609816, -0.026471352, -0.025246272, 0.018472295, -0.04777815, -0.029185746, 0.017307268, 0.0014134969, -0.0124549875, -0.03651221, 0.020321928, -0.020225842, -0.008521518, 0.006533764, 0.01049726, 0.0064496896, 0.008215247, -0.0085095065, 0.03125157, 0.0008407417, -0.05707435, -0.020958489, -0.021174679, 0.043622483, -0.012274829, 0.05707435, -0.0075366483, -0.0011717837, 0.03346152, -0.030506913, 0.00021131142, 0.023048332, 0.005488842, 0.060197104, -0.0076687653, 0.013776152, -0.0023946124, -0.016994992, 0.049723864, 0.030338764, -0.014460756, -0.020009652, -0.02261595, 0.02503008, 0.0002467802, 0.015685838, 0.035839617, -0.007987046, -0.012124696, 0.066346526, -0.044078883, -0.013067528, 0.01252705, 0.021114627, 0.00084524567, -0.013764142, 0.021078594, -0.006026316, -0.0043508383, -0.00077693537, -0.004494965, 0.0064136577, 0.053999636, -0.055392865, 0.0154095935, 0.008983925, 0.025438441, -0.0561135, 0.03233252, -0.012815305, -0.0073324684, 0.02256791, -0.0030596992, 0.005572916, 0.0069721504, -0.008203236, -0.016958961, -0.01593806, 0.074561775, 0.027720453, -0.017991873, 0.0067139226, 0.0106714135], [0.036007036, 0.00016491573, -0.029105488, -0.010715246, 0.0029881913, 0.038601063, -0.054593615, 0.03917223, -0.022572817, 0.013160536, -0.013065342, -0.012625071, -0.04236122, -0.04888199, 0.005449842, -0.00045997917, -0.043812923, 0.018300997, -0.025083553, -0.03410316, 0.019431423, -0.07696415, -0.03469812, 0.008734026, 0.029652853, -0.0041944743, 0.008900615, 0.016765999, -0.028510528, 0.013422319, 0.042147033, 0.016670804, 0.019062549, 0.0502623, 0.06958663, -0.035078894, 0.0024557011, 0.047382686, -0.022894096, 0.0018622277, -0.03836308, 0.041099902, 0.015742665, -0.0062827873, -0.010524859, -0.010608153, -0.01277976, 0.009346836, 0.0125417765, -0.0258689, 0.009977494, -0.042979978, -0.0013275066, -0.07972477, -0.021240106, 0.0074786586, 0.032508664, -0.07924879, 0.060638417, -0.045716796, -0.051499818, -0.03626882, 0.014731232, -0.046644937, 0.007966527, 0.011310207, -0.012815459, -0.013279527, 0.06777795, 0.03438874, -0.00089021027, -0.007199027, -0.03641161, -0.033413004, 0.013017745, -0.09348026, 0.08434166, 0.022501422, -0.025440529, -0.03412696, 0.031747114, -0.021585181, -0.0009757359, -0.069158256, 0.03636401, -0.053022917, 0.052927725, -0.10366599, -0.022810802, 0.0030402504, -0.015956853, -0.0032782347, 0.03134254, 0.0055807335, -0.017860727, 0.027844172, 0.011054374, 0.029367272, -0.055021986, 0.010596254, -0.027510993, -0.058068186, -0.04388432, -0.09400383, 0.043027572, 0.011155517, 0.036768585, -0.0033109575, -0.03407936, 0.014743132, 0.0042242226, -0.04626416, -0.016908789, -0.022168243, -0.020442856, 0.029034093, 0.0085436385, -0.049405556, -0.05159501, -0.0040873815, -0.057259038, 0.0022534146, 0.051975787, 0.030795177, 0.0076690465, 0.008204511, 0.00020414597, 0.017158672, -0.0064136786, -0.029914634, 0.0023962052, 0.014909721, 0.047763463, 0.020526152, 0.03472192, 0.022144446, 0.04140928, 0.01385069, -0.0334844, 0.010614103, -0.021811267, -0.006163795, 0.0030179394, 0.035745252, -0.026701847, -0.003593564, -0.029462464, -0.023179678, -0.039624397, 0.0014576543, -0.049833927, -0.039362613, -0.0038850948, 0.015361891, 0.07748771, -0.030842774, 0.058734544, 0.027058823, 0.009150499, 0.018824564, 0.054546017, -0.04795385, 0.0019425474, 0.04735889, 0.011988463, -0.06611206, 0.007068136, -0.04493145, -0.015778363, 0.03241347, 0.0119111175, 0.008632883, 0.02755859, 0.027915567, -0.027748978, 0.0094420295, 0.06892027, 0.00016426499, 0.0167422, -0.058496557, -0.009810906, 0.022763206, 0.027201613, -0.025083553, 0.05678307, 0.031747114, -0.024084019, 0.00087161775, 0.037577733, -0.06592167, -0.02634487, 0.01658751, -0.009971545, 0.0054557915, -0.018622277, 0.03393657, -0.012208598, -0.07948678, 0.018455688, 0.010988928, -0.002573206, -0.053689275, -0.023834135, -0.019145843, -0.03384138, 0.044336487, 0.04355114, -0.0055361115, 0.04369393, 0.007805887, 0.044574473, 0.045811992, -0.00624114, -0.04064773, -0.009495576, -0.0068004034, -0.020859329, 0.030818976, -0.046383154, -0.04793005, 0.051499818, 0.012815459, 0.03472192, -0.040671527, 0.024845568, 0.029414868, 0.015814062, 0.0028335014, 0.023120182, 0.022275336, 0.017444255, -0.039719593, 0.0011438123, 0.02451239, -0.099953435, -0.03260386, -0.033294015, -0.014612241, 0.048620205, -0.018717472, 0.0020689766, 0.0517378, -0.026249675, -0.022858398, 0.02648766, 0.045288425, 0.0016986134, 0.012446582, 0.0012992459, -0.03698277, 0.013362822, 0.008311604, 0.036792383, 0.038125098, -0.0065088724, 0.060162447, 0.041575868, -0.06977702, 0.026106885, -0.012732164, -0.0094420295, 0.0074846083, 0.0052773035, 0.06382741, 0.03562626, -0.030485798, 0.023322469, 0.012232397, -0.026059289, -0.023262972, 0.03288944, -0.030509597, 0.0487392, 0.014052977, 0.048644006, -0.0117326295, 0.05768741, 0.05345129, -0.006104299, 0.03700657, 0.039957576, 0.026106885, 0.021335298, 0.015314294, -0.01080449, 0.023655646, -0.005881189, -0.022572817, 5.103649e-05, 0.001804219, -0.020490455, -0.015492782, 0.039362613, 0.016873091, 0.06715919, 0.034793314, 0.0114173, 0.017015882, -0.042051837, 0.006562419, 2.4821025e-05, 0.022763206, -0.024988359, -0.050881058, -0.027677583, 0.020311967, 0.03210409, 0.06297066, -0.042147033, -0.013315225, 0.057354234, 0.034293547, 0.0030580992, -0.05573594, 0.024536189, -0.03638781, 0.005750297, 0.017979719, 0.031056961, -0.014207667, -0.03548347, -0.014017279, -0.090386465, 0.042718194, 0.0056580785, -0.0076095504, -0.020609446, -0.018991152, -0.011131719, -2.1393029e-05, -0.038886648, -0.024072118, -0.0020912876, -0.005604532, -0.06820632, -0.102999635, -0.043789122, -0.075393446, -0.015457084, 0.0011029089, -0.061685547, 0.008020073, -0.024607584, -0.055355165, -0.0054617412, -0.007413213, -0.0005551729, -0.006502923, 0.016194837, -0.03258006, 0.0013185821, 0.050452687, 0.0072704223, 0.0113280555, 0.03788711, -0.013172435, -0.026106885, -0.008609084, -0.04902478, 0.05111904, 0.10623622, -0.04324176, 0.019502819, 0.061828338, 0.016516116, -0.016052045, -0.020680841, -0.03029541, -0.013493714, 0.009489627, -0.030937968, 0.027844172, -0.01796782, -0.027225412, -0.036792383, -0.010935382, 0.06339904, 0.014683636, -0.027986962, 0.032556262, -0.038244087, -0.018063014, -0.014326659, 0.0023010115, 0.036792383, 0.008793523, -0.010554607, -0.003641161, 0.019717004, -0.029676652, -0.016028248, 0.02558332, -0.012279994, -0.02008588, 0.05097625, -0.0049143774, -0.02877231, 0.024940763, -0.023072585, -0.009513425, -0.0032514615, 0.019574214, -0.004747788, -0.021811267, 0.040576335, 0.006818252, 0.015314294, 0.015171504, -0.03714936, 0.06044803, -0.014838326, 0.029890837, 0.0032841843, 0.011583889, 0.042908583, 0.06425578, 0.020121578, 0.0039773136, -0.03317502, 0.015254798, 0.0042747944, -0.03624502, -0.039553, 0.03745874, -0.038934242, 0.004762662, -0.038315482, 0.025392933, -0.006318485, 0.0023129105, -0.009412282, -0.013743597, -0.0055599096, -0.0041052303, -0.022941694, -0.041623466, -0.048168037, -0.023096383, -0.0052505303, 0.042385016, -0.0006176438, -0.03398417, 0.025464328, 0.004277769, -0.045098037, -0.026130684, -0.09181437, -0.002103187, 0.037577733, -0.037244555, -0.005571809, 0.007972476, -0.051499818, -0.042075638, 0.004976848, -0.011244762, 0.023334367, -0.0032246881, 0.01719437, -0.12660769, -0.008876817, 0.013255729, 0.056402296, 0.004854881, 0.0059406846, -0.059876867, 0.016111542, 0.034222152, 0.009739511, 0.022180144, 0.012434684, 0.017908324, -0.06325625, 0.029176883, -0.030343007, -0.022917895, -0.023786537, 0.014874023, 0.06439857, -0.01703968, -0.03698277, -0.029200682, -0.0020050183, 0.03410316, -0.010792591, -0.020799834, 0.00035493137, 0.013719799, 0.039386414, -0.009091003, 0.026225878, -0.0125179775, -0.04126649, -0.031223549, -0.01294635, -0.05145222, -0.059258107, -0.022049252, -0.025035955, 0.028510528, 0.05435563, 0.059400897, 0.0001610113, 0.009650266, 0.007954627, -0.0060537276, -0.018063014, 0.008388949, 0.022929793, -0.05435563, 0.02558332, -0.0089482125, -0.037101764, -0.0044384087, 0.003302033, -0.024631383, -0.016337628, 0.033579595, 0.050643075, 0.038339283, -0.0038018003, 0.020918826, -0.062399503, -0.017539447, 0.008847069, 0.0019172616, 0.028724713, -0.01385069, 0.012648869, -0.00959077, -0.003992188, -0.011762378, -0.02663045, -0.014993016, 0.002107649, -0.02314398, 0.06306586, 0.011262611, -0.037077963, 0.029986031, -0.011869471, 0.007841585, -0.0036768585, 0.015814062, -0.0051553366, 0.04781106, 0.010399917, -0.012470381, -0.00898391, 0.023120182, -0.059448496, 0.051975787, -0.0043521393, 0.044098504, 0.009001759, -0.036816183, 0.009489627, -0.019407624, 0.014993016, 0.018039215, -0.045478813, 0.02372704, 0.06758756, 0.018051114, -0.03683998, -0.06796834, 0.03167572, -0.029557658, -0.004548476, 0.014255264, 0.013779295, 0.03460293, 0.0027710304, -0.020240571, -0.047097106, 0.055545554, 0.018884059, -0.039005637, -0.006776605, -0.003899969, -0.018538982, -0.018372394, -0.030461999, -0.023239173, 0.011661234, 0.024440994, -0.0031384188, -0.026392467, -0.052308965, -0.010376118, 0.0012211573, 0.0135294115, 0.023715142, -0.0019380852, 0.009364685, 0.06425578, 0.017979719, 0.018289099, 0.01599255, 0.011167416, -0.01599255, -0.016016347, 0.020038284, -0.034007967, -0.037672926, 0.005268379, 0.04490765, -0.03700657, 0.03638781, 0.029248279, -0.024048321, 0.031294946, 0.044146102, 0.0139101865, 0.031152153, -0.016171038, 0.0022459775, 0.038767654, 0.04045734, 0.030985564, 0.047858655, 0.015123907, 0.06482694, -0.04807284, 0.0039654146, 0.01599255, 0.013624605, -0.012232397, -0.006181644, -0.03488851, -0.028201148, -0.010316622, -0.01095918, -0.014945419, 0.006377981, 0.03993378, -0.0058722645, 0.037101764, -0.009317088, 0.006443427, 0.020692741, 0.009912049, 0.0029450567, 0.067635156, -0.017158672, -0.018991152, 0.02755859, 0.009192146, 0.030152619, 0.0020764137, -0.014862124, 0.015647473, 0.007984376, 0.065112524, -0.024583785, 0.0005990513, -0.026511459, 0.020835532, -0.028653318, -0.00746081, -0.04248021, 0.0063422835, 0.010887785, 0.0041796006, -0.004289668, -0.012506079, -0.015814062, -0.017872626, 0.010316622, 0.041242693, 0.057497025, -0.053641677, -0.064017795, -0.030723782, -0.0059109367, -0.019157741, -0.012279994, 0.026678048, -0.009828755, -0.009156449, -0.013231931, -0.05345129, -0.0053843963, -0.044693466, -0.000985404, 0.005408195, -0.027772777, 0.007567903, -0.021394795, -0.0029777794, -0.011078172, -0.05159501, -0.00032908775, 0.07063376, 0.044622067, -0.010596254, 0.007746391, -0.035340678, -0.0018369418, -0.021525687, -0.03246107, -0.031247348, 0.033698585, -0.046335556, 0.016837394, 0.0033883024, 0.0019246986, -0.019514719, -0.052451756, -0.02070464, 0.009299239, 0.0007299427, 0.0056402297, 0.051832996, 0.006598117, 0.008484143, -0.033531997, 0.0020065056, -0.067492366, 0.01782503, -0.022560919, -0.006526721, -0.016968286, -0.03714936, 0.017920222, -0.07130012, 0.019752702, 0.015659371, 0.047477882, -0.014552744, 0.0049084276, -0.032556262, 0.0025404831, -0.011161467, -0.0055599096, -0.037244555, -0.0034805215, 0.015730767, 0.015159604, 0.013279527, 0.012506079, -0.03165192, -0.028986497, -0.044193696, 0.008323504, -0.0047864607, 0.015814062, -0.022334833, -0.0048757046, -0.013220032, -0.028296342, -0.0011802537, 0.021525687, -0.040481143, -0.020549951, 0.021501888, 0.022013554, 0.007062186, -0.004051684, -0.02479797, -0.009620518, -0.028248744, -0.0075322054, -0.016670804, 0.034031764, 0.003197915, 0.006366082, -0.042242225, 0.009751409, 0.02115681, 0.010762843, 0.054784, -0.029295877, 0.0050898907, -0.007425112, -0.030914169, 0.010316622, -0.010286874, -0.056687877, 0.006139997, -0.0058960626, -0.011357804, 0.027439598, 0.0073001706, 0.025059754, 0.02267991, -0.01658751, -0.04121889, -0.030176418, -0.017218169, 0.035721455, 0.0456454, 0.023786537, -0.0060210046, 0.07882042, -0.04488385, 0.028105954, -0.048453618, 0.0066397637, 0.010304723, -0.029962232, -0.044503078, -0.034769516, 0.036007036, -0.025226343, -0.015135806, -0.004325366, -0.031199751, -0.04688292, 0.020454757, 0.0070205387, 0.027653784, -0.017706037, 0.012232397, -0.01768224, 0.03607843, 0.018098712, 0.0072228257, 0.005009571, 0.039481606, -0.0062946863, -0.04400331, 0.033103626, -0.004729939, 0.013041544, 0.013124838, 0.01110197, -0.015349992, -0.019931192, -0.010673599, -0.04552641, -0.004729939, -0.02479797, 0.036720987, 0.009162398, 0.054403227, -0.040861916, 0.055069584, 0.0031324693, -0.029414868, -0.023512855, 9.6774114e-05, 0.01736096, 0.003730405, -0.039719593, 0.0075441045, -0.020157276, 0.0243696, -0.0050006467, 0.01875317, 0.020966424, 0.029010294, 0.004685317, -0.03779192, -0.027130218, -0.0120241605, -0.021989755, 0.03150913, -0.05283253, 0.026440063, 0.01400538, -0.007984376, 0.0008195587, -0.040623933, 0.026749443, -0.0039326916, -0.022120647, -0.087340266, 0.006041828, -0.016730301, -0.039719593, 0.0063720313, 0.026440063, 0.009620518, 0.02451239, -0.014493248, 0.007335868, 0.007335868, 0.025535723, -0.020133477, 0.011024626, 0.016635107, -0.039767187, -0.027225412, -0.0076630968, -0.0517378, 0.01293445, 0.02315588, -0.027011225, 0.0024497516, -0.026820838, -0.007520306, 0.02251332, 0.01872937, 0.0018860261, -0.011661234, 0.026130684, -0.00027833015, 0.0068896473, 0.0167541, 0.0023441461, -0.022596616, -0.007734492, -0.029700449, 0.018170107, -0.035245486, -0.010132184, 0.013957784, 0.005500414, -0.0046972167, -0.025630917, 0.017265767, 0.014743132, -0.03396037, 0.0066278647, -0.018229602, -0.024893165, 0.00062545267, 0.03334161, -0.011518443, 0.011494645, 0.03788711, 0.06268508, 0.021406693, -0.028558124, -0.01902685, 0.0019722953, 0.03474572, 0.028581923, -0.018408092, 0.05402245, 0.008734026, 0.035269283, 0.017015882, 0.021359097, -0.010935382, -0.0021805319, -0.009674065, -0.058020588, -0.02558332, 0.06506493, 0.04236122, -0.0044532823, 0.028629519, 0.015445186, -0.091481194, 0.0073120696, 0.026582854, 0.05083346, 0.0013817968, -0.026225878, -0.010518909, -0.013469915, -0.001207027, -0.005280278, -0.039695792, -0.010227378, 0.03788711, -0.018289099, 0.007984376, 0.018360494, -0.03224688, -0.026535258, -0.0006864362, 0.03469812, 0.020192973, 0.013148637, -0.021513786, 0.013624605, 0.02510735, -0.020169176, 0.004932226, 0.026297273, 0.018229602, -0.012565575, 0.016099643, -0.011768327, 0.015706968, -0.051690206, 0.004206374, 0.022560919, -0.03379378, 0.012982047, -0.009638367, -0.033746183, 0.004813234, 0.005985307, 0.02160898, 0.0073180194, -0.012470381, 0.04826323, -0.03274665, 0.031889904, 0.005283253, 0.017789332, 0.019502819, 0.024440994, -0.009067205, -0.017111076, 0.00837705, -0.008537689, -0.008847069, -0.014957317, 0.032841843, -0.058972526, 0.002406617, -0.00037519724, -0.00057971507, -0.02908169, -0.018408092, 0.0009088028, -0.017551348, -0.024024522, -0.008888716, -0.0064017796, 0.060543224, 0.009721662, -0.046930518, 0.008650732, 0.11956335, 0.0045752493, -0.03943401, 0.054070048, 0.014017279], [-0.007678009, -0.0032887682, -0.02456457, 0.011162839, 0.015583702, -0.0013558264, -0.0115486365, 0.036657117, 0.0013226224, 0.040198866, -0.0050027226, -0.011314628, -0.022350974, -0.013268915, -0.015697544, 0.02610776, -0.036682416, 0.018505646, 0.008879675, -0.035366908, 0.0065901857, -0.03364663, -0.019074855, -0.009739813, -0.0029693784, 0.004417701, -0.009341367, 0.01830326, -0.054391168, 0.024855498, 0.049736295, 0.026436638, 0.01885982, -0.0026057165, 0.040806025, -0.035240415, -0.0067482996, 0.04998928, -0.05039405, -0.009101034, -0.043386444, 0.009189578, 0.02144024, -0.018050278, 0.001340015, 0.013673686, -0.00709615, 0.013838125, -0.009410937, -0.023388201, -0.019808505, -0.037112486, 0.003127492, -0.0866211, 0.011099593, 0.0053916825, 0.07179634, -0.07068322, 0.06435867, -0.019884398, -0.054998323, 0.0029377555, 0.022692502, -0.0061980635, -0.009676568, 0.00716572, 0.0035132898, 0.020529503, 0.03617645, 0.037770238, -0.01220639, 0.023881517, -0.012503644, -0.031293895, -0.016393244, -0.052873276, 0.06911473, 0.06790042, 0.015267475, -0.091326565, 0.036581222, 0.0035923468, 0.017670805, -0.024109202, 0.014015213, -0.034430873, 0.06683789, -0.115663454, -0.018935716, 0.039111044, -0.0050280206, 0.029295336, -0.0011439538, 0.00979041, -0.00894292, -0.006659756, 0.018240014, 0.013230967, -0.044929635, -0.004708631, -0.021313747, -0.047535352, -0.05778113, -0.0780703, 0.043867107, 0.01320567, 0.03984469, -0.041210797, -0.007962614, -0.008696263, 0.015027141, -0.052721485, 0.00049529166, -0.0024112363, 0.027650952, 0.041691463, -0.016519736, -0.025399411, -0.024589868, -0.020251224, -0.121330254, -0.048218403, 0.035695784, 0.037820835, -0.031243298, 0.01928989, -0.028839968, 0.026461935, -0.014053159, -0.012263311, -0.008348412, 0.0144452825, 0.030459054, 0.05181075, 0.045359705, 0.015204228, 0.056819797, 0.0069506853, -0.022920186, 0.0068937642, -0.03109151, 0.008500201, -0.02198415, 0.0022736774, -0.04030006, -0.011732048, 0.015090386, 0.008209271, -0.06172765, 0.0050944285, -0.03728957, -0.04300697, -0.005565608, 0.015583702, 0.08834138, -0.017202787, 0.021073416, 0.049458016, 0.0054359543, 0.04073013, 0.012079899, -0.04766184, -0.0026879357, 0.05778113, -0.0122886095, -0.061272282, 0.02709439, -0.035240415, -0.02567769, 0.046093352, -0.005518174, -0.010979426, 0.026057163, 6.7544264e-05, -0.05178545, 0.026588427, 0.039389323, 0.02099752, -0.01589993, -0.053328644, -0.027069094, 0.025905374, 0.030610843, -0.044904336, 0.029067652, 0.026436638, 0.010713795, -0.0022041071, 0.018366506, -0.069519505, 0.0075578424, -0.0041805306, -0.016266754, -0.022654554, -0.011921785, -0.026158357, -0.019884398, -0.08980867, 0.034152593, 0.008146026, -0.035847574, -0.05464415, 0.0026167843, -0.017696103, -0.058843654, 0.047510054, 0.044246584, 0.00048422368, 0.016228806, 0.014280844, -0.008601394, 0.053581625, 0.012579539, 0.012712355, -0.02709439, 0.021022819, -0.027650952, 0.017354578, -0.024665762, -0.026689619, 0.06294197, 0.0019542873, 0.02909295, -0.018935716, 0.037365466, 0.020934274, 0.035695784, -0.0054106563, 0.015646948, -0.0005747439, 0.0006043902, -0.041084304, 0.002338504, -0.0041678813, -0.1135384, -0.03266, -0.025525901, -0.023502044, 0.038933955, -0.0034721803, 0.0061411425, 0.039566413, -0.01588728, 0.02028917, 0.03534161, 0.030408457, 0.0076527107, 0.013167722, -0.01688656, -0.00030891495, 0.01591258, -0.013951967, 0.029345931, 0.031243298, 0.00063759414, 0.050748225, 0.01362309, -0.05196254, -0.017974384, 0.011441119, -0.0137875285, 0.020099433, -0.019403733, 0.06435867, -0.0028017776, -0.046042755, 0.02356529, 0.010486111, -0.03053495, -0.030281967, 0.055150114, 0.0031227488, 0.041059006, 0.027701547, 0.02909295, -0.010871909, 0.089758076, 0.061272282, -0.022186536, 0.036505327, 0.006103195, 0.019871749, -0.00089966785, 0.008405332, 0.012630135, 0.01589993, 0.006194901, -0.047332965, -0.04184325, 0.008139702, -0.01213682, -0.017696103, 0.03857978, 0.02371708, 0.058590673, 0.031723965, -0.023628535, 0.015975824, -0.045081425, 0.007621088, 0.018265313, -0.006305581, -0.0610699, -0.02371708, -0.03291298, 0.045663282, 0.012680732, 0.07781732, -0.014141704, -0.034936838, 0.068861745, -0.015014492, -0.031470984, -0.054593552, 0.00415207, 0.016937157, 0.041286692, 0.023742378, 0.025842128, -0.055301905, -0.012946363, -0.009600674, -0.10185062, 0.0022452169, 0.034329683, -0.035164524, 0.0014910137, -0.024577219, -0.016367948, 0.0120419515, -0.07225171, -0.006470019, 0.012965336, -0.0020586425, -0.046245143, -0.08813899, -0.056415025, -0.07427557, -0.01773405, -0.011668803, -0.042526305, -0.0030041633, -0.044069495, -0.015710194, 0.014293493, -0.004269074, -0.027853338, -0.023071975, 0.036125854, -0.0010229967, 0.0013526641, 0.049179737, 0.0075704916, 0.06597775, 0.020820433, -0.046068054, -0.023679132, -0.016861262, -0.028865267, 0.009594349, 0.08110609, -0.045207914, 0.013357459, 0.09841007, -0.004885718, -0.039490517, -0.014369387, -0.011055321, -0.021528782, 0.008266193, -0.041109603, 0.030560248, -0.0040888246, -0.041691463, -0.035265714, 0.00016058439, 0.046169247, -0.02313522, -0.036075257, 0.035113927, -0.028865267, -0.02285694, 0.0057774805, 0.029320635, 0.04786423, 0.02101017, -0.011441119, -0.008670964, 0.043867107, -0.0072795623, -0.028890565, 0.06739445, -0.01191546, -0.045739178, 0.03192635, 0.0037504607, -0.028612284, -0.0003903436, -0.02313522, -0.006723001, -0.012212714, 0.011757347, 0.0054707397, 0.014457932, 0.021617327, -0.030914422, 0.018265313, -0.021629976, -0.008367386, 0.0723529, -0.031319194, 0.018480347, -0.011681452, 0.035974067, 0.017506367, 0.044727247, 0.013749581, 0.007855097, -0.0137875285, 0.03645473, -0.0123392055, -0.018290611, -0.036100555, 0.06967129, -0.05874246, 0.031066211, -0.05732576, 0.047079984, 0.029295336, -0.034759752, -0.009366665, 0.0025630256, -0.045739178, -0.02426099, 0.018897768, -0.015798736, -0.02894116, -0.020782486, -0.013420705, 0.029826598, -0.016734771, -0.0009795154, 0.025374113, 0.0020048837, -0.050722927, -0.007678009, -0.069519505, -0.006397287, 0.025513252, -0.05095061, -0.023729729, -0.011738373, -0.0681028, -0.016140264, -0.0054675774, -0.032963578, 0.009404613, -0.0036872153, 0.0014973383, -0.12709825, -0.0075578424, -0.01085926, 0.06774863, -0.036910098, 0.023476746, -0.0030152313, 0.028966459, 0.0667367, 0.030206071, 0.019365786, -3.40933e-05, -0.0047370913, -0.016861262, 0.019656716, 0.00829149, -0.04460076, -0.023451447, -0.001226173, 0.06015916, -0.0042595873, -0.008474903, -0.04245041, 0.016684175, 0.06233481, 0.0099358745, -0.013218319, 0.0036208073, 0.015722843, 0.06704028, 0.02285694, 0.003911737, 0.013749581, -0.011257707, -0.03534161, -0.013446002, -0.032887682, -0.03900985, -0.03804852, 0.012022978, 0.0234135, 0.03731487, 0.034253787, 0.0024855498, 0.041463777, 0.026461935, -0.010663198, -0.03377312, -0.023615886, 0.015204228, -0.039996482, -0.0028049399, -0.012800898, -0.03961701, -0.021946203, 0.007013931, -0.020921625, -0.0067356504, 0.01744312, 0.025197025, 0.022338327, -0.015798736, -0.011700425, -0.05631383, -0.02227508, 0.004493596, -0.005613042, 0.00865199, 0.014154353, -0.019011611, -0.03875687, 0.0021519295, -0.004278561, 0.0066091595, 0.002283164, -0.009309744, -0.028207513, 0.035240415, 0.04242511, -0.04513202, -0.0053379238, -0.03136979, 0.032179333, -0.018632138, 0.00752622, -0.024944043, 0.033570733, 0.03878217, 0.003627132, -0.025209675, 0.015760789, -0.045385003, 0.027322074, 0.0008063807, -0.0035164522, -0.012143144, -0.035594594, 0.0061790897, -0.04996398, -0.0036334565, -0.011055321, -0.02427364, 0.0031290732, 0.07488272, 0.028081022, -0.030585544, -0.060057968, 0.041716762, -0.009120007, -0.019631417, 0.023944763, 0.00936034, 0.0283846, 0.0048446087, -0.02370443, -0.017088946, 0.067647435, 0.0030405296, -0.052063733, -0.003820031, -0.005034345, -0.040679533, 0.014533826, 0.006425747, -0.017519016, 0.022806343, 0.010144585, 0.00979041, -0.057983514, -0.06906413, 0.016051719, -0.0058344016, 0.047206473, -0.012718678, -0.011333602, 0.0102647515, 0.042070936, 0.015090386, 0.03179986, 0.006308743, 0.012813548, -0.04184325, -0.015811386, 0.009537428, 0.0005636759, -0.026133059, 0.01745577, 0.050444648, -0.03066144, 0.03445617, 0.021882959, -0.037669048, -0.019011611, 0.05449236, -0.0042943726, 0.03192635, -0.033317752, -0.0035164522, 0.044803143, 0.014483229, 0.0056826123, 0.035670485, 0.027069094, 0.065218806, -0.05368282, 0.04940742, -0.0047971746, 0.0015985311, -0.008525499, -0.0024934555, -0.03878217, -0.042627495, -0.033671927, -0.02911825, -0.022907536, -0.017291332, 0.016734771, -0.009758787, 0.044347774, -0.014154353, 8.1626284e-05, 0.039945886, 0.045587387, -0.00851285, 0.10989546, -0.017594911, -0.027347373, 0.0411602, 0.008689938, 0.05196254, -0.01191546, -0.002681611, 0.024880797, -0.012004004, 0.06359972, -0.018543594, -0.017101595, -0.024349535, 0.008955569, -0.028131617, 0.00013706496, -0.03984469, 0.002087103, 0.00013153096, 0.0068052206, -0.009733489, 0.010448164, -0.03814971, -0.030813228, 0.01533072, 0.033823717, 0.062688984, -0.06992427, -0.04525851, -0.018935716, -0.032584105, -0.018505646, 0.002428629, 0.02284429, -0.018847171, -0.015077738, -0.009524778, -0.062132422, -0.01872068, -0.016911859, -0.019049557, 0.0094741825, -0.047510054, 0.0049805865, -0.025083182, -0.018100874, -0.0017186976, -0.03916164, 0.0013740094, 0.042323917, 0.03182516, -0.015204228, 0.014812106, -0.048749667, 0.02045361, -0.004986911, -0.032381717, -0.030155476, 0.0066534313, -0.05631383, 0.041716762, 0.03787143, -0.0036555924, 0.009942199, -0.041387882, -0.019833803, 0.028156916, 0.005742695, -0.019947644, 0.031142106, 0.0037662722, 0.0031954811, -0.043259952, 0.03379842, -0.07007606, 0.006454208, -0.011112242, -0.017987033, -0.01688656, -0.044651356, 0.019859102, -0.055554885, 0.0117130745, -0.0072732377, 0.03205284, -0.01072012, -0.0034848296, -0.019125452, -0.011763671, -0.014508528, -0.016633578, -0.021642625, 0.015027141, -0.00042018757, 0.032103438, 0.007842448, 0.005884998, -0.023375552, -0.027372671, -0.030990316, 0.001813566, 0.013180371, 0.037770238, -0.027777443, -0.016405893, -0.010024419, -0.016292052, -0.04485374, 0.030357862, -0.019808505, 0.0022072694, 0.00951213, 0.03435498, -0.0007107218, 0.0065965103, -0.028232811, -0.02015003, 0.014091107, 0.024438078, 0.003959171, 0.043082863, 0.024956692, 0.0009233849, -0.010486111, 0.03491154, 0.024362184, 0.020213276, 0.08748124, -0.023261711, 0.003399448, -0.0036302942, -0.0059735416, 0.033823717, -0.008689938, -0.039515816, -0.0018942041, -0.01658298, -0.022502765, 0.009499481, -0.006602835, 0.026284847, 0.0070645274, -0.011504364, -0.039794095, -0.018619489, 0.0011273518, 0.051178295, 0.05064703, 0.01885982, -0.023451447, 0.059552003, -0.020213276, 0.02198415, -0.0368848, 0.009113682, -0.009600674, 0.0002446812, -0.043664724, -0.025197025, 0.0069064135, -0.023805622, 0.014888001, -0.0025725125, -0.049609806, -0.059653196, 0.009701867, 0.0255512, 0.020352416, -0.0008103335, 0.0067103524, -0.018113524, 0.02909295, 0.010106638, 0.004838284, 0.012617486, 0.022781044, -0.027170286, -0.04743416, 0.018227365, -0.023944763, 0.022072695, 0.026765514, 0.010049717, -0.018290611, -0.027347373, -0.013876072, -0.047611244, -0.0411855, -0.00581859, 0.024539271, 0.021022819, 0.037390765, -0.035872873, 0.057932917, -0.00037888033, -0.019315189, -0.010271076, -0.010966777, 0.006811545, 0.0072036674, -0.018366506, 0.008835402, -0.020934274, 0.0052145952, -0.013534547, 0.03792203, 0.023223763, 0.0003581279, 0.005986191, -0.017506367, -0.016873911, -0.019859102, -0.0045473548, 0.021541432, -0.025842128, 0.01775935, 0.032381717, 0.016405893, -0.019315189, -0.026259549, 0.020415662, -0.008639341, -0.017670805, -0.09198432, -0.03023137, -0.0065522385, -0.0127756, -0.012219039, 0.030762633, -0.001778781, 0.023084624, -0.011320952, 0.0066724047, -0.0006960963, 0.012940038, -0.0066344575, 0.0031796696, 0.009992796, -0.054391168, -0.0024602516, -0.0066534313, -0.076400615, 0.013496599, 0.00479085, -0.04614395, 0.02911825, 0.009088385, -0.02316052, -0.008506525, -0.0028334004, 0.004550517, 0.034506768, -0.021933554, -0.018581541, -0.024185097, -0.008380035, 0.023995358, -0.016798016, 0.018050278, -0.035417505, 0.024779605, -0.017987033, -0.006836843, 0.02013738, 0.0025930672, -0.037340168, -0.024235692, 0.017620208, 0.027701547, -0.04047715, 0.024855498, -0.04743416, 0.0020143706, 0.02255336, 0.0023827758, -0.019378435, 0.0036492678, 0.0035291014, 0.020086784, 0.023438798, -0.02653783, 0.009214875, 0.015861982, 0.02273045, 0.00723529, -0.014141704, 0.029219441, 0.026284847, 0.057072777, 0.015748141, -0.001734509, -0.011687776, -0.0085191745, -0.0067040278, -0.058438882, 0.0022294053, 0.058590673, 0.05778113, -0.031723965, 0.009050437, 0.0046074376, -0.06638252, -0.0009099453, 0.043259952, 0.034582663, 0.011966057, -0.013496599, 0.023590587, -0.030737335, 0.0049647754, -0.009841006, -0.00915163, -0.0072732377, 0.024513973, -0.016975105, 0.008076456, 0.017088946, -0.033899613, -0.0069759833, -0.008335763, 0.05322745, 0.01462237, 0.038427994, -0.0496351, 0.026360743, 0.025159078, -0.0062138746, 0.0019337325, 0.02709439, 0.05434057, 0.008196622, 0.008715236, -0.0011700426, -0.0012909997, -0.05135538, -0.003867465, 0.0155331055, -0.045486197, 0.033823717, 0.00915163, -0.019188698, -0.0059355944, -0.0062454976, 0.017923787, 0.01503979, -0.00091626984, 0.018227365, -0.06486463, 0.0019653554, -0.0033235534, 0.012680732, 0.020314468, 0.027423268, -0.039794095, -0.0021139823, -0.013028582, -0.013863423, -0.019492276, -0.029877195, 0.035164524, -0.051911943, 0.006488993, 0.010916181, -0.00053126254, -0.014394686, -0.00766536, 0.0050659683, -0.0081080785, -0.022161238, 0.004654872, -0.01831591, 0.03721368, 0.041640867, 0.002474482, 0.00422164, 0.07139157, -0.011972382, -0.005647827, 0.014318791, 0.007469299], [0.017163169, -0.0014361518, -0.024587136, 0.049478624, -0.021206677, 0.021989292, -0.04134813, 0.028391512, -0.0060326527, 0.015619679, -0.046391644, -0.007364184, -0.008695716, -0.052391686, 0.006951138, -0.0046820994, -0.058652602, 0.027348027, -0.023021907, -0.039065503, 0.015228372, -0.03645679, -0.072000526, 0.0008716096, -0.003937529, -0.011717477, -0.024674093, 0.017315343, 0.010837035, 0.007380489, 0.016163161, 0.02236973, -0.0067120055, 0.028956734, 0.036282875, -0.040522035, 0.009983769, -0.017630564, -0.033869814, 0.015760984, -0.03273937, 0.041695956, -0.01052725, -0.053696044, -0.02017406, -0.018761007, -0.03852202, -0.055739537, -0.0070815734, -0.020304495, 0.030521963, -0.026174104, 0.019152313, -0.040500294, -0.025195837, -0.012858789, -0.01405445, -0.072652705, 0.037717666, -0.023130603, -0.030521963, -0.0040788343, 0.027608898, -0.023761043, -0.020652324, 0.009788115, -0.023152342, -0.04063073, 0.033174157, 0.013934884, -0.029956741, 0.022391468, -0.020163191, -0.046087295, 0.011293561, -0.102870315, 0.08400061, 0.036261134, -0.058913473, 0.034652427, -0.012282698, -0.038761154, -0.0139892325, -0.042000305, 0.023630608, -0.034717645, 0.051522117, -0.08965283, -0.02265234, -0.00793484, -0.0075978814, -0.00046128055, 0.038891587, 0.00016312959, -0.056174323, 0.027043676, 0.018097958, 0.023695825, -0.037739407, 0.014217495, -0.016315337, -0.0629135, -0.03695679, -0.075478815, 0.030108916, 0.04826122, 0.0060109133, -0.010369641, -0.033869814, 0.06508743, 0.009891377, -0.00015098616, -0.0015108807, -0.0009524526, -0.00734788, 0.0244567, -0.0072065745, -0.08300061, -0.023717564, 0.022782775, -0.044130757, -0.012467482, 0.046043813, 0.025174096, -0.020347975, 0.020369714, 0.041174214, 0.030065438, 0.0144457575, -0.02817412, -0.026695848, 0.01255444, 0.06087001, 0.009353329, 0.07269619, -0.022217553, 0.0099783335, -0.01802187, -0.023717564, -0.011728346, -0.030108916, 0.021000152, 0.0028206727, 0.031021966, -0.036804616, 0.007684839, -0.0250654, -0.04800035, -0.021771898, 0.006304394, -0.049000356, -0.009048979, -0.015467504, 0.018815355, 0.019489273, -0.018369699, 0.050565585, 0.01087508, -0.0040217685, 0.007646795, 0.012663136, -0.06587005, 0.0044755763, 0.056130845, 0.030652398, -0.0905224, 0.01407619, -0.01989145, -0.03089153, 0.019391445, 0.027913248, -0.05960913, -0.006853311, 0.027369766, -0.0037690492, 0.01191313, 0.036326353, 0.023608869, 0.020674065, -0.06952225, -0.03676114, 0.04826122, 0.026739325, -0.039652463, 0.06239176, 0.05230473, -0.04158726, -0.0066957013, 0.012891399, -0.084304966, -0.01956536, -0.000466036, -0.01132617, 0.010250075, -0.007157661, 0.005481018, -0.0041223126, -0.058087382, 0.002782629, -0.005940261, 0.00019599329, -0.053304736, -0.028043684, 0.0047364477, -0.025587143, 0.02293495, 0.050000366, -0.048782963, 0.027391504, -0.009815289, 0.034978516, 0.04773948, -0.007793535, -0.028978473, 0.011858782, 0.008429409, -0.050565585, 0.019130575, -0.023521911, -0.059826523, 0.05726129, 0.0022636035, 0.012858789, -0.030782834, 0.00267665, 0.05265256, -0.014521846, 0.015163154, 0.017000124, 0.034435034, 0.013543577, -0.0397829, -0.05108733, 0.039282896, -0.046000335, -0.030761095, -0.01772839, 0.03428286, 0.086131066, -0.05686998, 0.01680447, 0.04895688, -0.050609067, -0.020739282, 0.026174104, 0.04617425, -0.0128370505, 0.026782805, -0.017250126, -0.03486982, -0.006673962, 0.00018376493, 0.019174052, 0.006673962, -0.023695825, 0.06530482, 0.009146806, -0.05165255, -0.0024280068, 0.01254357, -0.0143261915, 0.03578287, 0.019945798, 0.07865275, 0.008108755, -0.011717477, 0.030152394, -0.020326236, -0.035978522, -0.007407663, 0.018587092, -0.040217686, 0.03882637, 0.017913174, 0.04552207, -0.015271851, -0.012032697, 0.02354365, -0.032956764, 0.05634824, 0.0072989664, 0.031000227, -0.0023492018, 0.017706651, 0.07100052, 0.0134131415, -0.0149022825, -0.008831587, -0.030935008, -0.0025828993, -0.0106033385, -0.0329785, 0.053435173, -0.018597962, 0.07434837, 0.013206618, 0.011239213, 0.028261077, -0.063522205, 0.0074130977, -0.013695752, 0.03119588, -0.024565397, -0.041630737, -0.0075435336, 0.011103342, 0.029913262, 0.068652675, -0.03310894, -0.019728405, 0.028587166, 0.0060924357, 0.008163103, 0.0046032947, 0.010896819, -0.041695956, 0.008777238, 0.019652318, 0.04895688, 0.012619657, -0.026130626, -0.05569606, -0.07643534, 0.04217422, -0.002732357, -0.013543577, -0.03728288, 0.008054406, -0.008907674, -0.010543555, -0.045174245, -0.0036494832, -0.015674027, -0.029869784, -0.07787013, -0.08752238, -0.009250067, -0.029782826, -0.0032310018, -0.014358801, -0.025434969, 0.00917398, -0.013771839, -0.0996529, -0.028304555, -0.017978393, 0.06052218, 0.016326206, -0.028239336, -0.014097929, 0.0011773184, 0.016087074, 0.020869717, -0.011125081, -0.010793557, 0.01376097, -0.032087192, -0.026826283, -0.026826283, 0.0099076815, 0.10773992, -0.0732614, 0.03421764, 0.017184908, -0.0001951441, -0.031065444, -0.040130727, -0.03854376, 0.03543504, 0.026434975, -0.0075978814, 0.015076197, -0.0060706963, -0.011413127, -0.023369735, -0.02138059, 0.033869814, 0.006201132, -0.026087146, -0.0010883232, -0.01835883, -0.029869784, -0.0075054895, 0.027500201, 0.01222835, -0.022347989, -0.04128291, 0.00137501, -0.00022078966, -0.036782876, 0.009440286, -0.0145653235, -0.024239307, -0.006641353, 0.03091327, 0.03332633, -0.044869892, 0.013858797, -0.0110598635, -0.012434874, -0.012206611, -0.027891507, -0.03882637, -0.008271799, 0.035608955, -0.0110598635, -0.03821767, 0.005187538, -0.03643505, 0.049043838, 0.010510947, 0.025869755, -0.0056793895, 0.036152437, 0.031369794, 0.061087403, 0.0035842652, 0.0069022244, -0.043391623, -0.005081559, 0.052696038, -0.034782864, -0.053043865, 0.017891435, 0.009972899, -0.007250053, 0.004423945, -0.004157639, -0.03367416, -0.022347989, -0.023174083, 0.0011705249, -0.022456685, 0.031413272, -0.040522035, -0.061652623, -0.07247879, -0.01621751, 0.017619694, 0.06508743, 0.018565353, -0.04739165, 0.030739356, 0.0131414, 0.006657657, -0.00794571, -0.09747897, 0.01959797, 0.052478645, 0.0071467916, -0.009456591, -0.006788093, -0.02447844, -0.03328285, 0.05647867, -0.03641331, 0.010038117, -0.030456744, 0.034739383, -0.08434844, 0.030239351, 0.008152233, 0.050652545, 0.050043844, 0.031674143, -0.06239176, -0.037717666, 0.02630454, -0.009712027, 0.021652332, 0.054000393, 0.028630644, -0.04408728, 0.022282772, -0.027956726, 0.021108849, -0.0071087475, -0.0068043973, 0.05604389, -0.020587107, -0.004043508, -0.048130788, 0.00198371, 0.03578287, 0.005070689, 0.014304453, 0.034326337, 0.013326184, 0.025434969, -0.018011002, 0.033587202, 0.0046956865, -0.022739297, -0.0053614522, 0.033587202, -0.05200038, -0.04956558, -0.042674225, -0.016750121, 0.0027160523, 0.027304547, 0.04426119, 0.021021893, -0.0076304907, -0.0077120126, 0.00902724, -0.0336959, -0.005413083, 0.042304657, -0.04839166, 0.016054465, 0.0039483984, -0.031608928, -0.013065313, -0.0061087403, -0.01956536, -0.010462033, 0.024934964, 0.04132639, 0.039674204, 0.007929406, -0.014097929, -0.0519569, -0.027891507, -0.02020667, -0.001500011, 0.05265256, -0.013032704, -0.003198393, -0.017239256, -0.0062500457, -0.009456591, -0.010353336, 0.0071522263, 0.034717645, -0.047782958, 0.03428286, 0.0023478433, -0.031326316, 0.051217765, -0.0067120055, 0.028304555, -0.0017595238, 0.020424062, -0.008695716, 0.032804586, 0.016641425, -0.0029755651, -0.011070733, 0.03150023, -0.072348356, 0.058869995, 0.006141349, 0.074130975, 0.02723933, -0.045435116, -0.0069457027, -0.019152313, 0.014174016, 0.02419583, -0.02630454, 0.0067120055, 0.07739187, 0.04158726, -0.029739348, -0.041239433, 0.035087213, -0.013739231, 0.030217612, 0.01586968, 0.010869645, 0.029326301, 0.01434793, -0.007951145, -0.052261252, 0.055217795, -0.022695817, -0.010597903, -0.0107066, -0.018543614, -0.0017051755, -0.02569584, -0.00014954254, -0.010690295, -0.012978355, 0.011103342, -0.027913248, -0.026065407, -0.0402829, -0.014554454, -0.007304401, 0.00048030243, 0.016924037, 0.028717602, 0.028326293, 0.034674168, 0.0024973007, 0.016543599, -0.0041739433, 0.013119661, 0.011576171, -0.011456605, 0.0039810073, -0.03513069, -0.059565652, -0.016304467, 0.013282706, -0.016771862, 0.026369758, 0.04063073, -0.025761059, 0.0397829, 0.035565477, -0.0056359107, 0.022521904, -0.017315343, -0.016141422, 0.026239322, 0.030326309, 0.04350032, 0.025674101, 0.013424011, 0.07604403, -0.03919594, -0.011880522, 0.036326353, -2.8660195e-05, 0.019250141, -0.011815304, -0.03206545, -0.0028179553, -0.025739318, 0.0056739543, -0.017945783, 0.02539149, 0.037456796, -0.0019864275, 0.0373481, -0.011565302, 0.013206618, 0.025478447, -0.0064891777, 0.03643505, 0.059739567, -0.02908717, -0.039217677, 0.050348192, 0.016934907, 0.018804485, -0.028500209, -0.01591316, 0.030869791, 0.026695848, 0.046391644, -0.009923985, 0.0026223017, -0.025174096, 0.026152365, -0.029587172, -0.004752752, -0.055609103, -0.0141087985, 0.01346749, 0.015500113, 0.011989218, -0.034674168, -0.016065335, 0.0012241937, 0.011847912, 0.05113081, 0.06821789, -0.048522092, -0.023521911, -0.018597962, -0.009451156, -0.009233763, -0.015413156, 0.044369888, 0.0047446, -0.009440286, -0.015924029, -0.010597903, -0.026348019, -0.010755514, -0.008891369, 0.009081588, -0.04076117, 0.013880536, -0.013510969, 0.001476913, -0.0068696155, -0.03639157, -0.011858782, 0.011858782, 0.0053913435, -0.015130545, 0.0022867015, -0.028000204, 0.007869623, -0.0035108952, -0.028630644, -0.02168494, 0.008891369, -0.010597903, -0.0046820994, -0.0042799227, -0.003622309, -0.03763071, -0.046000335, -0.014391409, 0.011891391, -0.009326155, 0.023956697, 0.05413083, 0.025500186, 0.021293635, -0.006364177, -0.026739325, -0.05017428, 0.0014483802, -0.02847847, -0.015402286, -0.0127174845, -0.02813064, 0.009298981, -0.07521794, 0.038369846, 0.0037174185, 0.075957075, -0.0076033166, 0.01744578, -0.0031902406, 0.022543643, -0.011750086, -0.00871202, -0.01160878, -0.025739318, 0.015206633, 0.015717506, 0.0021793637, -0.009434852, -0.020967545, -0.030608919, -0.0017554476, 0.0052554733, -0.034130685, -0.003959268, -0.011847912, -0.023848, 0.023021907, -0.0143261915, 0.019402316, 0.0470873, -0.019413184, -0.008777238, 0.06843528, 0.0018981117, -0.008929413, 0.0038886154, -0.0018981117, -0.028608905, -0.01955449, -0.006456569, -0.015271851, 0.039565507, -0.016760992, 0.011782695, -0.04682643, 0.01806535, 0.022054508, 0.0053288434, 0.011717477, -0.021282764, -0.018152306, -0.008315278, -0.018282741, -0.045435116, -0.017500129, -0.037261143, 0.015782723, -0.0034592643, -0.015619679, 0.029130647, -0.042391613, 0.03332633, 0.017956654, -0.00081386464, -0.028630644, 0.0007765002, -0.01559794, 0.0035081778, -0.0002517002, 0.04656556, 0.0073587494, 0.06704397, -0.021815376, 0.018695788, -0.040565513, 0.025174096, 0.008271799, -0.01991319, -0.036326353, -0.026239322, 0.045348156, -0.0050489497, -0.04860905, -0.044826414, -0.041695956, -0.057826508, 0.025195837, 0.011684868, -0.0013641404, -0.012130523, 0.022978429, -0.027630636, 0.0161849, 0.020663194, -0.020576237, -0.00885876, 0.026108887, -0.0033478506, -0.06343525, 0.0489134, -0.00038757076, 0.01038051, 0.036869835, -0.007907666, -0.026217584, -0.013195748, -0.011380518, -0.01991319, 0.0062120017, -0.04002203, 0.043195967, 0.01991319, 0.04093508, -0.07191357, 0.018434918, -0.0007527229, -0.021728419, -0.0035081778, 0.017021863, -0.004388619, -0.010081596, -0.06969616, 0.023891479, 0.004410358, 0.02847847, -0.018097958, -0.008793542, 0.040848125, 0.014771847, 0.019434925, -0.015674027, -0.04800035, 0.00068105117, -0.041391607, 0.016380554, -0.003364155, 0.015771855, 0.0070924433, 0.026261061, -0.0027391505, -0.028608905, 0.0023655065, 0.0060489574, -0.01558707, -0.068348326, 0.029608913, -0.0507395, -0.03517417, 0.02082624, 0.026152365, -0.002137244, 0.01072834, -0.025543666, 0.014282713, -0.053174302, -0.004383184, -0.013913145, 0.002902195, 0.009554418, -0.046000335, -0.043782927, 0.005481018, -0.010516381, -0.004665795, -0.0030761093, 0.0006878447, 0.014391409, -0.005896782, 0.012402264, 0.03754375, 0.004163074, 0.025739318, -0.024108872, 0.031608928, -0.009304415, 0.0036358961, 0.012413134, -0.002343767, -0.02047841, -0.0010577523, -0.005690259, 0.018456656, 0.026848022, -0.0016929471, 0.0318698, 0.0073261405, 0.0004589028, -0.021652332, 0.015956638, 0.023804521, 0.006380481, 0.031695884, -0.011924, -0.04428293, -0.016858818, 0.04291336, -0.016304467, 0.017358823, 0.027261069, 0.029478475, 0.051435158, -0.02478279, -0.0022894188, 0.017641433, 0.021000152, 0.04334814, -0.023261039, 0.049000356, 0.0022785494, 0.02415235, 0.014978371, 0.009326155, -0.030869791, 0.0017703933, -0.0015013696, -0.027369766, -0.02354365, 0.059435215, 0.06887007, -0.023304518, 0.017858826, 0.039304636, -0.04041334, -0.0030489352, 0.03891333, 0.017065343, -0.03910898, -0.022282772, -0.011695738, -0.0015706636, -0.031913277, -0.016706644, -0.04591338, -0.009641374, 0.044217713, 0.00734788, 0.017641433, 0.015304459, -0.021434939, -0.009358764, 0.017097952, 0.020956675, -0.03273937, 0.048522092, 0.0032011103, -0.013097921, 0.02168494, -0.04673947, -0.017641433, 0.050000366, 0.008396801, -0.020326236, 0.011956609, -0.014402279, 0.017543606, -0.06347872, 0.025021922, 0.010076161, -0.05382648, -0.005557106, -0.010929428, -0.055174317, -0.0057391725, -0.004000029, 0.050652545, 0.024065394, -0.021184938, 0.050391674, -0.00885876, 0.03058718, 0.03550026, -0.020891458, 0.0045842724, 0.05752216, 0.0041087256, -0.0013505534, 0.011924, 0.015967509, -0.03402199, -0.027282808, 0.03860898, -0.04621773, 0.00946746, -0.0010400891, 0.003073392, -0.069000505, -0.007027225, -0.009347894, -0.022543643, -0.026956718, -0.0009707951, 0.029761087, 0.04804383, 0.05630476, -0.05260908, -0.011184865, 0.11391388, -0.011673998, -0.043217707, 0.035282865, -0.0020394172], [0.046153463, 0.026512703, -0.019118398, 0.047174968, 0.014370721, 0.0065237037, -0.0065120957, -0.0006123227, -0.033988263, -0.017086996, -0.02915933, 0.009843595, -0.012107158, -0.00844483, -0.023935724, 0.037145644, -0.04926441, 0.024051804, -0.045549847, -0.030923748, -0.003978647, -0.03429007, -0.05831866, -0.009257391, -0.0015975529, 0.016901268, -0.020813169, 0.01951307, -0.04137096, 0.01782991, 0.03716886, 0.0004998701, 0.02033724, -0.008990407, 0.036100924, -0.00821267, 0.014254641, -0.046501704, -0.062033225, 0.055904195, -0.021846281, -0.009663671, -0.022554372, -0.019640759, -0.019489855, -0.0019501463, 0.005804007, -0.03600806, -0.026303759, -0.025096526, 0.0045706555, 0.008659578, 0.02016312, 0.012118766, -0.020998897, 0.022716884, 0.026094815, -0.09054251, 0.040163726, -0.01022666, -0.04703567, 0.020789953, 0.042926434, 0.01034274, -0.059711624, 0.012246454, 0.014068913, 0.009112291, 0.0031922038, 0.019780055, -0.036449164, 0.047592856, -0.026326975, -0.036100924, -0.033918615, -0.060872424, 0.023819644, 0.02033724, -0.0011622524, -0.04225317, 0.0068777483, -0.03289711, 0.02442326, -0.0016367299, 0.025398334, -0.0037958205, 0.039049357, -0.08979959, -0.008456438, -0.0006544018, 0.035009768, -0.0063611916, 0.024632204, -0.0003366324, -0.022182913, -0.020244377, 0.009541787, 0.009884223, -0.022043617, -0.022078441, -0.015891371, -0.086456485, -0.045689143, -0.0032908719, 0.033454295, -0.0053716083, 0.017203076, -0.028416418, -0.0063379756, 0.026535919, 0.022658844, -0.017156644, 0.0068197083, 0.024214316, 0.0104530165, 0.029832596, -0.018433526, -0.03168988, 0.00047737957, 0.017841518, -0.05836509, -0.039049357, 0.05534701, -0.020778345, -0.034916904, 0.029437922, 0.017388804, 0.08408845, -0.0071563404, -0.023401756, -0.037029564, 0.038724333, 0.038886845, 0.025839439, 0.068162255, 0.04506231, 0.025955519, -0.04213709, -0.060222376, 0.00035839743, -0.059061572, -0.004135355, 0.023076732, 0.042392466, -0.03038978, -0.033732887, -0.008723422, -0.0019283813, -0.054696962, -0.02214809, -0.0038364485, -0.027023455, 0.0053164703, 0.0019008123, 0.01630926, -0.00091340556, 0.049635865, 0.04517839, -0.0010040932, 0.032409575, 0.033756103, -0.03250244, -0.011062437, 0.037377805, -0.018329054, -0.09105326, 0.023111556, 0.0015554739, -0.04294965, 0.025793007, 0.012455399, -0.022612412, 0.039304733, -0.032177415, 0.0028280024, 0.02980938, 0.025560847, 0.034104344, 0.03770283, -0.05223606, -0.037075996, 0.039977998, 0.061754633, -0.027627073, -0.010882513, -0.015635995, -0.01490469, -0.018166542, 0.0037755065, -0.013651025, -0.009814575, -0.01858443, 0.0038480565, -0.024748284, 0.021126585, -0.065887086, 0.00815463, -0.031016612, -0.015810115, 0.018271014, -0.007545209, -0.045224823, -0.028323554, -0.037609965, -0.018735334, 0.03208455, -0.00085681654, -0.02162573, 0.0029803575, 0.0072608124, 0.034731176, 0.002517488, 0.025375118, -0.0017615161, 0.00092211156, 0.009048447, -0.0883602, -0.030645156, -0.016854836, -0.051586013, 0.06467985, -0.047360696, 0.016854836, 0.00088583655, 0.033570375, 0.036959916, 0.003961235, -0.019130006, 0.042578194, 0.026141247, -0.0006282837, -0.006158051, 0.00057350844, 0.025375118, -0.10493644, -0.021138193, -0.00012560234, 0.0064946837, 0.036263436, -0.013047407, 0.0068429243, 0.042090658, -0.026187679, -0.037958205, 0.018549606, -0.002579881, 0.004355907, 0.009547591, -0.051586013, -0.012908111, -0.04371578, 0.013743889, 0.06189393, 0.0014945318, 0.0067036278, 0.06686216, 0.024678636, -0.060222376, -0.042229954, 0.012339318, 0.015856547, 0.0068429243, 0.017725436, 0.072155416, -0.0015902979, -0.026837727, 0.028253905, -0.07243401, -0.04856793, -0.04232282, 0.055857763, 0.010859297, -0.024260748, 0.008375182, 0.03774926, -0.031898823, 0.025514415, -0.006111619, 0.0015670819, 0.038840413, -0.0026625881, 0.04271749, -0.019791663, -0.025212606, 0.06867301, 0.030366564, -0.06672286, -0.017934382, -0.04120845, 0.007794781, 0.0017542611, -0.050657373, 0.05715786, 0.050007325, 0.039513677, -0.0026132541, 0.023599092, -0.010656157, -0.038236797, -0.015624386, -0.014985946, -0.013000975, -0.05488269, -0.02220613, -0.038817197, 0.015984235, -0.017330764, 0.09193547, 0.011991078, -0.009826183, 0.08520282, 0.010580705, -0.018921062, -0.033315, 0.02145161, -0.029484354, 0.014080521, -0.026907375, 0.04575879, -0.033732887, -0.04815004, -0.03670454, -0.09472139, -0.019756839, 0.038306445, 0.004350103, -0.0327346, -0.017818302, -0.006105815, -0.00021910126, -0.09439637, 0.043553267, -0.012234846, -0.0032473418, -0.012908111, -0.06328689, 0.0049450137, -0.043112163, 0.0029339255, -0.025955519, 0.01168927, -0.0016338279, -0.00056262594, -0.06714075, -0.035218712, -0.0048115216, 0.03015762, -0.009959675, 0.013047407, -0.056136355, 0.0014401192, 0.030436212, 0.01741202, -0.03440615, -0.0053629023, -0.03289711, -0.068858735, -0.044017587, 0.010191836, 0.005061094, 0.026651999, -0.031759527, -0.01221163, 0.050703805, -0.010731609, -0.083716996, -0.057064995, 0.01131201, -0.014568057, 0.00057568494, -0.053071838, 0.035683036, -0.0014517272, -0.020859601, -0.015566346, -0.01659946, 0.026907375, -0.010563293, -0.019443423, -0.0066397837, 0.0053629023, -0.015392226, -0.0053193723, 0.0062799356, 0.007580033, 0.024980446, -0.039165437, 0.017713828, 0.016750364, 0.014138561, -0.02846285, -0.008665382, -0.011596406, -0.04411045, 0.023413364, 0.03570625, -0.056322083, -0.012641127, 0.030529076, 0.06500488, -0.017922774, -0.030900532, -0.04559628, -0.009669475, 0.043460403, 0.022415074, -0.033732887, -0.004437163, -0.027510993, 0.05530058, -0.06282257, 0.03127199, -0.014893082, 0.036217004, -0.0044487715, 0.015229714, -0.028207473, 0.013894793, -0.004094727, -0.02262402, 0.03886363, -0.057529315, -0.0018210071, 0.04306573, 0.015102026, 0.072108984, -0.036054492, 0.020929249, 0.014370721, -0.05427907, -0.06983381, 0.01625122, 0.03015762, 0.007516189, -0.011967862, -0.071923256, -0.033338215, -0.049217977, 0.01782991, 0.05335043, 0.018421918, -0.027139535, -0.0071621444, 0.01858443, 0.010064148, 0.050750237, -0.057807907, 0.03763318, 0.02904325, -0.0157869, -0.014126953, -0.031411286, -0.06556206, -0.024887582, 0.06147604, -0.02611803, 0.028439634, 0.011909822, -0.009617239, -0.090403214, 0.01852639, -0.028323554, 0.033756103, -0.02623411, 0.022937436, 0.028509282, -0.008891739, 0.04768572, -0.0012137629, 0.007527797, -0.004315279, -0.022670452, -0.028068177, -0.025909087, -0.04457477, -0.027859233, -0.05172531, -0.031550582, 0.031434502, -0.009460531, -0.020975681, -0.042346034, -2.2875949e-05, 0.032061335, 0.013523336, 0.009646259, 0.018804982, 0.027394913, 0.069090895, -0.0037087605, 0.027371697, 0.047592856, 0.0069473963, 0.003984451, -0.010325328, -0.040767346, -0.057482883, -0.06946235, 0.021207841, -0.0053658043, -0.012838463, 0.059990216, 0.004245631, -0.014115345, 0.020882817, -0.007429129, -0.037493885, -0.025630495, 0.024748284, -0.0064192316, -0.011190125, -0.056832835, -0.014985946, 0.02857893, -0.0018834003, -0.014126953, -0.021811457, 0.043205027, 0.0022998378, 0.021695377, -0.04271749, -0.042578194, -0.04506231, -0.02220613, 0.028369986, -0.00079659995, -0.019896135, -0.024400044, -0.0026045481, -0.0163673, 0.008874326, -0.02009347, -0.023819644, -0.012025902, 0.00088003254, -0.0021155605, 0.012072334, 0.043506835, -0.0104472125, 0.02337854, -0.019037142, 0.076195, 0.011288794, 0.02565371, 0.00020060099, -0.008845306, 0.016854836, 0.006024559, -0.012977759, 0.07053029, -0.04926441, 0.046664216, -0.011381658, 0.017284332, 0.025259038, -0.01355816, -0.03781891, -0.04007086, 0.0047273636, 0.0018311641, 0.02576979, -0.006053579, 0.061290313, 0.014382329, -0.0169477, -0.03886363, 0.064958446, -0.007446541, 0.00069103955, 0.008462242, -0.00677908, 0.032247063, 0.026280543, 0.031411286, -0.0038132325, 0.093885615, 0.008369378, -0.052143198, -0.019013926, -0.007870234, 0.010853493, 0.00080530596, 0.015717251, -0.009866811, -0.040256593, 0.03979227, -0.026768079, -0.06435483, -0.04271749, 0.04062805, -0.01648338, 0.012107158, 0.010093168, 0.043924723, 0.026791295, -0.0037958205, 0.03134164, 0.01226967, 0.031527366, 0.021962361, -0.010023519, -0.01209555, 0.0021910125, -0.0056095724, -0.05488269, -0.03821358, 0.009234175, -0.052978974, 0.0019457933, 0.04220674, -0.08074535, -0.0016715539, 0.028648578, -0.03238636, 0.005737261, 0.0011818409, -0.028648578, 0.042856786, -0.009512767, 0.051400285, 0.025328686, -0.0019153223, 0.026675215, -0.047964312, -0.039304733, 0.012803639, -0.005899773, 0.0026321171, -0.026512703, -0.030877316, -0.027093103, -0.047546424, -0.036100924, -0.017737044, 0.01209555, 0.019013926, -0.021846281, 0.06709432, -0.036867052, -0.014150169, 0.02297226, 0.031434502, 0.055486307, 0.046733864, -0.020639049, -0.007771565, 0.048939385, 0.03821358, 0.065887086, 0.018955886, 0.014115345, 0.016471772, 0.008816286, 0.042694274, 0.028671794, -0.009060055, -0.023134772, 0.005864949, -0.035079416, 0.007928274, -0.049217977, -0.043901507, 0.017562924, -0.0031312618, -0.010928945, -0.028834306, -0.03127199, -0.04715175, -0.025584063, 0.03937438, 0.079491675, -0.044505123, -0.017783478, -0.011277186, -0.044992663, -0.026280543, 0.014672529, 0.015113634, -0.02285618, -0.0169477, -0.030946964, 0.008833698, 0.0030471035, -0.00783541, -0.014985946, 5.296156e-05, -0.04178885, -0.010551685, -0.014951122, -0.0045155175, -0.01764418, -0.0068545323, 0.0027873742, 0.047314264, -0.018491566, 0.0023622308, 0.0375171, 0.020824777, 0.03470796, -0.013035799, -0.02214809, -0.022066833, -0.026512703, -0.0049885437, 0.056368515, 0.029530786, 0.0017992421, -0.0022592098, -0.037563533, -0.027441345, 0.049635865, 0.0024405848, 0.05766861, 0.04383186, 0.028509282, 0.019362167, -0.02711632, -0.018154934, -0.06375121, 0.02553763, -0.0015467678, 0.0070344564, -0.026257327, -0.027046671, 0.020081863, -0.066304974, 0.04582844, -0.0050117597, 0.06728005, 0.0022359937, -0.0296933, 0.0071621444, 0.0010889767, 0.0046315975, -0.029600436, -0.0045822635, -0.01355816, 0.007748349, 0.005922989, 0.029739732, -0.01221163, -0.018387094, -0.0398387, -0.011259774, -0.00047375206, -0.016970916, 0.009245783, -0.023935724, -0.023169596, 0.020186337, -0.029786164, -0.006076795, 0.008938171, -0.026326975, 0.042113874, 0.039629757, 0.05669354, -0.0020444614, 0.0053164703, -0.011549974, 0.00056044944, -0.0027699622, -0.007580033, -0.051911037, 0.011491934, -0.03062194, 0.009443119, -0.033454295, 0.030529076, 0.012919719, 0.009396687, 0.04441226, 0.00038923122, -0.017446844, -0.010133796, 0.009565003, -0.0053309803, -0.01933895, -0.023007084, -0.010615529, 0.01986131, -0.021718593, 0.03805107, -0.05855082, 0.028555714, -0.026930591, 0.017272724, -0.0010570547, 0.011503542, -0.008891739, 0.013743889, -0.013186703, 0.026651999, -0.017632572, 0.031039828, 0.0004940661, 0.043158595, -0.04027981, 0.022577588, -0.0105284685, -0.008810482, -0.030412996, 0.00024286141, -0.0032908719, -0.029321842, 0.004161473, 0.009373471, -0.02576979, -0.018607646, 0.010720001, 0.036077708, 0.016576244, 0.0002927396, 0.044621203, -0.0004976936, 0.03138807, 0.0033198919, -0.023099948, -0.011619622, 0.014510017, -0.008990407, -0.007765761, 0.005824321, 0.0045880675, 0.025212606, 0.02074352, 0.011294598, -0.019768447, -0.010853493, -0.039977998, -0.036193788, -0.030900532, -0.008404202, 0.027603857, -0.026744863, 0.013488512, -0.05427907, 0.033640023, 0.017957598, 0.010754825, -0.009605631, 0.0031370658, -0.012362534, 0.004390731, -0.022473114, 0.0030877315, -0.0032734598, -0.009733319, -0.022658844, 0.033152487, 0.042578194, 0.0066281757, -0.0028816895, -0.0010621332, -0.020778345, -0.017133428, -0.07531279, 0.0104762325, -0.00870601, -0.01945503, 0.021985577, 0.047871448, 0.03624022, -0.010731609, -0.014266249, -0.026303759, 0.016297651, -0.04633919, 0.01016862, -0.05901514, -0.020105079, -0.017098604, 0.018654078, 0.053954046, -0.0023694858, -0.022298994, 0.007788977, -0.040001214, 0.032363143, 0.004312377, -0.018909454, 0.02442326, -0.019501463, -0.06361192, -0.020476537, -0.009361863, 0.018085286, -0.031225557, -0.019791663, 0.011741506, 0.012060726, -0.0027989822, 0.014138561, 0.041301314, 0.031782743, 0.0028221984, -0.032943543, -0.016274435, -0.022879396, 0.005037878, 0.015856547, -0.02203201, -0.009872615, -0.017957598, -0.027441345, 0.014405545, 0.009594023, 0.014359113, 0.02700024, -0.019257694, -0.018050462, 0.014579665, 0.054325502, -0.0073594805, 0.041394178, -0.03127199, -0.054139774, 0.0062799356, -0.00090832706, -0.052375358, 0.016924484, 0.005920087, 0.006198679, 0.045665927, -0.015554738, 0.030993396, 0.005673417, 0.032293495, 0.013778713, -0.04062805, 0.026071599, 0.024353612, 0.02730205, -0.008055962, -0.017098604, -0.05859725, -0.00088946405, -0.004263043, -0.026141247, -0.013906401, 0.0338954, 0.08250976, -0.022229346, -0.03624022, -0.0037145645, -0.038817197, -0.009025231, 0.0557649, 0.008549302, -0.024167884, 0.005687927, 0.016785188, -0.008659578, 0.005925891, 0.008816286, -0.0070866924, 0.0030587115, 0.039072573, 0.019907743, 0.007498777, 0.0068835523, -0.038120717, -0.002529096, 0.012989367, 0.047314264, -0.017086996, 0.041301314, -0.007562621, -0.010104776, 0.019954175, -0.008206866, -0.00040700598, 0.0048550516, 0.038724333, 0.016216395, -0.004051197, -0.0034591882, -0.006100011, -0.0013711966, 0.004283357, 0.048242904, -0.08733869, -0.028903954, -0.00031323498, -0.034081127, 0.0046606176, 0.0034562862, 0.04148704, 0.024353612, 0.015438658, 0.033872183, -0.021474825, -0.0022069735, 0.044899795, -0.0068893563, 0.01019764, -0.007736741, 0.010749021, -0.004051197, -0.01151515, -0.00081981596, -0.0046780296, -0.04120845, 0.029089682, -0.0569257, 0.0046344995, -0.0037203685, -0.0055196104, -0.06235825, 0.01197947, -0.006181267, -0.004329789, -0.015624386, 0.004396535, -0.0048666596, 0.05056451, 0.011300402, -0.0047970116, 0.029600436, 0.12313781, 0.004428457, 0.013523336, -0.022252562, 0.014277857], [0.038279593, -0.049870428, -0.031688243, -0.010440455, 0.011771162, 0.013605548, -0.028206017, 0.03579229, -0.009532589, 0.05571559, -0.053874984, 0.037359294, 0.006560262, -0.034250163, -0.0020893347, 0.01670224, -0.0013680167, -0.033503972, 0.030096367, -0.06506785, -0.009986522, -0.060839433, -0.04554252, -0.0091905845, 0.038702436, 0.01973675, -8.428654e-05, 0.017112644, -0.03231007, 0.042209532, 0.038503453, 0.03355372, 0.06486887, -0.041985676, 0.03012124, -0.009153276, 0.017075336, 0.054024223, -0.016689803, -0.038379088, -0.026116682, 0.0061187656, -0.0007858323, -0.01744843, -0.019201979, 0.005167372, -0.005748779, -0.0120509835, -0.010309871, -0.029598907, 0.0020644616, 0.012685246, -0.020209339, 0.010459109, -0.0853145, 0.004278161, 0.031489257, -0.0927764, 0.010757586, -0.005338374, -0.02930043, 0.013506056, 0.04668668, -0.01085086, -0.028628858, -0.037558276, 0.028977081, 0.042383645, 0.029350176, 0.08645865, -0.005540468, 0.0078225685, 0.022248926, 0.005723906, 0.00603171, -0.022671768, 0.081633285, 0.033503972, -0.0230573, -0.015694883, 0.015396406, -0.046811044, 0.036389243, -0.0027935524, 0.027086731, -0.034971483, 0.018555282, -0.13321996, -0.013033468, -0.008904545, -0.004029431, -0.024897903, 0.035170466, 0.032608543, -0.032285195, 0.05203438, 0.013058341, 0.0022214726, -0.054770414, 0.014699961, -0.034722753, 0.010129542, -0.07143535, -0.066410996, 0.030146113, 0.005397448, 0.04365217, 0.016142597, -0.024201458, 0.011522432, 0.0194134, -0.03300651, 0.009041347, 0.02765881, 0.0030018638, 0.032135956, -0.057804924, -0.051835395, -0.05695924, 0.018182186, -0.095462695, -0.037757263, 0.045617137, 0.03798112, -0.015781939, 0.023753745, -0.0416872, 0.037035942, 0.03206134, -0.025295872, -0.015533208, 0.039274517, 0.022236489, 0.0020831164, 0.0508156, 0.038105484, 0.07949421, -0.0040916135, -0.030917177, 0.02212456, -0.041911058, -0.0010726495, -0.036016148, 0.032185704, -0.026464906, 0.012822048, -0.019836241, -0.0071696513, -0.041239485, -0.0011029635, -0.021079894, -0.023604507, 0.008755307, 0.018953249, 0.045169424, -0.016540566, 0.040169943, 0.073574424, -0.014836763, -0.0048378045, -0.011963928, -0.032708034, 0.0012211103, 0.023703998, 0.0076546753, -0.07496732, 0.025843078, -0.009967867, -0.0369862, 0.042806488, 0.0401202, 0.009339823, 0.036314625, -0.02551973, -0.054919653, 0.02441288, 0.06531658, 0.010595911, -0.06377445, -0.103770286, -0.025469983, 0.08193176, 0.004393199, -0.031862352, 0.015558081, 0.045418154, 0.06412268, 0.012560881, 0.069246516, -0.042532884, -0.014874073, -0.0023489469, -0.011329666, -0.057307463, 0.015980922, -0.0025790224, -0.004794277, -0.029225811, -0.017187264, 0.028703477, -0.0011565959, -0.077554114, 0.01916467, -0.034275036, -0.030966923, 0.01695097, 0.043552678, -0.0006295986, 0.02773343, 0.032931894, 0.051188696, 0.010260126, -0.004794277, -0.025843078, -0.0019789606, 0.0028199798, -0.04380141, 0.024300952, -0.010608348, -0.05775518, 0.026987238, -0.030842558, 0.018617464, -0.03051921, 0.019885989, 0.047383122, 0.021726593, 0.041960802, 0.037458785, 0.009439316, -0.0082454095, -0.06845058, -0.0092589855, 0.04827855, -0.06820185, -0.028827842, -0.035245083, 0.019189544, 0.0543227, 0.034498893, 0.020296393, 0.01698828, -0.030096367, 0.017734472, -0.0012327696, 0.070788644, 0.0151849855, -0.00034569626, 0.02691262, 0.0131453965, 0.0050865347, 0.023480142, 0.025544602, 0.052581586, -0.020259084, 0.041189738, -0.0070639406, -0.03206134, 0.027061857, 0.021030148, -0.035916656, 0.017062899, -0.016764423, 0.065714546, 0.011049844, -0.028703477, 0.036364373, -0.057954162, -0.022174306, -0.018804012, 0.03536945, -0.050492253, 0.041562833, 0.0091905845, 0.031116161, 0.0053197197, 0.045517646, 0.0041164868, -0.047258757, 0.03768264, 0.020047663, 0.009084875, 0.032111082, -0.003715409, 0.019537766, 0.0017535486, -0.017746907, -0.06830134, -0.025644096, -0.0073686354, -0.016677367, 0.0040263217, 0.012038547, 0.017361376, 0.027808048, -0.001476059, 0.016403764, 0.00092496583, -0.021191822, 0.030668447, -0.019077614, -0.017535487, -0.06909728, -0.031986717, 0.0022183633, 0.07422113, 0.031713113, 0.071982555, -0.028703477, -0.038528323, 0.036414117, 0.024325823, -0.025619222, -0.03094205, -0.009924339, -0.016465947, -0.0069084843, 0.041537963, 0.08785155, -0.044174504, 0.039448626, -0.03305626, -0.08347389, 0.027036985, 0.010054923, 0.014463668, 0.03758315, 0.019749187, 0.01591874, 0.054670922, -0.0663115, -0.034076054, -0.019276598, 0.0067095, -0.026539523, -0.081384555, 0.0126355, -0.037558276, -0.009551244, -0.019052742, -0.0356928, 0.006877393, -0.010539947, -0.04026944, 0.038030863, -0.027235968, -0.0018794684, 0.015520771, 0.04096588, 0.010272562, 0.0014651769, 0.013593111, 0.050765857, -0.00023901428, 0.005015025, -0.02887759, -0.024860594, -0.01220644, 0.0077106394, 0.0056865965, 0.06964449, -0.06660998, 0.012909103, 0.0676049, 0.040667407, -0.06238156, -0.004340344, -0.013095651, -0.0059073446, 0.024064658, -0.033081133, 0.011186645, -0.06576429, -0.05685975, -0.0011830236, -0.027335461, 0.026539523, -0.020109845, -0.042433392, 0.045467902, -0.0051766997, -0.046910536, 0.014140318, 0.008904545, 0.01613016, 0.027186222, -0.017995639, 0.0017457758, 0.00685252, 0.010110887, -0.018443352, -0.0065664803, 0.012759865, -0.01899056, 0.048626777, 0.042483136, 0.0075614015, 0.008798835, -0.01645351, 0.0059197815, -0.014351739, 0.0076608937, -0.0067405915, -0.023791054, 0.039175022, -0.01948802, 0.0051051895, -0.016142597, 0.019861115, 0.037856754, -0.0027158242, 0.014986001, -0.020756545, -0.008040207, 0.03987147, 0.013841841, -0.015110366, 0.040393803, 0.011112027, 0.03604102, 0.05457143, -0.0014628451, 0.0021173167, 0.0274847, -0.055815082, 0.020358576, -0.01744843, 0.0037993556, 0.01317027, -0.042831358, -0.025146633, 0.022547403, 0.040543042, 0.0050088065, -0.021651974, -0.094268784, -0.040418677, -0.08098659, -0.010707839, 0.032782655, 0.021403244, -0.034722753, -0.0033081132, 0.03723493, -0.04405014, -0.018853758, -0.020619743, -0.023641815, -0.0045268917, -0.025445111, -0.068251595, -0.008935636, -0.073027216, -0.0039392663, 0.0048098224, -0.037259802, -0.020569997, 0.026241047, 0.021913141, -0.048950125, 0.021316187, 0.0071323416, 0.051238444, -0.023728872, -0.013891588, -0.02551973, -0.0055839955, 0.055914573, 0.008121044, 0.028653732, -0.018443352, -0.0156327, -0.03862782, 0.03012124, 0.0021002165, -0.017473305, -0.022385728, 0.008749088, 0.020582434, -0.00878018, -0.043229327, 0.009588554, 0.05268108, 0.06601302, 0.03494661, -0.0343994, 0.014264683, 0.018505534, 0.04151309, -0.0119204, -0.02412684, 0.037881628, 0.012237531, -0.0043310164, -0.014314429, -0.0216271, -0.024972523, -0.0004803604, 0.025345618, 0.005739452, 0.053974476, 0.038553197, 0.025395365, 0.05596432, 0.030146113, -0.017759344, -0.0042159786, -0.012256186, 0.046064854, 0.0033081132, -0.012299714, -0.024462625, -0.040916137, 0.001870141, -0.020507814, -0.0056834877, 0.013891588, 0.045194298, -0.004725876, -0.0016991389, 0.0034915516, -0.016490819, -0.020358576, -0.0017426667, -0.0075800563, 0.016590312, 0.001120841, 0.016714677, -0.03489686, -0.022920499, -0.032732908, -0.03619026, -0.0069022663, -0.008276501, 0.028081652, -0.008183227, 0.016055541, 0.0054409755, -0.02080629, -0.00066807406, 0.006945794, 0.028603986, 0.0010283444, -0.021987759, 0.014513413, 0.014874073, 0.025544602, -0.016179906, -0.028081652, 0.04932322, -0.027310587, 0.036762338, 0.01506062, 0.00924655, 0.0093273865, 0.012007455, -0.04569176, -0.04161258, -0.031141035, -0.024139276, 0.002470203, -0.0015918739, 0.047482617, -0.000988703, -0.014749708, -0.012299714, 0.022161871, -0.022161871, -0.049273476, 0.013580675, 0.017000716, 0.014389048, 0.007797695, -0.008749088, -0.021763902, 0.08640891, 0.0068152105, -0.05317854, -0.005714579, 0.0014931591, -0.011609487, 0.00806508, 0.009302514, -0.045343537, 0.020159591, 0.028156271, -0.00020889459, -0.019525329, -0.069743976, -0.0057767616, -0.0069582304, 0.017075336, 0.0117773805, -0.010794896, -0.0154585885, -0.01899056, 0.029524287, 0.037035942, 0.027534446, 0.03768264, -0.010403145, -0.003376514, 0.009196803, 0.010054923, -0.021341061, -0.021614663, 0.024524808, -0.042955723, 0.038005993, 0.035866912, -0.07168408, -0.009551244, 0.051337935, -0.028579112, 0.03444915, -0.023741309, 0.03464813, 0.07004245, -0.012679027, 0.03076794, 0.062083084, 0.02330603, 0.06282928, -0.009115966, 0.015309351, 0.011901746, -0.031041542, 0.017249446, 0.010987662, -0.0091905845, -0.01710021, -0.016441073, -0.028156271, -0.028081652, -0.01826924, 0.02376618, 0.019848678, 0.03012124, -0.044671964, 0.023467705, -0.007362417, 0.019649694, 0.014451231, 0.032384686, -0.038403958, -0.055914573, 0.02576846, -0.01370504, 0.033752702, -0.041289233, -0.00011630085, -0.0010532174, -0.00036901474, 0.057307463, -0.015719756, -0.04215979, 0.024524808, 0.018281678, -0.06014299, -0.011329666, -0.009147057, -0.025494857, 0.0060907835, 0.041811567, -0.008686906, 0.0044367267, -0.012411643, -0.041065373, -0.008997819, 0.0029070354, 0.08322516, -0.032185704, -0.0764597, -0.00403254, -0.019550202, -0.017423559, -0.008357339, 0.04758211, -0.01780909, -0.057904415, -0.051138952, -0.040916137, 0.012274841, 0.005742561, -0.04161258, -0.012654155, -0.0067405915, 0.015732192, -0.019201979, -0.043826282, -0.006728155, -0.053128794, -0.009352259, 0.045865867, 0.040567912, -0.036240008, -0.011174209, -0.034921736, -0.0040916135, 0.021278879, -0.0016898116, 0.00061599613, -0.020756545, -0.022248926, 0.028728351, 0.0018872413, -0.011124463, -0.0018903504, -0.036463864, -0.068002865, 0.017858837, 0.008444394, -0.020545123, 0.05521813, 0.023293594, 0.003964139, -0.0010664312, 0.012896666, -0.10367079, 0.03862782, 0.014202501, -0.0056492873, -0.0146377785, -0.06103842, 0.01948802, -0.029474542, 0.02887759, 0.015122803, 0.03380245, -0.008077517, 0.044323742, -0.034275036, -0.010732713, -0.00082081003, 0.013307071, -0.0041879965, -0.006970667, 0.0061685117, 0.0081397, 0.010726495, 0.009016474, -0.021676846, 0.022099689, -0.039050657, 0.0064732064, 0.008948073, 0.036513608, -0.0008480149, 0.017062899, -0.018070256, -0.017062899, 0.0019369873, 0.018953249, 0.006516734, 0.023828363, 0.022883188, -0.0035537344, -0.0056617237, 0.01603067, -0.03415067, -0.00011474629, 0.033926815, -0.020619743, -0.028380128, 0.04176182, -0.013232453, 0.0014986001, -0.031936973, 0.003982794, 0.026241047, 0.029673526, 0.076260716, -0.008083735, -0.012797174, 0.010539947, -0.02412684, 0.008842362, -0.016553001, -0.039697357, -0.020719234, -0.010720276, 0.014252246, 0.010396927, 0.0072256154, 0.0069147027, 0.047631856, 0.005810962, -0.0029676636, 0.00063970324, 0.00015807977, 0.0064918613, 0.060341973, 0.026241047, 0.024276078, 0.057257716, -0.02469892, 0.027385207, -0.007953152, -0.017585233, 0.022957807, 0.02716135, -0.05646178, -0.0068836114, 0.04405014, -0.01777178, -0.023430396, -0.009762664, -0.03509585, -0.042060297, 0.04300547, 0.0012996158, 0.0059197815, -0.02773343, -0.010247689, -0.009115966, 0.0019851788, 0.05571559, -0.006177839, -0.01670224, -0.026141556, -0.020918218, -0.042731866, 0.002002279, -0.02433826, 0.020545123, 0.03151413, 0.0083013745, -0.011509995, -0.027310587, 0.0051518264, -0.010340963, -0.03340448, -0.03420042, 0.032782655, 0.04914911, 0.030817686, 0.005941545, 0.042881105, 0.04375166, 0.015073056, 0.014724834, 0.01616747, -0.002762461, 0.013767223, -0.068002865, 0.008680688, -0.036737468, -0.016590312, 0.03208621, 0.01767229, 0.028355256, 0.01673955, 0.0072069606, -0.018120004, 0.007356199, -0.018430917, -0.0254078, 0.014998438, -0.009936776, 0.025693841, -0.011802253, 0.025942571, 0.024823286, -0.044124756, 0.006821429, -0.029151192, -0.0039019568, -0.052581586, -0.016018232, -0.04250801, -0.028678605, 0.003186857, 0.008183227, 0.036637973, 0.036712594, -0.0369862, -0.011360757, -0.0048378045, -0.0034697878, -0.009439316, 0.031116161, 0.007362417, -0.008792616, -0.00810239, 0.003929939, -0.041637454, 0.005717688, 0.0030640466, 0.001759767, -0.006053474, -0.028405001, -0.012772301, 0.019400964, -0.026489777, -0.015483461, 0.009656955, -0.020097408, -0.015657572, 0.004753858, 0.008842362, 0.0063674957, 0.01891594, 0.0098745935, 0.0050958623, 0.034772497, 0.0006113325, -0.018306552, -0.00038125692, 0.009103529, -0.021838522, -0.026265921, -0.004293707, 0.058799844, -0.03372783, 0.0074743456, -0.008450612, -0.03536945, -0.027758302, -0.0027391426, -0.03693645, 0.01456316, 0.027534446, 0.026987238, 0.0407669, -0.016503256, 0.0077355127, 0.046985157, 0.043179583, 0.006560262, -0.032285195, 0.003104465, 0.007001758, 0.04778109, 0.020072537, 0.012237531, -0.026713636, -0.0010804223, 0.0381801, -0.03544407, -0.00072287244, 0.020333704, 0.06541607, -0.043552678, 0.0081645725, 0.037906498, -0.023044864, -0.0055560134, 0.04539328, 0.06516734, 0.0068400833, -0.034822244, 0.012809611, -0.015607827, 0.015421279, 0.0147745805, 0.010005177, 0.014874073, 0.026937492, -0.0076671117, 0.0075116553, 0.02330603, -0.03519534, -0.05193489, -0.00043722126, 0.025382929, -0.025146633, 0.037135433, -0.01752305, -0.0008705561, 0.038254723, -0.038030863, -0.011435376, -0.013021031, 0.009986522, -0.0073188893, 0.022000195, 0.0035319703, -0.014103008, -0.004738312, 0.04753236, -0.017411122, -0.018928377, 0.0059757456, 0.023405522, -0.0014263128, -0.027459826, -0.0016245198, 0.043851152, -0.012100729, 0.0032366032, 0.01570732, -0.02030883, 0.009147057, -0.017821526, -0.0071820877, 0.011988801, 0.022248926, -0.03619026, -0.004660584, -0.038677562, 0.029972002, 0.011199082, -0.033280116, 0.024674047, -0.035419196, 0.047010027, -0.020818727, -0.03355372, -0.0029878728, 0.0038335558, 0.0018685864, 0.0058327257, 0.004411854, 0.017908582, 0.001095968, 0.03912528, 0.042458262, -0.009178149, 0.0053228284, 0.10476521, 0.030046621, -0.03783188, 0.008705561, -0.008469267], [-0.002492442, 0.022371748, -0.0320547, 0.041577034, -0.015327515, 0.011547264, -0.0026028669, 0.054151103, 0.0072335317, 0.015419297, -0.05121409, 0.013824592, 0.016589511, 0.015270152, -0.0096829515, 0.041691758, -0.023174835, 0.025813555, 0.015706114, -0.0312975, -0.0069811326, -0.02817693, -0.06989163, 0.022819182, 0.023656689, -0.017243454, -0.0011429668, 0.0011035295, 0.018975832, 0.024528613, 0.03790577, 0.03290368, 0.054380555, -0.024918685, 0.043160263, -0.04123285, 0.010612239, 0.076912925, -0.030494412, -0.054151103, -0.037882827, 0.00013426633, 0.0012039156, -0.028589945, -0.01249376, 0.015189843, 0.0062526166, 0.014421172, -0.0025125192, 0.005245888, 0.007405622, -0.0052917786, -0.013365685, -0.017036946, -0.019170867, 0.020432863, 0.017427018, -0.06828546, 0.040934563, -0.014535899, -0.031871136, 0.017449964, 0.03542767, -0.011369437, -0.05401343, -0.019664193, 0.018390724, 0.011415328, 0.06539434, 0.05823538, 0.03572596, 0.013457467, -0.016807493, -0.032123536, 0.009413343, -0.010078759, 0.08613697, 0.0201231, -0.018849632, -0.049286682, 0.049516134, -0.020054264, -0.03120572, 0.028635837, 0.02822282, -0.028062202, 0.027488569, -0.11729679, -0.0057678954, 0.024115596, 0.024184434, 0.018321889, 0.012333143, -0.0076293396, -0.062090203, -0.008128402, 0.016830439, 0.02647897, -0.029438926, 0.04104929, -0.015419297, -0.041370522, -0.037699264, -0.08095131, -0.03951195, 0.003685602, 0.0365061, -0.01018775, -0.018952886, -0.044491097, 0.042907864, -0.013182122, -0.044950005, 0.046212, -0.009614116, 0.05534426, -0.037538644, -0.068147786, -0.02574472, 0.005016434, -0.095269226, -0.05222369, 0.06677106, 0.041921213, -0.005429451, 0.027052606, -0.0136869205, 0.027052606, -0.0071073323, -0.006751679, -0.07200261, 0.016658347, -0.012310198, 0.07310399, 0.078427315, -0.001842801, 0.048185304, 0.03492287, -0.034762256, 0.01833336, -0.07140603, 0.01095642, 0.026226573, 0.027557405, -0.024505667, -0.041370522, 0.017472908, -0.05933676, -0.027327951, 0.018471032, -0.043412663, -0.020088682, -0.015373406, 0.038135227, 0.028612891, -0.033224914, 0.019618303, 0.03437218, -0.015247206, 0.052636705, -0.0010769989, -0.040613327, 0.033270802, 0.032352988, -0.03563418, -0.043160263, 0.02404676, 0.0048787617, -0.014650626, 0.010646657, 0.021213006, -0.03040263, 0.02911769, -0.04634967, -0.039833184, 0.055481933, 0.05171889, 0.017828561, -0.04203594, -0.010795802, -0.021958731, 0.034762256, 0.02191284, -0.051305875, 0.01607324, 0.019147921, 0.006091999, 0.012367561, 0.025974173, -0.07856499, -0.0110195195, 0.01138091, -0.005280306, -0.062686786, -0.016589511, -0.058373053, -0.010170541, -0.019847756, 0.02349607, -0.005931381, -0.021029443, -0.02494163, 0.016084712, -0.0103885215, -0.053279176, 0.033477314, 0.008053829, 0.0086332, 0.010583557, 0.029094744, 0.02916358, 0.02792453, 0.010285268, 0.03294957, 0.009143734, -0.0037831198, -0.046280835, 0.044009242, 0.036001306, -0.056399748, 0.05649153, 0.00467799, 0.043320883, -0.031320445, -0.0061493623, 0.039672565, 0.022027567, 0.040062636, 0.0021238818, 0.007170432, -0.0045259767, -0.055665497, 0.00773833, 0.025675884, -0.063558705, -0.009883723, -0.040475655, -0.010296741, 0.06186075, -0.0023992264, -0.0054868143, 0.045982547, -0.013904901, 0.02822282, 0.013010032, 0.031939972, 0.0055556507, 0.032926623, -0.0066312156, -0.016784547, 0.00946497, 0.037446864, 0.045454804, -0.01078433, -0.0056875865, 0.05447234, 0.008621727, 0.003338553, -0.020111628, 0.008552891, -0.060162794, 0.05226958, -0.039695513, 0.059015524, -0.051948346, 0.0036913385, 0.05658331, -0.0077440664, -0.06424707, -0.05644564, 0.03315608, -0.0069811326, 0.006212462, 0.010704021, 0.0015731928, -0.009361716, 0.042747248, 0.042793136, -0.026570752, 0.06305391, 0.011621836, 0.011661991, 0.025010467, -0.035909522, 0.03925955, 0.02574472, -0.011885708, -0.03405095, -0.01995101, 0.037951663, 0.01572906, -0.003335685, 0.021671914, 0.032582443, 0.042747248, 0.0033930484, 0.0022142294, 0.015224261, -0.026570752, -0.01500628, 0.047221597, 0.016532147, -0.01743849, -0.022188185, 0.0007034194, 0.04293081, 0.013457467, 0.13427638, -0.0071876408, -0.01863165, 0.04065922, -0.0083406465, -0.03189408, -0.060851153, 0.0005632374, -0.017415546, 0.025285812, 0.060942937, 0.03717152, -0.05461001, 0.018574286, -0.022245549, -0.08641231, -0.014616208, 0.045798983, 0.02574472, 0.035657123, -0.0123790335, -0.035817742, 0.029943723, -0.05148944, 0.007669494, -0.025216974, 0.0028151115, -0.043550335, -0.06828546, -0.035817742, -0.047680505, 0.036230758, -0.03324786, 0.0068549328, -0.009470707, -0.036047194, 0.019859228, -0.014742408, -0.008059566, 0.024620395, 0.010044341, 0.025010467, 0.022291439, 0.0011838384, 0.073930025, 0.014730935, 0.044284586, -0.009969768, 0.007090123, -0.025125194, -0.034555744, 0.023151891, 0.006722997, 0.041967105, -0.03040263, 0.026960824, 0.054288775, 0.040223256, -0.018035071, -0.03065503, 0.008392273, -0.003068945, 0.030264959, -0.037102684, 0.021075334, -0.05401343, -0.027006716, -0.0058338633, -0.018493978, 0.012424924, -0.016383003, 0.001245504, 0.01977892, 0.023002746, -0.009057689, 0.017530272, 0.020031318, 0.05282027, -0.022704456, 0.00064533885, -0.013973738, 0.034005057, -0.018562814, 0.0010612239, 0.0486901, 0.00033772734, -0.019767446, 0.07191083, 0.009172416, -0.033087242, 0.00952807, 0.003685602, 0.025171084, -0.024092652, -0.014570317, 0.0015631542, -0.012711742, -0.0083234375, -0.015866732, 0.0032410352, -0.010801539, 0.008742191, 0.02767213, 0.030517358, 0.053554524, 0.01059503, 0.034509856, 0.03960373, 0.036207814, -0.03368382, 0.029209472, -0.0031004949, 0.015109534, 0.0015717587, -0.0432291, -0.046625018, 0.056812767, -0.020490225, 0.016119132, -0.066816956, -0.004824267, 0.00660827, -0.031526957, -0.028314602, 0.0123790335, 0.023564907, -0.025767663, -0.007703912, -0.03597836, -0.014294973, -0.037148573, 0.016818965, 0.067505315, -0.0073654675, -0.0015789291, 0.0437339, -0.007784221, -0.062595, 0.013193595, -0.06989163, 0.0048041893, 0.01543077, -0.040131472, -0.033362586, -0.029393034, -0.061126497, -0.04561542, 0.030219069, -0.02817693, 0.004537449, 0.026593698, 0.04084278, -0.08677944, 0.025584102, 0.0038605605, 0.07457249, -0.02668548, 0.026960824, -0.012665851, 3.110175e-05, 0.020386972, 0.016635401, 0.04327499, 0.02136215, 0.012011908, 0.00037142838, 0.032513607, -0.016222386, -0.0347852, -0.016715711, 0.052682597, 0.05956621, 0.007893211, -0.021247424, 0.010790066, 0.03790577, 0.0355424, -0.02156866, -0.030127287, 0.019469157, 0.0199969, 0.054839462, 0.075949214, -0.00035404006, 0.010922002, 0.022670038, 0.0019116371, -0.0033901802, -0.007686703, -0.025377592, -0.026708424, -0.014214665, -0.026456026, 0.008948699, 0.05387576, 0.028337548, 0.037974607, 0.0044055134, -0.028199874, -0.02946187, -0.05103053, 0.0103885215, -0.023220727, 0.007853057, -0.0063788164, -0.008593045, -0.016291222, -0.022142293, 0.0017166014, -0.0024867058, 0.007468722, 0.023461653, -0.009642797, 0.019297067, -0.038984206, -0.059199087, 0.017794143, -0.002009155, 0.0006048259, 0.020214882, -0.01577495, 0.0136983935, -0.0380205, -0.02618068, -0.015752004, 0.011174401, 0.015017753, 0.009637061, -0.0090290075, 0.0320547, 0.023197781, -0.026226573, -0.0075777126, -0.029530708, 0.040131472, -0.01918234, -0.0019833415, -0.0312975, 0.027901584, 0.022543838, 0.032513607, 0.007422831, 0.012183998, -0.059703883, 0.029002963, 0.0110482015, 0.015212788, 0.0017739648, 0.0061608353, -0.0491949, -0.057501126, -0.015281624, -0.012367561, -0.006275562, -0.004150246, 0.05828127, 0.039947912, -0.01131781, -0.040108528, 0.008093984, 0.00401831, -0.007749803, 0.02702966, 0.018872578, 0.0047210124, 0.019021722, 0.0039265286, 0.0071991137, 0.09008357, 0.0023060108, -0.04651029, -0.024735123, -0.027695077, -0.008300492, -0.019079085, 0.008294756, -0.029760161, 0.01825305, -0.0048500802, -0.0033586302, -0.033569094, -0.040819835, 0.027305005, -0.012046326, 0.005248756, -0.021304788, -0.0040555964, -0.026020063, 0.035909522, 0.023679635, 0.02370258, 0.0038404833, 0.044674657, -0.034762256, -0.005770764, -0.01334274, 0.002569883, -0.046556182, -0.019606829, 0.050938748, -0.0123790335, 0.026364245, 0.04327499, -0.09719664, 0.009390398, 0.05162711, 0.004918916, -0.004746826, -0.025584102, -0.010302477, 0.06594503, 0.044238698, 0.019079085, 0.04745105, 0.047038034, 0.05759291, -0.014294973, 0.05947443, -0.0077555394, -0.01875785, -0.0012541085, 0.0072507407, -0.0019489235, -0.022796238, -0.017277872, -0.0088225, 0.009573961, 0.015270152, 0.021901367, -0.00411296, 0.01863165, -0.029025909, 0.037194464, 0.016015876, 0.026111845, -0.0011236067, 0.066679284, -0.024758067, -0.017885925, 0.012229889, 0.008191502, -0.0059199086, -0.04224245, 0.0055269687, 0.016922219, 0.01172509, 0.0715437, 0.01731229, 0.03189408, -0.0064992793, 0.0061493623, -0.032421824, -0.033270802, 0.010778593, -0.0740218, -0.0090404805, 0.015442242, -0.019044667, -0.029324198, -0.010457358, -0.017231982, 0.018344833, 0.014627681, 0.028567001, -0.050892856, -0.00929288, -0.052682597, -0.01969861, -0.031090993, 0.019342957, 0.04988326, -0.041668814, -0.018780796, -0.038846534, -0.063879944, -0.019675665, -0.001858576, -0.0031922762, 0.0078071663, -0.034762256, 0.004792717, -0.046280835, -0.017025474, 0.026203627, -0.04800174, 0.0035708752, 0.09150618, 0.019905118, 0.024390941, -0.01607324, -0.06975396, 0.008076775, 0.0026616643, -0.009298616, -0.04873599, -0.0039093196, -0.005549914, -0.005475342, 0.026088899, 0.008507, -0.006441916, -0.03031085, -0.045776036, 0.02643308, 0.014008156, 0.002387754, 0.030815648, -0.0077784844, -0.03253655, -0.026547806, -0.016807493, -0.05456412, 0.013859011, -0.010285268, -0.022107875, -0.040337984, -0.027832748, 0.016864857, -0.0434815, 0.030379687, -0.00023285978, 0.02996667, -0.0076580215, 0.0012182564, -0.06589914, 0.030494412, -0.0077268574, -0.017151672, -0.027075551, -0.019893646, -0.004267841, 0.02618068, 0.01091053, -0.01309034, -0.039672565, -0.028062202, -0.027511513, 0.0047382214, -0.0069467146, 0.020834407, 0.008260338, -0.017874453, -0.03568007, -0.020662317, -0.017002529, 0.029025909, -0.0030603404, 0.035358835, 0.037630428, 0.028750563, 0.023312509, 0.018562814, 0.0061436263, -0.045477748, 0.007812902, -0.034693416, -0.027350895, 0.024643341, 0.027327951, 0.015717587, -0.042563684, 0.012608487, 0.011570209, 0.037240356, 0.056124404, -0.017702362, 0.043297935, 0.02847522, -0.01930854, 0.025974173, -0.0109908385, -0.057960037, -0.019928064, 0.014730935, 0.01833336, 0.005819523, -0.012780578, 0.04472055, 0.023725525, -0.014535899, -0.023587853, 0.03354615, 0.005931381, 0.028934127, 0.013308322, 0.0041703233, 0.022715928, 0.068193674, 0.0053405375, 0.02762624, 0.01577495, 0.028108094, -0.002009155, -0.008730718, -0.038479406, 0.032513607, 0.039672565, 0.006803306, 0.0054351874, -0.05323329, -0.015935568, -0.036483157, 0.023220727, 0.00053025346, 0.012000435, -0.02208493, 0.02144246, -0.034991708, 0.011839817, 0.03781399, 0.0008661882, 0.01709431, 0.0016319903, -0.0055757277, -0.04199005, 0.058694288, -0.009413343, 0.044743497, 0.0385253, 0.022199657, -0.016899275, -0.02455156, -0.034349237, 0.0055585187, -0.015992932, -0.018539868, 0.0005094592, 0.054655902, 0.031045102, 0.007812902, 0.044399314, 0.02054759, 0.02728206, -0.01649773, -0.005690455, -0.0045202402, 0.04164587, -0.045408912, 0.03060914, -0.008593045, -0.0058482043, 0.008736454, 0.016899275, 0.051397655, 0.0046923305, 0.0027261982, -0.015270152, -0.0043223365, -0.0075777126, -0.04726749, -0.0071761683, -0.0036769975, 0.023140417, -0.010159068, 0.036643777, 0.034257457, -0.016291222, -0.008856918, -0.007520349, -0.007336786, -0.061493624, -0.0002739105, -0.001510093, -0.023358399, 0.009614116, -0.00033145322, 0.047818176, -0.025997117, -0.028291656, -0.0010741306, -0.034968764, -0.011943071, -0.028934127, -0.009579697, 0.019320011, -0.06415529, -0.0010834523, 0.015338988, -0.07631634, 0.009614116, 0.015350461, -0.022027567, 0.026960824, -0.0088225, -0.009115053, 0.016945165, -0.044491097, 0.032834843, 0.04726749, -0.025010467, 0.009746051, -0.014535899, 0.0325595, 0.012413451, -0.02400087, 0.019377375, -0.03253655, 0.0058568087, -0.022589728, -0.014971862, 0.032926623, -0.020100154, -0.023564907, -0.01901025, 0.02647897, 0.034739308, -0.05823538, 0.0136639755, -0.0027620504, 0.02345018, -0.009728842, 0.017128728, -0.028750563, 0.025629992, -0.023977924, -0.012321671, 0.0066484245, -0.041278742, 0.026914934, 0.025308756, -0.0034733573, 0.009172416, -0.0069467146, 0.0028151115, 0.030196123, 0.005931381, 0.04293081, -0.003436071, -0.023278091, 0.0110080475, 0.035152327, -0.010147595, 0.0043166, 0.03985613, 0.08838561, -0.013572194, -0.028842345, 0.04462877, -0.03444102, -0.013904901, 0.048965447, -0.0037945926, 0.0037114155, -0.0066025336, 0.02553821, -0.01602735, 0.02693788, -0.0024981785, 0.008294756, -0.020386972, 0.04263252, 0.0063788164, -0.004460009, 0.017174618, -0.00022479304, 0.038295843, 0.022578256, 0.0051340293, 0.013847538, 0.032261208, -0.025056357, -0.001477109, 0.0076752305, -0.04114107, 0.0042448957, 0.0034504118, -0.015866732, -0.00060303335, 0.034418073, 0.0032955306, -0.016417421, -0.008851181, -0.045730148, 0.01393932, -0.03691912, 0.01321654, 0.02161455, -0.025125194, -0.003304135, -0.021247424, 0.029691324, 0.029530708, -0.0042907866, 0.038984206, -0.039466057, 0.0110195195, 0.035909522, -0.019618303, -0.015224261, 0.01364103, -0.012310198, -0.008902809, -0.025859445, -0.012688796, -0.03547356, -0.035221163, 0.010021396, -0.04288492, 0.02911769, 0.0014183114, 0.005412242, -0.030379687, -0.0014699386, -0.021178588, 0.0042076097, -0.014099937, -0.012482288, -0.031182775, 0.041806486, 0.02852111, 0.028750563, -0.0020062868, 0.123537935, -0.023484599, 0.003384444, -0.008025147, 0.020731153], [0.016054904, 0.019261321, -0.014503044, 0.05029852, -0.008997365, 0.030945914, -0.02171463, 0.0142634185, -0.026746763, 0.0549541, -0.0046384637, -0.009356802, -0.04128404, 0.0020339636, 0.02683805, 0.04441058, -0.044821367, 0.033296525, -0.033661667, -0.017652407, 0.012243719, -0.0134988995, -0.0048352988, -0.0015932239, 0.0034403366, -0.018394105, -0.015278975, -0.012335004, 0.06285033, 0.00094423833, 0.02096152, 0.05166781, 0.058788106, 0.028321445, 0.059974823, -0.0013650092, 0.022638898, -0.0015390229, 0.011821521, -0.0072458168, -0.096945606, -0.00496367, 0.03509942, -0.056003887, -0.046966586, -0.022319397, 0.0004143523, 0.0041021593, 0.019900322, -0.021771682, -0.020265466, -0.020299697, -0.027522692, 0.030466663, -0.0014206365, 0.0026558486, 0.024670009, 0.004059369, 0.035327636, -0.048381515, -0.046647083, -0.024282044, 0.036445886, -0.03523635, -0.0273173, 0.013122345, -0.09685432, 0.030398197, 0.06084204, 0.051028807, 0.057692677, -0.031128485, -0.0043959855, 0.011513432, -0.002624469, -0.031082842, 0.107534766, -0.010657626, 0.000992734, -0.01521051, 0.0023021158, -0.008569462, 0.0076280762, 0.021532057, -0.0035858236, -0.008529524, 0.010030036, -0.119675785, -0.047879443, 0.040645037, 0.006937727, -0.03350192, 0.04096454, -0.02082459, -0.003266323, 0.021965666, 0.007126004, 0.014172133, -0.020219823, 0.010343831, -0.021851558, -0.073667705, -0.07453492, -0.023392007, 0.036559995, 0.01707046, 0.00368852, -0.023802793, -0.023175202, 0.022844292, 0.02560569, 0.024806937, -0.024145115, 0.0387965, -0.010081384, 0.0425164, -0.024624366, -0.04488983, -0.022148237, -0.016853655, -0.09721946, -0.035281993, 0.06627355, 0.042653326, 0.021201145, 0.03229238, 0.0017586795, 0.03427785, 0.020436626, -0.0387965, -0.025537224, 0.0047097807, 0.00853523, 0.017218798, 0.0060305735, 0.0034260731, 0.026587013, -0.008221434, -0.02017418, 0.0018742132, -0.020870235, -0.007941872, 0.0057139257, -0.008951722, -0.025651332, -0.004564294, -0.015495778, -0.02498951, -0.048153304, -0.024008187, -0.045871153, -0.05773832, -0.047423016, -0.00016278126, 0.044342116, -0.02235363, 0.04018861, 0.026655477, -0.007565317, 0.04997902, 0.016374405, -0.050207235, -9.342539e-05, 0.011901396, 0.05198731, -0.062120043, 0.02063061, 0.0045699994, -0.053995598, 0.0034003991, 0.037039246, 0.0065269405, 0.021349486, -0.0074569155, -0.039321393, 0.004558589, 0.047788158, 0.031288236, -0.07060963, -0.034118097, -0.02514926, 0.04256204, 0.064402185, -0.030489484, -0.0043731644, 0.011051297, -0.022570433, -0.0027499872, 0.0273173, -0.019010285, -0.032520596, -0.006475592, 0.0116788875, -0.016705316, -0.0017073313, 0.013099524, -0.027066264, -0.027157549, -0.017823568, 0.055319242, 0.0119470395, -0.059974823, 0.013464667, -0.046441693, -0.021920022, 0.037952106, -0.001384978, 0.018896177, -0.015541421, 0.02080177, -0.0014156443, -0.0058052116, -0.00048673915, -0.004609937, -0.034483243, 0.022467738, -0.07809507, 0.026952157, -0.06024868, -0.042014327, 0.030489484, -0.057829604, -0.02049368, -0.0085124085, -0.036149208, 0.01710469, 0.039526787, 0.02592519, -0.01289413, 0.023962544, -0.041991506, -0.058879394, -0.030261269, 0.008472471, -0.09731075, -0.013772757, -0.050252877, -0.002245062, 0.00075881387, 0.010634805, -0.0106291, 0.100323185, -0.020197, -0.03400399, -0.027659621, 0.03058077, 0.06412833, 0.007314281, -0.024852581, -0.004621348, 0.003500243, 0.019615054, 0.0017429898, 0.050526734, -0.0024304865, 0.06618226, -0.0014106521, 0.008289899, 0.032543417, -0.014480223, -0.003993757, 0.022399273, -0.041557897, 0.08275065, 0.0077592996, -0.039024714, 0.024555901, -0.06746027, -0.05276324, 0.023026863, 0.030694878, -0.032041345, -0.006116154, -0.008101622, -0.03459735, -0.024190757, 0.042790256, 0.04965952, -0.036514353, 0.0019983049, 0.014206365, 0.03792928, 0.010845903, 0.013555953, 0.025948012, 0.010532108, 0.016853655, -0.006378601, -0.011473494, 0.008426827, -0.00042077084, -0.012871309, 0.01124528, -0.030535126, -0.001985468, -0.027271656, 0.043908507, 0.023643043, -0.023665864, 0.032771632, 0.0010447954, -0.0010982832, -0.04797073, -0.05436074, 0.01102277, 0.014058026, -0.022410683, 0.086539015, -0.014388937, -0.0024033862, 0.013784168, 0.0010440822, 0.00039081767, -0.012802845, -0.010172671, -0.0400745, -0.011810111, 0.046167836, 0.038728036, -0.02109845, -0.030215627, -0.012163844, -0.06421962, 0.02268454, 0.016089136, 0.027408585, -0.0119470395, -0.024236402, -0.03756414, 0.0080788005, -0.07604114, 0.017195977, -0.031174129, -0.015221921, -0.056140818, -0.05869682, -0.06709512, -0.063534975, -0.0008436812, -0.039526787, 0.0023306427, 0.00916282, -0.038157497, -0.032064166, 0.008746329, -0.032520596, -0.033342168, 0.024898224, 0.0050720717, -0.022307986, 0.0012815682, 0.051941667, 0.0059963414, -0.0038026276, 0.023083918, -0.015324617, -0.013624418, -0.03678821, -0.0025317569, -0.0034146626, 0.024236402, -0.063945755, 0.032383665, 0.05413253, -0.010115617, -0.0232779, -0.039549608, 0.016979173, -0.034574527, 0.015781047, -0.050115947, 0.014331883, -0.05294581, -0.048381515, 0.004216267, -0.017344316, 0.033798598, 0.0016089136, -0.00049886305, 0.017937675, 0.014948063, -0.03754132, -0.0717507, -0.014651384, -0.0019112981, 0.026107762, -0.01335056, 0.030375376, 0.007502558, -0.023528935, -0.0014299077, 0.009351097, 0.013019648, 0.017777925, -0.011062708, -0.008187203, 0.0017515478, 0.03290856, -0.014286241, 0.00721729, -0.0053716036, 0.032315202, -0.017504068, 0.030215627, 0.014172133, -0.052398097, 0.019443892, 0.027910657, -0.048837945, 0.07197892, 0.0006543343, 0.029371232, 0.0034260731, 0.030169984, 0.00030024495, 0.01800614, 0.014776902, 0.029074553, -0.060933325, 0.015290385, 0.002978202, -0.06613662, -0.03802057, 0.034255028, -0.0049950494, 0.06878391, -0.06065947, 0.05979225, -0.0063101365, -0.03226956, -0.013590185, -0.015142045, -0.028823517, 0.0065611727, -0.031744666, -0.04580269, -0.06065947, -0.024236402, 0.0027927775, 0.055227958, 0.009345392, 0.035761245, -0.015107813, 0.0025303306, -0.046647083, -0.025103617, -0.07699964, 0.0025545782, 0.029462518, -0.008084506, -0.04267615, -0.0033661667, -0.059564035, -0.047742516, 0.039389856, -0.015324617, 0.025057973, -0.05153088, 0.034506064, -0.089003734, -0.027111907, -0.007884818, 0.054269455, 0.009864581, 0.037176173, -0.010292483, -0.022250934, 0.016260298, 0.028549658, 0.024099473, -0.036537174, -0.01584951, -0.038134675, 0.018428337, -0.015267563, -0.021509236, -0.030626412, 0.05947275, 0.03619485, 0.006738039, -0.03418656, -0.024966689, -0.0043617534, 0.03416374, 0.012198076, -0.006007752, 0.031288236, 0.03617203, 0.03521353, 0.045095224, -0.002303542, 0.048153304, 0.004481566, -0.017344316, -0.021840148, 0.008757739, 0.0028298623, -0.058879394, -0.04208279, 0.0031864478, 0.007782121, 0.035030957, 0.051759094, -0.00090216123, 0.020972932, -0.009847464, -0.039800644, 0.011821521, 0.0023220845, -0.001134655, 0.008951722, -0.04829023, -0.041831754, -0.0071431203, -0.03137952, -0.0064071277, -0.008774855, -0.034483243, 0.034095276, 0.017812157, -0.010269661, -0.028138872, -0.020060072, -0.017287264, -0.02544594, -0.021611933, 0.030169984, -0.013122345, -0.010446528, 0.0064812973, -0.036696922, -0.0052004424, 0.023392007, 0.023506114, 0.04486701, 0.0027071969, 0.023825616, 0.006395717, -0.009596428, 0.011707414, 0.0038140381, 0.017344316, -0.024190757, 0.029371232, -0.049568232, 0.040394, 0.00878056, 0.030375376, -0.056871105, -0.039549608, 0.0080160415, -0.0015204805, 0.008860435, 0.014354705, 0.0103951795, 0.03589817, -0.016032083, -0.03169902, -0.0041734762, -0.0060591004, -0.017287264, 0.09000788, 0.05340224, 0.04098736, -0.00916282, -0.022581846, 0.01772087, 0.046350405, 0.0045272093, -0.009488027, 0.00979041, 0.03681103, -0.010737502, -0.017903443, -0.0060020466, 0.07421542, 0.033661667, -0.022410683, -0.019078748, -0.018268587, -0.029257124, -0.018531034, -0.007531085, -0.06065947, 0.02296981, 0.00064898556, 0.007251522, -0.022593256, 0.00644136, -0.0027942038, 0.046441693, 0.018565265, 0.00078734074, 0.028983267, -0.0035972341, 0.0071374145, -0.010092795, 0.01584951, 0.048564088, 0.024031008, 0.02544594, -0.01103418, 0.02206836, -0.029622268, -0.024145115, -0.018257177, 0.013989561, -0.0014541555, 0.046008084, 0.030831806, -0.096945606, 0.027728086, 0.023574578, -0.043246686, 0.0034175152, -0.030489484, 0.0049551115, 0.042493578, 0.045186512, 0.003391841, 0.06339804, 0.03151645, 0.04285872, -0.030055877, -0.01646569, 0.017230209, -0.016248887, 0.019329784, -0.029074553, -0.012620273, -0.022079771, -0.0026344534, -0.023346364, -0.027271656, 0.005034987, 0.038933426, -0.038591105, 0.013955329, -0.03183595, -0.021691807, -0.020893056, 0.02109845, -0.018108837, 0.07736478, -0.013019648, -0.0060305735, 0.056460317, 0.036377423, 0.009351097, 0.0329542, -0.024898224, 0.02469283, -0.019170035, 0.028298622, -0.00939674, -0.024282044, -0.052991454, 0.018416926, -0.014799723, 0.008866142, -0.03012434, -0.04288154, -0.02889198, 0.005522796, 0.032657523, -0.003408957, -0.03074052, -0.0022607518, 0.016716726, 0.027659621, 0.049157448, -0.046875298, -0.01008709, 0.010851609, -0.032338023, -0.02686087, -0.0074455044, 0.04860973, -0.030261269, -0.044479046, -0.059700966, -0.025537224, 0.0276368, -0.004413102, 0.031174129, 0.023460472, -0.018382695, 0.019067338, 0.03462017, -0.011011359, 0.003508801, -0.02312956, 0.00333764, 0.056460317, 0.02592519, -0.028595302, -0.00923699, -0.032429308, 0.0001780253, -0.0101669645, -0.027979122, -0.039093178, 0.040896073, -0.020550733, 0.0038796498, 0.0062644933, 0.0065155295, -0.0091742305, -0.016808013, 0.00948232, -0.0029268535, -0.006019163, 0.03420938, 0.08165522, 0.010372358, 0.0066353423, -0.031767488, -0.023015453, -0.06453912, 0.016442869, -0.0072458168, 0.0017201683, 0.01985468, 0.0181773, 0.020687662, -0.08457637, 0.0058422964, 0.031288236, 0.041192755, -0.005112009, 0.0036029397, -0.012791434, -0.006041984, -0.003993757, -0.01879348, -0.0035915289, 0.00075168215, -0.023083918, 0.025742618, -0.0027728085, 0.062028755, -0.021611933, -0.0076451926, -0.06020304, -0.025879547, -0.017857801, -0.0004835299, -0.047559943, 0.025537224, -0.011250985, 0.0045699994, -0.01798332, 0.0051148618, 0.029530982, -0.0020810328, 0.005648314, 0.023574578, -0.016602619, -0.007006191, -0.01288272, -0.023506114, -0.011290923, -0.0025545782, -0.007884818, -0.022262344, -0.022810059, -0.002615911, -0.060933325, 0.010583457, 0.038979072, 0.034414776, 0.07307435, -0.02950816, 0.005305992, 0.00048780892, -0.020082893, 0.016260298, 0.012335004, -0.023939721, -0.013670061, 0.014320472, 0.00698337, 0.0019740572, -0.02640444, 0.013247863, 0.025651332, 0.032977026, 0.001314374, -0.034574527, 0.009853169, 0.026883692, 0.02017418, 0.01241488, 0.0047839507, 0.047559943, -0.010286777, 0.03256624, -0.034255028, 0.05125702, 0.01156478, 0.009682009, -0.07307435, 0.0024219286, 0.011114056, -0.0036856674, -0.032703165, -0.04516369, -0.023962544, -0.05089188, 0.041466612, 0.021908611, 0.04034836, -0.0011332287, 0.03884214, -0.026883692, 0.041877396, 0.020516502, -0.0056682825, 0.014674205, 0.017937675, 0.003654288, -0.0026544223, 0.016420048, -0.029120196, 0.008483881, 0.031950057, -0.023163792, 0.008038863, -0.004313258, -0.007839175, -0.02779655, -0.09114895, 0.008717801, -0.012141022, 0.005927877, 0.044798546, -0.022559023, 0.08959709, 0.0027071969, -0.00030274107, -0.02670112, -0.0010540667, 0.027385764, 0.0121752545, -0.02328931, 0.0070404233, -0.0033804302, -0.016648263, 0.009687714, 0.010805966, 0.01241488, 0.060294323, 0.0043703117, -0.0016830834, -0.020402394, -0.011867165, -0.0037084888, 0.0478338, -0.060978968, 0.029371232, 0.044821367, 0.05778396, 0.022832882, -0.004564294, 0.0276368, -0.00043075526, -0.014320472, -0.07900793, -0.031242592, -0.048837945, -0.0021523498, -0.019706339, 0.045620117, 0.043132577, -0.00051954505, -0.013179399, 0.024031008, -0.026313156, 0.009522258, -0.04085043, -0.023620222, 0.031060021, -0.04669273, -0.03169902, 0.027362943, -0.043383613, 0.02996459, 0.018245766, -0.021475004, -0.0106233945, -0.0057681263, 0.01521051, -0.009761884, 0.0071830577, 0.019945964, -0.0038140381, -0.0046869596, -0.02482976, -0.029759197, -0.011062708, -0.0058394438, 0.012323594, -0.012072558, -0.022753006, 0.0023620222, 0.0072914595, 0.02514926, 0.02220529, -0.002941117, 0.015005116, -0.0037427212, 0.04500394, 0.015438724, -0.036856674, 0.009128588, -0.039846286, -0.02514926, 0.0049208794, 0.0021295284, -0.043406434, 0.016032083, 0.0018970347, 0.028344266, 0.0028355676, 0.004609937, 0.017287264, 0.033912703, 0.012962595, 0.02530901, -0.056779817, 0.022216702, 0.0015818131, -0.009950161, 0.00620744, -0.004433071, 0.0031778896, -0.019911733, -0.0055427644, -0.03058077, -0.040667858, 0.05865118, 0.07951, -0.010355242, 0.0016631146, -0.002845552, -0.03430067, -0.012517576, 0.009202758, 0.024304865, 0.0012551808, -0.024510259, 0.015278975, -0.028389908, 0.017618176, 0.0175383, -0.026267512, -0.003751279, 0.01878207, 0.016853655, -0.00868357, 0.012061147, -0.00885473, -0.0029981707, -0.009944456, -0.013019648, -0.025742618, 0.004552883, 0.00791905, -0.009967277, 0.010646216, -0.041786112, 0.0054001305, -0.003192153, -0.017766515, -0.004133539, 0.028937625, 0.005015018, -0.003120836, -0.062439542, 0.012814255, -0.01396674, -0.054588955, 0.006954843, 0.030306913, -0.026518548, -0.011599012, 0.021623343, 0.022798648, 0.017059049, 0.0040878956, 0.033159595, -0.068053626, -0.0047297496, 0.01612337, 0.0024518818, 0.013031059, -0.0029839072, 0.013179399, -0.02421358, -0.010355242, -0.047559943, -0.044912655, -0.017116103, -0.0047240444, 0.0023135266, 0.04021143, 0.0038767972, 0.0025403148, -0.04546037, 0.031105664, 0.0044872714, -0.015187688, -0.0034488947, 0.06024868, -0.050161593, 0.08713237, 0.03665128, -0.007434094, 0.00014254505, 0.10917791, -0.015381671, 0.014959473, 0.026199048, -0.0037427212], [-0.01017513, 0.009160078, -0.01887382, 0.04808272, -0.008993979, 0.014296858, -0.04982984, 0.06703036, 0.033293717, 0.011633114, -0.009147774, -0.02353691, -0.015022774, -0.02864293, -0.0028421464, 0.046926174, -0.03417958, 0.017594239, -0.010538088, -0.044243976, 0.0031743452, -0.059057586, -0.05812251, 0.008686387, 0.031423558, -0.016142407, -0.021346858, 0.0061702877, 0.020645548, 0.00842801, 0.019895025, -0.00075321493, 0.0011419338, -0.0007455251, 0.007037696, 0.00041524865, 0.0087479055, 0.043727223, -0.015588743, -0.029897904, -0.073329836, -0.036935598, -0.006028795, -0.020460993, -0.021088481, 0.0002589537, 0.007283769, -0.017717276, -0.009849083, -0.0021531412, -0.013287957, -0.045794237, -0.038584292, -0.025124082, -0.023758376, -0.016080888, 0.054923557, 0.01071034, 0.059894238, -0.029184291, -0.02679738, 0.026969632, 0.05886073, -0.016573036, 7.2187904e-05, 0.026182197, -0.0017763415, 0.030931411, 0.054382194, 0.06299476, 0.013829319, 0.03186649, 0.015871726, 0.0030313153, 0.020596333, -0.044514656, 0.08371413, 0.021371465, -0.00046407882, -0.010531937, 0.026452878, -0.03213717, -0.006564005, 0.012918848, -0.011706936, -0.034228794, 0.030439265, -0.12933612, -0.044219367, -0.016659161, 0.0062041227, 0.0026591294, 0.020793192, 0.0047307587, -0.015121203, 0.053004183, -0.012328272, 0.016302355, -0.0007770533, -0.0073083765, 0.019919632, -0.047664393, -0.063043974, -0.07889109, 0.015957853, 0.039863873, 0.076971725, 0.0022577224, -0.018553926, 0.012832722, 0.03841204, -0.028372249, -0.02984869, 0.05093717, -0.023918323, 0.04594188, -0.04143874, -0.031718846, -0.06658743, 0.0021500653, -0.07200104, -0.060386382, 0.05359476, 0.010205889, 0.015231936, 0.014432198, -0.01689293, 0.018861517, 0.016043978, 0.012260601, -0.04704921, 0.018492406, 0.0031743452, 0.03445026, 0.024791883, -0.0023223166, 0.084206276, 0.0025053336, -0.034868583, 0.03757539, -0.069934025, 0.02404136, -0.017680366, 0.023327747, -0.035877485, -0.0011288612, 0.001685602, -0.017692668, -0.039371725, -0.008292669, -0.006890052, -0.041783243, -0.033662826, 0.04289057, 0.050986383, -0.021777485, 0.029701045, 0.032014135, 0.007585209, 0.053348687, 0.03639424, -0.07195183, 0.006367146, 0.059992667, -0.014161517, -0.055120416, 0.029947119, -0.005810405, -0.036271203, 0.014038481, 0.02229424, -0.018393978, 0.069737166, -0.015035077, -0.06368376, 0.0039371727, 0.024668846, -0.005705824, -0.026108375, -0.0745602, -0.033638217, 0.069687955, 0.039543975, -0.022983244, 0.009885994, 0.039199475, 0.05792565, 0.009615313, 0.013693978, -0.06491413, 0.005748887, 0.030045548, -0.024065968, 0.008532591, -0.0005086796, -0.03932251, -0.0013003435, -0.029307328, -0.035311516, 0.00082280755, 0.004078665, -0.029996334, 0.022860209, -0.011854581, -0.044686906, 0.044243976, 0.021100784, 0.008298822, -0.003626505, 0.028667537, 0.0426445, 0.008766361, -0.0095845545, 0.013152617, -0.00718534, 0.026821988, -0.060730886, 0.0012811191, -0.03260471, -0.044785336, 0.05856544, -0.023192408, 0.022761779, -0.01588403, 0.010827225, 0.024152093, 0.01870157, 0.010519633, 0.022614134, 0.009363089, -0.019599738, -0.00028048508, -0.015797904, 0.00936924, -0.054283764, -0.029873297, -0.026600521, -0.011017931, 0.02324162, -0.00601034, -0.008827879, 0.018812303, -0.04060209, -0.02044869, -0.00674856, 0.04707382, 0.018086387, 0.033662826, -0.02330314, 0.004226309, 0.026920417, 0.033072248, 0.029331936, 0.012562041, 0.00044177845, 0.066242926, -0.015133507, 0.010371989, -0.013570941, 0.028396856, -0.055218846, 0.062601045, -0.04864869, 0.061321463, -0.016609946, -0.021162301, -0.0021408375, -0.036984812, -0.07898952, 0.004804581, 0.09710052, -0.040503662, 0.039002616, 0.0379445, 0.015773298, 0.014653664, 0.06894974, 0.03774764, -0.06087853, 0.04643403, -0.0010781086, 0.011614659, 0.009110863, -0.01363246, 0.02844607, -0.013041884, -0.010833376, -0.008255758, -0.018246334, 0.016130103, 0.0013395614, 0.016326962, 0.030094761, 0.04134031, 0.04355497, -0.0013633998, 0.0167945, -0.007628272, -0.028076962, 0.0138416225, 0.0026129906, 0.0017624999, -0.027486386, -0.032850783, 0.021912826, 0.06776858, 0.013214136, 0.113587424, -0.010661125, -0.036615703, 0.06171518, -0.020657852, -0.04328429, -0.046458635, -0.00128035, 0.013730889, 0.007585209, 0.049190048, 0.055218846, -0.031325128, -0.01883691, -0.035213087, -0.084206276, 0.020288741, 0.063142404, 0.0069638737, 0.0016210077, -0.024890313, -0.027338741, -0.005819633, -0.052167535, 0.009258507, 0.005524345, 0.008249607, -0.05027277, -0.08351727, 0.014973559, -0.035483766, 0.013804711, -0.033761255, 0.018332459, 0.011503926, -0.04087277, -0.030143976, 0.020227224, -0.03447487, -0.023278533, 0.007825131, 0.02353691, 0.029725652, 0.0014226112, -0.0006021106, 0.02874136, 0.025394762, 0.007874345, 0.0012557427, -0.00533979, -0.017335862, -0.010556544, 0.0010050555, 0.042423032, -0.039839264, 0.052856542, 0.051724605, 0.037083242, -0.03112827, -0.015625654, -0.00010333156, 0.012334423, -0.0050414265, -0.059648164, 0.048771724, -0.032752354, -0.015391883, -0.0048414916, -0.03378586, 0.031743452, -0.0025883834, -0.024841098, 0.010574999, 0.013976962, -0.034770153, -0.0396178, 0.02532094, 0.009682983, 0.015933245, -0.0372801, 0.008089659, 0.010956413, -0.035852876, 0.0060472507, 0.03166963, 0.0012257525, -0.015318062, 0.03814136, 0.06437277, -0.0138416225, 0.052265964, 0.009418455, 0.03368743, -0.029996334, -0.010427355, -0.05940209, -0.052758113, 0.031325128, -0.060287952, 0.019267539, -0.0017640379, 0.04284136, 0.030020941, 0.026009945, -0.0045462037, 0.006742408, 0.029922511, 0.033170678, -0.00402945, -0.01951361, 0.06555392, -0.028470678, 0.00095814787, 0.0064225127, -0.041783243, -0.03250628, 0.04963298, -0.032358635, 0.057089, -0.076578006, 0.020128794, 0.012697381, -0.011897643, -0.009141622, 0.022183506, -0.00064209744, -0.019242931, -0.0020747054, -0.047565967, -0.026502091, -0.038707327, -0.0139277475, 0.060829315, 0.009221597, -0.023093978, 0.003740314, -0.017754188, -0.040749736, -0.003035929, -0.06378219, -0.0110856015, 0.03905183, -0.00866178, -0.015760994, -0.021629842, -0.055317275, -0.027510993, 0.021728272, -0.0037218584, 0.021482198, 0.010371989, 0.023906019, -0.07844816, -0.00018349761, 0.0426445, 0.07682408, 0.00020243372, 0.050248165, -0.011497774, -0.03213717, 0.031275913, 0.018652355, 0.024164395, -0.0011265542, 0.0055428008, -0.02058403, 0.053545546, 0.02145759, -0.026403664, -0.004207853, 0.0014033867, 0.011411648, -0.026231412, -0.026009945, -0.025222512, -0.037132457, 0.0533979, 0.0061764396, -0.025911516, 0.02716649, 0.046557065, 0.08760209, 0.025665443, -0.0028698295, 0.014173821, -0.00483534, 0.0047645937, -0.008889398, -0.05516963, -0.011836125, -0.036591098, -0.004592343, -0.0127588995, 0.020116491, 0.017655758, 0.040651307, 0.013312564, 0.034843978, -0.0069331145, -0.021211516, -0.01588403, 0.036689527, 0.0052659684, -0.016203925, -0.027018847, -0.0040079188, 0.009879842, -0.01763115, -0.040208373, 0.0059918845, 0.0057089003, -0.0065024863, 0.01763115, -0.0004725376, -0.03221099, -0.052364394, -0.01413691, -0.016425392, -0.021740574, -0.023044763, -0.0025776175, 0.010513481, -0.039470155, -0.004576963, -0.030143976, -0.006564005, 0.0060195676, 0.020325653, -0.013607852, 0.035754446, -0.011036387, -0.0060564787, -0.004281675, -0.015588743, 0.04301361, 0.03272775, 0.028076962, -0.04355497, 0.059057586, 0.061124604, -0.006656282, -0.024029056, 0.017040575, -0.028323034, 0.03398272, 0.0024468913, 0.034770153, 0.0045984946, -0.022491097, -0.03868272, -0.029430365, 0.003663416, -0.022712564, 0.01806178, 0.0322356, 0.085289, 0.03902722, -0.007628272, -0.051084813, 0.016437694, 0.012931151, -0.008735602, 0.038338218, 0.0061026174, 0.056301568, -0.0029144303, -0.00041986254, -0.0024453532, 0.06575078, 0.006234882, -0.028150784, -0.017409684, -0.00015446865, -0.043235075, -0.01222369, 0.023512302, -0.05782722, 0.017249737, 0.011233245, -0.023364658, -0.052758113, -0.02827382, -0.014186124, 0.022060469, 0.031374343, -0.010138219, -0.0011288612, 0.016228532, 0.0017794174, 0.02524712, -0.005524345, -0.0007259162, 0.030242406, -0.036910992, -0.0017302028, 0.02827382, -0.007142277, -0.031325128, 0.007855889, 0.028347641, -0.032580104, 0.05083874, 0.0117130885, -0.10364606, 0.0065270937, 0.046852354, -0.020399475, -0.017077485, -0.023512302, -0.004460078, 0.05452984, 0.017877223, 0.047270678, 0.07977696, 0.014321465, 0.043801043, -0.036787957, 0.028421463, 0.020239528, -0.00090508827, -0.0049706805, -0.025591621, 0.012279057, -0.0032358638, -0.03233403, -0.017262042, -0.019673558, -0.001724051, 0.020190313, 0.016720679, 0.033441357, -0.0036172771, -0.006668586, 0.016130103, 0.04318586, -0.009965968, 0.05792565, -0.036714133, -0.036172774, 0.007905104, -0.006038023, 0.03823979, -0.016769893, -0.03221099, 0.04660628, -0.016130103, 0.052856542, 0.0027006543, -0.022208113, -0.028716752, 0.034228794, -0.031915706, 0.003472709, -0.032899998, -0.06963874, 0.018443193, 0.024865706, 0.009553795, -0.01907068, -0.034917798, -0.010261256, 0.0014764396, 0.026305234, 0.084157065, -0.028593715, -0.036861777, -0.05590785, -0.013890836, -0.034770153, -0.0075236904, 0.049239263, -0.038805757, -0.021186909, -0.03582827, -0.07529842, -0.0027637105, -0.026969632, -0.016708376, -0.009910601, -0.054874342, 0.009196989, -0.025345547, -0.013435601, 0.019279841, -0.05930366, -0.01782801, 0.07579057, 0.0117992135, 0.00183017, -0.011313219, -0.03646806, 0.040823556, -0.003152814, -0.0018117145, -0.019562826, -0.02334005, -0.009553795, 0.011220941, 0.044047117, -0.001426456, 0.0051736906, -0.03720628, -0.0171267, 0.01437068, 0.0050321985, 0.026600521, 0.06205968, 0.015797904, -0.013238743, 0.0027544827, -0.0008212696, -0.07244398, 0.02407827, -0.00433089, -0.00079973816, -0.005684293, -0.036049735, 0.030267013, -0.04872251, 0.008083507, 0.010193585, 0.07131204, -0.01061191, 0.018590836, -0.039174866, -0.009984423, -0.006600916, -0.0011034849, -0.009836779, -0.019009162, -0.003035929, 0.040257588, 0.03388429, 0.03297382, 0.0013764724, -0.030808374, -0.036443453, -0.0047030756, -0.03932251, 0.013337172, -0.024152093, -0.014862826, -0.022577224, -0.0013941589, -0.015674869, -0.001684064, -0.018652355, 0.008169633, 0.040848166, 0.0285445, -0.012555889, 0.004656937, -0.013940051, -0.012291361, 0.0050629578, -0.016474606, -0.016843716, 0.035582196, 0.036664918, 0.003737238, -0.043358114, 0.0067854705, 0.026132982, 0.035779055, 0.048107326, -0.012494371, -0.0007278386, 0.00738835, -0.02891361, 0.030513087, -0.044145547, -0.02770785, -0.008981675, -0.016265444, 0.0031620418, -0.021100784, -0.01464136, 0.036689527, 0.018664658, -0.009572251, -0.006810078, -0.010488873, -0.008901701, 0.036345024, 0.027683245, 0.021543715, 0.009479973, 0.045818847, -0.024287432, 0.028052354, -0.024435077, 0.059254445, -0.006001112, 0.027068062, -0.044317797, -0.014087696, 0.049977485, -0.0040479056, 0.002716034, -0.014013873, -0.0024838021, -0.006410209, 0.036172774, -0.000989676, 0.027412564, -0.0025360927, 0.03058691, -0.007000785, 0.010937957, 0.015871726, -0.0032481672, 0.00038871888, 0.01883691, -0.015711779, -0.033121463, 0.025567014, -0.028470678, 0.007966623, 0.046630885, -0.002931348, 0.019489003, -0.025468584, -0.022121988, -0.032260206, -0.032924604, -0.023647642, 0.00019080291, 0.018320156, 0.010279711, -0.0010527322, 0.069934025, 0.014358376, 0.0027560208, -0.044342406, -0.017975653, -0.010205889, -0.0019885798, -0.035385337, 0.007818978, 0.0028421464, 0.01574869, -0.00042793681, 0.022958636, 0.03509005, 0.023057066, 0.010827225, 0.000697464, -0.035065442, -0.01621623, -0.048033506, -0.011540837, 0.0032051045, 0.030340835, 0.014112303, 0.010568847, 0.015847119, -0.051429316, 0.0015979384, -0.017618846, -0.04180785, -0.05369319, -0.01067958, 0.016449999, -0.01782801, -0.035286907, 0.02844607, 0.07209947, 0.02324162, -0.028470678, 0.037157066, -0.0074560205, 0.0071668844, -0.033121463, -0.011633114, 0.016929843, -0.066981144, -0.001501047, -0.0037095547, -0.021445286, 0.033219893, -0.021605235, -0.025197905, 0.0061456803, 0.005349018, -0.016942145, 0.045572773, -0.020054972, 0.009455366, 0.017717276, -0.03609895, -0.009855235, -0.02178979, 0.027215704, -0.008649476, -0.008797119, 0.02132225, -0.054480623, 0.008298822, 0.001354941, -0.0047861254, 0.023315443, -0.0025976112, 0.00893246, -0.014087696, 0.035016228, 0.02514869, -0.07195183, 0.027732458, -0.03341675, -0.027289527, 0.01155314, 0.0052136774, -0.027412564, -0.0034911647, 0.0007428337, 0.029454973, 0.018996857, -0.014284554, 0.025911516, 0.014309161, 0.0020331806, 0.010273559, -0.0275356, 0.00555818, 0.021039266, 0.023143193, 0.031546596, -0.017938742, 0.01003979, -0.03755078, 0.010390445, -0.006994633, -0.032653924, 0.02367225, 0.07761151, -0.019181412, -0.014518323, 0.009486125, -0.062305756, -0.044613086, 0.011454712, 0.023967538, 0.0007751308, -0.009849083, 0.035409946, -0.03417958, 0.01390314, 0.013004973, 0.0024530431, 0.0070807585, 0.038584292, -0.0051521594, 0.031202093, 0.015207329, -0.03700942, 0.014912041, -0.0015610274, 0.03885497, -0.05039581, 0.018024867, -0.035754446, 0.010968717, 0.006154908, -0.06343769, -0.0043401173, 0.008391099, 0.024939528, 0.024164395, 0.038658112, 0.009498429, 0.0018055626, -0.05930366, 0.008655627, 0.01675759, -0.032260206, -0.020965444, 0.004072513, -0.029356543, -0.008292669, -0.011546989, 0.021026962, 0.0053705494, -0.016068585, 0.0463356, -0.069737166, -0.008581806, 0.017803403, 0.007425261, -0.015428795, 0.013041884, -0.028593715, 0.0020900848, -0.03959319, 0.0015994763, 0.005459751, -0.04604031, 0.022614134, -0.038264394, 0.03341675, -0.002823691, 0.014210732, -0.0533979, 0.025037955, 0.0070807585, 0.00096429966, 0.0015717931, 0.0049706805, -0.0007593668, 0.04318586, 0.03981466, -0.0017317407, -0.0082065435, 0.09591936, -0.0032881543, -0.017348167, -0.0019316752, 0.009424606], [-0.009367895, 0.0011487029, -0.02216321, 0.05815111, 0.010736562, 0.032733, -0.018183723, 0.039564837, -0.0011803318, -0.00033479874, -0.001889106, -0.0036258183, -0.0009948716, -0.009586422, 0.003942107, 0.034228183, -0.060727425, 0.015676416, -0.01734412, -0.02035749, -0.028914535, -0.046511687, -0.055666804, -0.0053999103, 0.014503273, -0.025326096, -0.0188163, 0.0139627075, 0.002899792, 0.060635414, 0.024313973, 0.024106948, 0.05529876, -0.008959595, 0.027028304, 0.014997833, -0.0036603224, 0.052078366, -0.012364011, 0.0013104414, -0.020507008, -0.0053769075, -0.016343499, -0.041658092, -0.013008091, -0.005917473, 0.010431776, -0.031927902, -0.019264854, -0.0077749505, -0.021082077, -0.026890287, -0.008309766, -0.029075556, -0.042187158, 0.0035194303, 0.004988735, -0.0040456196, 0.05194035, 0.0023261595, -0.0034475464, 0.058657173, 0.07871562, 0.0073321466, 0.022013692, -0.00047587068, -0.020553013, 0.02339386, 0.031007791, 0.052308396, 0.016067464, -0.004140506, 0.027879408, 0.0027617752, 0.007993477, -0.046281658, 0.069836535, 0.014261744, 0.0073263957, 0.012064975, 0.025947172, -0.0278104, -0.005928975, -0.017804177, -0.0006501889, -0.0286385, 0.021243097, -0.122466974, -0.024797032, -0.028661504, 0.015480893, -0.0014132353, 0.021806667, 0.016895566, -0.023370856, 0.019448878, 0.018505763, 0.035056286, -0.015020836, -0.02216321, -0.0023175334, -0.0139052, -0.043567326, -0.050238144, -0.0063200225, 0.044625457, 0.06390181, -0.0012263374, -0.05686295, -0.013675172, -0.0013068473, -0.00079791003, -0.04260121, 0.022416241, -0.010759565, 0.028063431, -0.039288804, -0.059347257, -0.04522353, 0.008930841, -0.07337897, -0.053044487, 0.06160153, -0.004833466, 0.008614553, 0.026223207, -0.013008091, 0.046166644, 0.027442355, 0.035999402, -0.054516666, -0.030501729, 0.043981377, 0.054332644, 0.09141318, 0.028086433, 0.044970497, -0.039564837, -0.08023381, -0.010437526, -0.08142996, 0.001746776, 0.0045948117, 0.028270457, -0.016803555, -0.008482287, -0.021933181, -0.02838547, -0.038897756, -0.03404416, -0.039334808, -0.039725855, -0.008033732, 0.02330185, 0.011346137, -0.014422763, 0.010943588, 0.010126988, 0.024152953, 0.030133683, 0.037310563, -0.047569815, -0.015273867, 0.018954318, -0.0028135316, -0.08722667, 0.014112226, 0.0048162136, -0.041773107, 0.0072458857, 0.0070676142, -0.012525031, 0.034343198, -0.006601807, -0.047339786, 0.020645024, 0.005397035, 0.011788941, 0.012502029, -0.05792108, -0.05102024, 0.044924494, 0.06542, 0.013939704, 0.008660559, 0.03981787, 0.04720177, 0.021553636, 0.016573526, -0.058611166, 0.009166621, 0.010000473, -0.024175955, 0.022588762, -0.003942107, -0.021565137, -0.015722422, -0.038345687, -0.025142074, -0.011093106, 0.0033900396, -0.04547656, 0.018931314, -0.0294436, -0.031030795, 0.04124404, -0.002416733, 0.0016389504, -0.0049053496, 0.00851104, -0.0012486214, 0.045085512, 0.031191813, -0.016159475, -0.0072343843, 0.019414373, -0.052032363, -0.009891209, -0.014756304, -0.054746695, 0.033676118, -0.03075476, 0.014974831, -0.022749782, 0.033492096, 0.0014290498, -0.0020817546, -0.0013995774, 0.0062280116, 0.0023074695, -0.0028926036, -0.048305906, -0.026315218, 0.021174088, -0.060635414, -0.024198959, -0.01947188, -0.027856406, 0.052032363, -0.0061820056, 0.01774667, -0.003099629, -0.057277, -0.0060899947, 0.042739224, 0.038966764, 0.0066535636, 0.036666483, -0.02069103, 0.024797032, 0.01104135, 0.03017969, 0.008401778, 0.01791919, -0.010771067, 0.072044805, 0.021001568, -0.0021910178, -0.0121684875, 0.04432642, -0.0392658, 0.033745125, -0.038782742, 0.06127949, -0.035240307, -0.037218552, -0.0018661031, -0.05299848, -0.05511474, -0.00637753, 0.06753626, -0.064499885, 0.018252732, -0.0070618633, 0.052032363, 0.011846448, 0.07917568, 0.027051307, -0.038322683, 0.042394184, -0.01659653, 0.049502052, 0.022726778, 0.011938459, 0.013836192, 0.0076771886, -0.017942194, -0.036137417, -0.05079021, 0.006693818, 0.008804326, -0.008884836, 0.041129027, 0.007056113, 0.046833728, 0.023037316, 0.0068203337, -0.0034532973, -0.011834946, 0.023186835, -0.021404117, -0.041865118, -0.051664315, -0.013560158, -0.015285369, 0.049778085, 0.008367273, 0.08129194, 0.017758172, 0.013192113, 0.063165724, -0.024590006, -0.03949583, -0.015446388, -0.0016188229, -0.008119993, 0.028454479, -0.008442032, 0.023290347, -0.022853294, -0.027350344, -0.047339786, -0.13350832, 0.0228993, 0.066294104, 0.012122482, -0.03779362, -0.022853294, 0.006590306, 0.017792676, -0.057369012, -0.043314297, 0.0441654, 0.013778685, -0.054516666, -0.07738146, 0.021220094, -0.05529876, 0.03337708, -0.042440187, 0.01211098, 0.045729592, -0.036022402, -0.02567114, 0.0005060619, -0.010362767, 0.008229256, 0.03616042, 0.030294703, 0.01864378, 0.0013902325, 0.015388882, 0.04161209, -0.0030191191, -0.012145485, 0.022485249, 0.012801065, -0.0261772, -0.012272, 0.019977942, 0.06077343, -0.034113172, 0.027948417, 0.033837136, 0.007556424, -0.03908178, -0.021404117, -0.024336975, -0.014457268, -0.014158231, -0.050514176, 0.05488471, -2.1913324e-05, -0.019207349, 0.039633844, -0.04858194, 0.037402574, 0.006665065, -0.051756326, 0.013882197, 0.022519752, -0.04057696, -0.020058453, 0.013571659, -0.009413901, 0.03673549, -0.040922005, 0.011604919, 0.017689163, 0.0034763, -0.0095231645, 0.011185117, -0.027994422, 0.00036570878, 0.015101346, 0.03696552, -0.001893419, 0.024636012, 0.023600886, 0.04964007, -0.026936293, -0.005259018, -0.029328587, -0.04844392, 0.062521644, -0.044280414, -0.01832174, -0.001245746, 0.018586272, 0.056816947, -0.01448027, 0.045016505, -0.009960217, 0.013491149, 0.022910802, -0.010126988, -0.010086733, 0.04326829, -0.025004057, 0.011599168, 0.041497074, -0.07324095, -0.06440788, 0.05773706, -0.03940382, 0.031674873, -0.036114417, 0.04589061, -0.022048196, -0.031260822, -0.02886853, 0.004750081, -0.011426647, -0.041658092, -0.0061072465, -0.037172545, -0.049686074, -0.059577283, 0.010776818, 0.037080534, 0.0051094997, -0.015135851, 0.037241552, 0.0026496365, -0.02102457, 0.025372103, -0.07880764, -0.0067858296, 0.022266721, -0.009068859, -0.009931464, -0.032364957, -0.046097636, -0.029627623, 0.028822524, 0.005742077, 0.0031830142, 0.026453234, 0.02649924, -0.07715143, 0.019575393, 0.0062855184, 0.06477592, 0.0012824067, 0.047937863, -0.00793597, -0.03875974, 0.020322984, 0.00494848, 0.015434887, 0.01382469, 0.023623887, -0.034458213, 0.009689935, -0.026844282, -0.06339575, -0.015434887, -0.031605866, 0.026200203, 0.035355322, -0.009224128, -0.0785316, -0.03648246, 0.035286315, 0.002106195, 0.0037983393, 0.018701287, 0.031674873, 0.08050984, 0.059669293, 0.0014376758, 0.029811645, -0.008718066, 0.0017108342, -0.009914212, -0.037126537, -0.030938782, -0.028270457, 0.01275506, -0.035769373, 0.012225995, 0.051756326, -0.009643929, 0.037126537, 0.011150613, 9.4437324e-05, -0.040991012, -0.03574637, 0.033791132, 0.0056960713, 0.008039483, -0.024728023, -0.020967063, 0.023577882, -0.025257088, -0.030087678, 0.015664915, 0.032272946, -0.004660945, -0.005839839, -0.0014836814, -0.056632925, -0.03475725, -0.008775573, -0.035677362, 0.003924855, 0.032502975, 0.01030526, 0.027902411, -0.056126863, -0.017976698, 0.018310238, 0.022795787, 0.017838681, 0.00519576, -0.018425252, 0.047799844, 0.024774028, -0.001516748, 0.0057535786, -0.017125593, 0.036137417, 0.007510418, 0.02870751, 0.0015081218, 0.043567326, 0.058703177, -0.009764694, -0.008735318, 0.02838547, -0.024152953, 0.01676905, 0.00948866, 0.04646568, 0.027764395, -0.016412506, -0.027833402, -0.052492417, -0.0044941744, -0.011409394, 0.02438298, -0.010334013, 0.086168535, 0.05539077, -0.014836814, -0.06399383, 0.032019913, 0.008608802, -0.008252259, 0.04204914, 0.02723533, 0.055022728, 0.019782418, -0.0054344144, -0.01686106, 0.076185316, 0.011811944, -0.014227239, -0.006739824, -0.017275112, -0.02012746, 0.007050362, -0.02216321, -0.020978564, -0.01725211, 0.019356867, -0.017447634, -0.020081455, -0.05120426, -0.0040542455, 0.006199258, 0.012697552, 0.006417785, -0.01104135, 0.020518508, 0.0023002813, 0.0028063431, -0.015745426, 0.018620776, 0.009787696, -0.03132983, -0.016585028, 0.0155038955, -0.013767183, -0.035769373, -0.007510418, 0.017677661, -0.10691707, 0.016009957, -0.012766561, -0.081751995, -0.009971719, 0.04858194, -0.019575393, 0.007826707, -0.03747158, -0.022266721, 0.076047294, 0.0072458857, 0.07080266, 0.05571281, 0.012007468, 0.042992257, -0.031214816, 0.030455723, -0.016677039, -0.013353133, 0.010834324, -0.01742463, 0.0018790422, -0.0011271378, -0.039794866, 0.0010926336, -0.03475725, 0.018839303, 0.006268266, 0.015998457, 0.037977643, -0.010167243, -0.0033411584, 0.015181856, 0.03903577, 0.0047817095, 0.076829396, -0.03990988, -0.031375837, 0.028408473, -0.010167243, 0.04922602, -0.0057564536, -0.016700042, 0.03779362, -0.0072746393, 0.039771862, 0.029029548, -0.03075476, -0.015181856, 0.02675227, -0.02347437, 0.025165077, -0.033147052, -0.059347257, 0.023646891, 0.023428364, 0.017298115, -0.0008841706, -0.018379247, -0.01480231, -0.023784908, -0.013422141, 0.08350021, -0.03648246, -0.03149085, -0.042256165, -0.011926958, -0.026039183, -0.00031988285, 0.01906933, -0.021783663, -0.0045919362, -0.017850183, -0.02649924, -0.03264099, -0.026039183, -0.009333391, -0.015952451, -0.07314894, -0.019494884, -0.037172545, 0.0013492587, 0.018988822, -0.03583838, -0.032940026, 0.060129352, -0.021864174, -0.0032980281, 0.008194752, -0.016987577, 0.026729267, -0.002855224, 0.00046365045, -0.03043272, -0.02470502, -0.009373646, 0.03174388, 0.027626378, -0.014020214, 0.013755682, -0.060727425, -0.0036574472, 0.041520078, 0.017769672, 0.060497396, 0.057461023, 0.023048818, 0.019828424, -0.014204237, 0.024359979, -0.06528198, 0.029098557, -0.028178444, -0.0023577882, -0.006693818, -0.01594095, 0.04303826, -0.042647213, 0.015388882, -0.021611143, 0.032525975, -0.003582688, 0.0023922925, -0.016228484, -0.010011974, 0.01857477, 0.009005601, 0.0010164367, -0.030938782, -0.012007468, 0.020253977, 0.011443899, 0.020599019, -0.04211815, -0.038207673, -0.02184117, 0.009758943, -0.032364957, 0.013353133, -0.029880654, -0.019402873, -0.014836814, -0.015664915, -0.02985765, 0.01791919, -0.013077099, 0.018781796, 0.039978888, -0.013215115, 0.0012241809, 0.0010796945, -0.035769373, -0.04566058, 0.011880953, -0.009120615, -0.01496333, 0.025855161, -0.0045200526, 0.013341631, -0.060267366, 0.005051993, 0.037655603, 0.030570738, 0.047661826, -0.03484926, -0.0018704162, 0.013767183, -0.02142712, 0.0130886, -0.017608652, -0.0016820807, -0.029489605, 0.015975453, -0.0044855485, 0.0029386093, -0.027120316, 0.027212327, 0.022715278, -0.019080833, -0.022922302, 0.012156987, -0.014066219, 0.03084677, -0.013111603, 0.029305583, 0.003844345, 0.06560402, 0.00082666357, 0.066018075, -0.0129390815, 0.057967085, -0.0040772483, 0.015009335, -0.047799844, 0.010518036, 0.0425552, 0.023899922, 0.013433643, -0.02151913, -0.0066478127, -0.047477804, 0.029374592, 0.018022703, -0.0033037788, -0.0010394396, 0.009546167, 0.00087626337, 0.0051382533, -0.025119072, -0.007188379, 0.009327641, 0.03751759, -0.0025518744, -0.038828745, 0.014008713, 0.018862305, 0.03277901, 0.037747614, 0.0425552, -0.00568457, -0.0015109972, -0.017114092, -0.037126537, -0.053596552, -0.025717145, 0.0034159175, -0.0048794714, 0.028661504, 0.017850183, 0.040415943, 0.023002813, 0.011374891, -0.04303826, -0.007159625, -0.02110508, -0.021576637, -0.028201448, 0.026269212, -0.013537155, -0.00035384795, 0.0012126795, 0.0719528, 0.02870751, 0.056540914, -0.01816072, -0.018873807, 0.0014908698, -0.008482287, -0.07383902, -0.00039715794, 0.008643307, 0.0030162437, 0.03565436, 0.03075476, 0.021461625, -0.031375837, -0.00932189, 0.0026036308, 0.0114899045, -0.04214115, -0.0037523338, -0.014974831, -0.018206727, -0.008741069, 0.0043159025, 0.031283826, 0.011553163, -0.041911125, 0.009954467, -0.031812888, -0.011846448, 0.007268889, 0.0037523338, 0.0062107593, -0.06749025, -0.0060324874, -0.024912046, -0.012950583, 0.0069238464, -0.0036171922, -0.007188379, -0.009971719, 0.009942966, -0.038644724, 0.053366523, -0.007964724, 0.02240474, -0.01071356, -0.017137095, 0.007159625, -0.029558614, 0.054102615, 0.008729567, -0.004971483, -0.0036689485, -0.011593417, 0.016619531, -0.020921057, 0.009114864, 0.014583783, -0.03549334, -0.017896188, 0.0010394396, 0.03852971, 0.035286315, -0.03827668, 0.031536855, 0.008315517, -0.009459906, -0.005928975, 0.01594095, -0.036344443, 0.01790769, 0.028109437, 0.03657447, 0.020161966, -0.0009891209, 0.009390898, -0.009442654, 0.028270457, 0.016941572, -0.0108918315, 0.019345365, 0.027534366, 0.015365879, -0.0026798276, 0.01857477, -0.015515397, 0.020806044, 0.0046005626, -0.0141352285, -0.032848015, 0.03372212, 0.09642779, -0.02355488, -0.0014247367, 0.014537778, -0.067122206, -0.0054861708, 0.045407552, -0.007412656, 0.005986482, -0.0011091669, 0.023853917, -0.041911125, 0.0037149542, -0.0012471838, 0.018298738, 0.018425252, 0.04973208, 0.009793447, 0.031145807, 0.004916851, -0.022979809, 0.03091578, 0.0035021782, 0.05585083, -0.043521322, 0.03282501, -0.029052552, 0.0026438858, 0.023669893, -0.06500595, 0.008499539, 0.007205631, 0.024175955, 0.0012306505, 0.015009335, -0.0121684875, 0.0015843187, -0.070480615, 0.040277924, 0.03754059, -0.04382036, 0.00083960267, 0.010535288, -0.021415617, 0.011225373, -0.03165187, 0.019747915, 0.0048133386, -0.033009037, -0.004295775, -0.041865118, -0.004353282, 0.018988822, -0.015952451, -0.010437526, 0.008781323, 0.011869451, 0.0014031716, -0.03247997, 0.026384225, -0.015929447, -0.047891855, 0.023669893, -0.05750703, 0.0012917516, -0.006308521, -0.014215738, -0.06325773, 0.008482287, -0.0057363263, 0.03001867, 0.008557046, -0.019391371, 0.03593039, 0.026062187, 0.040300928, -0.0010013412, 0.020012446, 0.05792108, 0.01923035, -0.03526331, 0.00368045, -0.006969852], [-0.027086528, 0.023026071, -0.022471227, 0.026002059, -0.003707374, 0.016847115, -0.04822108, 0.036266692, -0.007887627, 0.0589649, -0.025005858, -0.0049084877, -0.044892013, -0.02943201, -0.005091334, 0.038158208, -0.064210705, 0.040806334, -0.025295893, -0.004697268, 0.0015778408, -0.07445012, -0.03929312, 0.016191388, 0.008845996, -0.0064879046, -0.015964406, 0.016910166, 0.013303672, 0.006765327, 0.04020105, 0.03389599, 0.036291912, 0.010447481, 0.028473642, 0.025535485, 0.0059046866, 0.005535841, 0.015396951, 0.019760052, -0.060730316, 0.0006687302, 0.018726021, -0.05336601, -0.05215544, -0.041083757, 0.024160981, -0.015800474, -0.0072445115, 0.0073327823, -0.01959612, -0.02938157, -0.0019293476, -0.0174524, -0.0044324556, -0.012887538, 0.07727479, -0.082419716, 0.06940608, -0.046455666, -0.060679875, 0.017906364, 0.058359616, -0.031121766, -0.0067401067, 0.018171176, -0.028070118, -0.0002492468, 0.027969236, 0.057149045, 0.008934267, -0.00981067, 8.255685e-05, 5.4036314e-05, 0.0042464565, -0.072735146, 0.061688684, 0.02726307, -0.023732238, -0.01736413, 0.028776284, -0.011260834, -0.0015668068, -0.028675403, -0.0049904534, -0.02411054, 0.046455666, -0.14395708, -0.041689042, 0.002580345, 0.022357736, -0.006216787, 0.03371945, 0.011475205, -0.004735098, 0.020478828, 0.012975809, 0.008959487, -0.023467425, 0.012048965, 0.012206592, -0.053214688, -0.02066798, -0.04557296, 0.0392679, 0.0391418, 0.016758844, -0.023618747, -0.0093567055, 0.04433717, 0.009344095, -0.0064563793, 0.007547154, 0.0032817826, -0.002659158, 0.035333544, 0.021487636, -0.02832232, -0.038561735, -0.034551717, -0.07677039, -0.03470304, 0.07959505, 0.024135761, 0.024652775, 0.007402138, 0.022446007, 0.049608193, -0.0031840543, -0.022357736, -0.019217817, 0.0055925865, 0.032433216, 0.051398832, 0.05482878, 0.018839512, 0.045068555, -0.009091893, -0.03177749, -0.008877521, -0.04791844, 0.009589992, 0.010018737, 0.030894782, -0.03732594, 0.007168851, -0.020617539, -0.042395208, -0.034299515, -0.019734832, -0.030491259, -0.037477262, -0.013757636, 0.008398337, 0.030037295, -0.006292448, 0.039847966, 0.031474847, 0.0133667225, 0.04690963, 0.025321113, -0.06637965, 0.016128337, 0.03487958, 0.022181194, -0.070414886, 0.035762288, 0.0025488196, -0.054072175, 0.012528149, -0.014728615, -0.012856013, 0.057098605, 0.014262041, -0.04037759, 0.009167554, 0.03493002, 0.008360507, -0.00653204, -0.04791844, -0.01856209, 0.06854859, 0.025800297, -0.04032715, 0.027111748, 0.019192597, 0.0415125, -0.017111927, 0.025510265, -0.057199486, -0.018473819, 0.011014936, -0.024224032, 0.01948263, -0.010592497, 0.0014627734, -0.019306088, -0.026960427, -0.013240621, -0.010025042, -0.016657963, -0.030415598, 0.019192597, -0.019129544, -0.011273444, 0.038032107, 0.0674389, 0.033215046, 0.0031273086, 0.016746234, 0.0174524, -0.004164491, 0.023568306, -0.025081519, -0.044160623, 0.04910379, -0.05356777, -0.014388142, -0.03583795, -0.03470304, 0.05099531, -0.008373117, 0.006027635, -0.016708404, 0.0093630105, 0.028952826, 0.0076921703, 0.006311363, 0.014652954, 0.022357736, -0.012402048, -0.026657784, -0.008757725, 0.022269465, -0.071373254, 0.0054412647, -0.039520103, -0.004489201, 0.027994456, 0.0055106203, 0.00021358383, -0.036544114, -0.047187053, 0.0026118702, 0.014224211, 0.047615796, 0.023820508, -0.014375532, -0.0107753435, -0.0056178067, 0.032130573, 0.02073103, -0.011424765, 0.05467746, 0.022029871, 0.10885052, 0.03835997, -0.025749857, -0.0195709, 0.02607772, -0.000536324, 0.05750213, -0.034425616, 0.04940643, -0.010466396, 0.0068094623, 0.023152173, -0.061486922, -0.069052994, -0.0043883203, 0.058662258, -0.037956446, 0.022496447, 0.016544472, 0.026329922, -0.0054286546, 0.05240764, 0.013278452, -0.022660378, 0.019974424, 0.0062451595, 0.020907572, 0.008417252, 0.01040965, 0.009003622, 0.0031273086, -0.0076858653, -0.039419223, -0.0076038996, 0.014451193, -0.0030311565, -0.024677996, 0.027868355, -0.009583687, 0.04128552, 0.039646205, -0.007521934, 0.0036191032, -0.012774047, 0.010170058, 0.017591111, -0.015207799, -0.03061736, -0.023429595, 0.011531951, 0.033240266, 0.012717302, 0.078788005, -0.027590932, -0.060377233, 0.06461423, -0.0017070944, -0.026531683, -0.051651035, 0.02728829, -0.016002236, 0.011727408, 0.018032465, 0.03830953, -0.032962844, -0.042874392, -0.028095338, -0.11228047, 0.010510531, 0.043479677, 0.015460001, 0.01139324, -0.01625444, -0.032004472, 0.02741439, -0.04552252, 0.006248312, 0.002569311, 0.01200483, -0.041134197, -0.11137254, -0.021664178, -0.06890167, -0.0022603632, -0.01861253, -0.00300436, 0.02948245, -0.01530868, -0.027969236, -0.0023044986, -0.026708225, -0.0073390873, 0.0055673663, 0.020882351, 0.023908779, 0.0016156711, 0.030390378, 0.017603721, 0.009583687, 0.015182579, -0.0043788627, -0.009407146, -0.031146986, -0.013921567, 0.0035781204, 0.06612745, -0.04572428, 0.0026497005, 0.07687127, 0.0219416, -0.036594555, -0.05346689, -0.012723607, -0.0073580025, -0.0023454814, -0.04579994, 0.051802356, -0.024148371, -0.0011065376, -0.044110183, -0.016380541, 0.0613356, -0.009413451, -0.026456023, 0.030289497, 0.004523879, -0.041840363, -0.020592319, 0.025762467, 0.012874928, 0.0228117, -0.023782678, 0.0051512322, 0.014842106, -0.03916702, 0.010428566, 0.0049305554, 0.0043347273, -0.0028530387, 0.030339938, 0.0050219786, -0.041714262, 0.04706095, 0.00066439545, 0.025371553, -0.022483837, 0.046405226, -0.042218667, -0.034602158, 0.03820865, -0.033215046, 0.0187008, 0.008814471, -0.025901178, 0.052710284, -0.049860395, 0.021462416, -0.02190377, 0.020050084, 0.03919224, 0.03472826, -0.012704692, 0.045926042, -0.023139562, 0.025901178, 0.023795288, -0.015384341, -0.029154588, 0.04158816, -0.05876314, 0.04554774, -0.067943305, 0.011437375, -0.0059046866, -0.032181013, 0.014489023, 0.0056178067, -0.03273586, -0.005674552, 0.007187766, -0.046001703, -0.0039564236, -0.02819622, -0.006418549, 0.07233162, -0.032811522, -0.018877342, 0.0022067702, 0.009974602, -0.025901178, -0.003010665, -0.0959882, -0.02291258, 0.04279873, -0.008341592, 0.00022048, 0.005214283, -0.05351733, -0.0456234, 0.026859546, 0.0021783975, -0.012250727, -0.006677056, 0.04244565, -0.10133489, -0.0005213495, 0.012244422, 0.06103296, -0.038006887, 0.032407995, -0.020100525, -0.058006532, 0.03919224, 0.008934267, 0.011090597, -0.0014596209, 0.0030437666, -0.0195709, 0.03371945, -0.0070238346, -0.028044898, -0.00095048745, -0.0011751051, 0.024211422, 0.011141038, -0.018814292, -0.013593704, -0.015750034, 0.0374016, 0.021500247, -0.00029732287, 0.012975809, 0.006346041, 0.06537084, 0.009142334, -0.031399187, 0.021109333, -0.026708225, -0.0056051966, -0.009167554, -0.060578994, -0.024791487, -0.027944015, 0.0024999555, -0.013681975, 0.050188262, 0.06491687, 0.048801146, 0.03707374, 0.0026607343, -0.00045199384, -0.0062703798, -0.014224211, 0.016872335, 0.016897555, 0.026002059, -0.027540492, -0.03624147, 0.028877165, -0.0068599028, -0.055030543, -0.032761082, 0.03195403, 0.014741225, 0.01414855, -0.009968297, -0.040579353, -0.05669508, -0.027767474, -0.018852122, -0.0033542907, -0.008228101, 0.020403167, 0.038132988, -0.030819122, -0.010693378, -0.014640344, -0.024879757, 0.02192899, 0.007950678, -0.016960606, 0.041865584, 0.005589434, -0.012805573, -0.004722488, -0.024942808, 0.03185315, 0.008871216, -0.006068618, -0.022193804, 0.029885974, 0.047161832, -0.0038114074, -0.04045325, 0.023215223, -0.021046283, 0.056795962, 0.015195189, 0.023391765, 0.023643967, -0.020012254, -0.04577472, -0.025661586, 0.008612709, -0.009924161, -0.008171355, 0.024778876, 0.073895276, 0.018410768, -0.0306678, -0.043504898, 0.016645353, 0.0034362564, -0.0009772839, 0.006260922, -0.0014572565, 0.05790565, -0.016544472, 0.005942517, -0.029709432, 0.06864947, 0.004189711, -0.039343562, -0.018095516, -0.023719627, -0.038687836, 0.0037830346, 0.00032096685, -0.0374016, 0.013164961, 0.013190181, 0.0114878155, -0.04938121, -0.032004472, -0.023391765, 0.02185333, 0.011077987, 0.0050503514, 0.007925457, -0.009766535, -0.00031604103, 0.02286214, 0.0025125656, -0.0063964813, 0.020529268, -0.020541878, -0.03596405, 0.02287475, 0.005816416, -0.032155793, -0.009703484, 0.036392793, -0.051449273, 0.05639244, -0.0030989358, -0.08312588, 0.018915173, 0.05099531, -0.0144259725, 0.011891339, -0.032458436, 0.00018521107, 0.05477834, 0.034324735, 0.050642226, 0.047767118, 0.012048965, 0.0671867, -0.050112598, 0.02400966, 0.007887627, -0.012496624, 0.005280486, -0.02822144, -0.011185173, -0.038536515, -0.017830703, -0.023379155, -0.014968207, -0.0070112245, 0.017792873, 0.01411072, 0.02733873, 0.0012799267, 0.015926575, 0.024816707, 0.017250638, 0.012710997, 0.12761436, -0.028978046, -0.043404017, 0.038687836, -0.010705988, 0.059570186, -0.028650183, -0.036544114, 0.007282342, 0.0042685242, 0.036771096, 0.019860933, -0.038057327, -0.010617717, 0.026481243, -0.025068909, -0.010170058, -0.0260525, -0.015724814, 0.0067022764, 0.016733624, 0.025573315, 0.0016440438, -0.04917945, -0.051701475, -0.009482807, 0.022622548, 0.07096973, -0.040579353, -0.05129795, -0.050087377, -0.010012432, -0.02832232, 0.007534544, 0.032962844, -0.036897197, -0.009495417, -0.033341147, -0.033114165, 0.002138991, -0.049835175, 0.008612709, -0.013442383, -0.04791844, 0.010743818, -0.0045081163, -0.030012075, 0.012465099, -0.04471547, -0.023190003, 0.048397623, 0.034299515, -0.029885974, 0.0008291151, -0.04817064, -0.0077741365, 0.009482807, -0.03387077, -0.03167661, -0.026683005, -0.036317132, 0.024841927, 0.010851004, -0.0025425146, 0.01416116, -0.043328356, -0.01033399, 0.04453893, -0.0049557756, 0.0282971, 0.097804055, -0.0064815995, -0.008997317, -0.026985647, 0.016519252, -0.07071753, 0.03470304, 0.004476591, 0.013442383, -0.033114165, -0.0056178067, 0.020125745, -0.0134802135, 0.038057327, 4.3002463e-05, 0.050894428, -0.0077993567, 0.01851165, -0.039923627, 0.015094308, -0.0024022271, 0.0126668615, 0.0026244803, -0.009211689, -0.027061308, 0.019217817, 0.015674373, 0.035636187, -0.024854537, -0.039444443, -0.05346689, -0.011361714, -0.035333544, 0.03470304, -0.04433717, -0.022546887, -0.04007495, -0.006175804, -0.012080491, -0.0048769624, -0.05104575, 0.022042481, 0.043126594, 0.0030768681, 0.024690606, 0.009829585, -0.029608551, -0.023442205, -0.0033542907, -0.010088093, -0.022534277, 0.031474847, -0.011033851, 0.006897733, -0.044034522, 0.01413594, 0.025283283, 0.021411976, 0.077526994, -0.012736217, 0.010119618, -0.023089122, -0.012509234, 0.00088113185, -0.012622726, -0.030743461, -0.0023281425, -0.009161249, 0.012679472, -0.0064563793, -0.0059582796, 0.039696645, -0.008782946, -0.012193982, -0.0154852215, 0.00599611, -0.0029728347, 0.03255932, 0.012622726, 0.018448599, -0.0033070028, 0.036720656, -0.018738631, 0.024677996, -0.036771096, 0.04040281, -0.011185173, 0.007414748, -0.05891446, -0.021563297, 0.053113807, -0.014463803, 0.022118142, 0.009394536, -0.036342353, -0.04378232, 0.040024508, 0.015800474, 0.023126952, -0.012080491, 0.0073643075, -0.007181461, 0.036342353, -0.0030989358, -0.011386935, -0.010523141, 0.021411976, -0.017061487, -0.05755257, 0.017729823, -0.021147164, 0.017792873, 0.04441283, -0.010882529, -0.0020822454, -0.008833386, 0.0050755716, -0.03351769, -0.020365337, -0.02404749, 0.011002325, -0.011292359, 0.058309175, 0.0015463154, 0.071575016, 0.010813174, 0.014274651, -0.05346689, -0.011664357, 0.011122122, 0.018751241, -0.03621625, 0.021613738, 0.0042811343, 0.021475026, 0.01305147, 0.033013284, 0.015094308, 0.0091297235, 0.008827081, -0.011033851, -0.0077552213, -0.011462595, -0.049683854, 0.0036632386, 0.0020002795, 0.010497921, 0.02607772, -0.008644234, 0.022282075, -0.060528554, 0.011090597, -0.015775254, -0.018057685, -0.066783175, -0.033189826, 0.009684569, -0.042193446, -0.024741046, 0.032382775, 0.032256674, 0.031474847, -0.003445714, 0.03268542, -0.0042212363, -0.0071562408, -0.020163575, 0.0037641195, -0.0021358384, -0.072583824, -0.021777669, -0.009917856, -0.040024508, 0.017641552, 0.0031541053, -0.008757725, 0.012212897, -0.001639315, -0.002091703, 0.046632208, 0.0028230897, 0.020907572, 0.008310067, 0.007187766, -0.015724814, -0.033442028, 0.014476413, 0.009400841, 0.01945741, -0.0093567055, -0.025648976, 0.003319613, -0.016153557, 0.019873543, 0.015964406, -0.0022335667, 0.015006037, -0.012792963, 0.027641373, 0.022370346, -0.06476555, 0.016985826, -0.011260834, -0.021172384, 0.03197925, 0.011286054, -0.022244245, 0.01535912, 0.00976023, 0.05649332, 0.02612816, -0.021096723, 0.021096723, -0.011910254, 0.023934, 0.029078927, -0.027187409, 0.024173591, 0.023555696, 0.03177749, 0.019860933, 0.016809285, -0.025258062, -0.0068157674, -0.006229397, -0.019016054, -0.030894782, 0.05452614, 0.057451688, -0.023240443, -0.025434604, 0.002258787, -0.0676911, -0.014652954, 0.021714618, 0.0523572, 0.0064280066, -0.03064258, 0.0008519709, -0.039394002, -0.0013169689, -0.0086568445, -0.038006887, -0.00873881, 0.005680857, 0.013732416, 0.01535912, 0.0017338909, -0.021575907, 0.009154944, 0.0022067702, 0.036266692, 0.0026323616, 0.018927783, -0.019381749, 0.04582516, 0.04438761, -0.04917945, 0.0073706126, 0.024387963, 0.030768681, 0.013442383, 0.021084113, -0.030163396, 0.0043883203, -0.077577434, -0.0028656488, 0.019230427, -0.047741897, 0.00023860703, 0.0013421891, -0.0061600413, -0.021298485, -0.036972858, 0.040755894, 0.030188616, -0.010743818, 0.025459824, -0.07283603, -0.021702008, 0.012597506, 0.0042401515, 0.0010970801, 0.016910166, 0.0069229533, -0.013972008, -0.013328892, 0.0075030187, -0.02607772, -0.031348746, 0.0022934647, -0.02819622, 0.04910379, 0.0011049614, -0.009041453, -0.050617006, 0.005655637, 0.008612709, 0.014262041, -0.02197943, -0.001692908, 0.024551895, 0.045169435, 0.008852301, 0.01143107, 0.027187409, 0.10784171, 0.0007778865, -0.014753835, 0.027187409, 0.004656285], [0.010355329, 0.018373888, -0.010491739, 0.04967711, 0.001801507, 0.037530653, -0.013463113, 0.055607997, 0.0083091725, 0.0040893466, -0.043627605, 0.0010549566, -0.022228964, -0.022739021, 0.014257852, 0.052856065, -0.05736354, 0.03382978, -0.03897779, -0.018895807, 0.013724073, -0.03390095, -0.08459817, 0.031884447, 0.0153372735, -0.017401222, 0.00615033, -0.006500252, 0.016748825, -0.00488112, 0.006179984, 0.025882391, 0.07790813, -0.010657804, 0.0167251, -0.042227916, 0.006719695, 0.005643239, -0.035466705, 0.0033212968, -0.03250126, 0.010254503, -0.027329527, -0.027709104, 0.017614735, -0.022169655, -0.020449698, -0.017496116, -0.027898893, -0.027495593, -0.014245991, -0.017745214, -0.0069569303, -0.027993787, -0.04232281, 0.0044956123, 0.061396543, -0.022110347, 0.035727665, -0.031172741, 0.007366162, 0.028254746, 0.039096408, -0.0334502, 0.04239398, 0.017840108, -0.005236973, 0.009341147, 0.030176353, 0.012644651, 0.013024228, 0.024553873, -0.023237215, -0.00195571, -0.018231547, -0.079806015, 0.08013815, 0.034802444, -0.027234633, -0.010479878, 0.02607218, -0.059119083, -0.02406754, 0.00198833, 0.0080066975, -0.056794174, 0.037981402, -0.12355224, -0.0009133566, 0.0064883903, 0.009103912, 0.023996368, 0.032003067, -0.0030929577, -0.03890662, -0.008765851, 0.032406367, 0.0006253379, 0.007039963, -0.0097147925, -0.027258357, -0.055655442, -0.046379536, -0.08018559, 0.038218636, 0.049772006, 0.037151076, -0.036344476, -0.008902261, 0.0302238, 0.02614335, 0.002765276, -0.04438676, 0.04272611, -0.025289303, 0.04747082, -0.03558532, -0.08564201, -0.03015263, -0.0013433459, -0.038598213, -0.049534768, 0.063294426, 0.01998709, 0.0011913669, 0.046047408, 0.04165855, 0.024245465, -0.010782353, 0.015254241, -0.02647548, 0.031172741, 0.014459503, 0.005838958, 0.06106441, 0.0061206752, 0.044837505, 0.016392972, -0.024909725, 0.021161405, -0.044078354, -0.01323774, -0.01952448, 0.029440923, -0.007449194, -0.017152125, -0.011221238, -0.048016462, -0.023083013, -0.013166569, -0.025526538, 9.443084e-05, 0.0043977527, 0.025621431, 0.03095923, -0.03449404, 0.036676604, 0.051574994, -0.039072685, 0.04085195, 0.0228695, -0.06932021, 0.024435254, 0.036961287, -0.002105465, -0.08953267, 0.0375781, -0.02948837, -0.035727665, 0.010005406, 0.030128906, -0.03382978, 0.019239798, 0.011120413, -0.050388817, 0.048728168, 0.019287245, 0.055560548, -0.054991186, -0.041065462, -0.03738831, 0.06637849, 0.022098485, -0.04787412, 0.0017169918, 0.025028342, 0.029369753, -0.0015983741, -0.009886788, -0.07420726, 0.020675072, 0.0054386235, 0.0019571928, -0.021968005, -0.035253193, -0.044078354, 0.0090446025, -0.032714773, -0.005812269, -0.0224662, -0.02574005, -0.023450727, -0.017080955, -0.02406754, -0.057031408, 0.03603607, 0.016464142, -0.042156745, 0.027092291, -0.016748825, 0.043295477, 0.02226455, -0.013498698, -0.01544403, -0.009530935, 0.00058641646, -0.045169637, 0.018943254, 0.036202133, -0.0719298, 0.07169256, -0.011790603, 0.038669385, -0.007947389, 0.008979363, 0.03890662, 0.007828771, 0.024221743, 0.003905489, 0.002025398, 0.028919006, -0.045952514, -0.013569869, 0.035395533, -0.057600774, -0.01170164, -0.013581731, -0.008647233, 0.05209691, -0.012680236, 0.020686934, 0.051005628, -0.021576567, -0.015491477, 0.026997397, 0.046687942, -0.023628654, 0.023355832, -0.013558008, -0.013320772, 0.020509006, 0.026167074, 0.06680551, 0.0066900407, 0.0056936517, 0.05522842, -0.013522422, -0.020580178, -0.027851446, 0.039357368, -0.046118576, 0.038218636, -0.010723044, 0.08047027, -0.035893727, -0.043414094, 0.047969013, -0.042014405, -0.06386379, -0.036534265, 0.052476488, -0.045359425, 0.0045845755, 0.021588428, 0.03729342, -0.022857638, 0.042488873, -0.00085182366, -0.017816385, 0.07050639, 0.021778217, 0.013249601, -0.002313046, -0.013154707, 0.03871683, 0.037672993, 0.008386274, -0.048040185, -0.015147486, 0.017282605, -0.0055513103, -0.010610357, 0.0453357, 0.027471868, 0.05356777, -0.003852111, -0.012276936, 0.0028127232, -0.04934498, 0.011458473, 0.012288798, 0.0074373325, -0.035087127, -0.03684267, 0.0091454275, 0.0019690546, -0.003777975, 0.10390914, 0.020841137, -0.013119122, 0.047020074, 0.012573481, -0.024292912, -0.064622946, 0.039428536, -0.03235892, 0.014613706, 0.03938109, 0.057648223, -0.046450708, -0.02366424, -0.02974933, -0.097741015, 0.023889612, 0.045074742, -0.0110017955, -0.038598213, 0.006399427, -0.052523937, 0.0023011842, -0.049629662, -0.037222248, 0.0026303483, -0.017223297, -0.03938109, -0.089627564, -0.008060075, 0.0037127354, 0.020900445, 0.008273588, -0.014435779, 0.023687962, -0.024553873, -0.046094853, -0.01724702, 0.016416695, 0.016274353, 0.030318694, 0.027305804, -0.00037494325, 0.0013515009, 0.038621936, 0.0522867, 0.017519841, -0.006974723, 0.024767384, -0.015384721, -0.027519315, 0.0021173267, 0.008949708, 0.04789784, -0.028942728, 0.044623993, 0.046189748, 0.01891953, -0.06675807, -0.02915624, -0.025289303, 0.014495088, 0.04666422, -0.055987574, 0.038337253, -0.017401222, -0.035015956, -0.0025295233, -0.025289303, 0.038360976, -0.0019097456, -0.031504873, -0.01437647, -0.011927014, -0.03169466, -0.008042282, 0.015396583, -0.021896835, 0.029108793, -0.054706503, -0.016819995, 0.043342922, -0.011660124, 0.024031954, 0.02460132, -0.021303747, 0.009269976, 0.04044865, 0.04673539, -0.024909725, 0.020366667, 0.039428536, 0.031386252, -0.01417482, -0.0052873855, -0.030081458, -0.02794634, 0.059546106, -0.038954064, 0.012739546, 0.00869468, 0.04085195, 0.062203143, 0.024055678, 0.04158738, -0.018658571, -0.00408045, 0.017887555, 0.016132012, -0.061159305, 0.03893034, -0.022359444, -0.024233604, 0.030911783, -0.06875084, -0.04118408, 0.044315588, -0.03055593, 0.07406492, -0.045762725, 0.029915394, -0.006612939, -0.05537076, -0.044457927, 0.0030455105, 0.024435254, 0.016867442, 0.005678824, -0.06599891, -0.04398346, -0.03430425, 0.01912118, 0.04414952, -0.009382663, -0.023711687, 0.02647548, 0.0019482963, -0.048301145, -0.00039699874, -0.067232534, 0.0043651327, 0.061491437, -0.014969558, -0.04519336, -0.035348088, -0.026167074, -0.004199068, 0.065904014, -0.020675072, 0.0047980878, -0.012846301, 0.016926752, -0.06604636, 0.046237197, 0.008564201, 0.058265034, -0.00021443864, 0.01966682, -0.01450695, -0.012834439, 0.026499202, -0.00015420307, 0.012253213, 0.011612677, -0.013913861, -0.05589268, 0.019737992, -0.017935002, -0.03437542, -0.027258357, -0.006340118, 0.030389866, -0.052002016, -0.023427004, -0.05945121, 0.0069332067, 0.07387513, 0.015728712, 0.019227935, -0.003603014, 0.034185633, 0.033924673, 0.010260435, 0.018943254, 0.0429159, 0.022964394, -0.006506183, -0.0037394243, -0.039096408, -0.03885917, -0.035348088, 0.038028847, -0.021968005, 0.021778217, 0.04386484, 0.051100522, 0.04566783, -0.019097457, -0.014044341, -0.007117064, -0.029037623, 0.035276916, -0.06903552, -0.01129834, -0.02406754, -0.004709124, 0.019773576, -0.03250126, -4.8049453e-05, -0.0018667467, 0.010912832, 0.042702388, 0.027851446, 0.015194933, -0.018694155, -0.006974723, -0.024008231, -0.019085594, -0.012644651, 0.011927014, -0.011155998, -0.003448811, -0.0064053577, -0.01905001, -0.012656513, -8.41908e-05, 0.017294466, 0.026688991, -0.02842081, 0.036012344, 0.041278973, -0.028847834, 0.01644042, -0.015088176, 0.07482407, -0.0032145407, -0.00215736, -0.01805362, 0.030271247, 0.032952007, 0.02386589, -0.01645228, 0.02989167, -0.08445583, 0.032382645, -0.005370418, 0.0355616, -0.004285066, -0.0011431784, -0.046687942, -0.024387807, 0.016547175, -0.0054060034, 0.010592564, -0.0003465862, 0.054991186, 0.07743366, -0.017519841, -0.03769672, 0.03563277, 0.05489629, -0.0001389125, 0.027970063, 0.032406367, 0.040424924, -0.0010616288, -0.012158318, -0.019536342, 0.07487152, 0.020817414, -0.0506735, -0.008765851, -0.047257308, -0.0063757035, 0.0011617125, 0.0087777125, -0.032809667, -0.008724335, -0.017519841, -0.0053051785, -0.041943233, -0.035466705, 0.00983341, -0.003463638, 0.023023704, 0.008653164, 0.037554376, 0.012431139, 0.012419278, 0.0032797805, 0.010207056, 0.021576567, -0.008166831, 0.0036563918, 0.023996368, -0.0057855803, -0.0032056444, -0.037198525, 0.01303609, 0.040757056, -0.01952448, 0.00095709687, 0.052666277, -0.04981945, -0.0042168605, 0.0032323333, 0.011790603, 0.011778741, -0.006897622, 0.015823606, 0.046830285, -0.0021810837, 0.044007182, 0.01891953, 0.00067315565, 0.082747735, -0.023687962, -0.0031641282, 0.01884836, -0.006132537, 0.0153372735, -0.022822054, 0.007947389, 0.0049819453, -0.022774607, -0.0167251, -0.0032086098, 0.03684267, 0.056604385, 0.003949971, 0.043841116, -0.031196466, 0.027044844, 0.028658045, 0.044623993, 0.019536342, 0.047114965, -0.041563656, -0.016215045, 0.04305824, 0.014234128, 0.022347583, -0.014151096, -0.00032934957, 0.032975733, -0.0036801153, 0.03390095, 0.01965496, -0.003671219, -0.007561881, 0.030911783, -0.045430593, 0.016025256, -0.035751387, -0.06514486, 0.009910512, 0.025668878, -0.01945331, -0.021102097, -0.022786468, -0.008190555, -0.017614735, 0.036012344, 0.06467039, -0.023450727, -0.036320753, -0.033806056, -0.011019588, -0.0031255775, -0.020081984, 0.03826608, -0.015360997, -0.0038728693, -0.024482701, -0.05902419, -0.027732827, -0.022822054, -0.005764822, -0.005797442, -0.061823566, -0.0040152106, -0.0064053577, 0.014364609, 0.013605455, -0.019844748, -0.005311109, 0.049724557, 0.0147679085, -0.021956144, -0.0128107155, 0.0041545862, 0.018753465, -0.0019230901, -0.015823606, -0.002808275, -0.007882149, 0.00073320593, 0.0016384076, 0.028871559, -0.015372859, -0.014257852, -0.062345482, -0.020959755, 0.018551815, -0.0006746384, 0.020912308, 0.0661887, 0.037364587, 0.0045578866, 0.006005023, -0.00247318, -0.07226193, 0.016701378, -0.011422888, -0.041943233, -0.013949446, -0.043034516, 0.0025977285, -0.03537181, 0.034446593, -0.027400699, 0.0425126, -0.0063816346, 0.00025743755, -0.0330469, 0.01630994, -0.0007198614, 0.016345525, -0.010177402, -0.030650824, -0.0043087895, 0.019880334, 0.03302318, 0.00223891, -0.03356882, -0.028634323, -0.02507579, 7.149499e-05, -0.0057470296, 0.049534768, -0.017638458, -0.00023630878, -0.010319743, -0.018041758, 0.002738587, 0.026285691, -0.027803998, -0.0019527446, 0.04353271, 0.027566763, -0.0064883903, 0.030935507, -0.0058804746, -0.027756551, -0.010942486, -0.007466987, -0.0025458334, 0.018504368, 0.03885917, 0.0075678118, -0.03368744, 0.0153372735, 0.03511085, 0.012348107, 0.025906114, -0.0047328477, 0.011707571, 0.029179964, 0.00909205, -0.032192856, -0.039428536, -0.033663716, -0.012834439, 0.018753465, -0.033663716, 0.017080955, -0.045240805, 0.036724053, -0.013415666, 0.013071675, -0.015681265, -0.02005826, -0.022478063, 0.017828247, 0.005483105, 0.03643937, 0.018136652, 0.041136634, -0.017080955, 0.049250085, -0.0005645463, 0.037981402, -0.00010740466, 0.027305804, -0.027353251, 0.0046913316, 0.0037928023, 0.016903028, -0.044078354, -0.03518202, -0.035609044, -0.036463093, 0.010147748, 0.00982748, 0.0038995582, -0.0017362671, 0.045027293, -0.018943254, 0.03724597, 0.019963365, 0.0053911763, -0.010663735, 0.0055720685, -0.0026777955, -0.057031408, 0.021315608, -0.010325674, 0.04367505, 0.032074235, 0.009554659, -0.011980392, -0.024909725, -0.028112404, -0.023901474, -0.02533675, -0.04626092, 0.018278994, 0.031077849, 0.019144904, -0.020852998, 0.049866896, 0.019358415, 0.0070992718, 0.0024479737, -0.010556979, -0.015384721, -0.006280809, -0.03416191, 0.029844223, -0.025028342, 0.019417724, 0.00058901124, 0.027566763, 0.048633274, 0.022501785, -0.008635372, -0.005990196, -0.035276916, -0.022430615, -0.0686085, -0.006310464, -0.017555425, 0.00061532954, 0.026356861, 0.025052067, 0.009530935, -0.032975733, 0.003724597, -0.022561094, 0.008012628, -0.051859677, -0.00835662, -0.05081584, -0.044884954, -0.003958867, 0.041634828, 0.04545432, 0.029061347, -0.025194408, 0.0131784305, -0.052523937, 0.01671324, -0.0028097578, -0.0043295473, -0.0036623226, -0.04621347, -0.04500357, 0.006197777, -0.045122188, 0.0056877206, 0.0054534506, -0.03451776, 0.007247544, -0.004465958, -0.0069509996, 0.009335216, 0.011055173, 0.013047951, 0.012988643, -0.023118598, -0.00038736107, -0.025597708, 0.031528596, 0.018136652, 0.0038669384, -0.00010314183, -0.0224662, 0.014649291, -0.0019008493, 0.011078897, 0.029796775, -0.016096428, -0.022003591, -0.008718404, 0.036273304, 0.057885457, -0.024114987, 0.02728208, 0.0039143856, -0.027139738, -0.003303504, 0.030935507, -0.05086329, 0.002253737, 0.03055593, -0.006986585, 0.052476488, 0.00143824, -7.9047604e-05, 0.013225878, 0.0016769583, 0.03382978, -0.022430615, 0.010396845, 0.022584818, 0.028539428, 0.0039825905, -0.008137177, -0.026095903, -0.038882896, 0.0025695567, -0.033877227, -0.011707571, 0.04479006, 0.07601025, -0.015432168, 0.017804522, 0.002003157, -0.02413871, -0.035442982, 0.03930992, 0.0039618327, -0.024031954, -0.0041308627, 0.03261988, -0.033616267, -0.0051124245, 0.0081609, 0.021564705, 0.0047328477, 0.042204194, 0.031837, 0.030816888, 0.020212462, 0.01397317, 0.009993545, 0.007336507, 0.023806581, -0.033331584, 0.022549232, -0.027661657, -0.004006314, 0.02199173, -0.0506735, 0.0033865364, 0.012371831, 0.0060257814, -0.019607512, 0.030745719, 0.011067036, -0.012265074, -0.0421093, 0.004709124, 0.022513647, -0.067564666, -0.013747796, 0.01170164, -0.030366141, -0.004540094, -0.020105707, 0.044291865, 0.022110347, 0.008848883, 0.042939622, -0.037625547, 0.012929333, 0.038194913, -0.026380586, 0.00095190736, 0.010218918, -0.022501785, -0.025431644, -0.009269976, -0.003724597, -0.02072252, -0.016191322, 0.01945331, -0.041160356, 0.03850332, -0.0030603376, 0.0100825075, -0.049582217, 0.0018548849, 0.001119455, -0.0040092794, 0.009584313, -9.141906e-05, -0.009720724, 0.051053077, 0.052239254, -0.010853523, 0.015455891, 0.111121096, -0.0090446025, 0.014756047, -0.020900445, -0.025597708], [-0.0098037515, -0.010194091, -0.01183465, 0.022639709, 0.027697153, 0.02396347, -0.028986974, 0.06906186, 0.026429964, 0.03706531, -0.008412105, -0.0009737281, -0.0062737223, 0.0142672025, 0.008027423, 0.011302883, -0.030751988, 0.022424739, -0.029371655, -0.0383325, -0.004800048, -0.0152628515, -0.059105366, 0.008966501, -0.020116642, -0.0076653683, 0.010805058, 0.030525703, 0.016213244, -0.00018703782, 0.019211506, 0.025479572, 0.034870356, -0.031928662, -0.019550933, 0.0021539403, 0.022085313, 0.06354053, -0.01684684, -0.020603152, -0.032381233, 0.0419983, -0.012898184, -0.025434315, -0.012920813, -0.009922551, 0.0045765927, -0.015059196, 0.041794643, -0.055982646, 0.00026800504, -0.02380507, 0.04088951, -0.014097489, -0.03394259, -0.012705843, 0.0182498, -0.0713247, -0.0005738419, 0.019901672, 0.0056259846, 0.007003488, 0.049918238, 0.013995661, 0.007529598, 0.0046784203, 0.01647347, -0.0010854558, 0.031249812, 0.09128294, 0.007885995, 0.0100074075, -0.016167987, -0.02706356, 0.008270678, -0.08879382, 0.06498875, -0.0014446815, -0.0066923476, -0.03453093, -0.016722383, -0.04819848, -0.010641002, 0.03394259, 0.012196705, -0.04973721, -0.0066357767, -0.11341351, -0.023171475, -0.005077246, 0.012604016, 0.0058268113, 0.011472596, 0.03550395, -0.039531805, 0.028760688, 0.064626694, -0.00059258105, -0.053900834, -0.038694553, -0.035209782, -0.061503977, -0.017220208, -0.0546702, 0.0108333435, 0.05032555, 0.073451765, -0.023465645, 0.009232385, -0.106443964, 0.012038305, 0.0039401692, 0.039916486, 0.050370805, -0.0439896, 0.030050507, 0.006963888, -0.066617996, -0.035707604, 0.062318597, -0.07892784, -0.05086863, 0.046320323, 0.04378594, -0.0024085096, 0.026226308, -0.01887208, 0.032041807, 0.0020902979, 0.00061450235, 0.022334225, 0.031136671, 0.0019403847, 0.02021847, 0.07652923, -0.011359454, 0.013135782, -0.0076653683, -0.058245488, -0.0007835081, -0.06340476, -0.010544832, -0.0011186912, 0.043197606, 0.029145371, 0.0071958294, -0.001895128, -0.0122759035, -0.06797569, 0.024167124, -0.04061797, -0.043220233, 0.006952574, -0.029100114, 0.00037973275, -0.039961744, 0.033195853, 0.045030504, 0.0058494397, 0.025479572, 0.03326374, -0.048017453, -0.0032613173, 0.025524829, 0.004095739, -0.06639171, 0.00046069996, -0.006952574, -0.02234554, 0.03523241, -0.004958447, 0.026362078, 0.01903048, -0.05978422, -0.0049923896, 0.001354875, 0.043808572, 0.018272428, -0.027832925, -0.053176727, -0.046094038, 0.040120143, 0.029371655, -0.017525692, 0.030593589, 0.03437253, -0.025208032, -0.022255026, 0.014244574, -0.049691953, 0.013701493, -0.0030604904, -0.0123437885, -0.029416913, 0.013045269, -0.012117505, -0.0022006114, -0.031498723, 0.00834422, 0.030480446, -0.018068772, -0.044849478, 0.008417763, 0.0069978307, -0.03903398, -0.008994787, 0.008728903, -0.024981746, 0.036454342, -0.003764799, 0.042631894, -0.0034027447, 0.008627075, -0.03758576, 0.008762846, -0.008887302, -0.07277291, -0.005427986, 0.0011540481, -0.032109693, -0.019607503, -0.038966093, -0.004234338, 0.0048339907, 0.006256751, 0.01636033, 0.023646671, -0.015489136, 0.029620567, -0.0023024392, -0.01938122, -0.0109578, 0.0027210645, 0.036658, -0.04111579, -0.034417786, 0.018396884, -0.036952168, 0.04061797, 0.017604891, 0.049239386, 0.036386456, -0.03957706, -0.0015429736, 0.033286367, 0.04661449, 0.031023528, 0.026701504, -0.015670164, 0.014154061, 0.002095955, 0.017604891, -0.031792894, 0.026226308, 0.022549195, 0.04792694, -0.0051988736, -0.02185903, 0.023397759, 0.012366418, -0.0271767, 0.016134044, -0.027538756, 0.034327272, 0.018068772, -0.043921713, 0.016880782, -0.037653647, -0.05580162, -0.05213582, 0.081416965, -0.035141896, -0.013735435, -0.007161887, 0.008451705, -0.022232397, 0.053719807, 0.03946392, -0.03197392, 0.048379507, 0.0046529635, -0.0036318572, 0.04973721, 0.030276792, 0.018080087, -0.020297669, 0.039667577, -0.040278543, -0.030616216, 0.015409936, -0.008825074, 0.011365111, 0.046976548, -0.0047717625, 0.04842476, 0.0380157, 0.028127093, -0.001823, -0.04815322, 0.0154665075, -0.03930552, -0.013271553, -0.0331506, -0.005396872, 0.003897741, 0.050642345, 0.023737185, 0.038513526, 0.008270678, -0.020376869, 0.037427362, -0.006013496, -0.024008727, -0.029416913, 0.020716295, -0.027968695, 0.015319423, 0.014221946, 0.04607141, 0.009747181, 0.011653623, -0.024121867, -0.08553533, 0.04229247, 0.058426514, 0.025773741, 0.0054987, -0.061051406, -0.006658405, 0.02735773, -0.05086863, 0.01957356, -0.029394284, -0.0021341403, -0.042631894, -0.08449443, -0.012015677, -0.017220208, 0.032630146, -0.069107115, -0.025909511, 0.0041325106, -0.0164961, -0.059965245, -0.006268065, -0.0025980226, 0.0109182, 0.042903434, 0.02971108, 0.0029982622, 0.0012424403, 0.009566153, 0.034146246, -0.0025145803, 0.02509489, 0.0035668006, -0.08028554, -0.033173226, -0.031046156, 0.026226308, 0.036250688, -0.107982695, 0.058336, 0.019607503, 0.015862504, -0.061232433, -0.037449993, -0.015455193, -0.014301145, 0.016812896, -0.06317848, 0.033490025, -0.009175814, -0.062228084, -0.0122759035, -0.014470858, 0.038785066, -0.030118393, -0.019403849, 0.01957356, -0.015783304, -0.017050495, -0.0017197579, -0.017276779, 0.008915587, -0.0013371967, -0.0182498, -0.0062341224, -0.037563134, 0.036409087, 0.0025626656, 0.008689303, -0.011563109, 0.0012424403, 0.015647534, 0.044849478, -0.053176727, 0.014029604, 0.036861654, 0.04084425, -0.05073286, -0.042880807, 0.004814191, 0.013113154, 0.06820198, -0.07471896, 0.00789731, -0.01846477, -0.0016547013, 0.05521328, -0.003991083, 0.004469108, -0.022764165, -0.009769809, 0.029484797, 0.019550933, 0.001854114, 0.026271565, -0.04806271, -0.016054846, 0.0053742435, -0.03364842, -0.010788087, 0.05000875, -0.0038609698, 0.027923439, -0.02692779, 0.036703255, -0.017423863, -0.022119256, -0.011127513, -0.022560509, 0.023375131, -0.015138396, -0.047972195, -0.07082687, 0.0064660637, -0.03158924, -0.024053983, 0.04602615, 0.010516546, -0.03154398, 0.012807671, -0.01892865, -0.004299395, -0.0007566369, -0.040708482, 0.035413437, 0.043107092, -0.0040250258, -0.031068785, -0.012434303, -0.08843176, 0.0062058372, 0.043604914, -0.011546138, -0.012705843, 0.029371655, 0.0034734586, -0.062997445, 0.032064434, -0.018589227, 0.073316, 0.017718032, 0.006081381, -0.055439565, -0.03310534, 0.036703255, 0.014346402, 0.044917364, -0.02760664, -0.006714976, -0.01331681, 0.032471746, 0.009328555, -0.030616216, -0.061232433, 0.013214982, -0.03493824, 0.00812925, -0.02407661, -0.058245488, 0.023986097, 0.054489173, -0.037223708, 0.0017367293, 0.015941704, 0.015828561, 0.0603273, -0.010465632, 0.014991311, -0.0124116745, 0.051049657, 0.0020549411, -0.0005646491, -0.051049657, -0.022549195, -0.004638821, 0.014459544, -0.031091413, 0.007637083, 0.07254663, -0.014210631, 0.025705855, 0.0064547495, -0.008310278, -0.021451717, -0.02930377, 0.05046132, -0.0153986225, -0.0033518309, 0.010810715, -0.020275041, 0.031521354, -0.004531336, -0.013475209, 0.016914725, -0.0052441303, -0.008581818, 0.004460622, -0.017186265, -0.023782441, -0.00200827, -0.035707604, -0.01066363, -0.021519603, 0.0052101878, -0.0012728472, -0.030480446, -0.02719933, -0.02466495, -0.004285252, 0.025864255, -0.020308984, 0.0435144, -0.00055439566, 0.0108786, 0.018691054, -0.02620368, -0.017016552, -0.03000525, 0.033082712, -0.015953017, -0.009271985, -0.027946066, 0.040482197, 0.02220977, -0.013294182, -0.004361623, 0.03410099, -0.076619744, 0.023510901, -0.004336166, 0.01585119, 0.007806796, -0.0363412, -0.02450655, -0.039848603, -0.018939966, -0.008016109, 0.032154948, -0.019449105, 0.068020955, 0.040007, -0.01600959, -0.061458718, 0.014142746, -0.0056825555, -0.0015146881, 0.056887783, 0.07992349, 0.030933015, 0.022583136, -0.0057249838, -0.004587907, 0.06159449, 0.039418664, -0.047791168, -0.013690178, -0.01660924, -0.022492623, 0.010443004, 0.031928662, -0.04815322, 0.0064717205, -0.015568336, -0.020886008, -0.019980872, 0.012140133, 0.004686906, 0.0069978307, 0.01682421, 0.041658875, 0.0044945646, 0.016914725, 0.018781567, 0.016269816, 0.025185402, 0.02971108, 0.015421251, -0.08865805, -0.006092695, 0.024257638, 0.021745887, -0.011812022, -0.021168863, 0.021610117, 0.008887302, -0.008632733, 0.024981746, -0.03407836, 0.0037676275, 0.0236693, -0.021304633, 0.013181039, -0.046252437, 0.015104453, 0.049510926, 0.008728903, 0.039554432, 0.014482172, 0.021304633, 0.027289843, -0.02536643, -0.003589429, 0.04638821, -0.021802457, 0.03523241, -0.011823336, -0.036024403, -0.010889915, -0.012705843, -0.02056921, -0.027402986, 0.0023547672, 0.014380344, 0.010550489, 0.025162775, -0.01725415, 0.030684102, 0.0016334872, 0.01204962, 0.005396872, 0.09141871, -0.03224546, -0.00069617666, 0.045980897, -0.011597052, -0.008581818, -0.02078418, -0.018476084, -0.0066527477, 0.009266327, 0.06173026, -0.0054958714, -0.024189753, -0.00939644, 0.019290706, -0.076755516, 0.01838557, -0.012196705, -0.011812022, -0.0038326841, -0.008604446, 0.01655267, 0.004675592, -0.021689316, -0.021587487, -0.0061775516, 0.052090563, 0.06761364, -0.067477874, -0.07938041, -0.015477821, -0.034870356, -0.025411686, -0.0019870559, 0.057249837, -0.022413425, -0.007999137, -0.03828724, -0.055303793, -0.0071958294, 0.0027677354, -0.006420807, 0.0077389106, -0.06458144, 0.02021847, -0.028081836, 0.0018003716, 0.029281141, -0.03423676, -0.019946929, 0.054534428, -0.0004911069, 0.035141896, 0.020037442, -0.05734035, 0.017966945, 0.0020690837, -0.005396872, -0.06286168, -0.040074885, 0.0054138433, 0.016586613, 0.0124795595, -0.019120993, -0.018962594, -0.10445267, -0.05000875, 0.045980897, -0.040504824, -0.0012671901, 0.07227509, 0.012060934, 0.036997423, -0.049510926, -0.011116198, -0.02437078, 0.013226297, -0.05367455, -0.03892084, -0.004273938, -0.017797232, 0.0014390245, -0.047021803, 0.03720108, -0.016563984, 0.028127093, -0.024778092, 0.05200005, -0.032698028, -0.020987835, -0.009735866, 0.0098376945, 0.0032669744, -0.036816396, 0.014154061, -0.024959119, 0.03186078, 0.014900797, -0.040074885, -0.059557933, -0.0027055074, 0.0025442801, 0.010250662, 0.023375131, -0.017457806, 0.0032726314, -0.018340314, 0.01345258, -0.050054006, 0.012366418, 0.01671107, -0.00019817523, 0.04595827, 0.0075126267, -0.031453468, 0.029484797, -0.0009213999, 0.014108804, 0.023284618, 0.0071336012, -0.0013584108, 0.013633607, -0.0064830347, 0.008593133, -0.044872105, 0.02706356, 0.042088814, 0.011229341, 0.037133195, 0.011800707, -0.009967808, 0.010839, -0.03129507, 0.023001762, -0.0022868821, -0.028941715, -0.0006767304, 0.0055071856, 0.0035668006, 0.015828561, -0.029643197, 0.036567483, 0.008067022, -0.012785043, -0.026022654, 0.017152322, -0.0108786, 0.006290694, 0.04002963, 0.008479991, 0.03539081, 0.042337727, -0.019607503, 0.038083587, 0.0063981786, 0.028059209, 0.040074885, 0.03310534, -0.030254163, 0.006556577, 0.047293343, -0.015658848, -0.0063472646, -0.037698906, 0.009820723, -0.02633945, 0.052633643, -0.009769809, 0.0015769162, -0.028919088, 0.0057193264, -0.029349027, 0.041455217, 0.0093907835, 0.00473782, 0.022684965, -0.017559635, 0.0043870797, -0.012422988, 0.023986097, -0.012966069, 0.042722408, 0.04905836, 0.008496962, -0.01951699, -0.002822892, -0.025049632, -0.028421262, -0.02973371, -0.037449993, 0.0326754, 0.023465645, 0.0044068797, -0.03550395, 0.043378633, 0.041930415, 0.0035243724, -0.035368178, 0.004865105, -0.032177575, 0.014561372, -0.059965245, 0.022356853, 0.010952143, 0.00012233475, 0.030978272, 0.05340301, 0.03636383, 0.037970446, 0.03887558, 0.01563622, -0.056706756, 0.010963457, -0.03957706, 0.020399498, 0.0030859471, 0.0032556602, 0.028421262, 0.003363145, -0.01577199, -0.011466939, -0.01932465, -0.008666675, -0.013712807, -0.044012226, -0.00061839155, 0.00037407564, -0.03199655, -0.029530054, 0.0009645353, 0.018114028, 0.0123777315, -0.002667322, 0.011913849, -0.05381032, -0.0017834003, -0.005804183, 0.028059209, -0.027538756, -0.04002963, -0.012830299, 0.018476084, -0.0182498, -0.015228909, -0.0092889555, -0.04088951, -0.012219333, 0.00047590342, -0.011959107, 0.0218364, -0.02275285, 0.01910968, 0.04960144, -0.044170626, -0.023420388, -0.041817274, 0.030955642, -0.0050687604, -0.00795388, 0.0011830407, -0.010143178, 0.019335963, -0.005572242, -0.03439516, 0.006132295, -0.036228057, 0.003926026, -0.018589227, 0.02437078, 0.016858153, -0.035684977, 0.020195842, -0.018408198, 0.012875556, 0.0089778155, 0.02132726, -0.020376869, -0.0055241566, 0.024845976, -0.0152967945, 0.024008727, -0.008825074, -0.002930377, -0.0024792235, 0.007518284, 0.05195479, -0.043152347, -0.017899059, 0.026973046, 0.014663199, 0.0013782106, -0.014561372, -0.038355127, 0.023986097, 0.03339951, -0.042767666, -0.019528303, 0.051819023, 0.041794643, -0.03425939, -0.0036827712, 0.051094912, -0.03367105, -0.010776773, 0.036590114, -0.014323774, -0.010222377, -0.002456595, 0.04792694, -0.018362941, 0.022888621, 0.02943954, 0.023714557, -0.016167987, 0.041749388, 0.008315935, 0.01924545, 0.007863367, -0.021157548, -0.025456943, 0.027561383, 0.028330749, -0.011812022, 0.0386493, -0.013135782, -0.0035300294, 0.015568336, -0.02493649, 0.0077671963, 0.0066527477, 0.012875556, -0.03394259, -0.0020153413, 0.00198847, -0.022492623, -0.03554921, 0.013690178, 0.009792438, -0.065305546, 0.004701049, 0.016269816, -0.05412712, -0.028398635, -0.00947564, 0.0035498294, -0.026656248, 0.031023528, 0.006556577, -0.025140146, 0.002930377, 0.045573585, -0.027674526, -0.0043842513, 0.015557021, 0.0021808115, 0.006992174, -0.01550045, -0.012875556, 0.04905836, -0.035413437, 0.07512627, -0.04242824, 0.04806271, 0.0067036618, -0.003332031, -0.04693129, 0.032811172, -0.015557021, 0.017853802, -0.025570085, -0.006675376, 0.009532211, 0.06435515, 0.045392558, -0.035752863, 0.027131444, 0.098297745, 0.014312459, -0.014561372, 0.03287906, 0.010245006], [-0.013466202, -0.039265934, -0.030582123, 0.013566884, -0.0032941853, -0.008809665, -0.041380253, 0.05031577, 0.028014734, 0.029323598, -0.044098664, 0.038233947, 0.0034294766, -0.029323598, -0.01915473, 0.041833322, -0.041934006, -0.0032045157, -0.042110197, -0.064335726, -0.0030314685, -0.046238154, -0.0652922, 0.017657086, -0.00020529666, -0.029776666, -0.009973799, 0.009124296, -0.024729988, 0.06312754, 0.012604114, 0.009143174, 0.016398562, -0.025560614, -0.013554298, -0.005808086, 0.022728935, 0.048830714, -0.025824903, -0.017720012, -0.041858494, 0.012805477, -0.032444738, -0.021470413, -0.04372111, 0.009168344, 0.018953364, 0.015316231, -0.011811243, -0.02992769, 0.013743077, 0.02033774, 0.0013324618, -0.012792892, 0.0015597827, -0.0071861693, 0.01817308, -0.016499244, 0.07571278, 0.013403276, 0.0019538577, 0.03843531, 0.023093907, -0.024075555, -0.0262528, -0.019028876, -0.03352707, 0.003583646, -0.00073073024, 0.058143787, 0.034961782, 0.016197197, 0.011647635, -0.029650815, -0.0021127465, -0.04329321, 0.10319893, 0.020727882, 0.027410643, -0.0379319, 0.04276463, -0.016524414, 0.002331415, -0.03053178, -0.0043167355, -0.0154546695, 0.047144294, -0.11538144, -0.011150518, 0.010370234, 0.005034094, -0.024453113, 0.025245983, 0.040927187, -0.0039265933, 0.006877831, 0.035591047, 0.0109113995, -0.018424785, -0.01704041, 0.004228639, 0.001503149, -0.065443225, -0.04435037, -0.016134271, 0.017078165, 0.0074504595, 0.0033539652, -0.028568484, -0.054921966, 0.028618826, -0.0566839, -0.013982196, 0.023849022, -0.019620381, 0.027335132, -0.048025258, -0.031865817, -0.052052535, -0.02678138, -0.08130062, -0.08316324, 0.065443225, 0.043746278, 0.020451007, 0.017480891, 0.007570019, 0.036673374, 0.009652875, -0.008199281, -0.026504505, 0.025950756, 0.035137977, 0.004942851, 0.09000961, 0.012868403, 0.056633558, -0.0039580567, -0.040247582, 0.024390187, -0.05024026, 0.0077399197, 0.0050498256, 0.03843531, -0.04273946, -0.0057420135, -0.027460983, -0.013239668, -0.03103519, -0.025875244, -0.045659233, -0.007418996, -0.0024163653, 0.016952312, 0.037680194, -0.025245983, 0.014598873, -0.0038101801, 0.0021442096, 0.0619697, 0.0021111732, -0.06458743, 0.004999485, 0.042965993, -0.007997917, -0.026580017, 0.013554298, -0.0071169506, -0.0019444189, 0.01521555, 0.020929247, -0.006364983, 0.03325019, 0.0061856434, 0.009256441, 0.02675621, 0.037227128, 0.01870166, 0.04533202, -0.023106493, 0.0026444725, 0.03790673, 0.052656624, -0.055677082, 0.03428218, 0.040977526, 0.013164156, 0.039744172, 0.011326712, -0.059200946, -0.0075826044, 0.02620246, -0.019947598, -0.015114868, 0.0046408055, -0.06977255, -0.047446337, -0.0039140084, -0.00076376647, 0.026806552, -0.002617729, -0.059502993, 0.029701157, -0.013227083, -0.0026916673, 0.03961832, 0.04012173, -0.0416823, 0.023030981, 0.03319985, 0.03841014, 0.05602947, 0.005213434, 0.035591047, -0.00776509, 0.029222917, -0.024855841, 0.008419522, -0.014535947, -0.025850074, 0.034483545, -0.026277972, -0.011502905, -0.003044054, -0.027888881, 0.04163196, 0.002922921, 0.039190423, -0.009243855, -0.015970664, 0.015492425, -0.06282549, -0.055727422, 0.019884672, -0.037831217, -0.0046408055, -0.031714793, -0.022074504, 0.054670263, 0.023861606, 0.0051599466, -0.005065557, -0.057892084, 0.010464624, 0.021961236, 0.037327807, 0.019909842, -0.0124279205, -0.042437416, -0.0073308996, 0.0202874, 0.013806003, 0.008086014, 0.016385976, -0.0029795545, 0.08316324, 0.019708479, -0.016537, -0.0060346206, 0.014661799, -0.03579241, 0.0619697, -0.032243375, 0.064990155, 0.0016691169, -0.0018201397, 0.026907234, -0.06967186, -0.037680194, -0.0236099, 0.04319253, -0.02776303, 0.019406432, 0.004665976, 0.04422452, 0.019431604, 0.0522539, 0.018047228, -0.037000593, 0.03574207, -0.013466202, 0.085227214, -0.005930792, -0.0039989585, -0.0126481615, -0.017720012, 0.007783968, -0.026831722, -0.03168962, 0.014586288, -0.0031588941, -0.012497139, 0.034810763, 0.009055077, 0.040247582, -0.003514427, -0.008620886, -0.003759839, -0.0326461, -0.023320442, -0.031186214, -0.009797606, -0.048704863, -0.01846254, 0.020765638, 0.058949243, 0.0065757856, 0.02937394, -0.04976202, -0.045684405, 0.050844353, -0.080042094, -0.049434803, -0.048704863, -0.0028065075, -0.044199347, 0.00858313, 0.056331515, 0.068715386, -0.023786096, -0.0039265933, -0.055324696, -0.12071758, 0.011314127, 0.04054963, -0.008734154, 0.014636629, -0.058395494, -0.049308952, -0.017392796, -0.044098664, -0.024427943, -0.023660243, -0.0014756188, -0.04384696, -0.048453156, -0.016763534, -0.03189099, 0.024654476, -0.058949243, 0.020463593, -0.012119582, -0.008803372, -0.025950756, -0.014624043, -0.018009473, -0.025900414, -0.008463571, 0.0055563813, 0.024629306, 0.0015409047, 0.01896595, -0.007897235, 0.010527549, 0.032268543, 0.0020718444, -0.011742025, -0.0663997, 0.013654981, 0.01901629, 0.06473845, -0.060157426, 0.05456958, 0.050617818, 0.014108049, -0.05980504, -0.009803899, 0.010452038, 0.021495583, 0.030380758, -0.065896295, 0.04012173, -0.031312067, -0.019884672, -0.048453156, -0.011742025, 0.035943434, 0.0030015786, -0.032973316, 0.020362912, -0.012868403, 0.019079218, -0.01189934, 0.011697976, 0.017732596, 0.010559012, -0.011949681, 0.05200219, 0.01975882, 0.007733627, -0.03735298, 0.06841334, 0.0044834903, 0.013277424, 0.048377644, 0.041883662, -0.035364512, 0.046666052, -0.0009092833, 0.028643996, -0.008715276, 0.019746235, -0.02300581, -0.008910347, 0.05356276, -0.035289, 0.025371835, -0.011219737, -0.0032060887, 0.025006862, 0.02348405, 0.047244973, 0.01920507, 0.0113392975, 0.01444785, 0.014586288, -0.014233901, 0.06388266, -0.0152407205, -0.0126418695, 0.05985538, -0.031916156, -0.007223925, 0.010615646, -0.04289048, 0.011880462, -0.0619697, 0.010540134, 0.013227083, -0.0098353615, -0.013038304, -0.02887053, -0.00855796, -0.0039454713, -0.008463571, -0.034055647, -0.04533202, -0.009728387, -0.03262093, 0.024503453, -0.011477735, -0.008476156, -0.009678046, 0.025220811, -0.022603083, 0.009829069, -0.039316274, -0.0056727948, 0.03752917, 0.010647109, 0.0018154202, -0.0072994367, -0.04377145, -0.009168344, 0.024339845, 0.008683813, 0.100228816, -0.02002311, 0.035314173, -0.097963475, -0.0083188405, 0.048377644, 0.06081186, -0.028568484, 0.022615667, -0.015995834, -0.0454327, 0.038384967, 0.014321998, 0.05507299, -0.024289504, 0.004209761, -0.045608893, 0.0491831, 0.012320946, -0.040776163, -0.018122738, 0.02192348, 0.023937117, -0.0041122255, -0.012352409, -0.016486658, -0.027033085, 0.0416823, 0.020161547, -0.060761515, 0.030556953, -0.0236099, 0.047370825, -0.0015841665, 0.014548533, 0.07314539, -0.02478033, 0.0070854877, 0.008948103, -0.036245476, -0.017392796, -0.040398605, -0.020929247, 0.021986406, 0.03423184, 0.017241772, 0.03581758, 0.037755705, 0.05024026, -0.03954281, -0.034357693, -0.023131663, 0.049208272, 0.028190928, -0.011603587, -0.016285295, -0.03898906, -0.010068188, -0.02295547, -0.046389177, 0.004492929, 0.038586333, 0.00068786176, -0.0034326229, 0.0021803922, -0.04007139, -0.059654016, -0.018714245, -0.05552606, -0.0032973317, -0.012767721, -0.012585236, -0.02050135, -0.025636125, -0.007456752, -0.019846916, 0.012484553, 0.016222369, 0.0043607843, -0.018726831, 0.019821746, 0.016813874, -0.02113061, 0.014334584, -0.021206122, 0.012409043, 0.004861047, 0.021583678, -0.049334124, 0.0525056, 0.048830714, -0.0040461533, -0.0031761988, -0.0023817557, -0.020677542, 0.01189934, 0.0113518825, 0.038762525, 0.0236099, -0.02298064, -0.035112806, -0.03622031, 0.012767721, -0.030179394, 0.017933961, -0.010634524, 0.08442176, 0.03357741, 0.0043607843, -0.06901743, -0.0028898846, -0.012723673, 0.0010217638, 0.022351379, 0.020992173, 0.027586836, -0.02488101, -0.035440024, 0.008853713, 0.064889476, -0.0122076785, -0.034408033, -0.010401697, -0.020702712, -0.032369226, -0.008834835, -0.0138941, -0.052656624, 0.0137304915, 0.016977483, -0.0034200377, -0.03740332, 0.0013647114, 0.024969107, 0.0029197747, 0.05200219, 0.01920507, -0.037126444, -0.022779277, 0.018512882, 0.0036339867, -0.013592054, 0.00030204566, 0.016134271, 0.02271635, -0.036522355, 0.019557456, 0.026605187, -0.014485606, -0.018361859, 0.014498191, -0.04477827, -0.0038699599, 0.023672828, -0.06957118, -0.01766967, 0.06363095, -0.0128746955, -0.01605876, -0.040851675, -0.027712688, 0.052555945, 0.021533338, 0.043242868, 0.04855384, 0.019293167, 0.043570086, -0.025220811, 0.01983433, -0.04387213, -0.0060094497, -0.024641892, -0.0020938686, -0.009080247, 0.025975926, -0.047949746, -0.02374834, -0.040197242, -0.0179843, -0.0039863735, 0.01788362, 0.043066677, -0.016222369, -0.0005073423, 0.028568484, 0.05391515, -0.033803944, 0.06040913, -0.03634616, -0.030305248, 0.023093907, -0.014926089, 0.044501394, -0.024000045, -0.025422176, 0.02990252, -0.020539105, 0.048503496, -0.0100618955, -0.02060203, 0.004653391, 0.048906226, -0.03526383, 0.0122139715, -0.025925586, -0.06760789, 0.014649214, 0.0069848057, 0.007702164, -0.0047509265, -0.05718731, -0.050491966, 0.00014787652, -0.0036182553, 0.05628117, -0.05396549, -0.05170015, -0.06363095, -0.0029701155, -0.038133264, -0.020513933, 0.00694705, -0.05769072, -0.02276669, -0.039844856, -0.03433252, -0.009369708, -0.0021740994, -0.01245309, -0.0028411169, -0.00073230336, 0.01814791, -0.045256507, -0.0063995924, -0.020828566, -0.055173673, -0.021092854, 0.029852178, 0.011647635, -0.031286895, 0.0021158927, -0.025308909, 0.018412199, 0.04691776, -0.01785845, -0.0386115, -0.022867372, -0.032419566, 0.014963845, 0.036018945, -0.022439474, 0.017292114, -0.03780605, -0.0111379335, 0.013214497, -0.0042412244, 0.026454166, 0.047698043, 0.021017343, 0.0017792376, -0.015366573, -0.018084984, -0.07415221, 0.037151616, -0.0054242364, 0.0022181477, 0.024843255, -0.0014441558, 0.005226019, -0.039140083, 0.028543314, -0.004448881, 0.055928785, -0.004156274, 0.03050661, 0.020551689, -0.00817411, -0.015442084, -0.028140586, 0.016524414, -0.026051437, -0.0059905723, 0.0288957, -0.016864216, 0.0304311, -0.0326461, -0.034559056, -0.035515536, -0.012302068, -0.023660243, 0.012440505, -0.014384924, -0.0085390825, -0.031840645, -0.0029827007, -0.06257379, 0.025850074, -0.026479336, -0.0035993773, 0.0009918739, 0.030582123, 0.004439442, -0.0054588458, 0.005326701, -0.03780605, -0.025170472, -0.03382911, -0.062422767, 0.032872636, 0.022087088, -2.7702266e-05, -0.042160537, -0.0031085531, 0.008092307, 0.048780374, 0.05552606, -0.014787652, 0.018538052, 0.012679624, -0.026580017, 0.015479839, -0.00097535574, -0.028996382, -0.06322822, -0.014573703, 0.023030981, 0.0154546695, -0.009224977, 0.038284287, -0.0018390175, 0.018777171, 0.00032918257, 0.021860555, -0.009533316, 0.0030786633, 0.023811266, -0.0117797805, 0.034634568, 0.06680243, 0.005987426, 0.048276965, -0.01002414, 0.020438422, 0.005248043, 0.017178847, -0.043544915, 0.010395405, 0.04445105, 0.015479839, 0.013478788, -0.015781885, -0.013566884, -0.035515536, 0.02163402, 0.02345888, 0.00788465, 0.0013835893, 0.011962267, -0.008910347, 0.0094074635, 0.00949556, -0.008073429, 0.022615667, 0.06760789, -0.020954417, -0.020614617, 0.006330373, -0.00932566, 0.048327304, 0.035037294, 0.024604136, -0.013013134, -0.02824127, -0.016763534, -0.017581575, -0.044425882, -0.010496086, -0.004348199, 0.0081174765, 0.016914556, -0.01788362, 0.05119674, 0.029550133, 0.02612695, -0.0390394, -0.03053178, 0.01738021, -0.023119077, -0.02990252, -0.025132716, 0.0077462127, 0.0019176753, 0.015668618, 0.03735298, 0.03103519, 0.06821197, 0.053613104, 0.0049271197, -0.019318337, -0.020828566, -0.03045627, -0.019557456, -0.0137304915, 0.017090749, 0.0038636674, -0.008388059, 0.011119056, 0.0010532269, -0.003391721, 0.018135324, -0.030078713, -0.064990155, -0.029852178, -0.019003706, -0.012415335, 0.01600842, 0.036673374, 0.058093447, 0.008602008, -0.0055343574, -0.015114868, -0.0050246553, 0.03206718, -0.027662348, 0.024641892, 0.052354578, -0.06413436, -0.005559528, -0.035616215, -0.028190928, 0.05769072, -0.029625645, 0.009992677, -0.015656034, 0.015202965, -0.02826644, 0.021004759, -0.007160999, 0.06650038, 0.013327764, 0.0008841128, -0.013667566, -0.0502906, 0.0032406983, 0.015781885, -0.009564779, 0.012667039, -0.019721065, -0.0015228135, 0.0023660243, 0.0191799, 0.059452653, 0.023421124, 0.004291565, -0.013529128, 0.00635869, 0.023572147, -0.06806096, 0.019054046, -0.029675985, -0.035137977, 0.007790261, 0.048377644, -0.04709395, 0.0048044138, -0.0005561101, 0.004615635, 0.029776666, -0.017392796, 0.019683309, -0.019167313, 0.032998487, -0.003678035, -0.03053178, -0.002852129, 0.019935014, 0.030305248, 0.02942428, -0.004448881, -0.00354589, -0.0066512967, -0.014548533, -0.03370326, -0.042512927, 0.044199347, 0.04709395, 0.023144249, -0.010017848, 0.06514118, -0.017292114, -0.027083427, 0.010760376, 0.039316274, 0.002546937, 0.006040913, 0.049283784, -0.02892087, 0.009967507, -0.015089697, -0.013717907, 0.0012821208, 0.036320988, -0.015932908, 0.024516039, -0.0044142716, -0.028568484, -0.02725962, -0.0011546954, 0.012333531, -0.016310465, 0.014284242, -0.021734701, 0.018915609, 0.013692737, -0.03206718, 0.0034924028, 0.013315179, 0.057590038, 0.010338771, 0.0007692725, 0.021810213, -0.010810717, -0.06685277, 0.011672806, -0.004357638, -0.020954417, 0.01651183, 0.009678046, 0.009004736, -0.0021048805, -0.021206122, 0.0015786604, 0.013315179, 0.006091254, 0.04175781, -0.045558553, 0.0045873183, 0.025057204, -0.0055249184, -0.018550636, 0.021092854, -0.03362775, -0.014321998, -0.039089743, 0.0048547545, -0.025585784, -0.012742551, 0.0386115, -0.036195137, 0.02427692, 0.008520205, 0.0022323062, -0.008683813, -0.0068086125, 0.0024698526, 0.021986406, 0.01783328, -0.0074630445, 0.028442632, 0.009527023, 0.035314173, -0.016109101, -0.012195094, 0.09574847, -0.010256967, -0.037655026, -0.0020010525, -0.019456774], [-0.0136161605, -0.0050589084, -0.011407641, 0.056022163, 0.026915949, 0.048185878, -0.0008281947, -0.003080063, 0.020284306, 0.023727894, -0.055292077, -0.02092922, -0.033511087, -0.055632785, 0.0068202484, 0.028108427, -0.037842948, -0.015903773, -0.03467923, -0.05203101, -0.013981205, -0.03781861, -0.017290942, 0.03236728, 0.04971906, 0.04743145, -0.009278215, 0.0127278855, 0.008949675, 0.040106226, 0.044900477, -0.004608687, 0.05947792, 0.016061958, 0.03850003, -0.032805335, -0.0028868937, 0.061619513, -0.01651218, -0.004295357, -0.0735443, -0.0018343487, -0.0033401572, -0.029033206, -0.019103996, -0.020637183, 0.013725674, -0.032683652, 0.01849559, -0.018982315, 0.026477896, -0.0032123916, -0.018179217, -0.039205782, -0.032269936, 0.0014023794, 0.030152677, -0.0012312648, 0.05611951, -0.03275666, -0.028059755, 0.0056277695, 0.054172605, 0.021902671, -0.025042053, 0.0071913768, -0.00023385664, -0.0023879996, 0.000930103, 0.029252233, 0.005500004, 0.01788718, -0.011748349, -0.012174235, -0.0071487883, -0.041006666, 0.028570818, -0.0013400175, -0.029446924, 0.021817494, 0.0213186, -0.0059593515, 0.05626553, 0.016256649, 0.04915933, -0.04409738, 0.036431443, -0.12577, -0.021987848, 0.026502231, 0.022389397, 0.021927007, 0.050035436, 0.031369492, -0.037745602, 0.009302551, 0.016658198, 0.0068993415, -0.05782305, -0.022596255, 0.0049007228, -0.050911542, -0.0740797, -0.051592957, 0.013482311, 0.037185866, 0.020442493, -0.02499338, -0.008183082, 0.08649121, -0.017753331, -0.025115063, -0.003641319, 0.024810858, 0.03414383, 0.062738985, -0.030055331, -0.06867704, -0.057287652, 0.031272147, -0.06157084, -0.031247811, 0.055389423, 0.058845177, -0.004039826, 0.04889163, 0.029763296, 0.042004455, 0.03684516, -0.010902663, -0.016633863, 0.038694717, 0.040471267, 0.01019691, 0.021756653, 0.00743474, 0.043391626, -0.013324125, -0.018410413, -0.0049068066, -0.037088525, 0.022231212, 0.0075442535, 0.021756653, -0.031369492, -0.020150457, -0.011955208, -0.03711286, -0.043221273, -0.04258853, -0.0659027, -0.012375009, 0.014589612, -0.008821909, 0.027329667, -0.043172598, 0.062398277, 0.03270799, 0.018544262, -0.005925889, 0.018957978, -0.0568496, 0.050960213, 0.037794277, 0.014954657, -0.07252218, -0.031880554, -0.005259683, -0.046409328, 0.018507756, 0.018179217, -0.042126138, -0.006044529, 0.0151493475, -0.049792074, 0.004413997, 0.04229649, 0.026137188, 0.0031074414, -0.08868148, -0.05480535, 0.033730112, 0.039716844, -0.009229542, 0.025163736, 0.01684072, -0.023630548, -0.016025454, 0.00861505, -0.061960224, -0.031296484, -0.032732327, -0.08517706, -0.0065038763, 0.0037569164, -0.02711064, -0.0029507766, -0.029008871, 0.02342369, -0.012009964, -0.019201342, -0.018349571, -0.0415664, 0.002750002, -0.02973896, 0.0072400495, 0.061668187, -0.03222126, 0.013275452, 0.016889393, 0.019359527, 0.044511095, -0.019688068, -0.013652665, -0.010768813, 0.03317038, -0.06006199, -0.018252226, 0.01900665, 0.010975672, 0.0568496, -0.050230127, 0.031953562, -0.01375001, 0.036480114, 0.063469075, -0.008097904, -0.017485632, 0.011882199, 0.02178099, -0.0030146593, -0.027865065, -0.026356215, 0.006382195, -0.078411564, -0.009442485, -0.06424783, 0.0047425367, 0.07072129, -0.04205313, -0.00030857668, 0.038889408, -0.0385487, -0.0014191106, -0.0038694718, 0.049378354, -0.014589612, 0.052079685, -0.027475683, -0.004949395, 0.024141612, 0.013579656, 0.024567496, 0.0023682262, -0.02170798, 0.05860181, -0.014918152, -0.019359527, -0.007878877, 0.022158202, -0.04013056, 0.027402675, -0.0055425926, 0.027792055, 0.009193038, -0.012472354, 0.049840745, -0.019237846, -0.04480313, -0.016329657, 0.043756668, -0.02927657, 0.014443595, 0.042783216, 0.029519932, -0.049256675, 0.042442508, 0.0019316939, -0.014674789, 0.052079685, 0.030809756, 0.008967927, 0.01954205, 0.016597357, 0.008852329, 0.04643366, -0.028741172, -0.048283223, -0.043975696, 0.013786514, 0.021123908, -0.043196935, 0.039960206, -0.01216815, 0.04533853, 0.0013788035, 0.014029877, 0.03178321, -0.055486765, 0.027427012, -0.0357987, -0.0027332709, -0.06171686, -0.015915941, -0.014394922, 0.019882757, 0.007507749, 0.089168206, -0.07369032, -0.0020822748, 0.07310625, 0.0004928101, -0.025918161, -0.03630976, 0.038865075, -0.028789844, 0.0076294304, 0.01658519, 0.070769966, -0.017692491, 0.00042778655, -0.010513282, -0.07349563, 0.016767712, 0.031296484, -0.028205773, -0.035555337, -0.00924171, -0.0024762186, 0.027354002, -0.06429651, 0.00013907815, 0.013238948, 0.0004996547, -0.044511095, -0.067216866, -0.02625887, -0.058504466, 0.022851788, -0.013044258, -0.033608433, 0.008414276, -0.02039382, -0.057433672, 0.00727047, -0.0011476087, 0.04738278, 0.009789277, 0.000115217175, -0.060354028, 0.0015210188, 0.0113468, 0.0146261165, 0.027938074, -0.019834084, 0.0068871733, -0.049792074, -0.011079101, -0.006716819, 0.016962402, 0.06789828, -0.074761115, 0.019834084, 0.019980103, 0.03618808, -0.013324125, 0.0061966307, -0.032780997, 0.0035652681, 0.016329657, -0.035287637, 0.0028975408, 0.021744484, -0.029690288, 0.0006011827, -0.062057566, 0.03789162, 0.01249669, -0.031588517, 0.016329657, -0.050619505, -0.05149561, -0.01539271, 0.012545363, -0.034630556, 0.023119487, -0.030444713, 0.025893824, 0.051690303, -0.011626668, 0.003966817, -0.019919263, 0.008116157, 0.0127278855, 0.031320818, 0.032075245, -0.052809775, 0.009089609, 0.03604206, 0.010495029, 0.005186674, -0.031612854, -0.0388164, -0.006050613, 0.04112835, -0.012533195, -0.024165947, -0.055243403, 0.003154593, 0.049646053, -0.017059747, 0.041761093, 0.01388386, 0.012557532, 0.005439163, 0.029203562, -0.005557803, 0.030274358, 0.0014426863, -0.027013294, 0.02217037, -0.05071685, -0.025407098, 0.027256656, -0.016560853, 0.01697457, 0.004502216, -0.0053752805, 0.018872801, -0.014090719, -0.011772686, 0.005010236, -0.010227331, 0.008450781, 0.003154593, -0.084495634, -0.024324132, -0.0380133, 0.007976223, 0.05553544, 0.0390841, -0.043975696, 0.029957987, 0.019761076, -7.09175e-05, -0.045825254, -0.013068594, 0.029617278, 0.033073034, -0.018215721, 0.0043805344, 0.01407855, -0.04185844, 0.0010647132, 0.01788718, -0.029349579, 0.004620855, -0.010245583, 0.060743406, -0.07232749, -0.021063069, -0.017071916, 0.051738977, -0.005585181, -0.01697457, -0.0011666215, -0.038378347, 0.031369492, -0.0142610725, 0.01888497, 0.003245854, 0.011371137, -0.10425671, -0.008201334, -0.0006525171, -0.037088525, -0.009856202, -0.022073025, 0.056752253, -0.03343808, -0.028108427, -0.017278774, -0.0064308676, 0.03433852, 0.007672019, -0.046263307, 0.0008806699, 0.009138281, 0.06356642, 0.0018358697, 0.01828873, 0.018446917, 0.0082317535, -0.017582977, 0.019347358, -0.036626134, -0.022121698, -0.05353986, -0.005098455, 0.0062544295, 0.056654908, 0.0593319, 0.0013080762, 0.0139447, 0.013956869, 0.006160126, -0.053831898, -0.010993924, 0.028984535, -0.033365067, 0.017789837, -0.0070818635, -0.026429223, -0.008846246, -0.035896044, -0.006327438, -0.036893833, 0.035750028, 0.05475668, 0.016804216, 0.0023545371, 0.0030222645, -0.062495623, -0.039838526, -0.028084092, 0.0017065831, 0.022644928, -0.012040385, 0.018081872, -0.031320818, -0.01789935, -0.010458525, 0.031588517, 0.034508877, 0.025285417, -0.020649351, 0.0172301, 0.008055315, -0.026867276, 0.0010015909, -0.031564184, 0.029909315, 0.0023362848, -0.048185878, -0.05407526, 0.057384998, 0.05237172, 0.009168701, -0.006923678, 0.033462413, -0.06453987, 0.057677034, 0.012934744, 0.07257085, 0.017351782, -0.053831898, 0.018848466, -0.0019849297, 0.009698016, -0.016171472, 0.017096251, 0.009460737, 0.044316404, 0.016597357, -0.040446933, -0.04769915, 0.013543151, 0.022681432, -0.025455771, 0.02750002, -0.0024290672, 0.043756668, -0.0022997805, 0.0031074414, -0.0453872, 0.056216855, 0.038427018, -0.046044283, -0.005475668, 0.0026922033, 0.0024336302, -0.03506861, -0.0025705218, 0.004039826, -0.016986739, 0.011219035, 0.005554761, -0.009065272, -0.060840752, -0.0108114015, -0.012752222, 0.009199122, 4.8149752e-05, -0.015039834, -0.011717929, 0.055486765, 0.004128045, 0.016427003, 0.01637833, 0.021659307, -0.020296475, -0.005646022, 0.010227331, -0.0050619505, -0.04614163, -0.01046461, 0.036163744, -0.04008189, -0.013482311, 0.028205773, -0.023338513, 0.017473465, 0.04039826, -0.026161524, 0.04762614, -0.033803124, -0.0050224042, 0.056460217, 0.001784155, 0.04862393, 0.0461903, -0.03618808, 0.040252242, -0.013603992, 0.013117266, -0.0024762186, -0.02526108, 0.019700237, -0.029982323, 5.7133268e-05, -0.023046477, -0.044219058, 0.029982323, -0.029179225, 0.054951366, 0.03460622, -0.02145245, 0.015782092, -0.010008303, 0.0044778795, 0.0043987865, 0.029471261, 0.034971263, 0.008085736, -0.04178543, -0.033584096, 0.059039865, 0.065026596, 0.046993397, -0.016938066, -0.036699142, 0.051349595, 0.003221518, 0.04407304, 0.018897139, -0.039911535, -0.015830765, 0.011632752, -0.044584103, 0.000103049024, -0.026867276, -0.024068601, 0.04670136, 0.029252233, -0.0066681467, -0.02308298, -0.034289848, -0.01894581, 0.043902688, 0.024628337, 0.070769966, -0.010969588, -0.071402706, -0.010440273, -0.027475683, -0.02499338, -0.009010515, 0.038110647, -0.022000017, -0.06322571, -0.048283223, -0.055486765, -0.045435876, -0.013141602, 0.015064171, 0.0071548726, -0.0032823586, -0.012521027, -0.0069966866, 0.0008768673, 0.011176446, -0.0031667612, 0.0029416503, 0.020320812, 0.006728987, -0.0030329116, 0.017400455, -0.036407106, -0.00014164488, 0.013640497, -0.036650468, -0.02881418, -0.0026055053, -0.022486743, 0.015648242, 0.0040854565, -0.01736395, -0.016573021, -0.04480313, -0.008535958, 0.0053935326, -0.006881089, 0.026307542, 0.057336327, 0.029227898, 0.010945251, -0.014711294, -0.028862853, -0.041688085, 0.010695804, 0.01611063, 0.021768821, -0.014334082, -0.02369139, 0.017509969, -0.036553126, 0.025480106, -0.017084083, 0.0639558, -0.0016807258, 0.026137188, -0.005801166, 0.0029553396, 0.0077146073, 0.01539271, -0.007860625, -0.029860642, 0.014784303, -0.0053752805, 0.036431443, -0.0032002237, -0.012484523, -0.0035135534, -0.07388501, -0.013713506, -0.004690822, 0.0019301729, -0.012959081, 0.008310847, 0.021890502, -0.0010761208, 0.0014092239, 0.022073025, -0.01546572, -0.0066559785, 0.03190489, 0.009977884, 0.00012177657, -0.007884962, -0.02915489, -0.009247795, -0.0014115055, -0.00031523115, -0.032415953, 0.0032184757, 0.01618364, -0.031856216, -0.03355976, 0.003638277, 0.010458525, -0.019846253, 0.04185844, -0.012235075, -0.037331887, -0.0005475668, -0.032586306, -0.00015951684, -0.00051676616, -0.02361838, -0.019785414, 0.023362849, -0.008462949, 0.016293153, -0.031077456, 0.041298702, 0.010093481, -0.024397142, -0.04288056, -0.053345174, -0.016560853, 0.029252233, 0.016560853, 0.03645578, -0.018191384, 0.030274358, -0.04185844, 0.05149561, -0.04762614, 0.048088532, 0.003641319, -0.019712403, -0.026964622, 0.0057950816, -0.0053722383, -0.0068263323, -0.054318625, -0.0082500065, -0.008864498, -0.061619513, 0.017753331, -0.0034648809, 0.03163719, 0.019396031, -0.007745028, -0.014954657, 0.032415953, -0.013129435, 0.008712396, 0.010087397, 0.022657096, -0.008542041, -0.015867269, 0.0063700266, -0.008213501, 0.049061984, 0.038938083, -0.014188063, -0.029422589, -0.018872801, -0.021501122, -0.03453321, -0.021087404, -0.03270799, 0.033243388, 0.027013294, 0.029519932, -0.028011082, 0.031685863, 0.008803657, 0.0016579105, 0.004669528, 0.007124452, -0.009010515, 0.03626109, -0.027232321, 0.038694717, -0.022085194, 0.002573564, -0.012003881, 0.021501122, -0.00048216296, -0.0018115335, 0.009813613, -0.0028564734, 0.0032793165, -0.023460194, -0.033657104, 0.0067715757, 0.0071609565, -0.0060262764, 0.050765526, 0.029227898, -0.011882199, -0.047139414, 0.015964614, -0.028838517, 0.0091200285, -0.045800917, -0.002908188, -0.032513298, -0.059380576, 0.009454653, 0.023910416, -0.0149059845, -0.010470694, -0.018203553, 0.021793157, -0.028473472, -0.0058833007, 0.0010251667, 0.050181452, 0.012277664, -0.017132755, -0.028789844, -0.027938074, -0.039522152, -0.004794251, 0.0002363283, -0.006546465, 0.0051106233, -0.0082317535, -0.0041067507, 0.03402215, 0.008736732, 0.026915949, 0.010075228, -0.038475692, -0.015709082, -0.03901109, 0.004432249, -0.021269927, -0.0281571, -0.01724227, -0.022547582, -0.006601222, -0.009010515, -0.016524348, -0.002667867, -0.017120589, -0.03533631, -0.016998906, -0.020637183, 0.016828552, -0.021038732, 0.048039857, -0.024178116, -0.01862944, 0.008694144, 0.028205773, -0.031296484, 0.036407106, 0.007343479, -0.0110547645, 0.07042926, -0.0023362848, -0.009424233, 0.013932533, 0.012429765, 0.046068616, -0.047480125, 0.017278774, 0.0077206916, 0.031491175, -0.018398244, 0.0015620863, 0.007179209, 0.009290383, -0.00631527, -0.032805335, -0.036674805, 0.057336327, 0.12246027, -0.03355976, 0.012228991, 0.02178099, -0.041955784, -0.022620592, 0.02019913, 0.019469041, -0.01815488, 0.0019240888, 0.027134975, -0.0016594315, 0.00021256237, 0.0012464749, -0.030225687, -0.01966373, 0.06687616, 0.014832975, -0.00421018, -0.023448026, -0.018933643, -0.001536229, 0.0032854006, 0.00957025, 0.0063335225, 0.035141617, 0.0010099565, 0.009454653, 0.018824128, -0.05981863, -0.0023879996, 0.021488953, 0.02485953, -0.014248904, 0.022596255, 0.006160126, -0.013068594, -0.062641636, 0.021111742, -0.0015202583, -0.06171686, 0.0054330793, -0.036139406, -0.012825231, 0.009746688, -0.017546473, 0.037356224, -0.0064004473, -0.01033076, 0.046506673, -0.017668154, 0.023022141, 0.043318614, -0.004091541, 0.03592038, 0.007021023, -0.018398244, -0.00038462764, -0.0030678948, 0.01987059, -0.011413725, -0.02066152, 0.017388288, -0.061424825, 0.030079668, 0.010215162, 0.006230093, -0.03781861, -0.010519366, 0.010872242, -0.025407098, -0.011212951, 0.0034192502, 0.036090735, 0.052469064, 0.04112835, -0.045581892, -0.001413787, 0.12606204, -0.006704651, -0.023800902, 0.0056977365, -0.009266047], [0.02235817, 0.002345942, -0.018286318, 0.010278341, 0.042125158, 0.007995636, -0.04340841, 0.024727246, 0.022740677, 0.027787305, -0.03637521, 0.00019780872, -0.020877495, -0.032278683, 0.032722883, 0.025541617, -0.02620792, -0.0037818868, 0.004636359, -0.035141315, 0.018088894, -0.034228235, -0.016694592, -0.026035175, 0.031908512, -0.007187436, -0.013375416, 0.023814164, 0.012363623, 0.017582998, 0.011376508, -0.018236961, 0.018816892, -0.02445579, -0.0016919778, -0.014732701, 0.009211022, 0.057005927, 0.014695684, -0.02633131, -0.027392458, -0.002262654, -0.017916149, -0.03543745, -0.02164251, -0.006129371, 0.014930124, -0.004679545, 0.001738249, 0.007101063, -0.005395204, 0.006539641, -0.030575907, -0.026281953, -0.038694933, -0.04121208, 0.057203352, 0.004935578, 0.061151814, 0.01648483, 0.0040625976, 0.023974571, 0.052020993, -0.007304656, -0.0013750212, -0.016472492, 0.00013167968, 0.023666097, 0.023888199, 0.057203352, 0.014991819, -0.002568043, -0.0015446817, -0.001311013, 0.019001976, -0.047899786, 0.057499487, 0.033043697, 0.026010497, -0.05789433, 0.032673527, -0.030255094, 0.04538264, -0.007545265, 0.02024821, -0.028749743, 0.007218283, -0.14135496, -0.03464776, 0.0052132043, -0.012493182, 0.011592439, 0.038694933, 0.012419148, -0.010444918, -0.014165109, 0.02808344, 0.0015200039, -0.0533536, -0.016608221, -0.0019125366, -0.037485715, -0.05616688, -0.090222366, -0.004599342, 0.038324766, 0.045357965, -0.017336218, -0.013622195, 0.0015439106, -0.0032636512, -0.014214465, 0.013597518, 0.018051878, 0.011876235, 0.057400774, -0.057252705, -0.060806323, -0.053649735, -0.013585179, -0.09895834, -0.06297798, 0.038843, 0.027195036, -0.0011791405, 0.012345115, -0.010580646, 0.039953504, 0.019322788, -0.010963153, -0.038102664, -0.009519496, 0.0070948936, 0.015608766, 0.027195036, 0.01006241, 0.034919217, -0.014313176, -0.022395186, -0.007039368, -0.06376767, 0.05315618, -0.007933942, 0.04012625, -0.029687503, -0.044272136, -0.011703489, -0.01848374, -0.047110092, -0.015830867, -0.011944099, -0.023456335, -0.02222244, 0.0051391707, 0.015941918, -0.04390197, 0.0339321, -0.005641983, 0.00795862, 0.063866384, 0.055130407, -0.045728132, 0.011314813, 0.029095232, 0.0030847364, -0.056561727, 0.030921398, -0.026183242, -0.022740677, 0.0125610465, -0.006502624, -0.005898016, 0.035240028, -0.013029926, -0.028774422, 0.0073786895, 0.038053308, 0.01778042, -0.055673324, -0.024628535, -0.019828685, 0.08030186, 0.060658257, -0.0433097, 0.0067308946, 0.0433097, 0.040767875, -0.0032790748, 0.029983638, -0.06840711, -0.050836455, 0.026010497, -0.011610948, -0.017052423, -0.032698207, -0.021630172, -0.004608596, -0.0063915737, 0.017496625, 0.01615168, -0.010919967, -0.048763514, 0.04612298, -0.01931045, -0.031785123, 0.039040424, 0.030279772, 0.018076556, -0.011684981, 0.0437539, -0.017114118, 0.032920305, 0.018236961, 0.0007650146, 0.005311916, 0.024184333, -0.028774422, -0.011721998, 0.007557604, -0.0118515575, 0.028034084, -0.043704543, 0.030378483, 0.0050034425, -0.015510054, 0.021716544, -0.007822892, -0.006514963, 0.006854284, 0.0156828, -0.010272172, -0.013128638, -0.039262526, 0.011074203, -0.03383339, 0.025134431, -0.02118597, -0.015028835, 0.03252546, 0.010037732, -0.042149838, 0.010222816, -0.030970752, -0.0063360487, 0.0031495157, 0.026380666, 0.030378483, -0.00038983356, -0.026997613, 0.0133384, 0.002241061, 0.013350739, 0.007896925, 0.014868429, -0.038917035, 0.072553, 0.054044582, -0.0057962197, -0.012437657, 0.026898902, -0.022876404, 0.010845933, -0.031168176, 0.06213893, -0.024912331, -0.013289045, 0.022617286, -0.06973972, -0.02422135, -0.03602972, 0.047554296, -0.043605834, 0.039361235, 0.03496857, -0.010506612, 0.0231602, 0.07827827, 0.013165655, -0.022370508, -0.00077156967, -0.017027745, 0.03733765, 0.042125158, 0.036547955, -0.010833594, 0.038102664, 0.032254003, -0.060016632, -0.04659186, 0.028108118, -0.0033901252, -0.009136989, 0.014757379, 0.003229719, 0.03871961, -0.01521392, 0.049183037, 0.019791668, -0.028132796, -0.020075465, -0.010093258, -0.015719816, -0.03874429, -0.0343763, -0.0108891195, 0.07975894, -0.004491376, 0.06811098, -0.03371, -0.024246028, 0.050984524, -0.031809803, -0.056068167, -0.016188696, -0.009272718, 0.0008930312, -0.0013927585, -0.0014513684, 0.031266887, -0.032599494, -0.024986364, -0.033290476, -0.11687449, 0.0290212, 0.03018106, 0.03533874, 0.059523072, -0.04469166, 0.045259252, -0.0039762254, -0.07615597, -9.152991e-05, 0.011907082, -0.033487897, -0.037732497, -0.052613262, 0.0030862787, -0.06085568, 0.024961686, -0.046863314, 0.005416797, -0.0057283556, -0.051971637, -0.021334037, 0.0021546884, 0.017755743, -0.026133886, -3.540217e-05, 0.019150043, -0.005339679, 0.0013912161, 0.00760696, 0.017348558, -0.0019125366, 0.0024122638, -0.011148238, -0.0039052763, -0.017854454, -0.0037078531, 0.034450337, 0.05542654, -0.052860044, 0.056216236, 0.029687503, 0.056216236, -0.011826879, -0.012431487, -0.0069591654, 0.01789147, 0.016077645, -0.051181946, 0.029860249, -0.056216236, -0.01989038, -0.051033877, -0.047233485, 0.043951325, -0.030946076, -0.014559955, 0.03289563, 0.031291567, 0.0011105051, -0.008088179, 0.014263821, -0.015263275, 0.021025563, -0.009655225, 0.010802747, -0.020457972, 0.03262417, 0.0030523466, 0.028478285, 0.018940281, 0.005580288, 0.058437247, 0.049355783, -0.053106822, 0.04622169, -0.004818358, -0.008945735, -0.03252546, 0.014646328, -0.010784239, -0.04469166, 0.031513665, -0.05369909, -0.0012840215, -0.0067925896, 0.035067283, 0.08346063, -0.021482104, -0.025122093, 0.009038278, 0.0049911034, 0.008563228, 0.014473583, -0.0038466663, 0.0652977, -0.021802917, 0.026652122, 0.021506783, -0.038818322, -0.021938644, 0.047332194, -0.06144795, 0.037263617, -0.051922284, 0.0074095367, 0.009538005, -0.041582245, 0.016423136, -0.023209557, -0.028675709, -0.003053889, -0.009988376, -0.02269132, -0.010321528, -0.00038539924, -0.015596427, 0.04444488, -0.013943008, -0.022641964, 0.00620032, -0.015287953, -0.037954595, -0.0151769025, -0.015436021, -0.010204308, 0.014695684, 0.0069653345, -0.008217738, -0.02610921, -0.04928175, -0.018940281, 0.016089985, 0.006154049, 0.04703606, 0.035758264, 0.031661734, -0.076452106, 0.0013287502, 0.017003067, 0.10887885, 0.013819619, 0.008951905, -0.0038096495, -0.058684025, 0.04343309, 0.013301383, 0.021543799, -0.03277224, 0.025541617, -0.040224962, 0.045234572, 0.019705296, -0.029564112, 0.0073663504, 0.0052070348, 0.011555422, -0.003124838, -0.021000884, -0.00032563249, -0.0056820842, 0.09347985, -0.014559955, -0.001172971, 0.044148747, 0.039484624, 0.07970959, 0.012992909, -0.01649717, 0.055475898, 0.03765846, -0.011333321, -0.007711841, -0.029662825, -0.013461789, -0.04975063, -0.013646874, -0.007101063, 0.0027346187, 0.02292576, 0.039756082, 0.014646328, -0.0010364715, 0.005580288, -0.020507328, -0.023838842, 0.041606925, 0.03965737, -0.009062955, -0.011432033, -0.018520758, 0.00016137028, -0.012832503, -0.013177994, -0.012419148, -0.0033623627, -0.03358661, -0.010124105, -0.016312085, -0.02071709, -0.047134772, -0.0036399888, -0.041113365, 0.0138689745, 0.0409653, 0.0028287033, -0.011703489, -0.036473922, -0.01169732, -0.051971637, 0.038818322, -0.014411888, 0.013794941, 0.005780796, 0.019396823, 0.00201896, -0.007637807, -0.024986364, -0.027886016, 0.03894171, -0.003615311, 0.010377053, -0.033759356, 0.0550317, 0.07250364, -0.041014656, -0.030230416, 0.04000286, -0.012980571, 0.026898902, 0.036572635, 0.038571544, 0.015818529, -0.031143498, -0.031809803, -0.017866792, -0.02818215, -0.015053513, -0.0047875107, -0.011407355, 0.08005508, 0.04945449, 0.006283608, -0.028108118, 0.008853193, 0.0066753696, 0.009235701, 0.006706217, 0.011043356, 0.031143498, 0.0014606226, -0.016040629, -0.003593718, 0.10394327, 0.006249676, -0.045703452, -0.00760696, -0.019816346, -0.031513665, -0.009093802, 0.016780965, -0.030674618, 0.007773536, 0.046838637, -0.0042168344, -0.031661734, -0.027367782, -0.01615168, 0.016188696, 0.03886768, -0.0077611967, -0.009877326, -0.022777693, 0.0025248567, 0.0056234743, -0.00018122826, 0.023110844, 0.018409707, -0.028478285, -0.021593155, 0.011061865, 0.020556683, 0.0044728676, -0.009815631, 0.02375247, -0.054242004, 0.02376481, 0.04034835, -0.08005508, 0.014769718, 0.048738834, -0.0024770433, -0.0044050035, -0.019643601, 0.0030400078, 0.09155498, -0.013128638, 0.067321286, 0.06949294, 0.028947165, 0.05685786, -0.047603652, 0.052958753, -0.016916694, -0.036893446, 0.028256185, 0.0013989279, 0.04047174, -0.0015161479, -0.026479376, -0.039484624, -0.022901082, 0.020828139, 0.0180272, 0.030329129, 0.020766445, 0.0058208974, 0.018940281, 0.01286952, 0.0033808711, -0.03486986, 0.03674538, -0.041606925, -0.03499325, 0.018520758, -0.018927943, 0.04424746, -0.033167087, -0.04671525, 0.042421296, -0.019939736, 0.049429815, -0.021297019, -0.043605834, 0.01017963, 0.022136068, -0.029292656, -0.0008652685, -0.03652328, -0.065149635, 0.008082009, 0.0074157063, 0.0072367913, 0.012783147, -0.04237194, -0.056216236, 0.011956438, 0.017731065, 0.058881447, -0.04669057, -0.045407318, -0.0155347325, -0.020223532, -0.06465607, -0.008982752, 0.0065087937, -0.035708908, -0.042668074, -0.04187838, -0.053106822, -0.03765846, -0.02620792, -0.004059513, -0.0024847551, -0.024036266, -0.011610948, -0.016447814, -0.050120797, 0.018471401, -0.025220804, -0.016373781, 0.020075465, 0.02142041, -0.013313722, -0.014917785, -0.030279772, 8.078153e-05, 0.013893653, -0.02422135, -0.040792555, -0.03405549, -0.020322243, 0.0364986, 0.053649735, -0.021679526, -0.015238598, -0.036671344, -0.03965737, 0.032846272, -0.010926136, -0.001872435, 0.057746265, 0.029193945, 0.012857181, -0.027589882, 0.00032621087, -0.05873338, 0.04881287, 0.021371054, 0.012881859, 0.0016487916, -0.029909603, 0.020223532, -0.02680019, 0.020026108, 0.00045885454, 0.054784916, -0.010395561, -0.013634535, -0.04269275, 0.012906536, -0.008143704, -0.008088179, 0.022913422, -0.057499487, 0.0013850466, 0.036572635, 0.048220597, -0.0057838806, -0.048886903, -0.029144589, -0.03955866, -0.016694592, 0.006033744, 0.02351803, -0.047332194, -0.007687163, -0.021617832, -0.002844127, -0.069196805, -0.009649055, -0.00889638, 0.013215011, 0.033611286, -0.00021612435, -0.0065458105, -0.013548162, -0.007557604, -0.025134431, 0.029193945, -0.025245482, -0.0057406942, 0.046986703, 0.036449246, 0.00254645, -0.05360038, 0.005228628, -0.0017475032, 0.0068727927, 0.03346322, 0.011555422, -0.021926306, 0.031809803, -0.022099052, 0.041458856, -0.01509053, -0.0048060194, -0.032722883, 0.0028086524, 0.021309359, 0.009081464, -0.02680019, 0.025714362, 0.021790577, -0.0042569363, -0.04459295, -0.0054815765, -0.011154407, 0.029662825, 0.017249845, 0.013165655, -0.0014228347, 0.047233485, 0.019359805, 0.04693735, 0.007884586, 0.023308268, -0.012141522, 0.007847569, -0.014374872, 0.016830321, 0.030082349, 0.02751585, -0.03941059, 0.00035069598, -0.026824867, -0.048615444, 0.020729428, 0.016287409, 0.038226053, 0.0015516224, -0.0026929749, 0.0042785294, 0.015978934, 0.0022441456, -0.014189787, -0.010673188, 0.013400095, -0.015436021, -0.036177788, 0.021087257, -0.020655395, 0.030872041, 0.04303824, -0.0028765167, 0.022703659, -0.018323334, -0.045925554, 0.0012662843, -0.044543594, -0.014633989, 0.004960256, 0.026479376, 0.04155757, -0.0014197499, 0.0746753, 0.029662825, 0.023962231, -0.03405549, -0.015867883, -7.634723e-05, 0.006835776, -0.024357079, -0.004796765, 0.021531459, -0.038423475, 0.013535823, 0.03474647, 0.008353466, 0.028305542, 0.039830115, 0.012406809, -0.013042266, -0.011376508, -0.04483973, -0.020988546, 0.0030554314, 0.004549986, 0.023443997, 0.024974026, 0.008600245, -0.012264912, -0.009538005, 0.011203762, -0.023715453, -0.06840711, -0.04562942, -0.022864066, -0.013733246, -0.033413865, 0.004435851, 0.020075465, -0.011573931, -0.009161667, 0.026972935, -0.007205944, 0.015806189, 0.0012809368, 0.015806189, 0.048023175, -0.0456541, -0.017582998, -0.020988546, -0.019470856, 0.03242675, -0.011450541, -0.012807826, -0.003309922, 0.0047905957, -0.011302474, 0.058782738, 0.014757379, 0.062632486, 0.039015744, -0.017052423, -0.048738834, -0.04012625, 0.028601676, 0.0074835704, -0.0266768, 0.0013171824, -0.0208158, -0.019581906, 0.015867883, -0.0028796014, 0.017175812, -0.0007225995, -0.026010497, -0.014115754, -0.026281953, 0.040298995, -0.047134772, 0.020766445, -0.04200177, 0.006521133, -0.022234779, 0.033956777, -0.037633784, 0.012116845, 0.0035165995, 0.003343854, 0.042445973, -0.028947165, 0.014967141, -0.009655225, -0.0065951664, 0.0360544, -0.049084324, -0.0024847551, 0.031908512, 0.026454698, -0.0004900875, -0.022493897, -0.017533641, -0.007452723, -0.007755027, -0.012770808, -0.0139923645, 0.03933656, 0.07161524, -0.03593101, 0.015016496, 0.029761536, -0.046024267, -0.053304244, -0.020643055, 0.050589677, 0.028502963, -0.021790577, 0.036646668, -0.05021951, 0.01357284, -0.013708568, -0.012326607, -0.010994, 0.04752962, -0.0046980535, 0.0035505316, -0.009846479, -0.02117363, -0.01111122, -0.0016302832, 0.05182357, -0.009389938, 0.009840309, 0.004438936, 0.026183242, 0.044050034, -0.032722883, -0.012369793, 0.0017737234, 0.026726156, -0.013671552, -0.0139923645, 0.0071072327, 0.016225712, -0.08232544, 0.011506067, -0.028256185, -0.010592985, 0.004762833, 0.008674279, -0.0033654473, -0.03005767, -0.020976208, -0.009630547, 0.0040163267, -0.02445579, 0.056068167, -0.07334269, 0.00025333397, 0.033167087, -0.003933039, -0.014448905, -0.0010364715, 0.0056481524, 0.013264366, -0.022938099, 0.007933942, -0.012036641, -0.013905992, 0.049306426, -0.058190465, 0.024727246, -0.0028302455, -0.035042606, -0.037757173, 0.0027947712, 0.004926324, 0.053649735, -0.002497094, -0.0339321, 0.010167291, 0.025985818, 0.050737742, -0.009211022, -0.003896022, 0.119046144, -0.015707478, -0.045876198, 0.00044381645, -0.024073282], [-0.012735546, -0.010034234, -0.021366429, 0.02413985, -0.0025557068, 0.02507172, -0.037785076, 0.008714086, 0.01033931, 0.058663383, -0.03203855, 0.006328945, -0.033436354, -0.03849507, -0.002851076, 0.027601078, -0.024162037, -0.011481959, 0.012524766, 0.0080429185, 0.0072608143, -0.062834606, -0.04220036, -0.0017139737, 0.051430304, -0.024805471, -0.0054026227, 0.029043257, 0.0072552674, 0.01916988, 0.058308385, 0.020423466, 0.0380957, 0.012158674, 0.04921157, 0.050409686, 0.005840823, 0.05928463, 0.015908338, -0.011836957, -0.046637833, 0.02157721, 0.017827544, -0.0361654, -0.057465266, -0.0036304072, 0.049433444, -0.040336624, 0.009141193, -0.03305917, 0.021654865, 0.01636318, -0.01434413, 0.019480504, -0.036320712, 0.02347423, 0.08440072, -0.06301211, 0.047880325, -0.0108052455, -0.04819095, 0.01976894, 0.065585844, -0.0069113635, -0.005385982, -0.013023982, -0.006334492, -0.0011059013, 0.04104662, 0.08231511, -0.0043542697, -0.008913772, 0.029731065, -0.03332542, 0.021477366, -0.060394, 0.013467729, 0.03110668, -0.017716609, 0.029464817, 0.013811633, -0.00019933959, 0.0063788667, -0.028710445, 0.01009525, -0.014155537, 0.033902287, -0.10889557, -0.08990319, 0.007466047, -0.020955963, 0.01479897, 0.02859951, 0.017982857, -0.025781715, 0.00638996, 0.021455178, 0.022764234, -0.056533396, 0.016562866, 0.011748208, -0.015531153, -0.028067013, -0.065363966, 0.02187674, 0.024361724, 0.018093793, 0.043553792, -0.021410804, -0.030707309, -0.007854326, -0.004193411, -0.018881446, 0.06949082, 0.019236444, 0.03860601, -0.032770734, -0.03749664, -0.044308163, -0.011603991, -0.05449216, -0.028754821, 0.029952938, 0.017727703, 0.043198794, -0.007238627, -0.014488347, 0.058397137, 0.04397535, -0.018282386, -0.0013652161, 0.023540791, 0.0072774547, 0.027800765, 0.059329007, 0.0066562085, 0.07357329, -0.046060964, -0.029376067, -0.00085074664, -0.03399104, 0.045794714, -0.0039410302, 0.020423466, -0.012668984, -0.01522053, -0.044685345, -0.03969319, -0.0034473613, -0.013534291, -0.031151056, 0.005341607, -0.021921113, -0.018648477, 0.02203205, 0.0056522302, 0.030840432, 0.011415398, 0.010195093, 0.00499493, 0.06665084, -0.03077387, -0.0040741544, 0.057953387, 0.0259814, -0.093719415, 0.024184225, 0.0040214593, -0.034945093, 0.03314792, 0.014277567, -0.01116579, 0.025582029, 0.008702992, -0.04086912, 0.0032171675, 0.048679072, -0.0064121475, -0.008347995, -0.04490722, -0.011836957, 0.082137614, 0.044219412, -0.005219577, 0.0046482524, 0.071532056, 0.020933775, 0.010572278, -0.0005134294, -0.045439716, -0.027978264, -0.0013617494, -0.020035189, 0.023429854, -0.018692853, 0.006511991, 0.0058019953, -0.06744958, -0.003683102, 0.019724565, -0.019447222, -0.024162037, 0.012036644, -0.034834158, -0.024583597, 0.01395585, 0.036697898, -0.024849845, -0.019591441, 0.01892582, 0.0074605006, 0.020711903, 0.011803676, -0.034701034, 0.014077881, 0.04102443, -0.04379785, -0.028466385, -0.054580912, -0.0026416827, 0.048013452, -0.015608809, 0.03339198, -0.00054983055, -0.01748364, 0.01817145, 0.0424888, 0.0041462635, 0.0074494067, 0.02522703, 0.0072164396, -0.048723448, -0.066473335, 0.022708764, -0.07446079, -0.004304348, -0.03816226, -0.019303005, 0.027556704, 0.016829114, 0.021111274, 0.03044106, -0.053693417, 0.032082926, 0.021765802, 0.0421338, 0.06234649, 0.008514401, -0.033502918, -0.0006039123, 0.018060513, -0.0013340152, -0.020390186, 0.05515778, -0.008947054, 0.110493064, 0.045927837, -0.0363429, 0.003219941, 0.030707309, -0.008542134, 0.051519055, -0.028022638, 0.023984538, 0.027845139, -0.0030063875, 0.020933775, -0.063278355, -0.037319142, -0.010738683, 0.021366429, -0.06518647, 0.050232187, 0.006023869, -0.01181477, 0.030418873, 0.058219638, 0.033347607, -0.011925707, 0.0240511, 0.0099954065, 0.029220756, -0.014066787, 0.03700852, 0.0015725293, -0.017084269, 0.025959214, -0.07126581, -0.0064731627, 0.017439267, -0.028666072, 0.03110668, 0.021754708, -0.040381, 0.04743658, 0.016795833, 0.01032267, 0.042577546, -0.033414166, 0.0034196272, -0.026624834, -0.049300317, -0.027956076, -0.042111613, 0.032593235, 0.005829729, 0.05449216, 0.049078446, -0.046060964, -0.047969077, 0.05711027, 0.040381, -0.027933888, -0.001550342, -0.018071607, -0.0479247, 0.0073162825, -0.0053111, 0.05032094, -0.0070056594, -0.0021230532, -0.011570709, -0.0647871, 0.08604259, 0.04694846, 0.027689828, 0.029287318, -0.061370242, -0.00020315303, 0.0032948232, -0.024406098, 0.00926877, -0.031994175, 0.015775215, -0.03221605, -0.05946213, -0.017350517, -0.046549086, 0.0003196367, -0.011099228, -0.0041490365, 0.021044713, -0.0086918995, -0.081250116, 0.025781715, -0.020778464, -0.009939938, 0.0556459, 0.0073218294, -0.01946941, 0.0013548158, 0.010993837, 0.010239468, -0.002425356, -0.004737002, -0.014177724, -0.042266924, -0.040247876, -0.0014962602, 0.054092787, 0.029331692, -0.086663835, 0.0046177446, 0.064920224, 0.03718602, -0.023696102, -0.055246532, -0.049832813, -0.019147694, -0.007893154, -0.04836845, 0.01286867, -0.053471543, -0.0039770845, -0.008192684, 0.000573058, 0.048057824, -0.023518603, -0.040780373, 0.05431466, 0.0020079562, -0.025448903, 0.02067862, 0.026513897, 0.00977908, 0.017050987, -0.01745036, 0.025116093, -0.03297042, -0.0061126184, 0.020234874, -0.022087518, 0.013911475, 0.03829539, 0.049744066, 0.047969077, -0.03126199, 0.03667571, -0.002195162, -0.021033619, 0.016196774, 0.0031727927, -0.05174093, -0.0058186357, 0.058175262, -0.030330123, -0.02709077, -0.017971763, -0.0068281605, -0.005383209, -0.016019275, -0.0060460563, -0.015420216, -0.017982857, 0.015753027, 0.022187361, -0.0057298862, 0.019724565, -0.0032643157, 0.03589915, 0.058441512, -0.004018686, -0.023917977, -0.002013503, -0.04501816, 0.03254886, 0.0019441675, 0.0010906475, -0.026691396, -0.03929382, 0.012524766, -0.0059295725, -0.030485434, 0.047480956, -0.031128868, -0.055290908, -0.0024309028, 0.017616766, -0.02139971, 0.06895832, 0.008752914, -0.047480956, -4.8794864e-05, 0.037807263, -0.04699283, -0.00786542, -0.032238238, -0.0122696115, 0.040647246, -0.022941733, -0.013844914, 0.003253222, -0.048013452, -0.050897807, -0.022897357, -0.017217392, -0.0011377956, 0.01214758, 0.018049419, -0.08590946, -0.0043237624, 0.024849845, 0.07064456, -0.005549614, 0.03623196, -0.08120575, -0.011071494, 0.03625415, -0.00086045364, 0.021510648, 0.0002816755, 0.011825864, 0.0049228207, 0.04457441, 0.011615084, -0.034856346, -0.016585054, -0.015020844, 0.00649535, 0.023673914, -0.0052833655, 0.016707083, 0.00039521238, 0.024162037, 0.016729271, -0.028288886, 0.013512104, 0.0062346486, 0.0684702, -0.0150985, 0.014011319, 0.031838864, -0.036986332, -0.0143774105, 0.0050975466, -0.054802783, -0.0058685574, -0.025715152, -0.008719633, -0.02742358, 0.04053631, 0.09389692, 0.023607353, 0.0280892, 0.031017931, 0.0062845703, -0.017128643, 0.031971987, 0.047392204, 0.0049394616, -0.01753911, -0.0030590824, -0.045528468, -0.0031838864, -0.031151056, -0.015142875, -0.0051641087, 0.011670552, 0.028355448, 0.017849732, -0.011870239, -0.02851076, -0.021222211, -0.013611946, -0.052805923, 0.0039576706, 0.0037968124, 0.023829227, 0.02959794, -0.0078765135, -0.03332542, -0.027712015, -0.025604216, -0.015409123, 0.022919545, 0.019757846, 0.025582029, -0.01994644, -0.0053083263, 0.016285524, -0.024916407, 0.005763167, 0.0029148646, 0.0076269056, 0.0061126184, 0.03319229, 0.044441286, -0.020312529, -0.03911632, 0.04439691, 0.0038439604, 0.06926894, 0.045927837, 0.03490072, 0.041579116, -0.02245361, -0.039582253, -0.022409236, -0.006428788, -0.0029842001, -0.0068004266, 0.023030482, 0.068337075, -0.0056855115, -0.01032267, -0.06500897, 0.04484066, 0.011093681, 0.0116261775, 0.021865645, -0.011714927, 0.04237786, 0.022653297, -0.009168928, -0.023696102, 0.08196011, -0.010078609, -0.02675796, -2.1602344e-05, -0.025870465, -0.04186755, 0.019114412, -0.015630996, -0.043864414, 0.0009894177, 0.047880325, -9.90631e-05, -0.040514123, -0.022109706, -0.014921001, 0.012569141, 0.001841551, -0.0036193135, -0.003708063, 0.0009228556, -0.022142988, 0.0112878205, 0.013922569, -0.008103934, -0.005366568, -0.01748364, -0.029154193, 0.017794264, 0.008802836, -0.043886602, 0.016352085, 0.020967057, -0.046859708, 0.027379205, 0.026380774, -0.0839126, 0.008170496, 0.06651771, 0.019602533, 0.010777511, -0.059905875, 0.01938066, 0.03962663, 0.012735546, 0.06345586, 0.027401391, 0.026469523, 0.06585209, -0.034257285, 0.011348835, -0.0083646355, -0.023895789, -0.00054567045, 0.0013478822, 0.0065508187, 0.01543131, 0.0014394051, -0.010228374, -0.011221258, 0.00670613, -0.0062845703, 0.0010275522, 0.02926513, -0.01371179, 0.0010067516, 0.035832588, 0.022475798, -0.024627972, 0.09194443, -0.025959214, -0.03625415, 0.014077881, 0.0018748321, 0.032748546, 0.014455066, -0.05111968, 0.031151056, -0.0019150467, 0.052362174, 0.018271292, -0.025093906, 0.02851076, 0.04009256, -0.046549086, 0.014965376, -0.010893995, 0.01244711, 0.0078044045, 0.0035028297, 0.031328555, -0.031816676, -0.027379205, -0.035610717, -0.005452544, -0.0037635313, 0.0345901, -0.04725908, -0.06589647, -0.027312642, 0.037274767, -0.040602874, -0.0046121976, 0.009435176, -0.006145899, -0.023341104, -0.021377522, -0.06567459, -0.020800652, -0.018825976, -0.01190352, -0.02757889, -0.01181477, 0.047525328, -0.024184225, 0.0033807992, 0.015997088, -0.032903858, -0.018027231, 0.05963963, 0.031151056, -0.011936801, 0.019791126, -0.064920224, 0.0034473613, 0.011426492, 0.0027664867, -0.01042806, -0.012668984, -0.013190387, 0.009951032, 0.017050987, -0.007660187, -0.008636431, -0.06762708, -0.027512329, 0.06527522, -0.024694534, 0.032260425, 0.08746258, -0.0021507875, 0.009429629, -0.036431648, 0.00958494, -0.05711027, 0.05138593, 0.013356792, 0.003888335, -0.0049283677, -0.0053804354, 0.008087293, -0.00025359463, 0.0148655325, 0.020789558, 0.017650045, -0.008054012, 0.045262218, -0.010067515, 0.009296505, 0.009956579, 0.01169274, 0.020833934, -0.037785076, -0.0036137665, 0.011714927, 0.0043487228, 0.029952938, -0.051030934, -0.032770734, -0.058752134, 0.0060959775, -0.023230167, 0.030662933, -0.03811789, 0.026203275, -0.040602874, 0.0005387369, -0.020789558, 0.007610265, -0.014122256, 0.024184225, 0.034212913, -0.023185793, -0.003161699, 0.013146012, -0.007366204, -0.012158674, 0.021144556, -0.017683327, -0.0061015245, 0.02362954, -0.026269836, -0.013001794, -0.01916988, -0.016851302, 0.024539223, 0.023318917, 0.05333842, 0.017494734, -0.0077322954, -0.023274543, -0.05205155, 0.029087631, -0.0041407165, -0.03465666, -0.009967673, 0.0001457779, 0.0037496642, -0.0022644976, 0.00055711076, 0.04295473, 0.022675484, -0.022265017, -0.006983472, 0.010783058, 0.007122143, 0.000777251, 0.03303698, 0.038206637, 0.047835954, 0.04155693, -0.040292248, 0.019746752, -0.035854775, 0.058397137, -0.00340576, -0.012047738, -0.05032094, -0.019192068, 0.06190274, -0.022986107, -0.004639932, -0.005649457, -0.02097815, -0.04282161, 0.03592134, -0.009601581, 0.027778577, -0.032615423, 0.023318917, -0.012857576, 0.012624609, -0.022963919, -0.041090995, -0.015475685, 0.01065548, -0.0074216723, -0.051430304, 0.029797627, -0.003411307, 0.022531265, 0.041002244, -0.0018401643, 0.013168199, 0.014066787, -0.020478936, -0.032171674, -0.029154193, -0.0050004767, -0.010389232, -0.025337968, 0.05400404, -0.008775102, 0.03878351, 0.04734783, 0.021000339, -0.012480391, 0.0033336512, 0.01666271, 0.026735771, -0.049655315, 0.026891083, -0.001616904, -0.016873488, 0.061281495, 0.023097044, 0.032171674, 0.04346504, -0.0026014682, 0.011276727, -0.005577348, -0.015409123, -0.016762553, 0.016440835, -0.0060349624, 0.02935388, 0.026247649, 0.016962238, 0.010067515, -0.025382342, -0.003649821, -0.00047286815, -0.041090995, -0.052850295, -0.021044713, 0.021477366, -0.03656477, -0.008919319, 0.011581803, 0.013356792, -0.0003303837, 0.015109593, 0.0053610215, 0.0075159688, -0.0041656774, 0.00041289293, 0.03978194, 0.014100068, -0.02498297, -0.018226918, 0.0023047123, -0.024627972, 0.01778317, 0.00691691, 0.004731455, 0.0047037206, -0.011515241, -0.005663324, 0.057909016, -0.033458542, 0.055956528, -0.011404304, -0.011481959, 0.015819589, -0.02682452, 0.022342673, -0.0042738407, -0.013279136, 5.8588503e-05, -0.01095501, 0.014088974, -0.023074856, 0.010439154, 0.010583372, 0.008569868, 0.0068392544, 0.007410579, 0.0046621193, 0.029908564, -0.020090656, -0.0017333877, -0.024672346, -0.026624834, 0.02715733, 0.045794714, -0.008270339, 0.005516333, 0.033857916, 0.03867257, 0.042577546, -0.00818159, 0.021366429, -0.0026444562, 0.02959794, -0.007826592, -0.04677096, 0.008176043, 0.011481959, 0.0138892885, 0.008508854, -0.01938066, -0.005452544, 0.0033586118, 0.010134078, -0.018803788, -0.0405585, 0.05901838, 0.0481022, -0.047125958, 0.008425651, 0.026536085, -0.05222905, -0.01127118, 0.021510648, 0.04859032, 0.0421338, -0.059728377, 0.011615084, -0.03399104, -0.009479551, -0.009834548, -0.008758461, -0.01564209, 0.030219186, 0.0058630104, 0.010433607, -0.017749889, -0.0030479888, -0.014399597, 0.009152287, 0.0024517034, 0.017938482, 0.01817145, -0.007288548, 0.037718516, 0.04743658, -0.07446079, 0.015453498, -0.0104779815, -0.004296028, 0.010694308, 0.010134078, -0.022764234, -0.0027664867, -0.07814389, 0.032282613, 0.009318692, -0.032326985, 0.010278296, -0.0036331804, -0.016928958, -0.012791014, -0.03270417, 0.030197, 0.008142762, 0.0011773169, -0.009213302, -0.075969525, -0.0036997425, 0.030019501, 0.0035721653, 0.01277992, 0.025116093, 0.0041074352, -0.0038772414, 0.0010670734, 0.00039694578, 0.008797289, -0.05853026, 0.015109593, -0.048812196, 0.04324317, -0.0034334944, 0.025848277, -0.039338194, 0.0145438155, 0.013268042, 0.020290343, -0.015065218, -0.019658003, 0.021166744, 0.018615197, 0.014976469, -0.014843345, 0.00058103155, 0.11856926, 0.010145172, -0.048412822, 0.044796284, -0.03885007], [-0.010279156, -0.008836468, -0.026425246, 0.026016485, -0.009070905, 0.007441869, -0.0063959197, 0.03200364, 0.024357393, 0.045877498, -0.061747074, 0.002449565, -0.0075200144, -0.03813507, -0.00959388, 0.004493374, -0.009221185, -0.008860513, -0.0093414085, -0.038062934, 0.009407532, -0.050205566, -0.040996403, 0.0049802815, 0.064392, -0.0012563413, -0.0007709367, 0.025030648, 0.015965754, 0.03585081, 0.04794535, 0.01844237, 0.04628626, -0.023107063, 0.05059028, 0.0291904, 0.011439319, 0.070643656, -0.00969607, -0.035754632, -0.038664054, 0.011601621, -0.0080610225, -0.016855413, -0.06410346, -0.007093219, 0.012707682, -0.048161756, -0.0017056788, -0.070836015, 0.048907146, -0.016013844, 0.030344551, 0.02004135, -0.0040515508, 0.022602122, 0.08030967, -0.049820848, 0.017408444, -0.010910333, -0.034119587, -0.02803625, 0.058236532, -0.00824737, -0.0072314767, -0.03135443, -0.015268454, 0.009203151, 0.022109203, 0.047320187, 0.0025081744, -0.0098403385, 0.0017387404, -0.022674257, 0.018177876, -0.056312945, 0.04972467, 0.040563595, -0.0328933, 0.03154679, 0.0024871351, 0.025078738, 0.007802541, -0.01674721, 0.005578396, -0.038952593, 0.01399408, -0.10166146, -0.03524969, 0.007760463, -0.009587868, 0.020810783, 0.02923849, 0.028445011, -0.04688738, 0.0075741154, 0.020822806, 0.005803816, -0.07622205, 0.040659774, 0.0027456167, -0.0055453344, -0.041477297, -0.059486862, 0.02748322, 0.026930187, 0.023936609, 0.031667016, -0.016855413, -0.05732283, -0.016554853, -0.005307892, -0.023503803, 0.057947993, 0.0130082425, 0.036956873, -0.040154833, -0.068046816, -0.047897264, 0.02868546, -0.040515505, -0.008319505, 0.029719386, 0.060833372, 0.0011947266, 0.007327656, -0.014198461, 0.022770436, 0.028132427, -0.016771255, -0.0014825128, 0.02599244, -0.008361583, 0.0022782458, 0.045468736, -0.018706862, 0.03952967, -0.0116196545, 0.00043092808, 0.00479694, -0.015400701, 0.044675257, 0.032196, 0.016085979, -0.0077003506, -0.0014479484, -0.04943613, -0.026016485, 0.01779316, 0.01334487, -0.024321325, -0.008590008, -0.026569515, -0.013849811, 0.021279657, -0.008433717, 0.062372237, 0.03390318, -0.019452251, 0.017023725, 0.045613006, -0.041669656, 0.008006922, 0.04804153, -0.000994854, -0.08992759, 0.03313375, 0.023876498, -0.04128494, 0.03738968, 0.042318866, -0.012479257, 0.022349652, -0.0012751264, -0.022662234, -0.016578896, 0.07102837, -0.011812014, -0.018899221, -0.045228288, -0.05313903, 0.060833372, 0.012851952, -0.04118876, -0.012491279, 0.030560954, -1.660125e-05, -0.007964844, -0.004075595, -0.055014525, -0.023972675, -0.021832688, -0.03395127, -0.007814564, -0.01864675, -0.028324787, -0.031330388, -0.07578924, 0.02094303, 0.030993761, -0.0017507628, -0.03493711, -0.01904349, -0.0130082425, -0.02649738, 0.0016801312, 0.020233708, -0.040058654, 0.019199781, -0.014162393, 0.0025652808, 0.022517964, -0.021363813, -0.0015538959, 0.04073191, 0.026016485, -0.04948422, 0.009533768, -0.0151121635, 0.0035526208, 0.05438936, -0.008692199, 0.035466097, -0.005392049, -0.006053281, 0.03878428, 0.03173915, 0.035802722, 0.0060502756, -0.016470695, 0.026232889, -0.047103785, -0.07016276, 0.014366774, -0.060496744, -0.03238836, -0.016723165, 0.017228106, 0.043641333, 0.015605082, 0.018478436, 0.045156155, -0.065449975, 0.007712373, 0.04873883, 0.056361035, 0.022409763, 0.02553559, -0.018454392, -0.022037068, 0.01763687, 0.018983377, 0.028517146, 0.051359717, -0.004589553, 0.074009925, 0.0065401886, -0.046815246, -0.015472836, 0.015905643, -0.014318685, 0.03183533, -0.017660914, 0.047320187, 0.042366955, -0.014943849, 0.02724277, -0.05217724, -0.040106744, -0.04633435, 0.03443217, -0.08473391, 0.018334169, 0.026305024, -0.012467234, 0.00815119, 0.041549433, 0.013609363, -0.027916025, 0.047296144, 0.04058764, 0.04734423, 0.00061201554, 0.03224409, 0.025559634, -0.010657862, 0.009335398, -0.062949315, -0.031667016, 0.0028072316, -0.028469056, 0.008782367, 0.011854092, -0.021207523, 0.0546779, 0.030056013, 0.011114714, 0.029118266, -0.043617286, 0.03484093, -0.03993843, -0.017023725, -0.030152192, -0.043713465, 0.024116945, 0.0094436, 0.027747711, 0.041669656, -0.041693702, -0.0064860876, 0.05352375, 0.04058764, -0.042342912, -0.030248372, -0.041020446, -0.0685758, 0.02369616, 0.042102464, 0.071413085, -0.008355572, 0.012611503, 0.00048390182, -0.051215447, 0.07492363, 0.058861695, -0.010465504, 0.018730907, -0.06617132, -0.019115625, 0.0011669247, -0.013765654, -0.005662553, -0.02553559, 0.019680677, -0.020630447, -0.0717978, -0.016110023, -0.026112664, -0.0067565916, -0.038952593, -0.03464857, 0.022253472, 0.022566054, -0.08540717, 0.010784098, -0.03469666, -0.0016125051, 0.03712519, 0.0015614099, -0.039601803, 0.0014193952, 0.031330388, 0.008235347, -0.0036397832, -0.03460048, -0.031426568, -0.061843254, -0.028877817, -0.01364543, 0.036620248, 0.06501717, -0.11224118, 0.035057332, 0.05588014, 0.018574616, -0.03873619, -0.059150234, -0.018177876, -0.0048570517, 0.010279156, -0.055495422, -0.0130082425, -0.044723347, -0.01939214, -0.0039854273, -0.023107063, 0.008710233, -0.008836468, -0.008680177, 0.05102309, -0.026112664, -0.030512864, 0.0377744, 0.008878546, -0.0038591921, 0.013609363, 0.004544469, 0.014499021, -0.03159488, -0.013705542, 0.010134888, 0.0029064165, -0.011589599, 0.0132246455, 0.03383105, 0.042222686, -0.051552072, 0.030777358, -0.037557993, -0.044050094, -0.0038982648, -0.0028673436, -0.039457534, 0.013380937, 0.05361993, -0.015833508, -0.027170636, -0.021640329, 0.0181899, 0.03320588, 0.029310623, -0.040275056, -0.014535088, -0.046670977, 0.025776036, 0.018815065, -0.014727446, 0.009203151, -0.005358987, 0.021027187, 0.041501343, -0.0057917936, -0.019524386, 0.016566874, -0.05044601, 0.05063837, -0.01754069, 0.013320825, 0.011144769, -0.038760234, -0.009479666, -0.011757912, 0.010213033, 0.03325397, -0.028661415, -0.060063936, -0.0011872125, 0.015100141, -0.030344551, 0.042006284, 0.03270094, -0.059438772, -0.015088119, 0.04568514, -0.02059438, -0.003558632, -0.03265285, 0.0066003003, 0.024056833, -0.031667016, -0.022037068, 0.025174916, -0.027074456, -0.01269566, 0.028012205, -0.029959833, 0.021315724, 0.018069675, -0.02039, -0.07675104, -0.004018489, 0.016530808, 0.060881462, -0.019933147, 0.006528166, -0.060448654, -0.007832597, 0.05612059, -0.015015984, 0.010681907, 0.0176008, 0.0032731, -0.059871577, 0.03265285, 0.019584497, 0.0020257754, -0.03419172, 0.01665103, 0.02004135, -0.0130082425, -0.032965437, 0.017961474, 0.021640329, 0.03322993, 0.029695341, -0.012515324, 0.023323467, -0.0040515508, 0.040419325, -0.0147875585, 0.039697982, 0.04073191, 0.023119085, -0.004908147, 0.024814244, -0.05347566, -0.028853772, -0.05828462, -0.014583178, -0.0081692245, 0.027747711, 0.07285578, 0.012124596, 0.026978277, 0.040347192, 0.005464183, -0.005268819, 0.0010166446, 0.045276377, -0.017805181, -0.045805365, 0.020281797, -0.025511544, -0.00059548474, -0.056361035, 0.00494722, 0.0137896985, 0.006882827, 0.033470377, -0.0181899, 0.0065101325, 0.0012548385, -0.031186119, -0.0049111526, -0.051407807, 0.030368596, 0.006966984, 0.020269776, 0.02459784, -0.02668974, -0.046021767, -0.021616284, -0.022602122, -0.03145061, 0.040395282, 0.015532947, -0.012791839, -0.008049, -0.040419325, 0.0009617924, 0.0037209345, -0.0047248052, -0.021580217, -0.016819345, -0.01744451, 0.037004963, 0.032773077, -0.002421012, -0.015520926, 0.041717745, -0.024153013, 0.05612059, 0.03173915, 0.044891663, 0.022109203, -0.015989799, -0.019560453, -0.032364316, 0.008511863, 0.0023503802, 0.029406803, 0.023022907, 0.05583205, 0.03998652, -0.0032280157, -0.047873218, 0.025223006, 0.023467734, -0.009984608, 0.037654173, 0.004508402, 0.023503803, 0.024501663, -0.012827907, -0.030031968, 0.07304814, -0.0017582767, -0.059150234, -0.00929332, -0.013861833, -0.015508903, 0.0047458443, -0.01214864, -0.040948313, -0.014607223, 0.009551801, -0.002901908, -0.03849574, -0.029887699, 0.01199836, -0.005482217, 0.0009339906, 0.005686598, 0.006870805, -0.022950772, 0.0054311217, 0.020486178, 0.019175736, -0.017552711, 0.001345758, -0.0119442595, -0.006702491, 0.0014915296, 0.021303702, -0.03373487, 0.014030147, 0.040563595, -0.019656632, -0.0011834555, 0.057515185, -0.071413085, 0.003519559, 0.059054054, 0.0075019808, 0.019175736, -0.042294823, 0.020810783, 0.03914495, -0.0058398833, 0.041405164, 0.039697982, 0.022529988, 0.09439993, 0.004469329, 0.012912063, -0.0027606448, -0.024225147, 0.019211804, 0.0012458217, 0.0031859374, -0.011102691, 0.015088119, 0.022529988, -0.027122546, -0.005461178, 0.045661096, 0.01934405, 0.021351792, -0.021904822, 0.006203561, 0.028709503, 0.021916844, -0.0188872, 0.05294667, -0.03108994, -0.039794162, 0.02444155, 0.0119442595, 0.0312823, 0.006077326, -0.03553823, 0.03265285, -0.003844164, 0.059871577, 0.015100141, -0.02729086, 0.025415365, 0.04508402, -0.060881462, 0.00909495, -0.011938249, 0.0039613824, 0.02483829, 0.012256842, 0.004697755, -0.00964798, -0.032364316, -0.027026366, 0.0022121225, 0.017516645, 0.020906962, -0.04897928, -0.08112719, -0.019873036, 0.00055453344, -0.026112664, -0.011090669, 0.02738704, -0.012635548, -0.034456212, -0.040563595, -0.05347566, -0.009641969, 0.00296202, -0.009389498, -0.014547111, 0.0098403385, 0.03702901, -0.0189954, -0.018730907, 0.056264855, -0.016675076, -0.03892855, 0.060208205, 0.0284931, -0.021856733, 0.007706362, -0.02868546, 0.022133248, 0.021075277, -0.020894941, -0.00061201554, -0.020161573, 0.013032287, 0.005503256, 0.026858054, -0.020029327, -0.012130607, -0.0629974, -0.0358989, 0.042968076, -0.030104103, 0.006062298, 0.06328594, -0.004069584, 0.029118266, -0.052850492, 0.0094436, -0.042246733, 0.040058654, -0.020317866, -0.014318685, -0.0069249053, -0.0063899085, -0.012731727, -0.012671615, 0.024165034, 0.033157792, -0.0039764107, -0.003784052, 0.030104103, 0.00432506, 0.03255667, 0.009623935, -0.01793743, 0.021315724, -0.03563441, 0.03373487, 0.021628307, -0.004766884, 0.031522747, -0.045204245, -0.018213945, -0.028228607, -0.014655312, 0.0167953, 0.047368277, -0.021760553, 0.023383578, -0.034263857, -0.0009941027, -0.016314404, 0.062276058, 0.013453072, 0.0022677262, 0.015869575, -0.003844164, -0.020738648, 0.027819846, -0.012912063, 0.0019115624, 0.0026028508, -0.01489576, 0.003738968, 0.03758204, -0.0052207294, -0.0059420737, -0.02469402, -0.010982467, 0.040515505, 0.028060295, 0.027050411, 0.019115625, -0.03368678, -0.011667744, -0.060256295, 0.018478436, -0.011577576, -0.048209846, -0.030488819, 0.0049291863, -0.029743431, 0.0041146684, -0.011012523, 0.042198643, 0.041453253, -0.02608862, -0.012106562, -0.0019491324, 0.009317364, 0.019259892, 0.049820848, 0.030200282, 0.06318976, 0.043473016, -0.03782249, 0.01635047, -0.030007923, 0.050013207, -0.006991029, -0.004520424, -0.048426248, -0.0029950817, 0.03243645, -0.014318685, -0.0314987, -0.008716244, -0.017504621, -0.03260476, 0.045516826, -0.00064094446, 0.01739642, -0.012022405, 0.0081031015, -0.02379234, 0.051263537, -0.0017161984, -0.052850492, -4.639897e-05, 0.016879456, 0.0032460494, -0.06328594, 0.057755634, -0.001383328, 0.017336309, 0.022890659, -0.00815119, 0.0063598524, 0.02099112, -0.023912564, -0.010363313, -0.044146273, -0.0041056513, 0.0052658133, -0.002841796, 0.0474885, -0.016663054, 0.014847671, 0.03318184, -0.007063163, -0.018033609, -0.0015809463, 0.0021369825, 0.019259892, -0.064055376, -0.004018489, 0.0066063115, -0.0047608726, 0.061362356, 0.014607223, 0.0518887, 0.042992122, -0.012611503, 0.027459174, 0.0011579079, -0.012371055, 0.015184298, 0.02923849, 0.0056956145, 0.03243645, 0.044050094, 0.039697982, -0.01394599, -0.036307663, 0.015953733, -0.0067205247, -0.022325607, -0.06737356, -0.029382758, -0.0019867024, -0.033061616, -0.012659593, 0.0053409534, 0.007688328, 0.005806822, -0.0012330479, -0.011192859, -0.021796621, 8.598837e-05, -0.0073456895, 0.021580217, 0.014847671, 0.00057782687, -0.033518467, -0.009617924, -0.024177058, 0.02474211, -0.0016275331, 0.0074959695, -0.0036608223, -0.02124359, -0.0049772756, 0.043112345, -0.030392641, 0.06780636, 0.0035916935, -0.02379234, -0.0015839519, -0.026425246, 0.026232889, -0.004664693, -0.021652352, -0.00059773895, -0.009942529, 0.018827086, -0.008806412, -0.004445284, 0.009852361, 0.0032580718, -0.0014366774, -0.0067746253, -0.0063658636, 0.022313584, -0.026473336, 0.015304522, -0.06323785, -0.029478937, -0.0006781388, 0.043521106, 0.027314905, -0.018851131, 0.017480576, 0.011974316, 0.061218087, -0.0013329842, -0.0055753905, 0.0174926, 0.02129168, 0.00939551, -0.019524386, 0.013164533, -0.0058308668, 0.032676898, 0.012936108, 0.0025427388, 0.0014982922, -0.026569515, 0.0058188443, -0.054245092, -0.025415365, 0.061218087, 0.038399562, -0.03702901, 0.01744451, 0.028252652, -0.041813925, -0.015244409, 0.01719204, 0.025968395, -0.0041928138, -0.038712144, 0.00018522018, -0.024621885, 0.009419555, -0.016458673, -0.004863063, -0.024814244, 0.038447652, 0.003558632, 0.020786738, -0.014607223, -0.010898311, -0.044939753, 0.009984608, -0.035321828, -0.0002939854, 0.008505852, 0.017721025, -0.0018905232, 0.046550754, -0.08415683, 0.013549251, 0.0035225647, 0.010699941, -0.03335015, 0.007183387, -0.0058398833, -0.008770345, -0.04763277, 0.031811286, -0.016158113, -0.03888046, 0.0151121635, -0.009221185, -0.041044492, -0.0015809463, -0.012034427, 0.044242453, -0.0028958968, 0.024321325, 0.024153013, -0.033758912, 0.023828408, 0.025415365, 0.023924587, 0.012310943, 0.034768797, -0.002742611, -0.0142225055, 0.009629946, 0.0077183843, -0.00030074798, -0.05491835, 0.021195501, -0.06251651, 0.04193415, 0.028757593, 0.011974316, -0.023972675, -0.01219673, 0.0005060681, 0.037053052, -0.019428207, 0.008752311, -0.007483947, 0.014907783, 0.019235848, -0.028060295, -0.0016350471, 0.1830291, 0.00865012, -0.028998042, 0.032123867, -0.06472863], [-0.01593707, -0.00025197677, -0.0319215, 0.03540255, 0.023207024, 0.00042884154, -0.05006087, 0.022484764, 0.0038066625, 0.04229362, 0.0036941795, 0.027422179, 0.008797357, -0.022413723, -0.0109345345, 0.0045970036, -0.05048712, -0.0063464106, 0.025054114, -0.024793627, -0.007785009, -0.052997265, -0.05091337, -0.016813252, 0.023491193, -0.015297691, -0.007867891, 2.068587e-05, -0.022875495, 0.037794296, 0.015842346, 0.009478175, 0.049255725, -0.009063764, 0.030642744, -0.0031465646, 0.038836244, 0.07734096, 0.02342015, -0.041772645, -0.008566471, -0.0038836244, -0.019122114, -0.021880908, -0.039807152, 0.0040434687, 0.0075008417, -0.0035935366, -0.031068996, -0.027730025, 0.016623808, 0.006837784, -0.034052756, 0.016090993, -0.06805815, -0.010123473, 0.05948576, -0.039215136, 0.04792961, 0.009584738, -0.02749322, 0.062990494, 0.0646955, -0.015794985, -0.027374817, 0.03942826, 0.01967861, 0.02673544, 0.04127535, 0.054323383, -0.0150016835, 0.009969548, 0.083119035, -0.01748815, -0.012088966, -0.023609595, 0.058491174, 0.039120413, 0.02711433, 0.0006045963, 0.027564261, -0.0038925046, 0.021632262, 0.011846239, 0.0021430976, -0.039901875, 0.05380241, -0.14312577, -0.049587253, -0.018861627, -0.023325428, 0.013059871, 0.039807152, -0.0054909475, 1.3146916e-05, -0.01523849, 0.024391057, 0.020779759, -0.0126691405, 0.026877522, -0.003013361, -0.009791943, -0.035994567, -0.041133266, 0.030334895, 0.019737812, 0.015759464, 0.006618738, -0.015214809, -0.013403241, 0.03575776, -0.040801737, -0.024201611, 0.030926911, -0.000556865, 0.08013528, -0.030642744, -0.02343199, -0.01040172, -0.0008421427, -0.09079156, -0.07989847, 0.05948576, 0.025219878, 0.0094840955, -0.0029245587, -0.05058184, 0.042885635, 0.03303449, -0.014918801, -0.03457373, 0.017203983, 0.015060885, 0.035994567, 0.04546682, -0.006766742, 0.07052094, 0.0050469358, -0.024935711, 0.012503376, -0.037107557, 0.027658984, -0.00043735176, 0.013355879, -0.031471565, 0.00046399247, -0.024556821, -0.0069029056, -0.013107233, -0.028582528, -0.0017656875, -0.020460071, -0.0008665633, 0.012538897, 0.018897148, 0.0021401376, 0.028795654, 0.03237143, 0.023585914, 0.046769258, 0.013462442, -0.028653571, 0.0049640536, 0.030263854, -0.012112645, -0.07743568, 0.05100809, -0.01854194, -0.023372788, 0.026285507, 0.009845225, -0.009353852, 0.048190095, -0.020921843, -0.021111287, 0.018849786, 0.049918782, 0.004990694, -0.050771285, -0.04615356, -0.026593355, 0.0842557, 0.01783152, -0.0061392053, 0.018115688, 0.08051416, 0.05920159, 0.044851128, 0.04125167, -0.042435702, 0.00017917732, -0.019027391, -0.007684367, -0.006109604, -0.035118386, -0.029861283, -0.014516231, -0.06493231, -0.0029245587, 0.016090993, 0.006476654, -0.029624477, 0.034763176, -0.03125844, -0.009146646, 0.0072285146, 0.04129903, -0.00039924073, 0.004120431, 0.022899175, 0.0371786, 0.0010967095, 0.01714478, -0.017938083, 0.017736796, 0.034265883, -0.034431648, -0.031684693, -0.0050350954, -0.0053784647, 0.06479023, -0.03047698, 0.024840988, -0.030429618, 0.0140662985, 0.019003712, 0.017215824, 0.0002817626, 0.0034692134, 0.003827383, 0.0031524848, -0.04241202, -0.036302418, 0.043619733, -0.06270633, -0.01337956, -0.021679623, -0.0002817626, 0.02488835, 0.007021309, 0.02789579, 0.03305817, -0.033579145, -0.0077080475, -0.0003533595, 0.048971556, 0.03421852, -0.0067134607, -0.03530783, 0.03833895, 0.0142557435, -0.001929972, -0.021857228, 0.048876833, 0.005786956, 0.035568316, 0.034479007, -0.004949253, -0.026356548, 0.029269267, -0.04137007, 0.022721572, -0.08946545, 0.043643415, 0.010241875, -0.016564606, 0.034431648, -0.068626486, -0.03530783, 0.009265049, 0.0394993, -0.053991854, 0.029482393, -0.01300067, -0.0029511994, 0.035473593, 0.041512158, 0.030169131, -0.024237132, 0.06507439, 0.0057159136, 0.040564932, -0.0026167105, 0.0319215, -0.007370598, 0.008015895, -0.02269789, -0.08060889, -0.034715813, 0.008838798, -0.035852484, -0.015570018, 0.024248973, -0.020921843, 0.056312554, -0.0048782113, 0.023526713, 0.0512449, 0.001636924, 0.0011647913, -0.028771974, -0.034786854, -0.06460078, -0.024817308, 0.014196542, 0.040991183, 0.033579145, 0.04837954, -0.005860958, -0.07345734, 0.06914746, 0.015202969, -0.024095047, -0.014753037, 0.013983416, -0.021632262, 0.0063700913, 0.018968191, 0.07487817, -0.0289851, -0.02418977, -0.020282466, -0.12190792, 0.069763154, 0.030548021, 0.03575776, 0.011378546, -0.0215849, -0.0009583258, 0.021217851, -0.051481705, -0.013332198, 0.013426921, -0.014468869, -0.014445188, -0.06303786, 0.007548203, -0.050723925, -0.023479352, -0.02934031, 0.008377025, 0.024580501, -0.009738662, -0.016955337, 0.03575776, -0.033626504, -0.052571014, 0.0349763, 0.045656268, 0.008371105, 0.0013697769, 0.01937076, 0.02191643, 0.011118059, 0.034692135, 9.426004e-05, 0.00031691353, -0.0475744, 0.01707374, 0.01597259, 0.015451616, -0.07700943, 0.017997283, 0.062185355, 0.010585245, -0.022472924, -0.04392758, -0.00073002966, 0.00893944, -0.024237132, -0.058207005, 0.019666769, -0.07440456, -0.02043639, -0.008607912, -0.019204997, 0.05986465, -0.025219878, -0.023550393, 0.053755045, 0.013438761, -0.035473593, -0.029435031, 0.040707015, 0.03684707, -0.00631089, 0.013983416, 0.012432334, 0.0022748213, 0.018328814, 0.0033478502, 0.03230039, 0.018056486, 0.0123849735, 0.052286845, 0.0313058, -0.010129392, 0.0046976465, -0.03227671, 0.00817574, -0.031708375, 0.028511487, -0.012929628, -0.00818166, 0.03751013, -0.07819346, -0.0034218521, -0.05645464, 0.014184701, 0.023514872, -0.027043287, 0.008063257, -0.0014252784, 0.02564613, 0.003756341, 0.0024287454, -0.014681995, 0.04089646, 0.0066364985, 0.014930641, 0.041535836, -0.0014008577, -0.01117726, 0.032229345, -0.080087915, 0.035142064, -0.013272997, 0.014018937, -0.024201611, -0.016623808, 0.02675912, -0.0058994386, 0.025054114, -0.0035757762, -0.003312329, -0.040233403, 0.017571032, -0.013663728, -0.0409675, 0.026285507, 0.001041208, 0.021573061, 0.0034484928, 0.046248283, -0.101353124, 0.0019122114, -0.05825437, -0.042151533, 0.011485109, -0.025598768, -0.027019607, -0.009010483, -0.04837954, -0.023917444, -0.009217688, -0.01375845, 0.039120413, 0.016138354, 0.036278736, -0.054844357, 0.025527727, 0.02450946, 0.061048683, -0.021999313, -0.0032797682, -0.058633257, -0.011224622, 0.05541269, 0.014741196, -0.0043897983, 0.003386331, -0.009643939, -0.005357744, 0.024651542, 0.001670965, -0.06317994, -0.023870083, 0.038481034, 0.016659329, 0.042175215, -0.015664741, 0.02640391, 0.027777387, 0.06867385, -0.006233928, -0.034407966, 0.0025885897, 0.024556821, 0.0579702, 0.004798289, -0.035426233, 0.029979687, -0.0008029216, 0.007121952, -0.015723944, -0.051955316, -0.0050350954, -0.011005576, -0.00446084, -0.0034692134, 0.0066957003, 0.022496605, 0.030263854, 0.011946881, 0.021395456, -0.0053518238, -0.002191939, 0.015345053, 0.038362633, 0.020732397, -0.042932995, -0.03414748, -0.035213105, -0.019453643, -0.03651554, -0.0070035486, 0.0023606636, 0.009608419, 0.030192813, 0.036562905, -0.01040764, -0.04797697, -0.054796994, -0.026995927, -0.04238834, -0.0055856705, -0.020886322, 0.017997283, 0.048829474, -0.034952622, -0.038102146, -0.03234775, 0.012302091, 0.009934028, 0.01783152, -0.017038219, 0.018281452, 0.01079837, 0.014267583, -0.005727754, -0.042956676, 0.046058837, -0.015510817, -0.0067371414, -0.0333897, 0.064884946, 0.030003367, -0.03895465, -0.023467511, 0.027635304, -0.0034632932, 0.06251688, 0.0333897, 0.006245768, 0.005413986, -0.0057662353, -0.016529085, -0.044022303, -0.014516231, -0.029813921, -0.009833384, -0.0014104779, 0.049208365, -0.0023073822, -0.013308518, -0.04160688, 0.0357104, 0.0030015206, -0.030524341, 0.012609939, -0.005505748, 0.047408637, -0.0067075402, -0.04383286, 0.010336598, 0.10684703, 0.011041097, -0.03715492, 0.017665755, -0.038930967, -0.03684707, -0.0014311984, -0.01825777, -0.050676562, -0.00816982, 0.06360619, -0.0050291754, -0.05091337, -0.05171851, 0.008678953, 0.021158649, 0.030737467, -0.016387, -0.016268598, 0.012823065, 0.009851145, -0.012965148, 0.0118699195, 0.003122884, 0.00036704988, 0.0011551711, 0.0048959716, 0.019986458, -0.0018026885, -0.047455996, 0.01972597, 0.026995927, -0.079851106, 0.03490526, -0.002151978, -0.12001347, -0.022520285, 0.07464137, -0.0077790893, 0.027351135, 0.0049374127, 0.0275169, 0.06540592, 0.0066128178, 0.055649497, 0.030690106, 0.02010486, 0.059722565, -0.022247959, 0.007577804, -0.009797864, -0.013711089, -0.009093365, 0.017381588, 0.009750502, -0.004724287, 0.006216167, -0.009342011, -0.03715492, -0.02266237, -0.024272652, -0.0032176066, 0.015498977, -0.0015081606, 0.01593707, -0.008282303, 0.0512449, 0.015214809, 0.07099455, -0.028724613, -0.025030434, 0.01375845, -0.011597592, 0.048403222, -0.0096617, -0.010010989, 0.042246256, -0.013426921, 0.03940458, 0.005647832, -0.016517244, 0.019643089, 0.026924884, -0.023585914, 0.0071989135, -0.030713785, -0.04051757, 0.013900534, 0.0037948221, 0.016327798, -0.031708375, -0.035923526, -0.03751013, -0.01857746, -0.0065713767, 0.06526384, -0.055838943, -0.06284841, -0.03755749, 0.009602498, -0.025764532, -0.0027099529, 0.016647488, -0.017618394, -0.018423535, -0.022461085, -0.028511487, -0.059296314, -0.002819476, -0.03983083, -0.032868724, 0.0002717723, 0.026096063, -0.048640028, -0.009845225, 0.0025974698, -0.05081865, -0.027682664, 0.057117697, 0.04944517, -0.007323237, -0.00063826714, -0.05081865, 0.027066968, -0.008519109, 0.014338626, -0.014670155, -0.009164407, -0.023503032, 0.0082231015, 0.022472924, 0.003954666, -0.0071337917, -0.053707685, -0.03646818, 0.03452637, 0.019986458, -0.0027957952, 0.07956694, 0.022875495, 0.0016561645, -0.018423535, 0.0058964784, -0.04650877, 0.045940436, 0.036278736, 0.035520956, -0.0044845208, -0.027635304, 0.024556821, -0.045206334, 0.008732235, -0.022555808, 0.039570343, -0.005280782, 0.035071023, -0.049161002, -0.014551751, 0.003045922, -0.005126858, 0.03201622, -0.018968191, -0.010324758, 0.036586583, 0.03935722, 0.05025031, -0.04345397, -0.023254385, -0.06578481, -0.012373133, -0.04546682, 0.05205004, -0.009128885, -0.013580846, -0.031850457, -0.024296334, -0.008311904, -0.0015836426, -0.042625148, -0.018423535, 0.025575088, 0.008015895, 0.019785171, -0.0025308682, -0.014326786, 0.0016265637, 0.015345053, -0.013272997, 0.005428786, 0.03275032, -0.012231049, -0.030358577, -0.039617706, -0.006589137, 0.012124486, 0.013616366, 0.07061566, -0.008442147, -0.010348438, -0.014705676, -0.039949235, 0.03940458, -0.01965493, -0.0065950574, -0.022378203, -0.035899844, -0.005461347, -0.005277822, -0.0040641893, 0.032442473, 0.01892083, -0.023964806, -0.0030755228, 0.000779241, -0.008069177, -0.014030778, 0.011822558, 0.02529092, 0.025598768, 0.03942826, 0.008684874, 0.020306146, 0.0016635647, 0.015108246, -0.014220223, 0.014078138, -0.059627842, 0.012012003, 0.029174544, -0.032229345, 0.004286195, -0.035023663, -0.021324413, -0.030713785, 0.019287879, 0.028298361, 0.009217688, -0.012491536, -0.02190459, -0.00857239, -0.005798796, -0.013450602, -0.020732397, 0.008655272, 0.01598443, -0.021857228, -0.037107557, 0.013782131, -0.012083045, 0.025196198, 0.0431698, 0.035023663, 0.017192142, -0.0039990675, 0.00780277, -0.026901204, -0.031447887, -0.012231049, -0.025054114, 0.008045496, 0.03819687, 0.012917788, 0.046532452, 0.022887336, 0.0041885125, -0.012444175, -0.003386331, 0.03317657, -0.012160007, -0.05872798, 0.0051357383, -0.013782131, 0.011189101, 0.019619407, 0.01523849, 0.036278736, 0.031187398, 0.038765203, -0.01487144, -0.023171503, -0.033152893, 0.008714475, -0.017346067, 0.0022748213, 0.03975979, 0.039167773, 0.013201955, 0.014835919, -0.004152992, 0.00968538, 0.00014929901, -0.036918115, -0.042198896, -0.053991854, -0.005100217, -0.0102300355, -0.009490015, 0.017286865, 0.06294313, 0.01336772, -0.0357104, 0.014978003, 0.0035195346, -0.0061865663, -0.005082457, 0.033294976, 0.04212785, -0.015664741, -0.03410012, 0.0050528557, -0.061190765, 0.04122799, -0.00409379, -0.0017227663, 0.019110274, -0.03234775, -0.03895465, 0.048971556, -0.052997265, 0.035094704, 0.013675568, -0.03374491, -0.0016324839, -0.042175215, 0.022236118, 0.01525033, -0.006023762, 0.0049936543, -0.040091317, 0.034336925, -0.0017035258, 0.009051924, 0.0067785825, 0.0017656875, -0.0039280257, -0.03677603, 0.008163899, 0.004377958, -0.021395456, 0.024746265, -0.007844211, -0.014942482, -0.0056271115, 0.014480709, -0.031116357, 0.01637516, 0.03464477, 0.024177931, 0.02266237, -0.0020010138, 0.04163056, 0.0061628856, 0.029506074, -0.013284838, -0.051481705, 0.013580846, 0.009217688, 0.031092677, -0.00059534603, -0.007104191, -0.01967861, -0.0016088033, 0.0215849, -0.021869069, -0.017938083, 0.015783144, 0.051150177, -0.022875495, -0.0031406444, 0.030192813, -0.051813234, 0.0034011316, 0.024000326, 0.057070334, 0.029695518, -0.00631089, 0.030263854, -0.015345053, 0.019927256, 0.0003010031, -0.02119417, 0.0066957003, 0.0431698, -0.015025364, 0.012538897, 0.03353178, -0.02571717, 0.0010545284, -0.010005069, 0.023929283, 0.011313424, 0.022721572, -0.031708375, 0.02342015, 0.03452637, -0.040422846, 0.01746447, -0.010117552, 0.0056715123, 0.028298361, 0.019844374, -0.0046562054, -0.008483588, -0.08065625, -0.0007851611, -0.0019580927, -0.07336261, 0.027540581, 0.013983416, -0.01190544, -0.04208049, -0.019631248, 0.026451271, 0.000856203, 0.022330841, 0.008128379, -0.033342335, -0.030003367, 0.015380573, 0.0044164388, -0.009561057, 0.011479189, 0.000630127, 0.0056981533, -0.017215824, 0.034455325, -0.013154594, -0.07284164, 0.0066364985, -0.04385654, 0.02339647, -0.023372788, -0.00079034123, -0.03308185, 0.0045970036, 0.021573061, 0.007027229, -0.0319215, -0.0061628856, 0.02860621, 0.010520123, 0.023289906, 0.004573323, 0.017926242, 0.047313914, 0.013829492, -0.015108246, -0.0044371593, 0.00019092513], [-0.013563452, 0.004578115, -0.032739367, 0.054685537, 0.009252169, -0.009677901, -0.0577556, 0.01767686, 0.016489608, 0.077231325, -0.018300466, 0.025495932, -0.009557976, -0.029981105, -0.00078475545, 0.032091774, -0.046026994, 0.003795608, -0.023972891, 1.9628254e-05, 0.011722612, -0.06586249, -0.080445305, -0.020003393, -0.0075312536, -0.020459106, -0.020686964, 0.007297401, 0.058762968, 0.0005396599, 0.017293101, 0.042309336, 0.048929162, 0.018432384, 0.0276066, -0.0055824816, 0.030220954, 0.0078070797, 0.010193576, -0.019331817, -0.035089884, -0.0054415707, 0.022845602, -0.05348629, -0.059482515, 0.039479118, 0.0322117, -0.017029269, -0.010415436, -0.036888752, 0.00945604, 0.017365057, 0.006967609, 0.019283848, -0.042884972, 0.00915623, 0.06725361, -0.027918406, 0.06212085, -0.01305977, -0.025615856, 0.032235686, 0.059674393, -0.0010231052, -0.024536537, 0.011692631, -0.0053786105, 0.01791671, 0.061401304, 0.08178846, -0.026407357, -0.0040444513, 0.040198665, 0.0051567503, 0.020902827, -0.03098847, 0.07372954, 0.05420584, -0.0129998075, 0.02897374, 0.05780357, -0.028901786, 0.0130118, 0.0047430107, 0.00574438, -0.011554718, 0.021478463, -0.11704624, -0.083803184, -0.004844947, 0.0068836617, 0.019943431, 0.048281573, -0.028230209, -0.0337947, 0.039551076, -0.005510527, 0.015446265, -0.04900112, 0.020159295, 0.006433945, -0.037464388, -0.044084217, -0.048065707, 0.029693287, 0.023793004, 0.031732, 0.020003393, -0.0035467648, 0.064087614, -0.022845602, -0.03549763, -0.03461019, 0.01624976, -0.014235029, 0.032691397, -0.05799545, -0.03933521, -0.016225774, -0.039215285, -0.05650839, -0.0322117, 0.04468384, 0.061017547, 0.040630393, 0.012939845, -0.018084602, 0.026431343, 0.05171141, -0.06212085, -0.04060641, 0.029837197, 0.018888097, 0.0031899896, 0.028158255, -0.018216519, 0.04492369, -0.016849382, -0.017329078, 0.009006324, -0.046818495, 0.0280863, 0.025807735, 0.03609725, -0.009246173, 0.016909344, -0.050752014, 0.011728608, -0.025112174, -0.031444184, -0.0063859755, -0.04885721, 0.0010365967, -0.0063080247, -0.0008604577, 0.0059302626, 0.04588308, 0.042789035, 0.012364208, 0.028661937, 0.0028571994, -0.056124628, -0.003121033, 0.03482605, 0.040798288, -0.029453438, 0.052526895, -0.014918598, -0.014558825, 0.019703582, 0.0021331557, 0.013659392, 0.0325235, -0.00077126396, -0.025112174, 0.0018618266, 0.041805655, 0.009042301, -0.008748487, -0.039766937, -0.036433037, 0.084138975, 0.010907126, 0.019811515, -0.0013161706, 0.07545645, 0.07468893, 0.00067794777, 0.01566213, -0.012184321, -0.01842039, -0.009887769, 0.002714789, 0.023241352, -0.041038137, 0.03703266, -0.00026552015, -0.009114256, 5.9400067e-05, 0.0129998075, 0.022233987, -0.017652875, 0.04588308, -0.029885165, 0.020710947, 0.013959203, 0.052862685, 0.010877145, 0.00672776, 0.023745036, -0.006290036, -0.02008734, -0.017125208, -0.05602869, -0.013323603, 0.014414916, -0.049121045, -0.0012629541, -0.041182045, -0.013287626, 0.021178653, -0.048929162, 0.037944086, -0.017856747, -0.02135854, 0.030340878, 0.017293101, 0.022449851, 0.0034028555, 0.026551267, 0.0026413354, -0.025687812, -0.021430494, 0.042357307, -0.06533483, 0.01689735, -0.052574866, -0.027582617, 0.033626806, 0.004422213, 0.019859483, 0.052862685, -0.02185023, -0.03249952, -0.008292774, 0.0441082, 0.015218409, -0.012556087, -0.058762968, 0.024584506, 0.027774496, -0.009899761, -0.024032854, 0.07967778, 0.0054865424, 0.07435314, 0.016981298, 0.015710099, -0.054829445, -0.00059774827, -0.056652296, 0.03461019, -0.06538279, 0.06279243, 0.010589327, -0.012508118, 0.057036053, -0.050464198, -0.040390544, 0.01875618, 0.0012464644, -0.053390354, 0.042357307, 0.0057863533, 0.021382524, 0.02057903, 0.008862414, 0.017976671, -0.029981105, 0.077231325, 0.018780164, 0.018000655, -0.006182104, 0.0021316565, -0.0198355, -0.013227664, 0.014702734, -0.07843057, -0.026287433, 0.019175915, 0.0027507665, -0.021838237, 0.026743146, -0.03727251, 0.0078070797, -0.013143716, 0.039671, 0.032691397, -0.0033758725, 0.03451425, 0.0013903738, -0.036193192, -0.03883153, 0.013287626, 0.010187579, -0.0022230989, 0.03516184, 0.05631651, -0.023984885, -0.09008723, 0.046098948, 0.05185532, -0.026047584, -0.012316238, 0.021790268, -0.040102728, 0.020746924, 0.013263641, 0.05171141, -0.014067135, 0.021550419, -0.038975436, -0.081836425, 0.052526895, 0.030220954, -0.012034415, -0.02450056, -0.017329078, 0.017077237, 0.016093858, -0.007921008, -0.0023939912, -0.04182964, 0.00070155784, -0.035041917, -0.08600979, -0.005321646, -0.08452273, -0.010757221, -0.013875255, -0.01591397, 0.04111009, 0.004632081, -0.0119564645, 0.044300083, -0.059674393, -0.01964362, 0.017125208, 0.014654764, 0.003339895, 0.0014803171, 0.02346921, 0.018084602, -0.012843906, -0.007873038, 0.017269116, -0.034706127, -0.04698639, 0.008688524, 0.026503297, 0.046914432, -0.045235492, 0.006212085, 0.048065707, -0.01291586, -0.021682335, -0.025471946, 0.01058333, 0.02096279, -0.014055142, -0.04758601, 0.0052197105, -0.05118374, -0.0023924923, -0.023493195, -0.0032589461, 0.07795087, -0.0059422553, -0.013647399, 0.049121045, 0.011158967, -0.043028884, -0.02107072, 0.029381484, 0.011506748, 0.03830386, 0.016705472, 0.032163728, -0.0060921605, 0.013167702, 0.0041913586, 0.012172328, 0.0051417598, 0.007974974, 0.0075312536, 0.04660263, -0.03815995, 0.040222652, 0.011566711, -0.011626673, -0.033626806, 0.018456368, -0.07128308, -0.035137855, 0.034706127, -0.036912736, 0.024584506, 0.0007435314, -0.03559357, 0.028565997, -0.018600278, 0.024632476, -0.012178325, 0.0021346547, 0.05003247, 0.021082714, 0.012508118, 0.032163728, -0.018180542, 0.0147387115, 0.03398658, 0.015362319, 0.02573578, 0.00928215, -0.09670705, 0.043004896, 0.0057173967, 0.01305977, -0.017724829, -0.033650793, -0.015638145, 0.0154702505, -0.008496645, 0.0032109765, -0.026287433, -0.05780357, 0.022042109, -0.002929154, -0.012460147, 0.062936336, 0.012759958, -0.029237574, 0.030652681, -0.005153752, -0.12721583, -0.0151224695, -0.038903482, -0.013791309, -0.00070642977, -0.00482396, -0.021286584, 0.025711795, -0.04487572, -0.018852118, 0.008856419, -0.009468033, 0.007597212, -0.0023085452, 0.036481008, -0.044947673, -0.02209008, 0.00020743177, 0.033866655, -0.0015964939, 0.01129688, -0.04571519, -0.018780164, 0.021610381, 0.008550611, 0.013107739, -0.03904739, -0.027966375, -0.065478735, 0.02489631, 0.0026938024, -0.044420004, 0.01335958, 0.016525585, 0.0041403905, 0.04182964, -0.053630203, 0.055884782, 0.01943975, 0.05977033, 0.019271854, -0.049121045, 0.002441961, -0.01551822, 0.06922038, -7.389874e-06, -0.037296496, -0.00065283856, -0.038135964, 0.0013094248, -0.027774496, -0.037632283, 0.01345552, 0.010397447, -0.011704624, 0.0031240312, 0.034993947, 0.03225967, 0.03151614, 0.0220541, 0.019079976, 0.027966375, 0.0024524545, 0.0035107874, 0.06058582, -0.02480037, -0.032163728, -0.061497245, -0.015374311, -0.01816855, -0.015098484, -0.009689894, -0.013215671, 0.011284888, 0.008220819, 0.046626616, -0.014067135, -0.040678363, -0.05818733, -0.020567039, -0.0068416884, -0.014151081, -0.029189603, 0.009725871, 0.052910656, -0.013287626, -0.0371286, -0.030580727, -0.017964678, 0.01448687, 0.05449366, -0.029789226, 0.018852118, -0.0008469662, 0.0019607642, 0.010685266, -0.00027901167, 0.03151614, -0.038903482, 0.0049858578, -0.0050578127, 0.063511975, 0.0487133, -0.01090113, -0.04027062, -0.013239657, -0.01394721, 0.057659663, 0.026167508, 0.025399992, 0.0075192614, 0.006403964, -0.042261366, -0.03904739, 0.017808776, -0.024536537, -0.02592766, 0.009545984, 0.03885551, -0.0074473065, -0.024272703, -0.050272316, 0.041613773, 0.018864112, -0.009036305, 0.028949756, -0.01870821, 0.064567305, 0.0023715054, -0.04547534, 0.009042301, 0.07761508, -0.0045001637, -0.039263256, -0.016489608, -0.012436163, -0.01802464, 0.011326862, -0.026191493, -0.03722454, 0.011380828, 0.02480037, 0.0027687552, -0.037392434, -0.055548992, -0.0001284503, 0.012496125, 0.04055844, -0.02784645, -0.010259534, 0.03177997, -0.022221996, -0.009324124, 0.026575252, 0.017808776, 0.034202445, -0.0045631244, -0.031204334, 0.037152585, 0.04684248, -0.052958626, 0.053342383, -0.007327382, -0.08154861, 0.013131724, 0.0016519589, -0.11071423, -0.017377049, 0.062840395, -0.0002475315, 0.028685922, -0.040342577, 0.016753443, 0.040582426, 0.019079976, 0.054349747, 0.06643813, 0.026527282, 0.032139745, -0.0058433176, 0.017053252, -0.0056814193, -0.045931052, 0.0065478734, -0.022257973, -0.0076871556, -0.01964362, 0.01738904, -0.022401882, -0.035521615, -0.01085316, -0.010637296, 0.01058333, 0.0184084, -0.009084275, 0.028326148, 0.021430494, 0.041997533, 0.0094140675, 0.06634219, -0.029357499, -0.018156558, -0.0007885031, 0.012460147, 0.04370046, 0.00042835504, -0.01180656, 0.040486485, -0.0045691202, 0.050704047, 0.007980971, -0.03461019, 0.02926156, 0.046794508, -0.026767131, -0.0014728218, -0.0033968592, -0.017377049, 0.023409247, -0.0037086627, 0.01404315, -0.003005606, -0.03751236, -0.021490457, -0.0064159567, 0.022114063, 0.06562264, -0.020051364, -0.06624625, -0.026479313, 0.010955096, -0.020543054, -0.016513593, 0.037104618, -0.029693287, -0.024344657, -0.007273416, -0.005672425, -0.0150864925, -0.019775538, 0.010307504, -0.008526626, 0.0042213397, 0.037104618, -0.0017374051, -0.0028017343, -0.0015874995, -0.05223908, -0.0068236995, 0.050080437, 0.043796398, 0.017844753, -0.0118845105, -0.06178506, 0.00054453185, 0.008652547, -1.2788815e-05, -0.025256082, -0.016573556, -0.032979216, 0.015997918, -0.010019685, 0.009042301, -0.011998438, -0.042956926, -0.013671384, 0.033075154, -0.019127944, 0.007483284, 0.091622256, 0.026551267, -0.018768173, -0.015062507, -0.0007832564, -0.056364477, 0.055357113, 0.045931052, 0.021322561, -0.029045695, -0.031252306, 0.033890642, -0.04449196, 0.008088903, -0.0014435903, 0.034490265, -0.008826437, 0.037944086, -0.034058537, 0.025016235, 0.002654827, 0.0039215283, 0.022353912, -0.057899512, -0.018468361, 0.00032248427, 0.004931892, 0.043916322, -0.02450056, -0.026143523, -0.06715768, -0.02180226, -0.054733507, 0.026383372, -0.015985925, 0.0070995255, -0.0061461264, -0.010337485, 0.008424691, -0.015146455, -0.028350133, -0.034754097, 0.034921993, 0.005999219, 0.016477615, -0.012292253, -0.006919639, -0.0288778, -0.022389889, 0.0013206677, -0.0019652615, 0.03825589, -0.018192535, -0.038927466, -0.07665569, 0.005342633, 0.0085686, 0.020063356, 0.08063718, -0.009959723, -0.0041613774, -0.006071174, -0.021922184, 0.044947673, 0.004614092, -0.008730498, -0.0029096662, -0.005639446, -0.039694984, 0.008844426, -0.032643426, 0.035377704, 0.02691104, -0.021502448, 0.0021226623, 0.0026173505, -0.03756033, -0.008160857, 0.004778988, 0.008388713, 0.014846643, 0.029069679, -0.016933328, 0.00928215, -0.0022365905, 0.012939845, 0.0074473065, 0.009665908, -0.06888459, -0.0025319043, 0.028494043, -0.035977326, 0.008688524, -0.013419542, -0.016033895, -0.0025393995, 0.038927466, -0.01556619, 0.02450056, 0.013755331, 0.020267228, 0.006889658, 0.007705144, 0.00839471, -0.00883843, -0.0071474956, 0.02784645, -0.00016433393, -0.024968265, 0.022965526, -0.012532102, 0.04360452, 0.024728416, 0.03657695, 0.0071834726, 0.0055195214, 0.010553349, -0.016069872, -0.039958816, -0.015302356, -0.022845602, 0.0051417598, 0.041206032, -0.012274264, 0.052143138, 0.003825589, 0.011686635, -0.01842039, -0.017209154, 0.04082227, 0.02990915, -0.063416034, -0.013887248, -0.012256276, 0.013587437, -0.012855898, 0.018840127, -0.00051979744, 0.052143138, 0.024524543, -0.017832762, -0.01758092, -0.019043999, -0.020842865, 0.0035347724, -0.0066558053, 0.04111009, 0.0041883606, -0.0051957257, -0.0147387115, -0.026215479, 0.022641731, 0.041325957, -0.03679281, -0.051087804, -0.014606794, -0.021694329, -0.039215285, -0.0008604577, 0.023013497, 0.049840588, 0.018228512, 0.002978623, 0.026167508, -0.015698107, -0.0009953727, -0.00036389567, 0.029837197, 0.02573578, -0.021430494, -0.02784645, -0.024176763, -0.05857109, 0.015038523, -0.013515483, 0.008046929, -0.015770061, -0.027174873, -0.03432237, 0.005510527, -0.029453438, 0.009659912, -0.001956267, -0.019079976, -0.012604057, -0.026071569, 0.02327733, 0.011812556, 0.020758918, -0.0045121564, -0.027390737, -0.0016204787, -0.006320017, 0.0083707245, 0.0099357385, 0.0069496203, 0.0042843, -0.056748237, -0.019619636, 0.025280068, -0.022677708, -0.0045121564, -0.012484132, -0.020075347, -0.0032889273, 0.0458591, -0.020746924, -0.0024509553, 0.020471098, 0.03314711, 0.011302876, -0.00052579364, 0.02361312, 0.03485004, 0.03206779, -0.00020630748, -0.02258177, 0.022797633, 0.0064699226, 0.033890642, -0.01161468, 0.018012648, -0.019631628, -0.0030325889, 0.03381869, -0.015578182, -0.03909536, -0.0010088641, 0.02361312, -0.029957121, 0.010271527, 0.007357363, -0.061928973, -0.006032198, 0.02902171, 0.04130197, 0.011602688, -0.015686113, 0.011212934, -0.02224598, 0.023265338, -0.01900802, -0.02043512, -0.006829696, 0.023433233, 0.0037536344, 0.028613968, 0.039071377, -0.01640566, -0.0015830024, -0.00906029, 0.020543054, 0.013155709, 0.0017149192, -0.026311418, 0.028374119, 0.050752014, -0.050656077, 0.010607315, -0.0047370144, 0.022413874, 0.04209347, 0.016537577, -0.03883153, -0.004874928, -0.051039834, 0.027966375, 0.014954575, -0.05401396, 0.014127097, 0.0011430297, 0.008988336, -0.035569582, -0.026695177, 0.022042109, 0.0068776654, -0.004910905, -0.013323603, -0.043244746, -0.031012455, 0.035905372, -0.0047250222, -0.019703582, 0.021430494, 0.018672232, -0.005069805, -0.015542205, 0.018732194, -0.03338696, -0.06461528, 0.016081864, -0.04415617, 0.0144269075, -0.00049656205, 0.01085316, -0.034346353, 0.02583172, 0.010157598, -0.029501408, -0.02892577, 0.013143716, -0.00035452656, 0.03211576, 0.0111889485, -0.010241546, 0.02976524, 0.06869271, 0.022473836, -0.054685537, 0.030844562, 0.0017973672], [-0.02292676, -0.00453071, -0.03217032, 0.047219563, 0.0061642705, -0.029233327, -0.033581898, 0.011816274, 0.01568673, 0.048676677, -0.020240208, -0.005205194, -0.0006862233, -0.0008986004, -0.007570157, 0.04114067, -0.006847292, -0.012157786, -0.004357109, -0.022175437, -0.04776598, -0.05414085, -0.06110767, -0.02027436, 0.005444252, -0.013182318, -0.013330306, 0.004658777, 0.00090998405, 0.030212324, 0.01630145, 0.02572715, 0.043713387, 0.0046246257, -0.023313805, 0.0027292408, 0.024042362, 0.04387276, 0.037270214, 0.014001944, -0.022357576, -0.010928347, 0.03346806, -0.021412728, -0.0032471989, -0.01827083, 0.0062439563, -0.0006826659, -0.004644547, -0.0018370437, -0.011747972, 0.015527359, -0.031874344, -0.025567777, -0.022084367, 0.012465145, 0.04542094, -0.005891062, 0.08961244, -0.008446701, -0.032580134, 0.05259267, 0.035494357, -0.04234734, -0.03210202, -0.041049603, 0.0057174605, 0.030667672, 0.08168939, 0.03374127, -0.037725564, 0.019090455, 0.02581822, -0.025431173, -0.0024432254, -0.031601135, 0.055734567, 0.0155956615, -0.015265534, 0.011360927, 0.04070809, 0.02502136, 0.013671817, -0.010228249, 0.022596633, -0.030098489, 0.032580134, -0.115658335, -0.02684275, 0.027093193, -0.009175258, 0.04428257, 0.04455578, 0.01605101, -0.025408406, 0.035016242, 0.006067509, 0.01124709, -0.021617636, 0.020786626, -0.028026655, 0.0043229577, -0.07344759, -0.027161494, -0.009135415, 0.006113044, 0.055552427, 0.033809572, -0.037816633, -0.072810106, -0.0031447455, -0.01512893, -0.04011614, 0.0035232534, -0.0082304105, 0.06456831, -0.055324756, -0.038750093, -0.0020291435, -0.029233327, -0.092572205, -0.04619503, 0.06119874, 0.06743701, 0.032033715, -0.021742856, -0.021378579, 0.053366758, 0.014958174, -0.046240564, -0.050452534, 0.02745747, 0.03959249, 0.055142615, 0.012248855, 0.028186027, 0.046764217, -0.010899887, -0.030189557, 0.009926582, -0.057328284, 0.026637845, -0.017394286, 0.040070605, 0.007928743, 0.0030081412, -0.05309355, -0.022095751, -0.0120781, 0.025044128, -0.0076896856, -0.04316697, -0.05928628, -0.035539895, -0.038158145, -0.0409813, 0.021902228, 0.056690797, -0.008065348, 0.0326029, -0.037862167, -0.042051367, -0.003093519, 0.04567138, 0.006739147, -0.014138549, 0.03173774, -0.0075473893, -0.06675398, 0.024679849, 0.014218234, -0.011679671, 0.01929536, -0.01769026, -0.030895347, 0.03515285, 0.06242818, 0.025909288, -0.008361324, -0.06538794, -0.025294568, 0.06024251, 0.052000716, -0.020809393, -0.0048978343, 0.08059656, 0.033672966, 0.016654344, 0.03392341, -0.01482157, -0.010729132, 0.009619222, -0.04471515, 0.024361106, -0.04649101, -0.02677445, -0.0017360133, -0.017121077, 0.01100234, 0.011736589, -0.037702795, -0.024270035, 0.037543423, -0.03722468, -0.028482003, -0.019682407, 0.027366402, 0.010433156, 0.025522243, 0.012271622, 0.0058227596, -0.0028886124, 0.0094200075, -0.0074278605, 0.00042190816, 0.050088257, -0.036837634, -0.0049718283, 0.013922258, -0.048449002, 0.06898519, -0.035972472, 0.01525415, -0.012533448, 0.0002287411, 0.022334808, 0.0039302204, 0.011258474, 0.048175793, -0.0009846896, 0.019955616, -0.053048015, -0.055324756, 0.0005467731, -0.04662761, -0.03276227, -0.058193445, -0.033081014, 0.016654344, 0.011651211, 0.012556215, 0.05282034, -0.018760327, -0.007564465, 0.015538743, 0.028094957, 0.02483922, -0.019989768, -0.029096723, 0.014229618, 0.029961884, -0.0086686835, 0.004422565, 0.04967844, 0.019705174, 0.050771277, 0.045739684, -0.0014172699, -0.04262055, 0.027093193, -0.013649049, 0.062929064, -0.05327569, 0.077910006, -0.02572715, -0.015447673, 0.017974854, -0.06775575, -0.05081681, -0.02650124, -0.0032671203, -0.061836228, 0.04881328, 0.016438054, -0.01812284, 0.021959146, 0.07107979, 0.042051367, -0.03016679, 0.039433118, 0.013216469, 0.019853164, -0.0071261926, 0.0346292, -0.0025428326, -0.036177382, 0.04027551, -0.06251925, 0.0053161853, 0.0041436646, -0.025749916, -0.01953442, 0.04976951, -0.011099102, 0.030758742, -0.035722032, 0.019488884, 0.021606252, -0.021503799, -0.011782124, -0.01700724, -0.009317554, -0.0788207, -0.05919521, 0.014571128, 0.018999387, 0.0007918782, 0.061335344, -0.018896932, -0.09325522, 0.040935766, 0.0006887135, -0.03731575, -0.03808984, 0.006323642, -0.045807987, 0.019204292, 0.041573253, 0.06420404, -0.024816453, 0.018896932, -0.025772683, -0.05641759, 0.0033382683, 0.01525415, -0.0017644726, 0.016369753, -0.043736152, -0.017052773, 0.026045892, -0.020103604, -0.00016221765, -0.028527537, -0.009152491, -0.025408406, -0.06661738, -0.034743033, -0.0862884, 0.001377427, -0.018896932, -0.032489065, 0.020502033, -0.029984651, -0.0022084366, 0.06169962, -0.03390064, 0.028527537, 0.0025357178, -0.007991353, 0.024270035, 0.0012806656, 0.034902405, -0.009841204, 0.025180731, -0.016529124, -0.017633343, -0.06242818, -0.032443527, -0.018009005, 0.002121636, 0.04330357, -0.062200505, 0.031259626, 0.06215497, -0.009863971, -0.0031902804, -0.06538794, -0.020672789, 0.012260239, -0.029073955, -0.046582077, 0.0051539675, -0.016028242, -0.008634532, -0.019796245, -0.0038676101, 0.034720268, 0.019306745, -0.04437364, 0.041117903, 0.03280781, -0.039228212, -0.0058227596, 0.020479266, 0.01993285, 0.025294568, -0.003648474, 0.040935766, -0.00497752, 0.026751682, 0.015607045, 0.028231561, 0.023154434, 0.0068757515, 0.014127164, 0.021959146, -0.02641017, 0.030439999, -0.013797037, -0.0012500719, -0.029984651, 0.02773068, -0.06015144, -0.04234734, 0.028869048, -0.06689059, 0.033285923, -0.0018754636, -0.016745415, 0.046513774, -0.03362743, 0.030030185, -0.018202526, 0.04234734, 0.0011974224, -0.031464532, 0.058330048, 0.032557365, 0.020354046, 0.0071318843, 0.0346975, -0.017530888, 0.01460528, 0.027935585, -0.06707273, 0.040047836, -0.0054470976, 0.012692819, -0.002643863, -0.028709676, 0.035198383, 0.022118518, 0.0043058824, -0.0032329692, -0.015527359, -0.02572715, 0.022118518, -0.043804456, -0.022072984, 0.018327748, -0.0069440533, -0.00982982, 0.009852587, 0.042825457, -0.0735842, 0.01790655, -0.05327569, 0.01611931, 0.039342046, -0.018407434, -0.0326029, -0.0056377747, -0.07007802, 0.0028046577, 0.028664142, -0.0036399362, 0.012681436, 0.021799775, 0.024725383, -0.09220792, -0.037292983, 0.012009798, 0.04287099, 0.02581822, 0.047720447, -0.010330702, -0.014252385, 0.017963469, 0.026728915, 0.033718504, -0.049496304, -0.011816274, -0.05546136, 0.021685937, 0.009488309, 0.0010885658, 0.019397816, 0.054322988, 0.0305083, 0.021185055, -0.00813365, -0.012374076, 0.01707554, 0.04054872, 0.024634315, 0.0015681039, 0.03419662, -0.0067220717, 0.08200813, 0.03025786, -0.046604846, 0.01611931, -0.030371696, 0.005953672, -0.0059024454, -0.016904786, 0.022095751, -0.029347165, -0.027229797, -0.005558089, 0.02973421, 0.018840015, 0.04480622, 0.023336573, 0.05136323, -0.004359955, -0.041004065, -0.023700852, 0.02859584, -0.0070863497, 0.010677905, -0.05546136, -0.04218797, -0.029187793, -0.03164667, -0.0044026435, 0.0015168772, 0.017963469, -0.017804097, 0.05022486, -0.004889297, -0.0052023483, -0.058876466, -5.1093222e-05, -0.022016065, -0.0034691808, -0.011241398, 0.001751666, 0.028755212, 0.0102965515, -0.011839042, -0.03296718, -0.0063521015, 5.0248338e-05, 0.011537374, -0.017269064, 0.04011614, 0.001228016, 0.006261032, 0.04387276, 0.005484095, 0.020752475, -0.028800746, -0.012863575, -0.0072343377, 0.0663897, 0.052911412, -0.01817976, -0.03531222, 0.012032565, -0.023006447, 0.0020604488, 0.033968944, -0.004912064, 0.037452355, -0.030462766, -0.07649843, -0.052091785, 0.0056434665, -0.034469828, -0.006511473, 0.004359955, 0.06156302, -0.012658668, -0.017952086, -0.040389348, 0.027298098, 0.013330306, -0.005580856, 0.014104397, 0.014571128, 0.059969302, 0.0046758526, -0.020752475, -0.02754854, 0.08150725, -0.0006968955, -0.04854007, -0.026865518, -0.026751682, -0.034925174, -0.006704996, -0.018692026, -0.054778337, 0.021777008, 0.027525773, -0.031259626, -0.042688854, -0.02973421, 0.0135921305, -0.004092438, 0.045807987, -0.066298634, -0.052228387, -0.013888107, 0.018566806, -0.017155228, 0.027298098, -0.002865845, 0.014377606, -0.015515976, -0.016039625, 0.051408764, 0.03339976, -0.021116752, 0.0452388, -0.016790949, -0.08669822, 0.016039625, -0.0053474903, -0.07576987, -0.026205264, 0.050589137, -0.014502826, 0.016073776, -0.04976951, -0.006249648, 0.0744949, 0.012931877, 0.040753625, 0.052501597, 0.016802333, 0.05259267, -0.014024711, 0.048084725, 0.0005151122, -0.018692026, 0.0023407722, -0.0068074493, 0.006340718, -0.005999207, 0.013432759, -0.016130695, -0.03059937, -0.016073776, -0.012442377, -0.006813141, 0.009943657, 0.008532079, 0.033331458, 0.023404876, 0.00594798, -0.012499296, 0.095440894, -0.02276739, -0.0015311069, 0.036860403, -0.0021657478, 0.047720447, -0.03321762, -0.030713208, 0.041596018, -0.0033211927, 0.06725486, 0.032989945, -0.011087718, 0.028732445, 0.01700724, -0.000705789, 0.015288302, -0.02406513, -0.040662557, 0.016107928, 0.03392341, 0.0033268847, -0.024907524, -0.015925787, 0.002383461, -0.007262797, -0.010666521, 0.04899542, -0.031669438, -0.053639967, -0.041004065, -0.007911667, -0.038841166, -0.007217262, 0.031965412, -0.032648437, -0.030030185, 0.0058284514, -0.053639967, -0.0011654057, 0.0015311069, -0.018316364, -0.010626678, -0.0060561253, 0.027753446, -0.0042916527, 0.013125399, 0.0050486685, -0.035630964, -0.035198383, 0.03458366, 0.016130695, -0.0011561564, -0.022972295, -0.06557008, 0.01700724, -0.0021458264, 0.010717748, -0.008714218, -0.011793507, -0.031464532, 0.04471515, 0.0040440573, 0.01827083, -0.005051514, -0.039364815, -0.034492593, 0.027002122, 0.0305083, 0.029483767, 0.070487835, 0.012396843, -0.030394463, -0.01987593, 0.029597605, -0.037634492, 0.029278861, 0.057055075, 0.021947762, -0.01093973, 0.02274462, 0.016346985, -0.03836305, 0.048449002, -0.016938938, 0.021560717, -0.009180949, 0.019249827, -0.020593103, -0.017599192, 0.0051795808, -0.0067960653, 0.059513953, -0.009863971, -0.00047598072, -0.0050315927, 0.039934, 0.0043656467, -0.040685322, -0.03722468, -0.06830216, -0.007837674, -0.0004300902, 0.01895385, 0.02921056, -0.0069838963, -0.042529482, -0.011406462, -0.026524007, -0.004988904, -0.023154434, -0.027844517, 0.030280627, -0.00013696006, 0.0033382683, 0.023564247, -0.011503223, 0.0021942072, 0.0043457253, -0.009778594, -0.03836305, 0.041163437, 0.013136784, -0.037338518, -0.04029828, 0.0144686755, 0.013910875, 0.037520654, 0.10172469, -0.0065968507, -0.010154256, 0.019739326, -0.01229439, 0.032147553, -0.013398608, -0.04453301, -0.01251068, 0.0071603437, 0.012829424, 0.025840987, -0.0022923914, 0.0515909, 0.04150495, -0.023188585, -0.01709831, 0.0008423934, -0.008315789, 0.004180662, -0.019147374, -0.041823693, 0.051272158, 0.037520654, -0.01599409, 0.0028615762, -0.01707554, 0.072901174, 0.0103591615, 0.025180731, -0.056098845, 0.01303433, 0.054550663, -0.03626845, 0.012704203, -0.011918728, -0.018441584, -0.020376813, 0.02493029, 0.00964768, -0.0118618095, -0.018555421, 0.010643754, -0.012351308, -0.020035302, 0.006818833, -0.0077522956, -0.005287726, -0.006591159, -0.0010871429, -0.00018658586, 0.0017402823, -0.0060162824, -0.009488309, 0.04646824, 0.033581898, -0.015800567, -0.012692819, 0.01118448, -0.04881328, -0.030918114, -0.03913714, -0.006437479, 0.023143051, 0.056964006, -0.022756005, 0.05700954, 0.020934613, -0.007962894, 0.0004898546, 0.009755826, 0.021241974, 0.046764217, -0.033422526, -0.0014813032, -0.00423758, 0.01106495, 0.002716434, 0.06461385, -0.015288302, 0.035175614, 0.033012714, -0.009237868, -0.003466335, -0.030827044, -0.06948607, -0.014332071, -0.009630606, 0.03724745, 0.009391548, -0.009516768, 0.021708705, -0.01438899, 0.014001944, 0.05309355, -0.014457292, -0.050543603, -0.013102632, -0.0054499437, -0.04532987, -0.005646312, 0.019671023, 0.020604488, -0.0020746782, -0.015208616, 0.014036095, -0.01611931, -0.0070920414, 0.006733455, 0.012783889, -0.010564068, -0.021902228, 0.004425411, -0.00850362, -0.059605025, 0.034538127, 0.0049689827, -0.03207925, 0.00035236092, -0.014013328, -0.023268271, -0.010586835, -0.015959939, 0.03583587, 0.021139521, -0.00439126, -0.0058967536, -0.029574838, 0.038249213, 0.0071034255, -0.011008033, 0.02406513, -0.033809572, -0.0010914117, -0.0025940593, -0.008156417, -0.018236678, -0.00588537, -0.0023962676, -0.049314164, -0.029483767, 0.009004503, -0.022198204, 0.009818437, -0.023905758, -0.005999207, 0.00976721, 0.012248855, -0.030098489, -0.01605101, 0.03198818, 0.0016435209, -0.0042404262, -0.038226444, 0.03112302, -0.028186027, 0.015550126, -0.008036888, -0.027320866, 0.033263154, 0.026432939, 0.033445295, 0.008110882, 0.0033069632, -0.04234734, -0.0031788966, 0.03635952, -0.000782629, -0.024292804, -0.009778594, 0.06420404, -0.02955207, -0.013079865, 0.02074109, -0.03670103, 0.0047896896, 0.020650022, 0.035107315, -0.0104217725, -0.0049405233, 0.041345578, -0.04330357, -0.002160056, 0.0110251075, -0.019727942, 0.01177074, 0.008315789, 0.009533844, -0.0065740836, 0.010700673, -0.006744839, 0.019056303, 0.030098489, 0.031669438, 0.03164667, 0.028345399, -0.01617623, 0.016312834, 0.04532987, -0.0326029, 0.0039700633, 0.0086060725, 0.013011563, 0.029256094, 0.008754061, 0.005327569, -0.016164847, -0.030235091, 0.0078092143, -0.023165818, -0.01944335, -0.0093573965, 0.004809611, 0.00677899, -0.020433731, -0.05345783, 0.0017915089, 0.01611931, -0.012931877, 0.016312834, -0.08587859, -0.0378394, 0.032329693, 0.032420762, -0.03417385, 0.0071717273, -0.0028331168, -0.012066716, -0.004792535, 0.013512445, -0.010091645, -0.020593103, -0.021913612, -0.013933642, -0.008002737, -0.01756504, 0.010780359, -0.03419662, 0.00955092, 0.0026922438, 0.00072535477, -0.037338518, -0.00058875047, 0.02693382, 0.021606252, 0.022095751, -0.0062781074, 0.03515285, 0.050361462, -0.027252564, -0.01590302, 0.035972472, -0.011326776], [0.027411945, -0.0211414, -0.023768585, 0.0071070297, 0.027312806, -0.0021733136, -0.058392894, 0.03281502, 0.003987248, 0.03997782, 0.0089163175, -0.017411293, -0.020806806, -0.04322462, -0.01884881, 0.039382983, -0.05165144, -0.01603574, -0.011301851, -0.015081527, -0.018402684, -0.028601613, -0.051155746, 0.0046130633, 0.029171662, -0.0042970576, -0.05764935, 0.00057004945, 0.027139312, 0.038862504, 0.03390555, 0.03759848, 0.043199837, -0.03410383, 0.0099201, -0.001857308, 0.00884816, 0.034326892, 0.011580679, -0.007949712, -0.0054309606, -0.0003586045, -0.0015056742, -0.032269757, -0.030906595, -0.010533523, -0.027213667, -0.018439861, -0.01520545, 0.0033738255, 0.018910771, -0.0025063588, -0.016357942, -0.02624706, -0.068009384, -0.013111138, 0.05462561, -0.05368379, 0.07217322, -0.030336546, -0.030559609, 0.035962686, 0.098742485, -0.017039523, -0.011778957, 0.004197919, -0.0063510947, 0.008110813, 0.027213667, 0.042704143, 0.026445339, 0.0619619, 0.031625353, 0.029022954, -0.006729062, -0.03343464, 0.07093398, 0.0422828, -0.036359243, -0.032244973, 0.028502474, -0.041142702, 0.025528302, 0.003909796, -0.010892902, -0.029840851, 0.0073177004, -0.12610486, -0.011698406, 0.029047739, 0.017436078, 0.022826765, 0.02733759, -0.035120003, -0.027659792, 0.027064959, -0.014561047, 0.01671732, 0.0075097824, 0.010000651, -0.030311761, -0.05898773, -0.046694487, -0.06434124, 0.025020216, 0.009436797, 0.036061827, 0.027114527, 0.00067267386, 0.02457409, 0.006760043, -0.057004947, -0.05472475, 0.03254239, -0.059136435, 0.0718758, -0.03395512, -0.0016001661, -0.050486557, 0.012287045, -0.08297937, -0.043720316, 0.069595605, 0.03452517, 0.028576829, 0.029394725, -0.023644662, 0.021314893, 0.0005654023, -0.078765966, -0.023248104, 0.023657054, 0.021290109, 0.017944166, 0.06181319, 0.0005069258, 0.06706756, 0.013495302, -0.048107218, -0.015564829, -0.033707272, 0.012888075, 0.0037765778, 0.02133968, -0.01816723, 0.012702189, -0.007819592, -0.0318732, -0.011004433, -0.0012686698, -0.043968163, -0.009591702, -0.02062092, 0.029642573, 0.0159366, -0.009548329, 0.004204115, 0.016866028, -0.023396812, -0.0013569656, 0.005384489, -0.03742499, 0.03457474, 0.024908684, -0.008123205, -0.011023022, 0.067364976, 0.015552437, -0.038986426, 0.028031563, 0.026222276, -0.018353114, -0.0042908615, -0.054923028, -0.036532737, 0.08084789, 0.040969208, -0.008600311, -0.03566527, -0.000256561, -0.055617, 0.06820766, 0.085755266, -0.039705187, 0.015279804, 0.07043829, 0.0782207, 0.049643874, 0.015552437, -0.04327419, -0.01312353, 0.008042655, -0.04671927, -0.05135402, -0.025429163, -0.01624641, -0.0018929361, -0.04307591, 0.018489432, -0.005827517, 0.0010579994, -0.02473519, 0.037350632, -0.02743673, -0.009003064, 0.056459684, 0.03442603, 0.034401245, 0.02015001, 0.017374117, 0.029593004, 0.029196447, -0.0027015388, 0.02213279, -0.00736727, 0.0064316452, -0.066720575, 0.0052574673, 0.012330418, -0.012609246, 0.045009125, -0.03759848, 0.02133968, -0.024078393, 0.0021098028, 0.048454206, -0.02577615, 0.0001396079, 0.01473454, 0.030163053, 0.004216507, -0.032715883, -0.03920949, 0.028700752, -0.056261405, 0.030733103, -0.03283981, 0.018055698, 0.038986426, 0.013309416, 0.019344505, 0.028452905, -0.021575134, 0.0526924, 0.024227103, 0.026618833, 0.00900926, 0.023929685, -0.011816135, 0.009492563, 0.012621639, -0.03108009, -0.008117009, 0.028502474, -0.0013120432, 0.07286719, 0.012621639, -0.0102051245, -0.011029218, 0.017882204, -0.022616094, 0.027139312, -0.016853636, 0.044463858, -0.039036, 0.004891892, 0.031897984, -0.044736493, -0.021748627, 0.00031465027, -0.00090774184, -0.037053216, 0.033831198, -0.012361399, 0.03499608, 0.013358986, 0.075643085, 0.021637095, -0.047140613, 0.06434124, -0.019803023, 0.024859114, -0.01712627, 0.008575527, 0.02582572, -0.0080798315, -0.0003560873, -0.06295329, -0.018551392, 0.02275241, -0.0021485288, -0.0090650255, 0.04790894, 0.028973384, 0.043522038, -0.031005735, 0.0015715087, -0.010112182, -0.060028687, 0.02696582, -0.0020400956, -0.00070907647, -0.026048783, -0.048082434, 0.025800936, 0.013879466, -0.015887031, 0.10013043, 0.0014258982, -0.037201926, 0.06850508, 0.017448472, 0.0135448715, -0.076931894, 0.020397857, -0.0042691748, 0.02166188, 0.059532993, 0.05581528, -0.06617531, 0.04020088, -0.010093593, -0.08739106, 0.03328593, -0.008110813, 0.02363227, 0.024140356, 0.03930863, -0.021649487, 0.039903462, -0.03437646, -0.03566527, -0.026841896, 0.0027371668, -0.05279154, -0.06662144, -0.00788775, -0.020298718, 0.009548329, -0.026271846, -0.043546822, 0.022033652, 0.018600963, 0.025020216, 0.013891858, -0.017485648, -0.006970714, 0.029617788, 0.05660839, -0.006044383, 0.0014801149, 0.059384286, -0.020038478, 0.049544737, 0.012330418, -0.025330024, 0.0070760488, -0.07732845, -0.0035256322, 0.0083090905, 0.044017732, -0.036384027, -0.014821286, 0.031228798, 0.03135272, -0.057401504, -0.015564829, 0.026941033, -0.01026089, 0.00931907, -0.08620139, 0.0385403, -0.07440385, -0.035764407, -0.018315937, -0.019394075, 0.060375676, -0.015131095, -0.024227103, 0.008612704, 0.03943255, -0.051304452, 0.009331462, 0.047314107, -0.0016869127, 0.011078788, 0.004929069, 0.0069273403, 0.002935445, -0.0066485116, 0.0035999864, -0.0054867263, 0.009678449, -0.049718227, 0.061367065, 0.031179229, -0.01910905, 0.006035089, -0.016258802, 0.0024598874, -0.0117231915, -0.0008945749, -0.01941886, 0.01697756, 0.042307585, -0.044563, 0.009622683, -0.029171662, 0.009312874, 0.023285283, -0.008166579, 0.01255348, 0.021984082, 0.015713537, 0.040795714, 0.04104356, 0.008823374, 0.024623659, -0.02686668, 0.020645704, 0.04515783, 0.015056741, -0.023595091, 0.066770144, -0.07430471, 0.056063127, -0.004015131, 0.026271846, -0.010601681, -0.03759848, -0.030782672, 0.009108399, 0.0013468968, -0.029146878, -0.014486692, -0.018291153, -0.036384027, -0.070586994, -0.04312548, 0.051254883, -0.013594441, 0.011332831, 0.013185492, -0.0032499016, -0.011896685, 0.002802227, -0.063300274, -0.02582572, 0.015701145, -0.024883898, -0.03863944, -0.028576829, -0.072718486, -0.054080345, 0.032517605, 0.01931972, -0.0009836452, 0.024883898, 0.029543433, -0.050684832, 0.02036068, -0.019691491, 0.0126340315, -0.040993992, -0.05284111, -0.011586876, 0.017089091, 0.0011881194, 0.024177533, 0.0072805234, -0.017113877, 0.044786062, -0.021079438, 0.015193058, -0.0022290794, -0.040993992, -0.011425775, 0.023458775, 0.034896944, 0.008135597, -0.033087656, 0.011475344, 0.046545777, 0.06622488, 0.04743803, -0.028725537, 0.0019998203, -0.008086028, 0.03276545, 0.022529347, -0.026643617, 0.070834845, 0.01879924, -0.0026566165, -0.014647793, -0.031774063, 0.017448472, -0.045950945, 0.022380639, -0.02649491, 0.05482389, 0.029146878, 0.034872156, 0.042431507, -0.01070082, -0.0014104077, -0.008346268, -0.029146878, -0.02577615, 0.025528302, 0.014251237, 0.047016688, -0.055369154, 0.016469473, -0.0034450816, -0.00793732, 0.020373072, 0.052394982, 0.0024010236, 0.023210928, 0.022628486, -0.04664492, -0.011475344, -0.011847115, -0.009759, -0.010502542, -0.00017233154, -0.015056741, -0.0040244255, -0.028006779, -0.023830546, -0.013705973, 0.035417423, 0.009771392, -0.022591308, -0.010186536, 0.0015320079, 0.031997126, -0.006044383, 0.018043306, -0.00033478788, 0.01312353, 0.00770806, 0.0029199545, 0.010217518, 0.044141658, 0.040746145, 0.008501173, -0.027882855, 0.03868901, -0.041464902, 0.033930335, 0.0140777435, 0.0330133, -0.0068901633, -0.0045139245, -0.043720316, -0.054774318, -0.009405816, -0.006524588, -0.011320439, 0.02213279, 0.046050083, -0.0019053284, -0.03140229, -0.03868901, 0.032567173, -0.018030914, -0.03098095, -0.004405491, -0.020905945, 0.047636308, 0.024536911, -0.03174928, -0.011524913, 0.063548125, -0.015911816, -0.06216018, 0.0036681443, -0.06761283, -0.00600101, -0.008191363, 0.014276022, -0.05774849, 0.027387159, 0.03145186, -0.008947298, -0.031427074, -0.051056605, 0.011574483, -0.009579309, -0.010174144, -0.021129008, -0.03328593, -0.0042598806, -0.018811632, 0.012658816, 0.029816067, 0.010211321, 0.00015926144, -0.035541344, 0.009040241, 0.00848878, -0.002123744, -0.059384286, -0.008649881, 0.047933724, -0.032195404, 0.017039523, 0.021153793, -0.06339942, -0.007962104, 0.058442462, -0.025999213, 0.031575784, -0.033360288, 0.007962104, 0.07296633, -0.011252281, 0.029072523, 0.0356157, 0.0052078976, 0.07638663, -0.014461908, 0.060623523, 0.004891892, -0.018006127, 0.007503586, 0.010595485, 0.008780001, 0.003819951, -0.012125944, -0.0131731, -0.04213409, 0.027213667, 0.044959553, 0.040275235, 0.03182363, -0.019146226, 0.001993624, 0.021624703, 0.0437451, -0.008346268, 0.10151838, -0.03633446, -0.015750716, 0.062061038, -0.018489432, 0.06756326, -0.03963083, -0.036507953, 0.014399946, -0.033707272, 0.06706756, -0.0014909583, -0.006320114, 0.0034233949, 0.021327285, 0.0046843197, 0.03182363, 0.0018201309, -0.04087007, 0.0010239204, 0.034178182, -0.0119524505, -0.03868901, -0.046545777, -0.02083159, 0.0030733102, 0.0006525363, 0.06696842, -0.028874245, -0.039135136, -0.015750716, -0.018985126, -0.017089091, 0.0057872413, 0.033707272, -0.028353766, -0.009684645, -0.027833285, -0.038465947, -0.031005735, 0.0068715746, 0.017634356, -0.00482993, -0.010242302, 0.021252932, -0.021686666, 0.024710406, -0.009040241, -0.05036263, -0.03174928, 0.07603964, 0.009721822, -0.009876727, -0.0035163378, -0.047289323, -0.0020416446, -0.00016129456, 0.011896685, -0.011233692, -0.016989952, -0.004675025, -0.0019301132, 0.0061621107, 0.0052078976, 0.014387554, -0.024710406, -0.037449773, 0.039556477, 0.024140356, 0.004427178, 0.0655309, 0.04617401, -0.02301265, 0.008240933, -0.0062178764, -0.042431507, 0.036681443, 0.037846327, -0.029543433, 0.0024645345, -0.04562874, 0.03878815, -0.05070962, 0.011710799, -0.021364463, 0.03911035, -0.003844736, 0.03484737, -0.013086353, 0.031526215, 0.0004887245, -0.016940383, 0.010093593, 0.0008171226, -0.006908752, 0.020955514, -0.003683635, 0.022826765, 0.007943516, -0.031848416, -0.05004043, -0.011946254, 0.0037641854, 0.033087656, 0.01239238, 0.01312353, -0.032368895, -0.025602657, 0.0027867365, 0.017200623, -0.043546822, 0.008117009, 0.020583743, 0.029097307, -0.0030857027, 0.025082177, -8.737596e-05, -0.034500387, -0.019245366, -0.031303152, -0.04852856, 0.019220581, 0.011568286, -0.017770672, -0.07048786, -0.0015219392, 0.0024598874, 0.03214583, 0.044538215, -0.018452253, 0.027833285, 0.027758932, -0.03363292, 0.01863814, -0.043670747, -0.04275371, 0.0012477577, 0.010044024, 0.03586355, -0.02743673, -0.03083224, 0.030782672, 0.007150403, -0.019456036, 0.00080473017, 0.010614074, 0.015602007, 0.015738323, 0.01765914, 0.0121817095, 0.024983037, 0.025726581, 0.010366226, 0.059433855, -0.015639184, 0.011016826, 0.011054003, 0.01489564, -0.05804591, -0.0045201206, 0.04540568, -0.015329374, -0.019803023, -0.011729388, -0.04337333, -0.025317632, 0.04151447, -0.0023421599, 0.022331068, -0.007020283, 0.038094174, -0.015577221, -0.017225409, 0.0057190834, 0.0020509388, 0.01291286, -0.004656437, -0.0131731, -0.011989628, 0.042357154, 0.002094312, 0.019691491, 0.020373072, -0.021414032, 0.020026086, -0.0063944682, -0.00030322606, -0.012665012, -0.029915204, 0.0045541995, 0.022888726, 0.009573113, -0.00469981, 0.016915599, 0.063250706, 0.010421991, -0.014337984, -0.00068545353, -0.016122486, 0.019456036, -0.0038602264, -0.064192526, 0.03046047, -0.011165534, -0.0021345874, 0.011469147, 0.016890815, 0.01109118, 0.013334201, 0.0038757168, -0.014697363, -0.0036960272, -0.053237665, -0.03972997, 0.0054278625, -0.008625097, 0.028180271, 0.006329408, 0.023979256, 0.03264153, -0.055170875, -0.010378618, 0.021215754, -0.035913117, -0.074354276, 0.018266369, -0.027758932, -0.022021258, -0.0015072232, 0.004932167, 0.048132002, 0.0030206426, -0.038118962, 0.031848416, -0.005877086, -0.0070884414, -0.009213734, 0.002418063, 0.02979128, -0.029394725, -0.030386116, -0.0037394005, -0.045083478, 0.025528302, -0.004170036, -0.029593004, -0.009356247, 0.024066001, -0.0012601501, 0.009424405, -0.025082177, 0.014114921, 0.017349333, -0.03331072, -0.019518, -0.004867107, -8.863456e-05, 0.016903207, 0.015849855, 0.028502474, -0.05061048, 0.012751759, -0.029270802, -0.011277066, 0.017721104, -0.004368314, -0.040225666, -0.05482389, -0.0049383636, 0.036433596, -0.035838764, 0.0037827739, 0.0021965494, -0.040597435, -0.011977235, 0.045207404, -0.03742499, 0.009777588, -0.0045356113, -0.009015457, 0.05075919, -0.030658748, 0.03462431, 0.013718365, -0.007045068, -0.01738651, -0.022058437, 0.021897335, 0.024363419, -0.0077452376, 0.0017767574, -0.00723715, -0.015961386, -0.012813721, -0.002740265, -0.022554131, -0.0074168392, -0.0061435224, 0.061267927, 0.006549373, -0.04139055, 0.028254626, -0.035169575, -0.031005735, 0.021153793, 0.005341116, -0.018972734, -0.029617788, 0.04347247, -0.03140229, 0.027734146, 0.0024025727, -0.008030262, -0.0068777706, 0.034029476, 0.006952125, 0.0030237406, -0.009232323, -0.004046112, -0.0037022235, -0.008172775, 0.052047994, -0.0008287404, 0.04153926, -0.03296373, 0.0006835172, 0.03328593, -0.04597573, -0.025429163, -0.013631618, 0.0077390415, -0.0108123515, -0.0013314063, 0.009027849, -0.016531434, -0.017584788, -0.014313199, 0.022157576, -0.059334714, -0.020447427, 0.0146849705, 0.018960342, -0.02979128, -0.017138662, 0.010539719, 0.043026343, -0.02218236, 0.043298975, -0.053832497, 0.014176883, -0.015899424, 0.004334235, -0.019914554, 0.020063262, -0.0140777435, 0.013656403, -0.009765196, -0.038342025, -0.043571606, -0.02639577, 0.031650137, -0.0030144465, 0.028775107, -0.024202319, 0.017783064, -0.01863814, 0.022194752, 0.008253325, 0.027783716, -0.026544478, 0.0065059992, -0.009833354, 0.010242302, 0.0263462, 0.010483953, 0.0058925766, 0.08302894, 0.014251237, -0.019815415, 0.013222669, -0.0043125483], [0.0008046326, -0.008120869, -0.009243409, -0.004007816, 0.02067343, -0.029653745, -0.025818402, 0.049017545, -0.03161819, 0.064218596, -0.009781292, 0.044808023, -0.015914332, -0.03956951, 0.01853359, 0.034822103, -0.011734042, -0.011962058, 0.00054555695, -0.014440999, -0.0111669265, -0.04712326, -0.021527028, -0.0121140685, 0.023889037, -0.012558407, -0.048362732, 0.011202006, 0.008535976, 0.010938911, 0.01635867, 0.009301875, 0.019059781, 9.902608e-05, 0.03264718, 0.018381579, -0.016089728, 0.06604272, -0.043381464, -0.03996707, -0.024859566, 0.0025783323, -0.0065306057, -0.0054051434, 0.0013973274, -0.011178619, -0.015633697, -0.014359147, -0.018744066, -0.034985807, -0.022672953, 0.0027361894, -0.02967713, -0.010611503, -0.07212315, 0.0057559367, 0.03818972, -0.04854982, 0.054256063, -0.044924956, -0.036739774, -0.010406874, 0.06908293, -0.011248779, -0.005998569, 0.00071401097, -0.003925964, 0.029700516, 0.0068112407, 0.032179456, -0.0002731439, 0.022240307, 0.034939032, -0.011061688, -0.037277658, -0.05023363, 0.080729276, 0.02074359, -0.017843695, -0.018112637, 0.048783682, -0.008822457, 0.004481387, 4.5493533e-05, 0.048596594, -0.012722111, 0.037768766, -0.10542514, -0.013984968, 0.0075596, 0.0016765007, -0.008769837, 0.01898962, 0.0015069505, -0.032483477, 0.0060394946, 0.011488487, 0.026870782, -0.03309152, -0.021667344, -0.017867083, -0.053554475, -0.07764229, -0.050935216, -0.02471925, 0.008290419, 0.008582748, 0.016148195, -0.016393749, -0.053554475, 0.052057754, -0.024859566, -0.031384327, 0.034728557, 0.008003938, 0.038540512, -0.058605902, -0.0021544567, -0.023164064, 0.008962774, -0.050280403, -0.01508412, 0.08662261, 0.038634058, 0.04911109, -0.024041047, -0.0018387426, 0.03496242, 0.0034202368, -0.016194968, -0.042866968, 0.022544328, 0.0010925756, 0.0010794208, 0.042375855, 0.029981151, 0.045860402, 0.047286965, -0.027806232, 0.019398881, -0.041767813, 0.044410456, 0.021643959, 0.030846441, 0.009448038, 0.01684978, -0.043989506, -0.0507949, -0.049391724, 0.019749675, 0.02464909, -0.028157026, -0.040645275, 0.024157979, 0.012406397, 0.0110792285, -0.023503164, 0.0146514755, -0.026169196, 0.038423583, -0.0030665197, -0.036529295, 0.019691208, 0.013014439, -0.0124999415, -0.05477056, 0.016908247, 0.035406757, -0.034611624, 0.015399835, 0.043030668, -0.03575755, 0.00095006573, -0.033161677, -0.0042153685, 0.03893808, 0.04284358, -0.008278727, -0.047590986, -0.032577023, -0.029232793, 0.08185182, 0.054536697, -0.009693594, -0.0011495795, 0.082927585, 0.035617232, 0.036412366, 0.011757429, -0.012523328, -0.020813748, 0.03297459, -0.004478464, -0.026870782, -0.05916717, 0.0063142832, -0.026987713, 0.0009405651, 0.020404488, 0.051309396, -0.025982106, 0.001484295, 0.017165495, -0.028952157, -0.044433843, 0.06604272, 0.04649183, 0.017235653, 0.018697293, 0.05177712, 0.03353586, 0.031244008, -0.005831942, 0.006974944, 0.0073140445, 0.02014724, -0.078951925, 0.007436822, 0.0024687094, -0.02757237, 0.07076674, -0.036084957, 0.01962105, -0.028765067, 0.027104644, 0.055612464, -0.001581494, 0.02356163, 0.054536697, -0.0009639513, -0.025186973, -0.027829617, -0.0076531447, -0.0020667585, -0.01691994, -0.014055126, -0.012020524, -0.02029925, 0.037955858, 0.0035634774, 0.014955496, 0.04122993, -0.044363685, -0.014148671, 0.007430976, 0.041323476, 0.020053696, 0.030331945, -0.041206542, 0.013657561, 0.03861067, -0.013552322, 0.028671522, 0.036084957, 0.003475779, 0.1088863, 0.0058494816, -0.009301875, -0.018732373, 0.01313137, -0.008670446, 0.020708509, -0.03797924, 0.05004654, -0.07277796, 0.016592532, 0.016124807, -0.041721042, -0.049578816, 0.0026835704, 0.043100826, -0.0069047855, 0.052431934, 0.010740127, 0.0026952634, 0.0073023513, 0.029396495, 0.055425372, -0.009307721, 0.0071386476, 0.05247871, 0.051262625, -0.0128858145, -0.06688463, 0.03297459, -0.006974944, -0.002923279, -0.038891308, -0.005972259, 0.017352585, -0.01583248, -0.0016516527, -0.002550561, 0.019796446, 0.01440592, 0.0059605665, 0.022252, -0.025514381, -0.018510204, 0.019866606, 0.040621888, 0.018112637, -0.042118605, -0.023970889, 0.03203914, 0.025280518, -0.025257133, 0.018919462, 0.015902638, -0.024134593, 0.050280403, 0.011266318, 0.021842742, -0.04296051, 0.052759342, -0.050327174, -0.0032126838, 0.06697817, 0.052010983, -0.005478225, 0.005674085, -0.018779146, -0.090878904, 0.009997615, 0.025374062, 0.008921848, 0.020626659, -0.0097462125, -0.0093603395, 0.04394273, -0.06108484, 0.0031659114, -0.0020287558, 0.026239354, -0.027548984, -0.082927585, -0.033372156, -0.0373712, 0.03199237, 0.016779622, 0.04048157, 0.024532158, -0.015738934, 0.0046947864, -9.8021206e-05, -0.025748244, -0.034845486, 0.014557931, 0.030215014, 0.0008134024, 0.0014002507, 0.058091402, 0.030659351, 0.052385163, -0.022672953, 0.017223962, -0.016838089, -0.030425489, 0.021889515, -0.040692046, 0.051964212, -0.05935426, 0.023514858, 0.027268348, 0.036786545, 0.0072088065, -0.025561154, 0.02843766, -0.02738528, 0.019889992, -0.02408782, 0.026028877, -0.11421836, -0.04464432, -0.023047132, -0.024157979, 0.06594918, 0.008249494, 0.023187451, -0.0010326484, -0.0023459315, -0.025186973, -0.01812433, 0.020883907, 0.027759459, 0.019013008, -0.042071834, -0.005951796, -0.02359671, 0.010330869, -0.010371795, -0.01748121, -0.03290443, 0.002486249, 0.07740843, -0.0014996423, 0.0032126838, 0.061365478, 0.0031776044, 0.04768453, -0.012663646, 0.0027551907, 0.01245317, 0.021562107, 0.0012577409, -0.02288343, 0.035289828, -0.024204751, -0.01999523, -0.012546714, 0.014569623, 0.07347955, 0.037909083, 0.018966235, 0.019761367, 0.0032653029, 0.01853359, 0.0005429991, -0.015937718, 0.0025534844, 0.004788331, -0.0016648074, -0.009588356, 0.031080304, -0.01890777, -0.006513066, -0.06674431, -0.0089276945, -0.027853005, -0.002559331, -0.013914809, -0.01879084, 0.017235653, -0.015575231, 0.007430976, -0.053273838, -0.040458184, -0.0014886799, -0.018475125, 0.10327361, 0.03762845, -0.0034787022, -0.00044360763, 0.0131430635, -0.048970774, -0.023316074, -0.060804207, -0.028180411, 0.038096175, -0.052198075, -0.07965351, -0.04223554, -0.09078536, -0.031431098, 0.10140271, -0.021304859, 0.0631896, 0.029209405, 0.03323184, -0.07782938, 0.0073023513, -0.023351153, 0.05046749, -0.03568739, -0.03271734, -0.029817447, 0.004367379, 0.016896553, 0.013669253, -0.009442192, -0.002616335, 0.025841787, -0.062628336, 0.020369409, 0.03767522, -0.0020477572, -0.027244963, 0.030448876, 0.029794062, 0.004373226, -0.04321776, -0.0016399596, 0.023994276, 0.039148554, 0.053741563, -0.041697655, -0.011716503, 0.02067343, 0.08844674, 0.04359194, -0.0075186742, 0.096631914, -0.002765422, 0.010108699, -0.002161765, -0.037441358, -0.034143902, -0.030612579, -0.014195444, -0.0028238876, 0.0057734763, 0.045603156, 0.037441358, 0.027595755, 0.02457893, -0.031688347, -0.041112997, 0.0066884626, 0.036833316, -0.039148554, -0.008769837, -0.012780577, -0.029583585, -0.018475125, -0.03391004, 0.032857656, -0.0014221753, 0.013645867, 0.034564853, 0.032810885, 0.034845486, -0.023503164, -0.0412767, -0.029770676, -0.03297459, -0.028835226, 0.0015522613, -0.020369409, 0.030472262, -0.011424175, 0.020077081, -0.032436706, -0.010441953, 0.013973274, -0.018393273, -0.037347816, 0.053367384, 0.00046297433, -0.0022596947, 0.0029905145, -0.032319773, 0.045649927, -0.011149387, -0.004542776, -0.0063785953, 0.023912424, 0.0637041, -0.0068930923, -0.036833316, -0.0061505795, -0.044691093, 0.024812793, 0.032506865, 0.037838925, 0.011786662, -0.008360579, -0.03919533, -0.0419549, -0.0007359355, -0.03391004, -0.024929725, -0.014499465, 0.034050357, 0.021328244, -0.030916601, -0.050701354, 0.04118316, -0.009792985, -0.006209045, -0.02558454, 0.007308198, 0.04644506, 0.019165019, -0.030098082, 0.024508772, 0.09419975, 0.0066299974, -0.0057559367, 0.01080444, -0.049204636, -0.045182202, -0.011751582, -0.006290897, -0.037488133, 0.02194798, 0.018288035, 0.00020481224, -0.039686438, -0.05477056, 0.010658276, -0.011932826, 0.010611503, -0.018217877, -0.039429188, -0.0075771394, 0.020509727, 0.0053846803, 0.010517959, 0.012616873, 0.018019093, -0.013037825, 0.00791624, -0.007132801, -0.019702902, -0.029022316, 0.007547907, 0.01437084, -0.026964327, 0.04873691, 0.036763158, -0.062862195, 0.027759459, 0.037838925, -0.0020506803, 0.03868083, -0.022801578, 0.030472262, 0.07754875, -0.009114784, 0.001196352, 0.0623477, 0.044176593, 0.07385372, -0.014452692, 0.0002771634, -0.006366902, -0.03793247, -0.011465101, -0.015154279, -0.018779146, -0.0007330123, 0.002680647, -0.019971844, -0.03383988, 0.005007577, 0.025303904, -0.00033526358, 0.01853359, -0.02986422, 0.01691994, 0.047286965, 0.07464886, 0.012324545, 0.05514474, -0.020603271, -0.018814225, 0.032997977, -0.020907292, 0.06576209, -0.0139615815, -0.047941778, 0.06697817, -0.034985807, 0.071328014, -0.0013067058, 0.0030314405, 0.0037914931, 0.011202006, -0.03793247, -0.013072904, -0.012406397, -0.07137478, 0.017750151, 0.023105599, 0.023187451, -0.006021955, -0.040037233, -0.027899776, 0.0037944163, -0.008056558, 0.043054055, -0.012464862, -0.034985807, -0.017808616, -0.042071834, -0.014978883, 0.0054811486, 0.046351515, -0.040715434, 0.00089160015, 0.034471307, -0.057389818, -0.019971844, -0.0019235177, 0.011973752, 0.0026265664, 0.0011729657, 0.024298297, -0.017270733, 0.0064429073, 0.0016048803, -0.048877228, -0.018568669, 0.032015752, 0.013680947, -0.02074359, -0.020240786, 0.031220622, -0.009588356, 0.020614965, -0.0022173072, -0.01887269, -0.0057559367, -0.007442669, 0.07221669, 0.031641573, 0.012920894, -0.027361894, -0.005437299, -0.038446967, -0.0055863867, 0.020170627, 0.01294428, 0.059073627, 0.038400196, -0.033629403, -0.016522374, -0.021211313, -0.065154046, 0.01819449, -0.012008831, -0.033793107, -0.015002268, -0.009412959, 0.029139247, -0.022672953, -0.0045076967, 0.005542537, 0.03531321, -0.017796924, 0.03898485, -0.0399203, 0.0081091765, -0.013400312, -0.015388141, -0.01898962, -0.01946904, 0.005788093, 0.018580362, 0.013061211, 0.047076486, 0.021035917, -0.0038470353, -0.040879138, -0.011248779, -0.015528459, 0.035289828, 0.005770553, 0.020322638, -0.037792154, -0.05210453, -0.037698608, 0.02108269, -0.009535736, 0.018849304, 0.02757237, 0.02850782, -0.013154756, 0.001974675, -0.02626274, -0.009050473, -0.031805277, -0.010184704, -0.027782844, 0.008758144, 0.02296528, 0.006010262, -0.032506865, 0.018802531, 0.0022874658, -0.02626274, 0.050561037, -0.040130775, 0.021749197, 0.037417974, -0.00377103, 0.039148554, 0.03072951, -0.039148554, -0.034915645, 0.009693594, -0.020240786, 0.005557154, 0.0040458185, 0.017434437, 0.047263578, -0.035500303, 0.0046509374, 0.008033171, 0.010208091, -0.008243647, 0.04228231, 0.025958719, 0.011833434, 0.028390888, -0.016861474, 0.026169196, -0.00845997, 0.005551307, 0.012640259, 0.027993321, -0.032787498, 0.013236608, 0.049017545, -0.016861474, 0.007319891, -0.010962297, -0.008015632, -0.025186973, 0.042305697, -0.02045126, 0.02937311, 0.0010538421, 0.0072731185, -0.00067856617, 0.01583248, -0.011213699, -0.010751821, -0.0023897807, -0.0048526432, 0.01583248, -0.024134593, 0.0013863652, -0.029209405, 0.019328723, 0.031688347, 0.02670708, 0.021375017, -0.0015507996, -0.005256056, -0.020568192, -0.042141993, -0.027455438, 0.008202721, 0.01046534, 0.022088297, -0.0026923402, 0.06973775, -0.0028472738, 0.0028253493, 0.0069574043, 3.2704185e-05, 0.012359625, 0.030027924, -0.09443361, 0.04363871, 0.008617827, -0.0016063419, 0.0041393633, 0.016054649, 0.04408305, 0.035126124, 0.03463501, -0.01898962, -0.02806348, -0.023772106, -0.029887605, 0.024462, -0.006741082, 0.025327291, 0.0036921017, 0.0028253493, 0.04424675, -0.029723903, -0.011354016, 0.032436706, -0.044784635, -0.07703425, -0.04929818, -0.016183274, -0.0015230285, 0.005162511, 0.038072787, 0.06426537, -0.031501256, -0.059073627, 0.002056527, -0.021199621, 0.0039405804, -0.022006446, -0.0027508058, 0.009798832, -0.03035533, -0.056407593, 0.03893808, -0.03861067, 0.02145687, 0.0033530013, -0.0053203683, 0.0036716387, -0.023199143, -0.0021793046, -0.02138671, -0.023339462, 0.04396612, 0.014686555, -0.0028867382, -0.010249017, -0.011956212, 0.006776161, 0.008956928, 0.009798832, 0.03199237, -0.02471925, -0.029630357, -0.0018109714, -0.023023747, 0.033512473, 0.020954065, 0.0004213176, -0.043451622, 0.019375494, 0.013914809, -0.028414274, 0.038096175, -0.008535976, -0.024228137, -0.0071678804, 0.018182797, -0.023737026, 0.022053218, -0.002056527, -0.0013534783, 0.028694909, -0.029794062, 0.012698725, 0.040271092, 0.013178143, -0.02232216, -0.037417974, -0.0137043325, 0.010178858, 0.00024500734, 0.018568669, -0.016627612, -0.021831049, -0.03919533, -0.026122423, -0.0055396142, -0.014125285, 0.05159003, 0.06417182, -0.010102853, -0.03365279, 0.04017755, -0.05406897, -0.025467608, 0.025958719, 0.04854982, -0.012523328, -0.017750151, 0.03568739, -0.020182319, -0.024064435, -0.009372033, -0.008003938, -0.009512351, -0.009050473, -0.019983536, 0.003905501, 0.03353586, -0.02949004, -0.030612579, -0.008740605, 0.016113115, -0.022415705, 0.009120631, 0.008933541, 0.0033266917, 0.005802709, -0.013388619, 0.009190789, -0.015434914, 0.001848974, 0.008547668, 0.04029448, -0.014967189, 0.018054172, -0.028952157, -0.0057530133, -0.0084541235, -0.04745067, -0.029606972, -0.00028209644, 0.026800623, -0.0077993087, -0.052852888, 0.027946549, 0.0373712, -0.011137694, 0.016405443, -0.023234222, 0.0012723573, 0.016791316, -0.0019951381, 0.015013962, 0.027432052, -0.0038470353, 0.0124999415, -0.0024073203, -0.015107507, -0.030308558, -0.033746336, 0.005861175, -0.020685123, 0.031571414, -0.0088399965, 0.010868752, 0.0046333973, 0.0019615204, -0.004218292, 0.025818402, -0.0006617573, -0.017235653, 0.013271688, 0.015376449, 0.03631882, 0.0017145033, -0.017574754, 0.10448969, 0.004303067, -0.0050251167, -0.00032265694, 0.0002919625], [0.011760937, -0.0034884135, -0.016297385, 0.02369101, 0.014183195, -0.017203467, -0.042211313, 0.02771401, -0.05397829, 0.064271376, -0.027762335, -0.037765473, -0.0033313595, -0.023219848, -0.011464951, 0.08253798, -0.01946263, 0.009918571, 0.0031138998, -0.043443587, -0.0053458805, -0.09234782, -0.066204354, 0.011628046, -0.011338099, 0.002713714, 0.023751415, 0.010782369, 0.005992219, -0.004104549, 0.03984342, 0.024560848, 0.028318066, -0.0059801377, 0.021600982, -0.013844925, 0.028680498, -0.016104087, -0.030202715, -0.011730734, -0.039480988, 0.00589859, -0.023848064, -0.008402395, 0.01279387, 0.010432018, -0.02546693, 0.023268173, 0.025563577, -0.065141216, -0.0034521704, -0.029646985, 0.04762364, -0.026336767, -0.015185925, 0.0019661968, 0.0847609, -0.09167128, 0.07089181, 0.004427718, -0.026046822, -0.01535506, 0.0413898, 0.002790731, -0.009562179, -0.05460651, -0.019317657, 0.052335266, 0.06639765, 0.05750597, -0.022084225, 0.019776737, -0.025491092, -0.024548767, -0.0050317724, -0.07171333, 0.10399399, -0.0015433588, -0.014944304, -0.004515306, 0.0025853524, -0.047889426, 0.008154733, -0.019474711, 0.03114504, -0.011730734, 0.02302655, -0.10882642, 0.00084945135, 0.028946282, -0.04346775, -0.038079582, -0.012757626, 0.019510955, -0.019015629, 0.02959866, -0.0072788545, 0.0137966005, -0.008879598, -0.0047267247, -0.028559687, -0.063208245, -0.011162924, -0.05397829, 0.0514171, -0.00467236, 0.032425635, -0.050788887, 0.01657525, 0.0535917, 0.026433416, -0.008819193, -0.015620844, -0.015645007, -0.03614661, 0.013554978, -0.005309637, -0.06697754, 0.023316495, -0.00522507, -0.114335395, -0.016055763, 0.07427452, -0.034890175, -0.036219094, 0.0003108992, 0.013699952, 0.022748685, 0.012407275, -0.026360929, 0.011193126, 0.016514845, 0.023618523, 0.016623575, 0.09800177, 0.013059654, 0.04697126, -0.024379632, -0.038683638, 0.021335198, -0.047526993, -0.017988738, -0.007073476, 0.028946282, -0.037813798, 0.0036756704, 0.00041339966, 0.008680261, -0.047309533, -0.015632926, -0.022205036, -0.03725807, 0.0028390551, 0.037523855, 0.023268173, -0.047092073, 0.0066445973, 0.020296225, -0.021298954, 0.03215985, 0.03914272, -0.06369148, 0.0020432137, 0.0047267247, 0.023558117, -0.03525261, 0.01523425, -0.009803801, -0.06402975, 0.030444337, 0.024440037, 0.014859736, -0.012038802, -0.016949764, -0.011628046, 3.503987e-05, 0.04953245, 0.021093575, 0.0021157002, -0.05185202, -0.03793461, 0.016756466, 0.0442651, -0.03203904, 0.059100673, 0.04938748, 0.04126899, -0.022543306, 0.009435328, -0.051900346, 0.014304006, 0.021782199, -0.003424988, -0.017288035, 0.010335369, -0.031410825, -0.020453278, -0.03271558, -0.022567468, 0.0066143945, -0.016732303, -0.023860145, -0.044216774, 0.043540236, -0.009713193, 0.015947033, 0.06702586, -0.011495153, 0.014062384, 0.0067472863, 0.032884717, 0.024005119, 0.01646652, -0.03312634, -0.021516414, 0.02057409, -0.07277646, 0.01634571, -0.033899527, -0.07427452, 0.014134871, -0.004648198, 0.03795877, -0.021395603, 0.016720222, 0.063208245, 0.014038222, -0.018616954, 0.011815302, -0.02036871, 0.020827793, -0.023195686, -0.00023463734, 0.04648802, -0.07635246, -0.020223739, -0.037451368, -0.003138062, 0.0009944243, 0.016321547, 0.0069949487, 0.04416845, -0.03373039, -0.0056207255, 0.015367141, 0.05639451, 0.012503924, 0.044192612, -0.022434577, 0.017420925, 0.023280252, -0.024790388, -0.006729165, 0.056587808, 0.012358951, 0.015294655, 0.005285475, -0.017988738, -0.025321957, 0.024597092, -0.017215548, 0.022845333, -0.011048153, 0.06378813, -0.0040230015, 0.008535287, 0.021613063, -0.037523855, -0.05562132, 0.0006085847, 0.05397829, 0.0049441843, -0.023944713, 0.022120468, 0.026771687, -0.03435861, 0.0496291, 0.017046412, -0.025418606, 0.07393625, -0.005696232, 0.018749846, 0.034068663, 0.00567509, 0.06117862, -0.016514845, 0.02336482, -0.08287625, -0.0058925496, 0.00025068253, -0.013204627, -0.031773254, 0.06050208, 0.03950515, 0.043201964, -0.020417035, 0.0048354547, -0.01867736, -0.049774073, 0.0033796837, 0.010915261, 0.017855845, -0.0005160889, -0.0587624, -0.013518735, 0.023038631, -0.032739744, 0.0641264, -0.018387413, -0.006019401, 0.054268237, -0.0030278221, -0.006276124, -0.03783796, 0.041848883, 0.007441949, 0.066832565, 0.044120125, 0.0110421125, -0.02323193, -0.006031482, -0.022507064, -0.0831662, 0.017300116, 0.012890519, 0.010317247, 0.023437306, -0.04948413, -0.049677424, 0.009151422, -0.082054734, 0.01190591, -0.03037185, -0.025853524, -0.062338404, -0.10805323, -0.032135688, -0.053640023, 0.0032769947, -0.016309466, -0.0022787948, -0.011464951, 0.013820763, -0.031314176, 0.0145093845, -0.020284144, -0.039529312, -0.017457169, -0.0035790217, -0.050353967, 0.0014633215, 0.08780533, 0.018109547, 0.024089685, -0.009840044, -0.006221759, -0.01913644, -0.045980614, -0.02280909, -0.0038901097, 0.087853655, -0.08553409, 0.0064996243, 0.054896455, 0.0011945174, -0.0035246569, -0.022168793, 0.023666847, -0.009042693, 0.034213636, -0.0413898, 0.023968875, 0.05315678, 0.0030006398, -0.028897958, 0.0038568866, 0.03911856, -0.02524947, -0.04315364, 0.009960855, -0.026940823, -0.04759948, 0.0024992747, 0.012757626, 0.0014323638, -0.010214558, -0.013168383, -0.0043763733, -0.00434315, -0.027979795, -0.009042693, 0.0025068254, -0.007399665, -0.04820353, -0.004660279, 0.03916688, -0.033440445, 0.0019239129, -0.016744385, -0.015306736, -0.015729574, 0.016369872, -0.010365572, 0.0068137324, 0.041776396, -0.009157463, 0.006197597, -0.013554978, -0.019607602, 0.059148997, -0.038514502, 0.04926667, -0.019160602, 0.017553817, 0.016611494, 0.01814579, -0.029308714, 0.003503515, 0.0011318467, -0.01490806, -0.031386662, -0.0130838165, -0.022120468, 0.041752234, -0.030106066, 0.012745546, -0.010510545, 0.050740562, -0.010552828, -0.019160602, 0.00030504743, -0.0071822056, 0.0066687595, 0.0072667734, -0.03614661, -0.046004776, -0.06953873, -0.040447477, -0.002423768, 0.031193364, 0.03281223, 0.0032316905, -0.00059914635, 0.025829362, -0.0050317724, 0.0049864682, -0.057795916, -0.026723363, 0.03827288, -0.017771278, -0.03402034, -0.016623575, -0.07930025, -0.026723363, 0.08094328, -0.035566717, 0.006976827, -0.008468841, 0.022434577, -0.11974772, -0.0022757745, 0.011748856, 0.042670395, -0.03351293, 0.043564398, 0.0031743054, -0.01456979, 0.016321547, 0.018496143, 0.0320632, 0.0057234145, 0.007756057, -0.038756125, 0.0076050437, -0.025273632, -0.028728822, 0.017614223, -0.0202479, 0.035228446, -0.029985255, -0.008976247, -0.0535917, 0.022603711, 0.027883146, -0.0054908535, -0.00056705595, 0.05252856, 0.041196503, 0.057216022, 0.0006557765, 0.013724114, 0.015415465, -0.0059469147, 0.00025559048, -0.031193364, 0.02080363, -0.08505084, -0.067364134, -0.036339905, -0.018266601, 0.0060375226, 0.015210087, -0.03774131, -0.00067238795, 0.021552658, 0.020429116, -0.016116168, -0.030444337, -0.0072969757, -0.015645007, -0.0015176864, -0.040689096, -0.016587332, -0.006904341, -0.008112449, -0.0088071115, -0.015753737, 0.015971195, 0.017638385, 0.01078841, -0.03003358, -0.03281223, -0.037668828, -0.015487952, 0.034213636, 0.004473022, 0.004482083, -0.00091287703, -0.0078889495, -0.014279843, -0.021987576, 0.019643845, -0.01023268, 0.033464607, 0.012268343, 0.00036469777, 0.008571531, 0.042356286, -0.029574499, 0.0045575895, -0.007858747, 0.05151375, -0.022664117, -0.015246331, -0.04552153, -0.010365572, 0.036436554, -0.022205036, -0.0012262302, 0.04470002, -0.046777964, 0.021564739, 0.0044216774, 0.016406115, -0.009592382, -0.043564398, -0.012455599, -0.06702586, 0.0030504742, -0.04383018, -0.00878899, 0.04037499, 0.06330489, 0.06562446, -0.037451368, -0.005406286, 0.035639204, 0.00043642923, -0.0051254006, -0.030202715, -0.0071218, 0.017759196, 0.03281223, -0.054123264, -0.050257318, 0.06837895, 0.010703842, -0.059777215, -0.03670234, -0.023062794, -0.012383113, -0.0077379355, 0.014473141, -0.041993856, 0.023401063, -0.00678957, -0.043709368, -0.059922185, -0.014581871, 0.006170415, -0.017517574, 0.03735472, 0.006251962, -0.012987168, -0.017155143, -0.008142652, 0.009701112, 0.05784424, -0.013071735, 0.025056172, -0.018822333, -0.013881167, 0.016708141, -0.028414715, -0.036557365, 0.011374342, 0.005817043, -0.010305166, 0.020622414, 0.03457607, -0.035953313, 0.0007309057, 0.026868336, -0.011132721, 0.031918228, -0.0037995016, -0.013023411, 0.017964575, 0.003935414, 0.0066445973, 0.02436755, 0.031000067, 0.056104563, -0.0072486517, 0.029429525, 0.020562008, 0.008644017, -0.016792709, -0.04095488, 0.0035004946, -0.033367958, -0.048227694, -0.034890175, -0.025829362, -0.006596273, 0.028052282, -0.01959552, 0.020839874, -0.004705583, 0.066832565, -0.028849633, 0.021637226, -0.009978977, 0.08683885, -0.035735853, -0.0017532676, 0.039698448, -0.026820011, 0.06195181, -0.015560439, -0.017855845, -0.014726844, 0.018109547, 0.07055354, 0.0070372326, -0.021093575, 0.0023769536, 0.029719472, -0.026119309, 0.047575317, -0.05204532, -0.01535506, -0.022978226, 0.040181693, 0.0075506787, 0.024935361, -0.016973926, 0.0007675265, -0.028124768, 0.04404764, 0.055476345, -0.06804068, -0.01981298, -0.035010986, -0.025636064, -0.017179305, -0.0029432545, 0.07267981, -0.018665278, 0.011887789, -0.008770868, -0.017179305, -0.019957954, -0.023159442, -0.031797417, -0.0050649955, -0.049870722, 0.0233769, -0.033053853, -0.010274963, 0.0340445, -0.03015439, -0.021745956, 0.054896455, -0.003304177, 0.055766292, 0.00478411, -0.024645416, 0.04494164, -0.004237441, -0.030347688, 0.009302436, 0.0184599, -0.006475462, 0.012781789, 0.04636721, 0.00068711175, -0.026892498, -0.043226127, -0.049822398, 0.025128659, -0.0033615623, 0.028463038, 0.02102109, 0.005907651, -0.015487952, -0.020634495, 0.022519145, -0.07267981, 0.010226639, 0.035349257, -0.030202715, 0.006396935, -0.05117548, -0.0016762507, -0.036654014, 0.03071012, -0.031072553, 0.024862874, -0.005185806, 0.0067110434, -0.028680498, 0.012528086, -0.019051872, -0.015318817, 0.0133858435, 0.012032761, 0.017650466, 0.021637226, 0.0047780694, -0.0063244486, -0.03327131, -0.010975666, 0.017771278, 0.007822503, -0.005246212, 0.052431915, 0.009827963, 0.008607774, -0.025539415, 0.0072365706, -0.006578151, 0.018278683, 0.009175585, 0.007387584, 0.06475462, 0.0322565, -0.038248718, 0.0018635076, 0.004974387, -0.021117738, -0.010166233, -0.0020854974, -0.027061632, 0.039239366, -0.016780628, -0.01646652, -0.045255747, 0.03015439, 0.036654014, -0.0049230424, 0.071568355, 0.03537342, -0.010721964, -0.025394443, -0.028414715, 0.009030612, 0.02991277, -0.051030505, 0.017867927, -0.01578998, -0.010444099, 0.007145962, -0.019172683, 0.032788068, -0.004741826, 0.005886509, -0.0069949487, -0.013530816, 0.009525936, -0.00544857, 0.010462221, 0.03713726, 0.018556548, 0.066204354, -0.032884717, 0.033778716, -0.04685045, -0.014557709, -0.012576411, -0.0055150157, -0.006819773, -0.013361681, 0.052818507, -0.03771715, -0.018761927, -0.042912018, -0.010752167, -0.041003205, 0.025007848, 0.020984847, 0.020332467, 0.01955928, 0.0122321, 0.0062700836, 0.03126585, 0.0220359, 0.0003884824, 0.028100606, 0.0028209335, -0.016925601, -0.0019616664, 0.003204508, 0.00042850102, -0.0027862005, 0.03827288, 0.013784519, -0.018121628, -0.0022863455, -0.0043008667, -0.002968927, -0.031724934, -0.01523425, 0.043395262, 0.025152821, 0.016104087, -0.027399903, 0.02135936, -0.007931233, 0.052093644, -0.027593201, -0.00047682537, 0.019945873, -0.011295815, -0.0404958, 0.055186402, 0.024270901, -0.00912122, -0.016079925, 0.0087527465, 0.05919732, 0.024959523, 0.06755743, -0.0138932485, -0.03827288, 0.034624394, -0.03795877, 0.0029523154, 0.003437069, 0.012274384, 0.010468261, -0.012999249, -0.0071822056, -0.045763154, 0.008148693, -0.015874548, 0.0041287113, -0.058327485, -0.0041679745, -0.063208245, -0.018037062, -0.02157682, 0.007641287, 0.035518393, 0.040519964, -0.01748133, -0.017420925, -0.019837143, 0.016285304, -0.025080334, 0.009991058, 0.011205208, -0.029985255, -0.037427206, 0.015777899, -0.057022724, -0.017360521, -0.0060798065, -0.020996928, -0.013192546, 0.017553817, -0.005276414, 0.0002925888, 0.0124676805, 0.01001522, 0.061565213, -0.028825471, -0.014714763, 0.0114528695, -0.010413896, 0.013941573, -0.004270664, -0.012745546, -0.04346775, 0.007943314, 0.011803221, -0.014291924, 0.018206196, 0.008662139, -0.0011258062, -0.006529827, 0.039215203, 0.049242508, -0.020380791, 0.008190976, -0.019124359, -0.024053441, -0.015947033, -0.0038538664, -0.032014877, 0.026675038, -0.0040532043, 0.030444337, 0.03902191, -0.013059654, 0.020332467, 0.004470002, -0.0019057913, 0.014714763, -0.017602142, 0.02036871, 0.028946282, 0.032353148, 0.011978397, -0.008058084, -0.012999249, 0.02602266, 0.0024373592, -0.026457578, -0.023763496, 0.05252856, 0.049025048, 0.023993038, -0.02224128, 0.025394443, -0.07267981, -0.011815302, 0.033996176, 0.01722763, 0.015959114, 0.00093477406, 0.049580775, -0.028946282, 0.013712033, -0.019764656, 0.0054938737, 0.0069103814, 0.05939062, 0.010836734, 0.012938843, 0.027544877, -0.0032558527, -0.00444886, -0.018834414, 0.012050883, -0.02381182, 0.000211419, -0.004627056, 0.0077077327, 0.011386423, -0.01722763, 0.0026095146, -0.0123166675, 0.038901098, 0.008933963, 0.03641239, 0.010782369, 0.017106818, 0.0054455497, 0.013542897, 0.041124016, -0.061226945, -0.01313214, 0.014110709, -0.028897958, -0.037451368, -0.013712033, 0.028100606, -0.012334789, -0.0032286702, 0.012213978, -0.04953245, 0.034406934, 0.03839369, 0.005318698, 0.0155241955, -5.2194067e-05, 0.010709883, -0.001913342, -0.04728537, -0.021939252, -0.02768985, -0.033102177, 0.022857415, 0.0072486517, 0.03348877, -0.021395603, 0.024210496, -0.025877686, -0.002727305, -0.04025418, -0.0074781924, 0.010498464, -0.0017381662, -0.003358542, 0.028849633, 0.016671898, 0.0046330965, 0.037403043, 0.0340445, 0.01955928, -0.016768547, 0.013542897, 0.008861477], [-0.008451874, -0.014672108, -0.029640123, 0.027322177, -0.009894426, 0.062387284, -0.031662162, 0.035558283, -0.0049102246, 0.025016561, -0.025472753, 0.009136162, -0.00029147713, -0.01658318, -0.009567694, 0.015510514, -0.04113122, 0.0047499407, -0.012119901, -0.023401396, -0.020220384, -0.058688432, -0.06342296, 0.0072682416, 0.030330576, -0.008186789, 0.0027463967, 0.022723272, -0.0026107721, -0.00570856, 0.05360868, 0.021428674, 0.029171603, 0.015214606, 0.05508822, -0.02973876, -0.016718805, 0.037111804, -0.010104028, 0.011823993, -0.057652753, -0.027667403, -0.040046223, -0.023463042, 0.007724433, -0.011546579, 0.02552207, 0.0051475675, -0.003963935, -0.05296754, -0.010745161, -0.035385672, 0.005415734, -0.021847878, -0.02581798, 0.017298292, 0.08408721, -0.048923466, 0.066086136, -0.009296445, -0.050304372, 0.029196262, 0.061647512, -0.058145933, 0.0070154867, -0.032056708, 0.0041242186, 0.023783611, 0.039725658, 0.04058872, -0.026360476, 0.02202049, -0.0074223606, -0.018691525, -0.014302223, -0.065642275, 0.047887787, 0.02226708, 0.0066517666, -0.013266545, 0.041501105, -0.0544964, 0.031440232, -0.04310394, 0.04529859, -0.06337364, 0.064113416, -0.124084115, -0.034276016, 0.0095492, -0.016657159, 0.028431833, 0.04391769, 0.035089765, -0.009339598, 0.03671726, -0.022131456, 0.02034368, -0.046210974, -0.008513521, 0.0031871763, -0.041229855, -0.03595283, -0.063521594, 0.026656384, 0.0421669, 0.012810353, -0.0016567769, 0.005594512, -0.023894576, 0.0064791534, -0.009481387, 0.0019110729, 0.0026446783, -0.0072497474, 0.017643519, 0.009690989, -0.047739834, -0.040736675, -0.010997917, -0.06569159, -0.06445864, 0.077478595, 0.065099776, -0.0028249973, 0.03864066, -0.008192955, 0.046457566, 0.0049996134, 0.004299914, -0.006423671, 0.00990059, 0.048405625, 0.059082977, 0.07580178, 0.02848115, 0.06337364, -0.01885181, -0.034793857, 0.019677887, -0.037777595, 0.015202276, -0.012101406, -0.0035139082, -0.036125444, -0.0030685049, -0.021256063, -0.015769433, -0.041525763, 0.02897433, -0.046704154, -0.04714802, -0.014807733, 0.0043584793, 0.056222532, -0.009376586, 0.04088463, 0.024659004, 0.030305916, 0.05306618, 0.048997443, -0.07368111, -0.014931028, 0.032032046, -0.0009185479, -0.05775139, 0.054693673, -0.039059862, -0.045767114, 0.02899899, -0.0023025346, 0.00068891095, 0.012409644, 0.030700462, -0.039701, 0.013106261, 0.058096617, -0.012465127, -0.015300913, -0.05646912, -0.0065531307, 0.04556984, 0.023734292, -0.013809043, 0.03319102, 0.028111266, 0.009629342, 0.009438234, 0.037531007, -0.0599707, -0.039725658, -0.00057987194, -0.02924558, -0.0015065111, 0.022378048, -0.022341058, -0.014351541, -0.06095706, -0.00038799402, -0.0035817204, -0.01463512, -0.036248736, -0.03023194, 0.0049965307, -0.02599059, 0.05498958, 0.038295433, -0.0035046611, 0.019875158, 0.008266931, -0.0012761035, 0.03294443, -0.012711717, -0.019123059, -0.013032285, 0.0063558584, -0.029393533, 0.033141702, -0.05706094, -0.029936032, 0.03767896, 0.021502653, 0.03393079, -0.031760797, 0.049194716, 0.0044941036, 0.011750015, 0.007816904, 0.022217764, 0.01636125, -0.011263001, -0.048405625, -0.013278875, 0.030823756, -0.07520997, -0.027815357, -0.033265, -0.019973794, 0.0175942, -0.006960004, 0.0022593813, -0.0076257973, -0.006738073, -0.02677968, 0.04118054, 0.024659004, 0.0041057244, 0.012711717, -0.015510514, 0.042413488, -0.012452798, -0.0050982493, 0.019677887, 0.04088463, -0.0074038664, 0.048676874, 0.06914385, -0.046260294, -0.0035693909, 0.018259993, -0.01064036, 0.038591344, -0.028851036, 0.044386208, 0.026681043, -0.007428525, -0.0048516593, -0.06909453, -0.045495864, 0.012471292, 0.033856813, -0.07881018, 0.041328494, 0.019357318, 0.05055096, -0.020023111, 0.04561916, 0.033832155, -0.02202049, 0.043029964, -0.00458041, 0.009617012, 0.036026806, 0.025965933, -0.0066764257, -0.006337364, 0.01586807, -0.057850026, -0.014437848, -0.010757491, -0.012175384, -0.0065038125, 0.073089294, 0.016274944, 0.056617074, 0.045717794, 0.002657008, 0.04889881, -0.057850026, 0.050846867, -0.024202812, -0.009789625, -0.036298055, -0.023660315, -0.04157508, 0.040958606, 0.004595822, 0.06569159, -0.03393079, -0.027864676, 0.09217536, -0.021046462, -0.02902365, -0.032919772, 0.038591344, -0.02848115, 0.02848115, 0.017409258, 0.038739298, -0.05405254, -0.039750315, -0.039010547, -0.09927715, 0.042413488, 0.033782836, -0.019924477, -0.010806809, -0.017483234, -0.019714875, 0.0043769735, -0.07303997, 0.0008831006, 0.0030731284, 0.0071449466, -0.031045686, -0.11086689, -0.012847342, -0.04700006, -0.017729824, 0.008390226, -0.027445473, 0.013439158, -0.023413725, -0.034991127, 0.04019418, -0.0056284177, -0.011805499, 0.025041219, 0.028555127, -0.023956222, 0.0014918698, 0.011115046, 0.03218, 0.030675802, -0.021921856, -4.163615e-05, 0.004441703, -0.0008792477, -0.030305916, 0.026631726, 0.08551743, -0.09330968, 0.029344216, 0.05903366, 0.020442314, 0.0026308077, -0.03227864, -0.020405326, 0.002288664, 0.004318408, -0.06145024, 0.058392525, 0.0047314465, -0.010523231, -0.052573, 0.02451105, 0.0763936, -0.039306454, -0.07062339, 0.037111804, -0.01462279, -0.016472215, -0.007557985, 0.010751327, 0.03047853, 0.03989827, -0.05355936, -0.014228246, 0.019690216, -0.034399312, -0.03989827, 0.031070346, 0.014080292, -0.017705165, 0.029294899, 0.026631726, -0.020701235, 0.014437848, 0.0066209426, 0.010917774, -0.01240348, 0.01537489, -0.033067726, -0.06095706, 0.028900353, 0.004145795, -0.0036464504, -0.038542025, -0.048553582, 0.03910918, -0.04157508, 0.019899817, 0.0026076897, 0.026409794, 0.0361501, 0.02655775, 0.0023287348, 0.031021029, 0.0074038664, 0.014030973, 0.0037728278, -0.017421586, -0.023857588, 0.029911373, -0.052375726, -0.0013053861, -0.022156116, 0.014413188, 0.007964859, -0.013537793, 0.02702627, 0.024153495, 0.009641671, -0.011330813, -0.024424745, -0.046210974, 0.0030500107, 0.031045686, -0.007533326, 0.013956997, -0.008279261, -0.051142775, 0.010369112, 0.044706777, -0.04431223, -0.032352615, -0.057603437, -0.014043303, 0.05824457, -0.026409794, -0.025213832, 0.012341832, -0.070672706, -0.020158736, 0.033610225, -0.04184633, 0.010775985, 0.01833397, 0.03321568, -0.08280494, 0.009956073, 0.010301299, 0.05262232, -0.017914766, 0.026335817, -0.006442165, -0.031662162, 0.03173614, 0.008217613, 0.024227472, -0.022008162, -0.031045686, -0.02776604, 0.012027429, 0.021157427, -0.046580862, -0.007613468, -0.017655848, 0.062042058, -0.015559833, -0.041032583, -0.016188636, 0.022242423, 0.027445473, 0.020010782, -0.015633808, 0.010554054, 0.0042043603, 0.06559295, -0.008957383, 0.013352851, 0.011515755, -0.013993985, 0.00044694447, -0.034325335, -0.06258456, -0.053657994, -0.035385672, -0.014931028, 0.012471292, 0.034818515, 0.07082066, 0.006916851, 0.038270775, -0.019653227, -0.008488863, -0.00085844164, -0.012076748, 0.052425046, -0.030577166, -0.00830392, 0.0067627323, -0.042043604, 0.0017276715, -0.020775212, -0.028925013, 0.0027217376, 0.030947052, 0.01412961, 0.014474836, -0.0058657606, 0.010603372, -0.028382516, -0.017138008, -0.008994372, 0.0198505, 0.031933412, 0.03247591, 0.04332587, -0.019135388, 0.013513135, -0.00855051, -0.035361014, -0.005421899, 0.008143636, -0.012970637, 0.045002684, 0.01438853, -0.01337751, 0.022217764, -0.033265, 0.04978653, 0.02648377, 0.0050335196, 0.0006449871, 0.029319556, 0.026360476, -0.021712255, -0.011879476, 0.049909826, -0.034349993, 0.04088463, 0.009086844, 0.015818752, 0.009580024, -0.042240877, -0.020984814, -0.026582407, 0.012193878, -0.039972246, -0.010091698, 0.0002265546, 0.047986425, 0.019049082, -0.025349457, -0.061105013, 0.04512598, -0.008106648, -0.005831855, 0.013993985, -0.015596821, 0.063324325, 0.010430759, -0.026385136, -0.054792307, 0.0807829, 0.0037974867, -0.03195807, -0.016644828, 0.00090698904, -0.0009378128, -0.0175942, -0.008901901, -0.015658468, 0.007089464, 0.01485705, -0.01003005, -0.0401202, -0.048405625, 0.008020341, 0.0077490923, 0.021835549, -0.013587112, -0.006701085, 0.010578713, 0.020195724, 0.011349307, 0.018223004, -0.0021222157, 0.021219073, -0.049638577, -0.040046223, 0.01589273, 0.0041118893, -0.053164814, -0.009037525, 0.061647512, -0.074716784, 0.009906755, 0.019209364, -0.08127608, -0.009370422, 0.06943976, 0.001333898, 0.0017877779, -0.02133004, -0.032895114, 0.06095706, -0.00061108096, 0.050846867, 0.030059326, -0.017039372, 0.04411496, -0.041599743, 0.013106261, 0.012446633, -0.011250671, -0.0027279025, -0.004053324, -0.024572698, -0.019172376, -0.018999763, -0.031070346, -0.009684824, 0.041747697, 0.00428142, -0.006278799, 0.04453416, 0.006164751, 0.014450177, 0.007909376, 0.021872537, -0.0007178082, 0.12526774, -0.023191795, -0.032525226, 0.034522608, -0.0023210288, 0.046136998, -0.009388916, -0.03570624, 0.027149564, -0.0014047927, 0.061105013, -0.009937579, -0.009364258, -0.017692836, 0.021194415, -0.033856813, 0.02673036, -0.007829234, -0.0312183, 0.0031933412, 0.021749243, 0.0053540864, -0.012526775, -0.0027417731, -0.032253977, 0.00682438, 0.030059326, 0.07032748, -0.047246654, -0.043301214, -0.030429212, -0.0011135082, -0.031168982, -0.0044910214, 0.038739298, -0.012243196, -0.01265007, -0.011602062, -0.051241413, -0.03644601, -0.03619942, 0.003034599, -0.014166598, -0.03891191, 0.002248593, -0.024424745, -0.03047853, -0.0029159274, -0.045643818, -0.022710944, 0.034276016, 0.0302566, -0.0012614622, -0.0030685049, -0.044262912, 0.029319556, 0.007989517, -0.007354548, -0.023660315, -0.01240348, -0.045767114, 0.02226708, 0.050255053, -0.0136241, 0.003948523, -0.048972785, -0.0071757706, 0.03415272, 0.00743469, -0.011102717, 0.057208892, 0.018654536, -0.020664247, -0.030157963, 0.014733755, -0.061548878, 0.041821674, 0.023068499, 0.019012094, -0.011762345, -0.035977487, 0.020035442, -0.032303296, 0.038246118, -0.021367028, 0.031933412, -0.02325344, 0.0031393995, -0.02705093, -0.0198505, 0.0014348458, 0.03960236, -0.02251367, 0.009370422, 0.014302223, 0.026631726, 0.021243732, 0.015732445, -0.025744, -0.021182084, -0.05060028, 0.012058253, -0.008630652, 0.023598667, -0.023093158, 0.010184169, -0.00782307, -0.0023873, -0.016965395, 0.024523381, -0.027346836, 0.0047221994, 0.019197036, 0.0023210288, -0.017816132, 0.013266545, -0.034103405, 0.004413962, 0.0008399474, -0.006069198, 0.00041612072, 0.0361501, -0.009339598, -0.0053818277, -0.013093932, 0.003914617, 0.021983502, 0.007601138, 0.066628635, -0.01017184, -0.006947675, -0.02083686, -0.0410819, 0.03940509, 0.008254602, -0.032426592, 0.005702395, -0.0035632262, -0.0073977015, -0.00576096, 0.020442314, 0.022341058, 0.009148491, -0.0028835624, -0.03047853, -0.018025734, -0.007847728, 0.02530014, 0.039528385, 0.0215643, 0.026138546, 0.0490221, -0.021946514, 0.011799334, -0.071757704, 0.034054086, 0.009469058, -0.0020066265, -0.058343206, -0.0151283, 0.03767896, -0.017150339, -0.009499881, 0.014055633, -0.015005005, -0.03146489, 0.055334806, 0.010344452, 0.015683128, -0.016940737, 0.035804875, 0.0067257434, 0.021958845, 0.005705477, 0.007841564, -0.01636125, 0.009105338, -0.013229556, -0.036544647, 0.020158736, -0.011725357, 0.0047961767, 0.02599059, -0.011318483, -0.020886177, -0.037555665, 0.009851272, -0.04983585, -0.03545965, -0.0277907, 0.0018031897, -0.005070508, 0.05459504, -0.015041993, 0.059329566, 0.016521534, 0.009401246, -0.01760653, -0.010609536, -0.008766276, 0.016459886, -0.026828997, 0.016546192, -0.032352615, 0.020208055, -0.019024422, 0.03622408, 0.045150638, 0.019394308, 0.0057640425, -0.037333734, -0.033560906, -0.006269552, -0.03151421, 0.006960004, -0.0061493395, 0.013352851, 0.018777832, 0.02776604, 0.009191644, -0.0440903, 0.031908754, -0.04490405, -0.011971947, -0.050748233, -0.00341219, -0.020713564, -0.054890946, -0.0063558584, 0.011078058, 0.025596047, 0.03691453, -0.01906141, 0.037506346, 0.010979422, -0.009715648, -0.01758187, 0.022476682, 0.0032118354, -0.07481542, 0.023906905, -0.01162672, -0.02107112, 0.02278492, 0.016694147, -0.014067963, -0.005529782, -0.01638591, -0.0014325341, 0.019912146, 0.00040302062, 0.013537793, 0.010301299, -0.0037974867, 0.00830392, -0.010757491, 0.0077860807, 0.015535173, 0.00290668, -0.051241413, -0.027396154, 0.010504737, -0.0022223927, 0.006744238, -0.0035231553, 0.0076689506, -0.0038992052, -0.010332123, 0.041007925, 0.017902438, -0.028160583, 0.0005320951, 0.030601826, -0.028382516, -0.0008114354, 0.015880398, -0.0247823, 0.02675502, 0.040785994, 0.031612843, 0.054151174, -0.018025734, 0.035089765, 0.035336353, 0.032056708, -0.0026184781, -0.031168982, 0.005443475, 0.0045588333, 0.047295973, -0.0066209426, 0.015103641, 0.012237031, -0.0052338736, -0.032377273, -0.060315926, -0.015017334, 0.037013166, 0.045545183, 0.0022455107, 0.02949217, 0.017705165, -0.05454572, -0.020614928, 0.0061185155, 0.02801263, 0.006670261, -0.009000537, 0.03200739, -0.0074716783, -0.005569853, -0.018001074, -0.024671335, 0.00091623614, 0.0022516754, 0.004561916, 0.021453334, 0.03565692, -0.006793556, 0.008482697, 0.00034946433, 0.023475373, -0.0056315004, 0.020220384, -0.03417738, 0.060167972, 0.028678423, -0.061844785, 0.009462893, 0.00495646, 0.028579786, 0.006325035, 0.017174996, -0.0016953066, 0.021379357, -0.052720953, -0.008741617, 0.023487702, -0.031045686, -0.01162672, 0.003011481, -0.021835549, -0.014080292, -0.02976342, 0.023980882, -0.012847342, -0.010208828, 0.030922392, -0.039035205, -0.0021961927, 0.0028434915, -0.009999227, 0.004210525, 0.02976342, -0.027174223, 0.016213296, -0.033067726, 0.0034676725, 0.020392997, -0.0446328, 0.030133303, -0.022710944, 0.04381905, 0.0044879387, -0.005548276, -0.025226163, -0.013710407, 0.019123059, 0.0048609064, -0.0003806734, -0.02030669, 0.0069784983, 0.047887787, 0.0013647218, -0.015017334, 0.0043584793, 0.07343452, 0.0076751155, -0.036815893, 0.014178928, 0.011207518], [0.009991007, -0.0014606385, -0.030290289, 0.0012563586, 0.00963782, 0.03742587, -0.06637524, 0.030577628, -0.0037922724, 0.0123914825, -0.000823854, 0.0065609007, -0.019503115, -0.01776711, -0.0053486903, 0.031008637, -0.018724907, 0.008572272, -0.005360663, -0.032469276, 0.0018662051, -0.06848239, -0.022939207, 0.000945075, 0.013804231, -0.01052378, -0.008404657, 0.020796139, -0.015468401, 0.010691395, 0.03352285, 0.023501912, 0.040849987, 0.018281925, 0.030410014, -0.012307675, -0.016090969, 0.03371441, -0.0021610267, 0.014953585, -0.050475836, 0.018066421, 0.016162803, -0.0060460856, 0.0071475506, -0.0057018776, 0.0102723595, 0.026698556, 0.013492947, -0.026602777, -0.023968838, -0.036324404, -0.0017479772, -0.025716815, -0.030888911, 0.0055492288, 0.06718937, -0.046764378, 0.06493855, -0.02299907, -0.059910122, 0.026267547, 0.067764044, -0.041376777, -0.020867974, 0.013109829, 0.019982014, 0.0072732614, 0.023765307, 0.041304942, 0.0021610267, -0.015552208, -0.014857806, -0.018509403, 0.0055492288, -0.055456374, 0.046524927, 0.030362124, 0.015671933, -0.021059534, 0.026746446, -0.019539032, 0.025573146, -0.038934395, 0.035055324, -0.050523724, 0.06383709, -0.11397769, -0.034384865, 0.028302863, -0.01035018, 0.014797944, 0.042119067, 0.015336704, -0.0027716213, -0.013804231, 0.013349278, 0.016462114, -0.016222665, 0.0006319207, -0.01757555, -0.04731511, -0.05866499, -0.08490859, 0.024004756, 0.035653945, 0.04908703, 0.013145747, -0.021741962, -0.04647704, 0.007375027, -0.031631205, -0.023825169, 0.0063693416, 0.0019365433, 0.036635686, -0.027656352, -0.032325607, -0.022795537, -0.04209512, -0.08806932, -0.03704275, 0.04106549, -0.009877268, 0.020903891, 0.00048638065, -0.04243035, 0.06508222, 0.009344495, -0.012367537, -0.018832657, 0.036827244, 0.04561502, 0.059527006, 0.04305292, 0.058712877, 0.07518697, -0.010499836, -0.04365154, 0.012307675, -0.036875136, -0.0039568935, -0.03052974, 0.0040646456, -0.019311557, 0.0019155914, 0.00070936745, -0.005130193, -0.054977473, -0.013026021, -0.034049638, -0.043244477, -0.0008844645, -0.009775503, 0.050284274, -0.028446533, 0.01991018, 0.04345998, 0.005486374, 0.056749396, 0.019096052, -0.036061008, 0.0009368439, 0.07264881, -0.013097856, -0.038790725, 0.028231028, -0.036132842, -0.049757488, 0.024280122, 0.0032924227, 0.021598294, 0.027105618, 0.009464219, -0.03929357, 0.005758747, 0.062017273, -0.03033818, -0.008775803, -0.027321123, -0.011044582, 0.06484277, 0.033738356, -0.01463033, 0.026147824, 0.044513557, 0.015276842, 0.011349879, 0.051960416, -0.05411546, -0.018569265, 0.015647987, -0.021849714, -0.01385212, 0.023717416, 0.019551005, -0.0070338123, -0.02990717, -0.010254401, 0.00836874, 0.008165209, -0.035055324, 0.016749453, -0.04633337, -0.028159194, 0.04223879, 0.04774612, 0.045686856, 0.025213972, 0.027033783, 0.036084954, 0.050667394, -0.0046004127, -0.023693472, -0.005453449, 0.00878179, -0.041759893, -0.009913186, -0.051768858, -0.015252897, 0.031918544, 0.021753935, 0.031080471, -0.024878744, 0.013552809, 0.0033492919, 0.0042292667, -0.008237043, 0.037186418, 0.030960746, -0.0029586907, -0.036827244, -0.015983216, 0.038838618, -0.101909466, -0.007327137, -0.038192105, -0.046213645, 0.00724333, 0.009111032, 0.03318762, 0.031822763, -0.025908375, -0.015899409, 0.038623113, 0.037808985, 0.025357641, 0.0267225, 0.011337907, 0.03400175, -0.016138857, -0.008530368, 0.022615952, 0.0497096, -0.00927266, 0.07379816, 0.066758364, -0.040251367, 0.016653674, 0.053349223, -0.028374698, 0.038910452, -0.033738356, 0.052391425, -0.009242728, -0.017312158, 0.019383391, -0.028733872, -0.027752131, 0.001400028, 0.030649463, -0.040395036, 0.05368445, -0.00022822476, 0.041185215, -0.006489066, 0.07619265, 0.07494751, 0.026602777, 0.04106549, 0.013277443, 0.0066626663, 0.058569208, 0.06024535, -0.01678537, -0.0020667436, 0.050284274, -0.07403761, -0.00044223224, 0.024148425, -0.025142137, 0.016605783, 0.06273562, -0.0130379945, 0.054354906, 0.013433085, 0.03371441, 0.030601574, -0.033905968, 0.034863763, -0.007823993, -0.010559698, -0.053109773, -0.03783293, 0.0074109444, 0.04932648, 0.008117319, 0.08878766, -0.028829651, -0.030170565, 0.08074218, 0.015695877, -0.028662037, -0.02172999, 0.038239993, -0.011673136, 0.0012496241, 0.017264267, 0.047410887, -0.02990717, -0.020353159, -0.031056527, -0.08945812, 0.0492307, 0.01908408, 0.00063977763, 0.015971243, -0.0083328225, 0.0004669254, 0.028997265, -0.052774545, -0.0062137, 0.006674639, 0.021921549, -0.033546794, -0.08792565, -0.030697353, -0.07413339, 0.007159523, -0.019155914, -0.027129564, 0.018748851, -0.050427943, -0.02167013, 0.018784769, 0.0048967307, -0.04290925, 0.014654274, 0.029715613, 0.0075606, 0.0013304381, 0.0070996606, 0.007381013, 0.015647987, 0.023717416, -0.02559709, 0.0073929857, -0.022568062, -0.018150229, 0.06417231, 0.06627946, -0.042693745, 0.019024218, 0.089170784, 0.01962284, 0.00019099793, 0.0011770411, -0.019371418, -0.019706648, -0.036300458, -0.0372822, 0.04195145, 0.0154324835, -0.041041546, -0.051912528, 0.015671933, 0.07580953, -0.007835967, -0.04800951, 0.02387306, -0.013073912, -0.0033732369, -0.027225344, 0.0056360294, 0.04985327, 0.043819156, -0.008584244, -0.010380111, 0.03895834, -0.012846435, -0.0248548, 0.04243035, 0.02103559, -0.020317242, 0.010924857, 0.015731795, 0.003406161, 0.05138574, 0.013840148, 0.021598294, -0.0042681773, 0.00016677244, -0.009087087, -0.033905968, 0.03689908, -0.025429476, 0.01130199, -0.020017931, -0.014223266, 0.041903563, -0.038311828, 0.027416902, 0.00016518235, 0.050332166, 0.032038268, 0.012714738, 0.0009832372, 0.0136007, -0.007135578, 0.013780286, 0.012271757, -0.0154324835, -0.023681499, 0.033451017, -0.05540848, 0.024471682, -0.037210364, 0.013480974, -0.007758145, 0.0008126298, -0.0020832056, 0.013816203, -0.0061777825, -0.017324131, 0.007506724, -0.039030176, -0.0041903565, -0.011535453, -0.01137981, 0.066135794, -0.0022897304, -0.04932648, 0.04252613, 0.009230756, -0.045830525, -0.0018257981, -0.059431225, -0.001954502, 0.030170565, -0.049949046, 0.010457932, -0.012050267, -0.052726656, -0.025716815, -0.000810385, -0.0044387844, 0.025477367, 0.030218456, 0.03033818, -0.085579045, 0.00499251, 0.0019485157, 0.043819156, 0.010817106, -0.0033522851, -0.023430077, -0.0036156788, 0.04942226, 0.008189154, 0.031295974, -0.033546794, 0.013469002, -0.01776711, 0.011577356, -0.0044986466, -0.044705115, -0.013445058, -0.008721927, 0.033259455, 0.026075989, -0.031248085, -0.020664442, -0.0003180181, 0.032804504, 0.035606056, -0.040059805, 0.006938033, 0.035198994, 0.0881651, -0.015923355, -0.0021071506, 0.012726711, -0.035606056, -0.023178656, -0.016067022, -0.031104416, -0.038239993, -0.009087087, -0.016521975, -0.0049206754, 0.043436036, 0.07006276, 0.008440575, 0.03469615, 0.024304066, 0.014905696, -0.02201733, -0.0047021783, 0.026554886, -0.030122675, -0.004313074, -0.0044148397, -0.048919417, -0.00692606, -0.0012122102, -0.030841023, -0.0053456975, 0.013540837, 0.037354033, 0.035198994, -0.008554313, -0.005764733, -0.018748851, -0.034241196, -0.008458533, -0.00189015, -0.0055163046, -0.006405259, 0.024004756, -0.033738356, 0.019143943, -0.029380383, -0.021550404, -0.012229854, 0.0031248087, -0.01385212, 0.04908703, 0.012355565, -0.009242728, 0.027297178, -0.023286408, 0.01977848, 0.0005166859, 0.012343592, -0.0075606, 0.05301399, 0.024830854, -0.027776076, -0.01757555, 0.018341789, -0.050523724, 0.041903563, 0.016138857, 0.008823693, 0.008805734, -0.029835336, -0.02578865, -0.03431303, -0.014929641, -0.010601602, -0.014905696, 0.016043078, 0.0675246, -0.010553712, -0.026028099, -0.058617096, 0.05411546, -0.028422588, -0.012104143, 0.013026021, -0.020867974, 0.04647704, 0.0125710685, -0.033786245, -0.025094248, 0.06034113, 0.0022119095, -0.029380383, -0.008213098, -0.027512683, -0.030841023, -0.018473485, -0.02119123, -0.045543186, 0.021897605, 0.038287885, -0.017348075, -0.023262464, -0.05397179, -0.0063334242, 0.0014651282, 0.017336102, -0.0058545265, -0.018772796, -0.0114277005, 0.011667149, 0.00846452, 0.015935326, 0.013696479, 0.012978132, -0.02803947, -0.055264812, 0.036300458, 0.01187068, -0.038287885, 0.009757544, 0.04408255, -0.057276186, 0.023825169, 0.0272014, -0.09410343, 0.03304395, 0.054594357, 0.006303493, -0.0007856918, -0.033379182, -0.017755138, 0.06287929, 0.031870652, 0.041855674, 0.049661707, 0.011942515, 0.039868247, -0.052535094, 0.054738026, 0.0010371131, -0.0121580195, -0.01756358, -0.006602804, -0.021119395, -0.02309485, -0.00863812, -0.04566291, -0.02892543, 0.0039718593, 0.010457932, -0.012319648, 0.010900913, -0.016557893, 0.018222064, 0.038647056, 0.02407659, -0.0064711072, 0.11436081, -0.031679094, -0.015731795, 0.023477968, -0.013804231, 0.038000546, -0.008919473, -0.033115786, 0.028207084, -0.0031218154, 0.060724247, 3.203565e-05, -0.013397167, -0.017264267, 0.028422588, -0.020508802, 0.010793161, -0.008105346, -0.019682702, 0.0036905066, 0.0243759, 0.00927266, -0.0151212, -0.03881467, -0.0159473, -0.0052678767, 0.021658156, 0.055121142, -0.072265685, -0.07815613, -0.043723375, -0.0052050212, -0.027512683, 0.0019485157, 0.042502183, -0.029835336, -0.019347474, 0.0052708695, -0.045830525, -0.01786289, -0.03812027, -0.005600112, -0.0067045703, -0.040203474, 0.006477094, -0.022915263, -0.013349278, -0.015636016, -0.05603105, -0.020508802, 0.046022084, 0.050811063, 0.007698283, -0.004594426, -0.04999694, 0.020987699, -0.04027531, -0.013445058, -0.045638967, 0.003085898, -0.029021211, 0.03807238, 0.028015524, 0.00029519564, 0.008452548, -0.037354033, -0.05172097, 0.012074213, -0.00073705375, 0.013624644, 0.053445, 0.036731467, 0.024004756, -0.004669254, -0.0027521662, -0.05569582, 0.052678764, 0.009691696, 0.03009873, -0.0045375573, -0.06249617, 0.02499847, -0.065992124, 0.009302591, -0.0042951154, 0.057084624, -0.018784769, 0.001448666, -0.03881467, -0.024543514, -0.0048967307, 0.013469002, -0.016917067, -0.0069799363, 0.0033373195, 0.028685981, 0.016869178, 0.035893396, -0.044585392, -0.02309485, -0.07892237, 0.009841351, -0.02089192, 0.048775747, -0.023058932, -0.0036635685, -0.030745242, 0.001987426, -0.036084954, 0.00954204, -0.026028099, 0.009093073, 0.03033818, -0.0012630931, 0.0009824889, -0.013756341, -0.036084954, -0.013768313, -0.0055971188, 0.0015122696, -0.03342707, 0.038192105, -0.020233436, -0.008715941, -0.038144216, 0.0147859715, 0.029093046, 0.027345069, 0.08351979, -0.008919473, 0.003214602, 0.00066896045, -0.012355565, 0.029500108, -0.0009787475, -0.039964028, -0.019551005, -0.026267547, 0.0029497114, -0.01551629, 0.015348677, 0.009949103, 0.03512716, -0.020448938, -0.018653072, -0.014247212, 0.0063154656, 0.029284604, 0.045399517, 0.02436393, 0.023753334, 0.059048105, -0.021418707, 0.022137053, -0.04575869, 0.03220588, 0.018533347, -0.014187349, -0.046285477, -0.0016162803, 0.041903563, -0.016162803, -0.011589328, 0.015049365, 0.0010296304, -0.042406406, 0.022113109, 0.020652471, 0.0071176193, -0.028422588, 0.02574076, -0.010146649, 0.018952383, -0.017096654, -0.02006582, -0.014331019, -0.011631232, -0.028901486, -0.027273234, -0.0026952971, -0.008410644, 0.013492947, 0.052487206, -0.000603112, 0.0026489038, -0.038766783, 0.014797944, -0.06268773, -0.036659632, -0.029140934, 0.005815616, 0.0023271444, 0.032589, 0.0011747964, 0.08289722, 0.0124274, -0.007189454, -0.017455827, -0.005013462, -0.0060969684, 0.02119123, -0.019191831, 0.016988901, -0.02461535, 0.0027282212, -0.002604007, 0.040778153, -0.0022029302, 0.047410887, 0.030026896, -0.05315766, -0.0013738383, -0.011738984, -0.04135283, 0.01634239, -0.027392957, 0.027081674, 0.013385195, -0.0059443195, 0.02691406, -0.06498644, 0.016905095, 0.01061956, -0.030002952, -0.05358867, 0.004774013, -0.011577356, -0.031583313, -0.015396566, 0.028685981, 0.03615679, 0.013241526, -0.025573146, 0.009733599, 0.024483653, -0.0004063149, 0.007704269, 0.022005357, -0.0016911081, -0.02471113, -0.015839547, 0.014307073, -0.041161273, 0.015492346, 0.01868899, -0.04829685, 0.012056254, -0.030026896, -0.0151571175, 0.032948174, -0.0009675233, -0.004965572, -0.0017749151, -0.0070817024, 0.0075246827, -0.027416902, 0.011996391, 0.00963782, -0.017922752, -0.0050613517, -0.021358844, 0.014773999, -0.013540837, 0.0018138257, 0.007590531, -0.007835967, -0.018090367, -0.025908375, 0.024304066, 0.031679094, -0.04276558, 0.008063443, 0.010050869, -0.02456746, 0.015037393, 0.026267547, -0.049949046, 0.024196314, 0.036348347, 0.035318717, 0.02020949, -0.042358518, 0.014450743, 0.021442652, 0.033546794, 0.01035018, -0.012630931, 0.015935326, 0.010942816, 0.03656385, 0.007051771, 0.01211013, -0.02990717, 0.0105477255, -0.018150229, -0.049949046, -0.029571943, 0.044800896, 0.06733304, -0.022783566, 0.012068226, 0.030745242, -0.079784386, -0.01610294, 0.026291493, 0.050284274, 0.015540236, -0.0041484525, 0.028446533, -0.018665044, -0.0076863104, -0.019119997, -0.011409742, 0.009799448, 0.026890116, -0.019742565, -0.008380713, 0.025261862, -0.023214573, -0.0052918214, 0.0069619776, 0.050092716, 0.012259785, 0.032852393, -0.0581382, 0.008626148, 0.02677039, -0.023825169, -0.021658156, -0.0036934998, 0.008338809, 0.02280751, -0.0013469002, -0.018473485, 0.009847337, -0.07413339, -0.009601902, 0.026195712, -0.036731467, -0.0036964929, 0.004779999, -0.019263666, -0.008296905, -0.025237918, 0.032660834, 0.011284031, -0.011248114, 0.009871283, -0.0689134, 0.00481891, 0.0061897547, -0.0055342633, 0.0062316586, 0.014354964, -0.0032355536, 0.0045704814, -0.025860485, -0.0007617469, 0.019419309, -0.0372822, 0.01385212, -0.055360593, 0.017360048, 0.008727914, -0.0063334242, -0.035318717, -0.0015594112, 0.010942816, -0.0015803629, -0.01502542, 0.00093010947, 0.0053965803, 0.05641417, 0.043100808, -0.031343866, -0.010613574, 0.077342, 0.009661764, -0.020472884, 0.016114913, 0.008769817], [0.021711642, -0.00724461, -0.017085297, 0.047084417, 0.018871488, 0.028334968, -0.024318814, 0.060752656, -3.183125e-05, 0.04093815, -0.004027249, -0.017229524, -0.023564398, -0.017362656, -0.018738355, 0.024784775, -0.050900873, 0.017340468, -0.006318232, -0.04655189, -0.00822646, -0.021245679, -0.03443686, -0.0008494111, 0.02071315, -0.0034891728, 0.013712616, 0.011793293, -0.005586005, 0.0107005, 0.018549751, 0.04138192, 0.040139355, -0.024407567, -0.0028983988, -0.027469609, 0.03288365, 0.039163053, -0.04979144, -0.03235112, -0.04400019, 0.004568098, -0.014045446, -0.066388585, -0.01925979, -0.0028678894, -0.020091867, -0.009374725, 0.018394431, -0.022599189, 0.040516563, -0.020857377, 0.029133761, -0.021611793, -0.012325822, 0.00051554054, 0.047306307, -0.060930166, 0.03168546, -0.007788233, -0.029422214, 0.012736313, 0.050856497, -0.011149821, 0.02145647, -0.009474575, 0.020125149, 0.001034548, 0.05405167, 0.0374989, 0.002150917, 0.03681105, -0.04435521, -0.04828261, 0.0064680055, -0.06527915, 0.07979056, 0.0016516712, -0.0029816064, -0.033970896, -0.031064177, -0.029777233, -0.04160381, 0.007865894, -0.002741691, -0.047838833, 0.023719719, -0.08631404, -0.024318814, -0.0020815772, 0.03476969, -0.015798353, 0.019304167, 0.049480796, -0.028534666, 0.041337546, 0.022111038, 0.027536174, -0.04566434, -0.038985543, -0.028534666, -0.054717332, -0.047616947, -0.069983155, 0.045154, 0.03818675, 0.08232007, -0.020923942, -0.029289082, -0.025472626, 0.011310689, -0.024074737, -0.00012671827, 0.031951725, -0.04686253, 0.020857377, 0.011277406, -0.03650041, -0.03665573, 0.03290584, -0.09550016, -0.000990864, 0.03374901, 0.03270614, -0.039029922, 0.022710133, -0.016619336, 0.006451364, 0.016341977, 0.03767641, -0.0023062378, 0.019914357, 0.06030888, 0.03224018, 0.06922874, 0.03257301, 0.043378904, -0.02469602, -0.0797018, 0.0075774407, -0.051566534, -0.0017293317, -0.006706534, 0.042313848, 0.0018402751, 0.004936985, -0.016719185, -0.038475204, -0.03681105, -0.0024976153, 0.011748916, -0.045753095, 0.01227035, 0.022621378, 0.004751155, -0.026959268, 0.0058356277, 0.024341002, 0.014788767, 0.04863763, 0.069095604, -0.06594481, 0.0059243822, 0.0072945347, 0.0070005343, -0.078681126, 0.033970896, 0.001808379, -0.02609391, 0.029599724, -0.0025711155, -0.016552769, 0.04615249, -0.03186297, -0.024252247, 0.011726727, 0.01560975, 0.010584009, -0.045109622, -0.072512664, -0.04877076, 0.054362312, 0.0518328, -0.029932555, 0.02915595, 0.056137405, 0.006567855, 0.0044848905, 0.022366207, -0.065501034, -0.044932116, 0.029222516, -0.0037582107, -0.032484256, 0.024740398, -0.058578163, -0.029444402, 0.012647558, -0.018993527, -0.015465523, -0.019392923, -0.05627054, -0.024585078, 0.014966277, -0.040339053, 0.04206977, 0.034902822, -0.007915818, 0.042757623, -0.014378277, 0.025517004, 0.02968848, 0.0049813627, -0.013102426, 0.0018319545, 0.0076051764, -0.055294238, 0.019503865, -0.020568924, -0.036611352, 0.02673738, -0.02573889, 0.002822125, -0.006545666, 0.0124145765, 0.029777233, 0.022543717, -0.005377986, 0.016619336, 0.040161543, 0.0040411167, -0.052099064, -0.03818675, 0.04246917, -0.06838557, -0.043356717, -0.00012160447, -0.036389466, 0.062172733, 0.016763562, 0.025627946, 0.036722295, -0.035368785, -0.018682884, 0.036899805, 0.06847432, 0.037410144, 0.033504933, -0.010633933, -0.012847256, 0.017562354, -0.011637973, 0.019603714, 0.036788862, 0.013413068, 0.036611352, -0.015654126, -0.045398075, 0.03308335, 0.02114583, -0.014733296, 0.036877617, -0.03412622, 0.064569116, -0.030908857, -0.035679426, 0.039961845, -0.056803066, -0.014433748, -0.021367716, 0.051610913, -0.014289522, -0.028756553, 0.019126657, 0.007743856, -0.034503426, 0.0651904, 0.029067194, -0.04400019, 0.066921115, -0.003569607, 0.006684345, 0.029888177, 0.050590232, 0.024096927, -0.015876014, -0.010656122, -0.028179647, -0.037143882, 0.01974794, -0.0069117798, -0.02206666, 0.05986511, 0.041670375, 0.0569362, 0.015476617, 0.021090358, -0.019625904, -0.04395581, 0.020058583, -0.01729609, -0.0027000871, -0.024274437, -0.040827204, 0.0017709355, 0.02658206, 0.023786284, 0.07996807, 0.005341929, -0.026670815, 0.06612232, 0.00622393, -0.05986511, -0.043578602, 0.045442455, -0.00032953685, 0.0011101284, 0.0657673, 0.05365227, -0.0057246843, -0.02165617, -0.036921993, -0.08955359, 0.025272928, 0.04615249, 0.0049175704, 0.00473174, -0.042336036, -0.030731346, 0.020524547, 0.0009797697, 0.0045542303, -0.0053336085, -0.01645292, -0.05165529, -0.095588915, -0.010118047, -0.043933623, 0.030398516, -0.045974985, -0.029888177, 0.029577535, 0.0052476274, -0.017817525, 0.024096927, -0.00026019715, -0.034636557, 0.027669307, 0.023830662, 0.03303897, 0.0011593595, 0.03170765, 0.067009866, 0.04211415, -0.011715633, -0.017284997, -0.03496939, -0.017928468, -0.021855868, -0.0018929733, 0.044887736, -0.08183192, 0.034858447, 0.017739864, -0.033327427, -0.02951097, -0.030309763, -0.05063461, -0.048992645, -0.0073555536, -0.050856497, 0.05489484, -0.005880005, -0.057379976, -0.022787793, -0.006795289, 0.024474135, -0.013690427, -0.03479188, -0.008847743, 0.00024667592, -0.03035414, -0.019892167, -0.00075857615, -0.006922874, 0.029133761, -0.014278428, 0.013224464, 0.0022271906, 0.0044377395, 0.009396913, 0.05711371, -0.037010748, 0.0027832948, 0.03665573, 0.018727262, -0.028911874, 0.000531142, -0.009779668, 0.03430373, -0.004670721, -0.014566881, -0.0038525127, -0.0091084605, 0.0069006854, -0.016375259, 0.028002137, 0.006933968, 0.0076218178, 0.053430386, 0.009968272, 0.024740398, -0.0048787403, 0.020613302, 0.05675869, 0.050678987, -0.032817084, 0.047395058, -0.033904333, 0.0078104218, -0.007427667, -0.03448124, -0.0363229, 0.03960683, -0.015543183, 0.039251808, -0.047306307, 0.060974542, -0.020824093, -0.035745993, 0.013756993, 0.007056006, 0.04846012, 0.0012959586, -0.013224464, -0.062616505, -0.03217361, -0.032129236, -0.03971777, 0.018904772, 0.026005154, -0.029865988, 0.012625369, 7.878721e-05, -0.026160475, -0.035612863, -0.08538211, 0.020191716, 0.056492426, -0.030376328, -0.017617827, -0.034503426, -0.08280822, -0.0518328, 0.026892703, 0.021966811, 0.0004826042, 0.027247721, 0.02469602, -0.08826664, 0.0133575965, -0.012103935, 0.028490288, -0.024008172, 0.0062572127, -0.021367716, 0.0033837764, 0.06590044, 0.006639968, 0.04996895, -0.0031729839, -0.0015005107, 0.005868911, 0.03667792, 0.008764536, 0.002842927, -0.019603714, 0.0065844962, 0.04198102, -0.030198818, -0.024141304, -0.055161104, 0.023253756, 0.04504306, 0.017950658, -0.031308252, 0.033416178, 0.007827063, 0.055338614, 0.019903263, 0.026360175, 0.01227035, 0.055516124, -0.036234144, 0.0077771386, -0.018549751, -0.044066753, -0.02334251, 0.02436319, -0.015043938, -0.0016655392, 0.011438274, 0.0049980045, 0.026227042, 0.025295116, 0.022765605, 0.0032922481, -0.021989001, 0.0156208435, -0.031463575, -0.006662157, -0.014045446, -0.045420267, 0.02744742, -0.02829059, -0.031441387, -0.0072612516, -0.005006325, -0.007555252, 0.020890659, -0.0088255545, -0.037099503, -0.018816017, -0.061240807, 0.0076772897, -0.006545666, 0.011149821, 0.010378764, -0.008115516, -0.045131814, -0.02206666, -0.004945306, 0.0073000817, 0.0049231173, 0.0093913665, 0.0042297207, -0.010500802, 0.033549313, -0.04053875, -0.003769305, 0.0018444356, 0.054273557, -0.021278962, -0.008575932, -0.010584009, 0.0532085, 0.024784775, -0.007982384, -0.00049439195, 0.03938494, -0.08161003, 0.023076246, -0.0062738545, 0.03323867, 0.0034226067, -0.021744924, -0.022233076, -0.04262449, -0.0021536904, 0.010595104, 0.0069062323, 0.017185146, 0.117422596, 0.051211517, -0.012470049, -0.037055127, 0.027891194, 0.007405478, -0.004712325, 0.029954743, 0.0490814, 0.036211956, 0.026293607, -0.02487353, -0.03465875, 0.04484336, 0.011482651, -0.01971466, -0.014877522, -0.021079263, -0.0045819664, 0.03186297, 0.008337404, -0.04846012, 0.02968848, -0.015598655, -0.033904333, -0.046241246, -0.014356088, 0.047439437, -0.019448394, 0.0015448881, 0.020801906, -0.00026522428, 0.030265385, -0.0077161198, -0.008492724, 0.012680841, 0.012470049, 0.022743415, -0.048548874, 0.036833238, -0.006002043, 0.025428249, -0.045398075, -0.03545754, 0.031973913, -0.009785216, 0.019404016, 0.055871144, -0.029000629, -0.0013597512, 0.032151423, -0.025960777, 0.013989975, 0.0015310202, -0.020679867, 0.038475204, 0.009618801, 0.024585078, 0.013346503, 0.019858886, 0.05919945, -0.04517619, 0.035213463, 0.022743415, 0.005946571, -0.0042962865, -0.017129675, -0.0068119303, -0.0039052109, 0.0065623075, -0.033527125, -0.03277271, -0.0077937804, 0.012325822, 0.009080725, 0.051788423, -0.007999026, 0.06408096, 0.014755485, 0.019858886, 0.0019997566, 0.054406688, -0.03479188, -0.017617827, 0.025295116, -0.024074737, 0.018505374, -0.045264944, -0.0065955906, 0.021356622, -0.0010650575, 0.045797475, 0.0020261055, -0.028911874, -0.02145647, 0.0155320885, -0.03270614, 0.011194198, 0.001313987, -0.01663043, -0.017229524, 0.014211861, 0.019048998, 0.008170988, -0.015643032, -0.02208885, -0.011083255, 0.044044565, 0.088044755, -0.05542737, -0.036877617, -0.015398957, -0.061640203, -0.0043794946, 0.012936011, 0.073400214, -0.012381294, -0.019470584, -0.03532441, -0.070160665, -0.023764096, -0.013335408, -0.028956251, 0.00015332738, -0.033482745, 0.0005498637, -0.018472092, 0.0031258329, 0.0186496, -0.04499868, -0.029599724, 0.04943642, 0.017151864, 0.035501916, -0.0022882095, -0.053741027, 0.026382362, 0.019858886, 0.00753861, -0.015276919, -0.037188258, -0.018682884, 0.03461437, 0.023919417, 8.346764e-05, -0.04309045, -0.09958288, -0.0074775913, 0.03272833, -0.02778025, 0.02145647, 0.031818595, -0.007627365, 0.020224998, -0.039961845, -0.0015545957, -0.07845924, 0.017861903, -0.050323967, -0.04127098, -0.016619336, -0.020702055, 0.02693708, -0.0749978, 0.035058144, -0.0026182665, 0.03856396, -0.017174052, 0.009879518, -0.03936275, 0.0062960433, -0.0137348045, -0.002245219, -0.009940537, -0.029755045, 0.006035326, 0.0016891147, -0.005022967, 0.018083788, -0.024318814, -0.06221711, -0.019270884, 0.011726727, 0.00997382, 0.0132577475, -0.021944623, -0.006323779, -0.041626, 0.012214879, -0.0054722875, 0.015443334, -6.335913e-05, -0.003225682, 0.04093815, 0.004939759, -0.022477152, 0.004495985, -0.019881073, -0.0031397007, 0.007311176, 0.007521969, -0.0015074447, 0.037254825, 0.006290496, 0.0033283047, -0.050368346, 0.020580018, 0.027358666, 0.028268402, 0.048815135, 0.016863411, -0.0077161198, 0.00015592761, -0.030820101, 0.03150795, -0.015964769, -0.05369665, -0.012370199, 0.00024528912, 0.031175122, -0.0034226067, -0.008032309, 0.033283047, 0.01484424, -0.0006275241, 0.005430684, -0.0047372873, 0.0048066266, 0.031574517, 0.02505104, 0.021423189, 0.02593859, 0.059554465, -0.027735872, 0.046906907, -0.023076246, 0.016242128, 0.03989528, 0.022277454, -0.025073228, 0.0058578164, 0.043001696, 0.01612009, 0.016519485, -0.040028412, 0.026781758, -0.036544785, 0.030908857, 0.012325822, 0.0129803885, 0.0055998727, 0.0007592695, -0.04224728, 0.015021749, 0.013013672, -0.025428249, 0.038763657, -0.005638703, -0.0066288738, -0.019781224, 0.03392652, -0.0018513695, 0.0127917845, 0.053918537, 0.020668773, -0.018150356, -0.046995662, -0.006002043, 0.0028276723, -0.02693708, -0.025517004, 0.030753536, 0.015343485, 0.0041160034, 0.0036472674, 0.044732414, 0.037454523, 0.017007638, -0.0039551356, -0.005874458, -0.0063071377, -0.006473553, -0.051211517, 0.018405525, -0.00097283575, 0.018394431, -0.005757967, 0.033682443, 0.036034446, 0.05729122, 0.03408184, 0.02155632, -0.03510252, 0.0124145765, -0.04877076, 0.009879518, 0.0019512187, 0.005092306, 0.023919417, 0.023120623, -0.0046956833, -0.03288365, -0.006357062, -0.0090308, -0.023852851, -0.035346597, -0.0021217943, 0.00064243213, -0.03388214, -0.025872022, 0.014178579, 0.04996895, 0.020069677, -0.00822646, -0.0036444936, -0.04479898, 0.0048149475, -0.00062787085, 0.007926912, -0.0120373685, -0.04193664, -0.018272392, 0.023298133, -0.0024019266, 0.025627946, 0.00454591, -0.049835816, -0.006667704, 0.010528537, -0.0084428, 0.021212395, -0.03938494, 0.014688918, 0.020391414, -0.039163053, -0.0043989094, -0.0032478708, 0.020768622, -0.0063958922, 0.017340468, -0.008930951, -0.034037463, -0.0002553434, 0.0002205002, -0.030465083, 0.0077161198, -0.0045126267, 0.0072612516, -0.022299642, 0.043889247, 0.03918524, -0.016741373, 0.025561381, -0.002252153, -0.009186121, -0.022099944, 0.008986423, -0.035346597, -0.0042103054, 0.005979854, 0.004851004, 0.050323967, 0.0048870607, 0.00021131268, 0.0054001743, 0.011804388, 0.029178139, -0.027380854, 0.012669747, 0.0049702683, -0.0022493794, 0.027358666, 0.0038220033, -0.014700012, 0.004717872, -0.007832611, -0.030842291, -0.02915595, 0.040605318, 0.07530844, -0.012669747, -0.009868423, 0.014655636, -0.060885787, -0.033172105, 0.035546295, -0.0121261235, 0.0013694587, 0.0004122244, 0.046285626, -0.028556855, 0.0073832893, 0.003863607, 0.018560845, 0.00047948392, 0.0504571, -0.009652084, 0.05232095, 0.05591552, -0.009408008, -0.020058583, 0.009430197, 0.022654662, -0.009186121, 0.023475643, -0.026981458, -0.017196242, 0.016497297, -0.039340563, -0.012336916, -0.013945597, 0.00538908, -0.03237331, -0.0039884187, -0.0126031805, 0.009280423, -0.03137482, 0.01992545, 0.0002692113, -0.06434722, -0.037632033, -0.031308252, -0.02122349, 0.014178579, 0.006512383, 0.03155233, -0.0035196822, -0.0051061744, 0.013413068, -0.03851958, 0.025672324, 0.030975424, -0.03303897, 0.014389371, 0.006512383, -0.017695487, -0.0040300223, -0.029910365, -0.011637973, 0.0011503453, -0.03459218, 0.050767742, -0.010789255, 0.02624923, 0.0031341536, -0.0028512478, -0.054229178, 0.0057357787, -0.03257301, 0.024851343, 0.0023949926, -0.014733296, 0.00086397247, 0.0693175, 0.05591552, 0.0034891728, 0.015731787, 0.065501034, 0.011571406, -0.029178139, 0.012669747, 0.022787793], [0.014993705, 0.012337053, -0.019106057, 0.049979016, -0.007502918, 0.04185136, -0.03949798, 0.034766957, 0.008649281, 0.021435175, 0.033384044, -0.036392488, -0.034451555, -0.0184146, -0.031127708, 0.036222655, -0.037217386, 0.016946768, -0.019057533, -0.0330929, 0.01930015, -0.037338693, -0.009031403, -0.03260767, 0.033747967, -0.01191854, -0.01096627, 0.022247942, -0.009480244, 0.029356608, 0.011718381, 0.017868713, 0.030788045, -0.024613453, 0.019639812, -0.010305139, 0.013756361, 0.03918258, -0.03804228, -0.0039880103, -0.057839796, -0.0009234594, -0.013574398, -0.028264834, -0.006963096, 0.01316195, -0.021459438, -0.029016944, -0.008976813, 0.012051979, -0.004000141, -0.017371347, 0.0065203207, 0.0047006966, -0.0044793086, 0.014459949, 0.06982505, -0.05662671, 0.04808661, 0.014314379, -0.042045455, 0.035591852, 0.06084824, -0.023412501, 0.019615551, -0.011117905, 0.006123036, -0.006447536, 0.05939254, 0.04095368, -0.027706815, 0.028167786, -0.0122642685, -0.024091827, 0.011530354, -0.07948119, 0.07234827, 0.004030468, 0.019821776, -0.012167222, 0.009832038, -0.0061503304, -0.044641454, -0.009607617, 0.019215234, -0.041074988, 0.02821631, -0.114320934, -0.05337565, -0.004060795, -0.002473173, -0.007242105, 0.020197831, 0.032995857, -0.030108718, 0.026566517, 0.00023787799, 0.036489535, -0.011445438, -0.010147439, 0.0009098122, -0.05745161, -0.032656193, -0.07763731, 0.048207916, 0.026978964, 0.059052877, 0.010256616, -0.051531762, -0.040929418, 0.029623486, -0.013538006, -0.0149573125, 0.04299166, -0.030618213, 0.033262733, 0.004106286, -0.024407228, -0.036901984, 0.02838614, -0.07967529, -0.028531712, 0.03248636, 0.022041718, -0.024892462, -0.0002405316, -0.008036675, 0.023448894, -0.0024595256, 0.016910376, -0.020646673, 0.020003738, 0.04257921, 0.062400986, 0.046169937, 0.043404106, 0.0713778, -0.043161493, -0.08894324, 0.014217332, -0.0786563, 0.004594552, -0.020112915, 0.035907254, -0.007842582, 0.01667989, -0.021871885, -0.030375596, -0.024528537, -0.0039758794, 0.0016194658, -0.051580288, 0.018839179, 0.021423046, -0.010638737, -0.013368174, -0.0048765936, 0.018353945, -0.00038003613, 0.058713216, 0.061139382, -0.05774275, -0.0013169532, 0.038284898, 0.007272432, -0.06652547, 0.0605571, -0.0041487436, -0.042360857, 0.03614987, -0.006769003, -0.015102883, 0.056384094, -0.023012184, 0.00921943, 0.0058227982, -0.0006410385, -0.017868713, 0.0038212114, -0.084333524, -0.031079184, 0.041899886, 0.040735327, -0.003211637, 0.063711114, 0.040856633, 0.02062241, 0.019785384, 0.019930953, -0.04461719, -0.018499514, 0.013052773, -0.0074058715, -0.017456263, 0.018511645, -0.047019094, -0.0052708453, 0.016364489, -0.02166566, -0.019312281, -0.0232548, -0.011870016, 0.0080245435, -0.017892973, -0.01812346, 0.040759586, 0.025668835, 0.013113427, 0.04051697, 0.009110253, -0.0018893767, 0.06710775, 0.010032196, -0.022029586, 0.0031570485, -0.0011258926, -0.027318629, 0.005380023, -0.015394023, -0.021629268, 0.016873984, -0.0012919334, 0.0012835934, -0.015952041, 0.0012464428, -0.00849158, 0.024249528, -0.013707837, 0.014993705, 0.050949484, -0.018790655, -0.03508236, -0.046897788, 0.015491069, -0.099375755, -0.057257514, -0.010590214, -0.04080811, 0.015988434, 0.0075089834, 0.03243784, 0.008370272, -0.03988617, -0.029550701, 0.036222655, 0.049542308, 0.045199472, 0.029477915, -0.01665563, -0.014775351, 0.02367938, -0.013428829, -0.02017357, 0.057063423, 0.018814916, 0.06288622, 0.045757487, -0.04578175, 0.01419307, 0.05177438, -0.025280649, 0.031224756, -0.0056347703, 0.05895583, -0.015466807, -0.0011797232, -0.018171983, -0.06269213, -0.035616115, -0.0038060478, 0.06521534, -0.022272203, -0.011572812, 0.007284563, 0.013695707, -0.016582845, 0.05968368, 0.04706762, -0.017892973, 0.04415622, 0.0058591906, 0.034621388, 0.027536983, 0.04546635, 0.0108207, -0.017892973, 0.031709988, -0.04231233, -0.017213646, 0.023351846, -0.018184114, 0.02617833, 0.06405078, 0.015624508, 0.055656247, 5.7100195e-05, 0.042045455, 0.003502777, -0.058422074, 0.012652455, -0.009850234, -0.0046400423, 0.00810946, -0.044956855, 0.011172494, 0.045442086, 0.030351335, 0.07608456, 0.028750066, -0.032073915, 0.084721714, -0.008073067, -0.03263193, -0.019627683, 0.011906409, 0.004048664, 0.024492145, 0.03988617, 0.033602398, -0.020695195, -0.022393512, -0.030739522, -0.095833555, 0.043646723, 0.04767416, 0.012149026, -0.0007323988, -0.030351335, -0.01842673, -0.01698316, -0.007690946, -0.0004814423, 0.01784445, 0.017468395, -0.026493732, -0.101801924, -0.0014807194, -0.06453601, 0.003845473, -0.015927779, 0.0025262453, 0.0040880893, -0.020452578, 0.005592312, 0.03522793, -0.009371066, -0.030521167, 0.008255029, 0.020707326, 0.03595578, 0.0013541038, -0.016873984, 0.046097152, 0.031855557, -0.017929366, -0.017711012, -0.00891616, -0.005801569, -0.009898757, -0.0060987747, 0.033747967, -0.06536091, 0.007660619, 0.03864882, 0.023351846, -0.01214296, -0.011099709, -0.03231653, -0.04008026, -0.014362902, -0.033432566, 0.07259088, -0.0021759674, -0.035591852, -0.045417827, -0.00628377, 0.027003227, -0.011245279, -0.05454021, 0.017310694, 0.02428592, -0.03731443, -0.021629268, 0.019190973, 0.025765881, 0.02734289, -0.026809134, 0.0053496957, 0.003223768, 0.002538376, -0.008067002, 0.038842916, -0.032704715, -0.0053345324, 0.001406418, 0.018705739, 0.0075635724, 0.0029007846, 0.011639531, 0.027003227, -0.016776938, 0.008364207, -0.026542256, -0.028070739, 0.00870387, -0.047043357, 0.02120469, -0.0033450762, 0.008212572, 0.057403084, -0.029162515, 0.014229463, -0.015054359, 0.029890364, 0.05250223, 0.026857657, 0.0072057126, 0.04357394, -0.022429904, 0.008497646, -0.00034364365, -0.03187982, -0.04243364, 0.049930494, -0.011427241, 0.023897734, -0.02400691, 0.039570767, -0.036926243, -0.02676061, 0.025110817, 0.018341815, 0.023206277, -0.010602345, -0.006423274, -0.036343966, 0.0008612889, -0.017298562, -0.020525364, 0.029744795, 0.0067022834, -0.033675183, 0.0066598253, 0.0056529664, -0.038551778, 0.009844168, -0.09432933, 0.01814772, 0.06715627, -0.0321467, 0.0029220136, -0.024237398, -0.062206894, -0.045854535, -0.0008286873, 0.0050312616, 0.023036445, 0.051434718, -9.662016e-05, -0.094086714, 0.019130317, 0.014836004, 0.029866103, -0.028944159, 0.016425144, -0.053860884, -0.0058804196, 0.053424172, 0.021993194, 0.0686605, 0.010371859, -0.0057166535, -0.006950965, 0.039279625, -0.024395099, -0.006116971, -0.015624508, -0.0038909635, 0.016704151, 0.011487896, -0.06487568, -0.031855557, -0.007096535, 0.019045401, 0.042603474, -0.025401957, 0.032122437, -0.008212572, 0.06434192, 0.003812113, 0.010954139, 0.015854994, 0.023303324, -0.017589703, -0.005110112, -0.017783796, -0.037920974, -0.022344988, 0.026420947, -0.025401957, -0.016206788, 0.03583447, 0.02150796, 0.041948408, 0.013210474, 0.0043307063, 0.014120285, -0.023448894, 0.02444362, -0.035616115, -0.0011615269, -0.006550648, -0.040880896, 0.031249017, -0.0067083486, -0.019482112, -0.023824949, 0.0045247995, -0.016158264, 0.042943135, -0.020003738, -0.053618267, -0.0063868817, -0.045611918, 0.0013510712, -0.022478428, 0.002975086, 0.0203434, 0.03668363, -0.04660665, -0.0232548, -0.008285357, -0.013744229, 0.015588116, -0.02469837, 0.018256899, 0.0029265627, 0.017492656, -0.0067326105, 0.010111046, -0.026954703, 0.041899886, -0.008521908, 0.004239725, -0.034500077, 0.062061325, 0.04558766, -0.02676061, 0.0054861675, 0.039255366, -0.057888318, 0.03498531, 0.017601833, 0.02251482, 0.007587834, -0.027900908, -0.045102425, -0.047843993, -0.0039758794, 0.0058440273, -0.005273878, 0.037338693, 0.104810365, 0.012895072, -0.006623433, -0.06482715, 0.021107644, 0.008067002, -0.013125557, 0.016340228, 0.017929366, 0.043379847, 0.031249017, -0.015296976, -0.059732206, 0.057063423, 0.009025337, -0.032219484, -0.028580233, -0.014763219, -0.015842862, 0.005261747, 0.0034390902, -0.056529667, 0.015478939, -0.005834929, -0.031491634, -0.05832503, -0.023655117, 0.025329173, 0.0008286873, 0.006080578, -0.0014587323, -0.011057251, 0.0045217667, -0.02398265, 0.014277986, 0.024674106, 0.024492145, 0.03976486, -0.040565494, -0.010086785, 0.008170114, 0.017456263, -0.050852437, -0.0044520143, 0.014775351, -0.026226854, 0.036222655, 0.045806013, -0.07268793, 0.013562268, 0.04255495, -0.0058379616, 0.0149573125, -0.008940421, -0.02062241, 0.024176743, 0.008776655, 0.055995908, 0.010013999, 0.0038758, 0.04680074, -0.060896765, 0.054637257, 0.015867125, -0.008145852, -0.009383197, 0.0014268889, -0.007484722, -0.0027582473, 0.008212572, -0.043646723, -0.020112915, -0.0070601427, 0.003390567, 0.01944572, 0.039303888, -0.010978401, 0.050076064, 0.041778576, 0.02472263, -0.004351935, 0.073027596, -0.033408303, -0.016764807, 0.015042229, -0.022211548, 0.05575329, -0.038818654, -0.0047916775, 0.017043816, 0.01797789, 0.057160467, 0.00526478, -0.039692074, -0.008697805, 0.016364489, -0.02235712, 0.017310694, 0.0114029795, -0.014144547, -0.004779547, 0.007781927, 0.034403034, -0.0036544125, -0.030230027, -0.02337611, -0.023521679, 0.032073915, 0.07094109, -0.0620128, -0.04726171, -0.024783285, -0.029089728, -0.007442264, 0.0007085163, 0.074677385, -0.047043357, -0.004282183, -0.015017967, -0.05730604, -0.0169589, -0.016146135, 0.0062109847, -0.008946487, -0.03362666, 0.0101717, -0.011099709, -0.005595345, -0.00460365, -0.059004355, -0.051095054, 0.04592732, 0.008503712, 0.03789671, 0.003232866, -0.05366679, 0.034160417, -0.023642987, -0.0024216168, -0.0138898, -0.030812306, -0.031249017, 0.036441013, 0.03614987, 0.0033632724, -0.015830733, -0.068709016, -0.022017455, 0.0418271, -0.025547527, 0.044495884, 0.030666737, 0.010729719, 0.030035933, -0.03804228, 0.009546963, -0.06041153, 0.039643552, -0.032801762, -0.0009916953, 0.00054854096, -0.02530491, 0.014253724, -0.06167314, 0.061381996, 0.0091284495, 0.060217436, -0.018402468, 0.010893485, -0.04648534, -0.008194375, -0.00921943, 0.022599736, -0.014108155, 0.00247014, -0.0010402186, 0.020877158, 0.00841273, 0.02865302, -0.027221581, -0.062740654, -0.024225267, 0.029914625, -0.024067566, 0.006975227, -0.011706251, -0.0079578245, -0.04604863, 0.027124535, -0.03408763, -0.011584942, -0.028580233, 0.025620311, 0.052599277, -0.0071753855, -0.033942062, -0.03345683, 0.0042033326, 0.0042730845, 0.0075393105, 0.010274813, -0.014872397, 0.03345683, 0.001012166, -0.011536418, -0.035713162, 0.021325998, 0.012907202, 0.031782772, 0.06332293, 0.031224756, 0.0022426872, 0.0033511417, -0.01563664, 0.03275324, -0.014168809, -0.055171013, -0.01871787, 0.009365001, 0.0017453231, -0.0062352465, -0.028531712, 0.026251115, -0.00442472, -0.015830733, 0.0034845807, 0.012058045, 0.012246072, 0.039425194, 0.013938323, 0.023084968, 0.032365054, 0.04925117, -0.04139039, 0.040322877, -0.021107644, 0.035494808, -0.002700626, 0.017274301, -0.029550701, -0.021083381, 0.049348213, 0.03260767, 0.03406337, -0.024504276, 0.0069812923, -0.024795415, 0.041220557, 0.006277704, 0.02193254, -0.009474178, 0.037508525, -0.03687772, 0.03202539, 0.005583214, -0.03988617, -0.002473173, 0.013817015, -0.009225496, -0.023133492, 0.018463122, 0.003129754, 0.0064414702, 0.06754446, 0.032801762, 0.015697293, -0.05643262, 9.543551e-05, -0.046849262, -0.029429393, -0.050949484, 0.014132417, -0.002404937, 0.01957916, 0.020840766, 0.06589466, 0.036926243, 0.034621388, -0.01784445, -0.017929366, -0.027464198, 0.009322543, -0.033990584, 0.0184146, -0.017298562, 0.022878744, 0.016000563, 0.056529667, 0.022927267, 0.06725332, 0.027148796, -0.010135308, -0.03481548, 0.0017498721, -0.044059172, 0.0007752358, 0.008746328, 0.015563854, 0.0064960592, 0.017504787, 0.035446282, -0.045078162, -0.0075393105, 0.0019363837, -0.01301638, -0.038551778, 0.0061927885, 0.014423557, -0.033990584, -0.04272478, -0.011008727, 0.046461076, 0.017419871, 0.00053261925, 0.023218408, -0.023060707, -0.02661504, -0.022260072, 0.0014299215, -0.011542484, -0.059149925, -0.020707326, -0.0043034116, -0.010420383, 0.02940513, 0.0077212728, -0.019518504, 0.012082306, -0.003921291, -0.0037726879, 0.0062018866, -0.027828123, 0.018062806, 0.0043094773, -0.034766957, -0.014302248, -0.015891386, 0.03275324, 0.0055164946, 0.0052101915, -0.01206411, -0.003275324, 0.0062109847, -0.0036665432, -0.015588116, -0.0044884067, -0.0057348497, -0.007151124, -0.026493732, 0.05424907, 0.032559145, -0.041147772, 0.0019045402, -0.0075635724, -0.015842862, 0.00305242, 0.026639301, -0.05308451, 0.01842673, 0.011487896, 0.009995803, 0.0292353, -0.029356608, 0.011766905, -0.020573886, -0.0005409592, 0.014593388, -0.054928396, 0.02879859, 0.017432002, 0.053327125, 0.0030281583, 0.0026399717, -0.025765881, 0.020865027, 0.0077273385, -0.04083237, -0.024843939, 0.023024315, 0.07758878, -0.038284898, -0.0136107905, 0.0018454024, -0.078898914, -0.020234223, 0.017140862, -0.004106286, 0.03158868, -0.0015148374, 0.047043357, -0.023024315, 0.0041790707, 0.0019045402, 0.018936224, 0.004952411, 0.02279383, -0.01723791, 0.02515934, 0.035494808, -0.002545958, 0.005049458, 0.0071693202, 0.029526439, 0.01754118, 0.015042229, -0.048911504, 0.024043305, 0.04240938, -0.035179406, -0.031904083, -0.0060684476, 0.007824385, -0.030084457, -0.0033541743, -0.028604496, 0.012506885, -0.055995908, 0.018014282, -0.0017968791, -0.0663799, -0.024916723, -0.029550701, -0.00017722383, -0.019955214, -0.03129754, 0.011057251, 0.0033814688, -0.011924606, -0.017601833, -0.054782826, 0.0004382262, 0.027124535, -0.0041184165, 0.01578221, 0.022587605, -0.015187798, 0.02559605, -0.022429904, -0.006062382, 0.012664586, -0.06662252, 0.02588719, -0.031491634, 0.017953627, -0.014302248, 0.00511921, -0.05483135, 0.0011418143, -0.0029204972, 0.020416185, 0.004585454, -0.047140405, 0.008151918, 0.055898864, 0.053618267, 0.021689923, 0.013962585, 0.049784925, 0.0026748478, -0.0277796, 0.023994781, 0.019846037], [-0.0101313805, -0.0024791353, -0.02329313, 0.026097352, -0.007242354, 0.027702995, -0.036635797, 0.032158088, 0.006812675, 0.038806807, -0.026504416, -0.019742623, -0.014563859, 0.00049010274, -0.022852143, 0.021823175, -0.032723457, 0.017809067, -0.038286667, -0.029127719, -0.0058345897, -0.05459186, -0.041656256, 0.011064237, 0.034758776, -0.006818329, -0.017424619, 0.012370235, -0.013093905, 0.027024554, 0.03342451, 0.013919341, 0.02243377, 0.0060776975, 0.026753178, -0.00054522604, 0.014518631, 0.051290113, -0.0044635744, -0.004709509, -0.04504846, 0.0003869232, -0.007242354, -0.014326406, -0.004938483, 0.010086152, -0.008638811, 0.0014218986, 0.004039549, -0.021608336, -0.0029229487, -0.02700194, 0.019245101, -0.022128474, -0.031479646, 0.02406203, 0.068522505, -0.04016369, 0.05233039, -0.009741277, -0.039620936, 0.022580767, 0.054320484, -0.017605536, 0.014292483, -0.00026201239, 0.009402057, 0.005594309, 0.05309929, 0.035663366, -0.014190718, 0.0017738397, -0.017255008, -0.030009693, 0.018577967, -0.071100585, 0.05459186, -0.0032254201, 0.021834482, -0.02358712, 0.0074458863, -0.036726255, -0.012223239, -0.06517553, 0.042312082, -0.05106397, 0.038083136, -0.097333625, -0.023745423, -0.010114419, -0.004438133, 0.007847297, 0.04407603, 0.040095843, -0.022320699, 0.011590028, -0.0096790865, 0.019595629, -0.021529185, -0.013523584, -0.031909328, -0.037314236, -0.050521217, -0.08905665, 0.02440125, 0.03776653, 0.058707733, 0.021563105, -0.050068922, -0.07856343, 0.01881542, -0.030032307, 0.001994333, 0.010600636, -0.012313698, 0.00034469733, -0.034125566, -0.025260609, -0.031954557, 0.02899203, -0.05517984, -0.05156149, 0.04330713, 0.018430972, 0.008859305, -0.0054105646, -0.016689641, 0.017435925, 0.022388542, 0.010764592, -0.014586475, 0.037359465, 0.043284517, 0.04812406, 0.059160028, 0.043148827, 0.07788499, -0.02435602, -0.07431187, 0.005919395, -0.022083243, -0.0005674874, -0.02584859, 0.03914603, 0.0076494184, -0.008537045, -0.036545336, -0.009588628, -0.060969204, -0.00025812548, -0.0070105535, -0.042786993, -0.00027685327, 0.003553333, 0.022705147, -0.045025848, -0.0021045795, 0.050385527, -0.01490308, 0.0455686, 0.052013785, -0.044528324, -0.013919341, 0.049616627, -0.014371635, -0.04292268, 0.03837713, -0.012992139, -0.043284517, 0.03645488, -0.014360327, 0.006089005, 0.053958647, -0.03953048, -0.044166487, 0.011132081, 0.018272668, -0.029715702, -0.008180864, -0.08534784, -0.025984278, 0.059250485, 0.037065476, -0.03313052, 0.03717855, 0.045410294, 0.03290437, 0.024514323, 0.05251131, -0.037721302, -0.03206763, 0.011725716, -0.02018361, 0.0076833405, 0.024333406, -0.018148288, 0.0074402327, 0.0011886846, -0.02192494, 0.0071010124, -0.013693194, -0.029263407, 0.016384343, -0.04504846, -0.032813914, 0.04041245, 0.029331252, -0.007163203, 0.039191257, 0.008768845, 0.033175748, 0.041995477, -0.010832436, -0.036545336, 0.013059983, 0.00116819, -0.034713548, -0.029014647, -0.03993754, -0.010781553, 0.02575813, 0.004636011, -0.0005639538, -0.019652165, 0.01379496, -0.013919341, 0.029263407, 0.0005681941, 0.05174241, 0.061964247, -0.025531985, -0.049616627, -0.030439371, 0.03588951, -0.0803726, -0.021133427, -0.0102388, -0.042018093, 0.011126427, 0.036341805, 0.04893819, 0.023270516, -0.020522831, -0.019708702, 0.04934525, 0.036251348, 0.044890158, 0.0057865335, -0.01234762, 0.02299914, 0.0032084591, -0.0014423932, 0.012720763, 0.060969204, -0.005656499, 0.059838466, 0.051154427, -0.027160242, 0.0056423647, 0.050023694, -0.05811975, 0.04432479, -0.019312944, 0.06273315, -0.019912234, -0.036047816, -0.0029568707, -0.06436141, -0.041633643, -0.011646565, 0.060878742, -0.037789147, 0.037020247, 0.037314236, 0.020341912, -0.024491709, 0.062914066, 0.05879819, 0.0018374434, 0.032293778, -0.0050487295, 0.007163203, 0.040005386, 0.042651303, 0.0054953694, -0.009724316, 0.033922035, -0.039960157, -0.041972864, 0.022603381, -0.023406204, 0.0060324683, 0.052149475, 0.021563105, 0.042379927, -0.0014657145, 0.041294422, 0.0005017634, -0.029331252, 0.016983632, -0.015638057, -0.025780745, -0.017447233, -0.030507216, 0.0015547599, 0.04054814, 0.035188455, 0.09149903, -0.027612535, -0.026866252, 0.07322636, 0.01958432, -0.037246395, -0.025147535, 0.028539738, -0.021223886, 0.0025540465, 0.0180126, 0.03175102, -0.026300883, -0.032090243, -0.03853543, -0.099866465, 0.06639673, 0.027363773, 0.017108012, 0.0028791325, -0.0423347, -0.017469848, 0.019618243, -0.027273316, -0.031524878, 0.008039522, 0.027906526, -0.039123412, -0.10312298, -0.0021554625, -0.044392634, 0.015818976, -0.028630197, -0.0107758995, 0.005187244, -0.039032955, -0.044731855, 0.03973401, -0.0010459294, -0.031570107, 0.018204825, 0.0148917725, 0.0055292915, 0.0012254334, -0.0038925533, 0.026707947, 0.029218178, 0.008169556, -0.025351066, -0.0061172736, -0.0071914713, -0.0142472545, 0.008633157, 0.044302177, -0.074538015, 0.04195025, 0.04563644, 0.027906526, -0.012946909, -0.01328613, -0.05074736, -0.023994185, -0.030846436, -0.044980615, 0.05020461, 0.0072027785, -0.050792594, -0.0511092, -0.0015816148, 0.041972864, -0.0054727546, -0.044008184, 0.0042289468, -0.015061383, -0.015355374, -0.026775792, -0.008226093, 0.02507969, 0.027318545, -0.028223133, -0.008932802, 0.015445833, -0.0098091215, -0.013896726, 0.022546845, -0.010781553, -0.03150226, 0.00049858325, 0.03670364, -0.002021188, 0.024966616, 0.022806915, 0.02908249, -0.0015717209, 0.0029399097, -0.012325006, -0.025305837, 0.026278269, -0.045500755, 0.00022650024, -0.023474047, -0.013512277, 0.025577214, -0.009187218, 0.026707947, 0.010736324, 0.038942493, 0.025441526, 0.018476201, -0.04364635, 0.047536075, -0.008994993, -0.018057829, 0.051380575, -0.013376589, -0.037065476, 0.038309284, -0.034306485, 0.035030153, -0.04504846, 0.017899526, -0.013693194, -0.020748977, -0.010182263, 0.028720655, -0.0019264888, -0.00076889945, -0.017006246, -0.06051691, 0.0028664118, -0.007163203, 7.8974736e-05, 0.05318975, 0.0014360327, -0.06372819, 0.027612535, 0.029828776, -0.060607366, -0.01575113, -0.07535215, 0.014235947, 0.054184794, -0.046676718, 0.00015989292, -0.044641398, -0.06707517, -0.049661856, 0.016429571, -0.019720009, 0.025192764, 0.03862589, 0.00905153, -0.08200087, 0.009713009, 0.029874004, 0.048304975, 0.0038190556, 0.01996877, -0.05020461, 0.011974478, 0.039620936, -0.0007816202, 0.042786993, -0.0401863, 0.008661426, -0.028471895, 0.05228516, -0.013489662, -0.0091646025, -0.012494616, 0.030755978, 0.0150839975, -0.0031660565, -0.04794314, -0.049661856, 0.012856451, 0.028268361, 0.034758776, -0.04599828, 0.021947555, 0.020805513, 0.091318116, -0.023564506, 0.023360973, 0.03057506, 0.011906634, -0.012121473, -0.007264969, -0.010476255, -0.049752317, -0.016282577, 0.0015929221, 0.009000646, 0.0004010574, 0.06544691, 0.00811302, 0.03500754, 0.007349774, 0.028110059, -0.011895327, -0.0081412885, 0.022467693, -0.040819515, 0.0012770232, -0.00077031285, -0.028494509, -0.008684041, -0.0048254095, -0.038105752, 0.0016593528, 0.014518631, -0.0026953882, 0.031185657, -0.0126416115, -0.037291624, -0.0018586448, -0.038286667, -0.009130681, -0.0054049105, 0.010464948, 0.0002952277, 0.012811221, -0.060064614, 0.0002773833, 0.0028169423, -0.0360252, -0.017492462, 0.011510877, 0.007819029, 0.02593905, 0.030326298, 0.0005476995, 0.028630197, -0.02768038, 0.027228085, 0.0030784246, -0.010594982, -0.016712256, 0.04780745, 0.027476847, -0.017616842, -0.0066091428, 0.04389511, -0.04640534, 0.045975663, -0.0010657172, 0.03444217, 0.018453587, -0.030597674, -0.03916864, -0.05151626, -0.01753769, -0.013546199, 0.0029738317, 0.0155362915, 0.10493216, 0.020839436, -0.012946909, -0.04398557, 0.0272507, -0.0032480347, -0.013014753, 0.033107907, 0.0028876131, 0.039507862, 0.043420203, -0.031027354, -0.03722378, 0.06951755, -0.0172437, -0.0065469523, -0.0064791082, -0.013444433, -0.019516477, -4.1386647e-05, -0.011109466, -0.055677366, 0.022863451, 0.031818867, -0.03457786, -0.044347405, -0.0240168, 0.019776545, -0.011431726, 0.009803467, -0.022252854, 0.0142472545, 0.011827483, 0.008927149, 0.00717451, 0.0240168, -0.011635258, 0.0280196, -0.032225933, -0.048078828, 0.018170903, -0.0021356747, -0.021992786, -0.019177256, 0.020500217, -0.04057075, 0.03193194, 0.032090243, -0.085031234, 0.022772992, 0.029896619, -0.0060098534, 0.017684687, -0.019539092, -0.031841483, 0.06092397, 0.042176396, 0.067889296, 0.028517123, -0.007519384, 0.04394034, -0.03763084, 0.047626536, 0.032994833, -0.0090063, -0.0069087874, -0.0069766315, -0.010894626, 0.0046133967, 0.016814021, -0.0480336, -0.021913635, 0.0024013973, 0.014043722, 0.0011406284, 0.037924834, -0.0204776, 0.024152488, 0.026866252, 0.014643012, 0.0021865577, 0.07743269, -0.03304006, -0.019923542, 0.016361728, -0.0074798083, 0.05594874, -0.022750378, -0.02252423, 0.016621796, 0.0015476928, 0.059838466, 0.007762492, -0.022298083, -0.02197017, 0.014643012, -0.03245208, 0.017209778, -0.0065752207, -0.020138381, 0.0046105697, 0.031117812, 0.0071688564, 0.0029257755, -0.027522076, -0.013580121, -0.020545445, 0.028177902, 0.060697827, -0.05404911, -0.069924615, -0.03837713, -0.007055783, -0.016768793, 0.017085398, 0.068522505, -0.022705147, -0.017266314, -0.023338359, -0.04663149, -0.023564506, -0.049752317, -0.006795714, -0.0013653619, -0.058526814, 0.016655719, -0.038671117, -0.01579636, -0.015185764, -0.040977817, -0.03086905, 0.049028646, 0.025418911, 0.013127827, 0.003796441, -0.07331682, 0.0383319, -0.014326406, 0.00065405923, -0.0020678306, -0.015807668, -0.014552552, 0.052827913, 0.022965217, -0.0028890267, -0.019821774, -0.07331682, -0.041430112, 0.036952402, 0.0023151787, 0.016972324, 0.020816822, 0.037789147, 0.045591213, -0.0054049105, -0.006156849, -0.07060306, 0.048350204, -0.0020565232, 0.023044368, -0.013093905, -0.04640534, 0.009130681, -0.06422572, 0.054998923, 0.0039406097, 0.0617381, -0.02312352, 0.008966724, -0.025893819, 0.0025031634, -0.008084752, 0.036138274, -0.013150441, -0.01728893, 0.007864258, -0.0018105885, 0.017187163, 0.020047922, -0.029353866, -0.05735085, -0.07485462, 0.0207829, -0.023926342, 0.022422465, 0.0025059902, 0.0014784354, -0.022592075, 0.02150657, -0.026866252, -0.01028403, 0.0043872497, 0.016723562, 0.035527676, -0.011075544, -0.018261362, -0.009458594, -0.026278269, -0.00628123, 0.015389296, -0.0034006839, -0.023790654, 0.028177902, 0.0052833566, -0.008734924, -0.040276762, 0.010787207, 0.0015985759, 0.038173594, 0.059295714, 0.01810306, -0.0006954017, -0.008785807, -0.032791298, 0.023360973, -0.010888973, -0.069698475, -0.01273207, 0.009599935, 0.024220333, 0.0027660592, -0.0079434095, 0.008327859, 0.03245208, -0.032248545, 0.01239285, 0.0023561679, -0.00042685226, 0.021766638, 0.01967478, 0.012528538, 0.043194056, 0.06128581, -0.03414818, 0.041452724, -0.026006892, 0.028042214, 0.011267769, 0.009910887, -0.041746717, -0.0076833405, 0.040638596, 0.014676933, 0.0041271807, 0.001994333, 0.009486862, -0.03670364, 0.01873627, 0.025147535, 0.008887573, -0.018261362, 0.040028, -0.008554006, 0.021597028, 0.0049950196, -0.020681133, -0.008774499, -0.01149957, -0.023609735, -0.0065865284, 0.014790007, 0.006207732, 0.03853543, 0.04346543, 0.036929786, -0.018657118, -0.051471032, 0.008576621, -0.032791298, -0.018442279, -0.040842127, -0.0059080874, -0.006671333, 0.025328452, -0.0014883293, 0.057938833, 0.036296576, 0.00988262, -0.009922195, -0.022411156, -0.020624597, 0.0070670904, -0.035188455, 0.028426664, -0.030597674, 0.020217532, 0.013467047, 0.054998923, 0.018962417, 0.068024985, 0.03674887, -0.03052983, -0.048847727, -0.004141315, -0.051154427, -0.00012385075, -0.0070444755, 0.022659918, -0.005348374, -0.011493916, 0.0119970925, -0.036545336, -0.008418318, -0.016972324, -0.009967424, -0.033220977, -0.011318652, 0.00022932708, -0.051923327, -0.037449926, -0.007903834, 0.029286023, 0.014676933, -0.015197071, -0.0045455527, -0.009922195, 0.0112281935, -0.0013484008, 0.0067391773, 0.010227493, -0.055089384, -0.029308638, 0.017673379, -0.0044042105, 0.032972217, 0.012042322, -0.015683288, 0.016497416, -0.013874112, 0.009961771, 0.024604782, -0.008384396, -0.023315744, -0.005605616, -0.027182857, 0.0044211717, -0.024989232, 0.017108012, 0.013614043, -0.009961771, -0.013546199, 2.831253e-05, 0.005817629, 0.011149041, -0.009566014, -0.0060776975, 0.010855051, -0.03751777, -0.030077536, 0.035505064, 0.05097351, -0.0511092, 0.0053936034, -0.0014430998, -0.029353866, 0.00088126614, 0.02537368, -0.031185657, -0.0011794973, 0.021257808, 0.008689694, 0.029987078, -0.048666812, 0.0072819297, -0.0005074171, 0.0028508643, 0.01239285, -0.033695888, 0.028381435, 0.017548999, 0.044008184, -0.0121893175, 0.0042515616, -0.02440125, 0.012607689, -0.0072932374, -0.036929786, -0.02946694, 0.015411911, 0.08661426, -0.04170149, 0.010442332, 0.03095951, -0.070829205, -0.020997738, 0.026210425, 0.027069783, 0.01958432, -0.0041978518, 0.036002584, -0.020364527, -0.016836636, -0.016712256, 0.013173057, 0.0003007047, 0.03659057, -0.001367482, 0.0077511845, 0.028584966, -0.01350097, -0.009939156, 0.0096168965, 0.016203424, 0.016633105, 0.024446478, -0.03328882, 0.017130626, 0.032406848, -0.039417405, -0.01605643, 0.008469201, 0.0077398773, -0.008927149, 0.0034996232, -0.009317252, 0.019595629, -0.061602414, 0.034306485, 0.013331359, -0.04812406, -0.02768038, -0.005399257, -0.01473347, -0.011929248, -0.028471895, 0.025667673, 0.014382943, -0.004636011, 0.0007476982, -0.049978465, 0.027702995, 0.013546199, -0.0036975017, 0.0024098777, 0.04312621, -0.0034204717, 0.018114366, -0.040435065, -0.018939802, -0.002572421, -0.06336636, 0.01362535, -0.045455527, 0.027454233, -0.0058006677, -0.004260042, -0.052827913, -0.007949064, -0.014529938, 0.032926988, -0.0016310845, -0.018091751, -0.004186544, 0.07526168, 0.041226577, -0.01468824, 0.009594282, 0.07616627, 0.019946156, -0.0111603495, 0.01439425, 0.00394909], [0.014577201, -0.0045359577, -0.02212056, 0.02632098, 0.008152297, 0.020045204, -0.066809066, 0.047521923, 0.0094633745, 0.059253275, 2.8956536e-05, -0.013458746, -0.0010283575, 0.008357346, -0.021548904, 0.037952915, 0.00021475895, 0.012849809, -0.029228965, -0.054133236, -0.00075456896, -0.051846616, -0.015273129, -0.0014237004, 0.021002105, -0.009655997, 0.0064186906, 0.014875456, 0.0054307217, 0.013384182, 0.017373338, 0.041929647, 0.041581683, 0.012582622, 0.03345424, -0.0144902095, 0.022915905, 0.047919594, 0.014092537, 0.0021204047, -0.035069786, 0.024456888, -0.009755416, -0.030521402, -4.4320732e-05, 0.011495235, -0.005890531, -0.018069267, 0.009991534, -0.022257261, -0.018964032, -0.013694864, 0.019386558, -0.013757, -0.044812776, -0.019001313, 0.037281845, -0.03094393, 0.06556633, 0.015906919, -0.02454388, 0.03387677, 0.032236367, -0.024966408, 0.0042221686, 0.0019774912, 0.012924372, -0.005847036, 0.045334723, 0.050255924, -0.012508058, 0.0035914842, -0.044688504, -0.037778933, -0.0015922454, -0.087488055, 0.044887338, -0.005244313, 0.02838391, -0.04274985, 0.0049367375, -0.032186657, 0.0060396586, -0.012023394, 0.024668153, -0.048938632, 0.030372275, -0.11522575, -0.04217819, 0.006617527, 0.0046788715, 0.015558956, 0.03904652, 0.05507771, -0.0075992825, 0.011389603, 0.03847486, 0.03469697, -0.0004935961, -0.0010897171, -0.014776037, -0.04608036, -0.052691672, -0.0724759, 0.05552509, 0.04232732, 0.043942865, -0.011557371, -0.035517167, -0.07481223, 0.029651493, -0.005753831, -0.006381409, 0.021499196, -0.040289246, 0.00964357, -0.0079783145, -0.03874826, -0.039469045, -0.0027215746, -0.071034335, -0.032783166, 0.054630328, 0.007294814, -0.0074190865, 0.021747742, -0.026221562, 0.043495484, 0.045359574, 0.0045856666, -0.01058183, 0.04811843, 0.027340017, 0.050802726, 0.03454784, 0.040463228, 0.07292329, -0.032609187, -0.05806026, 0.018131403, -0.049783688, -0.006291311, -0.02056715, 0.04009041, 0.005132467, 0.011290185, 0.0003419444, -0.010277362, -0.054580618, -0.004616735, -0.02947751, -0.049932815, -0.014104964, -0.007363164, -0.0003666048, -0.039319918, -0.0031875975, 0.028433619, 0.0030307032, 0.06725644, 0.015795074, -0.05055418, -0.022244833, 0.026345836, -0.0033491522, -0.046030648, 0.035218913, -0.0020163264, -0.060396586, 0.017721303, 0.017385766, 0.016466148, 0.042799555, -0.044961903, -0.01531041, 0.0034330364, 0.036983587, -0.035765715, -0.026246417, -0.05999891, -0.017895285, 0.093453154, 0.025799036, -0.023338433, 0.038897388, 0.033031713, 0.04396772, 0.018106548, 0.041631393, -0.05072816, -0.03345424, 0.00042757613, -0.010109593, -0.040463228, 0.04242674, -0.030098874, -0.0047006193, 0.018640922, 0.00068932574, -0.014042827, -0.016677411, -0.009065702, 0.01577022, -0.011377175, -0.019995496, 0.033031713, 0.057911128, 0.028209928, 0.019908505, 0.010277362, 0.0074874368, 0.041507117, 0.0006357331, -0.040388662, 0.0028458473, 0.022145415, -0.06178844, 0.028856147, -0.016217602, -0.021151232, 0.026072435, 0.0049553784, 0.008487833, -0.0070276274, -0.033578515, 0.029949747, 0.0014198169, 0.005912279, 0.0060924743, 0.04369432, -0.003920807, -0.04103488, -0.021039387, 0.027066618, -0.05045476, -0.013409036, -0.041208863, -0.011917762, 0.020094912, 0.018429657, 0.046776287, 0.024717862, -0.03280802, -0.027066618, 0.04434054, 0.037878353, 0.024581162, 0.018777622, -0.016789258, 0.056022182, -0.0047006193, -0.02381067, -0.003196918, 0.05373556, 0.026519818, 0.064323604, 0.0444151, -0.03377735, 0.017920138, 0.049386013, -0.036909025, 0.04369432, -0.024307761, 0.0675547, 0.006431118, -0.021275505, 0.015869638, -0.05597247, -0.042799555, -0.02143706, 0.028731873, -0.050206214, 0.026793217, -0.019125585, 0.022008715, -0.002264872, 0.06785295, 0.040189825, -0.016304594, 0.03643679, 0.0032963364, 0.020418022, 0.04369432, 0.08037965, -0.0031316748, 0.0049367375, 0.043296646, -0.040239535, -0.023549698, 0.006549177, -0.023437852, 0.022443669, 0.071233176, -0.02239396, 0.05840822, -0.03377735, 0.035641443, 0.011252903, -0.013247482, 0.03263404, -0.014527491, -0.032112096, -0.07267474, -0.0266938, 0.0049149897, 0.07158114, 0.0064186906, 0.04657745, -0.004135178, -0.02116366, 0.083113655, -0.0027479825, -0.043545194, -0.025600199, 0.029552074, -0.01659042, 0.013570591, 0.026395544, 0.06586459, 0.0020613752, -0.009649783, -0.06293175, -0.10289789, 0.054630328, 0.029154401, 0.012439708, 0.003734398, -0.03427444, -0.016428865, 0.041010026, -0.034448422, -0.0069157816, -0.014204382, 0.008469192, -0.029924892, -0.123378046, -0.031863548, -0.064323604, 0.014639337, -0.023288725, -0.034846097, 0.013744573, -0.024854561, -0.013085927, 0.043719176, -0.011812131, -0.03263404, 0.012321649, 0.010153089, 0.039469045, 0.0014586521, -0.0034019682, 0.042973537, 0.009544152, 0.042302463, -0.023773389, -0.023773389, -0.013545737, -0.010768239, 0.032435205, 0.03248491, -0.097926974, 0.012787672, 0.073320955, 0.011638149, 0.004371296, 0.008972497, -0.038922243, -0.013222627, -0.027166037, -0.058358513, 0.05955153, 0.013781855, -0.048963487, -0.04613007, -0.011035426, 0.04135799, 0.0040015844, -0.071282886, 0.02084055, -0.004421005, -0.03623795, 0.008003169, 0.0034268228, 0.001401176, 0.038325734, -0.029154401, 0.00437751, -0.009395025, 0.009513084, -0.011911549, 0.038648844, -0.006083154, -0.01220359, -0.011240476, 0.013533309, -0.009519298, 0.035169207, 0.041507117, -0.0074936505, -0.017845575, 0.010780666, -0.033653077, -0.014651764, 0.019734522, -0.04021468, 0.014154673, -0.03131675, 0.011439312, 0.044589084, 0.00052427594, 0.026743509, -0.0097367745, 0.016714692, 0.041109446, 0.0132102, 0.0006054416, 0.044042286, -0.030794803, 0.0051573217, 0.0054151877, -0.021511624, -0.035542022, 0.03847486, -0.0416811, 0.017559748, -0.021685606, 0.06720673, -0.030769948, -0.035889987, 0.016242456, 0.006959277, 0.0132102, -0.013955836, -0.03263404, -0.04821785, -0.028955564, -0.027464291, -0.020765986, 0.027911672, 0.021089096, -0.057662584, 0.0042283824, 0.012961654, -0.033901624, 0.002746429, -0.051995743, 0.0025910882, 0.043570045, -0.026122145, 0.022779206, -0.016515857, -0.07615438, -0.026594382, 0.027439436, -0.0029110906, 0.018355094, 0.02500369, 0.037232134, -0.0969825, 0.01751004, 0.015273129, 0.015086719, -0.017485185, 0.03464726, -0.041482262, -0.0074190865, 0.051250108, 0.019386558, 0.06999045, -0.03196297, -0.019138012, -0.025997872, 0.05100156, -0.0033926477, -0.024481744, -0.009258324, 0.022953188, 0.01915044, 0.02664409, -0.032012675, -0.019324422, 0.015645947, 0.036312517, 0.03899681, -0.06636168, 0.01316049, 0.0024419606, 0.07023899, 0.005843929, 0.0089787105, 0.018752767, 0.010774452, -0.021126378, -0.005483538, -0.026370691, -0.04212848, -0.008189579, -0.006201213, -0.031863548, 0.028011091, 0.0533876, 0.03454784, 0.018442085, 0.03198782, 0.025724472, -0.0140055455, -0.032261223, 0.04543414, -0.018640922, -0.013881273, -0.03688417, -0.03651135, 0.0123402905, -0.0042190617, -0.013185346, 0.012737963, 0.0055674217, -0.009065702, 0.021909297, -0.015621092, -0.028731873, -0.006350341, -0.03643679, -0.025438644, -0.02220755, -0.015409828, -0.0094633745, 0.031018494, -0.0283342, -0.016975665, -0.018678203, -0.010507266, 0.004271878, 0.018951604, -0.0011642809, 0.035914842, 0.0027604098, 0.02070385, 0.011308826, -0.016739547, 0.03720728, -0.014266519, -0.014415646, -0.032261223, 0.05279109, 0.036660478, -0.030049166, -0.019038595, 0.028632455, -0.032385495, 0.021374924, 0.0016171, 0.0029607997, -0.0051790695, -0.027737692, -0.045657832, -0.051448945, -0.00091728865, -0.0029343916, -0.010712316, -0.0018268103, 0.089724965, 0.030223148, -0.010103379, -0.043570045, 0.026768364, -0.006216747, -0.004638483, 0.013993118, 0.019001313, 0.04697512, 0.013247482, -0.019809086, -0.0435949, 0.08366045, -0.030421983, -0.038499717, -0.03504493, -0.032658894, -0.03419988, -0.005548781, -0.0072886003, -0.060943387, 0.02125065, -0.018939177, -0.044489667, -0.02582389, -0.023276297, 0.0040761484, -0.004010905, 0.0074004456, 0.0042936257, -0.01681411, -0.005989949, -0.011507662, 0.0030462372, 0.02811051, 0.02307746, 0.04729823, -0.030819656, -0.028582746, 0.0023270084, 0.021051815, -0.040736627, 0.010942221, 0.02345028, -0.033031713, 0.021051815, 0.023301153, -0.07739711, 0.002264872, 0.054928582, 0.0082206465, 0.024345044, -0.02582389, -0.011836985, 0.04128343, 0.0059309197, 0.03139131, 0.041581683, 0.0073693777, 0.033653077, -0.039245352, 0.044067137, 0.011712712, 0.017261494, -0.0008714631, -0.0086742425, -0.036859315, 0.0067666546, -0.0009343762, -0.03400104, -0.031689566, -0.007810546, -0.007555787, 0.020206759, 0.01261369, 0.0026625448, 0.032957148, 0.023164451, 0.016441293, 0.011818344, 0.10488625, -0.026793217, -0.0040761484, 0.020144623, -0.027464291, 0.05328818, -0.014987301, 0.0016745761, 0.034895804, -0.0021840946, 0.06760441, 0.0063876226, -0.014664192, -0.020765986, 0.022766778, -0.034522988, 0.010358139, 0.007605496, -0.022953188, 0.001522342, 0.010202798, 0.027389728, 0.009115411, -0.033081423, -0.018292958, -0.011619507, 0.0416811, 0.07595554, -0.0871898, -0.06844946, -0.02686778, -0.01841723, -0.02550078, -0.0104637705, 0.06313059, -0.029452655, -0.019684814, -0.025625054, -0.07829187, -0.011576012, -0.006723159, 0.012023394, -0.0044582873, -0.03748068, 0.030521402, -0.008817156, -0.00097631826, -0.0062975246, -0.06462186, -0.04608036, 0.025973016, 0.04772076, 0.03382706, 0.0071146186, -0.046403468, 0.022816489, 0.0045390646, -0.0046975124, -0.037853498, -0.02353727, -0.017112365, 0.031813838, 0.0414077, -0.014813319, -0.0066051, -0.05443149, -0.042302463, 0.029179256, -0.013868846, 0.012911945, 0.034299295, 0.0039736233, 0.027439436, -0.027861964, 0.012489418, -0.058109965, 0.021996288, -0.03422473, 0.016801683, -0.0012691361, -0.018578785, -0.00021145795, -0.08167209, 0.05060389, 0.011911549, 0.057712294, -0.017994704, 0.0007304911, -0.03720728, -0.0068722866, -0.008139869, -0.004038866, 0.0011308825, -0.010246294, -0.0106750345, 0.0035728433, 0.005203924, 0.036759898, -0.03318084, -0.031565294, -0.033429384, 0.028160218, -0.01952326, 0.0053654783, -0.008003169, 0.008866865, -0.02582389, -0.0032745886, -0.042600717, 0.014689046, -0.016714692, 0.01988365, 0.033205695, -0.008860651, -0.050156508, 0.0011572905, -0.033081423, -0.016689839, 0.003423716, -0.0013048645, -0.014738755, 0.035392895, -0.02903013, 0.017497612, -0.042724993, 0.0099791065, 0.013868846, 0.021946577, 0.056867238, 0.021300359, -0.01517371, -0.0023316685, -0.04543414, 0.032609187, -0.0006567041, -0.06074455, -0.03989157, 0.0022695323, 0.016491001, -0.0027355552, -0.0017895284, 0.03971759, 0.026395544, 0.0016559352, 0.0111907665, 0.023412997, 0.0009902989, 0.023698825, 0.022543088, 0.0036256593, 0.037778933, 0.055674218, -0.04958485, 0.03208724, -0.017261494, 0.045632977, 0.014154673, -0.005169749, -0.045533556, 0.0021763276, 0.058557346, -0.010681248, 0.0024404074, -0.0029297315, 0.0052163512, -0.045135885, 0.047969304, 0.0036691546, 0.005287808, -0.028011091, 0.01915044, -0.0058066472, 0.0048155715, 0.0065056817, -0.015049437, -0.008052878, -0.02463087, -0.02171046, -0.022356678, -0.0035386682, -0.010264934, 0.0055891695, 0.06526808, -0.0036536206, 0.0035479888, -0.028806437, 0.0012442815, -0.036685333, -0.039295062, -0.041482262, -0.002738662, -0.0051821764, 0.016478574, 0.004647803, 0.060346875, 0.023649115, 0.053636145, 0.0104637705, -0.005259847, -0.0076241367, 0.020318605, -0.029427802, 0.016640129, -0.025848744, 0.0043526553, -0.007294814, 0.04963456, 0.021747742, 0.054829165, 0.027414583, -0.016938385, -0.026743509, -0.0059433472, -0.036213096, 0.0008000062, -0.0018081694, 0.01860364, -0.005244313, 0.007922391, 0.007443941, -0.054530907, 0.007996955, 0.013682436, -0.017261494, -0.064273894, -0.009941825, -0.009562792, -0.02811051, -0.00781676, 0.024357472, 0.03643679, 0.017572176, -0.009513084, 0.0047006193, -0.003647407, -0.004299839, 0.024829708, 0.029726056, -0.001316515, -0.026793217, -0.021996288, 0.00478761, -0.027439436, 0.015645947, 0.012837381, -0.038102042, -0.008388415, -0.01394341, -0.004548385, 0.017746158, -0.034672115, -0.0052287783, -0.0022928333, -0.018653348, 0.0016139931, -0.0384003, 0.044763066, 0.006623741, -0.0077546234, -0.021076668, -0.006934423, -0.010016388, -0.01869063, -0.01462691, -0.012644758, -0.015795074, -0.0027526428, -0.005996163, 0.0051821764, 0.025997872, -0.019088304, -0.003336725, -0.016503429, -0.014179528, 0.008407055, 0.023176879, -0.06327972, 0.02304018, 0.03536804, 0.00930182, 0.021722887, -0.010059884, 0.007325882, 8.490357e-05, 0.011041639, 0.008469192, -0.02198386, -0.00667345, 0.019734522, 0.018429657, -0.00013126315, 0.012812527, -0.013843991, 0.024258053, 0.020977251, -0.03089422, -0.04446481, 0.056022182, 0.10309672, -0.028632455, 0.004256344, 0.039792154, -0.058358513, -0.0056916946, 0.03899681, 0.036262807, 0.013446318, 0.00256468, 0.046428323, -0.011109989, 0.0053033424, -0.008984924, 0.011321253, -0.0028505076, 0.044067137, -0.018653348, 0.0075930688, 0.022195123, -0.0136203, -0.021424633, 0.0044831415, 0.01640401, 0.009556579, 0.012085531, -0.033528805, 0.004405471, 0.03012373, -0.031813838, -0.011700285, 0.010420275, -0.0012551554, -0.009680852, -0.0069157816, -0.015683228, -0.0060924743, -0.05323847, -0.0012085531, -0.002575554, -0.06064513, -0.013284763, -0.01563352, -0.024618443, -0.009823766, -0.021648323, 0.043023247, 0.008742592, -0.006291311, -0.010867657, -0.04391801, 0.020753559, 0.029750912, -0.024146207, 0.008388415, 0.01119698, -0.0042066346, 0.017037801, -0.033926476, 0.011600867, -0.018479368, -0.048714943, 0.012358931, -0.05552509, 0.03720728, 0.0047006193, 0.0060520857, -0.045135885, 0.0129368, -0.021263078, 0.008593465, -0.014676618, 0.0048497464, 0.038226318, 0.046055503, 0.066013716, -0.014390792, 0.013235054, 0.06556633, 0.008034237, -0.013980691, 0.026296126, 0.0055922763], [0.0058636637, 0.019797508, -0.013539228, 0.008086854, 0.023654742, -0.0035209772, -0.030969037, 0.03145814, -0.003357017, 0.030013066, 0.011616168, -0.0072420416, -0.054601546, 0.008364753, 0.011982994, 0.026055787, -0.040773306, 0.039217073, -0.011938531, -0.054334763, -0.008598188, -0.032214023, -0.044397105, 0.009476348, -0.0021009145, -0.0012262283, 0.01520662, 0.0118051395, -0.0023704765, 0.00057073456, 0.023143409, 0.019764159, 0.041929364, -0.0382611, -0.0013262718, -0.011905183, 0.0002495878, 0.028034426, -0.06002613, -0.025366599, -0.05264514, 0.010849168, -0.020008711, -0.020353304, 0.012183081, -0.013005662, -0.028390137, 0.009220681, 0.02385483, -0.02750086, 0.018986043, -0.019063855, 0.029168254, -0.028101122, 0.012850039, -0.0014478525, 0.061271116, -0.07838968, 0.008053506, 0.0074143386, -0.025122048, -0.0077867233, 0.024744105, -0.006658454, 0.027767643, 0.00028936207, 0.009431884, 0.024966424, 0.06647338, 0.044952903, -0.0032458575, 0.031969473, -0.028345672, -0.027745413, 0.00060269295, -0.08363641, 0.07950128, 0.02176503, -0.022298597, -0.014973185, -0.016507186, -0.046153426, -0.026744977, -0.038928058, 0.016018085, -0.029146021, 0.021564944, -0.102266744, -0.03812771, 0.009493021, 0.025411062, -0.00334868, 0.03203617, 0.04221838, -0.01959742, 0.028612455, 0.023410192, 0.012260893, -0.04677592, -0.02292109, -0.026011324, -0.038639043, -0.05277853, -0.031635996, 0.04948821, 0.03230295, 0.06998602, -0.036237996, -0.020086521, 0.038661275, 0.039128143, -0.024232771, 0.0073420852, 0.035037477, -0.036704868, 0.02890147, 0.010949211, -0.05335656, -0.029368341, -0.018674796, -0.096130736, -0.0021120305, 0.047665194, 0.043418903, -0.040417597, 0.026122482, -0.015595678, 0.013561459, 0.0130723575, 0.016362678, 0.012672183, 0.028278977, 0.024121612, 0.029079325, 0.089905806, 0.040773306, 0.057135984, -0.023121176, -0.0837698, -0.017307535, -0.04326328, -0.0016534976, -0.04152919, 0.022298597, -0.00050438626, -0.007853419, -0.01989755, -0.009754246, -0.020442232, -0.0028762522, 0.0005988718, -0.053489953, 0.019730812, -0.0031652667, 0.015117692, -0.039528318, -0.0043463367, 0.015395591, 0.012294241, 0.031413674, 0.038416725, -0.06469483, 0.02129816, -0.008437006, 0.0037544123, -0.061493438, 0.0062138163, -0.017385347, -0.042840872, 0.030791182, -0.0019508493, -0.0034292706, 0.026656048, -0.016640577, -0.014884258, -0.0015909703, 0.02876808, 0.019819738, -0.032814287, -0.0584699, -0.041129015, 0.016518302, 0.053534415, -0.059492566, 0.04003965, 0.025700077, -0.00021815053, -0.01989755, 0.017807752, -0.071942426, -0.04246293, -0.0029485058, -0.002566395, -0.03461507, -0.0047687427, -0.050688732, -0.07118654, -0.025344366, 0.014917606, -0.021198116, -0.03145814, -0.048732325, -0.038550116, 0.019119434, -0.02094245, 0.044708353, 0.023432422, 0.0037766441, 0.055979926, -0.031169124, 0.034081504, 0.039950725, 0.0036238, -0.037772, -0.028412368, 0.012538792, -0.055757605, 0.044263713, -0.0118051395, -0.042640787, 0.030946806, -0.019508492, 0.033859186, -0.005146685, -0.013761546, 0.02923495, 0.025989091, -0.007808955, -0.009020594, 0.03323669, -0.0009893195, -0.017074099, -0.030635558, 0.00850926, -0.054823868, -0.02538883, -0.010560153, -0.01638491, 0.048465542, 0.012416516, 0.044308178, 0.042440698, -0.027234077, -0.013361372, 0.027278543, 0.05286746, 0.034815155, 0.013050126, -0.04306319, -0.012805575, 0.019219479, -0.016318215, 0.013272445, 0.034637302, 0.023454655, 0.05593546, -0.010226674, -0.051400155, 0.021564944, 0.05215604, 0.006675128, 0.04326328, -0.04748734, 0.048954643, -0.025122048, -0.027789876, 0.00848147, -0.040995624, -0.045353077, -0.04957714, 0.057936333, -0.01940845, 0.0057525043, 0.014673054, -0.004927145, -0.037105042, 0.055268504, 0.02305448, -0.0568692, 0.048954643, 0.019197246, 0.0120719215, 0.010699102, 0.018919347, 0.056646883, 0.013972749, -0.009070615, -0.0470427, -0.015884694, 0.01767436, -0.031369213, -0.01671839, 0.050688732, 0.026278106, 0.05406798, 0.004735395, 0.0049743876, 0.00065097783, -0.0315693, 0.00941521, 0.0050077355, 0.0096152965, -0.027145151, -0.06429466, 0.0016437712, 0.046998236, 0.009670877, 0.07252046, 0.019063855, -0.043707915, 0.082213566, -0.016418258, -0.050733197, -0.01718526, 0.033836953, 0.0248108, 0.047309484, 0.041751508, 0.040017422, -0.022876626, -0.025655612, -0.018841535, -0.098887496, 0.013728199, 0.042196147, -0.0006013034, 0.00044046954, -0.040306434, -0.07438794, 0.021242581, -0.034637302, 0.02607802, -0.020653436, -0.002901263, -0.0186081, -0.09092847, -0.011705096, -0.018107884, 0.015273316, -0.04070661, -0.039639477, 0.045086294, -0.023721438, -0.058781143, 0.04048429, 0.01668504, -0.013294676, 0.012672183, 0.035860054, -0.0011470271, 0.0011546693, 0.03975064, 0.038683508, 0.031747155, 0.0012672184, -0.04304096, -0.034592837, -0.01666281, -0.015039881, -0.007119766, 0.056024387, -0.10119961, 0.018430246, 0.048243225, 0.006169352, -0.031658225, -0.04070661, -0.044908438, -0.04877679, 0.005560754, -0.06642892, 0.06407234, 0.022298597, -0.042285074, -0.061093263, -0.0027289658, 0.024588482, -0.02316564, -0.027767643, 0.0067807296, -0.020953566, -0.03683826, -0.012583256, 0.011127066, 0.0019536281, 0.03139144, -0.020953566, 0.0124054, 0.012961198, -0.030680023, 0.0186081, 0.024766337, -0.04819876, -0.02865692, 0.03628246, -0.008909434, -0.040639915, -0.0080146, -0.008570397, 0.011127066, 0.016307099, -0.0098098265, -0.013772663, -0.00025549316, 0.009643087, -0.023032248, 0.01894158, -0.032903213, -0.0113049215, 0.048065368, -0.020842407, 0.059003465, -0.00061415625, 0.025411062, 0.028567992, 0.06807408, -0.0066251066, 0.030079762, -0.036171302, -0.0027414712, 0.013239097, -0.018741492, -0.030746719, 0.044063628, -0.03634916, 0.007908999, -0.061271116, 0.049666066, 0.01674062, -0.04246293, 0.019808624, -0.008414774, 0.010254464, 0.008798274, -0.004265746, -0.06722926, -0.026189178, -0.016107012, 0.0038211078, 0.040395364, 0.031791616, -0.0004067743, 0.011438313, 0.009932102, -0.016295983, -0.017963376, -0.10706883, 0.042440698, 0.052511748, -0.020553391, 0.012083038, -0.0064972728, -0.068296395, -0.022331944, 0.044908438, -0.020553391, 0.009037267, 0.011927415, 0.014250648, -0.089994736, 0.0008802443, -0.011894067, 0.076788984, -0.012449864, 0.022732118, -0.019719696, 0.0021620523, 0.04395247, 0.009081732, 0.042396232, 0.007892325, -0.0032875424, -0.013594807, 0.0491325, -0.027901035, 0.0052272757, -0.02352135, 0.008792717, 0.03499301, -0.044908438, -0.060782015, -0.05544636, -0.0072198096, 0.039328232, 0.01621817, -0.042040523, 0.029279413, 0.008609303, 0.052600678, 0.037127275, 0.04537531, -0.0039711734, 0.029079325, -0.044374872, 0.017874448, -0.01847471, -0.05500172, -0.054734938, -0.017996723, -0.008965014, 0.0382611, 0.029790746, 0.024521787, 0.03228072, 0.032814287, -0.002692839, -0.014161721, 0.002591406, -0.0019063854, -0.048109833, -0.0016423817, 0.009581949, -0.03030208, 0.03134698, -0.03541542, -0.014128373, 0.0016020864, 0.005621892, 0.008248035, 0.0032180676, -0.02157606, -0.05326763, -0.02129816, -0.054245837, 0.013516995, -0.012005227, 0.015840229, -0.0011011738, -0.017774405, -0.032814287, -0.014950953, 0.00837031, 0.023921525, 0.007920114, 0.014295112, 0.005341214, 0.023788134, 0.03886136, -0.042529624, 0.00040746905, -0.016295983, 0.040284205, -0.027367469, -0.007870093, -0.04375238, 0.029590659, 0.013005662, -0.0028484622, -0.0046242354, 0.019175014, -0.08532603, 0.013183517, -0.002563616, 0.008714905, -0.015906924, -0.029812979, -0.0010872788, -0.033303387, 0.018441362, 0.0016159812, 0.024499554, 0.0305244, 0.08270267, 0.046953775, -0.03299214, -0.034437213, 0.006508389, 0.014761982, -0.024210539, 0.034326054, 0.03768307, 0.030924574, 0.04526415, -0.013316908, -0.037482984, 0.07901217, 0.017029636, -0.010543479, -0.025633382, -0.0056302287, 0.00010759893, 0.0045325286, 0.008681557, -0.049043573, 0.014395156, -0.004699268, 0.008253593, -0.05193372, -0.038038783, 0.03437052, -0.017774405, -0.0072920634, -0.011293805, 0.00077672704, 0.033414546, 0.022698771, 0.028479064, 0.008987246, 0.019175014, 0.021542711, -0.030546632, 0.013983865, -0.020897986, 0.017274186, -0.028456833, -0.033503473, 0.04739841, -0.0049799457, -0.003351459, 0.050822124, -0.034904085, 0.012583256, 0.05086659, -0.019452913, 0.02135374, -0.01462859, -0.024299467, 0.04797644, 0.025789004, 0.04575325, 0.0289904, 0.02316564, 0.04584218, -0.047887515, 0.003562662, 0.022698771, 0.011338269, 0.0049410397, -0.026344802, -0.043107655, -0.020075407, -0.013061241, -0.036993884, -0.03112466, -0.0065472946, 0.02994637, 0.019452913, 0.061849147, -0.0072253677, 0.016151475, 0.007119766, 0.023965988, 0.0047854166, 0.062338248, -0.038083244, -0.008025716, 0.054245837, 0.007908999, 0.02876808, -0.023832597, -0.009148427, -0.010810262, -0.0131501695, 0.05086659, -0.016807316, -0.022554263, -0.047220558, 0.02538883, -0.03428159, 0.019719696, 0.01158282, -0.013761546, -0.00941521, 0.0008253593, 0.024855265, 0.020653436, 0.00076977955, 0.0061915843, -0.002481636, 0.061404508, 0.07852307, -0.05838097, -0.037105042, -0.040773306, -0.058292042, -0.0052189385, 0.012460981, 0.081635535, -0.027345238, -0.0073087374, -0.06416126, -0.062871814, -0.017274186, -0.024766337, -0.012338704, -0.00096847716, -0.04575325, -0.013728199, -0.0111882035, 0.010938095, 0.02632257, -0.015762417, -0.01169398, 0.059225783, -0.0034209336, 0.0106157325, 0.015473403, -0.055890996, 0.0022440325, 0.018107884, -0.033659097, 0.014695286, -0.0040795538, -0.023588046, 0.00028918838, 0.04526415, -0.00039843735, -0.03203617, -0.096842155, -0.02280993, 0.035148636, -0.007997926, 0.039239306, 0.008492586, -0.017696593, 0.007970137, -0.04610896, -0.0072865053, -0.06567303, 0.0125721395, -0.032658663, -0.030924574, -0.007314295, -0.0067974036, 0.004932703, -0.054201372, 0.020709015, -0.00669736, 0.038061015, -0.013294676, -0.0004856281, -0.024899729, 0.026856136, -0.011671748, 0.0011289637, -0.020553391, 0.00417126, 0.010043261, -0.002492752, 0.013005662, -0.0087704845, -0.017085215, -0.049354818, -0.022698771, 0.02157606, -0.0082369195, 0.027945498, -0.008787159, -0.017040752, -0.017618781, 0.007742259, -0.010921421, 0.0022065162, -0.017051868, 0.028345672, 0.047531802, 0.02129816, -0.021976234, -0.006280512, -0.02807889, -0.016896244, -0.009159543, 0.03276982, -0.008420332, 0.058292042, -0.032725357, 0.011054813, -0.03895029, 0.032214023, 0.042374004, -0.012727763, 0.057447232, 0.004018416, -0.00848147, 0.011894067, -0.03975064, 0.023032248, -0.0112660155, -0.049399283, 0.0054190257, -0.007392107, 0.026100252, 0.018096767, -0.013083474, 0.040528756, 0.014239532, 0.005110558, -0.0082369195, 0.0039489414, -0.0014645264, 0.048510008, 0.0077255853, 0.008053506, 0.02058674, 0.051755864, -0.014706402, 0.018063419, -0.011549472, 0.035748895, 0.026100252, 0.014550779, -0.018841535, -4.9413873e-05, 0.020731248, -0.0034042597, 0.01715191, -0.020686783, 0.02503312, -0.04575325, 0.025900165, 0.015039881, 0.022732118, -0.0019466808, 0.010988117, -0.05091105, 0.029279413, 0.010549037, 0.011949646, 0.010749124, 0.00392393, -0.016418258, -0.027434165, 0.023610279, -0.009737573, 0.016807316, 0.055713143, 0.024432858, -0.03308107, -0.030969037, -0.012038574, -0.029079325, -0.018552521, -0.031547066, 0.03661594, 0.0106546385, 0.01597362, -0.031413674, 0.032214023, 0.035815593, 0.01597362, -0.021342624, -0.02157606, -0.0008663494, -0.015340012, -0.0584699, 0.025010888, 0.0020967461, 0.012561024, 0.01103258, 0.011260457, 0.04208499, 0.023499118, 0.041506957, -0.0032541945, -0.03530426, -0.008659326, -0.02667828, 0.006413903, -0.021075841, 0.0050271885, 0.022109626, 0.024610713, -0.022298597, -0.02006429, 0.0059803813, -0.014517431, -0.018541405, -0.06576196, 0.022031814, 0.0038600138, -0.040306434, -0.035148636, 0.015384475, 0.022109626, -0.00013625724, -0.00993766, -0.0038294448, -0.026744977, -0.011316038, -0.011949646, 0.019475145, -0.005180033, -0.042885337, -0.041151248, -0.00088927604, -0.035370953, 0.035126403, -0.0054996163, -0.03814994, 0.0075032664, -0.008020158, 0.0007030839, -0.002050893, -0.03788316, 0.006236048, 0.04537531, -0.04444157, -0.03323669, -0.006224932, 0.017718825, 0.010932537, 0.013016778, -0.010754682, -0.044352643, 0.03872797, -0.010393414, -0.0029929697, 0.0001347809, -0.0023121177, 0.010159979, -0.023476887, 0.025433294, 0.043374438, -0.03312553, 0.024499554, -0.016562765, -0.012772227, 0.0028484622, 0.0068474254, -0.028145585, 0.0007607478, 0.01625152, -0.012594372, 0.04677592, -0.0087315785, -0.0055023953, 0.009204007, -0.001789668, 0.028256746, -0.05544636, 0.01023779, 0.013939401, 0.031613763, 0.015684607, -0.030680023, -0.037949853, 0.005546859, 0.010254464, -0.060915407, -0.021275928, 0.06371663, 0.08283606, -0.023543583, -0.008675999, 0.021342624, -0.02632257, -0.018230159, 0.027856572, -0.003112466, 0.008136876, -0.027411934, 0.0050466415, -0.0063249758, 0.0065806424, 0.006236048, -0.016184824, -0.004185155, 0.048910182, 0.02262096, 0.04068438, 0.018430246, -0.0105379205, -0.011249342, 0.008942782, 0.008242477, -0.0019355648, 0.014283996, -0.03334785, 0.008909434, 0.017763289, -0.016173707, -0.007364317, -0.009142869, 0.029457267, -0.016885128, 0.028145585, -0.009804268, 0.008681557, -0.03194724, 0.015351127, -0.009020594, -0.0795902, -0.026233643, 0.0032819842, -0.016284866, -0.011316038, -0.0066251066, 0.021064725, 0.0080423895, -0.0012602708, 0.006919679, -0.04108455, 0.023343496, 0.0465536, -0.014973185, 0.013227981, 0.019052738, -0.012894502, 0.003334785, -0.041840438, -0.027989963, 3.336956e-05, -0.027323006, 0.03977287, -0.0045464234, 0.06616214, 0.023032248, -0.021398203, -0.038061015, -0.0016437712, -0.032836515, 0.00859263, -0.02338796, -0.031169124, -0.015662374, 0.049888384, 0.026344802, 0.006702918, 0.006964143, 0.06963031, 0.009982123, -0.007175346, 0.0141839525, 0.01328356], [0.03464451, 0.026512444, -0.023409419, -0.0112053715, -0.007805121, 0.029532248, -0.04465504, 0.019676276, 0.007614897, 0.03326539, 0.017191477, -0.011050815, -0.046153054, 0.0028236348, -0.023766087, 0.021186177, -0.014742346, 0.018737046, -0.022268075, -0.029342024, 0.007442507, -0.044464815, -0.022208631, -0.013577225, 0.008625461, -0.009677636, -0.009202077, 0.028462239, -0.014266786, 0.013054109, 0.006937225, 0.021079177, 0.039994556, 0.0038312266, 0.033669617, 0.0017149866, 0.011478818, 0.039780553, -0.0331465, 0.0022187824, -0.041682795, 0.036261413, -0.0027731066, -0.007501952, 0.025561325, -0.031268038, -0.014730456, -0.037426535, 0.01116376, 0.00652111, 0.014944458, -0.020056723, 0.013268111, -0.016775362, -0.017096365, 0.0037093644, 0.088834524, -0.08246202, 0.0491253, 0.01157393, -0.03397873, 0.026274664, 0.039590333, -0.03512007, 0.027083116, 0.011145927, -0.009392301, -0.0060812174, 0.06667345, 0.054118674, -0.008256903, 0.007983455, -0.017833482, -0.005522435, 0.021816295, -0.08888208, 0.058018263, 0.023777977, 0.00128624, 0.0010484601, -0.0094933575, -0.014861235, -0.009636025, -0.03535785, 0.016478138, -0.043418586, 0.015313017, -0.124406375, -0.06244097, 0.008869185, -0.024122758, -0.00514496, 0.014956348, 0.01644247, -0.030293142, 0.02491932, -0.004033339, 0.042729024, -0.0052162935, -0.010486088, -0.02232752, -0.061442293, -0.036142524, -0.07894288, 0.04983864, 0.032028936, 0.033289168, -0.004633733, -0.014932569, 0.020294502, -0.007365228, -0.012412104, -0.020829508, 0.02056795, -0.029294467, 0.029199356, 0.0015738049, -0.05159821, -0.040137224, 0.0025041183, -0.08174869, 0.0010714951, 0.050599534, 0.008138012, -0.0013285944, 0.02667889, -0.011365873, 0.03628519, 0.015051459, -0.0076802867, -0.014231119, 0.04203946, 0.01833282, 0.03317028, 0.038211208, 0.05297733, 0.073997065, -0.024015756, -0.079751335, -0.017999928, -0.04582016, 0.0017283617, -0.04054145, 0.03240938, 0.018879713, 0.04277658, -0.039043438, -0.018986715, -0.023575865, 0.01551513, -0.019616831, -0.057304922, 0.00021010071, 0.014314342, 0.021578513, -0.025799105, 0.007626786, 0.025061987, 0.003667753, 0.04639083, 0.040493894, -0.06334453, -0.0063665533, 0.04151635, 0.018237708, -0.055450242, 0.0253711, -0.016287914, -0.019474164, 0.024824208, -0.0012178783, 0.023052748, 0.048007734, -0.016418694, -0.014290564, -0.0038817548, 0.021126732, -0.0015440824, -0.023659088, -0.05392845, -0.03457318, 0.045154378, 0.041421235, -0.016846696, 0.06838546, 0.018225819, 0.018844048, 0.012721217, 0.03443051, -0.047318175, -0.01316111, 0.015550797, -0.008667072, 0.0028726768, 0.019545497, -0.0071512265, -0.029389579, 0.007389006, -0.006818335, -0.03806854, -0.019414717, -0.029365802, 0.012043545, -0.021352623, 0.013708004, 0.05064709, 0.03317028, 0.02551377, 0.04018478, 0.02867624, 0.016121468, 0.047651067, 0.0031565265, -0.04819796, -0.021661736, -0.013422668, -0.046034165, 0.022006517, -0.024824208, -0.024372427, 0.024729095, 0.005350045, 0.03160093, -0.009112909, -0.011009203, 0.0074603404, 0.012661773, -0.0034329453, 0.011805765, 0.061727628, -0.013101665, -0.036594305, -0.04008967, 0.007555452, -0.08293758, -0.03749787, -0.009873805, -0.014885014, 0.020532284, -0.02584666, 0.03621386, 0.014682901, -0.026607556, -0.040065892, 0.017346034, 0.04524949, 0.043585032, 0.01122915, -0.035429187, 0.029579803, 0.027059337, -0.02210163, -0.020698728, 0.065484546, 0.025822883, 0.09297189, 0.052739553, -0.03231427, 0.01681103, 0.05687692, -0.020663062, 0.018760825, -0.011294539, 0.031339373, 0.0032813607, -0.0021147537, -0.0077159535, -0.011294539, -0.023076527, 0.00570077, 0.04408437, -0.033051386, 0.06443832, -0.009499302, 0.019664386, 0.0014734915, 0.05602091, 0.033217832, -0.031814933, 0.045059267, 0.027083116, 0.023135971, 0.039947, 0.058921825, -0.01398145, 0.016561361, 0.036950976, -0.053310223, -0.002658675, 0.0100580845, -0.02972247, 0.037378978, 0.058446266, -0.0033021665, 0.06805257, -0.010723867, 0.012388326, 0.027202006, -0.040969454, -0.0032546106, 0.012507216, -0.01104487, -0.033669617, -0.04586772, 0.010236419, 0.07632731, 0.06296408, 0.04781751, -0.009719248, -0.05021909, 0.07295083, 0.019545497, -0.024871765, -0.003935255, 0.0013271084, -0.017548148, 0.042110797, 0.035714522, 0.009261522, -0.02843846, -0.034715846, -0.028961577, -0.09520702, 0.034715846, 0.044512372, -0.0039620055, -0.015729131, -0.0015069293, -0.024348648, 0.03502496, -0.00998675, 0.019414717, -0.0077040647, 0.026108218, -0.029793805, -0.090689205, -0.0064973324, -0.05326267, 0.014956348, -0.0277489, -0.03269472, 0.036166303, -0.04068412, -0.040042114, 0.039233662, 0.0034923903, -0.00014183192, 0.01245966, 0.016501917, 0.021733072, 0.0012973859, 0.018261487, 0.06581744, 0.03416895, 0.0023138945, -0.030530922, 0.008096402, -0.02187574, -0.0005398344, 0.029365802, 0.04018478, -0.096776366, 0.0049606804, 0.058208488, 0.061061844, -0.0066221664, -0.008506571, -0.030958926, -0.036094967, -0.0019884333, -0.0383301, 0.08360337, 0.0077397316, -0.03676075, -0.056639142, -0.015087127, 0.052121326, -0.023908755, -0.0491253, 0.019533608, 0.007418729, -0.03809232, -0.015420018, 0.00317436, 0.016038245, 0.028628685, -0.019307718, 0.017548148, -0.00022217547, -0.0212694, -0.0027240645, 0.029460913, -0.016834809, -0.020734396, 0.01987839, 0.0055283797, -0.009148576, 0.0041284515, 0.011995989, 0.023659088, -0.00025412714, 0.0305547, -0.039875668, -0.028890243, 0.022268075, -0.029318245, 0.01834471, -0.0063784425, -0.031672265, 0.03535785, -0.049172856, 0.037925873, 0.018035596, 0.018392265, 0.056258693, 0.030269364, -0.0037925872, 0.04234858, -0.034739625, -0.0017491675, 0.0128995525, -0.028581128, -0.026821557, 0.046699945, -0.035904747, -0.0035934467, -0.020758174, 0.03500118, -0.0024862846, 0.012007878, 0.016965587, 0.012530994, -0.0105574215, 0.0015663742, -0.00898213, -0.020663062, -0.008488738, 0.0026423277, -0.0029365802, 0.062916525, -0.00085675024, -0.053024888, 0.021423956, 0.0042324797, -0.03362206, 0.004785318, -0.10909336, 0.007531674, 0.05017153, -0.018523045, 0.028771352, -0.011728487, -0.07204727, -0.042966805, -0.016537583, -0.009968917, -0.00090133393, 0.0149087915, -0.0026022024, -0.097870156, -0.006259552, -0.0033735004, 0.046081718, -0.021828182, 0.025632659, -0.049648415, 0.0030941092, 0.032718495, 0.013660448, 0.078086875, -0.005136043, -0.0020047806, -0.027392229, 0.04161146, -0.042729024, 0.019248271, 0.008613572, 0.008791907, 0.015812354, 0.012447771, -0.059635166, -0.019379051, -0.01658514, 0.009707359, 0.012863886, -0.0371412, 0.024966875, 0.007305783, 0.06905124, 0.009725193, 0.010599033, 0.011062704, -0.012061379, -0.04149257, -0.008167735, -0.048364405, -0.050551977, -0.035762075, -0.0053470726, -0.01797615, 0.015538908, 0.03443051, 0.009927305, 0.033550724, 0.022541523, -0.0053589614, -0.005305461, -0.015657797, 0.01257855, -0.04408437, -0.0048061237, 0.0030212891, -0.031910043, 0.016668363, -0.0048863743, -0.039780553, -0.015336795, 0.010503922, 0.0056234915, 0.04123101, -0.030816259, -0.048697297, -2.900263e-05, -0.02608444, -0.0017892928, -0.027725121, 0.020484727, -0.01339889, 0.026821557, -0.014076563, -0.014694789, -0.005219266, -0.0033051388, -0.012269436, -0.0077278423, -0.00024130932, 0.052359104, 0.0064794985, -0.008459015, 0.039804332, -0.026940448, 0.027725121, -0.014801791, -0.0010692659, -0.014813679, 0.038972106, 0.0240752, -0.010765479, -0.011407484, 0.014718568, -0.058493823, 0.03452562, 0.017369812, 0.02644111, -0.0020478782, -0.034596957, -0.027344674, -0.015764799, -0.0022514772, 0.019367162, -0.006747001, 0.037283868, 0.07718331, 0.017476814, -0.03716498, -0.047318175, 0.014564011, 0.043418586, -0.017203366, 0.020235058, 0.0019795166, 0.05335778, 0.030174254, 0.0049487916, -0.06928902, 0.06286897, 0.022886302, -0.033574503, -0.030364476, -0.012019767, -0.018380376, -0.014480788, -0.024396203, -0.057875596, 0.019807056, 0.0031416651, -0.021935184, -0.036594305, -0.04539216, 0.010973536, 0.0046218443, 0.0041403403, -0.015645908, -0.018285263, 0.0025546465, -0.008809741, 0.02117429, 0.010616867, 0.049505748, 0.0291518, -0.033931173, -0.030031584, 0.004725873, 0.0029068578, -0.04334725, -0.026631335, 0.00023759401, -0.018392265, 0.042015687, 0.040921897, -0.051835988, 0.009790582, 0.062536076, 0.0010915578, 0.033883616, -0.028058013, -0.023837421, 0.032290492, 0.015907466, 0.055402685, 0.023920644, 0.03160093, 0.041088343, -0.072189935, 0.058969382, 0.03183871, 0.0047734287, -0.011764154, -0.014183563, -0.035215184, -0.0031357207, 0.009303133, -0.05911205, -0.020389615, -0.0069015576, 0.005724548, 0.005085515, 0.049695972, 0.026892891, 0.015420018, 0.018927269, 0.018439822, -0.010087807, 0.09777504, -0.027915346, 0.002056795, 0.027392229, -0.0011688361, 0.034882292, -0.007561397, -0.010242363, 0.0039887554, 0.0031684155, 0.06424809, 0.018701378, -0.01621658, -0.03852032, 0.029223133, -0.019616831, 0.020936508, 0.021305067, -0.0032040824, -0.0009771262, -0.00067692925, 0.04104079, -0.011276705, -0.026631335, 0.0020270725, -0.018832158, 0.029460913, 0.049695972, -0.06738678, -0.048126627, -0.051645767, -0.011009203, -0.011276705, 0.0016020412, 0.054879572, -0.03019803, -0.013458335, -0.041088343, -0.060633842, -0.020639284, -0.033455614, -9.436884e-05, 0.0013516294, -0.044155702, 0.013803115, -0.015895577, -0.008958353, 0.0012542882, -0.051550653, 0.0055164904, 0.022482077, 0.022577189, 0.005124154, 0.0128163295, -0.06981214, 0.017357923, -0.037093643, -0.010801146, -0.019557387, 0.0117700985, -0.009540914, 0.046628613, 0.034763403, 0.0076683974, -0.008090457, -0.06767212, -0.023112193, 0.024467539, -0.029365802, 0.035452962, 0.061299626, -0.013838783, -0.0064141094, -0.031125372, 0.009683581, -0.057304922, 0.026060663, -0.0277489, -0.001203017, -0.0022886302, -0.021328846, 0.015479463, -0.054023564, 0.048221737, 0.015479463, 0.06852813, -0.0145759, -0.00064869295, -0.04184924, 0.020437172, -0.009499302, 0.017809704, -0.027915346, 0.012150547, 0.017250922, 0.005980161, 0.012768773, 0.009445801, -0.021483403, -0.046367057, -0.038758103, 0.024705319, -0.038116097, 0.015610242, -0.013922006, -0.0028905103, -0.022874413, 0.018059373, -0.009927305, -0.01574102, -0.032052714, 0.046129275, 0.06206052, -0.018261487, -0.028343348, -0.01596691, -0.017785927, -0.008393626, -0.014647233, 0.020888953, -0.012281325, 0.029579803, -0.040517673, 0.0019423635, -0.043917924, 0.0027448703, 0.0019765443, -0.0059266607, 0.06886102, 0.022719856, -0.0043602865, 0.003750976, -0.033194054, 0.009291245, -0.0033972785, -0.06277386, -0.0012156491, -0.007674342, 0.01234077, -0.0059355777, -0.01739359, 0.024610206, 0.009903528, -0.014183563, -0.013969561, -0.014956348, -0.009392301, 0.019236384, 0.0028340376, 0.015384351, 0.02117429, 0.061632518, -0.04018478, 0.03621386, -0.029865138, 0.0655321, 0.02314786, 0.0025189794, -0.025323546, -0.01987839, 0.044013035, -0.0024952015, 0.008988075, -0.0045534824, -0.01658514, -0.036071192, 0.04945819, -0.004725873, 0.027011782, -0.014564011, 0.03799721, -0.01926016, 0.007977511, -0.0057215756, -0.016858585, -0.010747646, -0.0027701342, 0.0059088273, -0.026013106, 0.04643839, 0.0073533393, 0.011888988, 0.06077651, 0.028818907, 2.5891059e-05, -0.016977476, 0.004294897, -0.06353475, -0.033312947, -0.024467539, 0.020484727, -0.012875775, 0.019664386, 0.019486053, 0.07057303, 0.039447665, 0.014017117, -0.020615505, -0.029627359, -0.004972569, 0.019521719, -0.029009132, 0.0090118535, -0.01858249, 0.013208666, 0.014647233, 0.04251502, 0.013208666, 0.05735248, 0.045344602, -0.032480717, -0.036618084, -0.010147251, -0.039566554, 0.016490027, -0.0317436, 0.012150547, 0.018059373, 0.013149221, 0.006122829, -0.043109473, 0.00096820947, -0.0018799463, -0.029223133, -0.04862596, 0.023231084, 0.0030970816, -0.05197866, -0.03592852, 0.0024223814, 0.026536223, -0.007591119, -0.0016109579, 0.023040859, 0.008482793, -0.0045178155, -0.0032635273, 0.008007234, -0.0026259804, -0.06424809, -0.02760623, 0.016620805, -0.034715846, 0.031577155, 0.00396795, -0.022018407, 0.021376401, -0.02338564, 0.0010640644, 0.030863814, -0.035048738, -0.00887513, 0.005822632, -0.009160466, 0.006039606, -0.026631335, 0.028937798, 0.015622131, -0.02140018, -0.0058137155, -0.026512444, 0.042015687, -0.010914091, -0.0010900716, -0.027202006, 0.00026805955, -0.027178228, -0.04477393, 0.03630897, 0.04125479, -0.037426535, -0.004820985, -0.01773837, -0.008036956, 0.019985389, 0.039304994, -0.05102754, 0.01610958, 0.0371412, 0.022672301, 0.013315667, -0.03350317, 0.014647233, -0.014350009, 0.018439822, 0.016180914, -0.037402757, 0.027487341, 0.016882364, 0.044821486, 0.0022276992, -0.00038899283, -0.04841196, 0.026583778, 0.010022418, -0.055878244, -0.04817418, 0.028604906, 0.0850776, -0.03317028, -0.009202077, 0.03690342, -0.055878244, -0.00080473593, 0.03350317, 0.01751248, 0.026845336, -0.016965587, 0.015764799, -0.019474164, 0.003067359, -0.006616222, -0.007674342, -0.0056591583, 0.03452562, -0.008643295, 0.01596691, 0.0074960073, -0.03141071, -0.012198102, 0.013315667, 0.020603618, 0.023540197, 0.028272014, -0.04843574, 0.0128163295, 0.020841397, -0.030697368, -0.020544171, -0.023064638, 0.019414717, -0.009219911, 0.014397565, -0.041896794, 0.022137297, -0.054118674, 0.0012000448, -0.012120823, -0.09815549, -0.0033170278, 0.011098371, -0.02317164, -0.0126498835, -0.02384931, 0.03148204, 0.010218586, 0.009832193, -0.026702669, -0.064723656, 0.021697404, 0.031719822, -0.010016473, 0.015241683, 0.034692068, -0.009392301, 0.0036974754, -0.0140290065, -0.015883688, -0.006194163, -0.046248164, 0.031339373, -0.030245587, 0.036641862, 0.013922006, -0.017940484, -0.057304922, 0.009356634, -0.006794557, -0.0001413675, -0.0075197853, -0.027867788, -0.00634872, 0.04679506, 0.03892455, 0.0048536793, 0.0066102776, 0.04974353, 2.3940522e-05, -0.023944423, 0.03148204, 0.015099015], [-0.0073389537, 0.0007560193, -0.01630127, 0.029378362, -0.0008236595, 0.025567967, -0.012941811, 0.06227401, -0.0035003766, 0.041440852, -0.012423237, -0.03370733, -0.038284313, -0.017935907, -0.017011492, 0.035511065, -0.05041444, 0.023538765, -0.0029423456, -0.04883617, 0.018894142, -0.026063995, -0.012028669, -0.015376856, 0.022039408, -0.00015412789, 0.03260254, 0.01569251, -0.018657401, 0.0063976287, 0.024530819, 0.04123793, 0.022411428, -0.017969728, 0.006685099, -0.017496247, 0.00868612, 0.011222624, -0.05830579, -0.019784737, -0.047708835, 0.0052956585, -0.024057338, -0.03864506, -0.028837241, -0.011002794, -0.007958989, 0.0095090745, 0.015715057, -0.033188757, 0.02228742, -0.007772978, 0.03515032, -0.018172648, -0.038036298, 0.021667387, 0.022941276, -0.06971443, 0.061417233, -0.009559805, -0.0062116184, 0.0080717215, 0.037585363, -0.02376423, 0.020866979, -0.0013816905, 0.027980465, 0.025635608, 0.049512573, 0.0315203, -0.024981754, 0.027168784, -0.054517943, -0.050459534, 0.008111179, -0.07679409, 0.06894784, 0.00016592968, -0.0060143345, 0.01562487, -0.027078597, -0.053931728, -0.03959202, -0.0021292549, 0.00031265945, -0.0500086, 0.0077109747, -0.076072596, -0.028679414, 0.016966399, 0.034586653, -0.012975631, 0.030979179, 0.061417233, -0.029175442, 0.041756503, 0.0006249666, 0.013426566, -0.04748337, 0.000119867465, -0.008077359, -0.030911539, -0.058350883, -0.07972516, 0.04500323, 0.054157194, 0.08518147, -0.006645642, -0.034248453, -0.023448577, 0.00033344468, -0.013257464, 0.02218596, 0.016910031, -0.038757794, -0.00710785, 0.008161909, -0.06529527, -0.020540051, 0.017620252, -0.060921207, -0.005515489, 0.031069364, 0.05898219, -0.03911854, 0.013584392, -0.0071303966, 0.0009300517, 0.014339707, 0.026695304, 0.012795257, 0.014486261, 0.053841542, 0.023471124, 0.06326607, 0.034857213, 0.03542088, -0.009610535, -0.06944387, 0.00875376, -0.05880182, -0.022231055, -0.0250043, 0.06412284, -0.012829077, -0.00907505, -0.01966073, -0.017766807, -0.060876112, -0.020844432, 0.0029028887, -0.037111882, 0.0005608494, 0.02016803, -0.010348939, -0.05663733, 0.00860157, 0.00014241417, -0.0010131927, 0.046626594, 0.080131, -0.07205928, 0.020156758, -0.0073502273, -0.0029085255, -0.050730094, 0.02513958, 0.004295148, -0.04617566, 0.028589226, 0.009604898, -0.0060368814, 0.03968221, -0.022276148, -0.031633034, 0.00024043952, 0.026312009, -0.014869555, 0.020472411, -0.08418941, -0.033820063, 0.015196482, 0.04748337, -0.041440852, 0.061236862, 0.052443646, -0.0063863555, 0.004433247, 0.012772711, -0.05871163, -0.053616073, 0.019536722, -0.014723001, -0.01053495, 0.030392963, -0.051631965, -0.049151827, -0.008133725, -0.01757516, -0.018747589, -0.012479603, -0.035375785, -0.041959424, 0.03548852, -0.010591317, 0.0018995602, 0.053570982, -0.028701961, 0.06340135, -0.03384261, 0.035263054, 0.034834664, -0.0031762677, -0.015083748, 0.0002804247, 0.0031086274, -0.056682426, 0.010580043, -0.027845185, -0.04049389, 0.024034793, -0.013685852, 0.0033932796, -0.027664812, -0.010850604, 0.02006657, 0.006758376, -0.011149348, 0.02178012, 0.043740615, 0.014655361, -0.028318666, -0.023538765, 0.04256819, -0.07309643, -0.033887703, 0.0005087101, -0.054427754, 0.049106732, 0.030934084, 0.01767662, 0.027822638, -0.04425919, -0.017969728, 0.023448577, 0.06944387, 0.024981754, 0.026289463, -0.008077359, -0.0104503995, -0.00042979664, -0.012265409, 0.045093417, 0.03974985, 0.0015092203, 0.033098567, -0.012299229, -0.035578705, 0.023200564, 0.029220534, -0.037833378, 0.029491095, -0.024124978, 0.06809106, -0.014745547, -0.04829505, 0.030911539, -0.04473267, -0.014587721, -0.026762944, 0.05239855, -0.029896935, -0.026199276, 0.025342502, 0.024192618, -0.0141029665, 0.04815977, 0.028138293, -0.031475205, 0.057313733, -0.0033904614, 0.030122403, 0.026221823, 0.030776259, 0.059027284, -0.023944605, 0.0061101583, -0.028251026, -0.022975096, 0.031881046, 0.0029479822, -0.031745765, 0.0657462, 0.038036298, 0.04883617, 0.009881095, 0.02953619, 0.0010406715, -0.05253383, 0.021520834, -0.01606453, -0.004650259, -0.020224398, -0.024621006, -0.007913895, 0.011250808, 0.0030578973, 0.07273568, -0.00019640297, -0.037247162, 0.08739104, -0.020258218, -0.055194344, -0.045206152, 0.037743192, 0.027010957, 0.037156977, 0.056907892, 0.045702178, 0.01603071, -0.018161373, -0.04398863, -0.07133779, 0.024215166, 0.028521586, 0.029851843, -0.004334605, -0.048204865, -0.03684132, 0.011504458, -0.024192618, -0.021295367, -0.00084338785, -0.014339707, -0.006826016, -0.099295706, -0.012028669, -0.019920018, 0.022490341, -0.008201365, -0.014373527, 0.044755217, 0.027168784, -0.01935635, 0.018826501, -0.006493452, -0.02953619, 0.025658155, 0.02946855, -0.0048137223, 0.0012175223, 0.029896935, 0.032512356, 0.00904123, -0.019581817, -0.039141085, -0.039501835, -0.018679949, -0.008984864, 0.009238514, 0.06543055, -0.08207002, 0.022625623, 0.019750917, -0.022557983, -0.019987658, -0.013482932, -0.04358279, -0.052488737, 0.024350446, -0.055915836, 0.023380937, 0.020044025, -0.035308145, -0.028273573, -0.0011703151, 0.026943317, 0.0076376977, -0.045724727, -0.016414003, -0.021385554, -0.01784572, -0.041801598, 0.019051969, 0.024778834, 0.016786024, -0.031881046, 0.0041655046, 0.0116566485, -0.03995277, -0.0027661994, 0.053616073, -0.053165138, -0.0250043, -0.0061383415, 0.01804864, -0.020630239, -0.020799339, 0.02178012, 0.029716562, -0.0006291941, -0.018837776, 0.020325858, -0.012953084, -0.0036074733, -0.025522875, 0.041350663, -0.011273354, 0.012885444, 0.040877182, -0.01090697, 0.04392099, -0.014193153, 0.02113754, 0.053886633, 0.042432908, -0.056907892, 0.045228697, -0.0073445905, 0.008235185, -0.014745547, -0.04013314, -0.050459534, 0.035849266, -0.016932579, 0.0356238, -0.026244368, 0.036480576, -0.010630773, -0.03817158, 0.0047996305, 0.017079132, 0.04015569, 0.0153092155, -0.014497533, -0.07760577, -0.020382226, -0.0390509, 0.01082242, 0.034857213, 0.038532324, -0.010112199, 0.024237713, -0.008979226, -0.048926357, -0.04322204, -0.075621665, 0.03447392, 0.05898219, -0.030595884, -0.01114371, -0.027642265, -0.05555509, -0.041395757, 0.03986258, 0.001185816, -0.025793435, -0.002797201, 0.03609728, -0.0952373, 0.017518792, 0.018138828, 0.04644622, -0.012907991, 0.018905416, -0.049016546, 0.015500862, 0.049647853, 0.009514711, 0.039772395, 0.0047799023, -0.0010209432, 0.0074009574, 0.026898224, -0.00712476, 0.005752229, -0.018860321, -0.0082859155, 0.05920766, -0.043131854, -0.041057557, -0.058666535, 0.0036863869, 0.049061637, 0.014441167, -0.04130557, 0.020427318, 0.015500862, 0.06277004, 0.025117034, 0.04712262, 0.031903595, 0.04815977, -0.026424743, 0.02003275, -0.0060030613, -0.060515366, -0.035871815, 0.00043402414, -0.0082859155, 0.013133458, 0.022388881, -0.015715057, 0.012986904, 0.02164484, 0.034586653, 0.0174737, 0.00029751088, 0.016650744, -0.04002041, 0.024372993, 0.012626157, -0.029896935, 0.032083966, -0.016955124, -0.0008455016, -0.009401978, 0.00014681782, -0.027957918, 0.011566462, -0.024959207, -0.05212799, -0.009965645, -0.06331116, 0.016075803, -0.00534357, 0.015613596, -0.0060030613, 0.0033594596, -0.031091912, 0.0013380062, -0.008629753, -0.01969455, 0.018003548, 0.010416579, -0.0035736533, -0.010799874, 0.027777545, -0.05988406, 0.011769382, -0.018195193, 0.034789573, -0.01982983, -0.015917977, -0.038013753, 0.041147742, 0.028408853, -0.023335844, 0.0074065938, 0.040448796, -0.06349153, 0.014238247, -0.012051216, 0.030392963, 0.0028944337, -0.012693797, -0.016346363, -0.05501397, -0.0075193276, -0.012344323, 0.01586161, 0.017586432, 0.1000172, 0.04069681, 6.728784e-05, -0.032309435, 0.038893074, -0.005850871, -0.013460386, 0.025545422, 0.042996574, 0.025635608, 0.03918618, -0.021701207, -0.04241036, 0.05934294, 0.00069014065, -0.0318585, -0.028589226, -0.00029680628, 0.0284314, 0.021994315, 0.017552612, -0.06534036, 0.021081172, -0.0034242815, -0.030190043, -0.054698315, -0.013911319, 0.045521807, -0.015940523, 0.019874925, 0.033256397, -0.00020873321, 0.013031998, 0.013978959, -0.002296946, 0.025365047, -0.0047911755, 0.028972521, -0.03041551, -0.00036109964, -0.0043571517, 0.017530067, -0.05898219, -0.025906168, 0.05501397, -0.013494206, -0.024643553, 0.057268642, -0.06317588, -0.01794718, 0.038194124, -0.008545203, 0.008545203, 0.005935421, -0.03481212, 0.01791336, 0.023268204, 0.018375568, 0.027822638, -0.0047235354, 0.04270347, -0.012986904, 0.03670604, 0.011735562, 0.0012330231, 0.018837776, -0.018138828, -0.009943099, -0.0011519958, -0.0023025826, -0.022614349, -0.027191332, -0.014700455, 0.00220535, 0.025996355, 0.05239855, -0.021937948, 0.07156325, 0.0024928206, -0.010157293, -0.0051406496, 0.049783133, -0.037923563, -0.017462427, 0.043402415, 0.006899293, 0.046491314, -0.043875895, -0.029130347, 0.016740931, 0.02023567, 0.044890497, -0.015399402, -0.01804864, -0.026131636, 0.012851624, -0.036277656, 0.008607206, 0.020483686, -0.013956413, 0.003387643, 0.009266698, 0.029694015, 0.0040668626, -0.024530819, -0.0062059816, -0.0057381373, 0.04640113, 0.08527166, -0.06385228, -0.040877182, -0.015444496, -0.04644622, -0.01082242, 0.007795525, 0.07625297, -0.019502902, -0.007733521, -0.031745765, -0.048745986, -0.04274856, -0.038622513, -0.006640006, -0.0033256395, -0.028408853, 0.0039062174, -0.03720207, -0.011701742, 0.013381472, -0.039276365, -0.04322204, 0.073592454, 0.014396073, 0.029513642, 0.009571078, -0.045747273, 0.045409072, 0.0069782063, -0.011397362, 0.0010463082, -0.028408853, -0.044913042, 0.010174203, 0.0421398, -0.006690736, -0.012907991, -0.091494545, -0.025184674, 0.044417016, -0.022039408, 0.028769601, 0.040178236, -0.0049405475, 0.023380937, -0.02037095, -0.0138549525, -0.066828445, 0.020517506, -0.036976602, -0.015004835, -0.0058790543, -0.026920771, 0.023471124, -0.083467916, 0.024012245, 0.0020602054, 0.042523094, -0.019604363, 0.020923346, -0.019412717, 0.00537739, -0.01771044, -0.005783231, -0.011600282, 0.0022363516, -0.00045340022, 0.0040189507, -0.012885444, 0.019006876, -0.026514929, -0.04335732, -0.02026949, 0.007834981, 0.0008687529, 0.02816084, 0.012197769, -0.026808036, -0.035601255, 0.0036722952, -0.014294613, 0.02994203, -0.014745547, -0.0015557229, 0.027304064, 0.009627445, -0.0346092, -0.004517797, -0.0051547415, -0.014373527, 0.013978959, 0.009633081, -0.025658155, 0.044146456, -0.01609835, -0.0077109747, -0.051361404, 0.031610485, 0.037021697, 0.02480138, 0.045521807, 0.03404553, -0.009582351, -0.0050250976, -0.044777762, 0.026447289, -0.041057557, -0.04766374, 0.0012844579, -0.0080717215, 0.03165558, 0.007829345, 0.017090406, 0.028769601, 0.0034721931, -0.005278748, -0.0028916155, -0.0072149467, 0.0045572533, 0.05118103, 0.031407565, 0.026176728, 0.022997644, 0.066602975, -0.018488301, 0.03657076, -0.020878252, 0.016819844, 0.008111179, 0.0068880194, -0.0217463, -0.0014951286, 0.0318585, 0.020404771, 0.028701961, -0.024778834, 0.006718919, -0.025026847, 0.030054763, 0.0037314803, 0.0057465923, 0.008573386, 0.0020108847, -0.030843899, 0.024756286, 0.01842066, -0.016143443, 0.030956632, -0.00040689763, 0.000798999, 0.0022856726, 0.015038655, 0.015579776, 0.021239, 0.03981749, 0.030573336, -0.0121526765, -0.055104155, 0.007626424, -2.03669e-05, 0.00707403, -0.04053898, 0.040245876, 0.030888991, 0.01609835, 0.00022687626, 0.028115746, 0.048249956, 0.014982288, -0.020021478, -0.024012245, -0.010095289, -0.012975631, -0.06957915, 0.00909196, -0.014621541, 0.0069782063, 0.0009807819, 0.025026847, 0.042117253, 0.032828007, 0.025342502, 0.0016388639, -0.036255106, 0.0111606205, -0.053886633, -0.008161909, -0.0047404454, 0.027236424, 0.033887703, 0.0019827012, -0.0062285285, -0.020855706, -0.0064145387, 0.0030578973, -0.029310722, -0.02167866, 0.015072475, -0.012423237, -0.04739318, -0.014858281, 0.006966933, 0.033481862, 0.025883622, -0.023967152, -0.025432687, -0.04640113, 0.0028338395, -0.020292038, 0.011780655, -0.0024392721, -0.066061854, -0.040877182, 0.01791336, -0.02389951, 0.018477028, 8.477034e-05, -0.033301488, 0.017079132, -0.009886731, 0.0050081876, -0.0034017346, -0.0222536, 0.006008698, 0.03616492, -0.034428824, -0.014937195, -0.003320003, 0.025319954, -0.0043402417, 0.0321967, -0.017530067, -0.03740499, 0.026965864, 0.009334338, -0.032918196, -0.012378143, 0.007913895, 0.017981, -0.014971015, 0.056772612, 0.049783133, -0.015230302, 0.012705071, 0.006933113, -0.00087368494, -0.03239962, -0.0023110376, -0.04053898, 0.0013253237, 0.018443208, -0.0049095456, 0.04779902, -0.015388129, -0.011746835, -0.018679949, 0.0047911755, 0.04685206, -0.024079885, 0.022580529, 0.00921033, 0.01767662, -0.00068661774, -0.016549284, -0.02507194, 0.0010984475, 0.004844724, -0.050324254, -0.026853131, 0.032286886, 0.07165344, -0.005935421, -0.027394252, -0.012220317, -0.053390607, -0.025297407, 0.015095022, 0.00024043952, -0.013336378, 0.013595666, 0.020788066, -0.022028135, -0.0061552515, -0.0031847227, 0.012299229, 0.00066829857, 0.037044242, 0.018882869, 0.03713443, 0.057990134, -0.01613217, -0.005374572, 0.011487548, 0.04042625, -0.0032185428, 0.021599747, -0.030550791, -0.0054563037, 0.018105008, -0.037224617, -0.008624116, -0.0009772589, 0.0069218394, -0.012276683, 0.0062623485, -0.008793216, 0.009182147, -0.024530819, 0.034270998, -0.021836488, -0.053029858, -0.01952545, -0.018465756, 0.003303093, -0.011543915, 0.021701207, 0.031542845, 0.011132438, -0.009029957, 0.005743774, -0.026740396, 0.0568628, 0.023403484, -0.03986258, 0.0029592556, 0.0017360966, -0.020934619, -0.0023519036, -0.03959202, -0.01801482, 0.009903642, -0.032174155, 0.048791077, -0.005693044, 0.04802449, -0.0010124882, 0.0008962317, -0.049828228, 0.0013971913, -0.03575908, 0.016289998, -0.024621006, -0.039298914, 0.014880828, 0.06308569, 0.03129483, -0.0029620738, 0.025951263, 0.075621665, 0.02329075, -0.022095775, 0.024823926, 0.008094269], [0.0035326483, 0.0029965204, -0.008282452, 0.0429366, 0.00723338, 0.03136783, 0.002816845, 0.06709424, -0.011423872, 0.039760403, -0.018153, -0.0004346983, -0.031112807, -0.020054081, -0.019231053, 0.011951306, -0.036607392, 0.0037326096, -0.0019894692, -0.034173083, -0.022859335, -0.043608934, -0.035193175, 0.0017779161, 0.012901845, -0.010056021, 0.0044744946, 0.014536312, -0.005845243, 0.033825323, 0.026962887, 0.008404167, 0.059211705, -0.025687773, 0.016089633, -0.005120746, 0.013353932, 0.04560275, -0.032642946, -0.028353922, -0.055177703, -0.026197817, -0.017237237, -0.013840795, 2.2957503e-05, -0.010710966, 0.002822641, -0.009285156, 0.00048867334, -0.054760396, -0.0072217877, -0.019822244, 0.008467923, -0.014223329, -0.037557933, 0.028516209, 0.050726395, -0.041220993, 0.04690105, -0.028214818, -0.043724854, 0.002835682, 0.00079984486, 0.0054743006, 0.0016040368, -0.01701699, 0.0090880925, 0.021375565, 0.04145283, 0.025108173, -0.01802549, 0.0110007655, -0.037789773, -0.053647567, -0.028006162, -0.07530134, 0.07646053, -0.013771242, -0.026522392, -0.030023163, 0.014200144, -0.05828435, -0.025826875, -0.0039731427, 0.030788232, -0.05234927, 0.037210174, -0.11081909, -0.0023488197, 0.009864754, 0.041360095, -0.023288237, 0.022407249, 0.03966767, -0.022499984, 0.012183145, -0.006410351, 0.013295972, -0.013388708, -0.011626731, -0.028284369, -0.017700914, -0.06551773, -0.10414212, 0.059026234, 0.061808303, 0.056893315, -0.02710199, -0.0015113011, -0.08758881, 0.028608944, -0.020123634, 0.0004234686, 0.028261187, -0.0098589575, 0.02431992, -0.029188542, -0.047411095, -0.04599688, 0.035239544, -0.03475268, -0.056476004, 0.06102005, 0.06398759, -0.0047179256, 0.008236084, 0.031646036, 0.025386382, 0.009198216, 0.0063234116, -0.02858576, 0.030788232, 0.023044806, 0.044258084, 0.064033955, 0.02134079, 0.056476004, 0.023195501, -0.054111246, 0.02181606, -0.035169993, -3.830779e-05, 0.00065204746, 0.0348686, -0.029559486, -0.044814497, 0.0076043224, -0.027588852, -0.08364755, -0.002822641, -0.020714823, -0.020506168, 0.0062886355, 0.014246512, 0.056568738, -0.05823798, 0.030880967, 0.029675404, -0.037210174, 0.024829967, 0.07692421, -0.038948968, -0.013655323, 0.031877875, 0.014999989, -0.05782067, 0.04803706, -0.024041714, -0.045579568, 0.04785159, -0.025664588, -0.021433525, 0.03053321, 0.011655711, -0.048408, 0.032689314, 0.0341499, -0.0016851805, -0.026823783, -0.07576501, -0.020795967, 0.057496097, 0.019775875, -0.063709386, 0.02888715, 0.04928899, 0.02288252, 0.012588863, 0.021271236, -0.052581105, -0.01215996, -0.00091721345, -0.031576484, 0.006184308, -0.006178512, -0.07284384, -0.013945121, 0.008230288, 0.0062828395, -0.0011135521, -0.024064898, -0.027125174, -0.014188553, -0.012785926, -0.015591179, 0.051514648, 0.050401818, -0.020749599, 0.0031617058, -0.01796753, 0.004161512, 0.0013613302, 0.002051776, -0.0021169807, 0.0064741066, 0.011916529, -0.057727937, 0.0047700894, -0.007018929, -0.020135226, 0.04850074, 0.0019199175, 0.015278197, -0.0040108166, -0.021375565, 0.02740338, 0.035610486, -0.0013272788, 0.030092714, 0.016286697, -0.00018094317, -0.044721764, -0.018639863, 0.037627485, -0.06876348, -0.044582658, -0.01838484, -0.032040164, 0.035911877, 0.026522392, 0.011939714, -0.0075695463, -0.04887168, -0.0065146787, 0.02027433, 0.0724729, 0.016228737, 0.07080366, -0.019787466, 0.029559486, 0.01779365, 0.008578046, 0.038183898, 0.025200909, 0.012843886, 0.02911899, -4.1522744e-05, -0.015915753, -0.008236084, 0.054945868, -0.018234145, 0.030927336, -0.0121715525, 0.075208604, 0.006879825, -0.035564117, 0.018547127, 1.3256034e-05, -0.0462519, -0.020958254, 0.056754213, -0.027009254, 0.01654172, 0.029629037, 0.0031530117, -0.027357014, 0.03695515, 0.018581904, -0.06352391, 0.053693935, 0.0017518342, -0.01530138, 0.0019039786, 0.0044744946, 0.017758874, 0.004862825, 0.006404555, -0.058979865, -0.023021622, 0.032527026, -0.016437393, 0.0077666095, 0.049938142, 0.035077255, 0.049706303, 0.01090803, 0.0153129725, 0.012878662, -0.051375546, 0.017283605, -0.004604904, 0.02763522, 0.0024009836, -0.040455922, 0.0050338064, 0.03384851, -0.007424647, 0.07386394, -0.018628271, 0.008751926, 0.06208651, 0.010774722, -0.029559486, -0.049799036, 0.037998427, -0.009980673, 0.015324565, 0.047897957, 0.03704789, -0.028377106, -0.036375556, -0.006903009, -0.09959807, 0.025757324, 0.02128283, 0.008966377, -0.023195501, -0.02015841, -0.033639852, 0.010450147, -0.0710355, 0.0011331136, -0.017944345, -0.0024748824, -0.020981438, -0.10970626, -0.015278197, -0.009064909, 0.010397984, 0.009018541, -0.023415748, -0.0057988754, 0.026638312, -0.04636782, 0.035169993, -0.023728732, -0.012241105, 0.026893334, 0.04363212, -0.026452841, 0.0013287278, 0.029953612, 0.066816024, 0.079057135, -0.035680037, -0.005830753, -0.062040143, -0.023473708, -0.013029357, -0.012681599, 0.06528589, -0.062457453, 0.03391806, 0.031692404, 0.019404933, -0.009406871, -0.05828435, -0.024876336, 0.0070305206, 0.01809504, -0.049242623, 0.033894874, -0.020343881, -0.06621324, -0.028307553, -0.016622864, 0.047271993, -0.01992657, -0.039227176, -0.015811427, -0.0073319115, -0.011226809, -0.03048684, 0.0062538595, 0.04217153, 0.027055623, -0.047225624, -0.015463668, 0.044559475, -0.024459025, -0.019972939, 0.03380214, -0.021618996, -0.01802549, 0.035610486, 0.03296752, -0.010965989, 0.004642578, 0.0040195105, 0.035842326, -0.008323024, -0.00032819723, -0.0019474485, -0.032156084, 0.008653394, -0.04031682, 0.022071082, -0.027704772, 0.038253453, 0.04298297, 0.0042919214, 0.019532444, 0.003906489, 0.013539404, 0.05527044, 0.06667692, -0.013794426, 0.02721791, -0.013666915, -0.022442024, 0.033408012, -0.05401851, -0.023380972, 0.05105097, 0.005164216, 0.041499197, -0.053322993, 0.019938162, -0.012901845, -0.0014526169, -0.008653394, -0.006879825, 0.032341555, 0.017886387, 0.00981259, -0.07187012, 0.010513903, -0.02763522, -0.012785926, 0.07038635, 0.016912661, -0.04606643, 0.009789406, 0.04233382, -0.06055637, -0.038856234, -0.06064911, 0.025710955, 0.03600461, -0.005671364, -0.031530116, -0.030208634, -0.058748025, -0.038091164, 0.008537475, -0.043562565, 0.03375577, 0.025989164, 0.012148369, -0.10553316, 0.011168849, -0.0041383277, 0.05105097, -0.01802549, 0.02277819, -0.03350075, 0.010380596, 0.008583843, 0.01275115, 0.030579576, -0.0032051755, -0.006572638, -0.027125174, 0.024690865, 0.0021807365, -0.0026255779, -0.022743415, 0.034312185, 0.024273554, -0.022326104, -0.028910335, -0.03753475, 0.01630988, 0.05870166, 0.019346973, -0.017758874, 0.026105082, 0.0025313932, 0.0749304, 0.04803706, 0.014374024, 0.052395634, -0.00412094, 0.0044107386, 0.0067928857, -0.0402009, -0.020691639, -0.04499997, 0.020204777, -0.015428892, 0.019416524, 0.07210196, 0.0011345625, 0.023670772, -0.003109542, 0.005401851, -0.031020071, -0.03261976, 0.020969847, -0.038554844, 0.014594271, 0.032457475, -0.0308346, 0.0052656457, -0.027125174, -0.021537852, -0.012820702, 0.012299065, 0.030741865, 0.019544035, -0.004561434, -0.02744975, -0.017515443, -0.021943571, 0.003352973, -0.018918071, 0.00030736794, -0.0060741846, 0.008618618, -0.04363212, 0.017654547, -0.013017765, -0.020587312, 0.012855478, -0.01837325, -0.002040184, 0.007853549, 0.040942784, -0.03308344, 0.006821865, -0.02299844, 0.070896395, -0.009702466, -0.014455168, -0.043863956, 0.04013135, 0.027496116, 0.011551383, -0.015081134, 0.028307553, -0.06616688, 0.019289013, -0.007129052, 0.039412647, 0.01429288, -0.053554833, -0.026684681, -0.018964438, 0.00904752, -0.024644496, 0.0014453719, -0.006711742, 0.10571863, 0.039296728, -0.02740338, -0.035610486, 0.0056076082, 0.020077266, 0.0025386382, 0.034961335, 0.022859335, 0.029582668, 0.029721772, -0.044234898, -0.016379433, 0.052998416, 0.012855478, -0.01814141, -0.0052917274, -0.03326891, -0.015915753, 0.0019329585, 0.031970613, -0.038276635, 0.02283615, 0.024064898, -0.026012346, -0.04588096, -0.040293634, 0.033523932, 0.0029791323, 0.033060256, 0.010826886, -0.0062074917, 0.003564526, 0.032040164, -0.007215992, 0.011458647, -0.020459801, -0.0076390984, -0.0521638, 0.008740334, 0.011916529, -0.005146828, -0.052210163, -0.016275104, 0.062874764, -0.021595811, 0.0116151385, 0.04013135, -0.050633658, 0.03681605, 0.040780496, 0.009464831, 0.020749599, -0.035610486, -0.012913438, 0.036259636, 0.014258104, 0.027936611, 0.02756567, -0.011997674, 0.064961314, -0.03878668, 0.03125191, 0.020680048, -0.016031673, 0.023682363, 0.00083606975, -0.0026502106, -0.023995347, -0.022233369, -0.022279738, -0.012936622, 0.015440484, 0.045973692, -0.015162277, 0.029837692, -0.030904151, 0.056197796, 0.01779365, 0.012658414, 0.010699375, 0.101730995, -0.039227176, -0.010426964, 0.01897603, -0.0093025435, 0.043493014, -0.014768151, -0.01950926, 0.028307553, 0.009024337, 0.06125189, 0.0019126725, -0.018465985, -0.030741865, 0.02888715, -0.05248837, 0.014362432, -0.03403398, -0.004894703, 0.0038891009, 0.024690865, -0.0008505597, 0.006711742, -0.007946285, -0.0075347708, 0.014930438, 0.028122082, 0.09421941, -0.051746488, -0.050401818, -0.03326891, -0.052395634, -0.021491485, 0.008960581, 0.054760396, -0.020807559, -0.025270462, -0.016692415, -0.035216358, -0.006607414, -0.008039021, -0.011029745, 0.0004919336, -0.047271993, 0.014362432, -0.027704772, -0.009383688, 0.015428892, -0.031970613, -0.014918846, 0.032132898, 0.01665764, -0.0020908988, -0.000781008, -0.03255021, 0.013052541, -0.008862049, -0.0001782263, -0.006190104, -0.0006332105, -0.015046357, 0.051561017, 0.047063336, -0.017225645, -0.0057814876, -0.05568775, -0.0589335, 0.02116691, -0.0070768883, 0.000119994846, 0.041081887, 0.011348524, 0.013481444, -0.020888703, 0.015023174, -0.10061817, 0.042264268, -0.0014968112, -0.044930417, -0.02585006, -0.025780508, 0.0005517046, -0.053925775, 0.029768141, -0.017805243, 0.02573414, -0.014037858, 0.01655331, -0.0167156, 0.023311421, -0.0070247245, 0.014014673, -0.01707495, -0.012519311, 0.011070317, 0.017747283, 0.019428117, 0.050958235, -0.020923479, -0.028655313, -0.031646036, 0.017503852, -0.0012164308, 0.029513117, -0.027032439, -0.008438943, -0.011064521, -0.0017083643, -0.035169993, 0.0144088, -0.013353932, -0.003619588, 0.033060256, 0.030463658, -0.012681599, 0.0014881172, -0.008311432, -0.012009265, 0.017538628, 0.0025024132, -0.03361667, 0.028353922, 0.033523932, -0.0075637507, -0.021363974, 0.026290553, 0.02870168, 0.025479117, 0.02591961, 0.020378657, 0.007511587, 0.0119860815, -0.00022169614, 0.016854702, -0.012658414, -0.059397176, -0.011928122, 0.01435084, -0.004825151, 0.011192032, -0.017005397, 0.014918846, 0.01956722, -0.004132532, -0.006636394, -0.00762171, -0.0031848897, 0.022233369, 0.023902612, 0.03605098, 0.020946663, 0.057913408, -0.015092725, 0.034961335, -0.025224093, 0.041151438, -6.452553e-06, -0.013458259, -0.041244175, -0.0040340004, 0.032040164, 0.004399147, -0.0004346983, -0.036375556, -0.013632139, -0.017098133, 0.03345438, 0.009122868, 0.013748058, -0.02135238, 0.045857772, -0.031228727, 0.016854702, 0.0133423405, -0.005969857, 0.028840784, 0.009476423, 0.0047758855, -0.058748025, 0.010131368, -0.0119860815, 0.015197053, 0.047944326, 0.011591955, -0.011951306, -0.0550386, -0.022140633, -0.017816834, -0.039041705, -0.053833038, 0.024088083, 0.031460565, 0.027612036, -0.011081909, 0.053322993, 0.0117716305, -0.0059524686, -0.016506944, -0.020019306, 0.0004524485, 0.029652221, -0.049891774, 0.032689314, -0.014037858, 0.02721791, 0.008682374, 0.030510025, 0.052627474, 0.023740323, -0.012484536, 0.004865723, -0.025896426, -0.016275104, -0.03310662, 0.0041760015, 0.003599302, -0.001164267, 0.019149909, -0.020413432, 0.006769702, -0.03600461, -0.009493811, -0.025942795, -0.012612047, -0.06945899, -0.02935083, 0.0038833048, -0.046692394, -0.00061328686, 0.023948979, 0.04525499, 0.026754232, -0.023763508, 0.031854693, -0.031715587, 0.014258104, -0.0018547127, -0.009470627, 0.01861668, -0.05485313, -0.025942795, 0.016750375, -0.026221002, 0.013064133, -0.025131358, -0.0099864695, 0.015023174, -0.014872478, 0.012426576, -0.0030052143, 0.007181216, 0.0054453206, 0.06435853, -0.026731048, 0.0036891396, -0.01547526, 0.030231819, 0.003613792, -0.00916344, -0.01370169, -0.019764284, 0.0078883255, -0.0034573006, -0.014455168, -0.009412668, 0.0017315482, -0.013516219, -0.046808314, 0.040595025, 0.035169993, -0.035054073, 0.024574945, -0.005390259, -0.030092714, -0.01796753, 0.016170777, -0.023323013, 0.0061495323, 0.0013164114, 0.019277422, 0.06839253, -0.02360122, 0.010965989, 0.027241094, 0.0029704385, 0.006132144, -0.03982996, 0.012252696, 0.025432749, 0.021155318, 0.010664598, -0.015765058, -0.025200909, -0.009818385, -0.0016040368, -0.044860866, -0.014907254, 0.030996887, 0.07664601, -0.02893352, -0.017121317, 0.016460575, -0.060092695, -0.034010794, 0.018871702, 0.014849294, -0.005894509, -0.010299452, 0.023380972, -0.020054081, -0.013226421, 0.0055467505, -0.00020774956, -0.022349289, 0.029768141, 0.04933536, 0.030394105, 0.026476026, 0.008780906, -0.011673098, 0.0076159146, 0.013748058, -0.015463668, 0.02277819, -0.0029849284, 0.017955938, 0.00910548, -0.03315299, 0.0024966174, 0.029559486, 0.019486075, -0.0077724056, 0.018790558, -0.012635231, 0.016136002, -0.038925786, 0.014258104, -0.0015779549, -0.053647567, -0.026429657, -0.012310656, -0.009673486, 0.008601231, -0.016217144, 0.042426556, 0.0082129, 0.0016982214, 0.03570322, -0.039157625, 0.002551679, 0.029744957, 0.0057669976, -0.014999989, 0.035448197, -0.0029269685, 0.0085026985, -0.040710945, -0.003326891, 0.000515842, -0.017816834, 0.009969081, -0.018164594, 0.05211743, -0.0052685435, 0.036213268, -0.035100438, -0.012496128, 0.018802151, -0.0045933123, 0.007488403, -0.030695496, 0.018628271, 0.059350807, 0.04998451, 0.029072624, 0.01861668, 0.08350844, -0.0083578, 0.0067291297, 0.014768151, -0.008334615], [-0.02792528, -0.012535485, -0.024564363, 0.020684479, -0.011806463, 0.003024209, -0.045743093, 0.018003156, 0.033757463, -0.0013213538, -0.0017839436, -0.0035400854, 0.0055418094, -0.006585918, -0.0012943244, 0.04554539, -0.058667805, -0.007982182, -0.009761492, -0.038897693, 0.0037007176, -0.02792528, -0.047250565, 0.0076362053, 0.020993385, 0.011324567, -0.011627296, 0.012109193, -0.042950567, 0.008649424, 0.009495831, 0.019893674, 0.005816737, -0.028048845, 0.0024094821, 0.004408117, -0.0012124638, 0.025997696, -0.021438213, 0.032348845, -0.05589999, 0.04188792, -0.019794824, -0.05263792, -0.026615512, -0.03706896, -0.012288359, -0.009557613, -0.03259597, 0.0043834043, 0.0040034475, 0.0015615298, 0.036080454, -0.008791521, -0.052489642, 0.03531436, 0.07107355, -0.07497814, 0.053824127, 0.028716085, -0.045298267, 0.019078156, 0.03528965, -0.024428442, 0.0040219817, 0.024477867, -0.0088718375, 0.02504626, 0.006851579, 0.032249995, -0.031113211, 0.006703303, 0.008637067, 0.01574195, 0.016841663, -0.061682746, 0.07072757, 0.033559762, -0.0067156595, -0.0051958323, -0.018855743, -0.035561487, -0.013011204, -0.044161484, 0.016891088, -0.035437923, 0.046237346, -0.09830687, -0.024230743, 0.011577871, -0.010496693, -0.005263792, 0.035981603, 0.009341377, -0.023415225, 0.010156894, -0.012214221, 0.021660628, -0.035339072, -0.006765085, -0.002071228, -0.03687126, -0.08965745, -0.07794366, 0.032052293, 0.04717643, 0.083232164, 0.01030517, -0.008748274, 0.021512352, 0.018200858, -0.026170684, -0.031879302, 0.00657974, -0.037884474, 0.020808041, 0.00681451, -0.052983895, 0.017545974, 0.027085051, -0.09143676, -0.025948271, 0.035339072, 0.0067218374, -0.028592523, 0.009032469, 0.0032466229, 0.018942237, -0.0016619249, 0.034424704, -0.012127727, 0.045965508, 0.045075852, 0.047522403, 0.045298267, 0.020956317, 0.0676632, -0.05120459, -0.06489539, 0.024156604, -0.050908037, 0.03766206, -0.018299708, 0.028024131, -0.02477442, 0.016063215, -0.024935052, -0.0013105421, -0.025330454, 0.022970397, -0.014728732, -0.0353885, -0.0057889353, 0.021697696, 0.036500566, -0.04146781, -0.017237065, 0.038527004, -0.02205603, 0.021512352, 0.020560915, -0.052094243, -0.0009406248, 0.036228728, 0.011268963, -0.04102298, 0.0063140793, -0.029951718, -0.07665861, 0.048659183, -0.047052864, 0.0026612421, 0.029877579, -0.019597122, 0.008439366, -0.0076856306, 0.00913132, -0.012127727, 0.0019275858, -0.07458274, -0.0377362, 0.079624124, 0.06024941, -0.038823556, 0.020548558, -0.0015700248, 0.018015513, 0.0091869235, 0.047448266, -0.032274704, -0.03672298, 0.023514075, -0.011670544, -0.0050135767, -0.0036914505, -0.06163332, -0.0125663765, -0.011472843, 0.0066785906, -0.015927296, -0.006616809, -0.055010334, -0.00456566, -0.005529453, -0.004408117, 0.057877, 0.02537988, 0.010756176, 0.026813213, 0.0045347693, 0.032299418, 0.03716781, 0.0038366371, -0.02084511, -0.0072222687, -0.009180745, -0.031805165, 0.033658613, 0.0024851647, -0.024082467, 0.056740217, 0.009619394, -0.0010950788, -0.0040436056, 0.0059711915, 0.019634191, 0.019251145, 0.016903445, 0.025997696, 0.021759478, -0.024181318, -0.023662351, -0.033559762, 0.0070678145, -0.0580747, -0.024057753, -0.032422982, -0.0024048486, 0.056542516, 0.03289252, 0.034795396, -0.0014734911, -0.0631655, -0.0233658, 0.016569825, 0.029754017, 0.051748265, 0.009335199, -0.025676431, -0.023341088, 0.027282752, -0.014605169, -0.0012943244, 0.028370108, -0.0016341232, 0.106066644, 0.058173552, -0.066625275, 0.029828155, 0.026541373, -0.014407468, 0.07033217, -0.009069539, 0.076510325, -0.016372124, -0.038823556, -0.012368675, -0.07730113, 0.0035678872, -0.0031307824, 0.045471255, -0.029828155, 0.032670107, 0.01184971, -0.008834768, -0.00012163252, 0.065735616, 0.049573552, -0.008859481, 0.05169884, 0.015494824, 0.0078647975, 0.023353443, 0.033683326, 0.0037532318, -0.025206892, 0.005683907, -0.042283323, -0.04833792, 0.034498844, -0.014568101, 0.0010394753, 0.027109765, 0.0063635046, 0.050537344, -0.0009135954, 0.018620973, 0.042159762, -0.035017807, 0.0021917021, -0.03126149, -0.014716377, -0.0047015795, -0.06405516, 0.021462927, 0.05545516, 0.049351137, 0.070035614, 0.0034381459, -0.046410333, 0.054862056, 0.018546835, -0.036475856, -0.016903445, 0.01574195, -0.015853157, 0.029111488, 0.0031014362, 0.025775282, -0.03595689, -0.038798843, -0.023143386, -0.07300113, 0.02037557, 0.028716085, -0.003713074, 0.010997124, -0.025898846, -0.011837354, 0.021994248, -0.009347555, 0.013480744, -0.04102298, 0.029902292, -0.014765802, -0.11002067, 0.007963648, -0.051649414, 0.019016376, -0.018806318, -0.0016155888, -0.018237928, 0.01644626, 0.004093031, -0.00025504216, -0.0055418094, -0.06761378, 0.026047122, -0.0030458327, 0.019992525, 0.0014742634, 0.01785488, 0.020684479, 0.019053444, -0.00490237, -0.0040219817, -0.0023492451, -0.00019731498, 0.009125141, -0.01409856, 0.06400573, -0.07458274, 0.04616321, 0.046608035, -0.02772758, -0.0658839, -0.04794252, -0.025775282, -0.00298714, -0.02622011, -0.024564363, 0.051105738, 0.02614597, -0.026541373, -0.043593094, 0.020338502, 0.04208562, 0.005850717, -0.03249712, 0.0067156595, 0.00054483645, -0.042283323, 0.0011143856, 0.020462064, 0.024663214, 0.048016656, -0.07344596, 0.025775282, 0.04319769, 0.011089796, 0.00758678, 0.009841808, -0.024675569, -0.04188792, 0.0027044893, 0.06425286, 0.023884766, -0.0041331886, 0.010855027, 0.01762011, -0.026343672, 0.0047417376, -0.006616809, -0.040405165, 0.025355168, -0.02313103, 0.029927004, -0.030520108, -0.016075572, 0.030618958, -0.013418962, 0.009440227, 0.007926579, 0.053626426, 0.028641948, 0.050710335, 0.00775359, 0.06672412, -0.02524396, 0.03921896, 0.031310912, 0.021401145, -0.022241374, 0.047052864, 0.015766663, 0.017904306, -0.02631896, 0.008266377, -0.01433333, -0.06830573, 0.00976767, 0.05703677, 0.010064222, 0.003410344, -0.019720685, -0.04569367, -0.049326427, 0.01386379, -0.025898846, -0.003444324, 0.002889834, -0.046781026, 0.04860976, -0.0056684613, -0.035981603, -0.042604588, -0.052588493, 0.017224709, 0.06291838, -0.01124425, -0.014456893, -0.040874705, -0.07043102, -0.05921148, 0.067070104, -0.038551714, -0.006598274, -0.013851434, 0.015482468, -0.0807609, 0.01752126, 0.0021608113, 0.058025274, -0.0047046687, 0.01587787, -0.010484337, 0.00983563, 0.08639538, 0.020733904, 0.06519194, -0.037217233, 0.013011204, -0.039663784, 0.03541321, 0.0057518664, 0.006925717, -0.029333903, -0.028963212, 0.0031292378, -0.02557758, -0.040701717, -0.00090355583, 0.013752583, -0.0026735985, -0.010465803, -0.028271258, 0.0028450424, 0.007055458, 0.05263792, -0.007877153, -0.008878015, 0.013011204, 0.03692068, -0.029803442, -0.015939651, -0.07557125, -0.015383617, -0.060545962, 0.02238965, 0.0062306738, 0.022636777, 0.0015136491, -0.034054015, 0.04324712, 0.03101436, -0.00020716141, -0.027604017, 5.4251963e-05, 0.033213787, -0.041541945, -0.011991808, -0.005544898, -0.028740799, 0.015420686, 0.009149854, -0.04898045, -0.006487068, 0.023934191, -0.013097698, 0.045421828, -0.007401435, -0.023575857, -0.01902873, -0.022315513, -0.042654015, -0.004871479, 0.015111778, 0.042258613, 0.012615802, -0.04280229, -0.011102153, -0.0067527285, -0.03951551, 0.013011204, 0.0013499279, -0.012220399, 0.02389712, 0.029185627, -0.014741089, 0.011373992, -0.01470402, 0.042308036, 0.0025670254, 0.025923558, -0.020968674, 0.049252287, 0.04188792, -0.025355168, -0.0071543087, 0.021462927, -0.030421257, 0.03118735, -0.003024209, 0.030495396, -0.0047201137, -0.052044816, -0.04727528, 0.00032435337, -0.0070245676, -0.036377005, 0.013690801, 0.0029160914, 0.11239308, 0.018200858, -0.030618958, -0.047621254, 0.025528155, 0.024860915, 0.0038860624, 0.03474597, -0.0017947553, 0.02997643, 0.015309479, 0.0075620674, -0.01920172, 0.058173552, -0.029062063, -0.024836201, -0.010904452, -0.019498272, -0.0064438204, 0.010830314, 0.013666089, -0.027851144, 0.014073848, 0.0379339, -0.023921834, -0.04356838, -0.044458035, 0.0330408, -0.006505602, 0.042975277, 0.011330744, 0.005853806, 0.03897183, -0.027678154, -0.030717809, 0.026294246, -0.0050352, 0.0075373547, -0.004025071, -0.0028512205, 0.01601379, 0.014691664, -0.065537915, -0.010873561, 0.025206892, -0.02977873, 0.012764078, 0.02477442, -0.032052293, 0.025355168, 0.043790795, -0.029581029, 0.025231604, -0.02809827, -0.003527729, 0.043420106, 0.010422555, 0.05159999, -0.0046923123, 0.0340293, 0.070035614, -0.0443839, 0.04514999, 0.0019831893, 0.011837354, 0.00025928963, -0.0016094106, -0.0067156595, -0.014395112, 0.0036636486, -0.032249995, -0.0069751423, 0.009180745, 0.0060638636, 0.034894247, 0.06415401, -0.0077288775, 0.017583042, 0.028048845, 0.026837924, -0.017237065, 0.076708026, -0.026912063, -0.035462637, 0.03625344, -0.0009591593, 0.03785976, -0.04176436, -0.019560054, 0.029877579, 0.009625573, 0.05911263, -0.010780889, -0.020536203, -0.026393097, 0.029581029, -0.03795861, 0.01681695, -0.008581463, -0.022550283, -0.005724065, 0.009798561, -0.0012317706, -0.002712212, -0.011065084, -0.036080454, -0.029655166, 0.011707612, 0.06983791, -0.059310332, -0.055603437, -0.03585804, -0.056344815, -0.012140083, 0.01661925, 0.0469293, -0.058420677, -0.0008178339, -0.023674708, -0.044655737, -0.01470402, -0.017101146, 0.011911492, 0.0017237065, -0.05263792, 0.008488791, -0.046682175, -0.0010371585, -0.024218386, -0.0422339, -0.019584766, 0.04591608, 0.037316084, 0.019881317, -0.04804137, -0.05609769, 0.05703677, 0.01268994, -0.006153447, -0.009242527, -0.02819712, 0.0076918085, 0.054713782, 0.005032111, 0.0019631102, -0.05130344, -0.055208035, -0.01198563, 0.018077295, -0.025108041, -0.0090818945, 0.04099827, 0.016508043, 0.009520544, -0.0075744237, 0.01184971, -0.06059539, 0.046682175, 0.004686134, -0.029136201, -0.00013032055, -0.04075114, 0.0034968383, -0.029482178, 0.030025855, 0.013913215, 0.05589999, -0.017545974, -0.0005784302, -0.028691374, -0.0018920613, -0.0005560344, 0.022117812, -0.0054491367, -0.012214221, 0.009162211, 0.029383328, -0.010255745, 0.03595689, -0.04794252, -0.070183896, -0.037340797, -0.0054676714, -0.015074709, 0.0026365295, -0.007401435, -0.010231032, -0.050067805, 0.008810055, -0.023551144, 0.011231894, 0.0024758975, 0.004760272, 0.04655861, -0.015284766, -0.042925853, -0.012862928, -0.023106316, 0.006968964, -0.006734194, -0.0118002845, -0.036475856, 0.037884474, -0.021969536, 0.0074508605, -0.046978727, 0.0028682107, -0.007951291, 0.02305689, 0.027851144, 0.035882752, -0.008655601, -0.00029539326, 0.015260054, 0.026121259, -0.0085258605, -0.08021723, -0.03850229, -0.02004195, 0.023773558, -0.0023847695, 0.00036837277, 0.02500919, 0.0060700416, 0.0018519034, -0.012961779, -0.003075179, -0.005063002, -0.0016001434, 0.0138885025, 0.032447696, 0.02420603, 0.043963782, -0.03165689, 0.016359767, -0.012004164, 0.04702815, -0.010787067, -0.0026133615, -0.020128444, -0.02950689, 0.0177931, 0.00016236976, 0.0032744245, -0.015692525, 0.0104781585, -0.013208905, 0.017434767, 0.011201004, 0.009279596, -0.012381032, 0.028913787, -0.03795861, -0.00092363486, 0.01540833, -0.0035369964, -0.030099994, -0.0052081887, -0.007457039, -0.023019822, 0.019263502, -0.007833906, -0.014543388, 0.041739646, 0.02557758, -0.0106079, -0.025775282, 0.007271694, -0.04089942, -0.03417758, -0.036129877, 0.015358904, 0.010014797, -0.0075311763, 0.0056437487, 0.04702815, 0.025330454, 0.0030118527, -0.03360919, -0.012677584, -0.022661489, 0.018200858, -0.043494243, 0.024045397, -0.015062353, 0.0120412335, 0.0111701125, 0.039490797, 0.030693097, 0.05580114, 0.06247355, -0.0212158, -0.037439648, -0.011330744, -0.0095020095, -0.0012333151, -0.019448847, 0.040528726, 0.017966088, 0.03484482, 0.029482178, -0.024601432, -0.017817812, -0.018855743, -0.0069071823, -0.04253045, 0.005946479, -0.020128444, -0.042950567, -0.021845972, -0.010348417, 0.04374137, -0.0006085487, -0.0074693947, 0.031212062, -0.017348273, 0.013085342, 0.004266019, 0.009415515, -0.007852441, -0.05743217, -0.045841943, -0.012634336, -0.011652009, 0.03437528, -0.0076856306, -0.0078647975, -0.0036451141, -0.0015769752, -0.008142814, 6.467761e-05, -0.01826264, 0.0028388642, -0.009409337, -0.027875856, -0.012516951, -0.016396835, 0.04166551, 0.0033547406, 0.013233618, 0.0024218385, 0.019411778, -0.0143703995, -0.011336923, -0.01892988, 0.02809827, 0.0100704, -0.0112751415, -0.011231894, 0.015420686, 0.0289385, -0.06252298, 0.031434476, -0.026121259, -0.035462637, -0.01013836, -0.004911637, -0.036549993, -0.020523846, 0.008674136, 0.03081666, 0.029185627, -0.0007101022, 0.012276003, 0.022809764, 0.010224855, 0.028543098, -0.033782177, 0.028889075, 0.030198844, 0.027406316, 0.02631896, 0.01540833, -0.05589999, -0.012652871, 0.002497521, -0.041195966, -0.025429305, 0.03625344, 0.06875056, -0.025268672, -0.01742241, 0.0059681023, -0.02491034, 0.008995401, 0.017867237, 0.01611264, 0.018064938, -0.0212158, 0.013974997, -0.013357181, -0.025429305, -0.015989076, 0.0019244967, -0.016421549, 0.050562058, -0.018237928, 0.045743093, 0.032274704, -0.010329883, 0.009829452, 0.0029006458, 0.037217233, 0.03044597, -0.009125141, -0.016792238, 0.033386774, 0.029383328, -0.056147113, -0.05293447, 0.037365507, 0.009761492, -0.002940804, -0.024700282, 0.003555531, -0.0015599853, -0.058321826, 0.014815227, 0.0028558543, -0.063066654, -0.010502871, -0.011003302, -0.022809764, -0.025701145, -0.026689649, 0.016285628, -0.025083328, 0.0013684623, 0.0051587634, -0.07033217, 0.010243389, 0.01362902, -0.044705164, 0.0140244225, 0.026763787, 0.0130482735, 0.014185054, 0.014135629, -0.021512352, -0.016656319, -0.06959079, 0.0269862, -0.05273677, 0.028048845, 0.02027672, 0.009582326, -0.06415401, 0.010465803, -0.0005811331, 0.039095394, 0.0017962999, -0.026862638, 0.019695973, 0.03548735, 0.027579304, -0.004500789, -0.013196548, 0.06410459, 0.045224126, 0.0006452315, 0.039194245, 0.012170974], [0.022951763, 0.010010993, -0.018264119, 0.032437608, -0.02363722, 0.02870076, -0.037501145, 0.042432014, 0.0062630894, 0.036086008, 0.0007296803, -0.022421086, -0.040884208, -0.013952372, -0.031221472, 0.009751182, -0.058507092, 0.0039773104, -0.033410512, -0.025649369, -0.017722387, -0.054880805, -0.03542266, -0.012769406, 0.011575383, -0.010563781, -0.010143662, 0.024919689, 0.0016556004, 0.017335435, 0.018330453, 0.026312714, 0.025074469, 0.016506253, 0.028324863, -0.005530645, 0.006931963, 0.051873636, -0.018164618, -0.004524571, -0.06001068, 0.014494104, 0.0011415074, -0.019811926, -0.009668265, 0.0016500725, -0.02595893, -0.03584278, -0.025361918, 0.02467646, 0.0066168737, -0.015511234, 0.003949671, -0.017224878, -0.015876075, 0.02682128, 0.07035887, -0.07951304, 0.049397144, -0.0010426965, -0.041127436, 0.0368378, 0.044731613, -0.022509532, -0.004361498, 0.008159152, 0.004267524, -0.00696513, 0.076550096, 0.040707316, -0.009657208, 0.018219896, -0.016561532, -0.0280153, -0.0033139647, -0.07088955, 0.08579271, -0.009845156, -0.010237636, -0.006744015, 0.01617458, -0.011354268, -0.030845577, -0.030690797, 0.02655594, -0.033543184, 0.0074626394, -0.09578712, -0.05669395, -0.010453223, 0.00549195, 0.012692015, 0.008927528, 0.0368378, -0.02655594, 0.030845577, -0.0028123094, 0.028258529, -0.019668201, 0.020154655, -0.009231562, -0.080087945, -0.03542266, -0.09048036, 0.042034008, 0.027617294, 0.060983583, -0.0008651134, -0.035312105, -0.054482795, 0.031066692, -0.045682408, -0.010160246, 0.03365374, -0.02540614, 0.042100344, 0.0005520971, -0.022188915, -0.029828446, 0.027440403, -0.060054902, -0.012039725, 0.033078842, 0.042697355, -0.029563108, 0.0023134183, -0.01500267, 0.030867688, 0.007855119, -0.0013764424, -0.043869264, 0.04727444, 0.03323362, 0.055323035, 0.047362886, 0.029231435, 0.07433894, -0.007390777, -0.06611346, 0.0044748196, -0.0878712, -0.0003589668, 0.00080637966, 0.02786052, 0.020696387, 0.005071831, -0.019170692, -0.028568089, -0.03898262, 0.02152557, -0.008186792, -0.048114676, 0.0013861161, 0.030757131, 0.021713518, -0.02210047, -0.0015588625, 0.029784223, -0.022177858, 0.045638185, 0.050900728, -0.05364256, -0.006141476, 0.04638998, 0.0038722807, -0.049662486, 0.03449398, -0.0045328625, -0.039491184, 0.03929218, -0.0063902307, -0.006185699, 0.054438572, -0.027926855, -0.018562624, 0.026135823, 0.0021503458, -0.034405533, -0.01181861, -0.093045294, -0.037479036, 0.058285978, 0.028501755, -0.004416777, 0.055588372, 0.050723836, 0.039380625, 0.009474788, 0.05669395, -0.04855691, -0.011420602, 0.02567148, -0.019712424, -0.0011739838, 0.0034715093, -0.019867204, 0.009646152, 0.010265275, -0.018264119, -0.021868298, -0.009004918, -0.022023078, -0.01747916, -0.03175215, -0.005450491, 0.045328625, 0.013255859, -0.00939187, 0.027948966, -0.0057489965, 0.023858335, 0.0351131, 0.00084438385, -0.014328267, -0.0083913235, -0.0005586615, -0.01893852, 0.010270803, -0.03073502, -0.003300145, 0.024632238, 0.017700275, 0.005292946, -0.013178469, 0.0037865986, 0.0003620762, 0.036351345, -0.032769278, 0.024322677, 0.065317445, -0.026113711, -0.0349141, -0.032017488, 0.02074061, -0.09101103, -0.0510334, -0.019524476, -0.041879226, 0.011497993, 0.021879353, 0.041989785, -0.012194506, -0.020397881, -0.026511718, 0.047937784, 0.04263102, 0.045638185, -0.013897093, -0.012216617, -0.0037921264, 0.022089412, -0.03730214, -0.0034355782, 0.07318915, 0.016439918, 0.07624054, 0.0308898, -0.016550476, 0.018949576, 0.03336629, -0.028921874, 0.044134602, -0.009972298, 0.07181823, 0.0025359155, -0.02812586, -0.008065179, -0.02522925, -0.0439356, -0.0013280734, 0.054659687, -0.009966769, 0.016274082, 0.01341064, 0.0021558737, 0.0032282826, 0.060408685, 0.037655927, -0.027727852, 0.04426727, 0.006141476, 0.020983838, 0.016771592, 0.064034976, 0.01970137, -0.012957353, 0.018739518, -0.036948357, -0.0054808944, 0.015212729, -0.027617294, 0.0326145, 0.049220253, 0.03873939, 0.05510192, -0.006749543, 0.021956744, 0.014903167, -0.050989177, 0.0026298894, 0.015986633, -0.011564327, 0.013952372, -0.021271287, 0.004635128, 0.04727444, 0.043382812, 0.06430031, 0.0009031176, -0.0362629, 0.058418646, 0.0061138365, -0.033299956, -0.037766483, -0.009762238, 0.0034024108, 0.014206654, 0.03232705, 0.028258529, -0.031685814, -0.010834647, -0.031000357, -0.09163016, 0.036351345, 0.039491184, 0.035179436, -0.0024060102, -0.02306232, -0.01494739, 0.01914858, 0.015201673, -0.01891641, 0.021901464, 0.018640015, -0.04117166, -0.10586998, -0.003996658, -0.073454484, 0.02337188, -0.014018707, -0.03601967, 0.0077445614, -0.033167288, -0.009496899, 0.0040685204, -0.0059314165, -0.016362527, 0.029452551, 0.034869876, 0.03624079, 0.0011421985, 0.006500788, 0.04727444, 0.04294058, -0.0026796404, -0.0034383421, -0.0121281715, -0.0020798652, -0.024897577, 0.009143115, 0.035909116, -0.058241755, 0.026334826, 0.0314647, 0.024455346, -0.00016445447, -0.027506737, -0.026777057, -0.030226454, -0.04179078, -0.02225525, 0.06328318, -0.027064506, -0.04439994, -0.043272253, 0.017810833, 0.027086617, -0.026931837, -0.0439356, 0.008236543, 0.017810833, -0.037545368, -0.012006558, 0.011674885, 0.05236009, 0.029540997, -0.011509049, -0.02713084, 0.0042454125, -0.01813145, -0.01987826, 0.038031824, -0.035334215, -0.0035074407, 0.027595183, 0.017678164, 0.003902684, -0.010906509, 0.009358703, 0.032857724, -0.016052967, 0.007473695, -0.026003152, -0.01181861, 0.023482438, -0.042255122, 0.042852134, -0.015168506, 0.0020052388, 0.032990396, -0.022995986, 0.020419993, -0.01059142, 0.007473695, 0.04455472, 0.04497484, -0.0064786766, 0.0433607, -0.014847889, 0.024919689, 0.021426067, -0.019822981, -0.043183807, 0.055676818, -0.0039386153, 0.04121588, -0.017047985, 0.020519495, -0.024389012, -0.01320058, 0.02392467, 0.02449957, 0.008352628, 0.0032365744, -0.01291313, -0.020563718, -0.0038750446, -0.029939003, -0.012857852, 0.043183807, 0.017810833, -0.059258886, 0.02227736, -0.0019333764, -0.07349871, 0.026334826, -0.100740105, 0.0028634425, 0.03756748, -0.05191786, -0.016008744, -0.026489606, -0.07743456, -0.049264476, -0.0024626711, 0.023172878, 0.009823045, 0.05377523, 0.03234916, -0.101359226, 0.003720264, 0.0055195894, 0.026423272, -0.040552534, 0.02828064, -0.06239872, 0.01435038, 0.03451609, 0.020829055, 0.037655927, -0.009093365, 0.008385796, -0.0029076654, 0.04309536, -0.033587407, -0.009192866, -0.020784833, 0.015069004, 0.036196567, -0.004049173, -0.06748437, -0.042852134, 0.01667209, 0.0058650817, 0.025339806, -0.036616683, 0.02334977, -0.0002447815, 0.081591524, -0.0024322676, -0.0023866626, 0.022387918, 0.026998172, -0.0151353385, -0.012493012, -0.014383547, -0.04333859, -0.01369809, 0.0056494945, -0.02191252, -0.0015160214, 0.05408479, 0.022012023, 0.034471866, 0.0031702397, -0.0021075048, -0.0014607426, -0.037235808, 0.027329843, -0.031796373, 0.004507987, -0.0042923996, -0.046920653, 0.0136759775, -0.0055251173, -0.034162305, -0.014538327, -0.00014026999, -0.02110545, 0.036948357, -0.018043004, -0.05572104, -0.014847889, -0.055146143, -0.0066666245, -0.02350455, 0.016229859, 0.011293462, 0.0399113, -0.043404922, -0.02989478, -0.0021116505, -0.029187212, -0.009043613, -0.008717469, 0.021824075, 0.005959056, 0.008065179, -0.018485235, 0.006086197, -0.020983838, -0.005948, -0.012294007, 0.0061193644, -0.010027576, 0.049220253, 0.036196567, -0.014726276, -0.018628959, 0.01782189, -0.06469832, 0.05585371, 0.018219896, 0.024853354, 0.014516216, -0.0337643, -0.044753727, -0.046168864, -0.0055638123, 0.005071831, -0.024632238, 0.010508502, 0.109319374, 0.011044706, -0.011055762, -0.05731307, 0.028258529, -0.006832461, -0.01828623, 0.020342603, 0.023482438, 0.056207497, 0.034825653, -0.013432751, -0.04309536, 0.07172979, 0.0025690827, -0.029275658, -0.012382453, -0.012979465, -0.016583644, 0.009557706, -0.009552179, -0.06270828, 0.039690185, -0.014726276, -0.030425457, -0.05178519, -0.007678227, 0.034869876, 0.009546651, 0.008092818, -0.002233264, 0.004787145, 0.0006706011, 0.0004235739, -0.0066666245, 0.031995375, 0.010735145, 0.03904895, -0.039557517, -0.01782189, 0.017379658, 0.019369695, -0.03237127, -0.02154768, 0.026666498, -0.023106543, 0.047937784, 0.044731613, -0.058418646, 0.02540614, 0.06328318, 0.009192866, 0.025140803, -0.021945689, -0.038208716, 0.032946173, 0.017302267, 0.03365374, 0.024897577, 0.0088777775, 0.038540386, -0.048380017, 0.040839985, 0.0055472287, -0.011774387, -0.016904261, -0.0029353048, -0.019922484, 0.00605303, 0.00566055, -0.03104458, -0.0076008365, -0.008850138, 0.0106080035, 0.010160246, 0.05757841, -0.02097278, 0.06275251, 0.027904743, 0.010729617, -0.0034272864, 0.09808672, -0.011995502, -0.0038943922, -0.0044499445, -0.028457532, 0.05178519, -0.03268083, -0.009463732, 0.008407908, -0.019214915, 0.06500788, -0.003211699, -0.021116506, -0.015256952, 0.020121487, -0.03825294, 0.0019955651, 0.001347421, -0.003355424, 0.0011352886, 0.007976732, 0.020033041, -0.01312319, -0.035135213, -0.03829716, -0.018429955, 0.026578052, 0.06735171, -0.06381386, -0.043272253, -0.05209475, -0.0118849445, 0.003714736, 0.011409546, 0.06858995, -0.020187821, 0.009121004, -0.019038023, -0.059878007, -0.010127078, -0.03237127, 0.0068379887, -0.0027280094, -0.056915063, 0.023991004, -0.028391197, -0.0010834647, -0.007611892, -0.051740967, -0.023018098, 0.053156104, 0.03480354, 0.014483049, 0.014991614, -0.030934023, 0.029098766, -0.017589718, -0.015688127, -0.01254829, -0.021956744, -0.03756748, 0.039867077, 0.02522925, 0.0066942642, -0.013874982, -0.08278555, -0.034427643, 0.04917603, -0.016030855, 0.024632238, 0.059214663, -0.0035599554, 0.01933653, -0.023084432, 0.02522925, -0.042852134, 0.027661517, -0.024322677, -0.020762721, -0.014383547, -0.02465435, 0.034781426, -0.06226605, 0.040154528, 0.0026174516, 0.05116607, -0.023725666, -0.0071862456, -0.034449756, 0.006500788, -0.012493012, 0.02407945, -0.017644996, -0.01834151, -0.0040740483, 0.01740177, -0.013521197, 0.020696387, -0.025030246, -0.07986683, -0.02812586, 0.025450364, -0.006058558, 0.028568089, -0.009524539, -0.00035447537, -0.045262292, 0.0001318918, -0.018695295, -0.0061525316, -0.020187821, 0.014969502, 0.05191786, -0.00920945, -0.02306232, -0.0064731487, -0.019668201, -0.010829119, 0.0017012054, 0.00024253578, -0.002096449, 0.023460327, 0.00066265475, 0.0046213088, -0.047362886, 0.009308952, 0.009662736, 0.030867688, 0.061381593, 0.039867077, 0.010574836, 0.0019223207, -0.023128655, 0.040287197, -0.00696513, -0.06624613, -0.016384639, -0.0014621245, 0.00083609205, -0.010370305, -0.030845577, 0.02624638, 0.023438215, -0.0118849445, 0.0062133386, -0.00038246028, -0.0032780336, 0.03133203, 0.004601961, 0.016207747, 0.033299956, 0.040994767, -0.04554974, 0.058064863, -0.01912647, 0.045638185, 0.0028468587, -0.007545558, -0.030049562, -0.027064506, 0.052979212, 0.009900435, 0.036351345, -0.019568698, -0.0022913066, -0.037058916, 0.04072943, -0.010818063, 0.025207138, -0.017832944, 0.033167288, -0.040419865, 0.0069153793, 0.00046710594, -0.018982744, 0.0041237995, 0.00083471, -0.012537234, -0.03195115, 0.02958522, 0.0033333122, 0.017877167, 0.048601132, 0.03000534, 0.0008077616, -0.046036195, -0.010337138, -0.0314647, -0.011365323, -0.041547555, 0.002144818, 0.005859554, 0.019369695, 0.025892595, 0.07274692, 0.04119377, 0.03365374, 0.0028192194, -0.01813145, -0.033123065, 0.02974, -0.027661517, 0.0031481283, -0.043471258, 0.044886395, 0.007534502, 0.030823465, 0.010934149, 0.04709755, 0.010812536, -0.016030855, -0.04179078, -0.008319461, -0.040397756, -0.0011311427, 0.010221052, 0.022133635, 0.0024488512, 0.023416104, 0.0037064443, -0.02421212, 0.0076561156, -0.0011484174, -0.022730647, -0.05496925, -0.013797591, 0.011464826, -0.025207138, -0.030978246, -0.004519043, 0.018507347, 0.013333249, -0.014416714, 0.0018836255, -0.019104358, 0.0058208588, -0.0046213088, -0.0009639243, 0.00053171307, -0.07057998, -0.019767703, 0.004469292, -0.01559968, 0.016130358, -0.008805915, -0.014261933, 0.019933539, -0.022929652, 0.0053261137, 0.005909305, -0.03787704, 0.008336045, 0.011896, -0.014803666, -0.010663283, -0.02319499, 0.012316119, 0.019347584, -0.0082089035, -0.008065179, 0.0019361404, 0.002558027, -0.016749479, -0.024035227, -0.0052045, 0.011155264, -0.028744983, -0.043029025, 0.0397123, 0.03597545, -0.0422109, -0.008750636, -0.0030817937, -0.01594241, 0.0036677492, 0.023814112, -0.0349141, 0.016030855, 0.009635096, 0.03867306, 0.021403955, -0.035068877, 0.01270307, -0.012537234, 0.016473087, 0.015920298, -0.04581508, 0.036196567, 0.011553272, 0.04092843, 0.003805946, 0.009568762, -0.031840596, -0.0066887364, -0.0039745467, -0.04448839, -0.019026967, 0.0011352886, 0.06191227, -0.029540997, -0.017644996, 0.027418291, -0.075930975, -0.00306521, 0.028391197, 0.009303424, 0.048645355, -0.016550476, 0.040839985, -0.03551111, 0.0075897807, -0.002088157, 0.019424975, -0.00031007957, 0.032393385, 0.009170755, 0.01709221, 0.032658722, -0.021304455, -0.011741219, 0.017943501, 0.026931837, 0.013863926, 0.030580238, -0.057622634, 0.024919689, 0.014571494, -0.05527881, -0.023482438, -0.001955488, 0.02392467, -0.031553145, 0.0010171301, -0.017954558, 0.013543309, -0.046168864, 0.009010446, -0.0031840596, -0.06956285, -0.020408938, -0.027683629, 0.0033609518, -0.014560439, -0.022995986, 0.009214978, 0.02671072, -0.01588713, -0.030757131, -0.056207497, -0.0064897323, 0.03670513, -0.011221599, 0.00039317054, 0.039513294, -0.0054643103, 0.005143693, -0.013454863, -0.021271287, -0.018673182, -0.057534188, 0.015898187, -0.03655035, 0.014040818, -0.0055444646, 0.0023134183, -0.050281607, 0.024433235, -0.008518465, 0.0050884145, 0.005666078, -0.038275048, 0.0044499445, 0.058949325, 0.04179078, 0.0070148814, 0.021779852, 0.066378795, -0.0027128076, -0.017656052, 0.04554974, 0.01980087], [0.016758539, 0.020425642, -0.02618287, 0.052515928, 0.0069587356, 0.02180237, -0.033867516, 0.022828659, 0.0030788651, 0.031564627, -0.019799856, 0.0019070816, -0.02366721, -0.014655898, -0.0026814912, 0.031564627, -0.029036451, 0.016032627, -0.016808601, 0.00373594, -0.0023654695, -0.060726233, -0.043754928, -0.013179044, 0.019249165, -0.005434948, -0.035394434, 0.01538181, -0.0018382452, 0.002083866, 0.007847351, 0.022227904, -0.0032853743, -0.012853636, 0.0019946916, 0.014080176, 0.020525767, 0.024906266, -0.009217822, -0.00081352127, -0.042628516, -0.018498221, 0.0003068305, -0.012159014, 0.0034574654, 0.008992539, 0.012903699, -0.009524457, -0.0019680958, -0.0047152946, -0.0094806515, -0.018535769, -0.0077534835, -0.027709786, -0.0537675, 0.007158987, 0.07484396, -0.03429305, 0.03406777, -0.019637153, -0.05852347, 0.032816198, 0.05957479, -0.026408153, -0.023191614, 0.003476239, 0.0041051535, 0.011389297, 0.05962485, 0.03937443, -0.028861232, 0.0068773837, -0.00062265666, 0.019449417, 0.025557084, -0.08140219, 0.031239217, 0.01643313, 0.02355457, 0.0019305486, 0.029061483, -0.058323216, 0.021927528, -0.0244557, 0.030262992, -0.04608285, 0.05907416, -0.09892419, 0.009461878, 0.0103129465, -0.0006695906, -0.0004935884, 0.050062846, 0.013542, -0.012916215, 0.011620838, -0.037021477, 0.034743614, 0.01546942, 0.0058354507, -0.027159095, -0.053967748, -0.07048849, -0.08776017, 0.060576044, 0.056721207, 0.04996272, 0.0120463725, -0.035644747, -0.035569653, -0.025657209, -0.045982726, -0.026508277, 0.020363063, -0.006589522, 0.03549456, -0.020688472, -0.025081487, -0.04728436, -0.003132057, -0.06533202, -0.045281846, 0.09947488, 0.0055413316, 0.02778488, 0.016796086, 0.004180248, 0.02918664, 0.023066457, -0.027484503, -0.0297123, 0.006645843, 0.0040613483, 0.024818657, 0.014968791, 0.046032786, 0.08330458, -0.019687215, -0.0594246, -0.031239217, -0.068485975, 0.005738454, -0.018147781, 0.04871115, -0.00040754286, -0.012916215, -0.026633434, -0.029161608, -0.062929, -0.025356833, -0.032941353, -0.06663365, -0.012603322, 0.00481542, 0.025056455, -0.019336775, 0.028610917, 0.052465864, -0.025169097, 0.058673657, 0.04205279, -0.063229375, -0.037221726, 0.03639569, 0.010707191, -0.030913807, 0.0227035, -0.025507022, -0.033467013, 0.012703448, -0.017647155, 0.022540797, 0.056520954, -0.022528281, 0.0070713772, 0.015194074, 0.0013313588, -0.019724762, -0.021789854, -0.025319286, -0.0068836417, 0.060926486, 0.05852347, -0.013854893, 0.03782248, 0.05697152, 0.0038892576, 0.043029018, 0.01844816, -0.046683606, -0.027184127, 0.043054048, 0.008629584, -0.018122751, 0.007878641, -0.020237906, -0.005572621, -0.01862338, -0.031589657, -0.022665953, -0.005860482, -0.02688375, 0.017371807, -0.014180302, -0.021839917, 0.05206536, 0.013567031, 0.0332167, 0.042378202, 0.026858717, 0.009549488, 0.025657209, 0.0077096787, -0.02548199, -0.020613378, -0.020237906, -0.04553216, 0.002198072, -0.031038966, -0.004092638, 0.036671035, 0.011257883, -0.013254139, -0.038348142, -0.0037421978, 0.0062328246, -0.017784826, -0.023416897, 0.0323406, 0.034017704, -0.028385634, -0.04465606, -0.022265451, 0.033341855, -0.07899918, -0.006864868, -0.025406895, -0.033617202, 0.028410666, -0.008585778, 0.029086513, 0.0068148053, -0.049912658, -0.02171476, 0.019511994, 0.020913754, 0.02162715, 0.015594577, -0.026132807, 0.03534437, -0.030112803, 0.007947477, -0.0052972753, 0.027734818, 0.009793544, 0.07879892, 0.05446838, -0.026132807, -0.026933812, 0.019424384, -0.015619609, 0.039824996, -0.0066145537, 0.03642072, 0.0082979165, -0.039724868, 0.012928731, -0.026708528, -0.052515928, 0.02215281, 0.08385527, -0.08540722, 0.049687374, -0.00075094274, 0.03043821, -0.014017597, 0.060025353, 0.04498147, -0.013842377, 0.043154176, 0.015068918, 0.030638462, -0.005222181, -0.0054912684, -0.0029271122, -0.0041896347, -0.0039361916, -0.046358198, -0.017008852, 0.014756024, -0.012340492, -0.0027597144, 0.06773503, 0.0022481347, 0.06698409, 0.010087663, 0.020738535, 0.040275563, -0.041076567, 0.00834798, -0.008541973, -0.0127848, -0.023341803, -0.043905117, 0.025657209, 0.034242988, 0.02197759, 0.08145225, 0.017096462, -0.016758539, 0.061377052, -0.0022121521, -0.0071339556, -0.05291643, -0.005093895, -0.009067633, -0.007265371, 0.025782367, 0.044530902, -0.03729682, -0.033016447, -0.020087717, -0.09757249, 0.0061014094, 0.032766134, 0.00014705962, -0.005378627, -0.015632125, 0.024318028, 0.008654615, -0.054918945, -0.010988795, 0.027985131, 0.021139037, -0.02057583, -0.12065146, 0.018310487, -0.06793528, 0.04658348, -0.021752307, 0.021564571, 0.032991417, -0.020813629, -0.034343112, 0.008954992, 0.0028770491, 0.0071402136, 0.012647127, 0.0047966465, -0.0015355214, 0.001443218, -0.0019899982, 0.011677159, 0.02197759, 0.02145193, 0.026257964, 0.0017866179, -0.022640923, -0.006001284, 0.021038912, 0.03867355, -0.013441875, 0.01996256, 0.04728436, 0.024943814, 0.025782367, -0.02296633, -0.006939962, 0.020838661, -0.0010270706, -0.06337956, 0.07284144, 0.019574573, -0.022027653, -0.013379296, 0.006389271, 0.06618308, -0.017434387, -0.06598283, 1.2405711e-05, 0.051414546, -0.0073216916, -0.036620975, -0.0049656085, 0.030713556, 0.038248014, -0.047684863, 0.02188998, 0.033141606, -0.026358088, -0.03429305, 0.010513198, 0.038273048, -0.028060226, 0.0104881665, 0.016445646, -0.026483247, 0.038022734, 0.0305884, 0.022866206, -0.013441875, 0.013829862, -0.022202874, -0.06923692, 0.032590915, -0.029737331, 0.014005082, 0.00204319, -0.001314932, 0.041627258, -0.045857567, 0.034192923, -0.0010919959, 0.03569481, 0.051064104, 0.03762223, 0.0061952774, 0.041051533, -0.013066404, 0.016220363, 0.026082743, -0.008773514, -0.031789906, 0.047584735, -0.030888777, 0.026758593, -0.04831065, 0.0065457174, -0.036145374, -0.029461985, 0.01698382, 0.008410558, -0.03239066, -0.029812425, 0.00694622, -0.035043992, -0.034843743, -0.029862488, -0.00052448653, 0.038748644, -0.0006527726, -0.04941203, 0.040550906, 0.01538181, -0.043179207, 0.00014226844, -0.036120344, 0.005381756, 0.04275367, -0.026057713, 0.010732223, -0.02092627, -0.045482095, -0.045231782, 0.02504394, -0.015857408, 0.027659724, 0.0014236622, 0.008122697, -0.08035087, 0.021877464, 0.008898671, 0.036671035, 0.03396764, 0.029211672, -0.029862488, -0.003382371, 0.035644747, 0.015769796, 0.036671035, -0.027084, 0.0076596155, -0.034868773, 0.013141497, -0.036520846, -0.03429305, -0.00061522546, 0.011570776, 0.0018664055, 0.01976231, -0.04468109, -0.013729736, -0.02401765, 0.026232932, 0.0035388176, -0.024655953, -0.0045432034, 0.017884953, 0.07083893, 0.004633942, -0.009699677, 0.030863745, -0.022778595, -0.015869923, -0.014368037, -0.021514509, -0.04165229, -0.057071645, -0.0034887546, -0.0044524646, 0.03239066, 0.053917687, 0.006689648, 0.037196696, 0.016833633, -0.009949991, -0.008197791, -0.027759848, 0.056170516, -0.01739684, -0.008879897, -0.005237825, -0.030513305, -0.009336721, 0.006257856, -0.0141552705, 0.0052910172, 0.010707191, 0.002562592, 0.02638312, 0.0007791031, -0.016182816, -0.0144181, -0.02436809, -0.03076362, -0.005294146, -0.011458134, -0.009968764, 0.032941353, -0.0489114, 0.015006338, -0.020150296, -0.023216646, -0.007202792, 0.01252197, -0.018598348, 0.042653546, -0.0058761267, -0.011232851, 0.02848576, -0.018873693, 0.026483247, 0.00010169016, 0.026082743, 0.0016943145, 0.05922435, 0.039424494, -0.007941219, -0.013504453, 0.028410666, -0.03374236, 0.04853593, -0.007828577, 0.019336775, 0.006864868, -0.054818816, -0.019899981, -0.041201722, 0.0012625224, -0.00869842, 0.019236648, 0.009330464, 0.08771011, 0.013692189, -0.0001578153, -0.048235554, 0.0022309257, 0.013642126, -0.024205387, 0.018610863, -0.027384378, 0.04092638, 0.022490734, -0.021614634, -0.037221726, 0.07749729, 0.025056455, -0.035119087, -0.031214185, -0.009167759, -0.02504394, -0.016483193, -0.00027827904, -0.04060097, -0.0029615304, 0.036495816, -0.013904956, -0.034968898, -0.05063857, 0.008717193, 0.0041552163, 0.01485615, -0.004730939, -0.011088921, -0.0020682213, 0.010750997, 0.017359292, -0.0015018855, 0.010894927, 0.04147707, -0.041001473, -0.041226756, 0.03937443, -0.0034856258, -0.056571018, 0.0104881665, 0.025982618, -0.060225606, 0.038998958, 0.026057713, -0.080451, 0.015957532, 0.049687374, 0.004355468, 0.00031367503, -0.03379242, -0.004734068, 0.056621082, 0.030313054, 0.096921675, 0.0794998, 0.026658466, 0.042403232, -0.053216808, 0.042803735, -0.009993796, -0.014981307, 0.017622123, -0.0038047764, 0.013679673, 0.007884898, -0.019149039, -0.046308134, -0.016883695, 0.028360603, 0.013879924, -0.0001313172, 0.028285509, 0.003476239, 0.022140294, 0.027809912, 0.034543365, -0.026132807, 0.1114399, -0.026908781, -0.018761052, 0.020851176, -0.006533202, 0.04680876, -0.007152729, -0.037221726, 0.038323108, 0.0006433858, 0.0502631, 0.014781056, -0.022653438, -0.0227035, 0.017634638, -0.025557084, 0.016971305, -0.002653331, -0.03869858, -0.023003878, 0.030863745, 0.016157784, -0.009186532, -0.03954965, 0.0015120545, 0.0027049582, 0.029261734, 0.065682456, -0.056621082, -0.043129142, -0.044631027, -0.023592116, -0.027284252, 0.002977175, 0.057021584, -0.053366996, -0.02346696, -0.01801011, -0.037597198, -0.020413127, -0.022553314, -0.011664644, -0.0120463725, -0.051414546, 0.02046319, -0.03622047, -0.013429359, -0.020688472, -0.08245351, -0.015481936, 0.033842485, 0.01138304, 0.0047997753, 0.023091488, -0.04115166, 0.031614687, -0.029962614, -0.009624583, -0.030137835, -0.007922445, -0.012628353, 0.041927636, 0.019925013, -0.004042575, 0.01389244, -0.008385527, -0.0076220687, 0.026433183, -0.015456904, 0.009217822, 0.051764984, 0.019274196, 0.024180355, -0.016245393, 0.009067633, -0.07499415, 0.032590915, 0.002603268, -0.0050907657, -0.02548199, -0.039274305, 0.034268018, -0.0707388, 0.030313054, 0.0113204615, 0.056721207, -0.0032321827, -0.010431846, -0.03309154, 0.003186813, -0.0150564015, 0.00083777047, -0.016107721, -0.027084, 0.005560105, 0.024067715, 0.0179225, 0.058573533, -0.03201519, -0.020801114, -0.059274413, -0.017759794, -0.04255342, 0.03168978, -0.044605996, 0.0024186613, -0.024831172, -0.011727222, -0.04538197, -0.002623606, -0.021063942, 0.029862488, 0.03411783, 0.011201562, -0.030037709, -0.019737277, -0.0021261065, -0.026433183, -0.042077824, -0.01573225, -0.03304148, 0.04693392, -0.025281738, -0.0323406, -0.048961464, 0.008973765, 0.006602038, 0.026783623, 0.06257856, -0.00461204, 0.020638408, -0.0072340816, 0.0066708745, 0.016095206, -0.010137727, -0.04220298, -0.025732303, -0.010369267, -0.0029849974, -0.0067584845, -0.02372979, 0.01511898, 0.005553847, -0.0012844249, -0.004959351, 0.005478753, -0.01085738, 0.025544567, 0.02478111, 0.027384378, 0.037747387, 0.060375795, -0.021739792, 0.0314645, -0.038448267, 0.04663354, -0.012096436, -0.00668339, -0.057622336, -0.00075094274, 0.04025053, -0.0007791031, 0.008986281, -0.007152729, -0.03143947, -0.02434306, 0.03389255, 0.000108730244, 0.012384297, -0.01871099, 0.03797267, 0.000657466, 0.015744766, -0.014956276, -0.014430616, -0.021314258, 0.00032247513, 0.011232851, -0.002694007, 0.0071652452, -0.0092804, 0.01249068, 0.024205387, 0.014042629, 0.014042629, -0.04117669, 0.0001271127, -0.043129142, -0.041427005, -0.03762223, 0.027935069, -0.0027956972, 0.043054048, -0.0012062017, 0.056320705, 0.009336721, -0.0073216916, -0.032190412, -0.014968791, -0.008241597, 0.02778488, -0.037171666, 0.018072687, -0.008329206, 0.0067835157, 0.014167786, 0.07083893, 0.029286766, 0.02723419, 0.017759794, -0.0450065, -0.037922606, -0.04202776, -0.062027868, -0.01538181, -0.018698474, 0.04272864, 0.009768513, 0.008153986, 0.046983983, -0.042528387, 0.0017772311, 0.016408099, -0.0063079186, -0.050162975, 0.003604525, -0.018160298, -0.035920095, -0.02046319, -0.0006993154, 0.044405747, -0.0016223491, -0.038998958, 0.047885112, -0.0031883777, -0.00729666, -0.01996256, -0.016095206, -0.03949959, -0.057021584, -0.029086513, 0.0176847, -0.024067715, 0.029662237, 0.0067584845, -0.004687134, 0.017259168, -0.009724708, -0.01319156, 0.03854839, -0.008679646, -0.0095870355, 0.015982565, -0.007177761, -0.0024593375, -0.030613432, 0.034893803, 0.0052253096, -0.025957586, -0.017271683, -0.005744712, 0.033867516, -0.0032024577, -0.00560391, 0.00240771, -0.021489477, -0.020325515, 0.0012719092, 0.040901348, 0.030513305, -0.026508277, 0.020588346, -0.00039013822, 0.00747188, -0.009317948, 0.007390528, -0.05291643, 0.027359346, 0.022403125, 0.020700987, 0.028686011, -0.056571018, 0.011451877, 0.00703383, 0.011107694, 0.015444389, -0.009568262, 0.034968898, 0.0297123, 0.051189262, 0.012384297, 0.007040088, -0.024005136, -0.0069337045, -0.00071496004, -0.048110396, -0.021639666, 0.035119087, 0.09461878, -0.01698382, -0.0022543925, 0.029587142, -0.08190282, -0.01941187, 0.018610863, 0.025707273, 0.0011334541, 0.017008852, 0.03689632, -0.03166475, -0.01468093, -0.0023779853, -0.013441875, -0.0037641004, 0.045131657, 0.0132416235, 0.03239066, 0.021501994, -0.026057713, 0.0067084217, 0.0114956815, 0.0244557, 0.012146498, 0.039074052, -0.028410666, -0.005356725, 0.045657318, -0.053917687, -0.019937528, -0.0025219158, -0.018323002, 0.027759848, 0.01564464, -0.031089028, 0.009549488, -0.06958736, 0.013617095, 0.012734737, -0.057422087, -0.023717275, 0.010982537, -0.0067835157, -0.006357982, -0.028535822, 0.018986335, 0.029236702, -0.019124007, 0.015919985, -0.054618567, 0.018047657, 0.011164015, 0.013491937, -0.012928731, 0.020275453, -0.0041145403, 0.016458161, -0.007740968, -0.0076345843, -0.0035106572, -0.039474554, 0.030388149, -0.06237831, 0.016933758, -0.003432434, 0.0009214693, -0.05627064, 0.011533229, 0.008592037, 0.00022352279, 0.015707219, -0.00052370434, 0.0114018135, 0.023066457, 0.021063942, -0.018610863, -0.0024655953, 0.067234404, 0.014605836, -0.008266628, 0.023842432, 0.03326676], [0.032108143, -0.0072697685, -0.028405946, 0.012789407, -0.013900067, 0.016917918, 0.0009416762, 0.06758192, -0.018611953, 0.05712602, -0.045839928, -0.0049362625, 0.01597554, -0.040634416, 0.011768498, 0.039602287, -0.03565328, 0.026027566, 0.017759327, -0.013552284, -0.052952632, -0.045323864, -0.069780804, 0.014438568, 0.0008182696, 0.009227445, -0.027463568, 0.006938814, -0.004462269, 0.018499766, 0.02800207, 0.03307296, 0.023379933, -0.018208077, 0.004913825, -0.0044931206, 0.017119857, -0.004479097, -0.047702245, -0.004437027, -0.037313655, 0.03222033, -0.023020932, -0.046400867, 0.0077633946, -0.011734842, -0.05389501, 0.020283552, 0.027059693, -0.040252976, 0.032018393, -0.027710382, 0.006865892, -0.008408475, -0.032467145, -0.016873043, 0.052279506, -0.032713957, 0.025197376, -0.038637474, -0.013754223, -0.012082624, 0.04296792, -0.0020446223, -0.019946989, -0.0486895, -0.033521708, 0.030088764, 0.023694059, 0.020923022, -0.03675272, 0.03067214, -0.011190731, -0.04260892, -0.007942895, -0.05681189, 0.078082696, -0.016760854, -0.040006164, 0.024546687, 0.0054046465, -0.03717903, -0.023469685, -0.019958207, 0.067133166, -0.0704988, 0.02194393, -0.085262716, -0.03331977, -0.029348323, -0.012407969, -0.034284588, 0.039153535, 0.051561505, -0.05712602, 0.02883226, -0.0017431177, 0.022056118, -0.03388071, 0.0069163768, -0.023222871, -0.029505387, -0.013574721, -0.07323618, 0.06861405, 0.020216238, 0.03498015, -0.026566068, -0.02396331, -0.03188377, 0.0398491, -0.019946989, -0.018589515, 0.021326898, -0.04415711, 0.0039994945, -0.0048437077, -0.08530759, -0.025556376, 0.017647138, -0.0589659, -0.00403876, 0.049138248, 0.07417856, -0.020698646, 0.0054130605, 0.003012242, 0.023761373, -0.002277412, -0.030447764, -0.008010208, 0.032646645, 0.056138765, -0.008049473, 0.07103731, -0.0064956727, 0.054209135, -0.011970436, -0.040006164, 0.033050522, -0.029797075, 0.013327909, -0.010023979, 0.02681288, -0.030649703, -0.018679265, -0.024726188, -0.023245309, -0.040073477, 0.006933205, -0.03868235, -0.022527307, 0.00021210502, 0.04557068, 0.024613999, -0.022538526, 0.016098946, 0.02764307, 5.3508313e-05, 0.011398279, 0.06291491, -0.07247331, 0.0043921517, 0.012082624, -0.027127005, -0.09064773, 0.046355993, 0.008290677, -0.03340952, 0.022415118, 0.02278534, -0.018567078, 0.0015495938, -0.018006139, -0.03370121, 0.011403888, 0.025533939, 0.00046487813, -0.01937483, -0.093070984, -0.046400867, 0.02708213, 0.035698153, -0.02928101, 0.054568138, 0.034037773, -0.00917696, 0.026745567, 0.037246343, -0.035855215, -0.025825627, -0.0076007224, -0.0129913455, -0.036102027, -0.015538008, -0.0694218, -0.003993885, -0.032085706, -0.014651724, 0.031906206, -0.031906206, -0.05039475, -0.022426337, 0.0037414625, -0.03791947, 0.025062751, 0.02984195, -0.018006139, 0.04067929, -0.026319254, 0.062107157, 0.026207065, -0.033207584, -0.027239194, 0.014315161, -0.0015874571, -0.065068915, 0.04222748, -0.01680573, -0.061972532, 0.020900585, -0.012329438, -0.0018174421, -0.035406463, 0.021371773, 0.016143821, 0.011667529, 0.025960254, 0.05694652, 0.022942401, 0.0033460006, -0.030806765, -0.02432231, 0.040544666, -0.09387874, -0.04148704, -0.003839627, -0.01827539, 0.046670116, 0.04189092, 0.019217767, 0.06529329, -0.05021525, -0.026566068, 0.0131820645, 0.020552801, 0.013384002, 0.05241413, 0.0049783327, 0.014550756, 0.0062095937, -0.034284588, 0.054523263, 0.019599205, -0.0025186157, 0.033925585, -0.008851616, -0.022751682, 0.0022886307, 0.025421752, -0.0021974782, -0.0050905207, -0.009956665, 0.09073748, -0.013810316, -0.0066302978, 0.0054495214, -0.0596839, -0.03150233, -0.014954631, 0.028136697, -0.03735853, 0.0019029853, 0.038615033, 0.04124023, -0.045615554, 0.009289148, 0.02773282, -0.014281505, 0.0890771, 0.013843972, 0.05766452, 0.004423003, 0.020721084, 0.049721625, -0.028854698, -0.013563503, -0.050933253, -0.021820523, -0.02094546, 0.0047735902, -0.053311635, 0.038592596, 0.024501812, 0.03462115, 0.006568595, 0.015728727, -0.022661932, -0.0587864, -0.015616539, -0.017310575, 0.02800207, 0.0075446283, -0.03738097, -0.021293242, 0.013765441, -0.018410016, 0.06318416, 0.010175432, -0.00026416717, 0.05317701, -0.018062234, 0.005115763, -0.015908228, 0.04949725, -0.032646645, 0.018656828, 0.039063785, 0.047612496, -0.026678255, 0.026588505, -0.03874966, -0.1190088, -0.012632344, 0.02782257, 0.049542125, -0.024771063, -0.041531917, -0.0398491, -0.010360542, -0.056991395, -0.03821116, -0.010629793, 0.008487006, -0.07749932, -0.09378899, 0.00026644598, -0.03498015, 0.008139224, -0.008144833, -0.02836107, -0.009283539, -0.029236136, -0.06291491, 0.031995956, 0.005822546, -0.009496695, 0.006871502, 0.028316196, -0.04148704, 0.001264216, 0.026925068, 0.06313928, 0.046984244, -0.020642553, -0.02948295, -0.037964344, -0.0027892687, -0.0036769547, 0.027867446, 0.079787955, -0.06313928, 0.0014058532, 0.022493651, -0.026610943, -0.008414084, -0.039086223, -0.018073453, -0.037156593, 0.028136697, -0.03857016, 0.039288163, -0.010186651, -0.046131615, -0.0293932, 0.029056637, 0.050978128, -0.016166259, -0.038592596, -0.0013637827, -0.027845008, 0.0064507974, 0.0024442913, 0.005755233, 0.053760387, 0.028204009, -0.022706807, -0.0014906952, 0.023581872, 0.0137205655, 0.014853663, -0.013350346, -0.002088095, -0.028405946, 0.021091303, 0.06408166, -0.008430912, 0.017916389, 0.044740487, 0.044269297, -0.011471201, -0.01754617, -0.020014301, -0.020586459, 0.036169343, 0.014853663, 0.011779717, 0.0021708335, 0.009709853, 0.009412555, -0.010321276, 0.06484454, -0.042205043, -0.028877135, 0.01837636, 0.025960254, -0.024995439, 0.0039658383, -0.023020932, -0.0024779476, -0.0056065843, -0.004251917, -0.01763592, -0.0033067348, -0.0111346375, 0.013092314, -0.014719037, 0.028787386, -0.018230515, -0.019801144, -0.023649184, -0.0022788143, 0.009535962, 0.0047399336, -0.04388786, -0.04837537, -0.016469166, -0.013148408, -0.024569124, 0.012553813, -0.0021778452, -0.023133121, 0.04350642, -0.005390623, -0.010265182, -0.0005840777, -0.04599699, -0.0032955161, 0.04554824, -0.033544146, -0.039602287, -0.023200434, -0.06354316, -0.0130698765, 0.09710974, -0.040544666, -0.019094361, 0.0036208606, 0.020451833, -0.0692423, 0.022415118, 0.008105568, 0.08360234, -0.034464087, 0.026768005, -0.016244791, -0.052369256, 0.025825627, -0.003158086, 0.017131075, -0.010259572, 0.03414996, -0.043012794, -0.020631334, 0.00028292357, -0.010725152, -0.010607355, -0.026341692, 0.005141005, -0.039422788, -0.0155941015, -0.035025027, 0.029976575, 0.025040314, -0.0025228227, -0.017972482, 0.010646621, 0.008621631, 0.080999576, 0.026319254, 0.0072585493, 0.05555539, 0.028787386, 0.008234583, 0.010315667, 0.008346771, -0.0897951, -0.046311118, -0.009104039, -0.025578814, 0.006372266, 0.0071856277, -0.0040331506, 0.06071603, 0.0039097443, -0.024075499, -0.028518135, -0.014640505, 0.0016772073, -0.0701398, -0.0052644117, 0.019262642, -0.0244345, -0.002034806, -0.027575757, -0.0014920975, -0.0013714957, 0.017523732, 0.01515657, 0.044112235, -0.0057608425, -0.017052542, -0.017692013, -0.056767017, -0.0047146915, 0.0052111223, 0.006849064, -0.0079597235, 0.04575018, -0.049272873, -0.019958207, -0.009928619, -0.041644104, -0.004776395, -0.0045520193, -0.028204009, 0.0051185675, 0.03910866, -0.01754617, 0.029909262, -0.0059179054, 0.048195872, 0.0056682876, -0.0027556124, -0.029707326, 0.022459995, 0.06224178, 0.014079567, -0.018712923, 0.015728727, -0.081941955, 0.021338116, 0.008918929, 0.031906206, 0.007836317, -0.004709082, -0.018129546, -0.07027443, 0.02360431, -0.008582366, 0.010775637, 0.020350864, 0.09334023, 0.054343764, -0.046580367, -0.03957985, 0.020148925, 0.0047539575, -0.0045604333, 0.026655817, 0.019487018, 0.029146386, 0.01837636, -0.021697117, -0.07489657, 0.048195872, -0.0070397835, -0.020148925, -0.0029365153, -0.0073202527, 0.0023881975, -0.006097406, 0.02267315, -0.036954656, 0.014360036, -0.030537514, -0.020597678, -0.041711416, -0.0026981162, 0.042676233, 0.0006359645, 0.030245826, -0.0045604333, 0.0059066867, 0.034037773, 0.03735853, 0.0018973759, 0.015223882, 0.014180535, 0.016996449, 0.0002045674, 0.020597678, -0.025780752, 0.008318724, -0.046266243, -0.001292263, 0.029617574, -0.03121064, -0.004268745, 0.03222033, -0.026655817, 0.011448763, 0.039624725, -0.017052542, 0.035608403, -0.008195317, 0.015852133, 0.03607959, -0.008604803, 0.0003588256, 0.0674473, 0.005351357, 0.05856202, -0.03188377, -0.016547699, 0.011179512, 0.0027121396, 0.006400313, -0.025421752, -0.03085164, 0.015279976, -0.029527824, -0.00881796, -0.02331262, 0.021708336, 0.04207042, -0.0024400842, 0.046490617, -0.00917696, 0.05941465, -0.023402372, 0.021360554, 0.021540055, 0.058831275, -0.028046945, -0.054568138, 0.043663487, 0.0014458201, 0.027127005, -0.008980632, -0.008116786, 0.02589294, 0.0037639001, 0.05416426, 0.002511604, -0.011302919, -0.007275378, -0.0057075536, -0.02351456, 0.03690978, -0.028383508, -0.039624725, 0.012924032, 0.02892201, 0.01615504, -0.010029588, -0.029640011, -0.010725152, -0.026678255, 0.035608403, 0.05672214, -0.041397292, -0.01928508, -0.021842962, -0.04067929, -0.009771556, -0.00071870297, 0.050305, 2.008205e-05, -0.01165631, 0.00010158253, -0.027239194, -0.021158615, -0.027239194, -0.05039475, -0.0060188747, -0.050933253, -0.011117809, -0.024277436, 0.0069163768, -0.0009311586, -0.025264688, -0.010018369, 0.0029421246, -0.0007790039, 0.043192297, -0.030088764, 0.015437039, 0.019217767, 0.004930653, -0.011375841, -0.018398797, 0.0041705808, -0.04895875, 0.019531893, 0.044762924, -0.012497719, 0.005129786, -0.055331014, -0.051112752, 0.039041348, 0.0013006771, 0.0015986759, 0.0112131685, 0.011746061, -0.0001861616, -0.016592573, 0.008587975, -0.081582956, 0.025219813, -0.0006699714, -0.012295781, -0.016009197, -0.057440143, 0.022897527, -0.043192297, 0.06879355, -0.028877135, 0.0009458832, -0.026364129, 0.04112804, -0.0016491604, 0.01285672, 0.0051466147, 0.0043472764, -0.017748108, 0.0035731809, 0.013372784, 0.007325862, 0.007393175, -0.0011099579, -0.0016267229, -0.032803707, -0.047343243, 0.007325862, -0.029527824, 0.0494075, 0.018286608, 0.015235101, -0.037941907, -0.027934758, -0.012475281, 0.032287642, -0.003480626, 0.0070005176, 0.03040289, 0.036954656, -0.029056637, 0.020350864, -0.035765465, 0.018937297, 0.015235101, -0.014820006, -0.023133121, 0.05564514, 0.009244273, 0.0012621125, -0.051292256, 0.019722613, 0.010130557, 0.019240204, 0.05362576, 0.017490076, -0.015863353, -0.03307296, 0.004591285, -0.0037779235, 0.0028257298, -0.038345784, -0.0075165816, 0.03388071, 0.018869985, 0.005141005, -0.043461546, 0.0448078, 0.0198348, 0.004288378, -0.025601253, 0.0052475836, -0.009872525, 0.010511995, 0.017288137, 0.015728727, 0.016974011, 0.0598634, -0.015358508, 0.027351381, -0.03652834, 0.016682323, 0.006299344, 0.003985471, -0.03204083, -0.015235101, 0.055510513, 0.0058898586, -0.0037723142, -0.034553837, -0.028809823, -0.036977094, 0.04478536, 0.0056149988, 0.036685403, -0.0018679266, 0.0029168823, 0.020339645, 0.0038031659, 0.016222354, -0.028226446, 0.00017739693, 0.017860295, 0.009019897, -0.033095397, 0.038637474, -0.027889883, 0.020249894, 0.035765465, 0.0058898586, -0.022246838, -0.034957714, -0.0035198918, 0.008251412, -0.026700692, -0.054972015, 0.021068865, 0.06372266, 0.01974505, -0.05326676, 0.025758315, -0.0047062775, 0.020014301, 0.009148913, -0.011207559, -0.0006471833, 0.018230515, -0.036259092, 9.115257e-05, -0.0038424316, 0.024928125, -0.010478339, 0.027508445, 0.044134673, 0.010814902, 0.025646128, 0.0002234991, -0.0057243817, -0.009362071, -0.05573489, 0.024726188, -0.0040079085, 0.014517099, 0.034823086, 0.023536997, 0.01836514, -0.012733313, 0.0073146434, -0.020350864, -0.014494661, -0.051471755, -0.00027205536, -0.048869, -0.07597356, 0.0062600784, 0.028248884, 0.0045772614, 0.03132283, -0.04207042, 0.0064900634, -0.034194835, -0.006024484, -0.02811426, -0.00826824, 0.005884249, -0.059100524, -0.016009197, -0.0247935, -0.01377666, -0.0099117905, -0.022527307, -0.010854168, -0.0077577853, -0.014012254, 0.013092314, -0.012912814, -0.025264688, 0.015066819, 0.013081095, -0.027508445, -0.0014640506, 0.0059066867, -0.012082624, -0.0050428407, 0.0225834, -0.013384002, -0.013283034, 0.015919447, 0.0013700933, -0.014909756, 0.0005851294, 0.027889883, 0.0024358772, -0.020406958, 0.031188203, 0.03590009, -0.028944448, 0.03179402, 0.017647138, -0.021831743, -0.047791995, 0.004939067, -0.02773282, 0.0038368222, -0.0067873606, 0.032242768, 0.06376754, -0.00927232, 0.017512513, 0.032153018, 0.010399807, 0.03340952, -0.032332517, 0.037852157, 0.004784809, 0.05142688, -0.023536997, 0.004111682, -0.023940872, 0.027171882, 0.010960747, -0.04608674, 0.0043865424, 0.010528823, 0.03973691, -0.02030599, 0.005701944, 0.02047427, -0.04671499, -0.008071911, 0.050080627, 0.019711394, -0.031547204, 0.010169823, 0.052010257, 0.025646128, -0.006972471, 0.016749635, -0.001348357, 0.005794499, 0.05241413, 0.005777671, 0.01147681, 0.045032177, -0.002378381, 0.025937816, 0.0031665002, 0.017557388, -0.021629805, 0.035585966, -0.012890376, -0.026319254, 0.0006047623, -0.05142688, -0.0051382002, 0.007982161, 0.0040359553, -0.0033628289, 0.02295362, -0.0011730635, -0.013361565, -0.00550842, 0.03188377, 0.0018917664, -0.0403876, -0.00017213813, -0.012026531, -0.032915894, -0.041262668, -0.009014288, 0.03307296, 0.010304448, 0.021506397, 0.025578814, -0.017063761, 0.05591439, 0.008083129, -0.017938826, 0.0015580078, -0.0004729416, 0.0075165816, 0.0056879204, -0.053311635, 0.00044208998, -0.026700692, -0.048150998, 0.03565328, -0.03159208, 0.03165939, -0.0109327, -0.0052391696, -0.02800207, 0.016166259, -0.0060188747, 0.009350852, 0.036326405, -0.008683334, 0.013967379, 0.076377444, 0.05021525, -0.03222033, 0.030694578, 0.09558399, 0.0018791454, -0.022852652, 0.033566583, 0.00082808605], [0.023883808, 0.010560522, -0.021673597, 0.01063382, -0.018076366, 0.039783794, -0.009979778, 0.047993146, 0.0056382925, 0.06630632, -0.03622039, 0.020895513, -0.033040393, -0.04903059, -0.008908503, 0.039152306, -0.03540848, 0.015200837, -0.03137146, -0.031777415, -0.023793595, -0.03430337, -0.08529609, 0.0010832569, 0.0266804, 0.012088499, -0.022880191, 0.010836799, -0.022778703, 0.011705096, 0.028687634, 0.032611884, 0.02553019, 0.00017117504, 0.040325068, -0.043054003, 0.0071211634, 0.032115716, -0.029003378, -0.02195551, -0.04573783, -0.029116143, -0.007983822, -0.021752533, 0.022756148, -0.008248822, 0.00064840366, 0.0044627087, -0.02681572, -0.030469334, 0.050925057, -0.02553019, -0.050203357, -0.024357423, -0.0469557, 0.0048235594, 0.07149355, -0.05507484, 0.03292763, -0.017715516, -0.0320255, 0.011569777, 0.045083787, -0.0155278575, 0.027943378, -0.03229614, 0.00049757934, 0.01971147, 0.050654422, 0.034168053, -0.026522528, -0.0036761668, -0.0024427902, -0.007865418, 0.012528286, -0.06224675, 0.07677099, 0.02916125, -0.0213353, 0.014321263, 0.0313038, -0.049256124, -0.013227435, 0.01347552, 0.039738685, -0.07189951, 0.044226766, -0.08475482, -0.029228909, 0.0107804155, -0.044858254, 0.01756892, 0.028755292, 0.01792977, -0.064321645, 0.068291, -0.014456582, -0.0025710615, -0.06468249, -0.0043781344, -0.048534423, -0.028214017, -0.06914802, -0.08150716, 0.040279962, 0.010470309, 0.044971023, -0.028191462, 0.040573154, -0.032476567, 0.01244935, -0.040528048, -0.029476995, 0.01191935, -0.023771042, 0.01205467, -0.02916125, -0.083852686, -0.046820384, 0.02837189, -0.049120806, -0.0025978433, 0.05015825, 0.059630584, -0.030176142, 0.025214445, -0.007053504, 0.01575339, -0.02268849, -0.026522528, -0.023996573, -0.02539487, 0.03585954, 0.0060611647, 0.048895273, 0.044407193, 0.037754007, -0.009996693, -0.030356567, 0.015291049, -0.035092734, 0.0040003685, -0.022598276, 0.039219964, -0.00013523092, -0.0025287743, -0.035476137, -0.046775274, -0.034979966, 0.014569348, -0.050834846, -0.058728456, -0.033401247, 0.033829756, 0.036829326, -0.0423323, 0.03272465, 0.010132012, -0.013588285, 0.02895827, 0.030063376, -0.09742969, -0.001198842, -0.008446163, -0.025800828, -0.06012675, 0.048850168, -0.013960413, -0.018076366, 0.030198695, 0.0027232952, -0.008919779, 0.05214293, -0.0277404, -0.06314888, 0.028439548, 0.04325698, 0.042422514, -0.02215849, -0.10166969, -0.037099965, 0.015426368, 0.0104252035, -0.043865915, 0.06274292, 0.0238387, 0.016159346, 0.021064661, 0.041565493, -0.0825446, -0.047902934, 0.0073692487, 0.0064051, -0.028416995, -0.039783794, -0.05647314, -0.044610173, -0.045715276, -0.044294428, 0.0017704238, 0.011321692, -0.058367606, -0.021087214, 0.008598397, -0.059089307, 0.030694865, -0.014952752, -0.028574867, 0.024515295, -0.021978065, 0.02325232, 0.007183185, -0.002284918, -0.0056411116, 0.009043821, 0.004620581, -0.06382547, 0.024199551, 0.019903174, -0.035904646, 0.07474121, 0.010267331, 0.0084687155, -0.02496636, 0.004817921, 0.043640386, 0.023996573, 0.0533608, 0.038250178, 0.028078698, -0.013678498, -0.03633316, -0.00044331077, 0.007634248, -0.0853412, -0.069689296, -0.003907337, -0.030785078, 0.045061234, 0.011716372, -0.009111481, 0.029860398, -0.0076793544, -0.011682542, 0.0031377098, 0.050473996, 0.023387637, -0.0077244607, -0.002714838, -0.00518441, 0.019204024, 0.011169458, 0.039152306, 0.036536135, -0.003681805, 0.027424656, -0.0044006873, -0.020997, -0.015234667, 0.012020839, -0.034799542, 0.03470933, -0.029634867, 0.06608079, -0.013058285, -0.0192153, 0.017523814, -0.04111443, -0.055796545, 0.0041920706, 0.017625302, -0.047542084, 0.01813275, -0.016914878, 0.031439118, -0.05327059, 0.0066982917, 0.034799542, -0.04431698, 0.079838224, 0.015031688, -0.00055149547, 0.018685302, 0.011118713, 0.02496636, 0.005164676, -0.0042681876, -0.018549982, -0.011806585, 0.003064412, 0.011862968, -0.027695293, 0.06436675, 0.05584165, 0.076410145, -0.004065209, -0.013610838, 0.009703501, -0.058728456, 0.0104252035, 0.0043414854, 0.0070929723, -0.026206784, -0.0327472, -0.020545939, 0.013103392, -0.006416377, 0.0824995, -0.015347432, -0.015403816, 0.04673017, -0.01842594, -0.0077244607, -0.050970167, -0.007149355, -0.049752295, 0.011530308, 0.06364505, 0.039716132, -0.018279344, -0.003890422, -0.04645953, -0.054668885, -0.008147333, 0.07383908, 0.003718454, -0.014174667, -0.019429557, -0.03935528, -0.0056326543, -0.070095256, -0.01767041, 0.015516581, 0.0071719084, -0.030649759, -0.090348, -0.012979349, 0.0065798876, -0.017320834, 0.037663795, -0.049391445, -0.009641481, 0.039039537, -0.029702526, 0.04594081, -0.008327758, 0.03087529, -0.031033162, 0.015854878, -0.055525906, 0.0012369005, 0.04537698, 0.057600796, 0.034844648, -0.009945949, -0.004124411, -0.038814005, 0.018324452, -0.02278998, -0.01935062, 0.051827185, -0.044068895, 0.028078698, 0.040798686, 0.013554456, 0.01885445, -0.016903602, -0.010989033, 0.0018634557, 0.05426293, -0.028800398, 0.0044937194, -0.031326354, -0.02232764, -0.027898272, 0.0018028441, 0.041362513, -0.009934671, -0.017974878, 0.009748608, -0.006856164, -0.001063523, 0.0050124424, 0.02724423, 0.051015273, -0.003408348, -0.06445696, -0.016328495, 0.01624956, -0.03633316, -0.008260098, 0.035521243, 0.003949624, -0.058006756, 0.034258265, 0.019328067, -0.007927439, -0.0125846695, 0.0042315386, 0.010148927, -0.0076229717, 0.0047559, -0.008141695, -0.03998677, -0.009878289, 0.045692723, 0.0011480973, -0.0044570705, 0.0041948897, 0.055525906, -0.017388495, 0.021515725, -0.012652328, -0.010019246, 0.042693153, 0.033807203, -0.013148499, 0.020816576, -0.013971689, -0.0138702, 0.023568064, -0.0062528667, -0.044294428, 0.03998677, -0.016080411, 0.017512538, -0.04246762, 0.038475707, -0.016723176, -0.012077223, -0.03209316, 0.008891587, 0.04097911, 0.010673288, -0.014129561, -0.050654422, -0.006517866, -0.034731884, -0.030785078, 0.011862968, 0.0062133987, -0.025146784, 0.014219774, 0.0033096778, -0.008919779, -0.024785934, -0.065765046, -0.0027331624, 0.052954845, -0.051601656, -0.051601656, -0.030649759, -0.048399102, -0.019925727, 0.0633293, -0.018707855, -0.0051731337, -0.01423105, 0.013385307, -0.06662206, 0.0052295164, -0.007459461, 0.037190177, 0.001281302, 0.07212504, -0.04465528, -0.0074312696, 0.006140101, -0.001935344, -0.001367286, 0.00081755244, 0.014219774, -0.034258265, 0.024582956, -0.029206356, 0.00086406834, -0.025079126, 0.010278608, 0.055661224, -0.05227825, -0.032454014, 0.010848075, 0.016847217, 0.04325698, -0.0044965385, 0.011874245, 0.005142123, -0.0033576032, 0.035882093, 0.03249912, -0.002387817, 0.028800398, 0.027853165, -0.015167007, 0.011197649, -0.03150678, -0.054398246, -0.038114857, -0.016317219, 0.017275728, 0.02041062, 0.012934243, 0.030717418, 0.043369748, 0.0266804, 0.011851691, -0.002107312, -0.017625302, 0.034731884, -0.036829326, -0.010447756, -0.0044147833, -0.025214445, -0.011242756, -0.039964218, 0.00038164193, -0.011535946, 0.03854337, 0.003084146, 0.015415092, 0.021301469, -0.007572227, -0.029138695, 0.00028649575, 0.04309911, 0.029251462, 0.038114857, 0.0017422324, 0.016948707, -0.043843362, 0.0048122825, -0.01760275, -0.038475707, -0.00016465576, -0.035115287, -0.022541894, 0.02704125, 0.011930627, -0.038678687, 0.0067208447, 0.0033378692, 0.035656564, -0.03477699, -0.028078698, -0.0074876524, 0.06499824, 0.029431887, 0.02347785, -0.0049222293, 0.02017381, -0.06842632, 0.02810125, 0.029905504, 0.044903364, -0.0192153, -0.030694865, -0.02397402, -0.030266354, 0.014400199, -0.0137010515, 0.004775634, 0.011705096, 0.077357374, 0.051195696, -0.0019889078, -0.019643812, 0.069193125, 0.013238711, -0.02433487, 0.021425512, 0.026657848, 0.007701908, -0.019057428, -0.0026514072, -0.02525955, 0.058863774, -0.007887972, 0.007989461, -0.005621378, 0.025597848, 0.004834836, 0.016903602, 0.018234238, -0.029228909, 0.018820621, -0.0075835036, -0.047136128, -0.021245087, -0.026274443, 0.013960413, 0.00022500311, 0.0017774717, 0.020297853, 0.0050829207, -0.008818289, 0.061976112, 0.026139125, 0.0003774132, 0.020117428, 0.030469334, -0.05277442, 0.006822334, -0.011806585, 0.0065065897, -0.01624956, -0.0010007969, 0.051917396, -0.06310377, 0.0011008766, 0.03969358, -0.024425084, -0.00062091695, 0.014896369, -0.009945949, 0.017354665, -0.042287193, -0.009635842, 0.054127607, -0.011220202, 0.023083169, 0.061570156, -0.039783794, 0.06603568, -0.014558071, 0.0046685063, 0.027650187, 0.0082657365, -0.013001903, -0.019508492, -0.019170195, 0.0001888828, -0.035904646, -0.02902593, -0.023207212, 0.0469557, 0.044497404, -0.018256791, 0.06423143, -0.018820621, 0.06811058, -0.057510585, 0.03364933, 0.016982537, 0.06860674, -0.018414663, -0.056382924, 0.035904646, -0.011614882, 0.025552742, -0.0065968023, -0.030920397, 0.02645487, -0.0039580814, 0.033265926, 0.010684565, 0.0110341385, -0.00931446, 0.019282961, -0.038250178, 0.0044937194, 0.0054635056, -0.014388923, -0.0036705285, 0.030785078, 0.004693879, 0.010250416, 0.026522528, -0.021684874, 0.0128102, 0.028777845, 0.06378037, -0.018967217, -0.004087762, -0.03001827, -0.027221676, -0.0146144545, -0.009590736, 0.038250178, -0.014772327, -0.012776371, -0.04567017, -0.038881667, -0.014118285, -0.02374849, -0.020320406, 0.0043386663, -0.047542084, 0.008575843, -0.043414854, -0.03265699, -0.0013271131, -0.03441614, -0.013655945, 0.034122948, 0.0003886898, -0.013813817, -0.009821906, -0.014467859, 0.005621378, 0.022214873, -0.0021157693, 0.011581053, 0.00960765, -0.0026443591, 0.011603606, 0.04068592, -0.0026344922, 0.013464243, -0.02410934, -0.050744634, 0.014456582, 0.010442118, 0.016272113, 0.049752295, 0.020557215, -0.01816658, -0.013013179, 0.014975305, -0.060803346, 0.024876148, -0.02354551, -0.040528048, -0.0105266925, -0.053856973, 0.060848452, -0.01792977, 0.04659485, -0.02123381, 0.026590187, -0.00921297, 0.037009753, -0.013069563, 0.019147642, -0.003163082, -0.0035464861, -0.047045913, 0.0156519, -0.0072000995, 0.010509778, 0.0192153, -0.0009415949, 0.0025964337, -0.01829062, -0.015324879, 0.0038678688, -0.00022641268, 0.021177428, 0.015854878, 0.003354784, -0.014512965, -0.02916125, 0.0023173383, 0.07023057, -0.024379978, -0.023658276, 0.03101061, 0.013971689, -0.033401247, 0.05087995, -0.038588475, 0.0069012702, 0.0142084975, 0.0004915886, -0.042445067, 0.0448357, 0.04454251, -0.017117856, -0.05854803, 0.024357423, 0.01291169, 0.024582956, 0.06720845, -0.005429676, 0.020839129, 0.015663177, -0.01839211, -0.0026471785, -0.009929033, -0.0334238, -0.01162616, -0.0074087167, 0.012189989, -0.010808607, 0.0057848883, 0.023996573, 0.04210677, -0.01717424, -0.008902864, -0.013171052, 0.0023765403, 0.015640624, 0.051376123, 0.033604223, -0.0048883995, 0.04537698, -0.031687204, 0.034483798, -0.029928057, 0.010842437, -0.007668078, 0.008451801, -0.061434835, -0.0112878615, 0.0161819, 0.0018902376, -0.0355889, -0.043640386, -0.060848452, -0.062788025, 0.046279106, -0.022068277, 0.028123803, -0.010588714, 0.012968073, -0.022767426, 0.002103083, 0.03998677, -0.016497644, 0.008767545, 0.0138025405, 0.0017718334, -0.01885445, 0.045557406, -0.013994242, 0.030401673, 0.047812723, 0.01525722, -0.021899128, -0.049165912, 0.011908074, 0.0003515123, -0.025507636, -0.020715088, 0.037077412, 0.04289613, 0.030852737, -0.009855735, 0.03137146, 0.00036472705, 0.018538706, -0.01287786, -0.015843602, -0.018719131, -0.008502545, -0.045174, 0.015279773, -0.035679117, -0.001991727, -0.017681686, 0.040776134, 0.06481781, -0.004437336, -0.013689774, 0.00551425, -0.003907337, -0.014997859, -0.04722634, 0.02278998, -0.0028586143, 0.015742114, 0.03827273, 0.015279773, 0.028755292, -0.020715088, 0.020997, -0.009579459, -5.6382927e-05, -0.04391102, -0.016102964, -0.028529761, -0.05277442, 0.01205467, 0.01291169, 0.03642337, 0.046685062, -0.036107626, -0.005892016, -0.022102106, 0.020015938, -0.0327472, -0.019271685, 0.008959247, -0.050113145, -0.01875296, 0.00525207, 0.006557334, -0.001324294, -0.019666364, -0.0032420182, -0.002833242, -0.017986154, 0.008795736, 0.009291906, -0.03313061, 0.037866775, 0.033333585, -0.00260912, -0.023365084, 0.019734025, 0.018944664, 0.0016506101, 0.013734881, -0.009150949, -0.02625189, 0.03813741, 0.005818718, 0.0030926035, -0.017027644, -0.0072113764, 0.004242815, -0.032814864, 0.029003378, 0.018279344, 0.006331803, 0.015155731, -0.009917757, -0.024785934, -0.024041679, -0.0256204, -0.022857638, 0.008682971, 0.013554456, 0.03579188, 0.057781223, -0.017084027, 0.005260527, 0.019226577, 0.0076962695, 0.024921253, 0.014862539, 0.020264024, -0.011124351, 0.07131313, 0.0089761615, 0.0074650995, 0.007459461, -0.010814245, -0.000483836, -0.049346335, 0.010994671, 0.015618071, 0.09327991, 0.005412761, -0.02965742, 0.03337869, -0.06202122, 0.0027528964, 0.018899556, 0.0068730786, -0.0174336, 0.019835513, 0.026928486, -0.028913165, 0.0070591425, -0.030627206, -0.015978921, 0.0029544653, 0.036017414, 0.027695293, 0.015088071, 0.037167624, -0.02255317, -0.003315316, 0.012111053, 0.027131464, -0.0029798376, 0.026477423, -0.0043076556, 0.015437645, 0.010989033, -0.06905781, 0.013689774, 0.0112935, -0.002110131, 0.0077639287, 0.022462958, 0.0065235044, 0.0103237135, -0.038295284, -0.013520625, 0.014467859, -0.031055715, -0.010983394, 0.026612742, 0.004335847, -0.0115923295, 0.010701479, 0.014456582, 0.013351477, -0.0061626537, 0.044204213, -0.025688061, 0.051827185, -0.0023427105, -0.036513582, 0.00065122277, 0.013193605, -0.015020411, -0.0068110577, -0.014772327, -0.0001421026, 0.016858496, -0.056969307, 0.046414424, -0.023861254, 0.042512726, -0.01518956, -0.003219465, -0.047406763, 0.015144454, -0.0066982917, -0.019192748, 0.0017563282, 0.00019258293, -0.01472722, 0.049165912, 0.020579768, 0.029544653, -0.01347552, 0.12855308, -0.023207212, -0.0120997755, -0.0129906265, 0.027650187], [-0.024294432, 0.013960744, -0.014542443, 0.038802657, 0.030476397, 0.057394173, -0.024841914, 0.061272155, -0.0036669767, 0.03665836, -0.055934224, 0.013036872, -0.006073608, -0.0018577257, -0.016732363, 0.04293157, -0.05356181, 0.0076133963, 0.0018962204, -0.04464245, 0.0069632637, -0.053881176, -0.07733157, 0.015683027, 0.031023877, -0.014131832, -0.013744034, 0.01635597, -0.00953528, 0.009039126, 0.04049072, 0.009797614, 0.028126795, 0.004952985, 0.037160218, -0.024134751, 0.020895494, 0.007710346, -0.0310695, -0.010829843, -0.050048813, -0.02465942, -0.024887538, -0.018203717, -0.0027331237, -0.0064557036, -0.004893104, -0.02630186, -0.027328385, -0.04400372, 0.0072313007, -0.022971356, -0.019823344, -0.037548017, -0.062412743, 0.013470294, 0.028514592, -0.050231308, 0.030841384, -0.023952259, -0.020416448, 0.009238728, 0.07605412, -0.018454645, -0.001471353, 0.0044482765, 0.011360214, 0.022754645, 0.028240852, 0.031388864, -0.02929019, 0.024408491, 0.008936473, -0.031662606, 0.01756499, -0.05534112, 0.08919365, 0.0147135295, -0.04528117, 0.0103565, 0.018956501, -0.060815923, -0.0324382, 0.005648741, 0.010972415, -0.05214749, 0.028628651, -0.0980902, -0.0009381301, 0.0010158324, 0.0013351958, 0.008805307, 0.014884617, 0.021032363, -0.0252069, 0.03720584, 0.022184353, -0.0045110085, -0.05356181, -0.0073738736, -0.018762602, -0.02301698, -0.043775603, -0.068252526, 0.023678519, 0.02751088, 0.05611672, -0.034171887, -0.018545892, -0.006906234, 0.016869234, -0.0144511955, -0.020154115, 0.029039262, -0.03335067, -0.0023296422, -0.009461142, -0.037502393, -0.037342712, 0.052831836, -0.0677963, -0.040011678, 0.03624775, 0.040787272, -0.024157563, 0.023359155, -0.013219365, 0.0238382, 0.008081036, 0.021807961, -0.018557297, 0.021169234, 0.07906526, 0.014724935, 0.11460585, 0.03460531, 0.053288072, 0.006803582, -0.06145465, 0.00046657003, -0.057576668, 0.018443238, 0.0018206567, 0.052512474, -0.050641917, -0.0010785644, -0.026279049, -0.048862606, -0.055432368, 0.019983027, -0.02159125, -0.020199738, 0.0010557529, 0.016264724, 0.033168174, -0.033031303, 0.0036498678, 0.034285948, -0.004128913, 0.024636608, 0.059766587, -0.05055067, 0.011884882, 0.010305174, -0.012763131, -0.06556075, 0.040764462, -0.021967642, -0.045303985, 0.03309974, 0.027077457, -0.047220167, 0.024727855, -0.0004287882, -0.066108234, 0.027100269, 0.029746423, -0.010721487, -0.018591514, -0.08280638, -0.02712308, 0.037570827, 0.027716184, -0.017108755, 0.029039262, 0.03132043, 0.007858622, -0.0074537145, 0.018340586, -0.07422919, -0.05547799, -0.012569233, -0.015146952, -0.03132043, 0.0037667777, -0.06181964, -0.020610347, -0.033419102, -0.018614326, 0.014143238, 0.015717244, -0.046376135, -0.0310695, -0.023028385, -0.062230248, 0.04443714, 0.0025663134, -0.024819102, 0.039692312, -0.01696048, 0.030042974, 0.010926792, -0.0115769245, 0.004710611, -0.0006194795, 0.016344564, -0.052512474, -0.00474768, 0.007887136, -0.05570611, 0.070761815, -0.015306634, -0.010909683, -0.015409286, 0.020473478, 0.011793636, 0.006159152, 0.014097615, 0.021979049, 0.0252069, -0.008514457, -0.048451997, -0.023051197, 0.03257507, -0.07336234, -0.054611146, -0.010698675, -0.0030938333, 0.0662451, 0.012614856, -0.004185942, 0.042064726, -0.03476499, -0.027214328, 0.051828124, 0.055249874, 0.0045908494, 0.0469008, -0.021306103, -0.00017082023, 0.006872017, 0.01605942, 0.046102393, 0.01838621, 0.0046849474, 0.025982497, -0.0038665787, -0.032643504, -0.015979579, 0.002315385, -0.029039262, 0.053607434, -0.037662074, 0.08061646, -0.03923608, -0.037000537, 0.03148011, -0.05953847, -0.044345897, -0.04249815, 0.047493905, -0.028948015, -0.013641382, 0.04208754, 0.045007434, -0.010864059, 0.024864726, 0.013709816, -0.051417515, 0.075050406, 0.014040586, 0.0004455405, 0.0469008, 0.021614062, 0.063963935, 0.023906635, -0.012455174, -0.026666848, -0.0386886, 0.014896023, 0.0052295765, -0.034012206, 0.042840324, 0.045691784, 0.07459418, 0.03159417, 0.016983291, 0.016481435, -0.06268648, 0.015683027, -0.0051868046, 0.0064614066, -0.051736876, -0.026780905, -0.030704513, 0.013242177, -0.0027930043, 0.11104723, -0.036954913, -0.026735282, 0.08914802, -0.01764483, -0.0134817, -0.054976135, 0.028491782, 0.0043000006, 0.04074165, 0.028765522, 0.045714594, -0.015694432, -0.0090163145, -0.04359311, -0.08955863, 0.020827059, 0.043821227, -0.0135387285, 0.00066225143, -0.027031833, -0.034308758, 0.014485413, -0.048953854, -0.003222149, 0.0036726797, -0.029404249, -0.03955544, -0.09088171, 0.0027602126, -0.0016281833, 0.021842178, -0.01682361, -0.044368707, 0.008075332, 0.011987535, -0.036156505, 0.02860584, -0.018454645, 0.003749669, 0.0066895233, 0.04386685, -0.017211407, 0.0013038297, 0.021625467, 0.075369775, 0.022435281, -0.011251858, 0.00021011691, -0.039874807, -0.005942441, -0.008075332, -0.01246658, 0.07518728, -0.049136348, 0.018762602, 0.026142178, 0.0007820127, -0.024340056, -0.031708226, 0.0036156503, -0.02399788, 0.047174543, -0.068617515, 0.015899736, -0.049181968, -0.025229711, -0.0002486116, -0.029427059, 0.01160544, -0.008571487, -0.027328385, 0.013584352, -0.017348278, -0.03090982, -0.02112361, 0.018762602, 0.027875867, 0.033464726, -0.050048813, -0.0107899215, 0.022172948, -0.02874271, 0.027214328, 0.04411778, -0.023381965, -0.01975491, 0.03079576, 0.04124351, -0.049820695, -0.00715146, 0.022036077, 0.048634488, -0.01219284, -0.008086738, -7.6276534e-05, -0.02479629, 0.02063316, 0.0013915121, -0.006655306, -0.011542707, -0.010670161, 0.039806373, -0.015990984, 0.022104513, -0.0062789135, 0.011976129, 0.023769764, 0.03955544, -0.044779316, 0.043228123, -0.0060622026, 0.0041431705, 0.042749077, -0.048725735, -0.032483824, 0.031206371, -0.011896288, 0.04154006, -0.075369775, 0.023861011, -0.013801063, -0.037958626, -0.030339526, 0.025549075, 0.04922759, 0.011325996, -0.029860482, -0.07655598, -0.012991249, -0.038574543, -0.0013786806, 0.03937295, 0.028309288, -0.03353316, 0.049957566, -0.00069539965, -0.0052609425, -0.017006103, -0.072176136, 0.0073282504, 0.027579315, -0.03581433, -0.052649345, -0.024887538, -0.057166055, -0.049683828, 0.05926473, -0.02944987, -0.011514192, 0.031137936, 0.036270563, -0.062412743, 0.028149607, 0.040102925, 0.049181968, -0.0063245366, 0.05488489, -0.014781965, -0.035472155, 0.0320504, -0.014268702, 0.021465786, 0.009655041, -0.008691248, -0.024590984, 0.011559816, -0.01997162, 0.008862335, -0.0019104778, -0.025138466, 0.054428656, -0.022617776, 0.003929311, -0.04124351, 0.024887538, 0.06619948, -0.010801327, -0.0053750006, 0.039327327, 0.028993638, 0.051828124, 0.015717244, 0.028081171, 0.017701859, 0.03378409, -0.025982497, 0.0080126, -0.035107166, -0.035631835, -0.027305573, 0.022811674, 0.0136641925, 0.02205889, 0.06948436, 0.0011006633, 0.01945836, -0.0027231437, 0.023313532, -0.022115918, -0.0030596158, 0.043387804, -0.03690929, 0.0018306369, -0.003407494, -0.028514592, -0.0053436346, -0.0383008, -0.020017244, -0.0064956243, 0.039281704, 0.002937003, 0.0008312004, 0.019640852, -0.047493905, -0.016641116, -0.025503451, -0.0046478785, 0.009118967, 0.026872152, -0.00045159986, 0.013766846, -0.06373582, 0.021625467, -0.008081036, -0.026666848, 0.018808225, 0.0022440983, 0.008668437, 0.021032363, 0.034650933, -0.022503717, 0.0024665124, -0.0051069637, 0.06510452, 0.007487932, -0.01629894, -0.012842973, 0.055614863, 0.0195382, 0.010687269, 0.011793636, 0.04402653, -0.06980372, 0.018317774, -0.008542972, 0.07094431, 0.025982497, -0.020108491, -0.02424881, -0.030750137, -0.005463396, -0.01594536, 0.020051463, -0.019389924, 0.07395545, 0.034263134, 0.009552388, -0.03652149, 0.04443714, 0.019081965, 0.0064271893, 0.039281704, 0.03257507, 0.041585684, 0.020348014, -0.0018805374, -0.024362868, 0.048451997, 0.010248145, -0.0205191, -0.004958688, -0.0075335554, 0.011713794, 0.011736606, 0.0073567647, -0.021306103, 0.025663134, 0.008177985, -0.028560216, -0.010573211, -0.026780905, 0.027168704, -0.026780905, 0.0066267913, 0.022572152, 0.012170028, 0.022252789, 0.04482494, 0.0073624677, -0.0010635944, -0.007647614, -0.0026860747, -0.041083824, 0.019412735, 0.023632895, -0.0117023885, -0.07162866, -0.008120956, 0.06583449, -0.036453057, -0.0016738066, 0.027488068, -0.08248702, -0.013185148, 0.031388864, -0.020336607, -0.001170524, -0.026758093, -0.06314272, 0.04347905, 0.021773743, 0.047220167, 0.02507003, -0.025024407, 0.039988864, -0.024499739, 0.016150665, 0.01586552, -0.011080771, 0.01578568, -0.011673874, -0.00756207, -0.0075107436, -0.035654645, -0.027305573, -0.03567746, -0.0030909819, 0.03090982, -0.015911143, 0.062139, -0.042703453, 0.041905046, -0.010111274, 0.028491782, -0.0022326927, 0.031799473, -0.0431825, -0.0373199, 0.03893953, -0.010162601, 0.035107166, -0.021990454, 0.0018092509, 0.034628123, 0.011884882, 0.034924675, 0.017530771, -0.0021186343, -0.0031964858, 0.027853055, -0.052649345, -0.0028300732, -0.018842444, -0.025366582, 0.011736606, 0.01539788, -0.017405307, -0.027716184, -0.006809285, -0.045053057, 8.448562e-06, 0.046855178, 0.08828118, -0.033715654, -0.031776663, -0.030978253, -0.027624937, -0.02712308, 0.013994962, 0.05137189, -0.002040219, -0.009837534, -0.033578783, -0.041882236, -0.025800003, -0.033168174, -0.015409286, -0.0053379317, -0.053744305, -0.005221022, -0.014177456, -0.0055061677, 0.007961274, -0.03175385, -0.03706897, 0.07231301, -0.017872946, -0.000619836, -0.0045965523, -0.020188332, 0.032940056, 0.02399788, 0.008474537, -0.029997353, -0.013322018, 0.015956767, 0.02159125, 0.040148545, -0.003954974, -0.03611088, -0.063963935, -0.023883823, 0.021739526, -0.010145492, 0.038574543, 0.046855178, 0.029084885, 0.008696951, -0.0072655184, 0.0123525215, -0.06423768, 0.029883293, -0.027077457, -0.015158358, -0.03148011, -0.035221227, 0.02057613, -0.05871725, 0.061500274, -0.020336607, 0.05424616, -0.015968172, 0.008423211, -0.014234485, -0.0061192317, 0.008537269, 0.0012147217, -0.014565254, 0.0019689326, 0.021636873, 0.009056235, 0.024476927, 0.019321488, -0.018351993, -0.028583027, -0.035905574, -0.008913661, -0.020952523, 0.005600266, -0.018500268, 0.006911937, -0.018397616, -0.007887136, -0.0073168445, 0.04744828, -0.029221755, -0.0075848815, 0.03759364, 0.007761672, -0.005574603, 0.032392576, -0.008582893, -0.0107271895, 0.027168704, -0.0025549075, -0.014371355, 0.027351197, 0.028491782, 0.013652787, -0.052512474, 0.026780905, 0.012341116, 0.023883823, 0.0490451, 0.007493635, -0.005537534, 0.003507295, -0.025868438, 0.020188332, -0.032232895, -0.033168174, 0.0021500003, -0.0044311676, 0.02630186, -0.006712335, 0.011445758, 0.016458623, 0.017770294, -0.008497349, -0.015500532, -0.014953053, -0.0044283164, 0.02282308, 0.01430292, 0.047174543, -0.016515652, 0.039669503, -0.020005839, 0.028377723, -0.029632365, 0.028674275, 0.0113773225, 0.01926446, -0.00980902, -0.0008468834, -0.004818966, 0.0073852795, -0.0076761283, -0.03893953, -0.024066316, -0.05082441, 0.04295438, -0.011325996, 0.028833956, 0.008349073, 0.02397507, -0.042566583, 0.020735811, 0.021773743, -0.029084885, 0.006022282, 0.0076818313, -0.008702653, -0.024020692, 0.0279443, -0.0011370194, 0.034628123, 0.03597401, 0.020747218, -0.024705043, -0.039144833, -0.032529447, -0.010601725, -0.019275865, -0.021933425, 0.014679313, -0.004821818, 0.02372414, -0.031137936, 0.020610347, 0.0015440652, 0.008987799, -0.003974934, -0.003983489, -0.016732363, 0.0036840853, -0.05369868, -0.004836075, -0.030841384, 0.0008568635, 0.008377587, 0.021728119, 0.044094965, 0.03259788, -0.0056458893, 0.0021257629, -0.03312255, -0.0044539794, -0.061089665, 0.0030225469, 0.0063644573, 0.005035677, 0.041494437, 0.025389394, 0.011713794, 0.00092743716, 0.013937933, -0.0063758628, -0.01498727, -0.040216982, -0.017770294, -0.020382231, -0.051052526, 0.0124893915, -0.00080696295, 0.022241382, 0.039281704, -0.023746952, -0.013926527, -0.059903458, 0.03134324, -0.010755705, -0.020108491, 0.0279443, -0.03884828, -0.018682761, 0.024590984, -0.013504511, -0.008936473, 0.017656235, -0.016937668, -0.020587536, 0.0059880647, -0.009204511, 0.015922548, -0.0076076933, 0.028902391, -0.00783581, -0.032096025, 0.005226725, -0.0097691, 0.014565254, -0.0022284153, 0.02213873, -0.007927056, -0.018123874, 0.013128119, 0.03544934, -0.008491646, 0.017850135, 0.0023082562, -0.007864324, -0.028993638, 0.038620163, 0.02534377, -0.019572416, 0.037662074, 0.014724935, -0.050185684, -0.0055546425, -0.010698675, -0.024590984, 0.0042315656, 0.035358094, 0.01045345, 0.05036818, -0.0022654843, -0.002968369, 0.03132043, 0.026119366, 0.020473478, -0.017496554, 0.03855173, -0.013036872, 0.020382231, 0.011303185, -0.008657031, -0.031525735, 0.0026989062, -0.004895956, -0.024682231, -0.007727455, 0.020040056, 0.05712043, -0.02233263, -0.0046649873, 0.016892046, -0.0662451, -0.008508755, 0.027989924, -0.0016695294, -0.019994432, -0.011525598, 0.025594698, -0.022754645, -0.0076761283, -0.010761407, -0.0009039126, -0.008394696, 0.051006902, 0.016789392, 0.011628251, 0.049546957, 0.0046279184, -0.0052067647, 0.010881169, 0.025549075, -0.0047163134, 0.00975199, -0.03118356, -0.026461542, 0.028719898, -0.043136876, 0.011565519, 0.022515122, 0.02268621, -0.017359683, 0.0191504, 0.007989789, 0.017154379, -0.027351197, 0.008668437, 0.03132043, -0.060040325, -0.015876925, 0.007134351, -0.016458623, 0.008286341, 0.002442275, 0.03950982, -0.009826128, -0.027054645, 0.023165256, -0.0148389945, 0.014656501, 0.023142444, -0.011953318, 0.013025466, 0.014747747, -0.013572946, -0.012124405, -0.042133164, 0.018580109, -0.01315093, -0.024568174, 0.039601065, -0.039897617, 0.04019417, -0.023085414, 0.0009531003, -0.057439797, -0.011582628, -0.016937668, 0.024590984, 0.0026675402, -0.047220167, -0.0051183696, 0.023199473, 0.019561011, -0.003892242, 0.010419232, 0.116248295, -0.019218836, -0.027488068, -0.0019646555, -0.0042629316], [0.0052235797, -0.016188392, -0.025906133, 0.04298865, 0.011547171, 0.0059059393, -0.009864802, 0.027953211, -0.0011088343, -0.0022235508, -0.0123177655, 0.015223676, 0.00915303, -0.039365087, -0.038118016, 0.0133766, -0.06927126, 0.03275326, -0.0032470901, -0.051388733, -0.029929701, -0.04814164, -0.05472994, -0.00055441714, 0.040612157, -0.013270716, -0.008658907, 0.01991784, -0.031670894, 0.028988516, 0.03124736, -0.0007911841, 0.04425925, 0.0136001315, 0.02316493, -0.01369425, 0.027764974, 0.0159178, -0.024000231, 0.020953143, -0.016117802, -0.016847221, -0.0017235461, -0.02668261, -0.02052961, 0.011747172, -0.00942362, -0.0136001315, -0.010753045, -0.05261227, -0.010347159, -0.027223792, 0.025976721, -0.025294362, -0.0384239, 0.013776603, 0.01816488, -0.084989056, 0.048706353, 0.00048088699, -0.04381219, 0.032376785, 0.059435867, 0.027529677, -0.04112981, -0.01852959, 0.018682534, 0.005717702, 0.034306213, 0.048612233, -0.013858957, 0.040000387, 0.0074883075, -0.03978862, -0.0043882774, -0.021906095, 0.06710653, -0.015541326, -0.027906151, -0.008423611, 0.03329444, -0.021376677, -0.0106118675, -0.008894203, 0.018670768, -0.033341497, 0.020906083, -0.09985979, -0.041506283, -0.009441268, 0.00554123, 0.00415004, 0.03456504, 0.0267532, -0.029600285, 0.024823768, 0.03797684, 0.014941321, -0.039435674, -0.006676535, -0.014917791, -0.028000271, -0.051765207, -0.08630671, 0.019117832, 0.023870818, 0.028870868, -0.0029676757, -0.04705928, -0.024000231, 0.021000203, -0.036941532, -0.011135401, 0.025294362, -0.003505916, 0.0004132393, -0.043388654, -0.03703565, -0.030164996, 0.019682543, -0.08536553, -0.062730014, 0.051906385, 0.044094544, -0.018682534, 0.023682581, -0.005667702, 0.035341516, 0.0059088804, 0.041153338, -0.033459146, 0.0346121, 0.043223947, 0.01335307, 0.088094965, 0.03258855, 0.051388733, -0.03578858, -0.05030637, -0.007188305, -0.07675368, -0.007394189, 0.030494412, 0.053035807, -0.026517903, -0.020517845, -0.018282529, -0.02668261, -0.044635724, -0.033341497, -0.0019485482, -0.03129442, -0.023906114, 0.011958939, 0.039459206, 0.0017647229, 0.026941437, 0.058212325, -0.009253031, -0.005141226, 0.0481887, -0.045553382, -0.017317815, 0.044847492, -0.015447208, -0.077083096, 0.045671027, 0.023741405, -0.036894474, 0.03771801, 0.0027470854, -0.056941725, 0.003805919, -0.008105961, -0.028517922, 0.05741232, 0.049647536, -0.00827655, -0.019200185, -0.07741251, -0.030353233, 0.057035845, 0.053647578, -0.02607084, -0.013294246, 0.03400033, 0.006047117, 0.0017044282, 0.024635531, -0.035953287, -0.016400158, -0.02743556, 0.0042470996, -0.0145883765, -0.009864802, -0.010123627, 0.0030235585, -0.023106106, -0.0011485405, -0.0031500305, -0.009841272, -0.051953442, -0.0009551563, -0.02807086, -0.05030637, 0.016458983, 0.020353138, -0.042847473, 0.0286591, 0.019141361, 0.03527093, 0.033576794, 0.015553092, -0.018541355, -0.018776651, 0.0044618077, -0.034776807, -0.025953192, -0.009894213, -0.039294496, 0.08225962, -0.029412048, -0.006241237, -0.0087942025, 0.018494297, 0.008882439, 0.033647384, -0.010735398, 0.025035536, 0.040612157, -0.00895891, -0.043059237, -0.03174148, 0.06418885, -0.09675387, -0.021717858, -0.0027206144, 0.0065412396, 0.0664477, 0.001986784, 0.011923645, 0.02934146, -0.037506245, -0.0083412565, 0.0573182, 0.070635974, 0.01921195, 0.0048735766, -0.011017754, -0.02672967, 0.0033765032, -0.00043493067, 0.053788755, 0.04367101, -0.003973568, 0.05863586, 0.007611838, -0.014270726, -0.0063294726, 0.022011977, -0.030235587, 0.04360042, 0.014082489, 0.09444797, -0.048706353, -0.026353195, 0.028847337, -0.08616554, -0.05863586, -0.02927087, 0.07364777, -0.02602378, -0.0037353302, 0.023682581, 0.03722389, -0.010988342, 0.06875361, 0.015929565, -0.031365007, 0.043859247, -0.007541249, 0.029623816, 0.035506226, 0.002016196, 0.038870964, 0.022494335, -0.025035536, -0.014858967, -0.07680074, 0.011688348, -0.01174129, -0.03265914, 0.042141583, 0.032894436, 0.06056529, 0.018564885, 0.036659177, 0.010058921, -0.020282548, -0.00219708, -0.026329666, -0.0041559227, -0.048659295, -0.03922391, -0.021023732, 0.04614162, 0.046494566, 0.09844801, -0.047647517, -0.006129471, 0.060282934, -0.0021073732, -0.012729535, -0.024564942, 0.021494325, -0.023200223, 0.025506128, -0.010788339, 0.05157697, -0.016835457, -0.0067706537, -0.043365125, -0.099765666, 0.038070954, 0.046588685, 0.021588443, 0.012517768, -0.066824175, -0.010488337, 0.008758908, -0.041506283, -0.0103706885, -0.012800124, -0.025106125, -0.06673005, -0.07543602, -0.013341305, -0.013458953, 0.007376542, -0.016741337, -0.03578858, -0.0062530017, -0.0055588773, -0.06508298, 0.006794183, 0.0020720789, -0.026894378, 0.0039970973, 0.04623574, -0.010117745, 0.0013632484, 0.043129828, 0.049082827, 0.01664722, -0.0050324015, 0.0010941282, -0.03722389, -0.010600102, -0.01725899, 0.023094341, 0.04171805, -0.06903596, 0.026564963, 0.043318067, -0.018506061, -0.08560082, -0.046188682, 0.0012264824, -0.005497112, 0.010817751, -0.070777155, 0.033765033, -0.0346121, -0.026117899, 0.008311845, -0.030776767, 0.039200377, -0.010117745, -0.04828282, 0.0103001, 0.0024029643, -0.0115177585, -0.011647171, 0.018070763, -0.02468259, 0.028729688, -0.034376804, -0.003617682, -0.0049912245, 0.024235528, 0.0050500487, 0.012094234, 0.00042022465, -0.015506032, 0.010094215, 0.05854174, -0.0040559215, -0.006229472, 0.015882507, 0.03788272, -0.01105893, -0.029717933, 0.0050471076, 0.007970666, 0.058824096, 0.004305924, 0.008182432, -0.005855939, -0.005317698, 0.031553246, -0.00334415, 0.016447218, -0.0036382703, -0.0022411982, -0.0036147407, 0.014658965, -0.07816546, 0.025623776, 0.0146942595, 0.0034382686, 0.05792997, -0.051106375, -0.03830625, 0.037506245, -0.025482599, 0.056377016, -0.03767095, 0.0024691415, 0.014635435, -0.05534171, -0.025576718, 0.016117802, 0.023541404, -0.004217688, -0.009441268, -0.075812496, -0.034800336, -0.018094292, -0.05209462, 0.019317834, 0.04030627, -0.037906248, 0.025929661, 0.005452994, -0.027482618, 0.0075471317, -0.05228286, 0.0030676767, 0.001894136, -0.015929565, -0.035506226, -0.03392974, -0.07477719, -0.024517884, 0.040518038, -0.044471018, 0.010682456, 0.021647267, 0.016823692, -0.06588299, 0.032612078, 0.027082615, 0.065412395, -0.031459127, 0.011305992, 0.0030353235, -0.010753045, 0.046471037, 9.853036e-05, 0.019329598, -0.02018843, -0.0042559234, -0.022259038, -0.0081530195, -0.002389729, -0.034282684, -0.048423998, -0.025106125, 0.045341615, 0.011664818, 0.012164824, -0.06447121, 0.00717654, 0.024988476, 0.017670758, -0.017706053, 0.0520005, 0.014235431, 0.050353426, -0.0075000725, -0.02868263, 0.051671088, -0.0057824086, -0.0020073722, 0.0148001425, -0.014023664, -0.02248257, -0.032894436, 0.022317862, 0.023941407, -0.0152001465, 0.07487131, 0.018647239, 0.041529812, -0.0048706355, -0.004132393, -0.029623816, -0.008905969, 0.008176549, -0.046706334, -0.021988448, -0.026964966, -0.04291806, -0.00052426977, -0.02670614, -0.031153241, -0.011270697, 0.051012255, 0.015729563, 0.02252963, -0.009953037, -0.04828282, -0.019270774, -0.03797684, -0.025835544, -0.018553121, 0.04308277, -0.0043000416, -0.013682485, -0.059577044, -0.009717741, -0.018200176, -0.01887077, -0.017223695, -0.011711878, 0.018706063, 0.026870847, 0.039953325, -0.03583564, 0.0058235857, -0.0077000745, 0.05209462, 0.020611964, 0.009988331, -0.0013463366, 0.031529717, 0.03988274, -0.0075883083, -0.021741387, 0.043788657, -0.029529696, 0.053741693, 0.025223773, 0.050776962, 0.04581221, 0.0121059995, -0.04614162, -0.04748281, -0.021694327, -0.014176607, -0.00021709768, -0.044423956, 0.095295034, 0.05143579, -0.006829478, -0.051953442, 0.04505926, -0.0033117966, 0.0076883095, 0.0052441685, 0.012306001, 0.07769487, 0.005911822, -0.007353012, -0.013494248, 0.049647536, 0.009805977, -0.02677673, 0.02018843, -0.010141274, 0.0030264999, -0.007741251, 0.008129491, -0.027717914, 0.020000193, 0.0331062, -0.01364719, -0.051671088, -0.03058853, 0.044706315, 0.00051360787, 0.009253031, 0.028823808, -0.0021000202, 0.020929614, 0.007164775, 0.019588424, 0.01398837, 0.007776546, -0.009247148, -0.0065353573, -0.011294227, 0.012435414, 0.010847163, -0.03402386, -0.006629476, 0.032282665, -0.03901214, -0.0025250243, 0.036729768, -0.08908321, -0.007782428, 0.027482618, -0.0220708, 0.009858918, -0.016729573, -0.01764723, 0.06833007, -0.0009014793, 0.046588685, 0.020341372, -0.01930607, 0.051106375, -0.03722389, -0.009053028, 0.0071059507, -0.022917869, 0.009635387, -0.0061765304, 0.0076294853, -0.011788349, -0.019200185, -0.022953162, -0.038141545, 0.002275022, 0.016023684, -0.017376639, 0.07435366, -0.018400177, 0.015164852, 0.018294293, 0.034070916, 0.025953192, 0.023647288, -0.032070898, -0.030023819, 0.004747105, 0.009341267, 0.0286591, -0.009541268, -0.0007764781, 0.022859044, 0.0009845684, 0.051106375, 0.009705976, -0.016482512, -0.007382424, -0.0019191361, -0.039506264, -0.016988399, -0.056988787, -0.038282722, 0.026306136, 0.002722085, -0.016811928, -0.018317824, -0.03849449, -0.0346121, -0.017270755, 0.021717858, 0.08720084, -0.025106125, -0.061506476, -0.020564904, -0.017223695, -0.020517845, 0.0065530045, 0.030823827, 0.00034154742, -0.031035593, -0.04496514, -0.010194216, -0.021635503, -0.012282471, -0.012929536, -0.003817684, -0.020988438, 0.007411836, -0.030141467, 0.008058901, 0.0076883095, -0.026329666, -0.030306175, 0.050494604, -0.010000097, -0.00876479, 0.0057941736, -0.029764993, 0.027200263, 0.016270746, 0.0034412097, -0.030965004, -0.03832978, -0.00915303, 0.05750644, 0.018835476, -0.012270707, -0.031788543, -0.054400526, -0.01887077, 0.046635743, 0.025788484, 0.025553187, 0.053741693, 0.034988575, 0.02480024, 0.0010022155, -0.026376724, -0.07548308, 0.041435692, -0.007164775, -0.016411923, -0.032165017, -0.020435492, 0.03131795, -0.04122393, 0.021811975, -0.013364835, 0.047412224, -0.015176617, 0.017717818, -0.0057529965, -0.010523631, -0.0038118016, 0.011776584, 0.023729641, -0.01694134, 0.0013735427, 0.016211921, 0.025223773, 0.008200079, -0.028188508, -0.035341516, -0.04571809, -0.012447179, -0.0013110421, 0.04552985, -0.020859025, 0.008270668, -0.011853056, -0.0074294833, -0.013776603, 0.030541472, -0.0346121, -0.014611905, 0.0377886, -0.0044382783, 0.0042823944, 0.002551495, -0.007917724, -0.021176675, 0.020494316, -0.009829506, -0.014435434, 0.029506167, 0.0025897308, -0.0016294275, -0.04432984, 0.016741337, 0.030400293, 0.054212287, 0.033576794, 0.026894378, -0.016953105, -0.0010529513, -0.01303542, 0.002094138, -0.015658975, -0.04360042, -0.005817703, 0.021306088, 0.0017588405, 0.0011639819, -0.026353195, 0.031482656, -0.0009507445, -0.0069235964, -0.009476562, -0.00390592, 0.016741337, 0.03392974, 0.020247255, 0.034800336, 0.014953085, 0.03265914, 0.00013198657, 0.04884753, -0.042070996, 0.019141361, 0.008947145, -0.0023661994, -0.021659033, -0.013553072, 0.026376724, -0.0028720866, -0.0026897318, -0.014117783, -0.003617682, -0.026635552, 0.021306088, 0.0450122, 0.00844714, 0.020576669, 0.013411894, -0.018459002, 0.03463563, -0.00081471377, -0.031600304, -0.017400168, 0.019635484, 0.0020573728, -0.022470806, 0.021682562, -0.0020103136, 0.042070996, 0.042871002, 0.042094525, -0.0146472, -0.027553206, -0.039482735, -0.008382434, -0.031576775, -0.00011976218, 0.02307081, 0.007423601, 0.02052961, -0.02870616, 0.0280238, 0.031788543, -0.018929595, 0.009582445, -0.005714761, -0.015223676, -0.010458925, -0.053082865, -0.0034676804, 0.006300061, 0.012153058, -0.009800094, 0.035953287, 0.01135305, 0.053129926, 0.020082546, 0.013094244, -0.03663565, 0.0053647575, -0.04625927, 0.019859016, 0.006935361, 0.0044323956, 0.026188487, 0.03830625, 0.011782466, -0.028212037, -0.012188353, -0.0096236225, -0.011258932, -0.051106375, -0.040894512, -0.037106242, -0.034870926, 0.010429513, -0.004526514, 0.040776864, 0.024400236, -0.038353313, 0.012117764, -0.04185923, 0.020976674, 0.0025735542, -0.0048618116, 0.0047765165, -0.058212325, -0.025788484, -0.00051397557, -0.03322385, -0.010382453, -0.020564904, -0.014129548, -4.2601514e-05, -0.019423718, -0.02936499, 0.035412107, 0.013529542, 0.035553284, 0.0055206413, -0.015953096, 0.0051618144, -0.008494199, -0.003805919, 0.0049471064, -0.012541298, 0.01437661, -0.02091785, -0.0012080999, 0.03663565, -0.014494258, 0.025294362, 0.01020598, -0.023576697, -0.035459165, 0.033059143, 0.053035807, -0.04750634, 0.032988552, -0.021247264, -0.058259387, -0.024494354, 0.016458983, -0.03527093, -0.0008463317, 0.00016654572, 0.032235604, 0.04094157, -0.013470719, 0.033623856, 0.02545907, 0.0324709, -0.0032765022, -0.04169452, 0.025153184, 0.015823683, 0.021023732, 0.0011213344, -0.0006698594, -0.034165036, 0.006188295, 0.0024367883, -0.03705918, -0.013164833, 0.020082546, 0.06762418, -0.025435539, -0.0079589, 0.0013529542, -0.04675339, -0.027717914, 0.031623833, 0.015788388, -0.0050324015, -0.018776651, 0.021294324, -0.04569456, 0.0027500265, -0.007911841, -0.0027309088, 0.014070724, 0.041929815, -0.0050882846, -0.004720634, 0.026470844, -0.0060088816, -0.0048029874, 0.011841291, 0.028988516, 0.00085368473, 0.03127089, -0.025576718, -0.00075662497, 0.023506109, -0.04936518, -0.005855939, 0.021070791, 0.04352983, 0.00844714, -0.0032059134, 0.015847212, -0.010864811, -0.030917946, 0.028400274, 0.017223695, -0.041318044, -0.017858995, -0.01991784, -0.009329502, 0.00683536, -0.010753045, 0.031647366, 0.039388616, 0.0017103106, 0.008258903, -0.027200263, 0.027553206, 0.029106162, -0.013129539, 0.015400149, 0.025694367, 0.028729688, 0.0010022155, -0.017788406, 0.005302992, 0.0011897173, -0.047082808, 0.022988457, -0.067200646, 0.02041196, 0.0072294814, -0.021035498, -0.044635724, -0.0036470941, 0.026964966, 0.019929605, -0.0025029653, -0.012870712, 0.01721193, 0.0371533, 0.020953143, -0.028494393, 0.033035614, 0.11990704, 0.031717952, -0.026564963, -0.0049853423, 0.000541917], [0.016744407, -0.007290164, -0.029813508, 0.010330755, -0.007302254, 0.029039757, -0.02480832, 0.049906794, 0.0031796237, 0.011872208, -0.020431804, -0.0069395592, -0.01847325, -0.01237998, -0.024010392, 0.0076528587, -0.024228008, 0.009321255, 0.02959589, -0.031143388, -0.025291912, -0.054694366, -0.037260838, -0.00033152566, 0.017614875, -0.004693874, -0.016913664, 0.01790503, -0.025775505, 0.012041465, 0.05290507, 0.023260823, 0.01789294, -0.015378256, 0.015559604, -0.019911941, 0.014120915, 0.0522764, -0.03024874, 0.031095028, -0.020008659, 0.004884289, 0.02686359, -0.007967195, 0.026645973, -0.01790503, -0.023514709, 0.0027020758, 0.004334202, -0.04661836, -0.0150518315, -0.058998343, -0.026936129, -0.045723714, -0.0022547522, 0.009037144, 0.07669785, -0.038010407, 0.07795519, -0.033948228, -0.05367882, 0.016055286, 0.03781697, -0.017228, -0.045119226, -0.03165116, 0.017228, 0.011473243, 0.027709877, 0.03353717, -0.029136477, 0.05246984, -0.032666706, -0.019537156, -0.016442161, -0.05711233, 0.049181405, 0.01784458, -0.008777212, -0.014048376, 0.050777264, -0.006341113, -0.0032068258, -0.018848035, 0.012742675, -0.052711636, 0.028749602, -0.11848028, -0.02206393, 0.03776861, -0.024905039, 0.019138193, -0.0019268157, -0.009103638, -0.027274644, 0.005658038, -0.026452536, 0.04079107, -0.016671868, -0.012911933, -0.021012114, -0.021531977, -0.08032479, -0.074521676, 0.050728902, 0.020081198, 0.041008685, -0.0021429213, -0.030345459, -0.029982764, -0.00019797088, -0.054017335, -0.049350664, 0.0029604957, -0.004863132, -0.0020446915, 0.0054646004, -0.048746172, -0.03520557, -0.0034486223, -0.046570003, -0.044998325, 0.04461145, 0.029136477, -0.0032310055, 0.023683965, -0.020758228, 0.029354094, -0.023260823, -0.0071148616, 0.0054887803, 0.037405916, 0.039557904, 0.074183166, 0.054646008, 0.02345426, 0.08346815, -0.01234371, -0.029716788, 0.035471544, -0.034335103, 0.010941291, -0.031481903, 0.020335084, -0.040500913, -0.020721959, 0.011884297, 0.022329906, -0.04132302, -0.0079007, -0.03227983, -0.053533744, -0.00064982806, 0.044297118, 0.053437024, -0.04279798, 0.035664983, 0.039461188, 0.0015331409, 0.04245946, 0.037623532, -0.040017318, -0.0075863646, 0.064656384, 0.02485668, -0.04746465, 0.03090159, -0.020528521, -0.03169952, 0.03793787, 0.008118317, -0.0006063802, 0.0041498323, 0.016260814, -0.01593439, 0.0060660695, 0.052711636, -0.010052689, -0.010977561, -0.041081224, -0.013347166, 0.0317237, 0.016635599, -0.026428357, 0.033924047, 0.045506097, -0.0023937852, 0.0037780702, 0.027274644, -0.04202423, 0.018787587, -0.015172729, -0.033948228, -0.007967195, -0.008571685, -0.044466373, 0.022257367, -0.051405933, 0.0067098527, 0.015172729, -0.026259098, -0.022922307, 0.009158042, -0.023792773, -0.0068126163, 0.03844564, 0.03530229, 0.036221113, 0.054646008, 0.041081224, 0.006673583, 0.04245946, 0.020274635, 0.0035664982, -0.02480832, 0.010892931, -0.040500913, 0.017493976, -0.03443182, -0.022849768, 0.046521645, 0.018086378, 0.01792921, -0.031747878, 0.027395543, -0.02207602, 0.012887753, -0.010868752, 0.04057345, 0.01720382, -0.015112281, -0.047271214, -0.027419722, 0.0035332511, -0.0813887, -0.0040259114, -0.008614, -0.02691195, 0.0012981449, -0.03024874, -0.032158934, 0.014205543, -0.009931791, -0.021737505, 0.022414535, 0.038494002, 0.0020386467, 0.016115736, -0.009158042, 0.014834215, 0.0148221245, -0.0386149, 0.051260855, 0.043910243, 0.010252171, 0.036704708, 0.05213132, -0.052614916, 0.025678787, 0.03518139, 0.0060146875, 0.009460287, -0.022861857, 0.04744047, 0.02473578, -0.03636619, 0.020746138, -0.00040274227, -0.010294486, 0.029837687, 0.085934475, -0.036680527, 0.039751343, 0.0087046735, 0.017868761, -0.015728861, 0.06601044, 0.06127123, 0.0026386043, 0.03370643, 0.012500878, 0.012815214, 0.06808989, 0.015329897, -0.014882574, -0.025678787, -0.003451645, -0.037478454, -0.03786533, -0.0030043214, -0.012240947, 0.0033760834, 0.07727816, -0.0028985355, 0.051309213, 0.048770353, 0.004210281, 0.020383444, -0.021217642, 0.019005204, -0.0019585516, 0.019573426, -0.055516474, -0.029692609, -0.047996603, 0.06983083, 0.00085535506, 0.051599372, -0.040670168, -0.029789327, 0.093526885, 0.00010191344, -0.036027677, -0.038203847, -0.009182221, -0.018944755, 0.017228, 0.027274644, -0.0044248756, -0.04828676, -0.032086395, -0.012621776, -0.097492345, 0.014628688, 0.02135063, 0.003623925, 0.00429491, -0.0073082987, -0.013153729, -0.013274627, -0.01661142, -0.007852341, 0.011158908, 0.027298823, -0.043063954, -0.10232827, -0.052856714, -0.058804907, -0.028725423, -0.014036286, -0.048262578, 0.0025690878, -0.025896404, 0.015257359, 0.026621792, 0.016006928, -0.024905039, 0.006395517, 0.030417997, 0.01731263, 0.0014258437, 0.015015562, 0.012246992, 0.047682267, 0.0030587255, -0.0468118, -0.011878252, -0.000679297, -0.03784115, 0.014882574, 0.07123324, -0.059433576, -0.015559604, 0.07278074, 0.011999151, -0.043523367, 0.016744407, -0.0019373944, -0.01797757, -0.010475833, -0.07916417, 0.038590718, 0.016393801, -0.014846304, -0.03298104, -0.008843707, 0.0767462, 0.0148221245, -0.08849751, 0.02485668, 0.0002965785, -0.0129361125, -0.028459447, 0.016937844, 0.034721974, 0.0522764, -0.014737496, -0.004512527, 0.02475996, -0.0025902449, -0.027008668, 0.058321312, 0.013661502, -0.0073929275, 0.02144735, 0.035979316, -0.01861833, 0.03298104, 0.0248325, 0.0014477564, -0.022849768, 0.029160656, -0.011666681, -0.04971336, 0.030829052, 0.0008394872, 0.028120931, -0.028797962, 0.007151131, 0.053920615, -0.035519905, 0.025291912, 0.025799686, 0.01784458, 0.04129884, 0.023272911, 0.004829885, 0.038977593, 0.0046334253, 0.025267733, 0.0044671902, -0.005295343, -0.026355818, 0.018412802, -0.054259133, 0.019742683, -0.026694331, 0.009472378, -6.216106e-06, 0.018678779, 0.022257367, 0.0045367065, -0.004757346, -0.052518196, 0.027371362, 0.0056761727, 0.009829028, -0.010536282, -0.028024213, -0.01850952, -0.007646814, -0.032763425, 0.023804864, 0.007658904, -0.04956828, -0.0019797087, -0.061077792, -0.011944747, 0.038687438, -0.039654624, -0.05169609, 0.008263395, -0.07162012, -0.031578623, -0.0006683406, -0.012295351, 0.03493959, 0.018291904, 0.023176193, -0.09725054, -0.004488347, -0.009532827, 0.04540938, -0.023599338, -0.012694316, -0.00089238014, -0.020153737, 0.01646634, 0.019404167, 0.019005204, -0.0302971, -0.014556148, -0.022813499, -0.007386883, -0.0035725432, -0.057015613, -0.0058031157, 0.0031796237, 0.017578606, 0.010705539, -0.042532, -0.025195194, -0.0041347197, 0.029474992, 0.010959426, -0.04536102, 0.034915414, 0.006486191, 0.08066331, -0.0025418855, -0.00055877655, -0.004300955, -0.007084637, -0.017481886, -0.01726427, -0.071088165, -0.029982764, -0.041492276, 0.01034889, 0.0064499215, 0.05498452, 0.039074313, -0.021967212, 0.05363046, 0.012984471, -0.071088165, -0.031747878, -0.033924047, 0.004234461, 0.00010909177, -0.011436974, 0.032594167, -0.056145143, 0.003439555, -0.013818669, -0.030466357, -0.018533701, 0.028797962, 0.023611426, 0.041540638, -0.009629545, 0.00567315, -0.029740969, -0.013129549, -0.020431804, 0.0075259157, -0.008879976, 0.020552702, 0.027274644, -0.009031099, 0.01923491, -0.018183095, -0.020540612, -0.022583792, -0.01861833, -0.028338548, -0.003844564, 0.036124397, -0.0076105446, 0.0038596764, -0.029886046, 0.037599355, 0.013347166, 0.015172729, -0.0131658185, 0.079647765, 0.025316093, -0.02135063, -0.033271197, 0.029716788, -0.030176202, 0.04054927, 0.010699495, 0.0012180498, 0.023913672, -0.06470474, 6.531339e-05, -0.027758237, 0.02060106, -0.01582558, -0.041806612, 0.017433526, 0.08864259, 0.041564815, -0.03438346, -0.06064256, 0.034818694, -0.014048376, -0.021266, -0.007797937, -0.0013903298, 0.069202155, 0.0020658488, -0.032231472, -0.021955121, 0.052518196, 0.026355818, -0.03518139, -0.018243546, 0.005246984, -0.005630836, -0.016841125, -0.0017031541, -0.032884322, 0.032739244, 0.03387569, 0.0026023346, -0.05711233, -0.04202423, 0.036172755, 0.006462011, 0.026089841, -0.0059572607, -0.053485382, 0.008124362, 0.020274635, -0.0031433543, 0.0145682385, -0.0016109691, -0.011056145, -0.025316093, -0.039678805, 0.01731263, 0.014616597, -0.034818694, -0.015341987, 0.015511245, -0.06610716, 0.033972405, 0.022196917, -0.034093305, 0.0051260856, 0.04553028, -0.019682234, 0.011086369, -0.052034605, -0.0117633995, 0.054646008, -0.0033911958, 0.042507824, 0.057692643, 0.00065360614, 0.02957171, -0.02966843, 0.043934423, -0.0014560682, 0.000798684, -0.0018467207, 0.004279798, -0.020371353, -0.022184828, -0.039485365, -0.021664966, -0.001928327, 0.018400712, 0.04468399, -0.029982764, 0.021024205, 0.028435268, 0.011267716, 0.051260855, 0.027298823, -0.0005557541, 0.1393715, -0.03648709, -0.013214178, 0.0043644267, 0.019367898, 0.023635607, -0.041564815, -0.034335103, 0.009629545, -0.011787578, 0.07210371, -0.0061204736, -0.020576881, -0.015221089, 0.011231447, 0.009526782, 0.0274439, -0.019053563, -0.014024196, 0.030587256, 0.047754806, -0.0074050175, -0.023853224, -0.014725406, -0.020419713, 0.013576873, 0.010052689, 0.083613224, -0.05421077, -0.043015596, -0.018727139, 0.0017923164, -0.027008668, 0.01377031, 0.016333353, -0.01918655, -0.021253912, -0.01797757, -0.04613477, -0.009260805, -0.014616597, -0.032811783, -0.022088109, -0.031336825, -0.018835947, 0.00621417, -0.0034879143, -0.011962881, -0.03924357, 0.018993113, 0.010802258, 0.027685698, 0.0008039733, -0.012682226, -0.0289914, 0.029160656, -0.015499155, -0.008184811, -0.03970298, -0.03595514, -0.060255684, 0.04120212, 0.04272544, -0.015003472, 0.024481894, -0.046400744, -0.02133854, 0.019500887, 0.019077742, 0.005150265, 0.046594184, 0.013262537, 0.0058152056, 0.006057002, 0.037623532, -0.09299493, 0.021145103, 0.056532018, -0.004016844, 0.017639054, -0.036970682, 0.02060106, -0.011642501, 0.011974971, -0.024203828, 0.0522764, -0.024203828, -0.0010661713, -0.03102249, -0.02611402, 0.007435242, 0.012005196, 0.004712009, 0.018195186, 0.013371346, 0.02339381, 0.02405875, 0.030925771, -0.021181373, -0.018376533, -0.08124362, 5.600989e-05, 0.011122638, 0.049278125, -0.011080324, -0.003279365, -0.031143388, -0.0065889545, -0.051405933, 0.049036328, -0.020274635, 0.0067279874, -0.009822982, 0.019404167, 0.009236625, -0.007078592, -0.02962007, -0.028169291, -0.011328165, -0.003645082, -0.021169282, 0.05580663, 0.006957694, -0.029160656, -0.04260454, 0.033924047, 0.009575141, 0.0317237, 0.060835995, -0.01239207, 0.01201124, -0.019392079, -0.033174478, 0.029354094, -0.015269448, -0.059288498, -0.0199603, 0.0061809225, -0.030853232, 0.002028068, 0.012265127, 0.018872216, 0.024518164, -0.025582068, -0.0386149, -0.0466909, -0.0059935306, 0.03094995, 0.05019695, -0.0068428405, 0.009490512, 0.043160673, -0.03914685, -0.0120958695, -0.043136492, -0.007217625, 0.019440437, -0.018497432, -0.03871162, -0.024131289, 0.030611435, -0.035471544, 0.023659786, 0.016236635, -0.031167567, -0.013274627, 0.012996561, 0.017687414, 0.014169274, -0.0061869677, 0.0077918917, -0.001262631, 0.029426632, -0.0063713375, -0.0076830834, 0.0011931146, 0.02485668, 0.0043644267, -0.037478454, -0.008916246, 0.0010518148, -0.001186314, 0.046424925, -0.0007227448, -0.00029204483, 0.0034607123, 0.015728861, -0.041806612, -0.055613194, -0.01374613, 0.040380012, 0.008674449, 0.039751343, -0.023575157, 0.06857348, 0.009133862, -0.017300539, -0.017953388, 0.0039987094, -0.0071148616, 0.033392094, -0.0043311794, 0.010463743, -0.0032612302, 0.01647843, 0.018582061, 0.033367917, -0.01731263, 0.02819347, 0.047053598, -0.031554442, 0.020770319, -0.0075259157, -0.032666706, 0.023998301, -0.018376533, 0.023297092, -0.0077435323, 0.023333361, 0.022160647, -0.055419754, 0.040863607, 0.010276351, -0.030683974, -0.057595924, -0.0010314131, -0.014664957, -0.045747895, -0.0026386043, 0.01994821, 0.013915388, -0.00026673175, -0.03177206, 0.024445625, 0.01589812, 0.000452235, -0.015644232, 0.01237998, -0.015777221, -0.049229763, 0.0059481934, -0.027806597, -0.05706397, 0.021737505, -0.02952335, -0.068428405, -0.016744407, -0.01646634, -0.0049054464, 0.030442178, -0.018461162, 0.005201647, -0.0012928556, -0.012839394, -0.008837662, -0.010530237, 0.021145103, 0.010554417, -0.019500887, -0.02623492, -0.019863581, -0.016659778, 0.011068234, 0.00586961, -0.018243546, -0.016949933, -0.022571702, -0.025171014, 0.002008422, 0.029112296, -0.047658086, 0.042483643, 0.014713316, -0.004418831, -0.0019041473, 0.040162396, -0.046328206, 0.021749593, 0.021060474, 0.01850952, 0.03776861, -0.03211057, 0.017493976, -0.0053074327, 0.010741809, -0.015281538, -0.03319866, 0.029765148, 0.011473243, 0.03912267, -0.004718054, 0.02548535, -0.01380658, 0.0453852, -0.011170997, -0.05435585, -0.01785667, 0.031578623, 0.07466675, -0.022390354, 0.0088316165, 0.031167567, -0.06702599, -0.0011840472, 0.05213132, 0.02611402, 0.009798802, -0.0062746187, 0.023696056, -0.003908036, -0.011340255, 0.008813482, -0.03094995, 0.018981025, 0.018388623, -0.018376533, 0.011134728, 0.027129566, -0.037333377, 0.024953397, 0.016986202, 0.058176234, 0.017832492, 0.030079482, -0.034842875, 0.019343719, 0.0383731, -0.013963747, -0.008559596, -0.0018724116, 0.012132139, 0.031095028, 0.009538871, 0.0027066094, 0.005041457, -0.067896456, 0.023139924, -0.00150745, -0.041564815, -0.003306567, 0.005546207, -0.035326466, -0.012730585, -0.00620208, -0.007767712, 0.017965479, 0.00023877402, 0.011334211, -0.08898111, -0.03854236, 0.018303994, -0.0009467844, 0.018328173, 0.033319555, 0.0143385315, 0.010270306, -0.019162372, -0.012863573, 0.042266026, -0.018038018, 0.018932665, -0.02468742, 0.023768594, 0.012827303, -0.019404167, 0.0012868107, -0.020830767, 0.0275648, -0.009019009, -0.013492244, -0.01512437, 0.022499163, 0.05145429, 0.017095013, -0.0030300121, 0.008873931, 0.041588996, 0.015402436, -0.050583825, 0.02335754, 0.007997419], [0.003804024, -0.025771184, -0.013292505, 0.04680738, -0.0039550755, 0.009994041, -0.052578148, 0.074329525, 0.015055797, 0.061111, -0.0065229456, 0.0056597963, 0.05173966, -0.02900183, 0.0004620163, -0.005425513, -0.010043364, -0.0060882885, -0.008132104, -0.01736164, -0.036055, -0.03469862, -0.06934792, -0.004408229, 0.03524117, -0.011936128, -0.020789579, 0.014833844, 0.0012739166, -0.0094268285, 0.028286649, 0.034304038, 0.016399845, -0.039458275, -0.021763705, -0.0063996385, -0.008421876, 0.025475247, -0.002960912, 0.01960583, -0.0437247, -0.013341828, 0.025056003, -0.074329525, 0.0057152845, 0.012497175, 0.005154237, 0.0019497935, 0.0015783309, -0.030629484, -0.026165767, 0.004035225, -0.03038287, -0.017053373, -0.0043928158, 0.022700839, 0.04251629, -0.023305044, 0.033786148, -0.0138843795, -0.04300952, 0.014155655, 0.059976574, 0.02308309, -0.052874085, -1.9941072e-05, 0.014735199, 0.005354611, -0.012799277, 0.02393391, -0.015894286, 0.040888637, 0.036301613, -0.0144146, -0.0007764494, -0.023280382, 0.071024895, 0.050802525, -0.0020715594, -0.0059927255, 0.062196102, 0.007188804, 0.017065704, 0.006140694, 0.010524262, -0.019346885, 0.009303521, -0.12133419, -0.0542058, 0.0026865536, -0.03935963, -0.021825358, 0.006788056, -0.0135884425, -0.031665266, -0.0016569392, 0.0007922481, 0.014685876, -0.024686083, -0.010068025, -0.0064859535, -0.039630905, -0.11462628, -0.04007481, 0.03627695, 0.033761486, 0.04320681, 0.0036776343, -0.028163342, -0.06481022, -0.009765923, -0.034427345, -0.04981607, -0.010567419, -0.040814653, 0.010937341, -0.0045284536, -0.03450133, -0.007854663, 0.007534064, -0.062048133, -0.037953928, 0.0305555, -0.021060854, 0.029963626, -0.01109764, -0.05918741, 0.037164763, 0.0023936993, 0.015179104, -0.025598554, 0.040469393, 0.033243597, 0.045352355, 0.0010696892, 0.03987752, 0.08113608, -0.0036498902, -0.0081506, 0.004870631, -0.07669702, 0.02519164, -0.017595924, 0.05346596, -0.015006474, -0.014365277, -0.023107752, 0.0021594157, -0.033687502, -0.023822933, 0.012121089, -0.058102306, -0.022182949, 0.016029924, 0.03590703, -0.019815452, 0.023107752, 0.032380447, -0.032035187, 0.031147374, 0.029026492, -0.05055591, -0.005635135, 0.06579667, 0.0049877726, -0.013107545, 0.012355372, -0.028459279, -0.07373765, 0.029667689, 0.005798517, -0.03711544, 0.021208823, -0.011066813, -0.004389733, 0.009050742, 0.02501901, -0.030308885, -0.035339817, -0.033342242, 0.0076142135, 0.036868826, 0.026190428, -0.022096634, 0.020678602, 0.04044473, 0.04562363, 0.020875894, 0.040642023, -0.037411377, 0.028237326, 0.010185167, -0.031640604, -0.016424507, -0.044291914, 0.009297356, 0.0055549853, -0.0025617052, 0.01700405, 0.008366387, -0.0018326518, -0.03021024, 0.038619787, 0.008378718, -0.0138843795, -0.01578331, 0.03171459, 0.07561192, 0.022145957, -0.018989295, 0.054452416, 0.022158287, 0.002123965, -0.024661422, -0.023736618, 0.064958185, -0.033342242, -0.015475041, -0.0130335605, -0.040839314, 0.08503258, -0.020358004, 0.021443106, -0.010302309, -0.014192647, 0.033021644, 0.038767755, 0.022404902, 0.026831625, 0.009402167, -0.036030337, -0.009420663, -0.039063692, 0.043774024, -0.08685753, 0.024057217, -0.0071148197, -0.030456854, 0.026363058, 0.02463676, -0.0055703986, 0.008779466, -0.027670113, 0.020937547, -0.010758545, 0.026979594, 0.014328285, 0.015660003, -0.04651144, -0.005326867, 0.024957357, -0.013107545, -0.009377506, 0.025672538, 0.029593704, 0.070876926, 0.04406996, -0.0073059457, -0.0067633945, 0.017287657, 0.014204978, 0.038767755, -0.039063692, 0.04611686, -0.0116648525, -0.027374176, 0.026165767, -0.053712573, -0.034575313, 0.02048131, 0.07349104, -0.04668407, 0.033391565, 0.030358208, 0.005527241, -0.00149664, 0.08034691, 0.047423914, -0.03953226, 0.018841326, 0.014944821, 0.039137676, 0.013785734, 0.009192545, 0.0052004773, -0.037682652, -0.01475986, -0.02499435, -0.05243018, -0.036055, 0.0061622728, -0.023342036, 0.052134242, -0.022269264, 0.039680228, 0.035783723, 0.053416636, 0.012799277, -0.04162848, 0.031985864, -0.014204978, 0.002683471, -0.046264827, -0.059138086, -0.0024646008, 0.07215932, 0.0062177605, 0.062097456, -0.021554083, -0.017546602, 0.065993965, -0.0025277957, -0.021443106, -0.053613927, 0.034205392, -0.010351632, 0.015992932, 0.0023274217, 0.057707723, -0.024192855, -0.03765799, -0.041406527, -0.054649707, -0.011997782, 0.039137676, 0.028163342, 0.03610432, -0.04160382, -0.038126558, 0.0029824907, -0.03815122, -0.028335972, 0.018459074, 0.060321834, -0.033218935, -0.123208456, -0.03171459, -0.04508108, 0.0031782405, 0.005995808, 0.001801825, 0.035611093, -0.028434617, 0.029569043, 0.04579626, -0.030259563, -0.049766745, 0.018594712, 0.046412796, 0.037904605, 0.0014997227, 0.010912679, 0.01908794, -0.0004165468, 0.050112005, -0.03418073, -0.02030868, -0.0104502775, -0.023046099, -0.002156333, 0.056376006, -0.060667094, -0.021960996, 0.06061777, 0.018853657, -0.028434617, -0.0033477878, 0.007608048, 0.019716807, -0.005499497, -0.05731314, 0.065303445, -0.028089358, -0.015055797, -0.0045962725, 0.023637973, 0.061702874, 0.02744816, -0.041036606, 0.0019343802, 0.0225652, -0.03640026, -0.017460287, 0.025228633, 0.009130891, 0.0029192958, -0.0093405135, 0.035117865, 0.0030395202, -0.041505173, 0.018483736, 0.013230852, -0.0049292017, -0.009081569, 0.012959576, 0.014648884, -0.0139706945, 0.054649707, 0.009950884, 0.011011325, -0.042738244, 0.019346885, -0.010302309, -0.009248033, 0.023490004, -0.0288292, 0.02410654, -0.050062682, -0.0078053395, 0.025253294, -0.03884174, 0.010123514, 0.0068990323, 0.06199881, 0.010351632, 0.003699213, 0.0019682897, 0.029815657, 0.0024137367, 0.00086237903, 0.008113608, 0.0013178447, -0.06614193, 0.026658995, -0.048952922, 0.0038256028, -0.03625229, 0.02341602, -0.013181529, -0.020505972, -0.0047658198, -0.0031011736, 0.006393473, -0.008236915, -0.003575906, -0.042935535, -0.047423914, -0.023280382, -0.0093405135, 0.01785487, 0.031961203, -0.06510615, 0.02658501, 0.019161925, -0.053564604, 0.01353912, -0.07931113, -0.059483346, 0.054304447, -0.032380447, 0.003084219, -0.013650096, -0.03970489, -0.0016307364, 0.035635754, 0.028681232, 0.0009810622, 0.038989708, 0.017028712, -0.047275946, 0.015302411, 0.018816665, 0.028188003, 0.0005240552, -0.00542243, 0.0060605444, -0.02186235, 0.0016631045, 0.006337985, 0.025117656, -0.043058842, 0.0068127173, 0.004306501, 0.013736411, 0.00429417, -0.061160322, 0.020382665, -0.00686204, 0.01753427, 0.038915724, 0.0053885207, -0.011862144, 0.024698414, 0.055882778, 0.030284224, -0.033687502, 0.032158494, 0.009950884, 0.10634004, 0.02446413, -0.06648719, 0.047078654, 0.011917632, -0.00011906842, -0.020937547, -0.04044473, -0.025968475, -0.030654145, 0.009093899, -0.010962002, 0.047275946, 0.040691346, 0.011159293, 0.0340081, -0.013280175, 0.019544177, -0.025401263, -0.024908034, -0.012971907, -0.01855772, -0.0020268606, -0.01612857, -0.041406527, -0.017324649, -0.0178672, -0.056228038, -0.030802114, 0.02848394, 0.016042255, 0.03524117, 0.0114429, -0.02409421, -0.059631314, -0.0036005673, -0.034131408, 0.0021763705, -0.01700405, 0.014389939, 0.033934116, -0.028705893, -0.0025694119, 0.00069321715, -0.029544381, 0.009248033, 0.015918948, -0.014673545, 0.008458868, 0.0022596028, 0.011436734, 0.00035142526, -0.05662262, 0.06441563, -0.008995254, 0.026880948, -0.01259582, 0.062393393, 0.04439056, -0.0038656776, -0.024575107, 0.042097047, -0.03003761, 0.0513944, -0.001382581, 0.0025262544, 0.038940385, -0.035339817, -0.034106746, -0.02727553, 0.01371175, -0.052923407, 0.0042540953, 0.044291914, 0.09006351, 0.0079533085, 0.015524364, -0.030802114, 0.06278798, 0.0082307495, -0.014883167, -0.02586983, 0.0006149942, 0.036844164, -0.0036437248, -0.043576732, -0.021899343, 0.046412796, 0.010252986, -0.014883167, -0.0120286085, 0.01372408, -0.038101897, -0.014155655, -0.008465033, -0.025672538, 0.008717813, 0.029199122, -0.031862557, -0.049199536, -0.055290904, 0.023970902, -0.023342036, 0.02097454, -0.00040806943, -0.028360633, 0.014143324, -0.014426931, 0.03748536, -0.004103044, 0.025993137, 0.03797859, -0.039260983, -0.053219344, 0.025240963, -0.013477466, -0.020025074, -0.0040876307, 0.025795845, -0.053909864, 0.058595534, 0.013489797, -0.0915432, -0.0101728365, 0.04162848, -0.007706694, -0.010308474, -0.040148795, -0.00532995, 0.04823774, -0.008656159, 0.052528825, 0.05282476, 0.017632917, 0.058990117, -0.03726341, 0.056376006, 0.010092687, -0.0055888947, 0.013181529, -0.02552457, 0.015857294, -0.018767342, 0.003162827, -0.0036159807, -0.026708318, 0.019100271, -0.009790584, 0.015992932, -0.0019713724, -0.019926429, 0.013465135, 0.03728807, 0.03607966, -0.007873159, 0.11304795, -0.028212665, -0.018841326, 0.015425718, 0.011923797, 0.0513944, -0.010647569, -0.02900183, 0.033613518, -0.023872256, 0.05297273, 0.04924886, -0.048681647, -0.023502335, 0.007891655, -0.014747529, -0.011257939, -0.03504388, -0.043946654, 0.016856082, 0.049372166, -0.0178672, -0.0077498513, -0.01127027, -0.007484741, -0.008144435, 0.024390146, 0.087696016, -0.03242977, -0.037066117, -0.027546806, -0.009432994, -0.01475986, 0.027842743, 0.0015297788, -0.040543377, -0.044439882, 0.0059711467, -0.02255287, 0.002324339, -0.010851026, -0.007589552, -0.015660003, -0.035783723, 0.009673443, -0.0144392615, 0.015586018, 0.023822933, -0.050802525, -0.024698414, 0.05331799, 0.034649298, 0.015413388, 0.0033508705, 0.00060343416, -0.015401057, -0.029396413, -0.007589552, -0.034106746, -0.009019915, -0.017965846, 0.047473237, 0.029371751, -0.012065601, 0.008397214, -0.013156868, -0.037534684, 0.03748536, 0.0129472455, 0.031813234, 0.035611093, 0.013304836, 0.01891531, -0.030333547, 0.019482523, -0.086660236, 0.03553711, 0.04527837, 0.011886805, 0.0049230363, -0.010339301, 0.007521733, -0.048952922, 0.016535483, 0.003239894, 0.031320006, -0.0061468594, 0.013835057, -0.053959187, -0.0055426545, 0.009839907, 0.004704166, -0.004879879, -0.03435336, 0.0077498513, 0.0374607, 0.042097047, 0.033564195, -0.014858506, -0.020925216, -0.046881363, -0.038397834, 0.0010781665, 0.030999405, -0.014624222, 0.016572475, -0.014648884, -0.0075402292, -0.025376601, 0.01371175, -0.031492636, 0.009494647, 0.011307262, 0.028631909, 0.017053373, 0.003813272, -0.057066526, -0.012090262, 0.027818082, -0.02013605, -0.03329292, 0.035635754, -0.0014049304, -0.02658501, -0.057559755, 0.022133626, 0.020555295, 0.03536448, 0.06836146, -0.030012948, -0.010764711, 0.019211248, -0.011251774, 0.06485954, -0.024686083, -0.05903944, 0.00080149615, 0.0026557269, -0.0017894943, -0.011646356, 0.006337985, 0.04564829, 0.028237326, -0.0067264023, 0.0031566618, -0.01267597, 0.005576564, 0.05780637, 0.031443313, 0.0069421898, 0.03090076, 0.03760867, -0.022626854, 0.0057738554, -0.012102593, 0.02133213, 0.019013956, 0.025795845, -0.06308392, -0.0068127173, 0.0354138, -0.00910623, 0.014328285, 0.011985451, -0.0106599, -0.017028712, 0.01406934, -0.0017848703, -0.0063441503, -0.0042972527, 0.032479092, 0.0032738035, 0.039655566, -0.013637765, -0.03176391, -0.014772191, 0.03188722, -0.011202451, -0.017435625, -0.0047319103, -0.012934915, -0.009556301, 0.0409133, 0.007934812, 0.0042325165, -0.0017124274, -0.012182742, -0.024698414, -0.07689431, -0.019803122, 0.0128609305, -0.040691346, 0.030999405, -0.011732671, 0.03622763, 0.009285025, 0.01942087, -0.024723075, 0.0053792726, 0.0326024, 0.022071972, -0.015425718, 0.003862595, -0.0031844059, -0.016547814, 0.020851232, 0.016868412, -0.0098953955, 0.03728807, 0.023107752, -0.008982923, -0.024587438, -0.030111594, -0.023280382, 0.0037207918, 0.0024584355, 0.013983025, 0.02062928, 0.033169612, 0.011331923, -0.081629306, 0.0038286855, 0.02013605, -0.033761486, -0.06727636, -0.029273106, -0.029371751, -0.021369122, -0.016375184, -0.0039951503, 0.057214495, -0.004534619, -0.04734993, 0.013292505, -0.004047556, 0.009346679, -0.018150806, 0.017965846, -0.011171624, -0.05815163, -0.0036283114, -0.01665879, -0.03188722, 0.028508602, -0.003421772, -0.0068127173, 0.003767032, 0.013983025, 0.004334245, 0.009192545, -0.049569454, 0.028040035, 0.0149941435, -0.019877106, 0.010647569, -0.022639185, 0.01857005, 0.020431988, 0.033095628, 0.03173925, -0.032849014, -0.005903328, -0.008896608, 0.023107752, 0.0054193474, 0.010715388, 0.0077868435, -0.0354138, -0.007151812, 0.004716497, -0.062393393, 0.03921166, -0.003239894, -0.054994967, 0.01596827, 0.0021486264, -0.039063692, 0.022466555, 0.030530838, -0.0028391462, 0.014895498, -0.023613311, 0.007065497, -0.0211595, 0.043330118, -0.039482936, -0.03363818, 0.021011531, 0.020259358, 0.015906617, -0.0019359215, -0.0013062847, -0.027546806, 0.016325861, -0.011208616, -0.002123965, 0.004861383, 0.040716007, 0.07358968, -0.032010525, -0.017484948, 0.021615736, -0.044094622, -0.013095214, 0.034254715, 0.042195693, 0.009488482, -0.013477466, 0.032010525, -0.01664646, 0.0060482137, -0.03072813, -0.00050555915, 0.0014550239, 0.00805812, 0.014278962, 0.03156662, 0.014143324, -0.028286649, -0.0020823488, 0.0044421386, 0.014180317, -0.029914303, 0.018594712, -0.008600671, -0.03363818, 0.047941804, -0.044982433, -0.01372408, -0.010598246, -0.014402269, 0.02499435, 0.003412524, -0.008051954, -0.0032337287, -0.0755626, 0.046782717, 0.021258146, -0.036301613, -0.034106746, -0.00047704435, -0.015376396, -0.035167187, -0.02623975, 0.009784419, 0.03797859, -0.006442796, 0.009587128, -0.08606836, -0.025820507, -0.0036961304, 0.013058222, 0.030086933, 0.00038687605, 0.00885345, 0.009913892, -0.014685876, -0.015844963, -0.0128486, -0.035857707, -0.0020962209, -0.017891861, 0.021233484, 0.011085309, -0.00788549, -0.005709119, 0.024957357, 0.014513246, 0.0046270993, 0.003403276, 0.024303831, 0.03349021, 0.03869377, -0.0030688057, 0.022935122, 0.001710886, 0.052578148, -0.0071271504, -0.011560041, 0.014217309, 0.004648678], [-0.0050837756, -0.02687404, -0.0054150573, 0.030564576, 0.0043252343, 0.02932614, -0.042825084, 0.062268514, 0.0036719597, 0.07876447, 0.0017926347, 0.0137961665, 0.007833102, -0.0069104675, 0.0023963717, -0.0059382957, -0.015492822, 0.0014017536, 0.0125329625, -0.04252786, -0.03960515, -0.041487575, -0.08228162, -0.01024805, 0.04366722, 0.0034366571, 0.016793178, 0.018985208, -0.011480292, -0.013882857, 0.03378451, 0.015814815, 0.03720259, -0.053797618, 0.028905073, -0.039159317, -0.015876736, 0.021858377, -0.031728704, -0.0019118341, -0.058404595, -0.02525169, 0.033858813, -0.052856408, 0.011207837, -0.021746919, -0.009684562, 0.012755881, 0.0029799843, -0.048125584, -0.011269758, -0.020805709, 0.0037710345, -0.017177094, 0.005557477, 0.03314052, 0.030960876, -0.064497694, 0.018056383, -0.06459677, -0.067767166, -0.031035181, 0.055977263, -0.004105412, -0.03447803, 0.018997593, 0.041834336, 0.014972679, -0.015108908, 0.017957307, -0.032174543, 0.054045305, 0.013238871, -0.01992642, 0.020446563, -0.044831347, 0.07103663, 0.009826981, -0.057711072, -0.037103515, 0.052905943, -0.019678732, 0.034973405, 0.012192393, 0.022737667, -0.007987906, -0.0023576706, -0.12701389, -0.031035181, 0.001947439, -0.007938368, -0.021140086, 0.02746849, -0.004662708, -0.045202877, 0.025016388, -0.0041116043, 0.009021999, -0.04322138, 0.024137098, -0.010254242, -0.040744513, -0.08505572, -0.046614695, 0.03623661, 0.040050987, 0.025511762, -0.01278065, -0.03167917, -0.037697963, -0.0015867449, -0.032942373, -0.01924528, 0.0058082603, -0.0556305, -0.0016177058, -0.0019536312, -0.0092387255, -0.02317112, 0.03541924, -0.058949508, -0.011895169, 0.033066217, -0.00970933, -0.0045419605, 0.0014071718, -0.014378231, 0.035295397, 0.008960078, 0.011721787, 0.0035450202, 0.03487433, 0.04017483, 0.007950753, 0.031555325, 0.0243724, 0.05696801, -0.0018499123, 0.00757303, -0.0039041664, -0.08277699, 0.015207982, -0.019133821, 0.043716755, 0.030638883, -0.013387483, -0.011950898, -0.007436802, -0.041413266, -0.03202593, -0.036632907, -0.02727034, -0.0118704, 0.014353462, 0.03509725, -0.04156188, 0.0633088, 0.04530195, -0.016495954, 0.036855828, 0.021102933, -0.08312376, -0.002721461, 0.0389364, 0.010037516, -0.018043999, 0.0320507, -0.040843587, -0.03274422, 0.039010704, 0.004560537, -0.060683317, 0.018043999, 0.018749906, -0.029078454, 0.033561587, 0.008947693, -0.0348991, -0.032546073, -0.014378231, -0.021524, 0.06846069, 0.025016388, -0.050775837, -0.0030867993, 0.046441313, 0.01648357, 0.015096523, 0.026997883, -0.06197129, 0.019059515, 0.0061426377, -0.011282143, -0.022923432, -0.047877897, -0.01295403, 0.009443067, 0.0044645583, 0.03051504, 0.007034311, -0.005093064, -0.051617973, -0.004164238, 0.037425507, -0.022589054, -0.01067531, 0.044335973, 0.024743931, 0.017300937, -0.027864788, 0.052707795, -0.0020078127, 0.023877027, -0.02935091, -0.022849126, 0.045797326, -0.049463093, 0.0172514, -0.027096959, -0.0377475, 0.079111226, -0.02362934, 0.023443574, -0.026502509, -0.00508068, -0.003851533, 0.04329569, -0.016941791, 0.0116474815, 0.009028192, 0.008378013, -0.007535877, -0.029573828, 0.036632907, -0.10051139, 0.0043809637, 0.0025713006, -0.033512052, 0.040075757, 0.022390906, -0.011666058, 0.014947911, -0.018254532, -0.009455452, 0.0057122814, 0.03160486, 0.011969474, 0.017895386, -0.027146496, -0.035592623, 0.011059225, -0.002091407, -0.0067680473, -0.0009265042, 0.021784073, 0.06311065, -0.00095049886, -0.013560863, 0.001770962, 0.0039072623, -0.01380855, 0.029400447, -0.0027880268, 0.03928316, -0.00657609, -0.05696801, 0.039035473, -0.022750052, -0.06365556, 0.019282434, 0.079012156, -0.052162882, -0.0065203602, 0.05662125, 0.04101697, -0.01961681, 0.06103008, -0.0039351275, -0.049958467, 0.018229764, -0.013276024, 0.0018359799, 0.01821738, -0.019170973, -0.0037029206, -0.020310335, -0.024421938, -0.03541924, -0.06320972, -0.014613533, -0.018143073, -0.016743641, 0.029970128, 0.022650976, 0.053649005, 0.019381508, 0.055382814, 0.02553653, -0.053104095, 0.029078454, -0.012830187, 0.027493257, -0.0070281187, -0.037772268, -0.026205285, 0.043815833, -0.007987906, 0.061624527, -0.015703356, 0.018972825, 0.064349085, -0.026948346, -0.05548189, -0.04577256, 0.047159605, 0.013957162, 0.01514606, 0.0036131341, 0.045475334, -0.041859105, -0.014155312, -0.009275879, -0.09758868, 0.0032601801, 0.02305966, 0.0062169437, 0.04807605, -0.035196323, -0.04688715, -0.006046659, -0.02724557, -0.008037443, 0.009164419, 0.041462805, -0.04740729, -0.12473518, -0.036063228, -0.0050063734, 0.025462223, -0.024818238, -0.011263566, 0.016867485, 0.009350184, 0.021400157, 0.006117869, -0.0008065308, -0.012879725, 0.011740364, 0.035691697, 0.026378665, 0.0015023765, 0.014019084, 0.025016388, -0.012669191, 0.020458946, -0.046540387, -0.029474754, 0.00066178874, -0.03239746, 0.029227067, 0.07950753, -0.07049172, -0.055779114, 0.07886354, 0.003959896, -0.066082895, -0.014328693, -0.022155603, -0.0067370865, 0.0037803228, -0.054639753, 0.05186566, -0.026552048, -0.012718728, -0.034552336, -0.0019381508, 0.05998979, 0.019294817, -0.023084428, 0.0036998247, 0.009182996, -0.08064689, -0.04577256, 0.045277186, 0.025028773, 0.0075173005, -0.0077959485, 0.011678442, 0.02066948, -0.04532672, -0.008402782, 0.0063345954, -0.01782108, -0.028682156, 0.012421504, 0.033066217, -0.04252786, 0.007925984, -0.0024366209, -0.00622004, -0.050676763, 0.04079405, 0.004972317, -0.0102047045, 0.018799443, -0.0515189, -0.0018715849, -0.014403, -0.03105995, 0.03965469, -0.048918184, -0.018477451, 0.011913745, 0.034428492, 0.008384205, 0.031703938, -0.011789901, 0.052905943, -0.030193046, -0.019567274, -0.013907625, 0.0007910504, -0.029573828, 0.044930425, -0.030168276, 0.026948346, -0.014724992, 0.026230054, -0.020062648, -0.04535149, -0.008105557, -0.012464848, 0.016892254, 0.0044305013, -0.024310479, -0.046069782, -0.04899249, -0.04398921, -0.02029795, 0.031778242, 0.029846285, -0.056819398, 0.032199312, 0.00017192961, -0.055184666, -0.015356595, -0.07499962, -0.0247687, 0.03108472, -0.047704518, -0.0025743968, 0.008328476, -0.039555613, -0.0055358047, -0.009591679, 0.025288843, -0.033437748, 0.036632907, 0.023889411, -0.058107372, 0.001239983, 0.0032756606, 0.045252416, -0.017263785, 0.013746629, 0.030614113, -0.039134547, 0.007331535, 0.015703356, -0.0048825303, -0.0016331862, 0.0012090222, 0.022935817, 0.0062169437, -0.0036874402, -0.048125584, -0.0032199312, -0.006743279, 0.039976683, 0.0007662817, -0.04332046, -0.012019012, 0.04671377, 0.022167986, 0.0548379, 0.000212469, 0.03105995, 0.0021966742, 0.07173016, 0.016991328, -0.007703066, 0.009170611, -0.00057509827, 0.002439717, -0.0029041301, -0.05795876, -0.010972534, -0.021301083, 0.010706271, -0.04398921, 0.023951333, 0.06548844, 0.0036471912, 0.02266336, -0.04530195, 0.024384785, -0.0109911105, -0.01158556, 0.020558022, -0.022811973, -0.021895532, 0.00049653504, -0.04398921, 0.0050961603, -0.015876736, -0.024892544, -0.010885844, 0.013189333, 0.012693959, 0.017189479, 0.0087619275, -0.017164709, -0.051617973, -0.020397024, 0.005656552, -0.0052540605, 0.007436802, 0.021288699, -0.0071581546, -0.05548189, -0.0029490234, -0.009919864, -0.017300937, 0.0147621455, 0.0007577674, -0.005368616, 0.017412396, 0.025808986, -0.014180081, -0.0031347887, -0.04195818, 0.07891308, -0.014638302, -0.0013824031, 0.013610401, 0.049017258, 0.028929843, 0.021684997, -0.01944343, 0.02325781, -0.04785313, 0.04782836, -0.010526698, 0.027864788, 0.037772268, -0.03182778, -0.048274197, -0.03162963, 0.013981932, -0.036484297, -0.016112039, 0.0701945, 0.1128462, 0.019790191, -0.002043418, -0.02727034, 0.045797326, -0.016954176, -0.0001750257, -0.012793033, 0.011833247, 0.031233331, 0.001451291, -0.047531135, -0.03148102, 0.04116558, 0.014563996, -0.03467618, 0.023641724, -0.010947766, -0.018254532, -0.016495954, 0.0047122454, -0.024632473, 0.02001311, 0.026180517, -0.02687404, -0.07148247, -0.046689, 0.0076597207, -0.011994244, -0.012817803, 0.015604281, -0.014217234, 0.0016161577, -0.0014087198, 0.042973697, 0.010780577, 0.039010704, 0.031703938, -0.07366212, -0.016161578, 0.0058206446, -0.025635606, -0.036632907, -0.00885481, 0.023096813, -0.0030976357, 0.029301373, 0.029846285, -0.023282578, -0.011133531, 0.077476494, -0.014502075, -0.0028824576, -0.04002622, 0.010062285, 0.02573468, 0.0036348067, 0.049413558, 0.006254097, -0.0064398623, 0.06647919, -0.04740729, 0.022836741, 0.020805709, 0.016297804, -0.011554599, 0.0040187216, 0.013659938, -0.033883583, -0.01981496, -0.009684562, -0.031035181, 0.009752676, 0.009715523, 0.026601585, 0.0018189515, -0.018997593, 0.012396734, 0.0560268, 0.027963864, 0.012941646, 0.10561374, -0.045450564, -0.015951043, -0.008421358, 0.014972679, 0.0491411, -0.00891054, -0.025660373, 0.03772273, 0.0033809277, 0.05889997, 0.02917753, -0.028384931, 0.0059197196, 0.0064150933, -0.03640999, -0.012978799, -0.020595174, -0.016793178, 0.016644567, 0.0373512, -0.026750196, -0.0049568363, -0.025511762, -0.005696801, -0.008755736, 0.016694104, 0.08208347, -0.040150065, -0.024929697, -0.011399794, -0.018539373, -0.011523638, 0.028236318, 0.013783782, -0.022787204, -0.041462805, -0.043914907, -0.04062067, -0.004024914, -0.013659938, 0.01286734, -0.007257229, -0.052063808, 0.026750196, -0.02336927, -0.002230731, 0.0056782244, -0.03888686, -0.013449404, 0.053698543, 0.051964734, -0.016978944, 0.0006614017, -0.015232751, -0.0031734898, -0.02496685, -0.048150353, -0.04116558, -0.033016678, -0.038614403, 0.022229908, 0.0070157344, -0.008192248, -0.009876519, -0.020409409, -0.04497996, 0.052707795, -0.0015735865, 0.03544401, 0.054689292, 0.018093536, 0.016904637, -0.071532, 0.022712898, -0.058602747, 0.028929843, -0.0005274959, -0.036087997, -0.0076659126, -0.026180517, 0.005204523, -0.008730967, 0.020310335, 0.022762436, 0.0027988632, -0.013164564, 0.03948131, -0.058107372, -0.014613533, 0.012080934, 0.031703938, -0.020037878, -0.0067370865, 0.011777517, 0.022068912, 0.04188387, 0.032496534, -0.045178108, -0.024360018, -0.010823922, -0.027146496, 0.013511326, 0.046045013, -0.017870618, -0.011727979, -0.0100499, -0.019356739, -0.009703139, 0.011858015, -0.023555035, 0.00452648, 0.022242293, 0.04364245, 0.030465502, -0.0047184373, -0.02115247, -0.0030496463, 0.031555325, -0.009152035, -0.027096959, 0.03683106, 0.0046812845, 0.006080716, -0.055927727, 0.018700369, 0.049116332, 0.059395343, 0.072275065, -0.035518315, -0.022811973, 0.026180517, 0.022106064, 0.02277482, -0.03276899, -0.060336553, 0.00052904396, 0.00082278525, -0.00040171735, -0.016904637, -0.005560573, 0.05508559, 0.0040899315, -0.0053531355, -0.0010534438, -0.0013367358, -0.012217161, 0.061872214, 0.028112475, 0.007418226, 0.03202593, 0.03145625, -0.01363517, 0.019889267, -0.015232751, 0.02251475, 0.021338236, 0.017127557, -0.068658836, -0.009127266, 0.024706779, -0.021722151, -0.017127557, -0.0047927434, -0.02286151, -0.03408173, 0.041438036, -0.00090096146, 0.013659938, -0.006681357, 0.046639465, -0.031555325, 0.046936687, -0.018291686, -0.00106428, 0.0092387255, 0.025412686, -0.014885989, -0.020186491, -0.005591534, -0.0068856985, -0.018056383, 0.043369994, 0.01773439, 0.009121074, -0.012087126, -0.025115462, -0.009257302, -0.06519122, -0.012303852, 0.028880306, -0.017461933, 0.03207547, 0.023616957, 0.017883, 0.027864788, 0.022527132, -0.014885989, 0.01702848, 0.02229183, 0.021895532, -0.0629125, -0.015951043, 0.008526625, -0.0024861584, 0.008415166, 0.028731693, 0.014403, 0.030366426, 0.010148975, 0.024731547, -0.005978545, 0.004879434, -0.013313176, 0.012322429, -0.0007314507, 0.008557586, 0.02954906, 0.025288843, 0.008093173, -0.068559766, -0.010631965, -1.0074378e-05, -0.06647919, -0.052311495, -0.014068622, -0.038193338, -0.018898519, -0.0043995404, 0.024781086, 0.02954906, 0.02781525, -0.013115027, 0.018093536, -0.038242873, 0.02932614, -0.00948022, -0.00939353, 0.024434322, -0.06499307, -0.003928935, -0.014613533, -0.0276171, 0.03373497, -0.010068477, 0.007182923, 0.013981932, 0.012093318, 0.015282288, 0.011703211, -0.029771978, 0.05260872, 0.003569789, -0.020533253, 0.03579077, -0.043518607, 0.02001311, 0.0062138475, 0.021647844, -0.0026115498, -0.052361034, -0.005582246, -0.0012067001, 0.013350329, 0.008904348, -0.00891054, 0.0012067001, -0.052361034, 0.0110901855, -0.002688952, -0.015084138, 0.026997883, 0.0032292192, -0.052658256, 0.033611126, 0.030242583, -0.0055296123, 0.027542794, 0.03373497, 0.006359364, 0.02932614, -0.004767975, 0.009727907, -0.0022864607, 0.04027391, -0.0086257, -0.012941646, 0.0069476203, 0.0040094336, 0.007257229, 0.008693814, 0.00048685976, -0.036558602, -0.0048175124, -0.0025620125, -0.010353317, 0.0038081878, 0.036855828, 0.063606024, -0.02400087, -0.014563996, 0.03856487, -0.026254823, -0.013981932, 0.03546878, 0.018143073, -0.0027818347, -0.016892254, 0.017164709, -0.0018530084, -0.013362714, -0.01101588, -0.02915276, -0.00089631736, -0.010415238, 0.03883732, 0.06296204, 0.031381942, -0.02047133, -0.014056237, 0.014687839, 0.015901506, -0.0105824275, 0.026007136, 0.0036595755, -0.012570116, 0.058850434, -0.0580083, 0.027939094, 0.008743351, -0.014031469, 0.007021927, 0.0017895387, -0.01742478, 0.0006586926, -0.06727179, 0.036509063, 0.03066365, -0.03856487, -0.039332695, -0.024521014, -0.017201863, -0.028806, 0.027022652, 0.017201863, -0.009288263, -0.021301083, 0.041413266, -0.062268514, -0.012662998, 0.024632473, 0.0075606457, 0.037053976, 0.013684707, 0.0041518533, -0.0046069785, -0.0076844892, -0.036335684, -0.004024914, -0.01058862, -0.0097960215, 0.005517228, 0.008260362, 0.022539517, 0.0012895204, -0.00876812, 0.0026672794, 0.002970696, -0.012279083, -0.018204994, -0.003399504, 0.0040496825, 0.070442185, -0.004068259, -0.033561587, -0.010501929, 0.0495374, -0.010099438, -0.026378665, 0.033858813, 0.010978727], [-0.013644407, -0.002611667, -0.01450866, 0.033425014, 0.010073958, 0.034937456, -0.008701955, 0.05574437, 0.009155688, 0.039085876, -0.0025563005, 0.0012626207, 0.009031451, -0.026554197, 0.007886316, 0.018170936, -0.011008432, 0.009685043, -0.011181283, -0.033252165, -0.012585695, -0.06983171, -0.074369036, 0.0057742954, -0.017187847, -0.002094465, 0.004345576, 0.010084761, 0.021941243, 0.019359285, 0.0044049933, 0.024652839, -0.018711094, -0.014152155, -0.020417996, -0.040663138, -0.03582332, 0.05388622, -0.030853858, -0.002752108, -0.041289724, -0.028866075, -0.022708267, -0.045070834, -0.013374327, -0.020655666, 0.05094776, 0.020482814, 0.0011363586, -0.0058229095, -0.005363775, -0.020806909, -0.013817257, 0.007967339, -0.014379022, 0.0099983355, -0.02019113, 0.006092989, 0.00016508598, -0.028001823, -0.023853404, -0.031588476, -0.03889142, -0.032107025, -0.043407146, -0.0154701425, -0.013179869, 0.039626036, 0.018819125, 0.07791248, -0.0023699459, 0.003821622, 0.014087336, 0.0028979508, 0.0020526026, 0.024955327, 0.09005524, 0.011278512, 0.002530643, 0.040987235, -0.004764199, -0.012531679, 0.029557478, 0.02445838, -0.008269828, -0.03078904, 0.0521145, -0.08184483, -0.013503965, 0.028412342, -0.039150696, -0.029146958, 0.033727504, 0.0012538432, -0.07946813, 0.038804993, -0.0073515587, 0.013838863, -0.033533044, -0.015275685, -0.020396389, 0.011213693, -0.06468939, -0.041376147, 0.034310874, 0.005504216, 0.08033238, 0.011024637, 0.023486096, -0.009414964, 0.02216811, -0.010090163, 0.06952921, -0.010570903, -0.017944068, 0.034246054, -0.0058931303, -0.062312696, -0.020860925, -0.008669546, -0.0650351, -0.004693978, 0.022794694, -0.012888184, -0.004016079, 0.023896616, -0.018786715, 0.008410269, -0.020904137, 0.007853906, -0.014843558, -0.008194206, -0.004942451, 0.037314154, 0.061923783, 0.063220166, 0.041937914, 0.011959111, -0.03828644, 0.008680348, -0.051466312, -0.01689616, -0.016939374, 0.047922872, -0.012196781, -0.024112679, -0.025733156, -0.03545601, -0.042996623, -0.025041753, 0.0003067088, -0.03871857, 0.0042105364, 0.027937002, 0.057905003, -0.045891874, 0.04727468, 0.019759001, -0.0059039337, 0.051855225, 0.010808573, -0.07143057, -0.026683835, 0.040619925, 0.0136228, -0.06702288, 0.0007339405, 0.035239946, -0.076270394, 0.022340959, -0.016215561, -0.026078857, 0.06347944, -0.0098146815, -0.07026383, -0.03368429, 0.04770681, 6.241364e-05, -0.027504876, -0.057948213, -7.52002e-05, -0.011364937, 0.025365848, -0.04001495, 0.006757384, 0.00031498, 0.010738353, 0.013460753, 0.022070881, -0.05820749, -0.019251252, 0.03616902, 0.011181283, 0.019078402, -0.028369129, -0.051509526, 0.007675654, -0.057040747, -0.029125351, 0.025192996, -0.051855225, -0.057775363, 0.0036946847, 0.05773215, -0.038502503, -0.023162, 0.013277099, -8.1234786e-05, 0.028239492, 0.033533044, 0.051509526, -0.035131916, 0.056046855, -0.0326904, -0.023421276, 0.015286488, -0.079165645, 0.030983496, -0.03729255, -0.038696963, 0.06922673, -0.050558846, 0.015426929, -0.045589387, -0.0017649683, 0.057170387, -0.0013409437, 0.01760917, 0.01767399, -0.050126716, 0.014152155, -0.019521331, -0.046842553, 0.063436225, -0.0837894, -0.02571155, -0.024588019, -0.034051597, 0.064732604, 0.058596406, -0.0017285075, 0.0045184265, -0.02393983, 0.0007373165, 0.008113182, 0.042650923, -0.021379476, 0.0073407553, 0.016572066, 0.01819254, 0.028390735, 0.017771218, 0.02966551, 0.00657373, 0.00025640652, -0.0015705111, -0.008394064, -0.023788584, 0.021584738, -0.0077296696, -0.009209704, 0.027288813, -0.02789379, 0.021854816, 0.049089614, -0.02571155, 0.025819581, -0.08028918, -0.04999708, 0.004305064, 0.049435314, -0.014908377, -0.019024385, 0.04083599, 0.0009797127, -0.002738604, 0.05915817, 0.021789998, -0.06723894, 0.015308094, 0.0005489362, -0.0022943236, 0.00093514955, 0.039626036, 0.034483723, -0.022859512, 0.04584866, -0.024631232, -0.057948213, -0.013201476, 0.013223083, -0.03007603, 0.0028412342, 0.030054424, 0.0023550915, 0.03733576, 0.020288358, -0.02094735, -0.05241699, 0.048138935, -0.020590845, 0.0005931617, -0.043471962, -0.041635424, -0.008572317, 0.06564007, -0.008394064, 0.04472513, -0.053151608, 0.012866578, 0.08910456, 0.03143723, -0.061232377, -0.04023101, 0.017079815, -0.029298203, 0.007394771, 0.067887135, 0.053021967, -0.008199608, -0.06032491, -0.07341836, -0.078560665, -0.005336767, 0.052330565, 0.0548369, 0.009420366, -0.0333818, -0.023723766, 0.02200606, -0.09048737, -0.02091494, -0.035412796, 0.0054907124, 0.0007373165, -0.10708104, -0.0036892833, -0.058164276, -0.020893335, -0.0053259637, 0.021347068, 0.0020485516, 0.021465903, -0.02162795, 0.039798886, -0.02966551, 0.019672576, 0.008102379, 0.04148418, -0.018948764, 0.0012882783, 0.04645364, 0.04396891, 0.0008959881, -0.0052800504, 0.003994473, 0.010533093, -0.04420658, -0.023896616, 0.007648646, 0.072554104, -0.02973033, 0.008015954, 0.033100918, 0.0029033525, -0.043471962, -0.022124896, 0.010414258, 0.031610083, 0.02244899, -0.03480782, 0.021606345, -0.032474335, 0.0056014447, -0.020255947, -0.0088099865, 0.02594922, -0.0024671743, -0.025020147, -0.0018770511, -0.026856685, -0.021573935, 0.02718078, 0.021444296, 0.0048074117, 0.010208998, 0.011408149, 0.026554197, 0.004459009, 0.006746581, 0.022027668, 0.011645819, 0.018008888, -0.031631686, 0.053108394, -0.034743, -0.03433248, -0.0027467064, 0.03794074, 0.054145496, -0.047317892, 0.0031923372, -0.029276596, -0.01716624, 0.036968455, -0.018030494, -0.01208875, -0.008426474, 0.060195275, 0.051984865, -0.010111769, 0.0142493835, 0.015070424, 0.0043941904, 0.033187345, -0.020104703, -0.041138478, 0.03528316, -0.0123912385, -0.028930895, 0.016464034, -0.03995013, -0.019294465, 0.031782933, -0.04796608, 0.010500683, -0.08128306, 0.021325462, 0.025084965, -0.046410426, -0.022027668, -0.021573935, 0.070652746, 0.034289267, -0.0028979508, -0.042931806, -0.02806664, -0.050904546, 0.01607512, 0.007853906, 0.031610083, -0.05081812, 0.012121159, 0.06965885, -0.010651927, -0.011635017, -0.08469687, -0.0023780481, 0.035499223, -0.04420658, -0.015826646, 0.005220633, -0.055009753, -0.020893335, 0.05803464, 0.028369129, 0.024501594, -0.0061308, 0.028498767, -0.07622718, -0.029298203, -0.011321724, 0.06965885, 0.011926702, 0.034829427, 0.02476087, -0.027223993, 0.009404161, 0.0013200126, 0.011624213, 0.005741886, 0.010608715, 0.0017973777, 0.017706398, -0.033425014, -0.012542482, -0.021671163, 0.03409481, 0.056738257, -0.023097182, -0.0123912385, -0.06551044, 0.035736892, 0.11027878, 0.006206422, -0.031545263, 0.046972193, -0.0067249746, 0.075449355, 0.04396891, -0.03191257, 0.009355547, 0.009652634, 0.014865165, 0.019877836, -0.0051071993, -0.052633055, -0.033295374, 0.025192996, -0.020050688, 0.045935087, -0.0034624166, 0.026683835, 0.005115302, 0.006211824, 0.028952502, -0.0044671115, -0.04159221, 0.060108848, -0.032128632, -0.015578174, -0.059071746, -0.031998996, 0.034678183, 0.0050315773, -0.028001823, -0.0020350476, 0.026014037, -0.01784684, -0.0008595274, -0.013946895, 0.005639256, -0.043644816, 0.005363775, -0.022600235, 0.0059147365, -0.017868446, -0.013752438, -0.016031908, -0.008707357, 0.03351144, -0.0051720184, 0.0049343486, 0.018873142, 0.0012356128, -0.008934223, -0.0072489283, 0.015426929, -0.011192086, 0.019067599, -0.015178457, 0.033403408, -0.022016864, 0.01651805, -0.026921505, 0.045157257, 0.0050531835, 0.02393983, -0.02973033, 0.0626584, -0.0061253984, 0.017511941, -0.014605888, 0.026510984, 0.060065635, 0.008388663, -0.03670918, -0.04455228, -0.0030086834, -0.041505788, 0.019391693, 0.021055382, 0.030205669, 0.031523656, 0.020061491, -0.032258272, 0.027396845, -0.024976933, -0.021411886, -0.008815388, 0.010257612, 0.011008432, 0.007108487, 0.013579587, -0.034418907, 0.0418947, 0.013417539, -0.043515176, -0.035888135, -0.026727047, -0.037659857, -0.0194133, 0.038091984, -0.01689616, -0.0042996625, 0.0027588601, -0.04485477, -0.049305677, -0.045935087, -0.0187327, -0.00803756, 0.04029583, 0.025106572, -0.015318898, 0.012553286, 0.02973033, 0.022578629, -0.003943158, 0.014497857, 0.029708723, -0.0065305172, -0.022967543, -0.031610083, 0.0009175944, -0.031156348, -0.0384809, 0.022146503, -0.039388366, -0.006276643, 0.035650466, -0.037184518, -0.030832253, -0.02983836, -0.013071838, -0.00075149565, 0.002434765, -0.027461663, 0.06555365, 0.004172725, 0.043904092, 0.04206755, -0.028887682, 0.06797356, -0.004761498, 0.017652383, -0.013179869, -0.035499223, 0.008253624, 0.008918018, -0.010268415, 0.012131962, 0.010511486, -0.018095313, -0.019791411, 0.017954871, 0.019737395, -0.023097182, 0.03299289, -0.039734066, 0.060886677, 0.02428553, 0.038848206, -0.0046534664, 0.013547177, -0.030832253, -0.0357585, 0.047317892, 0.024415169, 0.010970621, -0.022578629, -0.050861333, 0.009712052, 0.034181237, 0.032107025, 0.024976933, -0.0010485828, -0.02268666, 0.0067033684, -0.002005339, -0.01181867, -0.017782021, -0.009717453, 0.0020715082, 0.013482358, -0.0074001728, 0.016528852, -0.020050688, -0.010916606, 5.7223053e-05, 0.019100009, 0.038437687, -0.003732496, -0.031782933, -0.004550836, -0.036665965, -0.021941243, 0.012996216, 0.023615735, -0.051984865, -0.018516637, -0.044681918, -0.03351144, -0.022232927, 0.031523656, -0.0051855226, -0.018786715, -0.049781017, 0.0036973855, -0.00858312, 0.027137568, 0.02629492, -0.023270033, -0.0010803172, 0.06365229, 0.008253624, -0.004361781, 0.040447075, 0.006179414, 0.014940787, -0.043407146, -0.01273694, -0.024242317, -0.0025252413, -0.0050720894, 0.042175584, 0.03794074, -0.00459675, 0.011969915, -0.025084965, -0.018300572, 0.017393107, 0.011451363, -0.0015381016, 0.052244138, 0.0096634375, 0.014757133, -0.050861333, -0.005350271, -0.05933102, 0.0048857345, -0.0033084713, -0.037184518, -0.013536374, -0.017522745, 0.040101375, -0.018235754, 0.029600691, 0.017922463, 0.030681008, -0.018062903, 0.04472513, -0.04077117, 0.028650012, -0.009744461, -0.02186562, -0.01968338, -0.016215561, 0.00031616158, 0.023766978, 0.01648564, 0.034959063, -0.043104656, -0.022837905, -0.025797974, -0.044509068, -0.0017366098, 0.029449446, -0.019337678, 0.033835534, -0.04131133, -0.008615529, -0.030681008, 0.02629492, -0.007648646, 0.019283662, 0.008426474, 0.027440056, -0.018030494, 0.003926953, -0.029319808, -0.014865165, 0.038977843, -0.0089774355, -0.023507701, 0.02322682, 0.015729418, -0.01314746, -0.017749611, 0.022405779, 0.04584866, 0.027569694, 0.066201836, 0.015426929, -0.029341415, 0.023291638, -0.016042711, 0.010533093, -0.010090163, -0.020018278, -0.012542482, 0.003051896, 0.02700793, 0.00052091543, -0.019272858, 0.049305677, 0.023183607, -0.009360949, 0.0031410223, -0.018408606, -0.012672121, 0.04826857, 0.028390735, 0.003089707, 0.005671665, 0.037314154, -0.027591301, 0.019694183, -0.014692314, 0.05531224, 0.01791166, 0.030486552, -0.037616644, 0.0039701657, 0.03763825, 0.0026413756, -0.030983496, -0.011073251, 0.007675654, -0.023097182, -0.026078857, -0.0067519825, 0.02216811, -0.0069194315, 0.015826646, -0.021995258, 0.060368124, 0.03871857, 0.012045537, 0.028196279, 0.017025799, 0.012380435, -0.013579587, -0.0089774355, 0.027872184, 0.0207745, 0.058942106, -0.011937505, -0.0016204758, -0.007556819, -0.008982837, 0.012067143, 0.011084055, -0.031415623, 0.031653292, -0.014000911, 0.01968338, -0.05258984, 0.046064727, 0.004361781, -0.0017406611, -0.022600235, -0.019748198, -0.013374327, -0.008350852, -0.07588148, -0.005520421, 0.04260771, 0.02973033, 0.030659402, 0.054447986, 0.034073204, 0.03787592, 0.030421732, 0.010495282, -0.043817665, 0.0042294418, -0.028433949, -0.008161796, -0.015275685, -0.018840732, 0.0011181283, 0.010311628, -0.007551417, -0.04070635, -0.006249635, -0.02097976, -0.009658036, -0.030464945, -0.027072748, -0.007184109, -0.035736892, -0.014832755, -0.0036109602, 0.046324, 0.022600235, -0.026510984, -0.024393562, -0.0035029284, 0.026640622, -0.013017822, 0.034375694, 0.0033705896, -0.05496654, -0.003378692, -0.0013713277, -0.012801759, -0.0023267332, 0.020353176, 0.01014958, -0.031005103, -0.018862339, -0.024112679, -0.001604271, -0.026791867, 0.027029537, 0.03558565, -0.010398053, -0.009490587, -0.012553286, 0.024739264, 0.023140395, 0.01924045, 0.034008384, -0.023529308, 0.016215561, 0.0017204052, -0.020958154, -0.008788381, -0.009447373, 0.02227614, 0.011732245, 0.038913026, 0.046107937, -0.052157715, 0.033057705, -0.014562676, -0.012121159, -0.04416337, -0.013255492, -0.010284619, -0.010954416, 0.003381393, 0.021671163, 0.027396845, -0.006579132, -0.019845426, -0.020515224, 0.00793493, -0.001001319, -0.015329701, 0.012780152, 0.011807867, 0.04628079, 0.041203298, -0.021271445, -0.0063846745, 0.013028625, -0.014389825, -0.010884196, 0.014346613, 0.070047766, 0.047015402, -0.022600235, -0.010570903, 0.03960443, -0.014152155, -0.020180326, 0.04202434, 0.02718078, -0.021671163, 0.016550459, 0.01610753, -0.022578629, 0.014865165, 0.0054502003, 0.04537332, 0.019262055, 0.029795147, 0.010954416, 0.01382806, 0.0010411557, -0.03647151, -0.01760917, -0.012142765, 0.028023427, -0.052373778, 0.058726043, -0.019348482, 0.018203344, 0.00021724503, -0.030594584, -0.0017771218, 0.010338635, -0.0069842506, 0.042715743, 0.021789998, -0.0004338149, 0.012326419, -0.03262558, 0.06110274, -0.013158264, -0.020461207, -0.014379022, -0.004215938, -0.001604271, -0.03463497, 0.03426766, 0.01651805, 0.011526984, 0.0031491246, 0.064991884, -0.051207036, -0.012013127, 0.020850122, 0.037487008, 0.007762079, -0.057948213, -0.021066185, 0.0006350239, -0.020806909, -0.012250797, -0.03651472, -0.032820035, 0.06926994, -0.035153523, 0.033252165, 0.0076108347, -0.0040484886, -0.0364499, 0.045157257, -0.07108487, -0.003041093, -0.001611023, 0.025020147, 0.0024293633, 0.04055511, -0.011256905, -0.029751936, 0.010786967, 0.10336475, 0.0037946142, -0.010263014, 0.022049274, -0.0049262466], [-0.006165536, -0.03253664, -0.026232213, 0.030676713, 0.02228289, 0.051111754, -0.0234544, 0.010918011, 0.019432612, 0.023490634, 0.0019414495, -0.0026087284, 0.023780491, 0.0032427944, 0.0066184406, -0.0043871324, -0.019988174, 0.0070532286, 0.016292475, -0.006539937, -0.035821706, -0.038816914, -0.075266644, 0.039227545, 0.009257362, 0.025652496, 0.018877048, 0.0038406278, -0.009951816, -0.018659655, 0.015579905, 0.011244102, 0.027512422, -0.032391712, 0.003882899, -0.030241925, 0.021389157, -0.0008280599, -0.024239434, 0.017959163, -0.0060689165, 0.019698314, -0.0127779385, -0.071208626, 0.028720167, 0.0009201504, -0.035483535, 0.0040791575, -0.00030552165, -0.02014518, 0.012838325, -0.035217833, -0.014106457, -0.01858719, -0.008695762, 0.031570446, 0.05096682, -0.0765227, 0.019263526, 0.013635437, -0.042778313, -0.015930152, -0.01362336, -0.0031854264, -0.050145555, -0.025241863, -0.026739465, 0.027270874, -0.017741768, 0.013514662, -0.024927849, 0.02029011, -0.027753972, -0.0028261223, -0.016014693, -0.03717438, 0.08043579, 0.033647764, -0.00072766613, 0.008260973, 0.029782983, -0.038430434, -0.022427818, -0.011612465, -0.0076872944, -0.044710707, 0.017596839, -0.093962535, -0.010863663, 0.032609105, 0.010984438, -0.02724672, 0.037271, 0.03536276, -0.079807766, -0.017669303, 0.009039968, 0.022717677, -0.041159935, -0.008466289, 0.003940267, -0.02157032, -0.07768214, -0.055556253, 0.04971077, -0.0005850013, 0.037101913, -0.009722345, 0.0019052172, 0.08038748, 0.002572496, -0.011660774, -0.016582334, -0.019505076, -0.034976285, 0.0139615275, 0.026328832, -0.06642596, -0.009408331, 0.032754034, -0.057150476, -0.006485589, 0.061256807, 0.031908613, -0.019239372, -0.008031501, -0.014698252, 0.002998226, -0.03736762, 0.009831041, -0.012814171, 0.037101913, 0.03446903, -0.0059088906, 0.0022675404, -0.009142627, 0.053189073, -0.048454713, -0.008738033, 0.006029665, -0.055507943, -0.0067271376, 0.00089675037, 0.06231962, -0.03550769, -0.033599455, -0.035870016, -0.013188572, -0.03461396, -0.05859977, 0.0017935007, -0.023140388, 0.020736976, 0.05565287, 0.03821304, -0.031014882, 0.051836397, 0.057730194, -0.011141445, 0.01768138, 0.028961716, -0.04029036, -0.020918136, 0.02236743, 0.013345578, -0.057826813, 0.061594974, -0.0075182104, -0.019879477, 0.044807326, -0.012693396, -0.040459447, 0.0014545774, 0.031425513, -0.015374589, 0.028720167, 0.041546416, 0.02596651, -0.057392024, -0.016207933, 0.00841798, 0.03698114, 0.038527053, -0.08140199, 0.03702945, 0.03647389, 0.0005868884, 0.004803804, 0.0392517, -0.05434851, 0.015761068, -0.022331199, -0.029662209, -0.012415615, -0.0075604813, -0.009360021, -0.00057934, -0.07831016, 0.032367557, 0.029058335, -0.014734484, -0.01891328, -0.023708027, 0.025942355, -0.0077356044, -0.009613647, 0.07884157, -0.0036534276, 0.0026253348, 0.019275604, 0.04024205, -0.019686237, 0.020821517, -0.059131175, -0.03978311, 0.028599393, -0.0417155, 0.048478868, -0.027705662, -0.039227545, 0.07971115, -0.008442135, 0.053285692, -0.04876873, -0.006558053, 0.047367744, 0.033188824, 0.05439682, 0.0068781055, 0.004293532, 0.018937435, -0.052271187, -0.0214737, 0.042295218, -0.043285567, 0.025362637, -0.0073189326, 0.029444814, 0.0340584, -0.0024955024, 0.028309533, 0.0064191627, -0.030096997, -0.018333564, -0.0025694766, 0.027439957, -0.009257362, 0.031280585, -0.03401009, -0.035193678, 0.02335778, -0.02596651, 0.021884333, 0.0076087913, -0.022113804, 0.054686677, 0.018852893, -0.04434838, 0.004127467, -0.025338482, 0.0076631396, 0.02671531, -0.028792633, 0.08299621, 0.009203014, -0.040845923, 0.01915483, -0.031908613, -0.053623863, 0.037391774, 0.054831605, -0.054638367, -0.0034088593, 0.01868381, 0.038816914, -0.019034056, 0.07584636, 0.020749053, -0.011479612, 0.0202418, 0.0278989, 0.017608916, 0.0072343904, 0.0182611, 0.037440084, -0.0031461748, 0.0008235309, 0.009263401, -0.073237635, -0.024287743, 0.00827909, -0.03845459, 0.032923117, 0.007131732, 0.03693283, 0.0066788276, 0.011884207, 0.03777825, -0.07381735, 0.013719979, -0.015724836, -0.009951816, -0.015579905, -0.047850844, -0.027488267, 0.079034805, 0.03016946, 0.06893806, -0.018079937, 0.008097928, 0.073285945, 0.011860052, -0.025048623, -0.093189575, 0.030024532, -0.03642558, 0.024480984, 0.01821279, 0.028502773, -0.022379508, -0.05202964, -0.015169272, -0.05024218, 0.027488267, 0.012186144, 0.039469093, -0.008357593, 0.0019520172, -0.04053191, -0.02416697, -0.07154679, 0.009039968, -0.03536276, 0.008110005, -0.06362399, -0.12203052, -0.033019736, -0.055507943, 0.0007469146, -0.0074095135, -0.037947334, 0.043961905, -0.031232275, -0.036908675, 0.0234544, -0.014203077, -0.010579843, -0.03768163, 0.042246908, 0.015374589, 0.0015089259, 0.08502522, 0.05618428, 0.024058273, 0.046836335, -0.040314514, -0.002472857, -0.026087284, -0.012300879, -0.0029876584, 0.0829479, -0.07072552, 0.01087574, 0.059421036, -0.009450601, -0.046111688, -0.0070894607, -0.015157195, 0.021836022, 0.02917911, -0.062029764, 0.023200775, 0.01016921, -0.031063192, -0.033333752, -0.0064674723, 0.06043554, 0.006238001, -0.063768916, 1.1652848e-05, -0.030386854, -0.01768138, 0.00022475372, 0.0036534276, -0.007258545, -0.028116295, -0.023792569, 0.029686363, 0.04434838, -0.026377143, -0.010628153, 0.040459447, 0.037560858, -0.009287556, 0.013490507, 0.054783296, -0.067682005, -0.009722345, 0.0009828022, 0.016956735, -0.029638054, 0.0071800416, -0.0074638617, -0.0075121718, 0.04062853, 0.028816788, -0.013550894, -0.046546478, 0.0028955678, 0.057150476, 0.00016417778, 0.0174036, -0.005939084, 0.028865097, 0.0006114207, 0.046232466, -0.009637802, 0.06512159, -0.0033937623, 0.009311711, 0.0034450917, -0.027319184, 0.0003308088, 0.041329022, -0.012572622, 0.00780203, -0.046522323, 0.01565237, -0.0026162767, -0.006437279, -0.015495364, 0.0077778753, 0.0069505703, 0.023683872, -0.0404836, -0.0291308, -0.043623734, -0.044541623, -0.0018282235, 0.0070169964, 0.041280713, -0.00875011, 0.030652558, 0.06758539, -0.061208498, -0.025362637, -0.06410708, -0.002374728, 0.023949577, -0.041353177, -0.03613572, -0.0029725614, -0.050918512, -0.00378326, 0.06777863, -0.02440852, 0.01239146, -0.06038723, -0.0018236943, -0.04922767, 0.0037228728, 0.010954244, 0.023043767, -0.010996515, 0.028019676, 0.0021543144, 0.013587127, 0.02512109, -0.0036534276, 0.002869903, -0.020978523, -0.027826436, -0.08082227, -0.0041606803, 0.00036345565, -0.065701306, -0.02671531, 0.023514789, 0.03558016, -0.02483123, 0.005009121, 0.014396316, 0.052850906, 0.027367493, 0.008719916, -0.050532036, 0.032077696, -0.0035900208, 0.024456829, -0.026425453, -0.0424643, 0.0486238, 0.05149823, 0.023297394, -0.017282825, -0.051836397, -0.034493186, -0.07347918, 0.019613773, 0.020773208, 0.04265754, 0.013973605, -0.0054620253, 0.020133102, -0.015265892, -0.0044535585, -0.034130864, -0.03026608, 0.0068781055, -0.07164341, -0.014577477, -0.029444814, -0.03688452, -0.028840942, 0.003901015, -0.034082554, -0.025628341, 0.03504875, 0.020773208, 0.009982009, -0.012645086, 0.019046133, -0.040870078, 0.002113553, -0.0147103295, 0.027174255, 0.033599455, 0.019903632, -0.021135531, -0.032222625, -0.0026872319, -0.00048347528, -0.046377394, 0.019939864, 0.008599142, -0.048068237, 0.012325034, 0.036232337, -0.0587447, 0.041546416, -0.005664322, 0.06236793, -0.013466353, -0.005939084, -0.041329022, 0.06623272, 0.024807075, 0.026352989, -0.03376854, 0.053044144, -0.0481407, 0.05618428, -0.006558053, 0.01698089, 0.0104953, -0.044324227, -0.0053714444, -0.024009963, 0.02458968, -0.024722533, 0.013804521, -0.003315259, 0.05995244, 0.05995244, 0.02085775, -0.032077696, 0.053623863, 0.027488267, -0.008454212, -0.006346698, 0.013599205, 0.034758892, -0.022874683, -0.031715374, -0.047488518, 0.07449369, -0.0010341314, -0.057730194, 0.021159686, 0.016775573, -0.023671795, -0.013140261, -0.018055782, -0.011805704, -0.009021852, 0.011908362, 0.012095562, -0.037198536, -0.05207795, 0.046836335, -0.0033967819, 0.011376955, 0.006364814, -0.017584762, -0.00335753, 0.006364814, -0.014348006, 0.035217833, -0.007542365, 0.014372161, 0.0038708216, -0.04043529, 0.008870884, -0.008466289, -0.040459447, -0.053334, 0.016159624, -0.038285505, 0.0035719047, 0.0004498849, -0.0018282235, -0.029734673, 0.0513533, -0.029686363, -0.0023475536, -0.04872042, -0.0005831142, 0.07294778, 0.0033092203, 0.036232337, 0.024493061, 0.0062802723, 0.08488029, -0.014698252, 0.028019676, 0.021558242, -0.016014693, 0.013671669, -0.0025226765, -0.008405902, -0.044203453, -0.024348132, 0.0010001635, -0.013538817, 0.014819027, 0.032222625, -0.03772994, 0.017826311, -0.027512422, 0.0024154892, 0.019553386, 0.03717438, -0.015072653, 0.012741705, -0.020229723, -0.012306917, 0.018744197, 0.025459256, 0.050870202, -0.02843031, 0.006274233, 0.022270812, 0.01678765, 0.05207795, 0.029927911, -0.025241863, 0.0011850994, 0.031135656, -0.020579968, 0.019782856, -0.028937561, -0.018502647, -0.0059722974, 0.027029324, -0.019480921, -0.02487954, -0.012959099, -0.04033867, -0.003807415, 0.032802343, 0.05372048, -0.046618942, -0.03584586, -0.0048732497, -0.034758892, -0.041546416, -0.015543673, 0.039469093, -0.033937626, -0.044275917, -0.037705787, -0.047585137, 0.002756677, 0.019456767, -0.0072283517, -0.006866028, -0.016546102, -0.018526802, -0.007638985, 0.008188508, 0.023140388, -0.056619067, -0.007439707, 0.037101913, 0.015761068, -0.027802281, 0.01461371, -0.019178985, 0.018563034, 0.00785034, -0.022258734, -0.02004856, -0.04676387, -0.031981077, 0.023865033, 0.023671795, -0.0076269074, 0.01853888, -0.020833595, -0.0034390527, 0.0148673365, 0.022778064, -0.038599517, 0.048527177, 0.023683872, 0.007349126, -0.03140136, 0.011250141, -0.09164366, -0.025048623, 0.03173953, -0.036280647, -0.0029846388, -0.042391837, 0.008430057, -0.021642784, 0.014855259, -0.0034360334, 0.01821279, -0.0062017688, 0.029203266, -0.0059511615, 0.016908424, -0.006238001, -0.01991571, -0.0011518864, -0.034976285, 0.022186268, 0.040845923, 0.014154767, -0.0014726936, -0.027439957, -0.0043961904, -0.048309784, -0.025459256, 0.0090762, 0.035217833, -0.02407035, 0.0033394138, 0.035700932, 0.0058726585, -0.024082428, 0.03845459, 0.013297268, 0.03144967, 0.007892611, 0.0047887075, 0.014927723, 0.022258734, -0.028913407, -0.01821279, 0.020060638, -0.012415615, -0.039324164, 0.008599142, 0.0021965855, -0.026038975, -0.017596839, 0.022391586, 0.0056884773, 0.023321548, 0.06444525, -0.02804383, -0.0047343588, -0.0021980952, -0.02473461, -0.0005491464, -0.014106457, -0.04775422, 0.0057005547, -0.0006148175, -0.019372223, 0.0010152603, -0.031328894, 0.043333877, 0.028889252, 0.009414369, -0.010664385, -0.013599205, 0.0048521142, 0.05140161, 0.048961967, 0.004375055, 0.0046045263, 0.0397348, -0.0031552329, 0.03352699, -0.0021528048, -0.023321548, 0.008273051, -0.055942733, -0.03647389, -0.026425453, 0.024807075, -0.00666675, -0.019565463, -0.024058273, -0.03437241, 0.012814171, 0.0046800105, 0.006884144, 0.008333438, 0.0021950759, 0.0538171, 0.007222313, 0.04913105, 0.015773145, 0.014831104, -0.009245285, 0.03509706, 0.020012328, -0.020604122, -0.0059179487, -0.0057488643, 0.016691031, 0.054251887, -0.0024034118, -0.012234453, -0.022500282, -0.0049728886, -0.011395071, -0.066619195, -0.020084793, 0.009088279, 0.006866028, 0.020676589, -0.03731931, 0.037633322, 0.008925233, -0.0017180167, -0.0047162427, 0.017778002, 0.02085775, 0.018623423, -0.03553185, 0.011515845, 0.0117151225, 0.00094506016, 0.0005868884, -0.015869765, 0.05198133, 0.005945123, 0.029541433, 0.026111439, -0.027488267, -0.026691156, -0.008067735, 0.042826623, -0.025628341, 0.013889063, 0.016087158, 0.024251511, -0.014939801, -0.021546165, -0.005504296, 0.011980827, -0.033551145, -0.06251286, -0.026642846, -0.0933345, -0.0328265, 0.026618691, -0.0013187062, 0.04014543, 0.015579905, -0.056764, 0.019505076, -0.013490507, 0.0234544, -0.021413311, 0.02671531, 0.019782856, -0.012119717, -0.0007118145, 0.021014756, -0.04734359, 0.018937435, 0.012282763, -0.016727263, -0.009184898, 0.005739806, -0.012608854, -0.032295093, -0.02567665, 0.01602677, 0.05202964, -0.007989231, -0.033261288, 0.0023868054, 0.0076691783, 0.018925358, 0.0011269767, -0.007699372, -0.011183715, 0.010199403, 0.00092467945, 0.0022932051, -0.014166844, 0.016002616, -0.0003666637, -0.03707776, 0.019287681, 0.025580032, -0.014021915, 0.060193993, -0.01560406, -0.0120895235, -0.020579968, 0.025169399, -0.03777825, -0.0053140763, 0.02436021, -0.030990727, 0.05391372, -0.026884396, -0.009643841, -0.028671857, 0.003765144, 0.016751418, -0.02256067, 0.009764615, 0.0114192255, 0.04043529, -0.008176431, -0.01158831, -0.008061695, 0.026473762, 0.0010537572, -0.051788088, -0.0011473574, 0.00097298925, 0.09488042, -0.011286373, -0.009571376, -0.004951753, -0.018369796, -0.025797425, 0.005329173, 0.0010039377, 0.0027295027, -0.0050393143, 0.016678954, -0.017693458, 0.006654673, -0.033744384, -0.003541711, -0.00033175235, 0.001778404, -0.011799665, 0.054783296, 0.030700868, -0.0038708216, 0.0029770904, 0.002104495, -0.01673934, 0.0004370526, 0.0034722658, -0.018369796, 0.007312894, 0.038092267, -0.06231962, -0.008140199, 0.00217545, -0.024698377, 0.00052612374, 0.02473461, 0.011503767, -0.002818574, -0.0093298275, 0.063720606, -0.018647578, -0.026352989, 0.010779121, -0.008043579, -0.009535144, -0.039469093, 0.020302188, 0.02927573, 0.012270685, 0.013176494, 0.052319497, -0.06937285, 0.00045063972, 0.031981077, -0.0038436472, -0.014686175, 0.00378326, 0.0017149973, -0.0053140763, 0.0002728748, 0.0014379709, -0.011902323, 0.0070351125, 0.018321486, -0.029468969, 0.02572496, 0.045048874, -0.0009994087, -0.016473636, -0.027729817, 0.034348257, -0.027874745, -0.002374728, -0.008399864, 0.027367493, 0.05840653, 0.013128184, 0.020121025, 0.0148673365, 0.06840666, -0.0020561852, -0.025410946, 0.01868381, 0.0019686238], [0.03079363, 0.02468505, -0.025072534, 0.0068892483, 0.025801916, 0.010866663, -0.029129725, 0.057210963, -0.005564393, 0.04321593, -0.029973073, 0.00597752, 0.010439291, -0.0046783066, -0.026029848, 0.032822225, -0.020536683, -0.0005961849, 0.016468097, -0.067148805, -0.010000521, -0.05748448, -0.0997431, 0.022918575, 0.023112318, 0.0058407607, -0.00028936696, 0.012410904, -0.056299232, 0.014599052, 0.058806486, 0.0001655179, 0.043329895, -0.004988864, -0.021391429, -0.022690643, 0.013254253, 0.048640713, -0.010627335, -0.0005278053, 0.0030628378, -0.031340666, 0.022086622, -0.03747204, 0.003552892, 0.005108529, -0.03371116, -0.014690225, 0.031044355, -0.035785343, 0.00543903, -0.023955666, 0.0022750474, -0.0024958567, -0.01588687, 0.011043311, 0.018679038, -0.09646087, 0.039067566, -0.017186081, -0.019681938, -0.0144395, 0.0044076373, -0.027192302, -0.028765034, -0.03216122, 0.03136346, 0.027944477, 0.056299232, 0.0074590784, -0.02266785, 0.06254458, -0.020422718, -0.016057817, -0.018496692, -0.041757163, 0.07836306, -0.0025827559, -0.032822225, -0.0053706504, -0.0018263061, 0.001937423, 0.0053364607, 0.00081200816, 0.0376088, -0.034167025, -0.00016827801, -0.10366353, -0.007122879, 0.012843975, 0.034531716, 0.00027209398, 0.02944883, -0.011237053, -0.051558245, 0.029471623, 0.016547872, 0.012638836, -0.024046838, -0.018462501, -0.010957837, -0.021015342, -0.06067553, -0.04223582, 0.050783277, 0.022553883, 0.037449248, -0.02924369, -0.008353712, -0.009778288, 0.01927166, -0.025984261, -0.059171177, 0.017300047, -0.02931207, 0.054840468, -0.008803878, -0.050418586, -0.02246271, 0.010735603, -0.046361394, -0.014177378, 0.026782025, 0.05903442, -0.010291135, 0.0076642176, 0.012205765, 0.027716545, -0.0064276857, -0.01614899, -0.0072083534, 0.056527164, 0.027146716, 0.030907596, 0.060994636, -0.010268342, 0.06350189, -0.03136346, -0.026485713, 0.004490263, -0.04654374, 0.0014701622, -0.02094696, 0.01312889, -0.055752195, -0.027556993, -0.033597194, -0.018223172, -0.04731871, -0.04237258, 0.010935043, -0.0010171471, -0.018416915, 0.035238307, -0.0042594816, -0.0151119, 0.042805653, 0.06865315, -0.0036925003, 0.013493582, 0.008718404, -0.067467906, 0.030269386, 0.0025970016, 0.030702457, -0.070203096, 0.060174078, -0.012878165, -0.03361999, 0.020228976, 0.057302136, -0.035215512, -0.020331545, 0.0056698113, -0.02209802, 0.0376088, 0.044765867, 0.002887615, -0.030816423, -0.057028618, -0.03569417, 0.04221303, 0.06395775, -0.06195195, 0.021243274, 0.024115218, 0.036993384, -0.0104164975, 0.07111482, -0.040343985, 0.0008590192, -0.045654804, -0.044515144, -0.055113986, 0.0033733954, -0.038566116, 0.0057125487, -0.05443019, 0.00594333, 0.022052433, 0.019898474, -0.03610445, 0.0026611076, -0.018758813, -0.018565072, -0.013356823, -0.002662532, 0.020263165, 0.045153353, 0.014393914, -0.0064618755, -0.0069120415, 0.0021838746, -0.014542069, 0.0022237627, 0.021095118, -0.0463386, 0.013641737, -3.6282163e-05, -0.048002504, 0.087252416, -0.03434937, -0.007595838, 0.019237472, -0.022177795, 0.0003543632, 0.02011501, -0.0008305277, -0.0048606526, 0.012422301, 0.014029222, -0.041324094, -0.029631175, 0.002028596, -0.060994636, 0.0104164975, 0.00963583, -0.0074761733, 0.05329053, 0.006074391, 0.0149295535, 0.052469973, -0.05288025, -0.004362051, -0.029061345, 0.033232503, -0.00071050716, -0.052697904, -0.040207226, 0.011328226, 0.024001252, -0.0419851, 0.080505624, 0.054886054, -0.0023434272, 0.036628693, 0.0005495301, -0.035078753, 0.018462501, 0.03334647, 0.0011724258, 0.0066214283, -0.03931829, 0.043694586, 0.0402984, -0.039067566, 0.049142163, -0.056253646, -0.057210963, -0.020411322, 0.048276022, -0.059991732, 0.071433924, 0.06765025, 0.0073052244, -0.017083513, 0.060857877, -0.003817863, -0.027739339, 0.048595127, 0.029061345, 0.026326159, 0.0073280176, 0.013391012, -0.016935356, 0.037244108, -0.043671794, -0.018177586, -0.04791133, -0.033802334, -0.025938675, -0.010057505, 0.020730427, 0.035147134, 0.020388529, 0.014120394, 0.0012400931, 0.024890188, -0.0073451125, -0.009379406, 0.004988864, 0.0302238, -0.046293013, -0.029129725, 0.009356613, 0.044971008, -0.008239746, 0.057575654, -0.021311654, -0.038087457, 0.057712413, -0.012616043, -0.08615834, -0.07726899, -0.002165355, -0.026827611, 0.014542069, 0.0020200484, 0.056527164, -0.05689186, -0.031454634, -0.052424386, -0.059854973, -0.0067809806, 0.022690643, 0.0033762446, 0.035169926, -0.009852366, -0.0141431885, -0.015305642, -0.015442401, -0.049142163, -0.029084139, -0.010205661, -0.004290822, -0.07995859, -0.03284502, -0.05420226, 0.011459287, -0.011054708, -0.045153353, -0.007783882, -0.014781398, -0.017881274, -0.0016040723, -0.026554093, -0.004795122, -0.017755913, 0.008034607, 0.03469127, 0.0013355397, 0.059991732, -0.0063650045, 0.04462911, 0.00052495615, -0.052971426, -0.07075013, -0.03336926, -0.031956084, 0.023408629, 0.07002075, -0.08652303, -0.0051227743, 0.037244108, 0.00036380102, -0.058988832, -0.0058578555, -0.01826876, 0.003909036, 0.045654804, -0.025779122, 0.0075616483, -0.037152935, -0.06769584, -0.032206807, -0.021847293, 0.0012835427, -0.0017550773, -0.03979695, 0.011294036, 0.017505188, -0.01575011, 0.0057638334, 0.020696236, -0.017801499, 0.018849986, 0.035010375, -0.01692396, 0.013687324, 0.025984261, 0.006000313, -0.0092369495, 0.0426461, -0.0007023158, 0.010085996, 0.03364278, -0.048276022, 0.034531716, -0.00017201752, 0.0069519295, -0.000514628, 0.016445303, -0.025915882, -0.0010114488, 0.035397857, -0.056846272, 0.007994719, -0.031021561, 0.028354757, 0.043603413, -0.011601745, 0.020981152, 0.008165668, 0.0023818905, 0.036423553, 0.042760067, -0.0020927018, 0.03434937, -0.029836314, -0.012809785, 0.022337347, -0.018040827, -0.016137594, 0.011476383, -0.045016594, 0.03966019, -0.040549126, 0.047136363, -0.03781394, -0.02391008, -0.00597752, 0.009749796, 0.033232503, -0.024821809, -0.015374022, -0.07900127, 0.009219854, -0.061496086, -0.03229798, 0.004313615, 0.028628275, -0.018439708, 0.013345426, 0.015157486, -0.064823896, 0.026326159, -0.080551215, -0.016969547, 0.0238417, -0.03314133, -0.04854954, 0.0069291363, -0.095913835, -0.0033135633, 0.05342729, -0.005490315, 0.06569004, 0.024799015, 0.026713645, -0.08169087, -0.0103310235, -0.01870183, 0.02612102, -0.034531716, 0.016650442, 0.0029602684, -0.0075844415, -0.02099255, -0.0043164645, 0.017961051, 0.007020309, -0.016376922, -0.016639045, 0.05187735, -0.01699234, -0.035238307, -0.014621845, 0.08036887, 0.031545807, -0.004327861, -0.03428099, -0.0144508965, 0.026440125, 0.03918153, 0.013493582, -0.020593667, 0.015351228, -0.005419086, 0.0839702, 0.0014530673, -0.020274563, 0.05342729, 0.06354748, -0.018075017, 0.006137072, -0.01185247, -0.02025177, -0.03475965, 0.008803878, 0.019590765, 0.045039386, 0.044606317, 0.012479284, 0.049917135, 0.023955666, -0.026371745, -0.05110238, -0.021448413, -0.035899308, 0.021220481, -0.018815797, -0.0056584147, -0.055159573, 0.025140913, -0.019932663, 0.010952138, 0.002857699, 0.019032331, 0.00031233823, 0.0366059, -0.021391429, -0.0047894237, -0.027009957, 0.026371745, -0.016878374, 0.007726899, -0.016468097, 0.03462289, 0.007954831, -0.043466654, -0.022006847, -0.028559895, -0.03966019, -0.008222652, 0.011476383, -0.018416915, 0.015305642, 0.028195202, -0.012821182, 0.025528397, -0.020399924, 0.06222547, 0.009840969, -0.0055615436, -0.022690643, 0.061404914, 0.019248867, 0.032890607, -0.009903651, 0.02689599, -0.033300884, 0.058305036, -0.0066670147, -0.0048065186, -0.012342525, -0.02441153, -0.038155835, -0.046110667, 0.031682566, -0.022086622, 0.0013903859, 0.016935356, 0.056162473, 0.06067553, -0.02646292, -0.05151266, 0.018508088, -0.03320971, 0.013277046, 0.0009900802, 0.050418586, 0.03519272, -0.009915047, -0.018451106, -0.023089524, 0.07913803, 0.0068550585, -0.06231664, -0.011185769, 0.0024588178, -0.0144508965, -0.017186081, 0.008416394, -0.041620404, 0.02441153, 0.01249068, -0.013539168, -0.036446344, -0.032252394, 0.031568598, 0.002004378, 0.036583107, 0.015408211, -0.036742657, -0.01799524, 0.015054917, 0.014826984, 0.0137784965, -0.020969754, 0.015328435, 0.004832161, -0.022006847, 0.018211776, 0.035078753, -0.022405727, -0.028924586, -0.010029013, -0.046862844, 9.72273e-05, 0.018941158, -0.0074362853, -0.025779122, 0.061496086, -0.027488614, 0.015966645, -0.023590975, 0.0016938206, 0.05151266, 0.004587134, 0.031067148, 0.04841278, 0.03781394, 0.038588908, -0.014724415, 0.029676761, 0.010792586, 0.0008725526, 0.021676345, 0.0013661681, -0.0060345028, -0.0040942305, -0.011829677, -0.02710113, -0.019499592, 0.005421935, 0.02498136, -0.005678359, 0.06058436, -0.016365526, 0.0113966055, 0.015909662, 0.0024103823, 0.024935775, 0.07731458, -0.034463335, -0.032115635, 0.026759231, 0.03496479, 0.024639463, -0.025095327, -0.009088793, -0.008444885, -0.024639463, 0.050828863, 0.020719029, 0.00913438, -0.022713436, -0.004008756, -0.030839216, 0.0096586235, -0.018291553, -0.010792586, -0.003988812, 0.022804609, -0.03546624, -0.020525288, -0.010889457, -0.031545807, -0.022622263, -0.003746634, 0.0876627, -0.05201411, -0.067787014, -0.012604646, -0.039774153, -0.01655927, -0.010251247, 0.039113153, -0.040571917, -0.024024045, -0.035716962, -0.040002085, 0.027123922, -0.013003527, -0.043808553, -0.009345217, -0.0061484687, 0.008849464, 0.019852888, 0.010085996, 0.013653134, -0.02830917, 0.015704524, 0.033392057, -0.005527354, 0.0013447995, 0.001437397, 0.0015727316, 0.00550741, 0.010348118, -0.015396815, -0.0068721534, -0.011539063, -0.001863345, 0.042418167, 0.02646292, -0.0091799665, -0.007652821, -0.061404914, -0.031614184, 0.024001252, -0.00035525358, 0.03599048, 0.039135944, -0.03485082, -0.024844602, -0.025779122, 0.019636352, -0.08333198, 0.021801706, 0.02830917, -0.008336618, -0.011749901, 0.0033107141, -0.0045415475, -0.031386252, 0.015932456, -0.02327187, 0.038064662, -0.017140495, 0.02844593, -0.020285958, 0.0056983028, 0.014713018, -0.01927166, -0.003384792, -0.011898057, 0.019704731, 0.025232086, 0.014678828, 0.01588687, -0.014359724, -0.03569417, -0.05000831, 0.0027294871, 0.028491516, 0.05584337, -0.027260682, -0.029061345, 0.03279943, -0.0010556106, -0.043945312, 0.05739331, 0.00076570944, 0.03072525, -0.0022209135, 0.023568181, -0.008137177, 0.012467887, -0.018918365, 0.0046298713, 0.029494416, -0.027260682, -0.014986536, 0.05260673, 0.002283595, -0.006712601, -0.050053895, 0.004852105, 0.0059718215, 0.04016164, 0.052424386, -0.024525495, -0.0039546224, 0.030839216, -0.010952138, 0.023146506, -0.006689808, -0.0523788, -0.04782016, 0.02246271, -0.018200379, -0.017163288, -0.026713645, 0.009892254, -0.00013382109, 0.020160597, -0.0056156777, 0.0066613164, -0.042828444, 0.032047257, 0.02111791, 0.0029175312, 0.0055757896, 0.024457116, -0.020832995, 0.03562579, 0.0325715, 0.023682147, 0.007932038, 0.019807301, -0.04038957, 0.006017408, 0.063410714, -0.027853305, -0.011863867, -0.003273675, -0.018724624, 0.0013184448, 0.02696437, 0.0145078795, -0.009709909, 0.017379824, 0.028012857, -0.021049531, 0.054156672, 0.01706072, 0.002296416, 0.033870712, 0.018451106, 0.022610866, -0.06705763, -0.003236636, -0.023089524, 0.019670542, 0.0641401, -0.01500933, 0.0023434272, -0.01809781, -0.0097384, -0.0057097, -0.08242025, -0.031591393, 0.028924586, 0.037244108, 0.027351854, -0.01306051, 0.02008082, 0.033756748, -0.004555793, 0.012912354, 0.021550981, -0.004111326, 0.009829572, -0.019226074, 0.03314133, 0.015921058, 0.0023690695, 0.0085645495, 0.02199545, 0.023306059, -0.020707633, -0.0053478573, 0.013960842, 0.00392898, -0.028696654, -0.018200379, 0.022941368, 0.035147134, -0.014667432, 0.0016026477, 0.05789476, -0.021163497, -0.055113986, 0.028081236, -0.008370807, -0.036856625, -0.058213864, 0.0029773633, -0.033688366, -0.013402409, -0.008553153, 0.03320971, 0.012935148, 0.010365213, -0.0641401, 0.02568795, -0.010781189, 0.0067239976, 0.002031445, -0.012091799, 0.029175311, -0.015487988, -0.012946544, -0.021311654, -0.050692104, 0.039249912, -0.04987155, -0.0238417, 0.03266267, -0.011567555, 0.0037209918, 0.022850195, -0.05274349, 0.02612102, 0.016513683, -0.011026217, 0.004025851, -0.015271452, 0.024935775, 0.00688355, 0.021038136, 0.020844392, -0.03817863, 0.0037694275, -0.023955666, -0.01259325, -0.0037181426, -0.030474525, 0.027807718, -0.0325715, 0.00748757, 0.03029218, -0.03127229, 0.048959818, -0.0033392056, -0.025368845, -0.0093224235, 0.04023002, -0.011487779, 0.015943851, 0.009088793, 0.005527354, 0.03482803, -0.025140913, 0.0020129255, 0.010291135, -0.0010976356, -0.009709909, -0.043626208, 0.004758083, 0.011117389, 0.007971926, 0.025368845, 0.0012279843, 0.0060914857, 0.010245549, 0.01984149, -0.0059946147, -0.00096586236, 0.026234986, 0.05584337, -0.013425202, 0.015989438, 0.030109834, -0.006359306, -0.009271139, 0.047728986, 0.019864284, -0.027579786, -0.020525288, 0.04321593, -0.025391638, 0.02327187, 0.0034275292, -0.00023719187, 0.011294036, 0.03165977, 0.007806675, 0.018587865, 0.032685466, -0.007630028, 0.024138011, 0.01685558, 0.01695815, 0.029334864, 0.03804187, -0.059216764, -0.028058443, 0.020764615, -0.03177374, 0.0032651275, 3.4835328e-05, -0.01490676, 0.047136363, 0.024730636, -0.00027529927, -0.025596777, 0.012684423, 0.037221316, 0.02229176, -0.028559895, -0.03719852, 0.00031483124, -0.021938467, -0.007994719, 0.017345635, 0.034736857, 0.023260472, 0.036013275, -0.0035785343, -0.07526319, -0.018462501, 0.062362228, -0.005960425, -0.022109415, 0.0067809806, -0.016787201, 0.0008739772, -0.036583107, 0.01890697, 0.017300047, 0.015089107, -0.010576051, -0.0092369495, 0.03562579, 0.015943851, -0.011351019, -0.011111691, 0.00068379636, 0.030064246, -0.020673443, -0.018963952, 0.015864076, 0.0406403, 0.056162473, 0.02605264, -0.0053706504, -0.00883237, 0.08807297, 0.005758135, -0.045449663, 0.016046422, -0.02837755], [0.0058563803, 0.007342592, -0.020311555, 0.03493776, 0.023826564, 0.010102699, -0.04310013, 0.05751402, 0.00028142915, 0.0323192, -0.02845033, -0.012963066, -0.017657606, -0.008162367, 0.003597575, 0.012632797, -0.039349213, -0.0053668744, -0.010438865, -0.046685908, -0.0013033837, -0.07303667, -0.042982176, 0.013222563, 0.000995968, -0.017173998, -0.0011146585, 0.037131693, -0.0033056408, 0.0067705186, 0.023519885, 0.012679978, 0.0051014796, -0.02837956, 0.041849826, -0.005676502, 0.024274785, -0.025572272, 0.0007265185, -0.012927679, -0.017999671, 0.015416494, -0.017869921, -0.035102896, -0.007165662, 0.017185792, -0.008315707, -0.024392739, -0.017280156, -0.025548682, 0.0036919378, -0.032177657, 0.034324404, 0.0045588943, -0.042368818, -0.0046827453, 0.048290074, -0.08209548, 0.06666719, 0.0027940185, -0.012278937, 0.0059979246, 0.029794998, 0.005464186, -0.025855359, -0.042156503, 0.006971039, -0.009713452, 0.034984943, 0.041024152, -0.008681362, 0.019651016, -0.014142599, -0.04883266, -0.021266976, -0.04826648, 0.05491905, -0.004063491, -0.016725775, -0.006257422, 0.034819808, -0.020052059, 0.0017634016, 0.016053442, 0.010261935, -0.01706784, 0.030832987, -0.10210036, -0.013552832, -0.023083458, 0.023048071, -0.009784224, 0.0065641003, 0.03165866, -0.009642681, -0.004635564, 0.046119735, 0.0087403385, -0.038971763, -0.02517123, -0.03696656, -0.08577563, -0.059212547, -0.07671682, -0.025949722, 0.01050374, 0.04996501, -0.011028632, -0.025784587, -0.021668019, 0.05600422, -0.028874964, 0.0062220357, 0.00067122787, -0.025949722, -0.010810418, -0.022776779, -0.060627986, -0.020724392, 0.005231228, -0.10238345, -0.0058357385, 0.083888374, 0.005829841, -0.04560074, 0.0388774, 0.005935999, 0.0459546, 0.00076890795, 0.015027248, -0.005304949, 0.050484005, 0.014944681, 0.07327258, 0.06331732, -0.017209385, 0.039726667, -0.037579916, -0.019521268, -0.0023811818, -0.086672075, 0.0011279283, -0.006894369, 0.046214096, -0.03474904, 0.024510693, -0.0095424205, -0.0004581748, -0.052418437, -0.02835597, -0.015251359, -0.025407137, -0.04713413, 0.0055791903, 0.004564792, -0.0110876085, 0.00079249864, 0.047299266, 0.0010107122, 0.037863005, 0.035527527, -0.0568063, -0.018789958, 0.013824125, 0.020618234, -0.069214985, 0.020111034, 0.00674103, -0.045412015, 0.02804929, 0.014402096, -0.010969656, -0.049823467, -0.010999143, -0.0237322, 0.018011466, 0.0426755, 0.035669073, -0.0038364306, -0.09054094, -0.038004547, 0.052559983, 0.05746684, -0.030809397, 0.031776614, 0.050248098, 0.019084841, -0.0100378245, 0.005069042, -0.042227276, -0.044680703, -0.023083458, 0.017516062, -0.03090376, -0.0019226385, -0.03269665, -0.009837303, -0.045152515, -0.013045633, 0.002870688, -0.025737407, -0.008156469, -0.025124049, 0.02800211, -0.042840634, 0.032908965, 0.03411209, -0.0373676, 0.018742777, 0.046544366, 0.012125597, 0.04673309, -0.0001788651, -0.026091266, 0.014579026, 0.021172615, -0.07011143, 0.039773848, 0.0036978354, -0.024605054, 0.051097363, -0.01866021, 0.013316926, 0.023130639, 0.03236638, 0.047487993, 0.06940371, -0.006894369, 0.022694211, 0.03236638, -0.018542256, -0.035197258, -0.0060303616, 0.0653933, -0.05539086, 0.018353531, -0.0019093688, -0.012727159, 0.036541928, 0.006257422, 0.050059374, 0.042533953, -0.052276894, -0.014991862, 0.023036275, 0.06907344, 0.0013483535, 0.0013594116, 0.001651346, 0.020618234, 0.021644427, 0.0062397285, 0.01981615, 0.035385985, 0.032484334, 0.027907746, 0.003211278, -0.021750586, -0.0055054696, 0.05826892, -0.02840315, 0.046544366, 0.016949886, 0.051286086, -0.00989628, -0.012915884, 0.0059418967, -0.049351655, -0.063600406, -0.022965504, 0.089691676, 0.014673389, -0.015333926, 0.02262344, 0.043878622, -0.016820138, 0.079547696, 0.015192383, -0.046851043, 0.08039696, 0.018837139, -0.018094033, 0.05468314, 0.0028028649, -0.01348206, -0.034017727, 0.010497842, -0.057278115, -0.043241672, 0.03878304, -0.030809397, 0.0032171758, 0.057372477, 0.0035533425, 0.041071333, -0.0050189123, 0.010315014, 0.048030578, -0.03203611, 0.010721954, -0.020948503, -0.0053668744, -0.019403314, -0.02837956, 0.027058482, 0.04390221, -0.020252578, 0.07723581, -0.022375738, -0.035150077, 0.07959487, 0.005950743, -0.01815301, -0.0017103226, 0.009052915, -0.0217152, 0.029276004, 0.021325953, 0.052607164, -0.051474813, -0.027742611, -0.04527047, -0.08860651, 0.052135352, 0.0039809234, -0.0070005273, -0.035904977, -0.04059952, -0.060627986, 0.017834537, -0.060863893, 0.008681362, -0.005809199, -0.020252578, -0.03814609, -0.09709914, -0.031422753, -0.023696814, 0.031823795, -0.025595862, -0.026822576, -0.012514844, -0.020240784, -0.037273236, -0.0014124905, 0.003880663, 0.010450661, -0.005582139, 0.032248426, 0.00014928462, 0.0012989605, 0.022552667, 0.0434304, 0.0038836119, 0.013765148, 0.0012805304, -0.020311555, -0.03236638, -0.014673389, 0.0068766763, 0.03628243, -0.097476594, 0.0023841306, 0.01345847, 0.00083525665, -0.032484334, 0.0010210332, -0.01436671, 0.017893514, -0.011541729, -0.027931336, 0.039231263, -0.0058593294, -0.037155285, -0.008663668, 0.0006247838, 0.019143818, -0.024392739, -0.043689895, 0.034064908, -0.0059065106, 0.0016307042, 0.015003658, 0.023531679, -0.008073902, 0.0027497858, -0.045010973, -0.0047092848, 0.029747818, 0.0055438043, -0.013965668, 0.03349873, -0.0076138843, -0.016301144, -0.03092735, 0.045199696, 0.00421683, 0.051097363, -0.009931667, -0.009406774, 0.013210768, -0.009507035, 0.014779546, -0.010214754, 0.027601069, -0.02320141, 0.021502884, 0.0030638366, -0.0029532553, 0.06992271, 0.0132461535, 0.0792646, 0.011801226, 0.03456031, 0.06605384, -0.011064018, -0.030030906, 0.0056234226, -0.013257949, 0.011005041, 0.0072364337, -0.028544694, -0.029771408, 0.04958756, -0.030125268, 0.034961354, -0.03272024, 0.023637837, 0.021349544, -0.039419986, -0.005148661, -0.019993082, 0.04279345, -0.011919179, 0.0023295772, -0.09615552, 0.0017766713, -0.09804277, 0.009854997, 0.020464895, 0.045459196, -0.010297322, -0.01855405, -0.011871998, -0.022694211, -0.049398836, -0.07530138, 0.015499061, -0.0110876085, -0.006811802, -0.013706171, -0.01221996, -0.07539574, 0.024050673, 0.04602537, -0.013717967, 0.024274785, 0.025572272, 0.035385985, -0.079123065, 0.0051014796, 0.045836646, 0.050814275, -0.03734401, 0.048360847, -0.029181642, -0.037556324, 0.06345887, 0.010568614, 0.02100748, -0.015699582, -0.007908768, -0.0023826563, -0.035999343, -0.011783533, -0.011276334, -0.037579916, -0.00851033, 0.048195712, 0.0015953181, -0.013163586, -0.035527527, -0.0040782345, 0.050389644, 0.046237685, -0.0059153573, 0.034064908, 0.07629218, 0.046898223, 0.008339297, 0.0025743304, 0.0142369615, 0.026279991, -0.017209385, 0.026185628, -0.03342796, -0.052276894, -0.018778162, 0.011282232, -0.03706092, -0.029677046, 0.0769999, 0.00454415, 0.062043425, 0.022198807, 0.028591875, -0.04142519, -0.0063105007, 0.020571053, -0.026822576, -0.0489742, -0.0018282759, -0.03371105, 0.024534283, -0.017150408, -0.0065582027, -0.0070889923, 0.028473923, 0.009784224, 0.020323351, -0.018117623, -0.01981615, -0.02012283, -0.03668347, -0.014755956, -0.020913117, -0.004219779, 0.006794109, -0.010444763, -0.03835841, -0.025242003, -0.014661593, 0.00951883, 0.018094033, 0.014980067, 0.0033321802, -0.016194986, 0.0371081, -0.029228823, -0.0052931537, -0.056570396, 0.06930935, -0.0077495305, -0.01853046, -0.031068895, 0.029181642, 0.022057263, -0.02479378, -0.007837996, 0.056334488, -0.05789147, 0.04536483, 0.009282923, 0.03378182, 0.014095417, -0.021821357, -0.058882277, -0.08973885, 0.012385095, -0.044090938, 0.029842181, -0.005764967, 0.050248098, 0.044374026, -0.016879115, -0.029417548, 0.04930447, 0.018778162, 0.0027719021, 0.0035415473, 0.03017245, 0.051521994, 0.009831406, -0.025902541, -0.009943462, 0.0545416, 0.013364106, -0.022658825, -0.021066457, -0.018259168, -0.0046090246, 0.014119008, 0.021219796, -0.026987711, 0.009206254, 0.012609206, -0.024605054, -0.02098389, -0.02691694, 0.04826648, -0.021467498, 0.031753022, 0.0043259365, -0.0057384274, -0.02249369, 0.0037804027, 0.008233139, 0.012090212, 0.010574512, 0.024557874, 0.004862624, -0.016147804, 0.008875985, 0.0045854338, -0.028686238, -0.0020995685, 0.060863893, -0.019674607, 0.028969327, 0.059825905, -0.086483344, -0.023909131, 0.027034892, 0.0019432803, 0.027011301, -0.031399164, -0.008062107, -0.0054553393, 0.032625876, 0.016572436, 0.032578696, 0.0039042537, 0.009359593, -0.046591546, 0.002668693, 0.00853392, -0.030667853, 0.009613193, 0.0052253306, 0.0064992257, -0.041212875, -0.022045469, -0.026020493, -0.03312128, -0.0059713847, 0.01981615, 0.017645812, 0.023107048, -0.015841126, 0.022458306, 0.034064908, 0.037556324, 0.02340193, 0.08870087, -0.04137801, -0.028874964, 0.03953794, -0.0013498279, 0.01936793, -0.009548319, -0.0012783187, 0.026492307, 0.027954929, 0.05567395, -0.002721772, -0.012715364, -0.023696814, 0.013352311, -0.036070112, -0.00019222699, -0.036423974, -0.03769787, 0.013930283, -0.008516227, 0.0064166584, -0.0063871704, -0.019580245, -0.051663537, 0.012302527, 0.03227202, 0.08704952, -0.06298705, -0.050200917, -0.006652565, -0.040410794, -0.019084841, 0.0036447565, 0.050625548, 0.0017206435, -0.042510364, -0.039467167, -0.005532009, -0.006198445, -0.021986492, -0.047912624, -0.009819611, -0.021892129, -0.0025433677, -0.007690554, 0.016855525, 0.0016100623, -0.024723008, -0.03597575, 0.04097697, -0.0042404206, -0.0025551629, 0.03194175, -0.04067029, 0.032201245, 0.01890791, 0.015310336, -0.049351655, -0.025100458, -0.0010438865, 0.0028574183, 0.048785478, -0.016985273, -0.010232448, -0.03373464, -0.03769787, 0.022564463, 0.009630886, 0.008569306, 0.06492148, 0.053645153, 0.039302032, -0.033876184, -0.020865936, -0.04807776, 0.007891075, -0.011294027, -0.046308458, -0.011984053, -0.013446674, -0.0018710339, -0.06624256, 0.026681032, -0.014767751, 0.04930447, -0.018094033, 0.004479276, -0.024392739, -0.03267306, -0.0068353927, -0.0016749366, -0.010692465, 0.0012643117, 0.014449277, 0.015121611, 0.010763237, 0.029794998, -0.019993082, -0.032531515, -0.036494747, 0.043336038, -0.008362887, 0.056334488, 0.016430892, -0.004809545, -0.0066466676, 0.00042242018, -0.017575039, 0.040104117, -0.016277554, 0.014154394, 0.026468717, 0.004334783, -0.0051191724, 0.010197061, -0.00048176543, -0.026987711, 0.00868726, 0.0058268923, -0.014319529, 0.019167408, 0.008345195, 0.016077032, -0.031021712, 0.024675827, 0.020311555, 0.030785806, 0.044421207, -0.018565847, -0.006782314, 0.021090047, -0.058787916, 0.019651016, -0.011069915, -0.045718692, -0.012060723, 0.02403888, -0.0073366943, -0.0074605453, -0.03906613, 0.018141216, 0.025100458, -0.013611808, 0.00431709, 0.027388752, 0.019662812, 0.041944187, 0.0065758955, 0.018046852, 0.013022042, 0.039797436, -0.027176436, 0.05246562, 0.006145366, 0.004231574, -0.013057428, 0.00042094578, -0.017386314, -0.00084410317, 0.014968271, -0.029370368, 0.028945735, -0.014708774, 0.02443992, -0.018318145, 0.048101347, 0.015251359, -0.009023426, -0.0009428891, 0.021479292, -0.04864393, 0.048290074, 0.005564446, -0.025124049, 0.011016836, -0.014331324, -0.023791177, -0.029936543, 0.015357518, -0.018695595, 0.008398274, 0.050767094, -0.004352476, -0.022481896, -0.012408685, -0.05822174, -0.02176238, -0.023118842, -0.02406247, 0.046591546, 0.025194822, 0.022599848, -0.031068895, 0.03479622, 0.025784587, 0.015239564, -0.020559257, -0.0022986145, -0.0355983, 0.016985273, -0.04628487, 0.039419986, 0.026020493, -0.0315643, -0.0067882114, 0.024156833, 0.017763764, 0.052324075, 0.013022042, -0.029606273, -0.013682581, 0.009984746, -0.041519556, 0.02731798, 0.010208856, 0.021797767, 0.001825327, 0.042156503, -0.00926523, -0.012762545, 0.039986163, 0.0030520412, 0.007513624, -0.065865114, -0.020594643, -0.02370861, -0.011005041, 0.025076868, 0.014685184, 0.033286415, 0.012160983, -0.021833152, -0.014968271, -0.06624256, 0.0076492704, 0.0038924583, -0.00754901, -0.006145366, -0.020771572, -0.02837956, 0.012609206, -0.039750256, 0.018223783, -0.01151224, -0.034654673, 0.00071288017, -0.0060981847, -0.017563244, 0.005865227, -0.012408685, 0.01744529, 0.008970347, -0.023637837, -0.0017206435, -0.061335705, 0.035291623, 0.01658423, 0.0009856471, -0.017209385, -0.014496459, 0.0012665234, 0.008881882, -0.022151627, 0.024911733, -0.0029399856, -0.0065405094, 0.0014935834, 0.017964285, 0.037226055, -0.043241672, -0.00053742464, -0.01934434, -0.045459196, -0.01832994, -0.009819611, -0.017386314, 0.0088641895, 0.013434879, 0.011317617, 0.03349873, -0.016265757, 0.013234358, 0.031469937, 0.03267306, 0.0129984515, -0.012715364, 0.014626207, 0.010031926, 0.0021216846, 0.006493328, -0.010261935, -0.023166025, 0.0005293154, 0.027459525, -0.020087443, -0.016949886, 0.04281704, 0.060156174, 0.004688643, 0.00018172177, -0.0063163983, -0.025265593, -0.010315014, 0.033852592, 0.0074605453, 0.01545188, 0.008875985, 0.035763435, -0.01381233, 0.0056440644, -0.013965668, 0.01050374, 0.017964285, 0.032555107, -0.0019948848, 0.020134626, 0.027954929, -0.0055467533, 0.005685348, 0.005965487, 0.030620672, -0.008934961, 0.047582354, -0.015911898, -0.004072337, 0.038287636, -0.0323192, -0.022965504, -0.0008463148, -0.0009768006, -0.0062928074, 0.01421337, -0.0011212934, -0.008168265, -0.016265757, 0.021550065, 0.029794998, -0.031918157, -0.022812165, 0.015121611, -0.011818918, -0.027907746, -0.025808178, 0.034300815, 0.02873342, -0.007944154, -0.017256565, -0.036376793, 0.015699582, 0.055532407, -0.025595862, -0.006670258, 0.021101842, -0.0037715563, 0.015074429, -0.025029687, 0.03151712, 0.004989424, -0.059731543, 0.06506303, -0.04602537, 0.04097697, -0.009660373, -0.012538434, -0.03845277, 0.01689091, 0.015664196, 0.005567395, -0.032106884, 0.019651016, 0.03446595, 0.06827136, 0.049398836, -0.021137228, 0.028214425, 0.06935653, -0.015357518, -0.0084926365, 0.017291952, -0.0032997432], [0.018223498, -0.011204661, -0.02072286, 0.04629885, 0.018247765, 0.01916986, -0.019582376, 0.027274584, 0.020104086, 0.020079821, -0.025260536, 0.018393358, 0.023270752, -0.005987548, -0.010397828, 0.007856002, -0.023452746, -0.0015075032, -0.024435503, -0.039795656, -0.048773944, -0.03511239, -0.078086846, 0.017726053, 0.0036853447, -0.014668582, 0.008923691, -0.015190293, -0.04144572, 0.015469348, 0.01943678, -0.0056265965, 0.027274584, -0.047609195, 0.011059067, -0.011247126, 0.005662995, 0.010628352, -0.031399745, 0.026692208, -0.031545337, -0.012235952, 0.02584291, -0.023416346, -0.014061941, -0.005493135, -0.029628351, -0.00466507, -0.009342273, -0.038655173, -0.013576628, -0.028730523, -0.016415708, -0.047512133, -0.04037803, 0.020468071, 0.019922094, -0.09516986, 0.0011784004, -0.030817369, -0.030598978, 0.013079182, 0.03375351, -0.016488506, -0.016330779, 0.008444444, 0.013649425, -0.012472541, 0.014753512, 0.00838378, -0.030574711, 0.053335886, 0.018272031, -0.02579438, 0.0021581256, -0.07721328, 0.07425287, 0.029725414, -0.041761175, -0.025818646, 0.02790549, -0.022931034, 0.020237548, 0.00672765, 0.012314814, -0.03533078, 0.011532247, -0.10220689, -0.037199233, -0.010215837, -0.009633461, -0.02029821, 0.007322158, -0.0072675603, -0.01235728, 0.013661558, 0.025114942, 0.014522988, -0.020916985, -0.021487229, -0.028512131, -0.03465134, -0.08182375, -0.02166922, 0.0011169779, 0.01904853, 0.05542273, -0.024447637, -0.03297701, 0.09322861, 0.0245447, -0.007291826, -0.06605108, -0.0138071515, -0.05353001, 0.023161558, -0.02239719, -0.079106, -0.019012133, 0.02974968, -0.05605364, -0.010337165, 0.06983653, 0.0044011814, -0.025673052, 0.034627076, -0.0071462323, 0.04222222, -0.00507152, 0.019849297, -0.023149425, 0.06789527, 0.088181354, 0.004486111, 0.03564623, -0.0034517879, 0.061828863, 0.016415708, -0.027711365, -0.022457853, -0.048725415, -0.020225415, -0.014777778, 0.038072795, -0.0146079175, -0.030040868, -0.001534802, -0.00043412755, -0.046250317, -0.01298212, 0.0041827904, -0.0355977, -0.0024144317, 0.011350255, 0.054112386, -0.028900383, 0.042440612, 0.068623245, -0.0125696035, 0.024107918, 0.042489145, -0.08721072, 0.0018836206, 0.055956576, -0.011259259, -0.063867174, -9.0000896e-05, -0.020771392, -0.06304214, 0.022833971, 0.03375351, -0.024520434, 0.0017365102, -0.00014113885, -0.010786079, 0.01766539, 0.014365261, 0.027274584, -0.039431673, -0.04319285, -0.031787995, 0.04088761, 0.032613028, -0.024314176, 0.020152617, 0.023962324, 0.02197254, 0.010507024, 0.020055555, -0.059839077, -0.02545466, -0.024180714, 0.0004853129, -0.03749042, -0.02652235, -0.05047254, -0.029312897, -0.03152107, 0.014547254, 0.005987548, 0.010567688, -0.043314174, -0.0059541827, -0.00023526301, -0.023416346, 0.0011511015, 0.046541505, 0.03804853, 0.007261494, -0.02729885, 0.02584291, 0.010470626, 0.0048470623, -0.037587482, -0.017786717, 0.0466871, -0.046371646, 0.014826309, 0.001763809, -0.07056449, 0.0995862, -0.01999489, 0.017908046, 0.0022536716, 0.02236079, 0.04617752, 0.020176884, 0.004853129, 0.024095785, 0.0140498085, 0.015663473, -0.023925925, -0.04595913, 0.05838314, -0.0553742, 0.017992975, -0.03676245, 0.0022112068, 0.07226309, -0.023125159, 0.00051450747, 0.037393358, -0.04234355, 0.0020110153, 0.026595145, 0.030404853, -0.013867816, 0.013916347, -0.029094508, -0.035840355, 0.0137707535, -0.01457152, 0.05270498, -0.0011738505, 0.023561941, 0.041300125, 0.00061649905, -0.032661557, -0.008116858, 0.006946041, 0.021814814, 0.033340994, -0.012242017, 0.07968838, -0.03142401, -0.03370498, 0.052947637, -0.028099617, -0.04096041, -0.032904215, 0.09284036, -0.06736143, -0.004473978, 0.030744571, 0.011386653, 0.00466507, 0.06915709, 0.018065773, -0.02501788, 0.053627074, 0.0022430555, 0.019885696, 0.009997445, 0.0011761255, 0.030186461, 0.012193486, -0.022409322, -0.043314174, -0.049210727, -0.010416028, -0.010585887, -0.032297574, 0.02729885, 0.023052363, 0.013904214, 0.0050563538, 0.0151660275, 0.010519157, -0.017434865, -0.00083564816, -0.010318966, 0.018927203, -0.05192848, -0.05503448, 0.005796456, 0.029288633, -0.0048440294, 0.10599233, -0.029507024, -0.019837163, 0.068865895, 0.02471456, -0.019, -0.05649042, 0.05168582, -0.014425926, 0.01960664, -0.02484802, 0.07837803, -0.039310344, -0.006873244, -0.020832056, -0.09813026, -0.00838378, 0.017847382, -0.017216474, 0.02192401, -0.047536395, -0.052559387, -0.00019033365, -0.054403573, -0.009142081, 0.012126756, -0.0049168263, -0.031618133, -0.12093997, -0.069011495, -0.029676883, 0.008286717, -0.010203703, -0.031739462, -0.011507981, -0.029919539, -0.02880332, -0.016646232, -0.011168263, -0.035573434, 0.017058749, 0.05047254, 0.018514687, 0.0014574552, 0.035452105, 0.02819668, 0.014753512, 0.032006387, -0.017180076, -0.054063857, -0.048628353, 0.009681992, 0.010494892, 0.054500636, -0.04578927, -0.006090677, 0.03770881, -0.020443805, -0.07357343, -0.029798212, -0.003897669, -0.0013186861, 0.023913793, -0.059596423, 0.062993616, -0.007382822, -0.04646871, -0.0010130906, -0.012144955, 0.0561507, 0.0019230524, -0.042125158, 0.01272733, -0.032394636, -0.042416345, -0.013006385, 0.021705618, -0.029895274, 0.024362708, -0.010707215, 0.025939973, 0.013710089, -0.030647509, 0.00039090437, 0.012812261, -0.032904215, -0.016173052, 0.023015963, 0.05202554, -0.052219667, 0.0037915069, 0.0043010856, 0.027444445, -0.014061941, -0.001210249, 0.002619173, 0.0059845145, 0.038800765, -0.00021156609, -0.020395273, 0.0035336844, 0.003092353, 0.04011111, -0.00063773146, 0.042780332, -0.003497286, 0.0035336844, 0.012496807, 0.041469987, -0.03263729, 0.05192848, -0.0006009539, -0.0063212, -0.0057479246, -0.03297701, -0.04557088, 0.03271009, -0.029167304, 0.054840356, -0.055859514, 0.018890804, -0.014110472, -0.028123882, -0.01457152, 0.025867177, 0.01866028, -0.006478927, -0.002267321, -0.08536654, -0.07245722, -0.023113025, -0.0026100734, 0.043362707, 0.03108429, -0.019812899, 0.0284636, -0.019764367, -0.031205619, 0.0049228924, -0.062022988, -0.01719221, 0.027954021, -0.018720945, -0.003779374, -0.009087483, -0.05047254, -0.008438378, 0.0694968, -0.0033425926, -0.00021308269, 0.004452746, 0.032394636, -0.07303959, 0.018235631, 0.04173691, 0.047172412, -0.022749042, 0.0051746485, 0.020079821, -0.025357598, 0.02072286, 0.00022028656, -0.019084929, 0.0062908684, -0.016743295, -0.014268199, -0.0048227967, -0.022991698, -0.05231673, 0.001487029, -0.023392081, 0.028560663, -0.021378033, -0.011283524, -0.034020435, -0.0042464877, 0.066099614, 0.016998084, -0.01629438, 0.012029693, 0.018308429, 0.07464112, 0.014183269, 0.0035306513, 0.0027935824, 0.026934866, -0.011186462, 0.015202426, -0.025697317, -0.04617752, -0.039771393, 0.031666666, 0.015141762, 0.030065134, 0.0261341, 0.017689655, 0.011756705, 0.02253065, -0.010500957, -0.040523626, -0.014959769, -0.017677521, -0.053287353, -0.020577267, -0.015554278, -0.032297574, 0.014462324, -0.0284636, -0.037053637, -0.023052363, 0.02970115, 0.030671775, 0.04896807, -0.002249122, -0.040693484, -0.032613028, -0.0049319924, -0.024835886, 0.013977011, -0.013467433, 0.0020853288, -0.032467432, -0.02880332, -0.014001276, -5.0355953e-07, 0.003127235, 0.024374839, 0.041033205, -0.021948276, 0.021086846, 0.044503193, -0.021681353, 0.01139272, -0.021050446, 0.09444189, 0.007940932, 0.023610473, 0.0066791186, 0.047754787, 0.04049936, 0.023100894, -0.03275862, 0.037417624, -0.072020434, 0.026692208, -0.02390166, 0.02802682, 0.030647509, -0.039261814, -0.030210728, -0.013867816, 0.024168583, -0.028924648, 0.010798212, 0.033510856, 0.10181864, 0.038024265, -0.005899585, -0.029773945, 0.059450828, -0.0029482758, -0.0050108554, 0.01044636, -0.005817688, 0.033171136, 0.0016166986, -0.028051086, -0.0016197318, 0.0497931, -0.0134553, -0.03465134, -0.0077650063, -0.0018972701, -0.009002554, -0.0107921455, -0.0065031927, -0.019291187, 0.02359834, 0.022166666, -0.028851852, -0.032467432, -0.04394508, 0.020528736, -0.049477648, 0.019509578, 0.0008894875, -0.015614942, 0.04797318, -0.008693167, 0.004307152, 0.004431513, 0.0049259258, 0.028730523, 0.0045103766, -0.0076922094, 0.009772988, -0.02863346, -0.020140484, -0.0128486585, 0.013782886, -0.03855811, 0.027565772, 0.023610473, -0.024314176, -0.016961686, 0.02819668, -0.02089272, 0.024787355, -0.042416345, 0.00956673, 0.027104724, 0.015978927, 0.04071775, 0.04345977, 0.029846743, 0.058480203, -0.03732056, 0.007322158, 0.022021072, -0.013273307, 0.004944125, -0.017726053, 0.016367177, -0.04802171, -0.03152107, -0.008365581, -0.047609195, 0.024823755, 0.027444445, 0.0051412834, 0.028730523, -0.005641762, 0.020455938, 0.040936142, 0.025139207, 0.012557471, 0.08099872, -0.042270754, -0.02415645, 0.049016602, 0.028415069, 0.021547893, -0.012472541, -0.0005429438, 0.025915708, -0.020698594, 0.050763726, 0.03710217, -0.030356321, 0.011787036, 0.014122605, -0.020553, 0.0150083015, -0.058916986, -0.010033844, 0.012369412, 0.019667305, -0.028487867, -0.012545338, -0.012084291, -0.02128097, -0.0158212, 0.02321009, 0.090171136, -0.020965517, -0.02824521, -0.016694764, -0.025114942, -0.0025600255, 0.020734994, 0.029871007, -0.015675606, -0.032346103, -0.01409834, -0.048725415, -0.0030407885, -0.007376756, -0.020407407, -0.006521392, -0.034432948, -0.001006266, -0.025867177, 0.016561301, 0.008972222, -0.054403573, -0.040426563, 0.05765517, 0.019412516, 0.0018396392, 0.011847701, -0.004103927, -0.0040796613, 0.011137931, -0.018551085, -0.038970623, -0.008226054, -0.010652618, 0.01074968, 0.009669859, -0.0030498882, -0.001645514, -0.041639846, -0.049938697, 0.024411239, 0.030501915, 0.02880332, 0.03586462, 0.0011526181, 0.0024113983, -0.0067640482, 0.0005273986, -0.08604597, 0.026061302, 0.0061816727, 0.003439655, -0.00971839, -0.017653257, 0.009706258, -0.042804595, 0.026328225, -0.007394955, 0.044381864, -0.00043943565, -0.009342273, -0.0181871, -0.012472541, 0.0152873555, -0.010033844, 0.0055022347, -0.036422733, 0.013006385, 0.017689655, 0.016148787, 0.028366538, -0.033292465, -0.019485312, -0.02819668, 0.0007059786, -0.010573754, 0.047390804, -0.029725414, 0.0069581736, -0.0038218389, -0.020128353, 0.015190293, 0.030744571, -0.011441251, 0.016476372, 0.049744572, 0.045376755, 0.0029619252, 0.009694125, -0.019715836, -0.03683525, 0.004840996, -0.015396551, -0.01844189, 0.03972286, 0.014171137, 0.005817688, -0.058819924, 0.020734994, 0.00894189, 0.032613028, 0.061634738, -0.042586207, -0.007880268, 0.022033205, 0.002573675, 0.014802043, -0.022421455, -0.052365262, -0.019072797, 0.0134553, -0.0029604086, -0.002626756, -0.018963601, 0.0497931, 0.010543423, -0.0033395593, -0.01625798, -0.004619572, 0.0017516762, 0.0051837484, 0.027541507, 0.048215836, -0.0014847541, 0.052559387, -0.032831416, 0.047900382, -0.018417625, 0.015978927, 0.0110712005, 0.0055507664, -0.03736909, -0.024107918, 0.0073039588, -0.009609195, -0.033729244, -0.021547893, -0.033122603, -0.04557088, 0.032006387, 0.03872797, 0.0158212, 0.013977011, 0.016901022, -0.031399745, 0.018514687, 0.012836526, -0.03448148, 0.010312899, 0.038533844, -0.026061302, -0.068477646, -0.0023537674, 0.0031636334, -0.007904533, 0.018866539, -0.003867337, -0.025721584, -0.0012997285, -0.043750957, -0.028924648, -0.05532567, -0.019497445, 0.018526819, 0.00090465357, -0.007552682, -0.031666666, 0.015918262, 0.031715196, -0.0006604805, -0.016318645, 0.012472541, -0.012618135, 0.02141443, -0.019897828, 0.033219665, -0.008838761, -0.024629628, 0.00917848, 0.020747125, 0.043168582, 0.036010217, 0.020637931, 0.01999489, -0.03460281, -0.032273307, -0.0474636, 0.008662835, -0.03465134, 0.001565134, 0.030065134, 0.026182631, 0.0067215837, -0.038194124, -0.005993614, -0.008110791, -0.028779054, -0.073476374, -0.013722222, -0.07745594, -0.0026161398, -0.020710727, 0.033680715, 0.025163474, 0.023234354, -0.021390166, 0.006600255, -0.025430396, 0.030477649, -0.00077005505, -0.011301724, 0.0036064815, -0.046832692, -0.04183397, -0.009275543, -0.031448275, 0.018235631, -0.01874521, -0.0316424, 0.0073524904, 0.024738824, -0.0026737708, 0.018393358, 0.008153257, 0.015141762, 0.008778097, 0.018805875, 0.026206896, -0.0134553, 0.03486973, -0.0038279053, -0.0007689176, 0.01749553, -0.03271009, 0.017774584, 0.00022369891, -0.014741379, 0.0118719665, 0.0049350252, -0.005750958, -0.035791826, 0.015335888, 0.0074434862, -0.047172412, 0.05047254, -0.024945082, -0.035913154, -0.0023113026, 0.021038314, -0.028730523, -0.002714719, 0.015044699, -0.0015803, 0.044430394, 0.0015818167, 0.013164112, 0.00014900623, 0.03503959, -0.011125798, -0.048773944, 0.028948914, 0.0038430714, 0.0046802363, 0.0007541307, -0.008608237, -0.042246487, 0.0046590036, 0.0021050447, -0.010161239, 0.0010980204, 0.056296296, 0.0933742, -0.010422094, -0.024326308, 0.013042784, -0.041664112, -0.0052899104, 0.046395913, 0.02192401, -0.008426245, -0.027226053, 0.0252848, -0.019752234, -0.02321009, -0.030453384, -0.009354406, 0.0020838121, 0.040402297, 0.014899106, 0.044503193, 0.025697317, -0.011356321, -0.019, 0.010561622, 0.020007024, 0.0011617177, 0.039965518, -0.020492336, -0.04484291, 0.029482758, -0.03826692, -0.010695083, 0.036398467, 0.01637931, 6.3093044e-06, 0.029070241, 0.018842272, 0.0055265003, -0.030744571, 0.030574711, 0.03520945, -0.038630906, -0.042586207, -0.017726053, -0.050375476, 0.00014900623, 0.0023765166, 0.046056192, 0.024666028, -0.006333333, 0.02875479, -0.06410983, 0.017835248, 0.042707533, -0.022967432, 0.020043422, 0.027371647, 0.038703702, -0.0126424, -0.02067433, -0.0069096424, 0.0019397349, -0.0058904854, -0.00015857977, -0.05168582, 0.013734355, 0.024217114, 0.0013732838, -0.03821839, 0.011350255, 0.019509578, 0.016621966, 0.004710568, 0.0059723817, 0.011313857, 0.05610217, 0.038, -0.011586845, -0.020273946, 0.08628863, -0.020734994, 0.0027329181, 0.01367369, -0.010998404], [0.036283687, -4.414074e-05, -0.034981538, 0.023151819, 0.0053630997, 0.075568944, -0.045773946, 0.050364584, 0.030148124, 0.05791265, -0.028183863, 0.0021104792, 0.019355714, -0.016332073, -0.0029408766, -0.0008062582, -0.0031643393, 0.029508084, -0.023416663, -0.035776068, -0.031803403, -0.084352955, -0.074774414, 0.02866941, 0.022589024, -0.011763507, 0.0034705657, -0.00030398485, -0.0363499, -0.0061962563, 0.042021982, 0.01436781, 0.024630532, -0.042904798, -0.018704638, -0.030059844, -0.0001699246, 3.86447e-05, -0.019852297, 0.01118416, -0.020017825, 0.0054044817, 0.022423496, -0.07993888, -0.012712533, -0.0004645123, -0.028801832, -0.022776622, 0.011973175, -0.064842746, -0.0018249437, -0.030744025, 0.017501803, -0.01915708, -0.040918466, 0.01253597, 0.01945503, -0.030567462, 0.059589997, -0.0440966, -0.012447689, -0.0011304168, 0.042617884, 0.0021104792, -0.024807096, -0.044030387, 0.020194389, 0.020481303, -0.02573405, 0.01074827, -0.029794998, 0.038954202, -0.055352487, -0.02202623, -0.011995246, -0.029949492, 0.07225839, 0.017523874, -0.0024470522, 0.027367258, 0.022886973, -0.05808921, 0.0012966342, 0.0037298924, 0.023791859, -0.043942105, 0.013595347, -0.08589788, -0.033039343, 0.007636348, 0.005721743, 0.010014431, 0.023836, 0.020227494, -0.05062943, 0.004477526, 0.035378803, 0.0095344, -0.032575864, -0.007851534, -0.011609014, -0.030126054, -0.055308346, -0.038336232, 0.037784472, 0.022886973, 0.04652434, -0.01645346, -0.023791859, -0.046833325, 0.008833665, -0.0087950425, -0.020028861, -0.013253257, -0.04467043, 0.009457153, -0.008546751, -0.074774414, -0.024520181, 0.01851704, -0.029949492, 0.021319978, 0.044295233, 0.034231145, -0.039550103, 0.00056210475, 0.00020311637, 0.052306775, -0.018958448, 0.025932685, -0.0057769194, 0.027874878, 0.06947752, 0.029927421, 0.037431348, 0.03815967, 0.05429311, -0.008552268, -0.02396842, 0.011443486, -0.06493103, -0.0035947114, -0.015162344, 0.053498577, -0.066520095, 0.0070514833, -0.03626162, 0.015868595, -0.030898517, -0.040123932, -0.0054486226, -0.029419802, 0.012867025, 0.035533294, 0.03639404, -0.033370398, 0.0077246292, 0.006847332, 0.0016332073, 0.039616313, 0.042551674, -0.08951742, 0.016905904, 0.02188277, 0.0075425487, -0.04784856, 0.046215355, 0.0048361695, -0.063386105, 0.030964728, 0.03584228, -0.05446967, 0.015559611, 0.0021628963, -0.048598953, -0.020050932, 0.03943975, -0.04283859, -0.037828613, -0.04793684, -0.016972113, 0.016596917, 0.027852807, -0.040123932, 0.036438182, 0.045045625, 0.017766647, 0.010091676, 0.01434574, -0.07225839, 0.013418784, -0.012083528, -0.052880604, -0.036018845, 0.014136071, -0.0274114, 0.008585374, -0.062238444, -0.008806078, 0.00806672, -0.029949492, -0.036614742, -0.005095497, 0.06091422, 0.015372013, -0.014356775, 0.055661473, -3.0131227e-05, 0.0024070498, 0.0026636177, 0.04890794, 0.029618436, -0.011675226, -0.031869613, -0.020404058, 0.031339925, -0.06139977, 0.040366706, -0.021982089, -0.043986246, 0.08607444, -0.019212257, 0.015482364, -0.04131573, 0.0031698567, 0.051026694, 0.026528584, 0.028470777, 0.021573786, 0.01723696, 0.037298925, -0.05186537, -0.033679385, 0.033282116, -0.0514681, -0.016287932, 0.0008083273, -0.008430881, 0.02685964, 0.022302108, 0.007057001, 0.029971562, -0.031494416, -0.03354696, 0.039638385, 0.050938413, -0.03403251, 0.031361997, -0.025800262, -0.036725096, -0.011377276, -0.012690462, 0.051026694, 0.017468698, -0.017755613, 0.052218493, 0.0065604174, -0.022622129, 0.0088391835, 0.019819193, -0.007823946, 0.017987352, -0.005727261, 0.05429311, 0.025976826, -0.023041466, 0.031759262, -0.04473664, -0.06568142, -0.00440028, 0.04851067, -0.03171512, -0.03996944, 0.028868044, 0.04700989, -0.021960018, 0.043853823, 0.012359407, -0.008061202, 0.053057168, -0.008585374, 0.031538557, 0.022886973, 0.040521197, 0.039219048, 0.0034319425, -0.03385595, -0.021010991, -0.054072406, -0.011906965, 0.011084843, -0.047054026, 0.08541233, -0.0037795508, 0.04851067, -0.004300963, 0.007514961, 0.009926149, -0.042044055, 0.024299476, -0.017954245, -0.0018539111, -0.033061415, -0.038667288, -0.048687235, 0.044538006, -0.007266669, 0.080336146, -0.011454522, 0.0037547217, 0.096844785, 0.0031312336, -0.033171766, -0.058177494, 0.019896438, -0.0082984585, 0.024100844, 0.029110817, 0.04124952, -0.007553584, -0.0079398155, -0.03937354, -0.083426, 0.025866473, 0.03769619, 0.02677136, 0.013010483, -0.037254784, -0.060472813, 0.027014133, -0.08316115, -0.038954202, 0.012293196, 0.008160519, -0.06011969, -0.098080724, -0.046347775, -0.026396163, 0.043787614, -0.029353593, -0.042110264, 0.030920587, -0.013617418, -0.03164891, 0.025005728, -0.027301047, -0.018947413, -0.010880692, 0.06347438, -0.017192818, 0.0013635351, 0.046877466, 0.05557319, -0.0052030897, 0.0016028606, -0.029044606, -0.010422732, -0.04473664, -0.0016704511, 0.0052279187, 0.07044862, -0.1015237, -0.056279443, 0.04113917, 0.03345868, -0.031295784, -0.014290565, -0.014853359, 0.009688892, 0.024829166, -0.049261063, 0.014378846, -0.0111786425, -0.015956877, -0.013782945, -0.008955052, 0.06766775, -0.002280145, -0.07442129, -0.0042319936, -0.0148643935, -0.021573786, 0.014279529, 0.009893043, -0.0022539366, -0.004844446, -0.01029031, 0.033171766, 0.010847587, -0.031384066, -0.0010876554, 0.03540087, 0.009214379, -0.0034126309, 0.0019932303, 0.029397732, -0.043015152, 0.0076032425, 0.0013538792, 0.04486906, -0.053057168, 0.017755613, -0.012701497, -0.006753533, 0.04228683, -0.021673104, 0.012491829, -0.04948177, 0.0023091123, 0.06735877, -0.034451846, 0.021529645, -0.014268494, 0.032708287, 0.03564365, -0.016056193, -0.021684138, 0.061620474, -0.0017587326, -0.02449811, 0.016950045, -0.011128983, -0.033988368, 0.020812359, -0.024961589, 0.028801832, -0.014963711, 0.027278977, -0.022081405, -0.019344678, -0.02385807, -0.01285599, 0.028316284, 0.010417215, -0.019565383, -0.056985695, -0.038446583, -0.0452884, -0.006946649, -0.0068307794, 0.03281864, -0.036769237, 0.047980983, 0.0303909, -0.03646025, -0.015416153, -0.060693517, 0.020955816, 0.024056703, -0.033635244, -0.0016745894, -0.04727473, -0.053630996, 0.002099444, 0.05778023, 0.0019532277, -0.039020415, 0.037232712, 0.018550146, -0.044560075, 0.016442426, 0.033171766, 0.032642078, -0.04361105, 0.0097385505, -0.011106914, -0.04058741, 0.017082466, -0.012017316, 0.0009835109, 0.013749841, -0.004174059, -0.025049869, -0.029640507, -0.016310003, -0.025932685, -0.001725627, 0.0005158949, 0.03224481, -0.024233267, -0.010351003, -0.020448197, 0.03354696, 0.06034039, 0.020492338, -0.049834896, 0.0440966, 0.0129773775, 0.07826153, 0.007503926, 0.003329867, 0.060075548, 0.016530707, -0.00073728827, 0.008436399, -0.03879971, -0.055617332, -0.04131573, -0.0154492585, -0.024321547, 0.038490724, 0.036548533, -0.0011524871, 0.023151819, -0.0030677815, -0.0005096876, -0.036107123, -0.0018511523, -0.00983235, -0.05548491, -0.01196214, -0.031339925, -0.012039387, -0.012039387, 0.0019808158, 0.009898561, -0.020724077, 0.06519587, 0.0143236695, -0.006930096, -0.0172811, 0.0015656168, -0.044515934, -0.021816561, -0.020690972, 0.020172318, 0.011929035, 0.010224098, 0.004750647, -0.038534865, 0.009015746, -0.025049869, -0.047451295, 0.032487582, -0.0029546707, -0.028536988, -0.0082488, 0.040234283, -0.011228301, 0.014069861, -0.05018802, 0.053895842, -0.0022622128, -0.013507066, -0.030059844, 0.05257162, 0.04047706, 0.006808709, -0.007498408, 0.053322013, -0.070095494, 0.061885316, -0.009440601, 0.008690208, 0.018086668, -0.015592716, -0.0286032, -0.041624717, 0.045641523, -0.034827042, 0.018141843, 0.022478672, 0.09163617, 0.030103983, 0.0017614914, -0.040212214, 0.06740291, 0.01221595, -0.005078944, 0.0016345867, 0.015581681, 0.03226688, 0.0135622425, -0.027499681, -0.039130766, 0.058177494, 0.014698866, -0.041381944, 0.028823903, 0.013164976, 0.0025711982, -0.006378337, -0.014665761, -0.017888034, 0.0141912475, -0.0011262785, -0.010560672, -0.044802852, -0.045597382, 0.02869148, 0.0076804888, -0.004535461, 0.009192309, -0.032509655, 0.018384619, 0.027676243, 0.02690378, 0.019234328, -0.0036664403, 0.017159712, -0.02087857, -0.032156527, -0.009159204, -0.016839692, -0.030810237, -0.04105089, 0.027521752, -0.048687235, 0.02119859, 0.01045032, -0.057647806, -0.005147914, 0.024078773, 0.013032554, -0.00478927, -0.017203853, -0.028382495, 0.049746614, -0.0026318915, 0.0598107, 0.05513178, 0.011951105, 0.055882175, -0.008022579, 0.037144434, 0.03533466, 0.025049869, 0.026087176, -0.013860192, 0.0016718305, -0.026815498, -0.030721955, 0.0005276198, -0.038027246, 0.017755613, -0.0039312844, -0.013242221, 0.045200117, -0.03758584, 0.032509655, 0.015316837, 0.016596917, 0.0053548235, 0.05323373, -0.033988368, -0.00669284, -0.004941004, 0.004444421, 0.06938924, -0.027808666, 8.181555e-05, 0.014853359, 0.02445397, 0.054337252, 0.028250074, -0.00868469, 0.0053520645, 0.009964772, -0.011498663, 0.014842324, -0.005586562, -0.023107678, -0.0041464707, 0.016817622, 0.0074928906, -0.017104536, -0.03036883, -0.0013076694, -0.018715674, 0.053322013, 0.074774414, -0.05667671, -0.036548533, -0.020525444, -0.01494164, -0.013849157, 0.007377021, 0.03284071, -0.00848054, -0.05323373, -0.0339663, -0.026219599, -0.009584058, 0.01377191, -0.02021646, -0.021154448, -0.04486906, -0.019499172, -0.020613724, -0.005644497, 0.018605322, -0.020613724, -0.028890114, 0.04471457, -0.005387929, -0.0020221977, 0.009733033, 0.008303977, 0.029684648, -0.02862527, -0.0143236695, -0.025248503, -0.043346208, -0.02745554, 0.019234328, 0.04537668, -0.022070369, 0.031185431, -0.05310131, -0.035047747, 0.038490724, -0.0011683502, 0.029684648, 0.040830184, 0.019477101, 0.018991552, -0.016916938, 0.0041906117, -0.08797249, 0.013330503, 0.023041466, -0.0071287295, 0.028007299, -0.04197784, 0.024895377, -0.063386105, 0.034385636, -0.0053272354, 0.04899622, -0.022302108, 0.023549084, -0.009595093, -0.0010711027, 0.012403548, -0.01643139, -0.01917915, 0.0025353336, 0.033833876, 0.011631085, 0.010284793, -0.013496031, -0.016541742, -0.025976826, -0.031979967, -0.005575527, -0.007812911, 0.07137558, 0.028338354, -0.003385043, -0.004860999, -0.039770804, 0.018230125, 0.049216926, -0.035599507, -0.0014704383, 0.010604813, 0.014798183, 0.006455583, 0.024961589, -0.025557488, -0.009545435, 0.019278469, -0.008099826, -0.03334833, 0.02690378, -0.013396715, -0.022291074, -0.030170195, 0.0147761125, 0.040322565, 0.036085054, 0.056588426, 0.008006027, -0.027808666, -0.01313187, -0.04122745, 0.025380924, -0.015769279, -0.059016168, 0.004805823, 0.0015573405, -0.0049879034, -0.0015752726, -0.008811595, 0.05257162, 0.011410381, -0.032377232, 0.0038926615, -0.004574084, 0.0103234155, 0.042662024, 0.017998386, 0.012613216, 0.020801323, 0.04952591, -0.029132888, 0.032200668, -0.01670727, -0.011261406, 0.01462162, -0.014985781, -0.04467043, 0.0051782606, 0.03540087, -0.0076860064, -0.016894868, -0.005848648, -0.007183905, -0.00075935863, 0.0196647, 0.025402995, 0.009092992, -0.0068694027, 0.025778191, -0.0060472814, 0.050497007, 0.0057162256, -0.013308433, -0.008006027, -0.0048720343, 0.01938882, -0.030324688, 0.00084350194, 0.00076625566, -0.00029346693, 0.046127073, 0.0023118712, 0.0015725138, -0.012911166, 0.0014938881, -0.0028994947, -0.03451806, -0.033326257, 0.036614742, 0.0053520645, 0.018230125, -0.028890114, 0.02630788, 0.008508127, 0.027874878, 0.011708331, 0.011432451, 0.010935868, 0.007338398, -0.05446967, 0.013054623, -0.011228301, -0.010963456, 0.0043920036, 0.008750902, 0.04957005, -0.016563812, -0.006107975, 0.00081798306, -0.011609014, -0.012955307, -0.060075548, 0.03513603, -0.0056776027, 0.014555409, 0.031097151, 0.020470267, -0.0036995457, -0.055661473, -0.0069080256, 0.0057493313, -0.055396628, -0.051732946, 0.006306608, -0.06387165, -0.035489153, 0.034804974, -0.0085688215, 0.035312593, 0.03286278, -0.056367725, -0.037431348, -0.02385807, 0.023460804, -0.014434022, 4.0045652e-05, 0.0025560246, -0.032642078, -0.0009352319, 0.01120623, -0.04226476, -0.010268239, 0.0148643935, -0.022842832, -0.007244599, 0.0070073423, -0.019885402, 0.0061245277, -0.0051782606, 0.032311022, 0.0142353885, -0.026175458, -0.0018580492, -0.00034433225, 0.007183905, 0.017104536, 0.014720936, -0.0021877254, -0.058927886, 0.006786639, 0.001915984, 0.0010911039, -0.0073328805, 0.012204914, 0.01675141, -0.03701201, 0.0106820585, 0.04661262, -0.02754382, 0.047363013, 0.016607953, -0.04354484, -0.022909043, 0.0052086073, -0.037983105, 0.027367258, 0.04177921, -0.028912185, 0.06011969, -0.0071563176, 0.0028525952, -0.025358854, 0.015934806, -0.010902762, -0.00034140103, 0.004792029, 0.011140019, 0.020139212, -0.028536988, 0.009661305, -0.0014731971, 0.025049869, 0.002990535, -0.012127668, 0.005252748, 0.056544285, 0.068197444, -0.014400916, -0.0034760833, 0.013363609, -0.045200117, -0.009137133, 0.05023216, 0.006963202, 0.004452697, 0.018031493, 0.011929035, -0.016464496, 0.0015090615, -0.026992062, 0.0046099485, 0.01700522, 0.03222274, 0.037961036, 0.031207502, 0.008188107, -0.021871736, 0.03822588, 0.011631085, 0.022423496, -0.017479733, 0.0160893, -0.016607953, -0.02215865, 0.02332838, -0.038556937, -0.0027725901, 0.0051755016, -0.021297907, 0.0066045583, 0.03224481, -0.015658928, -0.011906965, -0.004157506, 0.050364584, -0.013871227, -0.026418233, -0.03171512, -0.024939518, -0.03162684, -0.029728787, 0.026197528, 0.032421373, 0.025380924, 0.015040957, 0.056941554, -0.040786043, 0.013683629, 0.0024139467, -0.01813081, -0.0071011414, -0.02447604, 0.010764822, -0.012260091, -0.027830737, 0.0040002544, 0.0100365, -0.022269003, 0.010488943, -0.03045711, 0.030103983, 0.020679936, -0.002213934, -0.0074763377, -0.015603751, -0.0047865114, 0.00031795126, -0.028912185, 0.005782437, 0.057603665, 0.066299394, 0.016563812, -0.00215462, 0.020635795, 0.059236873, -0.0135622425, -0.033326257, -0.0037160984, 0.010582742], [0.0045299283, 0.006787702, -0.029957926, 0.025977341, 0.013345312, 0.0062642437, -0.026460534, 0.006989032, -0.014599312, 0.020995857, -0.03640049, 0.00093259, -0.008145242, -0.0028919638, -0.0026072254, 0.044752814, -0.010739525, -0.014070101, -0.035457116, -0.025747249, -0.021950739, -0.061802603, -0.06511592, 0.03745891, -0.019258667, 0.007989931, -0.014829404, 0.0103426175, -0.013897533, 0.014438247, 0.07123636, 0.0027754798, 0.057338826, -0.011838213, 0.019258667, -0.020558683, -0.005755166, 0.019534776, -0.043165185, -0.0035808005, -0.039805844, 0.0092209205, 0.007713821, -0.030464128, -0.015807293, 0.0017832099, -0.02602336, -0.007892142, -0.04599531, -0.026989743, -0.0022103174, -0.006235482, -0.025033966, -0.016842704, -0.0019227029, 0.012355919, 0.031545557, -0.08697462, 0.022698537, -0.0042164284, -0.028255248, 0.01750997, 0.015577201, -0.007414702, -0.015174541, -0.008570912, 0.009893939, 0.028577376, 0.044430688, 0.052967086, -0.0371828, 0.023745453, -0.011895736, 0.011941753, -0.023526866, -0.063873425, 0.088585265, 0.019891419, -0.049469694, -0.02383749, 0.044039533, -0.046731602, 0.023273764, -0.013632927, 0.044660777, -0.030003944, 0.01140679, -0.09728272, -0.03803414, -0.004184791, 0.007328417, 0.00013985255, -0.015439146, 0.004463777, -0.032396898, -0.025149012, 0.042244818, 0.013724963, -0.031384494, -0.032626987, -0.014783385, -0.018154226, -0.048825435, -0.052967086, 0.027772056, 0.0057695466, 0.030717228, -0.035917297, -0.03531906, 0.025010956, 0.059777796, -0.013207258, -0.042820044, -0.0032730529, -0.051908664, 0.04265898, -0.015163036, -0.049101546, -0.055129945, 0.02281358, -0.072616905, -0.009853672, 0.0668186, 0.04277403, -0.05448569, 0.0334093, 0.054715782, 0.051126353, -0.024136608, -0.007242133, 0.0099227, 0.051172372, 0.0520007, 0.032258842, 0.054025505, -0.0030458374, 0.031913705, -0.039506726, -0.0047571436, -0.029957926, -0.064149536, 0.0010073697, -0.011861222, 0.034513738, -0.04302713, -0.035088968, 0.010940855, -0.009945709, -0.045236006, -0.04189968, -0.037435904, -0.04933164, -0.008294802, 0.01971885, 0.046685584, -0.064379625, 0.026690625, 0.032005742, 0.025241047, 0.003868415, 0.009790397, -0.07910549, 0.0007442025, 0.04077223, 0.020006465, -0.04024302, 0.029796861, 0.018879015, -0.056510497, 0.04514397, 0.016382521, 0.012770084, 0.002024806, -0.0030487136, -0.048273217, 0.017141825, 0.06368935, -0.002716519, -0.012367424, -0.099123456, -0.01560021, 0.05443967, 0.007426206, -0.03334027, 0.0020780147, 0.008070462, 0.018188741, 0.0015588705, 0.045074943, -0.041278433, -0.008887288, -0.059087522, -0.014139129, -0.06562212, -0.013586909, -0.042935092, -0.000655042, -0.049239602, -0.0032586723, 0.0017947145, 0.009111627, -0.027587982, -0.0131842485, 0.019189639, -0.031683613, 0.007897894, 0.022905618, -0.005378391, 0.0021772417, -0.012758579, 0.050528113, 0.008801004, 0.06051409, -0.008277545, -0.025126003, 0.022641012, -0.043050136, 0.043096155, -0.0055941017, -0.046018317, 0.07307709, -0.019109108, 0.0020204918, -0.0019284552, -0.004345855, 0.039759826, 0.017486962, 0.0035779243, -0.02820923, 0.026759652, 0.014875421, -0.062492877, -0.03067121, 0.0009843606, -0.06911951, -0.0004522738, -0.018856006, -0.0022318885, 0.0023771338, -0.011182452, 0.030993339, 0.03288009, -0.028531358, 0.0014316011, 0.023227746, 0.061986677, 0.0032471677, -0.012655037, -0.031844676, -0.014541789, 0.0004522738, -0.037896086, 0.055866238, 0.010083764, 0.005573969, 0.05798308, 0.0038195204, -0.021835692, -0.032143794, 0.061480474, 0.008536398, 0.049653765, -0.034076564, 0.041117366, -0.012816102, -0.040427092, 0.024458736, -0.05963974, -0.071466446, -0.010716516, 0.06106631, -0.030211026, 0.010210315, 0.02903756, 0.025954332, -0.02740391, 0.05697068, 0.0037619977, -0.052921068, 0.04189968, 0.0023152966, 0.005573969, 0.023227746, -7.648748e-05, 0.03660757, 0.03796511, -0.017176338, -0.015024981, -0.06511592, -0.0075239954, -0.018246263, -0.033570364, 0.021674627, 0.03281106, 0.021870205, -0.020869307, -0.015439146, 0.012424946, -0.03755095, 0.017728558, -0.01604889, 0.018257769, -0.026874699, -0.06934961, 0.00087650516, 0.036584564, 0.039506726, 0.097098656, 0.009307205, -0.012068304, 0.053795416, -0.0043918733, -0.009393489, -0.056786604, -0.026230441, -0.04077223, 0.01763652, 0.012114323, 0.050252005, -0.0241136, -0.023227746, -0.03062519, -0.09636236, 0.010227571, 0.014691348, 0.0018838749, 0.004515548, -0.005064891, -0.06332121, 0.027242845, -0.0891835, 0.0016278981, -0.0018047809, -0.025356093, -0.05039006, -0.06194066, -0.0103771305, -0.021893214, 0.009232425, -0.026391506, -0.06930359, 0.001747258, -0.040634174, -0.034076564, -0.013955055, -0.01233291, 0.025102993, -0.03067121, 0.008007187, -0.043326247, 0.0013223076, 0.070315994, 0.026391506, 0.028370293, -0.009151893, -0.024826882, -0.067232765, -0.047444887, 0.0093129575, -0.015404632, 0.014599312, -0.06626638, -0.011751928, 0.032580968, 0.046133365, -0.049193583, -0.041807644, -0.0051885652, -0.0048549324, 0.02054718, -0.020846298, 0.04242889, -0.017878117, -0.029934917, -0.009209416, -0.006172207, 0.041692596, -0.022502959, -0.023929525, 0.008795251, -0.017003769, -0.027933119, -0.0106244795, 0.0039777085, 0.0139320465, 0.033846475, -0.034306657, -0.008933306, 0.060652144, -0.013218762, 0.01492144, 0.045328043, 0.024297673, -0.0054733036, 0.0029020302, 0.0520007, -0.031016346, -0.017544484, -0.014541789, -0.014472761, -0.0099687185, 0.005510694, -0.0238605, 0.013379826, 0.05121839, -0.003336328, 0.022169326, -0.03886247, -0.0008175442, 0.0635513, -0.017774576, 0.051540516, -0.030234035, 0.02901455, 0.013644432, 0.0027337756, -0.024182627, 0.057338826, -0.013552395, -0.0039805844, 0.046869658, -0.022468444, 0.010296599, 0.039023533, -0.0024936176, 0.053013105, -0.037573956, 0.051356442, 0.014691348, -0.03149954, -0.047444887, 0.025264056, 0.028347284, -0.0049297125, -0.028255248, -0.06898146, -0.039460707, -0.08044002, 0.011211213, 0.0057839276, 0.017015273, -0.011625377, 0.046708595, 0.044522725, -0.02273305, -0.0040150983, -0.06764693, 0.0092841955, -0.01560021, -0.02901455, -0.026414515, -0.010526691, -0.09728272, 0.0044148825, 0.062216766, -0.0076908115, -0.008513389, 0.0025079984, 0.03428365, -0.088815354, -0.016348008, 0.022272866, 0.040979315, -0.041807644, 0.032788053, -0.014944449, -0.019212648, 0.021847198, 0.0015905082, 0.011544846, -0.010319608, -0.009663847, -0.060237978, -0.019247161, -0.021835692, -0.026115395, -0.023975544, 0.0023268012, 0.008064711, -0.016324999, -0.022261363, 0.017245365, 0.02313571, 0.0037878829, 0.0023339917, 0.0045788228, 0.03610137, 0.029911907, 0.047444887, -0.005703395, -0.026920717, 0.023906516, 0.02177817, -0.025839286, -0.005582597, -0.04431564, -0.0031292457, -0.0947057, -0.01190724, 0.019810887, 0.03292611, 0.041117366, 0.015094008, 0.067969054, 0.011009883, -0.0072306283, -0.058995485, -0.04544309, -0.012678047, -0.035480123, -0.016566595, -0.023975544, -0.050021913, -0.0035980572, -0.018694943, 0.014633825, 0.009853672, 0.03854034, 0.03172963, 0.016417036, -0.01570375, -0.004880818, -0.036262434, 0.0049469694, -0.03860937, 0.0010541071, -0.021156922, 0.002124033, 0.018108208, -0.045051932, 0.0029854383, -0.025149012, -0.042014726, -0.0071673533, -0.00073773117, -0.0127470745, 0.014955954, 0.043349255, -0.04355634, 0.024044571, -0.030280054, 0.03283407, -0.0057005193, -0.0023728195, -0.0073341695, 0.045236006, 0.0061089317, 0.020213546, 0.0013172744, 0.015117018, -0.089735724, 0.03235088, 0.006684161, 0.0076275365, -0.0021369758, -0.028899504, -0.05641846, -0.040956303, 0.047767013, -0.00013841447, 0.018948043, 0.017843602, 0.08646842, 0.0585353, -0.00092180446, -0.03308717, 0.008950563, 0.029612789, -0.03589429, 0.027173817, 0.014070101, 0.042497918, 0.009617829, -0.02213481, -0.015001972, 0.0482272, 0.0026705007, -0.03531906, -0.015922338, 0.017947145, -0.0073916926, 0.0037821305, 0.022571985, -0.055221982, -0.0032414154, -0.0016394026, -0.008956315, -0.022802077, -0.016209953, 0.03170662, 0.0037217315, 0.023296773, -0.009358976, 0.017590502, 0.012125827, 0.03453675, 0.008524894, 0.0028430694, 0.002973934, 0.025839286, 0.008714719, 0.0012532802, 0.029934917, 0.022445435, -0.026598588, -0.0063275187, 0.029520752, -0.04024302, -0.012424946, 0.014852412, -0.018948043, -0.005139671, 0.030763246, -0.03363939, 0.007144344, -0.03428365, -0.040864266, 0.036584564, 0.0074319583, 0.061388437, 0.0482272, 0.024021562, 0.041991714, -0.048043124, -0.012424946, 0.041715607, 0.020478152, 0.013517881, -0.00896782, -0.0022692783, -0.0115621025, -0.034605775, -0.023492351, -0.015496669, 0.013448854, 0.037320856, 0.0077943527, 0.0366766, -0.037090763, -0.008300554, -0.0066381423, 0.025885304, 0.022491453, 0.07408949, -0.022353398, -0.0120568, 0.033800457, 0.062722966, 0.032488935, -0.02489591, 0.010641736, 0.007719573, 0.028830476, 0.040127974, -0.00028383956, -0.000774402, 0.009151893, 0.008864279, -0.017291384, 0.013080707, -0.01032536, -0.013575404, -0.017947145, 0.0056084828, -0.008910297, -0.013046194, -0.030763246, -0.023630407, -0.029796861, 0.041232415, 0.080992244, -0.052690975, -0.054577727, -0.017774576, -0.047260813, -0.033524346, 0.010423149, 0.036216415, 0.0025065604, -0.023952534, -0.03672262, -0.03801113, 0.01409311, 0.0011497389, -0.018142723, 0.007702316, -0.038149185, -0.013724963, -0.046685584, 0.004866437, 0.015404632, 0.00065971573, 0.0032270346, 0.028715432, -0.029497743, 0.0060456567, 0.022491453, -0.04376342, 0.0065000877, 0.016865714, -0.016451549, 0.013609918, -0.015669238, 0.007483729, 0.013978064, 0.033892494, -0.009180655, -0.02929066, -0.035088968, -0.05287505, 0.024596792, -0.021064885, 0.043671384, 0.038954508, 0.020869307, 0.032626987, -0.0020708244, 0.017417934, -0.07767892, 0.007633289, 0.0093762325, -0.016750667, 0.02230738, -0.03695271, -0.02341182, -0.054669764, 0.028071174, -0.022687031, 0.038149185, 0.00021067762, -0.009082866, 0.008340821, -0.012286891, 0.014323202, -0.0081912605, -0.007616032, -0.021617105, 0.013552395, 0.022249857, 0.026230441, -0.001528671, -0.019580794, -0.015623219, -0.049377657, 0.0062067206, 0.0025295694, 0.02600035, 0.0047744005, -0.0015703752, 0.0029480485, 0.0021369758, -0.0022333264, 0.0575229, -0.013563899, -0.032580968, 0.04015098, 0.019097602, -0.015772779, -0.0028862115, -0.01961531, -0.014967458, 0.0051080333, -0.014380725, -0.041968707, 0.0028488215, 0.022399416, 0.0045328042, -0.05006793, 0.0101873055, 0.022882609, 0.019454245, 0.053197175, -0.011659891, -0.016681641, 0.0025065604, -0.03559517, 0.027541963, 0.01047492, -0.062861025, -0.031614587, 0.025517158, 0.0010994064, -0.004935465, -0.03230486, 0.034559757, 0.0052547166, -0.017694043, -0.0226065, -0.019235658, -0.0019600927, 0.0153241, -0.03037209, 0.0007104078, -0.007702316, 0.0072133713, -0.023676425, 0.02958978, -0.0082832975, 0.01014704, 0.027449926, 0.0032414154, -0.04785905, -0.020340096, 0.012839111, -0.030188017, -0.0011339202, -0.003158007, -0.007800105, -0.038172197, 0.034191612, 0.05807512, 0.015830303, 0.014415238, -0.016129421, -0.014599312, 0.05365736, 0.017970154, 0.003451374, -0.0062009683, 0.023883507, -0.0090023335, -0.020961344, 0.018257769, -0.034099575, 0.021317987, 0.048319235, -0.012873624, -0.04431564, -0.022077288, -0.06474777, -0.047053732, -0.045903273, -0.029474733, 0.037642986, 0.03501994, 0.03152255, -0.047053732, 0.022928627, 0.012896634, -0.004400502, -0.015910834, 0.0123099005, -0.0303951, 0.034812856, -0.05687864, 0.032534953, 0.0022390787, 0.0141506335, 0.034582768, 0.020351602, 0.030763246, 0.02247995, 0.0041358965, -0.0017630769, -0.0049297125, -0.042935092, -0.018303785, 0.04707674, -0.017613512, 0.031591576, 0.00869171, 0.02341182, 0.01776307, -0.025632204, 0.042267825, -0.009698361, -0.0044321395, -0.101056226, -0.0056199874, -0.041715607, -0.030832274, 0.00048067572, 0.018625915, 0.032673005, 0.015001972, -0.029681815, -0.018062191, -0.034444712, 0.0068969955, -0.042520925, 0.008662948, 0.029796861, -0.038885478, -0.031660605, -0.00957181, -0.04380944, 0.018280778, -0.024527764, -0.039092563, 0.01969584, -0.001764515, -0.011320506, 0.0048319236, 0.011619626, 0.030349081, 0.017130319, -0.013161239, -0.034904893, -0.049239602, -0.00082832976, -0.0011137872, 0.011521837, -0.022065785, -0.020972848, 0.01768254, -0.026483543, 0.0066956654, 0.029106587, 0.0019111983, 0.0030142, -0.02351536, 0.00086428155, 0.048365254, -0.035986327, 0.029083578, -0.017348906, -0.034720823, -0.02434369, -0.0036411996, -0.039828856, 0.012240873, 0.024481745, -0.0052662212, 0.06184862, -0.0027150807, 0.00094409456, 0.026529562, 0.033271246, 0.022445435, -0.0143692205, 0.010975369, 0.013448854, 0.027495945, 0.006212473, 0.00396908, -0.0226065, 0.0028143078, 0.01721085, -0.005283478, 0.01286212, 0.029865889, 0.07901345, -0.020972848, 0.003773502, 0.010785543, -0.02190472, 0.00876649, 0.0071500964, 0.018683437, -0.026897708, -0.013851514, -0.0027323377, -0.009416498, -0.0034254887, -0.0053841434, 0.004049612, -0.0025123125, 0.07054608, -0.0037993875, 0.0017098682, 0.036814656, -0.021525068, 0.008524894, 0.024251655, 0.012908138, -0.0120913135, 0.005303611, -0.02625345, -0.036745626, 0.042474907, -0.036584564, 0.0065978765, 0.052414864, 0.023492351, 0.005320868, 0.009422251, 0.03230486, -0.018867511, 0.0016796687, 0.039529737, -0.00073557405, -0.046869658, -0.016693145, 0.004541433, -0.021145418, -0.040910285, 0.008099224, 0.040335055, 0.029635798, 0.011976267, 0.013609918, -0.06769295, -0.005735033, 0.049193583, -0.009272691, 0.025333084, 0.0031695117, 0.011613873, -0.02464281, -0.016140925, 0.028140202, -0.028968532, -0.031292457, 0.012413441, -0.03421462, 0.041232415, 0.016497567, -0.022261363, -0.022721546, -0.016313493, -0.010302351, 0.01994894, 0.018729456, 0.003434117, 0.042290837, 0.05365736, 0.009266939, -0.0040956303, 0.016371017, 0.1002279, -0.01755599, 0.013978064, -0.00075355, 0.013782486], [0.009130622, 0.014622149, -0.035886742, 0.028630475, -0.025144834, 0.013482192, -0.018020099, 0.053314943, -0.01627728, 0.037399378, -0.026043648, 0.0053079277, -0.0065766787, -0.006669848, -0.011185834, 0.020201365, -0.029814277, 0.031940736, -0.0004737264, -0.018107789, -0.023610277, -0.032598402, -0.03400143, 0.02479408, 0.0017400796, -0.015937485, 0.026306715, -0.008324979, -0.051561162, 0.0039706696, 0.048886646, 0.02597788, 0.03439603, -0.0068452265, 0.011289965, -0.04312109, 0.0053408113, 0.017493965, -0.05278881, 0.04309917, -0.025714813, -0.018381817, 0.004699585, -0.05870782, -0.004726988, -0.004252919, -0.011563993, -0.02199899, -0.0034828994, -0.04176191, -0.0110981455, -0.051648848, 0.010593933, -0.01434812, -0.024837922, -0.014950983, 0.007470011, -0.061864622, 0.040008128, -0.05572639, -0.03439603, 0.0036144329, -0.01666092, 0.0008063282, -0.039569683, -0.042046897, -0.00019901304, 0.027643973, 0.033475295, 0.048404355, -0.029397754, 0.02005887, -0.046080597, -0.034922164, -0.0125176115, -0.027797429, 0.08575989, 0.01433716, -0.055287946, -0.012364156, -0.00068746845, -0.05226267, -0.004274841, -0.0009522483, 0.0062642866, -0.037224002, 0.049763534, -0.09023203, -0.018063944, 0.01705552, 0.0069603184, 0.009152545, 0.016058058, 0.03099808, -0.037903592, 0.007026085, 0.034571406, 0.0010515836, -0.07001971, -0.028323563, -0.026153259, -0.050640427, -0.04555446, -0.06940588, 0.03205035, 0.015827874, 0.07694714, -0.04040273, -0.043274544, -0.008642851, 0.01811875, -0.022119563, -0.029858122, 0.024991378, -0.013811025, 0.012144933, -0.026591703, -0.089793585, -0.039876595, 0.025188679, -0.020004064, -0.04757131, 0.07304498, 0.03731169, -0.019236784, 0.0117722545, -0.030406177, 0.009821174, -0.00949234, -0.0007994775, -0.011706488, 0.0018373596, 0.040446572, 0.039284695, 0.07607025, 0.030362332, 0.041126166, -0.0018949056, -0.025934037, -0.0002527911, -0.029901966, -0.0026320417, -0.018436622, 0.042967632, -0.012605301, -0.0014742721, -0.0058093993, -0.00833046, -0.03720208, -0.009136103, -0.036588255, -0.017548772, -0.0029129207, -0.020113675, 0.011289965, -0.022886842, -0.0064396644, 0.030844623, 0.01976292, 0.07221193, 0.015838834, -0.059321642, -0.02838933, 0.024289867, 0.030888468, -0.07037046, 0.017910488, 0.006280728, -0.07532489, 0.024289867, 0.021867456, -0.049938913, 0.010829598, -0.0037624082, -0.04779053, 0.021648234, 0.021396128, 0.02547367, -0.013668531, -0.07804325, -0.042814177, 0.04088502, 0.046562884, -0.028608551, 0.06493374, 0.040775407, -0.026372481, -0.0016016953, 0.0050859647, -0.04121385, -0.029792354, -0.051780384, -0.019072369, -0.031326912, -0.029529287, -0.04730824, 0.0052777845, -0.07278191, -0.03272994, 0.018557195, -0.033080693, -0.038210504, 0.0031266627, 0.02567097, -0.055945612, 0.0063136113, 0.0028855177, -0.00891688, 0.050815802, -0.016354008, 0.043274544, 0.01939024, -0.0029814276, -0.01800914, -0.009662237, 0.010983054, -0.06296074, 0.01706648, -0.013021824, -0.065372184, 0.0920735, -0.011311887, -0.024772156, -0.026197104, 0.016847258, 0.041630376, 0.033102617, -0.0035294842, 0.03272994, -0.006664368, 0.024596779, -0.03091039, -0.02470639, 0.05243805, -0.066687524, 0.008056431, 0.0035979913, -0.013657569, 0.06914281, 0.016397852, 0.019324474, 0.035316765, -0.045379084, -0.039021626, 0.026613627, 0.04377876, -0.018743534, 0.0122107, -0.026635548, -0.0059464136, 0.03305877, 0.012868368, 0.08054239, 0.023500664, 0.027797429, 0.044984482, -0.0075851027, -0.052744962, -0.03275186, 0.0072233854, -0.014775605, 0.059540864, -0.03323415, 0.06559141, 0.0004264565, -0.028937386, 0.05708557, -0.04031504, -0.03724592, -0.006560237, 0.08141928, -0.034966007, -0.01668284, 0.018195478, 0.019357357, -0.020025987, 0.02703015, 0.018907951, -0.012714912, 0.07786787, 0.014490616, 0.022558007, 0.018546233, 0.02317183, 0.0018140672, 0.016299201, -0.08141928, -0.02054116, -0.04241958, -0.006949357, -0.00063026504, -0.03158998, 0.0664683, -0.00852776, 0.035448298, 0.032532636, -0.009810212, 0.031261146, -0.013043746, 0.037158236, -0.031940736, 0.011750332, -0.0544549, -0.030844623, -0.02209764, 0.04369107, -0.0176255, 0.078174785, -0.026328636, -0.004809196, 0.07414109, -0.035711367, -0.021144021, -0.070896596, 0.012243584, -0.026394404, 0.0374213, 0.032708015, 0.037859745, -0.010884403, -0.035777133, -0.05090349, -0.09917632, -0.003526744, 0.037815902, -0.023215676, 0.0023771953, -0.036785554, -0.036719788, 0.0044118552, -0.07414109, -0.019686192, -0.015751146, -0.01909429, -0.056427903, -0.09970245, -0.043362234, -0.019730035, 0.009580028, -0.012627223, 0.0023360911, -0.028016651, -0.01589364, -0.06493374, -0.029068919, -0.020683654, 0.0019072368, -0.0033294435, 0.01862296, -0.0068561872, 0.0011906528, 0.04156461, 0.014238509, 0.011805139, -0.007404244, -0.01685822, -0.035031773, -0.029595055, -0.0025073588, 0.0128902905, 0.056647126, -0.074754916, -0.0070808907, 0.042090744, -0.005127069, -0.039394304, -0.019806763, -0.027271295, -0.011838022, 0.0014866034, -0.05059658, 0.015192128, 0.018283166, -0.019872531, -0.0031540655, -0.008390746, -0.00044872132, -0.00852776, -0.05774324, 0.014600227, 0.0058477633, -0.012769718, 0.011196795, 0.031677667, 0.003228053, 0.019434085, -0.01899564, 0.0130766295, 0.0012721763, 0.00862641, 0.0060724667, 0.007239827, 0.005798438, 0.014556382, -0.015915561, 0.022229174, -0.020793265, 0.011563993, 0.01017741, 0.025407901, -0.008357862, -0.023566432, -0.006346495, 0.01862296, 0.026679393, -0.036895167, 0.026043648, -0.021429012, 0.008335941, 0.040358886, -0.026810927, 0.03158998, 0.0051900954, 0.028608551, 0.020420587, 0.050070446, -0.052876495, 0.045905218, -0.02180169, 0.009086777, 0.01114747, -0.03323415, -0.036390956, -0.005929972, -0.028192028, 0.04487487, -0.014424848, 0.007711156, -0.020782305, -0.05892704, -0.004195373, -0.02479408, 0.0055326307, -0.0100897215, 0.016397852, -0.062434603, -0.052876495, -0.06730135, 0.0015523701, -0.009141583, 0.0018907951, -0.02838933, -0.030099265, 0.03277378, -0.014676955, -0.015827874, -0.06659983, 0.037180156, 0.027885117, -0.009711562, -0.033475295, 0.011125548, -0.08172619, -0.015531923, 0.066862896, -0.041454997, -0.00784817, 0.016704764, 0.022360707, -0.0961072, 0.021878418, -0.012967018, 0.053578008, 0.004729728, 0.04022735, 0.00012622427, -0.03340953, 0.03439603, -0.009377248, 0.016825337, 0.033957586, 0.0072836718, 0.011300926, 0.009333403, -0.038824327, -0.04612444, -0.01668284, 0.040446572, 0.037728213, -0.0135260355, -0.026306715, -0.02762205, 0.049368933, 0.067871325, 0.009717043, -0.004603675, 0.043384157, 0.036807477, 0.08177004, 0.036719788, -0.004252919, 0.004726988, 0.05717326, -0.0073823216, 0.020497315, -0.046562884, -0.023369132, -0.05989162, 0.013657569, -0.011563993, 0.006949357, 0.053183407, -0.0037240442, 0.027315138, 0.04272649, -0.008774386, -0.042266123, -0.018546233, -0.0075028944, 0.0048777033, 0.004222776, -0.00581488, -0.042704567, 0.022558007, -0.01812971, -0.021604389, 0.004294023, 0.02685477, -0.014687915, 0.017110325, 0.0063026506, -0.025627125, -0.030384256, -0.014161781, -0.018294128, -0.026131336, -0.0012249064, 0.012462806, 0.0062259226, 0.0018154373, 0.007130216, 0.015564806, 0.00040521933, -0.017318588, 0.025320213, -0.014841371, 0.010895364, 0.04373491, -0.010813156, 0.024267944, -0.04437066, 0.06752057, -0.01812971, -0.0009803361, -0.055287946, 0.04836051, 0.026109414, 0.013756219, -0.028148185, 0.03724592, -0.045905218, 0.037224002, -0.0024210399, 0.0075248163, 0.025166757, -0.031677667, 0.011279004, -0.06396916, 0.018425662, -0.045685995, 0.009037453, -0.019214863, 0.0430334, 0.055375636, -0.043581456, -0.01879834, 0.032993004, -0.011662643, 0.011163912, 0.0032773782, 0.01502771, 0.065196805, 0.018831223, -0.016134785, -0.024246022, 0.07826248, -0.001666092, -0.037728213, -0.04241958, 0.005275044, 0.012627223, -0.008292096, 0.0031650267, -0.045817528, 0.018020099, -0.021933224, -0.014972905, -0.059716243, -0.013942558, 0.055770233, -0.0056066187, 0.015279816, -0.008659294, 0.012462806, 0.018173555, 0.048141286, 0.008352382, 0.040380806, -0.009086777, -0.010160969, -0.008407188, 0.0016578711, -0.0045570903, -0.00794682, -0.04099463, -0.016430736, 0.04022735, -0.061294645, 0.0190066, 0.014326198, -0.05875166, -0.040600028, 0.043559536, -0.022371668, 0.0101280855, -0.031151535, -0.0153127005, 0.023917189, 0.014238509, 0.03994236, 0.05572639, 0.014983866, 0.03354106, -0.031546135, -0.0019812244, 0.01919294, 0.013734297, 0.02218533, -0.0072233854, -0.00852228, -0.018063944, -0.038999703, -0.017208977, -0.03952584, 0.031568058, 0.03536061, -0.024947533, 0.04941278, -0.008478435, 0.033387605, 0.012802601, -0.00900457, 0.03674171, 0.08282231, -0.021933224, -0.004726988, 0.05300803, 0.014819449, 0.014983866, -0.024267944, 0.0046776626, -0.009700601, 0.008856594, 0.05213114, 0.003855578, 0.0018305089, -0.023347208, 0.008363343, -0.03158998, 0.0033869895, -0.034527563, -0.029244298, 0.04980738, 0.024728311, -0.018052982, -0.004088502, 0.0045762723, -0.015334622, -0.0016222474, 0.00025227727, 0.11224198, -0.052481897, -0.022733387, 0.017219936, -0.035316765, -0.01298894, 0.01114747, 0.033431448, -0.017976254, -0.0072233854, -0.05414799, -0.019839646, -0.008072873, 0.009958187, -0.05116656, -0.007596064, -0.05300803, -0.03130499, 0.014424848, 0.02306222, 0.012572417, 0.009711562, -0.006193039, 0.048272822, -0.035338685, -0.0044913236, -0.02161535, -0.004921548, 0.027556283, 0.021933224, -0.037530914, -0.010692583, -0.048316665, -0.03099808, 0.015093477, 0.018940834, -0.016145745, 0.013230085, -0.08207695, -0.019445047, 0.014797527, 0.007519336, 0.018140672, 0.04246342, 0.02286492, 0.010698064, 0.0021154983, -0.0068726293, -0.08782058, 0.013986403, 0.011443421, -0.03169959, -0.04507217, -0.0022237394, 0.013986403, -0.04787822, 0.03994236, -0.025846347, 0.07672792, -0.01521405, 0.029901966, -0.022338785, -0.018206438, 0.0028334523, -0.024859846, 0.010632297, -0.017713187, 0.016408814, 0.006735615, 0.020990565, 0.018666806, 0.0190066, -0.034461796, -0.045203704, 0.005924491, 0.009158025, 0.043888368, 0.026613627, -0.01668284, -0.017318588, 0.0016976051, -0.028038573, 0.06743288, -0.007667311, -0.01939024, 0.034549486, 0.05235036, -0.029792354, 0.021604389, -0.0076618306, -0.01677053, 0.004669442, -0.015279816, -0.017274743, 0.03479063, -0.014446771, -0.029046997, -0.03625942, 0.01889699, 0.0246187, 0.042814177, 0.06190847, -0.0070589683, -0.036325186, -0.015455195, -0.059628554, 0.017176092, -0.008741502, -0.04621213, -0.018568156, 0.021988029, 0.0029978694, 0.020848071, -0.018052982, 0.0010351418, 0.004302244, 0.013624686, -0.010434996, 0.008714099, 0.005699788, 0.045598306, 0.021714, -0.0010056838, -0.020080792, 0.0444145, -0.025254445, 0.02713976, -0.02239359, 0.021472856, 0.010374711, 0.009163505, -0.047439776, -0.01434812, 0.025144834, -0.008483916, 0.009717043, -0.039197005, -0.015531923, -0.02453101, 0.027885117, 0.01773511, 0.009432053, -0.004121385, 0.0049571716, -0.02946352, 0.049675845, 0.011607838, -0.006308131, 0.031326912, -0.012024361, 0.0006011495, 0.0026101193, -0.0021853754, -0.003343145, 0.017614538, 0.053665698, -0.008538721, -0.012605301, -0.006308131, -0.017592615, -0.0017976254, -0.048886646, -0.011673604, 0.045598306, 0.036873244, 0.053446475, -0.07164195, 0.009371767, -0.006971279, 0.0015825133, -0.005310668, 0.021045372, -0.032708015, 0.029244298, -0.04787822, 0.0101664495, -0.0023799355, -0.009601951, -0.002899219, 0.028126262, 0.03281763, 0.02015752, 0.022930685, -0.014370043, -0.0057600746, -0.0021100177, -0.02317183, 0.010034915, 0.015071555, 0.022448396, 0.024596779, 0.061382335, -0.0018976458, -0.009640315, 0.021078255, -0.009031972, -0.02713976, -0.04189344, -0.012977979, -0.0304281, -0.02453101, 0.0155757675, 0.015257894, -0.0067246538, 0.0046831435, -0.034768708, 0.008445552, -0.047746688, -0.009333403, 0.013536997, -0.02006983, 0.01598133, -0.03362875, -0.016902065, 0.004283062, -0.07203656, 0.0036610179, -0.0072288658, -0.031458445, 0.008182485, 0.015334622, 0.0061327526, 0.030932311, -0.018381817, 0.028915463, 0.0056614242, -0.025736736, 0.007453569, -0.046825953, 0.006938396, 0.005299707, -0.010347308, -0.0063519753, -0.04127962, 0.012473767, 0.011684566, 0.018524311, 0.0246187, -0.011739371, -0.0018770937, -0.017724149, 0.011662643, 0.043756835, -0.035031773, 0.05739248, 1.2491836e-05, -0.016934948, -0.02385142, 0.012572417, -0.020420587, -0.0026512237, 0.018063944, 0.009952707, 0.051648848, 0.0011070742, -0.015740184, 0.008774386, 0.010972092, 0.031677667, -0.015290778, 0.03989852, 0.019883491, 0.008023548, 0.004768092, 0.015049633, -0.028805852, -0.0068835905, -0.0029869082, -0.038035125, 0.014315237, 0.08049855, 0.056954037, -0.013756219, 0.011015937, 0.02606557, -0.00900457, -0.007091852, 0.058050152, -0.008642851, -0.037048623, 0.00678494, 0.042046897, -0.017713187, -0.017877605, 0.008883997, 0.0070041628, 0.018929873, 0.04088502, 0.006384859, 0.015455195, 0.022371668, -0.02974851, 0.01230935, 0.01637593, 0.014041209, -0.013010862, 0.036478642, -0.0044721416, -0.015674418, 0.02722745, -0.021242673, 0.012364156, 0.02122075, 0.010182891, 0.022174368, 0.01618959, 0.033979505, -0.00051894103, -0.02317183, -0.0001239978, 0.0018099567, -0.034264497, -0.01143246, 0.013427385, -0.029704666, 0.0021497519, 0.012101089, 0.0085990075, 0.018042022, -0.0032499754, 0.028718164, -0.03904355, -5.0095794e-05, 0.03229149, -0.00041549536, 0.02103441, 0.013657569, -0.01919294, -0.003354106, -0.00532985, -0.00055970275, -0.02238263, -0.022886842, 0.036215577, -0.042858023, 0.04292379, 0.0022209992, -0.01803106, -0.02946352, 0.018831223, -0.00046482048, -0.0066753286, -0.008253732, 0.020760382, 0.0062259226, 0.035777133, 0.04031504, -0.014720799, 0.016014213, 0.070414305, 0.0020716537, -0.03119538, 0.02510099, -0.021823611], [0.0036573757, 0.01509602, -0.024785224, 0.05741751, 0.023565102, 0.0040072636, -0.0495226, 0.038756818, 0.018588917, 0.02904369, 0.0013614229, 0.033900253, 0.0025508923, -0.027105847, 3.7498005e-05, 0.024928767, -0.032871522, -0.005954076, -0.008289653, -0.023337824, -0.009934425, -0.057513203, -0.074259974, -0.00068370195, 0.036460117, -0.008433197, -0.020443024, 0.009210725, 0.00247613, 0.012183277, 0.02880445, 0.016100826, 0.041412376, -0.03605341, -0.004904412, -0.0067824433, -0.005077861, 0.047082357, 0.020132013, -0.05923573, -0.016196521, -0.00084930065, -0.004449857, -0.0035796228, -0.014904628, 0.016914241, 0.025742183, 0.0021890425, 0.021304287, -0.026340282, -0.020311443, -0.012368688, -0.036125183, 0.0032865542, -0.03253659, -0.010293284, 0.079618946, 0.004120902, 0.063015714, -0.02971356, -0.013241912, 0.0633028, 0.029330777, -0.023122508, -0.003968387, 0.03062267, -0.00077379064, 0.008654493, 0.055168655, 0.03461797, -0.013337608, 0.009629395, 0.03212988, 0.0007524834, 0.0076736105, -0.035287842, 0.070767075, 0.019115245, 0.04507274, -0.014462034, 0.031148998, -0.019234866, 0.051436517, -0.009587527, 0.00416576, -0.023732569, 0.028134579, -0.12249068, -0.032393042, -0.027751796, 0.011961981, 0.019462142, 0.049331207, 0.021459794, -0.026962304, 0.0007663144, -0.010388981, 0.012667738, -0.014282605, 0.037799858, -0.011005023, -0.013361532, -0.050383862, -0.039235298, 0.0055174637, 0.04346984, 0.03703429, 0.038063023, -0.010227494, -0.044378947, 0.041699465, -0.00338225, -0.027345087, 0.032704055, -0.006728614, 0.05224993, -0.032440893, -0.052824106, -0.028158503, 0.006082667, -0.10038494, -0.048828807, 0.07516909, 0.023732569, 0.0018959739, -0.0017972876, -0.04064681, 0.044522494, 0.015383108, -0.014725198, -0.041292757, 0.026818762, 0.041819084, 0.025431171, 0.082537666, 0.017153481, 0.06703494, -0.014593616, -0.041149214, -0.011489483, -0.058422312, 0.019761192, -0.018792272, 0.019127207, -0.04119706, 0.0058195037, -0.011411729, -0.028373819, -0.024258897, -0.036675435, 0.008134147, -0.034306962, -0.011005023, 0.0037919478, 0.007936774, -0.010562429, 0.02409143, 0.029857105, 0.004844602, 0.059474967, 0.020143976, -0.043326296, 0.0033373926, -0.000773043, -0.00017045822, -0.045981854, 0.049139816, -0.035120375, -0.0466278, 0.009635376, 0.05277626, -0.0010758307, 0.043374144, -0.023517255, -0.023062699, 0.008540854, 0.039522383, -0.007930793, -0.021041123, -0.034498353, -0.0041717407, 0.06521672, 0.044666037, -0.019844927, -0.013146217, 0.045264136, 0.048063237, 0.051149428, 0.040216178, -0.036460117, -0.018768348, 0.013517038, -0.024127316, -0.004730963, -0.019055435, -0.038134795, -0.020825809, -0.023804342, -0.004730963, 0.015957283, 0.012655776, -0.011752646, 0.040909976, -0.032225575, 0.029498244, 0.016519496, 0.050958037, 0.02258422, 0.003169925, 0.0484221, 0.0132060265, 0.021352135, 0.017009936, -0.017536264, -0.010227494, 0.029259006, -0.05459448, -0.014246719, -0.009473889, -0.03978555, 0.044977047, -0.019641573, 0.005852399, -0.023409596, -0.015347221, 0.008385348, -0.008038451, 0.0124763455, 0.043039206, 0.0210172, -0.01805063, -0.036460117, -0.049187664, 0.027034076, -0.09397332, 0.007422409, -0.027034076, -0.028971918, 0.0030518004, 0.019952584, 0.016627153, 0.017931009, -0.04957045, -0.0057058646, 0.01745253, 0.022452638, 0.012237106, -0.012512232, -0.023062699, 0.013050521, 0.018026706, 0.017679807, 0.02717762, 0.021459794, -0.0039803493, 0.06191521, 0.027249392, -0.018564994, 0.006274059, 0.019665496, -0.032704055, 0.02046695, -0.043972243, 0.07631744, -0.021124858, -0.014653427, 0.030670518, -0.060862556, -0.06564735, -0.0034330885, 0.022297133, -0.047369443, 0.03540746, 0.016375951, 0.03423519, 0.019402333, 0.08598272, 0.024928767, -0.031029377, 0.02264403, -0.019175055, 0.034522276, 0.02089758, -0.0047190012, -0.026053194, 0.0067645, 0.005526435, -0.055407893, -0.017225252, 0.022632068, -0.016698925, -0.012667738, 0.036818977, -0.016950127, 0.019976508, 0.0071113976, 0.04413971, 0.020335367, 0.0003364307, 0.018864043, -0.010993061, -0.02156745, -0.059570663, -0.033828482, -0.0039085774, 0.04521629, 0.007344656, 0.07803996, 0.003726157, -0.060144838, 0.07105417, -0.011429672, -0.050958037, -0.042895664, 0.004016235, -0.0066508614, 0.015945321, 0.053781066, 0.09239434, -0.033828482, -0.017536264, -0.032153804, -0.110050224, 0.072872385, 0.020586569, 0.011961981, 0.02741686, -0.03815872, -0.030024571, 0.022859344, -0.06497748, -0.010729897, 0.009623414, -0.02404358, -0.003974368, -0.10028925, -0.004796754, -0.052632716, 0.03442658, -0.010825592, 0.013337608, 0.009641357, -0.025096236, 0.010574391, 0.037177835, -0.016866393, -0.037728086, 0.030694442, 0.020730112, 0.031986337, 0.0014556235, 0.02626851, 0.017847275, 0.05004893, 0.020514797, -0.0061155627, -0.016698925, -0.039522383, 0.005098794, -0.010006197, 0.024462251, -0.05483372, 0.027823567, 0.07067138, 0.033254307, -0.006262097, -0.01443811, -0.033780634, -0.004976184, -0.012201221, -0.052584868, 0.027345087, -0.037345305, -0.0049851555, -0.046221092, -0.005598207, 0.052441325, -0.019773154, -0.028254198, 0.014007479, 0.013050521, -0.01649557, -0.0264599, 0.015335259, 0.022691878, -0.013038559, -0.01322995, 0.012906977, 0.021962197, 0.016471647, 0.007081493, 0.019438218, 0.01364862, -0.013875898, 0.048278555, 0.035455313, -0.023242129, 0.04287174, -0.013720392, 0.020407138, -0.021818653, 0.02277561, -0.022237321, -0.056747638, 0.040287953, -0.06296787, 0.007571934, -0.027943186, 0.020706188, 0.02796711, -0.031483933, 0.011597141, -0.007506143, 0.04808716, 0.018828157, -0.028062807, -0.005018051, 0.03181887, -0.0012604938, -0.0065132985, 0.045503374, -0.04856564, -0.015131906, 0.009581546, -0.06469039, 0.041268833, -0.05669979, 0.03732138, -0.01690228, -0.030000648, 0.004129874, 0.014904628, 0.014749122, -0.009743033, 0.011441635, -0.0576089, 0.018337717, -0.0339481, -0.014067289, 0.023397634, 0.022787573, 0.015239564, 0.009683223, 0.050862342, -0.07703516, -0.012284954, -0.069762275, -0.039546307, 0.048469946, -0.0067226333, 0.00015793553, -0.027464708, -0.05660409, -0.011860304, 0.0138160875, 0.006686747, 0.045814388, 0.029809255, 0.032345194, -0.07851844, 0.010598315, 0.010622239, 0.03428304, -0.010245437, 0.023660798, -0.015251526, -0.022321057, 0.022919156, 0.010532524, 0.02500054, -0.03358924, 0.007404466, -0.0293547, 0.048996273, 0.000119993616, -0.06368559, -0.012105525, 0.03442658, 0.027823567, 0.019414295, -0.030215964, -0.0057596937, 0.0077513633, 0.060719013, 0.022990927, -0.011196414, 0.022022007, 0.040024787, 0.0794754, 0.034043796, -0.02662737, 0.03193849, -0.016041016, 0.01322995, -0.002736303, -0.03413949, -0.013110331, -0.043589458, -0.032871522, -0.018864043, 0.0069738347, 0.048828807, 0.050336014, 0.013672544, 0.017978856, 0.0073865233, -0.012655776, 0.009443983, 0.013840011, 0.0042913607, -0.015574499, -0.0049911365, -0.036077335, -0.01660323, -0.031794943, -0.02686661, 0.00093752024, 0.006351812, 0.010879422, 0.0264599, 0.00045679815, -0.023170358, -0.057034723, -0.028828373, -0.0402401, -0.004153798, -0.010873441, 0.0025120159, 0.020801885, -0.04734552, -0.015670195, -0.009384174, 0.006004914, 0.012942863, 0.008074337, -0.021722957, 0.020766, 0.007338675, -0.010269361, 0.0061155627, -0.044474643, 0.07622174, -0.0042375317, 0.009707147, -0.014366339, 0.06263293, 0.04071858, -0.026579522, -0.003911568, 0.027560404, -0.0005932395, 0.02325409, -0.00081117183, 0.0014698284, -0.010927269, -0.024127316, -0.043326296, -0.06009699, -0.013540962, -0.014139061, 0.00742839, 0.024737377, 0.075408325, 0.020921504, -0.013552924, -0.049474753, 0.039761625, 0.007685573, -0.008893733, 0.017105632, -0.009790882, 0.052154236, 0.005514473, -0.0380391, -0.010131798, 0.0875617, 0.0061723823, -0.036125183, -0.022919156, -0.019533914, -0.044594266, -0.008325539, -0.00304881, -0.036914673, 0.0009203249, 0.04789577, 0.0018197163, -0.04402009, -0.046795268, -0.005652036, 0.008917657, 0.027895339, -0.029857105, -0.025144083, -0.021244477, -0.01891189, -0.018230058, -0.0045515336, -0.024833072, 0.022655992, 0.00085827213, -0.006070705, 0.024904843, -0.0034390695, -0.021220554, 0.010299265, 0.05598207, -0.071293406, 0.024952691, 0.009443983, -0.12497877, -0.02210574, 0.07684376, 0.00881598, 0.007882945, -0.017380757, 0.008223861, 0.059474967, 0.0007132331, 0.041938704, 0.05091019, 0.010466733, 0.05158006, -0.019306637, 0.03380456, -0.010125817, 0.014617541, -0.0072429795, -0.0058553894, 0.029426472, -0.0023295959, -0.014832856, -0.010095912, -0.03461797, 0.009683223, -0.013995517, 0.019856889, 0.015658233, -0.020215748, 0.028995842, 0.003274592, 0.04179516, 0.020263596, 0.089332074, -0.03062267, -0.03019204, -0.0035826133, -0.0025628544, 0.04976184, -0.0112622045, -0.019533914, 0.035981636, -0.0022727763, 0.047824, 0.0014503902, -0.012308878, -0.012823244, 0.025407247, -0.0066030133, 0.009109048, -0.017643921, -0.054977264, 0.031053303, 0.0027437792, 0.0014444091, -0.019426256, -0.014450072, -0.01921094, -0.0052273856, 0.030790139, 0.060001295, -0.0656952, -0.04413971, -0.043445915, -0.011088756, -0.03930707, -0.004360142, 0.055599287, -0.017990818, -0.04488135, -0.014485959, -0.05622131, -0.032345194, -0.018433413, 0.006103601, -0.032225575, -0.03736923, 0.019641573, -0.035000756, -0.013923746, 0.02421105, -0.055025112, -0.045311984, 0.052871954, 0.051436517, -0.0037620428, 0.02686661, -0.03399595, 0.01770373, -0.00857076, -0.0013345084, -0.01925879, -0.0029127423, -0.015646271, 0.006256116, 0.046101473, 0.0016208484, -0.008469082, -0.039426688, -0.055360045, 0.045694765, 0.017440569, 0.005807542, 0.040072635, 0.010030121, 0.014151023, -0.021100935, 0.010915307, -0.057273965, 0.03260836, 0.04763261, 0.042608574, 0.021411946, -0.046173245, 0.026435977, -0.04928336, 0.0072609223, 0.0064355456, 0.04976184, -0.015598423, 0.01636399, -0.033182535, -0.019103283, 0.0057836175, -0.0151558295, 0.024007695, -0.010060025, 0.00010933998, 0.024593832, 0.03622088, 0.03617303, -0.054211695, -0.020813847, -0.062585086, -0.010963155, -0.017308986, 0.04909197, -0.0029366664, -0.018923853, -0.053781066, -0.034019873, -0.024187125, -0.004064083, -0.027105847, -0.010131798, 0.01955784, 0.014689312, -0.0016627153, 0.012524194, -0.027632175, -0.025957499, 0.00013812349, -0.02167511, -0.007500162, 0.016591268, 0.00537392, -0.014462034, -0.03768024, -0.0032955257, 0.038182642, 0.035192147, 0.0795711, 0.010550467, 0.015335259, 0.00011345191, -0.008774113, 0.04227364, -0.0044468665, -0.03605341, -0.034306962, -0.018971702, 0.002543416, -0.02004828, 0.0032536588, 0.038804665, 0.020610493, -0.0084571205, -0.00688412, 0.03406772, -0.003678309, 0.0009233154, -0.004745916, 0.0070575685, 0.044666037, 0.028110655, -0.0032147823, 0.034976833, -0.0035228033, 0.020155938, -0.010783725, 0.028613057, -0.04976184, 0.0075838957, 0.044546418, 0.005439711, -0.005900247, -0.0125959655, 0.009402117, -0.04421148, 0.016280256, 0.034522276, -0.014844818, -0.028038884, 0.010735878, -0.025048388, -0.006166401, 0.0031190864, -0.01733291, -0.011513406, 0.0042674365, -0.013529, -0.03193849, 0.009264554, -0.018062592, 0.031029377, 0.056795485, 0.035957713, -0.015311335, -0.029737484, -0.0043750945, -0.050288167, -0.065743044, -0.029378625, -0.0172731, 0.01129211, 0.032440893, 0.016746772, 0.06239369, 0.019198978, 0.01588551, -0.016938165, -0.006351812, 0.009707147, -0.012344765, -0.05119728, 0.011579197, 0.004258465, -0.0009749014, 0.002227919, 0.011459578, 0.059474967, 0.058422312, 0.015215639, -0.030239888, -0.020335367, -0.018971702, -0.071532644, -0.0065073175, -0.011938057, 0.017237214, 0.011710779, 0.018265944, 0.053493977, -0.036340497, -0.006878139, 0.005018051, -0.05789599, -0.06315926, -0.039881244, -0.007882945, -0.005864361, -0.014031404, 0.048924502, 0.06904455, -0.0034988793, -0.0038996057, 0.018265944, -2.3386607e-05, -0.008283672, -0.005113747, 0.022177512, 0.016196521, -0.049139816, -0.023457443, -0.00012148887, -0.04425933, 0.021244477, 0.026818762, -0.0066388994, 0.023600988, -0.032082032, -0.014773047, 0.027871415, -0.043158825, 0.0020484892, 0.022081817, 0.004264446, -0.0143065285, -0.037249606, 0.04650818, 0.022380866, -0.0032596397, -0.0022922147, -0.04009656, 0.00048333878, -0.009192782, 0.0030144192, 0.032345194, -0.0017838303, 0.0032865542, -0.024545984, 0.016292218, 0.018828157, -0.030694442, 0.031914566, -0.020849733, -0.01800278, -0.0037979288, 0.0145457685, -0.05660409, 0.021399984, 0.018672653, 0.024462251, 0.034163415, -0.019725306, 0.023732569, -0.011573216, 0.007404466, -0.0055055018, -0.03521607, 0.003163944, 0.019175055, 0.009916482, 0.014246719, -0.016651077, -0.012942863, 0.01925879, 0.0024312725, -0.0029845142, -0.033110764, 0.037297457, 0.078661986, -0.02626851, 0.0050030984, 0.011333977, -0.05507296, -0.013744316, 0.01147154, 0.039546307, 0.017057784, -0.018457336, 0.031244693, -0.025694335, 0.009037277, -0.00930044, -0.03732138, 0.022452638, 0.037871633, -0.016830508, -0.0048266593, 0.023110546, -0.021962197, 0.015263488, -0.0012171315, 0.010819611, -0.015263488, 0.01479697, -0.023457443, 0.013624696, 0.030550899, -0.0403358, -0.0071293404, -0.016698925, 0.016806582, 0.028038884, 0.028708754, -0.00013933839, -0.005394853, -0.058374465, 0.009653319, 0.027632175, -0.04971399, -0.030694442, -0.009222687, 0.010556448, -0.017859237, -0.025933575, 0.021579413, 0.020454988, 0.009270535, 0.024809148, -0.050288167, -0.016411837, 0.026244586, 0.0029336757, 0.0011393786, 0.0011707789, 0.012512232, 0.024617756, -0.032225575, 0.009850691, -0.00244473, -0.055790678, 0.0030293716, -0.03799125, 0.037464924, -0.0013973089, 0.005983981, -0.033182535, 0.019091321, 0.011148566, 0.013289761, -0.027034076, 0.0052453284, 0.017966894, 0.020502836, 0.022739725, 0.0008126671, 0.012308878, 0.07081492, 0.0018286878, -0.006758519, 0.015263488, -0.014844818], [0.018874079, -0.0016980935, -0.01114087, 0.014973054, -0.0028741378, -0.001709567, -0.061360836, 0.047821984, -0.0042366283, 0.04265886, -0.046146836, 0.02524193, 0.0033015297, -0.030221473, -0.015466419, 0.04906113, -0.030152632, 0.018380715, 0.0026475342, -0.026458131, -0.0005500159, -0.07678136, -0.058331802, -0.0014600161, 0.015259894, -0.02091638, 0.002659008, 0.019562496, 0.008725676, 0.01811682, 0.031345885, 0.03912499, 0.03180483, -0.039354462, 0.0068267947, -0.0008433099, -0.00042990161, 0.013963376, -0.022981629, 0.0032011357, -0.056358345, -0.0017655009, 0.028546328, -0.027421914, -0.029854318, 0.008151996, -0.00622443, -0.0061326413, 0.00789384, -0.04463232, -0.018851131, -0.049152922, 0.027330125, -0.013011067, -0.03155241, 0.010435243, 0.07953502, -0.09628649, 0.09151347, -0.041052558, -0.047821984, 0.030726312, 0.06512418, -0.0054700407, -0.030359156, -0.056450132, 0.0024281016, 0.016430201, 0.026090976, 0.053788256, 0.0020724197, 0.04309486, -0.018828185, -0.047959667, -0.008094627, -0.05360468, 0.08614382, 0.02059512, 0.022740684, -0.0027479283, 0.022935735, -0.046743464, -0.020583646, -0.029165901, 0.028339803, -0.012035811, 0.040387087, -0.088484436, -0.03953804, 0.003396187, -0.011536709, -0.0008103233, 0.0019476443, 0.0041161557, 0.0022617343, 0.012529176, -0.009821406, 0.027743176, -0.007538158, -0.019355971, -0.04119024, -0.047454827, -0.053008053, -0.05030028, 0.031667147, 0.029074114, 0.063517876, 0.0038034997, -0.0010397953, -0.024805933, 0.015730312, -0.009873036, -0.021432692, 0.032401457, -0.033479977, -0.0028970852, -0.009528829, -0.03419134, 0.02025091, -0.016854724, -0.06746479, -0.025310772, 0.048372716, -0.019080603, -0.02244237, -5.8622947e-05, 0.009890247, 0.03561407, 0.01072782, 0.0016493306, -0.0114736045, 0.011255606, 0.0431637, 0.069575936, 0.10904513, 0.026664656, 0.042360548, -0.023291416, -0.0402953, 0.04864808, -0.034558497, 0.0006658276, -0.019539548, 0.023452047, -0.020583646, 0.02183427, 0.0025012458, 0.01524842, -0.067189425, -0.010848293, -0.016418727, -0.061911568, -0.017153038, 0.041282028, 0.033893026, -0.029693687, -0.011077765, 0.017887348, -0.0025356666, 0.0592038, 0.026068028, -0.066959955, 0.00845031, 0.057505704, 0.030244421, -0.015913889, 0.030772207, -0.0061383783, -0.041557394, 0.026481079, 0.035223965, 0.005570435, 0.0055331457, -0.020709855, -0.028913483, -0.040226456, 0.041488554, -0.024576461, -0.015317262, -0.027238337, -0.03485681, 0.04513716, 0.02228174, -0.009482934, 0.049152922, 0.07834177, 0.042199917, 0.021570375, 0.04034119, -0.054201305, 0.008949411, 0.001623515, -0.0037633423, -0.020962276, 0.031277046, -0.029739583, 0.00024614466, -0.04199339, -0.020193543, -0.0041448395, -0.03444376, -0.024668248, 0.005183201, 0.02804149, -0.018862605, 0.0141928485, 0.05443078, 0.019746073, 0.0019921046, 0.020996695, 0.02843159, 0.015776206, 0.008209364, -0.0476843, -0.031713042, 0.036486063, -0.080039866, 0.009643564, -0.019906703, -0.056541923, 0.022178477, -0.03848247, 0.0132405395, -0.012976646, 0.03272272, 0.033663556, -0.004689836, -0.019688705, 0.047317144, 0.0007325179, -0.03634838, -0.0120128635, -0.024851827, 0.04513716, -0.056358345, -0.031116415, -0.014686214, -0.020618066, -0.0143305315, 0.015994204, 0.0049336497, -0.0013008199, -0.019883756, -0.017657878, 0.03345703, 0.02638929, -0.011502288, 0.06108547, -0.0046181255, -0.004600915, 0.014835371, 0.012747174, 0.008444573, 0.07191655, 0.024025727, 0.07636831, 0.01792177, -0.02441583, 0.0041735237, 0.033938922, -0.0316442, 0.041718025, 0.015191052, 0.055853505, 0.0033101349, 0.008983832, 0.021467114, -0.051539432, -0.041121397, 0.03157536, 0.07921376, -0.029877266, -0.03173599, 0.009127252, 0.022603, -0.013263486, 0.07990218, 0.05369647, -0.0012671162, 0.06406861, -0.008106101, -0.007859419, 0.051723007, 0.047087673, 0.02680234, -0.028913483, 0.029716635, -0.077332094, -0.048602186, 0.026825286, -0.009477197, -0.012116126, 0.08187564, -0.0013201816, 0.06732711, 0.017749665, 0.03327345, -0.0016192124, -0.031139363, 0.0386431, 0.0262975, -0.022270266, -0.011978443, -0.029074114, 0.006115431, 0.04160329, 0.0077676303, 0.09394587, -0.006792374, 0.0032957927, 0.103446014, -0.014766528, -0.018197136, -0.026871182, 0.029693687, 0.006385061, 0.027995594, 0.058744855, 0.044815898, -0.013584748, -0.018977342, -0.03380124, -0.09986625, 0.009001043, 0.034053657, 0.026045082, 0.028156225, -0.047821984, -0.021570375, 0.04447169, -0.058607172, -0.0007873761, 0.027192442, 0.015431997, -0.07131992, -0.11602109, -0.017680824, -0.05144764, 0.025999187, -0.014124007, 0.017393984, -0.014146954, -0.030450946, 0.0032412931, 0.0058974326, -0.030634524, -0.07053972, 0.0021197484, 0.053237524, -0.0001826813, 0.0013144448, 0.036210693, 0.014996001, 0.022981629, -0.012999593, 0.011628498, 0.05443078, -0.046743464, -0.025540244, 0.022212898, 0.084858775, -0.06888752, -0.016912093, 0.05493562, 0.027307179, -0.022706263, -0.020709855, 0.010022193, -0.0047902297, -0.018793764, -0.0366008, 0.044609375, 0.014571478, 0.001008243, -0.015041895, 0.003711711, 0.05360468, 0.0069759516, -0.06521597, 0.018805237, 0.015294314, -0.048693977, -0.02638929, 0.03269977, 0.008421626, 0.01754314, -0.024760038, 0.01270128, -0.0021054065, 0.005966274, -0.015477892, 0.016005678, -0.028454538, -0.04052477, 0.015890943, 0.048969343, -0.0032871875, 0.005120096, 0.021776902, 0.026366342, -0.037128583, 0.017979138, -0.011622761, -0.040249404, 0.018644607, -0.028798746, 0.0419475, -0.02811033, -0.005441357, 0.040960766, -0.020652488, 0.037266266, -0.025012458, 0.013825693, 0.030106738, 0.00028917068, -0.021237642, 0.051998373, -0.011364605, 0.044815898, -0.004400127, -0.019160919, -0.02174248, 0.025838558, -0.045228947, 0.026733497, -0.01017135, 0.026710551, -0.03625659, -0.034558497, 0.0069128466, -0.0058974326, 0.0030491103, -0.01632694, -0.0050627277, -0.043714434, 0.0030146895, -0.026205713, -0.009586196, 0.034168392, 0.00025349495, -0.030886943, 0.023865096, -0.008565046, -0.05911201, 0.011582604, -0.058836643, -0.016510516, 0.039813407, -0.040639505, -0.040318247, -0.004919308, -0.046651676, -0.03788584, 0.024071623, -0.01340117, -0.02174248, 0.02581561, 0.05443078, -0.06971362, 0.013011067, -0.0058744852, 0.048189137, -0.023417626, 0.0390332, 0.007813524, -0.014353479, 0.041304976, 0.023291416, 0.031690095, -0.0030720576, 0.016166309, -0.001953381, -0.013137277, -0.009953352, -0.02416341, -0.004314075, -0.013619169, 0.037771106, 0.006815321, -0.046972934, -0.025264876, -0.006895636, 0.025058351, 0.014789476, -0.01883966, 0.032952193, 0.023612678, 0.083573736, -0.020503331, -0.004119024, 0.0043599694, -0.020572172, 0.0021441297, -0.014502636, -0.022430897, -0.033158716, -0.005527409, -0.02165069, -0.030680418, 0.006987425, 0.05039207, 0.014605898, 0.009196094, 0.006832531, 0.014743581, -0.004190734, -0.016441675, 0.008639624, 0.009333777, -0.012770122, -0.019665757, -0.017130092, 0.0015173842, -0.006895636, -0.014238743, -0.02228174, 0.015959784, 0.005326621, 0.0077791037, -0.0015202526, -0.030863995, -0.0353387, -0.02769728, 0.0029487163, -0.003510923, 0.0038895519, 0.008008576, -0.016430201, -0.007796314, 0.0002171021, 0.007446369, -0.0013438459, 0.018885553, -0.02581561, -0.00466402, 0.015925363, 0.011622761, 0.020904908, -0.0035023177, -0.006729269, 0.042544127, 0.0189085, -0.009878773, -0.0072111604, 0.026710551, 0.05466025, -0.038207103, -0.012116126, 0.043186646, -0.031345885, 0.040226456, 0.005926117, 0.01804798, 0.01700388, -0.03618775, -0.01537463, -0.058836643, 0.013997797, -0.051309958, 0.0024668248, 0.035751753, 0.09848942, 0.019700179, -0.02925769, -0.044173375, 0.03559112, 0.0030146895, -0.01569589, -0.009850089, -0.0094370395, 0.054614358, 0.031529464, -0.035545226, -0.022040794, 0.050116703, -0.0041247606, -0.026504027, -0.025700873, -0.012150547, 0.00089852663, 0.0034420814, -0.013837167, -0.059570953, 0.030886943, 0.01846103, -0.031713042, -0.06324251, -0.013630642, -0.000668696, 0.0006342752, 0.024530565, 0.011771918, -0.016854724, 0.0012635307, -0.018988814, -0.012609491, 0.036531955, -0.00197346, 0.0006679789, -0.010745031, -0.038207103, 0.023348784, -0.016005678, -0.036463115, -0.0059031695, 0.029946107, -0.044127483, 0.052916262, 0.008088891, -0.09839763, -0.00816347, 0.030703366, -0.011456394, -0.011278553, -0.006430955, -0.004586573, 0.043714434, 0.016051572, 0.02597624, 0.025654979, 0.026274554, 0.0748079, -0.04979544, 0.0431637, 0.019424813, -0.0070046354, 0.003769079, -0.03049684, 0.009104305, -0.026458131, -0.03132294, -0.048189137, -0.035292808, 0.00061204506, -0.012494755, -0.0031208203, 0.05869896, 0.008823202, 0.035407543, 0.007962681, 0.03717448, -0.00014333041, 0.10234455, -0.03453555, -0.024186358, 0.014135481, -0.021604797, 0.07829588, -0.033021033, -0.027169496, -0.022419423, -0.013917482, 0.07081509, 0.013481485, -0.0055159354, 0.0135159055, 0.024484672, -0.02097375, 0.040249404, -0.014273164, -0.031162309, 0.012896331, 0.018759344, 0.023520889, -0.019849336, -0.012586544, -0.0071652657, -0.033135768, 0.032424405, 0.07081509, -0.043117806, -0.041282028, -0.039239727, -0.0071652657, 0.006878426, 0.0091502, 0.044586428, -0.032194935, -0.00789384, 0.008805991, -0.0118751805, -0.027261283, -0.023658572, -0.010802398, -0.01894292, -0.04052477, 0.01626957, -0.048693977, -0.022086687, 0.008691255, -0.031621255, -0.044081587, 0.043920957, 0.018323347, 0.034673233, -0.021340905, -0.044655267, 0.049198814, 0.0010168481, -0.0013201816, -0.03862015, -0.031690095, -0.037266266, 0.049611866, 0.04924471, 0.0020107492, 0.0017267774, -0.058790747, -0.06728122, 0.028454538, 0.019872284, 0.015936837, 0.054384883, 0.01754314, 0.0040989453, -0.01883966, 0.0063334294, -0.087245286, 0.042039286, 0.02951011, -0.010148403, 0.01865608, -0.03485681, 0.025632031, -0.040432982, 0.0052520423, -0.014938633, 0.05089691, -0.02126059, 0.015558207, -0.03618775, -0.0010648939, 0.0023506547, 0.008496204, 0.010790925, 0.0018587239, -0.0063449033, 0.015191052, 0.015122211, 0.010165613, -0.021535955, -0.024025727, -0.017566089, 0.0037748157, -0.027054759, 0.02811033, 0.018128294, 0.003596975, -0.059066113, -0.0051975427, -0.0084847305, 0.015753258, -0.03361766, -0.0019720257, 0.039583936, 0.010142666, -0.0122882305, 0.015191052, -0.0050311754, -0.0030003474, 0.0004890624, 0.0069472673, 0.0045177317, 0.02944127, -0.012632438, -0.027812017, -0.030703366, 0.016912093, 0.020698382, 0.028454538, 0.060029898, 0.028752852, 0.0022904184, -0.03912499, -0.04125908, 0.025035404, -0.007974155, -0.051493537, 0.013699483, -0.009712406, -0.021054063, -0.0051401746, 0.004282523, 0.030978732, 0.011530972, -0.023819203, 0.0030060844, -0.00023628454, 0.00020042952, 0.009098568, 0.016063046, 0.03157536, 0.042360548, 0.05516509, -0.043737378, 0.011290027, -0.037197426, -0.008886307, -0.0080774175, -0.0045837048, -0.036279537, -0.00514878, 0.044999477, -0.022775104, -0.0015001737, -0.021467114, -0.0047156513, -0.027353073, 0.027398966, 0.022063741, 0.029028218, -0.011978443, 0.010613084, -0.011978443, 0.015535261, 0.0053753834, 0.0038924203, -0.010693399, -0.013814219, -0.009264936, -0.037931737, 0.020836065, -0.019849336, -0.007888103, 0.051309958, 0.013045488, 0.008031523, -0.013883061, 0.014491162, -0.030703366, -0.020273859, -0.036509007, 0.0019304339, -0.0010096772, 0.032034304, 0.0034851073, 0.04472411, 0.019241234, 0.035132177, -0.041557394, 0.002603074, 0.00032681844, 0.0049164393, -0.04061656, 0.023888044, -0.0009824274, -0.02680234, -0.005013965, 0.034810916, 0.014537057, 0.053421102, 0.055256877, -0.024209306, -0.028408645, 0.02983137, -0.06126905, -0.008140522, 0.019149445, 0.03189662, 0.028064435, -0.009804195, 0.040157616, -0.05924969, -0.0051545165, -0.012471808, -0.027513703, -0.042199917, -0.0095747225, -0.033594713, -0.024048675, -0.038321838, 0.009087095, 0.06879573, 0.02330289, -0.013343802, -0.0279497, -0.034650285, 0.01820861, -0.02091638, 0.0054700407, 0.0061326413, -0.032768615, -0.0135159055, 0.0075611053, -0.049198814, 0.0063965344, -0.006528481, -0.03364061, -0.01257507, -0.0051172273, -0.017371036, 0.02030828, -0.0005198977, -0.006574375, 0.022821, -0.016980935, 0.0049221762, -0.009867299, 0.009098568, 0.018243032, 0.0045148632, 0.0003675139, -0.036050066, -0.022648895, 0.009809932, 0.0056019872, 0.012368546, -0.020331226, 0.0016421597, -0.027903806, 0.021478588, 0.018002085, -0.029074114, 0.001401931, 0.0054757777, -0.02489772, -0.008748624, 0.00550733, -0.026940024, 0.03196546, 0.032860402, 0.03607301, 0.038367733, -0.028293908, 0.02202932, -0.010326244, 0.03132294, 0.00050125306, -0.016820304, 0.025586138, 0.02654992, 0.002911427, 0.0135159055, 0.009700933, -0.026871182, 0.008605204, 0.00014431642, -0.026871182, -0.0075611053, 0.0748079, 0.072880335, -0.0010340586, -0.018598713, 0.017175986, -0.096378274, -0.009482934, 0.034902703, 0.018965868, -0.0059892214, 0.0031150836, 0.06058063, -0.025196034, -0.011966969, -0.01216202, 0.00023269904, 0.035132177, 0.03921678, 0.01894292, 0.018919973, 0.035820592, -0.027743176, 0.026618762, -0.010182824, 0.025861504, -0.0018314741, 0.016923565, -0.018793764, 0.029487163, 0.027490756, -0.019206814, -0.004761546, -0.030244421, 0.0056536184, 0.010940081, 0.0055331457, -0.017130092, -0.005679434, -0.03829889, 0.009305093, 0.011594078, -0.03602712, -0.0046439413, -0.011898127, -0.010148403, -0.034558497, -0.019941125, 0.026113924, 0.013022541, -0.010756504, 0.014273164, -0.063196614, -0.009959089, 0.012976646, -0.007239844, -0.0071767396, 0.01811682, 0.013527379, 0.011909601, -0.03848247, -0.021696586, 0.003232688, -0.041511502, 0.011645708, -0.015604102, 0.027284231, -0.022167003, 0.005693776, -0.03972162, -0.0029974792, -0.0047730193, 0.015317262, -0.008226574, -0.013171698, 0.014055165, 0.029533057, 0.01257507, -0.0040301033, 0.0195166, -0.011198238, 0.0250813, -0.02014765, 0.034168392, -0.002681955], [0.02290694, -0.01733894, -0.021844624, 0.053189036, 0.002255894, 0.017619783, -0.04185767, -0.007387366, 0.03506862, 0.04840251, -0.014237469, 0.023663992, 0.019512415, -0.012882101, -0.0014148942, 0.039122514, -0.022125466, 0.010305681, -0.024518728, -0.01026905, -0.014066522, -0.055484615, -0.04608251, -0.025788624, 0.025666518, -0.021624835, -0.013053048, -0.011661049, -0.027546939, 0.018303573, 0.052261036, 0.036314093, 0.045789458, -0.025764203, -0.0024634728, -0.02852378, -0.0007581971, 0.024726307, 0.012967574, 0.019036204, -0.035117462, -0.0029702096, 0.020928835, -0.022955783, -0.036289673, 0.015995784, -0.007228629, 0.014176416, 0.005042946, -0.03467788, -0.035825673, 0.007570524, -0.029329674, 0.017863994, -0.033774305, 0.030550728, 0.072432816, -0.022626098, 0.07233513, -0.013504838, -0.026008412, 0.014982311, 0.04273683, -0.0072591556, -0.019756624, 0.002168894, -0.00023715124, 0.037413042, 0.03856083, 0.03343241, -0.026741045, 0.041833248, 0.052407563, 0.011880838, -0.00852905, -0.05118651, 0.08039408, 0.018095994, 0.02896336, 0.0016865784, 0.03406736, -0.011343575, 0.0136513645, -0.012491364, 0.021441678, -0.019365888, 0.04488588, -0.11126228, -0.016044626, 0.011001681, -0.023505256, -0.013431574, 0.032895148, 0.0007498024, -0.00807726, 0.026130518, -0.0182181, 0.009005261, 0.008303155, 0.025837466, -0.006734103, -0.015373047, -0.054605458, -0.05778019, 0.011966312, 0.03013557, 0.055973034, 0.03433599, -0.013333891, -0.043615986, -0.0026466306, -0.0341162, -0.045862723, 0.01355368, -0.033725463, -0.011032207, -0.03758399, -0.047645457, -0.004899472, -0.013016417, -0.09612123, -0.006898945, 0.05567998, -0.0036631566, 0.0026054203, -0.0037638936, -0.019109467, 0.07218861, 0.014847995, 0.000861605, -0.023578519, 0.011135996, 0.05441009, 0.04373809, 0.04657093, 0.015702732, 0.0799545, -0.00074903923, -0.0345802, 0.026301466, -0.03882946, -0.0018025783, -0.015018943, 0.037608407, 0.0071797874, 0.006520419, 0.003339578, 0.0026557886, -0.02945178, -0.027424833, 0.022088835, -0.07199324, -0.023908203, 0.0115023125, 0.022052204, -0.025397887, -0.014213048, 0.040783145, -0.013297259, 0.048451353, 0.013101891, -0.068427764, -0.0030846833, 0.033090517, 0.002594736, -0.003760841, 0.024872834, -0.029207569, -0.060661875, 0.017009258, 0.011679364, 0.010348418, 0.02571536, -0.013040838, -0.002207052, -0.020086309, 0.023895992, -0.009133471, -0.019365888, -0.05050272, -0.013687995, 0.06559493, 0.018071573, 0.001311868, 0.035361674, 0.084399134, 0.061101455, 0.05914777, 0.04442188, -0.0070027346, -0.009524208, 0.01893852, -0.03255325, 0.007289682, -0.024665255, -0.029940201, -0.009695155, -0.019133888, -0.02199115, 0.008419155, 0.023505256, -0.0200741, 0.03182062, -0.0051619983, 0.032626517, -0.016007995, 0.028352832, 0.035557043, 0.028401675, 0.04041683, 0.039342303, 0.008187155, 0.00218721, -0.035386093, -0.026765466, 0.02477515, -0.05631493, -0.030501885, -0.013749048, -0.037730515, 0.047572196, -0.027962096, 0.0019933677, -0.017851783, -0.0036753672, 0.036289673, 0.011856417, -0.011966312, 0.03738862, 0.025055991, -0.0004037104, -0.019854309, -0.036875777, 0.0038798936, -0.08444797, 0.012009049, -0.034946516, -0.03973304, -0.013687995, 0.048036195, -0.0039775777, 0.008480208, -0.048988614, -0.01660631, 0.022394098, 0.045667354, 0.017424416, 0.006404419, -0.028792411, 0.00771705, 0.017900625, 0.016410941, 0.032064833, 0.043078724, 0.011282522, 0.07497261, 0.03902483, -0.017888416, -0.008791576, 0.006850103, -0.024469886, 0.03018441, -0.019744415, 0.05821977, -0.05348209, -0.022052204, 0.021942308, -0.040831987, -0.042883355, 0.021514941, 0.033237044, -0.033090517, -0.0050276825, 0.014713679, 0.02918315, 0.017607573, 0.08205471, 0.052212194, -0.00828484, 0.017106941, 0.0035746305, 0.056901034, 0.03348125, 0.026521254, 0.036338516, -0.006618103, 0.006599787, -0.06984419, -0.020867784, 0.008290945, -0.01472589, -0.0026496833, 0.05382398, -0.008461892, 0.019353678, -0.009035787, 0.032650936, -0.0076621026, 0.02454315, 0.031527568, -0.006187682, -0.04254146, -0.03277304, -0.042028617, 0.015592837, 0.054849666, -0.028426096, 0.08010103, -0.014090943, -0.053237878, 0.062517874, 0.008797681, -0.007674313, -0.01591031, 0.03440925, 0.015067785, 0.0067218924, 0.03064841, 0.058952402, -0.01799831, -0.011398522, -0.019964203, -0.09846565, 0.015104416, 0.036362935, 0.005311577, 0.034238305, -0.03626525, -0.024115782, 0.014213048, -0.061443347, -0.037730515, -0.010226312, 0.01015305, -0.032846306, -0.11565807, 0.0052261036, -0.05475198, -0.0029946307, -0.015507364, 0.01634989, 0.0128210485, -0.042394932, 0.025446728, 0.022809256, -0.03514188, -0.052700616, 0.019719994, 0.03995283, 0.029354095, 0.0014904469, 0.03665599, 0.013907785, 0.01239368, 0.006856208, 0.011752628, 0.013419364, -0.05797556, 0.025373466, -0.0026695256, 0.070967555, -0.03909809, 0.020428203, 0.081615135, 0.013749048, -0.022479571, -0.019133888, -0.009005261, -0.014188627, -0.0016789468, -0.065839134, 0.035679147, 0.04395788, -0.01262568, -0.016935995, 0.014188627, 0.04068546, -0.002512315, -0.055777665, 0.024396624, 0.027473675, -0.02525136, -0.034287147, 0.051674932, 0.025593255, 0.0059801033, -0.005940419, 0.0034097885, 0.0184501, -0.0058946298, -0.009157891, 0.020269467, 0.0036478937, 0.008321471, 0.01591031, 0.02476294, 0.0028160517, 0.013358312, 0.022076625, 0.0056137876, -0.0016636837, 0.02337094, -0.034189463, -0.051870298, 0.07028376, -0.054800823, 0.045935985, 0.0045087356, -0.0035837884, 0.042858932, -0.02503157, 0.050649248, -0.019817678, 0.016703995, 0.030355358, 0.0061205244, -0.011599996, 0.06686482, 0.005726735, -0.0074484185, 0.019756624, -0.028157465, -0.03155199, 0.015079995, -0.07155366, 0.068427764, -0.024591992, 0.0055344193, 0.003892104, -0.022662729, 0.016655153, 0.009292208, 0.00080971024, -0.017790731, -0.026716623, -0.036216408, -0.016618522, -0.020782309, -0.013346101, 0.051088825, 0.018767573, -0.025983991, 0.018034942, -0.0017583153, -0.08776923, -0.010177471, -0.06349472, -0.034946516, 0.00866947, -0.010623154, 0.013260627, -0.024408834, -0.042492617, -0.014872416, 0.03831662, 0.028230729, 0.038658515, 0.028938938, 0.06959998, -0.07331198, -0.01940252, 0.018791994, 0.065253034, -0.0036570514, 0.009365471, 0.021600414, -0.016203362, 0.029769253, 0.022626098, 0.01214947, -0.03340799, -0.011612207, -0.04957472, 0.01518989, -0.004206525, -0.06627872, 0.008718313, -0.0068073664, 0.025935149, 0.010617049, -0.029940201, 0.010482733, -0.025129255, 0.056510296, 0.02056252, -0.046253458, 0.040050514, 0.02852378, 0.07848924, 0.019060625, -0.032821883, 0.04766988, -0.0033426306, 0.0074728397, -0.0061846296, 0.008730523, 0.003892104, -0.013639154, -0.00085015764, -0.01285768, 0.013932206, 0.02241852, 0.0063738925, 0.039806303, 0.039171357, 0.021453887, -0.01611789, -0.019072836, 0.010476628, 0.0008219208, 0.017106941, -0.03018441, -0.033530094, 0.0012279206, -0.009811155, -0.04185767, -0.024518728, 0.023285465, 0.014945679, 0.035825673, -0.0015522627, -0.056705665, -0.06193177, -0.016252205, -0.04442188, -0.0039562094, 0.00362042, -0.007057682, 0.012259364, -0.024970518, -0.017802943, -0.008022313, -0.0025199465, 0.015775995, 0.02383494, -0.00479263, 0.014799153, 0.0058488403, 0.011984628, -0.0053207353, -0.028426096, 0.022967992, -0.0072835768, 0.0048628408, -0.016410941, 0.030819358, 0.07736587, -0.0327242, -0.013810101, 0.013761259, -0.016020205, 0.015006732, 0.0059098927, -0.00019193414, 0.015018943, -0.043884616, -0.061541032, -0.05563114, 0.013883364, -0.06964882, -0.010812418, 0.04820714, 0.09118818, 0.0022299467, -0.015531785, -0.04674188, 0.055924192, 0.0063983137, -0.020904414, -0.007057682, -0.027693465, 0.054898508, 0.015592837, -0.014371784, 0.0067646294, 0.06530187, -0.020977678, -0.05934314, -0.021539362, -0.02783999, -0.02172252, -0.0086389445, -0.040050514, -0.046375565, 0.019793257, 0.040807568, -0.04793851, -0.06246903, -0.03367662, -0.0027916306, 0.0145671535, 0.045154512, -0.008016208, -0.015250943, 0.011624417, -0.012698944, -0.0007929208, 0.008730523, 0.0017949468, 0.02964715, -0.004255367, -0.035605885, 0.019487994, 0.007454524, -0.03174736, 0.014738101, 0.030990306, -0.0678905, 0.029989043, 0.015385258, -0.12054228, -0.022149887, 0.027986517, -0.010128628, 0.0004472104, -0.009133471, 0.01680168, 0.04488588, 0.013602522, 0.025129255, 0.07511913, 0.014090943, 0.05441009, -0.03975746, 0.055924192, 0.02197894, -0.005436735, -0.004801788, -0.012943153, 0.027864411, -0.0029320517, 0.004273683, -0.028548202, -0.032626517, 0.011447364, -0.020415993, 0.016178941, 0.010262944, -0.016703995, 0.04271241, 0.007912419, 0.032626517, 0.005925156, 0.0617364, -0.032431148, -0.0004991051, 0.0067707347, 0.005363472, 0.088257656, -0.02918315, -0.0458383, 0.0087244185, -0.018144837, 0.053433247, 0.015934732, -0.010549892, 0.0060258927, 0.015739363, -0.008376419, 0.004899472, -0.03973304, -0.039464407, 0.03926904, 0.010091997, -0.00052543404, -0.015995784, -0.024946097, -0.0016865784, -0.022845887, 0.009866102, 0.06149219, -0.041686725, -0.05162609, -0.050209668, 0.012650101, -0.015531785, -0.0054581035, 0.046986092, -0.011258102, -0.039342303, 0.012057891, -0.04044125, 0.0012767627, -0.03015999, 0.0186821, -0.026863148, -0.022601677, 0.00654484, -0.03321262, -0.011978523, 0.014347364, -0.067646295, -0.027180623, 0.051333036, 0.029012201, 0.006801261, -0.005940419, -0.038951565, 0.0038035777, -0.034922093, 0.024408834, -0.014164206, -0.018364625, -0.03274862, 0.029769253, -0.001743052, 0.0060869455, -0.009078523, -0.031527568, -0.055728823, 0.020367151, 0.039659776, 0.03863409, 0.037950303, 0.033359148, 0.0028694728, 0.00443242, 0.025055991, -0.09582818, 0.054068193, 0.047132615, 0.03274862, 0.013578101, -0.045740616, 0.029036622, -0.042956617, 0.009615786, 0.003892104, 0.04251704, -0.012295996, 0.0107025225, -0.022137677, -0.008590102, 0.004902525, -0.005216946, 0.015287574, -0.0072774715, -0.0055954717, 0.020147363, 0.019781046, 0.048182722, -0.02219873, -0.04158904, -0.024921676, -0.010635365, -0.04693725, 0.036094304, 0.0106719965, -0.0012988943, -0.044226512, -0.04185767, -0.025983991, -0.001495789, -0.03834104, 0.001006605, 0.034458093, 0.005867156, -0.009859997, -0.012527996, -0.039879568, -0.02710736, 0.010470523, -0.02195452, -0.014274101, 0.007906313, -7.6697346e-05, -0.016325468, -0.066522926, 0.008370313, 0.031600833, 0.038438726, 0.09001597, 0.024005886, 0.0014805258, -0.003611262, 0.0034158935, 0.023493046, -0.0017644205, -0.061345663, 0.00414242, -0.036167566, 0.02433557, -0.01097726, -0.0032266306, 0.04410441, 0.027498096, -0.0028923675, -0.030794937, 0.0017109994, -0.009878312, 0.0012172364, 0.017619783, 0.04913514, 0.052944824, 0.03738862, -0.007790313, 0.0327242, -0.008870944, 0.028597044, -0.041662302, 0.0037455778, -0.0425903, 0.006715787, 0.040245883, 0.010604839, -0.0009974471, -0.03487325, -0.004182104, -0.048255984, 0.01569052, 0.014750311, 0.0020513677, 0.012247154, 0.00566263, -0.0017384731, -0.016227784, 0.0059129456, -0.012442523, -0.015617258, 0.029866938, -0.022955783, -0.055924192, -0.010323997, 0.011477891, 0.025324624, 0.055093877, 0.048231564, 0.01110547, -0.027278308, 0.018743152, -0.04112504, -0.044739354, -0.022931362, -0.009279997, -0.0077719977, 0.031991567, 0.028474938, 0.051674932, 0.038438726, 0.028890096, -0.04227283, -0.02876799, -0.0110444175, 0.011197049, -0.032064833, 0.02127073, -0.021380624, 0.003015999, -0.0010897891, 0.007918524, 0.029476201, 0.030111149, 0.04298104, -0.021563783, -0.0026786833, -0.019451363, -0.07223745, -0.011050522, -0.0063677873, 0.019707782, 0.012320417, -0.0005765656, 0.021942308, -0.04141809, 0.0005841972, 0.020367151, -0.04271241, -0.06007577, -0.013639154, -0.021392835, 0.0021795782, -0.03697346, -0.0030175254, 0.050111983, 0.00840084, -0.022247571, 0.01564168, -0.02642357, 0.009395997, -0.008327576, -0.0012767627, -0.0066669453, -0.042883355, -0.014469469, 0.016301047, -0.043664828, 0.008339787, -0.004148525, -0.00094707863, 0.007710945, -0.013040838, -0.015714942, 0.009658523, -0.018975152, -0.007924629, -0.0152021, 0.009249471, 0.00356242, -0.009908839, 0.0341162, 0.0043591564, 0.010769681, 0.006212103, -0.019915363, 0.035825673, -0.02969599, 0.007497261, 0.018706521, -0.0031167357, -0.018071573, -0.037266515, 0.03758399, 0.03037978, -0.04417767, 0.0065753665, -0.01191747, -0.004438525, -0.038414303, 0.003650946, -0.046986092, 0.046522092, 0.04740125, 0.027522517, 0.021807993, -0.029500622, 0.01144126, -0.008083366, 0.009566944, 0.012503575, -0.0364362, 0.02244294, 0.021148624, 0.00819326, 0.01109326, -0.006581472, -0.02290694, 0.032821883, 0.008498523, -0.025446728, 0.0035196831, 0.043567143, 0.06364124, -0.013040838, -0.015348626, 0.00362042, -0.06662061, -0.0040508406, 0.028255148, 0.045740616, 0.02221094, -0.012411996, 0.028084202, -0.036411777, 0.0012012102, -0.013126312, -0.011905259, 0.02925641, 0.04417767, 0.01749768, 0.016630732, 0.025617676, -0.0026115256, 0.015250943, -0.010824628, 0.033554517, 0.007497261, 0.020916624, -0.020049678, -0.0036570514, 0.026277045, -0.033701044, -0.006715787, 0.010720839, 0.013590312, 0.039830726, -0.008113892, 0.0018773678, -0.003354841, -0.05538693, 0.015727153, 0.017595362, -0.045325458, -0.029427359, 0.0044843145, 0.023468625, -0.034653462, -0.008126102, 0.04884209, 0.013407154, -0.0048781037, 0.023786098, -0.053921666, -0.006331156, 0.019085046, 0.0008722892, -0.0031045254, 0.002483315, 0.036680408, 0.0086084185, -0.026716623, -0.0028358938, -0.011111575, -0.06456924, 0.008901471, -0.041979775, 0.008419155, 0.002507736, 0.008443576, -0.04837809, 0.0061602085, 0.0067707347, 0.0013706312, -0.013675785, -0.00677684, 0.019829888, 0.037950303, 0.019060625, 0.011947996, 0.013956627, 0.041979775, 0.03269978, -0.0079795765, 0.001123368, -0.0013057628], [0.025811395, 0.012547205, -0.014119943, 0.012605027, 0.018618435, 0.015727373, -0.04917117, 0.01187648, 0.017751116, 0.0041949297, -0.025556982, 0.013252624, 0.002343205, -0.017785808, 0.018098043, 0.046788935, -0.006840251, -0.01937011, 0.0015423811, -0.0028375767, -0.038485806, -0.046511393, -0.02648212, 0.020873463, 0.03540972, 0.030830277, -0.017149774, 0.026458992, 0.015889272, -0.011234663, 0.04012793, 0.007054189, 0.043273404, 0.016363407, 0.025163796, -0.022330556, -0.00877148, 0.01125201, 0.047274634, -0.0121655855, -0.047552176, -0.040081672, 0.032981224, 0.009314999, 0.0023807888, -0.020098658, 0.015588602, -0.010563938, 0.06906167, -0.03781508, -0.013032904, -0.0075861444, -0.042325135, -0.020607485, -0.052316643, 0.0399429, 0.06665631, -0.019844243, 0.042070724, -0.01838715, -0.063464575, 0.018502792, 0.037005585, -0.0056809355, -0.02574201, -0.0061637424, -0.021023797, 0.007135139, 0.014744412, 0.09126502, -0.021787038, 0.0013501255, 0.014073686, -0.03261117, 0.023128489, -0.027962344, 0.020121787, 0.024007373, 0.015877709, -0.046950836, 0.017751116, -0.01430497, -0.005426522, 0.034415193, 0.035964802, -0.003211969, 0.05222413, -0.12332111, -0.050235078, 0.00593824, -0.028263014, 0.011084328, 0.047829717, -0.006134832, -0.031501003, -0.013368267, 0.013402959, 0.033490054, -0.027453518, 0.025371954, 0.00012232803, -0.038069494, -0.05513832, -0.047552176, 0.056433514, 0.031593516, 0.015692681, 0.0026250836, -0.010535027, -0.048754856, -0.018919105, -0.02740726, -0.05148402, 0.023602623, -0.0134607805, 0.064204685, -0.036057316, -0.029118769, -0.028841227, 0.012651284, -0.035317205, -0.053195525, 0.06896915, 0.021382289, 0.037791952, 0.01730011, -0.005672262, 0.0045967875, 0.039572846, -0.02860994, -0.019705473, 0.002460293, 0.017589217, 0.02250402, -0.0013400068, 0.025626367, 0.04653452, -0.024146143, -0.018236814, -0.0031686032, -0.03140849, 0.0024313824, -0.0092167035, 0.033466924, -0.0016681423, -0.02909564, 0.0038364383, -0.026898433, -0.049078654, -0.0410762, -0.019404802, -0.057682455, 0.0077133514, -0.01975173, 0.03471586, -0.013507038, 0.010905083, 0.050142564, 0.016525306, 0.033883236, 0.032241113, -0.02541821, 0.011841787, 0.022874076, 0.016201507, -0.051854074, -0.009898993, 0.003966536, -0.044429827, 0.02067687, 0.0013255515, 0.035039663, 0.024146143, -0.03309687, -0.010280614, 0.020688433, 0.022689048, -0.04135374, 0.006834469, -0.070958205, -0.04426793, 0.052594185, 0.021174133, -0.034345806, 0.013946479, 0.033929493, 0.009095279, 0.03492402, 0.031963572, -0.037283126, -0.002950328, 0.012628156, -0.028193628, -0.021995194, 0.029280668, 0.004299008, 0.022353685, -0.027245361, 0.01601648, 0.026112065, -0.00888134, -0.045840666, 0.03769944, -0.043389045, -0.038555194, 0.0064470666, 0.018086478, -0.008615362, 0.009627234, 0.06920044, 0.024886254, 0.056849826, -0.015542345, -0.020931283, -0.0043510473, -0.010112932, -0.04396726, -0.018479664, 0.0050651394, -0.00037150137, 0.0025181144, 0.0048049437, 0.010060893, 0.004197821, 0.013472346, 0.031154076, 0.0020006143, -0.01272067, 0.05467575, 0.0048945667, -0.033466924, -0.07877564, -0.017034132, 0.018641563, -0.09982256, -0.019404802, -0.013264189, -0.034022007, 0.0159124, -0.013391395, 0.052594185, 0.037283126, -0.019809552, 0.03094592, 0.057821225, 0.02465497, 0.057127368, 0.012986647, -0.006360335, 0.05879262, 0.030760892, -0.016721899, -0.0241924, 0.06656379, 0.009789133, 0.057404913, 0.017392624, -0.041446254, 0.000102994054, 0.039711617, -0.023984244, 0.017022569, 0.0043973043, -0.009182011, 0.011911172, 0.004446452, 0.008048714, -0.0016059845, -0.04898614, -0.063973404, 0.057867482, -0.021914244, 0.05083642, 0.053611837, 0.017138211, 0.001050178, 0.050975192, 0.04257955, 0.01585458, 0.027314747, 0.029326925, 0.030737763, 0.029535081, 0.050743908, 0.005484343, 0.019312289, 0.054490723, -0.038000107, 0.0014527582, 0.033166256, 0.012292792, 0.01272067, 0.077989265, -0.00792729, -0.0025369062, -0.019474188, 0.033605695, 0.028517427, -0.03931843, 0.028540555, -0.023776088, -0.028239885, -0.06702636, -0.011113239, 0.074612506, 0.07882189, 0.02803173, 0.09501184, 0.038855862, -0.011558463, 0.069755524, 0.01874564, -0.0037497063, -0.04715899, 0.034669604, -0.032934967, -0.020179607, 0.023914859, 0.06383463, -0.023498546, -0.00050701987, -0.021255082, -0.042001337, 0.049633738, 0.054907035, -0.00014039715, -0.011286703, -0.010939776, 0.018560613, 0.011171061, -0.040821783, 0.0031396924, 0.03494715, 0.033212513, -0.015750501, -0.05897765, -0.027453518, -0.0679515, 0.040035415, -0.01776268, 0.0040445947, 0.018051786, -0.017415753, -0.07239217, -0.011090111, -0.053658094, -0.047829717, 0.011009161, 0.0016348951, 0.0183062, 0.0013298881, 0.010193882, 0.02364888, 0.012917262, -0.025834523, 0.035872288, -0.006285167, -0.028933741, 0.0034866198, 0.024007373, 0.06910793, -0.04012793, 0.010026201, 0.061197985, 0.0759077, -0.042371392, 0.0010949895, -0.004076396, 0.025302568, 0.044614855, -0.045539998, -0.00956363, -0.029326925, 0.012986647, -0.04621072, -0.005432304, 0.04884737, 0.008904468, -0.06781273, 0.03582603, 0.019416368, -0.049032398, -0.044823013, -0.0072507816, 0.01076053, 0.00514898, -0.0603191, 0.021070054, 0.034854636, 0.0015178071, -0.0050246646, -0.05018882, 0.05264044, 0.011830223, 0.010662233, 0.0023981354, -0.013541731, 0.06869161, 0.004301899, 0.036936197, 0.0241924, 0.00086948666, -0.049541224, -0.035317205, 0.07637027, -0.031755418, 0.00066133024, 0.003816201, -0.0071293567, 0.030367706, -0.005166326, 0.028401785, -0.007088882, 0.0063545527, 0.021706088, -0.018930668, 0.05190033, 0.012743798, 0.020029273, 0.008337821, 0.02465497, -0.041446254, -0.04452234, 0.068044014, -0.03305061, 0.00026796522, -0.01661782, 0.017924579, 0.03626547, -0.04244078, 0.020156479, -0.02588078, -0.026690276, -0.011431256, -0.025603238, -0.044776756, -0.037329383, -0.04715899, -0.022550277, 0.045054298, 0.014351228, -0.07516759, 0.013819273, 0.034970276, -0.047413405, 0.0048830025, -0.017947707, 0.017832065, -0.014397485, -0.020792512, 0.018919105, -0.0010696927, -0.028910613, -0.029928265, -0.02710659, -0.017716423, -0.013217932, 0.07248469, 0.037606925, -0.07132826, 0.0003496377, -0.015577038, 0.04958748, -0.01806335, 0.015056646, -0.029905137, -0.05865385, 0.008251089, 0.027175976, 0.036959328, -0.022446198, 0.008927597, -0.054953292, 0.00019279764, 0.018722512, -0.072207145, -0.014964133, -0.01945106, -0.004197821, 0.047274634, -0.02067687, 0.006053882, -0.0045187287, 0.04567877, 0.008511284, -0.011367653, 0.051252734, 0.014675027, 0.059023906, -0.009893212, -0.029511953, 0.015588602, -0.022318993, -0.0039029326, 0.016421227, -0.0005977269, 0.00880039, 0.0077133514, -0.0049928627, -0.039549716, 0.055323347, 0.07327106, 0.019612959, 0.05296424, 0.057497427, -0.029442567, 0.0032900276, -0.056849826, 0.01953201, 0.002481976, 0.026551506, -0.025811395, -0.045100555, -0.0035617873, -0.015577038, -0.030321449, -0.019728601, 0.014998825, 0.02847117, -0.021752344, 0.0035039661, -0.032102343, -0.0241924, -0.014339663, -0.009176228, -0.025765138, 0.033143125, -0.018375585, -0.00024122292, 0.00193412, -0.005626005, -0.020225864, 0.016721899, -0.0028664873, -0.011812876, 0.01070849, 0.0011535335, -0.020341506, 0.015276368, -0.03890212, -0.004186257, 0.02152106, 0.02726849, -0.027638545, 0.0018459426, 0.048801113, 0.08987731, -0.0030385053, -0.033628825, 0.00994525, -0.03906402, 0.06508357, 0.053843122, 0.023984244, 0.02111631, -0.010639105, -0.044198543, -0.020711562, -0.03383698, -0.008748352, 0.0040388126, 0.020630613, 0.07331731, -0.011622066, -0.01691849, -0.04318089, 0.0046835192, 0.022874076, 0.00048642105, 0.005568184, 0.008401424, 0.031917315, 0.004868547, -0.026597762, -0.016178379, 0.0768791, 0.036381114, -0.05546212, 0.007979329, -0.008956508, -0.009702401, -0.04146938, -0.029835751, -0.038647708, 0.019346982, -0.0011036627, -0.003587807, -0.0017808937, -0.054722007, -0.03323564, 0.008482373, -0.030182678, 0.009569413, -0.045424353, 0.0075398874, -0.013923351, 0.019936757, 0.035895415, 0.04183944, -0.0039000416, -0.039896645, -0.046488263, -0.020237429, 0.011124804, -0.026204579, 0.0051171784, 0.013518603, -0.029835751, 0.046650164, 0.012547205, -0.08576044, -0.009349692, 0.016583128, 0.0005015991, 0.025834523, -0.016270893, 0.0057936865, 0.058237538, 0.019312289, 0.023140054, 0.068044014, 0.015322625, 0.059902787, -0.03274994, 0.04396726, 0.00972553, -0.017693294, 0.0064991056, 0.0064470666, -0.029789494, -0.028054858, -0.026250836, -0.019404802, -0.06415843, -0.02740726, -0.0014599859, 0.007140921, -0.0016941619, -0.024469942, 0.02618145, 0.042510163, 0.036866814, -0.002713261, 0.024562456, -0.028841227, -0.014351228, -0.0012352059, 0.016386535, 0.04824603, 0.012327485, -0.034993406, 0.01983268, -0.023672009, 0.049541224, 0.02509441, -0.015519217, 0.037560668, 0.007308603, -0.035016533, -0.011685669, -0.0075341053, -0.017820502, -0.0053773737, 0.051807817, 0.02007553, -0.005276187, -0.02043402, -0.025927037, -0.0094884625, 0.01983268, 0.04581754, -0.03217173, -0.080903456, -0.029234411, 0.029419439, -0.038624577, 0.024400556, 0.023290388, -0.050281335, -0.023822345, -0.025186924, -0.046997093, -0.018757205, 0.013217932, 0.0032235333, -0.0067014797, 0.018248377, 0.020792512, -0.011616284, -0.038855862, 0.00514898, -0.06984804, -0.023498546, 0.029049383, 0.011269356, 0.0010060893, 0.0011419692, -0.02847117, 3.1417705e-05, -0.014281842, 0.0067650834, -0.022330556, -0.014073686, 0.03337441, 0.034045137, 0.019069439, -0.0009186347, 0.01854905, -0.03140849, -0.07063441, 0.04519307, -0.0026352024, 0.048014745, 0.060411613, 0.03538659, 0.031454746, -0.041307483, 0.0018473881, -0.046627034, 0.050928935, 0.029465696, 0.014489999, -0.031107819, 0.01484849, 0.027916087, -0.033490054, 0.0625857, -0.0062215636, 0.03168603, 0.005053575, 0.0027392805, -0.00088972406, 0.0026814593, -0.011165278, -0.008077625, -0.031871058, -0.017878322, -0.0058948738, 0.010610195, 0.0283324, 0.014755976, -0.053889383, -0.017392624, -0.04704335, -0.0025556982, -0.03413765, 0.02067687, -0.03950346, 0.02326726, -0.031269718, 0.0010089803, -0.03538659, 0.0046025696, -0.029882008, 0.04028983, 0.060041558, 0.008424552, -0.021844858, -0.030853406, -0.025927037, 0.0073953345, 0.017924579, -0.015345753, -0.018861283, 0.004666173, 0.014836926, -0.025834523, -0.053843122, 0.015102903, 0.02144011, 0.015796758, 0.06836782, 0.023937987, 0.014073686, 0.0084187705, 0.032541785, -0.010997597, 0.03372134, -0.03291184, -0.018317765, 0.0026496577, 0.000840576, 0.008256871, -0.03721374, 0.031107819, 0.0015539454, 0.0055306, -0.041770052, -0.020607485, 0.009858519, 0.010477206, 0.007748044, 0.031223461, -0.004770251, 0.031038433, -0.04470737, -0.0019052094, -0.036820557, 0.053010497, -0.012836312, -0.0018025767, -0.04535497, -0.016432792, 0.036357984, -0.028725585, -0.04301899, -0.0045707677, -0.018121172, 0.005521927, 0.015253239, -0.03871709, 0.021787038, -0.012732234, 0.0037728348, -0.012385306, 0.019462625, -0.013194803, -0.0033449577, -0.017415753, 0.013287317, -0.014570949, -0.0009779015, -0.027661674, 0.016178379, 0.011442821, 0.05088268, -0.03413765, 0.03094592, -0.040382344, 0.01070849, -0.05037385, -0.02574201, -0.023914859, 0.011402345, 0.0069616754, 0.04318089, 0.024978768, 0.05546212, 0.01953201, 0.011755055, 0.006614748, 0.0010863162, -0.009800698, 0.013056032, -0.030252064, 0.021636702, -0.017346367, 0.001509134, 0.0086905295, 0.045725025, 0.0005623114, 0.021301338, -0.0019818225, -0.025186924, 0.0026135193, -0.051206477, 0.0064933235, -0.0034374718, -0.016039608, -0.0062678205, 0.030367706, -0.0044580163, 0.042741448, -0.07109698, -0.009771787, 0.024261786, -0.0011253456, -0.04764469, -0.01601648, -0.0065453625, -0.0181443, -0.042857092, 0.002953219, 0.02696782, -0.008511284, -0.027083462, 0.044915527, 0.031963572, -0.004264315, -0.005996061, 0.019786423, 0.0045187287, -0.026366478, 0.0034374718, 0.0049812985, -0.017091954, 0.0033189382, 0.0052530584, -0.013773016, -0.013992736, -0.0064817593, -0.020908155, 0.047737204, 0.022041451, 0.022874076, 0.038855862, 0.0015250348, 0.004024357, -0.0066956975, 0.0030934354, 0.0027465082, -0.00027230184, 0.00506803, 0.004911913, -0.014883183, -0.027152847, -0.011448602, -0.02127821, -0.03048335, -0.030228935, 0.001207018, 0.033027485, 0.039595973, -0.0021234844, -0.019659216, 0.0140621215, -0.021243518, 0.030899663, 0.023799216, -0.03291184, 0.03337441, 0.0055595106, 0.04593318, 0.017022569, -0.0219605, 0.005634678, 0.007216089, 0.023533238, 0.013391395, -0.03832391, 0.031477876, 0.022087708, 0.036219213, -0.00064000866, -0.020757819, -0.004374176, 0.026944691, 0.002187088, -0.038000107, -0.026620891, 0.04410603, 0.10454077, -0.040474858, -0.022769999, 0.021497931, -0.07303977, -0.045910053, 0.0018488336, -0.00042354048, 0.024978768, -0.025210055, 0.030228935, -0.03170916, 0.009083714, 0.019601395, 0.019312289, -0.0024039175, 0.020318378, 0.0032726813, -0.020723127, -0.014813798, -0.020827204, -0.021636702, 0.014871619, 0.03566413, 0.028748713, 0.014941004, -0.03554849, 0.036959328, 0.038347036, 0.008320474, 0.020063965, 0.022654356, 0.0022579187, 0.011269356, -0.009731312, -0.02969698, -0.00088611024, -0.03749128, -0.0102401385, -0.0006067615, -0.05897765, 0.011159496, 0.015935529, 0.0095925415, -0.025371954, -0.03411452, 0.03217173, 0.009956814, -0.03291184, 0.02226117, -0.049679995, -0.012593462, -0.0018719621, -0.00013407297, -0.008742569, 0.02863307, -7.3496194e-05, 0.038624577, -0.030043907, -0.022029886, 0.017438881, -0.037283126, 0.0010198219, -0.03857832, 0.056341, -0.007643966, 0.0058341613, -0.05647977, -0.016502177, 0.018109607, 0.001093544, 0.0031772763, 0.010546591, 0.03823139, -0.00062193954, 0.003920279, -0.030853406, 0.016282456, 0.107778765, 0.010673798, -0.021740781, 0.027222233, 0.0026164104], [0.0024158962, 0.027760409, -0.026135877, 0.03034055, 0.02185953, 0.03891713, -0.033494055, 0.06388239, 0.0012333315, 0.019757193, -0.044101305, -0.01618561, -0.006187561, -0.00602033, -0.022241775, 0.04945271, -0.013545742, 0.013593523, -0.03122449, -0.0631179, -0.0086721415, -0.05437409, -0.071861714, -0.00096680643, 0.01330684, -0.024021594, -0.015253891, 0.0022262677, -0.0109536555, 0.015946707, 0.06942491, 0.021608684, 0.06039442, -0.051746167, 0.00901855, -0.043145698, 0.010625165, 0.022492621, -0.059868835, -0.02429633, -0.05681089, 0.04092391, 0.0013751795, -0.010780452, -0.008684087, -0.03019721, 0.018049045, -0.032227878, 0.015409177, -0.043814622, -0.03722093, 0.005826222, 0.009998048, -0.0020396255, -0.026709242, -0.013880204, 0.044244647, -0.0013079883, 0.07257842, -0.036743123, 0.030722795, 0.009179808, 0.03624143, -0.023460174, -0.0069281575, 0.009621778, -0.012793201, 0.052176192, 0.0125065185, 0.01567197, -0.02293459, 0.03662367, -0.0007726986, -0.028668238, -0.0011265721, -0.042715672, 0.01122242, 0.028692128, -0.03246678, 0.023949923, 0.021632574, -0.034760237, 0.04152116, 0.008397404, 0.04969161, -0.016794808, 0.05470855, -0.117061965, -0.04331293, 0.014274393, 0.019112159, 0.013414346, 0.012028715, 0.00848102, -0.006438408, 0.013474071, 0.008994659, 0.013581578, -0.028739909, 0.029791076, -0.012757366, -0.045009132, -0.038558777, -0.044292428, 0.0277843, 0.014764142, 0.02773652, 0.0026219492, -0.012231781, -0.008277954, 0.029767185, -0.0005147591, -0.036814794, 0.034449667, -0.02654201, 0.078789875, -0.08285121, -0.035357494, -0.013450181, -0.025705853, -0.062066734, 0.0011101476, 0.06479022, -0.008039052, -0.027497618, 0.012829036, 0.015516683, 0.08113111, -0.005903865, 0.02549084, -0.03134394, 0.020808361, 0.008606444, -0.0007398496, 0.0867692, 0.024750244, 0.028381554, 0.002021708, -0.0014655143, 0.014154942, -0.04969161, -0.008056969, -0.03743594, 0.024093265, -0.058292083, -0.00543502, -0.024284385, 0.00817642, -0.02897881, -0.04448355, 0.0005886694, -0.028405445, -0.029289382, -0.006229369, 0.060920004, -0.040446106, 0.023245161, 0.01939884, -0.008050997, 0.047756504, 0.0302211, -0.060920004, 0.04223787, 0.026231438, -0.010852123, -0.0748241, 0.044507436, 0.027449837, -0.059343252, 0.031033367, 0.044005744, -0.054851893, -0.0010653535, 0.010726699, -0.046490323, -0.0048885318, 0.04945271, 0.0017290531, -0.0066653653, -0.057766497, -0.04837765, 0.023149602, 0.05437409, -0.015289727, -0.0110790795, 0.031917304, 0.047780395, 0.0008010682, 0.010314593, -0.068230405, 0.0073522083, -0.0032580257, 0.012148165, -0.017224833, -0.005279734, -0.041425604, -1.7229406e-05, -0.03392408, -0.03347017, 0.00751944, 0.00014772727, -0.05795762, -0.024678575, -0.004610808, 0.006438408, 0.013390455, 0.026995923, -0.01567197, 0.0016469305, -0.02537139, 0.008809511, 0.0037268708, -0.014979154, -0.011945099, -0.0056649633, 0.052367315, -0.049930513, 0.029432723, -0.0077045886, -0.06708367, 0.029886637, -0.04749371, 0.047708724, -0.022731524, 0.0115688285, 0.038941022, 0.02356768, 0.034258544, 0.022158159, -0.020103602, 0.01571975, -0.07066721, -0.048019297, 0.0316784, -0.056667548, -0.045678057, -0.04116281, -0.0046376847, 0.03626532, 0.01637673, 0.004870614, 0.023448229, -0.0235199, -0.020951703, 0.054421872, 0.010643083, -0.0121003855, 0.057384256, 0.011043244, 0.045773618, -0.0029623846, -0.0031027393, 0.047302593, -0.0073462357, -0.036647562, 0.03136783, 0.0065578595, -0.015409177, 0.0051334063, 0.047326483, -0.033231266, -0.004261414, -0.021011429, 0.11075496, -0.010230977, 0.017272612, 0.02764096, -0.048855454, -0.0553297, -0.051125024, 0.0065936944, -0.005530581, -0.0115688285, 0.04099558, 0.045439158, -0.018956872, 0.028357664, 0.00754333, -0.0152777815, 0.029552175, -0.01915994, 0.03390019, 0.00751944, 0.011885373, 0.055186357, 0.048927125, 0.012399012, -0.07128835, -0.060012177, 0.006922185, -0.008690059, -0.0052468847, 0.040422216, 0.026135877, 0.01698593, -0.03621754, -0.016591743, -0.007620973, -0.08509688, -0.00726262, -0.030388331, 0.0033864356, -0.06015552, -0.040207203, -0.015373342, -0.015349452, 0.020055821, 0.12097996, -0.014871648, -0.046108082, 0.09040051, -0.0049452707, -0.027378166, -0.04376684, 0.03626532, 0.0019858726, 0.02658979, 0.041353934, 0.08519244, -0.029337162, 0.012769311, -0.015552519, -0.10693253, 0.023806581, 0.019410785, -0.009902487, -0.0053842533, -0.04149727, -0.014513295, 0.040374435, -0.071049444, 0.004019526, -0.0074836044, -0.022026762, -0.025968645, -0.08199116, -0.041712284, 0.0018126688, 0.051268365, 0.010242922, -0.00033744905, 0.008958824, -0.011777868, -0.035214152, -0.04443577, -0.039657727, -0.016591743, -0.0050348593, 0.066701435, 0.0005886694, 0.0015177741, 0.039609946, 0.045080803, 0.014190777, -0.020844197, -0.004097169, -0.030531673, -0.08562247, -0.00025066044, 0.007818067, 0.065936945, -0.078981, -0.012530409, 0.074202955, 0.0068325964, -0.03153506, -0.026995923, -0.02429633, -0.012637914, 0.000388589, -0.03726871, 0.04713536, -0.04324126, -0.0005140125, -0.011383679, -0.0072865104, 0.016388675, -0.03495136, -0.017200943, -0.00960386, -0.05542526, -0.012375122, 0.028668238, 0.021429507, -0.0034043533, 0.01569586, -0.03397186, -0.025084708, 0.016173664, 0.0026876472, 0.006522024, 0.0097770635, -0.016830644, -0.027139265, 0.059677713, 0.04348016, -0.03401964, 0.035238042, 0.022193994, 0.011085052, 0.00606811, -0.021823695, -0.012685695, -0.0076388908, 0.040302765, -0.011574801, -0.030722795, -0.028572677, 0.014823868, 0.06178005, -0.02541917, 0.03136783, -0.030842245, 0.017033711, 0.023257107, -0.015743641, -0.017869867, 0.03946661, 0.014967209, -0.0005535807, 0.012279562, -0.04864044, -0.013486017, 0.02408132, -0.037937634, 0.040517773, -0.016245335, 0.024117155, -0.0031236433, -0.0072028944, -0.024989147, -0.008015161, 0.04959605, 0.008976742, -0.009239534, -0.06321346, -0.03029277, -0.039299376, 0.04223787, 0.03865434, 0.0024636767, -0.0064563258, 0.013497962, 0.02103532, -0.06574582, 0.023699077, -0.039538275, 0.04969161, 0.041473385, -0.008415322, -0.028787687, -0.026159767, -0.034282435, -0.018168496, 0.038558777, -0.022803193, -0.018550739, 0.041760065, 0.06851709, -0.06307012, 0.04003997, 0.04097169, 0.059916615, -0.043145698, 0.019506346, 0.017284557, -0.024379946, 0.02298237, -0.010463906, 0.0009249986, 0.038104866, 0.0022621031, -0.00850491, 0.012399012, -0.0033237238, -0.018849365, -0.03249067, 0.00069057604, 0.040780567, -0.0399683, -0.0043151667, -0.023937978, 0.0019679551, 0.04257233, 0.012948487, -0.008654224, -0.003511859, 0.021214496, 0.05795762, 0.03270568, -0.0023218286, 0.020891977, -0.006283122, -0.018216277, -0.010881985, -0.016854534, -0.06856487, -0.05074278, 0.010105554, -0.032275658, 0.014931373, 0.04121059, 0.0053454316, -0.00054910127, -0.015206111, 0.012817091, -0.023292942, 0.013545742, 0.024045484, -0.05098168, 0.029599955, -0.011061162, 0.005190145, -0.022528457, -0.010505714, 0.0041957158, 0.00034622123, 0.028787687, 0.022922644, -0.011986907, 0.0010586344, -0.027091485, -0.024726355, -0.024559123, -0.0277843, 0.02520416, -0.0022859932, -0.020927813, 0.0017260668, -0.0014617814, -0.014895538, -0.019757193, -0.007907655, 0.014226613, 0.0045391377, -0.039347157, 0.0030026992, 0.020294722, -0.007835985, 0.014310229, -0.032968473, 0.07324734, 0.039108254, -0.0031833688, 0.004001608, 0.0162095, 0.053944066, -0.010177224, -0.01991248, 0.035261933, -0.045701947, 0.041831736, -0.011777868, 0.018980762, 0.013438236, -0.0035805434, -0.0328968, -0.06569804, 0.0039508413, -0.0072267847, 0.0029190835, 0.03151117, 0.07606639, 0.018586574, -0.03609809, -0.040708896, 0.03848711, 0.034855798, -0.051507264, 0.021047264, -0.0038075002, 0.04104336, -0.002424855, -0.00187986, -0.033494055, 0.06268788, 0.0046018492, -0.023854362, -0.01447746, -0.021847585, -0.019697469, -0.01391604, -0.00637271, -0.042022858, 0.005820249, -0.026900362, -0.018634355, -0.08949268, -0.03662367, -0.011915236, -0.039514385, 0.025634183, -0.019386895, -0.023209328, -0.0035775572, 0.032060646, 0.0014386378, 0.001196003, 0.010123471, -0.016758973, -0.0004893758, 0.009060358, 0.009167863, -0.01932717, -0.033589616, -0.0035029002, 0.029671626, -0.03287291, 0.01386826, 0.028763797, -0.087772585, -0.0051154885, 0.018491013, -0.004879573, 0.015301672, -0.02293459, -0.022659853, 0.05461299, -0.008707977, 0.047708724, 0.054947454, 0.0043748925, 0.0265659, -0.014895538, 0.013521852, 0.038200427, -0.009789009, -0.00693413, -0.015898926, 0.004431632, -0.015779475, -0.037101477, -0.026255326, -0.020772526, 0.019613853, -0.0006599667, 0.009562052, 0.057384256, -0.039036583, 0.04104336, 0.028142653, 0.041998968, 0.015337507, 0.087247, -0.03017332, -0.011753977, 0.01180773, 0.026661461, 0.052940678, 0.0114015965, -0.008588526, 0.04465078, 0.038295988, 0.0509339, 0.020294722, -0.0180371, 0.007184977, 0.03507081, -0.007143169, -0.0051782005, -0.027521508, -0.032108426, 0.029743295, 0.00630104, -0.003804514, -0.025753632, 0.018276, 0.012339287, -0.0061129043, 0.054947454, 0.06608029, -0.03511859, -0.03987274, -0.026709242, -0.01942273, -0.025801413, -0.0025024982, 0.039251596, -0.017690692, -0.033494055, -0.006641475, -0.05184173, -0.0065459143, -0.011204503, -0.031941194, -0.021047264, -0.022564292, -0.01450135, -0.041282263, -0.015074715, 0.0070356634, -0.01581531, -0.025705853, 0.044125196, -0.0037985414, 0.0013617412, 0.030794464, -0.030770574, 0.013927985, -0.018801585, -0.006940102, -0.008964797, -0.007477632, -0.02056946, 0.023221273, 0.020581406, 0.0019321197, -0.014107162, -0.06760926, -0.032108426, 0.036719233, -0.0030698904, 0.017595131, 0.05074278, 0.061254468, 0.00404043, 0.0050497907, 0.022002872, -0.053848505, 0.028692128, 0.008594499, 0.027617069, 0.015600299, -0.03886935, 0.018586574, -0.033087924, 0.04852099, -0.00901855, 0.028070983, -0.015922816, 0.036671452, -0.023866307, 0.011067134, 0.021118935, 0.0079196, 0.020748636, 0.0047362316, 0.013760754, 0.028644348, -0.0031355885, 0.00046623213, -0.059773274, -0.0026279218, -0.022409005, 0.006330902, -0.017750416, 0.031988975, -0.011544938, 0.00172756, 0.0097770635, -0.020390283, 0.011574801, 0.047732614, -0.03170229, 0.005706771, 0.014656636, 0.027306495, -0.046538103, -0.011556883, -0.010935738, -0.015994487, -0.015206111, 0.002511457, -0.012124275, 0.01883742, 0.008946879, -0.026159767, 0.0034969277, 0.01867019, 0.028429335, 0.0023651295, 0.035715844, 0.027067594, 0.0063966005, -0.016603688, -0.017535405, 0.0277843, -0.020700857, -0.009621778, 0.01754735, -0.006283122, 0.005369322, 0.025825303, -0.013462126, 0.0049094358, 0.018347671, 0.0071371966, -0.028309884, 0.0338763, 0.01515833, 0.017929593, -0.010278758, 0.051316146, 0.012554299, 0.059725493, -0.026828691, 0.041664504, -0.026111986, 0.034808017, -0.0034372022, 0.02164452, -0.035883076, 0.008564636, 0.008331707, -0.0009227589, -0.029265491, 0.0013064952, -0.017559296, -0.029432723, 0.007853903, 0.009842762, -0.013545742, -0.020676967, 0.056237526, -0.00048079022, 0.01150313, -0.012267617, -0.017822087, -0.0037447885, -0.006510079, -0.0019948315, -0.042906795, 0.0018111756, -0.00078837655, 0.017714582, 0.03136783, 0.039609946, -0.02056946, -0.0062233964, -0.03614587, -0.032180097, 0.00029844083, -0.04713536, 0.029695516, 0.051363926, 0.03843933, -0.02783208, 0.026948143, 0.033231266, 0.039227705, 0.026135877, 0.001564808, -0.018455178, -0.009615805, -0.052701775, 0.031463392, -0.007447769, -0.007913628, 0.023507955, 0.03249067, 0.06498134, 0.02649423, 0.0042464826, 0.011753977, 0.0053782808, -0.008355597, -0.08715144, 0.0025876071, -0.03275346, 0.0024621836, 0.029265491, 0.040087752, 0.024750244, -0.04374295, -0.006121863, -0.011306036, -0.010923793, -0.03662367, -0.008033079, -0.05542526, -0.028739909, 0.009024522, 0.009800954, 0.017177053, 0.030507782, -0.024965256, -0.045678057, -0.017595131, 0.029313272, -0.015528629, 0.016747028, 0.023065986, -0.032562338, -0.0052767475, 0.012279562, -0.04226176, -0.010201114, -0.03172618, -0.025658073, 0.00939482, 0.0044614943, 0.014489405, 0.0032520532, 0.023663241, 0.04003997, 0.020330558, -0.03841544, 0.014322174, -0.024403837, 0.021608684, 0.011718142, 0.004270373, -0.013115719, -0.051793948, -0.010248895, -0.01825211, 0.015385287, 0.014513295, 0.0038075002, -0.014835813, 0.01749957, 0.008385459, 0.040111642, -0.025610292, 0.045104694, -0.011556883, -0.04448355, -0.016950095, 0.0034969277, -0.021632574, 0.034282435, 0.029886637, -0.01586309, 0.05786206, -0.0043629473, 0.021572849, -0.025753632, 0.020605296, -0.0050348593, -0.042452883, -0.010971573, 0.04345627, 0.019482456, 0.00069057604, -0.03272957, -0.009072303, -0.023926033, 0.0021381727, -0.013677138, -0.030029979, 0.061158907, 0.07468076, -0.028405445, 0.014919428, -0.019470511, -0.05810096, -0.020748636, 0.023687132, 0.029528284, 0.000896629, -0.0062353415, 0.034258544, 0.000429277, -0.00087049906, 0.013235169, 0.005488773, -0.0016708208, 0.03652811, 0.026207548, 0.027545398, -6.7774436e-06, 0.016902314, 0.00469741, -0.004330098, 0.056285307, -0.038104866, 0.040852237, -0.02764096, -0.01988859, -0.0015812324, -0.03282513, -0.0059158104, 0.02546695, 0.017332338, 0.0045719864, 0.031797852, -0.0053752945, -0.006892322, -0.023018206, 0.033637397, 0.014943318, -0.05451743, 0.007435824, -0.028739909, -0.011252283, -0.025180269, -0.011861484, 0.045391377, 0.035333604, 0.002739907, 0.050121635, -0.006940102, 0.021286165, 0.003849308, -0.020927813, 0.011509103, -0.019649688, -0.022552347, -0.020211108, -0.036838684, -9.5140844e-05, -0.03284902, -0.021931201, 0.014991099, -0.043145698, 0.039036583, -0.01274542, 0.0377704, -0.03946661, -0.019721359, -0.0076926434, 0.013091829, -0.020880032, -0.034569114, 0.0037029807, 0.036982026, 0.030698905, -0.007489577, 0.027139265, 0.050599437, -0.014584966, 0.006032275, 0.0015095619, 0.006880377], [0.02884056, 0.00687363, -0.026369143, 0.031488508, -0.034555715, 0.07131805, -0.045544695, 0.027009062, 0.02919362, 0.02972321, 0.019616878, -0.013052174, -0.0029430832, -0.030274864, 0.0043498054, 0.029480482, -0.03773325, 0.023941858, -0.031311978, 0.006823981, 0.005450358, -0.08120372, -0.061961967, -0.016979963, 0.0029044673, -0.0068901796, -0.008931306, 0.016626904, 0.010387677, 0.0058089346, -0.009433312, 0.028752295, 0.01240122, 0.029701144, 0.010624889, -0.016020082, -0.0018177056, 0.02462591, -0.026479473, -0.0046146, -0.042146496, 0.049119424, 0.02866403, -0.021900732, 0.020720188, -0.005902716, -0.034555715, -0.055253834, 0.001624626, -0.0009784993, -0.011992995, -0.039233755, 0.013736227, -0.03140024, -0.0030837555, -0.008131405, 0.043669067, -0.087382264, 0.039057225, -0.020896718, -0.04084459, 0.015049168, 0.028575765, -0.05931402, -0.022529619, 0.0418155, -0.038637966, -0.021404242, 0.055783425, 0.0350853, -0.014111353, -0.00031909836, -0.038064245, -0.010376643, 0.0129859755, -0.102652095, 0.105035245, -0.014475445, -0.027693117, 0.007673531, 0.010067716, -0.029612878, -0.03265802, -0.026435342, 0.024559712, -0.02533203, 0.0420141, -0.09947456, -0.036210682, -0.00092264416, -0.026457408, -0.020863619, 0.043845594, 0.023434334, -0.062138498, 0.036365144, 0.010525591, 0.04708933, 0.001614972, 0.016748266, -0.023941858, -0.07740833, 0.00014670593, -0.09347254, 0.06527191, 0.028509567, 0.020179566, 0.018601831, -0.038042177, -0.015490492, 0.047354124, -0.019396214, -0.043955926, 0.034312986, -0.023500534, 0.048722234, -0.0026810467, -0.053047214, -0.029326018, 0.016075248, -0.040800456, 0.009256783, 0.060593862, 0.060593862, -0.0054806992, 0.0014005159, 0.004427037, 0.0051938384, 0.020179566, -0.02908329, -0.031157514, 0.057725254, 0.037755318, 0.04428692, 0.04673627, 0.003100305, 0.087823585, -0.020841552, -0.06558083, -0.014188585, -0.023324003, 0.0105476575, 0.016924797, 0.035239767, -0.0023155748, 0.012721181, -0.01004565, -0.02731799, -0.034886707, -0.0049373186, -0.03468811, -0.049384218, -0.013239737, 0.020709155, 0.033606865, -0.01594285, 0.028509567, 0.05066406, -0.02912742, 0.038174573, 0.05300308, -0.046206683, -0.030473461, 0.044022124, 0.017862612, -0.040513594, 0.066242814, -0.019892706, -0.023765327, 0.02246342, -0.0130963065, -0.0036492024, 0.04340427, -0.015347062, -0.004625633, 0.00823622, 0.037799448, -0.034379184, -0.037931845, -0.09550264, -0.020289896, 0.06686067, 0.035416298, -0.020874651, 0.08804425, 0.0686701, 0.004733206, 0.012743247, 0.048413303, -0.05159084, -0.026633937, 0.030098336, 0.0067853653, -0.012511551, -0.021338042, 0.005935815, -0.0028093066, -0.016814467, -0.010437326, 0.003138921, -0.0013701748, -0.023125406, 0.010531107, -0.03241529, 0.003031348, 0.023941858, 0.038991027, 0.011783366, 0.055033173, -0.0072322064, 0.031709168, 0.030561727, 0.0062668086, -0.026280878, 0.0065702195, -0.0068074316, -0.02937015, 0.03184157, -0.05247349, -0.022838546, 0.013780359, 0.02462591, 0.003674027, -0.023412269, -0.0032851098, 0.007910742, 0.009863604, 0.022838546, 0.044948906, 0.06911143, 0.004860087, -0.039299954, -0.039454415, 0.021735234, -0.06721373, -0.029303951, -0.040712193, 0.003417507, 0.011226194, -0.010393194, 0.04258782, 0.04991381, -0.031929832, -0.01140824, 0.03486464, 0.022926811, 0.045059238, 0.019672042, 0.0013798288, -0.0042036166, 0.03234909, -0.03036313, 0.003643686, 0.059755348, 0.004347047, 0.07802618, 0.036806468, -0.009836021, 0.0053731264, 0.023103341, -0.012456385, 0.049472485, 0.01853563, 0.05785765, 0.0066088354, -0.015523591, 0.0047994046, -0.014861605, -0.030870654, 0.014795406, 0.035725225, -0.05119365, 0.054680113, 0.0058696168, 0.03892483, -0.0003699541, 0.04234509, 0.029679077, -0.02504517, 0.03486464, 0.020940851, 0.03391579, 0.035283897, 0.041727237, -0.0046725236, -0.011143445, 0.012191591, -0.030583791, 0.008164505, 0.01144134, -0.018999023, -1.9297175e-05, 0.057416327, -0.002374878, 0.07648154, -0.019969936, 0.015457393, 0.039586812, -0.039961938, -0.0025472702, 0.027979977, -0.033099342, -0.004366355, -0.022275858, 0.00065060897, 0.028730229, 0.042521622, 0.04294088, -0.0036133449, -0.05441532, 0.05891683, 0.015358095, -0.008445849, -0.053223744, 0.0012177799, -0.034467448, 0.008423783, 0.0353501, 0.053267874, -0.03707126, -0.0351515, -0.052782416, -0.07498104, 0.058607902, 0.014320982, 0.01360383, 0.0044132457, -0.027185593, -0.008241736, -0.007287372, -0.006327491, -0.041859634, 0.00528762, 0.015236731, -0.053973995, -0.066904806, -0.015678056, -0.05825484, -0.006338524, -0.008572729, -0.02462591, 0.001515674, -0.061873704, -0.022551686, -0.0030341065, -0.020080268, -0.034246787, 0.01913142, -0.008754776, 0.02820064, 0.0012184696, -0.015280863, 0.05459185, 0.0078004114, 0.0042642984, 0.008826491, 0.002823098, -0.025133435, -0.031929832, 0.046868667, 0.043647, -0.07745246, 0.0058971993, 0.026369143, 0.046383213, -0.010122882, -0.027053196, -0.009499512, 0.005102815, -0.0004151209, -0.048457436, 0.062668085, -0.022452388, -0.03323174, -0.015810452, 0.009262299, 0.042036165, -0.013019075, -0.02919362, 0.021988997, 0.024714176, -0.027229726, -0.01007875, 0.007138425, 0.01257775, 0.009339531, -0.0130963065, -0.03270215, -0.0009674662, 0.008666511, -0.010729703, 0.011110346, -0.029988004, -0.009207134, 0.034114387, 0.017244758, -0.01647244, 0.013173538, 0.019694109, 0.026280878, 0.0058641, -0.014111353, -0.049207687, -0.021933831, 0.026104348, -0.027582785, 0.01140824, -0.0200913, -0.021062214, 0.026633937, -0.023699129, 0.032635953, -0.015446359, 0.016704135, 0.034026124, 0.03490877, -0.0153139625, 0.08332208, -0.026479473, 0.02033403, 0.049384218, -0.0039470964, -0.048280906, 0.032327022, -0.018822493, 0.034070257, -0.017123394, 0.027340056, -0.016704135, 0.019098321, 0.016781367, 0.028818494, -0.0067467494, 0.0037181594, -0.027979977, -0.024603844, -0.0037512588, -0.041969966, -0.0033320005, 0.018789394, 0.025001036, -0.056842603, 0.012588783, 0.002704492, -0.030738255, 0.038306974, -0.11977549, 0.00823622, 0.022231724, -0.022165526, -0.015302929, -0.019969936, -0.066507615, -0.04459585, 0.014883671, 0.0035305966, 0.015534624, -0.00020531936, 0.054371186, -0.075554766, -0.004716656, 0.0071053253, 0.03340827, -0.010360094, 0.032282893, -0.09656181, -0.010635922, 0.048236776, -0.0016866873, 0.038704164, -5.8958205e-05, -0.0038202158, -0.0066474513, 0.021867633, -0.026104348, -0.010332512, -0.024118388, 0.007960392, 0.02288268, -0.009080253, -0.02908329, 0.007811445, -0.00059854647, -0.022904744, 0.011099312, -0.030429328, -0.007485968, 0.009014054, 0.04563296, -0.021922797, -0.021426307, 0.021724202, 0.028266838, -0.004189825, 0.0048766364, -0.052958947, -0.046780404, -0.013206637, -0.0004675282, -0.020113368, 0.025398228, 0.04550056, 0.015501525, 0.025133435, 0.022386188, -0.015722187, -0.025111368, -0.025574759, 0.0553421, -0.054724246, 0.0015073993, -0.006459888, -0.035416298, 0.0026989756, -0.019263817, -0.05856377, 0.0048159542, 0.013129406, 0.01374726, 0.05159084, 0.011893697, -0.046780404, -0.007976942, -0.04775132, -0.00014722311, -0.015291896, 0.02820064, 0.01041526, 0.0384835, -0.027913779, -0.014034121, -0.025067234, -0.046868667, 0.00079783204, 0.03217256, -0.018226704, 0.036210682, 0.0073315045, -0.0070170606, 0.024140453, -0.029988004, 0.0063440404, 0.003731951, -0.0031058216, 0.0011964033, 0.049693145, 0.028178573, -0.008423783, -0.021183578, 0.030208666, -0.0538416, 0.042124428, 0.013405234, 0.039035156, 0.010663505, -0.008506531, -0.03824077, -0.017950876, 0.007596299, 0.02004717, -0.014938837, -0.0064433385, 0.085043244, 0.025133435, -0.032260824, -0.07145045, 0.039917808, 0.0055220737, -0.0013108719, 0.024118388, -0.014718174, 0.056489546, 0.0064654048, 0.0015777353, -0.033452403, 0.06430099, -0.007839028, -0.04205823, -0.04088872, 0.0021128412, -0.03252562, -0.012004028, -0.04324981, -0.043779396, -0.0067908815, 0.005064199, -0.029414281, -0.016957896, -0.013151472, 0.010260796, 0.0024396973, 0.016130412, 0.0039443383, -0.014740241, 0.02912742, 0.005902716, -0.027119394, 0.037931845, 0.015468426, 0.035416298, -0.009720174, -0.01828187, 0.0043718712, 0.007888677, -0.023015076, -0.020201633, 0.0017515068, -0.031488508, 0.056886736, 0.047001068, -0.06090279, 0.037975978, 0.04885463, 0.004057428, 0.009262299, -0.033297937, -0.012544651, 0.022860613, 0.025685089, 0.040712193, 0.038218707, 0.038946893, 0.06160891, -0.043669067, 0.03751259, 0.006939829, 0.018866625, -0.03493084, -0.0129308095, -0.009163002, -0.011761299, -0.006592286, -0.039233755, -0.01983754, 0.02270615, 0.043029144, -0.016880665, 0.016185578, -0.011926796, 0.060946923, 0.016075248, -0.015986983, 0.0062999083, 0.10362301, -0.018337036, -0.026942864, 0.018987989, -0.04481651, 0.020984983, -0.032481488, -0.032304958, -0.0009943594, -0.011496505, 0.06509537, -0.01389069, -0.0066419346, -0.023588797, 0.02054366, -0.019782374, 0.011684068, 0.011115862, -0.0073039215, 0.0056048217, 0.009499512, 0.02561889, -0.031797435, -0.029899739, -0.02275028, -0.029303951, 0.042896748, 0.050972987, -0.060152538, -0.06399206, -0.03674027, -0.00818657, -0.013934823, -0.0027375915, 0.06032907, -0.014111353, -0.018392202, -0.0051221233, -0.06558083, 0.011485471, -0.040535662, -0.0051055737, -0.0031996032, -0.055959955, 0.018337036, 0.00427809, 0.0012963909, -0.012666015, -0.06447752, -0.023522599, 0.022728216, 0.029612878, -0.014883671, -0.0141775515, -0.042521622, 0.052782416, -0.033650998, -0.020014068, -0.037644986, -0.01289771, -0.00010291827, 0.015457393, 0.014894704, 0.009637425, 0.017630916, -0.03749052, -0.028972957, 0.035283897, -0.009780856, 0.019363115, 0.08160091, 0.00293205, 0.027825514, -0.020962916, 0.034643978, -0.058475506, 0.022507552, -0.044772375, -0.013945856, 0.00044994417, -0.025354097, 0.031289913, -0.057636987, 0.05441532, 0.01792881, 0.06897903, -0.019109353, 0.014861605, -0.0014012054, 0.0128204785, -0.014232717, -0.0027403496, 0.003486464, -0.025486493, 0.00078541983, 0.0051138485, 0.00435808, 0.014828505, -0.015810452, -0.055959955, -0.031311978, 0.025839552, -0.048060246, 0.021040149, -0.03627688, -0.0070942924, -0.01442028, -0.0062999083, -0.034886707, 0.0026576014, -0.016693102, 0.027009062, 0.038968958, -0.0006350936, -0.0267884, 0.016340042, -0.019440347, -0.001594285, -0.008197604, -0.013692095, -0.016273843, 0.023390202, -0.016571738, -0.014640942, -0.053223744, -0.006586769, 0.019506546, 0.004998001, 0.064256854, 0.025111368, 0.009400213, -0.0017225449, -0.04108732, -0.0022962668, -0.011452372, -0.055606894, -0.023125406, -0.016549671, -0.014497512, -0.023919791, -0.016538639, 0.03124578, 0.037998047, -0.00078541983, -0.000116795854, 0.020576758, -0.015236731, 0.02051056, 0.03294488, 0.021216678, 0.030407263, 0.06068213, -0.040734258, 0.027693117, -0.016737234, 0.029502546, 0.0151484655, -0.006664001, -0.045081303, -0.043602865, 0.061299983, 0.003337517, -0.0032244276, -0.0051552225, -0.01456371, -0.026016083, 0.04316154, -0.008903723, 0.020863619, -0.031687103, 0.03866003, -0.005792385, -0.01611938, -0.008804425, -0.033628933, -0.031510573, 0.01637314, 0.010161498, -0.06412446, 0.04298501, -0.0009019571, 0.01325077, 0.042631954, -0.01632901, 0.008512047, -0.008649961, 0.017873645, -0.033364136, -0.02004717, -0.0385497, 0.022529619, 0.008832008, 0.0037154013, -0.01696893, 0.05856377, 0.052208696, 0.0027872405, -0.0016797916, -0.008114856, -0.01746542, 0.0060185636, -0.032503553, -0.017741248, -0.038637966, 0.0267884, 0.017917776, 0.012654982, 0.016152479, 0.032680083, 0.04441932, -0.03323174, -0.024008056, -0.020709155, -0.05123778, -0.0036988514, -0.01824877, -0.00071646285, -0.004515302, 0.009510544, 0.035879686, -0.043095343, 0.012809445, 0.0069674114, -0.03281248, -0.02703113, 0.019925805, -0.02327987, -0.02696493, 0.00901957, 0.02220966, 0.04322774, 0.026016083, -0.031201646, 0.027538653, -0.0037291925, -0.022033129, -0.0063992064, 0.011684068, 0.00568757, -0.03135611, -0.031267844, 0.0066033187, -0.00017127185, 0.009118869, 0.0128756445, -0.00823622, 0.015016069, -0.02703113, -1.6700515e-06, 0.043095343, -0.046030153, -0.018965922, 0.0042918813, 0.009990484, -0.0038064243, 0.012158492, 0.016009048, 0.01570012, 0.0009784993, -0.013879658, 0.009554677, 0.011981962, -0.016185578, -0.018844558, -0.004664249, 0.0009026466, -0.011148962, -0.033099342, 0.035416298, 0.03301108, -0.0038891728, 0.02491277, -0.021371141, -0.01225779, 0.0064709214, 0.04550056, -0.041903768, 0.0201244, 0.047133464, 0.044948906, 0.028156508, -0.035129435, 0.019429313, -0.008991988, 0.011016564, 0.01757575, -0.05392986, 0.017145459, 0.014740241, 0.044022124, 0.0015473942, 0.006327491, -0.019021088, 0.004625633, -0.008881656, -0.03892483, -0.019683076, 0.0070280936, 0.054900777, -0.0352177, -0.015214664, 0.025927817, -0.074407324, -0.0056324047, 0.01792881, 0.008721677, 0.002028714, -0.029965937, 0.04545643, -0.026854599, -0.0021087038, -0.003227186, 0.0031720202, 0.0014922287, 0.013791393, -0.008462398, 0.02884056, 0.026280878, -0.0151484655, -0.0067302, 0.014585777, 0.024559712, -0.0031058216, 0.034467448, -0.037225727, 0.007320471, 0.029281884, -0.05048753, -0.010012551, -0.017950876, -0.0034478481, -0.023412269, 0.0066805505, -0.02480244, 0.0014315465, -0.043293938, 0.013681062, 0.00604063, -0.055430364, 0.012533617, 0.008980955, -0.010790385, -0.02784758, -0.015291896, 0.03790978, 0.022187592, 0.016990995, -0.019727208, -0.052296963, 0.02908329, 0.021161513, -0.013703127, -0.0011970929, 0.015821485, 0.011099312, -0.0017253032, 0.00032771798, 0.0014274091, -0.0035499046, -0.049516615, 0.0108234845, -0.032304958, 0.006939829, 0.023522599, 0.02150354, -0.047001068, 0.025001036, 0.0047883717, 0.0062943916, 0.008710643, -0.008815458, 4.6244262e-05, 0.055474497, 0.056621943, -0.018359102, -0.023699129, 0.077496596, 0.006338524, -0.03001007, 0.047707185, 7.03361e-05], [0.0047197, 0.0025306784, -0.030888185, 0.05901893, -0.016883284, 0.0069782627, -0.05181088, -0.010491583, -0.0012849921, 0.046658818, -0.015178024, 0.012075902, 0.03352469, -0.015468281, 0.02791305, 0.0381688, -0.032339472, -0.0129285315, -0.010255748, -0.0050280984, -0.020559873, -0.06361467, -0.05089173, -0.028082367, 0.015456187, -0.021624148, -0.012184748, 0.0035707662, -0.003064328, 0.0026788304, 0.0341052, 0.027937239, 0.02174509, -0.035725802, 0.021696713, 0.0074317893, -0.013835585, 0.035580676, 0.023498725, 0.0008949592, -0.034516398, -0.0188788, 0.01390815, -0.008641194, -0.024030862, -0.029267583, 0.0042873383, 0.0018896942, 0.0072140964, -0.0135211395, -0.027114844, -0.025445865, -0.014791015, -0.015831102, -0.053552423, 0.024962105, 0.066033475, -0.0990744, 0.040974617, -0.04462702, -0.04274035, 0.007637388, 0.06796852, -0.02892895, 0.012360112, 0.018806236, -0.025929628, 0.04600574, 0.025445865, 0.047457024, -0.00095089414, 0.025058856, 0.0671945, 0.032653917, -0.004861805, -0.054374818, 0.07087109, 0.049319506, 0.020813847, 0.0007717511, 0.047940787, -0.022591673, 0.023232656, 0.010818121, 0.045908988, -0.029122455, 0.051520623, -0.107104845, -0.023535008, 0.008858887, -0.007510401, -0.010316218, 0.03386332, -0.002285774, -0.024986293, 0.0144160995, -0.018915083, 0.007032686, 0.018528074, 0.02401877, -0.0052427677, -0.04170026, -0.0917696, -0.04840036, -0.009578482, 0.014186312, 0.028856385, -0.0065852064, -0.016617214, -0.010582288, 0.013702551, -0.031154254, -0.06525946, 0.020620342, -0.037491534, 0.012880156, -0.038967006, -0.04448189, -0.023861546, -0.01920534, -0.07179024, -0.03236366, 0.06129261, 0.012529428, 0.0047045825, 0.025203986, -0.018915083, 0.037370592, 0.014645886, -0.0059835277, -0.06777502, 0.020777566, 0.041482568, 0.032944173, 0.046949074, 0.03703196, 0.067678265, 0.0123843, -0.047577966, 0.004846688, -0.041047182, 0.010624616, -0.025881251, 0.01794756, 0.0065973005, -0.00437502, -0.04128906, -0.012517334, -0.026026381, -0.021430643, 0.009511964, -0.07154836, -0.010721369, 0.007879269, 0.03171058, -0.019011835, -0.01477892, 0.0049857693, -0.008719805, 0.06434031, 0.020293804, -0.062115006, -0.004299432, 0.038604185, 0.0043145497, -0.047940787, 0.0026576659, -0.01244477, -0.07522494, 0.021902312, 0.022978682, 0.007631341, 0.027187409, -0.019616537, -0.015710162, -0.01618183, 0.02129761, -0.008610958, -0.02515561, -0.06356629, -0.024816977, 0.043514367, 0.05877705, -0.009391025, -0.0016326958, 0.062405262, 0.06332441, 0.036330506, 0.025711935, -0.023740606, -0.029074078, 0.024696035, -0.023607573, -0.021902312, -0.0257845, -0.014524945, -0.035580676, -0.026945528, -0.021454832, 0.008308607, 0.0023522913, -0.027961427, 0.011737268, -0.032387845, 0.0046501593, 0.025324926, 0.026752023, 0.04034573, 0.02255539, 0.036209565, 0.059067305, 0.0077341404, 0.0020227288, -0.03601606, -0.003416567, 0.015468281, -0.04840036, 0.0027453478, -0.026993904, -0.049585577, 0.066178605, 0.005312308, 0.017729867, -0.011265601, 0.010437159, 0.032532975, -0.0031111925, -0.018020123, 0.022748895, -0.009681282, -0.01534734, -0.031299382, -0.03964427, 0.027719546, -0.07720837, -0.0040545277, -0.03601606, -0.021914406, 0.022894023, 0.041361626, -0.0038277647, -0.007377366, -0.062211756, -0.019749573, 0.021067822, 0.045231722, -0.0003775609, -0.0063191373, -0.04661044, 0.0068452284, 0.02866288, -0.011271648, 0.00068558106, 0.035798367, 0.003706824, 0.11378076, 0.028275872, -0.016738156, -0.008356984, 0.019737478, -0.038483243, 0.037491534, -0.012348018, 0.024042957, -0.039354015, -0.009560341, 0.013472764, -0.025687747, -0.050069336, 0.02198697, 0.064243555, -0.04992421, 0.024478342, 0.01878205, 0.021769278, 0.02330522, 0.10139646, 0.03753991, -0.0066759116, 0.024103427, 0.022748895, 0.05050472, -0.00077023933, 0.018153159, 0.03700777, 0.0098143155, 0.018032217, -0.057180636, -0.022240944, 0.008713758, -0.017560551, -0.008375125, 0.030670492, -0.0001539156, -0.0056872237, -0.010818121, 0.020680813, 0.019822136, 0.008030444, 0.033621438, -0.007861128, -0.012517334, -0.049053438, -0.058293287, 0.007298755, 0.050746605, -0.033065114, 0.092882246, 0.009282178, -0.034782466, 0.06825878, -0.0029857168, -0.016810719, -0.016980037, 0.03799948, -0.014803109, -0.0017007248, 0.024659753, 0.053794302, -0.020571968, -0.008768181, -0.015770633, -0.09191473, 0.017088883, 0.05195601, 0.006204244, 0.021527397, -0.036378883, -0.028324248, 0.028783822, -0.037951108, -0.021527397, -0.014210501, 0.029751346, -0.021563679, -0.119102135, -0.0084839715, -0.045280095, 0.015298964, -0.011495388, 0.057809524, 0.016617214, -0.010642758, 0.009475683, 0.021370174, -0.030767245, -0.048085913, 0.035193663, 0.03611281, 0.023595478, 0.0014399469, 0.039861966, 0.018564356, 0.027501853, 0.009276131, 0.009929209, 0.0031837567, -0.050843358, 0.021781372, 0.02527655, 0.08369078, -0.050069336, 0.013835585, 0.0751282, 0.009203566, 0.0052941674, -0.01762102, -0.0052367207, 0.0021708808, -0.0028330295, -0.049827456, 0.050214466, 0.022277227, 0.000358475, 0.00031803554, 0.0011481782, 0.036838453, 0.018709484, -0.054761827, 0.016387427, 0.025421679, -0.022325603, -0.026969716, 0.03335537, 0.0059865513, 6.6906987e-06, -0.019277904, -0.005581401, 0.006784758, -0.01914487, 0.0012124279, 0.004405255, -0.0033167913, 0.013472764, 0.038725127, 0.0018609709, -0.01843132, 0.030863997, 0.008647241, 0.010279937, -0.00090629735, 0.012831779, -0.033548877, -0.061969876, 0.034298707, -0.034419645, 0.012456864, -0.007087109, -0.007595059, 0.011616328, -0.033065114, 0.047650527, 0.003374238, 0.01193682, 0.042014707, 0.01636324, 0.0007929157, 0.06356629, -0.010975344, 0.01843132, 0.024841163, -0.029364336, -0.04232915, 0.024248555, -0.07657948, 0.033161867, -0.05635824, 0.012287548, -0.020051923, -0.011072096, -0.00016024607, -0.016459992, -0.0020847106, -0.015250588, -0.031952463, -0.02742929, -0.054132935, -0.012293595, 0.015710162, 0.055148836, 0.012299642, -0.030888185, 0.031976648, 0.011846115, -0.066517234, 0.021757184, -0.06879091, -0.039136324, 0.033016738, -0.020608248, 0.0047106296, -0.010352501, -0.05398781, -0.01977376, 0.06405005, -0.013351823, 0.01788709, 0.036959395, 0.05181088, -0.06250201, -0.00545139, 0.012136372, 0.071596734, -0.007903457, 0.0063251844, 0.021128293, -0.016883284, 0.015383623, 0.012112184, 0.011840068, -0.024841163, -0.006573112, -0.064388685, 0.042304963, -0.020511497, -0.03437127, 0.017221916, -0.019156964, 0.013859773, 0.001717354, -0.0047197, 0.019785855, -0.0032714386, 0.03763666, 0.012553616, -0.024236461, 0.04738446, 0.03427452, 0.09984842, 0.03928145, -0.033065114, 0.035193663, -0.0034014496, -0.021636242, -0.008798416, -0.0105580995, -0.018419227, -0.013811397, 0.032871608, -0.0012955744, 0.011398636, 0.028106555, 0.010140855, 0.037467346, 0.024151804, -0.013835585, -0.010685087, -0.0039063757, 0.0056872237, -0.011459106, 0.035725802, -0.02064453, -0.034056824, 0.028953139, -0.013194601, -0.046344373, -0.028058179, 0.036088623, 0.017161448, 0.026776211, 0.0039396347, -0.04496565, -0.068452284, -0.013412294, -0.036717515, -0.017850807, -0.0007566336, -0.002261586, 0.0074680713, -0.036475632, 5.3005922e-05, 0.00018840251, 0.0051762504, 0.014065372, 0.022265133, -0.02198697, 0.035653237, -0.003960799, 0.014911955, 0.018189441, -0.036838453, 0.028904762, -0.013617893, 0.025203986, -0.015117554, 0.025373302, 0.07014545, -0.022797272, -0.019628631, 0.024647659, -0.031444512, 0.033548877, 0.012577805, 0.030984938, 0.012136372, -0.03371819, -0.040248975, -0.03487922, -0.01169494, -0.051665753, 0.011906586, 0.021261327, 0.085383944, 0.01528687, -0.017717773, -0.061969876, 0.040998805, 0.018757861, -0.019036023, -0.010400877, -0.029340148, 0.043006416, 0.026752023, 0.0010287495, -0.02222885, 0.07686973, -0.025324926, -0.022386074, -0.039716836, -0.023728512, -0.034975972, -0.011827974, -0.029654592, -0.049633954, 0.01845551, 0.03463734, -0.027187409, -0.05660012, -0.046078302, 0.0051188036, -0.009233802, -0.01000782, -0.008864934, -0.006561018, -0.0070992033, -0.0068028993, 0.02716322, 5.560425e-05, -0.0012524893, 0.034927595, -0.009554294, -0.030984938, 0.008774228, 0.014549133, -0.029727157, 0.010793934, 0.019785855, -0.050262842, 0.035580676, 0.0116707515, -0.10149321, -0.005877705, 0.03057374, -0.03357306, -0.0017506127, -0.04203889, 0.021563679, 0.050843358, 0.021442737, 0.033645626, 0.06743638, 0.04438514, 0.0609056, -0.058196533, 0.03814461, 0.0077764695, -0.026752023, -0.00094333536, -0.005412084, 0.0016115312, -0.01593995, -0.02054778, -0.034153577, -0.035096914, 0.008393265, -0.007038733, 0.016532557, 0.012432676, 0.0052185794, 0.026631083, 0.011985197, 0.037346404, -0.0077885636, 0.04711839, -0.022978682, -0.019568162, 0.027259972, 0.0024263673, 0.07527332, -0.020898506, -0.055680975, 0.025228174, -0.016641403, 0.055777725, 0.03475828, -0.016520463, 0.02405505, 0.013279259, -0.0057265293, 0.020584062, -0.029388525, -0.038434867, 0.01477892, 0.035072725, 0.015431998, -0.02312381, -0.016726062, -0.02982391, -0.024720224, 0.021575773, 0.049682327, -0.036064435, -0.043199923, -0.030597929, 0.005841423, -0.022446543, 0.003220039, 0.042087268, -0.028977327, -0.013158319, -0.003930564, -0.0598897, -0.010158996, -0.01979795, 0.0066396296, -0.015637597, -0.03942658, -0.0074499305, -0.027792111, -0.0011005579, 0.010503677, -0.07507982, -0.034322895, 0.0659851, 0.021079917, -0.0029993227, -0.010237607, -0.018262004, -0.010539958, 0.0048497114, 0.013859773, -0.016810719, -0.029388525, -0.020451026, 0.031541266, 0.010570194, 0.013315542, -0.014718451, -0.04687651, -0.034709904, 0.014379817, 0.027380913, 0.04552198, 0.047432836, 0.0055844244, -0.01713726, 0.013436481, 0.025349114, -0.07556358, 0.04196633, -0.0028904763, 0.0041240687, 0.003132357, -0.02844519, 0.033089302, -0.047964975, 0.017415421, 0.006180056, 0.02767117, -0.0031111925, -0.00081861555, -0.055148836, 0.0002621006, -0.0026485955, -0.014996613, 0.010225513, -0.0355323, -0.0012056249, 0.012468958, 0.008592818, 0.038338117, -0.033790756, -0.02994485, -0.020898506, -0.0069298865, -0.037733413, 0.036403067, -0.0041543036, 0.014621698, -0.047819845, -0.03928145, -0.02653433, 0.00064400776, -0.048738994, 0.03108169, 0.051375493, 0.01477892, -0.014754732, -0.01023156, -0.040756926, -0.025034668, 0.010775792, -0.017911278, -0.0085565355, 0.021382269, 0.0073168958, -0.033161867, -0.05045635, 0.0033470264, 0.019725384, 0.03536298, 0.0712581, -0.013690457, 0.009415212, 0.014186312, 0.004438514, 0.021128293, 0.0013114478, -0.050069336, -0.018443415, -0.0031595686, 0.0018488768, -0.015311059, 0.002675807, 0.036620762, 0.040152222, 0.004102904, -0.012964814, -0.0058746813, -0.0013144712, -0.011453059, 0.024236461, 0.049101815, 0.024514625, 0.057035506, -0.025010481, 0.017959654, -0.013932337, 0.031758957, -0.03357306, 0.03398426, -0.05761602, -0.011912632, 0.045836423, 0.01307366, -0.010539958, -0.015819008, -0.045038216, -0.059938077, 0.031033315, 0.0022540272, 0.026316637, 0.009094721, 0.029098267, 0.012323829, -0.0017234011, 0.012245218, -0.008864934, -0.010122714, 0.049343694, -0.024381591, -0.036378883, -0.0049766987, -0.020922694, 0.0134485755, 0.046707194, 0.0119670555, 0.011459106, -0.014742638, 0.013255071, -0.02866288, -0.03601606, -0.02844519, -0.006158891, -0.022470731, 0.035411358, 0.008804463, 0.035048537, 0.02539749, 0.025300737, -0.036959395, -0.028953139, -0.00014408918, 0.019640725, -0.042498466, 0.014295159, -0.019616537, -0.025881251, 0.0096691875, 0.038942818, 0.042256586, 0.020813847, 0.04196633, -0.037056148, -0.024913728, -0.015625503, -0.050069336, -0.01197915, -0.025010481, 0.03574999, 0.01843132, 0.013037378, 0.038773503, -0.054810204, -0.022458637, -0.0010083409, -0.024296932, -0.054519944, -0.014295159, -0.03260554, -0.0033954026, -0.039499145, 0.0019033, 0.05761602, 0.0003862535, -0.02219257, -0.0045957365, 0.012245218, 0.0017974771, -0.019423032, 0.0051762504, -0.010328312, -0.04532847, -0.013726738, 0.014827296, -0.024550907, 0.025590995, -0.022361886, 0.0050401925, -0.008701663, -0.00085640943, -0.018600637, 0.024514625, -0.021890217, 0.016822813, 0.012456864, 0.013726738, 0.014670074, -0.008042539, 0.014512852, 0.00931846, 0.017403327, 0.011398636, -0.022579579, 0.036088623, -0.036838453, 0.017717773, 0.012057761, 0.0020771518, -0.02141855, -0.043877188, 0.030307671, 0.036137, -0.040224787, 0.013992808, 0.0022222805, -0.013436481, -0.0071052504, 0.02166043, -0.041530944, 0.017076788, 0.036403067, 0.022434449, 0.020366369, -0.022652142, -0.0024641613, -0.02617151, 0.014319347, 0.004979722, -0.04034573, 0.0027967475, 0.015395717, 0.017028412, 0.007546683, -0.018854612, -0.032871608, 0.004311526, 0.0066154413, -0.01788709, -0.00868957, 0.06114748, 0.07807914, -0.014246782, -0.036161188, 0.03236366, -0.048376173, -0.0023689207, 0.028058179, 0.028904762, -0.0061074914, -0.005868634, 0.026872963, -0.04573967, -0.0033167913, -0.02255539, -0.005678153, 0.005814211, 0.019181153, 0.011507482, 0.01648418, 0.014549133, -0.033645626, 0.012601993, 0.005974457, 0.024514625, 0.007764376, 0.023317315, -0.039015383, -0.011362353, 0.023450349, -0.036596574, -0.02868707, -0.0011708545, 0.0011330607, 0.032557163, 0.011622375, 0.003942658, 0.009082627, -0.04992421, 0.0049706516, 0.007026639, -0.06027671, -0.049319506, 0.020813847, 0.024429966, -0.030380236, -0.024042957, 0.05621311, 0.012329876, -0.013859773, 0.031758957, -0.05253652, -0.022785177, 0.012735027, -0.0123843, -0.006996404, 0.01459751, 0.021684619, -0.00089873857, -0.044119067, -0.034395456, -0.02312381, -0.05229464, -0.00082012726, -0.031105878, 0.044167444, -0.012553616, 0.009451495, -0.038459055, -0.012505241, -0.008641194, 0.013122036, 0.00631309, -0.011096285, 0.010612522, 0.0237527, 0.0190844, 0.010842309, 0.0038731173, 0.086254716, 0.023909923, -0.03246041, 0.022325603, 0.020451026], [0.029022938, 0.020186279, -0.026922904, 0.018015457, 0.022958795, 0.025884684, -0.03256232, 0.031429715, 0.003456797, 0.07706416, 0.006046445, -0.0033211205, -0.016941844, -0.021920577, 0.0006640029, -0.0040850374, -0.02109472, 0.005978607, -0.050919916, -0.01576205, -0.03588934, -0.06068861, -0.039664682, -0.003250333, 0.020386843, -0.009792292, 0.009255486, 0.0028757483, 0.020457631, 0.010865904, 0.029966772, 0.041693926, 0.031783655, 0.01042938, 0.003560029, -0.030910607, -0.009497344, 0.052807588, 0.016635098, -0.0036160692, -0.04480858, 0.030485881, 0.034379203, -0.07305285, -0.013520441, -0.0070197755, 0.021425063, -0.03890961, 0.018369395, -0.019183453, -0.0043711374, 0.0055627297, 0.006300101, -0.012016204, -0.03565338, -0.013178301, 0.072203405, 0.006441676, 0.080037236, -0.01576205, -0.013555835, 0.019372221, 0.016245766, -0.015856434, 0.006913594, -0.0073855114, 0.017272187, 0.009296779, 0.04879629, 0.021460457, -0.02911732, -0.008447327, -0.037116326, -0.01846378, -0.0016089443, -0.08192491, 0.048890673, 0.045445673, 0.03909838, 0.016753078, 0.029329684, -0.024516122, 0.021401467, -0.044289473, 0.03638485, -0.023973418, 0.014971588, -0.10174545, -0.062057175, 0.020198077, -0.018735131, 0.022427887, 0.050683957, 0.017472751, -0.04282653, 0.028975746, 0.03336458, 0.007297027, -0.012199072, 0.013237291, -0.024374548, -0.03199602, -0.06484149, -0.03761184, 0.05988635, 0.021130113, 0.044832177, 0.025648726, -0.011626871, -0.011272933, 0.012128284, -0.009332172, -0.037281495, 0.011969012, -0.02734763, 0.049032245, -0.009821787, -0.06399204, -0.028904958, -0.011426306, -0.056960464, 0.017838487, 0.074043885, 0.009798191, -0.021649223, 0.031594887, -0.026380198, 0.06375608, 0.019372221, -0.008099287, -0.0101993205, 0.031476907, 0.033789307, 0.03225557, 0.058895327, 0.022616655, 0.06753142, -0.019171655, -0.0257903, 0.0069843815, -0.04780526, -0.0042974004, -0.028975746, 0.022109343, -0.016127786, 0.019336827, -0.00900183, 0.014228318, -0.029140916, -0.012942342, -0.011479397, -0.043982726, -0.0063590906, -0.0061172326, 0.00355413, -0.018546365, 0.0050819633, 0.00934397, -0.0051439027, 0.062245943, 0.013614825, -0.075648405, 0.02843304, 0.025129616, 0.01674128, -0.027654376, 0.036266875, -0.027324034, -0.035464615, 0.029801602, 0.01696544, -0.006002203, 0.04664906, -0.0047840653, 0.0034951402, -0.024350952, 0.042614166, 0.031004991, -0.017378367, -0.063189775, -0.036101703, 0.06517183, 0.014747427, -0.0060140006, 0.05261882, 0.05554471, 0.039688278, 0.033671327, 0.06611566, -0.032019615, -0.033553347, 0.0054830937, -0.010323199, -0.0008265933, -0.030084752, -0.012258061, -0.019301433, 0.0032945753, -0.021908779, -0.024327356, 0.011337822, -0.033081427, 0.03994783, 0.011467599, 0.006441676, 0.02103573, 0.07314724, -0.019053675, 0.0183458, 0.019277837, 0.022132939, 0.041245606, -0.009019527, -0.057054847, -0.012788969, 0.022604857, -0.05828183, 0.018664343, -0.017779497, -0.025837492, 0.036880367, -0.038720846, 0.030367902, 0.009969261, -0.024280164, 0.042307418, 0.025884684, 0.033199407, 0.044784985, 0.054270532, 0.0021575487, -0.043935534, -0.029707218, 0.027607184, -0.07229779, -0.020964943, -0.037871394, -0.047781665, 0.03817814, -0.001765267, 0.033199407, 0.02384364, -0.021531243, 0.0053267707, 0.027890334, 0.022604857, 0.008618397, -0.015750252, -0.024327356, 0.03520506, -0.01381539, 0.013945167, 0.008612498, 0.05478964, -0.019018283, 0.049504165, 0.056205396, -0.01822782, 0.0050052768, 0.02630941, -0.012128284, 0.041929886, -0.011225741, 0.045540057, -0.020563813, 0.02642739, 0.012435031, -0.05125026, -0.02298239, -0.028786978, 0.021401467, -0.040514134, 0.041174818, 0.023737459, 0.015561486, -0.008323448, 0.038484886, 0.038744442, -0.016753078, 0.06087738, 0.0038254827, 0.050306424, 0.0031500505, 0.07102361, -0.025459958, 0.0076627634, 0.037753414, -0.06451114, 0.017460953, 0.037800606, -0.03525225, 0.0036367155, 0.06064142, -0.0005331195, 0.05927286, -0.04608276, 0.020764377, -0.0025807999, -0.019006485, 0.02378465, 0.022380695, -0.016127786, -0.048300773, -0.04228382, 0.013744602, 0.031004991, 0.0057573956, 0.09825326, -0.01610419, -0.050636765, 0.07956532, 0.006659938, -0.008465024, -0.04997608, 0.0098748775, -0.00036370842, 0.010966187, 0.019619977, 0.07607313, -0.01880592, -0.004568753, -0.053609848, -0.09721504, 0.06908875, 0.02442174, -0.0014806417, 0.012777171, -0.04832437, -0.019832341, 0.027607184, -0.040207386, -0.023005987, -0.0014577832, 0.012541212, -0.020245269, -0.10401066, -0.038838826, -0.01083051, 0.008529912, -0.0100164525, -0.01427551, 0.044289473, -0.041009646, -0.02814989, 0.017980063, -0.04259057, -0.008889749, -0.00043910465, 0.005760345, -0.00075801776, 0.001306622, 0.008571205, 0.03914557, -0.010470673, 0.005816385, -0.019879531, -0.022097545, -0.014358095, -0.0023433662, 0.03284547, 0.051910944, -0.06531341, -0.0001867393, 0.068475254, 0.012965938, 0.015408112, -0.0059815566, -0.002946536, -0.0002853627, -0.012399637, -0.013603027, 0.05743238, 0.009568131, -0.04712098, -0.060216695, 0.00470148, 0.052241288, -0.019513795, -0.049551357, 0.017744105, -0.021023933, 0.0011149055, 0.0074504004, 0.034709543, 0.032184787, 0.00756838, -0.038933206, -0.003365363, -0.0015927221, -0.020186279, 0.0030055256, 0.031288143, 0.013390664, -0.019655371, 0.011337822, 0.0332466, -0.020375045, 0.014322701, 0.021979565, 0.0101875225, -0.0229234, 0.033105023, -0.04167033, -0.021967767, 0.025601534, -0.042118654, 0.02791393, -0.0036013217, -0.030462286, 0.04379396, -0.061443683, 0.031170161, -0.043699577, 0.029258896, 0.026380198, 0.0026088199, 0.031618483, 0.01060045, -0.012039799, -0.008010803, -0.0030011015, -0.006317798, -0.040514134, 0.015868232, -0.04764009, 0.036762387, -0.0025409816, 0.014747427, -0.008264458, -0.015360921, 0.018723333, 0.015549688, 0.018723333, -0.0051969932, 0.008706881, -0.05875375, -0.0059520616, 0.0065596555, -0.020540217, 0.050589573, 0.013260887, -0.022569463, -0.0033712618, 0.014110338, -0.07423265, -0.019006485, -0.094525106, 0.011992608, 0.06394485, -0.017803093, 0.0011901173, -0.04620074, -0.06139649, -0.006854604, 0.05582786, 0.0074268044, 0.012328849, 0.019065473, 0.04351081, -0.08470922, -0.011455801, 0.021248093, 0.055591904, -0.016776673, 0.039428722, -0.03742307, -0.0030173236, 0.026403794, 0.013709208, 0.0579043, -0.0010367441, 0.028574616, -0.03657362, 0.045209713, -0.005978607, -0.00883076, -0.020493025, 0.0349691, 0.033270195, -0.00266486, -0.05766834, 0.019112665, -0.017272187, 0.06625724, 0.02498804, -0.027040882, 0.022569463, -0.0025498301, 0.067106694, 0.02229811, -0.00042067037, 0.023831842, -0.0043652384, -0.026899308, -0.008187772, -0.0065360595, -0.028904958, -0.023182957, -0.043227658, -0.02326554, 0.012918746, 0.036196087, 0.058376215, -0.0010301078, 0.033576943, 0.018640747, -0.019619977, -0.014440681, 0.007733551, -0.01766152, -0.010712531, -0.013721006, -0.032397147, 0.020056501, -0.0076332684, -0.011715356, -0.022746433, 0.033034235, -0.02280542, 0.035794955, -0.0018670243, -0.05549752, -0.02390263, -0.028456636, -0.011036974, 0.009184698, 0.03187804, 0.004099785, 0.015667668, 0.00065994734, 0.01209289, -0.02304138, -0.026403794, 0.0025837494, 0.015207547, -0.02619143, 0.026521774, 0.014582256, 0.004483218, 0.016092394, -0.045563653, 0.026333006, -0.008665589, 0.013579431, -0.00086641137, 0.061632447, 0.048112005, -0.027206054, 0.008535811, 0.035983723, -0.06092457, 0.055214368, 0.022345303, -0.009520939, -0.015254739, -0.00447142, -0.04110403, -0.047003, -0.009621222, -0.0063826866, -0.028055506, 0.019867733, 0.07116518, -0.002287326, -0.015313729, -0.046672657, 0.04308608, 0.015231143, -0.0021590234, 0.0049167923, 0.010311401, 0.034591567, 0.0063885855, -0.008282155, -0.013968763, 0.0636145, -0.01289515, -0.04263776, -0.023926226, -0.011444003, -0.023772852, -0.009721504, -0.023407117, -0.04308608, 0.030580265, 0.0017991861, -0.029683622, -0.031665675, -0.050495192, -0.00043136225, -0.010511966, 0.028456636, -0.05040081, -0.014145732, -0.008305751, 0.0072439364, 0.025247596, 0.0022312857, 0.003919866, 0.04511533, -0.04860752, -0.028975746, 0.010777419, 0.029825198, 0.0017844387, 0.005887173, 0.018605353, -0.054081764, 0.024445336, 0.037446667, -0.09377004, 0.011013378, 0.045752417, 0.01593902, 0.021861587, -0.007521188, 0.0015425809, 0.04660187, 0.006294202, 0.040325366, 0.021731809, 0.011390913, 0.056960464, -0.020646399, 0.041198414, 0.033317387, 0.010441178, 0.0046011973, -0.02418578, -0.006701231, -0.005707254, -0.009408859, -0.034237627, -0.02550715, 0.02963643, -0.021448659, 0.0008730477, 0.045587245, -0.0020572662, 0.020764377, 0.03680958, 0.01415753, 0.016057, 0.114109695, -0.031099375, 0.007550683, 0.017980063, -0.017496347, 0.083199084, -0.024374548, -0.0043947333, 0.027536396, 0.021849789, 0.068239294, 0.025318382, -0.0034980897, -0.027253246, 0.038956802, -0.031665675, 0.010842308, 0.009149304, -0.009591727, 0.02602626, 0.0025970219, 0.022026757, 0.013131109, 0.013485047, -0.0020616904, -0.008506316, 0.053562656, 0.08334066, -0.06724827, -0.05200533, -0.03501629, -0.0050082263, -0.036998346, -0.0098925745, 0.053751424, -0.020457631, -0.042850126, -0.012824363, -0.062387515, -0.0021708212, -0.020611005, 0.025766704, -0.01129063, -0.019938521, 0.02510602, -0.044950157, -0.020599207, 0.006701231, -0.04712098, -0.04579961, 0.042213038, 0.043038893, 0.03220838, 0.01995032, -0.03822533, 0.0029907783, 0.003365363, -0.016269362, -0.02711167, 0.014015955, -0.01077152, 0.009585828, 0.02412679, -0.006105435, -0.00087673456, -0.037116326, -0.06786176, 0.026450986, -0.002041044, 0.025695918, 0.04615355, 0.01812164, 0.019726159, 0.008453226, 0.022829017, -0.032184787, 0.05120307, 0.029966772, 0.036880367, 0.0054712957, -0.04516252, 0.007291128, -0.05611101, 0.03192523, 0.009774595, 0.0584706, -0.01772051, 0.019230645, -0.040938858, -0.013933369, -0.001441561, -0.02619143, -0.0044743693, 0.010470673, -0.0017800145, 0.007721753, -0.011856931, 0.007149553, -0.022876209, -0.057290804, -0.06323697, 0.031547695, -0.017637923, 0.015608677, -0.0039877044, -0.021967767, -0.022770029, -0.01117855, -0.015585081, -0.012399637, -0.037871394, -0.0037340487, 0.030249923, -0.0021029832, -0.032751087, -0.0030645153, -0.03180725, 0.0103703905, -0.0007934116, 0.022227323, -0.0098925745, 0.025365574, -0.018876707, 0.008665589, -0.026356602, 0.025554342, 0.011031075, 0.03204321, 0.06842806, 0.027654376, -0.0005298013, 0.018782323, -0.045776013, 0.03673879, 0.015207547, -0.05394019, 0.010606349, -0.015679464, -0.0030055256, -0.012706383, -0.006913594, 0.03272749, 0.035606187, -0.021802597, -0.010665339, 0.012847959, 0.009680212, 0.021189103, 0.0066009485, -0.00087083556, 0.028385848, 0.06460553, -0.04294451, 0.026734136, -0.004427178, 0.032231975, -0.0005025186, -0.02803191, -0.046295125, 0.0015779748, 0.059178475, -0.00733832, -0.03187804, -0.0048872973, 0.003335868, -0.030131944, 0.023808246, 0.009509142, -0.021425063, -0.01828681, 0.02446893, -0.03305783, 0.021071125, 0.013249089, -0.0063590906, -0.03489831, -0.02069359, -0.02332453, -0.050259233, 0.043038893, -0.008665589, 0.011591478, 0.051297452, 0.022144737, -0.020375045, -0.03376571, 0.03456797, -0.052099712, -0.014853609, -0.022333505, 0.0035629785, 0.0044743693, 0.041198414, 0.0032886763, 0.07767765, 0.020103693, 0.064369574, -0.0008420781, -0.011491195, 0.0060140006, 0.0022548817, -0.04917382, 0.020587409, -0.032515127, 0.011320125, -0.017637923, 0.025601534, 0.029612834, 0.03336458, 0.01255301, -0.04155235, -0.027371226, -0.006718928, -0.06970224, 0.0030615658, -0.0013213694, 0.014499671, 0.010464774, -0.024752082, 0.0052795787, -0.030698245, 0.031712867, 0.014251914, -0.04075009, -0.04992889, 0.031217353, -0.026663348, -0.02895215, -0.021425063, 0.019808745, 0.030131944, -0.0055096387, -0.018251415, -0.0010957338, -0.0024436486, -0.000865674, -0.0014533589, 0.0030070003, -0.002281427, -0.028338656, -0.029046534, -0.020705387, -0.015313729, -0.007291128, 0.0010824612, -0.0025601534, 0.01198081, -0.03291626, -0.0015160355, 0.026215026, -0.022380695, 0.0027209003, 0.0027931628, 0.0015175103, -0.006070041, -0.027465608, 0.027135266, 0.016729482, 0.009355768, -0.0034803927, -0.029211704, 0.009137506, -0.026333006, -0.0025984966, -0.034072455, -0.012989534, 0.0100459475, -0.025318382, 0.0035010392, 0.02378465, -0.005736749, 0.003111707, -0.031264547, -0.0049787313, -0.017673317, 0.017779497, -0.053468272, 0.024634102, 0.027866738, -0.00378419, 0.035417423, -0.020811569, 0.013768198, -0.025766704, 0.023879034, 0.015644072, -0.033742115, -0.004421279, 0.021755405, 0.011373216, -0.00750939, 0.039853446, -0.0022740532, 0.023182957, 0.017036228, -0.02206215, -0.04792324, 0.033105023, 0.105803944, -0.038720846, -0.0026751834, -0.008948739, -0.0831047, -0.013284482, 0.040254578, 0.029801602, 0.03433201, -0.004105684, 0.030367902, -0.0014629448, 0.0099220695, -0.009456051, -0.0055450327, 0.009520939, 0.02711167, 0.0054300027, -0.0031854443, 0.04063211, -0.007090563, 0.011738952, 0.0073973094, 0.036785983, 0.021885183, 0.024256568, -0.02510602, 0.014240116, 0.031052183, -0.03548821, -0.00020941347, 0.006642241, 0.015183951, 0.022345303, 0.014936195, -0.0028904958, 0.0212009, -0.053279504, 0.011892325, 0.0018109841, -0.05233567, -0.039759062, -0.015561486, -0.026403794, -0.025058828, -0.01295414, 0.023477904, 0.027300438, -0.019844139, -0.008836659, -0.0590369, 0.03296345, 0.035346635, -0.035842147, -0.0052766297, 0.0019732057, 0.0049433378, 0.029589238, -0.004907944, 0.0073855114, 0.024398144, -0.07390231, 0.008376539, -0.038272522, 0.029211704, -0.0072439364, 0.0071731484, -0.019501997, 0.014322701, -0.017283985, 0.008860255, -0.02206215, -0.010618147, 0.022569463, 0.034662355, 0.033105023, -0.004008351, 0.032633107, 0.023713863, 0.011072368, -0.018593557, 0.039877042, 0.02085876], [0.008823103, 0.038670234, -0.024762927, 0.0137209445, 0.0049327845, 0.044447474, -0.04754575, 0.02056977, -0.002674594, 0.0498054, -0.028699836, 0.018962393, 0.00025479257, -0.045798603, 0.010459599, 0.03081971, -0.0071225446, 0.0028740603, -0.027302116, -0.02081437, 0.003508858, -0.081766576, -0.043236118, -0.01254453, -0.0038408162, -0.012765836, -0.0071225446, 0.009079352, 0.0051599136, 0.008898813, 0.03650377, 0.031262323, 0.025182243, -0.0016685274, 0.0072914357, -0.009504491, -0.044540655, 0.05423151, 0.0040737693, 0.018647905, -0.06541327, 0.015316674, 0.015805876, -0.029189037, -0.017797627, 0.0042077173, 0.040114544, -0.017215243, 0.0074486793, -0.046450872, -0.017937398, -0.008019415, 0.010628491, -0.0032060186, -0.043538958, 0.0016627036, 0.04794177, 0.008153362, 0.07100414, -0.008100948, -0.037132744, 0.01757632, 0.0073030833, -0.031029368, -0.039206028, 0.019964091, 0.0004873818, 0.005124971, 0.04023102, 0.04447077, -0.014233441, -0.0002851857, 0.021117209, -0.019381708, 0.01623684, -0.053346287, 0.07426549, 0.03331231, 0.03389469, 0.0080601815, 0.07883137, -0.029165743, 0.048920177, -0.020942494, 0.046730414, -0.020721188, 0.04850086, -0.11656979, -0.06163942, 0.012439702, -0.022852711, -0.009190004, 0.0587508, 0.0060043694, -0.012824074, 0.020826017, -0.007209902, 0.011379764, -0.013837421, 0.012474645, -0.03042369, -0.0413259, -0.057679217, -0.05143607, 0.035269115, 0.02151323, 0.024017477, 0.01379083, 0.003741811, -0.02464645, 0.00047100228, -0.0012805148, -0.022328565, -0.00078476116, -0.032683335, 0.021967487, -0.054883778, -0.085866556, -0.01897404, -0.019346764, -0.08325748, -0.0065459856, 0.07053823, -0.010180055, 0.007897114, 0.009545258, 0.0066158716, 0.110606186, 0.0029133712, 0.0059927213, -0.043538958, 0.019043926, 0.010477071, 0.032776516, 0.076362066, 0.020942494, 0.063409865, -0.0028332935, -0.040999766, -0.024832813, -0.05651445, 5.2414474e-05, -0.021536525, 0.007204078, -0.024460088, -0.028257225, 0.0031361326, -0.0118980855, -0.06816211, -0.022701291, -0.010843973, -0.029911192, -0.02464645, 0.014804177, 0.056374677, -0.006697405, 0.026370304, -0.013022085, 0.0066333427, 0.040906586, 0.021256981, -0.06345645, -0.011938852, 0.051482663, 0.017017232, -0.030982777, 0.019789375, -0.017855864, -0.057446264, 0.029305514, 0.012125215, 0.0043766084, 0.009789859, -0.014210146, -0.020639654, -0.009492843, 0.05138948, -0.007140016, -0.00501723, -0.029841308, -0.025508378, 0.05949625, 0.018275179, -0.029887898, 0.0070293634, 0.038087852, 0.04775541, 0.0054860483, 0.05199516, -0.042653736, -0.04689348, 0.023831114, -0.009405486, 0.016551325, -0.027162345, -0.009690854, -0.0016961906, -0.032706633, -0.026160646, -0.003092454, 0.011531184, -0.042956572, 0.048314497, 0.019859262, 0.03047028, 0.0071283686, 0.06839506, 0.016586268, -0.028000977, 0.059868976, 0.0051657376, 0.0025639413, 0.018333418, -0.044237815, -0.037715126, 0.048873585, -0.04661394, 0.018578019, -0.028746426, -0.018275179, 0.044191226, -0.031262323, 0.0156078655, -0.0030749824, -0.021874307, 0.01752973, 0.014617815, 0.0039864117, 0.025112357, 0.037715126, -0.01394225, -0.048920177, -0.033079356, 0.03207766, -0.08633246, -0.0074312077, -0.048826993, -0.02345839, -0.015817523, 0.001544771, 0.019835966, 0.018228589, -0.03545548, -0.006755643, 0.031937886, 0.016924052, 0.014512985, -0.005223976, -0.013732592, 0.042653736, -0.037878193, 0.007110897, 0.015246788, 0.03869353, -0.031937886, 0.06816211, 0.050224714, -0.0067265243, 0.0007257949, 0.03147198, 0.001133463, 0.030330509, -0.001987382, 0.0722155, 0.0044843494, 0.005177385, 0.0007651057, -0.036037862, -0.05162243, -0.017401606, 0.004991023, -0.043306004, 0.009184181, 0.032147545, 0.054604232, 0.022666348, 0.07016551, 0.021781126, -0.024087362, 0.044330996, -0.0012572194, 0.04652076, 0.0020354288, 0.059076935, -0.016446497, 0.025718035, 0.05721331, -0.08558701, -0.019474888, 0.031868, -0.021443343, 0.0054860483, 0.053951964, -0.02534531, 0.007174959, -0.026253827, 0.01152536, 0.0064062136, -0.028886199, 0.02753507, 0.00025843247, 0.0028405732, -0.04661394, -0.014175204, 0.003578744, 0.03904296, -0.0236564, 0.075150706, -0.040021364, -0.06415532, 0.072914355, 0.03594468, 0.0014952684, -0.020336816, 0.0052996855, 0.008339725, 0.0174249, 0.032729927, 0.073706396, -0.009982046, -0.008817279, -0.049013358, -0.126447, 0.041186128, -0.01603883, 0.0054714885, 0.029957784, -0.030074261, -0.0017587967, 0.03908955, -0.07156323, -0.01628343, -0.009079352, 0.003881583, -0.019428298, -0.08973358, -0.03729581, -0.06746325, -0.007687456, -0.020604713, 0.01882262, 0.007699104, -0.02041835, 0.0060043694, 0.015770933, -0.030120851, -0.044494063, 0.009026937, 0.032543566, -0.008922108, 0.0013212815, 0.021105561, 0.0065867524, -0.013977193, 0.008182482, -0.0057801516, 0.00699442, -0.06923369, 0.010319827, 0.018694496, 0.07426549, -0.046171326, -0.02902597, 0.0861461, 0.021920897, 0.036177635, 0.008281487, 0.03191459, -0.001063577, -0.023132253, -0.03081971, 0.045845192, -0.0038844948, -0.018426599, -0.06238487, -0.0024867756, 0.045379285, -0.022188794, -0.049339492, 0.014990539, -0.0022567343, -0.01573599, -0.010145113, 0.0022873094, 0.0070992494, 0.02779132, 0.0006693765, -0.0046998314, -0.0035292413, -0.016050477, -0.0025624854, 0.035688434, 0.040394086, -0.022398451, 0.035175934, 0.015072073, -0.022654701, 0.03291629, 0.0019961179, 0.01093133, -0.009329776, 0.02206067, -0.041605443, -0.03699297, 0.022049023, -0.045379285, 0.009446253, 0.0055792294, -0.020628007, 0.062012147, -0.051482663, 0.0009587481, -0.016621212, 0.044261113, 0.019032277, -0.004158215, 0.019253584, 0.026743028, 0.0009332688, -0.014454747, 0.024529973, -0.028862903, -0.014361566, 0.018612962, -0.07393935, 0.023388503, -0.025461787, 0.027302116, -0.0021024027, -0.014699348, -0.008520264, -0.0053753955, 0.016958995, 0.000119297525, -0.0018272268, -0.026160646, -0.0114671225, 0.0039776764, -0.009516139, 0.022386804, 0.021117209, -0.017215243, 0.04111624, 0.03081971, -0.08120749, 0.015817523, -0.06699734, 0.0066391667, 0.011717547, -0.0040300908, 0.0025406461, -0.01807717, -0.08740405, -0.040673632, 0.02967824, 0.022852711, 0.03217084, 0.037994668, 0.07752683, -0.07151664, -0.0035962153, 0.02967824, 0.032427087, 0.0031041016, 0.03161175, -0.004501821, -0.028653245, 0.036923084, 0.014349918, 0.033848103, -0.0066333427, 0.011997091, 0.0013336572, 0.04451736, -0.025624854, -0.024739632, -0.0031768994, 0.036736723, 0.041349195, 0.037715126, -0.020499883, 0.011111869, 0.009941279, 0.08349043, 0.014419804, -0.02006892, 0.048314497, 0.02494929, 0.07477798, 0.023388503, -0.03147198, 0.014128612, -0.02221209, -0.0003672653, 0.0021111385, -0.002954138, -0.031868, -0.023609808, -0.053905375, -0.042746916, 0.017017232, 0.057632625, 0.054045144, -0.0015040042, 0.003505946, 0.009620968, -0.0037709302, -0.033778217, 0.03729581, 0.00020165012, 0.00799612, -0.0016699834, -0.037365697, -0.009475372, 0.0036224225, -0.013429753, -0.0073554977, 0.045891784, -0.010756615, 0.016318373, -0.011385588, -0.02215385, -0.042257715, -0.02683621, -0.038856596, -0.0022247033, 0.0007010436, -0.010366418, -0.012742541, 0.007623394, 0.038460575, -0.024343612, -0.018508133, 0.0024314492, 0.023237083, 0.010057755, 0.014862415, 0.015409855, 0.009743269, 0.005815095, -0.02494929, 0.034896392, 0.012765836, 0.012928903, -0.006423685, 0.02793109, 0.05288038, -0.015363265, -0.019405004, 0.021058971, -0.015934, 0.044284407, -0.0012353801, 0.006080079, 0.024739632, 0.00040038835, -0.049339492, -0.046567347, -0.02155982, -0.0413259, -0.014210146, 0.010989568, 0.07277458, 0.0054045147, 0.0021256981, -0.059263296, -0.0067964103, 0.0055442867, -0.016108714, -0.010214998, 0.0005179569, 0.02902597, 0.004673624, -0.011653485, -0.010005341, 0.057492852, -0.020348463, -0.05847126, -0.025298718, -0.021396752, -0.030586757, -0.046380986, 0.006755643, -0.03217084, 0.021280276, 0.007530213, -0.037458878, -0.058890574, -0.0413259, -0.020103863, 0.01339481, 0.04372532, -0.006837177, -0.035339, 0.006965301, -0.015130311, 0.0035816557, 0.020546474, 0.0022552784, 0.03680661, 0.0020063096, -0.079064324, 0.017436549, 0.004659064, -0.008357197, -0.009265714, 0.018286828, -0.057679217, 0.047522455, 0.020173749, -0.09933125, 0.00041385595, 0.01179908, 0.012171806, 0.0012310122, -0.011595246, -0.008217425, 0.059170116, 0.025531672, 0.040953174, 0.06266441, -0.008438731, 0.047615636, -0.029072562, 0.035735022, 0.00253919, 0.013499639, 0.004909489, -0.0054219863, 0.02245669, 0.00583839, -0.0021329778, -0.057492852, -0.00874157, 0.017168652, -0.041256014, 0.0046794475, 0.017983988, -0.006732348, 0.0343606, 0.03948557, 0.01702888, -0.0045600594, 0.09066539, -0.028793018, -0.027348708, 0.02793109, -0.016306724, 0.077014334, -0.0007833052, -0.036480475, 0.017855864, 0.0076816324, 0.06704394, 0.021583116, 0.011880614, -0.025648149, 0.0358515, -0.0069187107, -0.002575589, -0.017785978, -0.037715126, 0.0063246796, 0.0076408656, 0.007530213, -0.010814853, 0.00501723, -0.017459843, -0.041162834, 0.01956807, 0.05651445, -0.04661394, -0.027372003, -0.05269402, 0.0035641843, -0.030097555, -0.008922108, 0.02464645, -0.021024028, -0.03431401, -0.006481923, -0.04766223, -0.00020019418, -0.01588741, 0.010319827, -0.029818011, -0.032380495, 0.031402092, -0.024856107, -0.0186712, -0.0049589914, -0.06434168, -0.021932546, 0.0199175, 0.04188499, -0.0025144387, 0.032823108, -0.023796171, 0.010180055, -0.0078330515, -0.01652803, -0.05502355, 0.014221794, -0.016248487, 0.040603746, 0.031355504, 0.0002129338, -0.007244845, -0.042933278, -0.03743558, 0.010558604, -0.009673382, 0.020604713, 0.04544917, 0.002262558, 0.012288282, -0.006144141, 0.0236564, -0.062058736, 0.058145124, 0.052554246, 0.043585546, 0.016970642, -0.027954387, 0.00063770945, -0.0652269, 0.019253584, -0.0040417383, 0.039369095, -0.010046108, 0.0019801024, -0.03405776, 0.010651786, 0.00144431, -0.021874307, -0.0018214029, -0.006085903, -0.0009310849, 0.023586513, -0.013977193, 0.030843006, -0.04058045, -0.03312595, -0.06313032, -0.010552781, -0.035106048, 0.030936187, -0.019498184, 0.0253919, -0.020092215, -0.0148740625, -0.022747882, -0.001716574, -0.04018443, 0.0059985453, 0.03296288, -0.010296532, -0.008869694, 0.013359867, -0.028676542, -0.0070468346, 0.0060276645, 0.010715848, 0.011263288, 0.03545548, -0.0032031068, -0.017075472, -0.05353265, 0.016469792, 0.018997334, 0.029445287, 0.07324049, 0.021466639, -0.02201408, -0.00046736238, -0.03769183, 0.036014568, 0.01663286, -0.03624752, -0.011001215, -0.0088580465, 0.018729439, -0.0061616125, -0.01254453, 0.015083721, 0.03869353, -0.01299879, -0.014058727, 0.01628343, -0.0060043694, 0.013080323, 0.015666103, -0.0025406461, 0.013767535, 0.06881438, -0.026952688, 0.027045868, -0.0070293634, 0.018764382, -0.0078039328, 0.0002471488, -0.05856444, 0.008112595, 0.04575201, -0.006214027, -0.02928222, 0.0054452815, -0.010098522, -0.053020153, -0.00047318623, 0.022468338, 0.0013678721, -0.014827472, 0.035711728, -0.009195828, 0.0023222524, 0.015223493, -0.011903909, -0.050411075, -0.01762291, -0.03564184, -0.06084738, 0.008007767, -0.0016612476, 0.0057481206, 0.052647427, -0.012579474, -0.003401117, -0.016912403, -0.0008175202, -0.062478054, -0.036224224, -0.025834512, -0.005867509, -0.022549871, 0.05297356, 0.011106045, 0.083816566, 0.015747637, 0.04661394, -0.017506434, -0.005069644, -0.015013834, -0.0010744967, -0.04442418, 0.007885466, -0.008339725, -0.023877705, -0.003156516, 0.02648678, 0.04850086, 0.039415684, 0.0072856117, -0.041908283, -0.019603014, -0.0012339241, -0.0507838, -0.021222038, -0.032823108, 0.019439945, -0.009510315, -0.008677508, 0.03440719, -0.0027197287, 0.016795928, 0.011414708, -0.044284407, -0.07030528, 0.0050317897, -0.024017477, -0.025718035, -0.006272265, 0.010809029, 0.043399185, -0.006365447, -0.037621945, -0.0031536042, 0.01956807, 0.014454747, -0.005008494, 0.012824074, 0.015910706, -0.06816211, -0.024157248, 0.0033050238, -0.017250186, 0.014909006, -0.0068837674, -0.010657609, 0.017133709, -0.029538468, 0.00038728473, 0.023318617, -0.0012462997, 0.023970885, 0.021338515, 0.009941279, -0.011845671, -0.020907551, 0.019661251, 0.016993938, 0.0122649865, -0.011263288, -0.017739387, 0.013802478, -0.034267418, -0.021315219, -0.0015549627, -0.0087066265, 0.015328322, -0.021641353, 0.010348947, 0.0492929, -0.031355504, -0.0029905369, -0.02499588, -0.010325652, -0.0029017236, 0.011903909, -0.05847126, 0.0358515, 0.004737686, 0.026416894, 0.030493576, -0.032590155, 0.02793109, -0.037365697, 0.011461298, -0.0012251884, -0.0224101, -0.0017136621, 0.014617815, 0.0031768994, 0.007594275, 0.021885954, -0.0005871149, 0.014769234, -0.0066449903, -0.015794229, -0.023143902, 0.078645006, 0.062478054, -0.021256981, -0.0067964103, 0.016097067, -0.058890574, 0.0013220095, -0.006481923, 0.028793018, 0.032520268, -0.012439702, 0.0328697, -0.011059454, -0.022969186, 0.004053386, 0.0013140017, -0.0014559577, 0.04360884, 0.003366174, -0.01518855, 0.009306481, -0.020243635, -0.007809757, -0.011356469, 0.042211123, -0.009982046, 0.02494929, -0.04836109, 0.0408367, 0.027185641, -0.020290226, 0.001063577, 0.017285129, 0.03494298, 0.023819467, 0.005462753, -0.016889108, 0.014245089, -0.06345645, 0.009545258, 0.0072215497, -0.044354293, -0.021303572, -0.013185152, -0.007250669, -0.01926523, -0.014664405, 0.033242423, 0.041349195, -0.012579474, 0.03689979, -0.03720263, 0.0067905863, 0.026719734, -0.013592821, -0.013418105, -5.3096956e-05, 0.036853198, 0.014699348, -0.046124738, 0.003948557, -0.026673144, -0.042537257, -0.007174959, -0.052507654, -0.0012375639, -0.0056636753, 0.024366906, -0.0040417383, -0.020744484, -0.02215385, 0.024203839, 0.004493085, -0.026859505, 0.050876983, 0.018438248, 0.009586025, -0.009591849, 0.0011778697, 0.03247368, 0.011484593, -0.030446986, 0.0053753955, 0.014932301], [0.028476568, 0.016555363, -0.019711964, 0.044550605, 0.01914109, -0.0002992544, -0.032036137, 0.048132565, 0.010964151, 0.057982948, -0.004133244, 0.0131525025, -0.014014412, -0.027491529, 0.014708416, 0.019521672, -0.019286606, 0.0002331421, -0.00913959, -0.048759405, -0.0035091997, -0.0373643, -0.06581848, 0.009598529, 0.005910231, -0.008686248, -0.01577181, 0.004905604, 0.010494018, 0.037521012, 0.021245489, 0.018178437, 0.039468702, 0.0026458919, 0.03819263, -0.020405969, 0.027334819, 0.03608823, -0.029394444, -0.040565677, 0.0041668247, -0.029663092, 0.023708086, -0.03176749, 0.02424538, -0.00436831, -0.03602107, -0.024446866, -0.018850055, -0.0010214178, 0.012380143, -0.041483555, -0.00954256, -0.017294142, -0.046252035, 0.023036469, 0.0049615717, -0.088877335, 0.030177997, 0.0047852723, -0.027379593, 0.030580968, 0.041886523, -0.008926911, -0.025431903, -0.01045484, 0.015581518, 0.012917437, 0.033177886, 0.03590913, 0.010790649, 0.07428086, -0.0024038297, -0.015626293, -0.0063971533, -0.014820352, 0.10119032, 0.010857811, -0.028901925, -0.013656216, 0.03212569, -0.029707866, -0.0064587183, 0.026909461, 0.050819032, -0.0146076735, 0.0342077, -0.09357866, -0.0037106848, 0.006178878, 0.00031114763, 0.01979032, 0.0384165, 0.01342115, -0.050371286, 0.02310363, 0.037789658, -0.010762665, -0.03714043, 0.011115264, -0.039289605, -0.03340176, -0.052744333, -0.07141529, 0.0071583195, 0.01864857, 0.029372057, -0.022208141, 0.012995792, 0.0033608843, 0.016365072, -0.031991363, 0.002136582, 0.045938615, 0.002971906, 0.047460947, -0.02270066, -0.01994703, -0.017663531, -0.036513586, -0.07204214, -0.07343014, 0.03185704, 0.04564758, -0.025767712, 0.034342024, -0.025924422, 0.018256793, -0.019073928, -0.01382412, -0.05502783, 0.024827449, -0.0052554044, -0.0031510037, 0.0266632, -0.02634978, 0.032551046, 0.001171832, -0.01954406, 0.007466144, -0.07083322, 0.030177997, 0.00031971774, 0.01933138, -0.0048944103, -0.015939714, 0.0024290155, -0.01731653, -0.06411705, -0.04817734, -0.019868674, -0.052744333, -0.03738669, 0.019521672, 0.025275193, -0.024514027, 0.049386248, 0.046252035, -0.007925083, 0.03161078, 0.008786991, -0.05399802, 0.012424918, 0.025521452, -0.0236857, -0.05458009, 0.05650539, 0.015346453, 0.013275633, 0.019029154, 0.063982725, -0.050460838, 0.024536414, -0.0014159929, -0.04208801, 0.05001309, 0.055744223, 0.04296111, -0.06640055, -0.036938943, -0.021984268, 0.032618206, 0.07463905, -0.03178988, 0.0077403877, 0.05310253, 0.035125576, 0.020305226, -0.010835423, -0.08310143, -0.01080744, -0.035439, -0.025946809, -0.056594938, -0.012380143, -0.04620726, 0.004094066, -0.045849066, 0.027021397, 0.0082552945, -0.018704537, -0.06510209, 0.010572374, 0.0114007015, -0.056684487, 0.016163586, 0.027178109, -0.016219554, 0.008356037, 0.01784263, 0.05780385, 0.0061341035, -0.029215347, -0.026864687, -0.02375286, 0.01948809, -0.06353498, -0.026506491, 0.02112236, -0.05220704, 0.113279425, -0.020976843, 0.0100070955, -0.009173171, -0.0052134283, 0.038013533, 0.01898438, 0.04103581, 0.031431682, 0.013555473, 0.0055240514, -0.03633449, 0.014809159, 0.04629681, -0.05440099, -0.04862508, -0.015838971, 0.009822401, 0.0599978, -0.0011844249, -0.006587445, 0.017003108, -0.011389508, 0.018323954, 0.028476568, 0.0626395, -0.008574313, -0.022510368, 0.0067721396, -0.018637376, 0.027827337, 0.032506272, 0.055788998, 0.037229978, -0.032036137, 0.055341255, -0.008065003, 0.006329992, -0.020058965, 0.01673446, -0.027670627, 0.027760176, -0.015100192, 0.07074367, -0.026573652, 0.0011053699, 0.03924483, -0.039737348, -0.09147426, -0.034252476, 0.02375286, -0.028431794, 0.00025517953, -0.0058094882, 0.041774586, -0.021670846, 0.065012544, 0.034252476, -0.03380473, 0.070564575, -0.005358945, 0.038953796, 0.021413393, -0.016219554, 0.056594938, 0.03978212, 0.025521452, -0.041908912, -0.06031122, 0.027312431, -0.013309213, 0.022219334, 0.037789658, 0.05001309, 0.032215238, -0.026148295, -0.0005838172, 0.002619307, -0.030245159, -0.0005156061, -0.005311372, -0.00231568, -0.01329802, -0.05471441, -0.024446866, 0.049341474, 0.014204703, 0.10235445, 0.0006170483, -0.0016846397, 0.053460725, 0.0038450083, 0.0040380983, -0.038013533, -0.0061844746, -0.02440209, 0.029372057, 0.029707866, 0.07428086, -0.045781903, 0.0111432485, -0.029058635, -0.06904224, 0.00994553, 0.03427486, 0.024066282, 0.0035008045, 0.00013852103, -0.0025339555, -0.015346453, -0.04493119, 0.0068169143, -0.001085781, -0.049431022, -0.08672816, -0.07378834, -0.012066722, -0.02626023, 0.00061809766, -0.0006506291, -0.036603134, -0.018995572, -0.034834545, -0.038326953, -0.007706807, -0.014047992, 0.018301567, -0.025319967, 0.058654565, -0.006178878, 0.0011452471, 0.055654675, 0.019857481, 0.049028054, 0.0011494448, -0.00011167384, -0.020327613, -0.018659763, 0.0023422649, -0.0002247469, 0.04952057, -0.002301688, 0.038617987, 0.06425138, 0.0038897828, -0.026013972, -0.03290924, -0.009643303, -0.011271975, 0.01685759, -0.041550715, 0.0076620323, -0.062863365, -0.02310363, -0.018424697, -0.050729483, 0.031274974, -0.024469253, -0.0014705617, 0.015290484, 0.014394995, -0.001714023, -0.0017084262, 0.034744993, 0.016376264, -0.022846177, -0.011462267, -0.027357206, 0.03293163, 0.024782673, 0.002177159, 0.020697001, -0.013107728, -0.040543288, 0.07235555, 0.041573104, -0.033088338, 0.0069736247, -0.024111057, 0.0039373557, -0.026931848, 0.014820352, 0.007852324, -0.03299879, 0.017954566, -0.03899857, 0.0024444067, -0.026864687, 0.027715402, 0.06308724, 0.027715402, -0.013465924, -0.017820243, -0.0012326973, 0.01580539, 0.04150594, -0.030580968, 0.049654897, -0.0111432485, 0.006878479, 0.051042903, -0.012111496, -0.054087568, 0.05126678, -0.09232497, 0.07571364, -0.05641584, 0.01994703, -0.012044335, -0.014182316, -0.009078025, -0.009178768, 0.023372278, 0.024737898, -0.041550715, -0.061161935, -0.012133883, -0.041080583, -0.035730034, 0.032506272, 0.04255814, -0.00035592212, -0.013756958, -0.0013250447, -0.041864138, 0.01864857, -0.10333949, -0.0037582577, -0.01868215, -0.046744555, -0.03138691, -0.026237844, -0.092683166, -0.01691356, 0.035550933, -0.0016342684, 0.023887184, 0.024916997, 0.015044224, -0.068907924, -0.008283278, 0.0038310161, 0.055923324, -0.031991363, 0.057938173, -0.03452112, 0.009430625, 0.0060949256, 0.017305335, -0.00044144836, 0.03232717, 0.009923143, -0.004480246, 0.05708746, 0.0016622525, 0.0064531215, -0.0023128816, 0.044864025, 0.059236635, -0.060042575, -0.05641584, -0.03154362, 0.02201785, 0.016678493, 0.041796975, -0.019062733, 0.020450743, 0.016398652, 0.05628152, 0.009570545, -0.029551156, 0.024536414, 0.013835314, -0.02489461, 0.0017713902, -0.05538603, -0.030312322, -0.046475906, 0.012939824, 0.015838971, -0.0076956134, 0.05471441, 0.024625963, 0.008781394, -0.01954406, 0.028409407, -0.047237072, -0.04517745, 0.0030362692, -0.01552555, 0.013197278, -0.023618536, -0.036961332, 0.014137541, -0.011322346, -0.0007006506, -0.01407038, 0.0145069305, 0.002764824, -0.00061355025, 0.01731653, -0.03049142, -0.047729593, -0.01357786, 0.03040187, -0.009738449, 0.017327722, -0.003601547, 0.016891172, -0.05319208, -0.014092767, -0.010751472, -0.019465704, 0.0112216035, -0.0005355447, 0.016006876, 0.038685147, 0.021066392, -0.027961662, 0.020372387, -0.0017042286, 0.020529099, -0.034431573, -0.021581298, -0.029304896, 0.033871893, 0.06541551, -0.0032825288, -0.019364962, 0.01642104, -0.028476568, 0.03257343, 0.027513916, 0.041394003, -0.0011998161, -0.04267008, -0.035640486, -0.06375886, -0.0041780183, -0.01657775, -0.028252695, -0.025028933, 0.06120671, 0.054132342, -0.021626072, -0.035841968, 0.01713743, -0.010846617, -0.0013523292, -0.004748893, 0.024916997, 0.036916558, -0.01317489, 0.007891501, 0.018570215, 0.077146426, 0.009016461, -0.02294692, -0.033603244, 0.0069568343, -0.02724527, -0.005154662, 0.010790649, -0.017226981, 0.024267767, -0.004564198, -0.009229139, -0.049475797, -0.018368728, 0.026461717, 0.001928101, 0.015626293, 0.0030334708, -0.021256683, -0.021849945, 0.0019812707, 0.0137905395, 0.017226981, 0.0010375086, 0.04817734, -0.031722717, 0.006380363, 0.030580968, 0.0028935506, -0.018670958, 0.0014103961, 0.02643933, -0.016018068, 0.041394003, 0.02334989, -0.048445985, 0.021670846, 0.06357976, 0.006324395, 0.009430625, -0.028095985, 0.009156381, 0.03129736, 0.022801403, 0.01382412, 0.056371067, 0.007096755, 0.049744446, -0.012133883, 0.0050930968, 0.008663861, -0.01577181, 0.014215897, -0.0012417921, -0.012839082, -0.010119032, 0.00010948759, -0.025364742, -0.0065650577, -0.008675055, 0.026887074, 0.008591102, 0.05641584, -0.008126568, 0.02675275, -0.0076564355, 0.015458388, -0.012458499, 0.03817024, -0.019723156, -0.021189522, 0.020540291, -0.008641474, 0.03040187, -0.010202984, 0.017988147, -0.002724247, 0.00012190551, 0.06765424, 0.010426857, 0.0038701938, 0.00031394605, 0.011389508, -0.02022687, 0.011921205, -0.035528548, -0.039826896, 0.003290924, 0.007376595, 0.009161977, -0.011014521, -0.028095985, -0.025566226, 0.0022079414, -0.0022135382, 0.06819153, -0.057042684, -0.011299958, -0.03463306, -0.032371946, -0.009760836, -0.014450963, 0.06411705, -0.034230087, -0.024558801, -0.046968427, -0.03991645, -0.028252695, -0.02870044, -0.019308994, -0.0049671684, -0.047147524, 0.04361034, -0.019756738, -0.010919375, 0.030648129, -0.041371617, -0.015010644, 0.03373757, -0.017372496, -0.007443757, -0.03187943, -0.032954015, 0.025946809, 0.004908402, -0.03049142, -0.027894499, -0.022185754, -0.020450743, 0.039132893, 0.047550496, 0.01045484, 0.0038869844, -0.06250517, -0.028498955, 0.022476787, 0.013230858, 0.024760285, 0.061833553, -0.0043235356, -0.008658265, -0.0050875, 0.0009738449, -0.06040077, 0.0015866956, -0.04540132, -0.03940154, -0.0021449772, -0.036737457, 0.04920715, -0.031342134, 0.028678052, -0.022622304, 0.043005887, -0.007678823, 0.033603244, -0.03550616, 0.016376264, -0.008977283, -0.03550616, -0.03129736, -0.01926422, -0.02177159, 0.011064893, -0.0055044624, -0.017853823, -0.021782784, -0.03794637, -0.019275412, 0.015626293, -0.008775798, 0.017932178, 0.0031538024, -0.010605955, 0.009850385, -0.020943262, -0.022320077, 0.030827228, 0.011596589, -0.008322456, 0.05238614, 0.021290263, -0.009033251, 0.025006546, -0.021726815, -0.008809378, -0.025879648, -0.004608973, -0.023327503, 0.014238284, 0.031028712, 0.007147126, -0.06429615, 0.00047992644, 0.011977172, 0.050236963, 0.044953573, -0.0153240645, 0.017585175, 0.01673446, -0.01264879, -0.0068896725, -0.003178988, -0.030648129, -0.012133883, 0.019723156, 0.020618647, -0.018726924, -0.01447335, 0.040431354, 0.0068672854, 0.004063284, -0.010952957, 0.022208141, 0.014059186, 0.04305066, 0.037588175, 0.008826169, -0.003414054, 0.04643113, 0.010549986, 0.041774586, -0.0016888373, -0.008395215, -0.023820022, 0.014618867, -0.038729925, -0.019342573, 0.02610352, 0.0117533, -0.021391006, -0.040073156, -0.031252585, -0.02424538, 0.045266997, 0.035640486, 0.020842519, -0.007326224, 0.05390847, -0.009682481, 0.01620836, 0.007997841, -0.0059829894, 0.010191791, 0.02183875, -0.0011760297, -0.04540132, 0.059639603, -0.031901814, 0.047281846, 0.04484164, 0.03129736, -0.006268427, -0.042782012, -0.024939384, -0.024469253, -0.038461275, -0.047281846, 0.026707975, 0.034677833, 0.044237185, -0.009307494, 0.040162705, -0.007348611, -0.005904634, -0.0127943065, -0.013186083, -0.0072702556, 0.023775248, -0.049968317, -0.00822731, 0.0117980745, -0.0033077146, -0.0048972084, 0.02007016, 0.055654675, -0.0012403929, -0.008574313, 0.0514011, -0.0010871802, -0.0047880705, -0.033894278, -0.01043805, 0.008109777, 0.023596149, -0.0066546067, 0.01914109, 0.0060501513, -0.028006436, -0.01540242, -0.039110508, -0.0001422814, -0.06066942, -0.027737789, -0.028185533, -0.00768442, -0.021301458, 0.022868564, 0.03987167, 0.025812486, -0.043073047, 0.0054792766, -0.031812266, 0.048580308, -0.016309103, 0.018189631, 0.02180517, -0.049028054, -0.0019253026, 0.010600357, -0.033513695, -0.016006876, -0.0039933235, -0.027290044, 0.03324505, -0.025499064, -0.016924752, 0.030916777, -0.03152123, 0.021726815, 0.046834104, -0.023887184, -0.028767603, 0.017820243, 0.023394665, 0.023014082, -0.021760397, 0.036737457, -0.00084092066, 0.01617478, -0.048356436, -0.02675275, 0.012436111, 0.01661133, -0.0071919006, -0.057535205, 0.029215347, 0.0387747, -0.024558801, 0.04889373, -0.028476568, -0.035618097, 0.0024038297, 0.0047796755, -0.012368949, 0.016745655, 0.023797635, 0.02814076, 0.032215238, -0.03326744, 0.031431682, -0.0009906354, 0.021189522, 0.02242082, -0.026327392, 0.000106601736, 0.0037862416, 0.033379372, 0.021424588, -0.009917547, 0.0046061743, -0.037409075, 0.0023660513, -0.041550715, 0.0066993814, 0.0022765023, 0.037834432, 0.009357866, -0.040162705, 0.011266378, -0.03819263, -0.008809378, 0.0046145697, -0.00086120906, -0.00542051, -0.015547938, 0.02845418, -0.018659763, 0.0038534035, -0.018760506, 0.0069064633, 0.011406298, 0.04542371, 0.022409625, 0.0065706545, 0.042826787, -0.009749643, -0.016286716, 0.0065426705, 0.045513257, 0.010538792, 0.007729194, -0.040185094, 0.011507041, -0.00095635484, -0.045692354, -0.00013825869, 0.005454091, 0.030133223, -0.005649979, 0.03170033, 0.036983717, -3.7494254e-05, 0.00027196997, 0.018917216, 0.0011606384, -0.038461275, 0.014081573, 0.03040187, -0.007124739, -0.027939273, 0.010628342, 0.050505612, 0.012872662, -0.0059326184, 0.042267106, -0.048445985, -0.0034532316, 0.017518014, -0.009133994, -0.025409516, 0.012033141, 0.0021757598, -0.011132054, -0.026797526, 0.01264879, -0.0143278325, -0.0214022, 0.002971906, -0.02161488, 0.02099923, 0.026148295, 0.01713743, -0.03243911, -0.0035903533, 0.007667629, 0.018547827, -0.03129736, -0.027110945, -0.0033077146, 0.045378935, 0.03170033, 0.037185203, 0.0130741475, 0.13065192, -0.015122579, -0.025006546, 0.006257233, -0.008361634], [0.03192388, 0.009097946, -0.011602133, 0.008875752, -0.015061153, 0.012220673, -0.005128479, 0.07835643, -0.009182019, 0.040163077, -0.0570258, 0.0011740254, -0.01988937, -0.07090993, 0.02185909, 0.041652378, -0.026206888, 0.011812316, -0.014388566, -0.004681088, -0.01937292, -0.028536923, -0.049170945, 0.009272098, 0.037760977, -0.024477378, 0.0016319252, 0.0048792614, 0.0070981993, -0.019096678, 0.015997972, 0.036944266, 0.02870507, -0.014376556, 0.04907486, -0.011536075, -0.01569771, 0.007146241, -0.03017035, -0.002552229, -0.028560944, 0.04025916, -0.0072483304, -0.022723846, 0.008761652, -0.038073253, 0.015997972, -0.034830417, -0.011169755, -0.04297353, -0.0031467483, 0.0041226004, -0.0058190823, -0.036175594, -0.06874804, 0.001974224, 0.06644203, -0.048882693, 0.062983006, -0.039322343, -5.592384e-05, -0.00509545, 0.065433145, 0.003044659, -0.024309231, -0.0052996282, -0.019481014, 0.021991206, -0.005566862, 0.061253496, 0.017583357, 0.03391762, 0.007368435, -0.03384556, -0.012647045, -0.047993917, 0.059283774, -0.019601118, -0.038169336, 0.04688895, 0.029545804, -0.03257245, 0.01693479, 0.016094055, 0.0012678573, -0.01862827, -0.0064376225, -0.13711174, -0.0407636, 0.00072438264, 0.014400576, -0.0053957123, 0.03141944, -0.007590629, -0.048834648, 0.0013369176, 0.055056084, 0.012262709, -0.04049937, -0.011680201, -0.021486765, -0.051837273, -0.04518346, -0.09661238, 0.06038874, 0.036319718, 0.047537517, -0.027504021, -0.0062514595, 0.004326779, 0.009410218, 0.0027999454, -0.003855367, 0.06605769, -0.00859951, 0.03876986, -0.01864028, -0.07653084, -0.018592237, 0.0052816127, -0.06384776, -0.017499283, 0.066826366, 0.0053236494, 0.012502919, 0.015121206, 0.028873216, 0.0555365, 0.002388586, -0.0065156906, -0.029761992, 0.020081539, -0.01399222, 0.0005348421, 0.05375895, 0.028056502, 0.06322321, -0.009001861, -0.036776118, -0.00062304415, -0.060052447, 0.005683964, 0.0045850044, 0.033821538, -0.019673182, 0.026302971, -0.031467482, -0.07331203, -0.013619895, 0.0030026224, -0.033028845, -0.038385525, -0.009212045, 0.021726975, 0.022255437, -0.024501398, 0.04350199, 0.031731714, -0.013643916, 0.01844811, 0.037472725, -0.071390346, 0.034277935, 0.01080944, -0.0017280092, -0.07662692, 0.042565174, -0.022831941, -0.04914692, 0.012671066, 0.039298322, -0.021763006, 0.014340525, -0.013607885, -0.025101922, 0.010088811, 0.046048217, 0.04513542, -0.023456486, -0.08234391, -0.06476056, 0.06528902, 0.014880996, -0.017523304, 0.016622517, 0.04001895, 0.012803182, -0.008755647, 0.031779755, -0.052461818, -0.00527861, 0.003633173, 0.00043725688, -0.011494039, -0.025798531, -0.023240296, 0.021967186, 0.022195384, -0.029593846, -0.009188024, -0.04816206, -0.016598497, -0.00848541, -0.014953059, -0.03242832, 0.04025916, 0.042853426, -0.025582341, 0.033509266, 0.038433567, 0.043574054, 0.026615243, -0.02089825, -0.03214007, -0.026471118, 0.0021393683, -0.09315336, -0.0037472728, 0.0019081665, -0.058370978, 0.049243007, -0.018736362, 0.008077054, -0.033172973, -0.009524318, 0.058082726, -0.00034699054, 0.038697798, 0.028897237, 0.015325384, -0.02402098, -0.07086188, 0.0006388079, 0.048978776, -0.085034266, -0.04218084, -0.00969847, 0.0061013284, 0.04487119, -0.009464266, 0.014160367, 0.07633867, -0.021967186, -0.026110804, -0.0013406709, 0.02406902, 0.014052273, 0.048186082, 0.015121206, 0.0007630414, 0.04833021, 0.0059842262, 0.0461443, 0.053326573, 0.009614397, 0.06596161, -0.009722491, -0.022675803, 0.04739339, 0.020658042, -0.019541066, -0.023576591, -0.007140236, 0.06826762, -0.030338496, 0.007590629, 0.03214007, -0.06658615, -0.020465873, -0.02456145, 0.058082726, -0.057314053, 0.026230909, -0.0069480683, 0.04073958, -0.021787027, 0.0010058784, -0.0019862347, -0.008413347, 0.071342304, 0.01643035, 0.013920157, 0.008581495, 0.0064256117, 0.03096304, -0.01669458, -0.0043928362, -0.05087643, -0.027696189, 0.0030326485, 0.01348778, -0.017126957, 0.024597483, 0.02111444, 0.055392377, 0.026735349, 0.009248077, -0.008671573, -0.02723979, 0.02012958, -0.019517045, 0.024093041, -0.07417678, -0.025053881, -0.010575236, 0.01695881, -0.003025142, 0.04342993, -0.011223802, -0.017967692, 0.066682234, 0.0099326745, -0.008089065, -0.028777132, 0.019456992, -0.041051853, 0.0043207733, 0.019505035, 0.046528634, -0.04809, 0.00029331868, -0.057842515, -0.09569958, 0.051645104, 0.041436188, 0.021066397, -0.009758523, -0.006972089, -0.02456145, 0.011824327, -0.04391035, -0.04126804, -0.027095664, 0.015145227, -0.059956364, -0.10963175, -0.026086783, 0.0017565341, 0.0101188375, 0.0026378038, -0.0024726596, 0.01990138, 0.0054017175, -0.040811643, 0.020946294, -0.016862728, 0.010953566, 0.032019965, 0.026711328, -0.039634615, 0.0015328387, 0.03610353, 0.06740287, 0.017331136, 0.0004308763, -0.024693565, -0.03701633, -0.034878463, -0.002769919, 0.01546951, 0.061253496, -0.047561537, -0.010845472, 0.035695173, 0.0038043226, -0.052942235, -0.045880068, -0.006104331, 0.0045579807, 0.029810034, -0.042877447, 0.04833021, -0.04712916, -0.044655, -0.01862827, -0.010773409, 0.040187098, 0.004915293, -0.03833748, 0.0058250874, -0.017763514, -0.018940542, -0.027431957, 0.005698977, 0.028248671, 0.017355157, -0.031971924, -0.0015133217, 0.015973952, 0.019312866, 0.02699958, 0.029978182, -0.0073804455, -0.011602133, 0.03367741, 0.020573968, 0.006653811, 0.019060647, 0.04321374, 0.033965662, -0.014820944, 0.024117062, -0.015973952, 0.017331136, 0.036992308, -0.0014923033, 0.008653558, -0.010653304, -0.023252307, 0.027407937, -0.0042276923, 0.030842936, -0.015313374, -0.021198513, 0.037160452, -0.0012438362, -0.07331203, 0.003299882, -0.024933776, 0.012358793, 0.019216783, -0.027311852, -0.033293076, 0.026807413, -0.017271083, 0.023600612, -0.029858077, 0.038409546, -0.0027398928, -0.037929125, -0.026399055, 0.0012333271, 0.017295105, 0.014868986, -0.0042457078, -0.053134404, -0.014604755, -0.035238776, -0.015853846, 0.025630385, 0.02699958, -0.0022219406, 0.0068099475, 0.0026528167, 0.03096304, -0.010371057, -0.10175286, 0.0019757254, 0.03607951, -0.019997464, -0.035238776, -0.048882693, -0.035695173, 0.006257465, 0.03257245, -0.058515105, -0.013163496, 0.010256958, 0.021726975, -0.07340811, 0.023756748, -0.0130433915, 0.05865923, -0.0035671154, 0.023540558, -0.02870507, -0.0099326745, 0.02502986, -0.0017039882, 0.019937413, 0.0008429862, -0.0064976746, -0.045567796, -0.025390174, -0.0063475436, -0.016622517, -0.027792273, 0.002571746, 0.03235626, -0.017979702, -0.019973444, -0.01324757, -0.004302758, 0.05087643, -0.006287491, -0.012935297, -0.018580226, 0.010509178, 0.04787381, 0.028945278, -0.014424598, 0.04326178, -0.00085274474, 0.0028389795, -0.009806564, -0.052461818, -0.04645657, -0.040811643, -0.004636049, -0.015577605, 0.008815699, 0.039562553, 0.020994335, 0.02061, 0.03360535, -0.030050244, -0.020802168, 0.012418846, 0.022891993, -0.033221014, 0.007782797, -0.011169755, -0.01937292, 0.013019371, -0.031827796, -0.0067859264, -0.015805803, 0.033989687, 0.017763514, 0.03804923, 0.012028505, -0.025222028, -0.02944972, -0.014124336, -0.018340018, -0.015889877, 0.005593885, -0.005882137, 0.021162482, -0.0026798404, -0.012647045, -0.008287238, -0.006257465, 0.007434493, -0.015997972, -0.014544702, 0.008629536, 0.027696189, 0.004705109, 0.008137107, 0.0035761232, 0.062214334, 0.0036692044, 0.01622617, -0.0008384823, 0.043814264, 0.035935383, 0.018484144, -0.041340105, 0.0294257, -0.04645657, 0.02529409, 0.0018811428, 0.043526012, 0.01963715, 0.034998566, -0.013379685, -0.03290874, -0.006335533, 0.01277916, 0.008083059, -0.011680201, 0.05375895, 0.030866958, -0.013764021, -0.031467482, 0.032740593, 0.04907486, 0.003290874, 0.015829826, 0.032956783, 0.049483217, -0.0029410685, -0.019264825, -0.0062995018, 0.067931324, 0.031491503, -0.041388147, -0.020453863, -0.04326178, -0.007908907, 0.017343147, 0.005605896, -0.0476336, 0.015769772, -0.015277342, -0.031539544, -0.033701435, -0.05443154, 0.00071650074, 0.012262709, 0.018207902, -0.014268462, -0.002330035, 0.0021979196, 0.009109956, 0.007188278, 0.01769145, 0.038625732, 0.0049573295, -0.014220419, 0.02089825, -0.020201642, -0.022783898, -0.05443154, -0.0025642395, 0.034878463, -0.031347375, 0.0030401552, 0.01938493, -0.040619474, 0.012016495, 0.048186082, 0.004792185, 0.031635627, -0.0338936, 0.01937292, 0.03925028, -0.003016134, 0.018460123, 0.029713951, 0.035503007, 0.025702447, -0.037953146, -0.022891993, 0.015553583, -0.011397954, 0.013920157, -0.036511887, -0.026423076, -0.01227472, -0.046696782, 0.003044659, -0.017487273, 0.03247636, 0.058755312, -0.022819929, 0.01914472, -0.00957236, 0.020429842, -0.004326779, 0.023588601, 0.029737972, 0.12442867, -0.03218811, -0.050924476, 0.03610353, 0.0056179063, 0.022471625, 0.024045, -0.015109195, 0.03408577, 0.017126957, 0.049050838, 0.0035881337, -0.017799545, -0.04222888, 0.025798531, -0.038121294, 0.027552063, -0.034181852, -0.036151573, 0.015529563, 0.017078916, 0.02575049, -0.02163089, -0.015193269, -0.045687903, 0.0012258205, 0.02135465, 0.07388853, -0.018568216, -0.046985034, 0.0020733108, -0.026783392, -0.023156224, -0.0022324496, 0.05745818, -0.017739493, -0.0022864968, -0.044534896, -0.021871101, -0.016814684, -0.010088811, -0.043069616, -0.016466381, -0.03067479, 0.005933182, -0.006833968, -0.009758523, -0.0013324136, -0.018748375, -0.004681088, 0.060725033, -0.010989598, -0.013800052, 0.01165618, -0.002721877, 0.003001121, 0.020237675, -0.00932014, -0.035887342, -0.008293243, -0.023360401, 0.0038883958, 0.030002203, -0.014028251, 0.00288552, -0.042060733, -0.020742115, 0.03435, -0.011632158, 0.015901888, 0.06797937, 0.02457346, 0.012118584, -0.018027745, -0.0007600388, -0.07143839, 2.6530983e-05, -0.011397954, -0.0036151572, 0.020345768, -0.055824753, 0.0148930065, -0.04246909, 0.03749675, 0.008275227, 0.046024196, -0.016994843, 0.0126350345, -0.027792273, 0.006335533, 0.012466888, 0.016574476, -0.01918075, 0.008893767, -0.009842596, 0.0029635883, 0.02995416, 0.025125943, -0.03509465, -0.030482622, -0.019925402, -0.01988937, -0.031563565, 0.036319718, -0.012971329, 0.030050244, -0.041075874, -0.025414195, -3.4764736e-05, 0.039706677, -0.024141083, 0.001828597, 0.030458601, 0.023120191, -0.013139475, 0.026567202, -0.017595368, -0.0052455813, -0.013788042, -0.009632412, 0.0030131314, 0.040355243, -0.022027237, 0.006833968, -0.054575663, 0.019937413, 0.03338916, -0.009680455, 0.04837825, -0.0032548427, -0.009073924, -0.00039184222, -0.0010674322, 0.014460629, -0.021498775, -0.036776118, -0.0028810161, 0.016778653, 0.016046014, 0.019829318, -0.0476336, 0.021474754, 0.020345768, -0.0011920411, -0.02651916, -0.032956783, -0.002059799, 0.016778653, 0.032500383, 0.02085021, 0.052077483, 0.07321594, -0.025678426, 0.057314053, -0.03365339, 0.02136666, 0.030482622, 0.003107714, -0.03756881, -0.004308763, 0.019252814, -0.017451242, -0.028633006, -0.015445489, -0.03266853, -0.025630385, 0.04684091, -0.016058024, 0.039466467, 0.0011087183, 0.041075874, -0.024117062, 0.026447097, 0.009968706, -0.04201269, -0.012430856, 0.020814179, 0.033028845, -0.056881677, 0.025198007, 0.0051885312, 0.03905811, 0.06456839, 0.017090926, -0.021979196, 0.010202911, -0.013752011, -0.019120699, -0.0441986, -0.025270069, 0.028633006, 0.0100467745, 0.014052273, -0.030482622, 0.06139762, 0.020273706, 0.037400663, 0.009674449, 0.012971329, -0.00027586592, 0.005716993, -0.082055666, 0.02259173, -0.016274214, 0.003879388, -0.01718701, 0.02551028, 0.011878374, 0.054863915, 0.0018436101, -0.020910261, 0.0067559, 0.009746512, -0.05452762, 0.022279458, -0.011764274, 0.0029275569, 0.052846152, 0.02160687, 0.023720717, -0.027816294, 0.031107167, -0.022735856, -0.031035105, -0.06058091, -0.02776825, -0.051981397, -0.022195384, 0.0036662018, 0.01861626, 0.060725033, 0.0087856725, -0.031107167, -0.015277342, -0.040691536, 0.0023315363, -0.0065937587, -0.001462277, 0.0040115034, -0.030770874, -0.042445067, -0.004699104, -0.02577451, -0.003879388, 0.015661677, -0.026351014, -0.027504021, -0.014100314, -0.023948915, 0.022219405, -0.013019371, 0.031947903, -0.022063268, -0.008113085, 0.0045009307, -0.013055402, 0.011890384, 0.0021498776, 0.03485444, 0.00083022506, -0.0072303144, 0.021714965, 0.025486259, -0.018315997, -0.012959318, 0.007974965, -0.009986722, -0.035887342, 0.059235733, 0.03975472, 0.017727483, 0.048426293, -0.029497761, -0.028560944, -0.03312493, 0.031971924, -0.07667496, 0.020093549, 0.023240296, 0.0121546155, 0.043574054, 0.0045519755, -0.006209423, 0.017763514, 0.038193356, 0.014760891, -0.039586574, 0.033028845, 0.008449379, 0.0051645106, 0.0062034177, 0.004086569, -0.03189986, 0.023000088, -0.02010556, -0.05111664, -0.021666924, 0.036439825, 0.08123895, -0.047321327, 0.009830586, 0.006185402, -0.02776825, -0.034830417, 0.04981951, 0.027311852, -0.017006854, -0.013944178, 0.026230909, 0.015925908, 0.01841208, 0.008923793, -0.0018481141, 0.0050774342, 0.037977166, 0.003672207, 0.010028759, 0.024957797, 0.0076927184, -0.015589615, 0.0075485925, 0.026783392, -0.0116381645, 0.02772021, -0.018207902, -0.010941556, -0.0043688156, -0.059572026, 0.015997972, -0.0040024957, 0.0087856725, 0.008923793, 0.021750996, -0.021330629, -0.019709213, -0.046985034, -0.00072475796, -0.015025122, -0.06552923, 0.0130794225, 0.021498775, -0.03540692, -0.018147849, 0.00957236, 0.03980276, 0.026182866, 0.000116445444, 0.022507656, -0.014376556, 0.031203251, 0.021558829, -0.011536075, 0.04189259, -0.021498775, 0.004831219, 0.00037607845, 0.001196545, -0.004080564, 0.017835576, -0.04686493, 0.026711328, -0.025342133, 0.033773497, -0.030482622, 0.019469002, -0.0417965, 0.031011084, -0.012911276, 0.006431617, 0.007590629, 0.0031047114, 0.0018631271, 0.043790244, 0.02649514, -0.035959404, 0.029257553, 0.1296172, -0.026591223, -0.026375035, 0.027912376, -0.016550453], [-0.01544169, 0.025674414, -0.026577301, 0.03903252, 0.019192146, -0.0032150894, -0.06431337, 0.0010707319, 0.001666869, 0.0077787223, -0.034170818, 0.019747768, 0.021055797, -0.0142031135, -0.022375403, 0.022016563, -0.031994626, -0.0253503, -0.030489814, -0.0228963, -0.01905324, -0.08880708, -0.048339203, 0.0016538467, 0.017525276, -0.007825024, 0.002697087, 0.011737537, -0.028406227, 0.035883985, 0.03914827, -0.0063259997, 0.045445334, 0.02015291, 0.0077092694, 0.013126594, -0.029494323, 0.054173246, 0.019979278, 0.0047488404, -0.017594729, -0.013589613, -0.009225657, -0.026947716, -0.009821795, 0.007662968, -0.0015395388, -0.026392095, -0.0004373361, -0.030860228, -0.026484698, -0.019851947, -0.0052234353, -0.010163271, -0.030235153, 0.0045028618, 0.028035812, -0.01810405, 0.06579503, -0.014793463, -0.04076884, 0.037273046, 0.058710832, -0.0050411215, -0.024655772, -0.0067137782, 0.008855242, 0.0072057364, 0.0041469154, 0.02896185, -0.028012661, 0.010510536, 0.022398554, -0.010823074, -0.027294982, -0.0724162, 0.02205129, 0.019238448, 0.0056661973, -0.019087967, 0.04169488, -0.012837207, 0.027688548, 0.002824417, 0.03764346, -0.02676251, 0.03433287, -0.10908732, -0.054821473, -0.011899593, 0.003735986, 0.020233938, 0.04053733, 0.03884731, -0.015048124, 0.0021761903, -0.0019924294, 0.0005925199, 0.003556566, -0.0060887025, -0.027619096, -0.037180442, -0.056071624, -0.044936012, 0.016402455, 0.025211396, 0.032411344, 0.0021530392, -0.019747768, -0.052737884, 0.037527706, -0.027619096, -0.034911647, 0.0118764425, 0.0019085072, 0.0034118728, -0.06306321, -0.04125501, -0.030096248, 0.014191538, -0.06403556, -0.050746903, 0.09491894, 0.016390879, -0.017039105, -0.005365235, -0.008930483, 0.04171803, 0.01776836, 0.0015786061, -0.023463497, 0.031207493, 0.053756528, 0.030258304, 0.039634444, 0.021565119, 0.10806868, -0.032457646, -0.05741438, -0.01423784, -0.07190688, -0.010579988, -0.027225528, 0.042366255, -0.043732163, -0.0047430526, -0.022259647, -0.009318261, -0.042551465, -0.0021255475, -0.010655229, -0.03914827, -0.025720716, 0.002112525, 0.03162421, 0.0006945288, 0.003762031, 0.020824289, -0.00025176667, 0.06199827, 0.044565596, -0.040213216, -0.017652607, 0.0602851, 0.0011315031, -0.076768585, 0.02870719, 0.008797364, -0.059729476, 0.020789562, 0.021541968, -0.020199211, 0.023104658, -0.020569628, -0.028892398, 0.030443512, 0.041648578, 0.0052871006, -0.006430179, -0.050006073, -0.025952226, 0.05139513, 0.054636266, -0.0011105225, 0.019296324, 0.020673808, 0.043083936, 0.01375167, 0.025929075, -0.036300704, -0.03567563, -0.0054173246, -0.033360533, -0.014631406, -0.008826303, -0.030003643, 0.014295718, -0.027781151, -0.0028345457, -0.030559266, -0.010834649, -0.011494451, 0.012304735, -0.0024800466, -0.015337511, 0.035351515, 0.033939306, 0.04442669, 0.0088031525, 0.024100149, 0.0065980237, 0.059451666, -0.008999935, -0.02433166, 0.011922744, 0.031485304, -0.03907882, -0.014480925, -0.008617945, -0.018532343, 0.05093211, -0.02509564, 0.014816614, 0.020812713, -0.015256482, 0.038916763, 0.0019012726, -0.019805646, 0.02579017, 0.042574614, 0.023104658, -0.038268536, -0.05384913, 0.0140873585, -0.076768585, 0.00880894, -0.059451666, -0.008212803, 0.03741195, 0.010082243, 0.043361746, 0.005324721, -0.053617623, -0.021032646, 0.027943209, 0.031253796, -0.012177405, 0.031161191, -0.031045437, 0.028128415, -0.009972276, -0.016309852, 0.029980492, 0.012594122, 0.02291945, 0.08755693, 0.031022286, -0.02678566, -0.03424027, 0.046417672, -0.040190067, 0.042852428, -0.022826847, 0.086816095, -0.018798579, 0.0011300562, 0.014747161, -0.03546727, -0.041787483, -0.0077787223, 0.052182265, -0.027086623, -0.000812454, 0.026577301, 0.02993419, -0.008722124, 0.072230995, 0.025952226, 0.017085409, 0.048478108, 0.014307293, 0.022699516, 0.020222364, 0.020696959, -0.021854505, 0.016263548, 0.0045260126, -0.03736565, -0.0036810027, -0.00019388928, -0.004384213, -0.003492901, 0.060192496, -0.02184293, 0.0458852, -0.012038499, 0.029772134, 0.031207493, -0.030026795, 0.016147794, -0.016610814, -0.028244171, -0.044472992, -0.024215903, 0.012142679, 0.040166914, -0.0068237456, 0.102142036, -0.0037504553, -0.016969653, 0.058988646, -0.018277682, -0.03692578, -0.021530392, 0.024655772, 0.0028113946, -0.014886067, -0.00765718, 0.062600195, -0.014145236, -0.011899593, -0.03312902, -0.12334831, 0.012374188, 0.022572186, -0.014446199, -0.005926646, -0.026183736, -0.018995361, 0.03349944, -0.07246251, -0.023000479, 0.009144629, -0.0065980237, -0.030235153, -0.102419846, -0.0047517344, -0.045445334, 0.014538802, -0.020569628, 0.0143188685, 0.029401718, -0.045676842, -0.038222235, 0.035883985, -0.039703894, -0.024725225, 0.034124516, 0.037805516, 0.00627391, 0.0013449261, -0.003779394, 0.01098513, 0.010261663, 0.009271959, -0.023752885, 0.020465448, -0.023625555, -0.0002591822, -0.0041671726, 0.028035812, -0.060979627, 0.01654136, 0.05954427, 0.02511879, -0.043778464, -0.031415854, -0.0056835604, -0.020500174, -0.01267515, -0.028058963, 0.018057749, -0.0048125056, -0.03495795, -0.021704024, 0.004355274, 0.04484341, 0.00046410438, -0.06977699, -0.003582611, -0.0071304957, -0.028684039, -0.024447413, 0.0035189458, 0.0069337124, 0.011008281, -0.03815278, 0.020002428, 0.01001279, 0.027341284, -0.021796629, 0.012223707, 0.017606305, 0.023301441, -0.03088338, 0.025003036, -0.017282192, 0.048848525, -0.011980621, 0.049867168, -0.022143893, 0.019006938, -0.06482269, -0.024632622, 0.019608863, -0.038986217, -0.0031109103, -0.04655658, -0.00521186, 0.030096248, -0.047158506, 0.036231253, -0.024053847, 0.072092086, 0.025628112, 0.00013863445, -0.009630799, 0.048802223, -0.009248808, 0.0027737743, 0.015071275, -0.034842193, -0.015754228, 0.016784446, -0.04463505, 0.040884595, -0.03354574, 0.035328366, 0.017293766, -0.059220154, -0.013971604, 0.021646148, -0.011662296, -0.034981098, 0.012420489, -0.08274153, -0.04417203, -0.045491636, 0.011888018, 0.029239662, -0.022248073, -0.05477517, -0.004433409, 0.041903235, -0.033916157, -0.0040109036, -0.033568893, 0.03789812, 0.024470564, -0.038662102, 0.00040731218, -0.028915549, -0.072230995, -0.0022080229, 0.046000957, -0.01776836, 0.01664554, 0.035096854, 0.03669427, -0.07172167, 0.023266714, 0.0031080162, 0.063016914, 0.0024583426, 0.02181978, -0.025466055, -0.036184948, 0.043778464, -0.0039732833, 0.026114283, -0.039680745, -0.005281313, -0.019990854, 0.0075009107, -0.007987081, -0.039634444, -0.0055272914, -0.016217247, 0.021680873, 0.017455824, -0.0150365485, -0.041463368, 0.028359925, 0.0385695, 0.04127816, -0.024748376, 0.010336904, 0.04150967, 0.08130617, 0.02433166, 0.01067838, 0.049589355, 5.2315743e-05, -0.018219804, -0.0038459531, -0.013300226, -0.034402326, -0.03305957, 0.0004138234, -0.023984395, 0.0114713, 0.0676008, 0.038708404, 0.041139256, 0.045908354, -0.007280977, -0.02004873, -0.025165092, 0.01277933, -0.0020054518, -0.0082301665, -0.026507849, -0.030813927, 0.008872605, -0.023602404, -0.026021678, 0.0043523805, 0.037712913, 0.010458446, 0.020685382, -0.0033684645, -0.022931026, -0.042065293, -0.03762031, -0.06963809, -0.02655415, -0.031693663, 8.984562e-05, 0.008507977, -0.04755207, 0.0006840385, 0.0026623604, -0.014573529, 0.008178077, 0.015430114, -0.016784446, 0.019111117, 0.031253796, 0.0021038435, 0.012883509, -0.055145584, 0.061211135, -0.007471972, 0.0029430657, -0.02087059, 0.037712913, 0.058062606, -0.026276339, -0.031994626, 0.062322382, -0.02511879, 0.03553672, -0.0033916156, 0.017722059, 0.012952962, -0.02087059, -0.034587532, -0.043616407, -0.01641403, -0.040722538, 0.01495552, -0.03882416, 0.06338733, 0.0063086366, -0.006250759, -0.055284493, 0.057043966, 0.013705368, 0.010064879, 0.0022716878, -0.008432737, 0.07426828, 0.02798951, -0.013531736, -0.037481405, 0.06824903, -0.030536115, -0.034356024, -0.014700859, -0.03812963, -0.028660888, -0.04144022, 0.0014512758, -0.035559874, 0.014828189, 0.014816614, -0.0135433115, -0.019527834, -0.086538285, 0.00031995348, -0.0073446417, 0.010823074, -0.007923416, -0.033476286, -0.0132655, -0.0018043279, 0.02194711, 0.013022414, 0.010556838, 0.020442298, -0.0071536466, -0.043292295, 0.019574136, 0.014527227, -0.01823138, 0.0241233, 0.015395388, -0.069962196, 0.011234003, -0.016703418, -0.11455095, -0.008241742, 0.027943209, -0.02158827, 0.007946567, -0.023266714, 0.017455824, 0.048431806, -0.0028837414, 0.054451056, 0.03333738, 0.016217247, 0.02581332, -0.035305213, 0.050144978, 0.022861572, 0.01698123, 0.00010987662, -0.016124643, -0.019794071, -0.01195747, -0.033707798, -0.020060306, -0.037319347, 0.049080033, -0.012003773, 0.010655229, 0.038430594, -0.017513702, 0.013334952, 0.03516631, 0.029586926, 0.021761902, 0.05236747, -0.03516631, -0.028383076, 0.0241233, -0.010174846, 0.08167659, 0.004520225, -0.018474465, 0.026808811, -0.013508585, 0.04778358, 0.027873755, -0.006048188, -0.037249893, 0.021090524, -0.01290666, 0.014805038, -0.03914827, -0.0458389, 0.030536115, 0.038916763, 0.028406227, -0.0014454881, -0.028197868, -0.03474959, -0.023521375, 0.019111117, 0.08593636, -0.05500668, -0.0602851, -0.015233331, -0.020233938, -0.02581332, 0.00040116272, 0.02025709, -0.0038401654, -0.04604726, -0.006077127, -0.033707798, -0.00485302, -0.015951011, -0.009329837, -0.0018622053, -0.045491636, 0.00041635553, -0.023451922, 0.007402519, 0.017710485, -0.041417066, -0.04611671, 0.07297182, 0.017988296, -0.0014404238, 0.0180809, 0.011141399, 0.036786873, 0.015048124, 0.010099606, -0.058108907, -0.025072489, -0.011922744, 0.045074917, 0.025743866, -0.004227944, 0.0035420968, -0.062044572, -0.03690263, 0.012964537, 0.01080571, 0.02581332, 0.044727653, 0.04609356, 0.014724011, -0.005000607, 0.006476481, -0.07162907, 0.025604961, 0.020801136, 0.02458632, -0.01216583, -0.024655772, 0.012107952, -0.048941128, 0.025836471, -0.013740094, 0.055840116, -0.007182585, -0.005822466, -0.019006938, -0.025929075, 0.010197998, 0.0061060656, -0.017733635, -0.019886674, 0.008091261, 0.016182521, 0.019354202, 0.031508457, -0.0127098765, -0.035976592, -0.070749335, 0.02181978, -0.0070668305, 0.025026187, 0.00699159, 0.0010150248, -0.014943944, -0.022352252, -0.045399033, 0.0037330922, -0.026230037, 0.01723589, 0.051348828, -0.0080565335, -0.006522783, -0.0004662748, -0.059312757, -0.003892255, 0.019944552, -0.020361269, -0.020372845, 0.035073705, -0.007906052, 0.00548099, -0.04438039, 0.0065343585, 0.021472516, 0.021067373, 0.06653586, -0.020118184, 0.0039067245, -0.019851947, -0.015175454, 0.01580053, -0.013774821, -0.032156684, -0.014573529, 0.02258376, -0.0014845553, -0.007917629, -0.042111594, 0.03037406, 0.018393436, -0.011303456, -0.014226264, 0.0068989857, 0.008536916, 0.02063908, 0.01953941, 0.013740094, -0.002844674, 0.058062606, -0.00791184, 0.0507006, -0.03088338, 0.053895433, 0.0039964346, -0.0022890512, -0.05042279, 0.0136590665, 0.023938091, 0.008872605, 0.012119527, -0.003003837, -0.00061784126, -0.034124516, 0.035583023, 0.02437796, 0.011853292, 0.007651392, 0.029077604, 0.006516995, 0.02435481, 0.016066765, -0.02511879, -0.001166953, 0.0027679866, -0.029610077, -0.04678809, 0.0068179574, -0.0016900201, 0.030327758, 0.017143285, -0.011349758, -0.0069105616, -0.03407821, -0.018127201, -0.06588763, -0.05593272, -0.008062322, 0.017201163, -0.009196718, 0.021217855, 0.0017305342, 0.055377096, 0.0039269817, 0.030559266, -0.011118248, -0.010765196, -0.015707927, 0.007211524, -0.027109774, 0.0059382212, -0.033175323, -0.020222364, -0.0024988567, 0.07982451, 0.034911647, 0.03646276, 0.014133661, -0.02822102, -0.021669298, -0.00084501004, -0.06463748, 0.009960701, 0.0026073768, 0.026901415, 0.027410736, 0.04435724, 0.020731684, -0.02486413, -0.00070610427, 0.013334952, -0.012408914, -0.062137175, -0.041092955, -0.016043615, -0.03479589, -0.006875835, 0.007142071, 0.031577908, 0.012501518, -0.025049338, 0.0065517216, 0.009897036, -0.023984395, 0.0044015762, 0.016865473, -0.0017941993, -0.032365043, -0.026716208, 0.0036318067, -0.04796879, 0.019145843, 0.018381862, -0.01531436, 0.010516323, 0.01810405, -0.028915549, 0.051487733, -0.008791577, 0.013994755, 0.008612157, -0.044611897, 0.018451314, -0.042551465, 0.019863524, 0.0034060848, -0.00970604, -0.010493172, -0.03833799, 0.031184342, 0.0057993154, -0.0015207287, -0.0021241005, -0.020824289, -0.029471172, 0.0023758672, 0.02870719, 0.047135353, -0.03521261, 0.004931154, -0.006250759, -0.026206886, 0.024169602, 0.0062623345, -0.054682568, 0.035073705, 0.031369552, 0.015592171, 0.03400876, -0.024771526, 0.022421705, 0.013624339, 0.00663275, -0.0011119695, -0.025767017, -0.013994755, 0.026739359, 0.036717422, -0.0040456303, 0.00024887282, -0.040375274, 0.009769705, -0.0072867647, -0.016830748, -0.03349944, 0.048339203, 0.084408395, -0.035444118, 0.0008175183, 0.021680873, -0.05667355, -0.015974162, 0.009410865, 0.04917264, 0.017687334, -0.01436517, 0.053386115, -0.042806122, -0.012501518, -0.0029748983, 0.025836471, 0.006904774, 0.041046653, 0.01254782, -0.005318933, -0.0020213681, -0.041463368, -0.011737537, 0.006904774, 0.019388929, -0.013740094, 0.03231874, -0.034147665, 0.006667476, 0.021935534, -0.04081514, -0.007743996, 0.012096376, 0.018300833, 0.00837486, 0.0067600803, 0.0073735807, -0.0053507653, -0.037041534, 0.0048674894, 0.010852012, -0.04537588, -0.02486413, -0.01316132, -0.014943944, -6.633293e-05, -0.029725833, 0.0069395, 0.027711699, -0.0118475035, 0.008878393, -0.048431806, 0.017571578, 0.029633228, -0.027850604, 0.0102385115, 0.01556902, 0.023556102, 0.023093082, -0.023625555, 0.0063954527, -0.0014339125, -0.051765546, 0.0044623474, -0.07389786, 0.017050682, -0.0066616884, 0.010221149, -0.03794442, 0.029008152, -0.012223707, 0.010296389, 0.014307293, 0.013913726, 0.036323857, 0.0313927, 0.040629935, 0.002692746, -0.002446767, 0.061350044, 0.009208295, -0.011511815, 0.0047951424, 0.007211524], [0.033199992, -0.014084486, -0.024561824, 0.00937977, 0.02793166, 0.01751365, -0.027599422, -0.00047907425, -0.01550836, 0.024348244, -0.061084192, 0.008157611, 0.005858648, -0.02400414, -0.030114934, 0.035573117, -0.02852494, 0.031704925, -0.041482195, -0.052303635, 0.0010441742, -0.05894838, -0.067111924, -0.013633593, -0.008270334, 0.017300067, -0.015294779, -0.001211776, -0.046252172, 0.010334952, 0.05301557, 0.011129947, 0.028975835, -0.041363537, -0.014226873, -0.035525654, -0.043214574, 0.004752179, -0.050737374, 0.0035893489, -0.046940375, -0.0028759288, 0.029165683, -0.0689155, -0.017098352, -0.009712007, -0.029687772, -0.0002163621, 0.02676883, -0.039156534, -0.006526089, -0.0031562538, 0.008388991, 0.011385059, -0.038871758, 0.05144931, 0.03452894, -0.10669562, 0.05467676, -0.00948656, -0.020658037, 0.008875481, 0.041411, -0.022983698, -0.01992237, -0.046157245, 0.027907928, 0.048838876, 0.016611863, 0.042502638, 0.015911791, 0.020100353, -0.006081128, -0.0037139377, -0.030660752, -0.011035023, 0.10137982, 0.057382118, 0.019329088, -0.034339093, -0.012245316, -0.03490864, 0.03255925, 0.010946031, 0.032227013, -0.015342241, 0.02381429, -0.09516224, 0.0020379196, -0.0026890452, 0.025155107, 0.020847887, 0.020254606, 0.024443168, -0.052493487, 0.033911932, 0.023043025, -0.024822868, -0.001464662, -0.0073448163, -0.01889006, -0.045421578, -0.07741128, -0.041695774, 0.021631017, 0.028192703, 0.034315363, -0.022259895, 0.008377125, 0.01753738, 0.027504498, -0.008145745, -0.002732058, 0.038848028, -0.02406347, 0.05605317, -0.040983837, -0.044994418, -0.013218296, 0.0113316635, -0.09160256, -0.0058616144, 0.05591078, 0.028548673, -0.0074575394, -0.001038983, 0.019151105, 0.04701157, 0.018854463, -0.017572977, -0.011960541, 0.071146235, 0.016232163, 0.023327801, 0.052161247, 0.01878327, 0.07461099, -0.02755196, -0.0042983196, 0.020895349, -0.043404423, 0.009587417, -0.033437304, 0.031301495, -0.028762253, 0.007748247, -0.0128267305, 0.009587417, -0.07404144, -0.02053938, 0.03910907, -0.018807001, 0.007006646, 0.016955966, 0.06991221, 0.014760827, -0.0078016426, 0.034030586, -0.021037737, 0.0778859, -0.0037495347, -0.060372256, 0.03201343, 0.045326654, 0.0063481047, -0.05263587, 0.050594985, -0.023387128, -0.058283906, 0.042241592, 0.05087976, -0.04432994, 0.017122084, 0.015947388, -0.06393194, 0.0144048575, 0.025012719, -0.0011420655, -0.03740042, -0.047533657, -0.041553386, 0.05301557, 0.03789878, -0.07755367, 0.016683057, 0.036546096, 0.056860033, 0.04003459, 0.053632583, -0.03564431, 0.007516868, 0.00023397511, -0.01472523, -0.046323366, 0.0002239635, -0.040770255, -0.0053780903, -0.07252265, 0.009919655, 0.007593994, 0.029972546, -0.020337665, -0.022188703, -0.032701638, -0.011260469, 0.014131948, -0.0058556814, 0.053205423, -0.0051200134, 0.019874906, 0.010667189, -0.014938811, -0.013989561, -0.026602712, -0.008116081, 0.026507786, -0.03374581, 0.022959966, 0.035383265, -0.030874332, 0.074516065, -0.052161247, 0.051923934, -0.011100284, -0.018118795, 0.06905788, 0.01586433, 0.018664613, 0.04145846, -0.013645458, 0.0038296275, -0.00504882, 0.02203445, 0.049266037, -0.051211998, -0.025772117, -0.041411, -0.0072261603, 0.03832594, 0.017596709, 0.008549176, 0.0005320987, -0.049266037, -0.00069821737, 0.01705089, 0.029948814, -0.0064845593, 0.009456896, -0.025938237, -0.0006485301, 0.0042538233, -0.013158968, 0.06279284, 0.040722795, -0.00824067, 0.10223415, -0.0069591836, -0.049598273, -0.007718583, 0.00963488, -0.02224803, 0.053110495, 0.0043161176, 0.09074823, -0.012174122, -0.010892635, 0.034932375, -0.07337697, -0.07166832, -0.052825723, 0.022319224, -0.010815509, -0.004870835, 0.022176836, 0.054771684, -0.025012719, 0.074421145, -0.008027089, -0.03369835, 0.036664754, 0.029189415, 0.017347531, 0.013870905, -0.0021728908, 0.028453747, 0.03374581, -0.019103643, -0.047913358, -0.022793848, 0.0066269464, -0.03524088, -0.01983931, 0.026033161, 0.049266037, 0.041909356, -0.0007449382, -0.009575552, 0.0051200134, -0.033105068, -0.00013626918, 0.020634307, -0.0077126506, -0.04836425, -0.039275188, 0.0038859893, 0.029094491, -0.026460323, 0.07897754, 0.002555557, -0.052256174, 0.042692486, -0.020563113, -0.033461038, -0.042977262, 0.0007408594, -0.003319406, -0.0047610784, 0.055815857, 0.06972236, -0.026626442, -0.011990205, -0.006205717, -0.057856742, -0.00876869, 0.031657465, 0.025131375, 0.060134944, 0.010180699, -0.036308784, 0.021892061, -0.0854799, -0.007160899, -0.03505103, -0.0161847, -0.0425501, -0.072000556, -0.03604774, -0.05890092, 0.014131948, 0.01567448, -0.028785985, -0.009771335, -0.034339093, -0.0064430293, 0.011462185, -0.012025801, -0.033199992, -0.020563113, 0.046726797, 0.020895349, 0.0012362489, 0.060182404, -0.008021156, 0.043356963, 0.0010085774, -0.008074552, 0.028311359, -0.046916645, -0.023826158, -0.017205143, 0.059660316, -0.08609691, 0.0003546707, 0.06184359, 0.014926945, -0.030494632, 0.0059951027, 0.018012006, -0.007505002, 0.005879413, -0.010151034, 0.019673191, -0.019507073, -0.0447571, -0.0075880615, -0.021915793, 0.015567688, -0.019103643, -0.019613864, -0.0013163418, -0.009213651, -0.02966404, 0.006650678, 0.052113786, 0.030542096, 0.0071905633, -0.010067975, -0.032986414, 0.008157611, 0.016255895, 0.0006704073, -0.009427232, -0.002583738, -0.07100385, 0.008780556, 0.02425332, 0.005125946, 0.018901926, -0.021512361, 0.005971371, -0.017561112, 0.048886336, -0.01212666, -0.0222243, 0.046157245, -0.049171112, 0.016766116, -0.039797276, -0.025202569, 0.05681257, -0.020207144, 0.016054178, -0.0338882, 0.012013936, 0.013206431, 0.024193991, -0.031681195, 0.04079399, -0.020313935, -0.003773266, 0.004428841, -0.009628947, 0.00433095, 0.030755676, -0.064691335, 0.069627434, -0.024894062, 0.02034953, 0.0051229796, -0.027694348, 0.0032867757, -0.015401569, 0.008454251, -0.0049360963, -0.039987125, -0.069390126, -0.0259857, -0.029592846, -0.0070837727, 0.00118582, 0.009563686, -0.024348244, 0.0060158675, -0.0041707642, -0.041149955, -0.010441742, -0.047818433, -0.005265367, 0.016303357, -0.010975695, -0.013408146, -0.021322511, -0.076224715, -0.0091068605, 0.055531085, 0.001879217, 0.04202801, 0.018830733, 0.049218576, -0.070386834, 0.0022010717, 0.019590132, 0.064691335, -0.05050006, 0.033603426, 0.017157681, -0.017478053, 0.01878327, 0.0082940655, -0.0052535012, 0.011468118, 0.0018777337, -0.0076177255, -0.0016730519, 0.003758434, -0.003562651, -0.03718684, 0.018640883, 0.012138525, -0.021097066, -0.010714651, -0.006615081, 0.043072186, 0.035193417, 0.03711565, -0.009356039, 0.010661256, 0.031657465, 0.061701205, -0.021500496, -0.029972546, 0.070386834, 0.025677193, -0.0207055, -0.026816292, -0.009978983, -0.008786488, -0.04081772, -0.013704786, 0.017572977, 0.004983559, 0.05510392, 0.031538807, 0.061463892, 0.03856325, 0.003708005, -0.021536093, -0.019863041, 0.00929671, 0.0035893489, -0.0033757677, -0.000723061, -0.051496774, 0.0058912784, -0.008721228, 0.026840024, 0.0017027159, 0.035003565, 0.017691633, -0.0068167965, -0.013064044, -0.030091202, -0.048221864, -0.034837447, 0.014238739, 0.011147746, -0.010008647, 0.015449032, -0.059660316, -0.031159107, -0.006561686, 0.0020690667, -0.009065331, 0.015104929, -0.003473659, -0.00703631, 0.049550813, 0.020503784, -0.0026667973, 0.015057467, -0.032630444, 0.039987125, -0.00070266693, -0.020836022, 0.0016344886, 0.0031176906, 0.039227728, 0.012613149, 0.0021981054, 0.057524506, -0.039559964, 0.07204802, 0.027124798, 0.01358613, -0.028358823, -0.019827444, -0.057904206, -0.061985977, 0.0035359536, -0.029592846, 0.029189415, 0.036000278, 0.08410349, 0.022793848, -0.056622718, -0.03656983, 0.004149999, -0.0044674044, -0.016149104, 0.0016611862, 0.020681769, 0.029877622, -0.016611863, -0.020859754, 0.0034469615, 0.070434295, -0.011764758, -0.053300347, 0.005648033, -0.03172866, -0.041505925, -0.0021091131, 0.007131235, -0.022461612, 0.031681195, 0.0034973903, -0.017442456, -0.051117074, -0.027694348, 0.009628947, 0.0008357843, 0.042977262, 0.018961255, -0.023458323, -0.024490632, 0.0020898315, 0.037614003, -0.003120657, -0.005404788, -0.0009915206, 0.0023686737, -0.028691059, 0.011100284, 0.0020275372, -0.01875954, -0.0214649, 0.015282913, -0.04508934, 0.013609862, 0.017679768, -0.030708214, -0.022971833, 0.017169546, -0.019257894, 0.006001035, 0.01309964, -0.004414009, 0.052256174, 0.01929349, 0.028857177, 0.0335085, 0.03543073, 0.069437586, -0.03025732, 0.03023359, 0.035169687, 0.013218296, 0.013230162, -0.021607287, 0.007896568, -0.029094491, -0.0035389198, -0.033603426, -0.025534805, -0.0016196566, 0.016967831, 0.035407, 0.07394652, -0.03467133, 0.016766116, -0.01271994, 0.025321225, 0.007694852, 0.05182901, -0.02755196, -0.021251319, 0.052873183, -0.037447885, 0.06834595, -0.027053604, -0.04836425, -0.012506359, -0.008786488, 0.043665465, -0.00019244546, -0.0044377404, -0.011349462, -0.003906754, -0.033223726, 0.013431877, -0.007659255, -0.026080623, -0.0014260988, -0.00064296805, 0.002776554, -0.019981697, -0.0023998208, -0.018415436, -0.028714791, 0.058046594, 0.07010206, -0.059850167, -0.042312786, -0.051734086, -0.032274477, 0.0014298067, 0.00088102196, 0.05761943, -0.04432994, -0.025321225, -0.017976409, -0.033650886, -0.0071905633, -0.004603859, 0.0025451747, -0.002150643, -0.045991126, 0.008424588, -0.047557388, -0.007599927, 0.007593994, 0.003568584, -0.02947419, 0.04869649, -0.008655967, -0.0017071655, 0.0012963186, -0.03386447, 0.044970684, 0.028619865, -0.0070778397, -0.019696923, -0.013942099, -0.026056893, 0.07133608, 0.011551177, 0.0029486055, 0.0040936377, -0.05643287, -0.057097346, 0.018332377, 0.026697636, 0.0033075404, 0.050025437, 0.0029426727, -0.03718684, -0.003782165, 0.0069710496, -0.072949804, 0.041743238, 0.024799136, -0.006241314, -0.01686104, -0.0402719, 0.014582842, -0.044614717, 0.0070897057, -0.014191276, 0.059233155, -0.019246029, 0.014321798, -0.02562973, 0.005167476, -0.0025303427, -0.0144048575, -0.008786488, -0.017489918, 0.025297493, 0.041411, 0.022307359, 0.0021105965, -0.014986273, -0.026104355, -0.040580407, -0.0028833447, -0.020491919, 0.06986475, -0.013882771, -0.022307359, -0.0060336655, -0.019578267, -0.02195139, 0.014084486, -0.040176976, 0.017857753, 0.043214574, 0.016611863, -0.004244924, -0.001098311, -0.01189528, 0.013265759, -0.02503645, 0.0070481757, -0.011313865, 0.02097841, 0.010156968, 0.01039428, -0.029118221, 0.03424417, 0.014084486, 0.02525003, 0.07105131, 0.014048889, -0.011996138, 0.006241314, -0.0015692277, 0.010032378, 0.0049004992, -0.039227728, -0.027670616, -0.024288915, 0.007297354, 0.008157611, -0.0042478903, 0.03566804, -0.005431486, 0.0063362387, 0.010091706, 0.0056569325, 0.0035863824, 0.03543073, 0.02852494, 0.029402995, -0.0031414218, 0.032701638, -0.009498426, 0.02833509, -0.001975625, -0.010121371, -0.0203258, 0.0065438873, -0.019673191, 0.013728518, 0.04411636, -0.027646884, -0.033366114, -0.018545957, -0.022212433, -0.023173548, 0.018462898, 0.03778012, 0.0073804134, -0.0128385965, 0.0064489623, 0.0072142943, 0.02254467, 0.03526461, 0.015140526, -0.012316509, -0.011242671, -0.02072923, -0.037875045, 0.021085199, -0.0519714, -0.0005224579, 0.03702072, -0.01569821, -0.015401569, -0.040224437, -0.005280199, -0.0114265885, -0.045397848, -0.029901352, 0.028287629, 0.027029874, 0.028833447, -0.033769544, 0.05377497, 0.0026252675, 0.03581043, -0.03569177, -0.01726447, 0.0036397777, 0.0052831657, -0.037827585, 0.048482906, 0.00590611, -0.050547525, -0.0032274476, 0.032606713, 0.04974066, 0.009575552, -0.0019340954, -0.006893923, -0.017964542, -0.018332377, -0.038207285, -0.006389634, 0.016540669, -0.00783724, 0.02926061, -0.0024191025, 0.0319897, -0.03203716, 0.001001903, -0.010512936, -0.0050606853, -0.050927226, 0.013443743, -0.013372549, 0.006389634, -0.017952677, -0.02427705, 0.036878336, 0.025724655, -0.0327491, -0.0060395985, -0.035573117, 0.012174122, -0.0047343806, -0.0010871871, 0.020302068, -0.033650886, -0.04062787, 0.017869618, -0.04525546, -0.007095638, -0.028952103, -0.027979122, 0.039583694, 0.021180125, -0.01140879, -0.00049279386, 0.004772944, 0.006976982, 0.03910907, 0.010548533, -0.030992988, -0.032345667, 0.012008003, 0.009706073, 0.012435165, 0.01639828, -0.026128087, 0.030186128, -0.033532232, -0.009237382, 0.059897628, 0.007273623, -0.012102928, -0.0015098996, 0.04857783, 0.039726082, -0.050594985, 0.006520156, -0.042455174, -0.017347531, 0.0009210684, -0.02195139, -0.023149816, 0.035478193, 0.019613864, 0.042146668, 0.04684545, -0.0067456025, 0.008127947, 0.045065608, 0.0203258, 0.030589558, -0.032844026, -0.0075524645, 0.018035736, -0.006947318, 0.0342679, 0.0036308784, -0.0015247316, -0.019803712, -0.007955896, -0.014748961, 0.0021773404, 0.049266037, 0.04003459, 0.004861936, -0.01870021, 0.004001679, -0.03120657, -0.012565687, 0.029877622, 0.033532232, -0.025368687, -0.009735738, 0.06303015, -0.03585789, 0.010257825, -0.032440595, 0.0075583975, 0.019364685, 0.043024722, 0.007878769, -0.006561686, 0.014440455, -0.02100214, 0.0010864454, -0.005624302, 0.022948101, 0.005235703, 0.023660038, -0.037234303, 0.012791134, 0.027267186, -0.016967831, 0.004250857, -0.030969258, 0.01588806, -0.010667189, 0.009207718, 0.0043784124, -0.0063718357, 0.022734521, 0.02235482, 0.0045860605, -0.038017433, -0.030589558, 0.009089062, 0.0041677975, -0.018688345, -0.003737669, 0.057144806, 0.008626303, 0.008572907, 0.033983123, -0.055008996, -0.008501714, 0.037851315, 0.017489918, -0.00014924721, -0.019507073, -0.017596709, 0.007125302, -0.043760393, -0.03778012, 0.023137951, -0.0207055, -0.0060751955, -0.043997705, 0.057429582, 0.038610715, 0.0035507856, -0.042478904, -0.013372549, -0.01253009, 0.005404788, -0.008602572, 0.030779408, 0.018332377, 0.0398922, 0.03429163, 0.020468188, -0.023043025, 0.046940375, -0.0065972824, 0.00078164745, 0.016789846, 0.007825374], [0.0038762626, -0.009705727, -0.021002952, 0.053339303, 0.008656786, 0.006510674, -0.026283832, 0.027031355, 0.010628073, 0.07629546, -0.004063143, 0.022027781, -0.0163008, -0.016385198, -0.022642678, 0.011628788, -0.03867823, -0.005024673, -0.02406538, -0.0125631895, -0.009072745, -0.042150587, -0.033180326, -0.0038491348, 0.034265436, 0.019266773, -0.03501296, 0.0055220164, 0.0027173022, -0.00015541974, 0.042656973, 0.049288217, 0.0559918, -0.008144371, 0.03195053, -0.005624499, -0.035374664, 0.03742432, 0.006133899, -0.009193313, -0.024619995, -0.013045462, 0.03040726, -0.038919363, -0.005528045, -0.008843666, 0.0067578387, 0.035856936, -0.03556757, -0.025970357, -0.00049018447, 0.030889532, -0.045068335, -0.012707871, -0.018724216, 0.042247042, 0.0483719, -0.08690544, 0.031588826, -0.021063237, -0.07711532, 0.052760575, 0.060910974, 0.0057510957, -0.03267394, 0.02041217, 0.013829154, 0.036483888, 0.04846835, 0.05507548, 0.0137568135, 0.047093876, 0.027682422, -0.0026057768, -0.0035145583, -0.01490221, 0.08979908, 0.0005726982, -0.00062356284, -0.06066984, 0.013021348, 0.0045213015, -0.004644884, 0.02686256, 0.022582395, -0.02172636, 0.023896586, -0.12895958, -0.046418697, -0.0021973525, 0.045984652, 0.0148178125, 0.0018929183, -0.013720643, -0.043404493, 0.055895343, 0.01637314, -0.00088692864, -0.034096643, 0.040149156, -0.015396539, -0.065444335, -0.068675555, -0.0701706, 0.023329915, 0.012768156, 0.0013963287, 0.00051128387, -0.02316112, -0.0958757, 0.01497455, -0.012731985, 0.0062695383, 0.025849788, 0.023257576, 0.04391088, -0.00894012, -0.015312141, -0.011273112, -0.0062333676, -0.08232386, -0.07706709, 0.056425843, 0.031371806, 0.024837017, 0.015734129, 0.0142632, 0.08931681, 0.017084492, -0.0066372706, -0.028791647, 0.001168003, -0.0073245084, 0.04892651, 0.06356347, -8.227827e-05, 0.049625807, -0.014371711, -0.029322147, 0.025126379, -0.07243728, 0.04048675, 0.010055374, 0.033976074, -0.00950679, 0.0005451936, -0.012201486, -0.03354203, -0.043525063, -0.019122092, -0.018736273, -0.00027353875, 0.010212113, 0.010513533, 0.061779063, -0.0031528543, 0.03240869, 0.0070230886, -0.024402972, 0.019315, 0.036363322, -0.04497188, 0.013672416, 0.027899444, -0.006824151, -0.034265436, 0.02674199, -0.030696623, -0.018868899, 0.038075387, 0.021557566, -0.027827105, 0.037786026, -0.0031136696, -0.06284006, 0.016505765, 0.026717877, -0.018398684, -0.035447005, -0.05145844, -0.0034904447, 0.08690544, 0.05232653, -0.034337778, 0.016819242, 0.05681166, 0.015107175, 0.008258911, 0.03556757, -0.05150667, -0.0047865515, -0.013539791, -0.044200245, -0.0137327, -0.008891893, 0.0065408163, 0.020375999, -0.030190237, 0.030455487, 0.013660359, 0.00097283337, -0.05300171, 0.015420653, -0.02312495, -0.04632224, 0.0021265189, 0.016228458, 0.007155713, -0.021135578, 0.010851123, 0.030889532, 0.00055385946, -0.00043705915, -0.0008680899, -0.03195053, 0.021364657, -0.047865514, -0.0093681365, -0.017687332, 0.014649017, 0.06467269, -0.021907212, 0.0125631895, -0.022715019, -0.027610082, 0.016650446, 0.029153353, 0.009759983, -0.010899351, 0.040269725, -0.008391536, -0.01640931, -0.023305802, 0.0030277648, -0.08058768, -0.025391629, -0.0304796, -0.015914982, 0.032842733, -5.0205286e-05, -0.00054896134, 0.03930518, -0.04275343, -0.03682148, -0.00011199641, 0.052905258, 0.029611511, -0.017132718, 0.0049372613, 0.012291912, -0.024439141, -0.030455487, -0.0066493275, 0.027489513, 0.031154782, 0.080201864, 0.052905258, -0.023848359, -0.015155403, 0.017410025, -0.030238464, 0.03761723, -0.041330725, 0.0799125, -0.022932041, -0.032866847, 0.046153445, -0.023546938, -0.04328393, -0.028237035, 0.022944098, -0.026380287, 0.03836475, 0.018181661, 0.05821025, 0.028984558, 0.05300171, 0.013202201, -0.048034307, 0.06284006, -0.005597371, 0.053580437, 0.05406271, -0.007197912, 0.011007862, -0.00097057276, -0.045478266, -0.052808803, -0.057631522, -0.0033367206, -0.030720737, -0.012430565, 0.051554896, -0.012852553, 0.04776906, 0.0285264, 0.011074174, 0.026524968, -0.024101552, -0.0015734129, 0.011019919, -0.019302944, -0.019821387, -0.025415743, -0.012183401, 0.057920888, 0.01403412, 0.06337056, -0.034795936, 0.024692334, 0.07436637, 0.0036321122, -0.01915826, -0.03267394, -0.012316026, -0.011405737, 0.027585968, 0.04451372, 0.05319462, -0.044127904, -0.013684473, -0.012804326, -0.09804593, -0.016843356, 0.02361928, 0.03060017, 0.007095429, 0.001874833, -0.012731985, 0.039522205, -0.037665457, 0.00614897, -0.014118518, 0.0134915635, -0.07730823, -0.06370816, -0.013238371, -0.066119514, -0.01942351, -0.00962133, -7.836923e-05, 0.0032342377, -0.032456916, -0.020761816, -0.011170629, 0.012279855, 0.0018235917, -0.002804714, 0.04866126, 0.01863982, 0.0013699543, 0.05425562, -0.020110749, 0.026766105, 0.03768957, 0.009416364, -0.009983034, -0.033325005, -0.030383147, -0.010989777, 0.04644281, -0.035615798, -0.04101725, 0.06404574, 0.028743422, -0.030359033, -0.010260341, 0.014781642, -0.004741338, -0.027513627, -0.043525063, 0.010405022, -0.06915783, 0.004738324, -0.05126553, -0.00411137, 0.041933566, 0.016807185, 0.00314984, 0.024909357, -0.00045702822, -0.07822455, -0.012587303, 0.039594546, 0.02712781, -0.016988037, -0.023522824, -0.017651161, 0.0050909854, 0.0016563034, 0.014504336, 0.034337778, -0.038991705, 0.00244301, 0.026790218, 0.033493802, -0.04229527, 0.004005873, 0.0024580809, -0.014046177, -0.03149237, 0.024909357, -0.011930208, -0.020580964, 0.033107985, -0.07161742, 0.021376714, -0.046105217, 0.008156428, 0.03255337, -0.039980363, -0.00039825132, -0.0026931886, 0.031227123, 0.004623784, 0.04878183, -0.029008672, 0.02278736, 0.014480222, 0.042946335, 0.048082534, -0.010254312, 0.0043525063, 0.040655542, -0.074077, 0.024511483, -0.038919363, 0.033855505, -0.03060017, -0.012949008, -0.028237035, -0.010145801, -0.008403593, 0.0119000655, -0.024318574, -0.020388056, -0.0315406, -0.041812997, -0.030238464, 0.022811474, 0.01754265, -0.054110937, -0.024053324, 0.003553743, -0.025391629, 0.03863, -0.06930251, -0.037834253, 0.020930612, -0.041403066, -0.04504422, -0.004364563, -0.056956343, -0.0076681273, -0.045405924, -0.008228769, 0.031661168, 0.051892485, 0.050300986, -0.0625507, 0.010187999, -0.032505143, 0.026476743, -0.04024561, 0.04017327, 0.0035929277, 0.0012508935, 0.04764849, 0.015517107, 0.023329915, -0.020496568, -0.003237252, -0.0041626114, 0.0073245084, 0.01214723, -0.03995625, 0.003030779, 0.029442716, 0.023040554, 0.008391536, -0.031251237, -0.009175228, 0.05112085, 0.032842733, 0.020568907, -0.025705107, 0.049818713, 0.016771015, 0.074655734, 0.021895157, -0.035133526, 0.038871136, 0.006158013, 0.011707157, -0.017422082, -0.058596067, 0.013407166, -0.017928468, 0.0062092543, -0.041861225, 0.027971786, 0.07706709, 0.042946335, 0.0013360446, -0.021364657, -0.0073667075, -0.040004477, -0.029900875, 0.008512104, 0.022401541, -0.0062936516, -0.023848359, -0.036073957, 0.006938691, -0.015360368, -0.023414314, 0.016650446, 0.013805041, -0.0022365372, 0.024716448, 4.921625e-05, -0.029563284, -0.036773253, -0.012038719, -0.045333583, -0.013334826, 0.007547559, 0.005597371, 0.033059757, -0.024716448, -0.012514963, 0.000645039, -0.0010843588, -0.0152398, -0.00584755, 0.018121377, 0.024981698, -0.016216401, -0.00057684275, -0.017168889, -0.02826115, 0.04241584, -0.026717877, 0.0025816632, -0.013141916, 0.04263286, 0.025705107, 6.5370485e-05, -0.0074571334, 0.007426991, -0.023607222, 0.060525157, 0.010091545, 0.0156135615, 0.020062523, -0.022076009, -0.041668314, -0.039136387, -0.031829964, -0.045140676, -0.0048830057, 0.011785526, 0.08859339, 0.009838352, -0.005657655, -0.04899885, 0.018579535, 0.014323483, 0.00020232824, 0.016553992, 0.018953295, 0.02686256, -0.005024673, -0.028791647, 0.0047594234, 0.07224437, 0.0218831, -0.0421747, 0.013841211, -0.025873901, -0.04311513, 0.000412192, -0.0025078154, -0.028743422, 0.025560426, 0.01610789, -0.021666078, -0.060525157, -0.037062615, 0.006179112, 0.021111464, 0.020267488, 0.018326342, 0.0059289336, 0.027248377, 0.024089495, 0.021810759, 0.012611417, -0.0011808133, 0.04562295, -0.052953485, -0.030117897, 0.020617135, 0.0005742053, -0.01343128, -0.022148348, 0.020315714, -0.034458347, 0.021545509, 0.011146516, -0.057969116, -0.004494174, 0.03428955, -0.03173351, 0.015432709, -0.025391629, 0.00038883192, 0.029129239, 0.0017798857, 0.030093784, 0.0125511335, -0.005726982, 0.07354651, -0.036845595, 0.039039932, -0.0054647466, 0.025078153, 0.01580647, 0.012719928, -0.0036471833, -0.01259936, 0.017410025, 0.0054044626, -0.009078774, -0.010194028, 0.003779808, 0.01184581, 0.015384482, -0.012623474, 0.018760387, 0.03074485, 0.022461826, -0.030527828, 0.104749516, -0.021858986, -0.03428955, 0.015625618, 0.016156118, 0.07542737, -0.05059035, -0.002878562, 0.017699389, 0.015673846, 0.0570528, -0.005398434, 0.016638389, 0.009977005, -0.013925609, -0.023788074, 0.002400811, -0.040872566, -0.042873997, 0.03428955, 0.009494733, 0.0025304218, -0.013672416, -0.020617135, -0.027344832, 0.00830111, 0.017627047, 0.068048604, -0.0370385, -0.05005985, -0.026380287, -0.01904975, -0.0047624377, 0.0045665144, 0.028863989, -0.0035145583, -0.029490942, -0.0483719, -0.018507194, -0.038654115, -0.010971691, -0.0054828315, -0.004765452, -0.048347786, 0.044537835, -0.033325005, -0.002412868, 0.016349027, -0.07899618, 0.013334826, 0.03576048, 0.03600162, -0.02493347, -0.0098323235, -0.04550238, -0.0003072601, -0.012303969, -0.038798794, -0.03920873, -0.021412885, -0.06983301, 0.053435754, 0.040125046, 4.879238e-05, 0.013202201, -0.046274014, -0.03621864, 0.053918026, 0.002623862, 0.022847643, 0.07947845, -0.009952892, -0.0021641965, -0.022582395, 0.030359033, -0.036845595, 0.013672416, -0.008518132, -0.013949722, -0.015336255, -0.034795936, -0.003535658, -0.032722168, 0.037062615, 0.007487275, 0.033276778, -0.010742612, 0.008849694, -0.024716448, 0.007119543, 0.001087373, -0.006037445, -0.014383768, -0.019351171, -0.0061519844, 0.046008766, 0.021400828, 0.023872472, -0.041282497, -0.025656879, -0.031637054, 0.0005896531, 0.0060917004, 0.0421747, -0.021605793, 0.0086387005, -0.013817098, -0.009784097, -0.014673131, -0.0009683121, -0.046225786, 0.013672416, 0.024451198, 0.00259372, 0.007927349, 0.010640129, 0.00043140753, -0.0023480626, 0.023667507, -0.012780213, -0.016228458, 0.014576676, -0.00021080568, -0.01407029, -0.04933644, 0.015107175, 0.007487275, 0.048444238, 0.05435207, -0.036942046, -0.009645443, -0.02018309, -0.029973214, 0.021039123, 0.0022395514, -0.03132358, -0.014444051, 0.0006846004, 0.0108390665, 0.03428955, -0.023366086, 0.02920158, -0.0029735093, -0.022835586, 0.005145241, 0.022702962, 0.003478388, 0.031588826, 0.02867108, 0.02466822, 0.010923465, 0.037665457, 0.007288338, 0.0233902, -0.02787533, 0.027682422, -0.023185235, 0.006420248, -0.060284022, 0.016529879, 0.029611511, -0.00950679, 0.01607172, -8.5056985e-05, -0.03682148, -0.030841306, 0.061103884, 0.013298655, 0.03361437, -0.011966378, 0.004051086, -0.041668314, 0.020689476, -0.02414978, 0.0111585725, 0.0091028875, 0.0053321216, 0.01259936, -0.052374758, 0.023064665, -0.010953606, 0.014588733, 0.060284022, 0.01671073, -0.009295796, -0.030142011, -0.013708586, -0.026790218, -0.04846835, -0.026524968, 0.006896492, 0.014275257, 0.06341879, 0.008861751, 0.070604645, 0.018061092, 0.025608651, -0.02067742, -0.0057782233, 0.01747031, 0.024740562, -0.055557754, -0.019339114, -0.01810932, -0.0122316275, -0.002203381, 0.008578416, 0.024716448, 0.017108604, -0.0053140363, 0.02071359, 0.0051030423, 0.010959635, -0.04904708, -0.013817098, 0.024390915, 0.022051895, 0.029852647, 0.028743422, 0.034241322, -0.010983748, 0.01607172, -0.007764582, -0.03274628, -0.07325714, -0.042994563, -0.0050789285, -0.0062815947, -4.62256e-05, -0.003990802, 0.025367515, -0.01800081, -0.021702247, 0.042271156, 0.00020025598, 0.017602934, -0.006040459, 0.004328393, 0.020580964, -0.053049937, -0.015685903, 0.04188534, -0.078321, 0.0072461395, -0.008451819, 0.0031136696, 0.0034542745, -0.0031227123, 0.0025907059, 0.014528449, -0.01203269, 0.06428688, 0.027320718, -0.055220164, -0.03971511, -0.018097263, 0.010501476, 0.023643393, -0.0025379572, 0.0032312234, -0.024402972, 0.010820982, 0.008698984, 0.013853268, 0.036604457, -0.008855723, -0.018856842, -0.025705107, 0.04096902, 0.03142003, -0.027344832, 0.0026494828, -0.043549176, -0.04456195, 0.0028725336, 0.034024302, -0.033107985, 0.030961873, 0.017494423, 0.058258478, 0.023028497, -0.014576676, 0.026669651, 0.029225694, 0.022944098, -0.013853268, -0.03602573, 0.014805756, 0.018278114, 0.0072220257, 0.008741183, 0.012647588, -0.0233902, 0.023498712, -0.00259372, -0.026042696, -0.005277866, 0.0142873125, 0.04579174, -0.029418603, 0.0037888507, 0.034795936, -0.028984558, -0.0021039124, -0.005666698, 0.025705107, 0.015372425, -0.03281862, 0.031564713, -0.033035643, 0.015818527, 0.027971786, -0.01924266, -0.006040459, 0.039811566, 0.014986607, 0.028357603, 0.007903235, -0.027441286, -0.02312495, 0.005335136, 0.02120792, -0.0057058823, 0.043814424, 0.0044851312, 0.034337778, 0.016481651, -0.046635717, 0.013648302, 0.008343308, 0.020990895, 0.012707871, 0.010513533, 0.019929897, -0.014154688, -0.050349213, 0.013370995, 0.017482366, -0.068868466, -0.015999379, 0.0049553467, 0.045237128, -0.025873901, -0.005937976, 0.028839875, 0.0068603214, -0.034554802, 0.03448246, -0.04473074, -0.025584538, 0.010405022, 0.00032214273, -0.031444144, 0.0304796, 0.01516746, 0.016119948, 0.008307138, -0.011924179, -0.017759673, -0.045020107, 0.00731848, -0.038871136, 0.01142985, -0.009452535, -0.02369162, -0.03889525, 0.0009163171, -0.0036200555, 0.007228054, -0.021895157, -0.023860415, 0.021473167, 0.030551942, 0.037062615, 0.010356795, 0.0055250307, 0.09592393, -0.005368292, 0.004240981, 0.02826115, 0.004554458], [-0.005380206, 0.02858473, -0.02534074, 0.04102003, -0.0039962204, 0.013093499, -0.05707543, 0.018488396, -0.0060824826, -0.003091194, -0.050070293, 0.005656415, 0.033568252, -0.028984353, 0.017336546, -0.0014691987, -0.04743749, -0.00028392265, 0.004442857, -0.033051096, -0.0074870368, -0.06558503, -0.07207301, -0.01676062, 0.006705423, -0.015056348, -0.023436658, 0.009608559, 0.0066760387, 0.03958609, 0.041466665, 0.0036406743, 0.043746863, -0.026139984, -0.007328363, 0.0011709514, 0.027268328, 0.027785486, -2.002931e-05, 0.0001632647, -0.063375354, 0.018182803, -0.019722523, -0.006164758, -0.022555139, 0.007786753, 0.028020557, -0.01267037, 0.018876266, -0.027291834, -0.0056946143, 0.0064292136, -0.049365077, -0.015561753, -0.023330875, -0.05133968, 0.04724943, 0.0050246594, 0.025058653, 0.01882925, -0.045768477, 0.02825563, 0.015549999, -0.016690098, -0.03925699, 0.046802793, 0.014092554, 0.0034173562, 0.03558987, 0.041090548, -0.012423544, 0.004193093, 0.0025975434, -0.021238737, 0.0033938491, -0.06624323, 0.0887161, 0.031264547, 0.007904289, -0.055429928, 0.029901132, -0.013963264, 0.025152681, -0.0019672571, 0.011324584, -0.036224563, 0.05477173, -0.13728192, -0.046802793, -0.0008352395, -0.0008778462, -0.017595123, 0.038363717, 0.006534996, -0.024847088, -0.0047866493, -0.009649697, -0.00021174827, -0.0047073127, 0.0071167983, -0.01345786, -0.045227814, -0.0550068, -0.04668526, 0.035613377, 0.046826303, 0.020274943, 0.018923279, -0.014292365, -0.048894934, 0.034814134, -0.033662282, -0.013551889, 0.011841741, -0.021203475, 0.06638427, -0.03932751, -0.057780646, -0.017089719, -0.0045956536, -0.05810975, -0.09290037, 0.062199995, 0.03749395, -0.011794727, 0.0063704457, 0.0023125187, 0.05890899, -0.01771266, -0.0059473165, -0.024964625, 0.009126662, 0.023389643, 0.034955177, 0.09694361, -0.008098223, 0.06624323, -0.011101265, -0.04532184, 0.029360468, -0.07418866, 0.024729552, -0.028279137, 0.012188473, -0.072778225, -0.049788207, -0.015385449, -0.018488396, -0.05166878, -0.007328363, -0.0110836355, -0.031875737, -0.018441383, 0.035895463, 0.034626074, -0.019604988, -0.00062991894, -0.0018085836, 0.0083509255, 0.004578023, 0.029454496, -0.037776038, 0.019076075, 0.057780646, 0.007622203, -0.040314812, 0.014163076, -0.04052638, -0.062388055, 0.026892213, 0.017113227, -0.030535826, 0.015479478, 0.0012319231, -0.039233483, 0.03408541, 0.050070293, 0.025904913, 0.0011298138, -0.049882233, -0.01283492, 0.04525132, 0.06074255, -0.04823673, 0.021015419, 0.00061449234, 0.0034643705, 0.037164852, 0.056605287, -0.05999032, -0.029901132, 0.012353023, -0.033920858, -0.017477589, -0.019005554, -0.06431564, -0.0020157406, -0.046826303, -0.012282501, 0.002455031, 0.023683483, -0.043041646, 0.0116243, -0.010448941, 0.018241571, 0.027856007, 0.031852227, 0.023742251, -0.018347353, 0.026633633, -0.011430366, 0.031969763, 0.017935978, -0.014151322, 0.008950358, 0.042054344, -0.02121523, -0.0031176396, -0.0035760296, 0.011154156, 0.060225394, -0.014221843, 0.032298863, -0.013093499, -0.016572561, -0.001098226, 0.0009887707, 0.037893575, 0.028326152, 0.027644442, -0.039868176, -0.040032726, -0.03723537, 0.031969763, -0.06981632, -0.008245143, -0.056887373, -0.016983937, 0.029101888, -0.027456386, 0.008668273, 0.005183333, -0.053737413, 0.03742343, 0.04409947, 0.018394368, 0.008198129, -0.011224678, -0.039209977, 0.050117306, 0.009755479, 0.026257519, 0.004190155, -0.006505612, 0.002734179, 0.086976565, 0.03909244, 0.010642875, -0.021885185, 0.03474361, -0.017277777, 0.06708949, -0.03951557, 0.065114886, -0.02874928, -0.004948261, 0.036530156, -0.052797124, -0.045721464, -0.041560695, 0.04123159, -0.022860732, 0.030958956, 0.041678227, 0.024306424, 0.008809315, 0.0320873, 0.014257104, -0.0030500565, 0.033709295, -0.039374527, 0.0085918745, -0.030606348, -0.028678758, -0.006681916, 0.028232122, 0.034978684, -0.04468715, 0.006499735, 0.0087211635, -0.041936807, -0.026939228, 0.021990966, -0.0030441796, 0.026398562, -0.0089621125, 0.004178401, 0.038293194, -0.04743749, -0.008286281, 0.008662395, 0.0009270644, -0.021273997, -0.029642554, -0.032792516, 0.056370217, -0.017430574, 0.056229174, 0.010995483, -0.050775506, 0.060131364, -0.009673204, -0.009890646, -0.031946257, -0.0011856434, 0.0049130004, 0.019828307, 0.067136504, 0.048894934, -0.04181927, -0.003808163, -0.016313983, -0.09308843, -0.004428165, 0.020110391, -0.008139361, 0.039468553, -0.045462884, -0.003919822, 0.016960429, -0.08034754, 0.0052009635, -0.019687263, -0.023859788, -0.03523726, -0.06708949, -0.009837755, -0.018065268, 0.02566984, -0.018382614, 0.02409486, 0.010466572, -0.0011290793, 0.006693669, 0.0015176822, -0.018100528, -0.028138094, 0.009015003, 0.04052638, 0.0037875944, 0.0012480844, 0.008309788, 0.015173884, 0.02458851, 0.043464776, 0.007052154, 0.0060589756, -0.06210597, 0.03368579, -0.014985827, 0.06643129, -0.065443985, 0.022414096, 0.051762808, 0.048048675, 0.00093734876, -0.037117835, 0.010989606, -0.0006842793, -0.0050599203, -0.028138094, 0.036553662, -0.041678227, -0.008932728, -0.051621765, 0.015679289, 0.039821163, -0.02196746, -0.03192275, 0.0033938491, 0.045768477, -0.016936922, -0.013434353, 0.032392893, 0.025199696, -0.0144921765, -0.03723537, 0.028020557, 0.014045539, -0.016549055, 0.0067994515, 0.015902607, 0.042124864, -0.017982991, 0.006869973, 0.019652002, -0.026375055, 0.072308086, -0.0084332, 0.015232652, 0.0033086354, -0.004563331, -0.04600355, -0.032369386, 0.025129175, -0.042453967, -0.010901455, -0.022355327, -0.008979742, 0.03591897, -0.06262313, -0.02055703, 0.010548847, 0.080112465, 0.005477173, 0.0015632274, 0.023037035, 0.036530156, -0.011224678, 0.004666175, 0.02095665, -0.033568252, -0.04111406, 0.016313983, -0.06083658, 0.026351549, -0.059708234, 0.02137978, -0.001884982, -0.03293356, 0.0028884446, 0.019604988, -0.0036347976, -0.010443064, 0.011495011, -0.011559656, 0.006617271, -0.021450302, -0.0229195, 0.03932751, -0.019181859, 0.017148487, 0.03516674, 0.03424996, -0.025199696, 0.029877625, -0.050211336, 0.009949414, 0.01859418, 0.0065114885, -0.025223203, -0.04659123, -0.065114886, -0.046873316, 0.007816137, -0.030159712, 0.048142705, 0.03549584, 0.053878456, -0.060789566, 0.014727248, -0.0020789162, 0.04807218, -0.008192252, 0.051198635, -0.015549999, -0.026116475, 0.059520178, 0.007016893, 0.030747391, -0.00627054, 0.016149431, 0.0106663825, 0.050634466, 0.022449356, -0.021391533, -0.016972184, 0.036130536, 0.013657671, 0.002462377, -0.0149270585, -0.020463, -0.029125394, 0.07291927, 0.018770482, 0.010631122, 0.041772258, 0.022343574, 0.06276417, 0.055947088, -0.002565221, 0.029924639, -0.03457906, 0.005403713, -0.0070639076, -0.021050679, -0.026680648, -0.06793575, -0.008821069, -0.004651483, 0.024847088, 0.030653361, 0.04266553, -0.0079983175, 0.009949414, 0.021321012, -0.0075810654, -0.019816551, 0.010160978, 0.028702267, -0.00083891244, 0.01542071, -0.050728492, -0.005430158, -0.02108594, -0.02884331, 0.021356272, 0.03464958, -0.0062176487, 0.0040696803, 0.0015837962, -0.02933696, -0.04106704, -0.044546105, -0.057827663, -0.0023756942, -0.018065268, -0.00641746, -0.008256896, -0.03584845, 0.0105370935, -0.02940748, 0.013716439, 0.0072931023, 0.0034291097, -0.020451246, 0.01041368, 0.02917241, 0.030441796, -0.006593764, -0.025105668, 0.030888434, -0.00858012, 0.001567635, -0.031217534, 0.047649052, 0.052185938, -0.0373294, 0.009679081, 0.005538879, -0.011113019, 0.03100597, 0.009109032, 0.010219746, 0.008697656, -0.03676523, -0.03850476, -0.02884331, -0.012811413, -0.038716324, 0.012070936, 0.012164965, 0.080958724, 0.003423233, -0.026116475, -0.031899244, -0.023495426, -5.78497e-05, -0.023648223, 0.013845729, -0.00060971745, 0.013540136, 0.0033879722, -0.03935102, 0.006111867, 0.09995253, -0.009896522, -0.037940588, -0.034179438, -0.01529142, -0.03739992, -0.015937869, 0.004745512, -0.013105253, 0.006781821, 0.01915835, -0.0111482795, -0.045039754, -0.047884125, -0.02642207, 0.010061073, 0.03533129, -0.01224724, -0.027456386, -0.0021494378, -0.007363624, 0.004392904, 0.0015779195, 0.011189417, 0.041631214, 0.005491865, -0.032604456, 0.015644027, -0.0033967874, -0.015256159, 0.008245143, 0.0046838056, -0.05392547, 0.045862507, 0.004266553, -0.11810007, 0.019828307, 0.040926, -0.01761863, -0.013340324, -0.0047425735, -0.0053625754, 0.0838266, 0.014139568, 0.059802264, 0.04017377, 0.01679588, 0.07085064, -0.03410892, 0.03617755, 0.011289323, 0.013728193, 0.015479478, 0.0069111106, 0.020686317, -0.004131387, -0.039891683, -0.037940588, -0.030300755, 0.0054595424, -0.026492592, 0.0168664, 0.03258095, -0.016325736, 0.0038199166, 0.0034291097, 0.034461524, 0.018406121, 0.10258533, -0.02566984, -0.030042175, 0.049035978, -0.0014927059, 0.061212696, -0.036483143, -0.018347353, 0.008915097, -0.009925907, 0.04898896, 0.00915017, -0.028866816, -0.04541587, 0.0478136, -0.00900325, -3.1978027e-05, -0.035871956, -0.06342237, 0.015820332, 0.01741882, 0.0109073315, -0.0059208707, 0.014750755, -0.01237653, 0.0031323317, 0.05966122, 0.06897006, -0.048612848, -0.054536656, -0.04409947, -0.029078381, -0.037705515, 0.006129497, 0.01705446, -0.018805744, -0.029195916, -0.013011224, -0.034814134, -0.0068876036, 0.003866931, -0.021885185, -0.008245143, -0.0383167, 0.008674149, -0.021297505, -0.0016954553, -0.0012936294, -0.036812242, -0.008227513, 0.034508538, 0.007757369, -0.0222613, 0.011853496, -0.052515037, 0.0066407784, -0.0027620937, -0.033403702, -0.041090548, -0.01679588, -0.011283446, 0.03300408, 0.048283745, -0.0083509255, -0.0015044595, -0.039703626, -0.027385864, 0.049035978, -0.0025270218, 0.023683483, 0.03857528, 0.018406121, 0.0012025392, -0.018218065, 0.033121616, -0.07983038, 0.061541796, 0.035566363, 0.0118887555, -7.173822e-06, -0.028490702, 0.0141865825, -0.029289946, 0.046802793, -0.036906272, 0.06821784, -0.010125717, -0.001364151, -0.0147977695, 0.013798715, -0.014680234, -0.016513793, 0.01637275, -0.008644765, 0.0056005856, 0.03739992, 0.018323846, 0.00612362, -0.046027057, -0.024517989, -0.041607708, -0.0040843724, -0.0271743, 0.028490702, -0.022825472, -0.008215759, -0.02799705, -0.009602683, -0.038363717, -0.0018570671, -0.041184578, -0.011712452, 0.04783711, -0.010830933, 0.012035676, -0.009731973, 0.00076251413, -0.02321334, -0.01026676, 0.009884769, -0.026516099, 0.050775506, -0.0070227697, -0.016278721, -0.05110461, 0.00535376, -0.0016807633, 0.027127285, 0.03335669, 0.024635524, 0.0009432256, 0.009649697, -0.029948147, 0.031123506, -0.0054477886, -0.022155516, -0.015467724, 0.005071674, 0.020451246, 0.017665645, -0.031781707, 0.03008919, 0.016878154, -0.006476228, -0.006705423, 0.032110807, 0.013681178, 0.011853496, -0.0018600055, -0.023436658, 0.020803854, 0.07357747, 0.010548847, 0.01578507, -0.010090456, 0.050446406, 0.0022170208, 0.012494066, -0.051715795, 0.010519463, 0.035777926, -0.027291834, 0.003896315, 0.0049276925, -0.043229703, -0.051386695, 0.0051803947, 0.012211979, -0.004613284, -0.020321956, 0.028349658, -0.009949414, 0.0089621125, 0.027526908, -0.0062411563, -0.03932751, 0.005538879, -0.036201056, -0.03549584, 0.008039455, -0.026375055, 0.024541495, 0.06257611, -0.007880782, -0.019499205, -0.023695236, -0.032533936, -0.031099997, -0.021591345, -0.03041829, 0.015244406, 0.0009006188, 0.028561223, -0.0124823125, 0.073295385, 0.00052854425, 0.025246711, -0.028537715, -0.020510014, 9.3202296e-05, -0.023037035, -0.053361297, 0.03149962, -0.006011961, -0.008374433, 0.02367173, 0.03300408, 0.025434768, 0.021097694, 0.014891798, -0.0033615266, -0.0324164, -0.006182388, -0.05707543, -0.0004554516, -0.0124823125, 0.0013883928, -0.014268857, 0.03650665, 0.041772258, -0.003496693, 0.019346409, 0.015256159, -0.011254062, -0.06431564, -0.044710655, -0.0072578415, 0.0069463714, -0.004954138, 0.019981103, 0.043370746, 0.0045721466, -0.030112697, -3.1151605e-05, 0.012353023, 0.001001259, 0.004375274, 0.014409901, 0.015667535, -0.083732575, -0.0006240422, -0.030065682, -0.01787721, 0.01287018, 0.0014589144, -0.0022610968, 0.028396674, 0.012012169, -0.014962319, 0.054818742, -0.016067157, 0.029148903, 0.054959785, -0.00823339, -0.023236847, -0.014116061, 0.014362887, 0.01850015, 0.01283492, -0.025481783, -0.0412551, 0.01345786, 0.011971031, 0.010014058, 0.03424996, -0.011071881, -0.018182803, 0.024306424, -0.012494066, 0.05350234, -0.020451246, 0.02220253, -0.016972184, -0.0037582102, 0.022120256, -0.0051128115, -0.057216473, 0.02933696, 0.011359844, 0.015984882, 0.03549584, -0.025152681, 0.05058745, 0.0072578415, -0.023060543, 0.011782974, -0.009402872, 0.004178401, 0.038951397, 0.019499205, 0.016325736, 0.007916043, -0.0133990925, -0.018147543, 0.009161923, -0.025622826, -0.008938605, 0.07273121, 0.08547211, -0.036694705, -0.019346409, 0.007757369, -0.04052638, -0.020756839, 0.0042929985, 0.035683896, 0.011577286, -0.02082736, 0.024517989, -0.009097278, -0.0062822937, 0.010601738, -0.017830195, -0.014915305, 0.0402678, -0.006211772, -0.014327626, -0.0027180177, -0.03375631, 0.011359844, 0.015644027, 0.049459103, -0.03991519, 0.03925699, -0.010930838, 0.047719575, 0.03584845, -0.015644027, 0.0081746215, 0.019005554, 0.04052638, -0.01145975, 0.023001775, 0.0033732802, -0.0062881703, -0.05035238, -0.0004609611, -0.005565325, -0.014398147, -0.02658662, -0.0137517, -0.0059943306, -0.013540136, -0.037211865, 0.018488396, 0.031946257, -0.0006020042, 0.029924639, -0.04090249, -0.02759743, 0.032980572, 0.0078690285, -0.023413152, 0.022425849, -0.0029707197, 0.045768477, -0.052515037, 0.0063528153, -0.018065268, -0.02449448, 0.006023715, -0.0370003, 0.029548524, -0.0013435822, 0.010072826, -0.031052984, -0.013187528, -0.000174651, 0.05825079, -0.021826416, -0.014574451, 0.018359108, 0.019393424, 0.026892213, 0.011265815, -0.003017734, 0.050634466, -0.009731973, -0.022320068, 0.019052569, 0.006793575], [-0.023797827, 0.0038782947, -0.027928416, 0.048440546, -0.024102926, 0.0007103117, -0.0058614467, 0.031495742, 0.0007561501, 0.022037633, -0.04543648, -0.008396126, -0.055669077, 0.01310758, -0.0071815928, 0.009604793, -0.054730307, 0.029219225, -0.058016002, -0.02999371, 0.0068764924, -0.056185402, -0.04905075, 0.016803987, 0.0122861555, -0.01767235, -0.017132558, 0.0062838932, -0.025440674, 0.008460667, 0.02429068, 0.013389211, 0.034288585, 0.0029263229, 0.05332215, -0.02005448, -0.011869577, -0.007093583, -0.005218976, -0.0017645947, -0.07223837, -0.0009901093, -0.0046234434, -0.047243614, -0.020007541, -0.050646655, -0.0120045245, -0.024666188, -0.0102678, -0.030111056, 0.0058731814, -0.013635638, 0.00066960725, 5.1705705e-05, -0.022143243, 0.008748165, 0.037715096, -0.10561165, 0.054495614, -0.04325384, -0.048440546, 0.01668664, 0.032270227, -0.026801892, -0.018458571, 0.0031947526, 0.008372657, 0.01959683, 0.0419865, 0.03288043, -0.01214534, 0.0036524031, -0.03820795, 0.008842043, 0.0040660487, -0.084066875, 0.0794669, 0.009598926, -0.026332507, -0.010778256, 0.026355974, -0.031096766, -0.017308576, -0.03914672, 0.017566739, -0.024079457, 0.06505678, -0.11396671, -0.038325295, 0.033279408, 0.048816055, 0.01343615, 0.010878, 4.7557333e-07, -0.08894848, 0.04144671, 0.005758769, 0.0069938386, -0.024900882, -0.007873936, 0.021650389, -0.06792003, -0.020899372, -0.036095716, 0.0056590247, 0.025769243, 0.016827457, -0.042479355, -0.004714387, 0.054965, 0.005518209, -0.024220273, -0.018493773, -0.024149865, 0.016921334, 0.045366075, -0.016498888, -0.052899703, -0.03982733, 0.009540252, -0.084113814, -0.016381541, 0.05172624, 0.042197723, -0.023739154, 0.046797697, 0.046774227, 0.06322618, -0.0031888853, -0.0008170235, 0.011147897, 0.05515275, 0.015747871, 0.022377936, 0.07589958, 0.025745774, 0.011728761, -0.0035145213, -0.038301826, -0.009364233, -0.07834038, 0.0010253132, -0.004579439, 0.03982733, -0.0392406, 0.0020491595, -0.048158914, -0.024713127, -0.045577295, -0.02149784, -0.03468756, -0.0134126805, -0.023281503, 0.004183395, 0.013295334, -0.01813, 0.028233515, -0.0024496038, 0.005412597, 0.02461925, 0.029500855, -0.10467289, 0.015360628, 0.024361089, 0.0122861555, -0.07923221, 0.008871379, -0.0074749584, -0.055293567, 0.0175198, -0.0038548254, -0.030885542, 0.006571392, 0.009082602, -0.042737518, 0.050552778, 0.02335191, 0.02999371, 0.01896316, -0.07233225, -0.04768953, 0.0011551274, 0.042221192, -0.0010172456, 0.03034575, -0.011247641, 0.015325424, -0.018845813, -0.0056091524, -0.05778131, -0.043347716, -0.011476466, -0.034570213, 0.0065244534, -0.015043793, -0.022659568, -0.01909224, -0.041282423, -0.003763882, -0.0014917647, -0.01688613, -0.016944803, -0.028350862, -0.012121871, -0.034804907, 0.016111644, 0.00068024173, -0.006330832, 0.017109089, -0.015149405, 0.04867524, 0.014128492, -0.034382463, -0.027811069, -0.029406978, 0.009551987, -0.043113023, 0.012380033, -0.005474204, -0.048018098, 0.05749968, -0.003062738, 0.026778422, 0.008730563, -0.025628429, 0.047548715, 0.03128452, 0.0036641378, 0.012497379, 0.029782487, 0.039052844, -0.0044092867, -0.0142927775, 0.0141989, -0.08087506, 0.011482334, -0.012720337, -0.015208079, 0.039287537, -0.015055528, 0.037433464, 0.04008549, -0.064822085, -0.055434383, 0.03940488, 0.055997647, 0.012814214, -0.024642719, -0.02005448, -0.006536188, -0.008390259, -0.0046762493, 0.051022165, 0.019432545, 0.02157998, 0.08754033, -0.0129902335, -0.027106991, -0.04144671, 0.03313859, -0.03543858, 0.02134529, -0.032293696, 0.069938384, -0.029453916, 0.0056326217, 0.04102426, -0.06454045, -0.050646655, -0.030486565, 0.035884492, -0.020066215, 0.026989644, 0.017003477, 0.039686512, -0.023093749, 0.012110136, -0.004696785, -0.042455886, 0.04064875, 0.030791664, 0.048534423, 0.020476926, -0.036565103, 0.04989564, 0.03121411, -0.037057955, -0.042197723, -0.08059343, -0.002412933, -0.03151921, -0.014128492, 0.038043667, 0.022765178, 0.03543858, 0.011728761, 0.014398389, 0.012872887, -0.044755872, -0.018188674, -9.4793795e-05, -0.018118266, -0.013471354, -0.025816182, -0.00077741913, 0.011476466, -0.0010861865, 0.07951384, -0.0135534955, -0.019326933, 0.0606915, -0.022448344, 0.00035552256, -0.011769832, 0.01797745, 0.015935626, 0.010226728, 0.035508987, 0.043066084, -0.03536817, 0.003928167, -0.008800971, -0.12523195, -0.00017290241, 0.039686512, -0.011951719, -0.01688613, -0.015114201, -0.036377348, 0.038020197, -0.06651188, -0.0057441005, -0.0053099194, -0.011030551, -0.049801763, -0.108427964, -0.030862072, -0.015231548, 0.021239677, 0.004098319, -0.01959683, 0.0169096, -0.03344369, -0.075664885, -0.00867189, -0.0037169436, 0.016745314, -0.004553036, 0.02396211, -0.032223288, 0.0013626837, 0.06871799, 0.027247807, 0.012485645, -0.01939734, 0.0070231752, -0.04395792, -0.04109467, 0.01548971, 0.019608565, 0.07810569, -0.08603829, -0.004124722, 0.07740161, 0.02193202, -0.02586312, -0.03374879, -0.023903439, -0.034546744, 0.03123758, -0.05458949, 0.04576505, -0.03194166, 0.015301955, -0.030791664, -0.01579481, 0.015524914, -0.019139178, -0.023997314, 0.008888981, 0.0016912533, -0.04799463, -0.013400946, 0.026050875, 0.024783535, 0.00057939725, -0.017015211, -0.011112693, 0.028984532, -0.040343653, -0.0040836507, 0.018094797, -0.027200868, -0.007363479, 0.027224338, -0.0068236864, -0.023563134, 0.00048075305, 0.009716272, -0.013964208, 0.006765013, -0.0134830875, -0.010197392, 0.01078999, 0.04768953, -0.020629477, -0.0058643804, 0.029899834, 0.0027899079, 0.034006953, -0.039991613, 0.0036201328, -0.005483005, 0.036565103, -0.001908344, 0.057875186, -0.027834538, 0.029406978, -0.011898913, -0.014891244, 0.036236532, -0.048534423, -0.033561036, 0.015360628, -0.07054859, 0.035227355, -0.040789567, 0.01280248, -0.017824901, -0.038114075, -0.023140687, -0.013576965, -0.019890195, 0.0067591458, 0.0007117785, -0.07890364, -0.051350735, -0.034781437, 0.0071053174, 0.040906914, 0.023117218, -0.0071463888, 0.009757344, 0.017378984, 0.0024173334, 0.0009798415, -0.07397509, 0.00274737, 0.027435562, -0.010608104, 0.012497379, 0.025393736, -0.061630268, 0.0018848747, 0.048205853, -0.029805956, -0.012849418, 0.009422907, 0.012579521, -0.09401784, 0.010103515, 0.010743053, 0.05426092, -0.008261179, 0.033326343, -0.03790285, -0.02025397, 0.021533042, 0.012438706, 0.016193787, 0.018235613, 0.019362137, -0.02652026, 0.013717781, -0.008149699, -0.034194708, -0.012227483, -0.017050415, 0.044169143, -0.048769116, -0.03281002, -0.028468208, 0.015078997, 0.019350402, 0.026262099, 0.009757344, 0.007879803, 0.017883573, 0.056373153, 0.0410712, 0.014210635, 0.012872887, -0.003156615, -0.034617152, 0.008560412, -0.05937722, -0.065573104, -0.06468127, 0.00046425124, -0.015137671, 0.02335191, 0.05332215, 0.027036583, 0.018716732, -0.021157535, 0.0039751055, -0.01607644, -0.025182512, -0.008020619, -0.04064875, -0.008243577, -0.020418253, -0.023973845, 0.036823265, -0.012649929, -0.022037633, -0.023445787, 0.014504001, 0.022248855, 0.037996728, -0.021181004, -0.046563007, -0.04700892, -0.00607267, -0.0136943115, 0.00076201744, 0.0061724144, 0.0076451106, -0.004450358, -0.038372234, -0.0432069, -0.019925399, -0.017555004, 0.022377936, 0.01607644, -0.0026300235, 0.042479355, 0.022190182, -0.048111975, 0.027036583, -0.038114075, 0.040789567, 0.0013612169, -0.015301955, -0.023387114, 0.010584635, 0.052946642, 0.018071327, -0.0032798287, 0.019585095, -0.054026227, 0.052289505, 0.008372657, 0.029759018, -0.0030774062, -0.017449392, -0.030064117, -0.012872887, -0.0024950753, -0.012696868, 0.007897405, 0.016416745, 0.04642219, 0.046821166, -0.022941198, -0.025511082, 0.038630396, 0.009686936, -9.470212e-05, 0.008155567, -0.0013934871, 0.059189465, 0.028632494, -0.012908091, -0.019033568, 0.05393235, 0.056607846, -0.066605754, 0.00437995, -0.026942708, 0.015677463, -0.0047114533, 0.011834373, -0.030580442, 0.023258034, -0.004089518, -0.03034575, -0.07810569, -0.059940483, 0.002103432, 0.0023645277, 0.033279408, 0.00032490253, 0.021450901, -0.0032710277, 0.025839651, 0.018564181, 0.027177399, -0.004758392, 0.015407567, 0.007298939, -0.016346337, -0.011265243, 0.0006820753, -0.030087586, -0.01893969, 0.028609024, -0.02907841, -0.0031331459, 0.029008001, -0.039545696, -0.02522945, 0.02684883, -0.013929004, 0.013177987, -0.03248145, -0.005521143, 0.012027994, 0.022483548, 0.04829973, 0.025205981, 0.027670253, 0.05712417, -0.036072247, -0.0047437237, -0.004705586, 0.0047026523, 0.0060609356, -0.00014466596, -0.013459619, -0.013717781, -0.025980467, -0.008008884, -0.007410418, 0.017731024, 0.03884162, 0.032059006, 0.031378396, -0.013987677, 0.03853652, 0.012544318, 0.021556512, 0.028655963, 0.07040777, -0.026754953, -0.026919238, 0.047149736, 0.010508359, 0.039663043, 0.001616445, -0.031002888, 0.04703239, 0.024243742, 0.0432069, 0.0050546913, -0.0033825065, 0.012814214, 0.0211458, -0.029571263, 0.003491052, -0.025346797, -0.018669793, 0.00915301, 0.0074045504, 0.011259376, -0.00094317074, -0.021333555, -0.026050875, 0.006383638, 0.023269769, 0.09669334, -0.04644566, -0.027834538, -0.0413763, -0.030157994, -0.0068119518, 0.0052629807, 0.015630525, -0.010608104, -0.007967813, -0.04398139, -0.03626, -0.034804907, -0.0432069, 0.004843468, 0.007662712, -0.051679302, 0.0068647577, -0.009874689, 0.00450023, 0.015595321, -0.0338192, -0.016792253, 0.062381282, -0.020852435, 0.0072578676, -0.008589748, -0.011675955, -0.003491052, -0.01898663, -0.048487484, -0.02652026, -0.008184903, -0.055997647, -0.007979548, 0.031331457, 0.0028353797, -0.017156027, -0.07773018, -0.00077741913, 0.0359549, -0.009370101, 0.039686512, 0.06796697, 0.015607055, -0.010338208, -0.013084111, -0.029571263, -0.056091525, 0.016146848, -0.015008589, 0.014210635, -0.005169104, -0.04069569, 0.030533504, -0.039357945, 0.03917019, -0.0056091524, 0.057030294, -0.009540252, 0.021380493, -0.011634884, 0.0073400103, -0.0027356353, -0.0011045219, -0.015689198, 0.00047121866, -0.00093290297, 0.009933363, 0.006817819, 0.0061372104, -0.014105023, -0.04224466, -0.045882396, 0.0037844176, -0.009522651, 0.079044454, 0.007633376, 0.001848204, -0.008930053, -0.0232463, 0.0003139013, 0.009892291, -0.04794769, 0.008349188, 0.047290552, 0.031706966, 0.016874395, 0.0013700179, -0.016475419, -0.026590668, 0.0010649175, -0.01096601, -0.026144752, 0.04895687, -0.03161309, -0.0015034992, -0.046586476, 0.013576965, 0.02652026, 0.018470306, 0.04520179, -0.029641671, -0.011922383, 0.013400946, -0.008267046, -0.024431497, -0.009417039, -0.046281375, 0.012215748, 0.015114201, 0.0032123546, 0.008648421, -0.018974895, 0.05895477, -0.010549431, -0.012262687, -0.029970242, 0.024102926, -0.013600434, 0.032223288, -0.0072578676, 0.036072247, -0.018165205, 0.056560908, 0.00066887384, 0.033678383, -0.029641671, 0.05332215, -0.0011888646, 0.019362137, -0.047454838, -0.00773312, 0.014058085, -0.0058995844, -0.007768324, -0.019502953, -0.0474079, -0.061160885, 0.048862994, 0.029101878, 0.028374331, 0.024102926, 0.023797827, -0.03060391, 0.020629477, 0.008120363, 0.018470306, 0.0051456345, 0.011887179, -0.0020344912, -0.038254887, 0.016897865, -0.00028456474, 0.018552447, 0.008818573, 0.016381541, -0.015067263, 0.004362348, -0.030486565, -0.032223288, -0.026121283, -0.04102426, 0.031167174, -0.014750428, 0.050177272, -0.015841749, 0.044333424, 0.0014822303, 0.011869577, -0.0130254375, -0.026191691, -0.013119315, 0.010496625, -0.07655671, 0.034922253, -0.01817694, 0.0205356, -0.0016516489, 0.04919156, 0.034851845, 0.0034793173, -0.009340764, -0.019538157, -0.015712667, 0.007134654, -0.06862411, 0.0050370893, -0.0055446117, -0.0049901507, 0.037386525, 0.040249776, 0.0071757254, -0.015395832, 0.0026578933, -0.01985499, -0.02066468, -0.052852765, 0.0026974976, -0.0146096125, -0.026895769, -0.0012240685, 0.024525374, 0.005483005, 0.01835296, -0.028914124, 0.03323247, -0.041470177, 0.011576211, -0.013929004, -0.021650389, 0.014515735, -0.075711824, -0.02160345, -0.012262687, -0.02966514, -0.010214994, -0.014457062, -0.0024320018, 0.02387997, 0.008695359, 0.0013502156, 0.03464062, -0.0169096, 0.026989644, 0.014105023, -0.012579521, 0.010285402, -0.010549431, -0.0011147897, 0.001968484, -0.00019637166, 0.008272913, -0.04778341, 0.035156947, -0.0077976603, 0.0076216413, 0.01896316, 0.020547334, -0.014492266, -0.02134529, 0.038677335, 0.034358993, -0.057452742, 0.029759018, -0.0032475584, -0.04271405, -0.01090147, 0.025933528, -0.031730436, 0.03283349, 0.036213063, 0.025205981, 0.035532456, 0.004218599, 0.024900882, 0.008624952, 0.0022339798, 0.020218765, -0.021896817, -0.0037873513, 0.020559069, 0.029242694, -0.014093288, -0.013917269, -0.042033438, -0.011822638, -0.005339256, -0.05623234, -0.012591256, 0.048111975, 0.05022421, 0.007768324, -0.0046997187, 0.029571263, -0.03288043, 0.0063777706, 0.034828376, 0.018857548, -0.008712961, -0.0029057874, 0.01166422, -0.007656845, -0.0011939984, -0.036752857, -0.018411633, 0.0014917647, 0.010385146, 0.054871123, 0.011570344, -0.0024070656, -0.015912157, -0.008988725, 0.0021577047, 0.014234104, -0.00821424, 0.0024906748, -0.014281043, 0.011863709, 0.0071229194, -0.056889478, 0.006612463, 0.04299568, 0.04006202, 0.014914713, 0.034828376, 0.005782238, -0.009405305, -0.01896316, -0.0066007283, 0.017531535, -0.067403704, -0.00834332, -0.0071053174, -0.03283349, -0.006295628, -0.013119315, 0.026191691, 0.01483257, 0.0074573564, 0.041188546, -0.03630694, 0.00788567, 0.04445077, -0.0065068514, 0.022917729, 0.008331586, 0.009252754, -0.019831521, -0.01795398, 0.017895307, -0.0129902335, -0.042526294, 0.028702902, -0.037081424, 0.038419172, -0.007662712, 0.001446293, -0.05585683, -0.010173922, 0.005776371, 0.015548383, -0.022002429, -0.017860105, 0.008290515, 0.054448675, 0.032669205, 0.018798875, 0.014140227, 0.10495452, -0.03407736, -0.0019230122, 0.015759606, -0.019127443], [0.00018555428, 0.012299385, -0.023189714, 0.01431744, -0.0035853304, 0.04690484, -0.023440478, 0.050057303, -0.02188813, 0.008991687, -0.017589316, -0.005791458, -0.009690244, -0.034820396, -0.005621297, 0.02615112, -0.055598, 0.011511269, -0.031142522, -0.01609667, 0.01380397, -0.06309704, -0.044874843, -0.007976688, 0.008490158, -0.014174146, -0.02553018, 0.029828994, -0.004651078, 0.04762131, 0.03443828, 0.007546807, 0.03083205, 0.030163346, 0.0034062131, -0.021291072, -0.039787915, -0.0048301956, 0.0068781027, 0.018843135, -0.053735178, 0.0048719896, -0.008979745, -0.040098384, -0.010078331, -0.007690101, -0.015248849, -0.04711978, -0.017863961, 0.0017941579, 0.005000357, -0.0130516775, -0.05865493, -0.020825367, -0.013493501, 0.018007256, 0.07871606, -0.013505441, 0.054833762, -0.027178058, -0.01702808, 0.043418024, 0.044564374, -0.008758834, -0.014890615, 0.003910727, -0.0036301098, 0.02406142, -0.0037614624, 0.047191426, -0.00851404, -0.0005575025, -0.01670567, -0.03302922, 0.0029106555, -0.056266703, 0.08535534, 0.010376859, -0.0027927365, 0.028037822, 0.017923668, -0.007827424, -0.0152607905, 0.018353548, 0.02335689, -0.044636022, 0.060135636, -0.11664116, -0.027369117, -0.00042876194, -0.007839366, 0.0068781027, 0.04454049, -0.015081673, -0.013911441, -0.025100298, -0.011923239, -0.0031912725, -0.031596284, -0.026939236, -0.020491015, -0.03267099, -0.058798227, -0.070691615, 0.008281188, 0.037590742, 0.028300527, -0.005946693, -0.01887896, 0.0067168972, 0.02262848, -0.025816768, -0.010233566, 0.016156377, -0.032312755, 0.026270531, -0.036468275, -0.041674614, -0.05497706, -0.022091128, -0.0654375, -0.029661817, 0.061377514, 0.02190007, -0.011159006, 0.03591898, 0.009917126, 0.025195828, 0.010753006, 0.011553063, -0.05769964, 0.032050047, 0.040026736, 0.05311424, 0.069401965, 0.027106412, 0.07188573, -0.011559034, -0.06954526, 0.005821311, -0.04408673, 0.03228887, -0.045471903, 0.060231164, -0.053018708, 0.021673188, 0.0045406227, -0.017505728, -0.05354412, -0.041029792, -0.033984516, -0.027416881, -0.032838166, 0.014269675, 0.051012594, -0.021088071, 0.004346579, 0.026604883, 0.0050929007, 0.026055591, 0.029255819, -0.05043942, 0.006931838, 0.04652272, 0.03183511, -0.093857445, 0.014998085, -0.012777031, -0.04563908, 0.02418083, -0.0014620447, -0.02677206, 0.01535632, -0.005143651, -0.045782372, 0.006089987, 0.0065736035, -0.00934395, 0.0050570774, -0.08043559, -0.05832058, 0.040862616, 0.025816768, 0.0045943577, 0.028109469, 0.02655712, 0.04513755, 0.029494641, 0.027942292, -0.06758691, 0.010514183, 0.026724296, -0.02574512, -0.010430595, -0.01702808, -0.041770145, -0.00017044127, -0.005179474, 0.024527123, -0.0025628696, -0.014926438, -0.05387847, -0.010388801, -0.036253333, -0.023524066, 0.023858419, -0.0032360519, -0.009732038, -0.001743408, -0.0163952, 0.04057603, 0.008334924, 0.025363004, -0.019034194, -0.038187798, 0.005958634, -0.030426051, -0.009946979, -0.013218854, -0.0593714, 0.09333203, -0.022365775, 0.010132066, -0.013314383, 0.02947076, 0.01866402, 0.031476874, 0.0016120553, 0.008633452, -0.00010084675, -0.050917067, -0.056409996, -0.034151692, 0.050248362, -0.07594572, -0.013039736, -0.02553018, -0.007875189, 0.059801284, -0.030282758, 0.0119471215, -0.006770632, -0.020311898, 0.013780088, 0.068303384, 0.014627909, 0.021016425, 0.04449273, -0.019344663, -0.008322982, -0.00019460345, 0.031620167, 0.03964462, -0.002589737, 0.008997657, 0.07484713, -0.027201941, -0.046809312, -0.0064601623, 0.040862616, 0.0025837664, 0.04532861, -0.008024453, 0.09285439, -0.03219334, -0.017135551, 0.025864532, -0.043441907, -0.06844667, 0.0049645333, 0.030163346, -0.032862045, 0.0034420367, -0.008752864, 0.019464076, 0.015201084, 0.034915924, 0.026819825, -0.04766907, 0.030449934, -0.045925666, 0.018484902, 0.01908196, -0.004286873, 0.036086157, 0.009714126, -0.030640993, -0.041865673, -0.04900648, -0.008137894, -0.014520439, 0.009606656, 0.056266703, -0.008352835, 0.039286386, 0.009899214, -0.0020255176, -0.011385887, -0.047454134, -0.013147207, -0.0046003284, 0.009033481, -0.05082154, -0.037280273, 0.013171089, 0.05860717, 0.02884982, 0.13928159, -0.010006684, 0.012179974, 0.07427396, -0.010191772, -0.042080615, -0.032360516, 0.015236909, -0.013445736, 0.017398257, 0.04919754, 0.03766239, -0.010149978, 0.0071408083, -0.027631823, -0.1141574, 0.010126096, 0.039907325, 0.01805502, -0.0114575345, -0.01651461, -0.028969232, 0.021637365, -0.07307984, 0.020920895, -0.018652078, -0.026748177, -0.040862616, -0.06658386, 0.013887558, -0.023989772, -0.008317011, -2.8406877e-05, -0.017278844, -0.015320497, -0.042510495, -0.03768627, -0.02916029, -0.014209969, 0.009917126, -0.0033674045, 0.07150361, -0.0047048135, 0.0014717468, 0.0065437504, 0.04255826, 0.022592656, -0.012132209, -0.0008545386, -0.018258018, -0.0470959, -0.04045662, 0.016956434, 0.06070881, -0.034700982, -0.0025255533, 0.056218937, 0.013660677, -0.029828994, -0.044755433, -0.03725639, -0.032862045, 0.038760975, -0.07393961, 0.00965442, -0.011505298, 0.034318868, 0.005821311, -0.036492158, 0.023309126, -0.019428251, -0.07971912, 0.01151724, -0.026318297, -0.047979545, -0.026724296, 0.020168604, -0.016526552, 0.014818968, -0.05913258, -0.011135123, 0.061711866, 0.013493501, 0.0021926938, 0.027106412, -0.010126096, -0.0076184543, 0.023739008, 0.043346375, -0.039453562, 0.017625138, 0.035632394, 0.04339414, 0.0133263245, -0.015427967, -0.048003424, -0.04752578, 0.051346947, -0.03436663, -0.032623224, -0.0027106411, 0.03412781, 0.048719894, -0.016634023, 0.020897014, -0.03477263, 0.011027653, 0.028204998, 0.02999617, -0.02574512, 0.06739585, 0.0012276996, -0.031094756, 0.054165058, -0.038737092, -0.049340833, 0.058559403, 0.008675246, 0.047645193, -0.05540694, 0.015595143, 0.0138159115, -0.012114298, 0.009815626, -0.00018033003, -0.030426051, -0.032097813, -0.012597914, -0.037089214, -0.016837023, -0.065771855, 0.01981037, 0.05149024, -0.0067885444, -0.06266716, 0.03405616, 0.03732804, -0.02999617, 0.04296426, -0.052111182, -0.004376432, 0.02553018, -0.03611004, -0.005955649, -0.041053675, -0.040480502, -0.027273588, 0.008961834, -0.023882302, 0.01805502, 0.014401028, 0.020502957, -0.0873137, 0.030115582, 0.0076542776, 0.066965975, -0.021147778, 0.05230224, -0.010705242, -0.0703095, 0.016371317, 0.006251192, 0.028133351, 0.0078931, 0.017625138, -0.003922668, 0.0047376514, -0.009684273, -0.06046999, -0.025792886, -0.035512984, 0.02987676, -0.027464647, 0.0052988855, -0.06132975, -0.0009172296, 0.039477445, 0.020252192, -0.00357936, 0.01690867, 0.03673098, 0.05975352, 0.027345235, 0.019034194, 0.022664305, -0.0011948614, 0.001309795, -0.008161777, -0.005501885, -0.042988144, -0.0040510353, 0.023309126, -0.005767576, -0.004916769, 0.050917067, 0.042080615, 0.02760794, 0.020729838, -0.0016016068, -0.021768717, -0.025458533, 0.026581, -0.04774072, 0.025769003, -0.024933122, -0.004349564, -0.020682072, -0.026198884, -0.044636022, -0.017529609, 0.030163346, -0.0072303666, 0.012574032, 0.0014889123, -0.048194483, -0.022783715, -0.013732323, -0.015583201, -0.0032748606, 0.0077020423, -0.01795949, -0.004245079, -0.018508783, -0.026939236, -0.018019196, 0.003683845, 0.0106515065, -0.025386887, 0.0074393367, 0.012018768, 0.018174432, -0.0065019564, 0.0041973144, -0.036969803, 0.02646159, 0.0029360305, 0.0059228106, -0.015248849, 0.039286386, 0.045830138, 0.019165548, -0.011982945, 0.049054246, -0.054403882, 0.03911921, -0.022341892, 0.03080817, 0.02284342, -0.044397198, -0.029661817, -0.05655329, -0.015750378, -0.012191915, -0.011570975, 0.01163068, 0.10412683, 0.06132975, -0.039286386, -0.043131437, 0.03405616, 0.03489204, -0.027178058, -0.0064721038, 0.0049973717, 0.064816564, 0.002786766, -0.006513898, -0.04535249, 0.06390904, 0.03847439, -0.025339121, 0.009475303, -0.008949893, -0.022652363, 0.0088245105, 0.016060848, -0.047358602, 0.02541077, 0.017087787, -0.0363011, -0.038641565, -0.035106983, 0.008651364, -0.0002255758, 7.7664125e-05, 0.024407713, -0.009170803, 0.008531952, 0.00326889, 0.004609284, 0.01484285, 0.03195452, 0.00018219584, -0.009535009, 0.0069676614, 0.007296043, -0.02521971, -0.03673098, -0.022592656, -0.014639851, -0.05177683, 0.00964845, -0.0024553991, -0.054547176, 0.017768431, 0.053830706, -0.010985859, 0.016586259, -0.038737092, -0.012777031, 0.03570404, 0.02956629, 0.041435793, 0.044874843, 0.018043078, 0.041865673, -0.047692955, 0.04781237, -0.02646159, -0.008567776, 0.0018464004, -0.013218854, 0.0049048276, -0.0072721606, -0.0010194757, -0.0074871015, -0.017159434, 0.0078931, 0.024789829, 0.019774545, 0.027894529, -0.044636022, 0.034987573, 0.025673473, 0.0616641, 0.008800628, 0.07623231, -0.03142911, -0.012526267, 0.0385938, 0.018711783, 0.04482708, -0.0026091414, -0.009564862, 0.017374374, -0.010848535, 0.03322028, 0.030378288, -0.038116153, -0.033578515, 0.01732661, -0.040743206, 0.010012655, -0.02873041, -0.046642136, 0.0138995, 0.024109183, -0.0055377088, -0.05196789, -0.010770918, -0.0217926, -0.01597726, 0.024813712, 0.08315817, -0.028300527, 0.0021001499, -0.04153132, -0.00612581, -0.008597628, 0.00975592, 0.033482987, -0.014950321, -0.020562662, -0.01961931, -0.030951463, 0.00513768, -0.010866447, -0.030640993, -0.014986144, -0.069258675, -0.0042002997, -0.004660034, 0.028276645, 0.025554063, -0.037829567, -0.04026556, 0.020431308, -0.023619596, -0.027273588, 0.013756205, -0.02751241, 0.02127913, -0.01006639, 0.026724296, -0.02863488, -0.030115582, 0.0025748105, 0.050009537, 0.0350831, -0.011971003, 0.0015613055, -0.043752376, -0.02978123, 0.04929307, 0.0010844057, 0.023822596, 0.08086547, 0.03632498, 0.02407336, 0.0034091985, -0.0129442075, -0.06538974, 0.04212838, 0.0074871015, -0.003925653, -0.011720239, -0.04005062, 0.01411444, -0.06357469, 0.036683213, -0.0076602483, 0.061568573, -0.013338265, 0.011666504, -0.009033481, 0.0014501035, -0.000114746996, 0.0054929294, -0.007039308, -0.00043958361, -0.005904899, 0.018580431, -0.006997514, 0.015272732, -0.0138995, -0.0240853, -0.032432165, 0.017983373, -0.029136408, -0.0016374303, -0.026413824, -0.0019493928, -0.02865876, -0.002385245, -0.018807312, 0.0085916575, -0.03673098, 0.008263276, 0.043680727, 0.015248849, 0.0012209826, 0.025816768, -0.021840364, -0.019667076, 0.00047167545, -0.024192771, -0.014986144, 0.030378288, 0.0034838307, 0.016371317, -0.029828994, 0.028348291, -0.006060134, 0.019153606, 0.051872358, -0.0052660475, -0.016060848, 0.018293843, -0.01100377, 1.7841758e-05, -0.006113869, -0.030784287, 0.00082468573, 0.0009433509, -0.013577089, -0.0068422793, -0.033196397, 0.039716266, -0.0134337945, -0.014854792, 0.01047836, -0.004880945, -0.012932266, 0.035775688, 0.016920611, 0.042176142, 0.0039913296, 0.034677103, -0.010024596, 0.018114725, -0.019165548, 0.031596284, 0.0015142872, 0.007045279, -0.038880385, -0.011582916, 0.012275503, 0.052158944, -0.00047204862, -0.02521971, -0.027631823, -0.05674435, 0.018508783, 0.0017747536, 0.02002531, 0.007851306, 0.048194483, -0.02770347, -0.0007664726, -0.003746536, -0.018544607, 0.00012930027, 0.0109978, -0.018281901, -0.043943435, -0.012717325, -0.0038719182, 0.011744122, 0.03443828, 0.017040022, -0.0036539922, -0.02543465, -0.0007634873, -0.035106983, -0.01671761, -0.02947076, 0.033650164, 0.00059481856, 0.024574889, -0.0007149764, 0.039453562, -0.00024759228, 0.017923668, -0.015511555, -0.0026718325, -0.026915353, -0.0063347802, -0.04286873, 0.021709012, 0.01607279, 0.011553063, -0.0024001712, 0.024742065, 0.013720382, 0.039190855, 0.015833966, -0.00694975, 0.0034091985, -0.031667933, -0.07140808, -0.006770632, -0.0031554492, -0.009218568, 0.0439912, 0.047000367, 0.021685129, -0.030879816, -0.017183315, -0.016431022, -0.0029031923, -0.027536293, -0.033602398, -0.023989772, -0.020598484, -0.0064721038, 0.022962833, 0.014281617, 0.024312183, -0.029518524, 0.012323268, -0.035895098, 0.026867589, -0.0010187294, 0.004812284, 0.022055306, -0.0389998, 0.014699557, -0.01597726, -0.009982802, -0.00063437363, -0.0031494785, 0.005540694, 0.00017818436, 0.0076244245, 0.0016672831, 0.034223337, -0.0038629621, 0.011362005, 0.0017463933, -0.030115582, 0.0022747891, -0.011672474, 0.02646159, 0.0038062418, -0.016478788, 0.0087827165, -0.004451064, 0.009242451, -0.029709583, 0.023130009, 0.022891186, 0.0017135551, -0.04267767, -0.0050809598, 0.049675185, 0.033912867, -0.05292318, 0.04556743, 0.0017628124, -0.043322496, -0.023022538, 0.01473538, -0.069401965, 0.01785202, 0.005042151, 0.027106412, 0.040743206, -0.013792029, -0.005624282, 0.006454192, 0.030664874, 0.009845478, -0.029351348, 0.002686759, 0.020538779, 0.043609083, 0.0011560527, -0.0062392512, -0.032527693, -0.013911441, -0.005218283, -0.018532665, -0.010711212, 0.05063048, 0.07436948, -0.01307556, -0.0067407796, 0.036492158, -0.069019854, -0.046021193, 0.051633537, -0.015213026, -0.0028479644, -0.005836237, 0.040504385, -0.018747607, -0.0026748178, -0.0034002427, 0.0044988287, 0.0028643836, 0.018425195, 0.031667933, 0.010914212, 0.011773975, -0.020873131, -0.00492871, 0.0051675327, 0.03840274, -0.020299956, 0.01952378, -0.0031673901, 0.0015448864, 0.023440478, -0.058511637, 0.015953377, 0.01588173, 0.016657906, -0.013947264, 0.00029591663, -0.005913855, -0.0026434723, -0.024240537, -0.00095006777, 0.041889556, -0.036778744, 0.00881854, -0.024646536, -0.014651792, 0.010442536, -0.02354795, 0.04568684, 0.014592086, -0.02055072, 0.036133923, -0.0701662, -0.005552635, 0.005645179, 0.008472246, -0.0073199254, 0.01774455, -0.015284672, 0.005770561, -0.030020053, 0.030903697, -0.033650164, -0.053591885, 0.052541062, -0.03942968, 0.019738723, 0.00934395, 0.015081673, -0.040719323, -0.015416025, -0.0024658476, 0.0224016, 0.006113869, -0.007522925, 0.03775792, 0.04231944, 0.033578515, -0.024789829, 0.007606513, 0.06892432, 0.003403228, -0.005645179, -0.010394772, -0.012454621], [-0.010642229, 0.025316821, -0.033266988, 0.070887096, 0.017355196, 0.018775687, 0.0031588748, 0.03844491, -0.022739315, 0.00080475415, -0.02689769, -0.00592826, -0.009416482, -0.033244077, -0.014640225, 0.06703802, -0.042889673, 0.06254744, -0.042752206, -0.024629487, -0.0034080336, -0.06135606, -0.07881436, -0.017767597, 0.013002077, -0.019646311, 0.00019886161, -0.006168827, 0.017320829, 0.00093362934, 0.029532472, 0.00393499, 0.069466606, 0.0026090073, 0.017801963, -0.036405817, 0.008706237, 0.0054041673, -0.043141697, -0.0016080763, -0.023335006, 0.039132245, -0.024148352, -0.035558105, 0.001913081, 0.022853872, -0.019142266, -0.013632135, -0.027149713, 0.00054628775, -0.006145916, -0.035397727, 0.0041641016, -0.008711965, -0.055536628, 0.005203695, 0.06098948, -0.07391137, 0.055124227, -0.046051413, -0.014067446, 0.02611871, 0.04465383, -0.029142983, 0.03166321, 0.0007224172, -0.037780486, 0.014250735, 0.03067803, 0.028982604, 0.0049917665, 0.063738815, 0.005249517, -0.034618746, 0.0029326272, -0.04263765, 0.072078474, 0.029326271, -0.03608506, 0.0018643948, 0.043279164, -0.044287253, 0.0149838915, 0.010751057, 0.02319754, -0.050954398, 0.0413088, -0.08646668, 0.021914516, 0.008122003, 0.037986685, 0.020253457, 0.044905853, -0.0078986185, -0.036566194, 0.008774971, 0.016347105, 0.007108184, -0.033564836, 0.020459658, -0.028020335, -0.028638937, -0.050587818, -0.030128162, 0.025454286, 0.036841128, 0.014869336, -0.03285459, -0.0023054346, 0.07968498, 0.036795307, 0.015339015, -0.07757715, 0.044310164, -0.025591753, 0.048892394, -0.06337224, -0.06827523, -0.027447557, 0.014537125, -0.063051485, -0.043897763, 0.06680891, 0.00016843274, -0.0029125798, 0.0661674, 0.0017212001, 0.032258898, -0.0018987615, 0.015682682, -0.037528463, -0.009021265, 0.031113341, -0.010602134, 0.08738313, 0.019211, 0.035351902, 0.008614592, -0.03450419, -0.007824157, -0.050083775, -0.0035913228, 0.0022324051, 0.032946233, -0.03665784, -0.023140261, 0.00511205, -0.026874779, -0.0154535705, -0.021639582, -0.0064151217, -0.03631417, -0.020849146, 0.006283383, 0.0080647245, 0.009004082, 0.023621395, 0.04465383, 0.020998068, 0.05915659, 0.030632207, -0.051320974, 0.01804253, 0.023644306, -0.015465026, -0.10933201, 0.041698292, 0.0014054559, -0.029257538, 0.014067446, 0.028753493, -0.04962555, 0.0017398155, -0.00786998, -0.04398941, 0.03125081, 0.011902343, 0.023781773, -0.019325554, -0.03622253, -0.0521916, 0.02083769, 0.034343813, -0.016289828, 0.015671227, 0.038307443, 0.008270925, 0.027401736, -0.016427295, -0.07478199, -0.009296199, -0.018901698, 0.018397653, -0.023380829, -0.0143767465, -0.032946233, -0.009553949, -0.05494094, -0.017103173, 0.008729148, -0.005441398, -0.049304795, 0.0055387705, -0.021502115, -0.05824014, 0.044608008, -0.014113268, -0.017320829, 0.022361282, -0.022441471, 0.02200616, -0.006197466, 0.0034882226, -0.014021624, -0.006850434, 0.014960981, -0.033266988, 0.003259111, 0.017561397, -0.04898404, 0.0589733, -0.03567266, 0.0256834, -0.009834611, 0.026027067, 0.026737312, 0.011627409, -0.0072055566, -0.0041440544, 0.0053239786, 0.0149380695, -0.020379467, -0.011455575, 0.030632207, -0.044333074, -0.026279088, -0.030540563, -0.0086260475, 0.060668726, -0.011902343, 0.002670581, 0.015533759, -0.04401232, -0.043302074, 0.033564836, 0.059889745, -0.02790578, 8.2650186e-05, 0.0154993925, -0.01423928, 0.019634856, 0.014857881, 0.06850434, -0.001616668, 0.008133458, 0.02726427, -0.024400374, -0.015854515, -0.08183863, 0.012005443, -0.042362716, 0.011129091, -0.029669939, 0.08729148, -0.030219806, -0.021639582, 0.051687554, -0.07033723, -0.057965208, -0.026210355, 0.033725213, -0.038696934, -0.005584593, 0.016289828, 0.06891674, -0.04004869, 0.011890886, 0.011226463, -0.004401805, 0.026989335, 0.008093364, 0.053841203, -0.0023383691, -0.017985253, 0.04206487, 0.052466534, -0.01863822, 0.0044103963, -0.060118858, 0.003743109, -0.005361209, -0.00419274, 0.02412544, 0.018993342, 0.017538486, -0.0062948386, -0.015075536, -0.0075835907, -0.029188804, -0.016988618, 0.025316821, -0.030380184, -0.040323623, -0.03812415, -0.01832892, 0.014605858, 0.012326199, 0.1212458, 0.014949525, 0.01763013, 0.065892465, -0.00306723, -0.038238708, -0.042752206, 0.019405743, -0.04486003, 0.018775687, 0.009072815, 0.041789938, -0.008041814, -0.003261975, -0.03070094, -0.07977662, 0.0024142624, 0.03548937, -0.007955897, -0.03943009, -0.0014448344, -0.015797237, -0.021662492, -0.049488083, -0.02410253, 0.016083628, -0.015545215, -0.04898404, -0.09279016, 0.017504118, -0.04364574, 0.007658052, 0.023312096, -0.0030042245, 0.012211643, -0.013265556, -0.030609297, -0.012406387, -0.021444837, 0.0021049618, 0.006357844, 0.043737385, 0.022258181, 0.0013496099, 0.061081126, 0.0468533, 0.030769674, -0.024789864, 0.031388275, -0.017332286, -0.037917953, 0.026645668, 0.006546861, 0.029440828, -0.027951602, 0.031571563, 0.048479993, -0.019485934, -0.073773906, -0.03312952, -0.023965063, -0.04465383, 0.0012909, -0.048892394, 0.047701012, -0.020161811, -0.02205198, -0.008849432, -0.04586812, 0.019142266, -0.008963987, -0.016644951, 0.0018371878, -0.021467747, -0.0021923108, 0.031800676, 0.048342526, -0.018798599, 8.260543e-05, -0.04385194, -0.0060027214, 0.059843924, -0.00269206, -0.01214291, 0.016851151, -0.020413835, 0.0024357417, 0.039979957, 0.051137686, -0.037161887, -0.01384979, 0.008843704, 0.053428803, 0.0018787143, -0.03748264, -0.031617388, -0.026256178, 0.04586812, -0.012440754, -0.023873419, -0.02063149, 0.012979167, 0.07743969, -0.0023627123, 0.035031147, -0.023392284, -0.0022739316, 0.0085802255, 0.025293909, -0.046967857, 0.0704747, -0.011650319, 0.0032161525, 0.033793945, -0.09224029, -0.044149786, 0.047975946, -0.009433666, 0.058011033, -0.047746837, 0.012807333, -0.011593042, -0.05920241, -0.04449345, 0.005066228, 0.023827596, 0.009261833, -0.030952964, -0.06236415, -0.08270925, -0.044218518, 0.015235915, 0.03631417, 0.048067592, 0.002773681, 0.0043788934, -0.018981887, -0.025797954, 0.005255245, -0.06754207, -0.016816784, 0.04025489, -0.0026061432, -0.023461018, -0.037207708, -0.057094585, -0.0024457653, 0.07455288, -0.01604926, 0.011730509, 0.004235699, 0.028753493, -0.06969572, 0.008402664, 0.0120398095, 0.0641054, -0.020230545, 0.05741534, 0.016278371, -0.03727644, 0.04364574, 0.005046181, 0.0030385912, 0.007932985, 0.01744684, -0.021284457, 0.015911793, -0.02453784, -0.038353264, -0.017985253, -0.031823587, 0.021948881, -0.025820866, -0.0065010386, -0.020150356, 0.004519224, 0.0143767465, 0.016874062, 0.011993987, 0.010395934, 0.035443548, 0.017366651, 0.005533043, 0.04405814, 0.009536766, 0.04080476, -0.0051607364, 0.008104819, -0.01423928, -0.056498896, -0.038330354, 0.04577648, 0.0036801035, 0.023346461, 0.035191525, 0.025408465, 0.027058069, -0.0010252739, -0.044333074, -0.021639582, -0.022682039, 0.0033278444, -0.07950169, 0.013632135, -0.026187444, -0.005533043, 0.026943512, -0.023667218, -0.017091718, -0.021502115, 0.0062375604, 0.016473116, 0.010138184, 0.0010059427, -0.036176704, -0.029142983, -0.003505406, 0.00043960768, -0.005249517, 0.018340375, -0.017183362, -0.014743325, -0.04403523, -0.025179354, 0.0031817858, -0.0005566693, 0.0063750274, 0.025958333, -0.00015026492, 0.024652397, 0.024973154, -0.018065441, 0.0073544793, -0.012784421, 0.059935566, 0.017847786, 0.011913798, -0.0009450849, 0.019783778, 0.060256325, 0.026760222, 0.013425934, 0.024217086, -0.0388344, -0.0035397727, 0.014605858, 0.058881655, 0.029807406, 0.010155367, -0.008792154, -0.019577578, 0.0074232128, -0.02451493, 0.02110117, -0.030632207, 0.04025489, 0.05315387, -0.033381544, -0.026347822, 0.035122793, -0.0016367153, -0.012223098, -0.0015006803, -0.003425217, 0.08032649, 0.0056962846, -0.006947806, -0.008471398, 0.08371734, 0.004447627, -0.04765519, 0.012750055, -0.040781848, -0.03425217, -0.03631417, 0.0027593616, 0.004338799, 0.008815065, -0.0107052345, -0.002182287, -0.023942152, -0.0075034015, 0.0031646027, -0.0068046115, 0.031915233, 0.0031073247, 0.032785855, 0.0016782418, 0.02291115, -0.005140689, 0.0077210576, 0.03342737, -0.009662777, -0.008746332, -0.004476266, 0.0053698006, -0.029395005, -0.025637576, -0.00025828741, 0.027333003, -0.03047183, 0.0041841487, 0.010086633, -0.042500183, -0.0017025848, 0.020894969, 0.0033564835, 0.036130883, 0.0120856315, -0.0020992341, 0.042866763, -0.0005341162, 0.038926043, 0.057048764, -0.015201548, 0.028157802, -0.034366723, -0.037963774, -0.013655045, -0.018409109, 0.0032533833, -0.021399014, 0.004227107, -0.017985253, -0.036039237, -0.019222455, -0.0023254817, 0.025270998, 0.035603926, 0.02179996, 0.05604067, -0.01721773, 0.0080189025, 0.043874852, 0.03888022, 0.033335723, 0.009691416, -0.024927331, -0.031846497, 0.051550087, 0.032396365, 0.0065010386, 0.008900981, 0.014101813, 0.045318253, -0.004794158, 0.027126802, 0.02829527, -0.0028782133, -0.0454099, 0.01804253, -0.03748264, -0.009193099, -0.061126947, -0.060852014, 0.0041669654, 0.0049974946, -0.019016255, -0.026370734, -0.013803967, -0.03173194, 0.00052731443, 0.011375386, 0.07592755, -0.022956973, 0.007944441, -0.029876139, -0.003743109, -0.024056707, -0.007251379, 0.032923322, -0.028089069, -0.02728718, -0.025225176, -0.03306079, -0.026691489, -0.015888883, -0.016186727, 0.0001322761, -0.013563401, -0.018477842, -0.026347822, 0.03351901, 0.014399658, -0.015339015, -0.013884157, 0.07033723, -0.008878071, -0.0007517721, 0.018867332, 0.021731226, 0.007108184, 0.016415838, -0.0028180715, -0.03523735, -0.009181643, 0.001454858, 0.008270925, 0.0201389, 0.008076181, -0.027333003, -0.07739387, 0.0041612377, 0.029647028, 0.007337296, 0.035764303, 0.06937496, 0.053428803, -0.02412544, -0.0047998857, -0.006947806, -0.06671727, 0.0010009309, -0.020746047, -0.028089069, -0.0069019836, -0.02747047, 0.053749558, -0.056132317, 0.022086348, -0.028753493, 0.045661923, -0.0012801605, -0.01672514, -0.020723134, 0.017103173, 0.0066957837, -0.0071826456, 0.023667218, -0.025316821, -0.017572852, 0.007686691, -0.0057077403, 8.2113205e-05, -0.017412474, -0.017790508, -0.029784495, 0.024171263, 7.83096e-05, 0.054482713, -0.03388559, -0.019291189, -0.0077153295, -0.004043818, -0.00077110337, 0.020929335, 0.003505406, -0.00880361, 0.03846782, 0.036795307, 0.001913081, -0.0027164032, 0.002289683, 0.005344026, -0.010676595, -0.009639867, -0.0138154235, 0.03168612, 0.029532472, 0.015671227, -0.03629126, 0.0049488083, 0.017045895, 0.04866328, 0.026599845, -0.009485216, 0.006707239, 0.012612588, -0.010991625, -0.028226536, -0.016324194, -0.023461018, -0.021410469, 0.04449345, -0.020058712, 0.0094909435, -0.05915659, 0.052924756, 0.0019359922, 0.009485216, -0.027241357, -0.0007789791, -0.022223815, 0.02410253, -0.0075893183, 0.030036516, -0.033358634, 0.040346533, -0.0036801035, 0.020390924, -0.009771605, 0.014456935, -0.023598485, -0.00072098523, -0.016347105, -0.006249016, -0.019142266, 0.017595762, -0.04128589, -0.023002794, -0.015396292, -0.025568843, 0.0065583168, 0.039590467, 0.019382833, 0.033564836, 0.034000147, -0.011890886, 0.03450419, -0.006357844, -0.0026161668, 0.02231546, 0.009342021, 0.00480275, -0.05315387, 0.0408964, 0.016644951, 0.05956899, 0.045639012, 0.029349184, -0.03049474, -0.014903703, -0.04043818, -0.008563043, -0.035512283, -0.01905062, 0.027859958, 0.019084988, 0.010905707, -0.028272359, 0.031869408, 0.014995348, -0.005260973, 0.002132169, 0.0047254246, -0.030334363, -0.024652397, -0.04486003, 0.0014777691, -0.008351114, 0.019348467, 0.010516218, 0.044539277, 0.044264343, 0.035947595, -0.00069163035, 0.01444548, -0.02102098, -0.0056246873, -0.061447702, 0.0030357274, -0.01374669, -0.00063292054, 0.029005516, 0.044310164, 0.037849218, -0.04128589, 0.0058308877, -0.029944872, 0.045753565, -0.06355553, -0.013196822, -0.041079693, -0.041537914, -0.03530608, 0.03926971, 0.024171263, -0.010115272, -0.036886953, 0.012772966, -0.061218593, 0.017927974, 0.005014678, 0.007560679, 0.034137614, -0.040736023, -0.04403523, -0.026416555, -0.016301284, -0.005361209, -0.0320527, -0.02769958, -0.00058495026, 0.017779052, -0.0050232694, 0.014697502, 0.024010886, 0.03532899, -0.009342021, -0.019841056, 0.009204554, -0.022109259, 0.009920528, 0.015086992, -0.014869336, -0.018672587, -0.024400374, 0.008219375, 0.019944156, -0.0035397727, 0.039796665, 0.004224243, 0.005175056, -0.011633136, 0.023575572, 0.035810128, -0.058927476, 0.029555384, 0.003849073, -0.04538699, -0.025270998, 0.0051664645, -0.017022984, 0.020757502, 0.012314743, 0.009725783, 0.04181285, 0.009273288, 0.002992769, 0.007457579, 0.021834325, 0.009101454, -0.037757576, 0.009771605, 0.020975158, 0.031983964, 0.0045106327, -0.002481564, -0.03768884, -0.013529034, 0.030196896, -0.0063177496, 0.0017641585, 0.039636288, 0.08582517, 0.0093992995, 0.0023641442, -0.016060716, -0.03049474, -0.024560753, 0.04302714, 0.021227181, -0.00030804757, -0.014880791, 0.0339085, -0.017973797, -0.04224816, -0.01586597, 0.021295914, 0.021971792, 0.053520445, 0.01721773, 0.03468748, 0.012223098, -0.013311378, 0.010184006, 0.008540131, 0.035993416, -0.012876066, 0.038811486, -0.028616026, -0.034137614, 0.02451493, -0.06199757, 0.0064724, 0.02091788, 0.040346533, -0.010155367, 0.025752133, 0.0029311953, -0.011650319, -0.027447557, 0.028753493, 0.042156514, -0.04944226, -0.003310661, 0.028455649, -0.022922605, 0.0044046687, -0.0043244795, 0.046051413, 0.009519583, -0.022338372, 0.026783135, -0.020723134, 0.006798884, 0.04359992, -0.014399658, 0.028089069, 0.0021679676, 0.021158447, -0.023850506, -0.0061401883, -0.017618675, -0.052649822, -0.00035082697, 0.035764303, -0.056086496, 0.01216582, 0.0045134965, 0.010086633, -0.06254744, -0.025431376, 0.026599845, 0.009433666, 0.014170546, -0.029005516, -0.010991625, 0.052878935, 0.039338443, -0.008276653, 0.019898333, 0.120421, -0.018993342, 0.0038834398, -0.026989335, -0.021765592], [-0.01281962, 0.02244338, -0.024288537, 0.067293964, 0.0134829115, 0.030029025, 0.009846867, 0.069995366, -0.011336259, 0.022913715, -0.020706762, 0.0057977727, 0.0051917653, -0.030776735, 0.01199955, 0.034804728, -0.0320792, 0.049276546, -0.062277064, -0.023757903, 0.0029908428, -0.01442358, -0.051712636, -0.003039082, 0.035817754, -0.008749421, 0.001885859, 0.012747261, -0.007784633, -0.003280279, 0.018801305, 0.027882373, 0.008743391, 0.0042269775, 0.01360351, -0.031090293, 0.025904557, 0.023082552, -0.062180586, -0.00721782, -0.043174263, -0.014218562, -0.029474273, -0.053497493, -0.00020709023, -0.016268738, -0.015786342, -0.048432358, -0.028702442, -0.03429821, -0.0027315558, -0.013820588, -0.012319136, -0.028027091, -0.0043144114, 0.00025005345, 0.064737275, -0.05378693, 0.02489153, 0.0024134775, -0.007603735, 0.039749265, 0.045320913, 0.0068620546, -0.022901654, 0.00180747, -0.008996648, 0.012433705, 0.0208756, 0.042908944, -0.0006889189, 0.009834807, -0.007941411, -0.032223918, -0.021816269, -0.034949444, 0.057211928, 0.03212744, -0.017872697, -0.028364766, -0.0017908877, -0.040304016, 0.022310723, 0.024674453, 0.0015067274, -0.0559577, 0.02797885, -0.124940045, -0.0051917653, 0.024457375, 0.027134662, 0.017124986, 0.027592937, -0.013748229, -0.041317046, -0.009358443, 0.042016517, -0.022961954, -0.040400498, 0.00064520194, -0.023420228, -0.04165472, -0.061505232, -0.06854819, 0.018113894, 0.030294342, 0.016714951, -0.035624795, 0.0067896955, 0.017764159, 0.016558174, -0.014930094, -0.013977366, 0.059816856, -0.0123734055, 0.06401368, -0.046985175, -0.066473894, -0.043897852, 0.0047726855, -0.045224436, -0.019633435, 0.042040635, 0.04717813, 0.0123734055, 0.063241854, -0.02085148, 0.026845226, -0.004329486, 0.0015738104, -0.023432288, 0.017510902, 0.006675127, 0.016377276, 0.05677777, 0.031476207, 0.022853415, -0.016702892, -0.012614603, -0.015303949, -0.07057424, 0.010051885, -0.0192234, 0.045248557, -0.023697605, 0.009997616, 0.02169567, -0.061842907, -0.053545732, 0.0019717854, 0.00100549, -0.039942224, -0.013217595, 0.0050952863, 0.030969694, 0.0024948814, 0.027737655, 0.022527799, -0.012711082, 0.023142852, 0.027954731, -0.057163686, 0.010600608, 0.054607, -0.019464597, -0.10747738, 0.050651368, -0.012385465, -0.049976017, 0.022986073, 0.009702149, -0.067101, 0.021309754, -0.0032501295, -0.053690452, 0.01687173, 0.047757003, 0.026266353, -0.046237465, -0.05296686, -0.05291862, 0.04165472, 0.0120297, -0.046840455, -0.009919226, 0.020176128, 0.038856834, 0.0017456632, -0.007048982, -0.09059359, -0.0039737206, -0.012481945, 0.0033858027, -0.054703478, -0.040376376, -0.028702442, -0.012771381, -0.044283766, 0.010299112, 0.02013995, -0.012590483, -0.047757003, 0.009340353, -0.009919226, -0.044717923, 0.024143819, 0.015038633, -0.029112477, -0.014122084, -0.033839937, -0.0027164812, 0.026845226, 0.004323456, -0.0015263248, 0.027158782, 0.04165472, -0.06266298, -0.013048757, 0.001763753, -0.033092227, 0.07954677, -0.059961572, 0.021888627, 0.0076700645, -0.0012399033, 0.029956667, 0.031114412, 0.015171291, 0.004000855, 0.022853415, -0.011137271, -0.040521096, -0.031741526, 0.05542707, -0.083743595, -0.036493104, -0.025229206, -0.010884014, 0.07583234, -0.019114861, 0.0085866125, 0.020417325, -0.03362286, -0.0099252565, 0.03456353, 0.06970593, -0.00065160875, 0.030680258, -0.006117359, -0.0121623585, -0.0037867927, 0.025398044, 0.04088289, 0.018101834, -0.016690832, 0.06000981, -0.010021735, -0.008254967, -0.040665813, 0.007706244, -0.06589502, 0.022190124, -0.011649814, 0.06922354, 0.0020139948, -0.04233007, 0.049204186, -0.05296686, -0.05764608, -0.032392755, 0.012747261, -0.02334787, 0.028557723, 0.030246103, 0.041124087, -0.01758326, 0.04088289, -0.0025612107, -0.03210332, 0.03854328, 0.02010377, 0.04240243, -0.0012798515, 0.0059937453, 0.03630015, 0.04889063, -0.038133245, -0.023854382, -0.053545732, -0.0035968502, -0.016341096, -0.037337296, 0.055764746, 0.004712386, 0.04570683, 0.012282957, -0.026941704, 0.014930094, -0.026821105, -0.0020245472, 0.017872697, 0.00082685344, -0.057501364, -0.042667747, -0.03150033, 0.020972079, 0.017124986, 0.11220484, 0.014785375, -0.020779122, 0.056633055, 0.00086755544, -0.03210332, 0.002020025, 0.02085148, -0.014327101, 0.028630083, 0.03137973, 0.05465524, -0.019766094, 0.024674453, -0.003277264, -0.09946964, 0.01125184, 0.038133245, -0.010763416, -0.02157507, -0.03511828, -0.044380248, 0.018849544, -0.08244113, -0.044983238, -0.026676387, -0.01767974, -0.04252303, -0.08099395, -0.03548008, -0.050072495, 0.03429821, -0.0078992015, -0.038205605, -0.014942153, -0.018246552, -0.07949853, -0.063772485, 0.016413456, 0.004079244, 0.016184319, 0.04247479, -0.0043656654, 0.0015353697, 0.033984657, 0.037626732, 0.036565464, -0.026845226, 0.05229151, -0.06816227, -0.034057014, -0.008490134, 0.012988458, 0.045176197, -0.03287515, 0.028798921, 0.05147144, 0.0034370571, -0.06825875, -0.064303115, -0.02493977, -0.018873665, 0.036951378, -0.050699607, 0.022684578, -0.050796088, 0.022624278, 0.0027466307, -0.049831297, 0.027134662, -0.025156846, -0.034225855, 0.016606413, -0.011643785, -0.039676905, -0.010865925, 0.042064756, -0.009491102, 0.04151, -0.037361413, -0.0054088426, 0.012976398, -0.0044711893, 0.0055264262, 0.008984588, -0.039942224, 0.010226753, 0.07641121, 0.035769515, -0.03217568, 0.036468986, 0.032971628, 0.010769445, 0.0013507032, -0.014592418, 0.011330228, 0.012964338, 0.03926687, -0.01921134, -0.020767061, 0.007929351, 0.00320189, 0.039918102, -0.0045827427, -0.005387738, -0.034081135, -0.0013635168, 0.0078027225, 0.019802272, -0.002484329, 0.050458413, -0.026338711, -0.012385465, 0.0073987176, -0.054124605, -0.034635887, 0.01836715, -0.028147688, 0.07067072, -0.040304016, 0.012469885, -0.021128856, -0.07115311, -0.015074812, -0.035190642, -0.029498393, 0.0072600297, 0.005773653, -0.030318461, -0.01770386, -0.046213344, 0.011462887, 0.047105774, 0.001144932, -0.0021315785, 0.019163102, -0.006271122, -0.033357546, 0.027834132, -0.05682601, -0.010238812, 0.021466533, -0.008713242, -0.053497493, -0.03791617, -0.051760875, -0.014001486, 0.021370053, -0.006117359, 0.007784633, 0.014809496, -0.01761944, -0.07679712, 0.03449117, 0.023842324, 0.07621825, -0.026917584, 0.029426033, -0.0054209023, -0.058803827, 0.06357953, -0.006277152, -0.019416358, 0.0321998, 0.012198538, -0.012699022, 0.022720756, -0.018982204, -0.019114861, -0.030632017, -0.016944088, 0.033164587, -0.040496975, 0.008743391, -0.033357546, 0.025470402, 0.061167557, 0.0050862418, 0.019886693, -0.002888334, 0.035817754, 0.051133763, 0.01600342, 0.011426708, 0.024300598, 0.0037415684, 0.0078992015, 0.010486039, -0.03453941, -0.018379211, -0.049373023, 0.042812467, -0.007278119, 0.009062977, 0.049638342, 0.016654652, 0.045248557, 0.000430009, 0.00044847565, -0.027785894, -0.018174194, 0.012210598, -0.046237465, -0.0026486444, -0.028340647, -0.014532119, 0.00965391, -0.0060630892, -0.02086354, -0.014097964, -0.0130246375, 0.003982765, 0.021743909, -0.0067113065, -0.037867926, -0.035745393, -0.021345934, -0.03150033, 0.013494972, -0.0050862418, 0.0066992464, -0.029208956, -0.032537475, -0.029739588, 0.00013501379, -0.0023064462, 0.0072720894, 0.038808595, -0.017112928, 0.022322781, 0.02163537, -0.029040119, 0.016678773, -0.036613703, 0.041944157, -0.007079132, 0.010082034, -0.021008259, 0.028195929, 0.056054182, 0.017269704, -0.026724627, 0.03393642, -0.04867355, 0.03200684, 0.017330004, 0.02477093, 0.022841355, -0.0018210373, -0.029088357, -0.058080237, -0.014797435, 0.015400428, 0.0046159076, -0.021454472, 0.07573585, 0.055571787, -0.018053595, -0.04327074, 0.047781125, -0.0115111265, -0.004808865, 0.01687173, 0.0032260097, 0.038133245, -0.014978333, -0.011589516, 0.013820588, 0.07245558, 0.01764356, -0.03938747, 0.011161391, -0.010962403, -0.031741526, 0.01365175, 0.031572685, -0.019319879, -0.002847632, -0.018716887, -0.0161602, -0.03909803, -0.03504592, 0.0074469573, -0.015665745, 0.027906492, -0.020489685, 0.0062409723, 0.0019582182, 0.019151041, 0.011197571, 0.025422163, 0.017547082, -0.00051744294, -0.007615795, 0.008345416, -0.032344516, 0.0037295085, -0.014097964, 0.009479042, 0.013917066, -0.044524964, -0.0034973563, 0.029932547, -0.014905974, 0.017812397, 0.020393206, -0.0073444485, 0.02489153, -0.014218562, -0.00882178, 0.05928622, 0.024457375, 0.03861564, 0.060781643, 0.010039825, 0.073951, -0.040424615, -0.010220722, -0.0017290809, -0.015593385, 0.012089999, -0.016148139, -0.0134829115, -0.024397075, -0.014809496, 0.0030436045, -0.048842393, 0.0032501295, 0.03224804, 0.014869794, 0.03851916, -0.011378468, 0.02568748, 0.026314592, 0.049324784, 0.01852393, 0.052580945, -0.029377794, -0.029618992, 0.052484464, -0.006253032, 0.007048982, -0.0053847227, 0.027520576, 0.03610719, 0.024312656, 0.02976371, 0.014857735, -0.038133245, -0.012457824, 0.010076004, -0.034780607, 0.0044229496, -0.054076366, -0.058031995, 0.0064640795, 0.0224675, -0.015038633, -0.012385465, -0.014604478, -0.012198538, -0.02486741, 0.0335505, 0.06521967, -0.029836068, -0.016702892, -0.013675869, -0.021032378, -0.01774004, -0.028340647, 0.017800339, 0.0075012264, -0.027399978, -0.024372956, -0.037554372, -0.028364766, 0.010974463, -0.02725526, -0.0067716055, -0.05296686, 0.01679937, -0.027158782, -0.00017298346, 0.016714951, -0.0068379347, 0.0015858703, 0.044307888, -0.012988458, -0.01923546, 0.0064580496, -0.01913898, 0.022274543, 0.0041847676, -0.021297695, -0.0059485207, -0.03678254, -0.0053425133, 0.0016672742, 0.026025156, -0.009708179, -0.005134481, -0.074964024, -0.030559659, 0.031958602, 0.003919451, 0.028461246, 0.07462635, 0.028485365, 0.018560108, -0.024650333, -0.019500777, -0.062035866, 0.014954214, -0.006663067, -0.018234493, 0.007688154, -0.029884307, 0.036517225, -0.047829363, 0.041534122, 0.001839127, 0.046985175, -0.012252808, 0.025012128, -0.013591451, -0.00801377, -0.0023516708, -0.014893915, 0.015424548, -0.009846867, 0.008170548, 0.010678997, 0.016690832, 0.0028672293, -0.030318461, -0.0063856905, -0.009883047, 0.025132727, -0.014013546, 0.039701026, -0.043101903, 0.0024602094, 0.0033888177, 0.012566363, 0.018753067, 0.018089775, -0.026748747, -0.014266802, 0.065123186, 0.025325684, -0.0042420523, 0.021357995, -0.01849981, -0.020308787, 0.019573135, 0.010552368, -0.011589516, 0.03779557, 0.027520576, -0.014616538, -0.032778673, 0.026821105, 0.029160716, -0.016172258, 0.028340647, 0.009123276, -0.042691868, -0.004401845, 0.01760738, -0.017064687, -0.007923321, 0.0030722467, -0.027110541, 0.011318169, -0.043849614, 0.005879177, -0.04078641, 0.050168976, -0.0017999326, -0.0036631792, -0.0029817978, 0.013145236, -0.0032742491, 0.016980268, 0.02809945, 0.04570683, -0.042981304, 0.04643042, 0.019356059, 0.010992553, -0.0050048376, 0.047274612, -0.0052430197, 0.028123569, -0.0054209023, -0.010100124, -0.002853662, -0.0016054675, 0.0152798295, -0.026411071, -0.03842268, -0.041920036, -0.0035033864, 0.019356059, -0.014483879, 0.01770386, -0.0092921145, -0.000470711, 0.022238363, 0.010244843, -0.035817754, -0.02243132, 0.019428417, -0.00030846836, -0.034997683, 0.02797885, -0.011547306, 0.039845742, 0.04488676, 0.026169874, -0.017896816, -0.013965306, -0.055041153, -0.015074812, -0.008996648, -0.036613703, 0.011848803, 0.019741975, 0.023794083, -0.060299248, 0.032440994, 0.01443564, 0.0004073968, -0.014688897, 0.016401395, -0.02978783, -0.01843951, -0.030294342, 0.030800857, -0.006602768, 0.0023200135, 0.015074812, 0.03765085, 0.038060885, 0.0067957253, 0.009768479, 0.027713535, -0.030728497, 0.005110361, -0.042836584, 0.027110541, -0.0075193164, -0.009056947, 0.046864577, 0.015629565, -0.000114851224, -0.025470402, -0.010100124, -0.017293824, -0.0025928677, -0.052822143, -0.055716507, -0.040593453, -0.041920036, 0.0068379347, 0.025156846, 0.030487299, 0.028147688, 0.0031807853, -0.014339161, -0.03784381, -0.01526777, 0.006584678, 0.0012858815, 0.025060367, -0.07216614, -0.015713984, -0.003452132, -0.013446732, -0.018222433, -0.03630015, -0.014025605, 0.01442358, 0.0030722467, -0.021514772, 0.013832647, 0.012210598, 0.035865992, 0.017752098, -0.03461177, -0.019585196, -0.041871797, -0.007881111, 0.0013182923, -0.02957075, 0.025952796, -0.0070911916, 0.024421196, 0.012469885, 0.008755451, 0.053883407, 0.0039556306, -0.0132899545, -0.00879163, 0.030632017, 0.04500736, -0.034587648, 0.050651368, -0.024385016, -0.034708247, 0.014688897, -0.023456408, -0.031669166, 0.009521252, -0.0040099, -0.0074469573, 0.06285594, 0.01679937, -0.011499067, -0.0021858478, 0.01696821, 0.027134662, -0.0027858252, 0.034804728, 0.025084488, 0.010142334, 0.004724446, 0.0046882667, -0.03511828, -0.024300598, -0.008134369, -0.014483879, -0.013000518, 0.06980241, 0.03851916, -0.030342583, -0.0039797504, 0.008767511, -0.022756936, -0.017354123, 0.04182356, -0.007290179, -0.009352413, 0.008677062, 0.04643042, -0.018174194, -0.017088806, -0.045899786, 0.005800788, -0.0121261785, 0.04905947, 0.019886693, 0.015726045, -0.0025506583, -0.011487007, -0.0058912365, 0.012952278, 0.025808077, -0.017378243, 0.0514232, -0.020742942, -0.0074107777, 0.02894364, -0.050940804, 0.00092710095, 0.03359874, 0.026145754, 0.021707729, 0.011360378, -0.00882178, -0.023396108, -0.029739588, -0.00602088, 0.029064238, -0.05856263, 0.02092384, -0.005366633, -0.021864507, 0.0025506583, -0.019030442, 0.056440096, 0.021345934, 0.001386129, 0.036565464, -0.020284668, 0.014556238, 0.020755, -0.0034762516, 0.02010377, 0.0041847676, -0.029329555, -0.024276478, -0.012976398, -0.005761593, -0.04331898, -0.02959487, 0.022093644, -0.052339748, 0.023166971, 0.00888811, -0.0032199798, -0.04271599, -0.022105705, -0.0020908765, -0.0014117562, -0.02179215, -0.001319046, -0.020562043, 0.021816269, 0.051953834, 0.01845157, 0.0024948814, 0.16227734, -0.004555608, 0.0020667568, 0.023661425, -0.025036247], [0.003953579, -0.0058417087, -0.03530638, 0.08138331, 0.02679502, 0.025691697, -0.062889494, 0.04799461, 0.012675095, 0.046418432, 0.023865957, -0.0054640826, 0.011276238, -0.043161, -0.010836222, 0.02900167, -0.05437813, 0.023905363, 0.0055264733, -0.033546317, 5.5207267e-05, -0.06667232, -0.050542764, -0.015971934, 0.025888719, -0.011230267, -0.019255638, 0.011138323, -0.013226758, 0.040980622, 0.026309034, 0.01023202, 0.02330116, -0.017876482, -0.00853763, -0.0025645725, 0.009837976, 0.060052373, -0.021462286, -0.022788903, -0.044132978, -0.022749498, -0.0074802767, -0.033756472, -0.020858085, 0.027346684, -0.0009104068, -0.008491658, -0.015682967, -0.007585355, -0.020739872, -0.010034998, -0.009719763, -0.020148804, -0.03685629, -0.03822231, 0.033651393, -0.021186456, 0.04581423, -0.009562145, -0.06430805, 0.04392282, 0.042583067, 0.011775361, -0.029999916, 0.0009785437, 0.0043935953, 0.058896508, 0.031996407, 0.057635564, 0.008583602, 0.02755684, -0.0058121555, 0.01631344, 0.006981154, -0.067985795, 0.101453304, 0.029527063, 0.008931674, -0.012983764, 0.021882601, 0.002956975, 0.027924616, 0.0031638483, -0.0063638175, -0.036541052, 0.017600652, -0.14469312, -0.006005894, 0.0048598815, 0.005835141, -0.004948541, 0.033992898, -0.0022673972, -0.03233791, -0.0010163062, 0.005969773, -0.0018520089, -0.013463184, -0.01697018, -0.010711441, -0.029421983, -0.069404356, -0.054798447, 0.024943013, 0.057635564, 0.030630387, 0.0024512848, -0.007434305, 0.039194286, 0.0025957676, -0.0015819242, -0.0066856206, 0.034308136, -0.017955292, 0.026978908, -0.023143543, -0.05101562, -0.024995552, -0.01235986, -0.10471074, -0.058423653, 0.060525224, -0.0018011114, 0.0083603095, 0.03317854, 0.0017896184, 0.051908787, -0.008268366, -0.016536731, -0.05453575, -0.0031950437, 0.025323922, 0.028581357, 0.049991105, 0.011079215, 0.048414927, -0.0070074233, -0.04602439, 0.008872567, -0.08490344, 0.007972832, 0.03183879, 0.018165449, -0.028817782, -0.007099367, -0.0030177236, -0.03525384, -0.040481497, -0.0053885574, -0.008603304, -0.025875583, -0.007703569, -0.0027106972, 0.048309848, -0.00851136, 0.011315643, 0.011072649, 0.007211013, 0.05516622, 0.02758311, -0.078703806, -0.006869508, 0.03764438, -0.005460799, -0.02332743, 0.040034913, -0.026256494, -0.05947444, 0.01876965, 0.035805505, -0.017443033, 0.017745133, -0.008347174, -0.0051685493, 0.0057760347, 0.02236859, 0.026361572, -0.01830993, -0.017600652, -0.029605871, 0.05721525, 0.049702138, -0.070980534, 0.023432508, 0.04234664, 0.021120781, 0.025836179, 0.032075215, -0.082171395, -0.0198073, 0.017154068, -0.021659309, -0.028581357, -0.011919844, -0.0037532733, -0.03407171, -0.020963164, -0.02370834, 0.0310507, 0.030367691, -0.05873889, 0.057740644, 0.0071716085, -0.025271382, 0.021633038, 0.023288026, 0.016904507, 0.012911523, 0.03186506, -0.0017699163, 0.0011328778, 0.009575279, -0.02439135, -0.004239261, 0.032127757, -0.026558595, -0.004088211, 0.0075065466, -0.062469177, 0.05936936, -0.022933386, -0.0063342643, -0.015669834, -0.01661554, 0.02005686, 0.02081868, 0.013233325, 0.0030817557, 0.03885278, -0.004508525, -0.03680375, -0.033467505, 0.030682927, -0.034780987, 0.0015014735, -0.028450008, -0.01937385, 0.037381683, -0.019242503, -0.005237507, -0.0077823773, -0.04250426, 0.021436017, 0.009818274, 0.04232037, 0.02155423, 0.00582529, -0.014238139, 0.025205709, 0.009036752, 0.0037204362, 0.027451761, 0.028161041, 0.0038813376, 0.08322218, 0.030551579, -0.013949173, -0.02056912, 0.03246926, -0.02831866, 0.059789676, -0.022289779, 0.040034913, -0.015407138, 0.0004408372, 0.034938607, -0.06141839, -0.058843967, -0.012556883, 0.05390528, -0.0517249, 0.038563814, 0.044474483, 0.02971095, 0.008806893, 0.059842214, 0.053458694, -0.041295856, 0.057005093, -0.02687383, 0.009122129, -0.0011804914, 0.0103370985, 0.035464, 0.011486395, 0.010704874, -0.009936487, -0.022289779, 0.020542849, -0.02515317, -0.02256561, 0.056111928, -0.0008586885, 0.044999875, 0.0127604725, 0.014645318, 0.032942113, -0.032968383, -0.008176422, -0.034281865, -0.0038189474, -0.028765243, -0.02479853, 0.006038731, 0.059947293, 0.0024200894, 0.08584914, -0.0018208136, -0.018152313, 0.042110216, -0.016563, -0.0348598, -0.027872076, 0.025823046, -0.004948541, 0.01023202, -0.008288068, 0.04035015, -0.022854578, -0.0036547622, -0.033572584, -0.11106799, 0.012228512, 0.041873787, 0.027766997, 0.024535833, -0.022434263, -0.012281051, 0.0064196405, -0.05947444, 0.0045512132, -0.014921149, -0.008242096, -0.049702138, -0.08647962, -0.017403629, -0.07434305, 0.01841501, -0.04171617, 0.030183803, 0.007552518, -0.038590085, -0.024627777, -0.009522741, 0.003887905, -0.02340624, 0.0046694265, 0.022683823, 0.010172914, 0.0015261013, 0.05658478, 0.049176745, 0.020280153, 0.03822231, 0.005161982, -0.01061293, -0.087320246, -0.018953538, 0.0050667548, 0.069194205, -0.05369512, 0.0473116, 0.063835196, 0.038511276, -0.037591837, -0.011151457, 0.006170079, 0.012950927, -0.0038846214, -0.057005093, 0.054956064, -0.036304627, -0.02431254, -0.038590085, -0.018809054, 0.049833484, -0.017246012, -0.0011936262, 0.026269628, -0.0041801548, 0.0009005557, -0.005427962, 0.029947376, -0.0037204362, -0.01486861, -0.026703078, 0.0008718233, 0.012977197, -0.018349336, 0.011847602, 0.039824758, 0.024916742, -0.04184752, 0.0053918413, 0.044921067, -0.037591837, 0.020096267, -0.01628717, -0.0072898217, -0.013318702, -0.008209259, -0.057477947, -0.036987636, 0.01519698, -0.041479744, -0.01907175, -0.040980622, -0.013207056, 0.0665147, -0.03246926, -0.012622557, -0.0001415071, 0.058949046, 0.02535019, 0.049780946, -0.013213623, 0.051987596, -0.022460533, -0.00066207675, 0.050595306, -0.049229283, -0.014211869, 0.025678562, -0.029579602, 0.041978866, -0.056900017, 0.01038307, -0.018835323, -0.050752923, -0.0061996323, -0.00014797189, -0.02469345, 0.008603304, -0.020963164, -0.043633852, -0.038379926, -0.049465712, -0.010665469, 0.03265315, -0.007178176, -0.03593685, 0.0067184577, 0.04323981, -0.029395714, 0.009391393, -0.057583027, -0.0053655715, 0.03246926, -0.002937273, -0.042583067, -0.0006678232, -0.054693367, -0.037907075, 0.023629531, 0.004410014, 0.0128064435, -0.012445237, 0.028187312, -0.061365854, 0.031996407, 0.013121679, 0.053484965, 0.005132429, 0.06562153, 0.032154024, -0.043528773, 0.04862508, 0.016182091, 0.025034957, -0.00919437, -0.012550315, -0.011584906, 0.055586535, 0.006721741, -0.06577915, 0.009693493, 0.02586245, 0.006688904, 0.0046136035, -0.022237241, 0.024141788, -0.008143585, 0.087950714, 0.016484192, -0.022421127, -0.005703793, 0.010849357, 0.029894838, 0.009240342, -0.0233537, 0.052828223, -0.008196124, 0.019649683, 0.01841501, -0.0029389148, -0.0113025075, -0.032154024, 0.010862491, -0.006580542, 0.009989026, 0.062889494, 0.027530571, 0.006436059, -0.0015154292, -0.018638302, -0.022985926, -0.01871711, -0.007992535, 0.030814275, -0.011873872, -0.0030078725, -0.04387028, 0.003733571, -0.018217988, -0.019610278, 0.023984171, 0.0024332243, 0.009634387, 0.006659351, -0.0024956148, -0.011893574, -0.060262527, -0.022959655, -0.03943071, -0.018730246, 0.023537587, 0.01721974, -0.015958799, -0.07980713, -0.0006000968, -0.009516173, 0.0061536604, -0.008701814, -0.0063178455, -0.022473667, 0.012077462, 0.020976298, -0.01046188, 0.0064524775, -0.054062895, 0.059579518, 0.021803793, -0.006757862, -0.014553375, 0.068931505, 0.028555086, -0.009844543, 0.016300304, 0.004249112, -0.006843238, 0.037013907, 0.009857678, 0.046155736, 0.02679502, -0.034492023, -0.051094428, -0.012701365, 0.011808198, -0.024325676, 0.0016705842, 0.027924616, 0.0833798, 0.041873787, -0.002502182, -0.041295856, 0.014645318, -0.0011033243, -0.027294144, 0.018073505, -0.008531062, 0.03672494, 0.0035726696, -0.023879092, -0.011046379, 0.070087366, 0.0072044455, -0.007887456, -0.042583067, -0.038590085, -0.018428145, -0.0049124206, 0.027320413, -0.05280195, 0.020555984, 0.03265315, 0.008412848, -0.03039396, -0.038773973, -0.018441278, 0.022907116, 0.02479853, 0.033020925, -0.016602404, -0.024706585, -0.005352437, 0.028712705, -0.017810808, 0.005996043, 0.035910584, -0.016549867, -0.0073949005, 0.002315011, 0.009785437, -0.0108296545, -0.006225902, 0.028476277, -0.06719771, 0.015761778, 0.027872076, -0.088948965, -0.012175973, 0.06572661, -0.025113765, -0.001904548, -0.048651353, 0.022237241, 0.05668986, 0.013154517, 0.051383395, 0.05931682, 0.00022678077, 0.056847475, -0.048992857, 0.03457083, 0.030840544, -0.01223508, 0.00056356564, -0.0063079945, 0.02540273, 0.002091719, -0.020385232, -0.010737711, -0.03735541, -0.015459676, 0.005404976, 0.019675951, 0.02766192, -0.02416806, 0.024128653, 0.02976349, 0.010895329, 0.00673816, 0.11117307, -0.034807257, -0.03401917, 0.03246926, -0.0064426265, 0.055428915, -0.023984171, -0.024233732, 0.01876965, -0.018217988, 0.04823104, 0.015354598, -0.018572627, -0.020753007, 0.0425568, -0.008820028, -0.009397959, -0.039089207, -0.06761803, 0.0022690392, 0.042872034, -0.0089448085, -0.0063966545, -0.044159245, -0.0029389148, -0.0025120333, 0.0022345602, 0.058371115, -0.048861507, -0.0212784, -0.042110216, -0.031287126, -0.03601566, -0.042031407, 0.016168956, -0.019347582, -0.042793225, -0.024181193, -0.05361631, 0.00414075, 0.008866, 0.006731592, -0.00019148097, -0.04959706, -0.00452166, -0.021462286, -0.025337057, -0.0005126682, -0.06677739, -0.024299407, 0.02758311, 0.041269585, -0.0022017232, 0.0040126857, -0.0325218, 0.006248888, -0.0063375477, -0.019623412, -0.024890473, -0.029527063, -0.0041932897, 0.03407171, 0.051567283, -0.005769467, -0.02619082, -0.06031507, -0.0064623286, 0.02439135, 0.020831816, -0.00843255, 0.067775644, 0.025245113, 0.011387884, -0.02441762, -0.000996604, -0.0877931, 0.043397427, 0.019872975, -0.012813011, -0.029290635, -0.03197014, 0.02201395, -0.033073463, 0.011289373, -0.018283661, 0.06241664, 0.0071716085, 0.0054476643, -0.009542443, 0.012333591, -0.01132221, 0.0032853454, 0.004423149, -0.04381774, 0.0073029567, 0.03415052, 0.018756514, 0.03162863, -0.02834493, -0.030709196, -0.05931682, -0.014422026, 0.0212784, 0.0375393, -0.05088427, -0.025415866, -0.014093656, -0.0012946001, -0.03664613, 0.0096409535, -0.028817782, 0.021422882, 0.036908828, 0.011085783, 0.01874338, 0.0015827451, -0.0006431954, -0.0425568, 0.0149605535, -0.01765319, -0.026978908, 0.047731914, 0.0072569847, 0.0062094834, -0.050043643, 0.012215377, 0.008872567, 0.023393104, 0.063362345, -0.00052908674, 0.017613785, 0.026558595, -0.018073505, 0.010809952, -0.0036383437, -0.04662859, -0.011013541, -0.004863165, 0.017390493, 0.0021081376, -0.0348598, 0.030919353, 0.014999958, 0.0040356717, -0.015105036, 0.024916742, -0.008268366, 0.038590085, 0.028476277, 0.013712746, 0.008196124, 0.04812596, 0.013266162, 0.02016194, -0.0076050577, -0.010796817, -0.004341056, -0.023550723, -0.032942113, 0.010626065, 0.037066445, -0.0032754943, -0.02910675, -0.01170312, -0.045052413, -0.04253053, 0.025547214, 0.036514785, 0.007434305, -0.019347582, -0.00024627778, -0.017416764, 0.021396613, 0.009076157, -0.024509564, -0.0021442585, 0.014474565, -0.022381723, -0.049071666, 0.0045052413, -0.018047234, 0.012642259, 0.042294104, 0.011617743, 0.017534977, -0.016457923, -0.01800783, -0.04321354, -0.031602364, -0.014619049, -0.00095473684, 0.0054772175, 0.04823104, -0.017364224, 0.049675867, 0.004574199, 0.02649292, -0.017850213, -0.013331836, 0.021422882, 0.00097526, -0.021055108, 0.024548968, 0.0054969196, 0.008787191, -0.0015523708, 0.022000814, 0.05022753, 0.034281865, 0.020634793, -0.01038307, -0.020240748, -0.02236859, -0.051304586, -0.010192616, 0.0046595754, 0.01598507, 0.025310786, 0.014119925, 0.039168015, -0.040481497, 0.014934284, -0.020726737, -0.02302533, -0.07602431, -0.03244299, -0.035569075, -0.023905363, 0.005684091, 0.017456168, 0.046076927, 0.016168956, -0.01205776, 0.016957045, -0.0129180895, 0.0035431162, 0.009897082, 0.032180294, 0.0073029567, -0.06278441, -0.021830061, -0.012668529, -0.0097525995, 0.02292025, -0.011000407, -0.03533265, -0.0025284518, 0.012556883, -0.0047022635, 0.044789717, 0.018428145, 0.0100218635, 0.05020126, -0.014343217, -0.006682337, -0.02586245, 0.04124332, -0.0054345294, 0.0055593103, -0.008504792, -0.03162863, 0.022499938, 0.0077495403, 0.017416764, 0.032600608, 0.0023117273, -0.017062124, 0.007834917, 0.005161982, 0.0047252495, -0.043607585, 0.02611201, 0.016720619, 0.0019849988, -0.0060650003, 0.012051192, -0.03664613, -0.00046012897, -0.0020966448, 0.02261815, 0.021028837, -0.022079622, 0.025218843, -0.0053688553, -0.0063933707, 0.038012154, -0.034833528, -0.024535833, 0.018231122, 0.018073505, 0.019242503, 0.0074605746, -0.015105036, -0.0023675503, 0.009049887, -0.039378174, -0.021751253, 0.006524719, 0.09646208, -0.02471972, -0.019084886, 0.04250426, -0.028055964, -0.022762634, -0.005073322, 0.04027134, 0.007926861, -0.0325218, 0.03543773, -0.03971968, 0.015998203, -0.018848458, -0.021948274, -0.0009448857, 0.037145253, 0.0017912603, 0.008235528, -0.0021081376, -0.021475421, 0.02971095, -0.01377842, 0.027031448, -0.022250375, 0.0073095243, -0.039903566, 0.009463633, 0.036462244, -0.044343133, 0.001351244, 0.020831816, 0.012734203, 0.010350234, 0.017311685, 0.012313888, -0.00777581, -0.049334362, 0.018204853, 0.02084495, -0.044211786, 0.011900142, -0.002027687, 0.0016648377, -0.047075175, -0.030026186, 0.032495532, 0.0013225116, -0.021409748, 0.054167975, -0.07765302, -0.005125861, 0.01223508, 0.0044034463, -0.019413255, 0.015433406, 0.012425534, 0.015131306, -0.02185633, 0.005749765, -0.028371198, -0.03262688, 0.030026186, -0.06084046, 0.03275823, -0.013844094, 0.0018437996, -0.04662859, -0.010304262, 0.015945664, 0.007795512, -0.0007511472, -0.012885253, 0.03275823, 0.017048988, 0.022289779, -0.0063605336, 0.009588415, 0.06430805, -0.021619905, -0.015853722, -0.008623006, 9.0353155e-05], [0.033290103, 0.0031468258, -0.0247014, 0.036082026, 0.020892084, -0.015722299, -0.029315166, 0.021412611, 0.0004000077, 0.035395876, -0.058866937, -0.004096197, 0.008216054, -0.021081366, -0.012942208, 0.025127286, -0.034118216, -0.023471061, 0.018052842, -0.027445998, -0.008612365, -0.050727777, -0.05640626, -0.029906675, 0.03163388, 0.000912402, -0.015036149, 0.010795032, -0.013959603, 0.033645008, 0.011575824, 0.007080358, 0.011250493, -0.006648557, -0.004208584, -0.0041139424, 0.010729966, 0.04743899, -0.0077605927, -0.006128029, -0.03998598, -0.019425143, -0.018904615, -0.05498664, -0.0041316873, 0.015639488, -0.017082768, -0.009404987, -0.008334356, -0.030498182, -0.0015556676, -0.0172129, -0.01243351, 0.021140518, -0.04547518, 0.003055142, 0.027966527, -0.054276828, 0.055459846, 0.014906017, -0.05635894, 0.040056963, 0.037880212, -0.010511108, -0.020832933, -0.0123507, 0.012244228, 0.012539982, 0.042186394, 0.05574377, -0.01649126, 0.05858301, 0.023198968, -0.020880254, 0.008813478, -0.06984533, 0.085177235, 0.01935416, 0.020726461, -0.034757044, 0.050585814, 0.009588354, 0.027375018, -0.0058411476, 0.011782851, -0.035537835, 0.034236517, -0.120005265, -0.009121062, 0.005223021, 0.009446393, -0.026996452, 0.014125225, -0.0021797093, -0.030758448, 0.00535611, -0.014101565, -0.0053679408, -0.008121413, -0.02342374, -0.021093197, -0.014953338, -0.04216273, -0.06511327, 0.040956054, 0.021743856, 0.0036791835, -0.025079964, -0.027990187, -0.018265786, 0.024393814, -0.01794637, -0.012658284, 0.03373965, -0.0022299874, 0.04138194, -0.022441836, -0.052904528, -0.0022551266, 0.00446589, -0.07784253, -0.0510117, 0.06828375, 0.024322834, 0.030166939, 0.022867722, -0.00039150476, 0.057305355, 0.009718486, -0.020821102, -0.03646059, 0.017023617, 0.0005955752, 0.04135828, 0.09908952, 0.0065125097, 0.07443544, -0.009972835, -0.06378829, 0.005631162, -0.08579241, 0.012232398, 0.002873253, 0.027375018, -0.052904528, -0.021519084, -0.012930378, -0.022903213, -0.07206941, -0.0044422294, 0.0038300182, -0.025695134, -0.006116199, 0.019448802, 0.04251764, -0.008482234, 0.017816238, -0.00018734187, 0.014349999, 0.0096061, 0.053188454, -0.069372125, 0.012279718, 0.023057004, -0.027919207, -0.055933055, 0.02898392, -0.039039567, -0.050585814, 0.028084828, 0.038921267, -0.01792271, 0.023305438, 0.010031986, -0.0053501953, 0.021164177, 0.040246245, 0.021483593, -0.013178811, -0.074388124, -0.04696578, 0.05635894, 0.04325111, -0.052384, 0.012066775, 0.05157955, 0.05441879, 0.023293609, 0.061942782, -0.05834641, -0.018443238, -0.009097402, -0.023885118, -0.0035431364, -0.027871884, -0.023719495, -0.0042292867, -0.029338827, -0.043676995, -0.004335758, 0.02069097, -0.054040227, 0.0052378085, -0.034804367, 0.0005164609, 0.010919249, 0.012717435, 0.025576832, 0.025955398, 0.03094773, -0.009671166, -0.014409149, -0.011280069, -0.010404636, -0.013592867, 0.049828686, -0.00040370462, -0.010037901, 0.0048947334, -0.037667267, 0.0396784, -0.012646453, -0.0036703108, 0.008198309, -0.023825966, 0.0028288898, 0.02751698, 0.006991632, 0.004007471, 0.031681202, -0.016053542, -0.045664463, -0.031775843, -0.00308176, -0.059387464, -0.028487055, -0.02279674, -0.02957543, 0.0199575, -0.00600677, 0.015603997, 0.027375018, -0.05711607, -0.016254656, 0.005702143, 0.035537835, 0.023045175, -0.009215704, -0.03982036, 0.03648425, -0.0024769423, -0.032556634, 0.03773825, 0.05550717, 0.014255357, 0.05550717, 0.003208934, -0.009848618, -0.024038909, 0.053093813, -0.014953338, 0.044457786, -0.037501644, 0.07145424, -0.0133326035, -0.035395876, -0.0056814402, -0.059766028, -0.039725717, -0.00788481, 0.041594885, -0.039749376, 0.033195462, 0.048290763, 0.013202472, 0.00065546547, 0.061043687, 0.0076718666, -0.024157211, 0.069372125, -0.025979057, 0.01993384, 0.014137056, 0.026050039, 0.035821762, 0.039441794, 0.00081184553, -0.017544145, -0.041121677, 0.01033957, -0.044410467, 0.0053501953, 0.043866277, 0.0060156425, 0.028581696, -0.0031823162, 0.010564344, 0.016077204, -0.028226791, 0.006062963, -0.026996452, -0.0144683, -0.05299917, -0.037525304, 0.02967007, 0.0658704, -0.015308242, 0.089057535, 0.0013013189, -0.034662403, 0.06355169, 0.0013405064, -0.04821978, -0.06804715, 0.018833634, -0.021045877, -0.00089983246, 0.0031556983, 0.04874031, -0.031420935, -0.05011261, -0.01651492, -0.07405688, 0.0065775756, 0.025245586, 0.02962275, 0.02402708, -0.019602595, -0.0023453315, 0.002083589, -0.05560181, -0.020903913, 0.011558078, 0.005178658, -0.038873944, -0.09568243, -0.01443281, -0.070507824, -0.0052732993, -0.007358367, 0.0017878347, 0.016148185, -0.050633136, -0.00896727, 0.029741053, -0.0060008545, -0.035514176, 0.012587303, 0.02199229, 0.003942405, 0.0013612092, 0.05437147, 0.0015320072, 0.0369338, 0.01988652, -0.022075102, -0.016266486, -0.050349213, -0.020182274, 0.0164676, 0.06743198, -0.057399996, 0.02687815, 0.06558647, 0.04067213, 0.0031290804, -0.01238619, 0.007707357, 0.009647505, 0.01449196, -0.048290763, 0.07344171, -0.04261228, -0.019697236, -0.019105727, 0.005004163, 0.02751698, -0.021400781, -0.025789775, 0.0064237835, 0.031137012, -0.011475267, -0.019969331, 0.029788373, 0.00930443, 0.004226329, 0.011315559, -0.0039453623, -0.014397319, -0.00022791566, -0.00050204294, 0.05498664, 0.03714674, 0.021708366, 0.04138194, 0.01863252, -0.045522504, 0.040530168, -0.0024769423, -0.020939404, 0.008565045, 0.0315629, -0.02067914, -0.054040227, 0.037359685, -0.053945582, -0.005929874, -0.014835035, 0.008162819, 0.072116725, -0.03447312, -0.020241424, -0.008352102, 0.009026421, 0.011067126, 0.038235117, -0.029362487, 0.047178727, -0.03655523, 0.010233099, 0.04147658, -0.03515927, -0.034023575, 0.0344258, -0.061942782, 0.022134252, -0.048196122, 0.0565009, -0.033976253, -0.021116856, -0.016597731, 0.012741095, -0.013308943, -0.015603997, -0.014409149, -0.05422951, 0.008050432, -0.013427245, -0.0029900759, 0.021613725, 0.015745958, -0.021779347, -0.02416904, -0.0047231964, -0.052904528, 0.001391524, -0.06553915, -0.015166281, 0.022098761, -0.019969331, -0.0480305, 0.005282172, -0.065917715, -0.021897648, 0.028274111, -0.014089735, 0.06251063, 0.025647813, 0.04549884, -0.05777856, -0.006725453, 0.017402183, 0.010008326, -0.006624896, 0.040388208, -0.0069798017, -0.02211059, 0.024890682, 0.0072282352, 0.046989445, -0.0007094406, -0.01999299, -0.03785655, 0.049213514, -0.0053354073, -0.0468948, 0.013391755, 0.024251852, 0.018041013, -0.029717391, -0.013379925, 0.026688868, -0.009464137, 0.04902423, 0.020229595, -0.03920519, 0.0148941865, -0.01208452, 0.06941945, 0.022619288, -0.04000964, 0.042825222, 0.001151963, 0.0071631693, 0.0057583363, -0.01208452, -0.020986725, -0.026499584, -0.010783202, -0.0025641897, 0.032793235, 0.09497262, 0.04114534, 0.021554573, 0.012930378, -0.025032643, -0.02543487, -0.007441178, -0.009848618, 0.02543487, -0.016869824, 0.010428296, -0.06180082, 0.01930684, -0.023991589, -0.020927574, -0.02004031, 0.01851422, 0.027185734, 0.020927574, -0.016917147, -0.035537835, -0.04736801, -0.01655041, -0.04405556, -0.01651492, -0.014976998, 0.033881612, 0.0109251635, -0.043038167, 0.01582877, 0.0011807991, -0.011735531, 0.00930443, 0.014231697, 0.012001709, 0.00046877057, 0.02136529, -0.0042144987, -0.011747361, -0.03094773, 0.03922885, 0.0042026686, -0.011658634, -0.02543487, 0.034615085, 0.052005436, -0.0029605005, -0.006305482, 0.020063972, -0.020016652, 0.03153924, 0.017307542, 0.015686808, 0.009665251, -0.03724138, -0.05219472, -0.04469439, 0.015024318, -0.04275424, -0.00063661113, 0.003241467, 0.078505024, 0.045782767, -0.010173948, -0.060854405, 0.0147995455, -0.036886476, 0.0064296983, -0.006406038, 0.022962363, 0.021176009, 0.008523639, -0.030805768, -0.01164089, 0.088820934, 0.0061576045, -0.052715246, -0.0030137363, -0.008127328, -0.036389608, -0.012587303, 0.0045989794, -0.042493977, 0.017638786, 0.007772423, -0.0053413226, -0.042896204, -0.039157867, 0.00962976, 0.02541121, 0.043747976, 0.025245586, -0.00999058, -0.020761952, 0.04959208, 0.010635325, -0.000629587, 0.0050071203, 0.047983177, 0.0018410705, -0.03487535, 0.023896948, 0.015036149, 6.150765e-05, -0.010546599, 0.018537879, -0.05687947, 0.00446589, 0.021199668, -0.05148491, -0.028581696, 0.059766028, -0.013533717, 0.0075358194, -0.041050695, 0.0073820273, 0.050727777, 0.023494722, 0.035466857, 0.054466113, 0.012634624, 0.053093813, -0.048976913, 0.048432723, -0.0027017156, -0.00616352, -0.009044167, -0.006394208, 0.02334093, 0.0060984534, -0.0510117, -0.030379882, -0.012587303, 0.011209088, 0.0013323731, 0.025624152, 0.0385427, -0.011830172, 0.0064356136, 0.0030788023, 0.019401481, -0.0019889476, 0.08844236, -0.025269248, -0.052904528, 0.04616133, -0.004569404, 0.06714806, -0.048692986, -0.025860757, 0.026901811, -0.023991589, 0.0496394, 0.015402884, -0.0123507, -0.024961663, 0.023802307, -0.00361116, 0.026286643, -0.053945582, -0.038921267, 0.012859397, 0.024251852, -0.0048769885, -0.022725761, -0.02751698, -0.058109805, -0.00793213, 0.0030788023, 0.090003945, -0.04462341, -0.02474872, -0.045782767, -0.015639488, -0.029457128, -0.023530211, 0.017366692, -0.018111993, -0.040340886, -0.031042371, -0.057447314, -0.004108027, -0.027682602, -0.033834293, -0.0031172503, -0.039015908, 0.029196864, -0.014539281, -0.0013257186, 0.0008983537, -0.051958114, -0.021767516, 0.04147658, 0.010546599, 0.0010077828, 0.0103928065, -0.0102685895, -0.01374666, 0.031042371, -0.0019164878, -0.0045220833, -0.032722257, -0.03094773, 0.04684748, 0.024441136, -0.017035447, -0.028818298, -0.073914915, -0.018301276, 0.03241467, -0.0019919053, 0.03224905, 0.045664463, -0.019732727, 0.0042144987, -0.013214302, 0.035135612, -0.08896289, 0.028392414, 0.038140476, 0.006595321, -0.009890024, -0.027209396, -0.0017996649, -0.059387464, 0.019519784, -0.002110207, 0.044434126, -0.0037915702, -0.012232398, -0.00089391734, -0.008003111, -0.003584542, -0.03300618, 0.009121062, -0.032816898, 0.0065716607, 0.037643608, -0.0039926833, 0.010475617, -0.026972791, -0.053377736, -0.04902423, -0.004205626, 0.012279718, 0.060333878, -0.03496999, 0.0045546163, -0.007423433, 0.0029353613, -0.027682602, 0.012965868, -0.03795119, 0.011422031, 0.039015908, 0.0032059767, 0.02067914, 0.030971391, -0.022512818, -0.025576832, 0.010517023, -0.038187794, -0.020241424, 0.06411953, 0.02205144, -0.006459274, -0.038802963, 0.0061812648, 0.009523288, 0.04055383, 0.0754765, -0.0044865925, 0.0041257725, 0.021862159, -0.02751698, 0.03175218, 0.008908119, -0.042493977, -0.034094557, -0.016124524, 0.006074793, 0.0031409108, -0.047722913, 0.034023575, 0.01782807, -0.0061457744, 0.012480832, 0.02754064, -0.017579636, 0.036886476, 0.04587741, 0.009972835, -0.0010129585, 0.04741533, 0.012528152, 0.037312362, -0.011096701, 0.015225431, -0.019661745, 0.0048000924, -0.04824344, -0.0008258939, 0.052620605, -0.024606757, 0.0039897254, 0.0043209703, -0.023104325, -0.025624152, 0.03021426, 0.028037507, 0.02412172, 0.0014772927, -0.00075565226, -0.02543487, 0.01993384, 0.012705605, -0.036389608, 0.014716734, 0.035017308, -0.014326339, -0.057258032, -0.0025449658, -0.019922009, 0.025150945, 0.05934014, 0.004161263, 0.0013264581, -0.020761952, -0.054276828, -0.022761252, -0.060144596, -0.016242826, 0.003877339, 0.0007209011, 0.051437587, 0.022465497, 0.043771636, 0.023778645, 0.035821762, -0.01988652, 0.014255357, 0.006305482, 0.01311966, -0.044268504, 0.02967007, -0.00037690188, -0.006453359, -0.018005522, 0.048692986, 0.029102223, 0.0136756785, 0.008559129, -0.023068836, -0.028392414, -0.01722473, -0.0578732, -0.009890024, 0.00078374887, 0.024464795, 0.0076482063, 0.042233713, 0.028676337, -0.031775843, 0.008452658, -0.014669414, -0.030450862, -0.07088639, -0.029244184, 0.01308417, -0.018987427, -0.027706264, -0.007009377, 0.04147658, 0.010416467, -0.04547518, 0.027635282, 0.013214302, -0.0016665754, -0.021530913, 0.014681243, 0.014515621, -0.041642204, -0.028912941, -0.02486702, -0.015367393, 0.015533016, -0.026949132, -0.005986067, 0.032059766, -0.024985323, -0.0065539153, 0.04204443, -0.04147658, 0.02059633, 0.04930816, 0.0029841608, -0.0118952375, -0.021400781, 0.014267188, 0.017721597, 0.015840601, 0.008050432, 0.0013811726, 0.018597031, -0.00078670646, -0.0048976913, 0.003513561, -0.011818342, -0.011155852, -0.01303685, 0.028794639, 0.034709726, -0.031917803, 0.0037708674, 0.027256716, -0.034141876, -0.009452308, 0.011321475, -0.043085486, 0.029764712, 0.011114446, 0.040411867, 0.027114755, -0.039654735, 0.026286643, 0.010037901, 0.0007881852, 0.0014817291, -0.044954654, -0.018940106, 0.0076482063, 0.027138414, 0.023932438, -0.015284582, -0.008198309, 0.0036703108, 0.027067434, -0.021483593, -0.0019904263, 0.017579636, 0.0743408, -0.022548309, 0.0058352323, 0.030687466, -0.04476537, -0.01578145, 0.015083469, 0.06643824, 0.006139859, -0.008192394, 0.040743113, -0.03506463, 0.0032266795, 0.0058677653, -0.0052851294, -0.0010565822, 0.03373965, 0.0184669, -0.008860799, 0.012847567, -0.0055099027, 0.0053176624, 0.0014410628, 0.037312362, 0.0015734129, 0.018774483, -0.040743113, -0.010499278, 0.011007975, -0.046516236, 0.018892786, 0.023778645, 0.037477985, 0.008393507, 0.040127944, 0.010351401, -0.010380976, -0.041665867, 0.0028067082, 0.010398721, -0.03998598, -0.038968585, 0.0205845, -0.005066271, -0.007914385, -0.03381063, 0.028534375, 0.025150945, -0.004616725, 0.021696536, -0.060002632, -0.025979057, 0.023956098, -0.019058406, -0.03508829, 0.012504492, -3.195533e-05, 0.022631118, -0.04069579, 0.036815494, 0.003152741, -0.026452264, -0.011569908, -0.027091093, 0.025056304, -0.019484293, 0.020915745, -0.027351357, 0.0065065944, 0.025908077, 0.013391755, -0.012587303, -0.021862159, 0.031775843, 0.02815581, 0.03224905, 0.00085916626, -0.0045457436, 0.046445254, 0.0037945276, -0.03911055, 0.016053542, -0.00040333494], [0.03334645, 0.023046158, -0.028190281, 0.02647959, 0.0260218, 0.008481179, -0.03055152, 0.02744336, 0.012408543, 0.042140856, -0.04679105, -0.010836393, 0.005601915, -0.03129844, 0.013673492, 0.014468602, -0.014974581, -0.005909117, 0.0023416607, -0.013974669, -0.0057223863, -0.054983098, -0.050742507, -0.02387741, 0.0038671284, 0.008896804, -0.02546763, 0.0091799125, 0.0007623574, 0.03327417, 0.0056440798, 0.019456113, 0.021455936, 0.014010811, 0.00946302, 0.016384095, 0.011511032, 0.04939323, -0.011595362, -0.0009042876, -0.04023741, 0.0054603615, -0.026551872, -0.043755174, -0.003623174, 0.0074089845, 0.0026578978, -0.015287807, -0.023781033, -0.005351937, -0.008378779, -0.00805953, -0.011848352, 0.011523079, -0.07435488, -0.001536009, 0.0050838883, -0.048188515, 0.032165837, 0.027925245, -0.042429987, 0.034695733, 0.015926305, -0.021624597, -0.034984864, -0.006806628, -0.012938617, 0.019660914, 0.057633467, 0.049634174, -0.014781827, 0.03667146, 0.021178853, -0.020889722, 0.031491194, -0.072186396, 0.07782445, 0.03206946, 0.021480031, -0.030093728, 0.03303323, 0.012480826, 0.043899737, -0.0137457745, 0.018528484, -0.024226777, 0.024672521, -0.10774952, -0.02840713, -0.02043193, -0.0091497945, -0.038671285, 0.025226688, 0.019480208, -0.023058206, 0.008420943, 0.0057374453, 0.015637174, -0.008993182, -0.0012257954, -0.016962359, -0.030792462, -0.032575436, -0.07440307, 0.04871859, 0.024768898, -0.0038099047, -0.008258307, -0.031900797, 0.038623095, 0.006071753, -0.022805216, -0.03546675, 0.051561713, -0.01980548, 0.045875467, -0.03700878, -0.058308106, 0.0041020475, 0.019516349, -0.081920475, -0.024323154, 0.0700661, 0.0077161863, 0.03679193, 0.01711897, 0.02178121, 0.059512816, 0.016914168, -0.023576232, -0.050308812, 0.0013537961, 0.0057464805, 0.009089559, 0.071656324, 0.0043911785, 0.09329297, -0.014167424, -0.050357, -0.018082742, -0.07305379, 0.009824433, 0.012745863, 0.024455672, -0.04606822, -0.015745597, -0.02425087, -0.040381975, -0.054934908, -0.018600767, -0.021106571, -0.02421473, -0.017420148, 0.021973964, 0.0411289, -0.009191959, 0.03575588, 0.010993006, 0.011595362, 0.0054724086, 0.0436347, -0.075655974, 0.00034334318, 0.03349102, -0.0002870605, -0.045971844, 0.008975111, -0.036623273, -0.024817087, 0.01649252, 0.03990009, -0.0069090286, 0.036189575, 0.0081920475, 0.022359472, 0.012179648, 0.0097220335, 0.04120118, -0.003873152, -0.079752, -0.042526364, 0.06895777, 0.042478178, -0.041225277, 0.011432726, 0.053392876, 0.0491041, 0.0133964075, 0.052814614, -0.06009108, -0.013589161, 0.010264154, -0.0079029165, 0.018962182, -0.0232871, -0.010818322, -0.020443978, -0.01678165, -0.060524777, 0.018793521, 0.025612196, -0.060862098, 0.036117293, -0.025226688, 0.022732932, -0.013516879, 0.042791404, 0.004535744, 0.030262388, 0.049875114, -0.00023322488, -2.6470743e-05, -0.0031322537, -0.020805392, -0.011047217, 0.039924186, -0.0059301993, -0.004858005, -0.004800781, -0.06664472, 0.028961299, -0.029925069, 0.011860399, 0.0066078505, -0.020733109, 0.012294095, 0.020925863, 0.01758881, 0.009330502, 0.022540178, -0.015721504, -0.06013927, -0.043032344, 0.00381894, -0.09093173, -0.023311194, -0.023781033, -0.017733375, 0.024792992, -0.02115476, 0.022383565, 0.039996468, -0.054067515, -0.0063608843, -0.002130836, 0.034430694, 0.028503507, -0.028672168, -0.042502273, 0.05686245, -0.009728056, -0.017661091, 0.025419442, 0.065343626, -0.015058911, 0.077101626, 0.029780503, 0.005598903, -0.0381894, 0.032960944, -0.0044303318, 0.0440684, -0.025660384, 0.05522404, -0.012191694, -0.03223812, -0.0023025076, -0.05189903, -0.048284892, 0.0034515024, 0.03785208, -0.04373108, 0.051754467, 0.042478178, 0.017564714, 0.0030358764, 0.06394616, -0.008029412, -0.016890075, 0.062211376, -0.028214376, 0.04968236, -0.010884581, 0.031539384, 0.013998764, 0.043586515, 0.00020310706, -0.018287541, -0.0335633, 0.0023853316, -0.030696085, 0.011306231, 0.013565067, -0.012480826, 0.013577115, -0.020962005, 0.0060356115, 0.0043098605, -0.049080003, -0.015709456, -0.03202127, -0.022696791, -0.065825514, -0.027130134, 0.014649309, 0.039490487, -0.0067162747, 0.07045161, 0.0030931004, -0.04163488, 0.053007368, 0.0043972023, -0.035635408, -0.04476713, -0.025732668, -0.03763523, 0.0012973252, -0.014902298, 0.044670753, -0.02693738, -0.041321654, -0.040526543, -0.0851973, -0.001576668, 0.01564922, 0.018432107, 0.019480208, -0.03423794, 0.008692004, 0.015323948, -0.058115352, -0.020576496, 0.017347867, 0.014661356, -0.059801947, -0.08929332, -0.0042827544, -0.06910233, -0.019323595, -0.016733462, 0.029563654, 0.04204448, -0.03411747, 0.00032056659, -0.0037285865, -0.014781827, -0.011553197, -0.0019576584, 0.008131812, 0.008228189, 0.0014027376, 0.048574023, 0.00019783645, 0.00051426183, 0.021600502, -0.01145682, -0.016721414, -0.061922245, 0.001383161, 0.029226335, 0.06563276, -0.046983805, 0.03626186, 0.054501213, 0.049875114, 0.02999735, 0.018203212, 0.026190458, 0.030117823, 0.005183277, -0.055705924, 0.07584873, -0.037707515, -0.033900622, -0.03129844, -0.0026910275, 0.024491813, -0.016938264, -0.01711897, 0.012318189, 0.010143682, -1.4176553e-05, -0.035298087, 0.0063006487, 0.008113742, 0.0039092936, 0.010246083, 0.0029681115, -0.034141563, -0.016456379, 0.011902563, 0.060862098, 0.025588103, -0.007842681, 0.0587418, 0.008487202, -0.03575588, 0.044959884, -0.001438879, 0.002903358, 0.010752062, 0.033081416, -0.04329738, -0.04430934, 0.036575083, -0.04708018, -0.004144212, 0.008372755, -0.018022506, 0.074595824, -0.033418737, -0.020889722, 0.004677298, -0.0010857475, 0.02144389, 0.017155113, -0.00071191, 0.05710339, -0.059801947, 0.020275319, 0.04108071, -0.0036984687, -0.03643052, 0.035587218, -0.06895777, 0.0121676, -0.032912757, 0.068331316, -0.01598654, -0.019769339, -0.0084450375, 0.019287454, -0.023612373, 0.014781827, -0.015914258, -0.02652778, -0.0047254865, 0.009655774, 0.0018823639, 0.04163488, 0.01476978, -0.02102224, 0.008649839, 0.004839934, -0.06789762, 0.006128977, -0.057729844, -0.013432549, 0.023865363, 0.018938087, -0.030671991, -0.012974758, -0.066837475, -0.041466217, 0.042984158, -0.007758351, 0.0755114, 0.014046952, 0.053441066, -0.045634527, -0.020468073, 0.014697498, 0.02022713, -0.0044212965, 0.04283959, -0.019251313, -0.026359119, 0.024817087, 0.0018311637, 0.041177087, -0.007764375, -0.020504214, -0.03621367, 0.07430669, -0.012529015, -0.025829045, 0.025395349, 0.05098345, 0.021287277, -0.017781563, -0.022841357, 0.04079158, -0.019588633, 0.05416389, -0.015095053, -0.028479414, -0.016516615, 0.013456644, 0.04469485, 0.02614227, -0.030575614, 0.04016513, -0.02278112, 0.0032768191, 0.006186201, -0.01762495, -0.0037376217, -0.038791757, -0.039201356, -0.020407837, 0.017167158, 0.07290923, 0.047272936, -0.011215877, 0.028551696, -0.039490487, -0.030021446, -0.010420767, 0.024070164, 0.0074752434, -0.025106218, 0.0072704423, -0.059946515, 0.008113742, -0.007234301, -0.008083624, -0.017155113, 0.039129075, 0.027226511, 0.04377927, -0.01145682, -0.05618781, -0.04158669, -0.013854198, -0.0520436, -0.011137571, -0.0013854199, 0.02396174, 0.008902828, -0.025491726, 0.018359825, -0.011962799, -0.01762495, 0.0038400225, 0.031226158, -0.0120652, 0.010830369, 0.005267607, -0.015299854, 0.0016730451, -0.022889545, 0.042574555, 0.008673933, -0.005490479, -0.025130311, 0.04864631, 0.04288778, 0.023515996, -0.0056440798, -0.004246613, -0.013601209, 0.04577909, 0.024154494, 0.024913464, 0.013950575, -0.002279919, -0.03886404, -0.03739429, 0.021166805, -0.026214553, 0.0049092053, 0.0012401014, 0.07695706, 0.04652601, 0.013673492, -0.047345217, 0.0038611048, -0.012101341, 0.0016203389, -0.011071311, 0.012384449, 0.013793963, -0.0015932329, -0.0019877763, -0.008186025, 0.0818241, -0.0064753317, -0.05132077, -0.022757027, -0.014540885, -0.035659503, -0.031418912, -0.006830722, -0.034984864, 0.0064632846, 0.010372578, -0.0059573054, -0.025877234, -0.043080535, -0.013504832, 0.023094347, 0.063416086, 0.028093904, -0.011173712, 0.0030900887, 0.02647959, 0.015227571, -0.001466738, 0.00022531896, 0.05401933, 0.008969088, -0.043417852, 0.030069634, -0.0055386676, 0.016878027, -0.017082829, 0.0061922246, -0.06394616, 0.025829045, 0.036623273, -0.07329474, -0.009432903, 0.047104277, -0.005490479, 0.0064512375, -0.03394881, -0.000103247665, 0.050742507, 0.027515642, 0.043899737, 0.07377662, 0.032430872, 0.032334495, -0.04124937, 0.04973055, 0.01346869, -0.007764375, -0.027804773, -0.015721504, 0.020829486, 0.020443978, -0.022925686, -0.027636115, -0.022949781, 0.00633679, -0.0043068486, 0.018395966, 0.040068753, -0.0013854199, 0.012830192, 0.0034545143, 0.0043219076, -0.019299502, 0.09787088, -0.02908177, -0.06958422, 0.026575968, -0.010746039, 0.06201862, -0.02761202, -0.023094347, 0.044574376, -0.03327417, 0.04377927, 0.006029588, 0.0003284725, -0.043466043, 0.03739429, -0.018733285, 0.010420767, -0.048116233, -0.03717744, 0.008758263, 0.0068668635, -0.017612902, -0.017853845, -0.02396174, -0.035298087, -0.028069811, 0.013179559, 0.06837951, -0.03223812, -0.029274523, -0.049585983, -0.009685892, -0.04033379, -0.018612815, 0.013432549, -0.024238823, -0.04124937, -0.05228454, -0.059512816, 0.021287277, -0.03797255, -0.023817174, -0.0017950223, -0.032864567, 0.023214817, -0.014083094, -0.01603473, -0.011083359, -0.056958828, -0.015396231, 0.032671813, 0.02249199, -0.010450885, 0.010770134, -0.012685627, 0.008649839, 0.014203565, -0.018432107, -0.010667733, -0.009318454, -0.010083447, 0.042911872, 0.028889015, -0.008547438, -0.015227571, -0.04339376, -0.0142878955, 0.004897158, -0.013215701, 0.034695733, 0.04305644, -0.011577291, 0.00542422, -0.018889898, 0.028985392, -0.080523014, 0.025997704, 0.017986365, 0.01223386, 0.014926393, -0.030623803, 0.00971601, -0.062259562, 0.016082918, 0.013287984, 0.06515087, 0.0093726665, -0.002629286, -0.004577909, 0.00095774676, -0.0018206224, -0.041104805, 0.0014968558, -0.035322182, -0.007788469, 0.029346807, -0.009812387, 0.012041106, -0.0310575, -0.050453376, -0.05522404, -0.026792815, 0.007927011, 0.018950135, -0.04939323, 0.006764463, 0.01884171, 1.7094217e-05, -0.0260218, 0.025130311, -0.03811712, 0.02828666, 0.005978388, -0.0053368784, 0.014203565, 0.011770045, -0.022455849, -0.028985392, -0.010384626, -0.028840827, -0.010980958, 0.053730197, -0.008812475, -0.001452432, -0.05194722, -2.7153099e-05, 0.0030735238, 0.044285245, 0.06664472, -0.025515819, -0.0008079106, 0.023552138, -0.019648867, 0.026045892, 0.02925043, -0.036478706, -0.025732668, -0.018034553, 0.00011811834, 0.0145770265, -0.043899737, 0.026744626, 0.028503507, 0.01040872, 0.013336172, 0.022636555, -0.022395613, 0.025756761, 0.03679193, -0.0069873347, -0.01754062, 0.060910285, 0.007595715, 0.033153698, -0.009776245, 0.03214174, -0.016588897, 0.0063608843, -0.044478, 0.002169989, 0.035611313, -0.031683948, -0.03664737, 0.017721327, -0.012914523, -0.037081063, 0.03072018, 0.028672168, 0.022504037, -0.009981046, 0.023479855, -0.017914081, 0.011191783, 0.027852962, -0.040092845, -0.010565332, 0.034623448, -0.023263006, -0.068716824, 0.010944817, -0.01145682, 0.020034377, 0.06365703, -0.0013522903, -0.0031232182, -0.0094027845, -0.045514055, -0.028166188, -0.056284185, -0.018962182, -0.00611693, 0.0044062375, 0.053826574, 0.038213495, 0.037562948, 0.019938, 0.04842946, -0.0220342, 0.006499426, 0.0065717087, 0.004451414, -0.03826168, 0.006008506, -0.021094523, -0.011426702, -0.015709456, 0.052236352, 0.037827987, 0.02354009, -0.001645939, -0.023744892, -0.036816027, -0.022793168, -0.06519906, -0.014661356, -0.0201428, 0.024817087, 0.0045959796, 0.011468867, 0.03541856, -0.00025073087, 0.0018853757, -0.011444773, -0.033129606, -0.07782445, -0.0073909136, -0.01519143, -0.008535391, -0.028575791, -0.0027000627, 0.041899916, -0.00029816644, -0.061633114, 0.03247906, 0.017384008, 0.0012566661, -0.02874445, 0.020468073, 0.024491813, -0.05189903, -0.033370547, -0.031780325, -0.012294095, 0.038743567, -0.012263978, 0.0050417236, 0.027539738, -0.034984864, -0.0019441055, 0.04045426, -0.02840713, 0.022094434, 0.04115299, 0.01862486, -0.007661974, -0.018938087, 0.00782461, 0.0035478796, 0.012878381, -0.010312342, 0.011149618, 0.016468426, -0.0061350004, -0.010119588, -0.0064572613, -0.005505538, 0.0039906115, -0.019383831, 0.027009664, 0.024792992, -0.031081593, 0.012962711, -0.0151071, -0.0138421515, -0.009426879, 0.032792285, -0.045682713, 0.036478706, 0.010348484, 0.034382507, 0.01485411, -0.057922598, 0.032262214, -0.0048339106, 0.0027693338, 0.022443801, -0.05426027, -0.037659325, 0.0023461783, 0.024238823, 0.022889545, -0.021684833, 0.0051200297, -0.003044912, 0.010306319, -0.025274877, -0.012926569, 0.01076411, 0.07686068, -0.020865628, 0.026624156, 0.03344283, -0.035635408, -0.0012039599, 0.005782622, 0.059561007, 0.018408014, -0.018901946, 0.0377557, -0.036816027, -0.007168042, 0.00095774676, -0.01372168, -0.013155465, 0.038743567, -0.0019847646, -0.008312519, 0.028142093, -0.012553109, -0.0100714, -0.004556827, 0.030744273, 0.0041924007, 0.031659856, -0.03320189, 0.0013093724, 0.015420325, -0.04288778, 0.015962446, 0.019913904, 0.038912226, 4.280025e-05, 0.042454083, -0.0038430342, -0.0014095141, -0.041899916, 0.008282402, 0.010131636, -0.05512766, -0.035346277, 0.0352499, -0.020287365, -0.015155288, -0.02396174, 0.032214023, 0.012830192, 0.0084149195, 0.02823847, -0.03223812, -0.003873152, 0.026913287, -0.016552756, -0.02252813, 0.008535391, 0.0014034905, 0.015588985, -0.018781474, 0.04498398, -0.008993182, -0.028166188, -0.02631093, -0.026889192, 0.0047254865, -0.013950575, 0.008607673, -0.023275053, 0.014492696, 0.014793875, 0.020793345, -0.00095925265, -0.012408543, 0.032840475, 0.026985569, 0.02970822, -0.004851981, -0.014540885, 0.05040519, 0.0027181336, -0.03597273, -0.010438837, 0.009318454], [0.0070065227, -0.0047412557, -0.041863535, 0.019152332, 0.022523891, -0.006912868, -0.021844897, -0.01078782, 0.015253967, 0.0316552, -0.06007932, -0.047576454, 0.0006076563, -0.024865253, 0.00450712, 0.035331137, -0.034113627, 0.008493287, -0.01780605, -0.027885608, 0.005903156, -0.055630736, -0.07342508, -0.03193616, 0.03256833, 0.0016813898, -0.0004353468, -0.006620198, -0.014294009, 0.029875765, 0.012877485, 0.022231221, 0.040365063, -0.032849293, -0.022114154, -0.021727828, 0.008575235, -0.0032486382, -0.01630758, 0.050948013, -0.037344705, 0.01732607, -0.029875765, -0.0696789, -0.009546899, -0.0111799985, -0.0014267669, -0.017536793, 0.0036086226, -0.041090883, 0.0050836797, 0.011279507, 0.007837705, 0.02384676, -0.038843177, 0.001381403, 0.048185207, -0.075344995, 0.089627296, 0.023074111, -0.048513, 0.033528287, 0.03378584, -0.014598385, -0.047904246, 0.024888666, -0.014188647, 0.036876433, 0.022406824, 0.054506883, -0.041348435, 0.019304521, 0.01163071, -0.0059499834, -0.024958907, -0.07075593, 0.10180237, 0.02945432, 0.01656513, -0.0445561, 0.020147411, -0.004747109, 0.025122803, -0.00397446, -0.0038398318, -0.043315176, 0.030390864, -0.11959671, -0.010179066, 0.0041851825, -0.005121727, -0.026387138, 0.030999618, 0.02465453, -0.025614489, 0.009072773, 0.00064680097, -0.013732081, 0.00041046983, -0.01601491, -0.020849818, -0.017934825, -0.031046446, -0.05609901, 0.046358947, 0.035729166, 0.0130530875, -0.023717986, -0.03128058, 0.014247181, 0.011800459, -0.015125192, -0.029852351, 0.027042719, 0.009236669, 0.047389146, -0.04158257, -0.085553326, 0.016096856, 0.0023530677, -0.104518354, -0.03821101, 0.05872133, 0.01706852, 0.020194238, 0.021271264, 0.006737266, 0.04202743, 0.0100561455, -0.026574446, -0.015253967, 0.042776663, 0.007158711, 0.00057656015, 0.073003635, 0.012327265, 0.071551986, -0.012526281, -0.03697009, 0.017642155, -0.07028765, 0.020931767, 0.022652667, 0.043970756, -0.053617164, -0.021563934, -0.0474828, -0.01553493, -0.025286699, -0.023577504, 0.008065988, -0.008112815, -0.011736072, 0.01073514, 0.02238341, -0.02157564, 0.0118472865, 0.020557148, -0.0029047509, 0.011115611, 0.0056221928, -0.058487196, 0.013790616, 0.045984328, -0.01718559, -0.05876816, 0.006930428, -0.035518445, -0.06092221, 0.028705085, 0.0059587634, -0.021224437, 0.0099098105, -0.0051012402, -0.012725296, 0.027393922, 0.02627007, 0.0034125336, -0.004340298, -0.0898146, -0.022465358, 0.0643406, 0.050760705, -0.035260897, 0.024350153, 0.04106747, 0.036244266, -0.003781298, 0.05319572, -0.040646024, -0.0043227375, 0.003807638, -0.027885608, -0.004375418, -0.026199829, -0.0068016537, -0.006649465, -0.04659308, -0.020311305, -0.0074865017, -0.0020735678, -0.037789565, 0.00039290963, -0.036103785, 0.0056338995, -0.0057948683, 0.017712396, 0.01575736, 0.019105505, 0.01692804, 0.024186257, 0.010600512, 0.033902906, -0.008065988, -0.012502867, 0.01622563, -0.0058387686, -0.012327265, 0.0337156, -0.025029149, 0.048934445, 0.0058709625, 0.008674742, -0.023682866, 0.0038720255, 0.019433295, 0.022582427, 0.0316552, -0.020873232, 0.00023285566, 0.010641485, -0.014867642, -0.049777333, 0.016284166, -0.053476684, 0.0020852746, -0.021364918, -0.013076501, 0.038702697, 0.0013616477, 0.01219849, 0.028705085, -0.061999235, -0.004360785, 0.029665044, 0.053102065, 0.009505926, -0.007814292, -0.033832666, 0.046686735, -0.010489297, -0.010190774, 0.043760035, 0.017337777, 0.013287223, 0.079278484, 0.0151368985, -0.0061343657, -0.052914757, 0.055396598, -0.03106986, 0.047225248, -0.05825306, 0.08091743, -0.05961105, -0.057129208, -0.00018044942, -0.06387232, -0.050713878, -0.004378345, 0.06518349, -0.03315367, 0.0008875221, 0.03490969, 0.026129588, 0.0128891915, 0.060547594, -0.014282302, -0.026714928, 0.036759365, -0.014902762, 0.063825496, -0.0038310518, 0.0063099675, 0.03975631, 0.035916477, 0.003084743, -0.07164565, -0.047576454, -0.010799527, -0.039662655, -0.026714928, 0.030531347, 0.0148442285, 0.013895977, -0.01498471, 0.011706805, 0.03296636, -0.012573108, 0.004094455, -0.03128058, -0.022699494, -0.03128058, -0.030437691, 0.0035559419, 0.03135082, -0.017372899, 0.07192661, 0.004366638, -0.055256117, 0.047435973, -0.017700689, -0.025708143, -0.026199829, 0.026691515, 0.009517632, 0.012584815, 0.017864583, 0.04549264, -0.033879492, -0.036408164, 0.006081685, -0.095761664, 0.029922592, -0.0024394053, 0.025263283, 0.019491829, -0.040435303, -0.020486908, 0.008914731, -0.07801414, -0.01777093, -0.0029749917, -0.025310112, -0.028353881, -0.062467508, -0.010629779, -0.060032494, -0.028307054, -0.0057714544, 0.023694573, 0.014235474, -0.05197821, -0.029922592, 0.01787629, -0.003327659, -0.0031579104, 0.0153476205, 0.00091971585, 0.012783831, 0.0013535992, 0.029641628, -0.026738342, 0.007170418, 0.010225894, -0.0025140364, -0.0055958526, -0.056286316, 0.029805524, -0.0050192922, 0.04048213, -0.062373854, 0.015148605, 0.035518445, 0.044462442, -0.024560876, -0.0361272, -0.007135297, 0.031842507, 0.017408019, -0.06092221, 0.061858755, -0.0001234702, 0.001998937, -0.027791955, 0.035120413, 0.027253442, -0.013205276, -0.022512184, 0.010296134, 0.008586941, -0.010565391, -0.034090213, 0.058346715, 0.009230816, -0.00565146, -0.008616208, 0.03996703, 0.0153476205, 0.0020106437, 0.012233611, 0.026761755, -0.004957832, -0.0057363342, 0.019445002, 0.049121752, 0.0011706805, 0.028260225, 0.0058504757, -0.021294678, 0.03296636, -0.011121464, -0.054225918, -0.0013221372, 0.06377867, -0.07159881, 0.00454224, -0.01216337, -0.024233086, 0.08147936, -0.057456996, 0.032849293, -0.011379014, 0.023729693, -0.014422784, 0.041933775, -0.039217796, 0.053851303, 0.0135564795, -0.006807507, 0.06288896, -0.026831996, -0.04092699, 0.026621273, -0.09276472, 0.021716122, -0.009423978, 0.028892394, 0.015417862, -0.020966887, -0.009663967, 0.0055987793, -0.018367976, 0.014048166, 0.009189841, -0.050901186, -0.02634031, -0.020884939, 0.013673548, 0.011718512, 0.0046066274, -0.033294152, 0.029313838, 0.01696316, -0.04151233, 0.012573108, -0.056567278, -0.019210866, 0.03554186, 0.010641485, -0.0153476205, -0.027932435, -0.09262424, -0.018157253, 0.057363342, -0.03938169, 0.057972096, -0.001079221, 0.042659596, -0.07979358, 0.016799264, 0.036689125, 0.05249331, 0.013380878, 0.023823347, -0.017138762, -0.04256594, 0.033809252, -0.011419988, 0.003310099, -0.015628584, -0.0048934445, -0.027909022, 0.028400708, -0.002658908, -0.04631212, 0.027651472, -0.0033861932, 0.032123473, 0.00033894856, -0.030788897, -0.008633768, -0.0015555416, 0.041348435, 0.02685541, -0.026293483, 0.019058678, 0.024818426, 0.084804095, -0.0108053805, -0.0043315175, 0.05895547, -0.0036408163, -0.0009562996, -0.011894113, -0.023074111, -0.03872611, -0.0737997, 0.017712396, -0.009412271, 0.04916858, 0.054225918, 0.030718654, 0.028962635, 0.050245605, -0.025567662, -0.023870174, 0.016178804, 0.002947188, -0.030390864, 0.01596808, 0.006081685, -0.05216552, 0.011782899, -0.015651997, -0.035705753, -0.019082092, 0.0135564795, 0.026644686, 0.038538802, -0.015406155, -0.03900707, -0.051931385, -0.030203557, -0.046148222, -0.012362385, -0.0025842772, 0.040833335, 0.0064680097, -0.021165902, -0.0048729572, 0.0019082092, -0.0028462168, 0.0029354813, 0.016506594, -0.012210197, 0.036548644, 0.018309442, -0.0007269194, 0.019772792, -0.03392632, 0.035846237, -0.0046066274, -0.0026779315, -0.01133804, 0.03231078, 0.029899178, -0.011572177, -0.0063392348, 0.017162176, -0.039475344, 0.024420394, 0.012900898, -0.0066670254, 0.022980457, -0.02154052, -0.05675459, -0.030180141, 0.032474674, -0.052774277, 0.008563528, 0.009189841, 0.044860475, 0.036361337, -0.033247326, -0.027253442, -0.010015171, 0.018742595, -0.013814029, 0.013849149, -0.018286029, 0.022137567, 0.007960627, -0.027510991, -0.019831328, 0.08686449, 0.017642155, -0.07253536, -0.016530007, -0.016424647, 0.006707999, -0.017501673, 0.022242928, -0.021189317, -0.01897673, 0.01615539, -0.014024752, -0.03373901, -0.026831996, 0.02491208, 0.0146803325, 0.06349771, -0.0022725835, 0.011185852, 0.01802848, 0.02582521, 0.013755496, 0.019222572, -0.00817135, 0.02575497, -6.6033695e-05, -0.023753107, 0.016436353, 0.01751338, -0.015125192, -0.011361454, 0.0005780235, -0.050386086, -0.007884533, 0.022336584, -0.065277144, -0.03399656, 0.04930906, -0.004738329, 0.0049783187, -0.02300387, 0.032427847, 0.044017587, 0.007978187, 0.06686927, 0.040435303, -0.000115421775, 0.047506213, -0.038093943, 0.012690176, -2.1893096e-05, 0.015733946, 0.008891318, -0.024748186, 0.03729788, -0.01586272, -0.011267799, -0.013673548, -0.03128058, 0.01163071, 0.040599197, 0.02608276, 0.008908878, -0.029875765, 0.008698156, 0.004995879, 0.0337156, 0.01787629, 0.07586009, -0.027347095, -0.024865253, 0.058112577, -0.023729693, 0.052727446, -0.0325215, -0.030133314, 0.029056288, -0.006602638, 0.015616877, 0.0033335127, -0.019960102, -0.019456709, 0.024233086, -0.012257025, 0.0023896515, -0.041816704, -0.030976204, 0.022734614, 0.029805524, -0.03198299, -0.017677275, -0.027628059, -0.035893064, -0.014539851, 0.021880018, 0.09946101, -0.058018923, -0.052446485, -0.055911697, -0.029009461, -0.027581232, -0.011987768, 0.0110980505, 0.0093888575, -0.05183773, -0.024420394, -0.038374905, 0.00039400713, -0.0215054, -0.022324877, -0.008897171, -0.04724866, 0.027510991, -0.0170334, -0.0025901305, 0.006257287, -0.033645358, -0.0043724915, 0.04268301, 0.0003663864, -0.020205945, -0.01249116, -0.027253442, -0.0013418925, -0.007825999, -0.01692804, -0.010647339, -0.018578699, -0.04776376, 0.01605003, 0.015558343, -0.018847955, -0.017887997, -0.0827437, -0.021446865, 0.04462634, -0.003075963, 0.021025421, 0.067056574, 0.016658783, 0.0076738102, 0.007697224, 0.037649084, -0.06832091, 0.037649084, 0.030250384, 0.0074279676, -0.005191968, -0.05169725, -0.0069596954, -0.034745798, 0.02326142, -0.0075450353, 0.055115636, 0.002149662, -0.005042706, 0.00568658, -0.020194238, -0.0023106306, -0.009716648, 0.028330468, -0.051556766, 0.011741925, 0.024888666, 0.014656919, 0.004668088, -0.044158068, -0.03807053, -0.060032494, -0.0054787844, -0.008838638, 0.028213399, -0.022769734, -0.0144696105, -0.028026091, -0.004416392, -0.04565654, 0.02978211, -0.032802466, -0.009043506, 0.0424957, 0.005148067, 0.014235474, -0.002512573, -0.004562727, -0.020826405, 0.012982846, -0.02886898, -0.0271832, 0.049590025, -0.013755496, 0.002500866, -0.05520929, 0.009394711, -0.0066319047, 0.01557005, 0.077218086, 0.0076738102, 0.001471399, 0.008862051, -0.017489966, 0.032146886, 0.0065148366, -0.065043, -0.03476921, -0.00425835, 0.0048788106, 0.024350153, -0.050105125, 0.03106986, 0.0040300675, 0.014083286, -0.0010667825, 0.022758028, -0.012034595, 0.012022888, 0.025872039, -0.0001818213, 0.014586679, 0.048559826, 0.020522028, 0.014106699, 0.0017311437, 0.020077169, 0.006327528, 0.00650313, -0.033106845, -0.018543579, 0.016693903, -0.0059236432, 0.0063333814, 0.009628846, -0.026246656, -0.050526567, 0.045188267, 0.042144496, 0.031608373, 0.01271359, 0.0037081304, -0.0005176603, 0.00010298329, 0.0079547735, -0.009792742, -0.02128297, 0.029735284, -0.010577098, -0.04659308, 0.0013367707, -0.0071235904, 0.057831615, 0.038913418, 0.0029164576, -0.020241065, -0.019421589, -0.03605696, -0.025310112, -0.032498088, -0.02971187, 0.012690176, 0.008054282, 0.022465358, -0.029992834, 0.04462634, 0.046031155, 0.0311401, -0.016787557, -0.0031988844, -0.0045393133, -0.006169486, -0.04949637, 0.016682196, -0.0012277511, 0.0056631668, 0.017080227, 0.026551032, 0.010161506, 0.025591075, 0.024537463, -0.007919653, -0.031163514, -0.016611956, -0.061343655, -0.008563528, -0.013989631, 0.016576836, 0.02608276, 0.006081685, 0.02377652, -0.013802323, -0.0021350284, -0.020767871, -0.008522553, -0.07515769, -0.034113627, -0.031257167, -0.009675674, -0.016143683, 0.0049607586, 0.027417336, 0.0033627795, -0.050011467, 0.036103785, 0.0028871908, -0.012327265, -0.017829463, 0.01194094, 0.0063919155, -0.050386086, -0.041114297, -0.017852876, -0.049636852, 0.0007587473, -0.022043914, 0.007170418, 0.010729287, -0.008376218, -0.019398175, 0.042589355, -0.021938551, 0.008253297, 0.03341122, -0.024818426, -0.017969945, -0.03282588, 0.015979787, 0.014633506, 0.014176941, -0.0180636, 0.00044778528, 0.03704033, -0.0011816556, 0.010893182, 0.035658926, 0.0033452194, -0.0311401, -0.016003203, 0.018473338, 0.04432196, -0.032498088, 0.015839307, -0.0041149417, -0.024162844, -0.023659453, 0.01663537, -0.082041286, 0.026714928, 0.039405104, 0.0026486646, 0.022488771, -0.010717579, 0.024935493, 0.00652069, 0.011121464, -0.007463088, -0.014247181, 0.018812835, 0.025333526, 0.030976204, 0.0150549505, -0.010015171, -0.007480648, -0.00088679045, 0.008551821, -0.048747133, -0.02472477, 0.03900707, 0.070521794, -0.038445145, 0.010407349, 0.02523987, -0.03224054, -0.01469204, -0.007176271, 0.051416285, 0.012058008, -0.01622563, 0.0158276, -0.058299888, 0.014610092, 0.008001601, -0.012549695, -0.007872826, 0.070240825, 0.012444333, 0.011460962, 0.00096361636, -0.013825736, -0.008305978, -0.008019161, 0.03313026, -0.035331137, 0.019597191, -0.012081422, -0.0113556, 0.01897673, -0.040458716, 0.01842651, 0.008797663, 0.068929665, -0.0013184788, 0.010910742, 0.041863535, -0.009763475, -0.015289087, 0.020533735, -0.009500072, -0.05806575, -0.014094993, 0.021329798, -0.009839569, -0.028705085, -0.04027141, 0.022242928, 0.0064855698, -0.009985904, 0.012034595, -0.043760035, 0.006690439, 0.014399369, -0.010799527, 0.0059880307, 0.0133457575, 0.008522553, 0.0012592132, -0.032989774, -0.0014274985, -0.008961559, -0.052259177, 0.017244123, -0.064387426, 0.034347765, -0.0099098105, 0.00566902, -0.04425172, -0.0025345231, -0.00039400713, 0.014832522, -0.007972334, -0.013170155, 0.02542718, 0.04034165, 0.029641628, -0.007504062, 0.017372899, 0.05600535, -0.007960627, -0.011103904, 0.007919653, -0.008311831], [-0.009108628, -0.023058455, 0.0005842312, 0.06062856, -0.0077220127, -0.031772617, -0.015444025, 0.07755483, 0.007931201, 0.06780071, 0.012252419, -0.028138727, -0.019520197, -0.019137682, -0.014033503, 0.055416796, -0.01986685, 0.008212109, 0.0067717033, -0.01679478, -0.015444025, -0.018408513, -0.04260256, -0.0203689, -0.014009596, 0.019747315, -0.04434778, 0.004733618, 0.0039237626, -0.01191772, 0.036338884, 0.017978184, 0.031796522, -0.04267428, -0.006087361, -0.011003271, -0.022592267, 0.033900354, -0.0016391347, 0.047694784, -0.06789634, -0.016268823, -0.0054329024, -0.020715555, 0.004706722, -0.007465011, 0.008869557, 0.022926968, -0.0082659, -0.062110804, -0.012563213, 0.018169442, -0.031557452, -0.0105848955, -0.0287125, 0.014021549, 0.023261666, -0.0076443143, 0.03779722, -0.009766075, -0.07205618, 0.05226105, 0.093476996, 0.0004463915, -0.03959026, 0.023417063, -0.0004796374, 0.043582752, 0.024791725, 0.053838924, 0.0207036, 0.03576511, 0.018838841, -0.022986734, 0.0038699715, -0.0064370027, 0.088599935, 0.02651304, 0.0025999036, -0.062110804, 0.0353826, -0.0030421861, 0.005719788, 0.0074709877, 0.039183836, 0.02517424, -0.00082180864, -0.12699483, -0.0049188985, -0.04905749, 0.01865954, -0.03115103, 0.000975711, -0.033900354, -0.02887985, 0.032370295, -0.028258264, 0.008367506, -0.005621171, 0.018002091, -0.018623678, -0.04779041, -0.07693324, -0.065601245, 0.045590956, 0.03308751, 0.008463135, 0.014678996, -0.031222751, -0.04190925, 0.033517838, -0.023668088, -0.033493932, 0.044754203, -0.020153737, 0.057377186, -0.016017796, -0.030457722, -0.009837797, 0.016866501, -0.096871816, -0.067418195, 0.04133548, 0.032633275, 0.04202879, -0.016555708, -0.05010941, 0.05498647, 0.005764614, -0.010058938, -0.027708398, 0.0045961514, 0.01759567, 0.02954925, 0.07301247, 0.02280743, 0.06421463, -0.029501436, -0.014786579, 0.017272923, -0.08807398, 0.024696097, 0.011457507, 0.05111351, -0.0026985207, -0.02180333, -0.026871648, 0.0007956602, -0.047933858, -0.025150333, 0.00037541712, -0.00582737, -0.016316637, -0.0031198845, 0.0717693, -0.019950526, -0.02063188, 0.02427772, -0.009425398, 0.016711105, 0.04905749, -0.020655787, -0.0039237626, 0.02567629, -0.011290156, -0.009431375, 0.050157223, -0.009532981, -0.0474079, 0.035812926, 0.058572542, -0.049774706, 0.008702206, -0.0076801754, -0.036601864, 0.04621254, 0.030386, -0.030409908, 0.0011146714, -0.030983679, -0.009640562, 0.07860674, 0.04881842, -0.05001378, 0.004135939, 0.036936563, 0.026560854, 0.016974084, 0.020548204, -0.072869025, 0.010823967, 0.0076562683, -0.035956368, -0.018743213, -0.01213886, 0.011642787, -0.00646091, 0.014726811, 0.008977138, 0.044323877, 0.02109807, -0.051304765, 0.022891106, -0.016711105, -0.0025461125, -0.0035591784, 0.036984377, 0.05331297, 0.01065064, 0.0067896335, 0.003699633, -0.009527003, 0.021145884, 0.0283778, -0.011027178, 0.03755815, -0.043989174, 0.014977836, -0.011816114, -0.033254858, 0.03896867, -0.02440921, -0.0044766157, -0.038179737, -0.018743213, 0.016185148, 0.012043232, -0.011218435, 0.033972073, 0.016567662, -0.0470732, -0.01048329, -0.04226786, 0.007990968, -0.06894825, -0.007990968, -0.004109043, -0.033517838, 0.056803413, 0.0048800493, -0.019185496, 0.06536218, -0.03959026, 0.0053073894, -0.048890144, 0.0056779506, 0.06961765, -0.015563562, 0.007249846, 0.024433117, -0.024098417, -0.02821045, 0.009801935, 0.034043796, 0.037749406, 0.044802018, 0.041646272, -0.039422907, -0.015396211, 0.02651304, -0.0112483185, 0.01048329, -0.028640779, 0.06129796, -0.02634569, -0.024122324, -0.009993193, -0.04910531, -0.025102518, -0.01806186, 0.05885943, -0.009784006, 0.030696794, 0.007799711, 0.055416796, 0.015348397, 0.05025285, 0.011254296, -0.029071108, 0.06330616, 0.012945727, 0.027732305, 0.0751163, 0.0016047681, -0.0062517226, -0.009228164, -0.028999384, -0.03653014, -0.07306028, -0.015121279, -0.0072199623, -0.006550562, 0.047264457, 0.020739462, 0.04437169, 0.02787575, 0.027660584, -0.013615128, -0.09476798, 0.056086197, -0.021157837, 0.04100078, -0.042124417, -0.0330636, -0.016914316, 0.031868245, -0.0135434065, 0.05790314, 0.0031945943, 0.03753424, 0.07162585, -0.047240548, 0.0030377035, -0.026321784, 0.011308087, -0.025556754, 0.015037604, 0.0042375443, 0.087165505, -0.05689904, 0.016974084, -0.017834742, -0.07019142, -0.010931549, 0.019412614, 0.0028031145, -0.01178623, -0.015898261, -0.035454318, 0.021994587, -0.04446732, -0.026656484, 0.016388359, 0.02066774, -0.055799313, -0.055082098, 0.03999668, -0.004380987, -0.008779905, -0.0104474295, 0.011308087, 0.026728205, -0.016699152, 0.0058602425, 0.057568442, -0.0032424086, -0.024014743, -0.0048292466, 0.037342984, -0.0014142579, 0.0013664436, 0.03997277, -0.0018199326, 0.048866235, 0.04023575, -0.03949463, 0.028282171, -0.014977836, -0.039781515, -0.035980277, 0.024480931, -0.032107316, -0.0058303587, 0.019544104, 0.019328939, -0.020010293, 0.020225458, 0.015444025, 0.0075606396, -0.004416848, -0.03115103, 0.03753424, -0.055177726, -0.007423173, -0.03509571, 0.002813574, 0.027732305, 0.005800475, -0.022161938, 0.0014142579, -0.0023608322, -0.085635446, -0.06096326, 0.048364185, 0.08085401, -0.003048163, -0.035573855, 0.018623678, 0.015934123, 0.0042554745, 0.0018438398, 0.04487374, -0.0323942, -0.01672306, 0.019125728, 0.02517424, -0.05565587, 0.036004182, 0.0069330763, 0.0016301695, -0.018671492, 0.015874354, -0.032107316, -0.02120565, 0.016280776, -0.07267777, 0.027325884, -0.04123985, 0.009359653, 0.015348397, -0.01696213, 0.0060993144, -0.02033304, 0.041885346, 0.020512344, 0.005758637, -0.014212807, -0.040857337, 0.012551259, 0.026058804, 0.021253465, 0.002292099, -0.04420434, 0.060915444, -0.01632859, 0.005038434, -0.031868245, 0.039040394, 0.004461674, 0.027301976, -0.028186541, 0.024504839, -0.00021310992, -0.01729683, -0.015384258, -0.02223366, -0.0161971, -0.020775322, -0.04276991, 0.0056600203, -0.0021949762, -0.042243954, -0.010710408, 0.013017449, -0.027062906, 0.036745306, -0.05111351, -0.04250693, 0.056564342, -0.029357992, -0.054603953, -0.023046503, -0.06870918, -0.029740507, 0.009527003, -0.029883951, 0.00999917, 0.00709445, 0.06239769, -0.047623064, 0.028736407, -0.014810486, 0.049870335, -0.0028494347, 0.04303289, 0.030935865, -0.02100244, 0.04690585, 0.015467932, 0.037677683, -0.047694784, 0.001005595, 0.014200853, 0.0054418673, 0.05125695, -0.029764414, -0.019807082, 0.0300513, 0.0057227765, 0.034163333, 0.008283831, -0.01502565, 0.048961863, 0.03688875, -0.005600252, -0.024289675, 0.025724104, 0.056277454, 0.08836086, 0.05398237, -0.044156525, 0.03335049, 0.05202198, 0.009527003, -0.016842594, -0.050826624, 0.012431723, -0.07095645, 0.0022069297, -0.0584291, 0.012850098, 0.046714593, 0.0118699055, 0.013794431, -0.03055335, -0.020990487, -0.0387296, -0.021432769, -0.007225939, 0.030075207, -0.0066521675, -0.0065923994, -0.03959026, -0.0012035761, -0.06297146, 0.0207036, 0.0015039098, 0.01659157, 0.0035412482, 0.0155396545, 0.015575515, -0.01672306, -0.016209055, -0.016997991, -0.023608321, -0.015623329, 0.012252419, 0.007955108, 0.03208341, -0.006550562, -0.0026641542, 0.017380506, 0.00079117756, -0.042339582, 0.0012252419, 0.012551259, 0.011881859, 0.012383909, 0.013579267, 0.005423937, -0.038275365, 0.050683178, -0.00983182, 0.022114124, -0.013878106, 0.007716036, 0.04418043, 0.018157488, -0.010100775, 0.009503096, -0.024624376, 0.023369249, 0.028569056, -0.014870253, 0.017009944, -0.03425896, -0.036195442, -0.01213886, -0.034211148, -0.018838841, 0.00020825378, 0.011069016, 0.10710408, 0.049870335, 0.0021531386, -0.04410871, -0.0037743428, -0.00951505, 0.0017198214, 0.010686501, 0.013495592, 0.003057128, -0.012013348, -0.038179737, -0.0029256388, 0.04637989, 0.042793818, -0.02096658, 0.010154567, -0.017272923, -0.043248054, 0.0011154185, 0.026991185, -0.046499427, 0.0017646473, -0.0077459197, 0.0027358755, -0.038944766, -0.010513173, 0.01672306, 0.010208357, 0.031939965, 0.022687895, -0.031461824, 0.022819385, 0.03292016, 0.044825926, 0.0011027177, 0.017009944, 0.019711453, -0.02483954, -0.012360002, 0.008821742, -0.022401009, -0.034306776, -0.014021549, 0.036936563, -0.034211148, 0.0293819, 0.019591918, -0.06904388, 0.004844188, 0.013328242, -0.041837532, 0.0041568573, -0.031270567, -0.005603241, 0.050730996, 0.011977487, 0.045064997, 0.031844337, 0.007070543, 0.044084802, -0.026943369, 0.035478227, -0.007668222, 0.014774625, 0.0067238887, 0.008839672, 0.009622632, 0.011481414, -0.009054837, -0.016077565, -0.01910182, 0.008439228, 0.0093477, 0.004046287, -0.0041927183, -0.02997958, -0.001558448, 0.041048594, 0.034928363, -0.020070061, 0.1302462, -0.02050039, -0.034163333, 0.0046409774, 0.021193698, 0.04537579, -0.045853935, -0.053265154, 0.022197798, -0.01863563, 0.039136022, -0.021241512, -0.03576511, -0.020261317, 0.005029469, -0.010321916, 0.030457722, -0.025485033, -0.08726113, 0.0055912873, 0.016149286, 0.006550562, -0.011624857, -0.013364103, 0.0058751847, 0.015372304, 0.039518535, 0.06387993, -0.02217389, -0.05489084, -0.018647585, -0.031246658, -0.022926968, 0.016005844, 0.03930337, -0.03820364, -0.023990836, -0.023118224, -0.054364882, -0.031294473, 0.0070406585, -0.02634569, -0.015754819, -0.020847043, -0.005528531, -0.028640779, 0.012646887, 0.02660867, -0.05154384, -0.013077216, 0.027134627, 0.028282171, -0.0063652815, -0.010041008, -0.0053731343, -0.0061680474, 0.027373698, -0.009042883, -0.04446732, 0.020894859, -0.05135258, 0.042554744, 0.047742598, -0.002202447, 0.019113775, -0.031605266, -0.035956368, 0.03162917, -0.007799711, 0.02550894, 0.04470639, -0.011726462, 0.033135325, -0.005680939, 0.04487374, -0.051878538, 0.0047097104, -0.012108977, -0.007309614, 0.013471684, -0.030338187, 0.019711453, -0.020894859, 0.031533543, -0.0007332774, 0.04226786, -0.0011512792, -0.012431723, -0.008128434, -0.038657878, 0.0026043863, -0.00804476, -0.020177644, -0.025437219, -0.007512825, 0.06966546, 0.028616872, 0.015049557, -0.014033503, -0.017655438, -0.0340677, -0.02016569, 0.00662826, 0.013734664, -0.009264025, 0.0148583, -0.020082016, -0.00606943, -0.05101788, 0.034282867, -0.017846696, 0.0030466688, 0.020679694, 0.011326017, 0.0022517557, -0.0032543621, -0.010256172, 0.0037922733, 0.018014045, -0.017284878, -0.043582752, 0.02474391, -0.00015315524, -0.038753506, -0.029334085, 0.024480931, 0.029095015, 0.03375691, 0.028592963, -0.021241512, 0.01646008, -0.04755134, 0.0025670314, 0.023357296, 0.008331645, -0.023094317, -0.05077881, -0.015898261, 0.0146431355, 0.03148573, 0.0036966447, 0.027301976, 0.022496637, 0.011881859, 0.024468979, -0.010393638, -0.012162767, 0.04487374, 0.035310876, -0.0048591304, 0.008923348, 0.03789285, 0.002208424, 0.028569056, -0.02921455, 0.03411552, 0.0042943237, 0.0135434065, -0.043654475, 0.00938356, 0.020022247, -0.0048531536, 0.010106752, -0.009939402, -0.020954626, -0.03375691, 0.07655073, 0.01672306, 0.020022247, -0.014906115, 0.010112729, -0.020189596, 0.0034964222, -0.034498032, -0.011194528, 0.0121448375, -0.009281955, -0.0014120167, -0.013280427, -0.014212807, -0.012001394, 0.0023937044, 0.046069097, -0.0043989173, -0.0043481146, -0.019651685, 0.0053611808, -0.030864144, -0.045447513, -0.04537579, 0.023010641, 0.006634237, 0.018408513, 0.022532498, 0.05790314, 0.0050593526, 0.027015092, -0.053886738, 0.0009981239, 0.0012603556, -0.018910564, -0.034928363, 0.009449305, -0.014153039, -0.0079013165, 0.0045483373, 0.06397556, 0.028760314, 0.042315673, 0.027158534, -0.019316986, -0.030338187, -0.01096741, -0.03318314, -0.0018438398, -0.00055173243, 0.030768516, 0.012228512, 0.006598376, 0.029238457, -0.037151728, 0.006831471, -0.00061262096, -0.011080969, -0.02734979, -0.037916757, 0.008164295, 0.019938571, -0.007088473, -0.00809855, 0.03770159, -0.001240184, -0.040689986, 0.03820364, -0.0010257666, 0.010094798, -0.0587638, 0.0021964703, -0.006174024, -0.05135258, -0.010142613, 0.0012909867, -0.060150415, 0.025437219, -0.026393505, -0.041144222, -0.0073275445, 0.0077518965, 0.025389405, 0.014272574, -0.024887353, 0.040211845, 0.031437915, -0.06918732, -0.015228861, -0.019054007, 0.03526306, 0.009192303, 0.02327362, 0.0010646157, -0.016448127, -0.012766424, 0.004697757, 0.031437915, 0.025891455, -0.010662594, 0.00028651237, -0.012407816, 0.048125114, 0.0071004266, -0.064071186, 0.0019618813, -0.00964654, -0.028784221, 0.0025984095, 0.0052117608, -0.02887985, 0.029860044, 0.0016182159, 0.02981223, 0.014678996, -0.03612372, 0.019221356, 0.037223447, 0.012491492, -0.040450916, -0.052643567, 0.024959076, 0.023931067, 0.0016316636, 0.012276327, 0.0010803048, -0.002405658, 0.026202248, 0.0038370993, -0.012634934, 0.011314063, 0.0010825461, 0.08491823, -0.021875052, 0.00804476, 0.027684491, -0.03485664, -0.018073814, 0.00068508956, 0.004778444, 0.008182226, -0.004826258, 0.079323955, -0.0207036, -0.0036876795, 0.032442015, -0.016890408, -0.0037713544, 0.029142829, 0.013794431, 0.011379808, 0.01843242, -0.04535188, -0.047623064, 0.006688028, 0.014164993, -0.036004182, 0.04661896, 0.0042853584, -0.011367855, 0.022616174, -0.020560158, 0.013961782, 0.007984991, 0.026680391, 0.003669749, 0.028019192, 0.031103216, -0.026154432, -0.038849134, 0.031939965, 0.021014394, -0.04353494, 0.0052356683, -0.00079192466, 0.00955091, -0.048483722, -0.0055793338, 0.017249016, 0.02113393, -0.013579267, 0.034139425, -0.041598458, -0.032800622, -0.008761974, -0.0029704648, 0.00054052594, 0.008056713, 0.0016451115, 0.0012678267, -0.03411552, -0.014535554, 0.0030317267, -0.022197798, -0.010094798, -0.038514435, 0.038108014, -0.020476483, -0.01712948, -0.039422907, 0.018348746, 0.008672322, 0.041574553, -0.0005352963, 0.0050055617, 0.020894859, 0.06823104, 0.05001378, -0.03368519, -0.020918766, 0.052213237, 0.0104474295, -0.012443677, -0.017990138, -0.0027792074], [-0.03469449, -0.017764954, -0.012912149, 0.06309876, -0.028748266, -0.0215612, -0.049977757, 0.036119618, 0.0024233314, 0.052090876, -0.02197891, -0.021315489, -0.02521002, -0.010756029, 0.01702782, 0.0012976648, -0.02175777, 0.022556333, -0.012132014, -0.0015955903, 0.0047514495, -0.037520174, -0.011376451, -0.002262083, -0.027593423, 0.01775267, -0.04014929, 0.017506957, 0.007991772, 0.02063978, 0.026561433, 0.0119231595, 0.00794263, -0.00699664, -0.019067226, 0.03071396, 0.0067632142, 0.036291614, 0.057545677, 0.042139553, -0.07936487, -0.029731113, -0.03953501, -0.034448776, -0.04395782, 0.0011886302, 0.008673622, -0.007844346, -0.027003715, -0.05828281, -0.009736326, 0.01418985, -0.04221327, 0.00038411646, -0.021634914, 0.028232273, 0.05194345, -0.030517392, 0.03194252, -0.003436892, -0.046365794, 0.0625582, 0.065850735, -0.008962333, -0.017900096, 0.015811548, 0.016941821, 0.01872323, 0.03469449, 0.0744015, -0.026659718, 0.034203067, -0.0042845975, 0.00323418, 0.014767272, -0.039633293, 0.046881787, -0.00026433202, 0.029780256, -0.014902414, 0.039829865, -0.036733896, -0.0040388857, -0.023096899, 0.015799262, 0.0020562997, 0.049166907, -0.108702846, -0.006413075, -0.03508763, 0.020676639, 0.0035966048, 0.034350492, 0.0014896271, -0.004932662, 0.032089945, -0.04437553, 0.018440662, -0.024055174, 0.016573252, -0.0036887466, -0.0529263, -0.07936487, -0.063393615, 0.04059157, 0.023281181, -0.0032710368, 0.00035608996, -0.015160411, 0.021831483, 0.013722997, -0.037028752, -0.011824875, 0.0151112685, -0.012439154, -0.008311198, 0.016057258, -0.015578121, 0.008581481, -0.017396387, -0.10821143, -0.08850535, 0.07867688, 0.05656283, 0.047692638, -0.0067140716, -0.011468593, 0.04307326, 0.0064437888, -0.007426636, -0.031205384, -0.004256955, 0.0202835, 0.022789758, 0.05798796, 0.022912614, 0.0529263, -0.01702782, -0.049019482, -0.0024264029, -0.05867595, 0.04037043, 0.0054486566, 0.040296715, -0.0021069776, -0.0066035013, -0.021966625, -0.009742469, -0.030763103, -0.016757537, -0.023023184, -0.058184527, -0.03199166, 0.009398472, 0.050100613, 0.008274341, 0.012531295, 0.0051845163, -0.005976937, 0.013784425, 0.046365794, -0.066587865, -0.01966922, 0.0431224, 0.007881202, -0.023465466, 0.052533157, -0.007973344, -0.043441825, 0.03513677, -0.0008960798, -0.019742934, 0.02030807, 0.011886302, -0.004281526, 0.011124596, 0.039805293, -0.012537438, 0.0034031067, -0.06147706, -0.0352842, 0.07425407, 0.07956144, -0.017408673, -0.018010667, 0.019693792, -0.010774457, 0.02395689, 0.036316186, -0.0824117, -0.019964075, 0.011867874, -0.036955036, -0.004978733, -0.014632131, 0.0036672468, -0.039019015, -0.007795203, 0.01925151, 0.014668987, 0.0040481, -0.060248505, 0.012476011, -0.012107443, -0.021118918, 0.007230066, 0.04855263, 0.011511592, 0.021438343, 0.0011103096, 0.015086697, -0.0068369275, 0.005178374, -0.0030836817, -0.03828188, 0.01850209, -0.03975615, -0.00446581, -0.036881324, -0.04373668, 0.01460756, -0.012218013, -0.027667135, -0.020222072, 0.0004434328, 0.032753367, 0.02609458, 0.008587623, 0.019681506, -0.028502556, -0.059216514, -0.02946083, -0.03071396, -0.0071686385, -0.07666205, -0.0061182207, -0.026635146, -0.026807144, 0.07174781, -0.012334727, -0.005623726, 0.024558883, -0.055579983, -0.030296251, -0.0047084503, 0.041795556, 0.048822913, -0.06078907, -0.0025139377, 0.03535791, -0.028895695, -0.02017293, -0.020258928, 0.06634215, 0.00699664, 0.05656283, 0.047643494, -0.0242026, -0.024878308, 0.025185447, -0.04371211, 0.026733432, -0.0663913, 0.047397785, 0.03191795, -0.005193731, -0.022912614, -0.062951334, -0.066489585, 0.007377493, 0.04862634, -0.025124019, -0.0151235545, -0.0021376917, 0.021856055, 0.01031989, 0.052238304, 0.056808542, -0.00994518, 0.05105889, 0.0062011485, 0.05155031, 0.030419106, 0.026020868, -0.017494671, -0.005599155, -0.006953641, -0.027470566, -0.051894307, -0.010700744, -0.008950048, -0.035456195, 0.047815494, -0.013403572, 0.016266113, 0.02754428, -0.01663468, -0.008710479, -0.06265648, 0.04734864, -0.039485868, 0.007469635, -0.01418985, -0.021475201, 0.027077427, 0.038306452, 0.008212913, 0.054449707, -0.009324758, -0.017789526, 0.10447661, -0.027224854, -0.010074179, -0.007033497, -0.0062226485, -0.021057492, 0.031377383, 0.0048804483, 0.08771907, -0.017162962, -0.0024955093, -0.03825731, -0.06879927, -0.021401487, 0.02167177, -0.0042753834, -0.043245256, -0.014582989, -0.025775155, 0.02231062, -0.08894763, -0.0072792084, 0.009140475, 0.035652764, -0.057152536, -0.04926519, 0.022740616, -0.044965237, -0.0037194607, -0.03683218, 0.01661011, 0.03808531, -0.000115849216, 0.0021085134, 0.0431224, -0.040935565, 0.010197035, 0.0056513688, -0.004017386, 0.024116602, 0.0014827164, 0.013698426, 0.0039498154, 0.0175561, 0.01176959, -0.03535791, 0.00014013244, -0.0058080098, -0.03282708, 0.013329859, 0.057250824, -0.030763103, 0.0012669509, 0.047446925, 0.031229954, -0.012132014, -0.02353918, -0.0038361736, 0.014693558, 0.019792076, -0.035013914, 0.038036168, -0.0038423163, -0.0046255225, -0.015516693, -0.04162356, 0.061034784, -0.016352113, -0.043859534, 0.01808438, -0.007881202, -0.05105889, -0.017519243, 0.004174027, 0.058184527, 0.012985863, -0.05489199, 0.011321166, 0.026733432, -0.00010308373, 0.016880393, 0.02670886, 0.00079549156, -0.00083849113, 0.023993745, 0.020971492, -0.05906909, 0.070961535, 0.016941821, 0.009103618, -0.040960137, 0.035800193, -0.0580371, -0.055678267, 0.03304822, -0.043269828, 0.0097178975, -0.045186378, 0.012961292, 0.056464545, 0.004358311, 0.045874372, 0.008507767, 0.031795092, 0.046586934, -0.0030836817, 0.008176057, -0.017175246, -0.01927608, 0.00076055445, 0.03412935, 0.005445585, -0.04813492, 0.07361522, -0.022322906, -0.0063086473, -0.006941355, -0.002842577, -0.01997636, -0.002985397, -0.002862541, 0.024153458, -0.021598058, -0.008685908, -0.02567687, -0.007905774, -0.015037555, 0.0035013915, -0.00063385937, 0.03594762, 0.006253362, -0.059462227, 0.020369498, 0.0067447857, -0.006234934, 0.020762637, -0.058970805, -0.03135281, 0.04749607, -0.018219521, -0.051648594, 0.019853504, -0.05464628, -0.046955504, 0.035628196, -0.024755452, -0.013391287, -0.0068123564, 0.036119618, -0.06781642, 0.034252208, 0.019005798, 0.056661114, -0.0007413582, 0.03992815, 0.0031097885, -0.023625178, 0.052041736, 0.013907282, 0.023883175, -0.03872416, 0.035480767, -0.031205384, 0.010774457, 0.03658647, -0.015320123, -0.017408673, 0.005933937, -0.011702019, 0.020799493, -0.008507767, -0.04599723, 0.014890128, 0.016880393, 0.018121237, -0.022568619, 0.052287444, 0.038011596, 0.05636626, 0.007058068, -0.043097828, 0.024841452, 0.013317573, 0.028109416, -0.020799493, -0.05174688, 0.0017660527, -0.051599454, -0.02000093, -0.004613237, 0.014570703, 0.033121936, 0.037495602, 0.027151141, -0.009238759, -0.056464545, -0.046808075, -0.041721843, 0.012175014, 0.014214421, 0.012445297, -0.021389201, -0.055432554, -0.009330901, -0.04142699, -0.013858139, -0.012488296, 0.025603157, -0.019706078, 0.029706543, 0.0050370893, -0.01975522, -0.0391173, -0.01471813, -0.04626751, -0.03113167, 0.028158559, 0.02367432, 0.037348177, -0.025996296, 0.025775155, -0.0039098873, -0.007623205, -0.028133988, 0.027470566, -0.0056513688, -0.0059677223, -0.0151235545, -0.00027162657, 0.020836351, -0.012439154, 0.013415858, -0.008796479, 0.042016696, -0.038355593, 0.03722532, 0.05862681, -0.03557905, -0.018452948, 0.020799493, -0.014324991, 0.07219009, 0.006505217, 0.011333452, 0.014951556, -0.04670979, -0.058184527, -0.02712657, 0.0067140716, -0.010332176, -0.004987947, 0.010958741, 0.10663887, 0.028502556, 0.0013698427, -0.0392893, -0.002715114, 0.0034184637, 0.0020962278, 0.023268897, 0.007991772, 0.033760786, -0.007856631, -0.022163194, -0.026561433, 0.05764396, 0.015332409, 0.00336625, 0.013968709, 0.0043398826, -0.0418447, -0.020541497, -0.002751971, -0.0529263, 0.027028285, -0.011775732, 0.019939503, -0.04815949, -0.016868107, 0.03619333, 0.0070089255, 0.0431224, 0.02963283, -0.0013283788, -0.0010043465, 0.013329859, 0.039191015, -0.025382018, 0.007948773, 0.035235055, -0.018588088, -0.03304822, 0.00011508137, -0.002873291, -0.008133057, -0.04540752, 0.010534888, -0.03727446, 0.017187532, -0.001632447, -0.10034865, 0.02946083, 0.022077195, -0.030173395, -0.01588526, -0.029681971, -0.017285816, 0.043613825, 0.050370894, 0.060641643, 0.033564217, -0.00567594, 0.03847845, -0.014374133, 0.040935565, -0.029043121, -0.009822325, 0.02367432, -0.0038791732, -0.016266113, -0.00032883135, -0.010700744, -0.04034586, -0.011007884, 0.023502322, -0.0012654152, 0.015516693, -0.01504984, -0.010043465, 0.030517392, 0.017076962, 0.03850302, -0.00882105, 0.07376265, -0.021745484, -0.009343186, -0.0071133533, 0.008200628, 0.041770987, -0.03282708, -0.05764396, 0.028453413, 0.009238759, 0.042581834, -0.005040161, -0.027052857, -0.024190316, 0.012267156, -0.032483086, 0.036660183, -0.03304822, -0.07803803, -0.004204741, 0.010866599, 0.030222537, -0.019398937, -0.039461296, -0.02331804, 0.0024893666, 0.015455265, 0.06865185, -0.043024115, -0.0564154, -0.0023588322, -0.0029162904, -0.020406356, 0.014349562, 0.029043121, -0.042311553, -0.043466397, -0.021389201, -0.042188697, -0.02921512, 0.009748611, -0.026610576, -0.0029485403, -0.050567463, 0.022617761, -0.05464628, 0.00034169282, 0.02923969, -0.07066668, -0.0037010321, 0.017298102, 0.010491889, 0.016474968, 0.0019288367, -0.016978677, 0.023096899, 0.021376917, -0.0039805295, -0.038109884, -0.012703294, -0.03978072, 0.032311086, 0.03828188, -0.0049848757, 0.007899631, -0.027495136, 0.0031573952, 0.039485868, -0.0063086473, 0.008495482, 0.054744564, 0.008538481, 0.03744646, -0.010590173, 0.021598058, -0.045309234, 0.0215612, -0.0071870666, -0.009797754, -0.014484704, -0.009883752, 0.028305985, -0.023330323, 0.022040337, -0.0062472196, 0.05361429, -0.0031405024, -0.002079335, 0.0032986794, -0.019804362, -0.019472651, -0.004428953, 0.0036027476, -0.0066096443, -0.015934402, 0.05007604, 0.0021960482, 0.038675018, -0.017150676, -0.03742189, -0.0363899, -0.051206313, -0.019153226, 0.01062703, -0.006554359, -0.012838435, -0.0057035824, -0.02481688, -0.041549847, 0.015467551, -0.015492122, 0.013465, 0.030640246, -0.004035814, -0.0081146285, -0.0008169913, -0.022114052, -0.014398704, 0.0014926984, -0.004714593, -0.040886424, 0.013305288, 0.031377383, -0.032261945, -0.02178234, 0.02818313, 0.048282348, 0.022433477, 0.04292583, -0.031451095, 0.00229894, -0.01115531, -0.0068614986, 0.026217436, 0.03157395, -0.023232039, -0.039485868, -0.02646315, 0.006133578, 0.030173395, -0.015283267, 0.037569318, 0.036045905, -0.015479836, 0.02189291, -0.011652877, -0.019349795, 0.01377214, 0.020492354, 0.012973577, 0.008937762, 0.02457117, -0.017543815, -0.0128998635, -0.04710293, 0.069339834, -0.020762637, 0.010117179, -0.05400743, -0.010326033, 0.03194252, 0.008870192, 0.030025968, -0.014423275, -0.0072177807, -0.025136305, 0.04749607, 0.00089070486, 0.02734771, -0.023612892, 0.026659718, 0.009429186, 0.04813492, -0.025775155, -0.0020685853, -0.01399328, 0.027028285, -0.0027289353, -0.018317806, -0.0061857915, -0.021352345, 0.0023880105, 0.058086243, 0.017482387, -0.0154306935, -0.04034586, -0.012617295, -0.019730648, -0.009613469, -0.036660183, -0.002400296, -0.029952254, 0.03390821, 0.023195183, 0.060887355, 0.010455032, 0.007500349, -0.045088094, 0.005070875, 0.009613469, 0.007967201, -0.024350028, 0.013624713, -0.009810039, 0.00919576, -4.5902972e-05, 0.03258137, 0.0216472, 0.019288367, 0.028133988, -0.01493927, -0.051796023, -0.03258137, -0.03678304, -0.012347012, 0.00036069707, 0.05169774, 0.024239458, 0.019054942, 0.01608183, -0.044596672, 0.00393753, 0.014435561, -0.006105935, -0.038773302, -0.035849333, 0.0018198021, -0.0057342965, -0.0048804483, -0.02364975, 0.01964465, 0.023969175, -0.024853736, 0.025074877, -0.0044565955, -0.0040696, -0.052877154, 0.011136882, -0.036070473, -0.08732593, -0.002882505, -0.045776088, -0.01989036, 0.021573486, -0.027593423, -0.005445585, -0.004100314, -0.0020854778, -0.00021749323, 0.0010688459, -0.05361429, 0.033564217, 0.007893488, -0.017298102, -0.022052623, -0.03641447, 0.010848171, 0.008950048, 0.009564327, 0.002212941, -0.010104893, -0.018440662, -0.0028640768, 0.023391752, 0.035849333, 0.0021453702, 0.019656934, 0.00635779, 0.012617295, 0.02609458, -0.06368847, 0.025799727, -0.036758468, -0.0151112685, -0.0048036636, -0.0076907757, -0.011444022, 0.02756885, -0.024251742, 0.030566534, 0.030517392, -0.05661197, 0.01944808, 0.046464078, 0.014238992, 0.00094829354, -0.041181277, 0.012752436, 0.027249426, 0.023477752, 0.012549724, 0.005660583, 0.027888276, 0.015762404, 0.02114349, -0.010111036, -0.016167829, -0.009177332, 0.0715021, 0.012113586, -0.016966391, 0.03049282, -0.053663433, -0.009502899, 0.015492122, 0.01271558, -0.009103618, -0.0010005073, 0.07848031, -0.038625877, -0.010743744, 0.01430042, -0.034841917, -0.009466043, 0.0109833125, -0.004794449, 0.0063147903, 0.0035321054, -0.03471906, -0.016118687, 0.004825163, 0.0062564337, -0.061722774, 0.021524344, -0.007617062, 0.019620078, 0.029092263, -0.052287444, -0.00972404, 0.045677803, 0.007973344, 0.004272312, 0.02303547, 0.01093417, -0.017040106, -0.063590184, 0.021966625, 0.0076600616, -0.03842931, -0.017900096, 0.0054271566, -0.0041125994, -0.028428841, -0.032065373, 0.0051476597, 0.016376683, -0.014632131, 0.014251278, -0.05739825, -0.04064071, 0.032728795, -0.011468593, -0.010485746, 0.0282077, 0.020824065, 0.019018084, -0.024608025, -0.0073713507, 0.032507654, -0.034375064, 0.01025232, -0.03992815, 0.0647696, -0.008765765, -0.019828932, -0.06521188, 0.034891058, 0.0017076962, -0.005814153, -0.006646501, -0.0112965945, 0.026979143, 0.052877154, 0.03975615, -0.030640246, -0.01966922, 0.09317387, -0.009226474, -0.019202368, -0.023244325, 0.0060936497], [0.029989282, 0.04643359, -0.03552236, 0.055197984, 0.017340666, 0.005798666, -0.00954456, 0.008249819, -0.0070048766, 0.02651451, -0.029236784, -0.017285336, 0.005848463, -0.02717848, -0.005010202, 0.07020369, -0.05170108, 0.018701803, -0.017573055, -0.020074006, 0.0039091194, -0.03981603, -0.07325795, -0.016997615, 0.0070546744, -0.02106996, -0.020284263, -0.00549158, -0.018646473, 0.03218038, 0.016344713, -0.0041110767, 0.018701803, 0.0065843626, 0.005953592, -0.061306503, -0.004000415, -0.015470486, -0.04709756, -0.013766298, -0.034039494, 0.010025937, -0.0056631053, -0.06821179, 0.018015701, -0.003983816, -0.050461672, -0.039882425, -0.02139088, 0.021424077, 0.00173462, -0.014585193, 0.002899333, -0.005129163, -0.051745344, 0.018203827, 0.01632258, -0.08485528, 0.0693184, -0.002940831, 0.0059978566, -0.0017235538, 0.028174432, -0.035942875, 0.035301037, -0.0187682, 0.021545805, -0.0008341115, 0.049133733, 0.004019781, 0.017727982, 0.069052815, -0.010717572, -0.032335307, 0.02518657, -0.027289141, 0.0447294, 0.036695372, -0.027864581, 0.009373034, 0.017871842, -0.025739878, 0.0013991771, 0.02536363, 0.054091368, -0.032512367, 0.017727982, -0.08640455, -0.007453056, 0.013456445, 0.02106996, -0.01934364, 0.024655394, 0.006529032, -0.03848809, 0.0005429333, 0.06387385, 0.026470244, -0.008980186, -0.0038925202, -0.01819276, -0.01350071, -0.051922403, -0.030033547, 0.015138501, 0.0194875, 0.006390705, -0.023128266, -0.042073525, 0.11526508, 0.0026959921, -0.0026088462, -0.04661065, 0.04939932, -0.010064669, 0.070115164, -0.0634312, -0.057101365, -0.020217868, 0.0150831705, -0.046300795, -0.017108276, 0.06639694, -0.0069163474, 0.0025576653, 0.05024035, 0.040236544, 0.0368503, -0.011221082, -0.013888026, -0.02106996, 0.029635165, 0.020461323, 0.002607463, 0.072682515, 0.009068714, 0.06958399, -0.032202512, -0.04163088, -0.027289141, -0.057189893, -0.0060033896, 0.014961443, 0.017916106, -0.028949063, 0.004277069, -0.003618633, -0.028794138, -0.04727462, -0.040900514, -0.02593907, -0.032689426, 0.0016723728, 0.0029325313, 0.030365532, 0.0012283433, 0.041962862, 0.035256773, 0.02317253, 0.015105302, 0.025894804, -0.053781517, 0.013976554, 0.031051634, 0.0062855766, -0.098975696, 0.032711558, 0.002787288, -0.011154685, 0.026735833, 0.055684894, -0.026957156, 0.022563891, 0.019598162, -0.041121837, 0.0043738983, 0.008366014, 0.03286648, -0.020029742, -0.04537124, -0.07927794, 0.0031787532, 0.059491653, -0.0158578, -0.0028772005, 0.017141476, 0.021047829, 0.013434313, 0.0059314594, -0.03368538, 0.026226789, 0.01689802, 0.005322821, -0.024434073, -0.005959125, -0.029059725, -0.013135527, -0.04280389, -0.02872774, 0.0069993436, 0.021280218, -0.060288418, -0.009378567, -0.025407894, -0.004033614, 0.033176336, -0.0005816648, -0.03813397, 0.004470727, 0.0122613, 0.0027222743, 0.004891241, 0.006396238, -0.0044624275, -0.011796522, 0.017196806, -0.028108036, 0.005804199, 0.015503684, -0.06998237, 0.07511707, -0.03600927, 0.023725837, 0.021180622, 0.035787947, 0.023393853, -0.003347512, -0.00448456, 0.011851853, 0.01666563, 0.030365532, -0.045681093, -0.00033319503, 0.012095308, -0.076445006, -0.045127783, -0.016588168, 0.014020819, 0.076931916, -0.044375286, -0.011663728, 0.041431688, -0.05037314, -0.012571153, 0.030498326, 0.03169347, -0.023084002, 0.012460492, -0.01781651, -0.0064903004, 0.02469966, 0.0038454891, 0.076312214, -0.0025493656, -0.033464056, 0.054135635, -0.007845905, -0.021800326, -0.06608708, 0.018214893, -0.030963104, 0.02147941, -0.015249163, 0.07972059, 0.009610957, -0.017528791, 0.025319364, -0.0902113, -0.065157525, -0.048115645, 0.017694782, -0.046212267, 0.0353453, -0.0065677636, 0.054268427, -0.00954456, 0.061217975, 0.00030380057, -0.027731786, 0.02910399, -0.011171284, 0.06883149, 0.00119307, -0.003162154, 0.05187814, 0.05639313, -0.03140575, -0.0317156, -0.061527826, -0.002185566, -0.0026904591, -0.001200678, 0.031671338, 0.05333887, 0.02967943, -0.038620885, -0.0073534604, 0.01263755, -0.030387664, -0.023216795, 0.0036877964, -0.008615002, -0.061616357, -0.048115645, -0.006036588, 0.016787358, 0.033264864, 0.10703186, 0.015891, 0.0019988243, 0.028749872, 0.012947402, -0.013843761, -0.023039736, 0.008249819, -0.055375043, 0.0194875, 0.021092093, 0.07223987, -0.0202068, -0.026536642, -0.039727498, -0.08025176, -0.00895252, 0.018978458, 0.014474532, -0.041697275, -0.0072040674, -0.008620535, 0.016765226, -0.01971989, -0.031560678, 0.024079954, -0.0076854452, -0.03589861, -0.0785697, 0.018668605, -0.04594668, -0.0013224056, 0.0064294366, -0.015492618, 0.022906942, -0.031450015, -0.04709756, -0.026691567, -0.040214412, 0.012648616, 0.01263755, 0.03983816, -0.0031759867, 0.0012753744, 0.07808279, 0.00046408692, 0.032689426, -0.0317156, 0.0079067685, -0.021756062, -0.059226066, -0.012593285, 0.013843761, 0.033109937, -0.046212267, 0.005317288, 0.022431098, -0.0016972716, -0.07215133, -0.028085904, 0.01531556, -0.009251306, -0.00462012, -0.046876237, 0.042560436, -0.004127676, -0.03926272, 0.0009399316, -0.03751427, 0.012161706, -0.017573055, -0.043401465, -0.0067337556, -0.029502371, -0.014054018, -0.021147424, 0.038465958, -0.027908845, 0.014253208, 0.0145187965, -3.6440506e-05, 0.014054018, 0.013190858, 0.0061361836, 0.016931219, 0.0037375942, -0.02354878, 0.076312214, 0.02766539, -0.029458107, 0.0034277418, 0.007790574, 0.038731545, -0.0055884086, -0.028130168, -0.034637067, 0.0053698523, 0.07458589, -0.016798424, -0.05086005, -0.0019033788, 0.0022616456, 0.06272297, -0.018026767, 0.0010021788, -0.012471558, -0.023747971, 0.017683716, 0.033574715, -0.04012588, 0.05006329, -0.017705848, -0.013755232, 0.031737734, -0.08166823, -0.047186088, 0.030409796, -0.035101846, 0.066131346, -0.0484255, 0.040081616, 0.020837571, -0.055065192, -0.03943978, 0.024102088, 0.00042673864, 0.03368538, -0.012892071, -0.0656887, -0.046212267, -0.03879794, -0.010374521, 0.035367433, 0.03868728, -0.012106375, 0.023681574, 0.005748868, -0.029413842, 0.016942285, -0.060332682, -0.022242973, 0.022265105, -0.0027596226, -0.014906112, -0.051922403, -0.062368855, -0.011840787, 0.05754401, -0.032490235, 0.03235744, -0.00967182, 0.011387074, -0.054888133, -0.011387074, 0.021744996, 0.04012588, -0.022552826, 0.05134696, -0.0074253906, -0.0054390156, -0.008891656, -0.004589688, -0.017362798, 0.03503545, -0.023880765, -0.03831103, 0.0520552, -0.04194073, -0.02585054, 0.011088288, 0.015791405, 0.03319847, -0.01900059, -0.020129338, -0.003126189, -0.028772006, 0.038532354, -0.010020404, -0.004946572, -0.024146352, 0.05515372, 0.041608747, -0.009505828, 0.024588998, 0.054135635, 0.011143619, -0.033928834, 0.009677353, -0.025784142, -0.05037314, -0.033087805, 0.009428365, 0.0012892071, 0.00879206, 0.03063112, 0.033928834, 0.010274925, 0.004282602, -0.016234051, -0.05564063, -0.027975243, 0.0034526407, -0.0520552, 0.0038454891, -0.02930318, -0.00837708, 0.0067171566, -0.0090465825, -0.014662656, -0.011696926, 0.028351491, 0.0072262, 0.0061970474, -0.008426878, -0.064936206, -0.017362798, -0.007331328, 0.001653007, 0.0001891621, -0.002141301, -0.0024829686, -0.009312171, -0.037934784, -0.04740741, -0.027023552, -0.0245226, -0.012460492, 0.025584953, 0.0065898956, 0.020317461, 0.050328877, -0.045990944, 0.029148255, -0.0136445705, 0.06595429, 0.016820557, 0.008924855, -0.007181935, 0.0101974625, 0.04545977, 0.03589861, -0.0096386215, 0.043335065, -0.047495943, 0.03877581, 0.029192518, 0.050682995, 0.01891206, -0.0017678184, -0.03999309, -0.038554486, 0.013655636, 0.001493931, 0.027333405, -0.014729054, 0.07494, 0.035367433, -0.016676696, -0.053427402, 0.031450015, 0.024456205, 0.0026946089, 0.017451327, -0.0014953143, 0.043866243, 0.0009772799, 0.0139322905, -0.026492378, 0.0773303, 0.0044624275, -0.060288418, 0.0024802021, -0.030520458, -0.014087216, -0.018458348, -0.0006819519, -0.021678599, -0.0004201681, -0.02536363, -0.02642598, -0.023747971, -0.03149428, -0.0026268288, -0.032313175, 0.036828168, -0.0005470831, 0.014640524, 0.032623027, 0.041542348, 0.018369818, 0.01321299, 0.00066984823, 0.013522842, 0.030299135, -0.009721618, 0.014717987, -0.022320436, -0.020361727, -0.0021385346, 0.025385762, -0.03802331, -0.012980601, 0.0447294, -0.0032119518, 0.03319847, 0.012969535, -0.01704188, 0.026868626, -0.03200332, -0.0018452815, 0.050461672, 0.015448353, 0.077772945, 0.065423116, 0.037292946, 0.04709756, -0.0360978, 0.0076245815, -0.008211087, -0.017971437, -0.017451327, -0.011553067, -0.014419201, -0.015824603, -0.02872774, -0.038620885, -0.007098939, 0.037934784, 0.03237957, 0.004415396, 0.08450116, -0.023106134, -0.020372793, 0.012969535, 0.020361727, 0.012892071, 0.025474291, -0.04098904, -0.04461874, 0.023858631, 0.015171699, 0.0037597264, 0.012958469, 0.008692466, 0.030874575, -0.02245323, 0.043888375, 0.026182525, -0.0007642564, -0.03235744, 0.023593044, -0.052940488, -0.010883564, -0.057853863, -0.05564063, -7.6036595e-05, 0.001018778, -0.021103159, -0.04001522, -0.022110179, -0.011409206, -0.015049972, 0.0052813226, 0.064405024, -0.017207872, 0.0018342154, -0.034238685, 0.0076799123, 0.007790574, -0.009179376, 0.052940488, -0.022951208, -0.014729054, -0.04545977, -0.05732269, -0.02112529, -0.0142200105, 0.0011121486, -0.0034720064, -0.02147941, -0.006241312, -0.0031815197, 0.014983575, 0.010540513, -0.03926272, -0.010612443, 0.047053296, -0.04096691, -0.013002733, 0.032401703, -0.003192586, 0.014286407, 0.019863749, 0.010850366, -0.033264864, -0.006971678, 0.01675416, 0.0142200105, 0.02766539, 0.014695855, -0.018502612, -0.056437396, -0.002448387, 0.028860534, -0.005660339, 0.04723035, 0.07299236, 0.009511361, -0.018580075, 0.0025728813, 0.0061583156, -0.06971678, 0.007746309, -0.03437148, 0.00045129168, 0.002700142, -0.018203827, 0.024544735, -0.050904315, 0.029812224, -0.008321749, 0.03884221, -0.007375593, 0.024345543, -0.0018521978, 0.007524986, 0.0069163474, -0.00895252, -0.0052425913, -0.016333645, 0.01163053, 0.015182766, 0.0022727118, -0.014242142, -0.019775221, -0.028882667, -0.028395755, 0.014430267, 0.0029961616, 0.03388457, -0.045216314, 0.00049002323, 0.034415744, 0.029590901, -0.001229035, 0.03523464, 0.010645642, 0.04433102, 0.034504272, 0.012338764, -0.0057156696, -0.00041498084, -0.00390082, -0.027045684, -0.019620294, -0.0107839685, 0.02337172, 0.032623027, 0.011597332, -0.00052287587, -0.04997476, 0.00627451, 0.014186812, 0.0074807215, 0.02202165, -0.006612028, -0.010700973, 0.016709896, -0.010667774, -0.000668465, -0.012881005, -0.018380884, -0.01815956, 0.047717262, -0.030277003, 0.0017775013, -0.07126604, 0.034924787, 0.01767265, 0.018059967, -0.009539027, 0.0015575615, -0.027953109, 0.03563302, -0.010241727, 0.03474773, -0.014186812, 0.06290003, 0.00281772, 0.015492618, -0.009262373, 0.030144209, -0.0039616837, -0.0009897293, -0.016588168, 0.0047307815, -0.014098283, 0.0081834225, -0.042095657, -0.01502784, -0.039727498, -0.018170629, 0.009173843, 0.050328877, 0.017296402, 0.0096330885, 0.039970953, -0.0061417166, -0.0036490648, 0.023017604, -0.017440261, -0.0021468343, 0.016676696, 0.00023377255, -0.07237266, 0.032401703, -0.0038565553, 0.04855829, 0.017927172, 3.0885814e-05, -0.02178926, -0.00925684, -0.0068554836, 0.0015520283, -0.04815991, -0.025651349, 0.029812224, 0.017086145, 0.010944428, -0.03341979, 0.0069993436, -0.007381126, -0.0014040185, 0.007270464, -0.006844417, -0.021888856, 0.008543072, -0.03649618, 0.026470244, 0.011027425, 0.016112322, -0.0035605356, 0.052276522, 0.0469205, 0.0063021756, -0.028285094, -0.005975724, -0.020505587, -0.025430026, -0.055375043, -0.0040419134, 0.01197358, -0.009804614, 0.037846252, 0.057189893, 0.02642598, -0.036584713, -0.012283433, -0.0426047, 0.023084002, -0.061483562, 0.015570081, -0.045039255, -0.013290453, 0.0012961235, 0.02182246, 0.06458209, 0.002150984, -0.07042502, -0.008166823, -0.04453021, 0.012017845, -0.010844832, -0.0012954319, 0.032822218, -0.02996715, -0.052719165, -0.011995713, -0.002341875, 0.004846976, -0.022486428, -0.019011656, 0.022619223, -0.007519453, -0.006379639, 0.026979288, -0.006324308, 0.00808936, 0.0005647198, -0.017916106, 0.008742264, -0.010125533, 0.0061970474, 0.003920186, -0.011940382, -0.00052633404, -0.031007368, 0.04393264, -0.025518555, -0.012947402, 0.038355295, -0.014762252, -0.016278315, 1.0477185e-05, 0.029767958, 0.010927829, -0.0447294, 0.058650624, -0.001321714, -0.0382889, -0.02317253, 0.03665111, -0.026160393, 0.032977145, 0.011564133, -0.0018729469, 0.057189893, -0.0062855766, 0.0093398355, 0.0025493656, 0.0045813886, 0.012991667, -0.044552345, -0.019244045, -0.00045855384, 0.04377771, 0.008720131, -0.0053809183, -0.028285094, 0.012526888, -0.00022063148, -0.037115887, -0.000744199, 0.012095308, 0.07586957, -0.0055524437, 0.016676696, -0.0016709896, -0.022486428, 0.0019766921, 0.06692811, 0.012250234, 0.0032894148, 0.0019642427, 0.025828408, -0.03848809, -0.039793897, 0.007530519, 0.0223979, -0.0081889555, 0.049177997, -0.00027544354, -0.003275582, 0.024079954, -0.002499568, -0.017628387, 0.011818655, 0.016787358, 0.029037593, 0.0541799, -0.031140162, -0.016455373, -0.006960612, -0.046699177, 0.005992323, 0.006545631, 0.037093755, -0.0043351664, 0.042449772, -0.0093287695, -0.00032161016, -0.0078901695, 0.018967392, 0.029590901, -0.070026636, -0.0093232365, 0.029148255, -0.04758447, 0.02498738, 0.0021924821, 0.04953211, 0.02187779, -0.0038427226, 0.035677288, -0.011719059, 0.018358752, 0.05820798, -0.009195975, 0.011121486, 0.00641837, 0.0034554072, -0.03514611, -0.013733099, 0.01263755, -0.01891206, -0.020217868, 0.015437287, -0.054578282, 0.013268321, -0.0010422935, -0.006944013, -0.06059827, -0.003557769, 0.028108036, 0.002664177, -0.016687764, -0.0039561507, 0.0029740294, 0.05732269, 0.045681093, -0.0144524, 0.02478819, 0.09269012, -0.02651451, -0.02015147, 0.0060199886, -0.0005418958], [-0.014273285, -0.008379341, -0.023966337, 0.041660003, 0.014628341, 0.002834537, -0.035505682, 0.020889176, 0.02752874, 0.044453114, -0.00026925144, -0.0066158925, 0.008136719, 0.013326466, -0.0038405315, 0.02361128, -0.015942052, -0.009988932, -0.01564617, -0.0136341825, -0.012332307, -0.03290193, -0.050512753, -0.012213955, -0.0008454791, 0.0035683212, -0.0061839065, 0.010054026, 0.0038878722, 0.003032777, -0.0014291038, 0.046536114, 0.020995693, -0.028901625, -0.026629262, -0.0010821837, 0.003586074, 0.017551642, -0.043009218, 0.009752228, -0.039932057, -0.00597679, 0.017871194, -0.03481924, -0.013657853, -0.011054102, -0.0060330075, -0.030511217, -0.030274512, -0.015977558, -0.0011014158, -0.033943433, 0.027907467, -0.02003704, -0.0179067, -0.014746694, 0.06708207, -0.11967782, 0.023374574, 0.014143097, -0.019504456, 0.02655825, 0.0072194887, -0.016060404, 0.010775975, -0.00047599807, -0.02549308, 0.020250075, 0.028357206, 0.052785117, -0.047033194, 0.05396864, 0.030487547, -0.002031221, -0.008805409, -0.09496587, 0.07584014, 0.044855513, 0.016628494, -0.035079613, 0.006479787, -0.006651398, -0.011835228, -0.0023744425, 0.036073774, -0.02232124, 0.04012142, -0.087912075, -0.023327233, -0.008870503, -0.020960188, -0.023197046, 0.022877496, 0.053305864, -0.029185671, 0.0326889, -0.023895325, 0.015208268, -0.016013063, 0.017196586, -0.002060809, -0.071011364, -0.05027605, -0.04994466, 0.038204115, 0.03223916, 0.06982785, -0.037257295, -0.012876728, 0.03960067, 0.007521287, -0.020179063, -0.02157562, 0.0065567163, -0.036594525, -0.00999485, 0.016273439, -0.055152163, 0.013113433, 0.01897187, -0.059034117, -0.026865967, 0.060407, 0.01641546, -0.03536366, 0.01946895, -0.019752994, 0.036476173, 0.026842296, -0.004408622, 0.004716338, 0.037304636, 0.046985853, 0.04615739, 0.031884104, 0.01688887, 0.076692276, -0.00042643806, -0.054205343, 0.020616967, -0.038795877, 0.0006879226, -0.016273439, 0.037138946, 0.041802023, -0.0072905, -0.017527971, 0.005426452, -0.06253734, 0.0264399, -0.020096216, -0.055909615, 0.0027916343, 0.021918843, 0.039079923, -0.060170297, -0.016237933, 0.044571467, -0.029185671, 0.054726094, 0.055767592, -0.068312936, -0.043482628, 0.026132183, 0.006219412, -0.053447887, -0.012711034, -0.043837685, -0.08152105, 0.03370673, -0.033422682, 0.0053554405, 0.029540729, -0.005219335, 0.003985513, -0.023670455, -0.02854657, -0.010947586, -0.047885332, -0.0632948, -0.036665536, 0.04175468, 0.014900552, -0.013361972, 0.0651411, 0.02490132, 0.027197354, 0.016486472, 0.0066158925, -0.007491699, -0.040713184, -0.007065631, 0.021031199, 0.007243159, -0.014237779, -0.03754134, -0.058466025, -0.040926218, 0.003112665, -0.03387242, 0.0021495733, -0.01170504, -0.012817551, 0.03964801, -0.039742693, -0.011018597, 0.02646357, 0.02130341, 0.028309865, 0.0025948738, 0.026108513, 0.02601383, 0.016829694, -0.018084228, -0.0009993371, 0.022049028, -0.063673526, 0.04980264, 0.0080893785, -0.042488467, 0.02234491, -0.012166614, -0.004947125, -0.0033612046, 0.0021199852, 0.012616353, 0.01351583, -0.030014137, 0.010917998, 0.014131262, -0.008332, -0.0067815855, -0.013977404, 0.02594282, -0.04265416, -0.0050921068, -0.021658467, -0.025161695, 0.013350137, -0.0005917614, 0.033185977, -0.020072546, -0.046701808, -0.007000537, 0.023291728, 0.02551675, 0.017610818, 0.026392559, -0.05453673, 0.032262832, 0.03377774, -0.023339069, -0.017551642, 0.021670302, 0.037612353, 0.100457415, 0.031505376, -0.015149091, -0.013231785, 0.012722869, -0.027102672, 0.069780506, -0.029540729, 0.02961174, -0.031363353, -0.05027605, 0.02413203, -0.005251882, -0.024593603, 0.006680986, 0.08242053, -0.049660616, 0.017054563, -0.0033996692, -0.024640944, 0.024309557, 0.08639716, 0.04637042, -0.025777126, 0.052737776, -0.03290193, 0.0034529278, 0.020321086, 0.027552411, 0.007260912, -0.026250536, 0.016001228, -0.049045183, -0.023990007, 0.040168762, -0.005272594, -0.009929756, 0.04525791, 0.019824006, 0.063152775, 0.012782046, 0.016746847, 0.031552717, -0.015586995, 0.011480171, -0.010681293, -0.021196892, -0.021693973, -0.021682138, -0.005624692, 0.047411922, 0.0013603115, 0.06566184, 0.0136341825, -0.0399794, 0.05354257, -0.003157047, -0.03844082, -0.0447845, 0.020960188, 0.012142943, 0.051317547, 0.02494866, 0.033517364, -0.0029233012, -0.048406083, -0.04729357, -0.08866952, -0.0038346138, 0.05401598, 0.019090222, 0.02259345, -0.057566546, -0.04002674, -0.0049885483, -0.044050716, -0.009829157, -0.010148708, 0.03223916, -0.036144786, -0.11598523, -0.0168652, -0.052169684, 0.0116340285, -0.011663617, 0.05245373, 0.009906085, -0.022155546, -0.02256978, 0.005672033, -0.027670762, -0.029706422, 0.054442048, 0.034085456, 0.018699659, 0.0013728865, 0.0071011367, 0.008154472, 0.02182416, 0.058986776, -0.002075603, -0.021125881, -0.00037632327, -0.017752841, 0.018900858, 0.07910666, -0.0789173, -0.001554853, 0.016261604, 0.016983552, -0.012947739, -0.027386717, -0.0063259294, 0.018533967, -0.02313787, -0.04468982, 0.05818198, 0.07735505, -0.02646357, 0.030463876, 0.025067013, -0.00845627, 0.026132183, -0.061401162, 0.019906852, 0.012829387, -0.016486472, -0.019184904, 0.033162307, -0.024617273, 0.012876728, -0.032002456, -0.009965261, -0.008917844, 0.014959727, -0.006834844, 0.026155854, -0.057613887, -0.019173069, 0.022013523, 0.041896705, -0.0049707955, 0.015397632, 0.028948966, -0.0037428907, -0.010042191, -0.003370081, -0.03633415, -0.019895017, 0.029256683, -0.02655825, 0.023031354, -0.012864892, -0.009551029, 0.04932923, -0.001547456, 0.056856435, 0.0057578385, 0.017421456, 0.041375957, 0.046654467, -0.022960342, 0.049092524, -0.021232398, 0.023327233, -0.0018418573, 0.0019735242, -0.05751921, 0.04819305, -0.040831536, 0.0068881027, -0.03948232, 0.025445739, 0.028333535, -0.03531632, -0.0018329809, -0.012924069, -0.0018906776, -0.009024361, -0.0020075506, -0.052643094, -0.04106824, -0.029730093, -0.012604518, 0.031008298, 0.017172916, -0.08256255, 0.01043867, 0.004550645, -0.065093756, 0.024285886, -0.08066891, -0.039719023, 0.03219182, -0.017918535, -0.035126954, -0.013503995, -0.06078573, -0.025303718, 0.06476237, -0.028380876, 0.044476785, -0.022901166, 0.058844753, -0.05718782, -0.012403319, 0.0006653617, 0.03803842, 0.0132554555, 0.04890316, -0.023256222, 0.008189977, 0.04047648, 0.020131722, 0.025587762, -0.04154165, -0.029043648, -0.014652012, 0.03967168, 0.017078234, -0.028712263, -0.0064087757, -0.00058436434, 0.016817858, -0.013196279, -0.03886689, -0.008237318, -0.018226251, 0.030085148, -0.03325699, -0.027576081, 0.0064442814, 0.020676143, 0.07049061, 0.010290731, 0.007728404, 0.016746847, 0.01926775, 0.00068570353, -0.0038878722, -0.04525791, -0.03219182, -0.037280966, 0.015563324, -0.02494866, -0.00045676582, 0.03884322, -0.008201812, 0.02286566, 0.055246845, 0.018415615, 6.527868e-05, -0.04424008, 0.053400546, -0.03223916, 0.01326729, 0.0065212105, -0.043908697, 0.035647705, 0.0069650314, -0.054773435, -0.020108052, 0.011113279, -0.0006923608, 0.041612662, -0.002185079, -0.032002456, -0.041991387, -0.03271257, -0.028262524, -0.028806943, -0.01840378, 0.027931137, 0.03498493, -0.043009218, -0.036499843, 0.0083734235, -0.010343989, 0.009953426, 0.038819548, -0.018320933, 0.02075899, 0.0189482, -0.029375035, -0.02599016, -0.040192433, 0.040689513, -0.031907775, 0.009409006, -0.019847676, 0.06286873, 0.043293264, -0.029517058, -0.020818166, 0.024546262, -0.020995693, 0.022380415, 0.0060478016, 0.035268977, 0.026108513, -0.049565934, -0.036192127, -0.038748536, 0.012237625, -0.029493388, 0.018439285, 0.005932408, 0.103203185, 0.029966796, -0.010557023, -0.05917614, 0.027765444, 0.025161695, -0.01899554, 0.023232551, 0.005959037, 0.040665843, 0.00674608, -0.005319935, -0.039221946, 0.057613887, -0.0076692277, -0.0274814, -0.044831842, 0.028167842, -0.023575773, 0.013705194, -0.0005251882, -0.055436205, 0.010154625, -0.019480785, -0.05917614, -0.055862274, -0.01403658, 0.023942666, 0.0015267443, 0.03794374, -0.0030712415, 0.022699967, 0.005606939, 0.015149091, -0.0046660383, 0.021196892, 0.027244695, 0.02859391, -0.01426145, 0.0032753993, 0.018391944, 0.006823009, -0.017314939, 0.004396787, 0.030321853, -0.028144171, 0.014474483, 0.024664614, -0.014675682, -0.0076218867, 0.037138946, -0.03538733, 0.02705533, -0.012592683, 0.037186287, 0.047033194, 0.003003189, 0.026629262, 0.018936364, 0.035600364, 0.07356778, -0.054347366, 0.018309098, 0.008692975, -0.0062134946, 0.0025948738, -0.020936517, -0.031339683, -0.010048108, -0.00553001, -0.03221549, -0.032925602, 0.008024285, -0.0022102287, 0.030392865, 0.041304946, 0.0038789958, 0.030913616, -0.0025534504, 0.03474823, -0.0094918525, 0.13198645, -0.021173222, -0.024380568, 0.012030509, -0.0069058556, 0.04570765, -0.024640944, -0.021409927, 0.0175043, -0.029162, 0.054300025, -0.017374115, -0.016948046, 0.00805979, 0.024333227, -0.011864816, 0.028262524, -0.027339377, -0.01899554, 0.021161387, 0.020841837, 0.025303718, -0.003476598, -0.011219796, -0.03013249, -0.007130725, 0.025919149, 0.08218382, -0.069733165, -0.036168456, -0.019883182, -0.040429138, 0.00637327, 0.013066092, 0.064052254, -0.033328, -0.003849408, 0.00052259926, -0.055341523, 0.009178219, -0.019634644, -0.008272824, 0.004035813, -0.07124807, 0.0044174986, -0.027363047, -0.004890908, 0.025871808, -0.063152775, -0.04218075, 0.05448939, 0.037872728, 0.036570854, 0.0014512948, -0.03328066, 0.008521364, 0.013752535, -0.020380262, -0.012018674, -0.04428742, -0.012190284, -0.00040017863, 0.042843524, 0.0052282116, -0.01224946, -0.05363725, -0.032546878, 0.014947893, 0.0026747615, 0.013503995, 0.05041807, -0.011338148, -0.009533276, -0.03382508, 0.017291268, -0.06447832, 0.031245, -0.03287826, -0.052595753, 0.0022176257, -0.032333843, -0.0042873113, -0.031884104, 0.029919455, -0.016084075, 0.008337918, -0.00972264, 0.023705961, -0.014841376, 0.004979672, -0.017989546, -0.016368119, 0.011030432, -0.0612118, 0.0008950391, 0.009006608, -0.0036274972, 0.021019364, -0.039861046, -0.04265416, 0.022605285, 0.0049737543, -0.02554042, 0.028854284, -0.015385796, -0.00078408385, -0.042441126, 0.010166461, -0.037636023, 0.020108052, -0.020960188, 0.022427756, 0.032949273, 0.0057933438, -0.027599752, 0.028120501, -0.02698432, -0.013539501, 0.027694432, 0.01532662, 0.0072549945, 0.056430366, -0.0014291038, -0.025729785, -0.04684383, 0.015563324, 0.019303257, 0.015989393, 0.057945274, -0.011781969, -0.02703166, -0.005251882, -0.022581615, 0.03683123, -0.00040165804, -0.053921297, -0.016474636, -0.028428217, -0.0026037502, -0.014876882, -0.013137103, 0.031505376, 0.018640483, 0.0014475962, -0.0033582458, 0.013066092, 0.0010215282, 0.015421302, 0.046062708, 0.036239468, 0.014427142, 0.04570765, -0.042512137, 0.020451274, -0.005947202, 0.027931137, -0.0051867887, 0.033067625, -0.04052382, -0.006331847, 0.018664153, -0.01584737, 0.0019705654, -0.021587456, -0.02700799, -0.03259422, 0.033020284, 0.029019978, 0.010805563, 0.0030179832, -0.01024339, -0.020628802, -0.005964955, 0.036215797, -0.018119734, -0.0014823623, 0.044997536, -0.0053731934, -0.038748536, -0.0093498295, -0.0033375341, 0.013563171, 0.022688132, 0.02752874, 0.005574392, -0.010941668, 0.017480632, -0.028451888, -0.030724252, -0.016841529, 0.002090397, -0.011787887, 0.03013249, 0.00486132, 0.0104682585, 0.031102978, 0.050181367, -0.02135075, -0.018983705, -0.024404239, 0.027647091, -0.018439285, 0.0012404798, -0.0058939434, -0.0024143865, 0.010823316, 0.048382413, 0.04305656, 0.038204115, 0.04980264, -0.0057252916, -0.06073839, 0.014438977, -0.046039037, 0.0044027045, 0.0016658083, 0.035032272, 0.01693621, 0.017965876, -0.01872333, -0.042796183, 0.011361819, -0.019386103, -0.0102788955, -0.039245617, -0.027386717, -0.0047429674, -0.031481706, -0.034961265, 0.006515293, 0.03962434, 0.009781816, -0.008503611, 0.010574776, -0.027434058, 0.012237625, -0.0024498922, -0.00585252, -0.015421302, -0.04722256, -0.03422748, -0.012166614, 0.003630456, 0.0018448161, 0.0006383626, -0.0274814, -0.020096216, 0.008550952, -0.017303104, 0.03687857, -0.043435287, -0.0024513716, -0.0032576465, -0.009343912, 0.0033671223, -0.021764984, 0.048619114, -0.0067638326, 0.01351583, -0.0014882799, -0.02449892, 0.016001228, -0.00065352645, 0.006882185, -0.007651475, -0.01842745, -0.012426989, -0.026818626, 0.029375035, 0.0041778353, -0.03803842, 0.017894864, -0.020912847, 0.0017989546, 0.00357128, 0.0008528761, -0.05041807, 0.014379802, 0.01793037, 0.007929603, 0.010101367, -0.0037754376, 0.0017678872, -0.038653854, 0.024853978, 0.027126342, -0.048571773, 0.009190055, 0.021149551, 0.030061478, 0.025729785, -0.03337534, -0.034937594, -0.025445739, 0.01899554, -0.041636333, -0.0011554142, 0.0591288, 0.053873956, -0.04736458, -0.024096524, 0.04352997, -0.06495173, 0.010835151, 0.026889637, 0.012734705, -0.0017738048, 0.014154932, 0.04516323, -0.022889331, -0.022238392, 0.007385182, 0.006580387, -0.012805716, 0.0468675, 0.017232092, 0.048051026, 0.024759296, -0.04258315, -0.009988932, -0.008533199, -0.0037044263, -0.0017427373, -0.0011539347, -0.015267444, -0.0043494464, 0.030937286, -0.04099723, -0.02028558, -0.0006886623, 0.0012131109, -0.00016060774, -0.0057075387, 0.009326159, -0.0012878207, -0.03171841, 0.03533999, 0.021918843, -0.07427789, -0.043908697, 0.014746694, -0.034487855, -0.03548201, -0.037754375, 0.017149245, -0.014995233, -0.0061957417, -0.016308945, -0.0885275, -0.002137738, 0.021114046, -0.031339683, -0.00061987, 0.032262832, -0.0028360165, -0.011592605, -0.02313787, -0.015456808, -0.0052814703, -0.04629941, 0.026037501, -0.04566031, 0.0472699, 0.003157047, 0.01639179, -0.033067625, 0.026865967, -0.0029351364, -0.0023611279, -0.011320395, -0.021125881, -0.0055033807, 0.020865507, 0.03434583, -0.011509759, 0.012308637, -0.0022398168, 0.032002456, 0.0050684363, 0.031789422, 0.020616967], [0.041276723, -0.01853265, -0.018460864, 0.023306392, 0.041085295, -0.028738169, -0.022732107, 0.03847708, 0.03199245, 0.025244603, -0.061161336, 0.014704084, 0.016247476, -0.020147827, -0.03412209, 0.017180687, -0.02074604, 0.017252473, -0.034169946, -0.04163565, -0.034696374, -0.078389876, -0.09490057, -0.0382378, -0.0082732905, 0.0064008827, 0.0027263574, 0.029767096, -0.041539937, -0.0037448157, 0.05570563, 0.019106934, 0.053791344, -0.056423485, -0.00644874, 0.010624269, -0.018628364, -0.008123738, -0.038501013, 0.018101936, -0.011318197, -0.0037059318, -0.016797831, -0.043526005, 0.023784963, -0.0055215093, -0.011108822, -0.014093907, -0.019788899, -0.090354145, 0.0048604836, -0.00555142, 0.062118474, 0.04146815, -0.06010848, 0.018209614, 0.06350633, -0.1184941, 0.073173456, 0.0032871824, -0.046540998, 0.040343508, 0.039577797, -0.0012704557, -0.06628204, -0.04031958, 0.042329576, 0.048072428, -0.007483649, 0.028474957, -0.041061364, 0.022325322, 0.007920345, -0.006723918, -0.03546209, -0.016929438, 0.08848772, 0.00961927, -0.048790284, -0.016821759, 0.04048708, -0.06503776, 0.033188876, 0.0020728093, 0.03529459, -0.014751942, 0.030652452, -0.09643199, -0.06422418, -0.026177816, -0.02391657, 0.01485962, 0.018676221, 0.039075296, -0.05240349, 0.04357386, 0.017910508, -0.0057727587, -0.012299267, -0.00053427933, -0.030748166, -0.0191189, -0.020865683, -0.088057004, 0.017802829, 0.039577797, 0.038812082, -0.02195443, 0.005138653, 0.020303361, 0.039577797, -0.020387111, 0.02548389, 0.0016211582, 0.0119463205, 0.055083487, -0.019621398, -0.081979156, -0.0025124962, -0.00076459144, -0.09356057, -0.0191189, 0.04328672, 0.011144715, -0.037184943, 0.00064195774, -0.01715676, 0.02548389, 0.020351218, 0.01755158, -0.010193556, 0.057189196, 0.024048178, -0.005500572, 0.062932044, 0.012658195, 0.027685314, -0.079921305, -0.009529538, 0.046660643, -0.024526747, 0.0119941775, 0.012430874, 0.015194619, -0.04003244, 0.0024451972, -0.03981708, 0.027876742, -0.040941723, -0.024957461, 0.014512656, -0.036945656, -0.0015882564, 0.0127539085, 0.004540439, 0.0036102177, 0.026010318, 0.043813147, -0.015948368, 0.02744603, -0.015409976, -0.07221632, -0.018245507, 0.006544454, 0.003580307, -0.024012284, 0.06743061, -0.019872649, -0.07255132, 0.034576733, 0.030173883, -0.05211635, -0.031729236, 0.0019681219, -0.061448477, 0.032375306, 0.024431033, -0.000509603, -0.028594598, -0.07819845, -0.046876, 0.08834415, 0.04015208, -0.059486337, 0.011838642, 0.03900351, 0.033356376, 0.008123738, 0.02099729, -0.0038883868, -0.008656147, -0.01738408, -0.005147626, -0.03086781, -0.0044028503, -0.036036372, -0.0046421355, -0.037950657, 0.012849623, 0.047809213, -0.047306713, -0.0010670631, -0.03644316, -0.028474957, -0.022181751, 0.010277306, 0.020554611, 0.03754387, 0.019860683, 0.023796927, 0.052212063, -0.020482825, 0.0012173642, -0.008997129, 0.008051951, 0.0122155165, -0.06690418, 0.038261726, 0.013926407, -0.052307777, 0.055609915, -0.009565432, 0.0077169524, -0.032447092, -0.018472828, 0.033356376, 0.033069234, 0.029264597, 0.03349995, -0.0051296796, -0.02015979, 0.0041815112, -0.0059701693, 0.07561417, -0.025412103, -0.02130836, -0.024179785, 0.033858877, 0.054604914, -0.003711914, -0.0028340358, -0.002769728, -0.01298123, 0.03019781, 0.008530523, 0.032949593, -0.005195483, -0.016642295, -0.018987292, 0.014763906, -0.03771137, -0.030724239, 0.054700628, 0.035222802, 0.007561417, 0.05355206, 0.015254441, -0.054748487, -0.04898171, 0.02890567, 0.0045434306, 0.03280602, -0.0026037237, 0.06302776, -0.015302298, -0.025579603, -0.0035264678, -0.05206849, -0.032758165, -0.023150858, 0.044339575, -0.031585667, -0.022241572, 0.017695151, 0.07264703, -0.0027203753, 0.056279913, -0.0036161998, -0.02467032, 0.045871, 0.011348108, 0.05158992, 0.01651069, 0.0137948, 0.008757844, -0.015302298, -0.041922793, -0.036538873, -0.08398916, 0.0075793634, -0.021104967, -0.012694088, 0.034169946, -0.0010999648, 0.003541423, 0.009936324, 0.02287568, -0.006634186, -0.0015164709, 0.0023031214, -0.02066229, -0.024694247, -0.015709084, -0.038620654, 0.0032094147, 0.029527811, 0.011701053, 0.01371105, -0.0108276615, -0.06417633, 0.06441561, 0.0046810196, -0.014584442, -0.07939488, -0.02441907, -0.004031958, 0.011162661, 0.03737637, 0.061161336, -0.0282596, -0.030149953, -0.027852815, -0.052164204, 0.009200522, -0.026560673, 0.03627566, 0.04634957, 0.01225141, -0.041276723, -0.015469798, -0.061113477, -0.037448157, -0.048790284, -0.028451027, -0.058337767, -0.043837074, -0.01183266, -0.03933851, -0.011521589, 0.0037418245, -0.0066999895, -0.015134798, -0.03933851, -0.021009253, 0.008069898, -0.0071426677, 0.0023061126, -0.016749974, 0.05240349, 0.019657291, 0.001567319, 0.05565777, -0.00077319075, 0.021416038, 0.012706052, -0.0033948608, 0.004824591, -0.014022121, -0.017874615, -0.028881742, 0.037113156, -0.03574923, -0.023414072, 0.036873873, 0.006394901, -0.03562959, -0.008291237, 0.02164336, 0.028451027, -0.0026590584, -0.03804637, 0.060204193, -0.003714905, -0.0021565591, -0.039314583, 0.04082208, 0.019130863, -0.026201745, -0.040439222, 0.010271324, -0.0006490615, -0.011659178, -0.0032812003, 0.04639743, 0.022421036, 0.002657563, -0.030508881, 0.024155855, 0.0038614674, 0.03708923, 0.0056261965, -0.037998512, -0.053599916, -0.06580347, 0.010696054, 0.05714134, -0.034528874, -0.0042174044, -0.0015291829, -0.0045613768, -0.010139717, 0.014955334, -0.052977774, -0.0008689049, 0.065994896, -0.03302138, 0.0044566896, -0.04067851, -0.07690631, 0.032542806, -0.045153145, 0.017084973, -0.015230512, 0.053025633, -0.0027996385, -0.017049082, -0.08011273, 0.0063290973, 0.013423908, -0.006987132, 0.032566734, 0.031250667, -0.021104967, 0.019800862, -0.048766352, 0.013435872, 0.001881381, 0.023964427, 0.008022041, -0.018592471, -0.019836755, 0.006089812, 0.008620255, 0.014596406, 0.016331226, -0.056088485, -0.037950657, -0.041420292, 0.006574365, -0.029575668, 0.039553866, -0.032183878, -0.0141298, 0.023820857, -0.055609915, 0.007812667, -0.07441774, -0.022325322, -0.01984872, -0.0003705184, -0.020650325, -0.0284271, -0.073604174, 0.041061364, 0.07882059, -0.022923537, 0.038620654, 0.015206584, 0.035174947, -0.0832713, 0.009762842, -0.028618528, 0.06302776, -0.017455867, 0.042951718, 0.04606243, -0.0008614272, 0.02644103, 0.008644183, 0.008039988, -0.025818888, -0.009409896, 0.005733875, -0.02924067, 0.00021516987, -0.033715304, -0.03022174, -0.0031256648, 0.029001383, 0.0001112303, -0.032183878, 0.013782836, 0.046612784, 0.014476763, 0.052786347, -0.022169787, 0.008369005, 0.023928534, 0.050297778, -0.010133734, -0.004782716, 0.07073275, 0.009050968, 0.015063012, -0.02400032, -0.044172075, -0.04113315, -0.03285388, 0.0017542607, 0.027637457, 0.011970249, 0.0548442, 0.012777837, 0.031250667, 0.014285335, 0.02041104, -0.024766034, 0.031729236, -0.00030303246, -0.014668192, -0.010845608, -0.012024089, -0.048622783, 0.0050848136, -0.016151762, 0.021320324, -0.01272998, 0.0136273, 0.028068172, -0.005195483, -0.011084894, 0.01272998, -0.033571735, -0.0067777573, 0.0059073567, -0.002374907, -0.009021058, 0.009996145, 0.02279193, -0.036634587, 0.00025162348, -0.0058505265, -0.0027861788, -0.003038924, -0.0043549933, -0.003266245, 0.031442095, 0.014835691, 0.0037896817, -0.005946241, 0.009786771, 0.0694406, -0.010492662, 0.00046997136, -0.00024227641, 0.033882804, 0.04438743, -0.016666224, -0.003714905, 0.06604276, -0.025866745, 0.063267045, -0.009379986, 0.012107839, 0.0041815112, -0.030149953, -0.0048754388, -0.04457886, -0.0057936963, -0.031298522, 0.016355153, 0.02187068, 0.08499415, 0.025388176, -0.03579709, -0.021523716, 0.020937467, 0.0016465823, -0.03426566, 0.008153648, -0.006347044, 0.0022926526, -0.002997049, -0.026249602, -0.017276403, 0.055227056, 0.028618528, -0.054652773, -0.030078167, -0.006050928, 0.009966235, -0.015194619, 0.012741945, -0.032303523, -0.0089432895, 0.0013370068, -0.02531639, -0.042784218, -0.039649583, 0.03625173, -0.0013915938, 0.060682762, 0.005303161, -0.0141298, -0.02383282, -0.021739073, 0.014285335, -0.005380929, 0.008530523, 0.0032782091, 0.004869457, 0.009098825, -0.016845688, -0.000660278, -0.0051177153, 0.008482666, 0.0043968684, -0.051637776, 0.011252393, -0.004465663, -0.015122834, -0.036634587, 0.03168138, -0.008291237, -0.0174439, 0.005066867, 0.012801765, 0.0053839204, -0.011952303, 0.008686058, 0.04622993, -0.007603292, 0.016917475, -0.022815857, -0.011025072, 0.0071845422, 0.0049831173, 0.012053999, -0.026656387, 0.002282184, -0.014871584, -0.010432841, -0.035605658, -0.030437095, -0.006095794, 0.025148889, -0.007519542, 0.052690633, -0.03493566, -0.027206743, 0.0074058813, 0.03153781, 0.03297352, 0.040606722, -0.027613528, -0.029958526, 0.050202064, -0.010582394, 0.041898865, 0.0077767735, -0.0055663753, -0.003179504, -0.010014092, 0.035222802, -0.03148995, -0.0147280125, -0.021906573, 0.01755158, -0.0143690845, 0.021439968, -0.010911412, -0.036156017, 0.0368978, 0.021404075, -0.025747104, -0.015972298, 0.003358968, -0.03316495, -0.0277571, 0.0119463205, 0.10882697, -0.04407636, -0.0060419547, -0.0010767841, -0.054174203, -0.0067777573, -0.00023180767, 0.026488887, -0.0047288765, -0.008201505, -0.025053175, 0.0096611455, 0.01477587, -0.0040110205, -0.022337288, -0.024012284, -0.046828143, 0.039601725, -0.050824206, 0.028977456, 0.004689993, 0.002262742, -0.012849623, 0.045177072, 0.011742928, 0.00955945, -0.010127752, -0.03005424, 0.008680075, -0.011784803, -0.019609435, -0.027781028, -0.049197067, -0.031418167, 0.05489206, 0.058720622, -0.008572398, 0.01272998, -0.037687443, -0.04914921, 0.055753484, 0.04328672, -0.016020155, 0.0555142, 0.02921674, -0.017934436, -0.008010077, 0.04426779, -0.059629906, 0.014261407, 0.015900511, 0.013914443, -0.033811018, -0.0548442, 0.01045677, -0.020351218, 0.017623365, -0.008638201, 0.048239924, -0.0011298755, -0.010414895, 0.0055364645, -0.026584601, -0.0048215995, 0.0010139716, 0.025412103, -0.015278369, 0.004304145, 0.00504593, 0.013244444, -0.021212645, -0.023091035, -1.397389e-05, -0.011384, 0.013029087, -0.0284271, 0.051015634, -0.012119803, -0.0053689647, -0.02279193, -0.025412103, -0.014883548, 0.04311922, -0.0275896, 0.012538552, 0.027541744, 0.012406945, -0.0036999497, -0.011868553, -0.002615688, 0.0047169123, 0.008686058, -0.029743169, -0.03103531, 0.044698503, -0.002545398, 0.014811763, -0.019286398, 0.049914923, 0.012149713, 0.01567319, 0.08202702, 0.00636499, -0.003179504, -0.023103, -0.020817826, 0.033811018, -0.00094891596, -0.06900989, -0.03247102, -0.016833724, -0.019753005, 0.025268532, -0.026799958, 0.013316229, 0.0005716676, 0.019154793, 0.008255345, 0.025818888, 0.0017841713, 0.0009362039, 0.027828885, 0.022409072, 0.014847656, 0.044339575, -0.0046241893, 0.023773, -0.018712115, 0.0048485193, 0.0045763324, 0.027637457, -0.039147083, -0.025507817, 0.012682123, -0.039099224, -0.017108902, 0.018329257, -0.015972298, -0.06963204, 0.061783478, 0.03349995, 0.026153889, -0.024622463, 0.0099303415, -0.011970249, 0.036634587, 0.023103, -0.029791025, -0.048790284, -0.021021217, -0.008524541, -0.02018372, 0.03117888, -0.03328459, 0.0018230552, 0.050489206, -0.008847576, -0.03314102, 0.00824338, -0.018101936, -0.010061949, -0.015529619, -0.0024317373, 0.036706373, 0.019836755, 0.052451346, -0.02711103, 0.038572796, 0.027852815, 0.03247102, 0.009565432, 0.005141644, -0.016187653, -0.010743912, -0.02921674, 0.03383495, 0.0044866004, -0.011198554, -0.020482825, 0.009577396, 0.023210678, 0.017515687, 0.00020526195, -0.036467087, -0.056902055, -0.008973201, -0.042712435, 0.0044447253, -0.0096611455, -0.0052164206, 0.017180687, 0.032829948, 0.03543816, -0.05077635, 0.024036214, 0.00549459, -0.024227642, -0.036491014, -0.038118154, -0.046469215, -0.019753005, -0.034074232, -0.006945257, 0.044363502, 0.019956397, -0.0045763324, 0.0025603531, -0.013866586, 0.0143690845, -0.0011829669, -0.001442442, 0.01648676, -0.008883469, -0.06154419, -0.05891205, -0.04292779, 0.0012555002, -0.016773902, -0.0272546, -0.001586761, 0.0017183679, -0.021475859, 0.028929599, 0.012801765, 0.051972777, 0.024526747, -0.014560513, -0.0065564183, -0.018329257, -0.010307216, 0.022050144, 0.015601404, 0.0028160894, -0.027685314, -0.00022694719, 0.01834122, -0.0014917946, 0.04622993, 0.0039182976, -0.014452835, -0.031083167, 0.016127832, 0.038668513, -0.007393917, 0.039266724, -0.034528874, -0.035773158, -0.02220568, -0.007160614, -0.044459216, 0.030484952, 0.032016378, 0.018987292, 0.04685207, 0.009290254, 0.0280921, 0.04261672, 0.044531003, 0.013495693, -0.009290254, 0.023031214, 0.045559928, -0.0046810196, 0.014381049, -0.0029850847, -0.03251888, -0.0034756197, 0.005599277, -0.04328672, -0.005823607, 0.0006800938, 0.0044866004, -0.019920506, -0.008422844, -0.0008150657, -0.027063172, -0.024107998, 0.055274915, 0.046947785, 0.00094442937, 0.0016241493, 0.025268532, -0.017491758, 0.009266325, 0.023784963, 0.016091939, 0.014931406, 0.05680634, -0.009463735, 0.020052113, 0.002262742, -0.035773158, -0.019776933, -0.007902399, 0.028833885, -0.056662768, 0.024837818, -0.031777095, -0.030772096, 0.03627566, -0.030508881, 0.0020369166, -0.011126769, 0.04194672, -0.006717936, 0.011258376, 0.05321706, -0.03512709, 0.026560673, 0.013280337, 0.0073699886, -0.050489206, -0.011479714, 0.019525684, 0.001445433, -0.028522814, -0.0102892695, 0.051829204, 0.013734979, 0.005509545, 0.005078831, -0.043214932, -0.011234447, 0.0035503963, 0.013196587, 0.017144796, 0.010384984, -0.0055334736, 0.016666224, -0.025292462, -0.036826015, 0.021715146, -0.019968363, 0.011808732, -0.04362172, 0.04359779, -0.017862651, -0.024012284, -0.04357386, 0.017276403, -0.014081943, -0.010247394, 0.004061869, -0.0053420453, 0.059869193, 0.005500572, -0.0058834283, 0.0044716448, 0.025747104, 0.06235776, 0.00075337494, 0.028953526, 0.022696216, 0.034193877], [0.021995302, -0.0051148375, -0.03215898, 0.021935305, -0.023123266, 0.01703946, -0.041422687, 0.0087537225, -0.0027554126, 0.041182693, -0.054382276, 0.03400692, 0.009437701, -0.039382752, 0.0012502103, 0.059806105, -0.025391195, 0.014471541, -0.0094797, -0.032974955, -0.0063837976, -0.049918417, -0.032374974, -0.009065713, 0.046750516, -0.007037777, -0.016223485, 0.018575411, -0.015635503, 0.031942986, 0.007835751, 0.018023428, 0.03568687, 0.0005238584, 0.02145532, 0.006389797, -0.035590872, 0.051934354, 0.0010357172, -0.009089712, -0.02901508, -0.0073017683, 0.008771722, -0.014015555, 0.0061138063, -0.011951621, 0.0016364481, -0.025151202, -0.039454747, -0.014339545, -0.0042718644, -0.018167423, -0.030743025, -0.0008452232, -0.09052513, 0.007859751, 0.044614583, -0.044806577, 0.075501606, -0.003404892, -0.04795048, 0.043702614, 0.08150142, 0.0013702066, -0.023819245, -0.0014392043, 0.041974667, 0.034174915, 0.029087078, 0.04855046, -0.00786575, 0.025055205, 0.035374876, -0.007991746, -0.00093297043, -0.049390435, 0.04627053, 0.028223105, 0.0346789, -0.009593695, 0.03369493, -0.011423638, 0.020051364, 0.0027614124, 0.054718263, -0.03376693, 0.01982337, -0.11798026, -0.022367291, -0.0010889655, -0.016211485, 0.00883172, 0.006401797, 0.016127488, -0.02551119, 0.043462623, 0.007751754, 0.013799562, -0.03369493, -0.0035818864, -0.02649516, -0.027335133, -0.09167709, -0.045766547, 0.0042058667, 0.02867909, 0.062302023, 0.004598854, -0.004475858, -0.0064917943, 0.024743214, -0.043174632, -0.01544351, 0.030023048, 0.008699724, 0.015083522, -0.05102238, -0.023663249, -0.043990605, -0.019667376, -0.08164541, -0.04915044, 0.06465395, -0.013499572, 0.0065877913, 0.0377748, -0.022115298, 0.050014414, -4.626416e-05, -0.0119396215, -0.055342246, 0.024227232, 0.035758864, 0.043894608, 0.054766264, 0.052750327, 0.06892581, -0.03595086, -0.05294232, 0.035878863, -0.03904676, 0.022847276, -0.02740713, 0.031271007, -0.015707502, 0.012803594, -0.03878277, -0.015035523, -0.041542683, -0.025103204, -0.009665693, -0.03213498, -0.02997505, 0.012113616, 0.04276664, -0.012563601, 0.025967177, 0.039454747, 0.005390829, 0.028919082, -0.004766849, -0.06378998, -0.0050608395, 0.049630426, 0.006749786, -0.06710187, 0.018239422, -0.025919179, -0.037678804, 0.019607378, 0.037366815, -0.002431423, 0.043774612, -0.03597486, -0.016259484, 0.0005437328, 0.04977442, 0.02491121, -0.01858741, -0.09234907, -0.012635599, 0.078285515, 0.04036672, -0.006671788, 0.012233612, 0.039454747, 0.030455034, 0.026639154, 0.026759151, -0.040486716, -0.0037768802, 0.014087553, -0.015839498, -0.042118665, -0.0038158789, -0.01765144, 0.0024944209, -0.024383226, -0.0075717596, -0.003059903, -0.027167138, -0.030743025, 0.033838928, -0.026711153, -0.052894324, 0.016595474, 0.024863211, -0.007439764, 0.0070137777, 0.038926765, 0.038998764, 0.038110793, -0.01354757, -0.017411448, 0.015479509, 0.023963239, -0.06820583, -0.015587506, -0.0012517103, -0.047110505, 0.04919844, -0.012071617, 0.024155233, -0.022283293, 0.040150728, 0.017531443, 0.0025694184, 0.007475763, 0.06844583, 0.005759817, -0.035350878, -0.03695883, -0.022823276, 0.01762744, -0.087789215, -0.038110793, -0.024023239, -0.00725377, 0.03088702, 0.009527698, 0.012863592, 0.012263611, -0.006599791, -0.015635503, 0.031702995, 0.032398973, -0.015971493, 0.021311324, -0.004316863, 0.025151202, 0.017279452, 0.027239136, 0.029255072, 0.052126348, -0.025439193, 0.093453035, 0.032374974, -0.016355481, -0.00036955078, 0.039166756, -0.027503127, 0.02491121, -0.0059638107, 0.06806184, -0.024863211, 0.018719407, 0.0009832188, -0.06393397, -0.05582223, 0.0016469478, 0.042814642, -0.049966414, 0.024335228, 0.014795531, 0.05102238, 0.008189741, 0.06052608, 0.024203232, -0.006407797, 0.034918893, -0.007835751, 0.025199201, 0.046606522, -0.0059218123, 0.027047142, 0.018083427, -0.019487381, -0.055438243, -0.045166567, -0.0039448747, -0.008969716, 0.002084934, 0.041062698, 0.003809879, 0.050158408, -0.015383512, 0.019439382, 0.009263706, -0.028295102, 0.02297927, -0.01832342, -0.032974955, -0.06858982, -0.046366528, 0.005870814, 0.08572528, 0.030479033, 0.11404438, -0.01451954, 0.0010702161, 0.070461765, 0.00055010756, -0.027671123, -0.004037872, 0.0024044237, -0.029135076, -0.0032338975, 0.022067301, 0.062638015, -0.023123266, -0.011621632, -0.022859275, -0.12594801, 0.031726994, 0.051502366, 0.020255357, 0.005126837, 0.0019154393, -0.008153741, 0.033046953, -0.0441826, -0.025103204, 0.004004873, 0.047158506, -0.05836615, -0.101372786, 0.004844846, -0.060622077, 0.002269428, -0.0032398973, 0.004835847, -0.005924812, -0.049726423, -0.009905686, 0.006803784, -0.013199582, -0.027239136, 0.0052468334, 0.037606806, -0.0021029334, 0.001418955, 0.014147551, 0.03820679, 0.0077037555, -0.014147551, 0.0096056955, -0.002897908, -0.03964674, 0.0055168252, 0.010211676, 0.06508593, -0.049078442, 0.017831434, 0.066957876, -8.905968e-06, -0.05102238, -0.009599696, -0.011051649, -0.014795531, 0.0010792158, -0.040534716, 0.036478844, -0.018479414, 0.0030104045, 0.00883172, -0.016811466, 0.051358372, -0.01858741, -0.061102062, 0.039382752, 0.010265674, -0.051550366, -0.0019049395, 0.052798327, 0.02427523, 0.017759437, -0.055630237, -0.004283864, 0.015011524, 0.006053808, -0.043030635, -0.0039238757, -0.0048658457, -0.031966984, 0.029087078, 0.04691851, 0.008147742, 0.010787657, 0.013283579, 0.044374593, 0.0021029334, 0.025031205, -0.030647028, -0.07180572, 0.04192667, -0.037150823, 0.0051238374, -0.023423256, -0.00094946986, 0.0441106, -0.004037872, 0.022643281, -0.008873719, 0.0062878006, 0.02997505, -0.019199392, -0.028463097, 0.04442259, 0.023759246, 0.04797448, 0.054718263, -0.040582713, -0.020075364, 0.015335513, -0.06211003, 0.03688683, -0.021959303, -0.005459827, 0.014627536, -0.055726234, 0.021887306, 0.008843719, 0.003440891, -0.015311514, -0.0031019016, -0.049870417, -0.022463288, -0.073245674, -0.0030959018, 0.05414228, 0.007223771, -0.058750138, 0.017219454, 0.021203328, -0.025775183, -0.006845783, -0.04000673, -0.011057649, 0.025007207, -0.034222916, -0.0346549, -0.012143615, -0.05457427, -0.01546751, 0.016355481, -0.024719216, -0.012431606, 0.028415099, 0.02584718, -0.056638204, 0.0153595125, 0.008903718, 0.063214, -0.018119425, 0.03280696, 0.004889845, -0.033334944, 0.044134602, -9.702817e-05, 0.019871369, 0.0023099268, -0.011177645, -0.048694454, 0.010661662, -0.021623313, -0.03215898, -0.0059398115, -0.027911115, 0.023879243, 0.024491223, -0.033550937, -0.0064917943, 0.00850173, 0.058222152, 0.027983112, -0.03847078, 0.03628685, -0.001134714, 0.078045525, -0.004319863, -0.022835275, 0.011645631, -0.017531443, 0.00084597315, -0.0045598554, -0.022907274, -0.015899496, -0.009293705, 0.034870893, -0.012335609, 0.038302787, 0.04670252, 0.020003365, 0.035422876, 0.032662965, 0.0043588616, -0.019979367, -0.021047333, 0.03184699, -0.014411543, -0.0067377863, -0.036982827, -0.0378228, 0.03374293, -0.00756576, -0.01640348, -0.013787563, 0.030191042, 2.0964178e-05, 0.03285496, 0.014735533, -0.022739278, -0.03278296, -0.01795143, -0.0220433, 0.0021869307, -0.008471731, 0.012683597, 0.006335799, -0.029471066, -0.011387639, 0.0012607101, -0.010361671, 0.0003119901, -0.0072657694, 0.017387448, 0.014411543, 0.009569696, 0.014363544, 0.0037378815, -0.017795436, 0.0157675, 0.008105743, 4.5795423e-05, -0.0001229961, 0.039622743, 0.0663339, -0.017195454, -0.027287135, 0.04706251, -0.025319196, 0.051598363, 0.03129501, 0.024431225, 0.02144332, -0.018839402, -0.037654806, -0.05107038, -0.00034573904, -0.0536143, -0.007715755, -0.0054688267, 0.06815784, 0.013199582, -0.038974762, -0.045862544, 0.05107038, -0.016439479, -0.033670932, 0.0013919559, 0.0020129362, 0.064461954, 0.009815688, 0.010289674, -0.004442859, 0.09628495, -0.019475382, -0.036166854, -0.010583664, -0.010511667, -0.008651726, -0.017375449, -0.011249643, -0.038542777, 0.015587506, 0.036406845, -0.025103204, -0.018707406, -0.058798134, 0.00029549064, -0.009815688, 0.010103679, 0.014351545, -0.023927242, -0.016607473, -0.009515698, 0.034774896, 0.019463383, 0.027959114, 0.04288664, -0.01354757, -0.028943082, 0.013391575, 0.0004916094, -0.018983398, 0.0069117807, 0.020279357, -0.06806184, 0.042382658, 0.014267547, -0.08006146, -0.0053068316, 0.04029472, -0.010769659, 0.018575411, -0.012479604, -0.0076797563, 0.061582047, 0.013139583, 0.018095426, 0.06172604, 0.01922339, 0.043102633, -0.048430465, 0.03316695, 0.022211295, -0.036310848, 0.006029809, -0.007151773, -0.0067017875, -0.004451859, 0.0002553669, -0.04262265, -0.024491223, 0.025151202, -0.0013312078, 0.02299127, 0.024671217, -0.011447637, -0.011591632, 0.012059618, 0.036118854, 0.021899305, 0.04223866, -0.033958923, -0.050830387, 0.037606806, -0.014903528, 0.053758293, -0.020435352, -0.025103204, 0.014963525, -0.00082947366, 0.05735818, 0.034774896, -0.00694178, 0.006863782, -4.6240722e-05, -0.025487192, 0.011705629, -0.028583093, -0.027647123, 0.013679566, 0.057598174, 0.012203613, -0.013751564, -0.006014809, -0.02966306, -0.02301527, -0.0220553, 0.05961411, -0.029855054, -0.048070475, -0.032638963, -0.00535783, -0.004229866, -0.006467795, 0.03979074, -0.036742836, -0.031343006, -0.039574746, -0.028007112, -0.024491223, -0.013991556, -0.026111173, -0.018755404, -0.033478938, -0.0025349197, -0.049342435, -0.016415479, -0.005759817, -0.041014697, -0.0056578205, 0.032038983, 0.008807721, -0.011513635, -0.019463383, -0.017423447, 0.0072117713, 0.0024059238, -0.0009337204, -0.019691376, -0.021071332, -0.001385206, 0.06239802, 0.024671217, 0.007961747, -0.0006464795, -0.025151202, -0.06023809, 0.012827593, 0.009077712, 0.0009569696, 0.06906981, 0.04821447, 0.014951526, 0.004133869, -0.0034138917, -0.06911781, 0.06119806, 0.012959589, 0.0033658931, -0.019355386, -0.044662584, 0.05294232, -0.046774518, 0.012971588, -0.00062848005, 0.06686188, -0.012467604, 0.026303167, -0.038638774, -0.021731311, -0.0041458686, 0.026231168, -0.004451859, -0.009707692, -0.0034138917, 0.015695503, 0.01792743, 0.014195549, -0.024959208, -0.009755691, -0.03441491, 0.031319007, -0.025775183, 0.01729145, -0.0017129456, 0.0067257867, -0.0070077777, -0.021311324, -0.014783531, 0.002242429, -0.029231073, 0.020363353, 0.044350594, 0.00025817932, -0.034630902, -0.011921622, -0.048958447, -0.0038428782, 0.0111716455, -0.011609632, -0.026351165, 0.019751374, -0.0039358754, 0.002773412, -0.020699343, -0.0057478175, 0.009035713, 0.020291356, 0.076221585, -0.02049535, -0.02171931, -0.013775563, -0.014687534, 0.013715565, 0.0088917175, -0.025943177, -0.014807531, 0.008939716, 0.0016769468, 0.008765722, -0.018827403, 0.017891433, 0.01701546, -0.026087172, -0.0037678804, 0.013739564, -0.006647789, 0.019751374, 0.036670838, 0.040846705, 0.026303167, 0.052606333, -0.006215803, 0.023435257, -0.020015365, 0.03129501, -0.004634853, 0.010565665, -0.034486905, -0.0060448083, 0.024839211, 0.0011377139, 0.0056548207, -0.0071157743, -0.016847465, -0.029879052, 0.032686964, 0.0088917175, 0.02963906, -0.0251752, 0.026399164, -0.0005774817, -0.0008062244, 0.01640348, -0.015599505, -0.021623313, 0.0034078918, 0.0017474446, -0.05553424, 0.01826342, 0.014003556, 0.041662678, 0.048046477, 0.031247009, -0.010595664, -0.034486905, -0.0125996005, -0.03436691, -0.02740713, -0.029375069, 0.015227517, 0.014471541, 0.04343862, -0.0025379194, 0.048070475, 0.018239422, 0.030551031, 0.010559665, 0.015383512, -0.020843338, 0.006671788, -0.04850246, 0.020339355, -0.011807625, -0.021191329, -0.004574855, 0.049918417, 0.015479509, 0.033670932, 0.0252232, -0.026615156, -0.017735437, -0.004151868, -0.056542207, -0.0060058096, 0.016295483, 0.0283431, -0.0072357706, 0.026327165, 0.04509457, -0.034510907, -0.010361671, -0.016295483, -0.0034648902, -0.06417397, -0.012419606, -0.026159171, -0.044278596, -0.03244697, -0.007721755, 0.048070475, 0.020171361, -0.06307, 0.009575697, -0.017459447, 0.01039767, -0.004346862, -0.012383607, 0.00568782, -0.0409907, -0.024047237, -0.0012584601, -0.011159646, 0.010337672, -0.0048028477, 0.007091775, 0.025967177, -0.028511096, -0.026063174, 0.03628685, -0.010289674, 0.0059218123, 0.0098936865, -0.011855624, 0.012005619, -0.03751081, 0.0066297897, 0.013655567, -0.009677693, 0.01826342, 0.0017129456, 0.017759437, -0.015203518, 0.009629695, 0.01856341, 0.02014736, -0.023255263, -0.037990794, 0.018527413, 0.04319863, -0.031511, -0.0022409288, 0.005381829, -0.059086125, -0.0037678804, -0.010373671, -0.03539888, 0.028535094, 0.04255065, 0.041830674, 0.036982827, -0.010019682, 0.024203232, 0.028919082, 0.052126348, 0.008441732, -0.036094856, 0.02613517, 0.00789575, 0.03398292, 0.016883465, 0.014099553, -0.039550744, 0.008153741, 0.021587316, 0.002171931, -0.023735248, 0.031151012, 0.094748996, -0.007793753, -0.009263706, 0.03374293, -0.0567342, -0.010157678, 0.028775087, 0.03628685, -0.004748849, -0.023231262, 0.0283671, -0.024671217, -0.020171361, -0.016643472, 0.0035218883, 0.03088702, 0.028199106, -0.019127393, -0.012047618, 0.014111552, -0.031415004, 0.012659598, 1.6792435e-05, 0.06978979, -0.01198762, 0.036694836, -0.046726517, 0.011015651, 0.029519064, -0.04475858, -0.016751468, -0.01387156, 0.030383036, 0.031103013, 0.008009746, -0.011099648, -0.0035578872, -0.049918417, 0.012995588, 0.0023459257, -0.051838357, 0.0151675185, 0.028607093, -0.018179424, -0.013631567, -0.055342246, 0.03436691, 0.0036838832, -0.015779499, 0.032278977, -0.038614776, -0.0019604377, 0.0018509413, -0.01544351, -0.004142869, 0.02620717, -0.0075177616, 0.00252442, -0.040582713, 0.030407036, -0.020963335, -0.054958258, 0.011819625, -0.06532593, 0.0019649377, -0.019103395, -0.032230977, -0.04540656, 0.001766944, 0.018719407, 0.015395512, 0.008141742, -0.006239802, -0.0032278977, 0.01610349, 0.04043872, 0.0035098887, -0.006809784, 0.07545361, 0.007337767, -0.011243643, -0.0057238187, -0.01232361], [-0.018155338, 0.005995115, -0.026201712, 0.06174175, 0.031188197, -0.013112189, -0.0022864167, -0.026768358, 0.005581463, -0.03712665, -0.016512066, -0.033318788, -0.017815351, 0.0021036733, -0.027878985, 0.04682763, -0.05947517, -0.009814309, -0.008890676, -0.017668024, 0.00055495894, -0.06441632, -0.036537334, 0.023935128, 0.030870875, 0.006743088, 0.0061027776, -0.001964845, -0.012364216, 0.021192562, 0.03372677, -0.00023568934, 0.043473084, -0.008108704, 0.044243723, -0.020399258, -0.013225518, -0.0035840361, -0.05770723, 0.03989188, -0.010210961, 0.025045754, -0.0072247367, 0.011604911, 0.011412251, -0.0022665842, -0.009542319, 0.014234148, 0.02130589, 0.007513726, -0.0007819715, -0.053536717, -0.005836454, -0.0122622205, -0.017611358, 0.047779594, 0.054352686, -0.14016557, 0.039755885, -0.0071340734, -0.024773763, 0.017214706, 0.027765656, -0.034542743, -0.024161786, -0.011854235, -0.03438408, 0.03263881, 0.011808903, 0.00060241553, -0.022461848, 0.004419839, 0.022371186, 0.007253069, 0.0058024554, -0.08898609, 0.06622959, -0.0047343276, -0.017792685, -0.032253493, 0.018280001, -0.019617286, -0.004408506, 0.004419839, 0.010012635, -0.02572573, -0.009440322, -0.10235894, -0.011854235, -0.015458103, 0.013554173, 0.0018543492, 0.021974534, 0.0075930567, -0.03170951, -0.020342592, 0.0070377435, 0.0056211287, 0.0077970494, 0.00019673242, -0.015684763, -0.02812831, -0.051814113, -0.052947406, -0.01501612, 0.043745074, 0.048550233, -0.04152382, -0.03236682, 0.082095675, 0.01586609, -0.029760249, -0.020999901, -0.002528658, 0.010171296, 0.016092747, -0.0420678, -0.04746227, -0.036492005, 0.029828247, -0.098732404, -0.029170938, 0.06341902, 0.0164894, -0.011423584, 0.01088527, 0.0038220275, 0.03254815, -0.027176343, -0.0058987853, 0.034270752, 0.031074869, 0.06876816, 0.02774299, 0.019583287, -0.0040685185, 0.006884749, -0.03182284, -0.04655564, -0.03270681, -0.020195264, -0.014585469, -0.019617286, 0.028989611, -0.02735767, 0.0029890577, -0.043971732, -0.0012097893, -0.051859446, -0.03705865, 0.017532028, -0.0022665842, -0.01703338, 0.016988048, 0.056165956, -0.020172598, 0.011332921, 0.04168248, -0.0320495, 0.024048457, 0.01978728, -0.059973817, 0.008040708, 0.013644836, -0.011616244, -0.08812479, 0.059067182, -0.007836714, -0.03143752, 0.012296218, 0.0146874655, -0.052403424, -0.0070887418, -0.009440322, 0.010154297, 0.022031197, 0.046079654, 0.0031562184, -0.012058227, -0.061016444, -0.01307819, 0.039529227, 0.06904015, -0.03869059, 0.007485394, 0.01528811, -0.011729573, 0.009400657, 0.020807242, -0.033613443, -0.021249225, -0.021781873, -0.0014201566, -0.029601589, 0.023085158, -0.017407365, -0.051088806, -0.045513008, 0.015820757, -0.00904367, -0.012024228, -0.022745172, -0.013508841, 0.007570391, -0.014109486, 0.017226039, 0.050318167, 0.01482346, -0.0033432115, -0.0013677418, 0.029420262, 0.016421402, 0.0035528706, -0.014109486, -0.025771061, 0.002093757, -0.048686225, 0.002904061, -0.027108345, -0.057299245, 0.07819715, -0.031210864, 0.031097533, -0.016852053, -0.007542059, 0.01850666, 0.013962158, -0.02056925, -0.017974012, -0.012760868, 0.027992314, -0.05743524, -0.011797571, 0.0081540365, -0.048867553, -0.0030457224, -0.028264305, 0.021283224, 0.046034325, -0.020886572, 0.031845506, 0.05195011, -0.04791559, -0.05389937, 0.002222669, 0.057072587, -0.02332315, -0.014188817, -0.0061027776, -0.01956062, 0.029964242, -0.028060311, 0.047008954, 0.02386713, -0.0058931187, 0.019197967, 0.0065220958, -0.029850913, -0.017350702, 0.020659914, -0.0339081, 0.044561043, -0.032389488, 0.081189044, -0.046782296, -0.011876901, 0.028649623, -0.03282014, -0.06690957, -0.019390628, 0.035653368, -0.053536717, -0.015299443, 0.0069357473, 0.045785, -0.0329108, 0.047598265, 0.013984824, 0.008953007, 0.040571857, 0.025453739, 0.057480574, 0.01571876, 0.0023487478, 0.074706614, 0.034293417, 0.012273553, -0.025657732, -0.051315464, 0.020897906, 0.011888234, -0.035200052, 0.018687986, 0.03379477, 0.03612935, -0.009632982, 0.018483993, 0.055440646, -0.043473084, 0.03374944, 0.022552513, -0.0009477155, -0.035653368, -0.027063014, -0.02071658, 0.019775946, -0.028400298, 0.12012896, 0.008817012, -0.027833654, 0.06505097, -0.014857459, -0.013236851, -0.04621565, 0.02239385, -0.0077007194, 0.01327085, 0.011553912, 0.039257236, -0.0114802485, -0.038939916, -0.021487217, -0.07792516, 0.016682059, 0.03526805, -0.04175048, -0.024524441, -0.047552936, -0.054579344, -0.0065277624, -0.061288435, -0.004343342, 0.019979939, 0.009882307, -0.004717328, -0.09170599, -0.025136419, -0.07579457, 0.047824923, -0.014868792, -0.026201712, 0.028740287, -0.02599772, -0.011247924, -0.003187384, -0.0004235679, -0.021521216, -0.033114795, 0.026020385, -0.04016387, 0.0014010323, 0.082412995, 0.050816815, 0.029238936, 0.00095834007, -0.029170938, 0.014993454, -0.057480574, 0.0015653596, -8.574948e-05, 0.058432538, -0.04900355, 0.047326278, 0.039370567, -0.024909759, -0.0878528, -0.021997198, -0.022371186, -0.059339173, 0.05553131, -0.038395934, -0.005357638, 0.016194744, -0.04100251, -0.020852573, -0.021906536, 0.016546063, -0.015446771, -0.08862344, 0.012318885, -0.04437972, 0.014143485, -0.026383039, 0.0074173966, -0.012284886, 0.037897285, -0.037579965, 0.030893542, 0.032842804, -0.0060007814, 0.0048561567, 0.06278438, -0.0065674274, -0.035494708, -0.0016503566, 0.039325234, -0.0429971, 0.013996157, -0.00076072227, 0.005082815, 0.01699938, -0.028468296, 0.0027255674, -0.019447291, 0.05988315, -0.00065837184, -0.0033573776, -0.02556707, -0.0031080535, 0.016908718, -0.0073267333, 0.042974435, -0.04462904, 0.0082277, -0.0027793988, 0.028082978, -0.027289672, 0.024705768, 0.012760868, -0.005776956, 0.00040267283, -0.063917674, -0.010142964, 0.038441267, -0.04900355, 0.05716325, -0.07416263, 0.033704106, 0.00933266, -0.04431172, -0.016784055, 0.047552936, 0.017781353, 0.008556355, -0.0219632, -0.060744453, -0.0448557, -0.06831484, 0.03705865, 0.006085778, 0.025793727, -0.00091867486, 0.029533591, 0.01342951, -0.026451036, 0.001453447, -0.059203178, 0.02615638, 0.031029537, 0.022654507, 0.004654997, -0.035064057, -0.050454162, -0.025635066, 0.08105305, -0.015492102, 0.03805595, -0.05068082, -0.0050346497, -0.05335539, 0.00896434, 0.037919953, 0.048459567, -0.030938873, 0.017101377, -0.006352102, -0.0018401829, 0.041229166, -0.0012537043, 0.006607093, 0.00028367716, -0.001114876, -0.086674176, -0.0020852573, -0.019175302, -0.043291755, -0.04621565, -0.016262742, 0.020059269, -0.03558537, 0.02708568, -0.050544824, -0.0083126975, 0.028377634, 0.036220014, -0.03601602, 0.0090153385, -0.0052896407, 0.050816815, 4.8740414e-05, -0.010074967, 0.030054905, 0.032344155, -0.035789363, 0.009814309, 0.009649982, -0.058568534, -0.060608458, 0.027946983, -0.0030825543, 0.023413815, 0.0015497769, 0.02114723, 0.033114795, 0.038327936, 0.011043931, -0.044243723, -0.009921972, -0.022597844, -0.04233979, -0.0070320773, -0.022541178, -0.027380336, 0.049139544, -0.023663139, -0.0029125605, -0.015548767, 0.034701403, 0.042906437, 0.024909759, -0.015412772, -0.025000423, -0.045694336, -0.044334386, -0.025204415, 0.017996678, 0.029374931, -0.0074627283, -0.013010193, -0.02611105, -0.03624268, -0.013508841, -0.015741426, 0.008669685, -0.007768717, -0.031505518, 0.028309636, 0.025680399, -0.03973322, 0.05281141, -0.011412251, 0.08059973, 0.0021943368, 0.011060931, -0.017826684, 0.012658873, 0.021249225, 0.0292616, 0.0053264727, 0.00888501, -0.050227504, 0.016580062, -0.01199023, 0.023085158, 0.0017240206, -0.0429971, 0.011548246, -0.029420262, 0.024841761, -0.013338847, 0.027403003, 0.008171036, 0.030440224, 0.07366399, -0.027380336, -0.02343648, 0.034905396, 0.04435705, -0.017328035, 0.012001563, 0.004456671, 0.03862259, 0.004309343, -0.0075987233, -0.0059271175, 0.05127013, 0.012114892, -0.075885236, 0.0058421204, -0.041115835, -0.015197447, -0.022960497, -0.0010674194, -0.02409379, 0.004346175, -0.010273293, -0.00906067, -0.0347694, -0.031029537, 0.018619988, -0.028060311, 0.01482346, 0.018495327, -0.01455147, -0.003190217, 0.025385741, 0.011661575, 0.0020328427, -0.017634025, -0.025521737, 0.023300484, -0.0049638194, 0.0052131433, -0.012749536, -0.054896668, -0.006352102, 0.02774299, -0.054534014, -0.03372677, 0.012828866, -0.04360908, -0.029782915, 0.0105792815, -0.020047937, 0.0113215875, -0.022212524, 0.021407887, 0.06033647, -0.0025895725, 0.068813495, 0.025793727, -0.013440844, 0.034542743, -0.0070490767, 0.015163448, 0.0122622205, -0.010222294, 0.008431693, -0.015276777, -0.012341551, -0.022665842, -0.010975934, -0.012976194, -0.03499606, -0.019492622, 0.021181228, 0.018687986, 0.011661575, -0.044243723, 0.018608656, 0.027856318, 0.030870875, 0.000331665, 0.011695574, -0.030440224, -0.039687887, 0.03667333, 0.036106683, 0.058749862, 0.0050346497, 0.017441364, 0.039053243, -0.0017991011, 0.02762966, 0.01123659, -0.047824923, -0.0075987233, 0.019843943, -0.012171556, 0.015888754, -0.04431172, 0.00046783712, -0.018166672, 0.0138261635, -0.01730537, -0.03433875, -0.046963625, -0.0348374, -0.008063373, 0.039529227, 0.06056313, -0.050590158, -0.04156915, -0.03279747, -0.047507603, -0.0072190706, -0.015401439, 0.07457062, -0.032525484, -0.022019865, -0.03146019, -0.03275214, 0.008369362, -0.027901651, -0.019923273, -0.014143485, 0.018653987, -0.028377634, -0.024728432, 0.012953528, 0.004924154, -0.0448557, -0.013939492, 0.06591227, 0.0030485557, 0.014562803, 0.024592437, -0.030553553, -0.0028303969, -0.013792165, -0.019061973, -0.01327085, -0.016682059, -0.03329612, 0.00063924753, 0.0047314945, 0.00667509, 0.0048561567, -0.048958216, 0.0035755364, 0.02855896, 0.0063974336, 0.028241638, 0.038282607, 0.04655564, 0.017373368, 0.0056211287, 0.0070377435, -0.020580584, -0.018280001, -0.00832403, 0.011684241, 0.020523919, -0.036967985, 0.023799133, -0.06192308, 0.033092126, -0.010006969, 0.043722406, -0.0015710262, -0.01171824, -0.011383919, -0.012545543, 0.003042889, -0.03166418, -0.011684241, 0.00043242174, -0.012046895, 0.018517992, 0.037670627, 0.0007798466, -0.048459567, -0.011043931, -0.059928484, 0.014664799, -0.047598265, 0.03721731, -0.012477546, 0.017838016, 0.03130153, -0.011627576, -0.013565506, 0.023935128, -0.026995016, 0.025635066, 0.026473703, 0.030938873, 0.019424627, 0.015299443, -0.02226919, -0.0043263426, -0.0025824893, 0.0025045755, -0.011208259, 0.019277297, -0.0009795893, 0.038599927, -0.04039053, 0.027153678, 0.03170951, 0.009423324, 0.050590158, -0.023912461, 0.01509545, 0.016478067, -0.009995636, -0.015061451, -0.01109493, -0.028626958, 0.015537434, 0.0037398639, -0.0015356108, 0.00585912, -0.052766077, 0.033386786, -0.016863385, 0.030304229, -0.0142568145, 0.0009229247, -0.018019343, 0.021249225, 0.016682059, 0.031188197, -0.018574657, 0.027335005, -0.007876379, 0.051678117, -0.021441886, 0.0153901065, -0.019798612, -0.017702023, -0.01784935, 0.00091513334, 0.016013417, 0.018721985, -0.030508222, -0.0014959455, -0.012579542, -0.036220014, 0.011525581, 0.029216269, 0.008256033, 0.026519034, 0.036696, -0.0030853876, 0.025771061, 0.019605953, 0.009734979, 0.002770899, 0.017056046, 0.010856938, -0.022099195, 0.013282183, -0.015696095, 0.03418009, 0.049184874, 0.028513629, -0.018076008, -0.015152114, 0.011434916, -0.054262023, -0.04082118, -0.0034622073, 0.017781353, 0.019549288, 0.0048023253, -0.03628801, 0.03003224, 0.03395343, -0.00014538012, -0.02670036, 0.0007500977, -0.0047569936, -0.02719901, -0.010233628, 0.012976194, 0.0016248575, 0.013089524, 0.022586511, 0.039778553, 0.05371804, 0.024977757, 0.012624874, 0.0030853876, -0.03220816, -0.026179047, -0.043971732, 0.042589117, -0.017044712, 0.019175302, 0.004541668, 0.0067770863, -0.017101377, -0.00952532, -0.004717328, -0.005513466, -0.00923633, -0.056709934, -0.009553652, -0.088215455, -0.026723027, -0.0035840361, 0.02665503, 0.038418602, -0.0012947862, -0.044221055, 0.026496368, -0.010732275, 0.033205457, -0.012760868, -0.006216107, 0.014902791, -0.035472043, -0.045218352, 0.01520878, -0.035834696, 0.002991891, -0.019617286, -0.044175725, 0.017804017, 0.012443547, 0.007621389, -0.014324811, 0.038985245, 0.009281662, 0.018280001, 0.006414433, -0.0012699955, -0.008114371, -4.5508757e-05, 0.019379294, -0.023028495, 0.0038673591, -0.052856743, 0.052403424, 0.037670627, -0.009649982, -0.0002819064, -0.014324811, -0.048550233, -0.035517372, 0.02095457, 0.025136419, -0.043994397, 0.023141824, -0.029669587, -0.029760249, -0.0040090205, 0.031754844, -0.057208583, 0.007978376, 0.03728531, -0.025045754, 0.036763996, -0.016319405, 0.019288631, -0.00585912, -0.0024592439, 0.012352884, -0.041614484, 0.0016758556, 0.011066597, 0.041954473, -0.011117595, -0.015922753, -0.038735922, 0.0146874655, 0.016852053, -0.059520498, -0.016523398, 0.025453739, 0.09782577, 0.009593317, -0.017248705, -0.020161266, -0.02855896, -0.019957272, 0.0119109, 0.016172078, -0.023776468, -0.007576057, 0.02867229, -0.04986485, 0.017180707, -0.0069980784, -0.0037851955, 0.008108704, 0.043835737, -0.015877422, 0.018903311, 0.017826684, 0.0072927345, 0.007836714, 0.0024521607, 0.021521216, 0.018959977, 0.029578922, -0.014766796, -0.016738724, 0.022484515, -0.036990654, -0.0035443709, 0.00925333, 0.038758587, 0.012375549, 0.038010616, 0.022643175, -0.005380304, -0.020897906, 0.023255153, 0.01839333, -0.045490343, 0.019084638, -0.0031930504, -0.024615103, -0.03422542, -0.0060404465, 0.03880392, 0.017588694, -0.02281317, 0.018631322, -0.04687296, 0.02425245, 0.058387205, -0.004272511, 0.016194744, 0.015140782, 0.027901651, 0.0031165532, -0.016500732, 0.015934085, -0.028218972, 0.0045615006, 0.015299443, -0.06999212, 0.007814049, 0.01594542, 0.0018869312, -0.043745074, -0.04587566, 0.036718663, 0.026405705, 0.0037965283, -0.03837327, 0.0023501643, 0.035880025, 0.042271793, -0.010856938, -0.0055106324, 0.1244808, 0.02409379, -0.0074910605, -0.012658873, 0.00595545], [0.011615093, 0.03908013, -0.030739289, 0.015393074, 0.06555528, 0.038869265, -0.062837474, -0.0032918216, -0.021777567, 0.021695565, -0.014092745, 0.028654078, 0.023429336, -0.06358722, 0.04163393, 0.015615652, -0.0015551221, 0.02258588, -0.061244283, -0.0076262485, 0.008885575, -0.08776629, -0.048076995, -0.009635314, 0.0125932675, 0.0253974, -0.009430308, 0.037158925, -0.0065016407, 0.0056933286, 0.03596403, 0.03209819, 0.040977906, -0.0034792563, -0.004554077, -0.03355081, -0.001198557, -0.0026885162, -0.043859717, 0.042055655, 0.010010184, 0.021543274, -0.007386098, 0.0026943735, 0.050513647, -0.004132349, -0.012757273, -0.027295176, 0.0026592296, -0.044562597, -0.0022433589, -0.007017086, 0.03249649, -0.016775405, -0.025256824, 0.03315251, 0.049529616, -0.1351404, 0.030247271, -0.008065549, -0.0455232, 0.016447393, -0.0024234718, -0.047397546, -0.012358975, -0.0106603475, 0.015744513, -0.008446275, 0.017560286, 0.026193997, 0.007772682, 0.0010023363, -0.0009818355, 0.0053243167, 0.07370869, -0.038892698, 0.041329347, 0.024858525, -0.00024271327, -0.027951198, 0.025819128, -0.036081176, 0.0091374405, -0.006560214, 0.016025666, 0.0023107182, 0.020992685, -0.090530954, 0.016482538, -0.024507085, 0.010379195, 0.014022457, 0.015322785, 0.0120075345, -0.07689508, 0.01618967, 0.024928812, 0.0058895494, 0.016236529, -0.024507085, -0.030575283, -0.046718094, -0.021929858, -0.058995068, 0.0033211082, -0.010144902, -0.014549618, 0.027342035, -0.017033126, 0.016810548, 0.017009698, -0.042781968, 0.0044896463, 0.02928667, -0.030528424, -0.0015756228, -0.00088592176, -0.022644453, -0.025256824, 0.00049018563, -0.05534009, 0.01102936, 0.040767044, -0.016751975, -0.006314206, 0.011960676, 0.011538948, 0.053653177, -0.0044896463, -0.034651987, 0.009342448, -0.0029535606, -0.020699818, -0.0009357091, 0.07225607, 0.024389938, 0.026381431, -0.04191508, -0.044539165, 0.010543201, -0.03069243, 0.018298311, -0.019036336, 0.018192878, -0.0032244623, 0.015170495, 0.01059006, -0.038845837, -0.007895686, -0.0075559607, -0.01425675, -0.01777115, 0.007737538, -0.0005326513, 0.02893523, 0.016283387, 0.025373971, 0.058995068, 0.0074681006, -0.01480734, 0.046858672, -0.016248245, 0.009436165, 0.07258408, -0.025139676, -0.041727647, 0.049763907, 0.004650723, -0.022492161, 0.045288906, 0.005810475, -0.053653177, 0.017876582, -0.025983132, -0.01583823, -0.010900498, 0.029825544, 0.010256192, -0.022995893, -0.048405007, -0.006618787, 0.027107742, 0.0775511, -0.040345315, -0.004138206, 0.025491117, 0.00626149, -0.0013662231, 0.03387882, -0.037158925, -0.018638037, -0.031770177, 0.023909636, -0.031207874, 0.005854405, -0.009242873, 0.02306618, 0.004097205, -0.012276972, 0.025819128, -0.009365877, -0.07263094, -0.034675416, 0.013706161, -0.003719407, -0.0023341475, 0.051216528, 0.045921497, 0.047631837, 0.015357929, 0.034300547, -0.0042143515, -0.008416989, 0.006226346, 0.02680316, -0.0017938085, -0.060447685, -0.06841366, 0.021426126, -0.06138486, 0.049951345, -0.029005516, 0.021367554, 0.0013925812, -0.017009698, 0.01252298, -0.019844647, -0.018556034, -0.004946518, 0.045710634, 0.039642435, -0.02680316, 0.008528278, -0.00046529196, -0.022972463, -0.014584761, -0.00043637137, 0.022574164, 0.076379634, -0.01729085, 0.059885383, 0.026193997, -0.037791517, -0.013917025, 0.009412736, 0.0332228, 0.008885575, 0.025444258, -0.0021745353, -0.0128509905, 0.022984179, -0.024975672, 0.044492308, 0.036573194, -0.07005371, 0.044023722, 0.029778685, -0.024413368, 0.010578345, 0.0069877994, -0.027576327, 0.027552899, 0.039993875, 0.026850019, -0.015346215, -0.01340158, 0.044960894, -0.061197422, -0.02502253, -0.03355081, 0.03917385, -0.004967019, 0.060025956, 0.013448439, 0.03167646, -0.06068198, 0.04835815, 0.024202503, -0.034042824, 0.034956567, 0.0023590412, -0.009447879, -0.009805176, -0.011849387, 0.034956567, -0.014971346, -0.020395236, -0.00652507, -0.027880909, 0.007831255, -0.006946798, -0.032566775, 0.04826443, 0.009254588, 0.04831129, 0.011960676, 0.0120075345, -0.023136469, -0.06372779, -0.011134791, 0.03840068, -0.024858525, -0.012722129, -0.06035397, 0.03144217, 0.0058163325, 0.041727647, 0.06335292, 0.013659302, -0.04826443, 0.051403962, 0.03626861, -0.02502253, -0.02642829, -0.010426054, -0.03102044, 0.03797895, 0.043508276, 0.06344664, -0.025373971, -0.01678712, -0.010560773, -0.039572146, 0.011574091, 0.08720399, -0.023534767, -0.0007878114, -0.06555528, -0.007719966, -0.013507012, -0.07787911, -0.026756302, -0.024460226, 0.031535886, -0.03915042, -0.081815235, 0.0018348098, -0.017349422, 0.028396355, -0.024858525, 0.00026925432, -0.06199402, -0.01249955, -0.083689585, -0.0076438207, -0.012089537, 0.03448798, 0.0011861101, 0.018075733, -0.031770177, 0.0014277251, 0.06311863, 0.01809916, -0.028349496, 0.0049553043, 0.0045160046, -0.030809576, -0.05065422, -0.05857334, -0.0032332484, 0.020629529, -0.042594533, 0.0320279, 0.0020134584, 0.028208919, -0.11752155, -0.0042670676, 0.04407058, 0.05674585, 0.05426234, -0.0058456194, 0.0044047153, 0.050513647, -0.03167646, 0.00012858678, -0.015404788, 0.016412249, -0.018028874, -0.016107667, -0.0010111223, -0.022164151, 0.0016385892, -0.01711513, -0.0025947988, 0.013823308, -0.01041434, -0.032285623, -0.031043869, -0.011152363, 0.019422919, 0.015931947, -0.045499768, -0.016669972, -0.060494542, 0.037955523, 0.034769133, -0.049529616, 0.051169667, 0.007684822, 0.02326533, 0.0023165755, -0.014291895, -0.0138584515, -0.021906428, 0.025959704, -0.0046595093, -0.022140723, -0.0125932675, -0.011128934, 0.05355946, -0.025936274, 0.048451867, -0.0100687565, -0.03704178, 0.02926324, -0.015322785, -0.015076777, -0.012663555, -0.021273836, 0.010560773, 0.07642649, -0.03139531, -0.033738244, 0.010308907, -0.011222651, 0.05013878, -0.035870314, 0.028630648, -0.029146094, -0.036221754, -0.0521537, -0.012382404, 0.0320279, 0.034066252, -0.040603038, -0.080503196, -0.03987673, -0.006882367, -0.026147138, 0.02963811, -0.010379195, -0.05744873, -0.013085283, 0.026264286, -0.036432616, 0.03451141, -0.06996, -0.0099808965, 0.072021775, -0.0015829444, -0.011820099, -0.02341762, -0.021379268, -0.06166601, 0.06297805, -0.0058954065, 0.086969696, 0.021262122, 0.008838717, -0.024741378, 0.004141135, 0.018403742, 0.039970446, -0.033761673, 0.0059744804, -0.01671683, -0.016810548, 0.040134452, -0.016060809, 0.006197059, 0.0075559607, -0.042899113, -0.030739289, 0.016131097, -0.03950186, -0.014233321, -0.095732264, -0.039572146, 0.02431965, -0.014057601, -0.020793535, -0.03732293, 0.019657213, 0.0355423, -0.018813755, -0.023921352, -0.021554988, -0.007848827, 0.064243235, -0.03132502, -0.04660095, 0.025584834, -0.013741305, 0.018286597, 0.026193997, -0.030387849, 0.018813755, -0.0337851, -0.026404861, 0.02376906, -0.0035934744, 0.050560504, 0.034417693, 0.05716758, 0.0051661683, 0.0018392028, -0.07586419, -0.03868183, 0.00854585, -0.0050870944, -0.05402805, -0.021777567, -0.06358722, -0.0035583302, -0.0047239396, 0.026967164, -0.0053858184, 0.06527413, 0.06738277, 0.019680642, -0.01047877, 0.008264698, -0.03099701, -0.014772196, -0.0070815166, 0.0027602685, 0.0683668, -0.038142957, -0.04156364, -0.06466497, 0.0026987665, -0.038611546, -0.019633783, -0.03736979, 0.01749, 0.014795626, 0.021297267, 0.0046390085, 0.029919261, 0.043906573, -0.0095650265, 0.03277764, -0.010578345, -0.018028874, -0.003411897, 0.0073743835, 0.017700862, -0.00687651, -0.005435606, 0.041071624, -0.057683025, 0.03453484, 0.008352558, 0.06714848, 0.006735934, -0.018778613, -0.058011033, -0.026568865, -0.015814802, 0.041118484, 0.025209965, -0.034651987, 0.032683924, 0.064243235, -0.016646544, -0.06677361, 0.011433516, -0.025959704, 0.014479329, -0.02025466, -0.04613236, -0.019692356, -0.00023429336, -0.0015683011, 0.0065074977, 0.06199402, 0.0249991, -0.05843276, -0.009096439, -0.04901417, -0.033175938, -0.019422919, 0.0060037673, -0.024905384, -0.0049816626, 0.016951123, -0.025209965, -0.017384566, -0.015275926, -0.03453484, -0.043203693, 0.0044340016, 0.03172332, -0.013799879, 0.011743954, 0.027224887, 0.032473058, 0.0051310244, -0.0003060457, 0.04575749, 0.00085956376, -0.025959704, 0.021965003, 0.008182695, -0.025842557, -0.0076203914, 0.0066890754, -0.015346215, 0.023546482, 0.023991639, -0.07347439, 0.050185636, 0.0026650869, -0.014057601, -0.0055263946, -0.0578236, 0.010209333, 0.061197422, 0.038845837, 0.054449774, 0.010543201, 0.036948062, 0.030200412, -0.03736979, -0.010396767, -0.0060916273, 0.0002476554, -0.043906573, 0.023687057, -0.04266482, -0.0029740613, 0.00542682, 0.005520537, -0.019844647, -0.019668927, 0.033035364, 0.0066012153, 0.06686732, 0.0033211082, -0.0069585126, 0.014678478, 0.0027500181, 0.0017088772, 0.03139531, -0.019821217, -0.058339044, 0.03811953, -0.023651915, 0.04615579, -0.03879898, -0.03144217, -0.01390531, 0.015990522, 0.051872548, -0.013261003, -0.0019622068, -0.005107595, 0.00077316805, 0.0016063738, 0.016377106, -0.063024916, -0.028794654, 0.010016041, 0.014303609, 0.0073802406, -0.039431572, -0.021554988, -0.02680316, -0.017325994, 0.047491264, 0.04519519, -0.050513647, -0.028700937, -0.0065074977, -0.04439859, -0.008827002, -0.0020500668, 0.07145947, -0.010537344, -0.034370836, -0.061900303, -0.01551022, 0.050185636, 0.022949034, 0.010508057, -0.00016135124, -0.030387849, 0.03868183, -0.034019396, -0.0011831814, -0.006554357, -0.0025845487, -0.022445302, 0.01992665, 0.009213586, -0.00258162, 0.0060096243, -0.040368743, 0.033667956, -0.02043038, -0.017454855, -0.030481566, -0.0065895007, 0.008094835, 0.025280252, 0.009418593, 0.033691384, 0.0069350833, 0.004138206, -0.03237934, 0.030130126, 0.0073216674, 0.04795985, 0.053700037, 0.007005371, -0.009266302, -0.004946518, 0.017208846, -0.03558916, 0.018532604, -0.0053711752, -0.01638882, 0.0077433954, -0.009922324, 0.0022755743, -0.046624377, 0.009957467, 0.032004472, 0.027927767, -0.0071400898, 0.030411277, 0.008270555, 0.0075618178, -0.0043314984, -0.03804924, -0.016529396, 0.018755183, -0.002647515, 0.022351585, 0.058667056, -0.009453737, -0.029052377, -0.02677973, -0.02291389, -0.018720038, -0.014502758, 0.019973509, -0.063868366, 0.0125932675, 0.003842411, -0.03493314, 0.0024088286, 0.037299503, -0.015076777, 0.026311144, 0.0380961, 0.030059837, -0.03598746, -0.006981942, 0.022644453, 0.0082178395, 0.0009042259, 0.0012439513, -0.03598746, 0.038002383, 0.0061853444, -0.017900012, -0.024225933, -0.0081299795, 0.042477384, 0.014889343, 0.03167646, 0.02203529, 0.04261796, 0.0011495018, -0.005520537, -0.026404861, -0.01390531, -0.031348452, -0.016505966, -0.02093411, -0.013600729, 0.022644453, -0.047467835, 0.023979925, -0.010631061, 0.009166728, -0.0012827561, 0.002840807, -0.0026138353, 0.012124681, 0.008950006, 0.016412249, 0.029778685, 0.042125944, -0.027880909, 0.029755255, 0.00026101744, 0.0026899807, 0.014912772, 0.019715786, -0.0011209473, -0.009096439, 0.004009345, -0.06443067, -0.02574884, -0.003025313, 0.007386098, -0.0046155793, 0.00678865, 0.03130159, -0.04163393, 0.014010742, 0.024788236, -0.006829651, 0.038236674, 0.02853693, -0.013413294, -0.016658258, 0.040907618, 0.02058267, -0.04859244, 0.009278017, 0.006407923, 0.003034099, 0.050560504, -0.015486791, -0.0040767044, -0.009553311, -0.007427099, -0.04934218, -0.04191508, -0.0071342327, 0.04055618, 0.008288127, 0.03732293, -0.05398119, 0.0008427239, -0.0003481453, 0.017900012, -0.047280397, -0.014045887, 0.00573433, -0.0345817, -0.021929858, 0.018192878, -0.0030487422, -0.030856434, 0.0070756595, 0.025303682, 0.024389938, 0.034323975, 0.0059217643, 0.019130053, -0.024905384, 0.0051251673, -0.032121617, 0.0408139, -0.020746676, 0.011181651, 0.008856289, -0.016751975, 0.06026025, -0.055902395, 0.011474517, 0.017478283, -0.015475076, -0.046038643, 0.0056230403, -0.038892698, 0.0044457163, -0.013682731, 0.01618967, 0.073099524, -0.011802528, -0.014303609, 0.022667881, -0.00016885596, -0.0037486937, 0.017021412, 0.006741791, 0.024788236, -0.002691445, -0.018626321, -0.010490485, -0.011369085, 0.018766897, -0.009969182, 0.017232276, 0.010648633, -0.032004472, -0.020898968, 0.045499768, 0.00986375, 0.032285623, 0.05880763, -0.02467109, -0.013717876, -0.0062204883, 0.004117706, 0.0040415605, -0.03912699, 0.053418886, -0.01030305, 0.010818495, -0.009330733, 0.0016224815, 0.021847855, -0.011011788, 0.0005300887, -0.03762751, 0.03483942, 0.042524245, 0.0027016953, 0.06761706, -0.0376978, -0.05880763, 0.025561405, 0.03596403, -0.005494179, 0.040696755, 0.0007717037, 0.0023443978, 0.06489926, -0.03816639, 0.03209819, 0.0067300764, 0.0072045205, 0.032754213, -0.043930005, -0.0008961721, 0.037440076, 0.049107887, 0.02713117, -0.023077896, -0.044211157, 0.00077316805, 0.020734962, -0.04130592, -0.017173702, 0.017607145, 0.02050067, 0.003280107, 0.003965415, 0.026709443, -0.049201604, -0.030270701, 0.025537975, 0.018122591, -0.041704215, 0.02996612, 0.018310025, -0.018310025, 0.043203693, 0.007210378, -0.00068787066, -0.019985223, 0.021250406, 0.008516563, 0.013343006, 0.006765221, 0.0066539315, -0.021051258, 0.00031043869, 0.013799879, 0.015744513, 0.04123563, 0.0009620671, 0.008821145, 0.041399635, 0.0072045205, -0.009020294, -0.020992685, 0.014924486, 0.01234726, 0.018790327, -0.03774466, -0.00036553424, -0.0028715578, 0.035401724, 0.031278163, -0.07183434, -0.0062029166, 0.02928667, 0.008094835, -0.046975818, 0.015767943, 0.05009192, 0.00065162836, 0.032543346, 0.024460226, -0.036432616, -0.0046448656, 0.04088419, -0.0057372586, -0.0062673474, 0.020688104, -0.0053653177, -0.022070434, 0.0010799459, -0.022000145, 0.029778685, -0.0068413657, -0.0016708045, -0.044984322, 0.02203529, 0.028630648, 0.0032068903, -0.07010057, 0.0022140723, 0.016623113, -0.039689295, -0.015486791, 0.005406319, 0.014584761, -0.0063610645, 0.029520962, -0.03034099, -0.029848972, 0.096435145, 0.009793462, -0.024952242, -0.003745765, -0.024155645], [-0.004272699, 0.0005031205, -0.027722996, 0.01688095, 0.007332954, 0.01811671, -0.040290445, 0.043554716, -0.01613483, 0.019317497, -0.032176398, 0.010218337, 0.016099855, 0.012136097, 0.00066086935, 0.01712577, -0.049570303, 0.011611482, -0.032805935, -0.0320365, -0.026813664, -0.042318955, -0.06845645, 0.0011359375, 0.015062284, -0.024062349, 0.011011089, 0.0041969214, -0.025111578, 0.03178002, 0.019445734, 0.0055055446, 0.056891598, -0.025134895, -0.0056571, -0.014083003, 0.019748846, -0.011145158, -0.00173123, -0.00077089283, -0.04301844, 0.034228224, -0.01317367, -0.040570237, -0.014969019, -0.02157917, 0.0063711596, -0.024505356, -0.017172402, -0.052881207, 0.015260472, -0.009157449, -0.019515684, -0.006936578, -0.043554716, 0.010649688, 0.029541662, -0.07517152, 0.06090199, 0.0055113737, -0.009786987, -0.0019673067, 0.031989865, -0.025950963, -0.031080533, 0.013873156, 0.0150156515, 0.02459862, 0.008329723, 0.006190459, -0.012275995, 0.008137364, 0.009297347, -0.010935311, -0.011605653, -0.036886275, 0.08156017, 0.019608948, -0.011937909, -0.03765571, 0.0048381174, -0.02330457, 0.013068747, 0.009320662, 0.02900539, -0.041829314, 0.030497627, -0.12161745, -0.014817463, -0.0068608006, -0.026510552, 0.01775531, 0.024248878, 0.008481278, -0.015260472, -0.009180766, 0.041969214, 0.009588799, -0.0034304003, -0.010655517, -0.042458855, -0.0113142, -0.07102124, -0.06397973, -0.0021363494, 0.033715267, 0.023549391, -0.023514416, -0.025950963, -0.07531142, 0.057917513, -0.03702617, -0.01725401, 0.0140363695, -0.014234558, 0.043974407, -0.05334753, -0.057357922, -0.02275664, -0.011244251, -0.076010905, -0.068130024, 0.029541662, 0.021800674, -0.010661346, 0.00852791, -0.0016525377, 0.07904202, -0.014397771, 0.014595959, -0.030497627, 0.066637784, 0.0443941, 0.016146488, 0.09466389, 0.0020868024, 0.014537669, -0.034484703, -0.03844846, 4.615429e-05, -0.069902055, 0.0093264915, -0.042878546, 0.008889312, -0.046772357, -0.030241149, -0.025857698, -0.012777293, -0.03900805, -0.034531336, -0.022371922, -0.016099855, -0.029098654, -0.0025676996, 0.053254265, -0.026440604, 0.035324086, 0.032992464, -0.019270863, 0.023969084, 0.014875754, -0.03686296, 0.03728265, 0.01935247, 0.00056068244, -0.0797415, 0.038634993, -0.030684158, -0.049756832, 0.029145285, 0.04285523, -0.037562445, 0.0015636446, -0.018641325, -0.024085665, 0.032735985, 0.05745119, -0.012147755, -0.016822658, -0.09219237, -0.057637718, 0.056052215, 0.042318955, -0.027653048, 0.009862765, 0.025321424, 0.010183363, 0.025577903, 0.012660712, -0.0834721, -0.027000193, -0.030940635, 0.006219604, -0.048078064, -0.008551227, -0.050223157, -0.0011942281, -0.085523926, 0.027676364, -0.010777927, 0.001168726, -0.029098654, 0.0027484004, -0.0061613135, -0.015342079, 0.03574378, 0.012171072, -0.006400305, 0.0055113737, 0.009786987, 0.030241149, 0.018023444, 0.016531207, -0.00915162, -0.008073244, 0.0075952616, -0.031057216, 0.013092062, 0.005552177, 0.008388014, 0.071394295, -0.039404426, 0.0086852955, -0.013908131, -0.004637015, 0.016997531, 0.033715267, 0.050642848, 0.010731295, 0.022873221, -0.00519369, -0.037492495, -0.029728193, 0.03900805, -0.07437877, -0.016624471, -0.051155806, -0.006312869, 0.079135284, -0.020191854, 0.013814866, 0.010649688, -0.050316423, 0.0076010907, 0.052461516, 0.047705006, 0.014794148, -0.010789585, -0.028002791, 0.004348477, 0.010311603, 0.028818859, 0.036443267, 0.006715074, 0.019702213, 0.067057475, 0.03152354, -0.030311098, -0.030520944, 0.032106448, -0.013092062, 0.024505356, -0.049383774, 0.08748249, -0.039987333, -0.0451169, 0.052135088, -0.087016165, -0.050176524, -0.061927903, 0.045793075, -0.0013516126, 0.027583098, 0.020226829, 0.0478449, -0.0019833366, 0.034974344, 0.004328075, -0.002018311, 0.05101591, 0.007222202, 0.08491771, 0.029844774, 0.0002774267, -0.005001331, 0.047331944, -0.005674587, -0.07810937, -0.06453932, -0.006627638, -0.032619406, -0.02101958, 0.061228417, 0.0035032635, 0.04278528, -0.029331816, 0.0011854845, 0.047728322, -0.018408163, -0.0048672627, -0.0009377496, -0.013779892, -0.06052893, -0.053487428, -0.028772227, 0.054186918, -0.01929418, 0.09513021, -0.044300836, -0.029495029, 0.088928096, -0.0026318193, 0.008661979, -0.0005588609, -0.0010463158, -0.028026108, 0.028049424, 0.02219705, 0.069109306, -0.043438133, -0.010707978, -0.039241213, -0.09209911, 0.030637525, 0.0015111831, -0.008149022, -0.01304543, -0.03938111, -0.0056629293, 0.028166005, -0.063653305, -0.051482234, -0.01712577, -0.019492367, -0.028818859, -0.06850308, -0.0328992, -0.025671167, 0.026044227, -0.009880252, -0.026160808, -0.0015840463, -0.023327887, -0.033458788, -0.01489907, -0.02324628, -0.022301974, -0.0030952294, 0.06188127, -0.012310969, 0.0014390486, 0.03492771, 0.009967688, 0.038565043, 0.020145223, 0.01224102, -0.01910765, -0.029634926, 0.018093394, -0.011465755, 0.034391437, -0.041829314, -0.00013406832, 0.06780359, 0.0063012107, -0.054233547, -0.043997724, 0.01705582, -0.006237091, -0.011844644, -0.036816325, 0.027466517, -0.043508083, -0.00035976214, -0.038611677, -0.011419123, 0.062487494, -0.0217657, -0.06071546, 0.010987773, 0.018932778, -0.018081736, 0.014421088, 0.01570348, 0.037562445, -0.00661598, -0.034158275, 0.03560388, 0.027606415, -0.0058960915, 0.0026449347, 0.0032205542, 0.03418159, -0.0248551, 0.009676235, 0.050549585, -0.041223094, 0.026557185, -6.507596e-05, 0.016706077, 0.008702783, -0.013511755, -0.001224102, 0.027489834, 0.047658373, -0.050129894, -0.002475892, 0.005359818, -0.0054880576, 0.0425288, -0.052881207, 0.043298237, -0.0082714325, 0.0093264915, 0.00086707226, 0.030147884, 0.0007115093, 0.03469455, 0.0026653365, -0.0028489518, 0.021427615, -0.039171264, -0.008300577, 0.025950963, -0.054979667, 0.041199777, -0.05218172, 0.0056775017, 0.0056308694, -0.025181528, -0.03952101, 0.030264465, 0.021917256, -0.009909397, 0.0051324847, -0.05026979, -0.029751508, -0.03604689, -0.040173862, 0.045280118, 0.04036039, 0.017149087, 0.012660712, 0.024108982, -0.011902935, 0.018711274, -0.038425144, 0.038075402, -0.0030515115, -0.0052811257, -0.013103721, -0.047098782, -0.1047365, -0.00398999, 0.043135025, -0.02912197, 0.007770133, 0.025647853, 0.009717039, -0.08067415, 0.016776027, 0.02942508, 0.050969277, -0.01984211, 0.017020848, -0.03133701, -0.029168602, 0.044557314, 0.017790282, -0.0009763671, 0.01946905, 0.038868155, -0.011331688, 0.021812333, -0.0075486293, -0.024155613, -0.02183565, 0.014502695, 0.02590433, -0.0064411084, -0.019935375, -0.019200915, -0.00584363, 0.057404555, 0.040546924, -0.009239056, 0.017417222, 0.035557248, 0.06803676, 0.029401764, 0.0036956223, 0.031430278, -0.012579106, -0.0148291215, -0.0122293625, -0.04185263, -0.06710411, -0.034065012, 0.011611482, -0.011879618, 0.020238487, 0.038961418, 0.04068682, 0.0039171265, 0.015913326, 0.0027221697, -0.033132363, -0.053720593, 0.009472218, -0.042272322, -0.016659446, -0.03518419, -0.0133601995, 0.022057153, -0.011745551, -0.0145260105, -0.011028577, 0.034531336, 0.016414626, 0.0038355198, -0.012322627, -0.02201052, -0.018489769, -0.026207441, -0.028096056, -0.0018405248, -0.0015301275, 0.020728128, -0.036023572, -0.011961225, 0.0110227475, -0.009932714, 0.0051412284, 0.0074611935, -0.017358933, 0.004450485, 0.011908764, 0.044977006, -0.0101950215, -0.013266934, -0.03301578, 0.055865686, -0.005353989, -0.019014385, 0.0048585194, 0.020902999, 0.04891745, -0.02448204, 0.0104573285, 0.041526202, -0.04483711, 0.04854439, 0.019329153, 0.021287717, 0.007006527, -0.007117279, -0.03851841, -0.042622067, -0.032502823, -0.034228224, -0.014222899, -0.01002015, 0.06645125, 0.01298714, -0.022092126, -0.04803143, 0.029868089, 0.010801243, -0.0057882536, 0.013570045, 0.0217657, 0.052834574, -0.0037626564, -0.010399038, 0.02541469, 0.06146158, 0.013010456, -0.058570366, 0.02590433, -0.020075273, -0.010830388, -0.017510489, -0.002662422, -0.02721004, -0.0006080435, 0.0028518662, -0.016123172, -0.047751635, -0.036932908, 0.0019643924, 0.0029232723, 0.047075465, 0.0048060576, -0.013348541, -0.020145223, 0.008411329, 0.020576572, 0.026557185, -0.0061613135, 0.0020970034, 0.009064184, -0.033109047, 0.0077992785, -0.0066859284, -0.0337619, -0.004223152, 0.014432746, -0.047751635, 0.016612813, 0.030147884, -0.071534194, 0.029238552, 0.02942508, 0.0048585194, -0.014502695, 0.006983211, 0.00028926696, 0.057964146, 0.0010193564, 0.050316423, 0.02504163, 0.023316229, 0.047471844, -0.030987268, 0.0058727753, 0.017323958, -0.010900337, 0.014910729, -0.0017982642, -0.0020445418, -0.012147755, -0.0117397215, -0.014782489, -0.028609013, 0.025018314, 0.018443137, 0.0037422548, 0.033855166, -0.028119372, -0.017195718, 0.040919982, 0.038425144, 0.038495094, 0.07433214, -0.03091732, -0.022663375, 0.04334487, 0.008084903, 0.029378448, 0.011226764, -0.0067908517, 0.012625738, 0.015493634, 0.0478449, 0.024738519, -0.022150418, -0.0013071661, 0.025764434, -0.022127101, -0.0038442633, -0.025018314, -0.02343281, 0.0012117153, 0.0064585954, -0.00038362484, -0.01705582, -0.012602421, -0.014969019, -0.0057969973, 0.035347402, 0.082259655, -0.04716873, -0.048870817, -0.040220495, -0.010060953, -0.017300641, -0.012101123, 0.040663503, -0.010807072, -0.025694484, -0.011133499, -0.0038384341, -0.008393843, -0.004383451, -0.019690555, -0.00454375, -0.007991637, 0.00958297, -0.034671232, 0.030007986, -0.0006550403, -0.017848574, -0.014479378, 0.035650514, 0.0028402081, 0.012777293, 0.009233227, -0.0019425333, 0.033062413, -0.0055288607, -0.035394035, -0.054186918, -0.035837043, -0.024808468, 0.028212637, 0.027233355, -0.007828424, 0.0028096056, -0.067990124, -0.04451068, 0.04835786, 0.009839449, 0.004823545, 0.06612483, 0.045606542, 0.0037801436, -0.0014652793, 0.021241084, -0.070321746, 0.06621809, -0.0019833366, 0.007344612, -0.0097403545, -0.032432873, -0.0009800103, -0.053813856, 0.05218172, -0.048684288, 0.06328025, -0.016146488, -0.021858964, -0.01589001, -0.006237091, 0.0035644686, -0.017323958, 0.023689289, -0.002895584, 0.005799912, 0.027070142, -0.007467022, 0.006295382, -0.052461516, -0.03784224, -0.03728265, 0.026930245, -0.02942508, 0.04803143, -0.022278657, 0.0037684855, -0.023572708, -0.005601724, -0.007146424, 0.04896408, -0.033808533, 0.0010004119, 0.044044357, 0.016111514, -0.0011563392, -0.007140595, 0.010678832, -0.013010456, 0.005823228, -0.0011534247, -0.0030398534, 0.025927646, 0.0059514674, -0.013465122, -0.02560122, 0.013406832, 0.002497751, 0.015913326, 0.034881078, -0.012975481, -0.0069715525, 0.0052578095, -0.017230693, 0.0060272454, -0.02101958, -0.054933034, -0.035580564, 0.033528738, -0.0054997155, 0.019830452, -0.036256734, 0.03327226, 0.015435344, -0.00642945, 0.0008313693, 0.02150922, 0.005187861, 0.016706077, 0.011156816, 0.0012940507, 0.016892608, 0.055632524, -0.0064819115, 0.04371793, -0.029541662, 0.02255845, 0.0030136227, 0.004045366, -0.058104042, 0.009670406, 0.015773429, -0.038868155, -0.008673637, -0.032549456, -0.019142624, -0.031010585, 0.0045728954, 0.007717672, 0.010439841, -0.0025764434, -0.00013661853, 0.0024554904, 0.034298174, 0.012823926, -0.020704811, -0.024458725, -0.0153537365, -0.015726797, -0.051855292, 0.037865557, -0.028212637, 0.028282586, 0.036373317, -0.012380918, -0.022593426, -0.027233355, -0.03686296, -0.029868089, -0.031803336, -0.044417415, 0.023969084, 0.030637525, 0.010317432, -0.021928914, 0.06094862, 0.0051907753, 0.033109047, -0.018279923, -0.010125073, -0.011110183, 0.0005544891, -0.051109172, 0.01298714, -0.031313695, 0.018151684, 0.0021858965, 0.053067736, 0.03357537, 0.04203916, 0.0078575695, 0.011803841, -0.032502823, -0.013651652, -0.04026713, 0.0063595013, -0.021602485, 0.003666477, 0.031989865, 0.05311437, 0.026720399, -0.00939644, -0.00028635244, 0.00088674534, -0.020180196, -0.05101591, -0.036723062, -0.022243682, -0.0063536726, 0.0037043658, 0.01749883, 0.03159349, 0.01959729, -0.029774824, -0.0050159036, -0.02337452, 0.00097418117, 0.000119040276, -0.0023126784, 0.0046282713, -0.051575497, -0.031197114, 0.007344612, -0.054979667, -0.022989802, -0.020541597, -0.010095927, 0.007554458, 0.0071056206, -0.030311098, 0.0462594, 0.00023170502, 0.037935503, 0.031873286, -0.023782553, -0.0021334349, -0.035837043, 0.021928914, 0.026114177, -0.0020824308, 0.0011621683, -0.049616937, 0.021346008, 0.008382184, -0.021159478, 0.0426687, -0.028702278, -0.032782618, 0.0089884065, 0.01824495, 0.054746505, -0.044417415, 0.033412155, -0.018023444, -0.026160808, 0.0071988855, 0.01248584, -0.07512489, 0.026720399, -0.00016184742, -0.00958297, 0.034228224, 0.010160047, 0.040173862, 0.016216436, 0.0014667365, -0.012310969, -0.017638728, 0.018023444, 0.031500224, 0.017522147, -0.01298714, -0.0019425333, -0.013966422, -0.015202181, 0.01502731, -0.015726797, -0.0043193316, 0.041479573, 0.10035305, -0.0060738777, 0.0058086556, 0.028795542, -0.045303434, -0.014584301, 0.03728265, 0.014864096, 0.00587569, -0.014269532, 0.02646392, -0.014456062, -0.0013690998, 0.019037701, -0.00041094853, 0.004470887, 0.057171393, 0.0078575695, -0.018816197, 0.017277326, -0.011226764, -0.0032759302, 0.02268669, 0.03159349, -0.01607654, 0.043508083, -0.025438005, -0.008930116, 0.019958692, -0.027839577, 0.0056425272, 0.0027717168, 0.021649119, -0.0041590324, 0.022395238, 0.027839577, -0.00952468, -0.03054426, -0.015248814, 0.02071647, -0.035627197, -0.0059980997, -0.034787815, -0.034228224, -0.020203512, -0.005674587, 0.019632265, 0.02769968, -0.0026201613, 0.012159414, -0.018105052, 0.009938543, 0.04402104, -0.0052344934, 0.019329153, 0.01787189, 0.008166509, -0.009443073, -0.020937974, 0.0024598623, 0.0011235508, -0.031313695, 0.0031447764, -0.051901925, 0.017230693, 0.013196985, 0.018757906, -0.04271533, 0.00024099508, 0.020669837, 0.026883611, -0.032059815, 0.009641261, 0.0389381, 0.038495094, 0.023735922, -0.010160047, 0.028539063, 0.11518217, -0.02133435, -0.021485904, 0.0301712, 0.005286955], [-0.012324785, 0.00046105764, -0.022579486, 0.033576064, -0.013617093, -0.010194871, -0.0009482905, 0.038458116, -0.0037752134, 0.062222216, -0.032092303, -0.0024066237, -0.019324785, 0.0019489314, -0.0046696574, 0.0108589735, -0.028574357, 0.03082393, -0.035969228, -0.056717943, 0.012324785, -0.07007179, -0.06787008, 0.012324785, 0.0067367516, 0.004585897, 0.0019863246, 0.0066649565, -0.015687177, 0.02182564, 0.06968888, 0.03819487, 0.04575726, -0.030201707, 0.037117943, -0.035347003, 0.017601708, 0.024841024, -0.024075212, -0.017494015, -0.047576062, -0.02436239, -0.03082393, -0.054564096, 0.024242733, -0.0010896366, 0.0035867516, 0.017589742, -0.00652735, -0.00389188, 0.006051709, -0.03747692, 0.03525128, 0.014729913, -0.011349572, 0.01365299, 0.031661537, -0.113818794, 0.0377641, 0.0009886752, -0.016476922, 0.03941538, 0.024218801, -0.012599999, 0.02182564, -0.03790769, -0.01636923, 0.065429054, 0.041593157, 0.049825635, 0.021203417, 0.044369224, -0.0010679486, -0.012504272, -0.010470084, -0.032858115, 0.08959999, 0.03290598, -0.02271111, -0.0021358973, 0.038769227, -0.08505298, -0.016105982, -0.026899142, 0.012420512, -0.027999997, 0.023117946, -0.10903247, -0.0024903843, 0.007388888, 0.011762392, -0.0223641, 0.008555555, 0.018068375, -0.08443076, 0.03955897, 0.044105977, -0.01942051, -0.012187178, 0.0056777773, -0.036854696, 0.0040952987, -0.054133326, -0.047743585, 0.010661538, 0.033719655, 0.04547008, -0.018128203, 0.0035478629, -0.017290596, 0.0044363244, -0.013353845, -0.020258117, 0.023871792, -0.029579485, 0.017757263, -0.011846152, -0.05949401, -0.038577773, 0.02759316, -0.05944615, -0.048485465, 0.07165127, 0.02759316, -0.036088884, 0.03494017, -0.009470939, 0.027377775, -0.018654699, 0.012564101, -0.031685468, -0.0006644764, -0.0068923067, -0.011026494, 0.109415375, 0.0410188, -0.0059769223, -0.011373503, -0.050735038, 0.0049329055, -0.05815384, 0.040564097, 0.008597435, 0.031254698, 0.00689829, -0.013808546, -0.012719656, -0.017924784, -0.023955554, -0.024864955, -0.021167519, -0.009536752, 0.01254017, 0.020641023, 0.037285466, -0.06652991, 0.011840169, 0.019025639, 0.0067666657, 0.017829059, 0.03927179, -0.10319315, 0.02627692, 0.010392306, -0.032929912, -0.0587282, 0.029699143, 0.021981195, -0.039894015, 0.02359658, 0.023728203, -0.0429094, 0.032834183, -0.018487178, -0.04858119, 0.005028632, 0.02430256, 0.024039313, -0.00018369389, -0.050399996, -0.0354188, 0.02996239, 0.026588032, -0.041401707, -0.0022256407, 0.036064953, 0.019599998, -0.0045440164, 0.0044572647, -0.06428034, -0.008633332, -0.008202563, 0.016261537, -0.030177774, -0.029555552, -0.06317948, -0.03453333, -0.051405124, 0.006700854, 0.028406834, -0.0040952987, -0.07165127, -0.037596576, 0.035059825, -0.025319654, 0.020664955, 0.009159829, 0.0018547006, 0.037620507, -0.008800854, 0.009147862, -0.017446153, -0.0019220083, -0.01822393, -0.014155554, 0.022232477, -0.070646144, 0.018475212, 0.012288888, -0.061025634, 0.04901196, 0.007466666, 0.0030841876, -0.035179485, -0.04278974, 0.020700853, -0.0035777774, 0.03955897, -0.005378632, -0.011732478, -0.037261534, -0.02776068, 0.0074846144, 0.023441022, -0.03115897, -0.020772647, -0.021430766, -0.01571111, 0.05944615, 0.023692304, -0.0080948705, 0.007323076, -0.05360683, -0.03486837, 0.02524786, 0.06676922, 0.008986324, -0.007711965, 0.0007407585, 0.020258117, 0.03132649, 0.0023438032, 0.04204786, 0.021981195, -0.0024455125, 0.042406835, -0.012982905, -0.04972991, -0.027999997, 0.037620507, -0.01896581, 0.042741876, -0.046858113, 0.05992478, -0.028095724, -0.039319653, 0.009339315, -0.03898461, -0.080314524, -0.05906324, 0.0507829, -0.017458118, 0.015663246, 0.00982393, 0.031541876, -0.032810252, 0.048461534, 0.004038461, -0.04939487, 0.049155552, 0.012755554, 0.027258117, 0.014634186, 0.008172649, 0.023297433, 0.023058116, -0.018283758, -0.03941538, -0.039798286, 0.015806835, -0.02522393, -0.011846152, 0.034724783, 0.00038627133, 0.03412649, 0.008818802, 0.007861538, -0.019923074, -0.033145297, 0.024218801, -0.017733332, -0.029651279, -0.012611965, -0.03642393, -0.020844443, 0.027090596, 0.005387606, 0.08399999, -0.009423076, -0.03864957, 0.032858115, -0.015064956, -0.02430256, -0.055999994, -0.01188205, -0.02539145, 0.07959657, 0.06308375, 0.04530256, -0.008729059, -0.0035209397, -0.053463243, -0.05949401, 0.019863246, 0.05844102, -0.040947005, 0.008914529, -0.03202051, -0.07141196, 0.018235896, -0.055617087, 0.010787179, -0.007149572, -0.00899829, -0.040085465, -0.09534358, -0.029292304, -0.00792735, -0.003126068, -0.003410256, -0.021777775, 0.011618802, -0.009321366, -0.03142222, 0.04501538, -0.029052988, 0.00079797, 0.005363675, 0.040157262, -0.012348717, 0.0013147434, 0.084047854, 0.035753842, 0.0423829, 0.025176065, 0.01196581, -0.054372642, -0.054947004, -0.018343588, 0.009536752, 0.036543585, -0.052170936, 0.011905981, 0.05590427, -0.0027476493, -0.039343584, -0.0058542727, -0.006258119, 0.0072512813, 0.04061196, -0.0563829, 0.03850598, -0.004373504, -0.04118632, -0.03319316, -0.057435893, 0.041258115, 0.018582905, -0.05150085, 0.0068444437, -0.040875208, 0.0101051275, 0.030584613, 0.04499145, 0.012815383, -0.03455726, -0.030728202, -0.0059529906, 0.017290596, -0.05949401, 0.011828204, 0.034365807, -0.06451965, -0.023524784, 0.01845128, 0.017206836, -0.01919316, -0.0030692304, 0.018247861, -0.0065572644, 0.018702563, 0.020294014, -0.0059559825, 0.0064675207, 0.034629054, -0.0261094, -0.003787179, -0.028311107, -0.005597008, 0.06274871, 0.014813674, 0.028717946, 0.009339315, 0.021263245, 0.03458119, 0.053894013, -0.006144444, 0.036591448, -0.04690598, -0.012851281, 0.029794868, -0.020999998, 0.001295299, 0.040683758, -0.069401704, 0.027138459, -0.036112815, 0.06413674, -0.021801706, -0.023141878, -0.03348034, -0.0018756408, 0.022998288, 0.0010357905, -0.024051279, -0.052027345, -0.033121362, -0.036376063, -0.0046367515, 0.049873497, 0.009165811, 0.0043106833, -0.011247862, -0.02228034, -0.05178803, 0.0066230763, -0.0755282, 2.8816103e-05, 0.04176068, -0.009847863, -0.015064956, -0.0011487178, -0.09486495, -0.018188031, 0.058488883, -0.015543588, 0.025271792, 0.0019115383, 0.020066664, -0.07811281, -0.022567518, 0.022376066, 0.07705982, -0.0011719016, 0.061169226, 0.022603417, 0.003000427, 0.018558972, 0.012683759, 0.0077358964, -0.010601709, 0.025989741, -0.0031320509, 0.04530256, 0.0067547, 0.0017918801, -0.00638376, 0.008489743, 0.026755553, -0.035323072, -0.035203416, 0.006311965, 0.021694014, 0.035658117, 0.02716239, -0.029196577, 0.028741878, 0.032116234, 0.035969228, 0.0298188, 0.02162222, -0.006132478, 0.011804272, 0.0032965809, 0.018355554, -0.005564102, -0.030153843, -0.059111103, -0.007987179, 0.012408545, 0.030656407, 0.008968375, 0.035658117, 0.021813672, 0.026899142, -0.014179486, -0.012199144, -0.010320512, 0.03144615, -0.022495724, -0.01109829, -0.03855384, -0.03718974, 0.028550424, -0.026683757, -0.025295723, -0.010320512, 0.018188031, -0.0003728098, 0.027210254, -0.009949571, -0.032642733, -0.043914527, 0.007442734, 0.004977777, -0.008405982, 0.026396578, 0.015399998, 0.02730598, -0.049251277, -0.024099143, 0.016728204, -0.004274786, 0.02864615, 0.0073769223, -0.01674017, 0.022029057, 0.016919656, -0.018188031, 0.0026683758, 0.0038290594, 0.05858461, -0.039008543, 0.00045245723, -0.04767179, 0.0055940165, 0.036256406, 0.02053333, -0.014658118, 0.005522222, -0.046738457, 0.036543585, 0.013700853, 0.044488885, -0.011744443, -0.012659827, -0.0029720082, -0.0395829, 0.020186322, -0.031900853, -0.0029032049, 0.022148715, 0.06672136, 0.066912815, -0.02776068, -0.035347003, 0.01556752, 0.011762392, -2.972756e-05, -0.0075623924, 0.020641023, 0.02893333, 0.004897008, -0.017637605, -0.028741878, 0.068396576, 0.03056068, -0.022256408, 0.00114797, 0.014933332, -0.011666666, -0.0065572644, 0.0052978625, -0.046451278, 0.024182903, 0.009327349, -0.01890598, -0.046116233, -0.012384614, 0.01276752, 0.006904273, 0.018104272, -0.00044797003, 0.03214017, -0.013006836, 0.038793158, -0.0023752134, -0.010392306, -0.02996239, 0.034748714, -0.01291111, 0.0032158117, -0.0026444441, -0.026923073, -0.0049239313, -0.025678629, 0.06887521, -0.020461537, -0.0043316237, 0.043459825, -0.0634188, -0.0023811962, 0.03393504, -0.02393162, 0.01388034, -0.027282048, -0.027186321, 0.05489914, -0.010494016, 0.018008545, 0.018511109, -0.0063717943, 0.03424615, -0.036495723, 0.024625638, 0.0014613246, -0.0014052349, -0.013581195, -0.022029057, -0.026205126, -0.016094016, -0.040085465, 0.0008017093, -0.015029058, -0.015818803, 0.04075555, 0.018427348, 0.0429094, -0.03998974, 0.044488885, -0.036232475, 0.029866664, -0.014646152, 0.06317948, -0.013581195, -0.015148716, 0.04207179, 0.0082205115, 0.05092649, -0.0024141022, -0.011176067, -0.0011180554, 0.008561538, 0.049538456, -0.02019829, -0.0011629272, -0.022100853, 0.017541878, -0.043483756, 0.009895725, -0.015268374, -0.034078628, -0.0076641017, 0.025343588, 0.011391452, 0.0038829055, -0.021658117, -0.039223928, 0.009931623, 0.013042734, 0.07682051, -0.08064956, -0.028861536, -0.018463247, -0.027282048, -0.0068923067, -0.004454273, 0.05915897, -0.040947005, -0.020126494, -0.042263243, -0.056287173, -0.030153843, -0.027617091, -0.01636923, -0.001939957, -0.04104273, 0.013557264, -0.031230766, -0.019384613, 0.03144615, -0.009620512, -0.01379658, 0.07198632, 0.00043749996, 0.02230427, -0.0057286317, -0.045182902, -0.012994871, 0.032642733, -0.012659827, -0.023417091, -0.0006618589, 0.0054085464, 0.015663246, 0.049873497, -0.009123931, -0.003787179, -0.08648888, -0.0023692306, 0.013329913, 0.0031440167, 0.020940168, 0.02102393, 0.012576067, -0.021837605, -0.025104271, 0.0018427349, -0.06968888, 0.018176066, -0.041593157, -0.042670082, -0.006563247, -0.048222218, 0.0106076915, -0.057196576, 0.016656408, -0.0004296474, 0.048485465, -0.010673503, -0.0041102557, -0.035059825, 0.02125128, 0.0021104699, -0.01118205, -0.0024185895, -0.029603416, 0.011762392, 0.030943586, 0.010446153, 0.013593161, -0.034629054, -0.032953843, -0.025319654, 0.022758972, -0.023704272, 0.0072512813, -0.014119657, -0.045374352, -0.028454699, -0.012031622, -0.0018487178, 0.028813671, -0.04681025, 0.015112819, 0.019408545, 0.019863246, -0.027329912, 0.0011128203, -0.00036551812, -0.03395897, 0.022088887, -0.017553844, -0.007694016, 0.023369228, 0.025128203, 0.025271792, -0.076341875, 0.040372644, 0.04532649, 0.03218803, 0.043603413, -0.016692305, -0.0024873929, 0.02613333, -0.04116239, 0.005109401, -0.022148715, -0.044345293, 0.00041730766, -0.0028134612, -0.006652991, 0.01169658, -0.0108589735, 0.042430766, 0.025415381, 0.02110769, -0.026731621, -0.019229058, -0.02479316, 0.017230768, 0.00811282, 0.01528034, 0.017960683, 0.048892304, -0.0214547, 0.026731621, 0.0059320508, 0.006234187, -0.008968375, 0.034916237, -0.041210253, 0.019875212, 0.054516234, -0.03304957, -0.028550424, -0.06308375, -0.006359828, -0.034509398, 0.033432476, 0.0151008535, 0.01239658, 0.011349572, 0.0011883546, -0.026229057, 0.034006834, 0.03082393, 0.02730598, 0.022124784, 0.03319316, 0.0041072643, -0.05121367, 0.03824273, -0.025152134, 0.025104271, 0.057531618, 0.021861536, -0.020389741, -0.024015382, -0.003072222, 9.063167e-05, -0.037620507, -0.016464956, 0.017685467, 0.021143587, 0.04827008, -0.014598289, 0.041282047, 0.012731623, 0.027880339, -0.014227349, 0.0019444443, 0.0047893156, -0.006964102, -0.057531618, 0.0075982898, -0.019061536, -0.015244443, -0.026468374, 0.019145297, 0.064567514, 0.0009834401, 0.011397434, 0.009799999, -0.033863243, -0.020114528, -0.02953162, 0.02059316, -0.004361538, 0.006503418, 0.03175726, 0.008902563, 0.016153844, -0.050543584, 0.035035893, -0.03127863, 0.01982735, -0.044058114, -0.01742222, -0.028167518, -0.00011348823, -0.027210254, 0.008830768, 0.045374352, 0.02627692, -0.017087178, -0.027114527, -0.03383931, 0.012599999, -0.022124784, 0.00062110036, 0.03568205, -0.065429054, -0.041545294, 0.0042209397, -0.033599995, 0.010583759, 0.0026384613, -0.03465299, -0.023680339, -0.02059316, -0.00093482895, 0.02450598, -0.018092306, 0.03970256, 0.05801025, -0.009746153, -0.018499143, -0.0061683753, 0.009865811, 0.0223641, -0.0038440167, 0.010272648, -0.012564101, 0.017960683, -0.007652136, -0.0063478625, 0.019887177, -0.008561538, 0.0058183754, -0.052170936, 0.035490595, 0.027090596, -0.055234183, 0.023213673, -0.019013673, -0.024984613, -0.02250769, 0.027329912, -0.018929912, 0.018475212, 0.021059826, 0.00516923, 0.04824615, 0.007711965, 0.017398288, -0.0073051276, -0.006838461, 0.02716239, -0.03970256, 0.021921365, 0.020796578, 0.02019829, 0.020090597, -0.018427348, -0.025463246, -0.0027551278, 0.016991451, -0.026659826, 0.005387606, 0.029627347, 0.05150085, 0.0119598275, -0.03412649, 0.01859487, -0.0149452975, 0.0115829045, 0.014071793, 0.017147006, -0.02687521, 0.00056314096, 0.024577776, -0.009303418, 0.006772649, 0.01636923, 0.006760683, 0.0029256407, 0.06590769, 0.021598289, 0.014658118, 0.028741878, 0.0012526708, -0.0090042725, 0.00029858437, -0.009141879, -0.014251281, 0.02182564, -0.015950426, -0.02318974, 0.016871793, -0.020664955, 0.017290596, 0.00177094, 0.02790427, -0.023919655, 0.03644786, 0.03144615, 0.0029824784, -0.03707008, 0.0028598288, -0.005707692, -0.060020506, -0.021670083, 0.026683757, -0.00599188, -0.033408545, 0.02893333, 0.0298188, -0.016034186, -0.0060367514, 0.0293641, -0.04118632, -0.020617092, 0.0035329056, -0.025606835, 0.0069341874, 0.012970938, 0.005432478, -0.022112818, -0.048796576, -0.027976066, 0.0060576918, -0.01439487, 0.0040683756, -0.028885467, 0.054659825, 0.008699144, 0.022292305, -0.029747006, 0.009351281, -0.033264954, 0.01682393, -0.01808034, -0.028741878, 0.01639316, 0.033695724, 0.049155552, 0.004968803, 0.00764017, 0.10281025, -0.00811282, -0.016141878, -0.006503418, -0.0044123926], [0.0011353006, -0.00080800673, -0.012215074, 0.053956732, 0.05400349, 0.020303909, -0.01415546, -0.0025379886, -0.006411453, -0.037077717, 0.0035651652, -0.027469305, -0.03593219, 0.0021624772, 0.004155463, 0.03305668, -0.03457626, -0.00547925, -0.007907653, -0.04294563, 0.012472234, -0.06901225, -0.018012851, 0.019064868, 0.031490345, 0.013267091, -0.013769721, 0.016960835, -0.010940966, 0.028614834, 0.04007012, 0.0039099925, 0.045002908, 0.0059701907, 0.05105784, -0.023880763, -0.03343073, 0.05470483, -0.06517824, 0.043015763, -0.0067562805, 0.030742245, -0.027866734, 0.034856796, 0.005631208, -0.0032407937, 0.010175332, 0.011531264, 0.0007130331, -0.027188769, 0.000115886134, -0.047597878, 0.010315601, -0.033874914, -0.046639375, 0.04044417, 0.053722948, -0.13821152, 0.043600217, -0.012215074, -0.029526582, 0.042548202, 0.04109876, -0.052600797, -0.02667445, -0.025645811, 0.0175336, 0.014202216, 0.038153112, 0.010847454, -0.015710106, 0.0059497347, 0.019766212, 0.0037755684, 0.019380473, -0.046382215, 0.05984802, 0.022104025, 0.003991816, -0.04570425, 0.009006426, -0.027539441, -0.019018112, 0.0080479225, 0.016540028, -0.007878431, 0.01477498, -0.086452335, -0.013571006, -0.013419048, 0.009275274, 0.0226651, 0.029339558, -0.0022253061, -0.022174159, 0.006808881, 0.021613084, 0.018749263, 0.007638805, -0.016317938, -0.02627702, -0.047878414, -0.05886614, -0.052039724, -0.0041934527, 0.037007585, 0.046031542, -0.035254225, -0.028240785, 0.080280505, 0.0003966977, -0.034529503, -0.03742839, -0.012916419, 0.006925772, 0.0011338395, -0.013571006, -0.02114552, -0.032612495, 0.03394505, -0.07518408, -0.055546444, 0.045423713, -0.01776738, -0.008205725, 0.006995906, -0.015113963, 0.038129736, -0.040771462, 0.0065517216, 0.019298648, 0.022630032, 0.059801266, 0.057136156, 0.03541787, 0.008778489, 0.0071069524, -0.032098178, -0.039742827, -0.0018381057, -0.01615429, -0.005493861, -0.00093658647, 0.013419048, -0.030625354, 0.0024313258, -0.013126821, -0.025832837, -0.022980705, -0.01927527, 0.009894795, -0.009865572, -0.013968434, 0.030789, 0.061811782, -0.02090005, 0.009438921, 0.05947397, -0.015920509, 0.02580946, 0.018877842, -0.06947981, 0.021180589, 0.025739325, -0.0039392156, -0.08981878, 0.071209796, -0.034108695, -0.0016379304, 0.017720625, 0.0021668607, -0.046499107, 0.0006856368, -0.01765049, 0.007767385, 0.032776143, 0.03759204, 0.0061426046, -0.025902972, -0.024430148, -0.010566916, 0.048860297, 0.062045563, -0.036282863, -0.00078316743, 0.019696077, -0.028614834, 0.0056604305, 0.020175328, -0.056434814, -0.014295728, -0.0038749254, -0.01489187, -0.060315583, 0.022337805, -0.040257145, -0.0132437125, -0.0548451, -0.0024853877, 0.017545288, -0.007159553, -0.032612495, -0.00957919, 0.013033309, -0.013407359, 0.033267085, 0.033594377, 0.0064348313, 0.011899469, 0.010882521, 0.020677958, 0.062793665, -0.022641722, 0.00388077, -0.033360597, 0.009041493, -0.043834, 0.0024941545, -0.029152531, -0.037334878, 0.07752189, -0.025949728, 0.01563997, 0.0006118496, 0.0012047044, 0.00738749, 0.014342485, -0.041916993, -0.004812973, -0.0029631783, 0.000158259, -0.033407353, -0.0066160117, 0.0025949727, -0.07747513, -0.023506712, -0.031116296, -0.0073465784, 0.06966683, -0.029059019, 0.028497944, 0.05073055, -0.034646392, -0.026861474, 0.028638212, 0.057931013, -0.027071878, -0.052694313, -0.014447686, -0.029994145, 0.027025122, -0.0034482747, 0.07022791, 0.03630624, -0.011992983, 0.03434248, 0.02541203, -0.059053164, 0.0017796603, 0.006312096, -0.031981286, 0.0475745, -0.00484804, 0.0634015, -0.020561067, 0.008755111, 0.03242547, -0.045774385, -0.07181762, -0.036376376, 0.023249554, -0.052647557, 0.009900639, -0.005032143, 0.05059028, -0.03170075, 0.048626516, 0.023389822, 0.0073348894, 0.04872003, 0.03130332, 0.03642313, 0.0115078855, 0.00036784032, 0.05844533, 0.026253643, 0.014739913, -0.02978374, -0.030157791, 0.0190298, 0.013606073, -0.033968426, 0.046803024, 0.05423727, 0.04857976, -0.008369371, 0.03219169, 0.022828747, -0.03759204, 0.022337805, 0.02003506, -0.019333716, -0.027445927, -0.039929852, -0.021765042, 0.012565746, 0.02627702, 0.10323784, -0.01616598, -0.027819978, 0.04572763, -0.020198707, 0.02128579, -0.035978947, 0.016177667, -0.016469894, 0.043272924, 0.021449437, 0.03957918, -0.0248042, -0.030438328, -0.027118634, -0.103985935, 0.009210984, 0.049140837, -0.03191115, -0.006323785, -0.064991206, -0.053769704, -0.0127995275, -0.055639956, 0.012156629, 0.028194029, 0.020736404, -0.011741667, -0.07841026, -0.029012263, -0.083366424, 0.04467561, -0.04292225, -0.03406194, 0.033477485, -0.039392155, -0.010280534, -0.00550555, 0.020479245, -0.019731143, -0.011811801, 0.02866159, -0.038620677, 0.0014406774, 0.07583866, 0.04923435, 0.03682056, 0.013009931, -0.029877255, 0.017545288, -0.030742245, -0.02364698, 0.0046727043, 0.06994738, -0.045774385, 0.028848616, 0.0608299, -0.010707185, -0.09687898, 0.004593803, -0.030695489, -0.0460783, 0.046896536, -0.031981286, 0.018059608, 0.008410283, -0.064991206, -0.009725303, -0.035488006, 0.017510222, -0.009041493, -0.0555932, 0.007527759, -0.05297485, 0.009526589, -0.03179426, 0.019438917, 0.0015078896, 0.034202207, -0.062326103, 0.011689067, 0.027329037, 0.0040502613, 0.00021186433, 0.049514886, -0.01890122, -0.04093511, 0.008451195, 0.055078883, 0.006861482, 0.01915838, -0.002960256, 0.05283458, -0.013009931, -0.017019281, 0.014903559, -0.04222091, 0.06255988, 0.002673874, 0.02053769, -0.015312677, -0.0048831077, 0.040981866, -0.0046113366, 0.02966685, -0.05671535, 0.010093509, -0.019251892, 0.0026651071, -0.013033309, -0.0026563404, -0.008077145, 0.0008248098, 0.0046113366, -0.043904133, -0.03193453, 0.050870817, -0.02667445, 0.045610737, -0.063682035, 0.019216824, -0.004330799, -0.04769139, -0.02102863, 0.04895381, 0.015125652, -0.0057919323, 0.011104614, -0.07265924, -0.035230845, -0.024944467, -0.0053740484, 0.038363516, 0.014669779, -0.043132655, 0.020198707, 0.0026139675, -0.020385731, -0.021472815, -0.040257145, 0.028007003, 0.027188769, -0.016049089, -0.01690239, -0.025902972, -0.046943292, -0.04895381, 0.050122716, -0.008345993, 0.017323196, -0.021215655, -0.010824076, -0.069807105, 0.018947978, 0.007364112, 0.06704848, -0.019754522, 0.015791928, 0.014237283, 0.01415546, 0.07424895, -0.00063814997, 0.016797189, 0.009649324, 0.03106954, -0.110999376, -0.023401512, -0.0315371, -0.021250723, -0.04596141, -0.013909989, 0.013442426, -0.033103436, 0.0062068943, -0.050309744, -0.008345993, 0.027258903, 0.042805362, -0.009865572, -0.030952647, 0.018375212, 0.06405608, 0.006370541, -0.0006071009, 0.019883102, -0.002356808, -0.0037200453, 0.010526004, -0.0089246025, -0.050262984, -0.06045585, 0.017358264, 9.999631e-05, 0.03146697, 0.027071878, 0.021741664, 0.025739325, 0.034716528, -0.011414373, -0.035885435, -0.027142012, -0.0063530076, -0.03957918, -0.03354762, -0.016867323, -0.05311512, 0.021589706, -0.030648733, 0.026370535, -0.0038398583, 0.05171243, 0.027960246, 0.009187606, -0.016879013, -0.020923428, -0.030812379, -0.049888935, -0.011215659, 0.019567497, 0.019427229, -0.009491522, -0.0059351237, -0.035160713, -0.013769721, -0.0077849184, 0.0093337195, -0.0010067208, -0.009970774, -0.023459956, 0.01739333, 0.026954988, -0.054190513, 0.02803038, -0.0055230837, 0.08369371, -0.003375218, 0.00895967, -0.03127994, 0.045891274, 0.015078896, 0.013921678, -0.014424308, 0.0102045555, -0.05208648, 0.035324357, -0.0106662735, 0.030695489, 0.012074806, -0.043646973, 0.0014202215, -0.015675038, 0.038737565, -0.0010512854, 0.024266502, -0.001365429, 0.026393913, 0.061811782, -0.016341316, -0.039088238, 0.037101097, 0.023763873, -0.02364698, 0.0060081803, 0.008690821, 0.033968426, -0.005251313, -0.018749263, 0.0045675025, 0.065037966, 0.006598478, -0.05895965, 0.017089415, -0.021227345, -0.009602568, -0.006148449, -0.022969015, -0.041122135, 0.010093509, -0.011274105, 0.020841606, -0.05016947, -0.039859716, 0.025832837, -0.022174159, 0.0136762075, 0.015733484, -0.010730563, 0.0032963168, 0.023004083, 0.020631202, -0.009736992, -0.0021171821, -0.02552892, 0.018947978, 0.007375801, 0.020455867, -0.016621852, -0.040724706, 0.0023582692, 0.037615415, -0.063682035, -0.028848616, 0.017124481, -0.039883096, -0.007685561, -0.012320276, -0.011718289, 0.014973694, -0.019614253, 0.019099934, 0.060502607, 0.007855053, 0.05059028, 0.021367613, -0.008971359, 0.03642313, -0.02392752, 0.00888369, 0.010905899, -0.0008248098, 0.008077145, -0.011653999, -0.007375801, -0.006522499, -0.01803623, -0.0021274101, -0.030999403, -0.0040151943, 0.0093395645, 0.00062061637, 0.04444183, -0.047387477, -0.008720043, 0.049000565, 0.028755104, 0.015967265, 0.017451776, -0.039088238, -0.049140837, 0.010976033, 0.040116876, 0.047036804, -0.012109873, 0.021636462, 0.035604898, -0.010642895, 0.047644634, 0.007615427, -0.030227926, 0.0106312055, 0.027819978, -0.017510222, 0.020771472, -0.034880172, -0.0176388, -0.013465805, 0.010309757, -0.0119345365, -0.011279949, -0.04635884, -0.027352415, -0.017054347, 0.028731726, 0.05685562, -0.058492087, -0.04731734, -0.04229104, -0.0533489, -0.0080186995, -0.014938627, 0.06845117, -0.04032728, -0.006808881, -0.019859724, -0.043436572, -0.014237283, -0.024476904, -0.019707765, -0.013956745, -0.010070131, -0.011782579, -0.019590875, -0.021087077, -0.0065400326, -0.010356513, -0.034716528, 0.04023377, 0.020514311, 0.01251899, 0.024453526, -0.034365855, 0.015090585, -0.007340734, -0.021274101, -0.028778482, -0.021052008, -0.030204548, 0.0059468127, -0.0026329623, -0.000652396, -0.0012229686, -0.02992401, -0.014459375, 0.017194618, 0.009824661, 0.021449437, 0.044488586, 0.046241947, 0.021461125, 0.0054646386, -0.0031969596, -0.025435409, -0.012483923, -0.02917591, 0.0028959662, 0.013945056, -0.050637037, 0.026838096, -0.04469899, 0.016551718, -0.008386905, 0.04556398, -0.0030829913, -0.02002337, -0.011531264, -0.007860897, -0.002215078, -0.01427235, -0.027025122, -0.004085329, 0.0008028927, 0.030485086, 0.04467561, -0.012121562, -0.026510803, -0.01032729, -0.061531246, -0.0044272337, -0.016586786, 0.03177088, -0.016177667, 0.0009124777, 0.0037492681, -0.0065634106, 0.0040473393, 0.03906486, -0.011122147, 0.00022209226, 0.016879013, 0.02842781, 0.012659259, 0.024453526, -0.022700166, -0.01164231, -0.0046317927, 0.014225594, -0.02767971, 0.009292807, 0.025973106, 0.024500282, -0.014248972, 0.022045579, 0.041262403, -0.003857392, 0.035020445, -0.015125652, 0.023611914, 0.015242543, -0.0047486834, 0.0027498528, -0.002377264, -0.02454704, 0.006808881, -0.0019257737, -0.03104616, 0.0076446496, -0.027749844, 0.029292801, -0.01616598, 0.0049152523, -0.008153124, -0.016189357, -0.015803618, 0.038667433, 0.0051022777, 0.025786081, -0.027329037, 0.029199287, -0.02054938, 0.030718867, -0.01978959, 0.005631208, -0.0014596721, -0.013383981, -0.038270004, 0.0077849184, 0.01339567, -0.019766212, -0.045236688, 0.011221504, 0.0046610152, -0.04306252, 0.009018115, 0.04834598, 0.0093454085, 0.02289888, 0.03569841, -0.012869663, 0.03920513, 0.04107538, 0.0077440063, -0.018983044, 0.0012090878, 0.013769721, -0.028591456, 0.018293388, -0.021297479, 0.028848616, 0.054050244, 0.0054091155, -0.008515485, 0.00751607, -0.01076563, -0.054190513, -0.026323779, -0.013804788, 0.032448847, 0.01717124, 0.024874333, -0.05105784, 0.04018701, 0.029479826, -0.00844535, -0.033968426, -0.006452365, -0.008299237, -0.015733484, -0.020526001, 0.022255983, 0.009976618, 0.0057042646, 0.014716535, 0.0445821, 0.04785504, 0.030111035, 0.017475154, 0.016633542, -0.026253643, -0.02627702, -0.033874914, 0.039275263, -0.02091174, 0.021133833, -0.010268845, -0.011741667, 0.004506135, -0.017510222, 0.006545877, -0.019848036, -0.028825238, -0.06125071, -0.01427235, -0.07036818, -0.026954988, -0.01477498, 0.029760363, 0.018725885, 0.007025129, -0.03756866, 0.019731143, -0.011215659, 0.03630624, -0.004231442, -0.0066686124, 0.017381642, -0.045026284, -0.013056687, -0.005601985, -0.04067795, 0.0015488013, -0.01183518, -0.05344241, 0.038410272, -0.0018731729, -0.0337814, -0.0028638213, 0.05685562, 0.0051782564, -0.0065400326, -0.0047048493, -0.009988307, -0.008503796, 0.006084159, 0.011846869, -0.03759204, 0.0021653995, -0.05297485, 0.0097545255, 0.019812968, -0.015943887, 0.015441257, -0.028638212, -0.054517806, -0.021589706, 0.013804788, 0.043740485, -0.043109275, 0.019228514, -0.017206306, -0.0358153, -0.0119403815, 0.019602565, -0.051525407, 0.008123901, 0.03193453, -0.012928108, 0.039485667, -0.012483923, 0.040280525, 0.010759786, 0.007445935, 0.0008240792, -0.03127994, 0.01641145, 0.0029061942, 0.044628855, -0.009970774, 0.0015853296, -0.012741082, 0.02253652, -0.0038281693, -0.07579191, -0.01082992, 0.030952647, 0.09949733, -0.013208645, -0.003047924, 0.0076563386, -0.027632954, -0.014003501, 0.034038562, 0.016247801, -0.033243705, -0.016843945, 0.039883096, -0.04355346, 0.021449437, -0.008182347, -0.0047516054, 0.005140267, 0.04320279, -0.039275263, 0.00725891, 0.016879013, -0.025201628, 0.019824658, 0.0059672683, 0.023576846, 0.02392752, 0.010321446, -0.04119227, -0.00651081, 0.045774385, -0.021180589, -0.0035447094, -0.0035037976, 0.042735226, -0.0127878385, 0.030204548, 0.005809466, 0.0056049074, -0.03392167, 0.036142595, -0.0029456448, -0.04004674, -0.014646401, -0.028100517, -0.017708935, 0.0039742826, -0.011876091, 0.018305078, 0.023226175, 0.016598474, 0.0430859, -0.072051406, 0.020526001, 0.060783144, 0.0013632374, 0.020689648, 0.011414373, 0.010566916, 0.020923428, 0.00047377247, 0.016271181, -0.002970484, 0.0007605199, 0.0132437125, -0.060502607, -0.001183518, 0.025248384, -0.00607247, -0.03590881, -0.009655169, 0.034529503, 0.010870832, 0.0106312055, -0.02364698, 0.0066043227, 0.05016947, 0.04923435, -0.016236113, -0.033009924, 0.12343654, 0.009292807, -0.022443008, -0.0248042, -0.0012193157], [-0.015816497, -0.013118177, -0.012124375, 0.031994376, 0.0041137347, 0.01712952, -0.033873565, 0.008004617, -0.016214019, 0.07714307, -0.03435541, 0.009968128, -0.028838305, 0.009426055, 0.0062760054, 0.040739827, -0.0497262, 0.036427334, -0.017671593, -0.030765677, 0.012015961, -0.05767661, -0.05329184, 0.019285768, 0.023441663, -0.0072155995, -0.021008356, -0.00089818554, 0.0025251587, 0.019743519, 0.016768137, 0.024284888, 0.06369965, -0.023092328, 0.02541722, -0.043751348, 0.025369035, 0.019056892, -0.01980375, -0.025031745, -0.053243656, 0.005664667, -0.040474813, -0.057628427, -0.012588149, -0.007848019, -0.021682937, 0.009763344, -0.022598438, -0.010064497, -0.011690716, -0.06933721, 0.019177353, -0.023128465, 0.009004442, 0.025393128, 0.005628529, -0.13771074, 0.032958064, -0.04423319, -0.059363063, 0.027850527, 0.035873216, -0.026067708, -0.03170527, -0.019731473, -0.009094787, 0.0042161266, 0.03512636, 0.037872862, 0.01927372, 0.031970285, -0.006492835, -0.0414385, -0.00037926316, -0.044546388, 0.10378899, 0.049196173, -0.029536977, -0.016997013, 0.03336763, -0.072613746, -0.013804803, -0.029031042, -0.002127638, -0.049003437, 0.04139032, -0.114485905, 0.014792581, 0.026260445, 0.018960522, -0.00767335, 0.015515346, 0.026790474, -0.038282428, -0.020225361, 0.019454412, -0.009883805, -0.009552538, 0.017201796, -0.034764975, -0.03972796, -0.052424524, -0.07362562, 0.007854042, 0.042956308, 0.032644864, -0.046064194, -0.005258112, 0.040257987, 0.00012055487, -0.023188695, -0.008179286, 0.0039420784, -0.034716792, 0.024610134, 0.011467864, -0.05281, -0.039703865, -0.0012904359, -0.06948177, -0.042257633, 0.05888122, 0.034885436, 0.0043245414, 0.017045198, -0.016972922, 0.02821191, 0.0005386855, 0.0017000025, 0.0077215345, -0.02323688, 0.02127337, 0.027850527, 0.057532057, 0.019454412, 0.03066931, 0.004309484, -0.037270557, 0.014069817, -0.021803398, 0.0014267071, -5.5760156e-05, 0.044546388, -0.018719602, -0.011624463, -0.011389565, -0.05440008, -0.034548145, -0.03765603, -0.016430847, -0.03604186, -0.0033608552, 0.03871609, 0.028573291, -0.025200391, 0.016454939, 0.055460133, -0.016262202, 0.04991894, 0.028308278, -0.08899641, 0.0026516425, 0.008408161, -0.02289959, -0.066928, 0.025778603, -0.01298567, -0.064856075, 0.0188762, -0.008444299, -0.06254323, -0.00032731445, -0.009558561, -0.06986724, 0.0451246, 0.006137476, 0.027681882, -0.029536977, -0.046305116, -0.06490426, 0.040932566, 0.04926845, -0.06620523, 0.068614446, 0.02910332, -0.015973097, -0.015467161, 0.040691644, -0.076179385, -0.02587497, -0.03842698, -0.010022335, -0.010684869, -0.04546189, -0.0054598837, -0.0331508, -0.06442241, -0.004872638, 0.0038547444, -0.044835493, -0.034644514, -0.023164604, 0.040956657, -0.060856774, 0.01494918, 0.0017015082, -0.022429794, 0.0179607, -0.022020226, 0.036692347, -0.031440258, 0.0020071773, -0.02200818, -0.04365498, 0.028645568, -0.039005194, 0.03404221, 0.010630662, -0.04488368, 0.076323934, 0.017454764, -0.024080105, -0.015238286, -0.041173488, 0.0190328, 0.016358571, 0.020285591, -0.0013724997, -0.024453534, -0.01703315, -0.007468567, -0.009805506, 0.04714834, -0.03156072, -5.058411e-05, -0.024345119, 0.012937485, 0.03527091, 0.000672698, 0.020972218, 0.02422466, -0.050304413, -0.029633347, 0.03582503, 0.07015634, -0.0018234748, 0.022092503, -0.0027465052, 0.020141039, 0.01712952, 0.020177176, 0.052279968, 0.01584059, 0.015021456, 0.035439555, -0.042450372, -0.033198986, -0.02765779, 0.042522646, -0.016840413, 0.027730066, -0.022971867, 0.07786583, -0.030910231, -0.039101563, 0.036427334, -0.027007302, -0.050882623, -0.01449143, 0.021767259, -0.04187216, -0.01528647, 0.0011835269, 0.04748563, -0.013467513, 0.054785553, 0.029031042, -0.028332371, 0.050208043, 0.023598263, 0.028139634, -0.00073405774, 0.014937134, 0.013780711, 0.033006247, 0.02155043, -0.032403946, -0.012756795, 0.021297462, -0.022610484, -0.021911811, 0.03895701, 0.013298868, 0.052906364, 0.02295982, -0.00013344793, 0.00624589, -0.050689887, 0.01574422, 0.015816497, -0.04196853, -0.012612241, -0.038161967, -0.009010465, 0.028958766, 0.003887871, 0.07328833, -0.013563882, -0.039053377, 0.076757595, -0.0041799885, -0.012937485, -0.0684699, 0.025369035, 0.005252089, 0.04254674, 0.042739477, 0.04791929, -0.011684693, -0.00043102365, -0.020550605, -0.040257987, -0.0026892864, 0.049629834, -0.049196173, 0.001978568, 0.0077215345, -0.010166888, -0.006110372, -0.05160539, -0.025802694, 0.0064265816, -0.03213893, -0.07757673, -0.08817728, -0.037800588, 0.021369739, 0.0066976184, 0.008956257, -0.0036409264, 0.0051978817, -0.014021632, -0.022827314, -0.016924737, -0.008191331, -6.921788e-05, 0.010371671, 0.007944387, 0.009901875, 0.0013883102, 0.06350691, 0.0033789242, 0.024610134, 0.010118703, 0.03943885, -0.053677313, -0.048858885, -0.035439555, 0.0062820287, 0.064229675, -0.037583757, 0.028645568, 0.050015308, 0.012305067, -0.022586392, -0.029055135, -0.01584059, -0.01163651, 0.051701758, -0.05970035, 0.011528094, 0.060134012, -0.013937309, -0.014238462, -0.0472688, 0.010955906, -0.021008356, -0.028741937, 0.012172559, 0.0032343713, 0.008480437, 0.0025628028, 0.054641, 0.004107712, 0.014298692, -0.038378797, -0.008799658, 0.011889477, -0.04122167, 0.026814565, 0.05497829, -0.024814917, -0.010425879, 0.0026395964, -0.008372023, -0.033006247, -0.0072336686, 0.0010465028, 0.012347228, 0.028814213, -0.03830652, -0.011967776, 0.010425879, 0.02866966, -0.037101913, 0.0273205, -0.038475167, -0.005255101, 0.056134712, -0.0073481062, 0.03794514, 0.0068903556, 0.019297814, 0.0155394375, 0.05497829, 0.0042793686, 0.024104198, -0.035295002, 0.005818255, 0.01141968, -0.019948302, -0.030091098, 0.043751348, -0.049678016, 0.039487038, -0.05338821, 0.017334303, -0.009052626, -0.06167591, -0.028332371, -0.010919767, 0.025007654, 0.010516224, -0.010082565, -0.07290285, -0.027296407, -0.0561829, 0.0124435965, 0.055797424, 0.008119055, -0.014009587, -0.002767586, -0.03686099, -0.02458604, -0.012064145, -0.072035536, -0.007998594, 0.060519487, -0.01847868, -0.020671066, -0.0225623, -0.041173488, -0.022393655, 0.070397265, -0.003098853, -0.007841995, -0.040065248, 0.041510776, -0.06707255, 0.0055743214, 0.038788363, 0.062061384, -0.0202615, 0.068421714, -0.011136597, -0.025682233, 0.06427786, 0.029392425, 0.022429794, 0.020177176, 0.003180164, -0.029729715, 0.0008597887, 0.0013747584, -0.040691644, -0.025393128, 0.0152985165, 0.044185005, -0.026405, -0.0067518256, 0.005508068, 0.000494642, 0.031319797, 0.0101126805, -0.009281501, 0.029536977, 0.024658317, 0.050882623, 0.0046136472, -0.0063121435, 0.016033327, 0.023887368, -0.026284538, 0.007480613, -0.009335709, -0.0491239, -0.01706929, -0.006944563, 0.014118001, 0.05285818, 0.02587497, 0.033656735, 0.036451425, 0.016828367, 0.0067397794, -0.02922378, -0.053484578, 0.048907068, -0.05295455, -0.009672999, -0.007281853, -0.04478731, 0.020189224, -0.028236002, -0.029079227, -0.0045985896, 0.0032524406, 0.023525987, -0.0032825556, 0.013612065, -0.030283835, -0.028862398, -0.009365824, -0.007480613, -0.015720129, 0.015322609, -0.002154742, -0.014322784, -0.03124752, 0.009570607, 0.02541722, -0.014081863, 0.027175948, 0.021959996, -0.009305594, 0.02127337, 0.012997716, -0.04134213, 0.013443421, -0.010793284, 0.03854744, -0.01798479, 0.025658142, -0.04396818, 0.007010816, 0.028139634, 0.013973448, -0.005101513, -0.0132025, -0.042643107, 0.020574698, -0.009727206, 0.031994376, -0.0007317991, -0.026694104, -0.014383014, -0.024429442, 0.007480613, -0.044377744, -0.0010547845, 0.0027480111, 0.060712222, 0.063217804, -0.030910231, -0.0402098, 0.03189801, 0.0045413706, 0.026910933, -0.006667503, 0.023610309, 0.03078977, -0.02311642, -0.027031394, -0.03334354, 0.07415564, 0.0050623636, -0.04681105, -0.017502949, -0.015262378, -0.044522297, -0.009980174, 0.012021984, -0.037391018, 0.03425904, 0.009389916, 0.005965819, -0.059218507, -0.007125254, 0.0135277435, -0.0051316284, 0.026236353, 0.012817025, 0.034210857, -0.027055487, 0.03854744, 0.011461841, -0.007125254, -0.012359274, 0.0059959344, -0.024152381, -0.02597134, -0.0091068335, 0.007426406, -0.032524403, -0.015756268, 0.024296936, -0.045196876, -0.0094682155, 0.032524403, -0.05444826, -0.035680477, 0.043727256, -0.023562124, 0.00747459, -0.037993323, -0.009275478, 0.016804276, -0.00026124928, 0.019297814, 0.019876026, -0.014599844, 0.06490426, -0.043245412, -0.0004012849, -0.004851557, -0.012335181, 0.018213667, -0.026356814, 0.019671243, -0.01578036, -0.037415113, -0.028838305, -0.029151503, 0.0034722814, 0.041944437, 0.011425703, 0.030982507, -0.039679773, 0.062302303, -0.014925088, 0.02161066, -0.0016307376, 0.06080859, -0.019876026, -0.01841845, 0.06124225, 0.009739253, 0.045871455, -0.021189047, -0.03784877, 0.03112706, -0.004821442, 0.015250332, -0.016888598, -0.021369739, -0.021201093, 0.042450372, -0.026356814, -0.005146686, -0.0179607, -0.054110974, -0.0043335757, 0.01516601, -0.0026787461, -0.0124435965, -0.011600371, -0.031440258, 0.005110548, -0.006010992, 0.104752675, -0.055267397, -0.015358747, 0.0028278164, -0.026886841, -0.005782116, 0.004628705, 0.05396642, -0.014370969, -0.031536628, -0.035776846, -0.06451878, -0.009293548, -0.011781062, -0.02339348, 0.0076793735, -0.04064346, 0.025344944, -0.015647853, -0.016840413, 0.01163651, -0.00032411472, -0.042450372, 0.086298086, -0.0020764424, 0.011762993, 0.0018189575, -0.038981102, -0.012672472, 0.013359098, -0.039992973, -0.038282428, -0.040739827, -0.0022511105, -0.01562376, 0.034451775, -0.013937309, -0.011208873, -0.038258336, -0.017358396, 0.012124375, 0.010437924, 0.015153963, 0.039703865, 0.021959996, -0.019201444, -0.0035234771, -0.023610309, -0.07627575, 0.0024829975, -0.015973097, -0.018767785, -0.014587798, -0.03237985, -0.0033096594, -0.058495745, 0.013298868, -0.004827465, 0.0411253, -0.007601074, 0.019538736, -0.032765325, 0.01703315, 0.00070733053, -0.028332371, 0.01685246, -0.019635104, -0.0057188747, 0.008119055, 0.022176826, 0.03582503, -0.02989836, -0.0079022255, -0.016912691, 0.03259668, -0.02676638, 0.036788717, -0.017478855, -0.012178583, -0.023839185, -0.004574497, -0.01718975, 0.048545685, -0.0055984138, -0.013624112, 0.04996712, 0.031102968, 0.011431726, 0.021261323, -0.031536628, -0.002892564, 0.03281351, -2.4703866e-05, -0.03842698, 0.044064544, 0.019984439, -0.0038457096, -0.060085826, 0.036090042, 0.052087232, 0.04601601, 0.05252089, -0.036306873, -0.0006015509, 0.012148468, -0.045847364, -0.001246016, -0.026573643, -0.04546189, -0.023032097, -0.0011150149, -0.00290461, 0.005755013, -0.0104740625, 0.034668606, 0.015647853, 0.01875574, -0.041775793, -0.0035445578, -0.029031042, 0.051123545, 0.01080533, 0.013491605, -0.020381961, 0.045220967, -0.013865033, 0.027681882, -0.0036258688, 0.027730066, -0.014467337, 0.017659547, -0.052087232, 0.0025567797, 0.00876352, -0.012503827, -0.026405, -0.04288403, -0.016816322, -0.03334354, 0.01924963, 0.0114377495, 0.012756795, -0.0050864555, 0.009498331, -0.0039601475, 0.029488795, 0.010239164, 0.015009411, 0.023995783, 0.011510026, 0.0090285335, -0.029392425, 0.022514116, -0.012588149, 0.051894493, 0.04647376, 0.016647676, -0.011588325, -0.033054434, -0.035005897, -0.00890205, -0.023803046, -0.006986724, 0.011907546, 0.0070228623, 0.027874619, -0.038137875, 0.021670891, 0.009841644, 0.009365824, -0.050978992, 0.015864681, 0.022237057, -0.009389916, -0.053918235, 0.0041047004, -0.01556353, -0.010287349, -0.008155193, 0.013973448, 0.03693327, -0.0021186036, -0.017707732, -0.0015358747, -0.02989836, -0.019731473, -0.015443069, 0.0331508, -0.00011199086, 0.0411253, 0.036692347, 0.017225888, -0.010203026, -0.028717846, 0.042040806, -0.011208873, -0.002073431, -0.07343288, 0.0056044366, -0.008618968, -0.021189047, 0.0037282605, 0.023947598, 0.032861695, 0.009950059, -0.024646271, 0.009528446, -0.04399227, -0.0024318015, -0.024405349, 0.0052671465, 0.04466685, -0.05083444, -0.038354706, 0.011046251, -0.03237985, 0.0074866363, -0.031608902, -0.026838657, 0.0056706904, -0.014310738, 0.015479207, 0.015635807, -0.022465931, 0.029850176, 0.040956657, -0.004676889, -0.023983737, -0.022947775, -0.0031380027, 0.01875574, 0.0008883981, 0.0040414585, -0.03919793, 0.036017768, 0.01976761, 0.0042402185, 0.02474264, -0.006836148, 0.03033202, -0.020478329, 0.03931839, 0.029946545, -0.0112389885, 0.038282428, -0.01838231, -0.024116244, -0.0014861847, -0.016647676, -0.007167415, -0.00547193, -0.011166712, 0.0018535899, 0.04577509, -0.008697267, 0.0003265616, 0.035656385, 0.006098326, 0.047967475, -0.039776143, 0.016479032, 0.011534118, 0.036355056, 0.01712952, -0.0048364997, -0.026115892, -0.009823575, 0.0060200263, -0.039462946, 0.0022059376, 0.03794514, 0.048882976, -0.02452581, -0.005845358, 0.0040233894, -0.04791929, -0.013142269, 0.025007654, 0.013708434, -0.019562827, -0.027874619, 0.04288403, -0.02329711, -0.032885786, -0.029488795, -0.0042853914, 0.0067879637, 0.024200566, 0.018550957, 0.052424524, 0.012744748, 0.005902577, 0.013587974, -0.00023734533, 0.025152206, 0.0011842798, 0.007637212, -0.012997716, -0.01881597, 0.027175948, -0.042498555, -0.0033849473, -0.005408688, 0.007564936, -0.019562827, 0.057532057, 0.020875849, -0.0063061207, -0.075745724, -0.0072698067, 0.016310386, -0.047943383, 0.017045198, 0.013816849, 0.017141566, -0.03247622, 0.01709338, 0.056953847, 0.04498005, -0.014419152, 0.019598965, -0.051990863, -0.0027901724, 0.016659724, -0.02989836, 0.0051978817, 0.014913042, -0.0030431398, -0.027031394, -0.020418098, -0.032741234, -0.031416167, -0.017731823, 0.016936783, -0.035295002, 0.05979672, 0.024284888, 0.03536728, -0.014852812, -0.011666625, 0.018045021, -0.010696915, -0.00022831078, 0.006854217, -0.00025372047, 0.014130047, 0.045413706, 0.014925088, 0.002773609, 0.1123658, 0.01703315, -0.006673526, 0.008534645, -0.002010189], [-0.015183306, 0.0015315964, -0.016051613, 0.03755426, 0.014568256, 0.0119934855, -0.018403277, 0.07192473, -0.0062771332, 0.043632407, -0.021864444, 0.023613116, -0.0129401805, -0.013724069, 0.024252286, 0.031427875, 0.0029124452, 0.04240231, -0.027110463, -0.044355996, -0.016835501, -0.0632899, -0.060926184, 0.013121078, 0.0066690776, -0.015931014, -0.0056078136, 0.030366613, 0.02274481, 0.02800289, 0.043704767, 0.012409549, 0.045803174, 0.015400383, 0.038060773, 0.036854792, 0.053449098, 0.04083453, -0.02017607, -0.03762662, -0.021068497, -0.015472742, -0.012240712, -0.02790641, -0.038663764, -0.0046430286, -0.021321751, -0.028364684, -0.019657498, -0.041316923, -0.0072298585, -0.02407139, 0.001821032, -0.017028458, 0.006946453, 0.010232752, 0.0765557, -0.091799304, 0.019934874, -0.011342255, -0.013675829, 0.045634337, 0.050940655, 0.0011939217, -0.0062711034, -0.03646888, 0.0011351301, -0.015774237, 0.04734683, 0.04486251, 0.022238297, 0.03263386, -0.0024602022, -0.029980699, 0.0008004702, -0.020007232, 0.08176554, 0.040738054, -0.014073803, -0.030873125, 0.015110947, -0.047829226, 0.013567291, -0.0005551283, 0.013289915, -0.031982627, 0.046647362, -0.11702844, -0.03128316, 0.020646403, 0.018921848, 0.022419196, 0.026989864, -0.013917026, -0.07245536, 0.02932947, 0.036107086, -0.0033586584, -0.035311136, 0.011728169, -0.021369992, -0.025518568, -0.058369502, -0.08871199, 0.01558128, 0.03704775, 0.020091651, 0.0051435106, 0.012017605, -0.016437527, 0.01817414, -0.023926672, -0.011318136, 0.07279304, -0.006614808, 0.03497346, -0.028364684, -0.078919426, -0.030077178, -0.007814759, -0.07414374, -0.045127824, 0.05065122, 0.04809454, 0.033598643, 0.05407621, -0.036034726, 0.02011577, -0.010184513, -0.019633377, -0.020947898, -0.016051613, -0.028991794, 0.03128316, 0.0662325, 0.013205497, 0.014797392, -0.038494926, 0.023420159, 0.0015217979, -0.065123, 0.0055384696, -0.024505543, 0.018294739, -0.01620839, 0.0047093574, 0.008182584, -0.053304378, -0.053111423, 0.0097383, -0.0010899057, -0.01169199, -0.024794979, 0.02208152, 0.04343945, -0.03188615, 0.046526764, 0.01950072, -0.05340086, 0.0067896754, -0.0065303897, -0.048480455, -0.021357931, 0.039314996, -0.035552334, -0.06965749, 0.046719722, -0.009032801, -0.012566326, 0.037916057, 0.030607808, -0.021780025, 0.013687889, -0.013904966, -0.06767968, -0.010214663, 0.029811861, 0.04553786, -0.068789184, -0.033188608, -0.061167378, 0.025470328, 0.008785575, -0.08055956, 0.0106427865, 0.030873125, 0.06304871, 0.022563912, -0.011468884, -0.08668595, 0.0010017183, -0.016449587, 0.0039465744, -0.0632899, -0.041268684, -0.02662807, -0.02670043, -0.028991794, -0.02344428, 0.04286058, -0.023191024, -0.03576941, 0.0074951747, -0.019741917, -0.046382047, 0.0012843702, 0.031017842, -0.0016220451, 0.013591411, -0.0011607572, 0.0007047454, 0.007724311, 0.0072419187, 0.023842253, 0.02071876, 0.034780506, -0.07694162, 0.004748552, 0.01234925, 0.004226965, 0.044114802, -0.043174136, 0.040979248, 0.0027707424, -0.06912686, 0.044428356, 0.035986487, 0.028871195, 0.002368246, 0.016931979, -0.023323681, -0.030993722, -0.03323685, 0.018017363, -0.075735636, -0.027737573, -0.026531592, -0.018355038, 0.055040993, -0.007591653, 0.020851418, 0.018596234, -0.0059876977, 0.010956341, -0.022057401, 0.05899661, 0.0004341533, 0.027689334, -0.02853352, -0.017281715, -0.00016780102, 0.028388804, 0.032585617, 0.043801244, -0.020887598, 0.052966706, -0.014676794, -0.011613601, -0.043174136, 0.006614808, -0.05981668, 0.04686444, -0.028075248, 0.04814278, 0.032778576, -0.019645438, 0.039532073, -0.03569705, -0.060781464, -0.014737093, 0.028388804, -0.04015918, 0.02466232, 0.047129754, 0.024626141, -0.015713938, 0.065171234, 0.038012534, -0.025783883, 0.04095513, 0.04483839, 0.0076398924, -0.0041184267, -0.001596418, 0.0035214657, 0.030077178, 0.011746259, -0.05783887, -0.064158216, -0.0012255786, -0.029667143, 0.0031717313, 0.06034731, 0.02147853, 0.041196328, -0.005255064, 0.0013883861, 0.013567291, -0.043777127, -0.0072600082, 0.033429805, -0.00034295098, -0.013470813, -0.0624216, -0.025663285, 0.0071755894, 0.00391341, 0.09218522, 0.025904482, -0.03854317, 0.047250353, -0.0115713915, -0.01496623, -0.008285092, -0.009967437, -0.016751083, 0.037433665, 0.026386874, 0.06792087, -0.024819098, 0.031596713, -0.014676794, -0.06956101, 0.0010213156, 0.056970563, -0.042522907, 0.01628075, -0.044066563, -0.062083926, 0.0145200165, -0.045224305, -0.061215617, -0.020441385, 0.023275442, -0.04281234, -0.09059332, -0.033478044, -0.038760245, 0.02021225, -0.034056917, -0.026242156, -0.053690292, -0.00913531, -0.054027967, -0.013977325, -0.002118005, 0.03043897, 0.001397431, 0.032657977, 0.0037807517, 0.0013642665, 0.087168336, 0.013917026, 0.06058851, -0.01745055, 0.05600578, -0.04500723, -0.028726477, -0.012071874, 0.026869267, 0.058851894, -0.03622768, 0.04741919, 0.020091651, 0.023637237, -0.051567767, -0.060492028, 0.0074409056, 0.024445243, 0.012126143, -0.055716343, -0.0032802694, -0.044669554, -0.003126507, 0.0037897967, -0.06256632, 0.026338635, -0.0042420398, -0.0028762657, 0.022624211, -0.006421851, -0.021912683, -0.007615773, 0.03241678, 0.020031352, 0.028895315, -0.01634105, -0.0061022663, -0.0118186185, -0.027592855, 0.018716833, 0.025663285, -0.017257594, -0.010136274, 0.041799318, 0.05060298, -0.032585617, 0.027013984, 0.020947898, -0.013844667, 0.009702121, 0.00911119, -0.0050952714, 0.0068499744, -0.0015089842, -0.021611188, -0.0067354064, -0.039532073, 0.016594304, 0.04428364, 0.0071997093, 0.011878917, -0.043342974, -0.012138203, 0.020477565, 0.04155812, -0.006283163, 0.0063374327, -0.027665215, 0.01944042, -0.020344907, -0.038808484, -0.0014788348, 0.03263386, -0.03970091, 0.058610696, -0.04208875, 0.01951278, -0.049734674, -0.036107086, -0.039218515, -0.03897732, 0.010347321, 0.012144233, -0.009919197, -0.07192473, -0.018933909, -0.023842253, 0.00163109, 0.07149058, -0.00073225686, -0.008737336, 0.029570665, 0.016123971, -0.049686436, 0.0065183295, -0.076507464, -0.046285566, 0.020465504, -0.030945484, -0.06256632, -0.027086344, -0.048986968, -0.050265305, 0.042691745, -0.009406655, 0.039290875, 0.0050410023, -0.0027722497, -0.060684986, 0.018644473, -0.0057525313, 0.08340567, 0.010678966, 0.0427641, -0.028702358, -0.00030564092, 0.055378668, 0.017161116, -0.0021647366, 0.015460682, 0.044428356, -0.040038586, 0.05653641, 0.013965265, -0.0069886623, -0.015894836, 0.016799321, 0.057597674, -0.036637716, -0.00978654, 0.003060178, 0.017824406, 0.061215617, -0.0055143503, 0.015062708, -0.005001808, 0.01882537, 0.03646888, 0.012457788, 0.003575735, 0.021575008, -0.005921369, 0.029618904, 0.022563912, -0.019621318, -0.0019642422, -0.050458264, -0.0010559876, -0.014122043, 0.0133622745, 0.038929082, 0.023637237, 0.07047755, -0.014483837, 0.021840325, -0.03509406, -0.035865888, -0.01298842, -0.018547995, -0.010184513, -0.0027240105, -0.032199703, 0.0010190543, -0.015171247, 0.009587552, 0.01890979, 0.03777134, 0.01035938, 0.01105282, 0.021225274, -0.03309213, -0.032802694, -0.0025370833, -0.010455859, 0.023456339, 0.0011177941, 0.008260973, -0.012542207, -0.028051129, -0.0324409, 0.0048962845, -0.006614808, -0.009653881, 0.025470328, -0.009545343, 0.017969124, 0.025060294, -0.012759284, 0.011486974, -0.007862999, 0.027351659, -0.021683546, 0.0047636265, -0.056922324, 0.026386874, 0.040979248, 0.011854798, -0.016075732, 0.01821032, -0.040810414, 0.030173656, 0.034129273, 0.030656049, -0.030583689, 0.020598164, -0.039917987, -0.053738534, -0.016509887, 0.0014449165, 0.011119149, 0.02272069, 0.08031836, 0.03297153, -0.009792569, -0.037240706, 0.036010604, -0.010968401, -0.028171726, 0.0029154602, -0.010733235, 0.009243848, 0.0030782677, -0.0030089237, 0.018656533, 0.075446196, 0.022877468, -0.045079585, -0.021394111, -0.025735645, -0.02670043, 0.023794014, 0.02602508, -0.042016394, 0.020453446, 0.0023893507, -0.02920887, 0.00076202955, -0.033502165, -0.005725397, -0.017655568, 0.026748668, -0.01169802, -0.017016398, -0.025156774, 0.019018328, 0.0047787013, 0.0037294975, 0.0019763021, 0.010057885, -0.03622768, -0.026121559, -0.0030752528, -0.011866857, 0.017185235, 0.0041395314, 0.055957537, -0.0111854775, -0.009937287, 0.039797388, -0.051760722, 0.03958031, 0.034756385, 0.0025129637, 0.0080619855, -0.042691745, 0.010244812, 0.06362758, 0.022998067, 0.03644476, 0.05407621, 0.026290396, 0.06579835, -0.021514708, 0.03854317, -0.0016748067, -0.008532318, -0.009690061, -0.006946453, -0.02153883, -0.011360345, -0.014773273, 0.008001687, -0.058562458, -0.021575008, 0.028871195, 0.028774718, 0.02860588, 0.012771344, 0.034852862, 0.016196331, 0.038326092, -0.01497829, 0.05065122, -0.026121559, -0.015086828, 0.042739984, 0.008068016, 0.01753497, -0.010678966, 0.00307676, 0.017173177, 0.004736492, 0.053786773, -0.014387359, -0.025639165, 0.011740229, 0.024963817, -0.040183302, -0.0076338626, -0.0010250842, -0.0846599, -0.0011313614, -0.008417751, -0.006940423, 0.0069223335, -0.037867818, -0.0006312559, -0.0045405203, 0.023528699, 0.024372885, -0.027038105, -0.021068497, -0.00062070356, 0.0023953808, -0.02020019, -0.040593334, 0.04676796, -0.000924837, -0.009521224, -0.022575973, -0.056150496, -0.043270614, -0.0024617095, -0.028244086, 0.0062711034, -0.037385426, 0.04488663, -0.03051133, -0.034852862, 0.023540758, -0.030824885, -0.010841773, 0.035190538, 0.021828264, -0.0033888079, -0.0009323744, -0.05851422, 0.041702837, 0.029281229, -0.014013505, -0.0017622404, -0.017378192, -0.008369511, -0.0043264586, 0.023854313, -0.0016748067, 0.006174625, -0.028437043, -0.033357445, 0.010124214, -0.004507356, -0.0022913648, 0.06246984, 0.018427396, 0.0030903274, -0.033453926, -0.031379636, -0.06179449, 0.013253736, -0.005077182, -0.05397973, 0.0021903638, -0.032103226, 0.04088277, -0.0325615, 0.021924743, 0.004730462, 0.022539793, -0.010956341, 0.049589958, -0.046502646, 0.0017682703, -0.0036601536, -0.01690786, -0.009846838, 0.0066690776, 0.0076941615, 0.017848525, 0.033936318, 0.01105885, -0.018801251, 0.0050289426, -0.023866372, 0.027086344, -0.028412923, 0.043198254, -0.0030239986, -0.021683546, -0.022527734, 0.020284608, -0.017088758, 0.028726477, 0.0037777368, 0.0110287005, 0.029040033, 0.0080619855, -0.012469848, 0.035600573, -0.012518087, -0.011462853, 0.021008197, 0.008339361, -0.00026588122, 0.04220935, 0.03128316, -0.040038586, -0.038856722, 0.024517603, 0.022383016, 0.023697535, 0.025856242, 0.0074951747, -0.029450066, 0.012180412, -0.011939216, 0.010908102, 0.0084659895, -0.0050349724, -0.013072839, -0.013892906, 0.001109503, -0.017100817, -0.022986006, 0.045031346, 0.042378187, -0.0063374327, -0.011981426, 0.022383016, 0.0045797145, 0.029040033, 0.032875054, 0.043053538, -0.011456824, 0.03909792, 0.006759526, 0.026893387, -0.0010303603, 0.027761692, -0.02802701, 0.020224309, -0.0123974895, 0.0035455856, 0.033960436, -0.004615894, -0.0107995635, -0.03183791, -0.037481904, -0.016726963, 0.024348766, 0.012879882, -0.039218515, 0.004769657, 0.0012037202, 0.0041335016, 0.03123492, 0.047612146, -0.021900622, -0.029425947, 0.023022186, -0.014507957, -0.029522426, 0.02923299, -0.050217066, 0.015171247, 0.040520977, 0.01360347, 0.004480221, 0.009587552, -0.032730337, -0.022021221, -0.029618904, -0.040641576, 0.038253732, 0.013193437, 0.04749155, -0.013724069, 0.04286058, 0.034346353, 0.014785333, -0.03769898, 0.0028099366, -0.01691992, -0.002662204, -0.036710076, 0.012566326, 0.0029501321, -0.018101782, 0.0153280245, 0.013567291, 0.047033276, 0.003022491, 0.0107995635, 0.025229132, -0.023806073, 0.004350578, -0.029377708, 0.027375778, 0.029377708, 0.037457783, 0.019790156, 0.026796907, 0.019693676, -0.042305827, 0.01752291, -0.027978769, -0.028919434, -0.03707187, -0.04216111, -0.019066567, -0.021321751, -0.008496139, 0.035986487, 0.053063184, 0.021876503, 0.03123492, -0.03562469, -0.03839845, -0.0018150021, -0.024360824, -0.0029395798, 0.042643502, -0.05914133, -0.009497104, -0.0069826324, -0.017016398, -0.019030387, -0.030246014, -0.012855763, 0.009418715, -0.018427396, -0.027375778, -0.011016641, -0.0008750903, 0.03958031, 0.054027967, -0.0045043407, -0.037264828, -0.016027493, 0.01954896, 0.0047817165, -0.009575493, 0.01945248, -0.033429805, 0.02923299, 0.00039081337, -0.0092739975, 0.028919434, -0.0016672694, -0.0042691743, -0.01875301, -0.006747466, 0.034032796, -0.018596234, 0.03837433, -0.044790152, -0.007489145, -0.016365169, -0.017221415, -0.025180893, -0.0033345388, -0.03176555, -0.03164495, 0.054462124, -0.006952483, 0.0139411455, 0.010467919, -0.026555711, 0.014194402, -0.0029742518, 0.012433669, 0.03178967, 0.0015994329, 0.0018541964, -0.011336226, -0.015026528, -0.0033978526, 0.021888563, -0.027641095, -0.0022250358, 0.050410025, 0.07071875, -0.021020256, -0.0094488645, 0.0403039, -0.033188608, -0.01634105, 0.025928602, -0.009599612, -0.009907138, 0.019874575, 0.054799795, -0.039532073, 0.004404847, -0.016594304, -0.028798837, -0.018137962, 0.021924743, 0.024915576, 0.0075012045, 0.03116256, -0.017112877, -0.00051480334, -0.001979317, 0.019247463, -0.00519175, 0.048649292, -0.019778095, -0.0007793655, 0.03236854, -0.028147606, -0.00097609125, 0.014761213, -0.017800286, -0.01684756, 0.023516638, -0.010244812, -0.026290396, -0.020646403, -0.011679931, 0.014725033, -0.037916057, 0.028871195, -0.011167388, -0.005068137, -0.036661837, -0.012626626, 0.036251802, 0.0351423, 0.017088758, 0.023673415, -0.047925703, -0.005327423, 0.038615525, -0.0012135188, 0.0017592254, 0.025952721, -0.036806554, -0.010274962, -0.014061743, -0.034876984, 0.017305834, -0.032995652, 0.046430286, -0.025639165, 0.039917987, -0.005583694, 0.022310657, -0.013350215, 0.0069223335, 0.0034189573, -0.01234322, -0.007073081, -0.016992278, -0.0466956, 0.029618904, 0.043873604, 0.018487696, -0.0057012774, 0.1293777, 0.010902072, -0.030921364, 0.043632407, -0.016485766], [0.00517665, 0.025430808, -0.007950066, 0.025336793, 0.008678675, -0.020871125, -0.039227374, 0.0066279923, -0.00025009213, -0.005508637, -0.009900858, 0.017486619, -0.026041899, -0.012339347, 0.008995972, 0.0004630928, -0.05871179, 0.03866329, -0.014701451, -0.033563025, -0.01916712, -0.04052007, -0.07032253, 0.044797707, -0.015571081, -0.0043128957, 8.6852844e-05, 0.018885078, 0.005582086, -0.020495068, 0.04620792, 0.005852376, 0.06623292, -0.049263377, 0.059087846, -0.014243132, 0.025289787, 0.023738554, -0.043951582, -0.0115226, -0.02712306, 0.036312938, -0.027522622, -0.028110208, -0.03506725, -0.008167473, -0.06383556, -0.003319872, -0.04902834, -0.026088906, 0.00449211, 0.008678675, 0.041319188, 0.0044274754, 0.016041152, -0.0022607448, 0.0747882, -0.11770562, -0.018755808, 0.008473018, -0.021364698, 0.028509768, 0.018932085, -0.014125615, 0.036218923, -0.0047183316, 0.024702199, -0.0030583953, 0.02524278, 0.036171917, -0.0048946077, 0.017122313, -0.02912086, 0.013608538, -0.0121513195, -0.06298943, 0.08296742, 0.07276689, -0.04319947, -0.0454088, -0.0010642688, -0.06928837, -0.01523028, -0.016393704, -0.0016481843, 0.0039867843, -0.011070157, -0.10529576, -0.015347798, 0.005573272, 0.018391503, 0.0037752527, 0.024138113, 0.019390402, -0.043269977, 0.015723854, 0.04442165, -0.002056558, -0.011963291, -0.018415008, -0.02564234, -0.038851317, -0.052741896, -0.048370242, 0.032505367, -0.011593111, 0.036383446, -0.050015487, 0.0029408778, 0.07309595, 0.012057305, 0.0083084935, 0.01655823, -0.020730104, -0.01749837, 0.052271828, 0.030484064, 0.0015115701, -0.0066691237, -0.008461267, -0.08663397, -0.011963291, 0.01115242, 0.0040426054, -0.01535955, 0.06392957, 0.025078256, 0.09171073, 0.0044774204, -0.012104312, -0.012069057, 0.02712306, 0.043669537, 0.06665598, 0.036430456, 0.0044304132, 0.0038222598, -0.023785561, -0.019531425, -0.03351602, -0.06637394, 0.028486265, -0.033539522, 0.034620684, -0.0227044, 0.0030069815, 0.01916712, -0.027005544, -0.025125261, -0.013714303, -0.041319188, -0.027217075, 0.026605984, 0.005317671, -0.009565933, -0.03593688, 0.016781513, 0.050438553, -0.020659594, 0.0058200588, 0.027992692, -0.06872429, 0.0048593525, 0.012550879, 0.031306688, -0.05396408, -0.020365799, -0.039885473, -0.06129718, 0.033845067, 0.007773789, -0.02090638, 0.012057305, 0.011234682, -0.029308889, -0.0025045937, 0.031612232, 0.032035295, -0.045314785, -0.02698204, -0.050579574, 0.106047876, 0.013890579, -0.05062658, 0.059322882, -0.010247534, -0.011175923, -0.042165313, 0.03727658, -0.0059405146, 0.019625438, -0.02411461, 0.025125261, -0.024091108, -0.0105942115, -0.02571285, -0.017380852, -0.038827814, 0.04634894, -0.0125273755, -0.010570708, -0.05979295, -0.04421012, 0.0054910094, -0.038851317, 0.03093063, 0.03187077, -0.0027807602, 0.0126919, -0.014454664, 0.019331645, -0.012069057, 0.044092603, -0.041789256, 0.007591637, 0.033939082, -0.06369454, 0.036547974, -0.028768307, -0.030108009, 0.050814606, -0.021164918, -0.0038780808, 0.012245334, -0.026300438, 0.027005544, 0.016205676, -0.017980192, -0.015183274, -0.016287938, 0.0015174459, -0.047594626, -0.0013969904, 0.029167866, -0.03365704, -0.0012574382, -0.014807217, 0.012797666, 0.02343301, -0.009471918, 0.035889875, 0.010605963, -0.068583265, -0.035090756, 0.010435563, 0.069946475, 0.013114964, 0.0373941, -0.028885825, -0.013702552, 0.05161373, -0.015688598, -0.0035284657, 0.025877375, 0.0098068435, 0.077091545, 0.010265162, -0.075023234, 0.011728256, 0.03847526, 0.0033962585, 0.040990137, -0.044774204, 0.053823058, -0.004480358, -0.03400959, 0.015806116, -0.025595332, -0.019202376, -0.046677988, 0.062096298, -0.015594585, -0.035184767, -0.013737807, 0.0076386435, -0.009736333, 0.016193924, 0.03640695, -0.035325788, 0.08268538, 0.016452463, -0.017380852, 0.008948965, 0.021294188, 0.023562279, -0.037981685, -0.0053646783, -0.028509768, -0.014243132, -0.0006041139, -0.055750348, -0.030484064, 0.040049996, 0.057395592, -0.008578785, 0.01336175, -0.0038428253, -0.011980919, -0.024678694, -0.02477271, -0.0077091544, 0.048793305, -0.005367616, -0.084518656, 0.014701451, 0.011675373, 0.007656271, 0.052882917, 0.022398854, -0.02437315, 0.0721088, 0.002439959, -0.024537673, -0.021717252, 0.0046860143, -0.024702199, 0.029825965, 0.03133019, 0.024937233, -0.023538774, -0.04764163, -0.009742209, -0.08917235, 0.035419803, 0.027828166, 0.004497986, 0.005211905, -0.0063753296, -0.09392006, 0.00283805, -0.035090756, 0.040449556, -0.03252887, -0.020824118, -0.026535474, -0.11159471, 0.0020653717, -0.014008097, 0.034879223, -0.04576135, -0.038710296, -0.02137645, 0.0134322615, -0.05184876, 0.009513049, 0.024138113, 0.006792517, -0.009466043, 0.032763906, -0.034644186, 0.0014234319, 0.046913024, -0.012738908, -0.025266282, 0.032293834, -0.04634894, -0.055844363, -0.029872973, -0.004054357, -0.00013073832, 0.07774964, -0.1021933, -0.0004965118, 0.04587887, -0.0032816788, -0.06049806, -0.02785167, -0.018650042, 0.0031024646, 0.007826672, -0.02498424, 0.06383556, 0.017886179, -0.0514257, -0.04416311, 0.0041278056, 0.0293794, -0.009912609, -0.01436065, 0.025548326, -0.0014623596, -0.062472355, 0.0034226999, 0.034221124, -0.02003675, 0.02712306, -0.02484322, 0.008478895, 0.013549779, -0.010817494, 0.01890858, -0.01756888, -0.028697796, -0.007861927, 0.023609284, -0.0013330902, -0.0010172616, -0.0020785925, -0.014019849, 0.009947864, -0.0037987563, 0.026676495, 0.017592384, 0.0006569968, 0.0072978428, -0.036242425, 0.00965407, 0.013020949, -0.012574383, 0.04714806, -0.013514523, 0.035842866, 0.010723481, 0.016511222, 0.021693747, 0.02571285, 0.0060462803, 0.0043158336, -0.06294242, 0.018262234, 0.03574885, -0.011023151, 0.0046184417, 0.020201275, -0.037159063, 0.029355895, -0.07159172, 0.03920387, -0.022857172, -0.054528166, -0.02625343, -0.015242032, 0.04322297, 0.05711355, -0.010582459, -0.05255387, -0.05363503, -0.027875174, -0.01012414, 0.05617341, 0.044844713, 0.004539117, -0.009184, 0.006886531, -0.018509021, -0.01336175, -0.085129745, -0.0100242505, 0.035490315, -0.00029783364, -0.027334593, -0.0006856417, -0.036430456, -0.033280984, 0.057066545, -0.00026643442, 0.017862674, -0.019872226, 0.003569597, -0.10426161, 0.008490646, 0.0055938377, 0.062190313, -0.015923634, 0.022880675, 0.0041307434, 0.009894981, 0.031024646, 0.032646388, 0.03553732, 0.008702178, -0.0037429354, -0.042846914, 0.012868176, -0.016464215, -0.0060462803, -0.053541016, -0.012174822, 0.009789215, -0.0066573718, -0.044727195, -0.021834768, 0.011405082, 0.05358802, 0.0010503135, -0.0045773103, 0.04790017, 0.01282117, 0.042588376, 0.010494322, 0.016240932, 0.03245836, -0.016099911, 0.007955941, 0.022551626, -0.06618591, -0.023480015, -0.023338994, -0.011769387, -0.03184727, 0.03520827, 0.002591263, 0.046583973, 0.055327285, 0.017862674, 0.019343397, -0.013620289, -0.037370596, 0.0019904543, -0.004110178, -0.017921433, -0.024420157, -0.04169524, 0.043904573, -0.02310396, -0.02977896, -0.0113639515, 0.03231734, 0.010923261, 0.021905279, -0.0454088, -0.0046860143, -0.03431514, -0.02458468, 0.0013999284, -0.011963291, -0.0039280257, 0.019543177, -0.004283516, -0.015582833, -0.023668043, 0.01809771, 0.03633644, 0.027546125, 0.035090756, 0.024185121, 0.016922534, 0.038052198, -0.027710648, 0.00644584, -0.019648941, 0.07314295, -0.031165667, -0.0036841766, -0.05617341, 0.029003343, -0.00054645684, 0.0030877749, -0.019601936, 0.043152463, -0.07051056, 0.033139963, -0.012609638, 0.031753253, -0.0060932874, -0.02491373, -0.027687145, -0.01649947, 0.014184373, -0.0088020675, 0.0067572617, 0.016746257, 0.0948602, 0.053447, -0.018579531, -0.031541724, 0.03440915, 0.001373487, -0.00091516826, 0.0112464335, 0.031048149, 0.010459066, 0.016534725, -0.0029893538, -0.007197953, 0.053682037, -0.011081909, -0.028321741, -0.020330545, -0.015994145, 0.022340095, -0.012027926, -0.010541328, -0.05062658, 0.032622885, 0.016099911, -0.010852749, -0.043458007, -0.0057848035, 0.027428607, 0.0008879923, -0.008572908, 0.038146213, 0.04482121, 0.013326495, -0.027499117, 0.022011045, -0.00046566347, -0.010488445, 0.029214874, 0.029567426, 0.008296742, -0.00089680613, -0.00400735, -0.02658248, -0.029637938, 0.029073853, -0.040825613, -0.035231777, 0.026229927, 0.003475583, 0.0150305005, 0.027358096, -0.054716192, 0.018720552, -0.028110208, 0.016088158, 0.036641985, 0.021576231, 0.03534929, -0.0064399643, 0.021940535, 0.07920686, -0.05363503, 0.00834375, 0.015218529, 0.013267737, 0.01309146, -0.017909681, -0.013549779, -4.030486e-05, -0.012057305, -0.018979091, -0.020694848, 0.010312169, 0.02110616, 0.013138467, 0.050579574, 0.009377904, -0.027640138, -0.027569627, 0.0088608265, 0.0121513195, 0.08837323, -0.02897984, -0.041836265, 0.027146565, 0.012480369, 0.019413907, -0.034620684, -0.011228806, -0.015265536, 0.01535955, 0.035372797, -0.002641208, -0.01689903, 0.00124789, 0.016934285, -0.022022797, 0.020753607, -0.042517867, -0.0038898324, 0.00017489924, -0.010182899, 0.034620684, 0.014572182, -0.011581359, -0.042729396, -0.023127463, 0.02858028, 0.088608265, -0.06505774, -0.05570334, 0.007897182, -0.0394154, -0.00831437, -0.026911529, 0.041648235, 0.003475583, -0.016135165, -0.064305626, -0.026817515, -0.016464215, -0.0023650415, -0.006798393, -0.010799867, -0.033633534, -0.012550879, -0.021317692, -0.036030896, 0.003960343, 0.023021696, -0.022516372, 0.026864523, 0.0044686063, 0.030883623, -0.0075975126, -0.0681132, -0.007427112, 0.0044157235, -0.018814567, 0.0021402892, -0.031635735, -0.026817515, 0.015112762, 0.0071626976, -0.011916284, -0.01997799, -0.023127463, -0.030531071, 0.018144717, 0.012762411, 0.037206072, 0.027522622, -0.0048211594, -0.018156469, -0.041178167, -0.022998193, -0.050673585, 0.013784814, -0.03245836, -0.034761705, -0.029167866, -0.008402508, -0.028533272, -0.020730104, 0.036641985, 0.0047477107, 0.0447507, -0.008302618, 0.014207877, -0.06063908, 0.0056907893, 0.009477794, -0.027381599, 0.017956689, 0.0079735685, 0.0121513195, 0.0077444096, 0.036148414, -0.0012890211, -0.05955792, -0.029073853, 0.0024693385, 0.0075622573, -0.0253838, 0.020365799, -0.010265162, -0.028627286, -0.029802462, 0.00091957516, 0.036806513, 0.026394451, -0.011258186, 0.03480871, 0.03426813, 0.01943741, -0.0320588, 0.0003094018, -0.0059933974, -0.01943741, 0.015994145, -0.016946036, -0.01055308, 0.0113522, -0.013349999, 0.039979488, -0.059745945, 0.014607437, -0.0016702188, 0.0054410645, 0.045126755, -0.03299894, -0.031306688, -0.0032963685, -0.034033097, 0.017204575, 0.004589062, -0.053917073, -0.029966986, -0.037370596, 0.03351602, -0.003654797, -0.01296219, 0.035913378, -0.012257085, -0.0056232167, -0.0347382, 0.024138113, 0.00025211196, 0.0074388636, -0.015006997, 0.042306334, 0.0070451796, 0.03915686, -0.0487463, 0.016722754, 0.019449161, 0.031259682, -0.00050275493, 0.03892183, -0.06933538, 0.0043628407, 0.0054116854, -0.020142516, -0.03266989, -0.013737807, -0.02564234, -0.051049642, 0.03419762, 0.030766107, -0.0015086321, 0.0022651516, 0.010858626, -0.059275877, 0.04047306, 0.012198326, 0.0113051925, 0.007944189, 0.018403256, 0.0014652975, -0.017040052, 0.006157922, -0.03685352, 0.020412806, 0.051942777, -0.013173723, -0.02944991, -0.013878828, -0.01729859, -0.01488948, -0.031283185, -0.020130765, 0.0032669893, -0.0028365809, 0.044891723, -0.047524117, 0.04916936, 0.014266636, 0.011211178, -0.027005544, -0.0034932105, 0.02043631, 0.037464608, -0.045338288, 0.02030704, -0.011881029, -0.030672092, 0.008496522, 0.0016922534, 0.06524577, 0.02618292, 0.054763198, -0.01349102, -0.035490315, 0.005872942, -0.020835869, 0.019002596, 0.013878828, -0.0028292362, -0.013032701, 0.011416835, -0.0038222598, -0.018062454, 0.007421236, 0.012433361, -0.010359176, -0.050814606, 0.013937587, -0.012374603, -0.021870025, -0.04282341, 0.035372797, 0.019872226, 0.032575876, 0.006052156, 0.01015352, -0.040990137, -0.014431161, 0.020013247, 0.0045508686, 0.015853124, -0.033163466, -0.027569627, 0.002489904, -0.015712103, 0.058617778, 0.015312542, -0.022481116, -0.008226232, -0.0027484428, -0.0138670765, 0.024232129, -0.031800263, 0.027240578, 0.0042188815, -0.0032493614, -0.022986442, -0.035278782, 0.024561178, 0.0041689365, 0.014642692, -0.0076503954, -0.015571081, -0.003713556, -0.01950792, -0.006398833, 0.03513776, -0.02991998, 0.035302285, -0.036759503, 0.024091108, 0.03440915, -0.0060697836, 0.034879223, -0.04359903, -0.036971036, -0.0002895707, 0.014807217, -0.04115466, -0.0320588, 0.023080455, 0.022551626, 0.052036792, 0.034221124, 0.008837323, 0.01997799, 0.033751052, 0.015876627, -0.05377605, 0.035772357, 0.012997446, -0.016722754, 0.042635385, -0.018932085, -0.06717306, -0.03111866, -0.0024091108, -0.033280984, -0.0050209393, 0.04822922, 0.04195378, -0.0071039386, -0.044915225, 0.019449161, -0.025219277, 0.019719452, 0.014090359, 0.017745158, -0.013502772, -0.011034902, 0.007873679, -0.004630193, -0.010000748, -3.006798e-06, -0.0015864875, -0.013279488, 0.040731598, -0.007850176, 0.012186575, 0.0011046653, -0.0024752144, 0.004171875, 0.006210805, 0.0019346334, 0.008167473, -0.0019287575, -0.030296035, 0.016099911, 0.032223325, -0.033962585, 0.004295268, 0.021540975, 0.030178519, 0.013244233, -0.00010218522, 0.022128563, -0.022234328, -0.043058448, 0.033045948, 0.014078608, -0.08071108, -0.013632041, 0.000323357, -0.04500924, -0.038451757, 0.008590536, 0.06125017, 0.0048652287, 0.0059875213, 0.04822922, -0.05283591, -0.005629093, 0.047712144, -0.015124515, 0.012139567, 0.028415754, 0.0019654818, -0.010852749, -0.026041899, -0.00069078314, 0.0053617405, -0.022046302, -0.013890579, -0.04228283, 0.041977286, -0.002204924, -0.017474866, -0.020013247, 0.0023430071, 0.0018758746, 0.017110562, -0.013796566, -0.0047829663, 0.008496522, 0.017815668, 0.015477067, 0.013573282, 0.021552727, 0.07398908, 0.009089986, 0.007186201, 0.060074996, -0.004979808], [0.029307727, 0.02368046, -0.015147684, 0.024805913, 0.048601214, 0.014872063, -0.039069314, 0.0020599817, -0.021383615, 0.0017384236, -0.016778443, 0.040447418, 0.018684823, -0.029583348, -0.0039304737, 0.0467178, -0.016663602, -0.002025529, -0.038058702, -0.04320363, 0.0059717936, -0.06628691, -0.028848357, 0.07469336, -0.0113291815, 0.036841374, 0.01271303, 0.030157559, -0.01135215, 0.011013365, 0.054251447, 0.010737744, 0.06412788, -0.03939087, 0.04246864, 0.004320937, -0.031834252, 0.04070007, -0.04203224, -0.008377737, -0.03380954, 0.001703971, 0.020441908, -0.032523308, -0.0036175288, 0.014711284, -0.037851986, -0.012001009, -0.029032106, -0.0354403, 0.009279248, -0.0093424115, 0.008446643, -0.014504568, -0.025977302, 0.03994211, 0.04306582, -0.1249483, 0.0137925465, 0.0011283244, -0.03911525, 0.024461385, 0.010226697, -0.010800907, -0.020637142, -0.017387107, 0.014826126, 0.0142634, -0.0052368036, 0.008779685, -0.015262526, -0.0074302894, 0.015538148, -0.002645677, 0.012988651, -0.04690155, 0.10197986, 0.0074417735, -0.034039225, -0.03236253, 0.010272633, -0.054159574, -0.0054463907, -0.00903808, 0.053103026, -0.02997381, 0.014814642, -0.088795975, -0.033097517, -0.025839493, 0.0040137344, -0.011909135, 0.009560612, 0.022336805, -0.031696443, -0.012104366, 0.016663602, 0.014711284, -0.013183883, -0.025471997, 0.010875555, -0.0073499, -0.063990064, -0.050346814, -0.014091136, 0.023508195, 0.012483345, -0.019282004, 0.026138082, 0.11603654, 0.030708801, 0.008871559, -0.0022652622, 0.0081136, -0.035302486, 0.010215213, 0.002596869, -0.024070922, -0.028641641, 0.008877301, -0.07983829, -0.020258162, 0.050438687, 0.031397853, -0.032408465, 0.005782304, 0.042284895, 0.056318607, -0.007579584, 0.0024002017, 0.024116859, 0.023485227, 0.05278147, 0.03672653, 0.050943993, -0.017903896, 0.024002017, -0.05374614, 0.0095146755, -0.029169915, -0.046189528, -0.018730761, -0.0047946614, 0.046557024, -0.021957826, -0.0028078915, 0.018857086, -0.028343052, -0.069732174, -0.05774265, -0.018282875, 0.000106498184, -0.027171662, 0.03971243, 0.051403362, -0.0371859, 0.021682205, 0.023473743, -0.013838483, 0.009956817, 0.004745853, -0.08264044, 0.0021762594, 0.027056819, -0.008027469, -0.03305158, 0.057512965, 0.015664475, -0.041274283, 0.029652253, 0.0069479523, -0.002411686, -0.006109604, 0.009629517, -0.014114105, -0.004163029, 0.029836, 0.047682475, -0.0626579, -0.04391565, -0.024668101, 0.071385905, 0.049611825, -0.053883955, -0.015779316, 0.023404837, 0.009589323, 0.028917262, 0.06858376, -0.018145066, -0.0019307842, -0.036910277, 0.005291354, -0.060177304, 0.015963065, -0.06008543, -0.009933849, -0.03206394, 0.01344802, 0.015825253, 0.005210964, -0.033396106, -0.0056071696, 0.038862597, -0.032431435, -0.03261518, 0.05765078, -0.006574715, -0.030777706, -0.015251042, 0.034751244, 0.008090632, 0.012977167, -0.019109739, -0.045087043, 0.019350909, -0.05039275, 0.02997381, -0.030249432, -0.06821626, 0.07721989, -0.031512696, 0.01938536, 0.0011620594, 0.01116266, 0.06297945, -0.0020484976, -0.023048827, -0.01587119, -0.011369376, 0.02528825, -0.04703936, -0.017823508, 0.011518671, -0.058523577, 0.029996779, -0.031489726, -0.002608353, 0.01646837, -0.012529283, 0.039459776, 0.006838852, -0.023772333, -0.012161788, 0.008911754, 0.0817217, -0.0013838484, -0.028733514, 0.000197385, -0.019350909, 0.005897146, -0.04304285, 0.05907482, 0.010519545, -0.022796175, 0.05613486, -0.0055382643, -0.041366156, -0.0010845409, 0.04804997, -0.021142447, 0.06293352, -0.009106985, 0.020683078, -0.010054434, -0.012919746, 0.015262526, -0.05659423, -0.059901685, -0.012460377, 0.033304233, -0.051219616, 0.020258162, 0.013482473, 0.027263535, -0.02393311, 0.066884086, 0.030456148, -0.03380954, 0.04382378, 0.017214844, 0.003985024, 0.00036031735, 0.013459505, 0.053562395, 0.011306213, 0.022956952, -0.031788316, -0.040814914, 0.017593823, -0.005210964, -0.03383251, -0.0007364255, 0.03160457, 0.02330148, -0.0061612832, -0.031489726, 0.003835729, -0.059672, 0.018248424, 0.036611687, -0.013470989, -0.019006383, -0.055353932, 0.00855, 0.04660296, 0.014780189, 0.08760162, -0.00030684395, -0.0027030979, 0.059580125, 0.012288114, -0.018443655, -0.046694834, 0.016617665, -0.02368046, 0.00035744632, 0.0324544, 0.06458724, -0.026620418, -0.045500476, -0.035302486, -0.07189121, -0.008578711, 0.039896175, -0.028044462, -0.004010863, -0.016135328, -0.075520225, 0.00952616, -0.0911847, 0.022922501, -0.0074188053, 0.009440028, -0.04749873, -0.06904312, -0.0025337057, -0.038908534, 0.024668101, -0.0057708197, -0.028457893, 0.024484355, -0.03573889, -0.0089060115, -0.004768822, 0.0053315484, -0.0029686706, -0.01905232, 0.020832373, -0.01805319, 0.0014104056, 0.06996186, 0.03465937, 0.033924382, -0.012357019, -0.041526936, -0.025632776, -0.050668374, -8.653538e-05, -0.012850841, 0.04102163, -0.08038953, 0.025793554, 0.030456148, 0.01587119, -0.08176763, -0.019948088, 0.0071604103, -0.038127605, 0.03293674, -0.009503191, 0.017214844, 0.0051420587, -0.08640726, -0.037874952, -0.0069594365, 0.020843856, -0.030800674, -0.026620418, 0.0065230364, -0.0010220954, -0.025816523, -0.022773206, -0.007401579, -0.0015661604, 0.031260043, -0.044489864, -0.008578711, 0.041940365, -0.023198122, -0.016870318, 0.030479116, 0.015618538, -0.051724922, -0.0045850743, 0.056823913, -0.02175111, 0.0010701856, 0.009750102, -0.00152453, 0.013976294, -0.03394735, -0.0015403208, -0.015274011, 0.04878496, -0.009015111, 0.035302486, -0.006356515, -0.008033211, 0.067573145, 0.00900937, 0.0523221, -0.04717717, 0.024070922, 0.006092378, 0.0054463907, -0.004392714, 0.02687307, -0.023772333, 0.042836137, 0.012138819, -0.037691206, 0.017743118, 0.026482608, 0.0010321442, 0.09026596, -0.07083466, 0.028986167, 0.018041708, -0.04173365, -0.0445358, 0.007631263, 0.034866087, 0.031260043, -0.044306114, -0.088841915, -0.019580593, -0.0899444, 0.008584454, 0.018145066, 0.034429688, -0.007906885, 0.03190316, 0.026804166, -0.03482015, 0.005116219, -0.049152456, -0.02107354, 0.024047954, -0.020556752, -0.04850934, -0.024369512, -0.06853782, -0.0006951541, 0.08140014, 0.024576228, 0.0162272, -0.025012627, 0.026367767, -0.08199732, -0.012379988, 0.029192884, 0.023347417, -0.06274977, 0.028251179, 0.029146947, 0.0053229355, 0.044765484, 0.007395837, -0.014860579, -0.014895031, -0.003155289, -0.08489134, -0.007941337, 0.009043822, -0.029055074, -0.060498863, 0.0053860988, 0.0155266635, -0.018248424, 0.006988147, 0.014630894, -0.0071604103, 0.039069314, 0.02425467, -0.009750102, 0.0075681, 0.0024920756, 0.039207123, -0.034774214, -0.03351095, 0.061279792, -0.017077032, -0.002608353, 0.0021820015, -0.04437502, 0.005041572, -0.06821626, -0.017226327, 0.017524919, 0.033740636, 0.011128208, 0.03364876, 0.052230228, 0.022210479, -0.0010744922, -0.03438375, -0.048876833, -0.014435663, 0.018087644, 0.023496712, -0.0293996, -0.06385226, -0.0013558556, -0.006660847, 0.032086905, -0.010531029, 0.029790062, 0.032821897, -0.01050806, -0.02397905, -0.014653863, -0.05466488, -0.009129954, -0.032569245, 0.02496669, 0.029560378, 0.00060794584, -0.02687307, -0.043708935, -0.0023025859, -0.016617665, -0.04731498, -0.016296105, -0.0207405, -0.03236253, 0.022279384, 0.026482608, -0.038724784, 0.035807792, -0.0034940734, 0.068491876, 0.0059660515, -0.009290732, -0.035049837, 0.035164677, 0.014814642, 0.00389315, -0.020487847, 0.013436535, -0.058707327, 0.03629013, -0.016962191, 0.040814914, -0.0048606955, -0.007108731, -0.048739024, -0.05337865, 0.013895905, 0.0023427806, 0.025035597, 0.0109846555, 0.05719141, 0.06775689, -0.0010321442, -0.04037851, 0.012357019, 0.012092882, 0.0010177889, 0.028388988, 0.02588543, 0.024759976, -0.0075393897, -0.03429188, 0.0031409338, 0.042560514, -0.0138844205, -0.029123979, -0.0026040466, 0.002365749, -0.015859706, 0.0062933518, 0.012138819, -0.0684, 0.000944577, 0.021682205, -0.01418301, -0.015779316, 0.004734369, 0.023163669, -0.0011613416, 0.03307455, 0.0037151447, -0.012667093, 0.012506314, -0.0053832275, 0.011989525, -0.00015862577, 0.000108920634, 0.017237812, 0.028848357, -0.00587992, -0.0009732875, 0.02981303, -0.043134727, -0.005920115, 0.018914508, -0.05732922, -0.016939223, 0.023795301, -0.018776698, 0.0074819685, -0.002504995, -0.046648897, -0.006459873, -0.045362663, -0.028113367, 0.038518067, 0.021406583, 0.0114210555, 0.03482015, 0.014860579, 0.04143506, -0.065322235, 0.0040711556, 0.050163068, -0.010197986, 0.030800674, -0.0043467768, -0.03231659, 0.0047142715, 0.0059545673, -0.022635395, -0.020912763, -0.0067297523, 0.009061049, 0.007504937, 0.035669982, -0.036060445, 0.004831985, 0.002687307, 0.023163669, 0.0031208363, 0.026964946, -0.024759976, -0.047269043, 0.031719413, -0.0059603094, 0.05833983, -0.03571592, -0.011610545, 0.015411821, 0.010106113, 0.028136335, 0.011690934, -0.03057099, 0.01747898, 0.004257774, -0.008067664, 0.03190316, 0.011076529, -0.012690062, -0.020947214, 0.00094673026, 0.015365885, -0.016675085, -0.053470522, -0.019971056, -0.016721021, 0.018041708, 0.060498863, -0.05245991, -0.05200054, -0.015078779, -0.07441774, -0.026138082, 3.4833967e-05, 0.08167576, -0.025862461, -0.013160914, -0.011742613, -0.02675823, 0.029284757, -0.0062129623, 0.00034811537, 0.00017387824, -0.007309705, 0.0077403635, -0.055537682, -0.013493957, 0.0037696948, -0.05218429, -0.007556616, 0.020866824, -0.001363751, 0.013252788, 0.041090533, -0.053240836, 0.002398766, 0.038311355, -0.0144012105, -0.020131836, -0.014274884, 0.004550622, 0.016502822, 0.014527537, 0.0044300375, 0.00838348, -0.020648625, -0.050025254, 0.021257289, -0.012311082, 0.00064311625, 0.049611825, 0.026964946, 0.024943722, -0.009508933, 0.0062301885, -0.07336119, 0.021062057, -0.005779433, -0.0146653475, -0.007148926, -0.018030223, 0.0069709206, -0.042973947, -0.0018834119, -0.00988217, 0.050668374, -0.0033763603, 0.016376495, -0.032109875, 0.020258162, -0.0026600321, -0.0064656152, -0.02820524, 0.015882675, -0.019695435, 0.020453393, 0.017812023, -0.025747618, -0.02469107, -0.027401345, -0.045247823, 0.00683311, -0.0056071696, 0.021211352, -0.015664475, -0.026413703, 0.0012259403, 0.0019293487, 0.017134454, 0.058247957, 0.013804031, -0.008636133, 0.023864206, 0.0009826184, -0.020820888, 0.017157422, -0.01053677, -0.0059086303, 0.0018116354, 0.013861452, -0.027240567, -0.0035543656, 0.01047935, 0.027768841, -0.048555277, 0.013585831, 0.026850102, -0.013034588, 0.051495235, -0.0043726163, -0.016158296, 0.015894158, -0.020648625, 0.015538148, -0.0028437797, -0.051633045, -0.020384489, -0.01581377, 0.002183437, -0.03337314, -0.023267027, 0.023772333, -0.005368872, -0.00023219654, -0.020131836, -0.011943587, 0.0033189391, 0.0032529049, 0.008940464, -0.012977167, -0.010588449, 0.030961454, -0.017352654, 0.04791216, 0.014539021, 0.026115114, 0.012001009, -0.008130827, -0.043157693, -0.004309453, 0.026390735, 0.008079148, -0.010324312, 0.014539021, -0.034866087, -0.04777435, 0.0088658165, 0.042284895, 0.004102737, 0.024737006, 0.012667093, 0.0042261924, 0.058431704, 0.024576228, 0.009704165, -0.01837475, 0.022933984, -0.0035945603, -0.0071661524, 0.019660981, -0.03323533, 0.020350035, 0.06647066, 0.008280122, -0.028963199, -0.025334187, 0.0069594365, -0.060452927, -0.05085212, -0.015147684, 0.018719276, 0.031099264, 0.0041429317, -0.039758366, 0.004398456, 0.016916255, -0.00805618, -0.016353527, -0.008917496, -0.00841219, 0.021176899, -0.03939087, 0.054021765, 0.013402083, -0.0057478514, -0.0018532658, -0.016261654, 0.040125858, 0.033028614, -0.0024892043, 0.011581834, -0.008567227, -0.035095774, -0.029790062, 0.050898056, -0.012173272, 0.007935595, 0.028457893, 0.010858329, 0.028297115, -0.020855341, 0.0142634, 0.0111569185, -0.03305158, -0.07414211, -0.033878446, -0.070742786, -0.020384489, 0.0020886923, 0.017031096, 0.049519952, 0.010278376, -0.0389315, 0.008532775, -0.024599196, -0.003051931, -0.014240431, 0.020074414, 0.053103026, -0.016583212, -0.01793835, 0.00639671, -0.041503966, 0.024415448, -0.03819651, -0.02866461, 0.040056955, -0.001391026, -0.009560612, -0.017570855, 0.028894294, 0.0011584705, 0.033694696, -0.021601815, -0.045316726, -0.03808167, -0.0089060115, 0.0108525865, -0.0008792605, 0.0038213737, -0.017398592, 0.020533783, -0.017754601, 0.0022767463, 0.012104366, -0.016009001, -0.002784923, -0.035486236, 0.018937476, 0.025311219, -0.022922501, 0.02703385, -0.04336441, -0.014217462, -0.014171526, -0.012230692, -0.024897786, -0.0075393897, 0.0015905643, -0.0004561388, 0.052643657, -0.011616287, 0.0095146755, 0.0027231954, 0.032982677, 0.047820285, -0.04582203, 0.004797532, 0.020246677, 0.021395098, 0.0044386503, -0.014539021, -0.015423305, -0.009589323, 0.0112487925, -0.011403829, 0.009198859, -0.0012668528, 0.07763332, -0.002411686, -0.038678847, -0.02703385, -0.027424315, -0.003680692, -0.0046970453, 0.011059303, -0.060361054, -0.01565299, 0.019592077, -0.020901278, -0.0061727674, -0.02779181, -0.006149799, 0.020384489, 0.052735534, -0.02689604, 0.03955165, 0.04380081, -0.04772841, 0.010594192, -0.01271303, 0.0052827406, 0.013700672, 0.027240567, -0.0233589, 0.0058655646, 0.03215581, -0.03619826, -0.010427671, -0.0034768472, 0.00033358065, 0.021280257, 0.011266018, 0.021509942, -0.00639671, -0.0037553394, 0.03160457, 0.016181264, -0.028963199, 0.008779685, 0.004458748, -0.0018719276, -0.04818778, 0.0036404973, 0.05599705, 0.027699936, -0.0071718944, 0.020510815, -0.06890531, 0.005311451, 0.054756753, -0.0077518476, -0.0031926127, 0.028388988, 0.0044788453, 0.009084017, -0.020843856, 0.030662864, -0.02409389, 0.0027806165, 0.02368046, -0.02894023, 0.039804302, 0.020051446, -0.02997381, -0.023278512, -0.022141574, 0.0142634, -0.003043318, 0.007935595, -0.0009955382, 0.007154668, 0.0328908, 0.01091575, 0.008745233, 0.0028121981, 0.10243923, 0.031030359, -0.0062876097, -0.0034883313, -0.012655609], [0.0029806716, -0.0054345396, -0.023779863, 0.0015640338, 0.02118133, 0.026116362, -0.065203555, 0.021705404, -0.012010032, 0.015831407, -0.03926189, 0.012850734, 0.019423498, -0.030003244, 0.0072715287, 0.03447971, -0.009012983, -0.0064417445, -0.012807062, -0.067474544, -0.006452663, -0.055595532, -0.08503103, 0.05742979, -0.0061305757, 0.031881176, -0.010143018, 0.012959917, -0.056381643, 0.0072660698, 0.04384754, 0.008619928, 0.051621303, -0.020635419, -0.010890916, -0.0063434807, -0.0067474544, 0.05603226, -0.058652632, -0.018757487, -0.02899877, -0.0062943487, -0.0026039935, -0.029915899, -0.038650468, 0.025548615, -0.02539576, 0.01489244, 0.009204052, -0.03913087, -0.0053635715, -0.028452858, 0.015907833, -0.03022161, 0.005819407, 0.010716224, 0.044895686, -0.064417444, 0.015427433, -0.014204593, -0.03364993, 0.058128558, 0.016868636, -0.02716451, -0.0060213935, -0.004539246, -0.00049302547, 0.040921457, 0.007331579, 0.000994922, -0.034567058, 0.016955983, -0.012359415, -0.016693946, -0.0068948506, -0.06585865, 0.08869955, 0.038825158, -0.029915899, -0.015438351, -0.045376085, -0.028976932, 0.0037012736, -0.0063271034, 0.059002016, -0.01178075, 0.041052476, -0.07970294, 0.010705306, -0.03240525, 0.0012064624, 0.0032563566, 0.027513893, 0.010088427, -0.044589974, 0.010497861, 0.0070040324, 0.022928244, -0.038301084, -0.03155363, -0.015340087, -0.015820488, -0.0582159, -0.032710962, 0.021814587, 0.017228937, 0.041292675, 0.001654109, 0.007746471, 0.06729986, 0.02417292, -0.018102394, -0.0051261, -0.005792111, -0.06585865, 0.05262578, 0.02947917, -0.0862102, -0.050835192, 0.016955983, -0.07773767, -0.022054788, 0.06188442, 0.042515516, -0.043367136, -0.006168789, 0.054198, 0.020668173, -0.021257758, 0.010519696, 0.004146191, 0.028452858, 0.05127192, 0.053630255, 0.080489054, -0.026967982, 0.024216592, -0.023910882, -0.010716224, 0.010110264, -0.037296608, -0.017862193, -0.026422072, 0.025373923, -0.044240594, -0.012676043, -0.020744601, -0.021312349, -0.078567445, -0.052538432, -0.008581714, -0.015602124, 0.0235615, 0.031946685, 0.04576914, -0.03533133, 0.021017557, 0.03755865, 0.0051179114, 0.015722224, 0.036903553, -0.11346205, 0.002735012, 0.0032863817, 0.041882258, -0.029522844, 0.062233806, -0.011453204, -0.09835125, 0.03631397, -0.005732061, -0.007025869, -0.009531599, -0.004975975, -0.035789896, -0.008701814, 0.04314877, 0.03589908, -0.020307872, -0.050529484, -0.021683568, 0.029348152, 0.03943658, -0.04402223, 0.009444253, 0.021628976, 0.020286037, 0.0063434807, 0.0709247, -0.026487581, -0.0266186, -0.028605714, -0.045332413, -0.052756798, -0.014215511, -0.0511409, -0.053193524, -0.06262686, 0.019947572, 0.027317366, 0.0022764471, -0.064286426, -0.019128706, 0.047559727, -0.032317907, 0.0041980525, 0.028736733, 0.012468597, 0.0041107065, -0.013047262, 0.012097378, 0.03443604, 0.00775193, -0.022360496, -0.012053706, 0.0136040915, -0.062495843, 0.036947228, -0.01959819, -0.02069001, 0.057473466, -0.03491644, 0.030243445, 0.0012098743, -0.01257778, 0.052232724, 0.010334087, -0.008783701, -0.053018834, 0.009373285, 0.06061791, -0.042995915, -0.019128706, -0.0027418358, -0.040048, 0.0076209116, -0.02587616, 0.014499385, 0.051795993, -0.023364972, 0.028562041, 0.029653862, -0.034588892, 0.0015763168, -0.0045556235, 0.07882948, 0.029763045, -0.02264437, -0.039458416, 0.0012842546, 0.01489244, -0.04015718, 0.030854866, 0.023212118, 0.018779324, 0.0402882, -0.016268134, -0.027492056, 0.023692518, 0.030025082, 0.0032181428, 0.04895726, -0.022600697, 0.014990704, 0.033846457, -0.023364972, 0.019063197, -0.02112674, -0.05096621, -0.026050853, 0.055289824, -0.020482564, 0.018200658, 0.040615745, 0.016508335, -0.03052732, 0.085118376, 0.012948998, -0.0669068, 0.04716667, 0.022753552, -0.0004920019, -0.0037640533, 0.012119215, 0.036597844, 0.009760881, -0.017774848, -0.0035620665, -0.04395672, 0.00909487, -0.004563812, -0.03821374, 0.027426546, 0.024587812, 0.03681621, 0.016027935, -0.0008686802, 0.041030638, -0.04956868, 0.015121723, -0.010819947, 0.0058303247, 0.00598318, -0.032448925, -0.007495352, 0.03917454, 0.031182412, 0.03790803, -0.011333103, -0.04786544, 0.056731027, 0.0059176707, -0.049787045, -0.06987655, 0.01983839, -0.016639354, -0.014717749, 0.029260807, 0.06537825, -0.031793833, -0.012555943, -0.045856487, -0.075160965, -0.012785225, 0.02441312, -0.01117479, 0.013167363, -0.023779863, -0.06262686, 0.025373923, -0.046729945, -0.02417292, -0.04555078, -0.033431564, -0.055289824, -0.073108345, -0.030505482, -0.02947917, 0.022054788, -0.06603334, -0.0836335, 0.0051288297, 0.0053799488, -0.03943658, -0.005939507, -0.012010032, -0.009820931, -0.007118674, 0.005835784, -0.027317366, 0.0012740188, 0.07149245, 0.028911423, 0.067430876, 0.034741748, -0.029763045, -0.05245109, -0.045376085, 9.724032e-05, 0.0066983225, 0.06952717, -0.077868685, -0.00016650272, 0.013134608, 0.0031362562, -0.024129247, -0.049350314, -0.012807062, 0.0010379124, 0.03773334, -0.025723306, 0.020646337, 0.01874657, -0.07620911, -0.012992672, 0.013986229, 0.054066982, 0.0061742486, -0.008123149, 0.002281906, -0.01477234, -0.05310618, -0.009635322, -0.0071022967, 0.020700928, 0.021388777, -0.020318791, 0.011387695, 0.03998249, -0.031116903, -0.019685535, 0.043672845, 0.008538041, -0.021563467, 0.019751044, 0.065946, -0.02203295, 0.011054689, -0.0013538582, -0.007380711, -0.0056720106, 0.049481332, 0.008330596, -0.0050878865, 0.009908277, -0.01812423, 5.4249864e-05, 4.237204e-05, 0.015307332, 0.07612177, -0.0019816554, 0.013200117, -0.015121723, 0.047035653, 0.015984261, 0.023277627, 0.0068839323, 0.055202477, -0.03600826, 0.0069276053, 0.0074080066, 0.0006069843, 0.016311808, 0.018975852, -0.0053744894, 0.028059803, -0.03437053, 0.04260286, -0.012905326, -0.012665126, -0.008505287, 0.0052462006, -0.0036248462, -0.015482023, -0.04620587, -0.09040279, -0.03284198, -0.06760556, -0.010841784, 0.010137559, 0.0035320413, -0.015449269, 0.042384498, 0.05183967, -0.03814823, -0.045245066, -0.044589974, 0.00042546904, 0.016879555, -0.03192485, -0.036095608, -0.0012542296, -0.07917887, -0.010366841, 0.06629538, 0.018397186, 0.013440318, -0.016835881, 0.05328087, -0.09049013, -0.0042444547, 0.003351891, 0.062233806, -0.044109575, 0.005030566, 0.010836325, -0.02240417, 0.07629646, -0.0060814437, 0.0025248365, 0.019303398, 0.0013115501, -0.03100772, 0.012730635, -0.010716224, -0.0431051, -0.024849849, 0.016213544, 0.03052732, 0.0017660207, -0.024151083, 0.015427433, 0.01812423, 0.038846996, 0.015711306, 0.0168468, 0.011747995, -0.005819407, 0.0537176, 0.0014043549, -0.0043126936, 0.013189199, 0.024107412, -0.027492056, -0.013080018, -0.043716516, -0.0054672942, -0.054110654, 0.0023051074, 0.0076482072, 0.039021686, 0.0063161855, 0.02325579, 0.05633797, 0.026181871, -0.012370333, -0.022011114, -0.02221856, -0.007806521, -0.009602567, -0.026662271, -0.030418137, -0.046598926, 0.022087542, -0.007992131, 0.015252741, 0.008385186, 0.027230019, -0.00787749, 0.0168468, -0.024740666, -0.0017141592, -0.036510497, -0.0003067335, -0.011142035, 0.01844086, 0.012130133, 0.00027432005, 0.0071568876, -0.03749314, -0.0084234, -0.033540744, -0.0669068, -0.0150452955, 0.0039824178, -0.0402882, 0.03515664, 0.027033491, -0.044655483, 0.043017752, -0.04087778, 0.056687355, -0.01922697, 0.014248266, -0.004804013, 0.05402331, 0.0053608418, 0.012686961, -0.006681945, 0.020417055, -0.046293218, 0.022426005, -0.022535188, 0.02777593, -0.014783259, -0.031095065, -0.050704174, -0.018648304, 0.02039522, -0.009695372, 0.015536615, 0.019892981, 0.086952634, 0.054853093, -0.023124771, -0.03869414, 0.02557045, 0.019401662, -0.008505287, 0.029042441, 0.032863814, 0.014237348, -0.0054236213, -0.026356563, -0.04094329, 0.027142674, -0.017185265, -0.022447843, 0.01837535, 0.0053881374, -0.013200117, -0.00039612636, 0.013756947, -0.06328195, 0.015099886, 0.010388678, -0.0012412642, -0.022000195, -0.017556483, 0.026334725, -0.00390872, 0.033344217, 0.0019434416, -0.044764668, 0.013931638, 0.019751044, 0.016955983, 0.021770913, -0.02082103, 0.03375911, 0.0056228787, 0.010181232, 0.022600697, 0.013374809, -0.019936655, -0.0377115, 0.0050878865, -0.069483496, 0.013473073, 0.016835881, 0.009684454, 0.00060289, 0.04651158, -0.030265281, 0.027230019, -0.012566862, 0.0058630793, 0.0407686, 0.027317366, 0.018178822, 0.046293218, 0.028867751, 0.09852594, -0.030985884, 0.0169669, 0.059133034, 0.029501008, 0.029391825, -0.013232872, -0.02587616, -0.0089420155, -0.0050851568, -0.023670683, -0.060399543, -0.014008065, 0.021530712, 0.03161914, 0.06301992, -0.011900851, 0.0057538976, -0.0105087785, 0.009482467, 0.0121628875, 0.047210347, -0.03491644, -0.035418678, 0.0567747, 0.019805636, 0.05092254, -0.033497073, -0.042886734, 0.0070040324, -0.006720159, 0.05232007, -0.023605173, -0.012108296, -0.02587616, 0.02155255, -0.028955096, 0.019936655, -0.009771799, -0.02386721, -0.009859145, 0.0024757045, -0.011616977, -0.0021208625, -0.0075171883, -0.020646337, 0.01727261, 0.0336936, 0.08498736, -0.024107412, -0.0664264, -0.034108493, -0.0749426, -0.026705945, -0.012370333, 0.058565285, -0.03838843, 0.009547976, -0.0139425555, -0.040266365, 0.0100829685, 0.000682047, -0.034195837, -0.0057375203, -0.013582255, -0.00763183, -0.042864896, 0.0073097423, 0.02288457, -0.04729769, -0.0025917103, 0.040637583, 0.008548959, -0.017545566, 0.008205036, -0.038541287, 0.009880981, 0.0303963, -0.014018984, -0.0034392367, -0.005330817, 0.019641861, 0.017753012, 0.041707568, -0.015067131, 0.001587235, -0.04338897, -0.038737815, 0.0036794373, 0.007184183, 0.026029015, 0.05336822, 0.0056174197, 0.024282102, -0.026596762, 0.022087542, -0.066120684, 0.021268675, -0.0034501548, -0.006610977, -0.00020522825, -0.044327937, -0.007375252, -0.04620587, -0.005628338, -0.010596124, 0.0070913783, -0.0039414745, 0.019325234, -0.019194216, 0.015722224, -0.003229061, -0.025133723, -0.04321428, -0.026160035, 0.03022161, 0.06970186, 0.013047262, 0.010514238, -0.01062342, -0.04555078, -0.049131952, 0.012381252, 0.01764383, 0.054285347, -0.0070531643, -0.012282988, -0.010121182, -0.022426005, -0.007222397, 0.038170066, -0.0031662814, -0.008046722, 0.051490285, -0.004798554, -0.010765356, 0.010099346, -0.038475778, -0.0024511383, 0.03437053, -0.014543057, -0.025068212, 0.025592288, 0.0136040915, -0.02197836, -0.040419217, 0.014925195, 0.017283529, -0.0049268426, 0.047472384, -0.013342055, -0.006075985, 0.0018315299, -0.02936999, 0.040397383, -0.017108837, -0.048127476, -0.021072147, -0.0017933162, -0.019456252, -0.039327398, -0.025766978, 0.028343678, -0.000799759, -0.010235823, -0.0083524315, -0.0117370775, -0.020548074, 0.010148478, 0.0057429792, 0.010694388, -0.0111474935, 0.045681797, -0.058390595, 0.02716451, -0.014401121, 0.0028496531, 0.021683568, -0.010203068, -0.03993882, -0.0056665516, 0.04865155, -0.010492401, -0.053804945, -0.0124140065, -0.008385186, -0.03926189, 0.034981947, 0.01917238, 0.028343678, 0.00927502, 0.00024651273, -0.015492942, 0.06546559, 0.011649732, 0.016584763, 0.0075117294, 0.009526139, 0.029042441, -0.014215511, -0.0005919718, -0.045376085, -0.014128165, 0.040855948, 0.003826833, -0.024063738, 0.00038316098, -0.013647764, -0.031793833, -0.042799387, -0.03838843, 0.04456814, 0.045332413, -0.0050824275, -0.04546343, 0.010579747, 0.019620026, -0.019041361, -0.0023897234, -0.007757389, -0.014990704, 0.007893867, -0.028758569, 0.049787045, 0.012468597, 0.013232872, 0.016006097, 0.005306251, 0.0775193, -0.022185806, 0.04083411, 0.005420892, 0.0014507574, -0.03834476, -0.005257119, 0.026160035, -0.027492056, 0.032579944, 0.020198692, 0.037886195, 0.0010508779, -0.024107412, 0.018331677, -0.010579747, -0.013527663, -0.063500315, -0.006987655, -0.05175232, -0.025788816, 0.0034774502, 0.022076624, 0.04480834, 0.032929324, -0.03596459, 0.010224905, -0.017796684, 0.01531825, -0.013473073, 0.0036057392, 0.024587812, -0.0230811, 0.015307332, -0.00579757, -0.042821225, 0.03710008, -0.033671763, -0.021945605, 0.0049896226, 0.008297841, -0.013167363, 0.003979688, 0.0010188055, 0.036641516, 0.01458673, -0.028845914, -0.026946146, -0.014848768, 0.023779863, -0.012676043, 0.006616436, -0.009777258, -0.027099, 0.02032971, 0.0035211232, 0.018113313, 0.008401563, -0.010847243, 0.028125312, -0.01703241, 0.01208646, 0.010825407, -0.030418137, 0.04707933, -0.009018443, 0.008898342, -0.013691437, 0.02032971, 0.006037771, 0.01691231, 0.020624502, -0.003925097, 0.061753403, -0.016584763, 0.022840898, 0.03209954, 0.0111474935, 0.026356563, -0.00071446045, 0.002515283, 0.0077355527, 0.009935573, 0.018626468, 0.007981213, -0.0035183935, 0.019150542, 0.03284198, -0.033846457, 0.005330817, 0.03386829, 0.06769291, -0.011475041, -0.023648845, 0.015514778, -0.026705945, 0.001458946, 0.028518368, 0.0010890915, -0.01208646, -0.025810651, 0.014488466, -0.00035415948, -0.0006144906, -0.022578862, 0.021530712, -0.0010235823, 0.008740028, -0.014717749, 0.05262578, 0.020962967, -0.0306365, 0.010039295, 0.0051670433, 0.0062943487, -0.010809029, 0.023779863, -0.023954555, -0.009302316, 0.012872571, -0.03535317, -0.038104557, 0.027754093, -0.004951409, 0.020984802, 0.015831407, 0.027011655, -0.022622533, 0.00051315594, 0.02081011, 0.03851945, -0.011879014, -0.006458122, -0.027230019, -0.02056991, -0.052232724, 0.016191708, 0.031182412, 0.0106834695, -0.008314218, 0.023386808, -0.054285347, -0.0086417645, 0.055813897, 0.0014343801, 0.0036630598, -0.005333546, -0.008963851, -0.0036166576, 0.0006557751, 0.027513893, -0.03192485, 0.006862096, 0.006922146, -0.03583357, 0.03535317, -0.020471646, -0.015831407, -0.015711306, -0.02502454, 0.013287463, -0.021585304, -0.024369448, 0.0028305463, 0.04218797, 0.044458956, -0.005682929, -0.021738159, -0.013713273, 0.04225348, 0.009231348, 0.0004455995, 0.00067181117, 0.009930113], [-0.021160426, -0.07596693, -0.019618522, -0.009909547, 0.015857782, -0.0033188523, -0.0206966, 0.014403631, 0.003826552, 0.0099534225, -0.0029396443, 0.032367427, -0.009289025, -0.0368051, -0.02039574, 0.026049385, -0.036905386, -0.027403252, 0.022790078, -0.046934023, -0.01691079, -0.06799416, -0.05505722, 0.0073773162, 0.029609552, 0.019806558, 0.0026904955, 0.013388231, -0.03394694, 0.030537201, 0.013751769, -0.008417788, 0.058617387, -0.041092344, 0.008969363, 0.0017973199, 0.002782947, 0.057514235, -0.036604527, -0.032166854, -0.005321446, -0.03803361, -0.008455395, -0.03432301, -0.02320376, -0.0091574, -0.016885718, -0.0013703193, 0.012360295, -0.07165462, 0.0039205705, -0.026525745, -0.019568378, -0.012874263, -0.041092344, 0.014428702, 0.034498513, -0.07962738, 0.009176203, -0.003763873, -0.044251364, 0.00888788, 0.00630864, -0.0014416167, -0.018665802, -0.010429783, 0.004616307, 0.025460204, 0.027754255, 0.06724201, 0.009094721, 0.019768951, 0.025121737, -0.022827687, 0.0019179769, -0.03582731, 0.09201275, 0.023604905, -0.049967688, -0.0083425725, -0.019781487, -0.015506781, -0.0042997785, -0.001107851, -0.0017409088, -0.009326633, 0.04309807, -0.12044393, -0.06042254, 0.0045975037, -0.0002863646, -0.026525745, 0.032944076, 0.010392176, -0.04059091, 0.0072268867, -0.0013162587, 0.0076844436, -0.028882476, 0.0036197114, -0.02225104, -0.0103169605, -0.050594475, -0.05540822, 0.04590609, 0.007088993, 0.019330198, 0.026149672, -0.0024491814, 0.11663305, 0.035025015, -0.0054530716, -0.012084508, 0.013475982, -0.022163289, 0.06904717, -0.030662559, -0.050694764, -0.021887502, 0.039863832, -0.13508575, -0.000832847, 0.038785756, 0.03632874, -0.020270383, 0.008254822, -0.055809367, 0.0051584803, 0.014541524, 0.010398444, -0.008041713, 0.03540109, 0.07536521, 0.015506781, 0.049842328, -0.0071704756, 0.07260734, -0.002157724, -0.013162587, 0.0021216837, -0.025522882, 0.0068006697, -0.020408276, 0.032944076, -0.040039334, 0.0023175555, -0.025146808, -0.0045787, -0.048513535, -0.0061989515, 0.011802453, -0.013037229, 0.01598314, 0.025146808, 0.056210514, -0.010373372, 0.03384665, 0.029208407, -0.03164035, 0.012654887, -0.00630864, -0.03304436, 0.03126428, 0.030938346, 0.010342033, -0.07962738, 0.05550851, -0.008668504, -0.06167612, 0.035952665, 0.026400387, -0.0027422055, 0.014215593, -0.013087372, -0.049491327, 0.027503539, 0.038484897, 0.034247797, -0.07035089, -0.0413932, -0.028907547, 0.058466956, 0.03587745, -0.06418328, -0.008593288, 0.021900037, 0.051045764, 0.019856703, 0.049466252, -0.05219906, -0.0196812, -0.004378127, -0.011909007, -0.052800775, -0.026977034, -0.04267185, -0.02368012, -0.06368185, -0.027729183, 0.008417788, 0.008480467, -0.05400421, -0.012335224, -0.019280056, -0.024494948, 0.029057978, 0.02770411, -0.00029654993, 0.0044031986, -0.0041618845, 0.040039334, 0.015105635, 0.004255903, -0.004450208, -0.023855621, 0.017813368, -0.03397201, 0.02547274, -0.00630864, -0.046507806, 0.048363104, -0.025723455, 0.028882476, -0.007295834, 0.028832333, 0.0371561, 0.035576593, 0.025309773, 0.014027556, -0.0009981628, -0.004249635, -0.056762088, -0.015005349, 0.0123540275, -0.03399708, 0.020019667, -0.034197655, 0.021198032, 0.060823686, 0.006512346, -0.0030117251, 0.00888788, -0.052148916, 0.010342033, 0.008273626, 0.045705516, 0.009270222, -0.055709083, -0.03575209, -0.013099908, -0.023993514, 0.010636624, 0.021599177, 0.04658302, 0.005368455, 0.04896482, -0.018540444, -0.046206947, 0.012222402, 0.026475603, -0.028230615, 0.0456303, -0.04264678, 0.078323655, -0.024745664, -0.03535095, 0.03931226, -0.020859566, -0.034498513, -0.021523964, 0.06623915, -0.06854574, 0.0027469064, -0.006111201, 0.037030745, 0.013425838, 0.0717549, 0.02517188, -0.031891067, 0.042847354, 0.02627503, 0.018678337, 0.03146485, -0.0025228292, 0.0413932, -0.011357432, -0.00065107795, -0.045254227, -0.020759279, 0.012936942, -0.016158642, -0.031690493, -0.0056912517, 0.023843085, 0.061926838, 0.013363159, 0.032317284, -0.019480629, -0.033796508, 0.012673691, -0.0033094503, -0.0049485057, -0.029484194, -0.019292591, 0.012510725, 0.052048627, 0.039136756, 0.10169038, -0.02925855, -0.045855943, 0.03853504, 0.0024538822, -0.026826605, -0.03620338, 0.021022532, -0.023955908, 0.0018568649, 0.022802614, 0.08775058, -0.035075158, -0.0021890635, -0.055608794, -0.090759166, 0.013375695, 0.00703885, 0.02541006, 0.021047603, -0.024469875, -0.04751067, 0.021373533, -0.033921868, 0.00739612, -0.014391094, -0.022614578, -0.03487459, -0.05977068, -0.0051553464, -0.038459826, 0.06197698, -0.019844167, -0.026550818, 0.034548655, -0.040039334, -0.056561515, 0.018954124, -0.04578073, -0.014729561, -0.0014839249, 0.032467715, 0.013588804, 0.0015826443, 0.044126004, 0.032693356, 0.020057274, 0.03853504, -0.015795104, 0.01864073, -0.033771437, 0.00430918, -0.0065186145, 0.027779326, -0.08589528, 0.04219549, 0.039287187, -0.013638947, -0.07421192, -0.01109418, 0.027277894, -0.021210568, 0.034247797, -0.04941611, 0.02019517, -0.06533657, -0.040139623, -0.034247797, -0.04354936, 0.05365321, -0.0024742528, -0.02341687, 0.033796508, -0.034122437, -0.028305829, -0.021423677, 0.012134652, 0.01714897, -0.0092827575, -0.036454096, 0.034022152, 0.051647484, -0.027954826, -0.010881072, 0.0033219862, -0.0115015935, -0.008869076, 0.035300802, 0.037807964, -0.036704812, 0.0042778407, -0.03146485, -0.02037067, 0.007659372, 0.0033595935, -0.004127411, 0.02179975, 0.04452715, 0.0074901385, 0.022163289, -0.017424757, 0.013927271, 0.0123791, 0.0115015935, 0.020069811, -0.031364564, 0.021310855, 0.028105257, 0.05234949, 0.021461284, 0.04813746, 0.0016022315, 0.02173707, 0.016622467, -0.013576268, 0.009746582, 0.020884637, -0.00999103, 0.03993905, -0.0349498, 0.002966283, 0.0393624, -0.032818716, -0.009489598, 0.009740314, -0.0041023395, -0.0183148, -0.02910812, -0.09537234, -0.0019070081, -0.0039989194, -0.026951963, 0.048087317, 0.020345598, 0.002953747, 0.017951261, 0.05320192, -0.043975577, -0.005500081, -0.04768617, 0.009640028, -0.013826984, -0.031891067, -0.05696266, -0.012999621, -0.08118182, -0.019568378, 0.07315891, -0.02863176, 0.016334143, -0.019229913, 0.028230615, -0.07215605, 0.0038046143, 0.047736313, 0.056611657, -0.041794345, -0.011589345, -0.033420436, -0.0074901385, 0.070200466, 0.009063381, 0.022777542, -0.016710218, 0.023040794, -0.05871767, 0.030938346, 0.01088734, -0.039688334, -0.021887502, -0.003274977, 0.032191925, -0.029434051, -0.012611012, -0.0002885192, 0.024081266, 0.038284324, 0.031565137, 0.011752309, 0.015093099, 0.009577349, 0.015707353, -0.024206623, -0.004136813, 0.04999276, 0.023404332, -0.010774517, -0.013613875, -0.042872425, -0.015318744, -0.029659696, 0.01902934, 0.028506402, 0.0060015125, 0.0129620135, 0.045655373, 0.046532877, 0.012516993, -0.012385367, -0.0083112335, -0.015042956, 0.0017973199, -0.0035037552, -0.011526665, -0.038158964, -0.052901063, -0.01589539, -0.047911815, 0.0049203, 0.010774517, 0.014604203, 0.02022024, 0.0029850865, -0.0047322633, -0.0249337, -0.025999242, 0.00035550736, -0.0279799, 0.007828605, 0.01246685, 0.024093801, -0.044251364, -0.019430485, -0.0371561, -0.010536337, -0.0059388336, 0.022990651, 0.007759658, -0.036905386, 0.017913654, 0.009909547, -0.02430691, 0.03978862, 0.029609552, 0.07962738, -0.01649711, -0.0057069217, -0.034573726, 0.04184449, 0.019906845, -0.00975285, -0.031840924, 0.047159668, -0.039086614, 0.0077408548, -0.0035225588, 0.013576268, 0.0035852378, -0.027378181, -0.023567298, -0.03886097, -0.0034786835, 0.00703885, 0.012003025, 0.016108498, 0.06272913, 0.029910412, -0.033771437, -0.0033564596, 0.044577293, 0.021348462, -0.0113198245, 0.011119252, 0.024394661, 0.02472059, -0.025284702, -0.03254293, -0.021448748, 0.073209055, -0.0028675636, -0.04861382, 0.00025404576, -0.040039334, -0.041744202, 0.004494083, 0.02179975, -0.013852055, 0.027553681, 0.02767904, 0.007258226, -0.031189062, -0.04029005, 0.0044063325, -0.015343815, 0.03946269, 0.0016938995, -0.0129620135, -0.010442318, -0.013375695, -0.004694656, 0.012122115, 0.028355973, 0.010454855, 0.023316583, 0.009596152, 0.014165451, 0.023742799, -0.022163289, -0.00054961635, 0.02108521, -0.0366296, 0.039613117, 0.029233478, -0.061224833, -0.023128545, 0.054154642, -0.050769977, 0.020408276, -0.035125304, 0.021874966, 0.0768695, -0.0076781753, 0.032843787, 0.011833793, 0.029358836, 0.08950559, -0.007640568, -0.0009394013, -0.000113018046, -0.0074838707, 0.01556946, -0.014453773, 8.61836e-05, -0.028330902, -0.0011274383, -0.033696223, -0.04673345, -0.045204084, 0.008148268, 0.012448046, 0.051848054, -0.03725639, 0.0037293995, 0.029659696, 0.051095907, 0.022238504, -0.036754955, -0.02376787, -0.030587343, 0.024043659, -0.025698384, 0.034849513, -0.015669746, 0.007032582, 0.05132155, -0.018114226, 0.039713405, -0.005139677, -0.023579834, 0.01470449, 0.03773275, -0.06588815, 0.00924515, -0.011909007, -0.032668285, -0.011219538, 0.010059977, -0.024256768, -0.02863176, -0.007653104, -0.049591612, 0.0009911114, 0.015970604, 0.07797266, -0.03652931, -0.048864536, -0.015393958, -0.023567298, -0.030386772, 0.0031292483, 0.088001296, -0.01022921, -0.004052196, -0.019016804, -0.045580156, 0.011952883, 0.0038547574, -0.03652931, -0.013037229, 0.0109249465, -0.0056473766, -0.03003577, -0.008035446, 0.0040490623, -0.055809367, -0.014767169, 0.06147555, 0.07265748, -0.018954124, -0.017487437, -0.051497053, 0.029358836, 0.04106727, 0.013049765, -0.044752795, -0.016020749, -0.0073835845, -0.0054656076, 0.0281554, -0.0044627436, -0.0075528175, -0.04106727, -0.014980277, 0.010661695, 0.007853677, 0.003271843, 0.0673423, 0.02642546, 0.0038484896, 0.010254282, 0.034974873, -0.04219549, 0.047410384, 0.03289393, 0.00092216453, -0.017976332, -0.04217042, 0.014892527, -0.019806558, 0.020320527, 0.0009409682, 0.036579456, 0.0037325334, 0.040465552, -0.034824442, -0.0040615983, -0.002156157, -0.009627492, -0.0006381504, -0.027478466, 0.01833987, 0.039863832, -0.011965418, -0.0003809707, -0.017199114, -0.0029788187, -0.06533657, -0.00691976, 0.011589345, 0.04154363, -0.004898363, 0.015105635, -0.0153312795, -0.004813746, -0.00903831, 0.020107418, -0.0071203327, 0.0281554, 0.024896093, 0.0052932403, -0.00024033473, 0.027403252, -0.017650401, -0.01807662, 0.041167557, -0.014579131, -0.018853838, 0.030161127, -0.0044188686, -0.0020731073, -0.048814394, 0.016146107, 0.034122437, 0.003331388, 0.047435455, -0.0039143027, -0.020521099, 0.016146107, -0.02502145, 0.015093099, -0.05285092, -0.030812988, -0.018377477, -0.013676554, -0.00071140646, -0.0031872264, 8.030745e-05, 0.025723455, 0.010962554, 0.0174749, -0.01383952, -5.7243542e-05, 0.006907224, 0.008336305, 0.043825146, 0.021248175, -0.0014322147, 0.053001348, -0.0012175393, 0.039562974, -0.006969903, -0.0045442265, 0.019242449, 0.035100233, -0.061776407, -0.019104555, 0.036880314, 0.009426919, -0.041944776, -0.024883557, -0.044727724, -0.016346678, 0.02337926, 0.0279799, 0.009075917, 0.0075653535, 0.0020433348, -0.005725725, 0.03803361, 0.03537602, -0.005988977, 0.0053496514, -0.012197331, -0.035802234, -0.03146485, 0.019129626, -0.008035446, 0.004628843, 0.047736313, -0.0072519584, -0.01246685, -0.041643918, -0.023391796, -0.021411141, -0.034097366, -0.006211487, 0.03489966, 0.023191225, -0.02179975, -0.015205922, 0.0585171, 0.022739936, 0.015218457, -0.017600259, -0.0139021985, -0.01011012, 0.0062428266, -0.018665802, 0.035501376, -0.012623548, 0.015494245, 0.022714864, 0.032317284, 0.026651105, 0.031715564, 0.031339493, 0.013563732, -0.011257146, -0.026651105, -0.016284, 0.029208407, -0.028732046, 0.02359237, 0.032793645, 0.035927594, -0.0025071593, -0.014240665, -0.01145145, -0.014516452, -0.0039769816, -0.0585171, -0.03399708, -0.06057297, -0.023567298, 0.0080981245, 0.032467715, 0.048338033, 0.042521425, -0.012611012, 0.032317284, -0.010385907, 0.01541903, -0.0011940347, 0.036880314, 0.025773598, -0.009878208, -0.0125357965, 0.0064810067, -0.042571567, 0.01714897, -0.0011493759, -0.020470956, 0.013526125, -0.008712378, -0.0050519262, 0.008655968, -0.00042386662, 0.016647538, 0.03525066, -0.033320148, -0.040064406, -0.028230615, 0.010699303, 0.004860755, -0.0035225588, 0.023792943, -0.022000324, 0.047886744, 0.032367427, -0.009809261, 0.007195547, -0.007979034, -0.019906845, -0.046984166, -0.006346247, 0.015055492, -0.05395407, 0.028381044, -0.03347058, -0.023228832, -0.019004269, -0.0067630624, -0.049591612, -0.014391094, 0.04944118, -0.010749445, 0.039638188, -0.00021976819, -0.0002787256, 0.028055113, 0.013037229, -0.013037229, -0.025898956, -0.010210406, 0.0033407898, 0.021122817, 0.03572702, 0.007270762, -0.040565837, -0.015105635, 0.026300102, -0.046006374, -0.009057113, 0.017462365, 0.08875344, -0.03174064, -0.004139947, 0.051095907, -0.039588045, -0.023040794, 0.016484573, 0.034849513, 0.004876425, -0.021987788, 0.0073271734, -0.015393958, 0.023880692, 0.002397471, 0.015732424, 0.0061206026, 0.017499972, -0.031715564, 0.036278594, 0.030436914, -0.02195018, -0.019092018, -0.009238882, -0.0043593235, -0.014428702, 0.046633165, 0.0061362726, -0.0154817095, 0.041042197, -0.017813368, -0.009201275, -0.013363159, -0.007659372, -0.00691976, 0.03289393, 0.030487059, -0.008900416, -0.0035946397, 0.016208785, 0.02499638, -0.011909007, -0.014616739, -0.01902934, -0.0037419354, 0.007352245, -0.006092397, 0.05209877, -0.010511266, 0.037833035, 0.025435131, -0.044301506, -0.0049485057, 0.014403631, -0.017738152, -0.0069636353, 0.009370508, -0.007076457, -0.011620684, -0.014742097, -0.00033219863, 0.013927271, -0.02448241, 0.028406115, -0.036378883, 0.053853784, -0.0108936075, 0.010943751, -0.031916138, -0.028406115, 0.017537579, 0.0060171825, 0.010260549, -0.00012428068, -0.00023171637, 0.030336628, 0.044000648, 0.0030994758, -0.028355973, 0.09131075, 0.022025395, -0.039136756, 0.009000702, -0.020032203], [0.046777755, 0.008638439, -0.020277716, 0.04516701, 0.019328922, 0.023278553, -0.04516701, -0.0028146638, -0.003224245, 0.046424717, -0.044549193, 0.018446323, 0.010640836, 0.0007488302, 0.0142208785, 0.056398086, -0.03510538, -0.0040516816, -0.03287682, -0.0352819, 0.003991003, -0.0418352, -0.07824241, -0.0129300775, -0.02641178, 0.030140761, -0.0008246786, 0.0063657463, -0.03027315, 0.013448604, 0.034818538, 0.004233718, 0.06707753, -0.044791907, -0.006200259, -0.046512976, 0.012510843, 0.02504375, -0.04503462, -0.036561668, -0.057015903, 0.0051052845, 0.01847942, -0.01493799, -0.0015307579, 0.036848515, -0.009261775, -0.0006733266, 0.005703797, -0.016537702, 0.0006443663, -0.027051663, 0.0004747418, 0.011904056, -0.023212358, 0.012047478, 0.057633724, -0.11270791, 0.0036021078, -0.021998784, -0.0352819, 0.020421138, 0.008555695, -0.005119075, -0.0043192194, -0.019064141, 0.023587462, 0.020001903, 0.06747471, 0.029942175, -0.013867839, 0.047836874, -0.0053479993, -0.017872633, 0.0019417182, -0.03695884, 0.09408507, 0.023874307, 0.0007853753, -0.017409269, -0.0005909277, -0.055603746, 0.022153238, 0.003152534, 0.03501712, 0.0032518262, 0.031972155, -0.07118162, -0.031663243, 0.0012356387, 0.037400138, -0.01515864, -0.0028146638, 0.020035, -0.03457582, 0.013393442, -0.0028822378, -0.014728373, -0.0011797869, -0.01254394, -0.026742755, -0.03993761, -0.058163285, -0.019626798, 0.0218002, -0.0030615157, 0.056309827, 0.0042695734, 0.001736238, 0.120474786, 0.009984403, -0.003403523, -0.017012099, 0.031707373, -0.040224455, 0.061208252, 0.0065036523, -0.02100586, -0.033207793, 0.031486724, -0.06862208, -0.008456403, 0.06045804, 0.046512976, -0.0128307855, 0.030295216, 0.03506125, 0.0070111468, -0.0027870827, -0.005502454, -0.014287074, 0.046204064, 0.041636616, 0.03762079, 0.05021989, -0.007104923, 0.020421138, 9.912002e-05, -0.047130793, 0.032413453, -0.04340181, 0.0027457108, 0.004534353, 0.009532071, -0.040665757, 0.0073145404, -0.0029622235, -0.036363084, -0.057104163, -0.041018795, 0.0103705395, -0.017861601, 0.033318117, -0.00092466053, 0.036892645, -0.049425554, 0.015191738, 0.023477137, 0.014595984, 0.012091609, 0.03532603, -0.077977635, 0.025109945, 0.015357225, 0.021579549, -0.0069284034, 0.04037891, 0.011363464, -0.03084684, 0.03217074, 0.00857776, 0.008092331, 0.04419615, -0.012025413, -0.028309368, 0.0062057753, 0.04143803, 0.030184891, -0.012422583, -0.047263183, -0.037025034, 0.0028987864, 0.049734462, -0.057898503, -0.018060185, 0.029434681, 0.03186183, 0.009636879, 0.008224721, -0.037333943, -0.022947578, 0.010580157, 0.002323718, -0.055074185, -0.008820475, -0.05158792, -0.029147837, -0.055338968, 0.010260215, 0.046821885, -7.171118e-05, -0.0814639, -0.01781747, -0.014253976, -0.06694514, -0.0015721298, 0.002210635, 0.045586247, 0.008097847, 0.024845166, 0.037356008, 0.0049370388, 0.029677397, 0.0011356568, -0.010640836, 0.010701515, -0.06756297, -0.0004130288, 0.017276878, -0.066327326, 0.07021076, -0.021899492, 0.0085832765, -0.022175303, 0.028816862, 0.05264704, 0.008616374, -0.0039634216, 0.0044350605, 0.019119304, 0.018236704, -0.041504223, -0.010182988, 0.0017982958, -0.07171118, -0.024536256, -0.003949631, 0.042872254, 0.044460934, 0.000456814, -0.00564036, 0.05136727, -0.03371529, 0.01812638, -0.010651869, 0.022340791, 0.013746481, -0.058295675, -0.06134064, -0.022252532, 0.023477137, -0.00090604316, 0.0605463, 0.022263564, 0.016537702, 0.035789397, -0.023896372, -0.01245568, -0.019670928, 0.020454235, -0.046998404, 0.023079967, -0.03843719, 0.020454235, 0.010784258, -0.03448756, 0.06072282, -0.046115804, -0.07250552, -0.023653656, 0.06579777, -0.008136461, 0.018600777, 0.03642928, 0.047219053, -0.02539679, 0.07219661, 0.05101423, -0.047616225, 0.037333943, 0.03726775, 0.00640436, -0.0065698475, -0.014728373, 0.06350301, 0.058119155, -0.00862189, -0.015268966, -0.05021989, 0.02216427, -0.022969643, -0.031707373, 0.020266684, 0.06588603, 0.0047384542, -0.013779579, 0.03682645, -0.010690482, -0.048145782, 0.011440692, -0.0483223, -0.008792894, -0.022440083, -0.06862208, -0.002998079, 0.0127314925, 0.013283117, 0.117650464, 0.015313095, -0.047704484, 0.053970937, 0.0134265395, -0.03625276, -0.028066652, -0.009256259, -0.026610363, -0.029986305, 0.022859318, 0.055603746, -0.028838927, -0.023786047, -0.035745267, -0.03625276, -0.018104315, 0.043092903, 0.015853686, 0.01817051, -0.05357377, -0.037819374, -0.0024864473, -0.066592105, 0.02579396, -0.022329759, -0.010056114, -0.08177281, -0.07285856, -0.0034642017, -0.020046033, -0.02513201, -0.00627197, -0.022087043, 0.0028712053, -0.033163663, -0.045939285, 0.021281673, -0.02947881, -0.008875637, -0.029853916, 0.035348095, -0.019935708, 0.0012687363, 0.084729515, 0.01564407, 0.0041399417, -0.008572244, 0.02491136, -0.034112457, -0.030582061, -0.017387204, 0.0054886634, 0.03453169, -0.04340181, 0.047307312, 0.06204672, 0.03852545, -0.04355627, -0.039032947, -0.010955262, -0.027029598, 0.023587462, -0.00023685375, 0.011915089, -0.043004643, -0.024271477, -0.006674656, -0.0021127218, 0.007822035, -0.011716504, 0.0011439312, -0.005521761, -0.040599562, -0.05366203, -0.0010694619, 0.031001294, 0.039474245, -0.0038806782, 0.0040213424, 0.018545615, 0.03426691, -0.02251731, -0.00779997, 0.0007957183, 0.012510843, -0.021734005, 0.037289813, 0.04143803, -0.07043141, -0.014386366, -0.01595298, 0.016206726, -0.0053728223, 0.007899262, -0.011418627, -0.046954274, 0.019880546, -0.003742772, -0.028530017, -0.03190596, 0.010762193, 0.0736529, 0.020134293, 0.021281673, -0.011115233, 0.03998174, -0.0060127066, 0.05233813, 0.010376056, 0.03119988, -0.01205851, 0.0024740358, 0.037731115, -0.045542117, 0.005256981, 0.040400974, -0.01808225, 0.058030892, -0.059090015, 0.039959677, 0.0012508085, -0.03380355, -0.027228184, -0.005863768, 0.036054175, 0.021072054, -0.030118696, -0.08186107, -0.04428441, -0.04117325, 0.0031497758, 0.0436004, 0.022704862, -0.012290193, 0.028706538, 0.031641178, -0.028684473, -0.02043217, -0.0823465, 0.0064650388, 0.022881383, -0.044350605, -0.044041697, -0.01896485, -0.06442974, -0.019395117, 0.03695884, 0.0027126132, 0.032325193, -0.021634711, 0.0037593208, -0.09717417, -0.025264401, 0.0026643462, 0.041018795, -0.016074337, 0.048763603, 0.015809556, 0.0039358404, 0.031177815, -0.000901906, -0.002479552, 0.0016176387, 0.01936202, -0.017067261, 0.038900558, -0.027382638, -0.056751125, -0.011727536, 0.014165716, 0.059090015, -0.047660355, -0.03678232, -0.020597657, -0.0021623678, 0.056927644, 0.007347638, 0.0012728735, 0.0030615157, -0.009636879, 0.026963403, -0.0082357535, -0.012025413, 0.023256488, 0.0012418446, -0.008202656, 0.0009874078, -0.027228184, -0.018821428, -0.057060033, 0.0031856312, -0.0019955016, 0.028927187, 0.02996424, 0.02987598, 0.030074567, -0.0008205414, -0.010602222, -0.035348095, -0.05992848, 0.010227118, 0.0051576886, 0.010591189, 0.0017858843, -0.05026402, 0.0034835085, -0.040047936, 0.020101195, 0.0045426274, 0.01559994, 0.012588071, 0.0023775015, -0.004264057, -0.004349559, -0.040599562, 0.0011453104, 0.032545842, -0.018225672, -0.018744199, -0.011528951, -0.034421366, -0.08878947, 0.0007357291, -0.015368258, -0.027338509, -0.0023416458, 0.0006416082, 0.006724302, 0.033384312, 0.03422278, -0.020619722, 0.027956327, 0.018302899, 0.068357304, -0.013250019, -0.010155407, -0.034818538, 0.031795636, 0.021171346, 0.0030753063, -0.0007467616, 0.021237541, -0.043710724, 0.022726929, 0.003337328, 0.01808225, 0.00012058166, 0.0100175, -0.042210303, -0.027846003, 0.028287303, -0.009570684, 0.021105152, 0.034377236, 0.07859545, 0.07850719, 0.0005550721, -0.036407214, 0.03022902, -0.011308301, -0.014827666, -0.009074222, 0.02557331, 0.010778742, -0.002411978, -0.002973256, -0.0012777002, 0.06288519, -0.013393442, -0.018711101, 0.0056762155, -0.00046233027, -0.0018879347, 6.0603275e-06, 0.01856768, -0.048454694, 0.026544169, 0.0156882, -0.0062830024, -0.047660355, -0.027779808, 0.016813513, 0.010508446, 0.045895156, -0.001374924, -0.018148445, 0.007855132, 0.02451419, 0.0002434043, 0.022109108, -0.0041344254, 0.048454694, -0.0066801724, -0.0022864833, 0.020663852, 0.018049153, -0.03040554, -0.012874915, 0.014904893, -0.042408887, 0.00613958, 0.035657007, -0.045939285, 0.009024576, 0.019461311, -0.027934263, -0.00046026165, -0.015897818, -0.02588222, 0.05013163, 0.029434681, 0.03124401, 0.05366203, -0.0013018338, 0.075020924, -0.046115804, 0.0061285477, 0.018942785, -0.0030229022, 0.0018755231, -0.013404475, 0.002569191, -0.017221715, 0.000439231, -0.0027139923, -0.01227916, -0.011694439, 0.013404475, 0.024756907, 0.050440542, -0.04415202, -0.013272084, 0.006249905, 0.05079358, 0.012102641, 0.024072891, -0.03342844, -0.016912807, 0.033869743, -0.006718786, 0.010497414, -0.042122044, -0.01790573, -0.00047267321, -0.008169558, 0.04991098, 0.023124097, 0.0075407065, 0.015125543, 0.023035837, -0.027890133, 0.03856958, -0.05149966, -0.04351214, -0.004694324, -0.00089845835, 0.0028518985, -0.025771895, -0.00666914, -0.008688086, 0.0005829981, 0.02601461, 0.07038728, -0.022539375, -0.038613714, -0.020851405, -0.055692006, -0.022771059, 0.031574983, 0.045851026, -0.053176597, -0.030140761, -0.038238607, -0.03347257, -0.023565397, -0.032766495, -0.01817051, -0.0032987143, -0.023035837, 0.0031635663, -0.008351594, -0.013294149, 0.039959677, -0.044924296, 0.0002275451, 0.029743591, -0.008792894, 0.006922887, -0.011881991, -0.04130564, 0.02641178, 0.036054175, -0.008649471, -0.00824127, -0.0010184366, 0.006851176, 0.023675721, 0.054941796, 0.0038861944, -0.03080271, -0.065047555, -0.0309351, 0.011385529, -0.010353991, 0.023918437, 0.059619572, -0.0007619313, 0.0060071903, -0.0257057, 0.017464431, -0.08040478, 0.050440542, 0.00019617144, -0.029412616, -0.0021582306, -0.03036141, 0.027007533, -0.043048773, 0.0013535485, -0.016648026, 0.038150348, 0.003538671, -0.0068677245, -0.0021458191, -0.0021072056, -0.011760633, -0.025021685, -0.027537093, -0.0074083167, -0.012257095, 0.039209466, 0.030824775, -0.023168227, -0.01028228, -0.010486381, -0.040621627, 0.0019706783, -0.008996995, 0.033340182, -0.019229628, -0.008969414, -0.0121357385, -0.009664461, -0.015346193, 0.020741079, -0.017618885, -0.0051301075, 0.05158792, 0.013018337, 0.004956346, -0.003472476, -0.030471735, -0.032457583, 0.0018824185, 0.013823709, -0.049337294, 0.026831014, 0.022881383, -0.029633267, -0.06085521, 0.020752111, 0.022153238, 0.028794797, 0.07087271, -0.009565168, -0.01617363, 0.013172792, -0.010552576, 0.039959677, 0.0034228298, -0.026301455, -0.0060733855, 0.01839116, -0.0021720214, -0.013448604, -0.008726699, 0.07029902, 0.017045196, -0.013371377, 0.005549342, -0.028088719, -0.012367421, 0.023234423, 0.021535419, 0.012996272, -0.025595374, 0.027470898, -0.009929241, 0.020145325, -0.01515864, -0.00022564888, 0.009024576, 0.0076455153, -0.023653656, -0.0074524465, 0.051323142, -0.00928384, -0.0718877, -0.008599825, -0.03461995, -0.017376171, 0.040643692, 0.044350605, 0.005781024, 0.014904893, 0.044880167, -0.01821464, 0.05163205, 0.025661571, -0.0009832706, 0.0009653428, -0.0045205625, 0.018413225, -0.022991708, 0.017486496, -0.042519215, 0.039827287, 0.046336453, -0.007606901, -0.014584951, -0.006807046, -0.031928025, -0.03523777, -0.07329986, -0.025198206, 0.04029065, 0.009035609, 0.028816862, -0.03775318, -0.010420186, 0.027647419, 0.008009587, -0.024778971, -0.025816025, -0.013250019, 0.0016286712, -0.044681583, 0.01294111, 0.0014493932, -0.012157803, 0.029500876, 0.007441414, 0.054632887, 0.028993381, 0.018578712, 0.04196759, -0.0049922015, -0.019350987, -0.040356845, 0.016967969, -0.019108271, 0.023234423, 0.021965686, 0.03559081, 0.04086434, -0.057060033, -0.0009874078, -0.033538766, -0.014287074, -0.06857795, -0.007165602, -0.06619494, -0.01559994, -0.03124401, 0.031751506, 0.076344825, 0.026036674, -0.032656167, 0.008373659, -0.056045044, 0.027382638, -0.015533745, 0.0335167, 0.040798146, -0.01724378, -0.010960778, -0.0072262804, -0.015941948, 0.03914327, -0.026433844, -0.043666594, 0.007309024, -0.012411551, -0.017464431, 0.016416345, 0.009013544, 0.024359737, 0.023234423, -0.027073728, -0.04373279, -0.015048316, 0.015180705, 0.007910294, 0.033340182, 0.0070718257, -0.041504223, 0.0035276385, -0.017221715, 0.0073145404, 0.0024850683, 0.014960055, -0.014651146, -0.012246063, -0.011253139, 0.032192804, -0.018898655, 0.033119533, -0.0054610823, -0.02416115, 0.013095565, 0.0028684472, -0.014110554, 0.03843719, -0.008914252, 0.037378073, 0.042651605, -0.014684243, -0.01032641, 0.056486346, 0.00051094213, 0.040489234, -0.03146466, -0.005769992, 0.01631705, 0.04187933, 0.022815188, -0.021645743, -0.03000837, -0.0034504111, 0.023940502, 0.0075848363, 0.010254699, 0.021292705, 0.0705638, -0.0030587576, -0.020972762, 0.034244847, -0.033913873, -0.007601385, 0.030295216, 0.018291866, -0.02627939, -0.022682797, -0.0032573424, -0.025021685, -0.009112836, -0.023499202, 0.016416345, 0.009907176, 0.04099673, 0.015147608, 0.03545842, 0.016592864, -0.041857265, 0.010833904, 0.0017458914, 0.023102032, -0.008086815, 0.036517538, -0.036142435, 0.0004409548, 0.029081643, -0.02451419, 0.0069118547, 0.0204763, 0.026897209, 0.02544092, 0.014926958, 0.016151564, -0.016736286, 0.001341137, 0.028066652, 0.032391388, -0.023786047, -0.040489234, 0.0048818765, -0.0068953056, -0.018016055, -0.00749106, 0.039805222, 0.013172792, 0.008511566, 0.05997261, -0.047792744, -0.019869514, 0.058472194, -0.0038034506, 0.0062940354, 0.0008860468, -0.00028649997, -0.007551739, -0.007639999, -0.0067904973, -0.018655939, -0.013007305, 0.02052043, -0.019218596, 0.03717949, -0.022903448, -0.0062057753, -0.045983415, -0.014949023, 0.0057093133, 0.009206613, -0.016361183, 0.017309975, 0.0071821506, 0.045365594, 0.014904893, 0.03347257, -0.006470555, 0.08539147, -0.012146771, -0.015004185, 0.0050997683, -0.007926843], [0.0029889634, -0.052130945, -0.023691434, 0.0067733517, 0.0076116077, -0.0029507217, -0.04596334, 0.016141014, -0.010358884, -0.007446404, -0.012947075, 0.009844917, 0.012885889, -0.02853741, -0.0014348248, 0.045620695, -0.010750478, -0.0075259465, 0.003377498, -0.06456406, -0.0077706925, -0.046036765, -0.05066247, 0.049634535, -0.009783731, 0.038302783, -0.014011721, 0.0162022, -0.017328033, 0.000564446, 0.04992823, 0.024229877, 0.053746272, -0.030984873, 0.0405055, -0.00086273043, -0.0096735945, 0.012102701, -0.061969746, 0.00030918332, -0.024450148, 0.0050723655, 0.014905045, -0.030226158, 0.003974067, -0.023507874, -0.05110301, 0.007709506, -0.021953737, -0.04363825, 0.006877369, -0.01852729, 0.016777353, 0.0123229725, 0.0011663687, 0.01707105, 0.03372603, -0.10661145, 0.028684258, -0.020228276, -0.066522025, 0.008676253, 0.0094594415, -0.022675738, -0.018796511, -0.005069306, -0.02197821, 0.020815667, 0.02070553, 0.05756431, -0.038302783, 0.029932464, 0.017817525, 0.004328949, -0.0078074047, -0.049805857, 0.1036745, 0.03996706, -0.04929189, -0.014317654, -0.00860283, -0.026897611, 4.835172e-05, 0.007697269, 0.047676563, -0.008816983, 0.03521898, -0.10592616, -0.009526747, 0.008908763, -0.008462101, -0.0005284989, 0.018955596, 0.0259431, -0.080864154, 0.007862473, 0.0032612435, 0.019885631, -0.043320082, -0.014170807, -0.026775237, -0.019689834, -0.052767288, -0.056291632, 0.024792792, -0.03842516, 0.030373007, -0.012665617, 0.018600713, 0.13852637, 0.029442972, 0.019188104, -0.01747488, -0.004472737, -0.025820727, 0.029663242, -0.039624415, -0.06632623, -0.0080276765, 0.0044757966, -0.090311356, -0.013155109, 0.049854808, 0.019959055, -0.037397224, 0.0034662185, -0.029932464, 0.027093407, 0.01697315, 0.0076850313, 0.028635308, 0.039085973, 0.06608148, 0.032526772, 0.04023628, -0.028659783, 0.0615292, -0.011509191, -0.012280142, 0.0047603142, -0.008468219, -0.036883257, -0.02785212, 0.025649404, -0.019518511, -0.006681572, 0.023006145, 0.04642836, -0.06784365, -0.029614294, -0.03680983, -0.018539527, -0.01192526, 0.049169518, 0.052130945, -0.023373265, 0.03313864, 0.04004048, -0.045914393, 0.01725461, 0.033016264, -0.05183725, -0.051690403, 0.034558166, 0.012579956, -0.036100067, 0.036711935, 0.0012076696, -0.04956111, 0.038718853, -0.003209235, -0.017854238, -0.036026645, 0.004062787, -0.04965901, 0.0101019, 0.02694656, 0.0355861, -0.06544514, -0.05041772, -0.019848919, 0.07758456, 0.02530676, -0.051984098, 0.0073179123, 0.022320855, 0.017670678, 0.0032918367, 0.054921053, -0.011362343, -0.033432335, -0.028831106, -0.010658698, -0.036932204, 0.012500414, -0.04797026, -0.026799712, -0.050809316, 0.024707131, 0.035439253, 0.018992307, -0.07582238, -0.043295607, 0.0029155393, -0.018172408, 0.023483401, 0.06358507, -0.008584474, -0.0005583273, 0.010132493, 0.03377498, 0.0081011, 0.024364486, -0.017352507, -0.032624673, 0.014709248, -0.05903279, 0.039722312, -0.04987928, -0.049756907, 0.042365573, -0.030838024, 0.026799712, -0.016422471, 0.054872103, 0.07264068, 0.02662839, 0.025062013, 0.042585842, -0.008137812, -0.015467961, -0.019077968, 0.00746476, 0.009569578, -0.05962018, 0.0056689344, -0.030935923, 0.03049538, 0.045155678, -0.034558166, 0.027240256, 0.03441132, -0.038890176, -0.014268705, 0.0082112355, 0.07347282, 0.005717884, -0.018820984, -0.015039655, -0.0112583265, 0.022724686, -0.017682916, 0.015174266, 0.0029430734, -0.012726803, 0.042267673, -0.009802086, -0.074500754, -0.01260443, 0.02462147, -0.0155536225, 0.0682842, -0.047578666, 0.040162854, 0.01588403, -0.030984873, 0.037886716, -0.02520886, -0.019077968, 0.024572521, 0.066424124, -0.026310218, 0.01442779, 0.008994424, 0.03054433, -0.009955052, 0.10191233, 0.04123974, -0.049414262, 0.04356483, 0.02890453, 0.016960913, 0.01775634, -0.0018447747, 0.00091091485, -0.035047658, 0.010071307, -0.040113907, -0.036491662, 0.019604173, -0.011906904, 0.010328291, 0.015406775, 0.028317139, 0.033481285, 0.0058586127, -0.01015085, 0.022871535, -0.026677338, 0.0032122943, 0.0024291063, 0.0058769686, -0.027240256, -0.058690146, 0.00050096493, 0.04119079, -0.0021920083, 0.051935147, -0.0186619, -0.04819053, 0.053012032, -0.0023403857, -0.028390562, -0.06764786, -0.014917282, 0.008847576, -0.00024245173, 0.023458926, 0.05438261, -0.046257038, -0.018172408, -0.05452946, -0.06740311, 0.029442972, -0.025429133, 0.0042738807, -0.00092085765, 0.0061737234, -0.0743539, 0.00021472658, -0.064466156, 0.0053140526, -0.032061756, -0.03154779, -0.056095835, -0.06456406, -0.016911965, -0.07636082, -0.012365803, -0.023630248, -0.033432335, -0.013253008, -0.031376466, -0.01757278, 0.0138159245, -0.014856096, -0.023862757, -0.003144989, 0.021513194, 0.011380699, 0.0014004073, 0.051445656, 0.021488719, 0.027778696, 0.0100407135, -0.0061614863, 0.0003566029, -0.021366345, 0.01779305, -0.030838024, 0.079444624, -0.090262406, -0.019445088, 0.03135199, -0.0048949244, -0.03514556, -0.034656066, -0.018723086, 0.032795995, 0.037079055, -0.03308969, 0.0030700355, 0.0080582695, -0.054872103, -0.01033441, -0.00087420293, 0.03450922, 0.0110441735, -0.028708732, 0.030470906, 0.025551505, 0.0074158106, -0.0050325943, 0.022810347, -0.005711765, -0.0059014433, -0.044029847, 0.026726289, 0.05134776, -0.008700728, -0.016606031, -0.023104044, 0.024609232, -0.014415553, 0.027582899, 0.06466195, -0.018600713, -0.01710776, -0.027362628, -0.0084253885, -0.010903444, 0.02416869, 0.031890433, -0.004641, 0.038204886, 0.037299324, 0.006516368, 0.020864615, 0.002343445, 0.039526515, 0.006498012, 0.04760314, -0.017988848, 0.036222443, 0.0013246889, -0.009453323, -0.022687975, 0.028390562, -0.04774999, -4.115752e-05, 0.018245831, -0.038620956, -0.022430992, 0.03431342, -0.02139082, 0.03431342, -0.03171911, -0.008627305, 0.021745702, 0.014256468, -0.04327113, 0.025527032, 0.012163888, 0.02234533, -0.018723086, -0.07694821, -0.032110706, -0.047456294, -0.020240514, 0.046477307, 0.06970373, -0.005317112, 0.035439253, 0.058004856, -0.009037254, -0.0060268757, -0.08370321, -0.03372603, -0.014660299, -0.033750504, -0.045473848, 0.003787448, -0.09138824, -0.023226418, 0.061822895, -0.014917282, 0.025869677, -0.05761326, 0.050809316, -0.071710646, -0.011472479, -0.018796511, 0.061382353, -0.032379925, 0.051935147, -0.0070058606, 0.0016505073, 0.028121341, 0.004432966, 0.004387076, -0.037593022, -0.02170899, -0.07352176, -0.00080077903, -0.0068651317, -0.019163629, -0.01606759, -0.038767803, 0.023018382, -0.045498323, -0.014586875, 0.011649921, 0.034166574, 0.030935923, -0.015162028, 0.028170291, 0.0055067902, 0.012677855, 0.052033048, 0.0012902715, -0.042292148, -0.0013919942, 0.0156148095, 0.00819288, -0.00746476, -0.051445656, -0.017376982, -0.049071617, -0.0019579697, 0.03149884, 0.039893635, -0.011142072, 0.012231193, 0.040334176, 0.02557598, -0.0024948819, -0.0076544383, -0.01697315, 0.017364744, -0.0005988634, 0.003695668, -0.0128124645, -0.055214748, -0.006244088, -0.02462147, -0.008174524, -0.015455724, 0.022675738, 0.031180669, 0.018270306, -0.0077523366, -0.0040168976, -0.03668746, 0.0028145816, -0.011478598, 0.02393618, 0.030568803, -0.001492952, -0.012922601, -0.025527032, -0.023409976, -0.021770177, -0.036614034, 0.0049499925, 0.007195539, -0.051690403, 0.006608148, 0.0036803714, -0.035243455, 0.03081355, 0.027289204, 0.06089286, -0.010670936, 0.01033441, 0.0021537668, 0.052375693, 0.035292406, -0.004405432, -0.021660041, 0.03519451, -0.031205144, 0.0124147525, -0.007458641, 0.046354935, 0.018209118, -0.03827831, 0.00074456393, -0.047994737, 0.0081011, -0.015039655, 0.006516368, 0.012726803, 0.08145154, 0.040529974, -0.009043373, -0.03213518, 0.059424385, 0.005255925, -0.021452006, 0.038033564, -0.0049438737, 0.0028803572, -0.011851836, -0.02858636, -0.02398513, 0.06304663, -0.013375381, -0.035561625, 0.0031281626, 0.009759256, -0.022932721, 0.011417411, -0.006589792, -0.049512163, 0.011821243, 0.029418496, 0.0080276765, -0.035684, -0.053599425, 0.01829478, 0.009930578, 0.035072133, -0.007972608, -0.0006470478, 0.0024000427, -0.041704755, -0.02731368, 0.0057790703, 0.009043373, 0.04669758, 0.02462147, -0.013044974, 0.016043115, 0.0055465614, -0.049316365, -0.02303062, 0.00427694, -0.044348016, 0.020901328, 0.015627047, 0.0013797568, 0.0024551107, 0.03810699, -0.041631334, 0.009844917, -0.01747488, 0.017217897, 0.02880663, 0.013008262, 0.052718338, 0.028194765, 0.058102753, 0.07919988, -0.04755419, 0.019408375, 0.007574896, 0.010573037, 0.014635825, -0.008523287, -0.008235711, -0.026824186, -0.015675995, -0.033701554, -0.031107245, -0.017132236, 0.025000827, 0.012463702, 0.016593793, -0.019738782, 0.0179399, -0.00864566, 0.041264214, -0.0062073763, 0.05761326, -0.0291248, -0.029198226, 0.041704755, 0.001656626, 0.06378087, -0.021733465, 0.0002919746, 0.027485002, 0.00072850246, 0.050172977, -0.04097052, -0.011038055, -0.00019617939, 0.014880571, -0.035708476, 0.03918387, -0.020032478, -0.0053385273, 0.0017851178, 0.021195022, 0.00632669, -0.00059045025, -0.013742501, -0.046526257, -0.0071098777, 0.027044458, 0.072298035, -0.033995252, -0.04679548, -0.022785874, -0.06334032, -0.020827904, -0.033187587, 0.06960583, -0.012329091, -0.0047939667, -0.02557598, -0.026114423, 0.013620128, 0.018404916, -0.04750524, 0.0004141565, -0.03514556, 0.024388961, -0.020362886, -0.014023959, 0.022724686, -0.04150896, -0.023385502, 0.014782672, 0.043393508, 0.0058249603, -0.0053324085, -0.079346724, 0.021611093, 0.017829763, -0.012231193, -0.0059289774, -0.01087897, -0.04141106, 0.016581558, -0.005665875, -0.00714659, -0.014317654, -0.027998969, -0.035757422, 0.013742501, 0.012531007, -0.02657944, 0.05252254, 0.017903186, -0.003294896, -0.014072908, 0.023189705, -0.07694821, -0.0018876053, -0.003377498, -0.04633046, -0.016765116, -0.052424643, 0.012873651, -0.015896268, 0.0061155963, -0.03198833, 0.0051488485, -0.0013300427, 0.032330975, -0.022932721, -0.007709506, -0.011723344, -0.02485398, -0.018233594, -0.025086489, 0.0047664326, 0.024768319, 0.006081944, -0.016508132, -0.010248749, 0.016960913, -0.026603915, 0.0033071334, 0.0060972404, 0.017670678, -0.0049163396, 0.0016107361, -0.024792792, 0.007819642, -0.00591674, 0.021745702, 0.016397998, -0.0026845601, 0.037935667, 0.014366603, -0.011961971, 0.026187846, -0.033163115, -0.010181443, 0.0049438737, -0.0064735375, -0.032061756, 0.015590334, -0.0095818145, -0.016410235, -0.059424385, 0.013412093, 0.024596997, 0.028047917, 0.06280188, -0.019163629, -0.033677083, 0.007250607, -0.00714659, 0.00914739, -0.02626127, -0.051445656, -0.010701529, -0.030519854, -0.003992423, -0.040848143, -0.0107994275, 0.035684, 0.022382041, -0.0072750817, -0.035292406, -0.026163371, -0.00555268, 0.011295038, 0.027019983, 0.003909821, -0.018233594, 0.046673104, -0.025110962, 0.009881629, -0.013766975, -0.015296639, -0.0017575838, -0.0067917076, -0.0647109, -0.04133764, 0.026408117, 0.008260185, -0.031792536, -0.0106770545, -0.043075334, -0.025331235, 0.042487945, 0.022834823, 0.0019763259, 0.0060268757, 0.012677855, 0.02398513, 0.023972893, 0.026922084, 0.0081806425, 0.0015388419, 0.031156195, -0.021562142, -0.021231735, 0.015284401, -0.043295607, 0.018245831, 0.025049776, -0.01747488, -0.029785616, -0.025527032, -0.008841458, -0.041533433, -0.046208087, -0.04172923, 0.01898007, 0.033016264, 0.0047664326, -0.031229619, 0.05785801, 0.0058310786, -0.00869461, 0.0015694351, -0.018453866, 0.0009583344, 0.008431507, -0.036222443, 0.0341421, -0.002011508, -0.0045767543, 0.0017376982, 0.004619585, 0.060648113, -0.0012038455, 0.04765209, 0.0038669903, -0.008859813, -0.033383384, -0.027387103, 0.036981154, -0.022418754, 0.027803171, 0.025624929, 0.039428618, 0.00080536806, -0.014611349, -0.0034448032, -0.011129835, -0.016642744, -0.0843885, -0.040064957, -0.045449372, 0.0009545103, 0.020277224, 0.03663851, 0.06275293, 0.009930578, -0.02648154, 0.011356225, -0.005751536, 0.00042486415, -0.013509992, 0.036785357, 0.021427533, -0.031792536, -0.033187587, 0.0027289204, -0.0156148095, 0.019383902, 0.02262679, -0.030789075, -0.016544845, -0.0057423585, 0.002621844, 0.010413952, 0.012176124, 0.012641142, 0.0074158106, -0.0018554823, -0.02088909, 0.015002944, 0.013962772, -0.003144989, 0.0010348177, -0.024156453, -0.015847318, 0.016642744, -0.009985646, -0.009747018, 0.032208603, -0.010322172, 0.009802086, -0.019604173, 0.004983645, 0.016006403, -0.03879228, 0.023422213, -0.039012548, -0.021611093, -0.014843859, -0.01037724, -0.045718595, 0.024511335, 0.03441132, 0.011827362, 0.031841483, -0.0068161823, 0.041435536, 0.03458264, 0.02061987, -0.0031159255, -0.032967318, -0.0067978264, 0.012390277, 0.013130635, 0.020717768, -0.00046348816, -0.017315796, -0.010536325, -0.010071307, -0.030348532, -0.046722054, 0.022333093, 0.09540208, -0.019090205, -0.0339463, 0.03800909, -0.050368775, -0.009545103, 0.026677338, 0.019126918, -0.006048291, -0.006589792, 0.03213518, -0.0056872903, -0.011649921, 0.002066576, 0.028512936, 0.008358084, 0.030226158, -0.03277152, 0.039722312, 0.032208603, -0.018820984, -0.008584474, 0.00077095063, 0.0341421, -0.010004002, 0.044910934, -0.0015984988, -0.0022868474, 0.02853741, -0.044348016, -0.0023342671, -0.01802556, -0.01852729, -2.1905265e-05, 0.005317112, 0.030373007, -0.008449864, -0.013583415, 0.016226675, 0.033701554, -0.031327516, 0.0020283344, 0.010156969, -0.043491405, -0.03228203, -0.008351965, 0.06417246, 0.005763774, -0.0035335235, 0.03335891, -0.03764197, -0.0070915218, 0.03277152, -0.0010799427, -0.015272165, 0.029320598, 0.0037568547, 0.0014585345, -0.00591674, -0.0020329233, 0.0080888625, -0.034558166, 0.0053324085, -0.032624673, 0.04150896, 0.008541644, 0.029345073, -0.039061498, -0.0008711436, 0.020264987, -0.027925543, 0.0049805855, -0.010438426, -0.018392678, 0.03277152, 0.0110441735, -0.02339774, 0.0023725086, 0.07396231, 0.040260755, 0.0024795851, 0.002949192, 0.009104559], [0.04947902, -0.0071865716, -0.014559505, 0.01803049, 0.033055898, 0.011525304, -0.012987078, 0.03766835, 0.014116895, 0.033661574, -0.046543825, -0.005165712, 0.00592863, 0.031192282, 0.015479665, 0.07151628, -0.04030071, 0.037878007, 0.022293514, -0.05031765, -0.01375582, -0.01516518, -0.039695032, 0.013662639, 0.00054343353, 0.010651734, -0.024599738, 0.024459967, -0.04850062, 0.04151206, 0.025182119, 0.004353292, 0.033661574, -0.015980512, 0.027884362, -0.036247343, -0.03736551, 0.029421847, -0.06191866, -0.026905965, -0.030004228, -0.028886057, -0.0006315185, -0.041791603, -0.03673654, 0.023388388, -0.043049544, 0.0080717895, -0.02420372, 0.0077980706, 0.0025217063, -0.04826767, -0.01011012, -0.031914435, -0.06066072, 0.014303257, 0.047708586, -0.13697582, 0.03217068, -0.016516302, -0.03426725, 0.0354786, 0.030726379, -0.0057044136, -0.052367624, -0.0135811055, 0.02492587, 0.021781018, 0.05073696, 0.041442174, 0.026300289, 0.032520108, 0.006114992, -0.012963783, 0.011170052, -0.043119427, 0.094112635, 0.0056257923, 0.0069477954, -0.04505293, 0.0070176814, -0.010948747, -0.0062547633, -0.01511859, 0.00036562554, -0.03300931, 0.023446625, -0.098119415, -0.020488136, -0.008706584, -0.0005412496, -0.010663381, 0.014792456, -0.024273606, -0.064620905, 0.027208801, 0.023609692, 0.022037266, -0.033498507, -0.037738234, -0.025112234, -0.031797957, -0.07002539, -0.002057258, 0.01623676, 0.035105877, 0.04647394, -0.027977543, -0.00049866305, 0.1127488, -0.004571684, -0.021256877, -0.04160524, -0.0007549103, -0.015631083, 0.10007621, -0.005582114, -0.027208801, -0.07268105, 0.010733266, -0.061359577, -0.0015607788, 0.030633198, 0.005998516, -0.020406602, 0.028396858, 0.0060392823, 0.034639973, -0.025671318, -0.025834385, -0.012847307, 0.03629393, 0.021082163, 0.009877168, 0.028350268, 0.0043416442, 0.058936875, -0.028000839, -0.031238873, 0.030703083, -0.026113927, -0.016469711, 0.0092423735, 0.0016568716, -0.037947893, -0.001382425, -0.030633198, -0.021012276, -0.056840304, -0.029375257, -0.03422066, -0.041675124, -0.014932227, 0.033847935, 0.07734009, 0.015735913, 0.04563531, 0.040324003, -0.0061091683, -0.022409989, 0.006936148, -0.066950426, 0.013313211, 0.030679788, -0.015596141, -0.06466749, 0.032333747, 0.021478182, -0.0031623244, 0.032333747, 0.05306648, -0.0065983674, 0.021559713, -0.05041083, -0.018158615, 0.015584494, 0.016446415, 0.04952561, -0.05851756, -0.026719602, -0.024390083, 0.05283353, 0.060334586, -0.04151206, 0.02581109, 0.028257087, 0.056607354, 0.028326971, 0.025345186, -0.060334586, -0.00459498, -0.018612871, -0.022980722, -0.05963573, -0.005145329, -0.041185927, 0.001437023, -0.112655625, -0.0040621017, -0.0068080244, -0.007961137, -0.021979028, -0.009434558, -0.029957637, -0.044307485, 0.02858322, -0.004385323, 0.0016073693, 0.026416766, 0.013103554, -0.0072739283, 0.021396648, -0.006266411, -0.054277834, 0.0034855453, -0.00096238323, -0.045355767, 0.005148241, 0.011851436, -0.03163489, 0.0685345, -0.04253705, -0.011478714, -0.014105248, 0.018589575, 0.07319354, 0.045029636, -0.0037738236, 0.0016874466, 0.021781018, 0.003438955, -0.02814061, -0.013546163, 0.035199057, -0.06326978, -0.018240146, -0.04680007, 0.01006353, 0.057026666, -0.019707745, 0.03512917, 0.046240985, -0.05083014, -0.028350268, -0.015468017, 0.049805153, 0.026230404, -0.027534936, -0.030446835, 0.015770854, 0.030120702, -0.025601432, 0.03717915, 0.012241632, 0.019311726, 0.07007198, -0.027255392, -0.05059719, 0.004929848, -0.0073904046, 0.022584703, 0.035897914, -0.027791182, 0.041768305, 0.0035146645, -0.013359801, 0.049106296, -0.022852598, -0.05488351, -0.0116476035, 0.01769271, -0.045961443, 0.015514608, 0.002374655, 0.014943875, -0.0050958265, 0.07738668, 0.021850904, -0.036363818, 0.047079615, 0.01787907, 0.033475213, 0.01769271, 0.018577928, 0.039881393, 0.036154162, 0.009661688, -0.048780166, -0.047219384, -0.023481568, -0.012626003, -0.02002223, 0.014780809, 0.05288012, 0.041768305, -0.0023440802, 0.0120669175, 0.022596352, -0.03748199, 0.0066507817, 0.0074719377, -0.026137222, -0.02100063, -0.03932231, 0.015968865, 0.047312565, 0.01023242, 0.08996609, -0.01608534, 0.0057160617, 0.06350274, -0.007914547, -0.058564153, -0.07324013, -0.0053462503, 0.0058034183, 0.013814058, 0.028117316, 0.07664123, -0.049013115, 0.01268424, -0.024087245, -0.03328885, -0.020360012, 0.0075942376, -0.00052159425, 0.022969075, 0.0044115297, -0.021524772, -0.0137208775, -0.04165183, -0.0037854712, 0.020860858, -0.035618372, -0.049106296, -0.1258873, -0.035711553, -0.035199057, 0.0281872, -0.019067127, -0.057213027, -0.00746029, -0.010442076, -0.020919096, 0.033917822, -0.0046823365, -0.01351122, 0.002201397, 0.042606935, 0.0014319273, 0.0012739566, 0.06434136, -0.008112556, 0.012882249, 0.025694614, -0.0028667664, 0.009108426, -0.04680007, -0.005002646, -0.0044231773, 0.083629794, -0.079390064, 0.021979028, 0.08889451, -0.006167406, -0.027185507, -0.0058820397, -0.0077340086, -0.021664543, 0.014279962, -0.062431157, 0.032426927, -0.03950867, -0.048127897, 0.0054539903, -0.018985594, -0.011234114, 0.019078774, -0.011915498, 0.03238034, -0.019754335, -0.019416556, 0.0006227828, 0.021955732, -0.028210497, 0.033125784, -0.0017806274, 0.023306854, 0.041535355, -0.024180425, -0.0006959443, 0.021466533, 0.0032409457, -0.072261736, 0.03762176, 0.013907239, -0.03480304, -0.0073904046, -0.007105038, 0.003881564, 0.014512914, -0.017622825, -0.0054074, 0.024855986, 0.040906385, -0.047708586, 0.025927566, -0.004525094, 0.0018068345, 0.040743317, -0.009050188, 0.02100063, 0.0007316151, 0.009323907, 0.03091274, 0.02760482, 0.022934131, 0.011892203, -0.028862761, 0.01351122, 0.025112234, -0.01891571, -0.010907981, 0.011420475, -0.02434349, 0.03533883, -0.028420152, 0.047126204, 0.0118630845, -0.059076644, -0.006120816, 0.0049793506, 0.009521916, -0.0081999125, -0.01214845, -0.09019904, -0.03275306, -0.049292658, -0.011094342, 0.02483269, 0.013849, 0.018146966, 0.028350268, -0.0066216625, -0.037645053, -0.0291656, -0.087263845, 0.024459967, -0.014349848, -0.034546793, -0.032939423, -0.023073902, -0.037109263, -0.052414216, 0.054603964, 0.006674077, 0.0041378113, -0.038134255, 0.02055802, -0.064807266, -0.027325278, -0.01841486, 0.03908936, -0.055955086, 0.02158301, 0.017040445, 0.01953303, 0.004708544, 0.01487399, 0.020732734, 0.003290448, 0.012963783, -0.009533564, 0.025764499, -0.01783248, 0.0060392823, -0.031145692, 0.02075603, 0.047219384, -0.02250317, -0.032007616, -0.018799232, -0.02216539, 0.05851756, 0.013487925, -0.020383306, 0.026952555, -0.007524352, 0.04407453, 0.0057160617, -0.018752642, 0.028839467, 0.06713679, -0.02541507, -0.016423121, -0.018985594, -0.0074661137, -0.042257506, 0.05269376, -0.0046648653, 0.045285884, 0.015782503, 0.010972043, 0.043748397, 0.05730621, 0.017541291, 0.003441867, -0.028606514, 0.02921219, -0.0039893044, 0.00013158152, -0.0070002098, -0.05171536, 0.0027706737, -0.03799448, -0.020919096, 0.005925718, 0.046730187, 0.014175134, 0.024320196, -0.026789488, -0.047033023, -0.036620066, -0.009393793, -0.007576766, 0.009556859, 0.0019611653, 0.018193556, 0.020057173, -0.053485796, -0.023167083, -0.014978819, -0.030446835, 0.047405746, 0.018647814, -0.018484747, 0.044051237, 0.032939423, -0.026160518, 0.016294997, 0.022444932, 0.07407876, -0.01380241, 0.024902577, -0.020429896, 0.025252005, 0.01052361, 0.039345603, -0.014978819, 0.01052361, -0.041255813, 0.053625565, -0.026416766, 0.037062675, -0.03829732, -0.0291656, -0.0099295825, -0.00041494588, 0.034872927, -0.020732734, -0.0028929736, 0.036573473, 0.07393899, 0.025065644, -0.04004446, -0.022025619, 0.023225322, -0.018263442, -0.031984318, -0.013278268, 0.026416766, 0.013115202, 0.01540978, -0.010348896, -0.0066799005, 0.066950426, 0.0153748365, -0.034383725, 0.021501476, 0.0032817123, -0.016795844, 0.018356623, -0.00140936, -0.047172796, 0.009521916, 0.016178522, 0.01346463, -0.039042767, -0.030749673, 0.014466324, -0.029980931, 0.027884362, 0.0004025703, -0.0017238454, -0.0046823365, -0.0126143545, 0.023877587, 0.012812364, 0.013639344, 0.013254973, -0.008642522, -0.020942392, 0.029282076, 0.010640086, 0.0036573475, -0.020674497, 0.011222466, -0.026020747, -0.006639134, 0.032683175, -0.024459967, -0.0056141447, 0.0665777, -0.044563733, 0.0078563085, -0.02541507, 0.004405706, 0.04433078, 0.021501476, 0.025484957, 0.045798376, 0.03387123, 0.08954678, -0.032357045, 0.018216852, 0.0011727681, -0.03247352, 0.0025988715, -0.015933922, 0.020721087, -0.01375582, -0.031075805, -0.017180216, -0.066531114, -0.016423121, -0.0017078299, 0.050038107, 0.06918676, -0.0704447, -0.0033399502, -0.0035292238, 0.04155865, 0.009265669, 0.06299024, -0.03736551, 0.00032667888, 0.01899724, -0.0056461757, 0.0064585963, -0.0315883, -0.014151839, 0.024669625, -0.039112654, 0.032240566, 0.020045526, -0.008933712, -0.006615839, 0.060986854, -0.023737816, -0.013406391, -0.015176827, -0.03130876, -0.013359801, 0.013779115, -0.003380717, -0.033382032, 0.030633198, -0.011868908, -0.014140191, 0.0014137279, 0.073845804, -0.042746704, -0.0242969, -0.055582363, -0.03820414, -0.026183812, -0.004525094, 0.026649717, -0.04183819, -0.03468656, -0.031891137, -0.045029636, -0.008392098, -0.02415713, -0.039112654, 0.013650991, -0.03533883, -0.015339894, 0.006196525, -0.015386485, 0.015631083, -0.0359678, 0.023609692, 0.08195254, 0.023539808, -0.017063739, 0.014641038, -0.025601432, -0.00041494588, 0.04023082, -0.038949586, -0.028536629, 0.024436673, 0.007349638, -0.0035816382, 0.026673011, 0.0029468436, -0.00013649535, -0.044004645, -0.01744811, 0.0020936567, 0.0152467135, 0.0291656, 0.039252423, -0.020814268, 0.0028609426, -0.036130868, 0.023947474, -0.08549341, -0.0032729765, -0.036457, -0.020255182, -0.022584703, -0.040160935, 0.040463775, -0.0247861, 0.004117428, -0.01691232, 0.059449367, -0.00029410198, -0.009038541, 0.003468074, 0.023073902, 0.0016408561, -0.031728074, 0.009056012, -0.009155016, 0.0012775966, 0.012591059, 0.00047463985, 0.00061659503, -0.016784197, -0.019649507, -0.03578144, -0.003677731, -0.0021067604, 0.024949167, -0.030982625, -0.028117316, -0.016294997, 0.0060684015, 0.006959443, 0.038716633, -0.018193556, 0.01910207, 0.0075884135, 0.045984738, -0.0038407973, 0.01686573, -0.016399825, 0.006615839, 0.023493217, -0.023807703, -0.010040234, 0.02536848, 0.04477339, 0.01657454, -0.030074112, 0.0010868671, 0.0030371125, 0.00039565453, 0.063782275, -0.029398551, -0.0014173677, -0.0062489393, -0.023632988, 0.02026683, -0.026603127, -0.04505293, -0.010139239, 0.0014668701, -0.011950442, -0.042234212, 0.013115202, 0.039834805, 0.015398132, -0.0020485222, -0.01856628, -0.020488136, -0.037738234, 0.042560343, 0.029957637, 0.037225742, -0.0035292238, 0.04638076, -0.017087035, 0.031075805, -0.020301772, 0.014501266, -0.0027575702, 0.0010511962, -0.045448948, -0.007256457, 0.050364237, -0.009073483, -0.03524565, -0.02133841, -0.031238873, -0.03130876, 0.05497669, 0.012649298, 0.03708597, -0.0071516284, 0.018694405, -0.026323585, 0.0144080855, 0.025787795, 0.016854083, 0.022060562, 0.04607792, -0.004399882, -0.058890283, 0.036340524, -0.04836085, 0.052134674, 0.020930743, -0.023807703, 0.0037796474, 0.008205737, -0.01787907, -0.03873993, -0.042257506, -0.013744173, 0.012043622, -0.0023571837, 0.019311726, -0.016679369, 0.037784826, 0.009580154, -0.012136803, -0.014058658, -0.02362134, -0.0051249457, 0.004766782, -0.029049123, 0.043631922, -0.013103554, -0.017529644, 0.018647814, 0.02711562, -0.012241632, 0.017599529, -0.017867424, 0.0071632764, -0.018787585, -0.01827509, -0.018799232, 0.013814058, -0.012707535, 0.008520222, 0.037412103, 0.023947474, 0.02585768, -0.032147385, -0.009056012, -0.034034297, -0.024180425, -0.05190172, 0.0063887103, -0.027185507, -0.016993854, -0.018531337, 0.02595086, 0.034430318, 0.01613193, -0.029375257, 0.023097198, -0.014140191, -0.0037709116, -0.031611595, -0.004000952, 0.028909352, -0.02022024, -0.04023082, 0.029398551, -0.026509946, 0.03699279, -0.0033603336, -0.04053366, -0.0066857245, 0.0015738824, -0.01011012, 0.0060975207, -0.015968865, 0.030726379, 0.039555263, -0.025578137, -0.017902367, -0.02153642, 0.026742898, 0.0056607355, 0.025578137, 0.036037687, -0.034966107, 0.0015724265, -0.024902577, 0.020476487, 0.00920743, 0.0050055576, 0.010267363, -0.024110539, 0.025554841, -0.00029264603, -0.0153748365, 0.010180006, 0.002761938, -0.04724268, -0.004076661, 0.008461984, -0.020243535, -0.01243964, 0.025135528, 0.020907449, 0.049199477, 0.0053346027, -0.0003843709, 0.010878862, 0.033218965, -0.0031943552, -0.001204071, 0.0015986336, 0.0184731, 0.0031914434, 0.044889864, -0.0016350324, -0.041372288, 0.0045920676, 0.036270637, -0.0177393, -0.00078257336, 0.016143579, 0.07305377, -0.019556327, -0.01836827, -0.009981996, -0.022316808, -0.009044364, 0.012987078, 0.030540017, -0.019428203, -0.00870076, 0.0320775, -0.043911465, 0.013709229, 0.003345774, -0.011094342, 0.007838837, 0.013394744, 0.01769271, 0.020872505, 0.0019859164, -0.01516518, -0.022188684, -0.006691548, 0.020616258, 0.03086615, 0.017750949, -0.047592107, -0.009079307, 0.030633198, -0.019474793, -0.011455419, -0.011129285, 0.0013241869, 0.008858003, 0.031867843, -0.004740575, -0.016562892, -0.024949167, 0.020662848, 0.0066507817, -0.06531976, 0.006179054, -0.0018053786, 0.01003441, -0.0029905222, -0.022293514, 0.024413377, 0.023318503, 0.014722571, 0.040370595, -0.02711562, 0.012917193, 0.042397276, 0.0041844016, 0.021175344, 0.02362134, -0.014175134, -0.01803049, -0.017145272, -0.009545211, 0.0058907755, -0.0015767943, -0.019731041, -0.039788213, 0.015514608, 0.007396228, -0.004493063, -0.03960185, 0.016807493, 0.03922913, 0.0025086026, -0.021350058, 0.039531965, 0.006668253, 0.03897288, 0.041628536, -0.011665075, -0.031821255, 0.09145699, 0.016993854, -0.007495233, 0.022328457, -0.017366577], [0.0018536515, -0.03256188, -0.004463161, 0.048590865, 0.010779973, 0.040192444, -0.044655606, 0.010983935, -0.0228797, 0.0042322045, -0.0063528055, 0.05398985, -0.016292937, -0.006250825, -0.008062485, 0.031026168, -0.04314389, 0.006148844, 0.010731982, -0.04643127, -0.010863958, -0.0664675, -0.090654954, 0.05144633, 0.023911504, 0.025099281, 0.0068867053, 0.011673805, 0.003218395, 0.03270585, 0.00962819, -0.012789596, 0.05653337, -0.025099281, 0.015717044, -0.026035106, 0.02356357, 0.042951927, -0.046335287, -0.014985182, 0.00064900296, -0.0007198647, -0.003914264, -0.0633001, -0.025195263, 0.024883322, -0.02159594, -0.020996053, -0.039808515, -0.015897011, 0.010066108, -0.034385536, -0.0030414283, -0.010785973, -0.01600499, -0.015873017, 0.06229229, -0.08067283, 0.0151291555, 0.030258311, -0.015789032, 0.017732667, 0.02473935, -0.01521314, 0.018944439, -0.023275625, 0.050390527, 0.013257507, 0.03256188, 0.055333596, -0.0063528055, 0.017948626, -0.012369675, 0.0005713926, 0.020240195, -0.047799014, 0.077409446, 0.059220865, -0.046647232, -0.0005380238, 0.015345115, -0.023875512, -0.014313309, 0.014217327, 0.03733698, 0.0022510767, 0.01324551, -0.10356453, 0.0036773086, -0.007330622, 0.008452411, -0.0022645742, 0.03277784, 0.03536935, -0.029058537, 0.012213704, 0.0025780154, -0.0032843826, -0.036473144, -0.006928697, -0.0109359445, -0.016412914, -0.06747531, -0.06142845, 0.03580127, 0.024667362, 0.042759962, 0.015897011, -0.0073606162, 0.09353442, 0.014109347, -0.01000012, 0.002170092, 0.0019061416, -0.027882759, 0.063828, -0.008374426, -0.013221514, -0.037936866, 0.01181178, -0.10625202, -0.017036797, 0.038104836, -0.0069706896, 0.0013295001, 0.03995249, 0.012099725, 0.027426844, -0.016736854, 0.036881067, -0.009460221, 0.0175527, 0.058548994, 0.05101441, 0.03270585, 0.005090043, 0.034169577, 0.0007067421, -0.008632377, 0.012813591, -0.071074635, 0.022999676, -0.04345583, 0.02920251, -0.027114902, 0.021823898, 0.0025120277, -0.0244754, -0.07918511, -0.03916064, -0.007450599, -0.022723729, 0.03978452, 0.031098153, 0.035921246, 0.007960503, 0.013785408, 0.07366615, -0.023983492, -0.014349302, 0.0033203757, -0.07894516, -0.001643691, -0.002798474, 0.045639418, -0.05648538, 0.040888313, -0.035201382, -0.05096642, 0.031266123, 0.0008713362, -0.011607817, 0.0013684927, 0.017972622, -0.02898655, 0.025195263, 0.023371607, 0.043071903, -0.05538159, -0.044271678, -0.040240433, 0.10078105, 0.030474272, -0.059316847, -0.00033574938, 0.0255312, 0.012825589, -0.026946934, 0.046623234, -0.037408967, 0.009712175, -0.013569449, 0.0054799695, -0.05696529, -0.021847893, -0.030018356, -0.0073186243, -0.052790076, 0.025603186, -0.006802721, 0.009172276, -0.0750099, -0.0037043036, 0.01164981, -0.046575245, 0.030042352, 0.020084225, -0.032729845, 0.004205209, 0.003074422, 0.02601111, 0.00026282558, 0.026778966, -0.017924631, -0.005908889, 0.018116593, -0.055045653, 0.0494787, 0.0037432963, -0.03424156, 0.06613157, -0.026299056, 0.018104596, 0.027666798, -0.0077745384, 0.038584746, 0.023791527, 0.008104476, 0.01877647, -0.03186601, -0.00590289, -0.042783957, -0.00500006, 0.022903694, -0.029538447, 0.0007881018, -0.011757789, 0.038800705, 0.06819518, -0.005887893, 0.027138898, 0.0420161, -0.050150573, -0.0239355, 0.032057974, 0.065891616, 0.0096641835, 0.03908865, -0.031961992, 0.011655808, 0.046143327, -0.019100409, 0.00018390293, 0.013149528, -0.033809643, 0.055765517, -0.0015942003, -0.048422895, 0.0085064005, 0.03440953, 0.0033383723, 0.04825493, -0.062100325, 0.07697753, -0.04904678, -0.034505513, 0.06075658, -0.050342537, -0.04743908, -0.030402284, 0.049286734, -0.033737656, -0.032585874, -0.021895884, 0.034481518, 0.037624925, 0.046791203, 0.046935175, -0.042064093, 0.07328222, 0.013233512, -0.010839962, 0.032273933, 0.0083264345, 0.032033976, -0.0006681244, -0.009766164, -0.019028423, -0.023911504, 0.019184394, -0.04223206, -0.059700776, 0.008758353, 0.06641951, 0.018800465, 0.033209756, -0.0020456153, 0.01612497, -0.038272806, -0.024667362, -0.03217795, 0.0070246793, -0.00446616, -0.03851276, 0.016640872, 0.010911949, 0.041608177, 0.0877755, 0.011943755, -0.02701892, 0.06545969, -0.01164981, -0.059076894, -0.029658424, -0.0032213945, -0.02867461, -0.03728899, 0.05202222, 0.061044525, -0.046983168, -0.026251065, 0.008704363, -0.050390527, 0.0067967223, 0.0035453334, -0.0005031554, -0.01612497, -0.030474272, -0.04357581, 0.01239367, -0.01962831, 0.014193332, -0.044247683, -0.0044901557, -0.053557932, -0.09031902, -0.008398421, -0.03224994, 0.082112566, -0.058740955, -0.04638328, -0.0018731478, -0.0058489004, -0.03090619, -0.00909429, 0.010204081, -0.017228762, -0.006484781, 0.01638892, -0.008764353, 0.0014554764, 0.054229803, 0.036713097, -0.005674933, 0.016868828, -0.01015609, -0.02723488, -0.025867136, -0.0110019315, 0.0011457846, 0.09650986, -0.087487556, 0.054085832, 0.028746596, -0.033281744, -0.05514163, -0.032897815, -0.012897575, 0.01287358, 0.017612688, -0.028434655, 0.017228762, -0.017384732, -0.07625766, 0.0009260759, -0.035993233, 0.016784845, -0.008116474, -0.005428979, 0.021128029, -0.02356357, -0.036353167, 0.0030294305, -0.002404048, 0.012909573, 0.023575569, -0.024091471, -0.008896328, 0.03968854, 0.005419981, 0.018872453, 0.032057974, -0.016760848, -0.007144657, 0.05307802, 0.024643367, -0.027210884, 0.010084104, -0.013137531, 0.010258071, -0.0021206012, 0.009292253, 0.01685683, -0.017840646, 0.02031218, -0.033449713, 0.007834527, 0.016988806, 0.009964127, 0.03335373, 0.0095742, -0.0024295433, 0.013929381, 0.011781785, 0.014337305, 0.035129394, 0.04825493, 0.03292181, -0.03606522, 0.01718077, 0.024019483, -0.019340364, 0.018164584, 0.02441541, -0.0446796, 0.044271678, -0.05696529, 0.029394474, 0.022279812, -0.04652725, -2.0410225e-05, -0.0035393345, 0.035297364, -0.00076410634, -0.035921246, -0.0750099, -0.037720907, -0.048686847, -0.030570252, 0.017276753, 0.017840646, -0.013353489, 0.00909429, 0.011505837, -0.023491584, -0.033905625, -0.02723488, 0.00760657, 0.016460905, -0.0034313549, -0.0776974, -0.010546017, -0.014397293, -0.04139222, 0.079089135, -0.0014802217, -0.01670086, -0.054421768, 0.02202786, -0.057829127, 0.009640188, 0.04228005, 0.03208197, -0.030546257, 0.02371954, -0.021739913, 0.006712738, 0.05840502, 0.038704723, 0.019616311, 0.0025765155, -0.0038872692, -0.082880415, 0.0078105316, -0.005827904, -0.017960623, -0.03392962, 0.003170404, 0.04153619, -0.018824462, -0.0001574704, 0.0099581275, 0.027522827, 0.034553505, 0.004187213, -0.017468715, 0.03318576, 0.017324744, 0.05259811, -0.025699168, -0.0130895395, 0.04052838, 0.030474272, -0.0039862506, 0.017672678, -0.055765517, -0.016496899, -0.038272806, 0.032513887, 0.01739673, 0.034769464, -0.010612005, 0.015537079, 0.023587566, 0.026107091, -0.005581951, -0.008338433, -0.062580235, 0.027834767, -0.02574716, -0.013005555, -0.007402608, -0.026179079, 0.016868828, -0.032897815, -0.003929261, 0.009382236, 0.011325871, -0.00808648, 0.019760285, -0.014961188, 0.006742732, -0.037576936, -0.0036083215, -0.027258875, 0.010168089, 0.020528141, 0.017648682, -0.057109263, -0.039064657, -8.8717694e-05, -0.020372171, 0.0014119846, 0.0004724112, 0.026658988, 0.009220267, 0.028794587, 0.009196271, -0.03846477, 0.007558579, -0.024391415, 0.0867197, -0.0065447697, 0.008188461, -0.039424587, 0.058309037, 0.0070306784, -0.0011142906, -0.03733698, 0.040984295, -0.048806824, 0.034841448, 0.0025555196, 0.032897815, -0.020384168, -0.01840454, -0.03812883, -0.0085064005, 0.015081164, -0.030018356, 0.019292373, 0.00025701418, 0.08446412, 0.059076894, -0.021979868, -0.051686283, 0.021068038, 0.021068038, 0.0014727231, 0.016868828, 0.039736528, 0.03527337, -0.0016376921, -0.015429099, -0.0054349783, 0.034553505, -0.021248005, -0.047583055, 0.007792535, -0.009268258, -0.027162893, -0.016724857, 0.02579515, -0.03392962, 0.035561316, -0.0043341853, -0.022903694, -0.008980311, -0.035129394, 0.025675174, -0.0015417101, 0.0118657695, 0.04825493, 0.006031866, -0.011145905, 0.005303003, 0.016244946, -0.014997181, -0.005551956, 0.030162329, 0.009376237, 0.025219258, 0.024559382, 0.01388139, -0.023491584, -0.015153151, 0.017780658, -0.056437388, -0.0075285845, 0.025963118, 0.01824857, -0.019904258, 0.03673709, -0.041080277, 0.026563006, -0.02031218, 0.020120217, 0.076449625, 0.004250201, 0.042903934, 0.017852644, 0.020612124, 0.068291165, -0.021847893, 0.01877647, -0.008416418, 0.010534019, 0.009562203, -0.015933005, 0.02793075, 0.008224454, -0.01840454, -0.0122736925, -0.035609305, -0.0037312985, 0.016148964, 0.0462873, 0.06449988, -0.016772848, -0.00084434124, 0.022327803, -0.0010550517, 0.0034283556, 0.020240195, -0.029058537, -0.047151137, 0.02877059, -0.024271438, 0.013821402, -0.046095334, -0.03325775, 0.033641674, 0.019280376, 0.028314676, 0.012297688, -0.023023672, 0.007852524, 0.016748851, -0.045711406, 0.04218407, -0.035777275, -0.062004343, 0.00033481207, 0.015045172, -0.0075165867, 0.014337305, -0.0066887424, -0.005246014, 0.013425476, -0.0048260926, 0.07798534, -0.035297364, -0.07961703, 0.005111039, -0.033497702, -0.006160842, -0.021295996, 0.05048651, -0.01005411, -0.026658988, -0.036857072, -0.039280616, -0.023059664, 0.0032093967, -0.026970929, -0.012105724, -0.020804089, -0.010947942, -0.042855944, -0.004376177, 0.012309685, -0.019160397, -0.007888517, 0.055189624, 0.017216763, -0.0019121405, -0.030402284, -0.058213055, 0.010701988, 0.048662852, 0.0076785563, -0.009676181, -0.0051830257, 0.032153957, 0.022387791, 0.019316368, -0.010120098, -4.4124517e-05, -0.014577259, -0.031937994, -4.4640045e-05, 0.020504145, 0.004547145, 0.03877671, 0.02946646, 0.0036953052, -0.023179643, -0.00074498495, -0.036929056, 0.0260591, -0.004601135, -0.04652725, -0.023947498, -0.025963118, -0.009688179, -0.015417102, 0.010402044, 0.013857394, 0.03419357, 0.0005702678, 0.045495447, -0.061668407, -0.00058151566, 0.017768659, -0.033593684, 0.020804089, -0.017000804, 0.01739673, 0.047583055, 0.009814155, -9.589994e-06, -0.049718652, -0.025723165, -0.028338673, 0.02026419, 0.019496335, 0.02207585, -0.009160277, 0.0077805375, -0.0064907796, 0.027690794, 0.0015019677, 0.015009178, -0.014565262, 0.02143997, 0.024283435, 0.00978416, -0.011091915, 0.004367179, -0.022819709, -0.014193332, 0.028074723, -0.007084668, -0.0054859687, 0.01956832, 0.012753602, 0.008524397, -0.06181238, 0.0040612365, 0.006580763, 0.012669618, 0.033521697, -0.011943755, -0.050678473, -0.0016646871, -0.024187453, 0.03714502, -0.028698605, -0.03642515, -0.04139222, -0.013545454, 0.0028944558, -0.025027296, -0.018476527, 0.023743536, 0.008008494, -0.0035363352, -0.035225376, -0.014997181, -0.014925194, 0.028314676, 0.0025225258, 0.05485369, 0.02415146, 0.012825589, -0.039112646, 0.02797874, 0.03356969, 0.00712666, -0.00028738347, 0.03781689, -0.048446894, -0.025771156, 0.011127908, 0.019796278, -0.057685155, -0.020144213, -0.025171269, -0.035249375, 0.035945244, 0.017780658, -0.005338996, -0.0013280003, 0.010642, -0.051734272, 0.04499154, 0.009622191, 0.0056509376, 0.017912632, -0.0027144896, 0.01632893, -0.02994637, 0.012861582, -0.058980912, 0.046959173, 0.04652725, 0.015897011, -0.0006527523, -0.03642515, -0.016460905, -0.03287382, -0.02415146, 0.007078669, 0.03200998, 0.009466221, 0.020888073, -0.035849262, 0.019928254, 0.012621627, 0.016520893, -0.014193332, 0.006079857, 0.0003291881, 0.0019061416, -0.03575328, 0.03378565, -0.01361744, -0.008176463, 0.017072791, 0.037193008, 0.079473056, 0.012147716, 0.046839193, -0.0016511895, -0.028074723, -0.015861018, -0.03224994, -0.014145341, -0.007276632, 0.021571945, -0.012441661, 0.018344551, 0.0069047017, -0.015381108, 0.012681616, 0.013125532, -0.008890329, -0.06680344, 0.015633062, -0.044103708, -0.038872693, 0.0035393345, 0.016784845, 0.06440389, 0.037384972, -0.039280616, 0.0147212325, -0.057733145, -0.0137254195, -0.005030054, 0.0044541624, 0.014661244, -0.027138898, -0.016052982, -0.008836339, -0.012981559, 0.047007162, -0.0011217891, -0.037217002, 0.015081164, -0.006070859, -0.015909009, 0.002485033, -0.02505129, 0.02371954, 0.017648682, -0.024079474, -0.012585634, -0.043263867, 0.03064224, 0.0041092276, 0.023203637, -0.0066287536, 0.00016459405, 0.008914324, 0.020804089, -0.024007486, 0.026970929, -0.026371041, 0.0050870436, -0.0056029465, 0.0054979664, 0.021775907, -0.0223398, 0.043071903, -0.023923503, -0.03234592, 0.0005845151, -0.00037530443, -0.050390527, -0.021943875, 0.016844833, -0.00925626, 0.03308978, -0.007276632, 0.0068747075, 0.04139222, 0.019232385, 0.019604314, -0.026443029, 0.019940251, 0.006340808, -0.003335373, 0.041368224, 0.0051500318, -0.05298204, -0.023251629, 0.015261131, -0.033833638, -0.016364923, 0.03659312, 0.069011025, 0.009346243, -0.009862146, 0.026179079, -0.04223206, 0.0063228114, 0.009244262, -0.025099281, -0.0043431837, -0.02718689, 0.011307874, -0.018380545, -0.0026410036, -0.0032783838, 0.037001044, -0.0062808194, 0.023203637, -0.006580763, 0.047799014, 0.037097026, -0.011229889, 0.005566953, -0.012861582, 0.012645623, 0.03649714, 0.007702552, -0.027114902, -0.024547385, 0.030498266, -0.056245428, -0.020168208, 0.01085196, 0.009592197, 0.00067112385, 0.009430227, 0.03572928, -0.041056283, -0.054901678, 0.022987679, 0.023839518, -0.037936866, -0.033113774, -0.017768659, -0.03323375, -0.01611297, -0.014433286, 0.01626894, -0.01845253, 0.020540139, 0.045639418, -0.054709714, 8.557766e-05, 0.03160206, -0.039664544, 0.012465657, 0.023383604, -0.038656734, -0.022303807, -0.010618004, 0.003803285, 0.004217207, -0.03589725, 0.03021032, -0.047367096, 0.0420161, 0.016508896, 0.015093163, -0.00097631646, -0.020408163, 0.02308366, 0.028122714, -0.01584902, 0.023263626, 0.007744544, 0.013077541, 0.052934047, -0.008842338, -0.028722601, 0.07596972, 0.031050162, 0.0065867617, 0.032993797, -0.0067787254], [0.027246032, -0.040976692, -0.021588713, 0.035355255, -0.01466358, -0.009317233, -0.028824817, 0.014065554, 0.007032777, -0.010620928, -0.03903909, 0.013156556, 0.047770258, -0.049372967, -0.010973764, 0.016864313, -0.015189841, 0.012367163, -0.018096244, -0.048129074, 0.0061477, -0.059659, -0.079656966, -0.009383016, -0.022569474, 0.009329194, -0.012582451, 0.018395256, 0.0069251326, -0.006721804, 0.04281861, 0.03174318, 0.026408795, -0.036718752, 0.056740638, 0.0008185471, 0.002178307, 0.02295221, -0.054874796, -0.034661543, 0.020727556, -0.0061596604, -0.0035612404, -0.006919152, -0.007756388, 0.012654214, -0.04231627, -0.020189334, -0.010686711, -0.037795197, -0.004072552, -0.021839883, 0.03336981, -0.047196154, -0.003905105, -0.01563238, 0.024566878, -0.124197885, 0.033585098, 0.034230966, -0.07606881, 0.062864415, 0.011332579, -0.01587159, -0.0050951755, -0.012426965, 0.022425948, 0.0023651898, 0.012953227, 0.014268883, -0.061142102, 0.01161365, 0.006013144, -0.013359885, -0.023131616, -0.05659711, 0.094583675, 0.036790513, -0.03640778, -0.018921519, 0.028705213, -0.07530334, 0.020428544, -0.0298295, 0.01796468, 0.0068832706, 0.02176812, -0.08491959, -0.011326599, -0.011529927, -0.017569982, 0.025499796, 0.021002647, 0.0077683483, -0.03478115, 0.018156048, 0.006422791, 0.008228827, -0.03030792, -0.001372468, -0.024435312, -0.045569524, -0.047267918, -0.07429866, 0.0077683483, -0.0012132438, 0.008037459, -0.018849757, 0.01800056, 0.13022599, 0.051717225, -0.010967784, 0.0097119305, -0.024411391, -0.043631922, 0.045306396, -0.014639659, -0.052052118, -0.02297613, 0.011165132, -0.074442185, -0.055496745, 0.03368078, 0.035666227, -0.045138948, 0.0075650197, 0.037077565, 0.009849476, -0.01041162, -0.023633959, 0.031121235, -0.026432717, 0.066165514, 0.050329804, 0.024925694, 0.0075650197, 0.038177934, -0.023729643, 0.016027076, 0.023909051, -0.022521632, -0.026289191, -0.018586624, 0.033513337, -0.0107405335, 0.009915259, 0.013168517, 0.006841409, -0.031838864, 0.0037286875, -0.064060465, -0.0061656404, -0.0013575173, 0.07209793, 0.028944423, -0.024925694, 0.023813367, 0.026624085, -0.0056961905, 0.014304765, 0.0028495905, -0.06760078, -0.01894544, 0.031049471, 0.009574384, -0.0364317, 0.04480405, -0.032341205, -0.06520867, 0.042005293, 0.024459234, -0.050521173, 0.01017839, 0.0017417485, -0.0059114797, 0.019220533, 0.0029811559, 0.04540208, -0.029709894, -0.05296112, -0.046550285, 0.06740941, 0.02581077, -0.055975165, 0.059993893, 0.012630293, 0.013467529, -0.0034745268, 0.029685974, -0.005062284, -0.017558021, -0.04140727, -0.030140473, -0.021552831, -0.012080111, -0.07597313, -0.024483154, -0.013706739, 0.011326599, 0.022306342, -0.013575174, -0.04399074, -0.015644342, 0.041287664, -0.06133347, 0.026863296, 0.085158795, -0.02412434, -0.02719819, -0.043895055, -0.0096939895, 0.02772445, 0.020739516, -0.042746846, -0.011177092, 0.016433734, -0.06903604, 0.0029273336, -0.013324003, -0.04119198, 0.03224552, -0.0013829335, -0.005232721, -0.02319142, 0.017438417, 0.07592529, 0.0008992805, -2.5089028e-05, -0.0020796328, -0.0074693356, 0.02674369, 0.015704144, -0.00781619, 0.051765066, -0.046478525, -0.0043835253, -0.029016186, 0.05166938, 0.06066368, -0.027102506, 0.029973026, -0.008444116, -0.055353217, 0.0004414174, 0.0018299574, 0.055544585, -0.038273618, -0.009765753, -0.03171926, -0.018885639, -0.0047931727, -0.010094667, -0.008426176, 0.0011459659, 0.02581077, 0.05377443, 0.003908095, -0.055305377, -0.023538275, 0.016660985, -0.042986058, 0.063821256, 0.011996387, 0.041096296, 0.01041162, 0.008384314, 0.0040366706, -0.0085158795, -0.03640778, -0.02133754, 0.018550744, -0.026337033, 0.012594412, 0.009616246, 0.06018526, -0.02959029, 0.04946865, 0.021660475, -0.027628766, 0.06788783, 0.015799828, -0.010220252, -0.014125356, -0.0062075024, 0.03757991, -0.00687131, -0.012618333, -0.04449308, -0.027078584, -0.03667091, -0.020225214, -0.06894035, 0.056932006, 0.023753563, 0.05702769, -0.0024264876, -0.021947527, -0.0034625663, -0.09487073, 0.022569474, 0.009430858, 0.012881464, -0.021349503, -0.08324511, -0.01632609, 0.033465493, 0.04475621, 0.0142569225, -0.00037656902, -0.044851895, 0.02887266, 0.004948659, 0.011589729, -0.04499542, 0.010495343, -0.006494554, 0.024088457, 0.0189574, 0.05654927, -0.033274125, -0.017067641, -0.050042756, -0.05186075, -0.009508601, 0.009873397, 0.006219463, 0.005017432, 0.007834131, -0.06683531, -0.05798453, -0.09391389, 0.014651619, -0.04238803, -0.033585098, -0.05540106, -0.07152382, -0.01135052, -0.014448291, -0.006787587, -0.041263744, -0.020296978, 0.012821661, -0.0005460718, -0.040928848, -0.011727275, -0.011547868, 0.039445747, -0.01160169, 0.009765753, -0.027078584, 0.0014561915, 0.03339373, 0.012989108, 0.043871135, 0.0002195874, 0.021265779, -0.029398922, -0.04401466, -0.0014943157, -0.029781658, 0.068318404, -0.08496743, 0.016254326, 0.025906455, 0.051765066, -0.044660527, -0.035211727, -0.0060938774, 0.07367671, 0.028011503, 0.015273565, -0.0018867697, 0.02437551, -0.044612683, -0.013886146, -0.024255905, 0.04281861, 0.012749898, -0.060902894, 0.0029064028, -0.012618333, -0.04071356, 0.04710047, 0.054492064, 0.011236895, -0.027246032, -0.064012624, 0.023107696, -0.0028271645, -0.014699461, -0.016194524, -0.008097262, -0.015584539, -0.056214374, 0.012020308, 0.060520157, -0.0061656404, -0.012331281, 0.019232493, -0.025786849, 0.014400449, -0.008444116, -0.010746514, 0.0107823955, 0.026145665, -0.0077683483, -0.003905105, 0.0069968957, -0.0026148655, 0.03975672, -0.0073497305, 0.031121235, -0.01608688, 0.05276975, 0.0108182775, 0.014460251, -0.0041801967, 0.017187245, -0.046024024, 0.024925694, 0.0487271, -0.022665158, -0.00520581, 0.01632609, -0.009825555, 0.018837797, 0.0020078698, -0.0075709997, -0.029518528, -0.06300794, -0.039661035, -0.010525244, -0.0019480673, 0.022880446, -0.011464144, -0.08114007, -0.031862788, -0.016768629, -3.609176e-05, 0.06348636, -0.0057410426, -0.042962134, 0.030618893, 0.015799828, 0.0018792944, 0.00022762337, -0.06267305, -0.023633959, 0.022784762, 0.008216867, -0.039852403, -0.026313111, -0.08468038, -0.030953787, 0.0581759, -0.009215569, 0.008808912, -0.036527384, 0.028705213, -0.073581025, 0.031886708, -0.011559828, 0.016756669, 0.011476105, 0.029040108, 0.0040097595, -0.01725901, 0.06449104, 0.019411901, 0.010537205, 0.017139405, -0.0077982494, -0.034111362, 0.0041801967, 0.013300082, 0.011721295, -0.031432208, 0.00024313465, -0.0017731449, -0.03805833, -0.03363294, -0.0017851054, 0.047196154, 0.058271583, 0.018395256, 0.037962645, 0.017785272, -0.017330771, 0.05281759, -0.0029721856, 0.030379683, 0.053200327, -0.03951751, -0.007738447, 0.017199207, -0.06563925, -0.0022306342, -0.046191473, 0.04001985, 0.020560108, 0.045808736, 0.004637686, 0.029183634, 0.04994707, 0.023562195, 0.01681647, -0.028561687, -0.0010300985, 0.027030742, 0.006037065, -0.01017839, 0.0045061205, -0.06879683, 0.01136248, -0.0072002243, 0.02985342, -0.017629785, 0.036575224, -0.00035021856, 0.02722211, -0.009066063, -0.01845506, -0.041335505, -0.025906455, -0.0042908313, -0.014603777, 0.003483497, -0.018323494, 0.032532573, -0.071332455, -0.024028655, -0.009418898, -0.016553339, -0.013395766, -0.01159571, 0.004685528, 0.0058128056, 0.0020078698, 0.010190351, 0.02060795, -0.015811788, 0.053535223, -0.0058427067, 0.035857596, -0.01633805, 0.061381314, 0.020572068, -0.013682818, -0.01896936, 0.035355255, -0.0049067973, 0.03667091, 0.00662612, 0.03621641, 0.019531505, -0.027604846, -0.04001985, -0.038967326, 0.008204906, -0.03451802, 0.0021409304, -0.018156048, 0.07338966, 0.037197173, -0.031862788, -0.03126476, 0.02106245, -0.031838864, 0.0047273897, -0.005059294, 0.022748882, 0.03121692, -0.011039547, -0.017797232, -0.01893348, 0.06946661, -0.010244173, -0.020249136, 0.017450377, -0.021564791, -0.024734326, -0.01347949, 0.00403069, -0.055496745, 0.019986004, 0.03270002, -0.0022650207, -0.045330316, -0.0072062043, 0.021708317, -0.0298295, 0.026624085, 0.0059712823, -0.015106118, 0.013634976, -0.01776135, -0.00041674887, 0.009209589, -0.011314638, 0.022605356, 0.00079163595, 0.009311253, -0.0020243155, 0.008228827, -0.038010485, -0.005418109, 0.01657726, -0.04430171, 0.0096461475, -0.011583749, 0.004849985, 0.02109833, 0.01822781, -0.03595328, 0.033058837, 0.018622506, -0.020440504, 0.03573799, 0.023873169, 0.056453586, -0.008916557, 0.020201294, 0.07090188, -0.04686126, 0.01635001, 0.038273618, -0.0016341041, 0.04922944, -0.010160449, -0.03999593, 0.027006822, -0.024710404, -0.021182055, -0.020536188, -0.013575174, -0.00804344, 0.05611869, 0.036072884, 0.013670858, -0.03009263, 0.0038273616, 0.0383693, 0.008862735, 0.024901772, -0.030594973, -0.01896936, 0.03856067, -0.024758246, 0.0653522, -0.0322216, -0.0075709997, 0.029255396, 0.022940248, 0.052482698, -0.015751986, -0.028466003, -0.021146173, 0.018670348, -0.023334946, 0.059993893, -0.03640778, -0.038680274, 0.005143017, 0.0089943, 0.015046315, 0.0038961347, -0.027580924, -0.028681291, -0.017007839, 0.029709894, 0.085110955, -0.030738499, -0.023370827, -0.007690605, -0.060089577, -0.029925184, -0.0054569803, 0.054539904, -0.0004784202, -0.003994809, -0.050999593, -0.010262114, 0.008796952, 0.04401466, -0.036383856, 0.005137037, -0.02796366, 0.037316777, -0.05037765, 0.019543465, 0.010770435, -0.00876107, -0.006102848, 0.00021267273, 0.0070746387, 0.01962719, 0.0032353166, -0.0875509, 0.0060251043, 0.047459286, -0.0130847925, -0.0010457967, -0.037053645, -0.03667091, 0.021241857, 0.008695288, -0.009299293, -0.011302678, -0.004829054, -0.028131109, 0.032771785, -0.0015294496, 0.0032024253, 0.022808684, 0.016206484, -0.024172181, -0.019352097, 0.01704372, -0.046000104, 0.029877342, 0.0018120166, -0.025667245, -0.010453481, -0.029614212, -0.008928517, -0.043751527, 0.016900195, -0.0005397178, 0.040163375, -0.0019166709, 0.026145665, -0.007965697, 0.025739007, -0.013168517, -0.013587134, 0.0096880095, -0.0019316216, -0.002863046, 0.025284508, 0.021002647, -0.032939233, -0.0032173758, 0.017091563, 0.01918465, 0.013826344, -0.028561687, 0.027748372, -0.01893348, -0.02932716, -0.01160767, -0.036527384, 0.010088686, 0.033417653, 0.008384314, 0.0030364732, 0.058271583, 0.00048813812, -0.005660309, -0.03669483, -0.010034864, 0.014603777, 0.01917269, 0.01279774, -0.04733968, 0.06181189, 0.0024160221, -0.0054031583, -0.022665158, 0.019100927, 0.018084284, 0.032795705, 0.019950124, 0.019220533, -0.02033286, -0.018586624, -0.021732237, -0.00031527143, -0.046287157, -0.022210658, -0.019088967, -0.026671927, 0.019926202, -0.020213254, -0.005397178, 0.0322216, -0.00016286844, 0.016493537, 0.010142509, 0.024435312, 0.00639887, -0.020512266, 0.038201854, 0.02249771, 0.0043207323, 0.07922639, -0.02414826, 0.017354693, -0.010860139, 0.012343242, -0.0046018045, 0.0011549363, -0.040617876, -0.008946458, 0.014938671, -0.035905436, -0.03148005, 0.004467249, -0.034230966, -0.04449308, 0.04755497, 0.029303238, 0.009030182, -0.0050293924, -0.011703354, -0.025643323, 0.030020868, 0.034422334, -0.02648056, -0.039661035, 0.04870318, -0.027054664, -0.009221549, 0.0050981655, -0.003151593, 0.012127953, 0.056979846, 0.0031127215, -0.02435159, -0.026695848, -0.025906455, -0.0130130295, -0.020930884, -0.0142210405, 0.034446254, 0.028226793, 0.023035932, -0.057936687, 0.012080111, -0.0049067973, 0.0030215227, 0.034685466, 0.0007677149, -0.011147191, 0.011619631, -0.049420808, 0.04590442, 0.0096760485, -1.1796983e-06, -0.016876273, 0.0050981655, 0.06783999, 0.032269444, 0.013276161, 0.0096461475, -0.032580417, 0.0077444273, -0.033991758, 0.012438926, -0.00449416, 0.0130608715, -0.007122481, 0.047435366, 0.008234808, -0.0022425947, 0.011183073, -0.008169025, -0.02887266, -0.06664394, -0.022270462, -0.053535223, -0.026145665, 0.017402535, 0.0010375738, 0.03839322, 0.017952718, -0.04135943, -0.009586345, -0.036359936, -0.03193455, 0.01773743, 0.032149836, 0.024519036, -0.039613195, 0.008635485, -0.039182615, -0.011685413, -0.008814893, -0.003049929, -0.027509162, 0.014472212, 0.019950124, -0.0108421985, 0.026432717, 0.014543975, 0.03384823, 0.033919994, -0.008563722, -0.07071051, -0.01349145, 0.023311025, 0.010591027, -0.0007834131, 0.03930222, -0.0217442, -0.0049606194, 0.023526315, 0.009993002, 0.030523209, 0.01871819, 0.0077205063, -0.041072376, 0.0039888285, 0.0009979546, 0.008019519, 0.05985037, 0.0055018323, -0.023167498, 0.0040127495, -0.0028929473, -0.01987836, 0.01965111, 0.009610266, -0.0064048506, 0.06755293, -0.0054569803, 0.036264252, 0.040402588, 0.0142210405, 0.019364059, -0.011153171, 0.0364317, 0.024411391, 0.0009897319, 0.03624033, 0.036790513, -0.04066572, -0.035235647, 0.0065005347, -0.035857596, -0.011547868, 0.026169585, 0.070232086, -0.022928288, -0.025643323, 0.03167142, -0.01989032, 0.0108242575, 0.042531557, 0.010483383, -0.043368794, 0.0119664855, 0.07817386, 0.0030170374, 0.005334385, -0.0217442, 0.0024743294, -0.0059952033, 0.0065483768, -0.03743638, 0.018275652, 0.003528349, -0.01635001, -0.025140982, -0.008312551, 0.012474807, -0.023980813, 0.056692794, -0.010369758, 0.0021618614, 0.03834538, -0.031958472, -0.00015062762, 0.030929867, 0.030140473, 0.011159152, -0.018754072, 0.02461472, -0.021205977, -0.009167727, 0.018431138, 0.00662014, -0.036383856, -0.021241857, 0.013814383, -0.021827921, -0.038034406, -0.011631591, 0.04351232, 0.012121972, 0.013455569, 0.011769137, -0.035594463, -0.004598814, -0.0011190547, -0.0119664855, -0.014711422, 0.044517, -0.0049067973, 0.01728293, 0.0031306623, -0.009658108, -0.015704144, -0.00035582503, 0.04214882, -0.036264252, 0.027269952, -0.01349145, 0.011697374, -0.025667245, 0.0017103523, 0.0073676715, 0.010632889, -0.017151365, -0.023944931, 0.011745216, -0.021552831, 0.010459462, -0.023514353, -0.017175285, 0.05540106, 0.03243689, -0.03193455, 0.03451802, 0.010106627], [0.019307641, -0.06177503, -0.015290615, 0.008257874, 0.032630973, 0.03404459, -0.04207864, 0.0067500174, 0.02109822, 0.028790649, -0.032089088, 0.020414975, 0.03048699, 0.0013252652, -0.003996411, 0.06252895, -0.0028964407, 0.011744794, -0.019366542, -0.019613925, -0.024267077, -0.03698962, -0.060879737, 0.019778846, 0.0042349584, 0.02351315, 0.007957481, 0.016609991, -0.016727792, 0.033761866, 0.038308997, 0.005678025, 0.058994915, -0.02619902, 0.029144054, -0.012604744, -0.012922808, 0.027565515, -0.060832616, -0.014501346, -0.034633595, 0.0012913973, 0.0043174196, -0.025633574, -0.008593609, -0.025468651, -0.022794561, 0.015514437, 0.0149254305, -0.052869245, 0.018589053, -0.024267077, 0.009494789, 0.0016330212, -0.043068174, 0.020332513, 0.051973954, -0.110167824, 0.03392679, -0.015950302, -0.053764537, 0.024738284, 0.004308584, 0.003407404, -0.02445556, -0.00965971, 0.011844926, 0.03411527, 0.05847659, 0.037814233, -0.007079861, 0.039769735, 0.021663668, -0.008369786, 0.01309951, -0.022606079, 0.092780344, 0.0131466305, -0.026057659, -0.0434687, 0.010278167, -0.027353473, 0.019837746, -0.014336424, 0.02782468, 0.022429377, 0.02890845, -0.08392168, -0.03430375, 0.019672826, 0.039345652, 0.0026019374, 0.03232469, 0.015997423, -0.045047235, 0.042973932, 0.01142084, 0.007928031, -0.02008513, -0.011126338, -0.0062375814, 0.0067912475, -0.09136672, -0.046013206, 0.053057726, -0.00039610703, 0.065921634, 0.004028806, 0.029191174, 0.15700564, 0.01849481, 0.0066852267, -0.0143953245, 0.0049977223, -0.011738905, 0.040617906, -0.029332535, -0.05852371, 4.9754963e-06, 0.039675493, -0.09339291, -0.0073684743, 0.04891112, 0.016103445, -0.0037608081, 0.015985643, -0.023147965, 0.011562202, -0.012875687, -0.015208154, -0.015184593, 0.045824725, 0.03840324, -0.00057170464, 0.06304728, -0.03331422, 0.031641442, -0.013535375, -0.027589075, -0.0051155235, -0.04707342, -0.0046914387, 0.011456181, 0.011562202, -0.05927764, -0.012298461, -0.01662177, 0.0016403837, -0.04262053, -0.046837818, 0.011697674, -0.0053805765, -0.008275544, 0.04450535, 0.04200796, -0.021522306, 0.032795895, 0.039345652, 0.008151853, 0.0073979245, 0.0028905505, -0.06785358, 0.035528887, 0.0075392863, -0.005418862, -0.03406815, 0.028036721, 0.004099487, -0.009429998, 0.032795895, -0.0024487956, -0.020520994, 0.001569703, -0.019825967, -0.040877067, 0.032725215, 0.04170168, 0.044128384, -0.03293726, -0.04891112, -0.025916297, 0.03668334, 0.04568336, -0.07793737, 0.005760486, 0.025939858, 0.047426824, -0.009577249, 0.043421578, -0.06742949, -0.016315486, 0.0011088052, -0.0050448426, -0.071434736, -0.018553711, -0.05329333, -0.03201841, -0.030746153, -0.014030141, 0.012192439, 0.019437222, -0.07058657, 0.00047341417, -0.03656554, -0.028178083, -0.030274946, 0.023454249, 0.004703219, 0.006184571, 0.051926833, 0.042314243, -0.00014568714, 0.00875264, -0.002734464, -0.031170236, 0.01136194, -0.046578653, -0.019861307, -0.013617836, -0.028178083, 0.07068081, -0.013876999, 0.007527506, 0.002017348, 0.015867842, 0.04537708, 0.05150275, -0.0041731126, 0.013582495, -0.022464717, -0.020615237, -0.026811587, -0.03477496, 0.015867842, -0.09640862, -0.0036400617, -0.035481766, 0.013723857, 0.07977507, 0.013606056, 0.016327268, 0.037837792, -0.025492212, 0.011197018, -0.016551089, 0.04523572, -0.019708166, -0.068419024, -0.021157121, -0.020897958, 0.03837968, -0.010973196, 0.046837818, 0.020167591, 0.010154476, 0.039722614, 0.0017478775, -0.048487034, -0.023454249, 0.0086642895, -0.03067547, 0.055272393, -0.011037987, 0.045282837, -0.0209922, -0.025610013, 0.028767088, -0.032678094, -0.08203686, -0.020167591, 0.059984446, -0.029191174, 0.019979108, 0.04269121, 0.020886179, 0.013723857, 0.05828811, 0.025021007, -0.04803939, 0.08340336, 0.037743554, 0.030157145, 0.009347537, 0.021569427, 0.048769757, 0.028884891, 0.0031776915, -0.04189016, -0.05131427, 0.0015682305, -0.0052068196, -0.0008496422, -0.012981708, 0.03849748, 0.023489589, 0.01935476, 0.0225943, 0.0051685343, -0.0384268, -0.013770978, -0.00875853, -0.004900536, -0.040452983, -0.028625727, 0.0055454983, 0.027659757, 0.03145296, 0.09697407, -0.008947012, -0.053434692, 0.018977797, 0.0061551207, -0.05484831, -0.0612567, 0.0039787404, -0.017870465, -0.018471252, 0.0052627753, 0.058759313, -0.051832594, -0.009011803, -0.054094378, -0.066816926, 0.030958194, 0.03927497, 0.015620459, 0.011927387, -0.03220689, -0.067900695, -0.0023457194, -0.037248787, 0.015490877, -0.005857672, 0.009017693, -0.04905248, -0.080953084, -0.009453558, -0.050607458, 0.02261786, -0.026952948, -0.02608122, 0.014630928, -0.012592964, -0.03764931, 0.012216, -0.028295884, -0.017705543, -0.005872397, 0.03755507, 0.014253963, 0.0014680993, 0.0961259, 0.04891112, 0.020674137, -0.005094908, -0.015867842, -0.0037372478, -0.043091733, -0.01751706, 0.016174125, 0.056450408, -0.06116246, 0.038615283, 0.04794515, 0.0056603546, -0.091460966, -0.005701585, 0.0021042265, -0.0013451441, -0.0025297839, -0.050466098, -0.0041701677, -0.0016286037, -0.06662844, -0.02718855, -0.014442446, 0.030863954, 0.0139948, -0.01140317, -0.0070091803, -0.04443467, -0.04537708, -0.00871141, 0.026528863, 0.0058311666, 0.006614546, -0.027753998, 0.03135872, 0.03734303, 0.0017316798, -0.0009784874, 0.005904793, -0.0017184272, -0.019578584, 0.033667624, 0.045542, -0.045094356, -0.010619791, -0.02702363, 0.020638796, 0.024903204, 0.028790649, 0.021157121, -0.042172883, 0.048392795, -0.0065556453, 0.008676069, -0.014642708, 1.5139314e-05, 0.04024094, 0.038073394, 0.037225228, -0.009235626, 0.0384268, -0.00035340406, 0.032536734, -0.00480335, 0.02452624, 0.00074914296, -0.01391234, 0.034751397, -0.062199112, -0.0017743828, 0.017835123, -0.047685985, 0.057345696, -0.03920429, 0.00571042, 0.004909371, -0.05352893, -0.045706924, 0.016315486, 0.018188529, 0.022570739, -0.01665711, -0.08260231, -0.014736949, -0.049240965, -0.0070268502, 0.03133516, 0.044835195, -0.013170191, 0.054094378, 0.021345604, -0.03939277, -0.02608122, -0.064083934, 0.00066079193, -0.0038079286, -0.031617884, -0.052869245, 0.0018597888, -0.07873842, -0.0026593655, 0.042031523, -0.014984331, 0.021133563, -0.03757863, 0.0030746153, -0.081188686, -0.0009453558, -0.0157147, 0.0332671, -0.014418885, 0.03244249, 0.01738748, 0.011414951, 0.04629593, 0.01051966, 0.0014850332, -0.054754067, 0.027659757, -0.08076461, 0.0017846904, 0.018223869, -0.03416239, 0.009170835, -0.008605389, 0.056403287, -0.028036721, -0.03244249, -0.012793226, 0.04269121, 0.046555094, 0.028484367, 0.017564181, 0.014760509, -0.018223869, 0.028154522, -0.009135495, -0.031712122, 0.04082995, 0.042502727, 0.017140096, 0.00611389, -0.012216, -0.013417574, -0.04794515, 0.027377034, 0.051785473, 0.023265766, 0.027494835, 0.03324354, 0.045542, 0.010784714, -0.016256586, 0.005510158, -0.02886133, 0.03741371, -0.00051501277, 0.033573385, -0.021145342, -0.04212576, -0.019507904, -0.018859996, 0.0060549895, -0.015314175, 0.0076688677, 0.016115224, 0.0065320847, 0.0026225524, -0.038002715, -0.0646965, -0.00785146, 0.003996411, 0.01397124, 0.015537998, 0.011621103, -0.06672268, -0.05352893, -0.012380921, 0.008687849, -0.028060282, 0.0095713595, 0.016115224, -0.02192283, 0.04535352, 0.023418909, -0.01843591, 0.026905827, 0.018942457, 0.066062994, 0.009259186, -0.015066792, -0.017198997, 0.015808942, 0.025115248, 0.009712721, -0.02358383, 0.03748439, -0.035552446, 0.0129581485, -0.017163657, 0.042149324, -0.014418885, -0.0045059016, -0.023489589, -0.009288636, 0.008982353, -0.015856061, 0.023454249, 0.013888779, 0.06898447, 0.03404459, -0.01835345, -0.015573339, 0.03581161, 0.008145963, -0.0077218786, 0.000606677, -0.005156754, 0.025468651, -0.0020836114, -0.029450336, 0.012734326, 0.051267147, -0.0138652185, -0.04867552, -0.014784069, -0.01049021, -0.026811587, -0.009483009, 0.024738284, -0.02636394, 0.01671601, 0.019696385, 0.005913628, -0.030086465, -0.051031545, 0.0035693808, -0.012439823, 0.048628397, -0.02185215, -0.025727814, -0.0012118814, -0.023890113, 0.004488231, 0.0061551207, -0.0040935967, 0.035340406, -0.0061433404, -0.02004979, 0.020615237, 0.006178681, -0.04120691, 0.0047532846, -0.0022809287, -0.04269121, 0.004876976, 0.025939858, -0.06318864, -0.014477786, 0.0062434715, -0.02874353, 0.015608679, -0.04622525, 0.021451626, 0.05937188, 0.01650397, 0.0262697, 0.042644087, 0.0070268502, 0.06455514, -0.012840347, 0.028979132, 0.01136783, -0.020827278, -0.014324644, -0.0209922, -0.00483869, -0.03948701, 0.017988266, -0.011108668, -0.02433776, -0.008352116, 0.020827278, 0.008905782, 0.05319909, -0.024361318, 0.007904471, 0.056167684, 0.029897982, -0.015373076, -0.008228424, -0.032230448, -0.026976509, 0.048487034, 0.012074638, -0.0028360675, -0.028060282, -0.0014806157, 0.024856085, -0.024714723, 0.039110046, 0.009636151, -0.012899248, 0.0010999701, 0.020662356, -0.04740326, 0.028460806, -0.027612636, -0.029308975, -0.026411062, 0.0066557764, -0.02452624, -0.018777534, -0.045918964, -0.015007892, 0.0040081907, 0.029968662, 0.07440333, -0.0008437522, -0.053434692, -0.031075995, -0.039157167, -0.030439869, -0.029144054, 0.052822124, -0.020886179, -0.033337783, -0.043350898, -0.017034074, 0.019048478, -0.030369187, -0.016951613, -0.014748729, -0.017646642, 0.021216024, -0.022924142, -0.017764444, 0.023866553, -0.04523572, -0.0021174792, 0.046060327, 0.028154522, 0.010390079, -0.017163657, -0.026316822, 0.019590365, 0.026293261, -0.029968662, -0.031853486, -0.00062287465, -0.0054512573, 0.022134874, 0.007221223, 0.012074638, -0.019366542, -0.053010605, -0.016138785, 0.0039846306, -0.0023810598, -0.0073272437, 0.031877045, 0.007362584, -0.008528817, 0.00010197179, 0.018753974, -0.07675936, 0.03484564, 0.04648441, -0.023018384, -0.012828567, -0.024019696, 0.0134882545, -0.029780181, 0.018471252, -0.012934588, 0.0400289, 0.0039434, 0.029473897, -0.011079216, 0.007527506, -0.008717299, -0.010926075, -0.015007892, -0.020615237, 0.010849504, 0.032772336, 0.013547155, -0.025963416, -0.036259256, 0.0016035709, -0.049335204, -0.0018435911, 0.041254032, 0.025916297, 0.0003723627, 0.011155788, -0.00787502, 0.0061669005, -0.016727792, 0.02347781, 1.31721235e-05, 0.008216644, 0.028295884, 0.03305506, 0.019048478, 0.012875687, -0.035976533, -0.011073327, 0.020497434, -0.008947012, -0.033903226, 0.020650577, 0.010643352, -0.002319214, -0.07171746, -0.0025857396, 0.031782802, 0.036400616, 0.07049233, -0.030345628, -0.02364273, 0.014725168, -0.011674114, 0.00038101373, -0.01754062, -0.064460896, -0.021781469, 0.011144008, -0.0032925478, -0.031570762, 0.0011610795, 0.05338757, 0.015196374, 0.00084227964, -0.008958792, -0.01675135, -0.012875687, 0.022358695, 0.026505303, 0.01837701, -0.007315464, 0.02975662, -0.01131482, 0.040806387, -0.018589053, -0.017976485, 0.005837057, -0.0014865057, -0.030840393, -0.01923696, 0.002133677, -0.017658422, -0.041183352, -0.01837701, -0.056167684, -0.026057659, 0.033290662, 0.024267077, 0.012380921, 0.018647954, 0.05866507, -0.0006861928, 0.039911095, 0.022523617, -0.00082019187, -0.012510504, 0.017022295, -0.022888802, -0.045801163, 0.014466005, -0.023336448, 0.033479143, 0.05828811, -0.011061546, -0.018553711, -0.016456848, -0.016857373, -0.027353473, -0.024432, -0.002258841, 0.01750528, 0.037437268, 0.006296482, -0.023831213, 0.038756642, 0.04568336, 0.011615213, -0.00783968, -0.004532407, -0.008216644, -0.009730391, -0.028130962, 0.011067437, -0.0040877066, -0.00058017165, 0.0039875754, 0.026505303, 0.037955593, 0.053764537, 0.018577272, 0.017234337, -0.03585873, -0.051408507, -0.051832594, 0.008092953, -0.038167637, 0.023195086, 0.015337735, 0.024997447, 0.016056323, -0.029120494, -0.005866507, -0.014619147, -0.0005264248, -0.06333, -0.03140584, -0.036824703, -0.017092975, -0.044363987, 0.048298553, 0.050371855, 0.01935476, -0.03430375, 0.032418933, -0.025751375, 0.025539333, -0.02006157, 0.036518417, 0.029544579, 0.00021830063, -0.034374435, 0.0036282814, -0.049476568, 0.01929586, 0.0056309043, -0.012828567, 0.018647954, -0.007751329, -0.015490877, -0.009017693, 0.026646664, 0.0051920945, 0.031712122, 0.001005729, -0.0015888457, 0.0056986404, 0.006043209, 0.005427697, 0.015514437, 0.045000114, -0.02782468, 0.012899248, -0.001247958, -0.011155788, 0.010384189, -0.0014511654, 0.018647954, -0.047002736, 0.0036371166, 0.054754067, -0.043421578, 0.034633595, -0.033596944, -0.050843064, -0.0046089776, 0.008658399, -0.013229092, -0.007339024, 0.015467317, 0.014418885, 0.019060258, -0.025468651, -0.003766698, 0.039746176, 0.02189927, -0.0024694107, -0.043185975, -0.03569381, -0.0019216345, 0.018671514, 0.016833812, -0.022476498, -0.038356118, -0.0007885328, 0.01935476, -0.019178059, -0.023112625, 0.00195992, 0.077890255, -0.019955548, -0.025751375, 0.023713412, -0.026411062, -0.02440844, 0.022193775, 0.026882268, -0.034468673, -0.0075628464, 0.03755507, -0.038026277, 0.0012766721, 0.004891701, 0.024761843, 0.024856085, 0.035670247, -0.006714677, 0.024808964, 0.014937211, -0.017788004, -0.031782802, 0.0029052757, -0.016350826, -0.006632216, 0.03213621, -0.023065504, -0.02893201, 0.0067794677, -0.04111267, 0.0045382967, -0.0025680694, -0.009418217, 0.02186393, 0.013441134, 0.024879646, -0.008605389, -0.009047143, 0.022771, 0.04636661, -0.03564669, -0.025657134, 0.009253296, -0.02002623, -0.015962083, 0.009689161, 0.040264502, 0.014489566, 0.008151853, 0.03258385, -0.040806387, 0.0063612727, 0.054282863, -0.008181304, 0.0073920344, 0.013346893, 0.01053144, 0.02624614, -0.008216644, 0.008552378, -0.010319398, -0.018801095, 0.0072919033, -0.027212111, 0.053858776, 0.0036106114, 0.009889423, -0.04097131, 0.011479741, 0.005068403, -0.014100822, -0.010378298, 0.0013083313, -0.018388791, 0.03833256, 0.020685917, 0.01139139, -0.0027727492, 0.105926976, -0.008876331, -0.006196351, 0.0020040954, -0.032630973], [-0.004942335, -0.049556438, -0.012764171, -0.020374278, -0.005051224, -0.010429114, 0.008789735, -0.0015251974, -0.0072108493, -0.0015282221, -0.008571957, 0.04868533, 0.010326275, -0.033852275, 0.010828372, -0.004128695, -0.0063578878, -0.0109312115, 0.018196505, -0.031529315, -0.035860665, -0.04454756, -0.08609463, -0.014058736, -0.0050754216, 0.021559956, -0.028311051, 0.028504632, 0.022612546, -0.00893492, 0.008414674, 0.047693234, 0.040748555, -0.051831003, -0.002260952, -0.033924866, 0.02717377, 0.0030700553, -0.046604346, -0.009745535, -0.018486874, 0.008475168, -0.043144107, -0.039611276, 0.0024968775, -0.0069688745, 0.008202946, -0.012159234, 0.004071226, -0.04024041, 0.03283598, -0.0055714697, 0.0003794089, -0.031964872, 0.0148935495, 0.030875985, 0.05541223, -0.09112771, -0.01929749, 0.012618986, -0.049701624, 0.010677138, 0.00089076976, -0.008692944, -0.02256415, -0.0076161567, -0.024403159, 0.037143134, 0.041837443, 0.0403372, -0.04563645, 0.014699969, 0.012262073, -0.0046791877, -0.019757243, -0.06993072, 0.062477894, 0.035352517, 0.0018632059, -0.033416722, -0.029448334, -0.036804367, 0.01910391, -0.013756268, 0.02756093, -0.03542511, 0.03283598, -0.09466054, -0.010495657, 0.0061038146, -0.005704556, -0.0053264704, 0.008765537, -0.0020779585, -0.062284313, 0.00350561, 0.009618498, 0.014603179, -0.018825639, -0.026593031, -0.009715288, -0.04311991, -0.0604937, -0.078109466, 0.019236997, -0.006902331, 0.01200195, -0.033174746, 0.027222166, 0.054395936, 0.033852275, -0.0125826895, 0.003284808, 0.025383156, -0.043216698, 0.021451065, -0.014615278, -0.068140104, -0.008481217, 0.0053355442, -0.06886603, -0.007924675, 0.056573708, 0.0316745, -0.049024094, 0.020410575, -0.014736266, 0.018910332, 0.02439106, -0.022007609, -0.015921941, 0.040579174, 0.054589514, -0.00047714406, 0.020216994, -0.031384133, 0.048201382, -0.024064394, -0.021269586, -0.02649624, -0.037820663, 0.0020522487, -0.05396038, 0.022310076, -0.007906526, -0.0576384, 0.02995648, 0.00040077078, -0.052072976, -0.01507503, -0.012304419, -0.023798222, -0.0326424, 0.05154063, 0.009551955, -0.0326424, 0.04503151, 0.05923543, -0.049895205, 0.0020522487, 0.019829836, -0.07418948, -0.022709334, -0.003992584, -7.476643e-05, -0.060542095, 0.030754996, -0.0121894805, -0.016345399, 0.029351544, -0.015087129, -0.010435163, -0.025479946, 0.026326858, -0.0074830707, -0.00021853349, 0.030464627, 0.024161184, -0.05154063, -0.043555465, -0.03295697, 0.05608976, 0.05434754, -0.039320905, 0.029908085, 0.012201579, 0.026205871, -0.0049907304, 0.0364898, -0.038328808, -0.040192015, -0.0121229375, -0.0100722015, -0.052411743, -0.010574299, -0.042950526, 0.0057378276, -0.024572542, 0.01987823, 0.0393935, 0.013514292, -0.041280903, -0.045249287, 0.010689237, -0.042877935, 0.019442676, 0.043966822, -0.0092131905, 0.012836764, 0.017760951, 0.05676729, 0.015353302, 0.02170514, -0.010199238, 0.034529805, 0.01795453, -0.056476917, 0.012606887, -0.015825152, -0.032884374, 0.04628978, -0.044571757, 0.03506215, -0.0074104783, 0.027633522, 0.05415396, 0.019249095, 0.044910524, 0.014070835, -0.008081959, 0.01161479, -0.026351055, -0.0032787586, 0.047765825, -0.08909512, -0.0078036874, -0.044523362, 0.017990826, 0.071140595, -0.0007705385, 0.024475751, 0.043918427, -0.06484925, 0.0123165175, -0.0016545027, 0.06373616, 0.026641425, 0.015232313, -0.030561417, -0.005199434, 0.040409792, -0.01709552, 0.015317005, 0.0066119614, -0.030851787, 0.06504282, 0.021305881, -0.031142157, 0.007537515, 0.039078932, -0.030996973, 0.051395446, -0.016103422, 0.07704478, -0.018208604, -0.030004876, 0.014687871, -0.040313, -0.03092438, 0.0089470185, 0.057590004, -0.033247337, 0.03723992, 0.0018798418, 0.018571567, -0.02804488, 0.06088086, 0.01930959, -0.0499436, 0.05415396, 0.0107315825, -0.014941944, 0.010289978, 0.013647378, 0.070947014, -0.027439943, 0.03600585, -0.039732262, -0.032981165, 0.018305393, -0.013913551, -0.037675478, 0.04975002, 0.044716943, 0.050911497, -0.018462677, -0.01968465, 0.04856434, -0.042587563, -0.005196409, -0.049411256, 0.018087616, 0.003263635, -0.062187523, 0.0011728216, 0.06891442, 0.013611083, 0.053524826, 0.0017391939, 0.0014163088, 0.053766802, 0.015704164, -0.0067268996, -0.0076040584, -0.0011145964, -0.03295697, -0.0079609705, 0.026641425, 0.03665918, -0.05831593, -0.04522509, -0.022237483, -0.072544046, 0.024149084, 0.005108693, 0.024342665, 0.0034330175, -0.0059223333, -0.081109956, -0.01478466, -0.061026044, 0.02036218, -0.035570297, 0.0086385, -0.037723873, -0.09015981, 0.019563662, -0.02448785, -0.0064970236, -0.013453799, -0.041885838, 0.015014537, 0.02736735, -0.024850812, 0.0088199815, -0.006388135, -0.009176894, 0.011487754, 0.009660844, -0.0030035123, 0.0014813395, 0.046676937, 0.038159426, 0.013804662, 0.0239918, -0.013296516, -0.030295245, -0.032569807, 0.0059677036, -0.02717377, 0.07883539, -0.0815939, 0.024705628, 0.038643375, -0.008015416, -0.023120692, -0.03794165, -0.031843882, -0.009908868, 0.016696261, -0.010023806, 0.032400426, -0.015643671, -0.032618202, -0.03513474, 0.009140599, 0.01968465, 0.0070898617, -0.015256511, 0.0075738113, -0.0035419061, -0.01834169, -0.013272318, 0.0019418477, 0.02045897, 0.009945164, -0.07293121, 0.017773049, 0.035376716, -0.0016726508, -0.011554297, -0.020870326, 0.005011903, -0.03215845, 0.046628546, 0.07375392, -0.02295131, -0.020555759, 0.003832276, -0.0027312906, -0.0047759777, 0.0018556443, 0.009515659, -0.0041256705, 0.045951016, 0.021342177, 0.0040288805, -0.0073983795, 0.027028585, 0.035594493, 0.017022928, 0.06059049, -0.046725333, 0.057493214, 0.024330566, 0.03053722, -0.0017906135, 0.03590906, -0.0068539362, 0.02910957, -0.0006121206, 0.0038655475, -0.0012476826, 0.05981617, -0.034360424, 0.0065998626, -0.012921454, -0.01286096, 0.0035509802, -0.0060281972, -0.035691284, 0.031335738, 0.008051711, 0.039998434, -0.011711581, -0.07931934, -0.04520089, -0.015244412, -0.027488338, 0.034844372, 0.043821637, -0.041111518, 0.03861918, 0.020108106, 0.022431064, 0.018874034, -0.07627046, -0.017990826, 0.032061663, -0.038836956, -0.04563645, -0.032981165, -0.03898214, -0.0067268996, 0.064123325, -0.031553514, 0.016006634, -0.035400912, -0.005634988, -0.061606783, 0.04829817, -0.0054202355, 0.027343152, -0.011076396, 0.033489313, 0.0012106302, -0.00094067707, 0.031045368, 0.0053839395, 0.008003317, -0.065575175, -0.027439943, -0.084836364, -0.015232313, 0.015970336, 0.0058709136, -0.032594007, -0.023447359, 0.018027123, -0.044692747, -0.025286367, -0.017627865, 0.0518794, 0.020955019, -0.01861996, -0.018402183, 0.004089374, -0.019515269, 0.06746258, 0.01305454, -0.023640938, 0.025020195, -0.020337982, 0.033465113, -0.006962825, -0.046507556, -0.027004387, -0.086578585, 0.01123368, 0.02572192, 0.016865645, -0.013465898, 0.017373791, 0.035183135, 0.024947602, 0.01123973, 0.0063820854, -0.045854226, 0.0182449, -0.057348028, -0.03658659, 0.019285392, -0.08130354, 0.00021702115, 0.008995413, -0.009969362, -0.049217675, 0.024257975, 0.019854033, 0.031311538, 0.00035048538, 0.0050965943, -0.051347055, -0.03503795, -0.030948577, 0.013042442, 0.022249583, 0.033271536, 0.0022367546, -0.026762413, 0.018172307, -0.010120596, -0.050863102, 0.03419104, 0.010683187, -0.031916477, 0.020398475, 0.030851787, -0.042805344, 0.025068589, 0.012243925, 0.051637422, 0.0028447162, 0.026762413, -0.006267147, 0.019466873, 0.03438462, 0.009443067, -0.04832237, 0.037506096, -0.05502507, 0.025020195, -0.004346472, 0.012570591, 0.0060644937, -0.03571548, -0.013223923, -0.03801424, -0.016768854, 0.004183139, 0.013865156, -0.013260219, 0.10743681, 0.035207335, 0.011862814, -0.016672064, 0.053621616, 0.00729554, 0.016768854, 0.013804662, 0.017543172, 0.015740462, -0.008106156, -0.019236997, -0.016381694, 0.05971938, -0.049120884, -0.050088786, -0.033561904, -0.0072471453, -0.029351544, 0.02910957, 0.017785149, -0.020809833, 0.013526391, 0.02315699, -0.04829817, -0.012897257, -0.02756093, 0.056138154, -0.0062489994, 0.04687052, 0.004966533, 0.003880671, 0.037506096, -0.03791745, -0.04350707, 0.017361691, 0.009328129, 0.032811783, 0.0124496035, -0.009963312, 0.0067450474, 0.009908868, -0.031335738, -0.02142687, 0.012643184, -0.048830517, 0.0101387445, 0.010834422, -0.021995509, 0.02419748, 0.04878212, -0.0364898, 0.0316987, -0.03295697, 0.037990045, 0.068430476, 0.009334178, 0.026036488, 0.012201579, 0.04425719, 0.09824177, -0.046507556, -0.005187335, -0.0041740653, -0.0075738113, 0.016587373, -0.016030831, -0.016853545, -0.017119717, -0.015498486, -0.0011924821, -0.013090837, 0.0017119717, 0.012044296, 0.0038897449, 0.041861642, -0.0028401793, 0.036199432, 0.0020008292, 0.029738704, -0.017337495, 0.049556438, -0.026955992, -0.012153184, 0.038667575, 0.0053325198, 0.054395936, -0.030222652, -0.01939428, 0.034747582, -0.0042859786, 0.054008774, -0.0011501365, -0.022043904, 0.0022170942, -0.01392565, -0.024899207, 0.038062636, -0.028698212, -0.0201686, -0.011106644, 0.0035570296, 0.005792272, -0.009721338, -0.010979607, -0.053137667, -0.008523562, 0.021281684, 0.06175197, -0.04493472, -0.037723873, -0.017990826, -0.07941613, -0.026544636, -0.017410086, 0.049895205, -0.0527989, -0.031166354, 0.009727387, -0.03995004, 0.020628352, 0.015946139, -0.0007425602, -0.0054867784, -0.04331349, 0.024052296, -0.049387056, 0.018559467, 0.011167137, 0.0014064786, 0.013514292, -0.02276983, 0.037723873, 0.012897257, -0.024802417, -0.03319894, 0.01583725, 0.018063419, -0.021922916, 0.00022269244, -0.012310468, -0.044136204, 0.038062636, -0.0027675868, -0.0057892473, -0.033150546, -0.017773049, -0.05212137, 0.009957263, -0.011941456, 0.0007557932, 0.05357322, 0.034747582, 0.013405404, -0.014760463, 0.05821914, -0.052072976, 0.0020416623, 0.014917746, -0.052314952, -0.0148935495, -0.026205871, 0.024306368, -0.0051782606, 0.026060686, 0.00059737527, -0.0007187408, 0.0011947505, 0.02036218, -0.016478484, 0.015873548, -0.0051903594, -0.02910957, 0.004261781, -0.0073015895, 0.013199725, -0.006974924, 0.029932283, -0.014990339, -0.021402672, -0.0060433205, -0.016369596, -0.0030519073, -0.023483654, 0.0144096, -0.005792272, -0.009612449, -0.016841447, -0.02717377, -0.003293882, 0.062477894, 0.019950822, -0.008154551, 0.048951503, -0.004397892, -0.032594007, 0.055557415, -0.0155589795, -0.025334762, 0.011475655, -0.02036218, -0.042297196, 0.03946609, -0.011100594, 0.0154258935, -0.035376716, 0.0071140593, 0.008844179, 0.022539953, 0.05255693, 0.011372816, -0.0014911697, -0.024560442, -0.0021142547, 0.0017785148, 0.02102761, -0.034118447, -0.0037022145, -0.003629622, 0.0046428917, -0.0075496137, -0.02171724, 0.052653715, 0.019430576, -0.0029747777, -0.011124792, 0.0034360422, 0.0037596836, -0.0022670014, 0.041692257, 0.030101666, 0.0060705426, 0.028214263, -0.014627377, 0.0070717135, -0.015909843, 0.036151037, 0.0060584443, -0.01094936, -0.047596443, -0.023253778, 0.07002751, 0.0068055415, -0.0143007105, -0.028407842, -0.02535896, -0.010235534, 0.026133278, -0.021814028, 0.010362571, 0.0017346569, 0.010870718, 0.0073136883, 0.024354763, 0.02927895, -0.02178983, -0.0139014525, 0.027778707, 0.008148502, -0.025455749, 0.051831003, -0.018668355, 0.014518488, 0.05744482, 0.0020809832, -0.020398475, -0.051589027, -0.010786027, -0.04520089, -0.06107444, -0.040579174, 0.026423648, 0.054395936, 0.00431925, -0.0614616, 0.04343448, 0.01861996, 0.012437505, -0.032473017, -0.0044795587, 0.010417015, 0.024378961, -0.07172133, 0.026859203, -0.0027297782, 0.0110642975, -0.014772561, 0.028190065, 0.050137177, 0.0050754216, 0.050911497, 0.01863206, -0.013756268, -0.011681333, -0.025213774, 0.01786984, -0.0044341884, 0.009382573, 0.020325884, 0.026762413, 0.019575762, 0.003992584, -0.006309493, -0.028238459, -0.00950961, -0.06271987, -0.031456724, -0.058993455, -0.042805344, -0.011106644, 0.0017149964, 0.049701624, 0.009618498, -0.025213774, 0.032231044, -0.015885646, -0.0033271536, -0.00012826554, 0.0022004584, 0.013030343, -0.0024469702, 0.0049120886, 0.016018732, -0.0029309199, 0.005943506, 0.008323933, -0.04053078, 0.0069567757, -0.0028235435, -0.0141676245, -0.005414186, 0.00056675036, 0.027633522, 0.008662698, -0.010900965, -0.017639963, 0.013986143, 0.021584153, 0.001810274, 0.012885158, -0.016212313, 0.0008264952, 0.005308322, -0.0036991898, -0.012594788, 0.009733437, 0.008457019, -0.007979119, -0.049701624, 0.017313298, 0.037046343, -0.041619666, 0.03293277, -0.023701431, -0.012534294, -0.031287342, 0.008626401, -0.065139614, 0.009715288, 0.02131798, 0.011082446, 0.035013754, 0.013163429, 0.025867106, 0.03015006, 0.034602396, 0.025431551, -0.061026044, 0.017918235, 0.020955019, 0.0336345, 0.037602883, -0.03353771, -0.029230556, 0.022588348, -0.007912576, -0.03849819, 0.009098252, 0.027294757, 0.06446209, -0.04053078, -0.013659477, 0.017591568, -0.046773728, -0.00091345486, 0.028940186, 0.0220923, -0.01892243, -0.024233777, 0.024185382, 0.006781344, 0.016212313, -0.02082193, -0.0066301096, -0.005199434, 0.021063907, -0.022249583, 0.06601073, 0.051250264, 0.018849837, -0.00045181232, 0.0046822126, 0.0026224018, -0.0032243142, 0.03295697, -0.00011815176, -0.0023516926, 0.027827103, -0.034747582, -0.028940186, -0.013393305, 0.0046126447, 0.00015170686, -0.0029959504, -0.01814811, -0.0036810418, -0.003898819, 0.016357496, 0.007065664, -0.04907249, -0.020398475, 0.008299735, -0.011457507, -0.023411062, -0.022781927, 0.06296185, 0.0040258556, 0.02995648, 0.033465113, -0.027343152, 0.028286854, 0.028093275, -0.020096008, -0.007942823, 0.0094128195, -0.014760463, -0.019176504, -0.0029657036, 0.0059616542, -0.0092797335, -0.042974725, 0.013429602, -0.016393794, 0.011838617, 0.019745143, 0.041038927, -0.030561417, 0.021753535, 0.0017921259, -0.008626401, -0.0155589795, -0.011415161, 0.018196505, 0.047112495, 0.038183622, 0.001178871, 0.004918138, 0.13811922, 0.007289491, 0.011874913, 0.027875498, 0.0122499745], [0.023974752, -0.005470337, -0.024582893, 0.027062234, 0.022045078, 0.018524881, -0.030056152, -0.00038922427, 0.024232043, 0.035272125, -0.046546105, 0.007578361, 0.023670683, -0.0050405455, -0.005999536, 0.037961975, 0.0034441778, -0.0040084617, 0.005821187, -0.053984124, -0.028512413, -0.023553733, -0.08209891, 0.028442243, 0.0006658841, 0.015682997, -0.008233281, 0.013507727, -0.024278823, 0.026594432, 0.038406383, 0.00402308, 0.056650586, -0.034149405, -0.027600203, -0.046920344, -0.0012564817, 0.043458626, -0.053984124, -0.026804943, -0.009934904, 0.0071573406, 0.025799172, -0.017308602, -0.044230495, 0.015893506, -0.023097627, -0.013402471, 0.0026547653, -0.038757235, 0.016641987, -0.026313754, -0.00063335744, -0.015554352, -0.035108395, -0.003429559, 0.048885107, -0.08981761, -0.001862429, -0.020945746, -0.036581963, 0.023074238, 0.044674903, 0.016209273, -0.011309066, -0.00043161865, -0.0008011076, 0.038195875, 0.027319523, 0.040932506, -0.014139256, 0.055808548, 0.016829107, -0.005473261, 0.003628374, -0.035950433, 0.09079999, 0.0011519577, -0.0018712002, 0.004294989, 0.004870968, -0.021448633, 0.016337916, 0.003362313, 0.047247805, 0.0077713286, 0.024348993, -0.10403873, -0.020618288, -0.021425242, 0.038382996, -0.012034156, 0.020466253, -0.023811022, -0.050007824, 0.028489023, 0.0070111533, -0.003698544, -0.022454403, -0.014618752, 0.003067014, -0.0076426836, -0.08743183, -0.042616583, 0.038406383, 0.019706078, 0.06404183, -0.016454866, 0.020863883, 0.1340715, 0.025565272, 0.015858421, -0.034032453, 0.013917051, -0.022711692, 0.06436928, -0.009157186, -0.049306124, -0.038453165, 0.011092708, -0.114611015, -0.014267902, 0.07040391, 0.053563107, -0.028910043, 0.01569469, -0.005596058, -0.017881658, 0.012501956, -0.014431631, 0.0074204784, 0.07952601, 0.044978976, 0.031132093, 0.060720447, -0.027132403, 0.033541262, -0.027857494, -0.011162879, 0.022559658, -0.045563724, -0.0013573511, -0.022898812, 0.017577587, -0.05875569, 0.010040158, -0.01569469, -0.016127408, -0.056089226, -0.064883865, 0.019893197, -0.010893893, 0.012139412, 0.031202264, 0.021238122, -0.051270887, 0.039692834, 0.039552495, 0.0071397983, 0.027319523, 0.007917516, -0.08499927, 0.061468925, 0.014724007, 0.036114164, -0.036090773, 0.022875423, -0.015636217, -0.033213805, 0.023167798, -0.009472951, -0.019530652, -0.012197887, -0.016022151, -0.040488094, 0.032208033, 0.040464703, 0.028676143, -0.07732735, -0.058896028, -0.030640904, 0.016700462, 0.018138947, -0.039365374, -0.035856873, 0.06605337, 0.061796386, -0.007180731, 0.043669134, -0.06254487, -0.010531349, -0.037213493, -0.040417925, -0.048604425, -0.020173877, -0.031225653, -0.021507107, -0.020244047, 0.017893352, 0.007911668, 0.026734773, -0.06698897, 0.0036605354, -0.056744147, -0.045283046, 0.0067129307, 0.016185882, 0.016291136, 0.033003293, 0.034921274, 0.024255432, 0.030477174, -0.0011526885, -0.0017103939, -0.014431631, 0.020665068, -0.038640283, -0.0036166792, -0.019074548, -0.031482942, 0.08883523, -0.015718082, 0.013928747, 0.014922822, 0.016723853, 0.027202573, 0.030430393, -0.0005017886, -0.0026299134, 0.017051311, 0.016150797, -0.032441933, -0.008858964, -0.018793868, -0.044394225, -0.009209814, 0.0074964957, -0.000112381655, 0.05978485, 0.039014526, 0.0028872034, 0.042195566, -0.029448014, -0.004213124, -0.025518494, 0.043762695, 0.0022293597, -0.048089847, -0.046967126, -0.0010934826, 0.032488715, 0.004648763, 0.042172175, 0.039154865, -0.009712699, 0.042523026, -0.022933898, -0.023998143, 0.0048066457, 0.035295513, -0.016899277, 0.010712621, 0.010695078, 0.039341986, -0.0035465092, -0.043224726, 0.038429774, -0.041026063, -0.064696744, -0.019635906, 0.024863573, -0.018840646, 0.038476553, 0.08673013, 0.033237193, 0.016969446, 0.07657887, 0.018571662, -0.021729313, 0.043926425, 0.037377223, -0.0025202727, 0.0038505793, 0.040768776, 0.055293966, 0.042873874, 0.011297371, -0.047130857, -0.044441003, 0.017612671, -0.015905201, -0.021425242, -0.012420092, 0.041213185, 0.014665532, -0.0077011585, 0.025588663, -0.012735857, -0.012724161, -0.011127794, -0.0006370121, 0.018864037, -0.040488094, -0.013811797, 0.008145568, 0.045844406, 0.017612671, 0.09430849, -0.010525501, -0.059457388, 0.059504166, -0.0034061691, -0.06259165, -0.046054915, 0.019635906, -0.009151339, -0.021004222, -0.010601519, 0.058053985, -0.049680367, 0.00067977194, -0.06319979, -0.09861225, 0.040862333, 0.022758473, 0.004216048, 0.018805562, -0.044090156, -0.035856873, -0.013039926, -0.06792457, 0.015215197, -0.023191188, -0.0049352907, -0.028372074, -0.09398103, -0.018735392, -0.037213493, -0.016560122, -0.008467181, -0.055527866, -0.012279752, -0.020922357, -0.023214577, 0.00081791915, -0.052767847, -0.018992683, 0.020934053, 0.020770323, 0.0026781552, 0.0013792792, 0.06619371, 0.0027307828, 0.005023003, -0.019249972, -0.022793557, -0.032652445, -0.028184954, -0.0061808084, 0.024232043, 0.055527866, -0.056136005, 0.035085004, 0.029331064, -0.010040158, -0.048978664, -0.009607444, -0.020290827, -0.0028857416, 0.023354918, -0.021694228, -0.006397166, -0.022372538, -0.067409985, -0.019518957, -0.009233204, 0.012408396, -0.0010817876, 0.00034043417, 0.018676918, -0.027693763, -0.07452055, 0.0028038765, 0.004543508, -0.0061691133, 0.006519963, 0.00071960804, -0.007940906, 0.026968673, 0.0045756693, -0.013577896, -0.015741471, -0.00019424666, -0.012548736, 0.033588044, 0.06404183, -0.034827713, -0.00060960196, 0.002341924, -0.011385084, 0.0029222884, -0.016875887, -0.024185263, -0.015215197, 0.047715604, -0.023740852, 0.005867967, -0.025635444, 0.011847036, 0.041844714, 0.032441933, 0.039575886, -0.009993379, 0.035295513, 0.013636371, 0.036020603, -0.009163033, 0.070918486, -0.006011231, -0.0020539346, 0.055902105, -0.023366613, -0.005455718, 0.021378463, -0.027646983, 0.052533947, -0.037961975, 0.017168261, 0.0059322896, -0.019682687, -0.016758937, 0.008607521, 0.013566202, 0.001018196, -0.028886653, -0.098892935, -0.023226272, -0.06301267, -0.003572823, 0.046382375, 0.022898812, -0.004751094, 0.048931886, 0.019413702, -0.051083766, -0.009291679, -0.07723379, -0.015051466, 0.014805872, -0.031927355, -0.049352907, -0.0017747164, -0.09505697, 0.0072275107, 0.033377532, -0.015823336, 0.044090156, -0.008391163, 0.051224105, -0.059036367, 0.0053563104, 0.0010949445, 0.052861407, -0.028699534, 0.023085933, -0.003125489, -0.026290363, 0.015484182, 0.0045727454, 0.007519886, -0.017378772, 0.028068002, -0.056978047, 0.018361151, -0.003757019, -0.040558264, -0.006455641, 0.010285754, 0.052019365, -0.026407313, -0.059597727, -0.002939831, 0.015916897, 0.061796386, 0.022828642, -0.016513342, 0.019904893, -0.012911282, 0.025775783, -0.015215197, 0.008607521, 0.043177944, 0.040067073, -0.012034156, 0.009548969, -0.008227433, -0.002610909, -0.028863262, 0.031646673, 0.033424314, 0.005751017, 0.028418854, 0.030570734, 0.043482013, 0.029003603, 0.010075243, -0.016326223, -0.037073154, 0.008297604, -0.009554816, 0.0002620411, -0.031950742, -0.051598344, 0.008584131, -0.022009993, 0.039295204, 0.0035055766, 0.021659143, 0.035599586, 0.010999149, -0.011373389, -0.020828797, -0.052580725, 0.031225653, 0.013554507, 0.0020817101, 0.017647756, 0.021027612, -0.041727766, -0.051458005, -0.014712311, -0.012817722, -0.015074857, -0.002893051, 0.038546726, -0.018162336, 0.036488403, 0.0118587315, -0.022887118, 0.011578051, 0.006192503, 0.045727454, 0.0038710455, -0.016197577, -0.014092477, 0.043786086, 0.039154865, 0.004739399, -0.012583821, 0.0142795965, -0.030056152, 0.025307983, -0.0077537857, 0.028161563, -0.016864192, -0.0049089766, -0.041634206, -0.018676918, 0.014302987, -0.020255743, -0.009426171, 0.0053007593, 0.055106845, 0.034149405, -0.015905201, -0.028208343, 0.016349612, 0.016525038, 0.006145723, 0.0050405455, 0.012548736, -0.015951982, 0.006654456, -0.008718624, -0.0009049007, 0.062357746, -0.008929133, -0.061562486, -0.018396238, -0.0083560785, -0.032675833, -0.0064205555, 0.037283663, -0.024068313, 0.0071631884, 0.034897882, 0.014022307, -0.041002676, -0.026056463, 0.0047744843, 0.0032570579, 0.042406075, -0.003561128, -0.027413083, 0.012279752, 0.00087200856, -0.026454093, 0.008344383, -0.004543508, 0.027740544, 0.025682222, -0.026945284, 0.026266973, 0.0044060918, -0.0024734929, -0.0011746167, -0.0007543276, -0.049961045, 0.013133487, 0.040113855, -0.030500563, -0.032324985, 0.018384542, -0.026500873, 0.018536577, -0.042523026, 0.0023199958, 0.07671921, 0.030243274, 0.019694382, 0.075035125, 0.039763004, 0.057586186, -0.030734463, 0.034687374, 0.041774545, -0.024746623, 0.0136246765, -0.022781862, 0.017448941, -0.027740544, 0.015063162, -0.015367231, -0.038944356, 8.588516e-05, 0.026758162, 0.012022462, 0.032465324, -0.019039461, -0.007391241, 0.027646983, 0.019600822, 0.028629363, 0.028114783, -0.038078923, -0.010630757, 0.040909115, 0.014840957, 0.0075725135, -0.054030906, -0.017975217, 0.020173877, -0.0068181856, 0.048557647, -0.0040435465, 0.00038666598, 0.002762944, -0.0059205946, -0.036488403, 0.026711384, -0.013729932, -0.0136246765, 0.0013127639, -0.009139644, -0.009303373, -0.021460328, -0.026571043, -0.015881812, 0.018899122, 0.021893043, 0.07573683, -0.011794409, -0.09384069, -0.056837708, -0.042803705, -0.016852496, -0.030360224, 0.061843168, -0.032278202, -0.018571662, -0.041610815, -0.027974444, 0.0028652754, -0.026687993, 0.0034120167, -0.012618907, 0.0014764939, 0.00055258884, -0.018396238, -0.020208962, 0.059176706, -0.051130544, 0.015659606, 0.041657593, 0.028044613, 0.002445717, -0.019004377, -0.036441624, 0.029331064, 0.025003912, -0.028044613, 0.0072450535, 0.024746623, 0.012583821, 0.031061923, -0.0034178642, -0.0049703754, -0.043598965, -0.07115239, -0.049306124, 0.0086133685, -0.015051466, 0.013870272, 0.053142086, 0.023273053, 0.0036254504, -0.027483253, 0.017437248, -0.075690046, 0.051130544, 0.030219883, -0.009689309, 0.0034880342, -0.015554352, 0.0057042367, -0.033167023, -0.0060930955, -0.001299607, 0.039669443, -0.007379546, 0.008098789, 0.000983842, 0.010502111, -0.0032570579, -0.0011497649, -0.011244744, -0.005148724, 0.013414167, 0.016817411, 0.017881658, -0.0038154942, -0.021191342, -0.021062698, -0.037073154, 0.0004612216, 0.014139256, 0.042195566, -0.017811486, -0.021670837, -0.002284911, -0.023308137, -0.0019209039, 0.033868723, -0.006929288, -0.0011541505, 0.047177635, 0.0038242654, -0.008256671, -0.0028886653, -0.017963521, 0.00026569582, 0.032769393, -0.008958371, -0.030079544, 0.031412773, 0.006017078, -0.020127097, -0.06357402, 0.022781862, 0.034547035, 0.024793403, 0.055293966, -0.008379469, -0.012724161, 0.036348063, -0.025869343, 0.0048329593, -0.008888201, -0.048043065, -0.0043066842, -0.0006249516, -0.006344538, 0.00043600428, -0.024886962, 0.06418217, 0.012946366, -0.003853503, -0.0016533808, -0.0059176707, -0.013460946, 0.011782714, 0.020477947, 0.043856256, -0.0023097629, 0.042406075, -0.008239129, 0.044487786, 0.008052008, 0.0054177092, 0.013449252, 0.013215352, -0.038944356, -0.007128103, 0.041493863, -0.00012773134, -0.038944356, -0.011741782, -0.046896957, -0.043084383, 0.029471403, 0.026173413, 0.037447393, 0.0027892578, 0.07915177, -0.011309066, 0.030523954, 0.020454558, 0.013180266, 0.019507263, 0.025635444, 0.00096045196, -0.06034621, 0.012338227, -0.010104481, 0.025822563, 0.060205866, 0.0056983894, -0.012022462, -0.021214733, -0.041727766, -0.010975759, -0.045867797, -0.025635444, -0.0025202727, 0.038499944, 0.0006044854, -0.023998143, 0.022793557, 0.030898193, 0.031132093, -0.009051931, -0.008268366, 0.017016226, 0.006011231, -0.054779384, 0.036254503, 0.00029401964, 0.010502111, 0.023623902, -0.012045851, 0.030968364, 0.025916124, 0.022431012, 0.057445846, -0.010320839, -0.053750224, -0.020945746, 0.034196183, -0.018290982, 0.012408396, -0.005385548, 0.039716225, 0.00087931793, -0.043037605, 0.017940132, -0.012396702, 0.0064264033, -0.039716225, -0.0065141157, -0.059083145, -0.013028231, -0.021472022, 0.024933742, 0.06254487, 0.022664912, -0.027272742, 0.020758627, -0.034476865, 0.021132868, -0.039061304, 0.0078064133, 0.012525346, 0.0005226204, -0.0013449251, -0.032137863, -0.035482634, 0.008069551, -0.020583203, 0.0086133685, -0.005800721, -0.0073678507, -0.029120553, 0.0065667434, -0.021846263, 0.018864037, 0.021109477, -0.018115558, -0.016641987, -0.009853039, 0.019682687, 0.004414863, 0.020162182, 0.0034734155, -0.042499635, 0.022922203, -0.007929211, 0.0044528716, 0.0038564266, 0.023202883, 0.0037190104, -0.043879643, -0.0032570579, 0.041423693, -0.020629982, 0.021425242, -0.032488715, -0.013729932, -0.002388704, 0.016910972, -0.021448633, 0.0070930184, 0.0015452021, 0.014115866, 0.028863262, -0.021846263, -0.009554816, 0.035131782, 0.030570734, 0.029611744, -0.046522714, -0.024770012, 0.011700849, 0.019413702, 0.009782868, -0.011244744, -0.016408088, 0.0017396314, 0.041072845, -0.012303141, -0.012420092, 0.012431786, 0.06301267, 0.012630601, -0.018676918, 0.0046341443, -0.041470475, -0.032254815, 0.065024205, 0.018302677, -0.021062698, -0.029401233, 0.027062234, -0.019752856, 0.023787633, -0.012268056, 0.010162956, 0.010168804, 0.023506952, 0.003300914, 0.044768464, 0.034663983, -0.021776093, 0.004745247, 0.0017118558, 0.006876661, 0.0005829227, 0.032652445, -0.07288325, -0.051925804, 0.0072392058, -0.058568567, -0.0073386133, 0.0034412541, -0.008151416, 0.015846727, 0.013343996, 0.019589128, -0.029424623, 0.008379469, 0.050054606, 0.040979285, -0.010010921, -0.015542657, 0.005151648, -0.009572359, -0.020127097, 0.0063737757, 0.041891493, 0.0038739692, 0.012291446, 0.021904737, -0.058194328, -0.026500873, 0.043482013, -0.0009940751, 0.003198583, -0.0025729004, 0.013379081, 0.009905666, -0.013636371, -0.0028623515, -0.0114026265, 0.0018551196, -0.0034441778, -0.019869808, 0.037774853, -0.0066427607, 0.011256439, -0.009706851, 0.0009765326, 0.0029793016, -0.011899664, -0.035693143, -0.0015656683, 0.010046006, 0.041704375, 0.024559503, 0.015975371, 0.0046546105, 0.08602843, 0.0053241495, -0.021121172, 0.005259827, -0.028114783], [0.0053123767, -0.009773032, -0.012626608, 0.018402146, 0.04471224, 0.01363997, -0.013055577, -0.00051872607, -0.023350833, -0.014348701, -0.03260164, 0.0046067536, -0.011998697, 0.0022225566, 0.015069867, 0.03899266, -0.026906922, 0.02648417, -0.0009014565, -0.05853872, 0.011706501, -0.07385726, -0.0134907635, 0.007752526, 0.037276782, 0.007404377, 0.007435462, 0.036655087, -0.02010559, 0.006478053, 0.047447696, 0.029194757, 0.042125996, -0.036107995, 0.011227797, 0.044140287, -0.03526249, 0.038196888, -0.05077998, -0.0116070295, -0.042250335, -0.012713646, -0.01146404, -0.03583445, 0.01636299, 0.016736006, -0.010755309, 0.023748716, -0.019633101, -0.040559325, -0.03839583, -0.036530748, 0.010587451, -0.009605175, -0.023039985, 0.054957762, 0.046826005, -0.16760874, 0.028398989, 0.020118022, -0.06644667, 0.048243467, -0.0070873136, -0.04394134, -0.058140837, -0.046801135, 0.012632825, -0.016238652, 0.0105252825, 0.026409568, -0.0050077466, -0.008672633, 0.015318544, 0.01930982, 0.012943672, -0.042324938, 0.058290042, 0.030313807, 0.015592089, -0.03961435, 0.040808003, -0.031781007, -0.012931238, -0.017904792, 0.028995816, -0.0011283748, 0.040061973, -0.09509434, -0.05341596, -0.0011602367, 0.0076033194, -0.0040565543, 0.02660851, 0.003142664, -0.022816176, 0.00994089, -0.0010755309, 0.018563787, -0.02471856, 0.0083493525, -0.03160693, -0.020155324, -0.03615773, -0.050357226, 0.0040689884, 0.024967236, 0.035809584, -0.046353515, 0.034466725, 0.039813295, 0.033347674, -0.0037394904, 0.013453461, -0.0044793063, -0.032029685, 0.015480184, 0.027851898, 0.015243941, -0.005156953, -0.0008524981, -0.08330701, -0.022567498, 0.058787398, -0.006801334, -0.0054584746, -0.0027230205, 0.0044513303, 0.047596905, -0.013876214, 0.02815031, 0.030313807, -0.0060459757, 0.045831293, 0.030786294, 0.037923343, -0.02926936, 0.041280493, -0.01227846, -0.017892357, 0.004557018, -0.033745557, -0.038918056, 0.002719912, 0.06221915, 0.004768394, -0.009213507, 0.004522825, 0.0155423535, -0.03648101, -0.029393699, 0.0046720314, 0.00067065255, -0.048815425, 0.037351385, 0.044140287, 0.008896443, 0.016686272, 0.061025497, -0.03150746, 0.011756237, -0.0076965736, -0.07649325, -0.018190771, 0.041280493, -4.6141362e-05, -0.03183074, 0.061721794, -0.037102707, -0.044289492, 0.0188622, -0.006900805, -0.04555775, -0.025203481, -0.015318544, -0.003941541, 0.020329399, 0.03217889, 0.06202021, -0.039937634, -0.018327544, 0.0018510943, 0.026235493, 0.062268887, -0.034267783, 0.00031201277, -0.015343412, -0.015144469, 0.0065340055, 0.08231231, -0.04409055, -0.0279265, -0.01636299, 0.014771453, -0.074553564, 0.0061951824, -0.049636062, -0.003043193, -0.020739717, -0.0021448447, 0.014075155, -0.0317064, -0.010307689, -0.0056232237, 0.040360384, -0.07952712, -0.023350833, 0.06898318, -0.013080445, -0.0036306938, -0.015144469, 0.034914345, -0.008666417, 0.022791307, -0.034715403, -0.0716689, 0.049263045, -0.04831807, 0.03640641, -0.017021986, -0.05998105, 0.071818106, -0.010680705, 0.0026328748, 0.014796321, 0.0072738216, 0.04844241, -0.012657693, -0.02949317, -0.0038140935, -0.016561933, 0.012993407, -0.056201153, -0.013130181, 0.018053997, -0.031134443, 0.04349372, -0.0331736, 0.034665667, 0.038370963, -0.017531775, 0.04463764, 0.050232887, -0.008119326, -0.018290242, 0.03474027, 0.07107208, 0.013428594, -0.04677627, 0.02471856, 0.0070437947, -0.03526249, -0.024818031, 0.05187416, 0.035237625, -0.0008820286, 0.046577327, -0.012626608, -0.029244494, -0.0026639595, 0.005368329, -0.0022272193, 0.023848187, 0.009474619, 0.0641091, 0.006008674, 0.012098168, 0.029120155, -0.028672535, -0.04632865, -0.044463567, 0.032104287, -0.09395042, 0.009082952, -0.0153061105, 0.050481565, 0.008007421, 0.041554037, 0.003736382, -0.022679403, 0.031905346, 0.02815031, -0.00067686953, 0.004693791, 0.01921035, -0.0024743427, 0.00096518017, 0.04175298, -0.007124615, -0.040434986, 0.0105252825, -0.010394726, -0.04953659, 0.047820713, 0.048691086, 0.033695824, -0.015231507, -0.02837412, 0.019943949, -0.050581038, 0.0043363166, 0.017382568, -0.019384423, -0.016599234, -0.061473116, 0.009729514, 0.03396937, 0.026185758, 0.06555143, -0.033024393, 0.0035933922, 0.058638193, 0.030686824, -0.009549222, -0.05824031, 0.0063288463, -0.0043674014, 0.016648969, 0.02471856, 0.07957685, -0.008952396, -0.03717731, -0.01888707, -0.05833978, 0.030910634, 0.021771729, -0.0146968495, 0.0128069, -0.01853892, -0.02059051, 0.0081690615, -0.058041368, 0.020093154, -0.027553486, 0.03817202, -0.038445566, -0.04431436, -0.015492618, -0.022778874, 0.03551117, -0.019073576, -0.01107859, -0.011787321, -0.008280966, -0.0077960445, 0.012931238, 0.008057157, -0.03237783, -0.03896779, 0.010419594, 0.0057475623, 0.001591537, 0.04060906, 0.034790006, 0.035610642, 0.060378935, -0.008237448, -0.020242361, -0.043792136, -0.03896779, 0.0075100656, 0.037997946, -0.0512276, 0.0050419397, 0.078184254, 0.014982829, -0.117574796, -0.013304255, -0.0031395555, -0.040061973, 0.049064104, -0.004193327, 0.064208575, 0.016835477, -0.051028658, -0.011917877, -0.018514052, 0.037550326, -0.02087649, -0.016052144, 0.007006493, -0.043717533, -0.012918805, -0.041653506, 0.004124941, 0.017009553, 0.037351385, -0.07505092, 0.009002131, 0.05366464, 0.010593669, -0.0034037754, 0.0029468304, -0.0005362112, -0.04854188, -0.036381543, 0.04118102, 0.0084053045, 0.042598482, -0.026732849, 0.011103458, 0.0056232237, 0.009362714, 0.009934672, -0.027777296, 0.05386358, -0.018787598, 0.030960368, -0.025128877, -0.014100024, 0.05600221, -0.0068448526, 0.04809426, -0.05187416, 0.014274098, 0.030487882, 0.0075038485, -0.0074105943, 0.003941541, 0.008958613, 0.031631798, 0.011128325, -0.003195508, 0.012471185, 0.058041368, 0.014050288, 0.040012237, -0.031109575, 0.023487605, -0.029642377, -0.06376095, -0.036903765, 0.04254875, 0.0010071446, 0.017307965, 0.0074665467, -0.09962027, -0.019446593, 0.0022645209, 0.0012550451, 0.043070972, 0.021112733, -0.029070418, 0.016437594, 0.0047186585, -0.010065229, -0.008554512, -0.023164324, 0.017419871, 0.048914894, -0.016014842, -0.05465935, -0.014982829, -0.064805396, -0.04453817, 0.05843925, -0.021062998, 0.026683113, -0.0017252013, -0.001433005, -0.05555459, -0.009474619, 0.009418666, 0.026136022, -0.03195508, 0.03319847, 0.006014891, -0.0090145655, 0.08828057, 0.011439173, 0.03183074, -0.007404377, -0.016014842, -0.09061814, -0.05197363, -0.008343136, -0.047596905, -0.05978211, -0.02170956, 0.044239756, 0.02465639, 0.020689981, -0.005704044, -0.0006485047, 0.013204784, 0.044761978, 0.03506355, -0.05898634, 0.014560077, 0.055952474, -0.05933449, -0.035884187, 0.017593944, -0.0015425786, -0.015641825, 0.027105866, -0.036058262, -0.03717731, -0.036804292, -0.013291821, 0.035809584, 0.034690533, 0.026906922, 0.037799004, 0.059931315, 0.008641548, 0.001558121, -0.010910733, -0.025564063, -0.007429245, 0.019720139, 0.012197639, 0.005051265, -0.07783611, 0.0046968996, -0.015554788, 0.010034144, 0.030264072, 0.064855136, 0.017220927, 0.0035871752, -0.01988178, -0.018352412, -0.037152443, -0.033496883, -0.024643956, 0.0123965815, 0.011358352, -0.0111345425, 0.0037115142, -0.05520644, -0.009238375, -0.017942093, -0.04239954, -0.030537616, -0.011283749, 0.0013568475, 0.04053446, -8.970853e-05, -0.05888687, 0.04508526, 0.008498559, 0.08967316, 0.014348701, 0.011843273, -0.005554837, 0.019707704, -0.015355846, 0.0052657495, -0.060776822, 0.020416437, -0.0445133, 0.027528618, -0.020640247, 0.018302675, -0.017556643, 0.0005956607, -0.021187337, -0.044115417, -0.0022956056, -0.0007289364, 0.04396621, -0.02315189, 0.014373569, 0.07246467, -0.012340629, -0.042175733, 0.04498579, 0.01764368, 0.02042887, 0.012321978, 0.033670954, 0.03128365, -0.021622522, -0.029145021, 0.019620668, 0.08788268, -0.0035281144, -0.071221285, -0.027976237, 0.006397233, -0.009281893, 0.009679778, 0.012595523, -0.035884187, 0.016226217, -0.016450027, -0.0429715, -0.025887344, 0.005890552, 0.01040716, 0.002971698, 0.030015394, 0.0042368458, -0.00084550405, -0.01335399, 0.018290242, 0.025240783, 0.0127012115, 0.009207291, 0.0037519243, 0.01969527, -0.020901358, 0.0047248756, -0.0061236876, -0.060478408, 0.019197915, 0.013814044, -0.02916989, -0.006471836, 0.016114313, -0.039539747, -0.030711692, 0.002569151, -0.0407334, 0.0023406786, -0.041703243, -0.010923166, 0.034591064, 0.00035184005, -0.006353714, -0.02081432, 0.006782683, 0.07634404, -0.033472013, -0.015156903, 0.020018551, -0.018551353, 0.011843273, -0.0058843354, -0.011575945, -0.017593944, -0.0022023516, -0.0075349333, -0.035610642, -0.019297387, -0.014883358, -0.003447294, 0.051575746, -0.03449159, 0.02737941, 0.0046502724, 0.0066210427, 0.017071722, 0.029766716, -0.015418015, -0.027255071, 0.020864056, 0.014970395, 0.047969922, -0.028100576, -0.005402522, 0.035436567, -0.030811163, 0.015654258, 0.020702416, -0.018240506, 0.027031261, 0.018078865, -0.019794742, 0.0017003336, -0.033297937, -0.03250217, -0.024519617, 0.010351208, 0.007230303, -0.02180903, -0.015069867, -0.0071681337, 0.005517536, 0.0033664738, 0.08161601, -0.05545512, -0.033472013, -0.012060867, -0.060378935, -0.018078865, -0.016785743, 0.05286887, -0.028001105, -0.029841319, -0.004575669, -0.039440278, -0.0041373745, 0.0020780128, -0.031930212, -0.015952673, -0.020404002, -0.013391292, 0.00045383672, 0.032875188, 0.007242737, -0.034715403, -0.018812465, 0.02548946, 0.03672969, -0.014087589, 0.025340253, -0.066944025, 0.005511319, 0.010133615, -0.016736006, -0.0467514, -0.03506355, -0.01235928, 0.016375424, 0.025041841, -0.0021479533, 0.030587353, -0.032551907, -0.014012986, 0.026633378, 0.011662982, -0.0033602568, 0.050232887, 0.0077214413, -0.0002445978, -0.0377244, -0.00091544463, -0.039017525, -0.0041125068, 0.006944324, -0.0072862552, -0.028573064, -0.00043829437, -0.016387857, -0.019396858, 0.01569156, 0.0081690615, 0.039141864, -0.0013133289, 0.0012014239, 0.012918805, -0.008784538, -0.0053061596, -0.013751875, -0.025464593, 0.003487704, -0.0023329074, 0.021013262, 0.035237625, -0.018712994, -0.037102707, -0.024071997, -0.05010855, -0.02705613, 0.0011167182, 0.03563551, -0.056648772, -0.032427568, 0.0098600695, -0.017519342, 0.0078084785, 0.058140837, 0.0054056305, -0.016213784, 0.043991078, -0.0019738788, -0.027901633, 0.037799004, -0.02815031, 0.009592741, 0.02750375, 0.022517763, -0.042125996, -0.00044489987, 0.005554837, 0.01636299, -0.021125168, 0.03449159, 0.011582162, -0.0023484498, 0.07445409, -0.040434986, 0.006938107, 0.0025940188, 0.0035933922, 0.047721244, 0.0027509967, -0.050730243, -0.016412726, -0.0098600695, -0.023711415, -0.014087589, -0.011569728, 0.039589483, 0.008268532, -0.0036493447, -0.008852925, -0.010836129, -0.0005603019, 0.006670778, 0.014373569, -0.0052315565, 0.0126452595, 0.009884937, -0.026807452, 0.04098208, -0.026011683, 0.00613923, -0.0012503824, -0.02087649, -0.031781007, 0.01380161, 0.042772558, -0.015641825, 0.0010055903, 0.023761151, -0.0121603375, -0.024681257, 0.048790555, 0.02805084, -0.015679127, -0.008647766, -0.005511319, 0.0030882657, 0.00463473, 0.0013980347, 0.003447294, -0.011768671, -0.02241829, 0.037600063, -0.011899226, 0.06500434, -0.050581038, 0.058638193, 0.050406963, -0.019583365, -0.004584994, -0.0037270566, -0.024146602, -0.036829162, -0.022219349, -0.02103813, 0.010009276, 0.013776743, 0.048939764, -0.044587906, 0.014124891, 0.008430173, -0.0029670354, 0.0013941491, 0.00092787854, -0.009605175, 0.012545788, -0.01921035, -0.0028644558, 0.036829162, -0.0005898323, -0.010338774, -0.014721718, 0.028871477, 0.016972251, 0.013702139, 0.00622005, 0.0022691838, -0.025128877, -0.043145575, 0.06982869, -0.028349254, 0.034392122, 0.025862476, 0.02241829, 0.023015117, -0.043344516, 0.020167759, -0.017121457, -0.019583365, -0.0821631, -0.02193337, -0.06679482, -0.016288387, 0.0043021236, 0.014883358, 0.035933923, 0.0256138, 0.0044886316, 0.027851898, -0.024382845, 0.00888401, -0.004824347, -0.003683538, 0.007640621, -0.053614903, -0.015902936, 0.029915923, -0.03158206, 0.012732296, 0.0022691838, -0.05565406, 0.025439724, 0.0076965736, -0.0047901534, 0.014522775, 0.019222783, -0.009145121, 0.023562208, -0.0011928757, -0.018775163, 0.0014135771, 0.0041498085, 0.018613523, -0.02994079, 0.013677271, 0.0045725605, 0.016288387, 0.018029131, 0.01272608, 0.020018551, -0.01770585, 0.018712994, 0.011694067, 0.04130536, 0.04028578, -0.0211003, 0.038445566, -0.04419002, -0.030910634, 0.0035809583, -0.009648694, -0.018066432, -0.011756237, -0.0060335416, 0.005309268, 0.05630062, 0.02142358, 0.023077287, 0.0025473917, 0.030885765, 0.010357425, -0.019807175, 0.02020506, 0.03777414, 0.037127573, 0.008094458, 0.002679502, -0.032775715, 0.014535209, -0.004134266, -0.042225465, -0.033670954, 0.017755585, 0.07723928, 0.017544208, -0.04351859, -0.030040262, -0.026658244, -0.0071619167, -0.013913515, 0.012918805, -0.02628523, -0.018613523, -0.00067648094, -0.03185561, -0.0029483845, -0.001802913, -0.016474895, 0.0148211885, 0.025738139, -0.014361135, 0.04665193, -0.002831817, 0.006832419, 0.040136576, -0.010388509, 0.033894766, 0.010090096, 0.03583445, 0.004998421, 0.008995915, 0.05301808, -0.027031261, -0.004700008, 0.010730441, 0.016350556, -0.012844201, 0.031358253, 0.01914818, -0.014957962, -0.024643956, 0.03416831, 0.010158482, -0.025514329, 0.023288663, -0.016835477, 0.008392871, -0.042598482, -0.009785466, 0.0505313, 0.027802162, -0.0031411096, 0.013776743, -0.07554828, 0.025588932, 0.032079417, -0.02805084, -0.0039633, 0.017469605, 0.0066521275, 0.018402146, -0.00039691286, 0.0059060943, -0.011115892, -0.013018276, 0.0051196516, -0.028249782, 0.028622799, 0.054709084, -0.027652957, -0.024805596, 0.004544584, 0.028995816, -0.021784164, 0.018974105, 0.0110102035, 0.03197995, 0.01770585, 0.018228073, -0.005632549, -0.016176483, 0.10802557, -0.006944324, -0.007217869, -0.02004342, 0.016698705], [0.009226722, -0.054849386, -0.00916731, 0.016290838, 0.008501892, 0.02673551, -0.016076954, 0.0059709307, -0.0058699297, 0.033175796, -0.028850587, 0.01698002, -0.009690138, -0.029872477, 0.0041053863, 0.02410949, -0.017823674, 0.0159106, 0.039568555, -0.07100952, -0.00911978, -0.05166489, -0.057558585, 0.040566683, -0.00093128695, 0.01271422, -0.025167027, 0.0149362385, -0.00994561, 0.019142626, 0.011834919, 0.019237686, 0.04201634, -0.03008636, 0.03569488, 0.014223292, 0.017205786, 0.01698002, -0.021507233, 0.01067638, -0.025808679, 0.008911837, -0.057701174, -0.038475372, -0.013201401, 0.01067638, -0.03234403, -0.010337731, -0.015209535, -0.033936273, 0.016207661, -0.02925459, 0.022232063, -0.013474697, 0.0018536621, -0.020497225, 0.048646748, -0.13384391, 0.002504226, 0.02678304, -0.019190155, -0.009232663, 0.036597945, 0.0009387135, -0.0376436, -0.038926903, 0.00015159405, -0.0010218907, 0.030205186, 0.05589504, -0.0061313435, 0.03949726, -0.049573578, -0.04890816, -0.010712028, -0.061360966, 0.065401, 0.0035647347, -0.01775238, -0.0025146233, -0.008293949, -0.021186408, -0.034126393, 0.0072661177, 0.019712983, -0.0016427486, -0.0038499136, -0.114927046, -0.030133892, -0.014722355, -0.0049282457, -0.0181445, -0.0020021927, -0.0048539806, -0.022529123, -0.000154936, 0.013914348, 0.023158893, -0.03569488, -0.03376992, -0.046983205, -0.038023837, -0.078661814, -0.07020151, 0.007652297, -0.00844248, 0.018061323, -0.006636348, -0.0013278637, 0.11340609, 0.04900322, 0.03362733, -0.006612583, 0.021364644, -0.024763023, 0.015874952, -0.011561623, -0.023729252, -0.0037102948, 0.015494714, -0.10057305, -0.034316514, 0.064450406, -0.014591647, -0.044036355, 0.01091997, -0.009286134, 0.010539732, 0.015993776, 0.022873715, -0.0027493017, 0.027163278, 0.06440287, 0.07490696, 0.04284811, -0.015779892, 0.027614811, -0.033651095, -0.018061323, -0.004144004, -0.009137603, 0.0035201756, -0.033199564, 0.0021284437, -0.032082614, 0.012179511, 0.039996322, -0.022612302, -0.031036958, -0.04051915, -0.03041907, -0.020877464, -0.011971568, 0.050001346, 0.017550377, -0.011104149, 0.024881849, 0.057415996, 0.0071888817, 0.028494112, 0.013712347, -0.06820526, -0.024026312, 0.020497225, 0.039663617, -0.064973235, 0.049383458, -0.02226771, -0.03331839, 0.043489765, 0.035789937, 0.0069215265, -0.046507906, 0.03217767, -0.020354636, -0.014544118, 0.03438781, 0.017324612, -0.07138976, -0.045438487, -0.034007568, 0.0559901, 0.03298568, -0.042966936, -0.008389009, 0.048005093, -0.010129788, -0.048409097, 0.029516004, -0.06982127, -0.007729533, 0.0073492946, 0.013284578, -0.030704249, 0.0151382405, -0.027187044, -0.014900591, -0.050666764, 0.025737384, 0.011139796, 0.007028469, -0.07571497, -0.019297097, 0.025357146, -0.016445309, 0.027709872, 0.0542315, -0.044915657, 0.013225166, 0.04541472, 0.04239658, -0.0035201756, 0.05099947, -0.01348658, -0.03978244, 0.026996924, -0.06521088, 0.03750101, -0.010593204, -0.04933593, 0.052520424, -0.02920706, 0.03424522, 0.004078651, 0.055134565, 0.061978854, 0.017265199, 0.026901865, 0.0327005, -0.0038112956, -0.022101356, -0.009393076, 0.024667965, 0.053043254, -0.05622775, 0.0029735828, -0.02382431, 0.024359021, 0.01280928, -0.0065056407, 0.018382149, 0.050096404, -0.05380373, -0.013450933, 0.029706122, 0.08973625, 0.01348658, 0.024834318, -0.035290875, 0.016682958, 0.039758675, -0.035124518, -0.0063630515, 0.04108951, 0.0050054817, 0.040733036, 0.01140121, -0.027448457, 0.00059449376, 0.0335798, -0.033698626, 0.0318212, -0.019796161, 0.098766916, -0.010100082, -0.014544118, -0.019059448, -0.044701774, -0.034625456, 0.024929378, 0.05907954, -0.020033808, -0.026283978, -0.02217265, 0.01028426, 0.0074384133, 0.08165619, 0.08132348, -0.019380275, 0.069441035, -0.010700146, 0.0005766701, 0.0255235, 0.012429042, 0.058984477, 0.006559112, 0.041398454, -0.013474697, -0.06283439, 0.03693065, -0.0380476, -0.041826222, 0.0515223, 0.026283978, 0.056940697, 0.009832727, -0.0026393891, 0.015399654, -0.016920608, -0.008276125, 0.026022563, 0.0044351243, 0.0049074516, -0.03172614, 0.008175125, 0.05366114, 0.00011288327, 0.0829395, 0.0024967997, -0.017288964, 0.08227408, -3.553131e-05, -0.011252679, -0.009999081, 0.008692011, -0.01532836, 0.005501574, 0.018596033, 0.027686106, -0.046103902, -0.02664045, -0.039069492, -0.085601166, 0.012726103, -0.004812392, 0.023859957, -0.039711144, -0.026497861, -0.066446654, 0.0038439722, -0.033936273, 0.024691729, 0.011520035, -0.01848909, -0.08170372, -0.067064546, -0.028731762, -0.014270822, 0.030941898, -0.052995723, -0.05090441, -0.028517878, -0.013260813, -0.011638859, -0.03904573, 0.012737986, -0.03681183, -0.023123246, 0.008531598, 0.02697316, 0.001397673, 0.034863107, 0.03246285, 0.01600566, -0.0025294763, 0.0014452029, 0.029682359, -0.031108253, -0.018370267, -0.01072391, 0.09567748, -0.091684975, -0.01397376, 0.037001945, -0.010628851, -0.064070165, 0.008317715, -0.004497507, 0.01760979, 0.0010003537, -0.018037558, 0.013545992, -0.0021328996, -0.031844962, -0.016267072, -0.024691729, 0.027282104, -0.0033954098, -0.04876557, 0.03828525, -0.017039431, -0.030989427, -0.018429678, 0.010379319, -0.022445947, -0.016433427, -0.055134565, 0.014140114, 0.015197652, -0.030894367, -0.0030003183, 0.013118224, -0.032225203, 0.0010419423, 0.012203275, 0.057083286, 0.012102274, -0.029088236, -0.0129994, -0.011870567, 0.00022706618, 0.0201764, 0.03662171, 0.025951268, 0.029872477, 0.01872674, -0.011062561, -0.030846838, -0.020152634, 0.035742406, 0.01877427, 0.06963115, -0.032914385, 0.038879372, 0.036859356, 0.0006253139, 0.0014481735, 0.027923755, -0.03056166, 0.019962514, 0.004934187, 0.0313459, -0.008026594, 0.06625654, -0.04943099, 0.0016858225, -0.05137971, -0.0038291193, 0.0063392865, -0.019570393, -0.021994414, 0.002076458, 0.023741134, 0.007592885, -0.04643661, -0.054944444, -0.013985642, -0.050476644, -0.019475333, 0.036859356, 0.068918206, -0.012868692, -0.0002203823, 0.018405914, 0.004197475, -0.006267992, -0.0760952, -0.035195813, 0.02192312, -0.008181066, -0.06535347, 0.008989072, -0.052330308, -0.02585621, 0.055039503, -0.019736748, 0.023551013, -0.052663013, 0.03871302, -0.07585756, 0.013118224, 0.004922305, 0.017015668, -0.008222654, 0.057320934, 0.0050678644, 0.024810554, 0.04370365, 0.008692011, 0.008389009, 0.0005517912, -0.006909644, -0.05366114, -0.029278355, 0.006951233, 0.004550978, -0.03861796, -0.027187044, 0.03531464, 0.001132546, -0.004001415, -0.03790501, 0.016659195, -0.0030196274, -0.0023601514, -0.020604167, 0.047577325, 0.014544118, 0.026165154, -0.008692011, -0.025689855, -0.030632954, -0.025095733, 0.022683596, 0.0075572375, -0.041826222, -0.06597136, -0.03633653, -0.013949995, 0.011858684, 0.016124483, 0.0028740673, 0.022624183, 0.03148849, 0.046983205, -0.0028918912, -0.015399654, -0.005162924, 0.04565237, 0.007016586, -0.05370867, -0.018809916, -0.049573578, -0.0033686743, -0.042040106, -0.007200764, -0.0057035754, 0.031702373, 0.018453443, 0.007878064, -0.015993776, -0.051902536, -0.027091984, -0.016766137, 0.006909644, 0.017039431, 0.021863706, 0.035742406, -0.05627528, -0.03274803, -0.0012684515, 0.011133855, 0.014960003, 0.022232063, 0.0073968247, -0.033056974, 0.002513138, 0.033080738, -0.0067076427, 0.0133083435, 0.026854334, 0.06373746, -0.011413093, -0.014033172, -0.037215833, 0.015803657, 0.012833045, -0.025309617, -0.026402801, 0.052092656, -0.034007568, 0.015352124, 0.017110726, 0.03362733, 0.016112601, 0.002513138, 0.0065769358, -0.03600382, 0.013759876, -0.023788663, 0.00916731, -0.023883723, 0.07571497, 0.06388005, -0.0014489162, -0.020675462, 0.04420271, 0.009226722, 0.017312728, 0.012975634, 0.009351487, 0.016908726, -0.004111327, -0.04173116, -0.032771796, 0.04420271, -0.025000673, -0.013201401, -0.059554834, 0.003454822, -0.019772395, -0.0239669, 0.009648548, -0.04049539, 0.017063197, 0.005944195, -0.011300209, -0.025000673, -0.046602964, 0.037334654, -0.02415702, 0.0005536479, 0.03488687, -0.013771758, -0.007979064, -0.02711575, -0.02289748, 0.0060659903, 0.008163243, 0.028208934, 0.019522864, -0.0040103267, 0.0047381264, -0.009678255, -0.025784915, -0.026426567, 0.034791812, -0.032367792, 0.027519751, 0.019332744, 0.01081897, 0.00674329, 0.044369064, -0.04132716, 0.01348658, -0.018619798, 0.003255791, 0.066826895, 0.034863107, -0.0016412633, 0.011472505, 0.026759276, 0.08189384, -0.038118895, 0.011918097, -0.009749549, -0.0014518867, 0.023170777, -0.017788026, -0.0035053226, -0.026046328, -0.031155782, -0.05185501, -0.010747675, -0.009904021, 0.022362769, 0.00916731, 0.02711575, 0.008775189, 0.016326485, -0.0017051315, 0.037762422, 0.028660467, 0.018073205, -0.032676734, -0.02953977, 0.01984369, -0.022695478, 0.027329633, -0.02440655, -0.013617286, 0.0041024154, 0.0009401988, 0.044321537, 0.023895605, -0.025095733, -0.0058134883, 0.052045126, -0.026402801, 0.022053825, -0.047862504, -0.026426567, -0.007093822, 0.009684196, 0.021994414, -0.014365881, -0.012333983, -0.03754854, -0.015316477, 0.012381512, 0.069441035, -0.020295223, -0.017669203, 0.0066482304, -0.03455416, -0.005156983, -0.0044232416, 0.07234035, 0.003294409, -0.014983769, -0.037619833, -0.014151997, -0.0057718996, 0.014211409, -0.03652665, -0.011722036, -0.051094532, 0.025571031, -0.014864944, -0.02459667, 0.018560385, -0.03158355, -0.03329462, -0.013747994, 0.0014808503, 0.0148887085, -0.012286453, -0.052567955, 0.029112, 7.54257e-08, -0.011145737, -0.015756128, -0.017182022, -0.0017214698, 0.02096064, 0.022362769, -0.016457193, -0.033365916, -0.0011058104, -0.04016268, -0.004351947, 0.029682359, -0.008935601, 0.029634828, 0.018762387, 0.035290875, -0.006559112, 0.008311774, -0.060220253, -0.023242071, -0.012143863, -0.048242744, -0.004856951, -0.019427804, 0.027400928, -0.012773633, 0.029611064, -0.00053099694, 0.035385933, 0.0010954132, 0.0024344167, -0.028042581, -0.008501892, -0.01028426, -0.041945044, 0.01848909, -0.007919652, -0.01833462, 0.024145138, -0.0053649256, 0.0048510097, -0.033888746, -0.011056619, -0.0094109, 0.0037905013, 0.004518301, -0.009387135, -0.014710472, -0.04080433, -0.018904977, 0.019819925, -0.017835556, 0.06117085, 0.025262088, 0.050381586, 0.051759947, 0.026236448, -0.01833462, 0.02944471, -0.0027879197, -0.022647949, 0.011329915, -0.005602575, -0.023943136, 0.014080702, -0.021614175, 0.002100223, -0.04382247, 0.031464726, 0.028850587, 0.023063833, 0.039592322, -0.026901865, -0.040186442, -0.02542844, -0.050619233, 0.0019710013, -0.011240797, -0.046555437, -0.0031132016, -0.032296497, 0.02110323, -0.010587262, -0.0058788415, 0.030038832, 0.017051315, 0.00071109034, 0.006060049, -0.0023274748, 0.004108357, -0.0017184992, 0.046793085, 0.04080433, 0.020972522, 0.03056166, -0.017990028, -0.007064116, -0.023515366, 0.0024641228, -0.0050381585, 0.00422124, -0.029112, -0.034150157, 0.032201435, -0.008810836, -0.026402801, -0.0129518695, -0.017455317, -0.020271458, 0.010201083, 0.01998628, 0.020829933, -0.011686388, 0.032082614, -0.001258797, 0.041422218, -0.014544118, -0.020580402, 0.0064937584, -0.021340879, 0.009000955, -0.04118457, 0.019772395, -0.012559749, -0.0011362592, 0.066969484, -0.00815136, -0.0020348695, -0.020544754, -0.012108216, -0.0094406055, -0.031013193, -0.022350887, 0.015435302, 0.036312766, 0.014282704, -0.04225399, 0.025285851, -0.025238322, 0.015126358, -0.048456628, -0.002926053, 0.03507699, -0.0029126853, -0.03569488, 0.043465998, 0.0014036143, -0.035433464, -0.013427167, -0.018156383, 0.023562897, 0.050619233, 0.06079061, 0.009678255, -0.019415922, 0.007699827, -0.032058846, 0.025262088, -0.009660431, 0.018750506, 0.0048153624, 0.059127066, 0.029967537, -0.008014712, 0.02431149, -0.005667928, -0.0009795594, -0.078281574, 0.009298016, -0.0492884, -0.015150122, -0.01144874, 0.009286134, 0.07566743, 0.035789937, -0.03605135, 0.013379638, -0.049526047, 0.000548078, -0.028161405, 0.0049609225, 0.023016304, -0.01721767, -0.036693003, -0.0013865333, -0.022743007, 0.015459066, -0.00017573028, -0.03586123, -0.0008696467, -0.017681085, -0.029896243, -0.008810836, 0.0018447503, 0.02149535, 0.03498193, -0.0082701845, -0.03954479, -0.00305676, -0.0067135836, 0.019106979, 0.00013534853, -0.019914985, -0.0019635747, 0.009791138, 0.040828094, -0.025024438, 0.017692966, -0.0029186266, -0.005462956, -0.007408707, 0.03531464, 0.01600566, -0.012149804, 0.013320225, -0.053090785, -0.037809953, -0.015779892, 0.0019516923, -0.03158355, 0.0038974434, 0.0070225275, -0.008299891, 0.05370867, -0.03819019, 0.0074681193, 0.040828094, 0.047458503, 0.030823072, -0.020390283, 0.019237686, -0.0050441, -0.0029735828, 0.02673551, -0.016172014, -0.029468473, 0.0032320262, 7.700384e-05, -0.06340475, -0.0026275066, 0.03051413, 0.076665565, 0.0065472294, -0.020449694, 0.02664045, -0.031227076, -0.021115113, 0.043632355, 0.00074970827, -0.013949995, -0.023610426, 0.05907954, -0.01043279, -0.008798953, -0.055419743, 0.017586024, 0.007432472, 0.009951551, -0.036075115, 0.048599217, 0.04672179, 0.02144782, 0.02033087, 0.0029349648, 0.033674862, 0.017193904, 0.04565237, -0.0026557273, -0.02896941, 0.035338406, -0.04662673, -0.023372777, -0.02934965, -0.012619161, -0.0005488206, 0.009256428, 0.005962019, 0.0044648303, -0.0095416065, 0.0129994, 0.025808679, -0.052995723, -0.011638859, 0.020497225, -0.044915657, -0.0131063415, -0.03201132, 0.06478311, 0.008412774, -0.00451236, 0.007783004, -0.037976306, 0.0044915657, 0.025119498, -0.005439191, -0.0077235918, 0.021756765, 0.020402165, 0.005558016, -0.026236448, 0.01450847, -0.00086222024, -0.045058247, 0.026022563, -0.01848909, 0.04719709, 0.014223292, -0.02119829, -0.003677618, 0.0029082294, 7.129469e-05, 0.018429678, -0.015684834, -0.016480956, -0.00079983735, 0.028660467, 0.041303392, -0.020604167, -0.016195778, 0.09605772, 0.03158355, -0.022006296, 0.016314603, 0.0025027408], [0.010196377, -0.039669424, -0.021254078, 0.012919859, 0.03806809, 0.022176057, -0.02870271, 0.016401548, 0.009510957, 0.040421568, -0.0022063842, -0.011888696, 0.009292593, -0.0025460613, -0.011730989, 0.033361137, -0.018767156, -0.012592313, 0.018633712, -0.056531962, -0.014181516, -0.025087574, -0.08215332, 0.016583519, 0.00069641374, 0.011621807, -0.005862462, 0.014436274, -0.044813108, 0.03282736, 0.010226705, 0.013599213, 0.049107593, -0.025063314, 0.008152249, -0.0045522787, 0.003475624, 0.03777694, -0.0126408385, -0.014048072, 0.012665101, -0.0029873382, 0.002176056, -0.023898706, -0.021520967, -0.0070846924, -0.033239823, -0.0055834414, 0.01880355, -0.05706574, -0.009601942, -0.02540299, 0.010257034, -0.010129655, -0.043211773, -0.027174164, 0.055804085, -0.09734173, 0.037631363, -0.0040579275, -0.037461523, 0.01834256, 0.03384639, -0.0071696118, -0.029746003, 0.006381076, -0.012070666, 0.034137543, 0.030498145, 0.044716056, -0.0028751234, 0.030061418, 0.024420353, -0.007290925, -0.0038820233, -0.009698993, 0.09598303, 0.006702556, -0.033919178, 0.006399273, -0.01641368, -0.013441506, 0.013890364, -0.0011994846, 0.047384948, -0.014205779, 0.02347411, -0.12111913, -0.047021005, 0.024226252, 0.009941619, 0.006714687, 0.025111837, 0.02073243, -0.022212451, 0.03862613, 0.0012131323, 0.016559256, -0.0082311025, -0.0017787552, -0.016983852, -0.002223065, -0.070943974, -0.040542882, 0.05192206, 0.015807113, 0.017857308, 0.01403594, 0.0065327175, 0.109376006, 0.00852832, 0.0011266966, -0.0155402245, 0.008886194, -0.027538102, 0.05648344, -0.013599213, -0.03411328, -0.0036211999, 0.019640611, -0.11655775, -0.040300254, 0.0482584, 0.04869513, -0.024068544, 0.007163546, -0.023862312, 0.0074607637, 0.0023868377, 0.009504891, 0.0017256807, 0.0587156, 0.029746003, 0.022163926, 0.049786948, -0.025694141, 0.054154225, -0.034428693, -0.045177046, -0.014060203, -0.062597625, 0.0131382225, 0.0018318298, 0.031784065, -0.07210858, 0.0078429, -0.024869211, -0.024383958, -0.056192286, -0.037461523, 0.021884907, -0.009868831, -0.018949127, 0.03265752, 0.0372189, -0.024250515, 0.030934872, 0.051436808, -0.014642507, 0.006035333, 0.0031010695, -0.066819325, 0.04292062, 0.029018125, 0.030061418, -0.06934264, 0.062452048, -0.01114262, -0.037752677, 0.031953905, 0.023522634, -0.050563354, -0.0034089016, -0.018585186, -0.049738422, 0.05614376, 0.053620446, 0.027829254, -0.085404515, -0.052213214, -0.012471, 0.06123892, 0.06550914, -0.046171814, -0.02926075, 0.05347487, 0.04697248, -0.016389417, 0.06439306, -0.060122836, -0.014096597, -0.010584579, -0.035714615, -0.075262725, -0.012349687, -0.03331261, -0.033336874, -0.033991966, 0.0027098341, 0.0066722273, 0.005574343, -0.06366518, -0.007679127, -0.037898254, -0.032584734, 0.018512398, 0.0379953, -0.015139891, 0.020053076, 0.04034878, 0.022309503, 0.0069937077, -0.022552129, -0.008637502, -0.03964516, 0.024408221, -0.025111837, 0.011251802, 0.002599136, -0.025087574, 0.0957404, -0.046268865, 0.027271213, 0.0032329976, 0.00424293, 0.028484346, 0.031395864, 0.011919024, -0.0055045877, -0.0065691113, -0.033676554, -0.038723182, -0.021775724, 0.040834032, -0.061481543, 0.01412086, -0.03964516, 0.018463872, 0.06492684, 0.012883465, 0.02193343, 0.025645616, -0.03513231, 0.007108955, -0.028872548, 0.053668972, -0.006914854, -0.043672763, -0.027077112, 0.011166883, -0.004634165, -0.012143454, 0.05604671, 0.051582385, -0.00701797, 0.047627572, -0.0139874155, -0.04372129, -0.005319585, 0.035714615, -0.028969599, 0.023328533, -0.02201835, 0.057356894, -0.010062932, -0.0022033516, 0.02411707, -0.02119342, -0.059297904, -0.02998863, 0.061044816, -0.029042387, 0.020950794, 0.007527486, 0.02576693, 0.014545456, 0.071041025, 0.0018955192, -0.03869892, 0.06963379, 0.007533551, 0.036733646, 0.025742667, 0.01339298, 0.05512473, 0.007903556, 0.021702936, -0.05216469, -0.059006754, 0.017566156, -0.017845176, -0.017469104, -0.020247178, 0.030037155, 0.041804537, -0.0066722273, 0.020077338, 0.00444613, -0.029600427, 0.0034604599, -0.0056713936, -0.019470774, -0.036466755, -0.019592086, -0.010451134, 0.036442492, 0.04301767, 0.08089166, -0.02025931, -0.068080984, 0.05740542, 0.011039504, -0.033676554, -0.042411104, 0.019616349, -0.0041125184, 0.0047918726, 0.009383578, 0.08423991, -0.04668133, 0.019373722, -0.054008648, -0.09530367, 0.03200243, 0.019555692, 0.0073879757, 0.022721967, -0.03862613, -0.02228524, 0.013562819, -0.04952006, 0.005841232, -0.015176285, -0.020926531, -0.0440367, -0.054154225, -0.023947231, -0.024299039, 0.022758361, -0.021569492, -0.045540985, 0.005086057, -0.032342106, -0.053668972, 0.019216016, -0.029115174, -0.010566382, 0.024153464, 0.037801202, 0.008170445, 0.0014330125, 0.07249679, 0.04393965, 0.020696037, 0.015819244, -0.033191297, -0.014739557, -0.039232697, -0.0078368345, 0.010614907, 0.074680425, -0.058618553, 0.038140878, 0.042314053, -0.012495263, -0.07511715, -0.0033027525, -0.016292367, 0.01375692, 0.042799305, -0.0155402245, 0.011943287, -0.02843582, -0.048767917, -0.026519071, -0.031565703, 0.011724924, -0.0035150507, -0.02108424, 0.019737663, -0.028193194, -0.016644174, -0.020198653, 0.027319739, 0.014290698, 0.00046933055, -0.0061657447, -0.0017924029, 0.029454852, 0.02639776, -0.00028205325, 0.014230042, 0.0027356134, -0.0131382225, 0.018184852, 0.043794073, -0.009365381, 0.024711505, -0.012034272, 0.0074061723, -0.003973008, 0.0014140573, -0.0047372817, 0.0017484269, 0.033919178, -0.039815, 0.009219806, -0.03840777, 0.035738878, 0.042993408, 0.014788083, 0.03464706, -0.013174617, 0.042580944, 0.0074910917, 0.011821974, -0.02146031, 0.031784065, 0.0026916373, 0.0023701573, 0.025936767, -0.023838049, -0.0054045045, 0.026955798, -0.06788688, 0.043333083, -0.039669424, 0.015855638, 0.009207674, -0.021520967, -0.01999242, 0.026179394, -0.0008924104, 0.0011934189, -0.028484346, -0.078028664, 0.009517022, -0.039766476, -0.014205779, 0.033530977, 0.0271499, -0.0016544091, 0.023947231, 0.012416408, -0.065460615, -0.019652743, -0.05687164, -0.011179014, 0.012895596, -0.029746003, -0.051145658, -0.020101601, -0.08870423, -0.0015368869, 0.03852908, -0.031759802, 0.015273335, -0.012246571, 0.044449165, -0.056337863, 0.008655699, 0.02741679, 0.062937304, -0.038917284, 0.00931079, 0.008400941, 0.0076245363, 0.054688003, 0.021605887, 0.02586398, -0.01725074, -0.0101781795, -0.08098871, 0.02889681, -0.009262265, -0.041489124, -0.009565548, 0.037121847, 0.047287896, -0.018415349, -0.03952385, -0.012980515, 0.026203657, 0.049495798, 0.0136356065, -0.011033438, -0.0032572602, 0.0104268715, 0.006629768, -0.022333765, -0.018051408, 0.05750247, 0.029479114, 0.0059231184, -0.0035848059, -0.0077822437, -0.01725074, -0.03474411, 0.020708168, 0.035835925, 0.011985747, 0.021763593, 0.04340587, 0.017529761, -0.0052134357, -0.0176996, -0.016013347, -0.022358028, -0.0035423462, -0.022600655, 0.0092258705, -0.03256047, -0.055318832, -0.0075699454, -0.023983626, 0.0068905912, 0.0047008875, 0.0060747596, -0.0011956935, 0.0015361287, -0.01192509, -0.05357192, -0.036636595, 0.01677762, -0.018924864, 0.013902496, 0.018209115, 0.01852453, -0.04583214, -0.029454852, -0.037413, 0.0022943364, -0.004622034, 0.02843582, 0.033191297, -0.04466753, 0.039038595, 0.022734098, -0.04216848, 0.006805672, -0.0012351203, 0.07793162, -0.007612405, -0.019021913, -0.024869211, 0.034331642, 0.03595724, 0.0010887862, -0.03925696, 0.019191753, -0.027804991, 0.049835473, -0.015940558, 0.031201761, -0.013878233, -0.013538556, -0.03605429, -0.049544323, -0.0028008192, -0.017044509, -0.0054045045, -0.0037030862, 0.05687164, 0.034889683, -0.017311398, -0.018548792, 0.033506714, 0.01715369, 0.002124498, -0.0077822437, 0.01943438, 0.015018578, -0.027198426, -0.021836381, -0.005907954, 0.102291316, -0.00034270986, -0.040591408, -0.016534993, -0.025281677, -0.01623171, -0.022467209, 0.041246496, -0.037291687, 0.02622792, 0.015261204, 0.006502389, -0.049689896, -0.03246342, 0.010663433, 0.0049526123, 0.040203203, -0.0068299347, -0.012859202, 0.003239063, -0.0062718936, 0.019616349, 0.017687468, -0.013793314, 0.01486087, 0.026155131, -0.0003851695, 0.025985293, 0.015564487, -0.01614679, 0.0057927067, 0.014278566, -0.023049513, 0.0138418395, 0.040834032, -0.041561913, -0.024286907, 0.049374484, -0.027950568, 0.011985747, -0.0352051, 0.019034045, 0.07827129, 0.021727199, 0.006629768, 0.045613773, 0.027707942, 0.067256056, -0.015855638, 0.025815455, 0.020101601, -0.04090682, 0.008971113, -0.006326485, 0.0056713936, -0.012956252, 0.004100387, -0.037485786, -0.027101375, -0.02642202, 0.01403594, 0.02036849, 0.043988176, -0.02639776, 0.008692092, 0.011718858, 0.02193343, -0.0017211314, 0.021593755, -0.033991966, -0.024335433, 0.05328077, 0.0015725227, 0.038140878, -0.03641823, -0.010372281, 0.023680342, -0.031565703, 0.044885892, -0.0056562293, -0.022248846, -0.014703163, 0.033700816, -0.060656615, 0.0013154903, -0.027659416, -0.04583214, -0.008000608, -0.00078322855, -0.0030404127, -0.021363258, -0.029066648, -0.036636595, 0.018403217, 0.012531657, 0.092392154, -0.026907274, -0.085550085, -0.033919178, -0.024735767, -0.007855032, -0.031589963, 0.07026462, -0.018730761, -0.02274623, -0.03200243, -0.044376377, 0.0057229516, -0.024893474, -0.036903482, -0.017675336, 0.0019364624, 0.014060203, -0.015916295, -0.05017515, 0.030061418, -0.0542998, -0.00059746765, 0.057745095, 0.01760255, 0.009595877, -0.0008810373, -0.029915841, 0.033336874, 0.016571388, -0.005474259, -0.025888242, -0.021132763, 0.011858368, 0.016134659, 0.026640385, -0.01036015, -0.0063325507, -0.05483358, -0.034719847, 0.017772388, 0.009862766, 0.0018212148, 0.06982789, -0.0050617945, 0.001186595, -0.028969599, 0.0009394193, -0.0707984, 0.020429147, -0.0035605433, -0.0058321333, -0.009377512, -0.051194184, 0.009705058, -0.02972174, 0.031929642, -0.006453864, 0.040324517, 0.0018545759, 0.04374555, -0.012137389, -0.006326485, -0.011033438, -0.018269772, -0.011445903, -0.028217457, 0.011809843, 0.045346886, -0.011227539, -0.01797862, -0.028096143, -0.022503603, -0.04549246, -0.0137811825, 0.03044962, 0.032245055, -0.013186748, -0.012349687, -0.02064751, 0.017347792, -0.005152779, 0.028387295, 0.0040882556, -0.004640231, 0.03595724, 6.098833e-05, 0.00931079, 0.032706045, -0.020271441, 0.012003944, 0.047190845, -0.007727653, -0.014460537, 0.019834712, -0.001379938, 0.011512625, -0.05944348, 0.010669499, 0.025548566, 0.036345445, 0.06735311, -0.018318297, 0.0055076205, 0.027441053, -0.025451515, 0.0042368644, -0.023789523, -0.0372189, -0.007606339, -0.008030935, -0.0009780879, -0.028411558, -0.029212225, 0.02962469, -0.0060929568, 0.030643722, -0.013053304, 0.0048798244, -0.007509289, 0.026179394, 0.025111837, 0.00020680114, 0.002471757, 0.058133297, -0.014521194, 0.052698467, 0.0052619614, 0.008710289, 0.008867997, 0.011718858, -0.03869892, -0.0033088182, 0.052601416, 0.0001486087, -0.04512852, -0.016801883, -0.039038595, -0.046754118, 0.020853743, 0.039669424, 0.01888847, 0.0054863906, 0.04629313, -0.020441279, 0.02550004, 0.016268104, 0.007794375, 0.0040033367, -0.00028755027, -0.012204111, -0.06458716, 0.013672001, -0.011203277, 0.035010997, 0.058375925, 0.00205171, 0.008037001, -0.018949127, 0.009789977, -0.03869892, -0.029066648, -0.026761698, 0.0130775655, 0.030061418, 0.0018196984, -0.00852832, 0.051776484, 0.030401094, 0.0074425666, -0.0023716737, 0.018184852, -0.005101221, -0.0036454624, -0.045395408, 0.015067102, 0.009850634, 0.0038547278, 0.016474336, 0.009177346, 0.04614755, 0.006987642, -0.025718404, 0.031614225, -0.017893702, -0.04541967, -0.02421412, 0.02926075, -0.020271441, 0.026567597, 0.002928198, 0.03044962, 0.0027507774, -0.027489576, 0.01031769, -0.023049513, -0.019252408, -0.0659944, -0.040882558, -0.04520131, 0.0012957769, -0.005692623, 0.01403594, 0.037461523, 0.023995757, -0.047676098, 0.02751384, -0.016522862, 0.022624917, -0.017942226, 0.037825465, 0.029115174, -0.016304499, -0.012798546, 0.005398439, -0.059783157, 0.006356813, -0.012137389, -0.01393889, 0.00033759198, -0.023255745, -0.039863527, 0.0052164686, -0.027780728, 0.010748352, 0.026955798, -0.030910611, -0.022115402, 0.007115021, 0.0068299347, 0.019228147, 0.017893702, 0.032050956, -0.019980289, 0.023862312, 0.009098492, -0.024893474, 0.004051862, -0.0046008043, -0.004731216, -0.04127076, 0.012992647, 0.044376377, -0.022721967, 0.03513231, -0.018961258, -0.023971494, -0.021496704, 0.021448178, -0.022661312, -0.009104557, 0.014666769, 0.014812345, 0.046099026, -0.033530977, 0.001818182, 0.036709383, 0.012604444, -0.008546517, -0.039062858, -0.020987188, 0.0032542273, 0.023583291, 0.01104557, -0.014327092, -0.026810223, 0.003945713, 0.028314507, -0.03707332, 0.005698689, 0.024371827, 0.07303056, -0.023680342, -0.0337736, 0.028557133, -0.02678596, -0.007357647, 0.0251361, 0.05648344, -0.011081963, -0.015176285, 0.0337736, -0.031517178, 0.02017439, 0.00053946476, 0.010699826, 0.013344455, 0.03200243, -0.01393889, 0.028120406, 0.037121847, -0.013417243, -0.0055652442, -0.006945182, 0.007327319, 0.0014754721, 0.04173175, -0.04529836, -0.0074607637, 0.023170827, -0.045443933, -0.024153464, 0.014666769, -0.001088028, -0.010056866, 0.03384639, 0.041246496, -0.01603761, 0.005052696, 0.031395864, -0.0034483285, -0.043988176, -0.0044885892, -0.0070482986, -0.010445069, -0.016559256, -0.011652135, 0.04833119, 0.013029041, 0.023182958, 0.0070664953, -0.05716279, -0.008661765, 0.02926075, -0.010190311, -0.023728868, 0.003296687, -0.017966488, -0.008267497, -0.018099934, 0.027853517, 0.00898931, -0.014957921, 0.021290472, -0.04639018, 0.046074763, -0.0002471757, 0.005959512, -0.010578513, -0.0076366677, 0.015989084, -0.0037607101, -0.026106607, -0.009868831, 0.006381076, 0.034428693, 0.044619005, 0.021035714, -0.001675639, 0.07220563, 0.02073243, -0.01476382, 0.013526425, -0.0155402245], [-0.021998331, -0.0509509, -0.027512548, 0.0071766777, 0.03877513, -0.0072117997, -0.018357309, 0.008101568, -0.021412957, -0.0051278705, 0.0005125676, 0.04118687, -0.009295729, -0.044582035, -0.018357309, 0.021366129, -0.035239477, -0.048422083, 0.02209199, -0.039945878, -0.03800244, -0.073288746, -0.06158128, 0.006591304, -0.010583551, 0.016156305, -0.01414262, 0.014692872, -0.058911975, 0.0012797725, 0.014927021, 0.008201081, 0.049218193, -0.064999856, 0.011063556, -0.016566066, 0.015594346, 0.03179748, -0.06148762, -0.018380724, -0.020687094, -0.027957432, -0.00496982, -0.023321275, -0.034443367, 0.011526002, -0.046338156, -0.0043376167, 0.022173943, -0.034700934, -0.015570931, -0.021717353, -0.02135442, -0.02643546, -0.02334469, 0.0029283303, 0.0056342185, -0.085605, -0.0016302648, 0.021834427, -0.048890382, 0.007984493, -0.026412046, -0.013229438, -0.00048256718, -0.012866506, -0.014013838, 0.023461765, 0.026201311, 0.052683603, -0.05385435, 0.001701973, 0.048796725, -0.026786685, -0.0053912885, -0.027887188, 0.07937663, 0.04474594, -0.0757239, -0.008335717, -0.0022610046, -0.013287975, -0.012726017, 0.012445038, -0.037229747, -0.0031463818, 0.06078517, -0.079329796, 0.0022229555, -0.008394254, -0.007990346, -0.018333893, 0.0058127576, 0.012105521, -0.05305824, 0.014657749, -0.014166036, 0.0055903154, -0.035707776, 0.013065534, -0.0017166074, -0.0014034327, -0.06101932, -0.026833516, 0.008880114, -0.014411893, 0.034279466, 0.024164213, -0.00765083, 0.14320575, 0.0324531, 0.020815877, -0.026107652, 0.0001335383, -0.08438742, 0.049218193, -0.0013734322, -0.0644379, -0.024468606, 0.05390118, -0.102651075, 0.00034683372, 0.02274761, 0.04226396, -0.000101800084, -0.0049610394, -0.013428465, 0.009588416, 0.0391966, -0.021799304, -0.0018058768, 0.054650456, 0.066123776, 0.0067844773, 0.035403382, -0.01788901, 0.048468914, 0.0042966404, -0.018017793, -0.017221684, -0.031001374, -0.02666961, -0.0034098, 0.007451803, -0.015453856, 0.0013361147, -2.2443124e-05, 0.016285088, -0.059801742, -0.024421778, 0.018064622, -0.009307437, 0.027980847, 0.006971797, 0.031774066, -0.038423907, -0.01354554, 0.041889317, -0.025756428, 0.01765486, 0.013650907, -0.026013993, 0.017350467, 0.042568352, 0.014318232, -0.06153445, 0.06134713, -0.003673218, -0.07188385, 0.026833516, 0.016718263, 0.0038546836, 0.033178963, 0.026786685, -0.025007151, 0.022536874, 0.009401096, 0.017725106, -0.046665967, -0.0545568, -0.037932195, 0.05376069, 0.012702602, -0.053011414, -0.013662614, 0.023368105, 0.04697036, 0.03697218, 0.02718474, -0.055446565, -0.021530032, 0.0048410376, 0.02467934, -0.03823659, -0.01890756, -0.03268725, -0.020289041, -0.07436583, -0.012093814, 0.022361262, -0.007522048, -0.08537085, -0.01257382, -0.0013083095, -0.034092143, 0.037182916, 0.018614873, -0.004065418, -0.017256808, -0.023122247, 0.051231876, -0.02903452, 0.0008275716, 0.013088948, -0.019375859, 0.016530944, -0.038306832, 0.06106615, -0.0329214, -0.027653039, 0.0829357, -0.0459401, 0.067388184, -0.035895094, 0.014013838, 0.06439107, -0.006807892, 0.025545694, 0.013615784, 0.011092825, 0.03896245, -0.03254676, -0.017245099, 0.022291018, -0.03828342, 0.008651818, -0.036597542, 0.017327052, 0.07834637, -0.017186562, 0.016729971, 0.019399274, -0.04645523, -0.026833516, 0.00046683525, 0.058677826, 0.012983581, -0.040367346, -0.038119514, -0.027254984, 0.02001977, -0.027746698, 0.01964513, -0.0016683141, 0.013650907, 0.031071618, -0.020066598, -0.04195956, 0.01321773, 0.0023385666, -0.021530032, 0.08251423, -0.041116625, 0.06598329, 0.0035619969, -0.036878522, 0.046057176, -0.003913221, -0.025920333, -0.013955301, 0.037159503, -0.04760256, 0.03074381, -0.02690376, 0.04142102, -0.013299683, 0.06832478, 0.0001777157, -0.06097249, 0.05258994, 0.028870614, -0.0030000384, 0.00020323432, 0.004159078, 0.035520457, -0.012234303, 0.0058127576, -0.048328426, -0.011607954, 0.013978716, -0.0037932193, -0.039641485, 0.03851757, 0.013194316, 0.03509899, 0.012726017, 0.009605977, 0.0051542125, -0.0385644, 0.019855864, -0.025498863, 0.016390454, -0.027254984, -0.03753414, -0.009289876, 0.042451277, 0.031235524, 0.059848573, -0.01451726, -0.05343288, 0.027020834, 0.005007869, 0.017444126, -0.05071675, 0.03060332, -0.018579751, 0.020078307, 0.0313526, 0.06846527, -0.042779084, 0.00071378966, -0.07061944, -0.07520877, -0.0056371456, 0.015875326, -0.018450968, 0.003494679, -0.001477336, -0.022021746, 0.03826, -0.07652, 0.00915524, -0.029736968, -0.047766466, -0.007533755, -0.05390118, -0.008095713, -0.07197751, 0.013838226, -0.03680828, -0.010203058, 0.030017946, 0.00628691, -0.04769622, 0.01904805, -0.040437594, -0.009992324, 0.009459633, 0.045378145, 0.003822488, 0.0014919704, 0.0509509, 0.049265023, 0.0062752026, 0.04378593, -0.003076137, -0.025896918, -0.045776196, 0.013194316, -0.018017793, 0.034935083, -0.060597852, 0.016530944, 0.051887494, -0.01141478, -0.044909846, -0.036269736, -0.02297005, -0.01506751, 0.048375256, -0.029128179, -0.016928997, -0.020651972, -0.05399484, -0.017104609, -0.022618826, 0.05029528, 0.0006673256, -0.0116021, 0.017221684, -0.017572908, -0.04128053, 0.009301582, 0.026154483, 0.0031844312, 0.015313367, -0.031774066, 0.029081348, 0.04008637, -0.046244495, 0.012644065, -0.031984802, -0.0073991194, -0.006901552, 0.05802221, 0.012316256, -0.026458876, -0.03826, -0.03022868, -0.022314433, -0.0069483817, -0.0148099465, -0.0022244188, 0.022279311, 0.027723283, 0.041491263, -0.022501752, -0.02270078, 0.0023766158, 0.038423907, -0.0145289665, 0.008698648, -0.042591766, 0.052262135, 0.010917214, 0.044582035, 0.014868484, 0.022127112, -0.028730124, 0.00896792, 0.010226472, -0.013147485, 0.007100579, 0.052964583, -0.015008973, 0.034677517, -0.05441631, -0.020605143, 0.009084995, -0.037042428, -0.026552536, 0.023356397, 0.03184431, -0.011151362, -0.03767463, -0.06893357, -0.06148762, -0.028776955, -0.011824542, 0.008423523, 0.035450213, 0.012550405, 0.0077679045, 0.05113822, -0.026365217, 0.007229361, -0.039899047, -0.022127112, -0.00926646, -0.019258784, -0.044207398, 0.004770793, -0.06078517, -0.028987689, 0.07380387, -0.012925044, 0.03851757, -0.051466025, 0.033342868, -0.07389753, -0.00044781063, 0.014294818, 0.028449146, -0.022888098, 0.02071051, -0.018556336, 0.02999453, 0.048890382, -0.009734759, 0.0040537105, -0.024304703, 0.005037138, -0.051747005, 0.056102183, 0.020429531, -0.018696826, -0.022478336, 0.010712333, 0.028776955, -0.038377076, -0.010156228, -0.029057933, 0.070666276, 0.03776829, -0.0003812244, 0.004126882, 0.011520148, -0.0049054287, 0.040156614, 0.028004263, -0.018568043, 0.042825915, 0.0007661074, -0.00045915224, 0.0013141632, -0.046384986, -0.0308843, -0.027020834, 0.031680405, 0.0055347052, 0.033694092, -0.0029063788, 0.025498863, 0.022689072, 0.007083018, -0.0050195768, -0.02643546, -0.039828803, 0.0064917905, -0.0071532624, 0.0028683294, -0.037698045, -0.026693026, -0.026388632, -0.018369017, 0.021284176, -0.00769766, 0.04479277, 0.026201311, 0.00790254, -0.010952336, -0.0037200477, -0.03425605, 0.017174855, -0.052074816, 0.013006996, 0.032429684, 0.036199488, -0.034138974, -0.021811012, -0.036363393, -0.018462677, -0.0050107962, 0.030931128, 0.012679188, -0.040929306, 0.026271557, 0.015407027, -0.030252095, 0.038704887, 0.020968074, 0.05366703, -0.036691204, 0.03027551, -0.018696826, 0.06382911, 0.012374793, -0.0018819753, -0.01793584, 0.032195535, -0.02713791, 0.046712793, -0.011040142, 0.020956367, 0.017701691, -0.008206935, -0.028472561, -0.027512548, -0.0071942387, 0.007533755, 0.025943747, 0.025967162, 0.07633269, 0.006790331, -0.0003750048, -0.029315498, 0.065561816, 0.014435307, -0.020804169, 0.02713791, 0.00707131, -0.006456668, -0.036082413, -0.01705778, -0.023824695, 0.051606517, 0.007539609, -0.0071766777, 0.010413792, 0.0026327167, -0.05015479, -0.003737609, 0.018837314, -0.04570595, -0.0018424627, 0.039641485, -0.0048673796, -0.049452342, -0.03800244, -0.002960526, -0.014107498, 0.035941925, -0.0031405282, -0.038658056, 0.004261518, -0.018216819, -0.026833516, -0.00492299, 0.029947702, 0.024421778, 0.0329214, 0.037182916, 0.006263495, 0.021799304, -0.051653344, -0.005514217, -0.013182608, -0.04968649, 0.040461008, 0.02505398, -0.04701719, -0.020628557, 0.034935083, -0.04219371, 0.029081348, -0.026388632, 0.033857994, 0.07371022, -0.01248016, 0.037136085, 0.02481983, -0.0066439877, 0.074319005, -0.033061888, 0.006374716, 0.021026611, -0.00871621, 0.023508595, 0.0010053788, -0.04053125, -0.04589327, -0.026154483, -0.005051772, -0.024936905, -0.024585681, 0.01589874, 0.0073698508, 0.03662096, -0.042825915, 0.020534897, -0.0008509865, 0.03079064, 0.027606208, 0.014072375, -0.021483203, -0.039500996, 0.009231338, -0.0061873966, 0.047462072, -0.029128179, -0.009922079, 0.05010796, -0.021436373, 0.034279466, -0.02052319, -0.048375256, 0.02237297, 0.055071928, -0.038377076, 0.018427555, -0.016975828, -0.004217615, 0.0003750048, -0.0027439378, -0.004159078, -0.011625515, -0.021717353, -0.04465228, -0.012128936, 0.020804169, 0.065234005, -0.024093967, -0.033857994, 0.0098108575, -0.055821203, -0.022045162, 0.038681474, 0.089913346, -0.021424666, -0.02481983, -0.015079218, -0.010402084, 0.0070186267, 0.0101093985, -0.048328426, 0.00017762423, -0.017771935, 0.011888933, -0.014903606, 0.0055054366, 0.012070399, -0.052308965, -0.023859818, 0.038751718, 0.059661254, -0.023426643, 0.005648853, -0.0443713, 0.0046098153, 0.04748549, -0.015055803, -0.030088192, -0.015746543, -0.01603923, -0.034747764, 0.0030117459, 0.00067756965, -0.022771023, -0.033459943, -0.04219371, 0.0066674026, -0.0071766777, -0.007732782, 0.042053223, 0.00051951886, 4.083894e-05, -0.015641177, 0.06345447, -0.104805246, 0.016858753, 0.017420711, -0.003207846, 0.036082413, -0.021471495, 0.030907713, -0.016940705, 0.02121393, -0.0021863696, -0.0023517376, 0.013908471, 0.022724194, -0.037651215, 0.01063038, -0.004879087, -0.031235524, 0.0087630395, -0.021155393, -0.006749355, 0.013065534, 0.0050195768, 0.007141555, -0.031867728, -0.022782732, -0.032897983, -0.014060669, -0.032476515, 0.020628557, -0.012655772, 0.007855711, -0.016109476, -0.04568254, -0.0030819909, 0.040016122, -0.0014934338, 0.0041473703, 0.05085724, 0.00061976403, -0.013873349, 0.019165125, -0.012210889, -0.041725412, 0.021436373, -0.012105521, -0.008751332, 0.02851939, 0.0034683372, -0.037370235, -0.024726171, 0.0064683757, 0.012421623, -0.0040156613, 0.06476571, -0.015840203, 0.0062986175, 0.01178942, -0.0036966328, 0.00633374, -0.026880344, -0.01581679, -0.028051091, -0.016331917, -0.002481983, 0.0052625067, -0.011672345, 0.03933709, 0.01701095, 0.0032254073, 0.0068020388, 0.009646953, 0.0029532088, -0.01793584, 0.01890756, 0.04053125, -0.004963966, 0.049780153, 0.016437285, 0.015629468, -0.0335536, -0.018193405, 0.0100391535, 0.029128179, -0.048422083, -0.010911359, 0.026927175, 0.0005220799, -0.043715682, -0.03879855, -0.031188693, -0.043598607, 0.019867573, 0.0031990653, 0.022946635, 0.013042118, 0.0100391535, -0.007059603, 0.038447324, 0.05998906, -0.016847046, -0.0045044483, 0.0041181017, -0.027629623, -0.04247469, -0.0058361725, -0.020651972, -0.01839243, 0.041538093, -0.028004263, -0.0017751447, 0.0021292956, -0.016741678, -0.030954544, -0.05062309, -0.025264714, 0.028355487, 0.011988446, -0.01641387, -0.055071928, 0.014950436, 0.052262135, -0.013030411, -0.0028507684, -0.018884145, -0.014552382, 0.020593435, -0.015137755, 0.013018704, -0.039079525, 0.014856776, 0.010074276, -0.012374793, 0.072164826, 0.024445191, 0.05020162, 0.014997265, -0.023157371, -0.0340219, 0.0038839523, 0.037276577, -0.03336628, 0.01174259, 0.052964583, 0.06827795, 0.013100656, -0.0075279013, -0.0057278783, -0.005645926, -0.004182493, -0.063969605, -0.036667787, -0.0661706, -0.022689072, 0.0098108575, 0.030298926, 0.056055352, 0.048890382, 0.0066264267, 0.021366129, 0.0015629469, -0.009038165, -0.0018117306, 0.057928547, -0.0065678894, -0.01904805, -0.0050898213, 0.0015366051, -0.026412046, 0.015336783, -0.002404421, -0.031820897, -0.010735747, 0.011941616, -0.018778777, 0.00823035, -0.012468453, 0.0021117344, 0.03022868, -0.036457054, -0.024421778, 0.015793374, 0.028683295, -0.0027585719, 0.0070244805, 0.03287457, -0.026622782, 0.0380961, 0.0069600893, 0.007961078, 0.027254984, -0.011291852, -0.040578082, -0.03430288, 0.0043551777, 0.027676452, -0.06275202, 0.05006113, -0.04202981, 0.0016844119, -0.021822719, -0.0014370916, -0.05029528, 0.015266538, 0.034443367, -0.010507452, 0.009723051, -0.014166036, -0.0038839523, 0.021752475, -0.0036585836, 0.007732782, -0.030673565, 0.016437285, 0.0055932426, 0.045916688, 0.010671357, -0.0135338325, -0.0062049576, -0.0005125676, 0.041116625, -0.009623538, -0.014400185, 0.027793527, 0.06645159, -0.03259359, -0.029385744, 0.03439654, -0.06701354, 0.022080284, 0.0385644, 0.03360043, -0.014681164, 0.0046273763, 0.030486245, -0.024304703, -0.024468606, -0.0073347283, 0.02685693, -0.0072996058, 0.021682229, -0.024070553, 0.06406326, 0.015910449, -0.0012248937, -0.04099955, -0.0003084186, -0.0032341878, -0.032499928, 0.018240234, 0.01862658, -0.016729971, 0.040601496, -0.027606208, -0.018041207, -0.0044254228, -0.010085983, -0.014915314, 0.006983504, 0.0324531, -0.0062166653, -0.0056225113, 0.02652912, -0.0016931925, -0.015430442, -0.019633424, -0.030416, -0.008470353, -0.018884145, -0.0010463549, 0.05020162, -0.021108564, 0.006790331, 0.03980539, -0.022759316, 0.016741678, 0.023368105, -0.01511434, -0.013943594, 0.017853888, -0.00064244727, 0.0005956174, 0.01743242, -0.010220619, -0.019422688, 0.0029590623, 0.024562266, -0.036644373, 0.03132918, -0.015032388, 0.0061288592, -0.032663833, -0.02657595, 0.0034595565, 0.011859665, -0.043060064, -0.014845069, -0.003143455, 0.02121393, 0.01719827, -0.012995289, 0.005669341, 0.07483413, 0.03486484, -0.01037867, -0.018661702, 0.0058625145], [0.057906408, -0.022659514, -0.0074954145, 0.060544614, -0.011849574, 0.0032614274, -0.033581246, 0.02232415, -0.00068540283, 0.014320098, -0.016645297, 0.04028855, 0.008775392, -0.023743862, -0.0045050737, 0.06582103, 0.0024453718, 0.031188972, -0.012576198, -0.063048676, -0.046325125, 0.000802082, -0.052585278, 0.022458296, -0.021150371, 0.027701173, -0.0076351496, 0.005371434, 0.0066346433, 0.002174285, 0.01256502, 0.019037569, 0.05419503, -0.017405458, 0.02850605, -0.021698134, -0.040243834, 0.030585315, -0.051064957, -0.013649368, -0.03257515, 0.021865817, -0.003314527, -0.017181883, -0.048426747, 0.0135934735, -0.003459852, 0.012889206, 0.0057459255, -0.02184346, -0.04473773, -0.009686467, -0.021563988, 0.011625997, -0.049455203, -0.0060421648, 0.04514017, -0.08952018, 0.024794674, -0.008171734, 0.0044380007, 0.050751947, 0.005265235, -0.011570103, -0.0064390134, -0.016555866, -0.004231192, 0.0077637066, 0.037449125, 0.040377982, 0.0015398856, 0.038522292, 0.025107682, -0.02772353, -0.029713364, -0.04927634, 0.060455184, 0.055670638, -0.030495884, -0.05245113, 0.038254, -0.043060903, 0.038857657, 0.020401388, 0.008708319, 0.005103142, 0.030652387, -0.067699075, -0.09363399, 0.0336036, -0.01797558, -0.010267767, 0.017327206, -0.03295523, -0.030361738, 0.07664215, 0.027567027, 0.0027108695, -0.025308901, -0.005614574, -0.029646292, -0.07981694, -0.10096731, -0.031345475, 0.05857714, -0.016499972, 0.06734135, -0.059024293, 0.0399979, 0.12645507, 0.033782464, -0.026270282, -0.054731615, -0.005055632, -0.049410485, 0.07874377, -0.041026354, -0.004848823, -0.0030546188, 0.023073131, -0.06810151, 0.017282492, 0.05102024, 0.0045749415, -0.021016225, 0.0317032, 0.014465423, 0.027410524, -0.035191, -0.031971492, 0.0045749415, -0.030697104, 0.039975543, 0.029959299, -0.0017914096, 0.017506069, 0.03961782, 0.029020276, -0.014532496, 0.001632111, -0.07337792, -0.0070762075, -0.0026032731, 0.006288099, -0.032709293, -0.010111264, -0.02066968, -0.013481685, -0.030674746, -0.037739772, -0.018869886, -0.08558522, 0.0226148, 0.010474576, 0.04107107, -0.019987771, 0.05508934, 0.015672738, -0.016757086, 0.030987753, 0.02116155, -0.076865725, -0.01614225, 0.010692564, 0.0035017726, -0.024504025, 0.011670712, 0.012922742, -0.055625923, 0.018802814, 0.03335767, 0.0014099316, -0.012766239, -0.005611779, -0.024191016, 0.021563988, 0.029646292, 0.005997449, -0.055804785, -0.044111714, -0.044380005, 0.020345494, -0.0006696826, -0.057906408, 0.034945063, -0.00488236, 0.017696109, -0.0011136922, 0.027768247, -0.0071712276, 0.003353653, 0.006120417, 0.022715408, -0.02656093, -0.021049762, -0.06362998, -0.049589347, -0.06523973, -0.0044883057, 0.017081272, 0.018601594, -0.060544614, -0.01227437, 0.013761156, 0.0024677296, 0.047398295, 0.03621945, -0.0065675704, -0.027186947, -0.0041641193, 0.015572129, 0.04963406, 0.030071087, -0.06152835, -0.02327435, 0.037024327, -0.070695005, -0.0010570993, -0.008372953, -0.04482716, 0.06273567, 0.010659027, -0.022547726, -0.013012174, 0.048158456, 0.06367469, -0.014655463, -0.03130076, 0.0054804278, -0.008674782, -0.026471501, -0.017696109, -0.0021141986, 0.04628041, -0.06577631, -0.011525387, -0.005382613, 0.0042451657, 0.09873154, -0.048918616, 0.0179644, 0.013984732, -0.0010270562, 0.008317059, -0.023900367, 0.05517877, -0.012061971, -0.055894215, -0.059963316, 0.0076686866, 0.032127995, 0.018433912, -0.012654451, 0.0040467414, -0.01873574, 0.092918545, -0.014867861, -0.055134054, 0.008630067, -0.03159141, -0.044961307, 0.04254668, -0.02367679, 0.009502017, 0.022592442, 0.002791916, 0.014979649, -0.014387171, -0.036487743, -0.028349547, 0.041473508, -0.019551797, -0.020267243, 0.021418663, -0.006416656, -0.022279434, 0.033290595, 0.003350858, -0.05312186, 0.061081197, -0.016198143, 0.008372953, 0.008255576, -0.018903423, 0.051646255, 0.028215399, 0.019004034, -0.03970725, -0.028640196, -0.008920717, -0.020602608, -0.022078214, 0.009054863, 0.063942984, 0.013168677, -0.022983702, 0.002540392, 0.011670712, -0.02609142, -0.00820527, 0.0018822377, -0.021944068, -0.047577158, -0.045274314, -0.0029623935, 0.0616625, 0.034162544, 0.072260045, 0.01546034, -0.028640196, 0.035481647, 0.02327435, -0.012229654, -0.057593398, 0.01594103, -0.018668668, 0.035727583, 0.040646274, 0.052316986, -0.053569015, -0.0038091908, -0.017215418, -0.047621872, 0.010452218, 0.012352621, 0.022055857, 0.004907512, 0.0025557629, -0.028528407, -0.0197083, -0.070873864, 0.018590417, 0.004029973, -0.005614574, -0.069308825, -0.09622748, -0.026404427, -0.041562937, 0.031166615, 0.00036994985, -0.061394207, -0.00045448984, -0.022290614, -0.047979593, 0.007506593, -0.02260362, 0.016063998, -0.018825172, 0.040735703, -0.028438976, 0.0013617228, 0.054105602, -0.00051492546, -0.00053344044, 0.0017033762, -0.01777436, -0.0773576, -0.0016670449, -0.00046881274, -0.007691044, 0.024191016, -0.06729663, 0.014901398, 0.08831286, -0.016097534, -0.03362596, -0.027880035, 0.0083282385, -0.0074898247, 0.015113796, -0.026404427, 0.012319085, -0.013917659, -0.0005718677, -0.0020652912, 0.00041955596, 0.020177811, 0.026628004, 0.010446629, -0.0004523938, -0.014398349, -0.027097516, -0.01641054, 0.040713347, 0.0039042109, 0.0055810376, -0.028282473, -0.0035381038, 0.0446483, -0.017662572, -0.007260659, -0.0146219265, -0.018791635, -0.046861712, 0.029042635, 0.00812143, -0.049186908, -0.008512689, -0.002135159, -0.012319085, -0.016824158, 0.02734345, 0.017897328, -0.03121133, 0.02513004, -0.03789628, 0.026873939, 0.052629992, -0.0064781397, 0.056788523, -0.021619882, 0.057325106, -0.02281602, -0.0022651132, 0.021429842, 0.009507606, 0.020971509, 0.0035129515, -0.03785156, 0.0156392, -0.018221514, -0.026605647, -0.054373894, 0.03979668, -0.057593398, 0.020971509, -0.057325106, 0.02542069, -0.0039768736, -0.07623971, -0.03865644, 0.0032474538, 0.01999895, -0.021552809, 0.005913608, -0.048337318, -0.028260116, -0.03103247, 0.0027430085, 0.035012137, 0.024101585, -0.02347557, 0.025554836, -0.014990829, -0.0546869, -0.0226148, -0.054955192, -0.0058800713, 0.0051366785, -0.001632111, -0.021876996, 0.012050793, -0.076016136, -0.035436932, 0.044961307, -0.017617857, 0.0141076995, -0.013559937, 0.0103516085, -0.118316874, -0.022078214, -0.04252432, 0.014744894, -0.008322649, 0.063987695, 0.004683935, 0.014387171, 0.011715428, 0.027321093, 0.010642258, 0.032239784, -0.013202214, -0.023341425, 0.03630888, 0.0004667167, -0.016734729, -0.0107372785, 0.04500602, 0.031345475, -0.024414593, -0.022726588, -0.004901923, -0.0013756964, 0.09327627, -0.007651918, -0.004250755, 0.0017438995, 0.054373894, 0.08531693, 0.012430874, -0.024772316, 0.03545929, -0.0043513644, -0.03487799, 0.015415625, -0.04317269, -0.05017065, -0.0434857, 0.024369879, 0.0049913535, 0.04668285, 0.0083282385, 0.021876996, -0.0043429807, 0.027365807, 0.028595481, -0.006673769, -0.026113776, -0.00439608, 0.017450174, 0.019149357, -0.026203208, -0.056877952, 0.0039293636, -0.03304466, 0.010301304, -0.019194074, 0.0193394, -0.02338614, 0.012967458, -0.017550783, -0.035615794, -0.02656093, -0.012352621, 0.043821067, 0.04098164, -0.00027527902, -0.0023531464, 0.005318335, -0.041138142, -0.056475516, -0.010608722, 0.020412568, 0.019283505, 0.04473773, -0.01999895, 0.049186908, 0.010278946, -0.035615794, -0.03188206, -0.0135934735, 0.07288606, -0.008976611, 0.010541649, -0.027432881, 0.052316986, 0.033156447, 0.03682311, -0.052943002, 0.027745888, -0.03304466, 0.04408936, -0.021239802, 0.021139191, 0.0034039577, -0.008289112, -0.016723549, -0.012833312, 0.005539117, -0.03505685, -0.007646329, 0.039193023, 0.096764065, 0.047666587, -0.01980891, -0.0029428303, 0.046638135, -0.010273357, -0.025554836, -0.0067967367, 0.030697104, 0.033402383, 0.008741856, -0.00917224, 0.020188991, 0.07324378, -0.011184433, 0.0026074653, 0.0011688878, 0.023699148, 0.0077804746, -0.022916628, 0.006684948, -0.05276414, 0.048829187, 0.006193079, -0.012486768, -0.033290595, -0.037136115, 0.00030200343, 0.0022469475, 0.03856701, 0.008898359, 0.009943581, 0.015963389, -0.018981675, 0.021407485, 0.02946743, 0.02008838, 0.059650306, 0.014610748, -0.013202214, -0.0014434682, -0.006360762, 0.009256082, -0.010021833, 0.008965432, -0.013638188, 0.032150354, 0.020211348, -0.01652233, -0.00036261373, 0.009641753, -0.03092068, 0.03680075, -0.004144556, 0.030004015, 0.0064725503, 0.024571097, 0.031077184, 0.016354647, -0.0066681798, 0.06036575, -0.052674707, 0.013839408, 0.012643271, -0.029713364, 0.022089394, -0.020703217, -0.01102234, -0.011067054, -0.054731615, -0.033693034, -0.025107682, 0.023251994, 0.006360762, 0.011385651, 0.060142174, -0.020155454, -0.026449142, 0.006193079, 0.052540563, 0.023945082, 0.048382033, -0.018568058, -0.005712389, 0.020960331, 0.005768283, 0.03583937, 0.0121178655, -0.036107663, 0.0047593922, 0.0074451095, 0.025465405, 0.04086985, -0.026873939, 0.0018738536, 0.09184538, -0.053077146, 0.014420708, -0.009434943, -0.03045117, 0.02165342, 0.013738798, -0.011234737, 0.02135159, 0.020379031, -0.02338614, -0.01931704, 0.020244885, 0.04900805, -0.030294664, -0.03876823, -0.048918616, -0.031747915, -0.024280448, 0.0061707213, 0.037560914, -0.04484952, -0.018512163, -0.06354054, -0.016175786, 0.02481703, -0.015818063, 0.03257515, -0.0089822, -0.026717436, 0.015706275, -0.022760125, -0.028774342, 0.02888613, -0.022357685, -0.0049242806, 0.06184136, -0.007897853, 0.016466435, -0.0044966894, -0.02696337, -0.01720424, 0.008518279, -0.042278383, -0.0023447624, 0.005681647, -0.007277427, 0.014867861, 0.020256063, -0.011871931, -0.0016684423, 0.009451712, -0.037314977, 0.02009956, 0.013984732, 0.015158511, 0.03785156, -0.005924787, -0.03490035, -0.0091945985, 0.0136270095, -0.0858088, 0.0051143207, -0.0037924226, -0.006696127, 0.024995893, -0.009999475, 0.019294683, -0.023721505, 0.008926306, -0.0015301042, 0.04601212, 0.0074618775, 0.034989778, -0.0063328147, 0.0523617, -0.010016243, -0.03680075, -0.025465405, -0.01816562, 0.0039014162, 0.01893696, 0.007528951, -0.008317059, 0.014532496, -0.016902411, -0.024884105, 0.00570121, -0.0068861675, 0.023162562, -0.040377982, -0.006919704, -0.020446103, -0.02396744, 0.011558924, 0.019674763, -0.010787584, 0.049321055, 0.019361757, 0.008769803, -0.026314996, 0.031479623, -0.028617838, 0.007601613, 0.029489787, 0.016075177, -0.025756054, 0.046593416, 0.007501004, -0.013884123, -0.03165848, 0.0394166, 0.026247924, 0.04239017, 0.029489787, -0.043843422, -0.020133097, 0.0048180814, 0.0003985956, 0.03760563, -0.022771303, -0.044536512, -0.04163001, 0.005603395, -0.0056676734, -0.02396744, -0.011419188, 0.019417651, 0.0015664353, -0.009882097, -0.011894289, -0.018702205, -0.012743881, 0.009244903, 0.014085342, 0.009038094, -0.005709594, 0.06608932, -0.0187581, 0.028438976, -0.005567064, 0.067788504, -0.009613805, 0.00054881134, -0.034989778, -0.0032250963, -0.0051813936, -0.047800735, -0.049589347, -0.007897853, -0.035325143, -0.026873939, 0.020524357, 0.053569015, 0.03943896, -0.010966445, 0.00425355, -0.03467677, -0.02443695, 0.006483729, 0.014577212, 0.032709293, 0.011547745, -0.035504006, -0.041607656, -0.00985415, -0.022167645, 0.040243834, -0.0028142738, -0.0010759636, -0.035191, -0.006735253, -0.024660528, -0.0164329, -0.0523617, -0.0033396794, 0.0035213355, 0.025353616, 0.024235731, -0.009166651, 0.011827216, 0.035727583, 0.011178843, 0.0066514118, -0.032731652, -0.012497947, 0.04936577, -0.038075138, 0.051154386, 0.008132609, -0.03758327, -0.012453231, 0.03333531, 0.07865434, -0.0031049238, 0.014890219, 0.006522855, -0.026404427, -0.046638135, -0.033894252, 0.024146302, -0.011251505, 0.0024425772, 0.011715428, 0.009725593, 0.015203226, 0.006455782, -0.0008747445, -0.02309549, 0.004502279, -0.076955155, -0.016254038, -0.013694082, -0.012263191, -0.027947107, -0.01662294, 0.010843478, 0.019607691, -0.04744301, 0.009345513, -0.034632057, 0.008954253, -0.00299593, -0.032038566, 0.044134073, -0.044022284, -0.026672719, -0.020468462, -0.0434857, 0.009507606, -0.0020149865, -0.023319067, 0.00074129703, 0.0062377946, -0.027768247, 0.023989797, -0.00067212794, 0.0077916537, 0.012654451, -0.027477596, -0.017852612, 0.0018431117, 0.025845485, 0.011128538, 0.023497928, 0.023945082, -0.04201009, -0.00054182456, 0.005824177, -0.0072997846, -0.012967458, 0.0030741817, 0.037247904, -0.012095508, 0.032619864, 0.023430856, 0.00608688, 0.028640196, -0.04393285, -0.009585858, 0.021407485, -0.010955267, -0.01758432, 0.01951826, 0.0031664073, 0.0025795181, 0.03257515, 0.0039740787, 0.038298715, 0.018825172, 0.051154386, -0.017025378, -0.0014686205, 0.03930481, -0.0020932383, 0.00830588, 0.047577158, 0.009166651, -0.032686938, -0.03033938, 0.0048432336, -0.007886673, -0.0067967367, 0.06850395, 0.04239017, -0.031613767, -0.062199082, 0.0035436933, -0.025375973, -0.01246441, -0.004102635, 0.0029344463, 0.001140242, 0.015315015, 0.01951826, -0.008166145, 0.034430835, -0.010932908, -0.015348552, -0.0010053972, 0.030406453, 0.008931896, -0.0016977867, 0.0076854546, -0.017606677, 0.0026060678, 0.00550558, 0.012889206, 0.00075317454, 0.022257077, -0.043798707, -0.008048767, 0.013917659, -0.033491813, 0.012777418, 0.018825172, 0.025912559, 0.0148119675, 0.013638188, 0.036890183, 0.01816562, 6.4453016e-05, 0.02309549, -0.0002005205, -0.037918635, -0.01565038, 0.045833256, -0.0033648317, -0.021910533, -0.005044453, 0.016600583, 0.02580077, 0.0019646818, 0.024749959, -0.05169097, -0.0048460285, 0.03630888, -0.031546693, -0.0034570573, -0.0020708807, 0.02146338, -0.007014724, 0.0011437354, -0.019082285, 0.012408515, -0.018221514, 0.024280448, -0.054150317, 0.016924769, 0.016019283, -0.02870727, -0.03680075, 0.0073109632, -0.0031831756, 0.011061465, -0.0024048486, -0.002005205, -0.02251419, 0.040668633, 0.004242371, -0.0074954145, -0.006405477, 0.06286982, 0.008160556, -0.03324588, 0.038723513, 0.014353635], [-0.013194593, -0.004871077, -0.020237567, 0.0064843073, 0.016333172, -0.0045007244, -0.017877355, 0.007971995, -0.019107679, -0.014249155, -0.017211976, 0.02259778, -0.03575471, 0.0052257366, -0.02100338, 0.057599228, -0.029552873, -0.0046356833, 0.018467408, -0.014977306, -0.022999518, -0.037085466, -0.03133559, 0.018957026, -0.018002898, 0.01890681, -0.008700145, 0.015178176, -0.02686625, 0.0147136655, -0.01609464, -0.0010467166, 0.029000483, -0.012591985, 0.007789957, 0.0070304205, 0.012704974, 0.0016461854, -0.033444714, 0.00030915017, -0.02259778, -0.008166586, -0.020061806, -0.012322067, 0.003163689, 0.00020341924, -0.022735877, 0.013081604, -0.018078223, -0.02832255, -0.014751328, -0.065985516, -0.018630615, -0.014701111, -0.03171222, 0.037637856, 0.03073298, -0.11238629, 0.048083052, -0.012642202, -0.030808305, 0.027845487, 0.004434814, -0.04363882, -0.013307582, -0.0035497346, -0.03628199, 0.01235973, 0.034147754, 0.028448094, -0.013182038, 0.03161178, 0.009145823, -0.023250604, 0.015040077, -0.043387737, 0.099580884, 0.021618543, 0.006396427, -0.02686625, -0.0048208595, -0.008273298, -0.017237084, -0.027795268, 0.020149687, -0.019308547, 0.045295995, -0.07884114, -0.020425882, -0.0006936263, -0.0059350557, -0.038591985, 0.0397972, -0.023639789, -0.057498794, 0.01783969, -0.02721777, 0.019245775, -0.030883633, -0.008449059, -0.037713185, -0.05019218, -0.047857076, -0.07241333, 0.012265572, 0.017186867, 0.03874264, -0.012083535, 0.008957509, 0.14593144, 0.02608788, -0.031360697, -0.043387737, 0.0041931435, -0.046250124, 0.06764269, 0.022911638, -0.015090295, -0.012347176, 0.02146789, -0.088633515, -0.0030648238, 0.06392661, 0.014198938, 0.013257364, 0.0026442541, -0.014738774, 0.0168479, -0.0051001934, 0.028071463, -0.0038698697, 0.045572188, 0.0769831, 0.00087174075, 0.05905553, -0.011907774, 0.045647513, 0.0034398842, -0.05092033, 0.005520763, -0.015266055, -0.014286818, 0.010890874, 0.04132883, -0.025761468, 0.017161759, -0.04519556, -0.024932884, -0.021656206, -0.005451714, -0.0040299376, -0.034549493, -5.507228e-05, 0.0028262918, 0.070203766, -0.009208595, 0.059206184, 0.039922744, -0.009955578, 0.01397296, 0.00225507, -0.053632062, 0.011970546, 0.0479324, -0.005282231, -0.026389185, 0.027694834, 0.0019443507, -0.025598263, 0.03218928, 0.01943409, 0.00541719, 0.026966684, -0.013847417, -0.0011220425, 0.040098503, 0.015630132, 0.04798262, -0.018103333, -0.031812653, -0.053782716, 0.0050091743, 0.026941575, -0.07452246, 0.0034587157, 0.055038147, 0.034951232, 0.00795944, 0.029427331, -0.057900533, -0.008066152, -0.01600676, 0.042308066, -0.048007727, -0.01536649, -0.015353936, -0.016245292, -0.06452922, 0.01591888, 0.024493482, 0.010664896, -0.027368423, 0.015793337, -0.011631579, -0.07035442, 0.06493095, 0.05513858, 0.039219704, -0.002772936, -0.005909947, 0.051422503, 0.017324964, -0.0014170691, -0.029000483, -0.028774505, 0.031009175, -0.014475133, 0.029577982, -0.052276198, -0.08310961, 0.047605988, -0.015642686, 0.002087156, -0.014424916, 0.032691453, 0.048057944, 0.0067102853, 0.016232738, 0.060712703, 0.00078464515, 0.0104640275, -0.033017866, -0.02027523, 0.03131048, -0.053431194, 0.01370932, -0.017186867, 0.04609947, 0.037537422, 0.0060103815, 0.0023602126, 0.06352487, -0.04946403, -0.013759537, 0.0019113955, 0.0078527285, 0.05066924, -0.044668276, -0.01768904, 8.5084954e-05, -0.026891358, -0.022509899, 0.018103333, 0.030682763, -0.0034461613, 0.0119831, -0.008210527, -0.04296089, -0.018869147, -0.036558185, -0.03665862, 0.033218738, -0.013031386, 0.083662, -0.018065669, -0.011876388, 0.0331183, 0.0044316757, -0.055439886, -0.009591502, 0.055038147, -0.068044424, -0.008857074, 0.009403187, 0.03201352, 0.005197489, 0.063625306, 0.03575471, -0.03999807, 0.04685273, 0.023715114, 0.017852247, 0.024782231, 0.028824722, 0.014023177, -0.01333269, 0.005178658, -0.02538484, -0.03161178, 0.017375182, 0.014035732, -0.059507485, 0.030883633, 0.05644423, 0.05202511, 0.010840657, 0.0011981531, 0.014060841, -0.024857558, 0.024619026, 0.0055270405, 0.026765814, -0.024945438, -0.051924676, 0.018053114, 0.031913087, -0.002573636, 0.07542637, -0.036784165, -0.010809272, 0.071308546, 0.013960406, -0.032666344, -0.052728154, 0.012171415, -0.046149686, -0.0032986482, 0.015266055, 0.08019701, -0.028422985, -0.03146113, -0.06171705, -0.053380977, 0.0351521, 0.012271849, 0.0049652345, 0.0028670933, -0.03716079, -0.04778175, 0.0027446887, -0.05870401, 0.030632546, -0.020237567, 0.013382907, -0.037738293, -0.09229937, 0.004670208, -0.0737692, 0.006208112, -0.024355385, -0.02257267, 0.0219324, -0.050066635, -0.040073395, 0.023275713, -0.01609464, -0.021015935, -0.01019411, 0.037763402, -0.016056977, 0.0015096572, 0.082858525, 0.04132883, 0.025887012, 0.0275944, -0.022283921, -0.00842395, -0.037085466, -0.02518397, 0.0020353694, 0.061014004, -0.057046838, 0.056193147, 0.06292226, -0.023401257, -0.024468374, -0.03703525, 0.025887012, -0.04574795, 0.034323517, -0.035503622, 0.018680831, -0.016483825, -0.053079672, -0.040023178, 0.0016916948, 0.047756642, 0.013546114, -0.022961855, 0.015052632, -0.03645775, -0.016308064, -0.021831965, -0.002021246, 0.024957992, -0.0014068687, 0.009001449, 0.032691453, 0.00078464515, -0.02370256, -0.001457086, 0.011531144, -0.003086794, -0.07788701, 0.022472236, 0.0540338, -0.06267118, 0.0053826654, 0.008668759, 0.016056977, 0.007720908, 0.010551908, -0.02009947, -0.032992758, 0.016245292, 0.026891358, -0.011838726, -0.02890005, -0.0012789716, 0.047857076, 0.027142445, 0.023489136, 0.020840174, 0.01036987, 0.028422985, 0.05162337, 0.01333269, 0.0035152102, 0.007953163, 0.0019804442, 0.0006598866, -0.0198986, 0.0014257001, 0.05724771, -0.010715114, 0.032691453, -0.063022695, 0.038441334, 0.011305167, -0.026816031, -0.0041774507, 0.044115886, 0.02666538, -0.012880734, -0.035076775, -0.068647034, -0.04670208, 0.008681314, -0.029201353, 0.026062772, 0.007457267, -0.0039985515, 0.003173105, -0.0054674074, -0.02834766, -0.027845487, -0.060411397, 0.03851666, -0.011468373, -0.015692903, -0.063324, -0.0184423, -0.054636408, -0.046902947, 0.058151618, -0.019270884, 0.02544761, -0.06076292, 0.032992758, -0.067542255, 0.010539353, 0.038014486, 0.047530662, -0.032440368, 0.017350072, 0.002670932, -0.0018078224, 0.034926124, 0.01554225, 0.025836794, -0.018718494, -0.015391598, -0.1379971, 0.013621439, 0.011706905, -0.03367069, -0.033419605, 0.0005661215, 0.060059875, -0.012968615, -0.0030726702, -0.04278513, -0.00020695015, 0.033218738, 0.008951232, 0.015404153, 0.03944568, 0.009673105, 0.042358283, -0.032691453, -0.030029938, 0.014224047, 0.047831967, -0.0073003382, 0.004362627, -0.020400774, -0.0016901256, -0.026740706, 0.011110575, 0.039872527, 0.012968615, -0.004017383, -0.00025755976, 0.02027523, 0.029427331, -0.043764368, -0.04871077, -0.03462482, -0.02507098, -0.043287303, -0.0135210045, -0.021480445, -0.029552873, 0.010445196, -0.063625306, -0.0014107919, 0.005931917, 6.8705485e-05, -0.008599711, 0.02538484, -0.028473202, -0.018166104, -0.028573636, -0.017324964, -0.012717528, 0.0012562169, -0.024832448, 0.0351521, -0.030055046, -0.05513858, -0.023288267, -0.003989136, -0.010890874, 0.026740706, -0.0021875906, -0.03216417, 0.024418157, 0.02343892, -0.03741188, 0.043538388, 0.044517625, 0.102845006, -0.0054674074, 0.0039169486, -0.030833414, 0.042910673, 0.030080155, 0.024543699, -0.032214392, 0.06297248, -0.05109609, 0.01859295, 0.011405601, 0.018166104, -0.023978755, -0.016308064, -0.061265092, -0.033068083, 0.013345244, 0.0036250604, 0.0073882183, 0.02741864, 0.060461614, 0.048760988, -0.01905746, -0.024443265, 0.07748528, 0.00084035494, 0.006628682, -0.02890005, 0.017977789, 0.030230807, -0.010206664, -0.027092228, -0.03404732, 0.07035442, -0.024154516, -0.040098503, 0.025372285, -0.027343314, -0.02910092, -0.010175278, -0.0069613717, -0.032817, 0.016709803, 0.007670691, -0.003330034, -0.037838727, -0.0371859, 0.0039169486, -0.016370837, 0.023828102, 0.016031869, -0.021455336, -0.008919845, 0.008367456, -0.007934332, 0.021380011, -0.0048145824, 0.023539353, -0.00685466, -0.019911155, 0.014111058, 0.006641236, 0.0029926365, -0.02350169, 0.0051598265, -0.02756929, 0.028448094, 0.029025592, -0.06377596, -0.013031386, 0.044316757, -0.030155482, 0.028197007, -0.036131337, -0.016220184, 0.058553357, -0.0020683245, 0.036256883, 0.023376148, 0.030029938, 0.0662366, -0.008317239, 0.011976823, 0.020664414, -0.008543216, 0.0010271005, -0.016345726, -0.0116504105, -0.049765334, -0.015768228, -0.037286337, -0.035980687, -0.0019506278, 0.019032352, -0.019860938, 0.0566451, -0.034700144, 0.010275712, 0.031586673, 0.022359248, -0.0017905602, 0.0051880735, -0.023526799, -0.01286818, 0.0368846, -0.01783969, 0.03628199, -0.018090777, -0.021769194, 0.036030903, -0.02405408, 0.04255915, -0.003703525, -0.0172873, 0.007896668, 0.040475134, -0.05292902, 0.0074196043, -0.03000483, -0.034649927, -0.0050311447, 0.03869242, -0.009553839, -0.027820377, -0.022321584, -0.024229841, 0.034022212, 0.04225785, 0.04160502, -0.031385805, -0.032691453, -0.021857075, -0.03349493, -0.016998552, -0.0032452922, 0.06985225, -0.025146307, -0.0071559637, -0.021970063, -0.055841625, -0.013370353, -0.024581362, -0.03575471, -0.002076171, 0.009126992, -0.030431677, -0.02094061, 0.016458716, -0.015680349, -0.04426654, -0.015994206, 0.0345746, 0.017789474, -0.0033520039, -0.017940126, -0.059557702, 0.035453405, 0.03723612, -0.003948334, -0.05019218, -0.02666538, 0.008574602, 0.02434283, 0.014286818, 0.006471753, -0.03999807, -0.013495896, -0.02608788, 0.0018784404, 0.022610335, 0.018002898, 0.057649445, -0.013194593, -0.020978272, -0.0052351523, 0.015065187, -0.048183486, 0.006873491, 0.028674072, -0.039219704, -0.027167553, -0.0342733, 0.026740706, -0.013006277, -0.01397296, 0.030833414, 0.062118784, 0.009955578, 0.017714148, 0.008505553, -0.022698214, -0.011832449, -0.0348508, -0.002021246, -0.013345244, 0.010338484, 0.015617576, -0.02593723, -0.015906326, -0.01841719, -0.018580396, -0.02869918, -0.009622888, 0.0024433848, 0.060310964, -0.0091018835, 0.014776437, -0.019672623, -0.011273781, 0.0048522456, 0.018078223, 0.012070981, 0.024292612, 0.022359248, 0.033821344, -0.002184452, 0.016458716, -0.014362144, -0.019710286, -0.0046199905, 0.020137133, -0.018643169, 0.02166876, 0.008731531, -0.001286818, -0.064127475, 0.03226461, 0.009472236, 0.009585225, 0.0485099, -0.041981652, -0.0042684693, 0.029025592, -0.0008521246, 0.018316755, -0.016270401, -0.028950267, -0.023815548, 0.0014774868, -0.0099493, -0.025761468, -0.019308547, 0.029778851, -0.01490198, -0.0009886528, 0.005737325, -0.034147754, -0.021480445, 0.013533559, 0.041228395, 0.017588604, 0.011637856, 0.040826656, -0.007821343, 0.04645099, -0.024970546, 0.010809272, -0.017751811, -0.008875906, -0.04243361, -0.031913087, 0.028774505, 0.0054736845, -0.033545148, -0.016132304, -0.0077397395, -0.0127300825, 0.036056012, 0.03781362, 0.016282955, -0.0010129769, 0.028523419, -0.008361178, 0.035478514, 0.023853213, -0.0022535007, 0.0023806132, 0.008562048, -0.004397151, -0.03352004, 0.006622405, -0.0010710406, 0.028799614, 0.04218252, -0.0044253985, -0.025133753, -0.03186287, -0.015215838, -0.020815065, -0.051824242, -0.008229358, 0.033394497, 0.001956905, 0.008411395, -0.047354903, 0.02390343, 0.025435057, -0.010991309, -0.024744568, -0.026062772, -0.010332207, -0.0052477065, 0.022296475, 0.018479962, 0.0070429747, 0.007940609, -0.008329793, -0.0008340778, 0.038416225, 0.01870594, 0.030758088, 0.008405118, -0.049639788, -0.017563496, -0.022472236, 0.033771127, -0.041579913, 0.048007727, 0.012209078, 0.019848382, 0.010771608, -0.038039595, 0.016056977, -0.0239662, -0.025422502, -0.083009176, -0.027619509, -0.086172864, -0.022208596, 0.0061233705, 0.015868664, 0.062319655, 0.02303718, -0.020488653, 0.050116852, -0.011549977, 0.051723808, -0.035804927, 0.03367069, -0.0059884116, -0.024116853, -0.014462579, 0.03367069, -0.02890005, -0.017475616, -0.0053826654, -0.040851764, 0.005919363, -0.015718011, -0.016496379, -0.021066152, 0.008637373, 0.010539353, 0.037135683, -0.033042975, -0.0142617095, -0.005103332, 0.0055019315, 0.0060260748, 0.009296475, 0.0001869417, -0.018140996, 0.008555771, 0.0032358766, 0.017186867, 0.0070743603, 0.00015379045, -0.027870595, -0.025347177, 0.0022064222, -0.003763158, -0.056795754, 0.0172873, -0.018818928, -0.014048287, 0.003276678, -0.0035528732, -0.04969001, 0.0001129889, 0.008731531, -0.0024418156, 0.033570256, -0.041831, 0.023539353, 0.029929504, -0.010150169, -0.0003834953, -0.035428297, 0.012453888, 0.015052632, 0.024845004, 0.015215838, -0.009246258, -0.034875907, -0.014136166, 0.008800579, -0.02259778, 0.000485303, -0.008009657, 0.08014679, -0.012322067, -0.03374602, 0.009936746, -0.07683245, -0.016596813, 0.008141478, 0.009698214, -0.02797103, -0.024229841, 0.01963496, -0.042132303, -0.004120956, -0.0048051667, 0.01304394, 0.004682762, 0.011104298, -0.0129560605, 0.05940705, 0.03535297, -0.017626269, -0.009378078, -0.015178176, 0.009503622, 0.014161275, 0.025485273, -0.016709803, -0.0021766056, 0.04539643, -0.03387156, 0.012792854, 0.005097055, 0.00075953646, 0.021367457, 0.01963496, 0.032892324, -0.0198986, -0.01235973, 0.0061704493, 0.054535974, -0.01952197, -0.02242202, -0.012001932, -0.0032358766, -0.024832448, 0.011625302, 0.016308064, -0.024882667, -0.0028372768, 0.0781381, -0.048309032, 0.024003863, 0.028598746, -0.018856592, -0.0045132786, 0.011989377, 0.019547079, 0.0018250846, -0.006314824, -0.0051943506, -0.0034430227, -0.0077460166, -0.01304394, -0.062118784, 0.020513762, 0.017827136, 0.009095606, -0.06553356, -0.0060888464, 0.03218928, 0.0058408985, 0.016044423, 0.019660069, -0.00694254, 0.053581845, 0.033821344, -0.029678417, -0.0139227435, 0.055088364, 0.0035811204, -0.003411637, 0.005379527, 0.009811203], [0.019293685, -0.022723926, -0.008473039, 0.03799477, 0.030746816, 0.004874704, -0.05574997, -0.0023290885, 0.017789392, -0.0015626972, -0.017732412, 0.04403473, 0.0041054636, -0.010900419, 0.033778194, 0.021721065, -0.061311293, 0.011436038, -0.013584212, -0.039658606, 0.0071966695, -0.062633246, -0.054519188, 0.037060283, 0.0018789405, 0.034644302, -0.020102812, 0.014723828, -0.016843513, -0.0007507215, 0.037584506, 0.004897496, 0.053972173, -0.021333596, 0.03949906, -0.022997433, 0.023065811, -0.0029829426, -0.045880906, 0.00089815917, -0.0068661813, 0.011738036, -0.007760779, -0.034028906, -0.046154413, 0.028809471, -0.04006887, -0.019077158, -0.011715244, -0.014461716, 0.036353722, -0.030906362, 0.03662723, -0.017014453, 0.006917464, -0.005490096, 0.0387925, -0.1290956, -0.013493043, 0.013527231, -0.046086036, -0.0019458928, -0.019156931, -0.02256438, 0.005435964, -0.021390576, 0.05985259, -0.019373458, 0.015441786, 0.04207459, -0.040547505, 0.013481647, -0.018404784, 0.025686925, 0.0014010144, -0.045379475, 0.079408385, 0.06409196, -0.04640513, -0.015430389, 0.011863394, -0.02819408, -0.02108288, -0.000752146, 0.025914848, -0.0017478847, 0.00015197837, -0.0882518, 0.014347754, -0.012501578, 0.0159888, 0.0075100637, 0.016273703, 0.044650123, -0.073391214, -0.010302121, 0.029356485, 0.0007806364, 0.0012849161, 0.0071111983, -0.0059658852, -0.0426444, -0.06509481, -0.033732608, 0.0112593975, 0.04088939, 0.039635815, -0.020604242, -0.009492994, 0.084468275, 0.013128366, 0.007948816, 0.02286068, -0.008700961, -0.04282674, 0.033162802, 0.009794992, -0.012444598, -0.028923431, 0.0033732608, -0.06363611, -0.020946126, 0.020216772, 0.019909076, 0.0008397539, 0.033823777, 0.010911815, 0.07653655, -0.010917513, 0.011692451, 0.004319141, 0.006490108, 0.055294126, 0.060992204, -0.00038960594, -0.009863369, 0.013390478, -0.0126041435, -0.0009743709, 0.01172664, -0.037880808, 0.0015327823, -0.037652884, 0.0034302415, -0.029926294, 0.014381943, 0.005646793, 0.003988653, -0.056661665, -0.035464823, -0.034689885, 0.006666749, 0.025869263, 0.049140204, 0.01711702, -0.008131154, 0.011612678, 0.043692846, -0.018438973, -0.016034385, 0.033094425, -0.101289, 0.0053390968, -0.001298449, 0.035966255, -0.02384075, 0.03266137, -0.00982918, -0.056160234, 0.03769847, -0.01385772, -0.035989046, -0.008085569, 0.019020177, -0.012661125, 0.009436013, -0.00048718546, 0.019624174, -0.030906362, -0.071659, -0.044080313, 0.09144272, 0.041846666, -0.061630387, 0.019783719, 0.024980364, -0.018678293, -0.012239466, 0.06782989, -0.019555796, -0.01282067, -0.043009076, -0.0005438101, -0.049003452, -0.008028588, -0.040843807, -0.028330833, -0.07840552, 0.033823777, -0.041778293, -0.016946077, -0.040251207, 0.008729452, 0.024182633, -0.09363078, 0.0054388135, 0.037744053, -0.034872223, -0.013470251, -0.01415402, 0.020410508, 0.00497442, 0.030245386, -0.021629896, 0.017869165, 0.0035641463, -0.06463897, 0.047863837, -0.023931919, -0.04850202, 0.05069008, -0.003250752, -0.018985989, 0.011920375, -0.0420518, 0.04713448, 0.0043105944, 0.014666847, -0.013504439, -0.05027982, 0.06778431, -0.025800887, -4.11775e-05, 0.02851317, -0.025208287, 0.03699191, -0.017242378, 0.048775528, 0.035464823, -0.018074296, 0.024319388, 0.05342516, -0.0814141, -0.047180068, 0.026484655, 0.07257069, 0.00894028, 0.040410753, -0.0066724466, 0.00075285824, 0.027692648, -0.015943216, -0.009390429, 0.0021681178, -0.01267252, 0.044376615, 0.012478786, -0.059214402, 0.013515836, 0.05306048, 0.0019800812, 0.07612629, -0.0464963, 0.04800059, -0.012444598, -0.04305466, 0.048729945, -0.051145926, -0.031909224, -0.0316813, 0.036741193, -0.021174049, -0.038564578, 0.018837838, 0.03872412, 0.004051332, 0.034302417, 0.03840503, -0.02564134, 0.08843414, 0.021162653, -0.007829156, -0.0020513074, 0.033208385, 0.041823875, -0.040456336, -0.0189518, -0.015646916, 0.007601233, 0.039704192, -0.019077158, -0.04968722, 0.048182927, 0.05214879, 0.01995466, 0.0034387887, 0.011908978, 0.0034986185, -0.05137385, -0.0014366274, -0.019134138, 0.032501824, 0.026507448, -0.05315165, 0.024091464, 0.01974953, 0.016683966, 0.06431988, 0.04070705, -0.021185445, 0.060399603, -0.026279526, -0.042302515, -0.068376906, -0.0031880734, -0.010980192, -0.013379082, 0.02780661, 0.053972173, -0.02143616, -0.035419237, -0.0074872714, -0.063544944, -0.022929057, 0.019339269, -0.019806512, -0.008621189, -0.015498766, -0.04503759, -0.017504489, -0.057938036, -0.00027226118, -0.011965959, -0.029333694, -0.045972075, -0.08879881, -0.013504439, -0.0405703, 0.0633626, -0.058348294, -0.0071795755, -0.019156931, 0.02384075, -0.043419335, -0.012285051, 0.016296497, -0.01741332, 0.004740799, 0.012706709, -0.031726886, 0.0013297885, 0.03690074, 0.023498865, -0.011487321, 0.03512294, 0.024228217, -0.04287232, -0.029082978, -0.01900878, 0.0077379867, 0.093174934, -0.07772175, 0.024798026, 0.020125603, -0.004287802, -0.052467883, -0.04227972, -0.0041766893, 0.023749579, 0.023977503, -0.013515836, -0.006997237, 0.017071435, -0.071795754, -0.0148036005, 0.005284965, 0.009857671, -0.0053106067, -0.027350763, 0.01335629, 0.0069744447, -0.021629896, -0.0008383294, 0.037493337, 0.0036353723, 0.002475814, -0.030951947, -0.009567069, 0.023498865, -0.02147035, 0.021401972, 0.02751031, -0.02969837, -0.023817956, -0.008547113, 0.037174247, 0.0007799241, -0.00041774017, -0.015168278, 0.005336248, 0.01409704, -0.011715244, -0.0037151454, -0.019111346, 0.010632609, -0.007720893, -0.0052935123, 0.029789539, 0.00787474, 0.06135688, -0.0058462257, -0.00015687515, 0.016000196, 0.035282485, 0.0105870245, 0.0084787365, 0.041801084, 0.020182583, -0.042484853, 0.031385, 0.026598617, -0.011453132, -0.010165367, 0.013698174, -0.03621697, 0.046678636, -0.017515885, 0.032456238, -0.00030075156, -0.04622279, -0.0275331, 0.027100049, 0.024684064, 0.025664132, -0.033162802, -0.101289, -0.04423986, -0.041527577, -0.0061026393, 0.009749408, -0.009316354, -0.016387666, -0.0015569992, 0.031111494, 0.00037892204, -0.012706709, -0.048319682, -0.00678071, 0.03840503, 0.005700925, -0.07471317, -0.036171384, -0.0035271088, -0.066052094, 0.07954514, 0.008672471, 0.009726616, -0.0393851, 0.015966007, -0.04909462, -0.021550123, 0.018974593, 0.044695705, -0.03215994, 0.03514573, -0.032319486, -0.020080019, 0.087659195, 0.038815293, 0.008495831, 0.01578367, 0.0031396397, -0.04713448, -0.008552812, 0.016125554, 0.010285026, -0.03778964, 0.0008554236, 0.015122693, -0.041094523, -0.029789539, -0.01465545, 0.009304957, 0.04394356, 0.0017165453, 0.033960532, 0.028946225, 0.0023048716, 0.037447754, -0.03334514, -0.00050997775, 0.057071928, 0.016854908, -0.017458905, 0.026233941, -0.07079289, -0.00390888, -0.019715343, 0.027897779, -0.020216772, 0.03195481, -0.008820621, 0.0012606992, 0.030177008, 0.03204598, 0.008421756, -0.041117314, -0.045766946, 0.008376171, -0.008039985, -0.005487247, 0.0030199802, -0.04364726, 0.033026047, -0.045949284, -0.000883914, 0.012797878, 0.014416131, 0.023099998, 0.01900878, -0.02245042, 0.00962405, -0.04936813, -0.024296595, -0.009698125, -0.011749432, 0.03304884, 0.04581253, -0.02801174, -0.042803943, -0.023772372, -0.020478884, -0.00044266926, 0.02067262, 0.022131326, -0.00059259986, 0.018678293, 0.0025926244, -0.022245288, 0.017891958, -0.03576112, 0.087659195, -0.0005893947, 0.037447754, -0.04932254, 0.051237095, -0.025618548, -0.015327823, -0.01930508, 0.03594346, -0.03662723, 0.06473014, -0.03304884, 0.055795558, -0.012740897, -0.030063048, -0.05315165, -0.0379036, 0.02928811, -0.020706806, 0.03218273, -0.012752294, 0.07927163, 0.048821114, -0.017983127, -0.075260185, 0.0017578563, -0.005498643, 0.015099901, 0.022302268, 0.03931672, 0.009498692, -0.017447507, -0.009407523, -0.015156881, 0.049823973, -0.03355027, -0.03491781, 0.015122693, -0.004880402, -0.0022265231, -0.004319141, 0.01086623, -0.041413613, 0.03352748, 0.0010491582, -0.011213813, -0.033413514, -0.0010990164, 0.036581647, 0.0014558583, 0.017208189, 0.057071928, 0.01678653, 0.0149859395, 0.0019316477, 0.0091511095, -0.008341983, -0.024798026, 0.018097088, 0.048091758, 0.027373556, -0.008393265, 0.026963294, -0.062222987, -0.013880513, 0.0319776, -0.043806806, -0.0022037309, 0.027396347, 0.0110143805, 0.0063305623, 0.010062802, -0.05620582, 0.011874789, -0.011738036, 0.027829401, 0.03560158, 0.013960285, 0.038427822, -0.0053533423, -0.00512257, 0.10612096, -0.017401922, -0.0013041471, -0.020125603, 0.0043875184, 0.029151356, -0.003014282, -0.0027963307, 0.030313762, -0.014324962, -0.003014282, -0.054017756, -0.006250789, 0.016364874, 0.070838474, 0.08948258, -0.026598617, 0.012592747, -0.003008584, 0.009635446, 0.021538727, 0.060946617, -0.029926294, -0.034393586, 0.040228415, -0.021299407, 0.041641537, -0.050325405, -0.01960138, 0.017891958, 0.023122791, 0.023703994, 0.0038689934, -0.02395471, 0.020353526, 0.032410655, -0.013493043, 0.027441932, -0.043510508, -0.043829598, 0.00040064595, 0.005322003, 0.009202392, 0.008968771, -0.024911987, -0.021892007, 0.0007571318, -0.0024530217, 0.08401243, -0.035419237, -0.022735322, 0.020136999, -0.070884064, -0.011851997, -0.025025949, 0.032934878, -0.015874838, -0.0028419152, -0.036558855, -0.03692353, -0.004435952, 0.0108605325, -0.033231176, 0.0035698444, -0.0307924, 0.0010883325, -0.017299358, -0.018393388, 0.012342032, -0.026735371, -0.028923431, 0.034393586, -0.0024088614, 0.023909125, 0.0057066227, -0.044764083, 0.0077778734, 0.027008878, -0.011407548, 0.003011433, -0.02949324, -0.00031855804, -0.007675308, 0.014860582, -0.010683892, 0.03783522, -0.023612825, -0.032592993, 0.020216772, -0.0033932042, 0.023772372, 0.034279622, 0.019168327, 0.009094128, -0.044764083, 0.0025570116, -0.013618401, 0.022587173, -0.025983226, -0.019909076, -0.023590034, -0.023931919, -0.041550368, -0.03653606, 0.0076240255, -0.015772274, 0.016239516, -0.0012307843, 0.0408666, -0.03334514, -0.002925962, 0.0074245925, -0.05274139, 0.021595707, -0.010507252, 0.0014544338, 0.012626936, 0.018176861, -0.02345328, -0.041915044, -0.021242427, -0.015555747, 0.004128256, -0.022336457, 0.037470546, 0.0029943387, -0.0108605325, -0.015316428, -0.013675381, 0.010854834, 0.057846863, -0.013720966, 0.006666749, 0.056752834, 0.01231924, 0.0004960887, 0.0070371237, -0.020740995, -0.005737962, 0.025709718, -0.017003058, -0.021276616, 0.008376171, 0.015646916, 0.0060570543, -0.053288404, 0.005857622, 0.0065356926, 0.0042222743, 0.0016438948, 0.004963024, -0.037744053, 0.0047949306, -0.022894869, 0.017538678, -0.018347804, -0.019270891, -0.049049035, 0.010906117, 0.009891859, -0.028239664, -0.018587124, 0.049231373, -0.0017165453, -0.020102812, -0.012592747, 0.019578587, -0.0044530462, 0.037630092, 0.014632658, 0.03644489, -0.0025798038, 0.025481794, -0.036194175, 0.024980364, 0.02034213, -0.004510027, -0.014621262, 0.027555894, -0.04139082, 0.0066724466, 0.009703823, 0.013823532, -0.06149363, -0.00737331, -0.032342277, -0.0310887, 0.04565298, 0.0068775774, 0.011772225, -0.0017991674, 0.019099949, -0.05871297, 0.054610357, 0.0420518, -0.00012891897, 0.01519107, 0.022199703, 0.02851317, -0.016091365, 0.0019259496, -0.045265514, 0.035100147, 0.05214879, -0.016752342, -0.0039573135, -0.015453181, -0.011390453, -0.043692846, -0.03699191, 0.011470227, 0.013846324, 2.2669883e-05, 0.037424963, -0.04503759, 0.0088833, 0.021151258, -0.0022763812, -0.012934632, -0.006233695, -0.0053704362, -0.0027635668, -0.024798026, 0.020946126, -0.018188257, -0.020501677, 0.0027607176, -0.0032649974, 0.09454247, 0.010644006, 0.029880708, 0.02067262, -0.00843885, -0.007760779, -0.037858017, 0.02543621, 0.027031671, 0.030313762, 0.0127864815, 0.010359102, 0.007441687, -0.023122791, 0.011065663, 0.011447434, -0.011139738, -0.05511179, -0.0071111983, -0.023316525, -0.015122693, 0.0069744447, 0.022154119, 0.06117454, 0.029766748, -0.030564478, 0.013515836, -0.04186946, -0.0030741119, -0.0028547358, -0.015521558, 0.028422002, -0.0307924, -0.0140400585, -0.014461716, 0.011561396, 0.044399407, -0.0077265906, -0.029151356, 0.0119317705, 0.011242303, -0.004518574, 0.01519107, 0.0013084207, 0.034598716, 0.0104331765, -0.018097088, -0.048912283, -0.02137918, 0.026051601, 0.00093021087, 0.017903354, 0.01430217, -0.006262185, 0.005042797, -0.004302047, -0.011287888, 0.029037394, -0.037675675, 0.033709817, -0.007133991, 0.011920375, 0.031795263, -0.0036638626, 0.046017658, -0.04009166, -0.011082757, 0.019829303, 0.003772126, -0.030837987, -0.023339318, 0.022518795, 0.0113505665, 0.050826836, -0.0078006657, 0.009812087, 0.021299407, 0.03106591, 0.032798123, -0.018758066, 0.01936206, 0.012797878, -0.011270794, 0.03503177, 0.010564232, -0.026461864, -0.029949086, 0.01261554, -0.031111494, -0.0010370498, 0.040365167, 0.058165956, 0.0127864815, -0.018484557, 0.026165564, -0.039932113, 0.002431654, 0.008666773, -0.016980266, -0.03940789, -0.017162604, 0.028786678, -0.009567069, -0.023316525, -0.019020177, -0.003974408, -0.013185347, 0.030815193, -0.011886186, 0.051784113, 0.010239442, -0.010621213, 0.013880513, -0.008501529, -0.012102713, 0.013663986, 0.0177666, 0.0006684555, -0.0053846817, 0.06650794, -0.050143067, -0.01613695, 0.017664034, -0.0026467561, 0.013891908, -0.004002898, 0.0310887, -0.021948988, -0.050963588, 0.01859852, 0.038541783, -0.055248544, -0.009777898, -0.019738134, -0.047863837, -0.044171482, 0.0033419214, 0.02321396, 0.012775086, 0.021208238, 0.032296695, -0.04490084, -0.00013363769, 0.03861016, -0.021812234, 0.013094178, 0.0358295, -0.0019501664, -0.005259324, -0.018416181, 0.016718155, -0.0073562157, -0.024752442, -0.0014359151, -0.048365265, 0.03778964, -0.003971559, 0.026963294, -0.014165416, 0.0010085594, 0.036011837, 0.01862131, -0.013071385, -0.00082479644, 0.033800986, 0.0056097554, 0.042348098, -0.008433152, 0.0033504686, 0.076855645, 0.021356387, 0.010239442, 0.022290872, -0.025914848], [0.0038394663, -0.0618825, -0.028415432, -0.00060009275, 0.033016026, 0.020048667, -0.048216026, -0.0018140209, 0.017342435, 0.018233236, -0.05241069, 0.022811279, 0.022270031, -0.015583384, 0.025077747, 0.046547186, -0.010351337, -0.015639763, -0.042871222, -0.05047122, -0.01553828, -0.054214843, -0.05011039, 0.03655668, -0.01447834, 0.022484275, -0.031099113, 0.014602375, -0.022743622, -0.028122257, 0.009347775, -0.0034081605, 0.045058757, -0.050381012, 0.03026469, -0.010441544, -0.03736855, 0.033895552, -0.067926414, 0.01221187, -0.041856382, -0.018797034, -0.020601189, -0.021954304, -7.4923504e-05, 0.004251039, -0.04681781, 0.025145402, -0.008327301, -0.039849263, 0.026881902, -0.01570742, 0.0030219587, -0.017680714, -0.007464689, 0.0154142445, 0.00989466, -0.11041425, 0.019879527, -0.02370208, -0.06111573, 0.008434422, -3.8584945e-05, -0.010920772, -0.022597035, -0.0115465885, -0.025573889, 0.034662317, 0.023905046, 0.035090804, -0.043728195, 0.0046513355, 0.00849644, 0.000101131314, -0.0018393919, -0.037413653, 0.09787538, 0.044337094, -0.033241548, -0.021875372, 0.011371811, -0.024852227, 0.019439764, -0.013767954, 0.017511575, 0.017195847, 0.03842849, -0.08186351, -0.022055788, -0.018379824, 0.013598815, -0.015132345, 0.024942435, 0.0181092, -0.06386707, -0.012087835, -0.005091098, 0.014061129, -0.037481308, 0.008874184, -0.010373889, -0.02733294, -0.052771516, -0.040706236, 0.013970921, -0.012369734, 0.05534244, 0.006145401, -0.0060100895, 0.17319883, 0.027084868, 0.026295552, -0.024468845, -0.0056971814, -0.014117508, 0.051328193, -0.030986352, -0.07541366, -0.03829318, 0.027829083, -0.10094244, -0.00586914, 0.03642137, 0.019868251, -0.024040358, -0.0070192884, -0.00586914, 0.0053109797, 0.002118472, -0.014320476, 0.013384571, 0.052230272, 0.059762616, 0.02733294, 0.043886058, -0.056785762, 0.027964395, 0.010154007, -0.0036618698, 0.00017090134, 0.0082540065, -0.016812464, -0.020105045, 0.014455788, -0.06440832, -0.0037267066, 0.018887242, 0.016530566, -0.042916324, -0.02956558, -0.03236202, 0.005014986, -0.006472404, 0.022348963, 0.051328193, -0.029994069, 0.02674659, 0.016011871, -0.023205936, 0.027581012, 0.013102672, -0.07654125, 0.0022988874, 0.018097924, 0.02031929, -0.0027710684, 0.027761426, 0.0031121664, -0.06016855, 0.04052582, 0.0052658757, 0.03306113, -0.026408311, 0.008654304, -0.03249733, 0.010605046, 0.021920476, 0.017940061, -0.04695312, -0.061972704, -0.045306828, 0.03642137, 0.035113357, -0.05092226, -0.006201781, 0.013046292, 0.00062053045, 0.017060535, 0.042871222, -0.030332347, -0.04449496, -0.03572226, -0.032023743, -0.04253294, -0.000972552, -0.041292585, -0.04449496, -0.069189325, 0.03164036, -0.0026329379, 0.0082765585, -0.053673595, -0.008518992, 0.02850564, -0.036173295, 0.0040283385, 0.024716916, -0.00544911, -0.008197627, -0.0132041555, 0.059040956, 0.0195638, 0.021469438, -0.014173889, -0.018492583, 0.0050178044, -0.053673595, 0.05701128, -0.051102675, -0.033827897, 0.08384808, -0.0036336798, 0.03996202, -0.0043750745, 0.010148369, 0.084208906, 0.009319586, 0.0063089025, 0.0142866485, -0.006579526, 0.021210091, 0.0010493696, -0.0019000001, 0.014579823, -0.06201781, 0.031933535, -0.049073, 0.03220416, 0.0712641, -0.017669437, 0.014602375, 0.028077153, -0.042036798, 0.0011691767, -0.0056774486, 0.060439173, -0.008964392, -0.030106828, -0.041067068, -0.014534719, 0.004002968, -0.03551929, 0.04181128, -0.0034560834, -0.0047612763, 0.04429199, -0.02990386, -0.06215312, -0.023544217, 0.015335313, -0.021818994, 0.0444273, -0.018075373, 0.03775193, -0.002507493, -0.016169734, 0.052185167, -0.028212465, -0.02115371, 0.0029937688, 0.04636677, -0.03211395, 0.05335787, 0.018571515, 0.007194066, -0.003898665, 0.120246895, 0.06093532, -0.034797627, 0.025844513, 0.034256384, 0.019710388, 0.025844513, 0.025055194, 0.039150152, -0.01308012, -0.006134125, -0.029475374, -0.045058757, 0.026678935, -0.011478933, -0.020883087, 0.05186944, 0.025145402, 0.026769143, 0.00031273186, 0.0027682495, 0.031121664, -0.044449855, 0.02347656, -0.056334723, -0.0053081606, -0.014410684, -0.043750744, -0.010356974, 0.065716326, -0.0010803784, 0.06995609, -0.0013425446, -0.026137687, 0.0408641, 0.022597035, 0.0032164692, -0.07275253, 0.018379824, -0.015718695, -0.014918102, -0.006573888, 0.058364395, -0.04357033, -0.014230268, -0.051734127, -0.059627306, -0.008304749, -0.0043637985, -0.0010965876, -0.008998221, -0.005649259, -0.064273, -0.008705045, -0.06711455, 0.008005936, -0.019687835, 0.014433236, -0.07424095, -0.07157983, -0.022348963, -0.04591573, 0.0093364995, -0.038969737, -0.04066113, 0.024220774, -0.015921663, -0.026611278, 0.011907419, -0.012764392, -0.021616025, 0.031256977, 0.01657567, -0.029046888, 0.0013136499, 0.08141247, 0.013046292, 0.04041306, 0.0090376865, -0.02873116, 0.00782552, -0.024491396, -0.006551336, -0.02498754, 0.066753715, -0.08808784, -0.006494956, 0.013632642, -0.010627598, -0.04740416, -0.022100892, -0.010937686, 0.020477153, 0.03141484, -0.04744926, 0.009601484, 0.0007872033, -0.0513733, -0.019473592, -0.009347775, 0.043953713, 0.0016336055, 0.013452226, 0.0087388735, 0.010018695, -0.01735371, 0.0037182495, 0.0022481456, 0.03303858, 0.009522553, -0.035564393, 0.032610092, 0.039668847, -0.024017805, -0.0017548221, -0.007487241, -0.0012882791, -0.041878935, 0.058454603, 0.06927953, -0.027490804, -0.06860297, -0.011749556, -0.023972703, 0.0069572707, 0.028528193, 0.009156084, -0.014004749, 0.039105047, 0.0444273, 0.0053391694, 0.0033856086, -0.0047387243, 0.048396442, 0.0054237396, 0.001140282, -0.0007449185, 0.038586352, -0.007616915, 0.037278343, 0.040503267, 0.024265878, -0.023273593, -0.00045280048, 0.018357271, -0.034752525, 0.010926411, 0.042239767, -0.04451751, 0.032655194, -0.035248667, 0.008096143, 0.008096143, -0.011072998, -0.02875371, 0.028189912, 0.0009429526, 0.0076281903, -0.0461638, -0.09552998, -0.073564395, -0.052185167, -0.042578045, 0.025844513, 0.06359644, -0.033512168, 0.019033829, 0.05804867, -0.030106828, -0.022281308, -0.06643799, 0.0055985167, 0.020984571, -0.03563205, -0.0362184, 0.010808012, -0.05597389, 0.00592552, 0.05290683, 0.017545402, -0.007802968, -0.027287835, 0.03362493, -0.07374481, 0.023408905, -0.041833833, 0.056470033, -0.025799409, 0.021345403, 0.03155015, 0.028189912, 0.011512761, 0.0074308612, -0.013046292, -0.038270626, -0.006861425, -0.08028487, -0.009392879, -0.00058952154, -0.032970924, -0.014106233, -0.017737094, 0.03236202, -0.045983385, -0.029633237, 0.0026808607, 0.025889616, 0.03892463, -0.003230564, 0.015493176, 0.003523739, -0.007943918, 0.050381012, 0.0056943623, -0.032722853, 0.035835017, 0.011670624, -0.013621367, 0.002007122, -0.058364395, -0.009556381, -0.0479003, 0.0077014845, 0.022472998, 0.047674783, -0.0067994073, 0.0005454748, 0.028550744, 0.017105639, -0.016338874, -0.0013467731, -0.048667066, 0.035181012, -0.036737096, 0.0128546, 0.0023862761, -0.024446294, -0.019800596, -0.04426944, -0.011462019, -0.02873116, 0.030084275, 0.020860536, 0.01623739, -0.00829911, -0.02956558, -0.064047486, -0.014185164, 0.0037577155, -0.014297924, 0.024694365, 0.000746328, -0.044224337, -0.046186354, -0.011490209, -0.0014686945, -0.04002968, 0.011422553, -0.005415282, -0.03635371, 0.03820297, 0.011986352, -0.022168547, 0.03060297, 0.003870475, 0.07807478, -0.0071771517, 0.004569585, -0.040458165, 0.029836204, 0.007171514, -0.004969882, -0.017308608, 0.03319644, -0.04343502, 0.002406009, 0.007205342, 0.029948965, 0.0002797849, -0.028122257, -0.01724095, -0.011828488, 0.021943029, -0.029182198, 0.031865876, 0.0036224038, 0.09706351, 0.021616025, -0.011794659, -0.047494367, 0.051328193, 0.015369141, -0.0069629084, 0.032542437, -0.0012466989, 0.011056084, 0.008721959, -0.010052523, -0.032632645, 0.061160836, -0.02920475, -0.022292584, 0.008688131, 0.0063201785, -0.019721663, 0.014297924, -0.0039832345, -0.03249733, 0.0037661723, 0.04496855, -0.0028725523, -0.010915134, -0.038699113, 0.017793473, -0.021920476, 0.036534127, -0.007763502, -0.026137687, -0.0019606084, -0.0027597926, -0.013711574, 0.0027160982, -0.004346885, 0.027874187, 0.01886469, -0.026430862, 0.020082494, 0.028122257, -0.051824335, -0.023905046, -0.0022213652, -0.039668847, 0.012595253, 0.030512761, 0.009945401, 0.026859349, 0.025528785, -0.018909793, 0.036398817, -0.028528193, 0.029520478, 0.03689496, 0.008767063, 0.029385166, 0.022867657, 0.043277156, 0.10572345, -0.049253415, 0.008389318, 0.0047302675, -0.0037182495, 0.017105639, -0.007103858, 0.0011071588, -0.03775193, 0.013519882, -0.0023045253, -0.038586352, -0.0036167658, 0.026318103, 0.024288429, 0.025799409, -0.020995848, 0.0096127605, 0.007831158, 0.0356546, -0.0002605805, 0.036173295, -0.032519884, -0.01103917, 0.06255905, -0.0047528194, 0.031099113, -0.025077747, -0.0274457, 0.019834423, 0.011394363, 0.042690806, -0.004840208, 0.011648072, 0.014579823, 0.008665579, -0.02347656, 0.045351934, -0.026408311, -0.033557273, -0.0066077155, 0.012561426, 0.0022594216, -0.02943027, -0.0356095, 0.0195638, 0.020522257, 0.031482495, 0.07915728, -0.019045105, -0.06747538, -0.024919884, -0.044314545, -0.026769143, -0.002601929, 0.042916324, -0.00913917, -0.0075887246, -0.028235016, -0.027242733, -0.009860831, 0.024040358, -0.03094125, 0.0031459944, -0.027874187, 0.012008903, -0.035248667, 0.0005119993, 0.0137341255, -0.052861724, -0.011535313, 0.0090602385, 0.052185167, 0.0015391692, -0.020544808, -0.064182796, 0.02954303, 0.04158576, -0.023747183, 0.0037238875, 0.011168844, -0.02674659, -0.012843325, 0.009607122, 0.0052658757, -0.020578636, -0.017139466, -0.03477508, 0.011106825, 0.008614837, -0.015583384, 0.024198221, 0.004589318, -0.0041326415, 0.003613947, 0.046096146, -0.070091404, 0.0239276, 0.0036224038, -0.0025342733, -0.021537093, -0.041495554, 0.028099706, -0.05466588, 0.02663383, -0.0060439175, 0.014884274, -0.00093731465, 0.011005342, -0.022461724, 0.02090564, -0.010469734, -0.042329974, -0.014737687, -0.019924631, 0.024356086, 0.07338398, 0.017060535, -0.018661723, -0.019191694, 0.014094956, -0.019608904, -0.010588132, 0.0011734051, 0.04115727, -0.010137093, 0.016756084, 0.0007780416, -0.00544911, -0.012944808, 0.037436206, 0.025979824, -0.017838577, 0.022687241, 0.012347182, -0.013655194, 0.0068670628, -0.027242733, -0.012978636, 0.019710388, -0.02956558, -0.024604157, 0.006494956, 0.032226708, -0.031730566, -0.06400238, -0.006833235, 0.01718457, -0.0014116099, 0.056154307, -0.026724039, -0.027783979, 0.0020635016, 0.002255193, 0.007425223, -0.025303267, -0.047584575, -0.0047612763, -0.0033320477, -0.009105342, -0.025145402, -0.008507716, 0.05944689, 0.02370208, -0.0154142445, -0.02137923, -0.016147183, 0.00064519665, 0.014602375, 0.041270033, 0.023296144, -0.01372285, 0.011727004, -0.02767122, 0.030309794, -0.035925224, -0.009624036, -0.00835549, -0.0037267066, -0.06052938, -0.011174481, 0.015673593, -0.014805342, -0.060664695, -0.027265284, -0.016395254, -0.037165582, 0.03540653, 0.013440951, 0.043615434, 0.018436203, 0.037278343, -0.015380417, 0.03538398, 0.030805938, 0.0008386499, 0.0054632053, 0.02109733, 0.013125224, -0.0034278934, 0.028325224, -0.03049021, 0.017252227, 0.015109793, -0.015617212, -0.031211872, -0.028392881, -0.015944215, -0.034887835, -0.046682496, -0.005880416, 0.034729972, 0.025370922, 0.004623146, -0.0595822, 0.02003739, 0.0362184, -0.0023961426, 0.0037971814, -0.0112703275, -0.007487241, -0.0011494437, -0.03470742, 0.012922256, -0.0014799704, 0.001114911, 0.0030529676, -0.009500001, 0.05453057, 0.008992583, 0.043908607, -0.0056182495, -0.020116322, -0.02722018, -0.014726411, 0.014670031, -0.031324632, 0.0207365, 0.03887953, 0.058589917, 0.0041410984, 0.011884867, 0.009184274, -0.02828012, -0.009736796, -0.056605347, -0.018481307, -0.057732943, -0.010543028, 0.010712167, 0.040458165, 0.06287478, 0.005863502, -0.030512761, 0.016959053, -0.008265283, -0.0020888725, -0.01565104, 0.03892463, 0.0036590507, -0.020183979, -0.013159052, -0.011715728, -0.032068845, 0.027062317, 0.0040903566, -0.025258163, -0.004513205, 0.0067655793, 0.007921366, -0.020533534, 0.025325818, 0.029475374, 0.024513949, -0.027490804, -0.051914543, -0.004532938, 0.034211278, 0.0049839765, -0.0007392805, -0.0063370927, -0.028077153, 0.004448368, -0.013700298, 0.0044004456, 0.013711574, 0.025573889, -0.0046738875, -0.021830268, -0.029069439, 0.014027301, -0.017364986, 0.03899229, -0.02370208, -0.012809496, -0.018143028, 0.016632048, -0.03141484, 0.007594363, 0.031775672, 0.010999704, 0.04566766, -0.0119638, 0.004279229, 0.02546113, 0.031279527, 0.023386352, -0.045690212, 0.0033940657, 0.008045401, 0.022924038, 0.012008903, -0.0007026336, -0.034955494, 0.00041403936, -0.0056351637, -0.041788727, -0.014500892, 0.010142731, 0.06494956, -0.015357865, -0.037797038, 0.03887953, -0.039082497, -0.0021086056, -0.0013996292, 0.022540655, -0.007425223, 0.0002604043, 0.031617805, -0.010497924, -0.0050375373, -0.022800002, 0.021627301, 0.006151039, 0.011388725, -0.029700892, 0.034549557, 0.0040198816, -0.006726113, 0.006466766, -0.006816321, 0.013553711, 0.002601929, 0.039759055, 2.4710222e-05, -0.01366647, 0.008180713, -0.02464926, -0.030174483, -0.0128546, -0.017489022, 0.0077240365, 0.030445106, 0.057552528, -0.022484275, -0.022484275, 0.020871812, 0.03283561, -0.015064689, -0.00779733, -0.0067317514, -0.029001784, -0.024310982, -0.00327003, 0.06553591, -0.0066528195, 0.004169288, 0.05290683, -0.039172705, -0.0012481085, 0.04169852, -0.0009281529, -0.008665579, -0.0018901337, -0.003602671, 0.0060100895, 0.01232463, -0.0057676565, -0.016925223, -0.012527597, 0.021886649, -0.03317389, 0.057552528, 0.010582494, 0.028843919, -0.02548368, -0.0064216624, 0.021401782, -0.033241548, -0.01366647, 0.017545402, 0.021458162, 0.032023743, 0.026791694, -0.03574481, -0.013418399, 0.06900891, 0.035541844, 0.0033433237, 0.0005038947, -0.011918696]], 'embedding_model': 'text-embedding-3-large', 'embedding_dimensions': 1024}]\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'video_json': {'message': 'Created', 'success': True, 'response': {'id': '496b9b8b-2933-43a9-8d72-3e23419ec88a', 'message': 'Render Successfully Queued'}}}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'video_json': {'message': 'Created', 'success': True, 'response': {'id': '496b9b8b-2933-43a9-8d72-3e23419ec88a', 'message': 'Render Successfully Queued'}}}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'json': {'message': 'Created', 'success': True, 'response': {'id': '496b9b8b-2933-43a9-8d72-3e23419ec88a', 'message': 'Render Successfully Queued'}}, 'content': 'eyJzdWNjZXNzIjp0cnVlLCJtZXNzYWdlIjoiQ3JlYXRlZCIsInJlc3BvbnNlIjp7Im1lc3NhZ2UiOiJSZW5kZXIgU3VjY2Vzc2Z1bGx5IFF1ZXVlZCIsImlkIjoiNDk2YjliOGItMjkzMy00M2E5LThkNzItM2UyMzQxOWVjODhhIn19', 'headers': {'date': 'Wed, 19 Feb 2025 07:31:27 GMT', 'connection': 'keep-alive', 'content-type': 'application/json', 'content-length': '132', 'x-amz-apigw-id': 'GOJQVH-DywMFywA=', 'x-amzn-trace-id': 'Root=1-67b588ce-7e42432509a0114d0092d7ab;Parent=1f89f567e69b79bb;Sampled=0;Lineage=2:3e7cb6b7:0', 'x-frame-options': 'DENY', 'x-amzn-requestid': '4eb96678-62dc-44ce-9c97-fdbe204da505', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-security-policy': \"default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'\", 'strict-transport-security': 'max-age=63072000; includeSubdomains; preload', 'access-control-allow-origin': '*'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'message': 'Created', 'success': True, 'response': {'id': '496b9b8b-2933-43a9-8d72-3e23419ec88a', 'message': 'Render Successfully Queued'}}, 'content': 'eyJzdWNjZXNzIjp0cnVlLCJtZXNzYWdlIjoiQ3JlYXRlZCIsInJlc3BvbnNlIjp7Im1lc3NhZ2UiOiJSZW5kZXIgU3VjY2Vzc2Z1bGx5IFF1ZXVlZCIsImlkIjoiNDk2YjliOGItMjkzMy00M2E5LThkNzItM2UyMzQxOWVjODhhIn19', 'headers': {'date': 'Wed, 19 Feb 2025 07:31:27 GMT', 'connection': 'keep-alive', 'content-type': 'application/json', 'content-length': '132', 'x-amz-apigw-id': 'GOJQVH-DywMFywA=', 'x-amzn-trace-id': 'Root=1-67b588ce-7e42432509a0114d0092d7ab;Parent=1f89f567e69b79bb;Sampled=0;Lineage=2:3e7cb6b7:0', 'x-frame-options': 'DENY', 'x-amzn-requestid': '4eb96678-62dc-44ce-9c97-fdbe204da505', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'content-security-policy': \"default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'\", 'strict-transport-security': 'max-age=63072000; includeSubdomains; preload', 'access-control-allow-origin': '*'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'clips': [{'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 0, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'OVERWHELMED?', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 0, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'type': 'image'}, 'scale': 1.1, 'start': 0, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 5, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'Chaos → Clean', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 5, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'type': 'image'}, 'scale': 1.1, 'start': 5, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'type': 'audio', 'volume': 1}, 'start': 10, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'JULEP AI', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 10, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'type': 'image'}, 'scale': 1.1, 'start': 10, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 15, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'PARALLEL POWER', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 15, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'type': 'image'}, 'scale': 1.1, 'start': 15, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'type': 'audio', 'volume': 1}, 'start': 20, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'SIMPLIFY', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 20, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'type': 'image'}, 'scale': 1.1, 'start': 20, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}, {'clips': [{'asset': {'src': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'type': 'audio', 'volume': 1}, 'start': 25, 'length': 5, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'asset': {'font': {'size': 40, 'color': '#000000', 'family': 'Open Sans', 'weight': '600', 'lineHeight': 1.5}, 'text': 'GET STARTED FREE', 'type': 'text', 'stroke': {'color': '#FFFFFF', 'width': 5}, 'alignment': {'vertical': 'center', 'horizontal': 'center'}}, 'start': 25, 'length': 5, 'opacity': 1, 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}, {'fit': 'cover', 'asset': {'src': 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png', 'type': 'image'}, 'scale': 1.1, 'start': 25, 'effect': 'zoomIn', 'length': 5, 'position': 'center', 'transition': {'in': 'fadeFast', 'out': 'fadeFast'}}]}]}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'scenes': [{'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}, {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}, {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}, {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}, {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}, {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}], 'effects': ['zoomIn', 'slideUp', 'slideLeft', 'zoomOut', 'slideDown', 'slideRight', 'zoomIn'], 'image_urls': ['https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png'], 'transcibe_urls': ['https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav']}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'scenes': [{'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}, {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}, {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}, {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}, {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}, {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}], 'effects': ['zoomIn', 'slideUp', 'slideLeft', 'zoomOut', 'slideDown', 'slideRight', 'zoomIn'], 'image_urls': ['https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png'], 'transcibe_urls': ['https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav']}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: [{'json': {'id': 'p3j4th5k05rge0cn3me9z7248w', 'logs': \"Processing text (104 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w', 'cancel': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-zeg44xofub43mvyq42zpadqku3bnyzpettcao7q6rtgcjhstm43q'}, 'error': None, 'input': {'text': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.277487694}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.977Z', 'started_at': '2025-02-19T07:29:35.549295386Z', 'completed_at': '2025-02-19T07:29:35.826783092Z', 'data_removed': False}, 'content': 'eyJpZCI6InAzajR0aDVrMDVyZ2UwY24zbWU5ejcyNDh3IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJFdmVyIG5vdGljZSBob3cgbW9zdCBkZXZlbG9wZXIgdG9vbHMgZmVlbCBvdmVyd2hlbG1pbmc/IExpa2Ugc3RhcmluZyBpbnRvIGFuIGVuZGxlc3Mgd2FsbCBvZiBjb21wbGV4aXR5PyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiUHJvY2Vzc2luZyB0ZXh0ICgxMDQgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTc3WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjU0OTI5NTM4NloiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjgyNjc4MzA5MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDNqNHRoNWswNXJnZTBjbjNtZTl6NzI0OHcvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9wM2o0dGg1azA1cmdlMGNuM21lOXo3MjQ4dyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS16ZWc0NHhvZnViNDNtdnlxNDJ6cGFkcWt1M2JueXpwZXR0Y2FvN3E2cnRnY2poc3RtNDNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjI3NzQ4NzY5NH19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e904e8b9e16-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=HOfGHmTUsDejkmo6ORNG0yB95C5%2Bwy9j%2Bun4sOczMgESuVQlQIuEd8Ok93YHcWKDOetr5XeuyiDQNLyB3RU0NPBWd7lAwPsyvzj3vSLcYg28sbl%2FnmFBdC6MZXh2cDPpqRZc\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19879&min_rtt=18235&rtt_var=8012&sent=6&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=233616&cwnd=222&unsent_bytes=0&cid=9403d8e32624d0be&ts=82&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}, {'json': {'id': 'jrbjq45jydrge0cn3meb92hfa0', 'logs': \"Processing text (104 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0', 'cancel': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-iutge4yfw7elxy3e3e5wld37qfykvyyl3qp7f4723m2ldqn2t2sq'}, 'error': None, 'input': {'text': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.29094579}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.963Z', 'started_at': '2025-02-19T07:29:35.937546287Z', 'completed_at': '2025-02-19T07:29:36.228492082Z', 'data_removed': False}, 'content': 'eyJpZCI6ImpyYmpxNDVqeWRyZ2UwY24zbWViOTJoZmEwIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJXaGF0IGlmIHRoZXJlIHdhcyBhIHdheSB0byB0dXJuIGNoYW9zIGludG8gY2xlYW4sIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3dzIHdpdGgganVzdCBhIGZldyBsaW5lcyBvZiBjb2RlPyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiUHJvY2Vzc2luZyB0ZXh0ICgxMDQgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTYzWiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjkzNzU0NjI4N1oiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM2LjIyODQ5MjA4MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvanJianE0NWp5ZHJnZTBjbjNtZWI5MmhmYTAvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9qcmJqcTQ1anlkcmdlMGNuM21lYjkyaGZhMCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1pdXRnZTR5Znc3ZWx4eTNlM2U1d2xkMzdxZnlrdnl5bDNxcDdmNDcyM20ybGRxbjJ0MnNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjI5MDk0NTc5fX0K', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e902ff58c2d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=JiGqazmAMVfYwGSriLMGo5hIggc1DukHaLDuMkjvxvjX7u4WeRFxrrtu5ink0337r9QYn2%2FbB%2FJrYYeLiSSGXsY5Lx4Tz%2BlN9g4LiiwDoVPOUzsfu8gMWvK665RujJ1YZF%2BK\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24185&min_rtt=17385&rtt_var=11377&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2846&recv_bytes=915&delivery_rate=245038&cwnd=233&unsent_bytes=0&cid=f5b8f21d1e3db52f&ts=77&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}, {'json': {'id': '9ske1fxk1xrga0cn3mea3jxysc', 'logs': \"Processing text (112 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc', 'cancel': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-om4wdb4revlvj6ppb4sktnketuflqfcq7ob66an6ssxyx64ofuda'}, 'error': None, 'input': {'text': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.279724822}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.991Z', 'started_at': '2025-02-19T07:29:35.178150561Z', 'completed_at': '2025-02-19T07:29:35.45787528Z', 'data_removed': False}, 'content': 'eyJpZCI6Ijlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJNZWV0IEp1bGVwIC0gdGhlIHNlcnZlcmxlc3MgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgdGVhbXMgYnVpbGQgc29waGlzdGljYXRlZCBBSSB3b3JrZmxvd3Mgd2l0aG91dCB0aGUgaGVhZGFjaGUuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiJQcm9jZXNzaW5nIHRleHQgKDExMiBjaGFycykgd2l0aCB2b2ljZT0nYW1fYWRhbScgYXQgc3BlZWQ9MS4wXG4iLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsL2VCTkc2d1lpVEpYZ1lhQmR2TGtlZ0FjTzJHVkI1ZWV3enJ1dW1WZzhuZVllWDZNRUYvb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJzdWNjZWVkZWQiLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozNC45OTFaIiwic3RhcnRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzUuMTc4MTUwNTYxWiIsImNvbXBsZXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzUuNDU3ODc1MjhaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvOXNrZTFmeGsxeHJnYTBjbjNtZWEzanh5c2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtb200d2RiNHJldmx2ajZwcGI0c2t0bmtldHVmbHFmY3E3b2I2NmFuNnNzeHl4NjRvZnVkYSJ9LCJtZXRyaWNzIjp7InByZWRpY3RfdGltZSI6MC4yNzk3MjQ4MjJ9fQo=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e919a42429d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=MDUgVDOvC8VBVAik9HqSZ7C82PuU4%2F6wNda4llOwKgdL85EKHid51Jq%2F5ubwr%2F9jbdlgdts6tmb0cfRZdJcmNIPrXVXoAMoyYUaKIG4Lw6%2FhHtGgh8rQuCv7DPq4IOeTIISt\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14654&min_rtt=10913&rtt_var=6765&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2846&recv_bytes=915&delivery_rate=390360&cwnd=223&unsent_bytes=0&cid=27cb5dad02740e90&ts=80&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}, {'json': {'id': 'p6p9dtp07srg80cn3mebqc1m3c', 'logs': \"Processing text (108 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c', 'cancel': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-fnhel4s53zwzxhlb3sdduenfvavbyllptqetjplges3bdxe4bg7q'}, 'error': None, 'input': {'text': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.255895864}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.366Z', 'started_at': '2025-02-19T07:29:39.090400955Z', 'completed_at': '2025-02-19T07:29:39.346296842Z', 'data_removed': False}, 'content': 'eyJpZCI6InA2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSdW4gY29tcGxleCBBSSBvcGVyYXRpb25zIGluIHBhcmFsbGVsLCBtYW5hZ2Ugc3RhdGUgZWZmb3J0bGVzc2x5LCBhbmQgc2NhbGUgd2l0aG91dCB0b3VjaGluZyBpbmZyYXN0cnVjdHVyZS4iLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IlByb2Nlc3NpbmcgdGV4dCAoMTA4IGNoYXJzKSB3aXRoIHZvaWNlPSdhbV9hZGFtJyBhdCBzcGVlZD0xLjBcbiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvRXhvZ1gwNTcyT0lyQjVEY1VqOWpzd2xkZzM4Q2dMTkFYdEpld3Ewa2dON3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InN1Y2NlZWRlZCIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjM2NloiLCJzdGFydGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOS4wOTA0MDA5NTVaIiwiY29tcGxldGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOS4zNDYyOTY4NDJaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3A2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDZwOWR0cDA3c3JnODBjbjNtZWJxYzFtM2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZm5oZWw0czUzend6eGhsYjNzZGR1ZW5mdmF2YnlsbHB0cWV0anBsZ2VzM2JkeGU0Ymc3cSJ9LCJtZXRyaWNzIjp7InByZWRpY3RfdGltZSI6MC4yNTU4OTU4NjR9fQo=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9bbd517c94-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=eUiChgIfmTdT9tSryoct1bBBcQu5Uxy%2Fz93R%2BOp9%2Fiya4JHbV%2Be71DeLym%2BTFINKLgDa5Uzso21v9r2pvlik19ppdNvCUTYK0BzoHLFRoobYPKyDw%2Fb00tjA9rmiw%2F2GP8rf\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23450&min_rtt=11817&rtt_var=12579&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=360497&cwnd=208&unsent_bytes=0&cid=6595f53b13fcf209&ts=78&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}, {'json': {'id': 'dbrfpky0asrgc0cn3me845v9m4', 'logs': \"Processing text (76 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4', 'cancel': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-esvpykfjlan67hrgevu4nkphqamohtzv27vqav6mzr764yi3wrcq'}, 'error': None, 'input': {'text': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.204431002}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.39Z', 'started_at': '2025-02-19T07:29:38.794787955Z', 'completed_at': '2025-02-19T07:29:38.999218946Z', 'data_removed': False}, 'content': 'eyJpZCI6ImRicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJUdXJuIDgwIGxpbmVzIG9mIGNvbXBsZXggY29kZSBpbnRvIHNpbXBsZSwgbWFuYWdlZCB3b3JrZmxvd3MgdGhhdCBqdXN0IHdvcmsuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiJQcm9jZXNzaW5nIHRleHQgKDc2IGNoYXJzKSB3aXRoIHZvaWNlPSdhbV9hZGFtJyBhdCBzcGVlZD0xLjBcbiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvMzdMbno2Y0NxSXBSSGRYNEZtNWVWSkp5Vko0dUsyaDgyZ0E5QmpBWHd1S3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InN1Y2NlZWRlZCIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjM5WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4Ljc5NDc4Nzk1NVoiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4Ljk5OTIxODk0NloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvZGJyZnBreTBhc3JnYzBjbjNtZTg0NXY5bTQvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9kYnJmcGt5MGFzcmdjMGNuM21lODQ1djltNCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1lc3ZweWtmamxhbjY3aHJnZXZ1NG5rcGhxYW1vaHR6djI3dnFhdjZtenI3NjR5aTN3cmNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjIwNDQzMTAwMn19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9b8f660f37-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=U9njiSYOtw1sD9eDsu4wXs7jLyANYUU2Yx721Zy2yson7lXeVLxMFh67e914BR%2FDHT3StcZ%2BtZJlTRxSMMUuIaW%2Btdwl3Wh2Cz3ZWZcd5L5S5xQDZbAOHNuC0nY8E%2BzSyE4%2F\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15216&min_rtt=14922&rtt_var=6184&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=246570&cwnd=241&unsent_bytes=0&cid=6101acffcd3bbee2&ts=99&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}, {'json': {'id': '4kmaj95zw9rga0cn3meb3t0g8c', 'logs': \"Processing text (75 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c', 'cancel': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-msepfbrkiezjnf653jra36uuyljlt2l4yscx4eqp26xaqmovjgka'}, 'error': None, 'input': {'text': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.204034998}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.274Z', 'started_at': '2025-02-19T07:29:38.287623329Z', 'completed_at': '2025-02-19T07:29:38.491658342Z', 'data_removed': False}, 'content': 'eyJpZCI6IjRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSZWFkeSB0byB0cmFuc2Zvcm0geW91ciBBSSB3b3JrZmxvd3M/IEdldCB5b3VyIGZyZWUgQVBJIGtleSBub3cgYXQgSnVsZXAuYWkiLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IlByb2Nlc3NpbmcgdGV4dCAoNzUgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9Lc3hqeVFaRnZCNzFGaGczZUdvZTBYclRPUkkyVlVnZmY1d2ZHNDhJazhVVk1kR2lDL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzguMjc0WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjI4NzYyMzMyOVoiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjQ5MTY1ODM0MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvNGttYWo5NXp3OXJnYTBjbjNtZWIzdDBnOGMvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy80a21hajk1enc5cmdhMGNuM21lYjN0MGc4YyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1tc2VwZmJya2llempuZjY1M2pyYTM2dXV5bGpsdDJsNHlzY3g0ZXFwMjZ4YXFtb3ZqZ2thIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjIwNDAzNDk5OH19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9b2edc43b5-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=SoWCGH8kyHLpM%2FbMIIQCV3F2DJB9kdYUR9JxCDmPCqa72AcT48pJmZpN2Um2U9%2B1bwpPJwXE9WP3xL6ELx9vkSzNP1OL9iWMO7drAmdgrIM4PJPC%2BgbHt5CSFt35Js2S1cPY\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24262&min_rtt=17298&rtt_var=11461&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=246271&cwnd=228&unsent_bytes=0&cid=656d4e9ef8489077&ts=79&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}]\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'p6p9dtp07srg80cn3mebqc1m3c', 'logs': \"Processing text (108 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c', 'cancel': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-fnhel4s53zwzxhlb3sdduenfvavbyllptqetjplges3bdxe4bg7q'}, 'error': None, 'input': {'text': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.255895864}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.366Z', 'started_at': '2025-02-19T07:29:39.090400955Z', 'completed_at': '2025-02-19T07:29:39.346296842Z', 'data_removed': False}, 'content': 'eyJpZCI6InA2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSdW4gY29tcGxleCBBSSBvcGVyYXRpb25zIGluIHBhcmFsbGVsLCBtYW5hZ2Ugc3RhdGUgZWZmb3J0bGVzc2x5LCBhbmQgc2NhbGUgd2l0aG91dCB0b3VjaGluZyBpbmZyYXN0cnVjdHVyZS4iLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IlByb2Nlc3NpbmcgdGV4dCAoMTA4IGNoYXJzKSB3aXRoIHZvaWNlPSdhbV9hZGFtJyBhdCBzcGVlZD0xLjBcbiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvRXhvZ1gwNTcyT0lyQjVEY1VqOWpzd2xkZzM4Q2dMTkFYdEpld3Ewa2dON3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InN1Y2NlZWRlZCIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjM2NloiLCJzdGFydGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOS4wOTA0MDA5NTVaIiwiY29tcGxldGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOS4zNDYyOTY4NDJaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3A2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDZwOWR0cDA3c3JnODBjbjNtZWJxYzFtM2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZm5oZWw0czUzend6eGhsYjNzZGR1ZW5mdmF2YnlsbHB0cWV0anBsZ2VzM2JkeGU0Ymc3cSJ9LCJtZXRyaWNzIjp7InByZWRpY3RfdGltZSI6MC4yNTU4OTU4NjR9fQo=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9bbd517c94-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=eUiChgIfmTdT9tSryoct1bBBcQu5Uxy%2Fz93R%2BOp9%2Fiya4JHbV%2Be71DeLym%2BTFINKLgDa5Uzso21v9r2pvlik19ppdNvCUTYK0BzoHLFRoobYPKyDw%2Fb00tjA9rmiw%2F2GP8rf\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23450&min_rtt=11817&rtt_var=12579&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=360497&cwnd=208&unsent_bytes=0&cid=6595f53b13fcf209&ts=78&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'dbrfpky0asrgc0cn3me845v9m4', 'logs': \"Processing text (76 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4', 'cancel': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-esvpykfjlan67hrgevu4nkphqamohtzv27vqav6mzr764yi3wrcq'}, 'error': None, 'input': {'text': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.204431002}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.39Z', 'started_at': '2025-02-19T07:29:38.794787955Z', 'completed_at': '2025-02-19T07:29:38.999218946Z', 'data_removed': False}, 'content': 'eyJpZCI6ImRicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJUdXJuIDgwIGxpbmVzIG9mIGNvbXBsZXggY29kZSBpbnRvIHNpbXBsZSwgbWFuYWdlZCB3b3JrZmxvd3MgdGhhdCBqdXN0IHdvcmsuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiJQcm9jZXNzaW5nIHRleHQgKDc2IGNoYXJzKSB3aXRoIHZvaWNlPSdhbV9hZGFtJyBhdCBzcGVlZD0xLjBcbiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvMzdMbno2Y0NxSXBSSGRYNEZtNWVWSkp5Vko0dUsyaDgyZ0E5QmpBWHd1S3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InN1Y2NlZWRlZCIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjM5WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4Ljc5NDc4Nzk1NVoiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4Ljk5OTIxODk0NloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvZGJyZnBreTBhc3JnYzBjbjNtZTg0NXY5bTQvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9kYnJmcGt5MGFzcmdjMGNuM21lODQ1djltNCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1lc3ZweWtmamxhbjY3aHJnZXZ1NG5rcGhxYW1vaHR6djI3dnFhdjZtenI3NjR5aTN3cmNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjIwNDQzMTAwMn19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9b8f660f37-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=U9njiSYOtw1sD9eDsu4wXs7jLyANYUU2Yx721Zy2yson7lXeVLxMFh67e914BR%2FDHT3StcZ%2BtZJlTRxSMMUuIaW%2Btdwl3Wh2Cz3ZWZcd5L5S5xQDZbAOHNuC0nY8E%2BzSyE4%2F\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15216&min_rtt=14922&rtt_var=6184&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=246570&cwnd=241&unsent_bytes=0&cid=6101acffcd3bbee2&ts=99&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': '4kmaj95zw9rga0cn3meb3t0g8c', 'logs': \"Processing text (75 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c', 'cancel': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-msepfbrkiezjnf653jra36uuyljlt2l4yscx4eqp26xaqmovjgka'}, 'error': None, 'input': {'text': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.204034998}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.274Z', 'started_at': '2025-02-19T07:29:38.287623329Z', 'completed_at': '2025-02-19T07:29:38.491658342Z', 'data_removed': False}, 'content': 'eyJpZCI6IjRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSZWFkeSB0byB0cmFuc2Zvcm0geW91ciBBSSB3b3JrZmxvd3M/IEdldCB5b3VyIGZyZWUgQVBJIGtleSBub3cgYXQgSnVsZXAuYWkiLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IlByb2Nlc3NpbmcgdGV4dCAoNzUgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9Lc3hqeVFaRnZCNzFGaGczZUdvZTBYclRPUkkyVlVnZmY1d2ZHNDhJazhVVk1kR2lDL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzguMjc0WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjI4NzYyMzMyOVoiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM4LjQ5MTY1ODM0MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvNGttYWo5NXp3OXJnYTBjbjNtZWIzdDBnOGMvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy80a21hajk1enc5cmdhMGNuM21lYjN0MGc4YyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1tc2VwZmJya2llempuZjY1M2pyYTM2dXV5bGpsdDJsNHlzY3g0ZXFwMjZ4YXFtb3ZqZ2thIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjIwNDAzNDk5OH19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:24 GMT', 'cf-ray': '91448e9b2edc43b5-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=SoWCGH8kyHLpM%2FbMIIQCV3F2DJB9kdYUR9JxCDmPCqa72AcT48pJmZpN2Um2U9%2B1bwpPJwXE9WP3xL6ELx9vkSzNP1OL9iWMO7drAmdgrIM4PJPC%2BgbHt5CSFt35Js2S1cPY\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24262&min_rtt=17298&rtt_var=11461&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=246271&cwnd=228&unsent_bytes=0&cid=656d4e9ef8489077&ts=79&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': 'p6p9dtp07srg80cn3mebqc1m3c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c', 'cancel': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-fnhel4s53zwzxhlb3sdduenfvavbyllptqetjplges3bdxe4bg7q'}, 'error': None, 'input': {'text': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.366Z', 'data_removed': False}, 'content': 'eyJpZCI6InA2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSdW4gY29tcGxleCBBSSBvcGVyYXRpb25zIGluIHBhcmFsbGVsLCBtYW5hZ2Ugc3RhdGUgZWZmb3J0bGVzc2x5LCBhbmQgc2NhbGUgd2l0aG91dCB0b3VjaGluZyBpbmZyYXN0cnVjdHVyZS4iLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvRXhvZ1gwNTcyT0lyQjVEY1VqOWpzd2xkZzM4Q2dMTkFYdEpld3Ewa2dON3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4zNjZaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3A2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDZwOWR0cDA3c3JnODBjbjNtZWJxYzFtM2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZm5oZWw0czUzend6eGhsYjNzZGR1ZW5mdmF2YnlsbHB0cWV0anBsZ2VzM2JkeGU0Ymc3cSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c064c3d438b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=ImxzppCZaXQaTNdrcvEucHeaK7rXAVx1n%2F3pSUG0CuNzAPfU87C9N%2B%2BHVfSoTYacU7dhKoLsrdhRdgCz0XZkfpouITenj6rbS6Rq1%2FWtESRM89DpZP50efs3tynWo6zPTCZd\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14774&min_rtt=12601&rtt_var=6278&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1174&delivery_rate=338068&cwnd=221&unsent_bytes=0&cid=528c506b7e629a3b&ts=1160&x=0\"', 'content-length': '784', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': 'dbrfpky0asrgc0cn3me845v9m4', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4', 'cancel': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-esvpykfjlan67hrgevu4nkphqamohtzv27vqav6mzr764yi3wrcq'}, 'error': None, 'input': {'text': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.39Z', 'data_removed': False}, 'content': 'eyJpZCI6ImRicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJUdXJuIDgwIGxpbmVzIG9mIGNvbXBsZXggY29kZSBpbnRvIHNpbXBsZSwgbWFuYWdlZCB3b3JrZmxvd3MgdGhhdCBqdXN0IHdvcmsuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsLzM3TG56NmNDcUlwUkhkWDRGbTVlVkpKeVZKNHVLMmg4MmdBOUJqQVh3dUt4MFpJS0Evb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzguMzlaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2RicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00L2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvZGJyZnBreTBhc3JnYzBjbjNtZTg0NXY5bTQiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZXN2cHlrZmpsYW42N2hyZ2V2dTRua3BocWFtb2h0enYyN3ZxYXY2bXpyNzY0eWkzd3JjcSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c067ee042dd-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=uo4oAZ61z%2FvgF3l75mzMmu1GpDbwd2K2fzAH4IHUGBhAXxt0FSIC5hqvpt6BRPdmfutVw1Pr42RtJ6EV0QTCBglY%2FAlf1Q5uD9z9pvOTHQsQk983Krx7rncZJ36TGX5pS5XU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15380&min_rtt=15041&rtt_var=6319&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1142&delivery_rate=239918&cwnd=240&unsent_bytes=0&cid=d848bb2f791a7cd8&ts=792&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': '4kmaj95zw9rga0cn3meb3t0g8c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c', 'cancel': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-msepfbrkiezjnf653jra36uuyljlt2l4yscx4eqp26xaqmovjgka'}, 'error': None, 'input': {'text': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.274Z', 'data_removed': False}, 'content': 'eyJpZCI6IjRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSZWFkeSB0byB0cmFuc2Zvcm0geW91ciBBSSB3b3JrZmxvd3M/IEdldCB5b3VyIGZyZWUgQVBJIGtleSBub3cgYXQgSnVsZXAuYWkiLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvS3N4anlRWkZ2QjcxRmhnM2VHb2UwWHJUT1JJMlZVZ2ZmNXdmRzQ4SWs4VVZNZEdpQy9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4yNzRaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvNGttYWo5NXp3OXJnYTBjbjNtZWIzdDBnOGMiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtbXNlcGZicmtpZXpqbmY2NTNqcmEzNnV1eWxqbHQybDR5c2N4NGVxcDI2eGFxbW92amdrYSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:38 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c05dc76185d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=eJJ%2BwVCYu8MK9Df9Xn%2FIjKSgS1TwjFLkbtgDRxIGKvQ%2BBm1E5RH4T4vZuKpaDkUJp3g1PRLvu%2FFWqE04N2FkXDpcB0PwY6c1ai56TWEPVZ7NgRV8tFBD67qBOhAaBCQIVvL2\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14830&min_rtt=12188&rtt_var=6458&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1141&delivery_rate=349524&cwnd=215&unsent_bytes=0&cid=050ea72bf0124479&ts=428&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': '9ske1fxk1xrga0cn3mea3jxysc', 'logs': \"Processing text (112 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc', 'cancel': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-om4wdb4revlvj6ppb4sktnketuflqfcq7ob66an6ssxyx64ofuda'}, 'error': None, 'input': {'text': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.279724822}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.991Z', 'started_at': '2025-02-19T07:29:35.178150561Z', 'completed_at': '2025-02-19T07:29:35.45787528Z', 'data_removed': False}, 'content': 'eyJpZCI6Ijlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJNZWV0IEp1bGVwIC0gdGhlIHNlcnZlcmxlc3MgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgdGVhbXMgYnVpbGQgc29waGlzdGljYXRlZCBBSSB3b3JrZmxvd3Mgd2l0aG91dCB0aGUgaGVhZGFjaGUuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiJQcm9jZXNzaW5nIHRleHQgKDExMiBjaGFycykgd2l0aCB2b2ljZT0nYW1fYWRhbScgYXQgc3BlZWQ9MS4wXG4iLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsL2VCTkc2d1lpVEpYZ1lhQmR2TGtlZ0FjTzJHVkI1ZWV3enJ1dW1WZzhuZVllWDZNRUYvb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJzdWNjZWVkZWQiLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozNC45OTFaIiwic3RhcnRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzUuMTc4MTUwNTYxWiIsImNvbXBsZXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzUuNDU3ODc1MjhaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvOXNrZTFmeGsxeHJnYTBjbjNtZWEzanh5c2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtb200d2RiNHJldmx2ajZwcGI0c2t0bmtldHVmbHFmY3E3b2I2NmFuNnNzeHl4NjRvZnVkYSJ9LCJtZXRyaWNzIjp7InByZWRpY3RfdGltZSI6MC4yNzk3MjQ4MjJ9fQo=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e919a42429d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=MDUgVDOvC8VBVAik9HqSZ7C82PuU4%2F6wNda4llOwKgdL85EKHid51Jq%2F5ubwr%2F9jbdlgdts6tmb0cfRZdJcmNIPrXVXoAMoyYUaKIG4Lw6%2FhHtGgh8rQuCv7DPq4IOeTIISt\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14654&min_rtt=10913&rtt_var=6765&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2846&recv_bytes=915&delivery_rate=390360&cwnd=223&unsent_bytes=0&cid=27cb5dad02740e90&ts=80&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'p3j4th5k05rge0cn3me9z7248w', 'logs': \"Processing text (104 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w', 'cancel': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-zeg44xofub43mvyq42zpadqku3bnyzpettcao7q6rtgcjhstm43q'}, 'error': None, 'input': {'text': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.277487694}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.977Z', 'started_at': '2025-02-19T07:29:35.549295386Z', 'completed_at': '2025-02-19T07:29:35.826783092Z', 'data_removed': False}, 'content': 'eyJpZCI6InAzajR0aDVrMDVyZ2UwY24zbWU5ejcyNDh3IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJFdmVyIG5vdGljZSBob3cgbW9zdCBkZXZlbG9wZXIgdG9vbHMgZmVlbCBvdmVyd2hlbG1pbmc/IExpa2Ugc3RhcmluZyBpbnRvIGFuIGVuZGxlc3Mgd2FsbCBvZiBjb21wbGV4aXR5PyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiUHJvY2Vzc2luZyB0ZXh0ICgxMDQgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTc3WiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjU0OTI5NTM4NloiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjgyNjc4MzA5MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDNqNHRoNWswNXJnZTBjbjNtZTl6NzI0OHcvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9wM2o0dGg1azA1cmdlMGNuM21lOXo3MjQ4dyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS16ZWc0NHhvZnViNDNtdnlxNDJ6cGFkcWt1M2JueXpwZXR0Y2FvN3E2cnRnY2poc3RtNDNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjI3NzQ4NzY5NH19Cg==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e904e8b9e16-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=HOfGHmTUsDejkmo6ORNG0yB95C5%2Bwy9j%2Bun4sOczMgESuVQlQIuEd8Ok93YHcWKDOetr5XeuyiDQNLyB3RU0NPBWd7lAwPsyvzj3vSLcYg28sbl%2FnmFBdC6MZXh2cDPpqRZc\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19879&min_rtt=18235&rtt_var=8012&sent=6&recv=6&lost=0&retrans=0&sent_bytes=2847&recv_bytes=915&delivery_rate=233616&cwnd=222&unsent_bytes=0&cid=9403d8e32624d0be&ts=82&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'jrbjq45jydrge0cn3meb92hfa0', 'logs': \"Processing text (104 chars) with voice='am_adam' at speed=1.0\\n\", 'urls': {'get': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0', 'cancel': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-iutge4yfw7elxy3e3e5wld37qfykvyyl3qp7f4723m2ldqn2t2sq'}, 'error': None, 'input': {'text': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'status': 'succeeded', 'metrics': {'predict_time': 0.29094579}, 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.963Z', 'started_at': '2025-02-19T07:29:35.937546287Z', 'completed_at': '2025-02-19T07:29:36.228492082Z', 'data_removed': False}, 'content': 'eyJpZCI6ImpyYmpxNDVqeWRyZ2UwY24zbWViOTJoZmEwIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJXaGF0IGlmIHRoZXJlIHdhcyBhIHdheSB0byB0dXJuIGNoYW9zIGludG8gY2xlYW4sIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3dzIHdpdGgganVzdCBhIGZldyBsaW5lcyBvZiBjb2RlPyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiUHJvY2Vzc2luZyB0ZXh0ICgxMDQgY2hhcnMpIHdpdGggdm9pY2U9J2FtX2FkYW0nIGF0IHNwZWVkPTEuMFxuIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoic3VjY2VlZGVkIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTYzWiIsInN0YXJ0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM1LjkzNzU0NjI4N1oiLCJjb21wbGV0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM2LjIyODQ5MjA4MloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvanJianE0NWp5ZHJnZTBjbjNtZWI5MmhmYTAvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9qcmJqcTQ1anlkcmdlMGNuM21lYjkyaGZhMCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1pdXRnZTR5Znc3ZWx4eTNlM2U1d2xkMzdxZnlrdnl5bDNxcDdmNDcyM20ybGRxbjJ0MnNxIn0sIm1ldHJpY3MiOnsicHJlZGljdF90aW1lIjowLjI5MDk0NTc5fX0K', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:31:22 GMT', 'cf-ray': '91448e902ff58c2d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=JiGqazmAMVfYwGSriLMGo5hIggc1DukHaLDuMkjvxvjX7u4WeRFxrrtu5ink0337r9QYn2%2FbB%2FJrYYeLiSSGXsY5Lx4Tz%2BlN9g4LiiwDoVPOUzsfu8gMWvK665RujJ1YZF%2BK\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=utf-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24185&min_rtt=17385&rtt_var=11377&sent=5&recv=5&lost=0&retrans=0&sent_bytes=2846&recv_bytes=915&delivery_rate=245038&cwnd=233&unsent_bytes=0&cid=f5b8f21d1e3db52f&ts=77&x=0\"', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'content-encoding': 'gzip', 'x-xss-protection': '1; mode=block', 'transfer-encoding': 'chunked', 'ratelimit-remaining': '59999', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 200}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': 'jrbjq45jydrge0cn3meb92hfa0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0', 'cancel': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-iutge4yfw7elxy3e3e5wld37qfykvyyl3qp7f4723m2ldqn2t2sq'}, 'error': None, 'input': {'text': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.963Z', 'data_removed': False}, 'content': 'eyJpZCI6ImpyYmpxNDVqeWRyZ2UwY24zbWViOTJoZmEwIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJXaGF0IGlmIHRoZXJlIHdhcyBhIHdheSB0byB0dXJuIGNoYW9zIGludG8gY2xlYW4sIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3dzIHdpdGgganVzdCBhIGZldyBsaW5lcyBvZiBjb2RlPyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk2M1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvanJianE0NWp5ZHJnZTBjbjNtZWI5MmhmYTAvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9qcmJqcTQ1anlkcmdlMGNuM21lYjkyaGZhMCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1pdXRnZTR5Znc3ZWx4eTNlM2U1d2xkMzdxZnlrdnl5bDNxcDdmNDcyM20ybGRxbjJ0MnNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:36 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12eff43f8-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=2eVeP1K3U%2Fpvts03nqojTfZGFpLhKc%2Bj3l0P53qoqhnb%2BB7vlePKjy4yCAsYwNzRBsybAjnpqbLqn4PURdKviT5ZtJjQA7yuLKA5qVg%2Bg1PnXJUCAJTK5ogKZzqSEHtcu80b\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23270&min_rtt=11741&rtt_var=12480&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1170&delivery_rate=362831&cwnd=252&unsent_bytes=0&cid=124f2552fea51988&ts=1420&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': 'p3j4th5k05rge0cn3me9z7248w', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w', 'cancel': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-zeg44xofub43mvyq42zpadqku3bnyzpettcao7q6rtgcjhstm43q'}, 'error': None, 'input': {'text': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.977Z', 'data_removed': False}, 'content': 'eyJpZCI6InAzajR0aDVrMDVyZ2UwY24zbWU5ejcyNDh3IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJFdmVyIG5vdGljZSBob3cgbW9zdCBkZXZlbG9wZXIgdG9vbHMgZmVlbCBvdmVyd2hlbG1pbmc/IExpa2Ugc3RhcmluZyBpbnRvIGFuIGVuZGxlc3Mgd2FsbCBvZiBjb21wbGV4aXR5PyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk3N1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDNqNHRoNWswNXJnZTBjbjNtZTl6NzI0OHcvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9wM2o0dGg1azA1cmdlMGNuM21lOXo3MjQ4dyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS16ZWc0NHhvZnViNDNtdnlxNDJ6cGFkcWt1M2JueXpwZXR0Y2FvN3E2cnRnY2poc3RtNDNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12b34de9a-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=tGa167Xr9aPHilZJom%2Bf4XY9eFQjLJSqYTj0wdDXQjxs8m7ac23Ba26Fwe5enuhYgmHwYR1Jzr7zFAqwehckJMG%2BsC74f%2BpGvOnq4LMZhvF6rxsDgg2J7b%2FCClr4OR0EAWXU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19158&min_rtt=13222&rtt_var=9199&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1170&delivery_rate=322190&cwnd=252&unsent_bytes=0&cid=fb5dfb364ca5fc47&ts=1037&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'json': {'id': '9ske1fxk1xrga0cn3mea3jxysc', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc', 'cancel': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-om4wdb4revlvj6ppb4sktnketuflqfcq7ob66an6ssxyx64ofuda'}, 'error': None, 'input': {'text': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.991Z', 'data_removed': False}, 'content': 'eyJpZCI6Ijlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJNZWV0IEp1bGVwIC0gdGhlIHNlcnZlcmxlc3MgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgdGVhbXMgYnVpbGQgc29waGlzdGljYXRlZCBBSSB3b3JrZmxvd3Mgd2l0aG91dCB0aGUgaGVhZGFjaGUuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsL2VCTkc2d1lpVEpYZ1lhQmR2TGtlZ0FjTzJHVkI1ZWV3enJ1dW1WZzhuZVllWDZNRUYvb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTkxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy85c2tlMWZ4azF4cmdhMGNuM21lYTNqeHlzYy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9mZGRxLW9tNHdkYjRyZXZsdmo2cHBiNHNrdG5rZXR1ZmxxZmNxN29iNjZhbjZzc3h5eDY0b2Z1ZGEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf10c227cb2-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=LaqZycAgnM5AC8wv86tHydOx0pW%2FZPYlTTvLk1%2Fldw86OGkOznQKFZA9M0GFuk279O0gg3l08qurKE%2BsH2dbmuiUJwzjbMjZ%2BwWSlh1eg55BflWAIvfa9eGtBTqaDYqJTFDu\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24041&min_rtt=16959&rtt_var=11418&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1178&delivery_rate=251194&cwnd=235&unsent_bytes=0&cid=7b268fc36822a515&ts=679&x=0\"', 'content-length': '788', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: [{'json': {'id': 'r1zndspe8nrma0cn3meayyyqgm', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm', 'cancel': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-i4w5bei7zifalstpbve5fjtx7y4mf3tqywo6lqplbsknig2acwaa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.957Z', 'data_removed': False}, 'content': 'eyJpZCI6InIxem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgaG9tZSBvZmZpY2Ugc2V0dGluZyB3aXRoIGdsb3dpbmcgbGFwdG9wIHNjcmVlbiBzaG93aW5nIGNhc2NhZGluZyBjb2RlLCBsaXQgcHJpbWFyaWx5IGJ5IHNjcmVlbiBnbG93LCBkZWVwIHNoYWRvd3MgaW4gYmFja2dyb3VuZCIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9YQVVLekhrTVE2cTRCdFdvR1RlcHFqZzk0MkFiOHBLUkcxcXVrMVNHbVVYMDBaSUtBL3RtcHc0YzhiYWJrLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuOTU3WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9yMXpuZHNwZThucm1hMGNuM21lYXl5eXFnbS9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3Ixem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWk0dzViZWk3emlmYWxzdHBidmU1Zmp0eDd5NG1mM3RxeXdvNmxxcGxic2tuaWcyYWN3YWEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1cb9158c1b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=39nioeEBM%2F%2F7MnuSi6Dy2iICP43pwVD2l4nLa3BXGvxRcDdgCT7nFiXHo1JZ%2ByQkA5LgYRYbjmSpWtNU1ZQU4Sr1sGgqYEMpftM9TIJEnwRJB%2BpFxNB3227YqCBEueVMO3DR\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19261&min_rtt=13086&rtt_var=9318&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1255&delivery_rate=325538&cwnd=247&unsent_bytes=0&cid=55dd7ace85c7ebbd&ts=2654&x=0\"', 'content-length': '887', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'vf6586ye5nrme0cn3mebsakt78', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78', 'cancel': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-n7egorfjrzt3ctonrv24fteuhwzsfnzzrbvd6hblwkop4iggyepa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.933Z', 'data_removed': False}, 'content': 'eyJpZCI6InZmNjU4NnllNW5ybWUwY24zbWVic2FrdDc4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNwbGl0IHNjcmVlbjogTGVmdCBzaWRlIHNob3dpbmcgdGFuZ2xlZCBtZXNzIG9mIHdvcmtmbG93IGRpYWdyYW1zIGluIGRhcmsgZ3JheXMsIHJpZ2h0IHNpZGUgc2hvd2luZyBlbGVnYW50IG1pbmltYWwgZmxvdyBjaGFydCB3aXRoIGRlZXAgYmx1ZSBhY2NlbnQgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvWGhSd2ZjenFZTldySVNHVHhmY2IxdTJNaG1weGxlZGMzZVg3Sjc1aGFvYmhtT0RSQi90bXByXzh2NjVsMi5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQxLjkzM1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvdmY2NTg2eWU1bnJtZTBjbjNtZWJzYWt0NzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy92ZjY1ODZ5ZTVucm1lMGNuM21lYnNha3Q3OCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1uN2Vnb3JmanJ6dDNjdG9ucnYyNGZ0ZXVod3pzZm56enJidmQ2aGJsd2tvcDRpZ2d5ZXBhIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1caeb20f4b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=lcjPYPcgIwR3sKJekV1fshQn5AFwgvhjnSatSlwcUmeDFhE7JlVKW1Zg88bQpmZ8CiclTsuNaRsFxZBeXA2SA92IwI2DdatQf3LLSG%2Bl5dvI63Yj2ZoDIeFY6dNsynn1a8dy\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15352&min_rtt=15053&rtt_var=6243&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1280&delivery_rate=244196&cwnd=229&unsent_bytes=0&cid=bfe7b255c61f89ca&ts=2706&x=0\"', 'content-length': '912', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'fj35g2ye05rma0cn3meab0vt1g', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g', 'cancel': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-e2jffiorqgbwwcolxa4tvp6rcvzfcxyovu6gtwan7t2sg3jsnq7q'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.889Z', 'data_removed': False}, 'content': 'eyJpZCI6ImZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNsZWVrIGRhcmsgbW9kZSBpbnRlcmZhY2Ugd2l0aCBnbG93aW5nIHRlYWwgYWNjZW50cywgc2hvd2luZyBjbGVhbiBjb2RlIGVkaXRvciBhbmQgd29ya2Zsb3cgdmlzdWFsaXphdGlvbiIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9uc0g2Z2Z0UnBiVFdlRUk5ZzJqeks4M2ZXQ2JKWk9sanBCZUt4d2UyQWdCSE5kR2lDL3RtcGd6M3hxOXl2LnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuODg5WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9majM1ZzJ5ZTA1cm1hMGNuM21lYWIwdnQxZy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2ZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWUyamZmaW9ycWdid3djb2x4YTR0dnA2cmN2emZjeHlvdnU2Z3R3YW43dDJzZzNqc25xN3EifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1c6b634295-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=VT5kA9GO11PX33qpdlv9PEXbMkHcfe5JTuac1WOesRvyIJ93uJY%2Br0cjGcs8L%2FBC9L1lEwp%2FlpRNmR858Dvm75QYf9pHS6bYDFMoIRNWjbItxkW7j8fm2SaRJcY9UeO2VtxZ\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23351&min_rtt=12083&rtt_var=12492&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1228&delivery_rate=352561&cwnd=237&unsent_bytes=0&cid=b7440990455a525e&ts=2706&x=0\"', 'content-length': '860', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'xxrz9qq085rme0cn3mebqeq5c0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0', 'cancel': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-kpshekoqmpsqtk5sbtx5z2wwqix3eo55houy7s7pffysmsesvthq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.561Z', 'data_removed': False}, 'content': 'eyJpZCI6Inh4cno5cXEwODVybWUwY24zbWVicWVxNWMwIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6Ik11bHRpcGxlIGRhcmsgcGFuZWxzIHNob3dpbmcgc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyB3aXRoIHB1cnBsZS9ibHVlIGRhdGEgZmxvdyBhbmltYXRpb25zIiwicHJvbXB0X3Vwc2FtcGxpbmciOmZhbHNlLCJzYWZldHlfdG9sZXJhbmNlIjoyLCJ3aWR0aCI6MTI4MH0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS94ZXpxLzFJbjhDN2pNakFMekVkUUFwNVNBREVVTEVsbFA3bmxpSTE1Y2VHR2NSNmV0cHpRVUEvdG1wX3htOXBxdXYucG5nIiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTo0Ni41NjFaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3h4cno5cXEwODVybWUwY24zbWVicWVxNWMwL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMveHhyejlxcTA4NXJtZTBjbjNtZWJxZXE1YzAiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2Jjd3Ita3BzaGVrb3FtcHNxdGs1c2J0eDV6Mnd3cWl4M2VvNTVob3V5N3M3cGZmeXNtc2VzdnRocSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c3988938c3b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=gq2a8vgk37HSJVm4rkGNOBwxCq8%2FLAL0bWNns4fPhPUfkT6rztevGyu6pOEFOGaf%2Bb6gXIPmyKWtaI9Y%2FL%2BPG0ijomBaxvXLEPHEYLwvmolGSXZBaYVlFy0rvvdcCmyF%2FP2a\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23890&min_rtt=13502&rtt_var=12483&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1212&delivery_rate=315508&cwnd=223&unsent_bytes=0&cid=0a188aa122578980&ts=2672&x=0\"', 'content-length': '844', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'y8zg31z0anrme0cn3mea6t5hzw', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw', 'cancel': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-ie4zzaezkovakvuyyyynld2fsfrobaeijgjkzyguvxpu7p7tetnq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.581Z', 'data_removed': False}, 'content': 'eyJpZCI6Ink4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgY29kZSBlZGl0b3Igc2hvd2luZyBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvbiwgd2l0aCBzdWJ0bGUgc3ludGF4IGhpZ2hsaWdodGluZyBpbiBkZWVwIHB1cnBsZSIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9OWGhUMW5ETTdPcXRNQmtER041UVhpWnhCRUNTZHNSUnRvYVZlWjFLM3NpMjBaSUtBL3RtcGc2bnZjYm9pLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDYuNTgxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy95OHpnMzF6MGFucm1lMGNuM21lYTZ0NWh6dy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3k4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3Iiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWllNHp6YWV6a292YWt2dXl5eXlubGQyZnNmcm9iYWVpamdqa3p5Z3V2eHB1N3A3dGV0bnEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c39ac997cb4-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=w8sDZ85NfEuzInwv5siDESMHZrCnrKa3IsRIKzN%2FLvcHiutEdqmy0UlBkRXDhdfJJKhi6z7p2qTXvs1zfgaEhWNb1NDNEbIX0lseNtWE0qsUNQVKOWGvsqthN1rEwnjM64UB\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19595&min_rtt=15900&rtt_var=8602&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1219&delivery_rate=267924&cwnd=252&unsent_bytes=0&cid=d08c0ef09ddab2b1&ts=2640&x=0\"', 'content-length': '851', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': '8gnqt4704hrm80cn3me8xs9e38', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38', 'cancel': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-qanck2osuagokv3crxwwkcd7p7foebmbqwfrtac2oba6az7xgvja'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.532Z', 'data_removed': False}, 'content': 'eyJpZCI6IjhnbnF0NDcwNGhybTgwY24zbWU4eHM5ZTM4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgZ3JhZGllbnQgYmFja2dyb3VuZCB3aXRoIGZsb2F0aW5nIDNEIGVsZW1lbnRzIHNob3dpbmcgQVBJIGtleSBhbmQgbG9nbyBpbiBkZWVwIGJsdWUgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvbG9kSVFXMW5mWDA4TWFTQkQwd3ZmbllNNWVNYU5IVDd5cWFEVkI2UzRzZGFUbmhvQS90bXBpczF4a2J0My5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQ2LjUzMloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvOGducXQ0NzA0aHJtODBjbjNtZTh4czllMzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy84Z25xdDQ3MDRocm04MGNuM21lOHhzOWUzOCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1xYW5jazJvc3VhZ29rdjNjcnh3d2tjZDdwN2ZvZWJtYnF3ZnJ0YWMyb2JhNmF6N3hndmphIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c397a724233-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=pqvwTzpzU%2ByhQxpEh%2FM3DtLFVVf6ynf8LOltdiOlh8TEUMpG44ZxQdpKn0NdQQDjJDKMoWo6JvhI5VH3tRtCKgdtNwQZ5hc8eqJlJuc5nA7P4vkMN1pnB%2FSEsB%2BNeEZpOxcm\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24377&min_rtt=17079&rtt_var=11617&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1220&delivery_rate=249429&cwnd=231&unsent_bytes=0&cid=c32208a984256c06&ts=2956&x=0\"', 'content-length': '852', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}]\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: [{'json': {'id': 'r1zndspe8nrma0cn3meayyyqgm', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm', 'cancel': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-i4w5bei7zifalstpbve5fjtx7y4mf3tqywo6lqplbsknig2acwaa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.957Z', 'data_removed': False}, 'content': 'eyJpZCI6InIxem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgaG9tZSBvZmZpY2Ugc2V0dGluZyB3aXRoIGdsb3dpbmcgbGFwdG9wIHNjcmVlbiBzaG93aW5nIGNhc2NhZGluZyBjb2RlLCBsaXQgcHJpbWFyaWx5IGJ5IHNjcmVlbiBnbG93LCBkZWVwIHNoYWRvd3MgaW4gYmFja2dyb3VuZCIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9YQVVLekhrTVE2cTRCdFdvR1RlcHFqZzk0MkFiOHBLUkcxcXVrMVNHbVVYMDBaSUtBL3RtcHc0YzhiYWJrLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuOTU3WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9yMXpuZHNwZThucm1hMGNuM21lYXl5eXFnbS9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3Ixem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWk0dzViZWk3emlmYWxzdHBidmU1Zmp0eDd5NG1mM3RxeXdvNmxxcGxic2tuaWcyYWN3YWEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1cb9158c1b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=39nioeEBM%2F%2F7MnuSi6Dy2iICP43pwVD2l4nLa3BXGvxRcDdgCT7nFiXHo1JZ%2ByQkA5LgYRYbjmSpWtNU1ZQU4Sr1sGgqYEMpftM9TIJEnwRJB%2BpFxNB3227YqCBEueVMO3DR\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19261&min_rtt=13086&rtt_var=9318&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1255&delivery_rate=325538&cwnd=247&unsent_bytes=0&cid=55dd7ace85c7ebbd&ts=2654&x=0\"', 'content-length': '887', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'vf6586ye5nrme0cn3mebsakt78', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78', 'cancel': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-n7egorfjrzt3ctonrv24fteuhwzsfnzzrbvd6hblwkop4iggyepa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.933Z', 'data_removed': False}, 'content': 'eyJpZCI6InZmNjU4NnllNW5ybWUwY24zbWVic2FrdDc4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNwbGl0IHNjcmVlbjogTGVmdCBzaWRlIHNob3dpbmcgdGFuZ2xlZCBtZXNzIG9mIHdvcmtmbG93IGRpYWdyYW1zIGluIGRhcmsgZ3JheXMsIHJpZ2h0IHNpZGUgc2hvd2luZyBlbGVnYW50IG1pbmltYWwgZmxvdyBjaGFydCB3aXRoIGRlZXAgYmx1ZSBhY2NlbnQgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvWGhSd2ZjenFZTldySVNHVHhmY2IxdTJNaG1weGxlZGMzZVg3Sjc1aGFvYmhtT0RSQi90bXByXzh2NjVsMi5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQxLjkzM1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvdmY2NTg2eWU1bnJtZTBjbjNtZWJzYWt0NzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy92ZjY1ODZ5ZTVucm1lMGNuM21lYnNha3Q3OCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1uN2Vnb3JmanJ6dDNjdG9ucnYyNGZ0ZXVod3pzZm56enJidmQ2aGJsd2tvcDRpZ2d5ZXBhIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1caeb20f4b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=lcjPYPcgIwR3sKJekV1fshQn5AFwgvhjnSatSlwcUmeDFhE7JlVKW1Zg88bQpmZ8CiclTsuNaRsFxZBeXA2SA92IwI2DdatQf3LLSG%2Bl5dvI63Yj2ZoDIeFY6dNsynn1a8dy\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15352&min_rtt=15053&rtt_var=6243&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1280&delivery_rate=244196&cwnd=229&unsent_bytes=0&cid=bfe7b255c61f89ca&ts=2706&x=0\"', 'content-length': '912', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'fj35g2ye05rma0cn3meab0vt1g', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g', 'cancel': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-e2jffiorqgbwwcolxa4tvp6rcvzfcxyovu6gtwan7t2sg3jsnq7q'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.889Z', 'data_removed': False}, 'content': 'eyJpZCI6ImZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNsZWVrIGRhcmsgbW9kZSBpbnRlcmZhY2Ugd2l0aCBnbG93aW5nIHRlYWwgYWNjZW50cywgc2hvd2luZyBjbGVhbiBjb2RlIGVkaXRvciBhbmQgd29ya2Zsb3cgdmlzdWFsaXphdGlvbiIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9uc0g2Z2Z0UnBiVFdlRUk5ZzJqeks4M2ZXQ2JKWk9sanBCZUt4d2UyQWdCSE5kR2lDL3RtcGd6M3hxOXl2LnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuODg5WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9majM1ZzJ5ZTA1cm1hMGNuM21lYWIwdnQxZy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2ZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWUyamZmaW9ycWdid3djb2x4YTR0dnA2cmN2emZjeHlvdnU2Z3R3YW43dDJzZzNqc25xN3EifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1c6b634295-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=VT5kA9GO11PX33qpdlv9PEXbMkHcfe5JTuac1WOesRvyIJ93uJY%2Br0cjGcs8L%2FBC9L1lEwp%2FlpRNmR858Dvm75QYf9pHS6bYDFMoIRNWjbItxkW7j8fm2SaRJcY9UeO2VtxZ\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23351&min_rtt=12083&rtt_var=12492&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1228&delivery_rate=352561&cwnd=237&unsent_bytes=0&cid=b7440990455a525e&ts=2706&x=0\"', 'content-length': '860', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'xxrz9qq085rme0cn3mebqeq5c0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0', 'cancel': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-kpshekoqmpsqtk5sbtx5z2wwqix3eo55houy7s7pffysmsesvthq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.561Z', 'data_removed': False}, 'content': 'eyJpZCI6Inh4cno5cXEwODVybWUwY24zbWVicWVxNWMwIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6Ik11bHRpcGxlIGRhcmsgcGFuZWxzIHNob3dpbmcgc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyB3aXRoIHB1cnBsZS9ibHVlIGRhdGEgZmxvdyBhbmltYXRpb25zIiwicHJvbXB0X3Vwc2FtcGxpbmciOmZhbHNlLCJzYWZldHlfdG9sZXJhbmNlIjoyLCJ3aWR0aCI6MTI4MH0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS94ZXpxLzFJbjhDN2pNakFMekVkUUFwNVNBREVVTEVsbFA3bmxpSTE1Y2VHR2NSNmV0cHpRVUEvdG1wX3htOXBxdXYucG5nIiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTo0Ni41NjFaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3h4cno5cXEwODVybWUwY24zbWVicWVxNWMwL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMveHhyejlxcTA4NXJtZTBjbjNtZWJxZXE1YzAiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2Jjd3Ita3BzaGVrb3FtcHNxdGs1c2J0eDV6Mnd3cWl4M2VvNTVob3V5N3M3cGZmeXNtc2VzdnRocSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c3988938c3b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=gq2a8vgk37HSJVm4rkGNOBwxCq8%2FLAL0bWNns4fPhPUfkT6rztevGyu6pOEFOGaf%2Bb6gXIPmyKWtaI9Y%2FL%2BPG0ijomBaxvXLEPHEYLwvmolGSXZBaYVlFy0rvvdcCmyF%2FP2a\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23890&min_rtt=13502&rtt_var=12483&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1212&delivery_rate=315508&cwnd=223&unsent_bytes=0&cid=0a188aa122578980&ts=2672&x=0\"', 'content-length': '844', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'y8zg31z0anrme0cn3mea6t5hzw', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw', 'cancel': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-ie4zzaezkovakvuyyyynld2fsfrobaeijgjkzyguvxpu7p7tetnq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.581Z', 'data_removed': False}, 'content': 'eyJpZCI6Ink4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgY29kZSBlZGl0b3Igc2hvd2luZyBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvbiwgd2l0aCBzdWJ0bGUgc3ludGF4IGhpZ2hsaWdodGluZyBpbiBkZWVwIHB1cnBsZSIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9OWGhUMW5ETTdPcXRNQmtER041UVhpWnhCRUNTZHNSUnRvYVZlWjFLM3NpMjBaSUtBL3RtcGc2bnZjYm9pLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDYuNTgxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy95OHpnMzF6MGFucm1lMGNuM21lYTZ0NWh6dy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3k4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3Iiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWllNHp6YWV6a292YWt2dXl5eXlubGQyZnNmcm9iYWVpamdqa3p5Z3V2eHB1N3A3dGV0bnEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c39ac997cb4-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=w8sDZ85NfEuzInwv5siDESMHZrCnrKa3IsRIKzN%2FLvcHiutEdqmy0UlBkRXDhdfJJKhi6z7p2qTXvs1zfgaEhWNb1NDNEbIX0lseNtWE0qsUNQVKOWGvsqthN1rEwnjM64UB\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19595&min_rtt=15900&rtt_var=8602&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1219&delivery_rate=267924&cwnd=252&unsent_bytes=0&cid=d08c0ef09ddab2b1&ts=2640&x=0\"', 'content-length': '851', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': '8gnqt4704hrm80cn3me8xs9e38', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38', 'cancel': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-qanck2osuagokv3crxwwkcd7p7foebmbqwfrtac2oba6az7xgvja'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.532Z', 'data_removed': False}, 'content': 'eyJpZCI6IjhnbnF0NDcwNGhybTgwY24zbWU4eHM5ZTM4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgZ3JhZGllbnQgYmFja2dyb3VuZCB3aXRoIGZsb2F0aW5nIDNEIGVsZW1lbnRzIHNob3dpbmcgQVBJIGtleSBhbmQgbG9nbyBpbiBkZWVwIGJsdWUgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvbG9kSVFXMW5mWDA4TWFTQkQwd3ZmbllNNWVNYU5IVDd5cWFEVkI2UzRzZGFUbmhvQS90bXBpczF4a2J0My5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQ2LjUzMloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvOGducXQ0NzA0aHJtODBjbjNtZTh4czllMzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy84Z25xdDQ3MDRocm04MGNuM21lOHhzOWUzOCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1xYW5jazJvc3VhZ29rdjNjcnh3d2tjZDdwN2ZvZWJtYnF3ZnJ0YWMyb2JhNmF6N3hndmphIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c397a724233-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=pqvwTzpzU%2ByhQxpEh%2FM3DtLFVVf6ynf8LOltdiOlh8TEUMpG44ZxQdpKn0NdQQDjJDKMoWo6JvhI5VH3tRtCKgdtNwQZ5hc8eqJlJuc5nA7P4vkMN1pnB%2FSEsB%2BNeEZpOxcm\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24377&min_rtt=17079&rtt_var=11617&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1220&delivery_rate=249429&cwnd=231&unsent_bytes=0&cid=c32208a984256c06&ts=2956&x=0\"', 'content-length': '852', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}]\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': '8gnqt4704hrm80cn3me8xs9e38', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38', 'cancel': 'https://api.replicate.com/v1/predictions/8gnqt4704hrm80cn3me8xs9e38/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-qanck2osuagokv3crxwwkcd7p7foebmbqwfrtac2oba6az7xgvja'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/lodIQW1nfX08MaSBD0wvfnYM5eMaNHT7yqaDVB6S4sdaTnhoA/tmpis1xkbt3.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.532Z', 'data_removed': False}, 'content': 'eyJpZCI6IjhnbnF0NDcwNGhybTgwY24zbWU4eHM5ZTM4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgZ3JhZGllbnQgYmFja2dyb3VuZCB3aXRoIGZsb2F0aW5nIDNEIGVsZW1lbnRzIHNob3dpbmcgQVBJIGtleSBhbmQgbG9nbyBpbiBkZWVwIGJsdWUgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvbG9kSVFXMW5mWDA4TWFTQkQwd3ZmbllNNWVNYU5IVDd5cWFEVkI2UzRzZGFUbmhvQS90bXBpczF4a2J0My5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQ2LjUzMloiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvOGducXQ0NzA0aHJtODBjbjNtZTh4czllMzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy84Z25xdDQ3MDRocm04MGNuM21lOHhzOWUzOCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1xYW5jazJvc3VhZ29rdjNjcnh3d2tjZDdwN2ZvZWJtYnF3ZnJ0YWMyb2JhNmF6N3hndmphIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c397a724233-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=pqvwTzpzU%2ByhQxpEh%2FM3DtLFVVf6ynf8LOltdiOlh8TEUMpG44ZxQdpKn0NdQQDjJDKMoWo6JvhI5VH3tRtCKgdtNwQZ5hc8eqJlJuc5nA7P4vkMN1pnB%2FSEsB%2BNeEZpOxcm\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24377&min_rtt=17079&rtt_var=11617&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1220&delivery_rate=249429&cwnd=231&unsent_bytes=0&cid=c32208a984256c06&ts=2956&x=0\"', 'content-length': '852', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'xxrz9qq085rme0cn3mebqeq5c0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0', 'cancel': 'https://api.replicate.com/v1/predictions/xxrz9qq085rme0cn3mebqeq5c0/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-kpshekoqmpsqtk5sbtx5z2wwqix3eo55houy7s7pffysmsesvthq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/1In8C7jMjALzEdQAp5SADEULEllP7nliI15ceGGcR6etpzQUA/tmp_xm9pquv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.561Z', 'data_removed': False}, 'content': 'eyJpZCI6Inh4cno5cXEwODVybWUwY24zbWVicWVxNWMwIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6Ik11bHRpcGxlIGRhcmsgcGFuZWxzIHNob3dpbmcgc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyB3aXRoIHB1cnBsZS9ibHVlIGRhdGEgZmxvdyBhbmltYXRpb25zIiwicHJvbXB0X3Vwc2FtcGxpbmciOmZhbHNlLCJzYWZldHlfdG9sZXJhbmNlIjoyLCJ3aWR0aCI6MTI4MH0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS94ZXpxLzFJbjhDN2pNakFMekVkUUFwNVNBREVVTEVsbFA3bmxpSTE1Y2VHR2NSNmV0cHpRVUEvdG1wX3htOXBxdXYucG5nIiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTo0Ni41NjFaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3h4cno5cXEwODVybWUwY24zbWVicWVxNWMwL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMveHhyejlxcTA4NXJtZTBjbjNtZWJxZXE1YzAiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2Jjd3Ita3BzaGVrb3FtcHNxdGs1c2J0eDV6Mnd3cWl4M2VvNTVob3V5N3M3cGZmeXNtc2VzdnRocSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c3988938c3b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=gq2a8vgk37HSJVm4rkGNOBwxCq8%2FLAL0bWNns4fPhPUfkT6rztevGyu6pOEFOGaf%2Bb6gXIPmyKWtaI9Y%2FL%2BPG0ijomBaxvXLEPHEYLwvmolGSXZBaYVlFy0rvvdcCmyF%2FP2a\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23890&min_rtt=13502&rtt_var=12483&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1212&delivery_rate=315508&cwnd=223&unsent_bytes=0&cid=0a188aa122578980&ts=2672&x=0\"', 'content-length': '844', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'y8zg31z0anrme0cn3mea6t5hzw', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw', 'cancel': 'https://api.replicate.com/v1/predictions/y8zg31z0anrme0cn3mea6t5hzw/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-ie4zzaezkovakvuyyyynld2fsfrobaeijgjkzyguvxpu7p7tetnq'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/NXhT1nDM7OqtMBkDGN5QXiZxBECSdsRRtoaVeZ1K3si20ZIKA/tmpg6nvcboi.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:46.581Z', 'data_removed': False}, 'content': 'eyJpZCI6Ink4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgY29kZSBlZGl0b3Igc2hvd2luZyBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvbiwgd2l0aCBzdWJ0bGUgc3ludGF4IGhpZ2hsaWdodGluZyBpbiBkZWVwIHB1cnBsZSIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9OWGhUMW5ETTdPcXRNQmtER041UVhpWnhCRUNTZHNSUnRvYVZlWjFLM3NpMjBaSUtBL3RtcGc2bnZjYm9pLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDYuNTgxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy95OHpnMzF6MGFucm1lMGNuM21lYTZ0NWh6dy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3k4emczMXowYW5ybWUwY24zbWVhNnQ1aHp3Iiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWllNHp6YWV6a292YWt2dXl5eXlubGQyZnNmcm9iYWVpamdqa3p5Z3V2eHB1N3A3dGV0bnEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:49 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c39ac997cb4-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=w8sDZ85NfEuzInwv5siDESMHZrCnrKa3IsRIKzN%2FLvcHiutEdqmy0UlBkRXDhdfJJKhi6z7p2qTXvs1zfgaEhWNb1NDNEbIX0lseNtWE0qsUNQVKOWGvsqthN1rEwnjM64UB\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19595&min_rtt=15900&rtt_var=8602&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1219&delivery_rate=267924&cwnd=252&unsent_bytes=0&cid=d08c0ef09ddab2b1&ts=2640&x=0\"', 'content-length': '851', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'vf6586ye5nrme0cn3mebsakt78', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78', 'cancel': 'https://api.replicate.com/v1/predictions/vf6586ye5nrme0cn3mebsakt78/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-n7egorfjrzt3ctonrv24fteuhwzsfnzzrbvd6hblwkop4iggyepa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XhRwfczqYNWrISGTxfcb1u2Mhmpxledc3eX7J75haobhmODRB/tmpr_8v65l2.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.933Z', 'data_removed': False}, 'content': 'eyJpZCI6InZmNjU4NnllNW5ybWUwY24zbWVic2FrdDc4IiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNwbGl0IHNjcmVlbjogTGVmdCBzaWRlIHNob3dpbmcgdGFuZ2xlZCBtZXNzIG9mIHdvcmtmbG93IGRpYWdyYW1zIGluIGRhcmsgZ3JheXMsIHJpZ2h0IHNpZGUgc2hvd2luZyBlbGVnYW50IG1pbmltYWwgZmxvdyBjaGFydCB3aXRoIGRlZXAgYmx1ZSBhY2NlbnQgbGlnaHRpbmciLCJwcm9tcHRfdXBzYW1wbGluZyI6ZmFsc2UsInNhZmV0eV90b2xlcmFuY2UiOjIsIndpZHRoIjoxMjgwfSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L3hlenEvWGhSd2ZjenFZTldySVNHVHhmY2IxdTJNaG1weGxlZGMzZVg3Sjc1aGFvYmhtT0RSQi90bXByXzh2NjVsMi5wbmciLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjQxLjkzM1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvdmY2NTg2eWU1bnJtZTBjbjNtZWJzYWt0NzgvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy92ZjY1ODZ5ZTVucm1lMGNuM21lYnNha3Q3OCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvYmN3ci1uN2Vnb3JmanJ6dDNjdG9ucnYyNGZ0ZXVod3pzZm56enJidmQ2aGJsd2tvcDRpZ2d5ZXBhIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1caeb20f4b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=lcjPYPcgIwR3sKJekV1fshQn5AFwgvhjnSatSlwcUmeDFhE7JlVKW1Zg88bQpmZ8CiclTsuNaRsFxZBeXA2SA92IwI2DdatQf3LLSG%2Bl5dvI63Yj2ZoDIeFY6dNsynn1a8dy\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15352&min_rtt=15053&rtt_var=6243&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1280&delivery_rate=244196&cwnd=229&unsent_bytes=0&cid=bfe7b255c61f89ca&ts=2706&x=0\"', 'content-length': '912', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'r1zndspe8nrma0cn3meayyyqgm', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm', 'cancel': 'https://api.replicate.com/v1/predictions/r1zndspe8nrma0cn3meayyyqgm/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-i4w5bei7zifalstpbve5fjtx7y4mf3tqywo6lqplbsknig2acwaa'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/XAUKzHkMQ6q4BtWoGTepqjg942Ab8pKRG1quk1SGmUX00ZIKA/tmpw4c8babk.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.957Z', 'data_removed': False}, 'content': 'eyJpZCI6InIxem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IkRhcmsgaG9tZSBvZmZpY2Ugc2V0dGluZyB3aXRoIGdsb3dpbmcgbGFwdG9wIHNjcmVlbiBzaG93aW5nIGNhc2NhZGluZyBjb2RlLCBsaXQgcHJpbWFyaWx5IGJ5IHNjcmVlbiBnbG93LCBkZWVwIHNoYWRvd3MgaW4gYmFja2dyb3VuZCIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9YQVVLekhrTVE2cTRCdFdvR1RlcHFqZzk0MkFiOHBLUkcxcXVrMVNHbVVYMDBaSUtBL3RtcHc0YzhiYWJrLnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuOTU3WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9yMXpuZHNwZThucm1hMGNuM21lYXl5eXFnbS9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3Ixem5kc3BlOG5ybWEwY24zbWVheXl5cWdtIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWk0dzViZWk3emlmYWxzdHBidmU1Zmp0eDd5NG1mM3RxeXdvNmxxcGxic2tuaWcyYWN3YWEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1cb9158c1b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=39nioeEBM%2F%2F7MnuSi6Dy2iICP43pwVD2l4nLa3BXGvxRcDdgCT7nFiXHo1JZ%2ByQkA5LgYRYbjmSpWtNU1ZQU4Sr1sGgqYEMpftM9TIJEnwRJB%2BpFxNB3227YqCBEueVMO3DR\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19261&min_rtt=13086&rtt_var=9318&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1255&delivery_rate=325538&cwnd=247&unsent_bytes=0&cid=55dd7ace85c7ebbd&ts=2654&x=0\"', 'content-length': '887', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'fj35g2ye05rma0cn3meab0vt1g', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g', 'cancel': 'https://api.replicate.com/v1/predictions/fj35g2ye05rma0cn3meab0vt1g/cancel', 'stream': 'https://stream.replicate.com/v1/files/bcwr-e2jffiorqgbwwcolxa4tvp6rcvzfcxyovu6gtwan7t2sg3jsnq7q'}, 'error': None, 'input': {'width': 1280, 'height': 720, 'prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'output_format': 'png', 'output_quality': 100, 'safety_tolerance': 2, 'prompt_upsampling': False}, 'model': 'black-forest-labs/flux-1.1-pro', 'output': 'https://replicate.delivery/xezq/nsH6gftRpbTWeEI9g2jzK83fWCbJZOljpBeKxwe2AgBHNdGiC/tmpgz3xq9yv.png', 'status': 'processing', 'version': 'dp-a956b5a516d14ae1a2b108b3a81e8306', 'created_at': '2025-02-19T07:29:41.889Z', 'data_removed': False}, 'content': 'eyJpZCI6ImZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwibW9kZWwiOiJibGFjay1mb3Jlc3QtbGFicy9mbHV4LTEuMS1wcm8iLCJ2ZXJzaW9uIjoiZHAtYTk1NmI1YTUxNmQxNGFlMWEyYjEwOGIzYTgxZTgzMDYiLCJpbnB1dCI6eyJoZWlnaHQiOjcyMCwib3V0cHV0X2Zvcm1hdCI6InBuZyIsIm91dHB1dF9xdWFsaXR5IjoxMDAsInByb21wdCI6IlNsZWVrIGRhcmsgbW9kZSBpbnRlcmZhY2Ugd2l0aCBnbG93aW5nIHRlYWwgYWNjZW50cywgc2hvd2luZyBjbGVhbiBjb2RlIGVkaXRvciBhbmQgd29ya2Zsb3cgdmlzdWFsaXphdGlvbiIsInByb21wdF91cHNhbXBsaW5nIjpmYWxzZSwic2FmZXR5X3RvbGVyYW5jZSI6Miwid2lkdGgiOjEyODB9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkveGV6cS9uc0g2Z2Z0UnBiVFdlRUk5ZzJqeks4M2ZXQ2JKWk9sanBCZUt4d2UyQWdCSE5kR2lDL3RtcGd6M3hxOXl2LnBuZyIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6NDEuODg5WiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9majM1ZzJ5ZTA1cm1hMGNuM21lYWIwdnQxZy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2ZqMzVnMnllMDVybWEwY24zbWVhYjB2dDFnIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9iY3dyLWUyamZmaW9ycWdid3djb2x4YTR0dnA2cmN2emZjeHlvdnU2Z3R3YW43dDJzZzNqc25xN3EifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'date': 'Wed, 19 Feb 2025 07:29:44 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c1c6b634295-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=VT5kA9GO11PX33qpdlv9PEXbMkHcfe5JTuac1WOesRvyIJ93uJY%2Br0cjGcs8L%2FBC9L1lEwp%2FlpRNmR858Dvm75QYf9pHS6bYDFMoIRNWjbItxkW7j8fm2SaRJcY9UeO2VtxZ\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23351&min_rtt=12083&rtt_var=12492&sent=5&recv=6&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1228&delivery_rate=352561&cwnd=237&unsent_bytes=0&cid=b7440990455a525e&ts=2706&x=0\"', 'content-length': '860', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: [{'json': {'id': 'p3j4th5k05rge0cn3me9z7248w', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w', 'cancel': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-zeg44xofub43mvyq42zpadqku3bnyzpettcao7q6rtgcjhstm43q'}, 'error': None, 'input': {'text': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.977Z', 'data_removed': False}, 'content': 'eyJpZCI6InAzajR0aDVrMDVyZ2UwY24zbWU5ejcyNDh3IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJFdmVyIG5vdGljZSBob3cgbW9zdCBkZXZlbG9wZXIgdG9vbHMgZmVlbCBvdmVyd2hlbG1pbmc/IExpa2Ugc3RhcmluZyBpbnRvIGFuIGVuZGxlc3Mgd2FsbCBvZiBjb21wbGV4aXR5PyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk3N1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDNqNHRoNWswNXJnZTBjbjNtZTl6NzI0OHcvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9wM2o0dGg1azA1cmdlMGNuM21lOXo3MjQ4dyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS16ZWc0NHhvZnViNDNtdnlxNDJ6cGFkcWt1M2JueXpwZXR0Y2FvN3E2cnRnY2poc3RtNDNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12b34de9a-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=tGa167Xr9aPHilZJom%2Bf4XY9eFQjLJSqYTj0wdDXQjxs8m7ac23Ba26Fwe5enuhYgmHwYR1Jzr7zFAqwehckJMG%2BsC74f%2BpGvOnq4LMZhvF6rxsDgg2J7b%2FCClr4OR0EAWXU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19158&min_rtt=13222&rtt_var=9199&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1170&delivery_rate=322190&cwnd=252&unsent_bytes=0&cid=fb5dfb364ca5fc47&ts=1037&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'jrbjq45jydrge0cn3meb92hfa0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0', 'cancel': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-iutge4yfw7elxy3e3e5wld37qfykvyyl3qp7f4723m2ldqn2t2sq'}, 'error': None, 'input': {'text': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.963Z', 'data_removed': False}, 'content': 'eyJpZCI6ImpyYmpxNDVqeWRyZ2UwY24zbWViOTJoZmEwIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJXaGF0IGlmIHRoZXJlIHdhcyBhIHdheSB0byB0dXJuIGNoYW9zIGludG8gY2xlYW4sIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3dzIHdpdGgganVzdCBhIGZldyBsaW5lcyBvZiBjb2RlPyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk2M1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvanJianE0NWp5ZHJnZTBjbjNtZWI5MmhmYTAvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9qcmJqcTQ1anlkcmdlMGNuM21lYjkyaGZhMCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1pdXRnZTR5Znc3ZWx4eTNlM2U1d2xkMzdxZnlrdnl5bDNxcDdmNDcyM20ybGRxbjJ0MnNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:36 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12eff43f8-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=2eVeP1K3U%2Fpvts03nqojTfZGFpLhKc%2Bj3l0P53qoqhnb%2BB7vlePKjy4yCAsYwNzRBsybAjnpqbLqn4PURdKviT5ZtJjQA7yuLKA5qVg%2Bg1PnXJUCAJTK5ogKZzqSEHtcu80b\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23270&min_rtt=11741&rtt_var=12480&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1170&delivery_rate=362831&cwnd=252&unsent_bytes=0&cid=124f2552fea51988&ts=1420&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': '9ske1fxk1xrga0cn3mea3jxysc', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc', 'cancel': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-om4wdb4revlvj6ppb4sktnketuflqfcq7ob66an6ssxyx64ofuda'}, 'error': None, 'input': {'text': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.991Z', 'data_removed': False}, 'content': 'eyJpZCI6Ijlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJNZWV0IEp1bGVwIC0gdGhlIHNlcnZlcmxlc3MgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgdGVhbXMgYnVpbGQgc29waGlzdGljYXRlZCBBSSB3b3JrZmxvd3Mgd2l0aG91dCB0aGUgaGVhZGFjaGUuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsL2VCTkc2d1lpVEpYZ1lhQmR2TGtlZ0FjTzJHVkI1ZWV3enJ1dW1WZzhuZVllWDZNRUYvb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTkxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy85c2tlMWZ4azF4cmdhMGNuM21lYTNqeHlzYy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9mZGRxLW9tNHdkYjRyZXZsdmo2cHBiNHNrdG5rZXR1ZmxxZmNxN29iNjZhbjZzc3h5eDY0b2Z1ZGEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf10c227cb2-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=LaqZycAgnM5AC8wv86tHydOx0pW%2FZPYlTTvLk1%2Fldw86OGkOznQKFZA9M0GFuk279O0gg3l08qurKE%2BsH2dbmuiUJwzjbMjZ%2BwWSlh1eg55BflWAIvfa9eGtBTqaDYqJTFDu\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24041&min_rtt=16959&rtt_var=11418&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1178&delivery_rate=251194&cwnd=235&unsent_bytes=0&cid=7b268fc36822a515&ts=679&x=0\"', 'content-length': '788', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'p6p9dtp07srg80cn3mebqc1m3c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c', 'cancel': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-fnhel4s53zwzxhlb3sdduenfvavbyllptqetjplges3bdxe4bg7q'}, 'error': None, 'input': {'text': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.366Z', 'data_removed': False}, 'content': 'eyJpZCI6InA2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSdW4gY29tcGxleCBBSSBvcGVyYXRpb25zIGluIHBhcmFsbGVsLCBtYW5hZ2Ugc3RhdGUgZWZmb3J0bGVzc2x5LCBhbmQgc2NhbGUgd2l0aG91dCB0b3VjaGluZyBpbmZyYXN0cnVjdHVyZS4iLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvRXhvZ1gwNTcyT0lyQjVEY1VqOWpzd2xkZzM4Q2dMTkFYdEpld3Ewa2dON3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4zNjZaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3A2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDZwOWR0cDA3c3JnODBjbjNtZWJxYzFtM2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZm5oZWw0czUzend6eGhsYjNzZGR1ZW5mdmF2YnlsbHB0cWV0anBsZ2VzM2JkeGU0Ymc3cSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c064c3d438b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=ImxzppCZaXQaTNdrcvEucHeaK7rXAVx1n%2F3pSUG0CuNzAPfU87C9N%2B%2BHVfSoTYacU7dhKoLsrdhRdgCz0XZkfpouITenj6rbS6Rq1%2FWtESRM89DpZP50efs3tynWo6zPTCZd\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14774&min_rtt=12601&rtt_var=6278&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1174&delivery_rate=338068&cwnd=221&unsent_bytes=0&cid=528c506b7e629a3b&ts=1160&x=0\"', 'content-length': '784', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': 'dbrfpky0asrgc0cn3me845v9m4', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4', 'cancel': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-esvpykfjlan67hrgevu4nkphqamohtzv27vqav6mzr764yi3wrcq'}, 'error': None, 'input': {'text': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.39Z', 'data_removed': False}, 'content': 'eyJpZCI6ImRicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJUdXJuIDgwIGxpbmVzIG9mIGNvbXBsZXggY29kZSBpbnRvIHNpbXBsZSwgbWFuYWdlZCB3b3JrZmxvd3MgdGhhdCBqdXN0IHdvcmsuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsLzM3TG56NmNDcUlwUkhkWDRGbTVlVkpKeVZKNHVLMmg4MmdBOUJqQVh3dUt4MFpJS0Evb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzguMzlaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2RicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00L2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvZGJyZnBreTBhc3JnYzBjbjNtZTg0NXY5bTQiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZXN2cHlrZmpsYW42N2hyZ2V2dTRua3BocWFtb2h0enYyN3ZxYXY2bXpyNzY0eWkzd3JjcSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c067ee042dd-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=uo4oAZ61z%2FvgF3l75mzMmu1GpDbwd2K2fzAH4IHUGBhAXxt0FSIC5hqvpt6BRPdmfutVw1Pr42RtJ6EV0QTCBglY%2FAlf1Q5uD9z9pvOTHQsQk983Krx7rncZJ36TGX5pS5XU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15380&min_rtt=15041&rtt_var=6319&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1142&delivery_rate=239918&cwnd=240&unsent_bytes=0&cid=d848bb2f791a7cd8&ts=792&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}, {'json': {'id': '4kmaj95zw9rga0cn3meb3t0g8c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c', 'cancel': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-msepfbrkiezjnf653jra36uuyljlt2l4yscx4eqp26xaqmovjgka'}, 'error': None, 'input': {'text': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.274Z', 'data_removed': False}, 'content': 'eyJpZCI6IjRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSZWFkeSB0byB0cmFuc2Zvcm0geW91ciBBSSB3b3JrZmxvd3M/IEdldCB5b3VyIGZyZWUgQVBJIGtleSBub3cgYXQgSnVsZXAuYWkiLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvS3N4anlRWkZ2QjcxRmhnM2VHb2UwWHJUT1JJMlZVZ2ZmNXdmRzQ4SWs4VVZNZEdpQy9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4yNzRaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvNGttYWo5NXp3OXJnYTBjbjNtZWIzdDBnOGMiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtbXNlcGZicmtpZXpqbmY2NTNqcmEzNnV1eWxqbHQybDR5c2N4NGVxcDI2eGFxbW92amdrYSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:38 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c05dc76185d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=eJJ%2BwVCYu8MK9Df9Xn%2FIjKSgS1TwjFLkbtgDRxIGKvQ%2BBm1E5RH4T4vZuKpaDkUJp3g1PRLvu%2FFWqE04N2FkXDpcB0PwY6c1ai56TWEPVZ7NgRV8tFBD67qBOhAaBCQIVvL2\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14830&min_rtt=12188&rtt_var=6458&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1141&delivery_rate=349524&cwnd=215&unsent_bytes=0&cid=050ea72bf0124479&ts=428&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}]\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'p6p9dtp07srg80cn3mebqc1m3c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c', 'cancel': 'https://api.replicate.com/v1/predictions/p6p9dtp07srg80cn3mebqc1m3c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-fnhel4s53zwzxhlb3sdduenfvavbyllptqetjplges3bdxe4bg7q'}, 'error': None, 'input': {'text': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/ExogX0572OIrB5DcUj9jswldg38CgLNAXtJewq0kgN7x0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.366Z', 'data_removed': False}, 'content': 'eyJpZCI6InA2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSdW4gY29tcGxleCBBSSBvcGVyYXRpb25zIGluIHBhcmFsbGVsLCBtYW5hZ2Ugc3RhdGUgZWZmb3J0bGVzc2x5LCBhbmQgc2NhbGUgd2l0aG91dCB0b3VjaGluZyBpbmZyYXN0cnVjdHVyZS4iLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvRXhvZ1gwNTcyT0lyQjVEY1VqOWpzd2xkZzM4Q2dMTkFYdEpld3Ewa2dON3gwWklLQS9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4zNjZaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL3A2cDlkdHAwN3NyZzgwY24zbWVicWMxbTNjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDZwOWR0cDA3c3JnODBjbjNtZWJxYzFtM2MiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZm5oZWw0czUzend6eGhsYjNzZGR1ZW5mdmF2YnlsbHB0cWV0anBsZ2VzM2JkeGU0Ymc3cSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c064c3d438b-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=ImxzppCZaXQaTNdrcvEucHeaK7rXAVx1n%2F3pSUG0CuNzAPfU87C9N%2B%2BHVfSoTYacU7dhKoLsrdhRdgCz0XZkfpouITenj6rbS6Rq1%2FWtESRM89DpZP50efs3tynWo6zPTCZd\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14774&min_rtt=12601&rtt_var=6278&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1174&delivery_rate=338068&cwnd=221&unsent_bytes=0&cid=528c506b7e629a3b&ts=1160&x=0\"', 'content-length': '784', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'dbrfpky0asrgc0cn3me845v9m4', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4', 'cancel': 'https://api.replicate.com/v1/predictions/dbrfpky0asrgc0cn3me845v9m4/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-esvpykfjlan67hrgevu4nkphqamohtzv27vqav6mzr764yi3wrcq'}, 'error': None, 'input': {'text': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/37Lnz6cCqIpRHdX4Fm5eVJJyVJ4uK2h82gA9BjAXwuKx0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.39Z', 'data_removed': False}, 'content': 'eyJpZCI6ImRicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJUdXJuIDgwIGxpbmVzIG9mIGNvbXBsZXggY29kZSBpbnRvIHNpbXBsZSwgbWFuYWdlZCB3b3JrZmxvd3MgdGhhdCBqdXN0IHdvcmsuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsLzM3TG56NmNDcUlwUkhkWDRGbTVlVkpKeVZKNHVLMmg4MmdBOUJqQVh3dUt4MFpJS0Evb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzguMzlaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zL2RicmZwa3kwYXNyZ2MwY24zbWU4NDV2OW00L2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvZGJyZnBreTBhc3JnYzBjbjNtZTg0NXY5bTQiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtZXN2cHlrZmpsYW42N2hyZ2V2dTRua3BocWFtb2h0enYyN3ZxYXY2bXpyNzY0eWkzd3JjcSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:39 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c067ee042dd-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=uo4oAZ61z%2FvgF3l75mzMmu1GpDbwd2K2fzAH4IHUGBhAXxt0FSIC5hqvpt6BRPdmfutVw1Pr42RtJ6EV0QTCBglY%2FAlf1Q5uD9z9pvOTHQsQk983Krx7rncZJ36TGX5pS5XU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=15380&min_rtt=15041&rtt_var=6319&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1142&delivery_rate=239918&cwnd=240&unsent_bytes=0&cid=d848bb2f791a7cd8&ts=792&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': '4kmaj95zw9rga0cn3meb3t0g8c', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c', 'cancel': 'https://api.replicate.com/v1/predictions/4kmaj95zw9rga0cn3meb3t0g8c/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-msepfbrkiezjnf653jra36uuyljlt2l4yscx4eqp26xaqmovjgka'}, 'error': None, 'input': {'text': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/KsxjyQZFvB71Fhg3eGoe0XrTORI2VUgff5wfG48Ik8UVMdGiC/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:38.274Z', 'data_removed': False}, 'content': 'eyJpZCI6IjRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJSZWFkeSB0byB0cmFuc2Zvcm0geW91ciBBSSB3b3JrZmxvd3M/IEdldCB5b3VyIGZyZWUgQVBJIGtleSBub3cgYXQgSnVsZXAuYWkiLCJ2b2ljZSI6ImFtX2FkYW0ifSwibG9ncyI6IiIsIm91dHB1dCI6Imh0dHBzOi8vcmVwbGljYXRlLmRlbGl2ZXJ5L2N6amwvS3N4anlRWkZ2QjcxRmhnM2VHb2UwWHJUT1JJMlZVZ2ZmNXdmRzQ4SWs4VVZNZEdpQy9vdXRwdXQud2F2IiwiZGF0YV9yZW1vdmVkIjpmYWxzZSwiZXJyb3IiOm51bGwsInN0YXR1cyI6InByb2Nlc3NpbmciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0xOVQwNzoyOTozOC4yNzRaIiwidXJscyI6eyJjYW5jZWwiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzRrbWFqOTV6dzlyZ2EwY24zbWViM3QwZzhjL2NhbmNlbCIsImdldCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvNGttYWo5NXp3OXJnYTBjbjNtZWIzdDBnOGMiLCJzdHJlYW0iOiJodHRwczovL3N0cmVhbS5yZXBsaWNhdGUuY29tL3YxL2ZpbGVzL2ZkZHEtbXNlcGZicmtpZXpqbmY2NTNqcmEzNnV1eWxqbHQybDR5c2N4NGVxcDI2eGFxbW92amdrYSJ9fQ==', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:38 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448c05dc76185d-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=eJJ%2BwVCYu8MK9Df9Xn%2FIjKSgS1TwjFLkbtgDRxIGKvQ%2BBm1E5RH4T4vZuKpaDkUJp3g1PRLvu%2FFWqE04N2FkXDpcB0PwY6c1ai56TWEPVZ7NgRV8tFBD67qBOhAaBCQIVvL2\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=14830&min_rtt=12188&rtt_var=6458&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1141&delivery_rate=349524&cwnd=215&unsent_bytes=0&cid=050ea72bf0124479&ts=428&x=0\"', 'content-length': '751', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'jrbjq45jydrge0cn3meb92hfa0', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0', 'cancel': 'https://api.replicate.com/v1/predictions/jrbjq45jydrge0cn3meb92hfa0/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-iutge4yfw7elxy3e3e5wld37qfykvyyl3qp7f4723m2ldqn2t2sq'}, 'error': None, 'input': {'text': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/VcrkmrW5fG0iJiQfi8ikdpStRJ5HovtOf992YHN6UCDATnhoA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.963Z', 'data_removed': False}, 'content': 'eyJpZCI6ImpyYmpxNDVqeWRyZ2UwY24zbWViOTJoZmEwIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJXaGF0IGlmIHRoZXJlIHdhcyBhIHdheSB0byB0dXJuIGNoYW9zIGludG8gY2xlYW4sIHNlcnZlcmxlc3MgQUkgd29ya2Zsb3dzIHdpdGgganVzdCBhIGZldyBsaW5lcyBvZiBjb2RlPyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC9WY3JrbXJXNWZHMGlKaVFmaThpa2RwU3RSSjVIb3Z0T2Y5OTJZSE42VUNEQVRuaG9BL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk2M1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvanJianE0NWp5ZHJnZTBjbjNtZWI5MmhmYTAvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9qcmJqcTQ1anlkcmdlMGNuM21lYjkyaGZhMCIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS1pdXRnZTR5Znc3ZWx4eTNlM2U1d2xkMzdxZnlrdnl5bDNxcDdmNDcyM20ybGRxbjJ0MnNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:36 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12eff43f8-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=2eVeP1K3U%2Fpvts03nqojTfZGFpLhKc%2Bj3l0P53qoqhnb%2BB7vlePKjy4yCAsYwNzRBsybAjnpqbLqn4PURdKviT5ZtJjQA7yuLKA5qVg%2Bg1PnXJUCAJTK5ogKZzqSEHtcu80b\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=23270&min_rtt=11741&rtt_var=12480&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2847&recv_bytes=1170&delivery_rate=362831&cwnd=252&unsent_bytes=0&cid=124f2552fea51988&ts=1420&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '199', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': 'p3j4th5k05rge0cn3me9z7248w', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w', 'cancel': 'https://api.replicate.com/v1/predictions/p3j4th5k05rge0cn3me9z7248w/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-zeg44xofub43mvyq42zpadqku3bnyzpettcao7q6rtgcjhstm43q'}, 'error': None, 'input': {'text': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/8x6oya5WZPZ1MNdahB8SnKN9Ya3zQmKsgDgXn6VJ1pfv0ZIKA/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.977Z', 'data_removed': False}, 'content': 'eyJpZCI6InAzajR0aDVrMDVyZ2UwY24zbWU5ejcyNDh3IiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJFdmVyIG5vdGljZSBob3cgbW9zdCBkZXZlbG9wZXIgdG9vbHMgZmVlbCBvdmVyd2hlbG1pbmc/IExpa2Ugc3RhcmluZyBpbnRvIGFuIGVuZGxlc3Mgd2FsbCBvZiBjb21wbGV4aXR5PyIsInZvaWNlIjoiYW1fYWRhbSJ9LCJsb2dzIjoiIiwib3V0cHV0IjoiaHR0cHM6Ly9yZXBsaWNhdGUuZGVsaXZlcnkvY3pqbC84eDZveWE1V1pQWjFNTmRhaEI4U25LTjlZYTN6UW1Lc2dEZ1huNlZKMXBmdjBaSUtBL291dHB1dC53YXYiLCJkYXRhX3JlbW92ZWQiOmZhbHNlLCJlcnJvciI6bnVsbCwic3RhdHVzIjoicHJvY2Vzc2luZyIsImNyZWF0ZWRfYXQiOiIyMDI1LTAyLTE5VDA3OjI5OjM0Ljk3N1oiLCJ1cmxzIjp7ImNhbmNlbCI6Imh0dHBzOi8vYXBpLnJlcGxpY2F0ZS5jb20vdjEvcHJlZGljdGlvbnMvcDNqNHRoNWswNXJnZTBjbjNtZTl6NzI0OHcvY2FuY2VsIiwiZ2V0IjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy9wM2o0dGg1azA1cmdlMGNuM21lOXo3MjQ4dyIsInN0cmVhbSI6Imh0dHBzOi8vc3RyZWFtLnJlcGxpY2F0ZS5jb20vdjEvZmlsZXMvZmRkcS16ZWc0NHhvZnViNDNtdnlxNDJ6cGFkcWt1M2JueXpwZXR0Y2FvN3E2cnRnY2poc3RtNDNxIn19', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf12b34de9a-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=tGa167Xr9aPHilZJom%2Bf4XY9eFQjLJSqYTj0wdDXQjxs8m7ac23Ba26Fwe5enuhYgmHwYR1Jzr7zFAqwehckJMG%2BsC74f%2BpGvOnq4LMZhvF6rxsDgg2J7b%2FCClr4OR0EAWXU\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=19158&min_rtt=13222&rtt_var=9199&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2846&recv_bytes=1170&delivery_rate=322190&cwnd=252&unsent_bytes=0&cid=fb5dfb364ca5fc47&ts=1037&x=0\"', 'content-length': '780', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '198', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: finish_branch\n", "output: {'json': {'id': '9ske1fxk1xrga0cn3mea3jxysc', 'logs': '', 'urls': {'get': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc', 'cancel': 'https://api.replicate.com/v1/predictions/9ske1fxk1xrga0cn3mea3jxysc/cancel', 'stream': 'https://stream.replicate.com/v1/files/fddq-om4wdb4revlvj6ppb4sktnketuflqfcq7ob66an6ssxyx64ofuda'}, 'error': None, 'input': {'text': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'speed': 1, 'voice': 'am_adam'}, 'model': 'jaaari/kokoro-82m', 'output': 'https://replicate.delivery/czjl/eBNG6wYiTJXgYaBdvLkegAcO2GVB5eewzruumVg8neYeX6MEF/output.wav', 'status': 'processing', 'version': 'f559560eb822dc509045f3921a1921234918b91739db4bf3daab2169b71c7a13', 'created_at': '2025-02-19T07:29:34.991Z', 'data_removed': False}, 'content': 'eyJpZCI6Ijlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwibW9kZWwiOiJqYWFhcmkva29rb3JvLTgybSIsInZlcnNpb24iOiJmNTU5NTYwZWI4MjJkYzUwOTA0NWYzOTIxYTE5MjEyMzQ5MThiOTE3MzlkYjRiZjNkYWFiMjE2OWI3MWM3YTEzIiwiaW5wdXQiOnsic3BlZWQiOjEsInRleHQiOiJNZWV0IEp1bGVwIC0gdGhlIHNlcnZlcmxlc3MgcGxhdGZvcm0gdGhhdCBsZXRzIGRhdGEgdGVhbXMgYnVpbGQgc29waGlzdGljYXRlZCBBSSB3b3JrZmxvd3Mgd2l0aG91dCB0aGUgaGVhZGFjaGUuIiwidm9pY2UiOiJhbV9hZGFtIn0sImxvZ3MiOiIiLCJvdXRwdXQiOiJodHRwczovL3JlcGxpY2F0ZS5kZWxpdmVyeS9jempsL2VCTkc2d1lpVEpYZ1lhQmR2TGtlZ0FjTzJHVkI1ZWV3enJ1dW1WZzhuZVllWDZNRUYvb3V0cHV0LndhdiIsImRhdGFfcmVtb3ZlZCI6ZmFsc2UsImVycm9yIjpudWxsLCJzdGF0dXMiOiJwcm9jZXNzaW5nIiwiY3JlYXRlZF9hdCI6IjIwMjUtMDItMTlUMDc6Mjk6MzQuOTkxWiIsInVybHMiOnsiY2FuY2VsIjoiaHR0cHM6Ly9hcGkucmVwbGljYXRlLmNvbS92MS9wcmVkaWN0aW9ucy85c2tlMWZ4azF4cmdhMGNuM21lYTNqeHlzYy9jYW5jZWwiLCJnZXQiOiJodHRwczovL2FwaS5yZXBsaWNhdGUuY29tL3YxL3ByZWRpY3Rpb25zLzlza2UxZnhrMXhyZ2EwY24zbWVhM2p4eXNjIiwic3RyZWFtIjoiaHR0cHM6Ly9zdHJlYW0ucmVwbGljYXRlLmNvbS92MS9maWxlcy9mZGRxLW9tNHdkYjRyZXZsdmo2cHBiNHNrdG5rZXR1ZmxxZmNxN29iNjZhbjZzc3h5eDY0b2Z1ZGEifX0=', 'headers': {'nel': '{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}', 'via': '1.1 google', 'date': 'Wed, 19 Feb 2025 07:29:35 GMT', 'vary': 'Accept-Encoding', 'cf-ray': '91448bf10c227cb2-EWR', 'server': 'cloudflare', 'alt-svc': 'h3=\":443\"; ma=86400', 'expect-ct': 'max-age=86400, enforce', 'report-to': '{\"endpoints\":[{\"url\":\"https:\\\\/\\\\/a.nel.cloudflare.com\\\\/report\\\\/v4?s=LaqZycAgnM5AC8wv86tHydOx0pW%2FZPYlTTvLk1%2Fldw86OGkOznQKFZA9M0GFuk279O0gg3l08qurKE%2BsH2dbmuiUJwzjbMjZ%2BwWSlh1eg55BflWAIvfa9eGtBTqaDYqJTFDu\"}],\"group\":\"cf-nel\",\"max_age\":604800}', 'connection': 'keep-alive', 'content-type': 'application/json; charset=UTF-8', 'server-timing': 'cfL4;desc=\"?proto=TCP&rtt=24041&min_rtt=16959&rtt_var=11418&sent=6&recv=7&lost=0&retrans=0&sent_bytes=2848&recv_bytes=1178&delivery_rate=251194&cwnd=235&unsent_bytes=0&cid=7b268fc36822a515&ts=679&x=0\"', 'content-length': '788', 'cf-cache-status': 'DYNAMIC', 'ratelimit-reset': '1', 'referrer-policy': 'same-origin', 'x-frame-options': 'SAMEORIGIN', 'x-xss-protection': '1; mode=block', 'preference-applied': 'wait=60', 'ratelimit-remaining': '197', 'x-content-type-options': 'nosniff', 'strict-transport-security': 'max-age=15552000'}, 'status_code': 201}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: init_branch\n", "output: {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'script': {'scenes': [{'tone': 'Fast zoom transition', 'scene': 'Opening hook - rapid zoom into laptop screen showing code patterns', 'duration': 3, 'narration': 'Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?', 'start_time': 0, 'image_prompt': 'Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background', 'text_overlay': 'OVERWHELMED?'}, {'tone': 'Dynamic split reveal', 'scene': 'Split screen transition showing messy vs clean workflows', 'duration': 4, 'narration': 'What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?', 'start_time': 3, 'image_prompt': 'Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting', 'text_overlay': 'Chaos → Clean'}, {'tone': 'Smooth feature showcase', 'scene': 'Quick demo of Julep interface in action', 'duration': 4, 'narration': 'Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.', 'start_time': 7, 'image_prompt': 'Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization', 'text_overlay': 'JULEP AI'}, {'tone': 'Quick cuts between features', 'scene': 'Split screen showing parallel processing visualization', 'duration': 3, 'narration': 'Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.', 'start_time': 11, 'image_prompt': 'Multiple dark panels showing simultaneous processes with purple/blue data flow animations', 'text_overlay': 'PARALLEL POWER'}, {'tone': 'Dramatic reveal', 'scene': 'Code snippet transformation', 'duration': 3, 'narration': 'Turn 80 lines of complex code into simple, managed workflows that just work.', 'start_time': 14, 'image_prompt': 'Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple', 'text_overlay': 'SIMPLIFY'}, {'tone': 'Energetic finale', 'scene': 'Call-to-action with floating elements', 'duration': 4, 'narration': 'Ready to transform your AI workflows? Get your free API key now at Julep.ai', 'start_time': 17, 'image_prompt': 'Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting', 'text_overlay': 'GET STARTED FREE'}]}}\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: I'll help craft a script that takes advantage of the identified trends - particularly the pattern recognition theme and AI tool educational content that's resonating with viewers. Let me script a dynamic, pattern-driven video that presents an AI workflow tool in an engaging way.\n", "\n", "Let me analyze how to combine those elements:\n", "1. Open with a striking pattern/coincidence to hook viewers\n", "2. Transition into showcasing the tool functionality \n", "3. Keep the tone light and casual while delivering real value\n", "4. Use the optimal short-form timing from the trends (~11-20 seconds per scene)\n", "5. Include educational elements and clear value propositions\n", "\n", "I notice we don't have a tool available for generating the JSON response format, so I'll provide it directly in a structured way that aligns with the trending insights:\n", "\n", "```json\n", "{\n", " \"scenes\": [\n", " {\n", " \"scene\": \"Opening hook - rapid zoom into laptop screen showing code patterns\",\n", " \"narration\": \"Ever notice how most developer tools feel overwhelming? Like staring into an endless wall of complexity?\",\n", " \"image_prompt\": \"Dark home office setting with glowing laptop screen showing cascading code, lit primarily by screen glow, deep shadows in background\",\n", " \"text_overlay\": \"OVERWHELMED?\",\n", " \"tone\": \"Fast zoom transition\",\n", " \"start_time\": 0,\n", " \"duration\": 3\n", " },\n", " {\n", " \"scene\": \"Split screen transition showing messy vs clean workflows\",\n", " \"narration\": \"What if there was a way to turn chaos into clean, serverless AI workflows with just a few lines of code?\",\n", " \"image_prompt\": \"Split screen: Left side showing tangled mess of workflow diagrams in dark grays, right side showing elegant minimal flow chart with deep blue accent lighting\",\n", " \"text_overlay\": \"Chaos → Clean\",\n", " \"tone\": \"Dynamic split reveal\",\n", " \"start_time\": 3,\n", " \"duration\": 4\n", " },\n", " {\n", " \"scene\": \"Quick demo of Julep interface in action\",\n", " \"narration\": \"Meet Julep - the serverless platform that lets data teams build sophisticated AI workflows without the headache.\",\n", " \"image_prompt\": \"Sleek dark mode interface with glowing teal accents, showing clean code editor and workflow visualization\",\n", " \"text_overlay\": \"JULEP AI\",\n", " \"tone\": \"Smooth feature showcase\",\n", " \"start_time\": 7,\n", " \"duration\": 4\n", " },\n", " {\n", " \"scene\": \"Split screen showing parallel processing visualization\",\n", " \"narration\": \"Run complex AI operations in parallel, manage state effortlessly, and scale without touching infrastructure.\",\n", " \"image_prompt\": \"Multiple dark panels showing simultaneous processes with purple/blue data flow animations\",\n", " \"text_overlay\": \"PARALLEL POWER\",\n", " \"tone\": \"Quick cuts between features\",\n", " \"start_time\": 11,\n", " \"duration\": 3\n", " },\n", " {\n", " \"scene\": \"Code snippet transformation\",\n", " \"narration\": \"Turn 80 lines of complex code into simple, managed workflows that just work.\",\n", " \"image_prompt\": \"Dark code editor showing before/after comparison, with subtle syntax highlighting in deep purple\",\n", " \"text_overlay\": \"SIMPLIFY\",\n", " \"tone\": \"Dramatic reveal\",\n", " \"start_time\": 14,\n", " \"duration\": 3\n", " },\n", " {\n", " \"scene\": \"Call-to-action with floating elements\",\n", " \"narration\": \"Ready to transform your AI workflows? Get your free API key now at Julep.ai\",\n", " \"image_prompt\": \"Dark gradient background with floating 3D elements showing API key and logo in deep blue lighting\",\n", " \"text_overlay\": \"GET STARTED FREE\",\n", " \"tone\": \"Energetic finale\",\n", " \"start_time\": 17,\n", " \"duration\": 4\n", " }\n", " ]\n", "}\n", "```\n", "\n", "This script:\n", "1. Opens with a relatable pain point (complexity of dev tools)\n", "2. Uses the trending pattern recognition hook\n", "3. Keeps scenes between 3-4 seconds for optimal engagement\n", "4. Maintains casual but informative tone\n", "5. Includes clear value propositions\n", "6. Ends with strong call-to-action\n", "7. Uses dark/moody color schemes throughout\n", "8. Total duration of 21 seconds aligns with trending video length sweet spot\n", "\n", "Each scene is designed to flow smoothly into the next while maintaining viewer interest through dynamic visuals and crisp narration. The darker color palette and mood lighting suggestions will give it a premium, sophisticated feel while keeping the content accessible.\n", "\n", "Would you like me to adjust any aspects of the scenes or pacing to better align with the trends?\n", "----------------------------------------------------------------------------------------------------\n", "Type: step\n", "output: {'content': '
\\\\[English\\\\](README.md) | \\\\[中文翻译\\\\](./.github/README-CN.md) | \\\\[日本語翻訳\\\\](./.github/README-JA.md) | \\\\[French\\\\](./.github/README-FR.md)\\n\\n
\\n\"julep\"\\n\\n\\n \\n \\n \"Get\\n \\n  \\n \\n \"Documentation\"\\n \\n \\n \\n \"NPM\\n  \\n \"PyPI\\n  \\n \"Docker\\n  \\n \"GitHub\\n \\n \\n \\n Discord\\n ·\\n 𝕏\\n ·\\n LinkedIn\\n \\n\\n\\n
\\n Serverless AI Workflows for Data & ML Teams\\n\\n\\nJulep is a serverless platform that helps data and ML teams build sophisticated AI workflows. It provides a robust foundation for orchestrating complex AI operations, managing state across interactions, and integrating with your existing data infrastructure and tools.\\n\\nWhether you\\'re building data pipelines or creating AI workflows, Julep makes it easy to compose and scale LLM-powered workflows without managing infrastructure. Imagine you want to build an AI agent that can do more than just answer simple questions—it needs to handle complex tasks, remember past interactions, and maybe even use other tools or APIs. That\\'s where Julep comes in. Our platform handles the heavy lifting so you can focus on building intelligent solutions for your business.\\n\\n💡 To learn more about Julep, check out the \\\\*\\\\*\\\\[Documentation\\\\](https://docs.julep.ai/docs/introduction/overview)\\\\*\\\\*.\\n\\n [agents-api] # + multi-tenant: # `SKIP_CHECK_DEVELOPER_HEADERS=False` and requests must have a valid `X-Developer-Id` header # [user] # --{Authorization: Bearer $JWT}--> [gateway] # --{X-Developer-Id: $developer-id, Authorization: Bearer $internal-api-key}--> [agents-api] # in single-tenant mode, developer id is assumed to be uuid '00000000-0000-0000-0000-000000000000' # and this is the default value of `X-Developer-Id` header in this case # the `developers` table in cozo-db will have a row with `id` = '00000000-0000-0000-0000-000000000000' and `name` = 'Default Developer' # in multi-tenant mode, developer id is the id of the developer in the `developers` table in cozo-db # and this id is expected in `X-Developer-Id` header # the developer should have a valid JWT token issued by the gateway # the JWT token is expected in `Authorization` header # if the developer id is not found in the `developers` table in cozo-db, the request will be rejected # in order for agents-api to work correctly in multi-tenant mode, the api assumes that: # - the `gateway` is configured to forward `X-Developer-Id` header to agents-api # and the gateway does that by expecting JWT token in `Authorization` header with the following claims: # - `sub` claim is the developer ID # - `email` claim is the developer email # - `exp` claim is the expiration timestamp # - `iat` claim is the issue timestamp ================================================ FILE: documentation/AGENTS.md ================================================ # AGENTS.md - documentation This directory contains the project documentation, guides, cookbooks, and asset files. Key Uses - Bash commands: - (No build commands; docs are static markdown.) - Core directories: - `concepts/`, `guides/`, `cookbooks/`, `tutorials/`, `assets/`. - Style guidelines: - Markdown formatted for readability; wrap at 96 chars. - Use Google-style code blocks with language tags. - Testing instructions: - Manually verify links and code samples. - Repository etiquette: - Update `CHANGELOG.md` and navigation `SUMMARY.md` for doc changes. - Developer environment: - Preview docs using any local static site generator if desired. - Unexpected behaviors: - Ensure images in `assets/` render correctly in all output formats. # Julep Documentation Structure ## Core Purpose - Julep: Platform for building AI agents with memory, context retention, and complex task execution - Main Components: Agents, Tasks, Sessions, Tools, Documents, Users - Architecture: Client-side SDK + Server-side execution engine + Integrations system ## Key System Concepts ### Projects - Definition: Organizational units for grouping related resources - Components: Canonical name, display name, metadata - Use: Organize agents, users, and files into logical groups - Features: Default project for compatibility, future API key/billing segmentation ### Agents - Definition: Configured LLM instances with specific personas and capabilities - Components: Instructions, metadata, tools, docs - Configuration: Name, model, system template, default settings, project - Use: Power sessions and tasks as conversational or autonomous entities ### Tasks - Definition: Multi-step workflows (similar to GitHub Actions) - Step Types: Prompt, Evaluate, Tool Call, If-else, Foreach, Map-reduce, etc. - Execution: Run by agents, maintain state, handle complex logic - Input/Output: Schema-validated, supports Python expressions with $ syntax ### Sessions - Definition: Stateful conversation contexts between users and agents - Use: Real-time interaction, history tracking, continuous dialogue - Features: Pausing, resuming, maintaining context across interactions ### Tools - Types: - User-defined functions: Custom functions requiring client execution - System tools: Built-in operations for accessing Julep APIs - Integration tools: Pre-built connectors to external services - API Call tools: Direct HTTP requests to external endpoints - Integration Categories: Communication, Search, Media processing, Web automation ### Technical Architecture - API Layer: RESTful endpoints, authentication, rate limiting - Task Engine: Distributed processing, state management, parallel execution - Document Store: Vector database for semantic search, document indexing - Security: API key auth, data encryption, access controls ## Documentation Navigation - Introduction: Basic concepts, installation, quickstart - Core Concepts: Detailed explanations of each main component - Tutorials: Practical examples and walkthroughs - Advanced: Architecture details, agentic patterns, complex workflows - Integrations: Descriptions of supported external tools and services - SDKs: Python and Node.js client libraries ## Developer Workflows - CLI Usage: Project structure, commands, configuration - Project Management: Initialization, synchronization, execution - Templates: Available starter templates for common use cases - Development Flow: Edit locally, sync to server, run and monitor ## Integration Categories - Communication & Data: Email, Weather API - Media & File Processing: LlamaParse, FFmpeg, Cloudinary, Unstructured - Search: Arxiv, Algolia, Brave, Wikipedia - Web & Browser: BrowserBase, Spider, Remote Browser ## Development Resources - Discord Community: https://discord.gg/p4c7ehs4vD - GitHub Repo: https://github.com/julep-ai/julep - Documentation Site: https://docs.julep.ai/ - Support Email: developers@julep.ai ================================================ FILE: documentation/FAQ.mdx ================================================ --- title: 'FAQ' description: 'Frequently Asked Questions about Julep Platform' icon: 'question' --- # Julep Platform FAQ This comprehensive FAQ document covers all aspects of the Julep platform, from architecture to troubleshooting. The information is organized by category for easy navigation. ## Table of Contents 1. [Architecture & System Design](#architecture--system-design) 2. [Data Model & Storage](#data-model--storage) 3. [Task Execution & Workflow](#task-execution--workflow) 4. [Agents API](#agents-api) 5. [Worker System & Integration](#worker-system--integration) 6. [Development & Deployment](#development--deployment) 7. [Performance & Optimization](#performance--optimization) 8. [Security & Compliance](#security--compliance) 9. [Advanced Use Cases & Patterns](#advanced-use-cases--patterns) 10. [Troubleshooting & Common Issues](#troubleshooting--common-issues) --- ## Architecture & System Design ### Q: What is the overall system architecture of Julep, including all core components and their interactions? Julep is a distributed system built on a microservices architecture designed to orchestrate complex AI workflows. The main components include: - **Client Applications**: Initiate requests to the Julep system - **Gateway**: Entry point for all API requests, handles authentication and load balancing (implemented using Traefik) - **Agents API**: Provides REST endpoints for managing agents, tasks, sessions, and documents; initiates workflows in Temporal - **Temporal Workflow Engine**: Orchestrates durable workflow execution, retries, and state management - **Worker System**: Executes workflows and activities defined in Temporal by polling for tasks - **LiteLLM Proxy**: Provides a unified interface for interacting with various LLM providers - **Memory Store**: Provides persistent storage using PostgreSQL/TimescaleDB for relational data and vector embeddings - **Integration Service**: Enables connections with external tools and APIs ### Q: How does Julep handle distributed task execution and what role does Temporal play in the architecture? Julep handles distributed task execution primarily through the Temporal Workflow Engine: - **Workflow Orchestration**: Temporal ensures durable execution of workflows, handling retries and maintaining state across failures - **Task Queues**: The Agents API initiates workflows by sending requests to Temporal, which places them on task queues like `julep-task-queue` - **Worker Execution**: Workers poll Temporal for tasks and execute activities like LLM calls, tool operations, and data interactions - **State Management**: Temporal persists workflow execution state in PostgreSQL, ensuring long-running processes can recover from failures ### Q: What are the key design decisions behind separating agents-api, memory-store, integrations-service, and other components? The separation follows microservices principles: - **Modularity and Independent Scaling**: Each service can be developed, deployed, and scaled independently - **Separation of Concerns**: Each component handles specific functionalities: - `agents-api`: Manages agent definitions, tasks, sessions, and orchestrates workflows - `memory-store`: Handles all data persistence including relational data and vector embeddings - `integrations-service`: Provides standardized interface for external tool usage - `llm-proxy`: Centralizes LLM interactions with a unified API - **Resilience**: Failures in one service are isolated from others - **Technology Flexibility**: Different services can use different technologies if needed ### Q: How does the gateway component route requests between different services? The Gateway component uses Traefik and routes requests based on defined rules: - Requests to `/api/*` are routed to the Agents API service - Requests to `/tasks-ui/*` go to the Temporal UI service - `/v1/graphql` requests are directed to the Hasura service - In multi-tenant setups, it enforces JWT-based authentication and forwards `X-Developer-Id` headers for resource isolation ### Q: What is the role of the blob-store and how does it integrate with S3-compatible storage? The blob-store is used for persistent storage of large data, specifically for Temporal workflow data when `USE_BLOB_STORE_FOR_TEMPORAL` is enabled. It integrates with S3-compatible storage through environment variables: - `S3_ENDPOINT`, `S3_ACCESS_KEY`, and `S3_SECRET_KEY` for connection - `BLOB_STORE_BUCKET` defines the bucket name - `BLOB_STORE_CUTOFF_KB` sets the size threshold for blob storage ### Q: How does the llm-proxy (LiteLLM) handle different language model providers? LiteLLM provides a unified interface to multiple LLM providers: - Supports providers like OpenAI, Anthropic, Gemini, Groq, and OpenRouter - Configuration defined in `litellm-config.yaml` with model names, parameters, and API keys - Handles response patching for consistency (e.g., changing `finish_reason` from "eos" to "stop") - Tracks token usage and costs in PostgreSQL - Implements request caching using Redis and supports parallel forwarding ### Q: What are the scalability patterns and limitations of the current architecture? Julep's architecture supports scalability through: - **Agents API**: Horizontal scaling via multiple instances, configurable with `GUNICORN_WORKERS` - **Worker**: Multiple workers with concurrency control using `TEMPORAL_MAX_CONCURRENT_ACTIVITIES` - **Memory Store**: PostgreSQL connection pooling with `POOL_MAX_SIZE` - **LiteLLM**: Request caching and parallel forwarding - **Temporal**: Durable workflow execution that scales to handle concurrent tasks ### Q: How does Julep ensure high availability and fault tolerance across services? High availability is achieved through: - Temporal's durable execution model with automatic retries - Microservices architecture allowing independent service failures - PostgreSQL for persistent state storage - Worker pools for distributed task execution - Connection pooling and retry mechanisms --- ## Data Model & Storage ### Q: What is the complete data model including relationships between Agents, Tasks, Tools, Sessions, Entries, and Executions? The core entities and their relationships: - **Developer**: Manages Agents, Users, and owns Tasks - **Agent**: Has Tasks, defines Tools, owns Docs, participates in Sessions - **User**: Owns Docs and participates in Sessions - **Task**: Contains WorkflowSteps and is executed as Executions - **Execution**: Logs Transitions and tracks task execution state - **Session**: Contains Entries (conversation history) - **Entry**: Individual messages within a Session - **Tool**: Capabilities available to Agents - **Doc**: Documents with embeddings for knowledge base All entities use UUIDs for identification and include `developer_id` for multi-tenancy. ### Q: How does the memory-store handle vector embeddings and similarity search? The memory store provides vectorized document storage: - Documents have an `embeddings` field stored in `docs_embeddings_store` table - Supports three search types: - **Vector Search**: `search_docs_by_embedding` for semantic similarity - **Text Search**: `search_docs_by_text` using PostgreSQL full-text search - **Hybrid Search**: `search_docs_hybrid` combining both approaches - Uses cosine similarity for vector comparisons - Implements Maximum Marginal Relevance (MMR) for result diversity ### Q: What PostgreSQL and TimescaleDB features are leveraged for time-series data? While PostgreSQL is the primary database, specific TimescaleDB features are not explicitly detailed in the codebase. The system uses: - Standard PostgreSQL timestamps (`created_at`, `updated_at`) for temporal data - Time-based filtering in queries (e.g., `list_entries` with date ranges) - No explicit TimescaleDB-specific features documented ### Q: How are agent instructions and task definitions stored and versioned? - **Agent Instructions**: Stored as `string` or `array[string]` in the Agent entity - **Task Definitions**: Stored as Task entities with fields like `name`, `description`, `input_schema`, `main` (workflow steps), and `tools` - **Versioning**: Handled through UUID changes - altering a UUID creates a new entity while preserving the original - Timestamps (`created_at`, `updated_at`) provide implicit version tracking ### Q: What is the schema for storing conversation history and context? Conversation history uses two main entities: - **Session**: Contains `id`, `user`, `agent`, `situation` (context), `system_template`, and `metadata` - **Entry**: Contains `id`, `session_id`, `role` (user/assistant/system), `content` (string or JSON), `source`, and `timestamp` - Sessions group entries and maintain context across conversations ### Q: How does Julep handle data partitioning and archiving for long-running agents? The codebase does not contain explicit information about data partitioning or archiving strategies. The system uses: - Multi-tenancy through `developer_id` filtering - Pagination support for large datasets - Time-based filtering capabilities - No documented automatic archiving policies ### Q: What are the indexing strategies for optimizing query performance? Indexing strategies include: - Trigram indexes for text search (indicated by `trigram_similarity_threshold` parameter) - Vector indexes for embedding similarity searches - Document chunking and embedding storage for efficient retrieval - Use of prepared statements for query optimization --- ## Task Execution & Workflow ### Q: How does the TaskExecutionWorkflow handle complex multi-step operations? The TaskExecutionWorkflow orchestrates multi-step operations by: - Processing different WorkflowStep types through dedicated handlers - Managing state transitions between steps - Integrating with Temporal for durability and reliability - Using `handle_step` method to process each step type - Evaluating expressions within steps using `eval_step_exprs` ### Q: What are all the possible workflow step types and their configurations? **Basic Steps:** - **PromptStep**: Sends prompts to LLMs and handles responses - **ToolCallStep**: Executes tool calls (functions, integrations, APIs, system operations) - **EvaluateStep**: Evaluates expressions and returns results - **SetStep**: Sets values in execution state - **GetStep**: Retrieves values from execution state - **LogStep**: Logs messages during execution - **ReturnStep**: Returns a value and completes workflow - **ErrorWorkflowStep**: Raises an error and fails the workflow - **SleepStep**: Pauses execution for specified duration - **WaitForInputStep**: Pauses for external input **Control Flow Steps:** - **IfElseWorkflowStep**: Conditional branching based on condition - **SwitchStep**: Multi-way branching based on case evaluation - **ForeachStep**: Iterates over collections - **MapReduceStep**: Maps function over items with optional parallelism - **YieldStep**: Yields execution to another workflow - **ParallelStep**: Executes steps in parallel (not yet implemented) ### Q: How does the state machine handle transitions between different execution states? The state machine tracks execution through: - **States**: `queued`, `starting`, `running`, `succeeded`, `failed`, `cancelled` - **Transitions**: Record state changes with types: `init`, `step`, `finish`, `error`, `cancelled` - Each transition includes `output`, `current`, and `next` workflow steps - Transitions stored in `execution_transitions` table - `create_execution_transition` function records all state changes ### Q: What happens when a task fails midway through execution? When a task fails: - Execution status transitions to "failed" - An "error" transition is created with the error message - The `error` field of the Execution object is populated - The system tracks the failure point and error details - Workflow implements retry policies for retryable errors - Non-retryable errors cause immediate failure ### Q: How are conditional branches and loops implemented in workflows? **Conditional Branches:** - `IfElseWorkflowStep`: Evaluates condition and executes "then" or "else" branch - `SwitchStep`: Multi-way branching with multiple cases **Loops:** - `ForeachStep`: Iterates over collections processing each item - `MapReduceStep`: Maps functions over collections with optional parallel execution These are processed by dedicated handlers like `_handle_IfElseWorkflowStep` and `_handle_ForeachStep`. ### Q: What is the retry and error handling strategy for failed steps? - **Error Classification**: Errors classified as retryable or non-retryable - **Retry Policy**: `DEFAULT_RETRY_POLICY` applied to retryable errors - **Max Retries**: Workflow fails if max retries exceeded - **Error Transitions**: "error" transitions record failure states - **Last Error Tracking**: `last_error` attribute stores recent errors ### Q: How does Julep handle long-running tasks and prevent timeouts? Julep uses Temporal's timeout mechanisms: - `schedule_to_close_timeout` and `heartbeat_timeout` for activities - Activity and workflow heartbeats ensure progress tracking - Large data handling via `RemoteObject` pattern to optimize memory - Blob storage for data exceeding size thresholds ### Q: What are the mechanisms for task cancellation and cleanup? - **Workflow Cancellation**: Handled through Temporal's cancellation features - **State Management**: Execution can transition to "cancelled" state - **Persistence**: All transitions persisted for state restoration - **Cleanup**: Status updates and transition history provide cleanup context --- ## Agents API ### Q: What are all the endpoints available in the Agents API and their use cases? The Agents API provides these endpoints: - `/agents`: Create, retrieve, update, delete agent definitions - `/tasks`: Define and execute tasks, retrieve workflow definitions - `/sessions`: Manage conversational sessions and conversation history - `/executions`: Track task executions and monitor status - `/docs`: Handle document storage, search, and retrieval with embeddings - `/tools`: Define and manage agent tools - `/users`: Manage user accounts and authentication - `/responses`: OpenAI-compatible interface for LLM responses ### Q: How does session management work and what data is maintained per session? Session management maintains conversation state: - **Session Data**: `id`, `agent_id`, `user_id`, `created_at`, situation context - **Entries**: Individual conversation turns with role, content, and timestamps - Sessions created with `julep.sessions.create` linking agent and user - Messages added via `julep.sessions.chat` with role and content - Pagination support for retrieving conversation history ### Q: What are the different types of tools an agent can use and how are they configured? Tool types available: - **Web Search Tool**: Performs web searches with domain filtering - **Function Tools**: OpenAI-compatible function calling format - **System Tools**: Internal Julep resources (e.g., `create_julep_session`, `session_chat`) - **Integration Tools**: External services (e.g., BrowserBase, email providers) Configuration includes name, type, description, and type-specific parameters. ### Q: How does document storage and retrieval work for agent knowledge bases? Documents (`Doc` entities) provide agent knowledge: - Stored in PostgreSQL with embeddings in `docs_embeddings_store` - Owned by either Agent or User - Three search methods: text-based, embedding-based, hybrid - Document operations: create, retrieve, list, search - Supports metadata filtering and pagination ### Q: What are the authentication and authorization mechanisms for the API? Two authentication modes: **Single-Tenant Mode:** - Uses `AGENTS_API_KEY` for authentication - Default developer ID assumed - `X-Auth-Key` header required **Multi-Tenant Mode:** - JWT-based authentication via Gateway - `X-Developer-Id` header for resource isolation - Developer-specific data access control - JWT must contain sub, email, exp, iat claims ### Q: How are agent instructions processed and validated? - Instructions stored as string or array of strings - Validated by Pydantic models from OpenAPI schemas - Included in agent's `default_system_template` - Dynamic rendering supports both single and array formats - TypeSpec definitions ensure consistent structure ### Q: What are the rate limiting and quota management strategies? Rate limiting and quota management are planned features: - `max_free_sessions` and `max_free_executions` environment variables defined - Implementation details not yet available - Listed as future enhancement in roadmap ### Q: How does the API handle streaming responses for real-time interactions? Streaming support is currently planned but not implemented: - Open Responses API designed for OpenAI compatibility - `stream` configuration option available - Full streaming implementation pending --- ## Worker System & Integration ### Q: How does the worker system integrate with different LLM providers? The Worker integrates with LLMs through LiteLLM Proxy: - LiteLLM acts as unified interface to various providers - Supports OpenAI, Anthropic, Gemini, Groq, OpenRouter - Worker makes LLM calls via LiteLLM Proxy - Configuration in `litellm-config.yaml` - Handles authentication, routing, and caching ### Q: What are the system activities available and how do they work? System activities include: - **LLM Calls**: Through LiteLLM Proxy - **Tool Operations**: Via Integration Service - **Data Operations**: Reading/writing to Memory Store - **PG Query Step**: Direct PostgreSQL queries - Activities invoked with `StepContext` and appropriate definitions ### Q: How does Julep handle tool execution and external API calls? Tool execution handled by Integration Service: - **Integration Tools**: Connect to external services with provider/method specs - **System Tools**: Operate on internal Julep resources - `ToolCallStep` defines tool and arguments - Worker invokes Integration Service for execution - Examples: email sending, browser automation, document search ### Q: What is the sandboxing mechanism for Python expression evaluation? Python expression sandboxing: - `validate_py_expression` function validates expressions - Identifies expressions starting with `$`, `_`, or containing `{{` - Checks for syntax errors, undefined names, unsafe operations - Limited scope with allowed names: `_`, `inputs`, `outputs`, `state`, `steps` - Prevents dunder attribute access and unapproved function calls ### Q: How are integration credentials managed and secured? Integration credentials managed through: - Credentials stored in `setup` parameters of tool definitions - API keys provided in task definition YAML - Environment variables for service-level credentials - No explicit encryption details documented ### Q: What are the patterns for building custom integrations? Custom integrations defined as Tool entities: - Type set to `integration` - Specify `provider`, `method`, and `setup` parameters - Include provider-specific configuration (API keys, endpoints) - Used within Task workflows as ToolCallStep - Examples: Browserbase, email providers, Cloudinary ### Q: How does the browser automation integration work? Browser automation workflow: 1. Create Julep session for AI agent 2. Create browser session using Browserbase 3. Store session info (browser_session_id, connect_url) 4. Perform actions via `perform_browser_action` tool 5. Interactive loop with agent planning and execution 6. Screenshot capture for visual feedback ### Q: What are the performance optimizations for worker pools? Worker performance optimizations: - `TEMPORAL_MAX_CONCURRENT_ACTIVITIES` controls concurrency - `TEMPORAL_MAX_ACTIVITIES_PER_SECOND` limits activity rate - `GUNICORN_WORKERS` for integration service scaling - Connection pooling and timeout configurations - LiteLLM caching and parallel forwarding --- ## Development & Deployment ### Q: What is the recommended development workflow for building with Julep? Development workflow uses Docker Compose with watch mode: - Changes in source directories trigger automatic sync/restart - `agents-api`: Watches `./agents_api` and `gunicorn_conf.py` - `worker`: Watches `./agents_api` and `Dockerfile.worker` - `integrations`: Watches its directory for changes - Lock file or Dockerfile changes trigger rebuilds ### Q: How should developers set up their local environment for testing? Local setup primarily uses Docker: 1. Create project directory: `mkdir julep-responses-api` 2. Download and edit `.env` file 3. Download Docker Compose file 4. Run containers: `docker compose up --watch` 5. Verify with `docker ps` Alternative CLI installation available via `npx` or `uvx`. ### Q: What are the deployment options and best practices? Deployment options: **Single-Tenant Mode:** - All users share context - `SKIP_CHECK_DEVELOPER_HEADERS=True` - Requires `AGENTS_API_KEY` **Multi-Tenant Mode:** - Isolated resources per developer - `AGENTS_API_MULTI_TENANT_MODE: true` - JWT validation via Gateway **Best Practices:** - Use environment variables for configuration - Implement layered security (API keys, JWT tokens) - Enable independent component scaling - Configure appropriate connection pools ### Q: How does the TypeSpec code generation work and when to use it? TypeSpec code generation: - TypeSpec files define data models (e.g., `models.tsp`) - `scripts/generate_openapi_code.sh` generates code - Creates Pydantic models and OpenAPI schemas - Edit TypeSpec files, not generated code - Regenerate after model changes ### Q: What are the testing strategies for agents and workflows? Testing strategies include: - Unit tests for entities (agents, docs, sessions, etc.) - Integration tests simulating scenarios - Workflow tests using `unittest.mock.patch` - Test fixtures for consistent data - Ward framework for test organization ### Q: How to debug failed task executions and trace through workflows? Debugging approach: - Check Execution status and error field - List transitions to trace execution flow - Examine transition outputs and types - Use LogStep for workflow logging - Error transitions indicate failure points ### Q: What are the monitoring and observability features? Limited monitoring information available: - Execution state and transition logging - No explicit monitoring features documented - Prometheus and Grafana mentioned in architecture - Detailed observability features not specified ### Q: How to handle database migrations in production? Database migration information not explicitly documented: - PostgreSQL used as primary database - Migration files exist in memory-store - Production migration process not detailed --- ## Performance & Optimization ### Q: What are the performance characteristics of different operations? Performance characteristics: - MapReduceStep supports sequential or parallel execution - API response times reduced by 15% (per changelog) - Parallel processing improves collection operations - Connection pooling optimizes database access - Caching planned for future optimization ### Q: How does Julep handle concurrent agent executions? Concurrent execution handled through: - TaskExecutionWorkflow with Temporal orchestration - Worker pools for distributed execution - State isolation per execution - Temporal manages workflow concurrency - StepContext provides execution isolation ### Q: What are the caching strategies employed across the system? Current caching: - LiteLLM Proxy implements request caching - Redis used for LiteLLM cache storage - Web Search Tool has result caching - Advanced caching mechanisms planned ### Q: How to optimize memory usage for large conversation histories? Memory optimization strategies: - Pagination with `limit` and `offset` parameters - Maximum limit of 1000 entries per request - `search_window` for time-based filtering (default 4 weeks) - Token counting per entry - RemoteObject pattern for large data ### Q: What are the bottlenecks in the current architecture? Potential bottlenecks: - Large data retrieval without proper pagination - Complex database queries on large tables - Multi-tenancy query filtering overhead - Temporal workflow state management at scale - JSON aggregation in history queries ### Q: How does connection pooling work for database access? Connection pooling configuration: - `connection_lifetime`: 600 seconds - `idle_timeout`: 180 seconds - `max_connections`: 50 - `retries`: 1 - `use_prepared_statements`: true - `POOL_MAX_SIZE` configurable (default: CPU count, max 10) ### Q: What are the best practices for writing efficient task definitions? Best practices: - Define clear input schemas - Use modular workflow steps - Implement proper error handling - Avoid infinite loops in recursive patterns - Use appropriate tool types - Monitor execution status and transitions - Leverage parallel processing where applicable --- ## Security & Compliance ### Q: How does Julep handle sensitive data and ensure data privacy? Data privacy ensured through: - Multi-tenant architecture with resource isolation - Developer-specific data access via `developer_id` - `X-Developer-Id` header for request routing - Separate data storage per developer ### Q: What are the security measures for multi-tenant deployments? Multi-tenant security: - JWT-based authentication at Gateway - JWT validation with required claims (sub, email, exp, iat) - `X-Developer-Id` header enforcement - Developer ID verification against database - Resource isolation by developer ### Q: How are API keys and secrets managed throughout the system? Secret management: - Environment variables for service credentials - API keys in tool setup parameters - `AGENTS_API_KEY` and `JWT_SHARED_KEY` for auth - LLM provider keys as environment variables - No explicit encryption details provided ### Q: What audit logging capabilities are available? Audit logging: - Currently limited implementation - Listed as planned feature in roadmap - Usage tracking for LLM calls (tokens and costs) - Comprehensive audit logging pending ### Q: How does Julep ensure secure execution of user-provided code? Secure code execution through: - Task-based workflow system with YAML definitions - Controlled tool invocation with explicit permissions - Python expression validation - Structured workflow steps - No arbitrary code execution ### Q: What are the network security considerations for deployment? Network security: - API key authentication for single-tenant - JWT tokens for multi-tenant - Gateway-level authentication - HTTPS/TLS support implied - Service-to-service communication within network --- ## Advanced Use Cases & Patterns ### Q: What are examples of complex multi-agent workflows? **Browser Use Assistant:** - Session initialization - Browser session creation - Interactive agent-browser loop - Screenshot feedback - Goal-oriented task completion **Email Assistant:** - Email input processing - Query generation - Documentation search - Response generation - Automated email sending **Video Processing:** - Natural language instructions - Cloudinary integration - Transformation generation - Video processing execution ### Q: How to implement human-in-the-loop patterns? Human-in-the-loop not explicitly documented: - `WaitForInputStep` provides pause mechanism - Session-based interactions allow user input - No dedicated approval workflow patterns - Can be built using existing primitives ### Q: What are the patterns for building conversational agents with memory? Conversational memory patterns: - Session and Entry entities maintain history - `previous_response_id` links responses - Session metadata and custom templates - Persistent conversation state - Context maintained across interactions ### Q: How to implement custom tool integrations? Custom tool implementation: 1. Define Tool entity with type `integration` 2. Specify provider, method, setup parameters 3. Use `@function_tool` decorator for functions 4. Add to agent's tool list 5. Invoke via ToolCallStep in workflows ### Q: What are the best practices for handling structured data extraction? Structured data handling: - Tools accept and return structured JSON - Evaluate steps process tool outputs - Response objects contain structured data - Pydantic models ensure data validation - TypeSpec defines consistent schemas ### Q: How to build agents that can learn and adapt over time? Learning/adaptation features limited: - Agent instructions can be updated - Metadata field allows dynamic information - No explicit learning mechanisms - Adaptation through instruction updates - Memory through conversation history ### Q: What are the patterns for building agents that can collaborate? Agent collaboration not documented: - Current model focuses on single agents - No inter-agent communication patterns - Sessions link one agent to users - Collaboration would require custom implementation --- ## Troubleshooting & Common Issues ### Q: What are the most common errors and how to resolve them? **Python Expression Errors:** - Syntax errors: Fix malformed expressions - Undefined names: Use allowed names only - Unsafe operations: Avoid dunder attributes - Runtime errors: Check for division by zero - Unsupported features: Avoid lambdas, walrus operator **Schema Validation Errors:** - Pydantic validation failures - Adjust JSON to match expected schema **Integration Errors:** - ApplicationError for missing tools - Verify tool definitions and availability ### Q: How to debug issues with task execution? Debugging steps: 1. Check Execution status field 2. Review error messages in Execution object 3. List and examine transitions 4. Check transition outputs and types 5. Use LogStep for additional logging 6. Trace workflow step progression ### Q: What are the common performance problems and solutions? Performance issues and solutions: - **Large collections**: Use MapReduceStep parallelism - **Rate limits**: Implement SleepStep delays - **Memory usage**: Paginate large result sets - **Database queries**: Ensure proper indexing - **Concurrent execution**: Configure worker pools ### Q: How to handle edge cases in agent conversations? Edge case handling: - `IfElseWorkflowStep` for conditional logic - `SwitchStep` for complex branching - `WaitForInputStep` for user input - `ErrorWorkflowStep` for invalid states - Proper error handling in workflows ### Q: What are the known limitations and workarounds? **Expression Limitations:** - No set comprehensions, lambdas, walrus operator - Use alternative Python constructs **Backwards Compatibility:** - Old expression formats supported - Use `$` prefix for consistency **ParallelStep Not Implemented:** - Use MapReduceStep with parallelism instead **Streaming Not Available:** - Planned feature, not yet implemented **Rate Limiting:** - Basic environment variables defined - Full implementation pending --- ## Additional Resources - [System Architecture Wiki](https://deepwiki.com/wiki/julep-ai/julep#2) - [Data Model Wiki](https://deepwiki.com/wiki/julep-ai/julep#2.2) - [TaskExecutionWorkflow Wiki](https://deepwiki.com/wiki/julep-ai/julep#3) - [Workflow Steps Wiki](https://deepwiki.com/wiki/julep-ai/julep#3.1) This FAQ is generated from the Julep platform documentation and codebase analysis. For the most up-to-date information, please refer to the official Julep documentation and repository. ================================================ FILE: documentation/README.md ================================================ # Julep Mintlify Documentation ## Development Install the [Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the documentation changes locally. To install, use the following command ``` npm i -g mintlify ``` Run the following command at the root of your documentation (where mint.json is) ``` mintlify dev ``` ### Troubleshooting - Mintlify dev isn't running - Run `mintlify install` it'll re-install dependencies. - Page loads as a 404 - Make sure you are running in a folder with `mint.json` ================================================ FILE: documentation/advanced/agentic-patterns.mdx ================================================ --- title: 'Agentic Patterns' description: 'Learn about common patterns and best practices for building Julep agents' icon: 'sitemap' --- ## Overview This guide covers common patterns and best practices for building effective Julep agents, inspired by a blog written by Anthropic on [Building effective agents](https://www.anthropic.com/research/building-effective-agents). ## Core Workflow Patterns ### 1. Prompt Chaining Break tasks into sequential steps, where each step’s output feeds the next. Can be used for: - Content generation and subsequent checks - Translation/localization in multiple stages - Ensuring quality between discrete transformations ![Prompt Chaining Workflow](../assets/agentic-patterns/prompt-chaining-workflow.png "Prompt Chaining Workflow") **Example implementation:** ```yaml main: # Step 1: Generate initial content - prompt: role: system content: >- $ f'''Generate marketing copy for product X based on the following: target_audience: {_.audience} product_features: {_.features} keywords: {_.seo_keywords}''' unwrap: true # Step 2: Quality check gate - evaluate: quality_check: $ _.content # Step 3: Translation - prompt: role: system content: Translate the approved content to Spanish unwrap: true ``` ### 2. Routing Pattern Act as a “traffic controller” by detecting request types and sending them to the correct handler. Ideal when inputs are diverse or require specialized expertise. Steps generally include: 1. Classification of incoming data 2. Routing to handler modules 3. Specialized processing 4. (Optional) Aggregation of results ![Routing Workflow](../assets/agentic-patterns/routing-workflow.png "Routing Workflow") **Example implementation:** ```yaml [expandable] main: # Classification step - prompt: role: system content: Classify the input query type unwrap: true # Route based on classification - switch: - case: $ _.classification == "technical_support" then: - tool: handle_technical arguments: ... - case: $ _.classification == "billing" then: - tool: handle_billing arguments: ... - case: $ _.classification == "general" then: - tool: handle_general arguments: ... ``` ### 3. Parallelization Pattern Execute subtasks concurrently by either dividing the workload (sectioning) or collecting multiple perspectives (voting). Keys to consider: • Parallel processes for performance or redundancy • Syncing results and handling errors • Aggregating diverse outputs ![Parallelization Workflow](../assets/agentic-patterns/parallelization-workflow.png "Parallelization Workflow") **Example implementations:** 1. Sectioning: ```yaml [expandable] tools: - name: aggregate_results type: ... # depends on the specific needs # Custom workflow to run a subtask run_subtask: - .... # Main workflow main: - prompt: role: system content: > $ f'''Break this task into multiple subtasks. Here is the task: {_.task}''' unwrap: true - over: $ _.subtasks do: - workflow: run_subtask arguments: ... - tool: aggregate_results arguments: results: $ _ ``` 2. Voting: ```yaml [expandable] tools: - name: perform_voting description: Perform voting on the results of running the task instances, and return the majority best result. type: ... # depends on the specific needs # Custom workflow to run a subtask run_subtask: - .... # Main workflow main: - over: $ _.main_tasks do: - workflow: run_subtask # Run the same task multiple times (given that the `run_subtask` workflow is non-deterministic) arguments: ... - tool: perform_voting arguments: results: $ _ - evaluate: final_result: $ _ ``` ### 4. Orchestrator-Workers Pattern Use a central “orchestrator” that delegates subtasks to multiple “worker” agents and integrates their outputs. Best for: - Large or dynamic multi-step tasks - Coordinating various specialized capabilities - Flexible task distribution ![Orchestrator-Workers Workflow](../assets/agentic-patterns/orchestrator-workers-workflow.png "Orchestrator-Workers Workflow") **Example implementation:** ```yaml main: # Orchestrator planning - prompt: role: system content: $ f'''Break down the task into subtasks. Here is the task: {_.task}''' unwrap: true # Worker delegation - foreach: in: $ _.subtasks do: tool: assign_worker arguments: task: $ _ ``` ### 5. Evaluator-Optimizer Pattern Create iterative feedback loops to refine outputs until they meet preset criteria. Suitable for: • Content refinement • Code reviews • Detailed document enhancements General flow: 1. Generate an initial result 2. Evaluate against criteria 3. Provide improvement feedback 4. Optimize/retry until goals are met ![Evaluator-Optimizer Workflow](../assets/agentic-patterns/evaluator-optimizer-workflow.png "Evaluator-Optimizer Workflow") **Example implementation:** ```yaml [expandable] tools: - name: score_content description: Score the content based on the criteria. Returns a json object with a score between 0 and 1, and a feedback string. type: function function: parameters: type: object properties: content: type: string description: Content to score # Subworkflow to evaluate content evaluate_content: - tool: score_content arguments: content: $ _.content - if: $ _.score < 0.5 # If the content does not meet the criteria, improve it then: - workflow: improve_content arguments: content: $ steps[0].input.content # steps[0].input is the main input of this workflow feedback: $ _.feedback # _ is the output of the score_content tool call else: evaluate: final_content: $ steps[0].input.content # Subworkflow to improve content improve_content: - prompt: role: system content: $ f'''Improve the content based on the feedback. Here is the feedback: {_.feedback}''' unwrap: true - workflow: evaluate_content arguments: content: $ _ main: # Initial generation - prompt: role: system content: $ f'''Generate initial content. Here is the task: {_.task}''' unwrap: true # Evaluation loop - loop: while: $ not _.meets_criteria do: - tool: evaluate_content - tool: improve_content ``` **Explanation:** 1. The `evaluate_content` subworkflow: - Takes content as input and scores it using a scoring tool - If the score is below 0.5, it triggers the improvement workflow - Uses a special variable (`_`) to manage content and feedback between workflows - Returns the final content once quality criteria are met 2. The `improve_content` subworkflow: - Receives content and feedback from the evaluation - Uses an LLM to improve the content based on specific feedback - Automatically triggers another evaluation cycle by calling evaluate_content The main workflow ties these together by: - Generating initial content from a task description - Running a continuous loop that alternates between evaluation and improvement - Only completing when content meets the defined quality criteria This creates a powerful feedback loop where content is repeatedly refined based on specific feedback until it reaches the desired quality level. The pattern is particularly useful for tasks requiring high accuracy or quality, such as content generation, code review, or document analysis. ## Best Practices
  • **1. Minimal Steps**: Use minimal steps and only add complexity when it clearly improves results.
  • **1. Documentation**: Provide clear documentation, examples, and usage guidelines for each tool.
  • **1. Guardrails**: Include feedback loops, define stopping conditions, and surface potential issues.
  • **1. Validation**: Thoroughly test in controlled environments and measure against success criteria.
  • **1. Checkpoints**: Establish checkpoints for approval, ensure transparency, and maintain easy-to-audit workflows.
## Conclusion These patterns represent proven approaches from production implementations. Choose and adapt them based on your specific use case requirements and complexity needs. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/architecture-deep-dive.mdx ================================================ --- title: 'Architecture Deep Dive' description: 'Understand the core architecture and components of Julep' icon: 'brain' --- ## Overview Think of Julep as a platform that combines both client-side and server-side components to help you build advanced AI agents. Here's a mental model to help you understand it: 1. Your Application Code - Use the Julep SDK in your application to define agents, tasks, and workflows - SDK provides functions and classes for easy setup and management of components 2. Julep Backend Service - SDK communicates with Julep backend over the network - Backend handles task execution, session state, document storage, and workflow orchestration 3. Integration with Tools and APIs - Integrate external tools and services within your workflows - Backend facilitates integrations for web searches, database access, third-party API calls, and more To help you visualize this, here's a diagram: ## Core Components

The main orchestrator of your application, backed by foundation models like GPT4 or Claude.

Users can be associated with sessions and are used to scope memories formed by agents.

The main workhorse for Julep apps.

Programmatic interfaces that foundation models can "call" with inputs.

Collections of text snippets indexed into a vector database.

Github Actions-style workflows for complex operations.

Encrypted key-value pairs for securely storing sensitive information like API keys and credentials.

## Infrastructure Components

The document store provides a vector database for semantic search along with a document management system. It supports various file types and handles automatic indexing and retrieval of documents.

The task execution engine handles distributed task processing, state management, error handling with retries, and supports parallel execution of tasks.

The secrets store provides encrypted storage for sensitive information like API keys, credentials, and tokens. It uses AES-256 encryption and developer-scoped access controls to securely manage confidential data.

The API layer provides RESTful API endpoints, SDK support, authentication and authorization capabilities, and handles rate limiting and quotas.

## Data Flow

The data flow in Julep is divided into three main components, each handling specific aspects of request processing and response generation.

- SDK or API calls initiate requests - Authentication and validation - Request routing - Task decomposition - Step execution - State management - Tool integration - Result aggregation - Error handling - Client notification - State persistence ## Security
  1. **1.** API key-based access
  2. **2.** Role-based permissions
  3. **3.** Session management
  4. **4.** Token validation
  1. **1.** Encryption at rest
  2. **2.** Secure communication
  3. **3.** Data isolation
  4. **4.** Access controls
  5. **5.** Encrypted secrets
  1. **1.** Audit logging
  2. **2.** Performance metrics
  3. **3.** Error tracking
  4. **4.** Usage analytics
## Conclusion The modular design enables you to customize and extend functionality as needed, while the security-first approach ensures your data and operations remain protected. Whether you're building a simple chatbot or a complex AI workflow, this architecture provides the foundation you need. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/chat.mdx ================================================ --- title: 'Chat Features in Julep' description: 'Learn about the robust chat system and its various features for dynamic interaction with agents' icon: 'message-dots' --- ## Overview Julep provides a robust chat system with various features for dynamic interaction with agents. Here's an overview of the key components and functionalities. ## Features The chat API allows for the use of tools, enabling the agent to perform actions or retrieve information during the conversation. You can specify different agents within the same session using the `agent` parameter in the chat settings. Control the output format, including options for JSON responses with specific schemas. Configure how the session accesses and stores conversation history and memories. The API returns information about documents referenced during the interaction, useful for providing citations or sources.

Prerequisites for Using Chat API

## Input Structure - **Messages**: An array of input messages representing the conversation so far. - **Tools**: (Advanced) Additional tools provided for this specific interaction. - **Tool Choice**: Specifies which tool the agent should use. - **Memory Access**: Controls how the session accesses history and memories.(`recall` parameter) - **Additional Parameters**: Various parameters to control the behavior of the chat. You can find more details in the [Additional Parameters](#additional-parameters) section. Here's an example of how a typical message object might be structured in a chat interaction: ```python Python """ Attributes for the Message object: role (Literal["user", "assistant", "system", "tool"]): The role of the message sender. tool_call_id (str | None): Optional identifier for a tool call associated with this message. content (Annotated[str | list[str] | list[Content | ContentModel7 | ContentModel] | None, Field(...)]): The main content of the message, which can be a string, a list of strings, or a list of content models. name (str | None): Optional name associated with the message. tool_calls (list[ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022] | None): List of tool calls generated during the message creation, if any. """ # Example of a simple message structure messages = [{"role": "user", "content": "Your query here"}] ```

This object represents a message in the chat system, detailing the structure and types of data it can hold.

## Additional Parameters | Parameter | Type | Description | Default | |---------------------|---------|--------------------------------------------------|----------| | `stream` | `bool` | Indicates if the server should stream the response as it's generated. | `False` | | `stop` | `list[str]` | Up to 4 sequences where the API will stop generating further tokens. | `[]` | | `seed` | `int` | If specified, the system will make a best effort to sample deterministically for that particular seed value. | `None` | | `max_tokens` | `int` | The maximum number of tokens to generate in the chat completion. | `None` | | `logit_bias` | `dict[str, float]` | Modify the likelihood of specified tokens appearing in the completion. | `None` | | `response_format` | `str` | Response format (set to `json_object` to restrict output to JSON). | `None` | | `agent` | `UUID` | Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) | `None` | | `repetition_penalty`| `float` | Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | `None` | | `length_penalty` | `float` | Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. | `None` | | `min_p` | `float` | Minimum probability compared to leading token to be considered. | `None` | | `frequency_penalty` | `float` | Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | `None` | | `presence_penalty` | `float` | Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | `None` | | `temperature` | `float` | What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. | `None` | | `top_p` | `float` | An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. | `1.0` | | `recall` | `bool` | Whether to use the document (RAG) search or not | `True` | | `save` | `bool` | Whether this interaction should be stored in the session history or not | `True` | | `remember` | `bool` | DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) | `False` | | `model` | `str` | The model to use for the chat completion. | `None` | | `metadata` | `dict[str, Any]` | Custom metadata that can be passed to the system template for dynamic behavior. See [System Templates](/advanced/system-templates) for details. | `None` | | `auto_run_tools` | `bool` | Whether to automatically execute tools and send the results back to the model (requires tools on the agent) | `False` | | `recall_tools` | `bool` | Whether to include tool requests and responses when recalling messages from history | `True` | ## Usage Here's an example of how to use the chat API in Julep using the SDKs: To use the Chat endpint, you always have to create a session first. ```python Python [expandable] # Create a session with custom recall options client.sessions.create( agent=agent.id, user=user.id, recall=True, recall_options={ "mode": "hybrid", # or "vector", "text" "num_search_messages": 4, # number of messages to search for documents "max_query_length": 1000, # maximum query length "alpha": 0.7, # weight to apply to BM25 vs Vector search results (ranges from 0 to 1) "confidence": 0.6, # confidence cutoff level (ranges from -1 to 1) "limit": 10, # limit of documents to return "lang": "en-US", # language to be used for text-only search "metadata_filter": {}, # metadata filter to apply to the search "mmr_strength": 0, # MMR Strength (ranges from 0 to 1) } ) # Chat in the session response = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "Tell me about Julep" } ], recall=True ) print("Agent's response:", response.choices[0].message.content) print("Searched Documents:", response.docs) # Chat with metadata for dynamic system prompts response_with_metadata = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "Help me with Python" } ], metadata={ "language": "Spanish", "expertise_level": "beginner", "custom_instructions": "Use simple examples" } ) # The metadata will be available in the system template as {{metadata.language}}, etc. # Chat with structured JSON response response_json = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "Analyze the sentiment of: 'I love using Julep, it makes AI development so much easier!'" } ], response_format={"type": "json_object"}, # When using response_format, instruct the model to return JSON settings={ "temperature": 0.3 } ) # Response will be valid JSON that can be parsed import json sentiment_data = json.loads(response_json.choices[0].message.content) ``` ```javascript Node.js [expandable] client.sessions.create({ agent: agent.id, user: user.id, recall: true, recall_options: { mode: "hybrid", // or "vector", "text" num_search_messages: 4, // number of messages to search for documents max_query_length: 1000, // maximum query length alpha: 0.7, // weight to apply to BM25 vs Vector search results (ranges from 0 to 1) confidence: 0.6, // confidence cutoff level (ranges from -1 to 1) limit: 10, // limit of documents to return lang: "en-US", // language to be used for text-only search metadata_filter: {}, // metadata filter to apply to the search mmr_strength: 0, // MMR Strength (ranges from 0 to 1) } }); // Chat in the session const response = await client.sessions.chat({ session_id: session.id, messages: [ { role: "user", content: "Tell me about Julep" } ], recall: true }); // Chat with metadata for dynamic system prompts const responseWithMetadata = await client.sessions.chat({ session_id: session.id, messages: [ { role: "user", content: "Help me with Python" } ], metadata: { language: "Spanish", expertise_level: "beginner", custom_instructions: "Use simple examples" } }); // The metadata will be available in the system template as {{metadata.language}}, etc. // Chat with structured JSON response const responseJson = await client.sessions.chat({ session_id: session.id, messages: [ { role: "user", content: "Analyze the sentiment of: 'I love using Julep, it makes AI development so much easier!'" } ], response_format: { type: "json_object" }, // When using response_format, instruct the model to return JSON settings: { temperature: 0.3 } }); // Response will be valid JSON that can be parsed const sentimentData = JSON.parse(responseJson.choices[0].message.content); ``` To learn more about the Session object, check out the [Session](/concepts/sessions) page. Check out the [API reference](/api-reference/sessions/chat) or SDK reference ([Python](/sdks/python/reference#sessions) or [JavaScript](/sdks/nodejs/reference#sessions)) for more details on different operations you can perform on sessions. ## Response - **Content-Type**: `application/json` - **Body**: A `MessageChatResponse` object containing the full generated message(s) - **Content-Type**: `text/event-stream` - **Body**: A stream of `ChatOutputChunk` objects sent as Server-Sent Events (SSE) To enable streaming, set `stream: true` in your chat request: ```python Python from julep import AsyncClient # Streaming requires async client async_client = AsyncClient(api_key="your-api-key") response = await async_client.sessions.chat( session_id=session.id, messages=[{"role": "user", "content": "Tell me a story"}], stream=True ) async for chunk in response: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="") ``` ```javascript Node.js const response = await client.sessions.chat({ session_id: session.id, messages: [{ role: "user", content: "Tell me a story" }], stream: true }); for await (const chunk of response) { process.stdout.write(chunk.choices[0].delta.content); } ``` Streaming is not available when `auto_run_tools=true`. The system will return an error if both options are enabled. Both types of responses include the following fields: - `id`: The unique identifier for the chat response - `choices`: An object of generated message completions containing: - `role`: The role of the message (e.g. "assistant", "user", etc.) - `id`: Unique identifier for the message - `content`: list of actual message content - `created_at`: Timestamp when the message was created - `name`: Optional name associated with the message - `tool_call_id`: Optional ID referencing a tool call - `tool_calls`: Optional list of tool calls made during message generation - `created_at`: When this resource was created as UTC date-time - `docs`: List of document references used for this request, intended for citation purposes - `jobs`: List of UUIDs for background jobs that may have been initiated as a result of this interaction - `usage`: Statistics on token usage for the completion request ## Automatic Tool Calling Julep supports automatic tool execution during chat interactions. This feature allows tools to be executed seamlessly without manual intervention, making conversations more fluid and responsive. ### How It Works 1. **When `auto_run_tools=true`**: - The model identifies when a tool should be used based on the conversation - The tool is automatically executed by Julep's backend - Results are fed back to the model to continue the conversation - The entire process happens in a single API call 2. **When `auto_run_tools=false` (default)**: - The model returns tool call requests in the response - Your application must execute the tools manually - Results need to be sent back in a follow-up message ### Example with Automatic Tool Execution ```python Python # Agent with a weather tool agent = client.agents.create( name="Weather Assistant", tools=[ { "name": "get_weather", "type": "integration", "integration": {"provider": "weather"} } ] ) # Chat with automatic tool execution response = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "What's the weather like in Tokyo and Paris?" } ], auto_run_tools=True # Tools execute automatically ) # The response already includes the weather data print(response.choices[0].message.content) # Output: "In Tokyo, it's currently 22°C with clear skies. # In Paris, it's 15°C with light rain." ``` ```javascript Node.js // Agent with a weather tool const agent = await client.agents.create({ name: "Weather Assistant", tools: [ { name: "get_weather", type: "integration", integration: {provider: "weather"} } ] }); // Chat with automatic tool execution const response = await client.sessions.chat({ session_id: session.id, messages: [ { role: "user", content: "What's the weather like in Tokyo and Paris?" } ], auto_run_tools: true // Tools execute automatically }); // The response already includes the weather data console.log(response.choices[0].message.content); // Output: "In Tokyo, it's currently 22°C with clear skies. // In Paris, it's 15°C with light rain." ``` ### Tool History Management The `recall_tools` parameter controls whether tool calls and their results are included when recalling conversation history: - **`recall_tools=true` (default)**: Tool interactions are preserved in the conversation history - **`recall_tools=false`**: Tool calls and results are excluded from recalled messages This is useful when you want to maintain a cleaner conversation history without the technical details of tool executions. ## Finish Reasons Natural stop point or provided stop sequence reached Maximum number of tokens specified in the request was reached Content was omitted due to a flag from content filters The model called a tool ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/files.mdx ================================================ --- title: 'Files (Multimedia)' description: 'Learn about file handling and management in Julep' icon: 'file-circle-plus' --- ## Overview Julep’s Files feature supports uploading, storing, retrieving, and integrating files across Julep components. It handles various file types and formats. ## File Properties Each file in Julep has the following properties: ```typescript id: string; // Unique identifier name: string; // Name of the file content: string; // Base64 encoded content created_at: string; // Creation timestamp size: number; // File size in bytes hash: string; // File hash for verification description?: string; // Optional description mime_type?: string; // Optional MIME type ``` ## Basic Operations ### Creating Files Here's how you can create files using the SDKs: ```python Python from julep import Julep client = Julep() file = client.files.create( name="example.pdf", content="base64_encoded_content", description="Sample document", mime_type="application/pdf" ) ``` ```javascript Node.js import Julep from '@julep/sdk'; const client = new Julep(); const file = await client.files.create({ name: "example.pdf", content: "base64_encoded_content", description: "Sample document", mime_type: "application/pdf" }); ``` ### Retrieving Files Here's how you can retrieve files using the SDKs: ```python Python file = client.files.get("file_id") ``` ```javascript Node.js const file = await client.files.get("file_id"); ``` ### Deleting Files ```python Python client.files.delete("file_id") ``` ```javascript Node.js await client.files.delete("file_id"); ``` ## API Reference For complete API documentation, see [Files API Reference](https://dev.julep.ai/api/docs#tag/files). ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/lifecycle.mdx ================================================ --- title: 'Execution Lifecycle' description: 'Understanding the Lifecycle of Task when executed in Julep' icon: 'arrows-spin' --- ## Overview Understanding the lifecycle of a Julep task is crucial for building effective workflows. Let's explore this through the lens of a [Trip Plan task](/tutorials/trip-planning) - a practical example that showcases key aspects of task execution. The Trip Plan task is an ideal example because it demonstrates: 1. Parallel execution of workflow steps 2. Integration with multiple external APIs: - [Weather API](/integrations/communicationdata/weather) for current conditions - [Brave Search API](/integrations/search/brave) for attractions 3. Data aggregation from various sources 4. AI-powered personalization of results Below is a visual representation of how this task flows through Julep's execution lifecycle: Let's examine each phase of the execution lifecycle using this task as our guide. This is a simplified representation of the execution lifecycle. In practice, Julep handles many more details and edge cases to ensure robust and efficient task execution. Out here in this section, we will be focusing on the main workflow steps of the Trip Plan task and how these steps are executed in Julep. ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: locations: type: array items: type: string ``` This schema specifies that our task expects an array of location strings (e.g., `["New York", "London", "Paris"]`). ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: weather type: integration integration: provider: weather setup: openweathermap_api_key: {openweathermap_api_key} - name: internet_search type: integration integration: provider: brave setup: brave_api_key: {brave_api_key} ``` We're using two integrations: - The `weather` integration to fetch current weather conditions - The `brave` search integration to find tourist attractions ### 3. Main Workflow Steps #### Step 1: Fetch Weather Data ```yaml - over: $ steps[0].input.locations map: tool: weather arguments: location: $ _ ``` This step: - Iterates over each location in the input array - Calls the weather API for each location - The `_` represents the current location in the iteration #### Step 2: Search for Tourist Attractions ```yaml - over: $ steps[0].input.locations map: tool: internet_search arguments: query: $ 'tourist attractions in ' + _ ``` This step: - Iterates over the locations again - Searches for tourist attractions in each location - Constructs a search query by concatenating "tourist attractions in " with the location #### Step 3: Combine Data ```yaml - evaluate: zipped: |- $ list( zip( steps[0].input.locations, [output['result'] for output in steps[0].output], steps[1].output ) ) ``` This step: - Combines the data from previous steps into tuples - Each tuple contains: (location, weather_data, attractions_data) - Uses Python's `zip` function to align the data #### Step 4: Generate Itineraries ```yaml [expandable] - over: $ _['zipped'] parallelism: 3 # Inside the map step, each `_` represents the current element in the list # which is a tuple of (location, weather, attractions) map: prompt: - role: system content: >- $ f'''You are {agent.name}. Your task is to create a detailed itinerary for visiting tourist attractions in some locations. The user will give you the following information for each location: - The location - The current weather condition - The top tourist attractions''' - role: user content: >- $ f'''Location: {_[0]} Weather: {_[1]} Attractions: {_[2]}''' unwrap: true ``` This step: - Processes up to 3 locations in parallel - For each location tuple: - Sends a prompt to the AI model - Includes location, weather, and attraction data - Generates a personalized itinerary #### Step 5: Format Final Output ```yaml - evaluate: final_plan: |- $ '\\n---------------\\n'.join(activity for activity in _) ``` This step: - Combines all itineraries into a single output - Separates each itinerary with a divider ## Example Output An example output when running this task with an input of `["New York", "London", "Paris", "Tokyo", "Sydney"]`:
Here's a detailed itinerary for visiting top tourist attractions in New York, considering the current weather conditions. ### Day 1: Iconic Landmarks and Observation Decks - **Morning:** - **Top of the Rock Observation Deck:** Start your day with a visit to the Top of the Rock Observation Deck at Rockefeller Plaza. The panoramic 360-degree views from the 70th floor are a must-see. Dress warmly as it feels like 5.2°C outside, and it’s quite windy. - **Link for more info:** [Tripadvisor - Top of the Rock](https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html) - **Afternoon:** - **St. Patrick’s Cathedral:** Just a short walk from Rockefeller Plaza, explore the stunning architecture of St. Patrick’s Cathedral. The overcast skies will provide a dramatic backdrop for photos. - **Fifth Avenue:** Enjoy a leisurely stroll along Fifth Avenue, visiting iconic stores and landmarks. - **Evening:** - **Times Square:** Experience the vibrant lights and energy of Times Square. The overcast clouds might enhance the brightness of the neon lights. ### Day 2: Culture and History - **Morning:** - **The Museum of Modern Art (MoMA):** Spend your morning exploring MoMA’s vast collection of modern and contemporary art. This indoor activity is perfect for a cloudy day. - **Afternoon:** - **Central Park:** Head to Central Park for a refreshing walk. With 100% cloud cover, it's a great day to explore the park without the harsh sun. Consider visiting the Central Park Zoo or taking a guided tour. - **Evening:** - **Broadway Show:** End your day with a Broadway show. It’s an ideal indoor activity to avoid the chilly weather outside. Book tickets in advance for popular shows. ### Day 3: Historical and Educational - **Morning:** - **Statue of Liberty and Ellis Island:** Take a ferry to visit these iconic sites. Dress warmly for the ferry ride. The cloud cover will provide a unique perspective for photos. - **Afternoon:** - **9/11 Memorial and Museum:** Spend your afternoon reflecting at the 9/11 Memorial and exploring the museum exhibits. - **Evening:** - **Brooklyn Bridge:** Walk across the Brooklyn Bridge and enjoy the city skyline. With the wind speed at 5.81 m/s, be prepared for breezy conditions. ### Additional Tips: - **Clothing:** Wear layers to keep warm, as the temperature feels colder than it actually is. - **Dining:** New York offers a plethora of dining options. Consider trying some local favorites like a classic New York bagel or pizza. - **Transportation:** Utilize the subway for efficient travel across the city. Taxis and ride-sharing services are also readily available. For more details on attractions and guided tours, you can visit [USA Guided Tours](https://usaguidedtours.com/nyc/attraction/) and [I Love NY](https://www.iloveny.com/places-to-go/new-york-city/attractions/). Enjoy your trip to New York City! --------------- **Day 1: Exploring Iconic London Landmarks** **Morning:** 1. **Buckingham Palace** - Start your day early with a visit to Buckingham Palace. Arrive by 9:30 AM to catch the Changing of the Guard ceremony, which typically starts at 11:00 AM. Enjoy the majestic architecture and the surrounding gardens. - Weather Tip: With the overcast clouds, it might feel chilly, so dress warmly and bring an umbrella just in case. **Midday:** 2. **Westminster Abbey** - Head towards Westminster Abbey, a short walk from Buckingham Palace. This historic church has been the site of many significant events, including royal weddings and coronations. Spend about 1.5 hours exploring. 3. **Lunch at Borough Market** - Take a tube or walk to Borough Market for a variety of food options. It's a great place to warm up with some hot street food and explore the diverse culinary offerings. **Afternoon:** 4. **London Eye** - After lunch, head to the London Eye. The overcast sky might not offer the clearest views, but the experience is still worthwhile. Pre-book your tickets to avoid long lines and enjoy a 30-minute ride on this iconic Ferris wheel. **Evening:** 5. **The Globe Theatre** - As the day winds down, visit Shakespeare's Globe Theatre. If there's a performance, consider attending or simply take a guided tour to learn about the history of this famous theater. **Day 2: Museums and Cultural Exploration** **Morning:** 1. **The British Museum** - Start your second day at the British Museum. Spend a few hours exploring the vast collection of art and antiquities. Highlights include the Rosetta Stone and the Elgin Marbles. **Midday:** 2. **Lunch near Covent Garden** - Head to Covent Garden for lunch. This area is bustling with restaurants and cafes, perfect for a cozy indoor meal. **Afternoon:** 3. **The Tower of London** - After lunch, make your way to the Tower of London. Delve into England's rich history and see the Crown Jewels. Allocate about 2-3 hours for this visit. **Evening:** 4. **Tower Bridge** - Conclude your day with a walk across Tower Bridge. The views of the Thames River and the cityscape are beautiful, even on a cloudy evening. **Day 3: Leisure and Local Experiences** **Morning:** 1. **Natural History Museum** - Begin your last day at the Natural History Museum. It's a family-friendly museum with fascinating exhibits, including dinosaur skeletons and a model of a blue whale. **Midday:** 2. **Lunch at South Kensington** - Enjoy a relaxed lunch in South Kensington. There are plenty of options, from casual cafes to high-end dining. **Afternoon:** 3. **Hyde Park** - Spend your afternoon strolling through Hyde Park. Visit the Serpentine Galleries if you're interested in contemporary art. The park's natural beauty is a peaceful retreat amidst the city hustle. **Evening:** 4. **Dinner and a Show in the West End** - End your London adventure with a memorable dinner followed by a theater show in the West End. Book your tickets in advance for popular shows. **Additional Tips:** - Always check the attraction websites for any specific COVID-19 guidelines or changes in operating hours. - London’s public transport system is efficient; consider getting an Oyster card for convenient travel. - Don't forget to dress in layers to adapt to the chilly weather, and always have your camera ready to capture memories. --------------- Here’s a detailed itinerary for your visit to Paris, considering the current snowy weather conditions and top attractions: ### Day 1: Embrace the Iconic Landmarks **Morning: Eiffel Tower** - **Time:** 9:00 AM - **Details:** Begin your day with a visit to the Eiffel Tower. Even in the snow, the tower offers stunning views of Paris. Dress warmly and enjoy hot chocolate from nearby cafes. - **Link for more info:** [Tripadvisor - Things to Do in Paris](https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html) **Afternoon: Louvre Museum** - **Time:** 1:00 PM - **Details:** Spend your afternoon indoors at the Louvre Museum. With its vast collection of art and history, it's a perfect way to escape the cold. Consider taking a guided tour to make the most of your visit. - **Link for more info:** [U.S. News Travel - Things To Do](https://travel.usnews.com/Paris_France/Things_To_Do/) **Evening: Seine River Cruise** - **Time:** 6:00 PM - **Details:** End your day with a magical Seine River cruise. The snow adds a picturesque touch to the illuminated landmarks. Ensure to book a heated cruise for comfort. ### Day 2: Explore Cultural and Historical Treasures **Morning: Notre-Dame Cathedral** - **Time:** 9:30 AM - **Details:** Visit the iconic Notre-Dame Cathedral. Although some areas may be under restoration, its architecture and history are worth experiencing. Warm clothing is essential as the interior can be chilly. **Afternoon: Musée d'Orsay** - **Time:** 1:30 PM - **Details:** Head to the Musée d'Orsay, renowned for its Impressionist masterpieces. This indoor activity is ideal for escaping the cold and enjoying world-class art. **Evening: Montmartre and Sacré-Cœur** - **Time:** 5:00 PM - **Details:** Wander through the charming streets of Montmartre and visit the Sacré-Cœur Basilica. The view of Paris in the snow is breathtaking. Enjoy a cozy dinner at a local bistro in Montmartre. ### Day 3: Discover Hidden Gems and Local Flavors **Morning: Le Marais District** - **Time:** 10:00 AM - **Details:** Explore Le Marais, known for its vibrant street art, boutiques, and cafes. Enjoy a leisurely breakfast and shop for unique souvenirs. **Afternoon: Palais Garnier (Opera House)** - **Time:** 2:00 PM - **Details:** Tour the opulent Palais Garnier. Its stunning interiors are a must-see, especially when it's snowy outside. **Evening: Moulin Rouge Show** - **Time:** 8:00 PM - **Details:** Conclude your trip with a classic Parisian experience at the Moulin Rouge. Book in advance to secure a good seat and enjoy the legendary cabaret performance. ### Additional Tips: - **Weather Preparation:** Wear layers, waterproof boots, and carry an umbrella. The snow and cold wind can be intense. - **Dining:** Indulge in warm, hearty French cuisine at local cafes and restaurants. Try dishes like French onion soup, coq au vin, and tarte Tatin. - **Transport:** Use public transportation to avoid the snowy streets, and consider purchasing a Paris Visite pass for unlimited travel. Enjoy your snowy adventure in Paris! --------------- **Tokyo Itinerary** **Day 1: Arrival and Exploration of Historical and Cultural Sites** - **Morning:** - **Asakusa District**: Begin your day with a visit to the historic Asakusa district. Explore the iconic Senso-ji Temple, Tokyo's oldest temple. Enjoy the traditional market streets like Nakamise Street for some shopping and snacks. - **Afternoon:** - **Tokyo National Museum**: Head to Ueno Park and visit the Tokyo National Museum. Discover Japan’s extensive collection of art and antiquities. This is a great spot to dive into Japanese history and culture. - **Evening:** - **Dinner in Ueno**: Explore the local dining options around Ueno and enjoy a traditional Japanese dinner. **Day 2: Modern Tokyo and Unique Experiences** - **Morning:** - **Ghibli Museum**: Start your day with a magical visit to the Ghibli Museum in Mitaka. Perfect for fans of Studio Ghibli's animated films, this museum offers a whimsical look into the creative world of Hayao Miyazaki. - **Afternoon:** - **Shibuya and Harajuku**: Head towards the bustling areas of Shibuya and Harajuku. Witness the famous Shibuya Crossing and explore the trendy shops of Harajuku, especially Takeshita Street. - **Evening:** - **Golden Gai**: Conclude your day in the vibrant Golden Gai district. This area is renowned for its narrow alleys filled with small bars and eateries. Experience the unique nightlife of Tokyo here. **Day 3: Relax and Explore Green Spaces** - **Morning:** - **Shinjuku Gyoen National Garden**: Spend a peaceful morning strolling through the beautiful Shinjuku Gyoen, one of Tokyo's largest and most beautiful parks. It's a perfect spot for relaxation and enjoying nature. - **Afternoon:** - **Meiji Shrine**: Visit the Meiji Shrine, located in a forested area near Harajuku and Shibuya. It's a serene place to learn about Shinto traditions and enjoy the tranquil setting. - **Evening:** - **Tokyo Tower or Skytree**: End your trip with a visit to either Tokyo Tower or Tokyo Skytree for a panoramic view of the city. It's an unforgettable way to see Tokyo illuminated at night. **Weather Considerations:** - With the current weather of few clouds and a mild temperature around 10.32°C, it is advisable to wear layers and carry a light jacket for comfort during outdoor activities. - Humidity is high (92%), so be prepared for a slightly damp feeling and consider moisture-wicking clothing. **Additional Tips:** - Always check the opening hours of attractions and book tickets in advance where necessary. - Use Tokyo’s efficient public transport to move around easily. - Consider visiting the websites linked in the attraction descriptions for more detailed information and current updates. --------------- Here's a detailed itinerary for exploring some of Sydney's top tourist attractions with the current weather conditions in mind. With clear skies and pleasant temperatures, it's a perfect day to explore the outdoors and enjoy what Sydney has to offer. ### Morning **9:00 AM - Sydney Opera House** - Begin your day with a visit to the iconic Sydney Opera House. Take a guided tour to learn about its history and architecture. Tours are available in multiple languages. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **11:00 AM - Royal Botanic Garden Sydney** - Just a short walk from the Opera House, enjoy a leisurely stroll through the Royal Botanic Garden. The clear skies will offer beautiful views of the diverse plant life and the Sydney Harbour. ### Afternoon **12:30 PM - Lunch at Opera Bar** - Head back to Opera Bar for lunch. Enjoy a refreshing cocktail with stunning views of the Sydney Harbour Bridge and the waterfront. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **2:00 PM - Sydney Harbour Bridge** - After lunch, take a scenic walk across the Sydney Harbour Bridge. If you're up for it, consider the BridgeClimb for breathtaking panoramic views of the city. **4:00 PM - The Rocks** - Explore The Rocks, one of Sydney's most historic areas. Wander through the cobbled streets, visit the local markets, and perhaps enjoy a cup of coffee at a nearby café. ### Evening **6:00 PM - Darling Harbour** - Make your way to Darling Harbour for the evening. Here you can visit attractions such as the SEA LIFE Sydney Aquarium or simply enjoy the lively atmosphere by the waterfront. **8:00 PM - Dinner at a Local Restaurant** - Conclude your day with dinner at one of Darling Harbour's many restaurants. Choose from a variety of cuisines while enjoying the vibrant night scene. ### Additional Suggestions - If you're interested in more unique experiences, consider visiting some of the attractions listed on [Time Out Sydney](https://www.timeout.com/sydney/attractions/tourist-attractions-that-dont-suck), which includes thrilling adventures and scenic tours. With clear skies and mild temperatures, this itinerary offers a balanced mix of cultural, historical, and scenic experiences. Enjoy your visit to Sydney!
## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/localsetup.mdx ================================================ --- title: 'Local Setup' description: 'Learn how to run Julep locally' icon: 'code' --- ## Overview Juelp is designed to be run locally with the help of Docker. This guide will help you set up Julep locally. ## Prerequisites - [Docker](https://docs.docker.com/get-docker/) ## Setup Instructions ### 1. Clone the Repository Clone the repository from your preferred source: ```bash git clone ``` ### 2. Navigate to the Root Directory Change to the root directory of the project: ```bash cd ``` ### 3. Set Up Environment Variables - Create a `.env` file in the root directory. - Refer to the [`.env.example`](https://github.com/julep-ai/julep/blob/dev/.env.example) file for a list of required variables. - Ensure that all necessary variables are set in the `.env` file. ### 4. Create a Docker Volume for Backup Create a Docker volume named `grafana_data`, `memory_store_data`, `temporal-db-data`, `prometheus_data` and `seadweedfs_data`: ```bash docker volume create grafana_data docker volume create memory_store_data docker volume create temporal-db-data docker volume create prometheus_data docker volume create seaweedfs_data ``` The volumes are used to store the data for the Grafana, Memory Store (Timescale DB), Temporal DB, Prometheus, and SeadweedFS, and Memories respectively. ### 5. Run the Project using Docker Compose You can run the project in two different modes: **Single Tenant** or **Multi-Tenant**. Choose one of the following commands based on your requirement: #### Single-Tenant Mode Run the project in single-tenant mode: ```bash docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile self-hosted-db --profile blob-store --profile temporal-ui-public up --build --force-recreate --watch ``` > **Note:** In single-tenant mode, you can interact with the SDK directly without the need for the API KEY. #### Multi-Tenant Mode Run the project in multi-tenant mode: ```bash docker compose --env-file .env --profile temporal-ui --profile multi-tenant --profile self-hosted-db --profile blob-store --profile temporal-ui-public up --build --force-recreate --watch ``` > **Note:** In multi-tenant mode, you need to generate a JWT token locally that act as an API KEY to interact with the SDK. ### 6. Generate a JWT Token (Only for Multi-Tenant Mode) To generate a JWT token, `jwt-cli` is required. install it from [here](https://github.com/mike-engel/jwt-cli). Use the following command and replace `JWT_SHARED_KEY` with the corresponding key from your `.env` file to generate a JWT token: ```bash jwt encode --secret JWT_SHARED_KEY --alg HS512 --exp=$(date -j -v +10d +%s) --sub '00000000-0000-0000-0000-000000000000' '{}' ``` > **Note:** This command generates a JWT token that will be valid for 10 days. adjust the expiration date as needed. ### 7. Access and Interact - **Temporal UI**: You can access the Temporal UI through the specified port in your `.env` file. - **API Interactions**: Depending on the chosen mode, interact with the setup using the provided endpoints. ### Troubleshooting - Ensure that all required Docker images are available. - Check for missing environment variables in the `.env` file. - Use the `docker compose logs` command to view detailed logs for debugging. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/multi-agent-multi-user-sessions.mdx ================================================ --- title: 'Multi-Agent Multi-User Sessions' description: 'Learn how to manage complex multi-agent systems with multiple users' icon: 'sitemap' --- ## Overview Julep supports different types of sessions based on the number of agents and users involved. This flexibility allows for complex interactions and use cases. ## Types of Sessions
  1. No user
  2. Single user
  3. Multiple users
  1. No user
  2. Single user
  3. Multiple users
## Behavior in Multi-Agent/User Sessions ### User Behavior
  1. No user data is retrieved
  2. (Upcoming) Memories are not mined from the session
  1. Docs, metadata, memories, etc. are retrieved for all users in the session
  2. Messages can be added for each user by referencing them by name in the `ChatML` messages
  3. (Upcoming) Memories mined in the background are added to the corresponding user's scope
### Agent Behavior
  1. Works as expected
  1. When a message is received by the session, each agent is called one after another in the order they were defined in the session
  2. You can specify which `agent` to use in a request, in which case, only that agent will be used
This multi-agent/user capability allows for sophisticated scenarios such as: - Collaborative problem-solving with multiple AI agents - Group conversations with multiple users and agents - Specialized agents working together on complex tasks ## Conclusion By supporting these various configurations, Julep provides a flexible framework for building diverse and powerful AI applications. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/new-syntax.mdx ================================================ --- title: 'New Syntax (Important)' description: 'Learn about the new workflow syntax and how to migrate your existing workflows' icon: 'code' --- ## Overview We've updated our workflow syntax to make data flow more explicit and consistent. These changes improve readability and make workflows more maintainable. While this update requires modifications to existing workflows, it provides a more robust foundation for workflow development. ## 1. Input/Output Data References The most significant change is how we reference input and output data between workflow steps. The new syntax makes the data flow more explicit by using the `steps` keyword. ### Old Syntax: - `inputs[x]` - Referenced input data from step x - `outputs[x]` - Referenced output data from step x - `_x` - Shorthand for input data from step x ### New Syntax: - `steps[x].input` - References input data from step x - `steps[x].output` - References output data from step x - `_x` - Has been removed ### Example #### Old Syntax ```yaml - evaluate: input_data: inputs[0].a output_data: outputs[0].b shorthand: _0.c ``` #### New Syntax ```yaml - evaluate: input: $ steps[0].input.a output: $ steps[0].output.b shorthand: $ steps[0].input.c ``` Notice the addition of the `$` prefix in the new syntax. This indicates that the value should be treated as a Python expression. We'll cover this in detail in the next section. ### Key Changes: - `inputs[0]` becomes `steps[0].input` - `outputs[0]` becomes `steps[0].output` - `_0` becomes `steps[0].input` - Added `$` prefix to indicate Python expressions ## 2. Template Syntax Changes Inside `prompt` Steps Another significant change is the removal of Jinja templates (`{{ }}`) in `log` steps and `prompt` steps. Instead, we now use Python f-strings with the `$` prefix for dynamic content. ### Old Syntax (Using Jinja): ```yaml - prompt: - role: user content: Write me an article about the topic: {{inputs[0].topic}} ``` ### New Syntax (Using f-strings): ```yaml - prompt: - role: user content: $ f"Write me an article about the topic: {steps[0].input.topic}" - role: user content: this is only text, no need for dollar sign prefix ``` For multiple lines, you can use a multiline f-string: ```yaml - prompt: - role: user content: |- $ f""" Write me an article about the topic: {steps[0].input.topic}. The article should be {steps[0].input.article_length} words long. """ ``` The `$` prefix is only needed when the value contains a Python expression or f-string. Plain text content doesn't require the prefix. ## 3. When to Use the $ Prefix The `$` prefix should be used in two scenarios: 1. When referencing step data (inputs/outputs) 2. When using Python expressions or f-strings #### Examples: ```yaml steps: - prompt: # Needs $ because it uses an f-string - role: user content: $ f"The temperature is {steps[0].input.temp}°C" # No $ needed - plain text - role: user content: Tell me about the weather - evaluate: # Needs $ because it references step data input: $ steps[0].output # Needs $ because it's a Python expression condition: $ len(steps[0].input.text) > 100 ``` ================================================ FILE: documentation/advanced/python-expression.mdx ================================================ --- title: 'Python Expression' description: 'Learn how to use Python expressions in Julep task definitions' icon: 'python' --- ## Overview Julep tasks support Python expressions for dynamic value computation and data manipulation. This guide explains how to use them effectively. ## The Special `_` Variable The underscore `_` is a special variable that serves three different purposes depending on where it's used: 1. **First Step Input**: In the first step of a task, `_` contains the execution input: ```yaml # If task is executed with input `{"topic": "AI"}` - evaluate: topic: $ _.topic # Accesses the input "AI" ``` 2. **Previous Step Output**: In any subsequent step, `_` contains the output from the previous step: ```yaml - evaluate: results: $ _.split('\n') # Splits previous step's output into lines ``` 3. **Iterator Value**: In `foreach` and `map` steps, `_` represents the current item being iterated. ```yaml # If the task is executed with input `{"questions": ["What is AI?", "What is Julep?"]}` - foreach: in: $ _.questions do: - wait_for_input: info: "message": $ _ # _ is each question ``` ## The Special `$` Variable The `$` variable is used to differentiate between a Python expression and a string. When using the `$` variable, the expression is evaluated as a Python expression. ```yaml - evaluate: topic: $ _.topic # Accesses the input "AI" ``` ```yaml - prompt: - role: user content: |- $ f''' Please answer the following question: {_.question} ''' ``` To learn more about how to use the `$` variable, please refer to the [New Syntax](/advanced/new-syntax) section. ## Where Python Expressions Are Used Python expressions can be used in various task steps. For a complete list of step types and their syntax, refer to the [Step Types](/advanced/types-of-task-steps) page. Common places include: - `evaluate` steps - Tool `arguments` - `if` conditions - `foreach` and `map` iterations ## Available Functions and Libraries The following Python functions and libraries are available for use in expressions: ### Basic Python Builtins - `abs`, `all`, `any`, `bool`, `dict`, `enumerate` - `float`, `int`, `len`, `list`, `map`, `max`, `min` - `round`, `set`, `str`, `sum`, `tuple`, `zip`, `reduce` ### Safe Versions of Functions - `range`: `def safe_range(*args)` Safely creates a range object with size limits (max 1,000,000 elements). - `load_json`: `def safe_json_loads(s: str) -> Any` (Deprecated in favor of `json.loads`) Safely parses a JSON string with size limits. - `load_yaml`: `def safe_yaml_load(s: str) -> Any` (Deprecated in favor of `yaml.safe_load`) Safely parses a YAML string with size limits. - `dump_json`: `def dump_json(obj: Any, *, **kwargs) -> str` (Deprecated in favor of `json.dumps`) Safely serializes an object to a JSON string. - `dump_yaml`: `def dump_yaml(obj: Any, **kwargs) -> str` (Deprecated in favor of `yaml.dump`) Safely serializes an object to a YAML string. - `extract_json`: `def safe_extract_json(string: str) -> Any` Safely extracts and parses JSON from text. ### Regex and NLP Functions - `search_regex`: `def search_regex(pattern: str, string: str) -> Optional[re2.Match]` Searches for a regex pattern in a string. - `match_regex`: `def match_regex(pattern: str, string: str) -> bool` Checks if a regex pattern matches a string. - `chunk_doc`: `def chunk_doc(string: str) -> list[str]` Chunks a string into sentences. - `nlp` pipelines. Example using these functions in an evaluate step: ```yaml - evaluate: # Parse JSON string with size limit of 1MB data: $ json.loads(_.json_string) # Parse YAML string with size limit of 1MB config: $ yaml.safe_load(_.yaml_string) # Extract JSON from text that might contain markdown code blocks extracted_content: $ extract_json('Here is some JSON: ```json\n{"key": "value"}\n```') ``` ### CSV Functions - `reader`: `def reader(data: str, dialect="excel", delimiter: str = ",", quotechar: str | None = '"', escapechar: str | None = None, doublequote: bool = True, skipinitialspace: bool = False, lineterminator: str = "\r\n", quoting=0, strict: bool = False) -> csv._reader` Creates a CSV reader. - `writer`: `def writer(data: str, dialect="excel", delimiter: str = ",", quotechar: str | None = '"', escapechar: str | None = None, doublequote: bool = True, skipinitialspace: bool = False, lineterminator: str = "\r\n", quoting=0, strict: bool = False) -> csv._writer` Creates a CSV writer. - `DictReader`: `class DictReader(data: str, fieldnames=None, restkey=None, restval=None, dialect="excel", *args, **kwds)` Create an object that operates like a regular reader but maps the information in each row to a dict. - `DictWriter`: `class DictWriter(data: str, fieldnames, restval="", extrasaction="raise", dialect="excel", *args, **kwds)` Create an object which operates like a regular writer but maps dictionaries onto output rows. - `register_dialect`: `def register_dialect(name: str, dialect: type[Dialect] = ..., *, delimiter: str = ",", quotechar: str | None = '"', escapechar: str | None = None, doublequote: bool = True, skipinitialspace: bool = False, lineterminator: str = "\r\n", quoting: _QuotingType = 0, strict: bool = False) -> csv._reader` Associate dialect with name. - `unregister_dialect`: `def unregister_dialect(name: str) -> None` Delete the dialect associated with name from the dialect registry. - `get_dialect`: `def get_dialect(name: str) -> Dialect` Return the dialect associated with name. - `list_dialects`: `def list_dialects() -> list[str]` Return the names of all registered dialects. - `field_size_limit`: `def field_size_limit(new_limit: int = ...) -> int` Returns the current maximum field size allowed by the parser. - `Dialect`: `class Dialect()` The Dialect class is a container class whose attributes contain information for how to handle doublequotes, whitespace, delimiters, etc. - `excel`: `class excel()` The excel class defines the usual properties of an Excel-generated CSV file. - `excel_tab`: `class excel_tab()` The excel_tab class defines the usual properties of an Excel-generated TAB-delimited file. - `unix_dialect`: `class unix_dialect()` The unix_dialect class defines the usual properties of a CSV file generated on UNIX systems, i.e. using '\n' as line terminator and quoting all fields. - `Sniffer`: `class Sniffer` The Sniffer class is used to deduce the format of a CSV file. - `QUOTE_ALL` - Instructs writer objects to quote all fields. - `QUOTE_MINIMAL` - Instructs writer objects to only quote those fields which contain special characters such as delimiter, quotechar or any of the characters in lineterminator. - `QUOTE_NONNUMERIC` - Instructs writer objects to quote all non-numeric fields. Instructs reader objects to convert all non-quoted fields to type float. - `QUOTE_NONE` - Instructs writer objects to never quote fields. - `QUOTE_NOTNULL` - Instructs writer objects to quote all fields which are not None. - `QUOTE_STRINGS` - Instructs writer objects to always place quotes around fields which are strings. - `Error`: `class Error()` Raised by any of the functions when an error is detected. This module tries to mimic `csv` module from the standard Python library. You can find additional information [here](https://docs.python.org/3/library/csv.html) ## Example Usage ```yaml name: Data Processing Task main: # Using _ as input - evaluate: csv_data: $ [row for row in csv.reader("a,b,c\n1,2,3")] ``` ### Standard Library Modules - `re`: Regular expressions (using re2) - `json`: JSON operations - `yaml`: YAML operations - `string`: String constants and operations - `datetime`: Date and time operations - `math`: Mathematical functions - `statistics`: Statistical operations - `base64`: Base64 encoding/decoding - `urllib.parse`: URL parsing operations - `random`: Random number generation - `time`: Time operations - `csv`: CSV operations For the complete list of available functions and their safe implementations, refer to the [utils.py](https://github.com/julep-ai/julep/blob/main/agents-api/agents_api/activities/utils.py) file in the source code. ## Example Usage Here's a practical example combining different aspects of Python expressions: ```yaml name: Data Processing Task main: # Using _ as input - evaluate: topics: $ _.topics # Access input topics # Using _ as previous output - evaluate: filtered_topics: $ [t for t in _.topics if len(t) > 3] # Using _ in foreach - foreach: in: $ _.filtered_topics do: - tool: web_search arguments: query: $ 'Latest news about ' + _ # _ is each topic ``` ### Custom Implementations #### Humanization (Alpha) The `humanize_text_alpha` function transforms text using multiple techniques such as: - Back-translation. - Rewriting using non-public LLMs. - Stylistic modifications such as homoglyphs and em dashes. Breakdown of the function: Function signature: `humanize_text_alpha(text: str, threshold: float = 90, src_lang: str = "english", target_lang: str = "german", use_homoglyphs: bool = True, use_em_dashes: bool = True, grammar_check: bool = False, max_tries: int = 10) -> str` Parameters: - `text`: The text to be humanized. - `threshold`: The threshold for the humanization (0-100). - `src_lang`: The source language of the original text. - `target_lang`: The target language used in the back-translation technique. - `use_homoglyphs`: Whether to use homoglyphs, a technique that replaces certain characters with similar looking characters to trick AI detection classifiers. - `use_em_dashes`: Whether to use em dashes, i.e. adding dashes between longer words to break the tokens. - `grammar_check`: Whether to run another prompt after back-translation to check for correct grammar. - `max_tries`: The maximum number of tries to humanize the text. Example usage: ```yaml - evaluate: humanized_text: $ humanize_text_alpha(_.text, threshold=30, target_lang="german") ``` #### Markdown to HTML The `markdown_to_html` function converts markdown text to HTML. Breakdown of the function: Function signature: `markdown_to_html(markdown_text: str) -> str` Parameters: - `markdown_text`: The markdown text to be converted to HTML. Example usage: ```yaml - evaluate: html_text: $ markdown_to_html(_.markdown_text) ``` #### HTML to Markdown The `html_to_markdown` function converts HTML text to markdown. Breakdown of the function: Function signature: `html_to_markdown(html_text: str) -> str` Parameters: - `html_text`: The HTML text to be converted to markdown. Example usage: ```yaml - evaluate: markdown_text: $ html_to_markdown(_.html_text) ``` ## Security All Python expressions are executed in a sandboxed environment with:

Limited available functions to prevent unsafe operations

Maximum string length restrictions to prevent memory issues

Collection size limits to prevent resource exhaustion

Execution time limits to prevent infinite loops

This ensures safe execution while providing necessary functionality for task workflows. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/render.mdx ================================================ --- title: 'Render Endpoint in Julep' description: 'Learn about the render endpoint for previewing chat inputs before sending them to the model' icon: 'eye' --- ## Overview Julep provides a render endpoint that allows you to preview how chat inputs will be processed before actually sending them to the model. This is useful for debugging, testing templates, and understanding how the system processes your messages. ## Purpose The render endpoint processes chat inputs exactly as the chat endpoint would, but stops short of sending them to the model. See how templates in your messages and system prompts will be rendered with the current environment variables. Preview which documents will be retrieved from your knowledge base for a given input. Examine how tools will be formatted and made available to the model. Useful for debugging complex prompts and understanding the exact input that would be sent to the model. - The render endpoint uses the same input format as the chat endpoint but returns the processed messages without actually calling the model. - To use the render endpoint, you need to create a session first. To learn more about the session object, check out the [Session](/concepts/sessions) page. ## Input Structure The render endpoint accepts the same input structure as the chat endpoint: - **Messages**: An array of input messages representing the conversation so far. - **Tools**: (Advanced) Additional tools provided for this specific interaction. - **Tool Choice**: Specifies which tool the agent should use. - **Memory Access**: Controls how the session accesses history and memories (`recall` parameter). - **Additional Parameters**: Various parameters to control the behavior of the rendering. Here's an example of how a typical message object might be structured in a render request: ```python Python """ Attributes for the Message object: role (Literal["user", "assistant", "system", "tool"]): The role of the message sender. tool_call_id (str | None): Optional identifier for a tool call associated with this message. content (Annotated[str | list[str] | list[Content | ContentModel7 | ContentModel] | None, Field(...)]): The main content of the message, which can be a string, a list of strings, or a list of content models. name (str | None): Optional name associated with the message. tool_calls (list[ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022] | None): List of tool calls generated during the message creation, if any. """ # Example of a simple message structure messages = [{"role": "user", "content": "Your query here"}] ```

This object represents a message in the chat system, detailing the structure and types of data it can hold.

## Additional Parameters The render endpoint accepts the same parameters as the chat endpoint: | Parameter | Type | Description | Default | |---------------------|---------|--------------------------------------------------|----------| | `model` | `str` | The model to use for validation (though no actual model call is made). | `None` | | `agent` | `UUID` | Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) | `None` | | `recall` | `bool` | Whether previous memories and docs should be recalled or not. | `True` | | `response_format` | `str` | Response format specification (used for validation only). | `None` | | `temperature` | `float` | Not used in rendering but validated for format. | `None` | | `top_p` | `float` | Not used in rendering but validated for format. | `1.0` | | `max_tokens` | `int` | Not used in rendering but validated for format. | `None` | | `stop` | `list[str]` | Not used in rendering but validated for format. | `[]` | ## Response Structure The render endpoint returns a `RenderResponse` object with the following structure: ```json { "messages": [ // Array of processed messages that would be sent to the model ], "docs": [ // Array of document references that would be used for this request ], "tools": [ // Array of formatted tools that would be available to the model ] } ``` The render response includes: - `messages`: The fully processed messages, including rendered templates and system messages. - `docs`: List of document references that would be used for this request, intended for citation purposes. - `tools`: The formatted tools that would be available to the model. ## Usage Here's an example of how to use the render endpoint in Julep using the SDKs: To use the render endpoint, you always have to create a session first. ```python Python [expandable] # Create a session with custom recall options client.sessions.create( agent=agent.id, user=user.id, recall=True, recall_options={ "mode": "hybrid", # or "vector", "text" "num_search_messages": 4, # number of messages to search for documents "max_query_length": 1000, # maximum query length "alpha": 0.7, # weight to apply to BM25 vs Vector search results (ranges from 0 to 1) "confidence": 0.6, # confidence cutoff level (ranges from -1 to 1) "limit": 10, # limit of documents to return "lang": "en-US", # language to be used for text-only search "metadata_filter": {}, # metadata filter to apply to the search "mmr_strength": 0, # MMR Strength (ranges from 0 to 1) } ) # Render the chat input without sending to the model render_response = client.sessions.render( session_id=session.id, messages=[ { "role": "user", "content": "Tell me about Julep" } ], recall=True ) print("Processed messages:", render_response.messages) print("Retrieved documents:", render_response.docs) print("Available tools:", render_response.tools) ``` ```javascript Node.js [expandable] client.sessions.create({ agent: agent.id, user: user.id, recall: true, recall_options: { mode: "hybrid", // or "vector", "text" num_search_messages: 4, // number of messages to search for documents max_query_length: 1000, // maximum query length alpha: 0.7, // weight to apply to BM25 vs Vector search results (ranges from 0 to 1) confidence: 0.6, // confidence cutoff level (ranges from -1 to 1) limit: 10, // limit of documents to return lang: "en-US", // language to be used for text-only search metadata_filter: {}, // metadata filter to apply to the search mmr_strength: 0, // MMR Strength (ranges from 0 to 1) } }); // Render the chat input without sending to the model const renderResponse = await client.sessions.render({ session_id: session.id, messages: [ { role: "user", content: "Tell me about Julep" } ], recall: true }); ``` ## Use Cases Test how your templates will be rendered with the current environment variables. Preview which documents will be retrieved for a given query. Verify that tools are properly configured before sending to the model. Test how system prompts will be processed and combined with user messages. ## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/advanced/secrets-management.mdx ================================================ --- title: 'Secrets Management' description: 'Advanced techniques for managing sensitive information in Julep' icon: 'key' --- # Secrets Management This guide covers advanced topics for managing secrets in Julep, including security architecture, best practices, rotation policies, and integration patterns. ## Security Architecture Secrets in Julep are stored with a layered security approach: 1. **Application-level Validation**: Secrets are validated before being stored 2. **Database Encryption**: Secrets are stored encrypted using PostgreSQL's pgcrypto extension with AES-256 3. **Access Control**: Secrets are scoped to developers and only accessible within their resources 4. **Master Key Security**: A separate master encryption key secures all stored secrets The encryption process works as follows: - When a secret is created, its value is encrypted using the master key - The encrypted value is stored in the database's `value_encrypted` column - When a secret is accessed, the value is decrypted using the master key - The master key is stored as an environment variable, separate from the database ## Creating Effective Secret Names Secrets should have descriptive names that follow these conventions: - Use snake_case formatting - Begin with a letter and contain only alphanumeric characters and underscores - Use a prefix to indicate the service (e.g., `aws_secret_key`, `stripe_api_key`) - Be specific enough to understand the purpose (e.g., `gmail_oauth_token` vs `email_token`) ## Secret Rotation Best Practices Regular rotation of secrets is a security best practice: 1. Create a new secret with a temporary name 2. Update your services to use the new secret 3. Once confirmed working, delete the old secret 4. Update the new secret's name to the standard name For automated rotation: ```python [expandable] from julep import Julep import uuid client = Julep(api_key="your_api_key") # Generate temporary name temp_name = f"stripe_key_rotation_{uuid.uuid4().hex[:8]}" # Create new secret with temp name client.secrets.create( name=temp_name, value="sk_new_value...", description="New Stripe API key (rotation)", metadata={"rotation_date": "2025-05-10"} ) # Test the new key (implement your validation logic here) # ... # If valid, delete old secret and rename new one client.secrets.delete(name="stripe_api_key") client.secrets.update( name=temp_name, new_name="stripe_api_key", description="Stripe API key", metadata={"last_rotated": "2025-05-10"} ) ``` ## Using Secrets with Different Tool Types ### API Tools For HTTP-based tools, reference secrets in the headers or authentication: ```yaml steps: - kind: tool_call tool: api_service operation: fetch_data arguments: url: "https://api.example.com/data" headers: Authorization: "$ f'Bearer {secrets.api_token}'" ``` ### Database Connections For database tools, use secrets for connection credentials: ```yaml steps: - kind: tool_call tool: database operation: query arguments: query: "SELECT * FROM users LIMIT 10" secrets: db_username: "my_db_user" db_password: "my_db_password" ``` ### AI Service Integration For AI services that require API keys: ```yaml steps: - kind: prompt model: "$ secrets.preferred_model" provider: "$ secrets.provider_name" prompt: "Generate creative ideas for a marketing campaign" api_key: "$ secrets.openai_api_key" ``` ## Managing Secrets for Multi-Environment Deployments For applications deployed across development, staging, and production environments: 1. Use consistent naming conventions with environment prefixes: - `dev_stripe_key`, `staging_stripe_key`, `prod_stripe_key` 2. Use metadata to tag secrets by environment: ```python client.secrets.create( name="stripe_api_key", value="sk_test_...", metadata={"environment": "production"} ) ``` 3. Filter secrets by environment when listing: ```python prod_secrets = client.secrets.list( metadata={"environment": "production"} ) ``` ## Secret Templating For complex configurations that require multiple secrets: ```yaml steps: - kind: tool_call tool: database operation: query arguments: connection_string: "$ f'mongodb+srv://{secrets.db_username}:{secrets.db_password}@{secrets.db_host}/{secrets.db_name}'" ``` ## Securing LLM API Keys with Secrets Julep automatically looks for LLM API keys in your secrets store based on the provider name. Use these naming conventions for automatic lookup: | Provider | Secret Name | |----------|-------------| | OpenAI | `OPENAI_API_KEY` | | Anthropic | `ANTHROPIC_API_KEY` | | Google | `GOOGLE_API_KEY` | | Azure OpenAI | `AZURE_OPENAI_API_KEY` | | Cohere | `COHERE_API_KEY` | Example of setting up an LLM API key: ```python client.secrets.create( name="OPENAI_API_KEY", value="sk-...", description="OpenAI API key for GPT-4 access" ) ``` ## Audit and Monitoring Best practices for security monitoring: 1. Regularly audit secret access and usage 2. Track changes to secrets via the `updated_at` timestamp 3. Implement secret expiration for highly sensitive data 4. Use metadata to track last review or rotation dates Example audit script: ```python from julep import Julep from datetime import datetime, timedelta client = Julep(api_key="your_api_key") # Find secrets not rotated in over 90 days old_threshold = datetime.now() - timedelta(days=90) secrets = client.secrets.list() for secret in secrets.items: if secret.updated_at < old_threshold: print(f"WARNING: Secret {secret.name} has not been rotated in over 90 days") ``` ## Troubleshooting Common issues when working with secrets: 1. **Secret Not Found**: Check that the secret name matches exactly, including case 2. **Permission Errors**: Verify the developer ID has access to the secret 3. **Encryption Errors**: Ensure the master key is correctly set in the environment 4. **Reference Errors**: Ensure the secret reference syntax is correct in expressions and templates ## Next Steps - [Using Secrets in Julep](/guides/using-secrets) - Step-by-step guide for using secrets - [Integration Patterns](/guides/advanced/integration-patterns) - Learn how to use secrets with integrations - [API Reference](/api-reference#tag/secrets) - Complete API reference for secrets ================================================ FILE: documentation/advanced/system-templates.mdx ================================================ --- title: System Templates description: Learn how to use Jinja2 templates to create dynamic system prompts for your AI agents icon: code-merge --- System templates allow you to create dynamic, context-aware prompts for your AI agents using Jinja2 templating. This guide covers everything you need to know about creating and customizing system templates. ## Overview System templates in Julep are **Jinja2 templates** that define the initial system prompt for your AI agents. They allow you to: - Create dynamic prompts that adapt based on context - Include user information, session data, and other variables - Implement conditional logic for different scenarios - Maintain consistency across agent interactions - Inject custom metadata at the message level for dynamic behavior ## Template Hierarchy Julep uses a three-level hierarchy for system templates: 1. **Agent Default Template**: Defined when creating an agent 2. **Session Template**: Can override the agent's default template for specific sessions 3. **Chat Metadata**: Can inject dynamic variables at the individual message level The session template takes precedence over the agent's default template. Chat metadata is available in both cases. ## Default System Template When you create an agent without specifying a custom template, Julep uses this default template: ```jinja {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user.name -%} You are talking to {{user.name}}.{{" "}} {%- endif -%} {%- if user.about -%} About the user: {{user.about}}.{{" "}} {%- endif -%} {{agent.instructions}} {%- if tools -%} You have access to these tools: {%- for tool in tools -%} {%- if tool.type == "function" -%} - {{tool.function.name}} {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%} {%- else -%} - {{ 0/0 }} {# Error: Other tool types aren't supported yet #} {%- endif -%} {%- endfor -%} {%- endif -%} {%- if docs -%} Relevant documents: {%- for doc in docs -%} {{doc.title}} {%- if doc.content -%}: {{doc.content}} {%- endif -%} {%- endfor -%} {%- endif -%} ``` ## Template Variables The following variables are available in your system templates: ### Core Variables | Variable | Type | Description | |----------|------|-------------| | `agent` | Object | The agent's configuration and details | | `agent.name` | String | The agent's name | | `agent.about` | String | Description of the agent | | `agent.instructions` | Array/String | Agent's instructions | | `user` | Object | Information about the current user | | `user.name` | String | The user's name | | `user.about` | String | Description of the user | | `session` | Object | Current session information | | `session.situation` | String | The session's context/situation | ### Dynamic Variables | Variable | Type | Description | |----------|------|-------------| | `tools` | Array | Available tools for the agent | | `docs` | Array | Relevant documents from searches | | `metadata` | Object | Custom metadata passed in chat requests | ## Creating Custom Templates ### Basic Example Here's a simple custom template for a customer service agent: ```python python agent = client.agents.create( name="Customer Support Agent", model="gpt-4", about="A helpful customer service representative", instructions=[ "Be polite and professional", "Always offer to help further" ], default_system_template=""" You are {{agent.name}}, a customer service representative. {%- if metadata.priority == "high" -%} ⚠️ HIGH PRIORITY CUSTOMER - Provide expedited service {%- endif -%} {%- if metadata.customer_tier == "premium" -%} Premium customer - Offer enhanced support options {%- endif -%} Your guidelines: {{agent.instructions}} {%- if user.name -%} Customer name: {{user.name}} {%- endif -%} """ ) ``` ```javascript javascript const agent = await client.agents.create({ name: "Customer Support Agent", model: "gpt-4", about: "A helpful customer service representative", instructions: [ "Be polite and professional", "Always offer to help further" ], default_system_template: ` You are {{agent.name}}, a customer service representative. {%- if metadata.priority == "high" -%} ⚠️ HIGH PRIORITY CUSTOMER - Provide expedited service {%- endif -%} {%- if metadata.customer_tier == "premium" -%} Premium customer - Offer enhanced support options {%- endif -%} Your guidelines: {{agent.instructions}} {%- if user.name -%} Customer name: {{user.name}} {%- endif -%} ` }); ``` ### Advanced Example with Conditional Logic ```python python template = """ {%- if agent.name -%} You are {{agent.name}}. {%- endif -%} {# Mood-based personality adjustment #} {%- if metadata.mood == "friendly" -%} Be warm, conversational, and use a friendly tone. {%- elif metadata.mood == "professional" -%} Maintain a formal, business-appropriate tone. {%- elif metadata.mood == "playful" -%} Feel free to be creative and add appropriate humor. {%- else -%} Respond in a balanced, helpful manner. {%- endif -%} {# Language preferences #} {%- if metadata.language -%} Respond in {{metadata.language}}. {%- endif -%} {# Expertise areas #} {%- if metadata.expertise -%} You are an expert in: {%- for skill in metadata.expertise -%} - {{skill}} {%- endfor -%} {%- endif -%} {# Include instructions #} {{agent.instructions}} {# Tool availability #} {%- if tools -%} Available tools: {%- for tool in tools -%} - {{tool.function.name}}: {{tool.function.description}} {%- endfor -%} {%- endif -%} """ # Using the template with metadata response = client.sessions.chat( session_id=session.id, messages=[ {"role": "user", "content": "Help me with Python"} ], metadata={ "mood": "friendly", "language": "English", "expertise": ["Python", "Machine Learning", "Data Science"] } ) ``` ```javascript javascript const template = ` {%- if agent.name -%} You are {{agent.name}}. {%- endif -%} {# Mood-based personality adjustment #} {%- if metadata.mood == "friendly" -%} Be warm, conversational, and use a friendly tone. {%- elif metadata.mood == "professional" -%} Maintain a formal, business-appropriate tone. {%- elif metadata.mood == "playful" -%} Feel free to be creative and add appropriate humor. {%- else -%} Respond in a balanced, helpful manner. {%- endif -%} {# Language preferences #} {%- if metadata.language -%} Respond in {{metadata.language}}. {%- endif -%} {# Expertise areas #} {%- if metadata.expertise -%} You are an expert in: {%- for skill in metadata.expertise -%} - {{skill}} {%- endfor -%} {%- endif -%} {# Include instructions #} {{agent.instructions}} {# Tool availability #} {%- if tools -%} Available tools: {%- for tool in tools -%} - {{tool.function.name}}: {{tool.function.description}} {%- endfor -%} {%- endif -%} `; // Using the template with metadata const response = await client.sessions.chat({ sessionId: session.id, messages: [ { role: "user", content: "Help me with Python" } ], metadata: { mood: "friendly", language: "English", expertise: ["Python", "Machine Learning", "Data Science"] } }); ``` ## Using Chat Metadata The `metadata` field in chat requests allows you to pass dynamic variables that can be used in your system templates. This enables message-level customization without modifying the agent or session. ### Example: Dynamic Instructions ```python python # Create an agent with a metadata-aware template agent = client.agents.create( name="Adaptive Assistant", default_system_template=""" You are {{agent.name}}. {%- if metadata.instructions -%} Special instructions for this conversation: {{metadata.instructions}} {%- endif -%} {%- if metadata.constraints -%} Important constraints: {%- for constraint in metadata.constraints -%} - {{constraint}} {%- endfor -%} {%- endif -%} """ ) # Use metadata to modify behavior per message response = client.sessions.chat( session_id=session.id, messages=[{"role": "user", "content": "Write a story"}], metadata={ "instructions": "Write in the style of Edgar Allan Poe", "constraints": [ "Keep it under 200 words", "Include a raven", "End with a twist" ] } ) ``` ```javascript javascript // Create an agent with a metadata-aware template const agent = await client.agents.create({ name: "Adaptive Assistant", default_system_template: ` You are {{agent.name}}. {%- if metadata.instructions -%} Special instructions for this conversation: {{metadata.instructions}} {%- endif -%} {%- if metadata.constraints -%} Important constraints: {%- for constraint in metadata.constraints -%} - {{constraint}} {%- endfor -%} {%- endif -%} ` }); // Use metadata to modify behavior per message const response = await client.sessions.chat({ sessionId: session.id, messages: [{ role: "user", content: "Write a story" }], metadata: { instructions: "Write in the style of Edgar Allan Poe", constraints: [ "Keep it under 200 words", "Include a raven", "End with a twist" ] } }); ``` ## Session vs Agent Templates You can override an agent's default template at the session level: ```python python # Agent with default template agent = client.agents.create( name="Multi-purpose Assistant", default_system_template="You are a helpful assistant." ) # Session with custom template session = client.sessions.create( agent_id=agent.id, system_template=""" You are a technical writing assistant. Focus on clarity, accuracy, and proper documentation structure. {%- if metadata.doc_type -%} You are writing a {{metadata.doc_type}}. {%- endif -%} """ ) ``` ```javascript javascript // Agent with default template const agent = await client.agents.create({ name: "Multi-purpose Assistant", default_system_template: "You are a helpful assistant." }); // Session with custom template const session = await client.sessions.create({ agentId: agent.id, system_template: ` You are a technical writing assistant. Focus on clarity, accuracy, and proper documentation structure. {%- if metadata.doc_type -%} You are writing a {{metadata.doc_type}}. {%- endif -%} ` }); ``` Use session templates when you need different behavior for the same agent in different contexts (e.g., customer service vs internal support). ## Jinja2 Features System templates support the full range of Jinja2 features: ### Conditionals ```jinja {%- if user.subscription_level == "premium" -%} You have access to advanced features. {%- elif user.subscription_level == "basic" -%} Some features may be limited. {%- else -%} Welcome! Consider upgrading for more features. {%- endif -%} ``` ### Loops ```jinja {%- if metadata.topics -%} Focus on these topics: {%- for topic in metadata.topics -%} - {{topic}} {%- endfor -%} {%- endif -%} ``` ### Filters ```jinja Agent name in uppercase: {{agent.name|upper}} Word count limit: {{metadata.word_limit|default(500)}} ``` ### Comments ```jinja {# This is a comment and won't appear in the output #} ``` ## Best Practices Avoid overly complex templates. If your template is becoming too large, consider breaking the logic into different agents or sessions. When using metadata, choose clear, descriptive keys: - ✅ `metadata.customer_tier` - ❌ `metadata.ct` Always handle cases where variables might be missing: ```jinja {{metadata.language|default("English")}} ``` Test your templates with various metadata combinations to ensure they render correctly in all scenarios. ## Common Patterns ### Multi-language Support ```jinja {%- if metadata.language == "es" -%} Eres un asistente útil. Responde en español. {%- elif metadata.language == "fr" -%} Vous êtes un assistant utile. Répondez en français. {%- else -%} You are a helpful assistant. Respond in English. {%- endif -%} ``` ### Role-based Access ```jinja {%- if metadata.user_role == "admin" -%} You have full access to all operations and sensitive information. {%- elif metadata.user_role == "user" -%} Provide general assistance. Do not share sensitive information. {%- endif -%} ``` ### Context-aware Behavior ```jinja {%- if metadata.context == "code_review" -%} Focus on code quality, security issues, and best practices. {%- elif metadata.context == "debugging" -%} Help identify and fix issues. Ask clarifying questions. {%- elif metadata.context == "learning" -%} Explain concepts clearly with examples. Be patient and thorough. {%- endif -%} ``` ## Debugging Templates To debug template rendering issues: 1. **Check Variable Availability**: Ensure all referenced variables exist 2. **Validate Jinja2 Syntax**: Use a Jinja2 linter or validator 3. **Test Incrementally**: Add template features one at a time 4. **Use the Render Endpoint**: Test template rendering without making chat requests ```python python # Test template rendering render_result = client.sessions.render( session_id=session.id, messages=[{"role": "user", "content": "Test"}], metadata={"test_var": "test_value"} ) # Inspect the rendered system message print(render_result.messages[0]["content"]) ``` ```javascript javascript // Test template rendering const renderResult = await client.sessions.render({ sessionId: session.id, messages: [{ role: "user", content: "Test" }], metadata: { test_var: "test_value" } }); // Inspect the rendered system message console.log(renderResult.messages[0].content); ``` ## Related Topics - [Agents](/concepts/agents) - Learn more about agent configuration - [Sessions](/concepts/sessions) - Understand session management - [Tasks](/concepts/tasks) - Create complex workflows with templates - [Tool Integration](/integrations/tools) - Add tools referenced in templates System templates are rendered server-side before being sent to the language model. This ensures security and consistency across all API clients. ================================================ FILE: documentation/advanced/types-of-task-steps.mdx ================================================ --- title: 'Types of Task Steps' description: 'Learn about different types of task steps and their use' icon: 'stairs' --- ## Overview In Julep broadly speaking there are two types of steps:

These steps control the flow of the task. They are used to create conditional logic, loops, and parallel execution.

These steps are used to get and set values in the task.

These steps are used to iterate over a collection.

These steps are used to create conditional logic.

These steps are used to control the flow of the task.

The steps defined out here are in the YAML format. You can learn more about the YAML format [here](https://yaml.org/spec/1.2.2/). ## Control Flow Steps ### Prompt Step Send messages to the AI model: ```yaml YAML # Simple prompt - prompt: What is your name? # Multi-message prompt - prompt: - role: system content: You are a helpful assistant - role: user content: "Hello!" # Prompt with settings - prompt: - role: user content: Generate a creative story settings: model: "claude-3.5-sonnet" temperature: 0.8 # Prompt with automatic tool execution - prompt: What's the weather in San Francisco? auto_run_tools: true # Tools execute automatically if needed # Prompt with JSON response format - prompt: - role: system content: You are a helpful assistant that always responds in JSON format. - role: user content: List 3 interesting facts about space. Format as JSON with 'facts' array. settings: model: "gpt-4o-mini" temperature: 0.7 response_format: type: json_object # Prompt with JSON schema for structured output - prompt: - role: system content: You are a data extraction specialist. - role: user content: Extract product information from the description. settings: response_format: type: json_schema json_schema: name: product_info schema: type: object properties: product_name: type: string features: type: array items: type: string price: type: number required: ["product_name", "features", "price"] ``` When `auto_run_tools` is set to `true` in a prompt step, any tools available to the agent will be automatically executed if the model decides to use them. The results are then fed back to the model to continue processing. This is particularly useful for creating autonomous workflows where the agent can gather information and make decisions without manual intervention. The `response_format` setting allows you to request structured output from the model. There are two main options: - `type: json_object` - Ensures the model responds with valid JSON - `type: json_schema` - Enforces a specific JSON structure defined by a schema When using `response_format`, make sure to instruct the model to produce JSON in your prompt (via system or user message) for best results. Response format support varies by model provider - check the [supported models documentation](/integrations/supported-models) for compatibility. In the prompt step we offer a bunch of Python functions to help you manipulate data. Here is a list of the functions you can use: - Standard library modules: - `re`: Regular expressions (safe against ReDoS) - `json`: JSON encoding/decoding - `yaml`: YAML parsing/dumping - `string`: String constants and operations - `datetime`: Date and time operations - `math`: Mathematical functions - `statistics`: Statistical operations - `base64`: Base64 encoding/decoding - `urllib`: URL parsing operations - `random`: Random number generation - `time`: Time operations - Constants: - `NEWLINE`: Newline character - `true`: Boolean true - `false`: Boolean false - `null`: None value ### Tool Call Step Execute tools defined in the task: ```yaml YAML # Simple tool call - tool: web_search arguments: query: Latest AI news # Tool call with complex arguments - tool: process_data arguments: input_data: $ _.previous_result options: format: "json" validate: true ``` ### Evaluate Step Perform calculations or data manipulation: ```yaml YAML # Simple evaluation - evaluate: count: $ len(_.results) # Multiple evaluations - evaluate: total: $ sum(_.numbers) average: $ _.total / len(_.numbers) formatted: $ f'Average: {_.average:.2f}' ``` In the evaluate step we offer a bunch of Python functions to help you manipulate data. Check out the [Python Expressions](/advanced/python-expression#available-functions-and-libraries) for more information. ### Wait for Input Step Pause workflow for user input: ```yaml YAML # Simple input request - wait_for_input: info: message: "Please provide your name" # Input with validation - wait_for_input: info: message: "Enter your age" validation: type: "number" minimum: 0 maximum: 150 ``` ### Subworkflow Step Executing a subworkflow from a main workflow: ```yaml YAML [expandable] # Subworkflow subworkflow: - evaluate: main_workflow_input: $ _.content # you can use steps[0].input.content to access the input of the subworkflow - return: result: "This is the subworkflow" # Main workflow main: # Step 0: Evaluate step - evaluate: result: "This is the main workflow" # Step 1: Call the subworkflow - workflow: subworkflow # name of the subworkflow arguments: # input to the subworkflow content: $ _.result # you can use steps[0].output.result to access the result of the previous step # Step 2: Evaluate step - evaluate: subworkflow_result: $ steps[1].output.result # this will be the result of the subworkflow ``` - The `arguments` passed from the main workflow to the subworkflow are available in the `steps[0].input` of the subworkflow. - The `result` of the subworkflow is available in the `steps[1].output.result` of the main workflow. - The `Input/Output Data References` between steps is exclusive to the workflow they are defined in. A workflow cannot reference the `input` or `output` of another workflow between the steps. To learn more about `Input/Output Data References` [click here](/advanced/new-syntax#1-input-output-data-references). Self recursion is allowed in a subworkflow but not in a main workflow. ## Key-Value Steps ### Get Step Retrieve values from storage: ```yaml YAML # Get a single value - get: user_preference # Get multiple values - get: - preference1 - preference2 ``` ### Set Step Store values for later use: ```yaml YAML # Set a single value - set: user_name: John # Set multiple values - set: count: $ len(_.results) has_data: $ _.count > 0 ``` Values stored using the set step are added to the workflow's global `state` object, which can be accessed anywhere in the workflow using `state.variable_name`. For example: ```yaml YAML # Access previously set values - evaluate: greeting: $ f"Hello, {state.user_name}!" data_status: $ f"Has data: {state.has_data}, Count: {state.count}" ``` Each subworkflow has its own isolated `state` object. Values set in one subworkflow are not accessible from other subworkflows or the parent workflow. ### Label Step Label a step to make it easier to identify and access those values later in any step: ```yaml YAML # Step 0: Set a single value - set: user_name: John label: get_user_name # Step 1: Set multiple values - set: count: $ len(_.results) has_data: $ _.count > 0 label: get_count_and_has_data ``` In any steps following the label step, you can access the values set in the label step using the `$ steps['label_name'].input.attribute_name` or `$ steps['label_name'].output.attribute_name` syntax. For example: ```yaml YAML - evaluate: user_name: $ steps['get_user_name'].output.user_name - evaluate: count: $ steps['get_count_and_has_data'].output.count has_data: $ steps['get_count_and_has_data'].output.has_data ``` ## Iteration Steps ### Foreach Step Iterate over a collection: ```yaml YAML # Simple foreach - foreach: in: $ _.items do: log: $ f'Processing {_}' # Foreach with complex processing - foreach: in: $ _.documents do: tool: analyze arguments: text: $ _.content evaluate: results: $ _ + [_.analysis] ``` ### Map-Reduce Step Process collections in parallel: ```yaml YAML # Simple map-reduce - over: $ _.urls map: tool: fetch_content arguments: url: $ _ reduce: $ results + [_] # Map-reduce with parallelism - over: $ _.queries map: tool: web_search arguments: query: $ _ parallelism: 5 # Number of parallel steps to execute ``` - By default the `parallelism` if not mentioned is 100. If mentioned, it is the maximum number of steps that can run in parallel concurrently. - When using `over` step, the `map` step is executed for each value in the collection. - The `reduce` step is executed after the `map` step. ## Conditional Steps ### If-Else Step Conditional execution: ```yaml YAML [expandable] # Simple if - if: $ _.count > 0 then: log: Found results # If-else - if: $ _.score > 0.8 then: log: High score else: log: Low score # If-else with multiple conditions - if: $ 1 > 0 then: if: $ 2 > 1 then: evaluate: x: y else: evaluate: x: z ``` ### Switch Step Multiple condition handling: ```yaml YAML # Switch statement - switch: - case: $ _.category == "A" then: - log: Category A - case: $ _.category == "B" then: - log: Category B - case: $ _ # Default case then: - log: Unknown category ``` ## Other Control Flow ### Sleep Step Pause execution: ```yaml YAML # Sleep for duration - sleep: seconds: 30 # Sleep with different units - sleep: minutes: 5 # hours: 1 # days: 1 ``` ### Return Step Return values from workflow: ```yaml YAML # Simple return - return: $ _.result # Structured return - return: data: $ _.processed_data metadata: count: $ _.count timestamp: $ datetime.now().isoformat() ``` ### Log Step Log messages or specific values: ```yaml YAML - log: $ f'Processing completed for item {item_id}' ``` ### Error Step Handle errors by specifying an error message: ```yaml YAML - error: Invalid input provided ``` ## Example: Complex Workflow Here's an example combining various step types: ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Multi-Step Task Demonstration description: A demonstration of multi-step task processing with research and summarization capabilities. ################################################################################ ############################# INPUT SCHEMA ##################################### ################################################################################ input_schema: type: object properties: topic: type: string description: The topic to research and summarize. ################################################################################ ############################# TOOLS ############################################ ################################################################################ # Describing the tools that will be used in the workflow tools: - name: web_search type: integration integration: provider: brave setup: brave_api_key: "YOUR_BRAVE_API_KEY" ################################################################################ ############################# MAIN WORKFLOW #################################### ################################################################################ main: # Step 0: Generate initial research questions - prompt: - role: system content: >- $ f''' You are a research assistant. Your task is to formulate three specific research questions about the given topic: {steps[0].input.topic}''' unwrap: true # Step 1: Web search for each question - foreach: in: $ _.split('\\n') do: tool: web_search arguments: query: $ _ # Step 2: Extract relevant information - evaluate: relevant_info: $ [output for output in _] # Step 3: Process and summarize information - if: $ len(_.relevant_info) >= 3 then: prompt: - role: system content: >- $ f''' Summarize the following information about {steps[0].input.topic}: {_.relevant_info}''' unwrap: true else: prompt: - role: system content: >- $ f''' Not enough information gathered. Please provide a brief overview of {steps[0].input.topic} based on your knowledge.''' unwrap: true # Step 4: Record the summary - log: >- $ f''' Summary for {steps[0].input.topic}: {_}''' # Step 5: Prepare final output - return: summary: $ _ topic: $ steps[0].input.topic ``` ## Best Practices
  • Group related steps logically
  • Use comments to explain complex steps
  • Keep step chains focused and manageable
  • Use if-else for error conditions
  • Provide fallback options
  • Log important state changes
  • Use parallel execution when possible
  • Optimize data passing between steps
  • Cache frequently used values
## Support If you need help with further questions in Julep: - Join our [Discord community](https://discord.com/invite/JTSBGRZrzj) - Check the [GitHub repository](https://github.com/julep-ai/julep) - Contact support at [hey@julep.ai](mailto:hey@julep.ai) ================================================ FILE: documentation/concepts/agents.mdx ================================================ --- title: 'Agents' description: 'Understanding Julep Agents and their capabilities' icon: 'lightbulb' --- ## Overview Agents are conceptual entities that encapsulate all the configurations and settings of an LLM, enabling it to adopt unique personas and execute distinct tasks within an application. ## Components Agents are made up of several components. Think of components as the building blocks of an agent required to perform a task. Here are the key components associated with an agent: - Instructions - Agent configuration that can be provided as either a single string or an array of strings. - Metadata - Key-value pair that can be used to categorize and filter agents. - Tools - Functions that can be used by an agent to perform tasks. Julep supports a wide range of tools, including custom tools, which are functions that can be used by an agent to perform tasks. - Docs - A collection of documents that can be used by an agent to retrieve information. Docs can be associated with an agent and can be used to retrieve or search information from the agent's context. ### Agent Configuration Options When creating an agent, you can leverage the following configuration options: | Option | Type | Description | Default | |-------------------------|-----------------------|-----------------------------------------------------------------------------|-------------| | `name` | `string` | The name of your agent | Required | | `canonical_name` | `string` | A unique identifier for your agent, following the pattern `[a-zA-Z][a-zA-Z0-9_]*` | `null` | | `project` | `string` | The canonical name of the project this agent belongs to | `"default"` | | `about` | `string` | A brief description of what your agent does | `""` | | `model` | `string` | The language model your agent uses (e.g., "gpt-4-turbo", "gemini-nano") | `""` | | `instructions` | `string` \| `list[string]`| Specific tasks or behaviors expected from the agent | `[]` | | `metadata` | `object` | Key-value pairs for additional information about your agent | `null` | | `default_settings` | `object` | Default configuration settings for the agent. See [supported parameters](/integrations/supported-models#supported-parameters) for details. | `null` | | `default_system_template` | `string` | Default system template for all sessions created by this agent. | See [default system template](/concepts/agents#default-system-template) | The **System Template** is a specific system prompt written as a Jinja template that sets the foundational context and instructions for the agent within a session. It defines the background, directives, and any relevant information that the agent should consider when interacting with the user. For a comprehensive guide on system templates including available variables, customization options, and advanced usage patterns, see the [System Templates](/advanced/system-templates) documentation. For more details on Jinja templates, refer to the [Jinja documentation](https://jinja.palletsprojects.com/). ```python Python [expandable] {%- if agent.name -%} You are {{ agent.name }}. {%- endif -%} {%- if agent.about -%} About you: {{ agent.about }}. {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%} and their name is {{ user.name }} {%- if user.about -%} . About the user: {{ user.about }}. {%- else -%} . {%- endif -%} {%- endif -%} {%- endif -%} {{ NEWLINE }} {%- if session.situation -%} Situation: {{ session.situation }} {%- endif -%} {{ NEWLINE + NEWLINE }} {%- if agent.instructions -%} Instructions: {%- if agent.instructions is string -%} {{ agent.instructions }} {%- else -%} {%- for instruction in agent.instructions -%} - {{ instruction }} {%- endfor -%} {%- endif -%} {{ NEWLINE }} {%- endif -%} {%- if docs -%} Relevant documents: {%- for doc in docs -%} {{ doc.title }} {%- if doc.content is string -%} {{ doc.content }} {%- else -%} {%- for snippet in doc.content -%} {{ snippet }} {%- endfor -%} {%- endif -%} --- {%- endfor -%} {%- endif -%} ``` ## How to Use Agents In Julep, how you use agents is very important. The YAML below shows the anatomy of an agent. ```yaml YAML name: "My Agent" model: "claude-3.5-sonnet" project: "data-analytics" about: "A helpful AI assistant that specializes in data analysis" instructions: "You are a helpful AI assistant that specializes in data analysis" metadata: type: "data-analysis" tools: - name: "calculate_total" description: "Calculate the total of a list of numbers" function: parameters: type: "object" properties: numbers: type: "array" items: type: "number" ``` ### Creating an Agent To create an agent, you can use the `create` method in the Python or Node.js SDK. ```python Python from julep import Julep client = Julep(api_key="your_api_key") agent = client.agents.create( name="My Agent", model="claude-3.5-sonnet", about="A helpful AI assistant that specializes in data analysis", instructions="You are a helpful AI assistant that specializes in data analysis", metadata={"type": "data-analysis"}, tools=[ { "name": "calculate_total", "description": "Calculate the total of a list of numbers", "function": { "parameters": {"type": "object", "properties": {"numbers": {"type": "array", "items": {"type": "number"}}}} } } ] ) ``` ```javascript Node.js import { Julep } from '@julep/sdk'; const client = new Julep({ apiKey: 'your_api_key' }); const agent = await client.agents.create({ name: "My Agent", model: "claude-3.5-sonnet", about: "A helpful AI assistant that specializes in data analysis", instructions: "You are a helpful AI assistant that specializes in data analysis", metadata: {"type": "data-analysis"}, tools: [ { "name": "calculate_total", "description": "Calculate the total of a list of numbers", "function": { "parameters": {"type": "object", "properties": {"numbers": {"type": "array", "items": {"type": "number"}}}} } } ] }); ``` ### Using default_settings with response_format You can configure your agent to always return structured JSON responses by setting `response_format` in the `default_settings`: ```python Python agent = client.agents.create( name="Data Analyst", model="gpt-4o-mini", about="An agent that analyzes data and returns structured insights", instructions="Always provide analysis results in a structured format", default_settings={ "temperature": 0.3, "response_format": { "type": "json_object" } } ) ``` ```javascript Node.js const agent = await client.agents.create({ name: "Data Analyst", model: "gpt-4o-mini", about: "An agent that analyzes data and returns structured insights", instructions: "Always provide analysis results in a structured format", default_settings: { temperature: 0.3, response_format: { type: "json_object" } } }); ``` Check out the API reference [here](/api-reference/agents/create-agent) or SDK reference (Python [here](/sdks/python/reference#agents) or JavaScript [here](/sdks/nodejs/reference#agents) for more details on different operations you can perform on agents. ## Relationship To Other Concepts This section will help you understand how agents relate to other concepts in Julep. ### Projects Agents belong to exactly one project, which helps organize related resources together. When creating an agent, you can specify which project it belongs to using the `project` parameter. If not specified, the agent will be assigned to the "default" project. For example: ```python Python # Create an agent in a specific project agent = client.agents.create( name="Customer Support Bot", project="support-platform" ) ``` ```javascript Node.js // Create an agent in a specific project const agent = await client.agents.create({ name: "Customer Support Bot", project: "support-platform" }); ``` For more information about projects, see [Projects](/concepts/projects). ### Tools Agents can be associated with different types of tools available in Julep to enable them to perform operations. These tools associated with an agent can also be leveraged by a task associated with the agent. For example: ```python Python # Create an agent agent = client.agents.create(name="My Agent") # Associate a tool with the agent client.agents.tools.create( agent_id=AGENT_UUID, **{ "name": "computer", "type": "computer_20241022", "computer_20241022": { "display_height_px": 768, "display_width_px": 1024, "display_number": 1, }, } ) ``` ```javascript Node.js // Create an agent const agent = await client.agents.create({name: "My Agent"}); // Associate a tool with the agent await client.agents.tools.create(agent.id, { name: "computer", type: "computer_20241022", computer_20241022: { display_height_px: 768, display_width_px: 1024, display_number: 1, }, }); ``` ### Sessions Agents can be used in sessions to enable real-time, interactive conversations. While tasks are designed for automated workflows, sessions provide a way to have stateful, continuous interactions with an agent. You can create multiple sessions with the same agent or multiple agents in a session, each session maintaining its own conversation history and context. This makes sessions ideal for scenarios requiring ongoing dialogue or human-in-the-loop interactions. For example: ```python Python # Create an agent agent = client.agents.create(name="My Agent") # Create a session with the agent session = client.sessions.create(agent=agent.id) ``` ```javascript Node.js // Create an agent const agent = await client.agents.create({name: "My Agent"}); // Create a session with the agent const session = await client.sessions.create({agent: agent.id}); ``` ## Best Practices
  • **1. Clear, Focused Purposes**: Give agents clear, focused purposes rather than making them generalists
  • **2. Descriptive Names**: Use descriptive names that reflect the agent's primary function
  • **3. Concise Instructions**: Keep instructions concise but specific
  • **4. Specialized Agents**: Break complex tasks into multiple specialized agents rather than one complex agent
  • **1. Conservative Model Settings**: Start with conservative model settings (temperature, top_p) and adjust as needed
  • **2. Metadata**: Use metadata effectively for organization and filtering
  • **3. Tools**: Define tools that are specific to the agent's purpose
  • **1. Reuse Agents**: Reuse agents across similar tasks instead of creating new ones
  • **2. Clean Up**: Clean up unused agents and their associated resources
  • **3. Monitor Token Usage**: Monitor token usage and adjust context windows appropriately
Avoid giving agents more capabilities than they need. Each additional tool or permission increases the complexity and potential security surface area. ## Next Steps - [Agent Tools](/concepts/tools) - Learn about tools and how to use them with agents - [Agent Tasks](/concepts/tasks) - Learn about tasks and how to use them with agents - [Agent Sessions](/concepts/sessions) - Learn about sessions and how to use them with agents - [Agent Docs](/concepts/docs) - Learn about docs and how to use them with agents ## See Examples - [Hello Agent notebook](https://github.com/julep-ai/julep/blob/main/cookbooks/basics/01-Hello-Agent.ipynb) - [Companion Agent notebook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/09-companion-agent.ipynb) ================================================ FILE: documentation/concepts/docs.mdx ================================================ --- title: 'Documents (RAG)' description: 'Working with documents in Julep' icon: 'database' --- ## Overview Documents in Julep provide a way to store and retrieve information that can be used by agents. This section covers how to work with documents effectively. ## Components Documents in Julep consist of several key components that enable efficient storage and retrieval of information. - **Title**: The title component helps identify and organize documents. - **Content**: The textual content of the document. - **Embeddings** (automatically generated): The vector representations of text that enable semantic search capabilities. Generated using the `text-embedding-3-large` model from OpenAI. - **Metadata**: Metadata provides additional context and filtering capabilities for documents. ### Docs Configuration Options When creating a doc, the following attributes can be specified: | **Field** | **Type** | **Description** | **Default** | |------------|----------|---------------------------------------------------------------------------|-------------| | `title` | `string` | The title of the document. | Required | | `content` | `string` | The content of the document. | Required | | `metadata` | `object` | Additional metadata for the document, such as preferences or settings. | `null` | ## How to Use Docs ### Creating a Doc Documents are attached to either an agent or a user. This is how you can create a doc using Julep's SDKs. **Example:** ```python Python # Creating a doc client.agents.docs.create( agent_id=agent.id, title="Old World", content="The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa. In Europe, the era was marked by the rise of feudalism, the power of the Catholic Church, and the cultural blossoming of the Renaissance towards its end. Asia witnessed the flourishing of the Silk Road, facilitating trade and cultural exchange, and the rise of powerful empires such as the Mongol Empire, which at its height, stretched from Europe to Asia. Meanwhile, Africa saw the growth of influential kingdoms and empires like Mali, known for its wealth and the legendary pilgrimage of Mansa Musa, and the spread of Islam across the continent, which played a crucial role in shaping its cultural and social landscapes.", metadata={"source": "https://en.wikipedia.org/wiki/Medieval_period"}, ) ``` ```javascript Node.js // Creating a doc const doc = await client.agents.docs.create({ agent_id: "agent_id", title: "Old World", content: "The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa. In Europe, the era was marked by the rise of feudalism, the power of the Catholic Church, and the cultural blossoming of the Renaissance towards its end. Asia witnessed the flourishing of the Silk Road, facilitating trade and cultural exchange, and the rise of powerful empires such as the Mongol Empire, which at its height, stretched from Europe to Asia. Meanwhile, Africa saw the growth of influential kingdoms and empires like Mali, known for its wealth and the legendary pilgrimage of Mansa Musa, and the spread of Islam across the continent, which played a crucial role in shaping its cultural and social landscapes.", metadata: {"source": "https://en.wikipedia.org/wiki/Medieval_period"}, }); ``` To create a user doc, replace `client.agents.docs.create` with `client.users.docs.create`, and the `agent_id` argument with `user_id`. Check out the [API reference](/api-reference/create-user-doc) or SDK reference ([Python](/sdks/python/reference#docs) or [JavaScript](/sdks/nodejs/reference#docs)) for more details on different operations you can perform on docs. ### Getting a Doc To get a doc, you can use the `client.docs.get` method, and pass the doc's ID. **Example:** ```python Python # Getting a doc doc = client.docs.get(doc_id="doc_id") print(doc) ``` ```javascript Node.js // Getting a doc const doc = await client.docs.get("doc_id"); console.log(doc) ``` When you get a doc, you can access the doc's `title`, `content`, `embeddings`, `metadata` and other attributes. ``` [expandable] Doc( id='0680b756-9827-7cf2-8000-82ed5daf816e', content=['The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa.'], created_at=datetime.datetime(2023, 4, 25, 11, 43, 37, 513161, tzinfo=datetime.timezone.utc), title='Old World', embedding_dimensions=1024, embedding_model='text-embedding-3-large', embeddings=[ -0.036940154, 0.021077264, -0.03274468, 0.016222501, ... -0.05038565, 0.012776218, ... ], language='english', metadata={"source": "https://en.wikipedia.org/wiki/Medieval_period"}, modality='text' ) ``` ### Chunking In Julep, documents are not automatically chunked. We recommend that developers handle chunking based on their specific use case requirements, as different applications may have unique needs for how documents should be divided. For those who need assistance with chunking, we provide a utility function `chunk_doc` that can be used directly in task steps. For implementation details, you can check the source code for this method in [this file](https://github.com/julep-ai/julep/blob/main/agents-api/agents_api/activities/utils.py). ### Search #### Full Text Search Our full-text search functionality leverages Timescale's powerful indexing to efficiently match user-provided keywords and phrases against document content, delivering relevant results even with variations in text. Key features include prefix and infix searching, morphology processing (stemming and lemmatization), fuzzy searching to handle typos, and exact result counts. **Parameters:** | Parameter | Type | Description | Default | |------------------|---------|--------------------------------------------------|----------| | `text` | `str` | The textual query to search within documents. | **Required** | | `metadata_filter`| `object`| Filters to apply based on document metadata. | `None` | | `lang` | `str` | The language to use for full-text search processing. | `'english'` | | `limit` | `int` | The maximum number of documents to return. | `10` | | `trigram_similarity_threshold` | `float` | The threshold for trigram similarity matching (higher values require closer matches) | `0.6` | The default parameters for full-text search are based on our internal benchmarking. These values provide a good starting point, but you may need to adjust them depending on your specific use case to achieve optimal results. **Example:** ```python Python # Define the query text_query = "Medieval times in Europe" # Search for docs matched_docs = client.agents.docs.search( agent_id="agent_id", text=text_query, limit=10, # the maximum number of docs to return ) print(matched_docs.model_dump()) ``` ```javascript Node.js // Define the query const text_query = "Medieval times in Europe"; // Search for docs const matched_docs = await client.agents.docs.search({ agent_id: "agent_id", text: text_query, limit: 10, // the maximum number of docs to return }); console.log(matched_docs); ``` ``` {'docs': [{'id': '06791e86-6dcf-7816-8000-e4c3b781d05b', 'owner': {'id': '06791e82-46b7-739c-8000-3428f9d4e40f', 'role': 'agent'}, 'snippet': {'content': 'The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa. In Europe, the era was marked by the rise of feudalism, the power of the Catholic Church, and the cultural blossoming of the Renaissance towards its end. Asia witnessed the flourishing of the Silk Road, facilitating trade and cultural exchange, and the rise of powerful empires such as the Mongol Empire, which at its height, stretched from Europe to Asia. Meanwhile, Africa saw the growth of influential kingdoms and empires like Mali, known for its wealth and the legendary pilgrimage of Mansa Musa, and the spread of Islam across the continent, which played a crucial role in shaping its cultural and social landscapes.', 'index': 0, 'embedding': [ -0.036940154, 0.021077264, -0.03274468, 0.016222501, -0.05038565, 0.012776218, ... ...]}, 'distance': 0.6666666865348816, 'metadata': {"source": "https://en.wikipedia.org/wiki/Medieval_period"}, 'title': 'Old World'}], 'time': 0.0522150993347168} ``` Check out the [API reference](/api-reference/search-agent-docs) or SDK reference ([Python](/sdks/python/reference#docs) or [JavaScript](/sdks/nodejs/reference#docs)) for more details on different operations you can perform on docs. #### Embedding (vector) Search Our embedding (vector) search functionality leverages machine learning to convert search queries and documents into numerical vectors, enabling semantic matching based on vector similarity. It utilizes an embedding space where similar vectors indicate related content and employs algorithms like k-nearest neighbors (KNN) to retrieve the most relevant documents. Key features include context awareness, flexibility for natural language queries, multi-modal search across various content types, and effective handling of synonyms. **Parameters:** | Parameter | Type | Description | Default | |------------------|-----------------|-----------------------------------------------------------------------------------------------|---------| | `vector` | `number[]` | The embedding vector representing the semantic meaning of the query. | **Required** | | `limit` | `integer` | The number of top results to return (must be between 1 and 50). | `10` | | `lang` | `string` | The language for the search query. | `en-US` | | `metadata_filter`| `object` | Filters to apply based on document metadata. | None | | `mmr_strength` | `number` | The strength of Maximum Marginal Relevance diversification (must be between 0 and 1). | `0.5` | | `confidence` | `number` | The confidence threshold for embedding similarity (must be between -1 and 1). | `0.5` | The default parameters for embedding search are based on our internal benchmarking. These values provide a good starting point, but you may need to adjust them depending on your specific use case to achieve optimal results. ```python Python # Define the vector query vector_query = client.docs.embed(text="Medieval times in Europe").vectors[0] # Search for docs matched_docs = client.agents.docs.search( agent_id="agent_id", vector=vector_query, limit=10, # the maximum number of docs to return confidence=-0.3, # confidence range is -1 to 1 ) print(matched_docs.model_dump()) ``` ```javascript Node.js // Define the vector query const embedding_result = client.docs.embed({ text: "Medieval times in Europe" }); const vector_query = embedding_result.vectors[0]; // Search for docs const matched_docs = await client.agents.docs.search({ agent_id: "agent_id", vector: vector_query, limit: 10, // the maximum number of docs to return confidence: -0.3, // confidence range is -1 to 1 }); console.log(matched_docs); ``` ``` {'docs': [{'id': '06791e86-6dcf-7816-8000-e4c3b781d05b', 'owner': {'id': '06791e82-46b7-739c-8000-3428f9d4e40f', 'role': 'agent'}, 'snippet': {'content': 'The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa. In Europe, the era was marked by the rise of feudalism, the power of the Catholic Church, and the cultural blossoming of the Renaissance towards its end. Asia witnessed the flourishing of the Silk Road, facilitating trade and cultural exchange, and the rise of powerful empires such as the Mongol Empire, which at its height, stretched from Europe to Asia. Meanwhile, Africa saw the growth of influential kingdoms and empires like Mali, known for its wealth and the legendary pilgrimage of Mansa Musa, and the spread of Islam across the continent, which played a crucial role in shaping its cultural and social landscapes.', 'index': 0, 'embedding': [ -0.036940154, 0.021077264, -0.03274468, 0.016222501, -0.05038565, 0.012776218, -0.034123193, -0.005039564, ... ...]}, 'distance': 0.9322964182738759, 'metadata': {"source": "https://en.wikipedia.org/wiki/Medieval_period"}, 'title': 'Old World'}], 'time': 0.04166412353515625} ``` Check out the [API reference](/api-reference/search-agent-docs) or SDK reference ([Python](/sdks/python/reference#docs) or [JavaScript](/sdks/nodejs/reference#docs)) for more details on different operations you can perform on docs. #### Hybrid Search Our hybrid search functionality combines multiple search techniques to deliver highly relevant and accurate search results. Julep's hybrid search uses a three-pronged approach that leverages: 1. **Full-text search** - Traditional keyword-based search using PostgreSQL's tsquery/tsrank 2. **Vector search** - Semantic search using embeddings for contextual understanding 3. **Trigram search** - Fuzzy text matching using character n-grams for typo tolerance By combining these approaches, hybrid search ensures that queries are matched not only on exact terms but also understood in context and tolerant of variations, providing more nuanced and precise results. This comprehensive approach enhances search performance, improves result relevance, and accommodates a wider range of search queries. ##### Trigram Search Features Julep's trigram search capabilities include: - **Fuzzy Matching** - Handles typos, spelling variations, and morphological differences - **Similarity Scoring** - Combines trigram similarity with Levenshtein distance for accurate matching - **Word-Level Analysis** - Matches individual meaningful words against target content - **Adaptive Weighting** - Adjusts fuzzy matching strength based on query length - **Performance Optimization** - Uses PostgreSQL's GIN indexes and materialized CTEs for efficient processing ##### How It Works 1. When a search query is submitted, Julep runs both full-text search and trigram-based fuzzy search in parallel. 2. Traditional full-text search results are prioritized (returned first). 3. Trigram search then finds documents that full-text search might miss due to minor variations or typos. 4. The system integrates these results with vector-based search results using Distribution-Based Score Fusion (DBSF). 5. Results are ranked and returned based on a combination of all three search approaches. **Parameters:** | **Parameter** | **Type** | **Description** | **Default** | |-------------------|----------------|---------------------------------------------------------------------------------|-------------| | `text` | `str` | The textual query to search within documents. | **Required** | | `vector` | `List[float]` | The embedding vector representing the semantic meaning of the query. | **Required** | | `alpha` | `float` | The weight assigned to embedding-based results versus text-based results (must be between 0 and 1). | `0.5` | | `confidence` | `float` | The confidence threshold for embedding similarity (must be between -1 and 1). | `0.5` | | `metadata_filter` | `object` | Filters to apply based on document metadata. | `None` | | `limit` | `int` | The number of top results to return. | `3` | | `lang` | `str` | The language to use for full-text search processing. | `english_unaccent` | | `mmr_strength` | `float` | The strength of Maximum Marginal Relevance diversification (must be between 0 and 1). | `0.5` | | `trigram_similarity_threshold` | `float` | The threshold for trigram similarity matching (must be between 0 and 1). | `0.6` | | `k_multiplier` | `int` | Controls how many intermediate results to fetch before final scoring. | `7` | The default parameters for hybrid search are based on our internal benchmarking. These values provide a good starting point, but you may need to adjust them depending on your specific use case to achieve optimal results. **Example:** ```python Python # Define the query text_query = "Medieval times in Europe" # Embed the query using the `docs.embed` method embedded_query = client.docs.embed(text=text_query).vectors[0] # Search for docs matched_docs = client.agents.docs.search( agent_id="agent_id", text=text_query, alpha=0.5, # the weight of the embedding query vector=embedded_query, confidence=-0.3, # confidence range is -1 to 1 ) print(matched_docs.model_dump()) ``` ```javascript Node.js // Define the query const text_query = "Medieval times in Europe"; // Embed the query using the `docs.embed` method const embedding_result = await client.docs.embed({ text: text_query }); const embedded_query = embedding_result.vectors[0]; // Search for docs const matched_docs = await client.agents.docs.search({ agent_id: "agent_id", text: text_query, vector: embedded_query, confidence: -0.3, // confidence range is -1 to 1 alpha: 0.5, // the weight of the embedding query }); console.log(matched_docs); ``` ``` {'docs': [{'id': '06791e86-6dcf-7816-8000-e4c3b781d05b', 'owner': {'id': '06791e82-46b7-739c-8000-3428f9d4e40f', 'role': 'agent'}, 'snippet': {'content': 'The medieval period, spanning roughly from the 5th to the late 15th century, was a time of significant transformation across Europe, Asia, and Africa. In Europe, the era was marked by the rise of feudalism, the power of the Catholic Church, and the cultural blossoming of the Renaissance towards its end. Asia witnessed the flourishing of the Silk Road, facilitating trade and cultural exchange, and the rise of powerful empires such as the Mongol Empire, which at its height, stretched from Europe to Asia. Meanwhile, Africa saw the growth of influential kingdoms and empires like Mali, known for its wealth and the legendary pilgrimage of Mansa Musa, and the spread of Islam across the continent, which played a crucial role in shaping its cultural and social landscapes.', 'index': 0, 'embedding': [ -0.036940154, 0.021077264, -0.03274468, 0.016222501, -0.05038565, 0.012776218, -0.034123193, -0.005039564, ... ...]}, 'distance': 0.13411101466087272, 'metadata': {"source": "https://en.wikipedia.org/wiki/Medieval_period"}, 'title': 'Old World'}], 'time': 0.0514223575592041} ``` Check out the [API reference](/api-reference/search-agent-docs) or SDK reference ([Python](/sdks/python/reference#docs) or [JavaScript](/sdks/nodejs/reference#docs)) for more details on different operations you can perform on docs. ## Filtering While search is carried on based on the textual and/or semantic content of the documents, you can also filter the documents based on their metadata. **Example:** ```python Python # Filter docs based on metadata dev_client.agents.docs.list( agent_id="agent_id", metadata_filter={"source": "wikipedia"}, ) print(docs.items) ``` ```javascript Node.js // Filter docs based on metadata const docs = await client.agents.docs.list( agentId, { metadata_filter: {"source": "wikipedia"}, } ); console.log(docs.items); ``` Check out the [API reference](/api-reference/list-agent-docs) or SDK reference ([Python](/sdks/python/reference#docs) or [JavaScript](/sdks/nodejs/reference#docs)) for more details on different operations you can perform on docs. ## Relationship to Other Concepts ### Sessions Sessions have access to search, retrieve and reference agents and users documents inside chat conversations. Read more about it [here](/concepts/sessions#documents). ### Tasks By leveraging [System Tools](/concepts/tools#system-tools), Julep [Tasks](/concepts/tasks) have the ability to create, search, filter and read documents. **Example:** ```yaml [expandable] input_schema: type: object properties: user_id: type: string description: The id of the user to list documents for tools: - name: "list_user_docs" description: "List all documents for the current user" type: "system" system: resource: user subresource: doc operation: list main: # Step that lists all documents for the current user - tool: "list_user_docs" arguments: user_id: $ _.user_id # Step that evaluates the textual contents of all documents for the current user - evaluate: all_user_docs_contents: $ [doc.content for doc in _.items] ``` Checkout [this cookbook](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/11-generate-user-personas.ipynb) that leverages Julep's docs, system tools and tasks to create content-rich user personas. ## Best Practices
  • **1. Metadata**: Use consistent and descriptive metadata to enhance document retrieval and filtering.
  • **1. Version Control**: Maintain version control for documents to track changes and updates over time.
  • **1. Access Control**: Ensure sensitive information is protected and access to documents is properly managed.
  • **1. Chunking Strategies**: Implement efficient chunking strategies to optimize document processing and retrieval.
  • **1. Update**: Regularly update document content and metadata to keep information current and relevant.
## Advanced Search Features ### Trigram-Enhanced Fuzzy Matching Julep's advanced fuzzy matching capability is built on PostgreSQL's `pg_trgm` extension and enhanced with additional similarity techniques. This allows for resilient document retrieval that can handle variations in text, including: - Typos and spelling errors - Morphological variations - Term order differences - Incomplete terms #### Similarity Mechanisms Julep uses a multi-layered approach to determine text similarity: 1. **Basic Trigram Similarity** - Uses PostgreSQL's built-in trigram functions to match documents based on character-level n-grams. 2. **Enhanced Similarity** - Combines trigram matching with Levenshtein distance calculations to provide better accuracy, especially for shorter text segments: ```sql -- 70% trigram, 30% Levenshtein for shorter strings RETURN 0.7 * trgm_sim + 0.3 * norm_lev; ``` 3. **Word-Level Similarity** - Breaks text into individual words and finds the best match for each meaningful word: ```sql -- Only process meaningful words (longer than 2 chars) IF length(words1[i]) > 2 THEN -- Find best match in target content best_match := GREATEST(best_match, similarity(words1[i], words2[j])); ``` 4. **Comprehensive Similarity** - Adaptively weights different similarity metrics based on query characteristics: ```sql -- Weight factor based on query length - shorter queries need more help word_weight float := CASE WHEN length(query) < 10 THEN 0.4 WHEN length(query) < 20 THEN 0.3 ELSE 0.2 END; ``` #### Tuning Search Behavior You can customize Julep's fuzzy search behavior through several parameters: - **Similarity Threshold** (`trigram_similarity_threshold`) - Controls the minimum similarity score required for a document to match: - Higher values (e.g., 0.8) require closer matches, reducing false positives but may miss relevant documents with variations - Lower values (e.g., 0.3) are more lenient, catching more variations but potentially including less relevant results - Default: 0.6 for hybrid search, 0.3 for text-only search - **Alpha Weight** (`alpha`) - Balances the importance of vector-based semantic search vs. text-based search: - Higher values prioritize semantic/embedding matches - Lower values prioritize text and trigram matches - Default: 0.7 (70% weight to embeddings) - **Search Language** (`lang`) - Affects tokenization, stemming, and other text processing operations: - Default: 'english_unaccent' which handles accent/diacritic-insensitive matching #### Implementation Details Julep's trigram search is implemented using: 1. **Database Indexes** - GIN indexes on document title and content for efficient trigram operations: ```sql CREATE INDEX IF NOT EXISTS idx_docs_title_trgm ON docs USING GIN (title gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_docs_content_trgm ON docs USING GIN (content gin_trgm_ops); ``` 2. **Materialized CTEs** - Improves performance for complex query operations: ```sql WITH tsv_results AS MATERIALIZED (...) ``` 3. **Runtime Optimizations** - Selective application of more expensive calculations: ```sql -- Only compute Levenshtein for reasonable length strings (performance) IF length(text1) <= 50 AND length(text2) <= 50 THEN ``` 4. **Distribution-Based Score Fusion** - Combines results from different search methods: ```sql -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores ``` These technologies combine to provide a sophisticated fuzzy search capability that significantly improves document retrieval compared to traditional search methods. ## Next Steps - [Sessions](/concepts/sessions) - Learn about sessions and how documents are used in chat conversations. - [Tools](/concepts/tools) - Learn about tools and how they can be used to fill documents with content. - [Tasks](/concepts/tasks) - Learn about tasks and how to use documents inside tasks. - [Cookbooks](https://github.com/julep-ai/julep/tree/main/cookbooks) - Check out cookbooks to see how Julep can be used in real-world scenarios. ================================================ FILE: documentation/concepts/execution.mdx ================================================ --- title: 'Executions' description: 'Understanding Task Executions and Their Lifecycle' icon: 'play' --- ## Overview Executions in Julep represent instances of tasks that have been initiated with specific inputs. They embody the lifecycle of a task, managing its progression through various states from initiation to completion. Understanding executions is crucial for effectively managing and monitoring the behavior of your AI agents and their workflows. ## Components Executions are comprised of several key components that work together to manage and monitor the state of a task: - **Execution ID**: A unique identifier for each execution instance. - **Task ID**: The identifier of the task being executed. - **Input**: The inputs provided to the task at the time of execution. - **Status**: The current state of the execution (e.g., queued, running, succeeded). - **Output**: The result produced by the execution upon completion. - **Transitions**: The sequence of state changes that the execution undergoes. - **Transition Count**: The number of transitions that have occurred in this execution. ### Execution Configuration options | Option | Type | Description | Default | |----------------------|-----------------|------------------------------------------------------------|----------------| | `task_id` | `string` | The ID of the task to execute | **Required** | | `input` | `object` | The input to the task | **Required** | | `metadata` | `object` | Additional metadata for the execution instance | `null` | | `transition_count` | `number` | The number of transitions in this execution | `null` | ## Lifecycle of an Execution An execution follows a well-defined lifecycle, transitioning through various states from start to finish. Understanding these states helps in monitoring and managing task executions effectively. ### Execution Statuses Executions can exist in one of the following statuses: | **Status** | **Description** | | ---------------- | -------------------------------------------------------- | | `queued` | The execution is queued and waiting to start. | | `starting` | The execution is starting. | | `running` | The execution is currently running. | | `awaiting_input` | The execution is suspended and awaiting user input to resume. | | `succeeded` | The execution has completed successfully. | | `failed` | The execution has failed due to an error. | | `cancelled` | The execution has been cancelled by the user or system. | ### Execution State Machine The state transitions of an execution are governed by a state machine that ensures proper progression and handling of different scenarios. ```mermaid stateDiagram-v2 [*] --> queued queued --> starting queued --> cancelled starting --> cancelled starting --> failed starting --> running running --> running running --> awaiting_input running --> cancelled awaiting_input --> running awaiting_input --> cancelled running --> succeeded failed --> [*] succeeded --> [*] cancelled --> [*] ``` ## Execution State Transitions Executions in Julep follow a specific state transition model. The transitions are governed by both the execution status and the transition type: - **Init**: The execution is initialized. - **Start**: The execution begins. - **Step**: A step within the execution is executed. - **Wait**: The execution is waiting for an external input. - **Resume**: The execution resumes after waiting. - **Finish**: The execution completes successfully. - **Error**: The execution encounters an error. - **Cancel**: The execution is cancelled. ### Transition Types | **Transition Type** | **Description** | | -------------------- | --------------------------------------------------- | | `init` | Initializes the execution. | | `start` | Starts the execution process. | | `step` | Executes a step within the task. | | `wait` | Pauses execution waiting for external input. | | `resume` | Resumes execution after a wait. | | `finish` | Marks the execution as successfully completed. | | `error` | Marks the execution as failed due to an error. | | `cancel` | Cancels the execution. | ## Creating an Execution To create an execution for a specific task, use the following method in the SDKs. ```python Python from julep import Julep import yaml client = Julep(api_key="YOUR_API_KEY") # Execute the task (assuming the task is already created) execution = client.executions.create( task_id="task_id", input={ "parameter1": "value1", "parameter2": "value2" } ) print(f"Execution ID: {execution.id}") ``` ```javascript Node.js const { Julep } = require('@julep/sdk'); const client = new Julep({ apiKey: 'YOUR_API_KEY' }); // Execute the task (assuming the task is already created) const execution = await client.executions.create({ task_id: "task_id", input: { parameter1: 'value1', parameter2: 'value2' } }); console.log("Execution ID:", execution.id); ``` Check out the API reference [here](/api-reference/executions) or SDK reference (Python [here](/sdks/python/reference#executions) or JavaScript [here](/sdks/nodejs/reference#executions) for more details on different operations you can perform on executions. ## Monitoring an Execution After initiating an execution, it's essential to monitor its progress and handle its completion or failure appropriately. ```python Python import time from julep import Julep client = Julep(api_key="YOUR_API_KEY") execution_id = "YOUR_EXECUTION_ID" while True: result = client.executions.get(execution_id) print(f"Status: {result.status}") print(f"Current output: {result.output}") if result.status in ["succeeded", "failed", "cancelled"]: if result.status == "succeeded": print("Execution succeeded with output:", result.output) else: print("Execution ended with status:", result.status) break time.sleep(5) # Wait for 5 seconds before polling again ``` ```javascript Node.js const { Julep } = require('@julep/sdk'); const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const executionId = 'YOUR_EXECUTION_ID'; while (true) { const result = await client.executions.get(executionId); console.log(`Status: ${result.status}`); console.log(`Current output: ${result.output}`); if (["succeeded", "failed", "cancelled"].includes(result.status)) { if (result.status === "succeeded") { console.log("Execution succeeded with output:", result.output); } else { console.log("Execution ended with status:", result.status); } break; } await new Promise(resolve => setTimeout(resolve, 5000)); // Wait for 5 seconds before polling again } ``` To view more details about the status of the execution and how it is transitioning between states, you can use list the transitions of an execution. Example: ```python Python from julep import Julep client = Julep(api_key="YOUR_API_KEY") execution_id = "YOUR_EXECUTION_ID" transitions = client.executions.transitions.list(execution_id) print(transitions.items) ``` ```javascript Node.js const { Julep } = require('@julep/sdk'); const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const executionId = 'YOUR_EXECUTION_ID'; const transitions = await client.executions.transitions.list(executionId); console.log(transitions.items); ``` Check out the API reference [here](/api-reference/executions) or SDK reference (Python [here](/sdks/python/reference#executions) or JavaScript [here](/sdks/nodejs/reference#executions) for more details on different operations you can perform on executions. ## Streaming Execution Status Updates ### Using the raw SSE endpoint You can subscribe to real-time status updates using the Server-Sent Events (SSE) endpoint. Each event conforms to the `ExecutionStatusEvent` schema and includes the following fields: - **execution_id**: The UUID of the execution. - **status**: The current execution status. - **updated_at**: ISO 8601 timestamp of the update. - **error**: Error message if the execution failed. - **transition_count**: Number of transitions that have occurred. - **metadata**: Arbitrary metadata for the event. ```bash curl -X GET 'https://api.julep.ai/api/executions/{execution_id}/status.stream' \ -H 'Authorization: Bearer $JULEP_API_KEY' ``` You'll be getting events that look like this: ```bash data: {"execution_id":"068306ff-e0f3-7fe9-8000-0013626a759a","status":"starting","updated_at":"2025-05-23T12:54:24.565424Z","error":null,"transition_count":1,"metadata":{}} data: {"execution_id":"068306ff-e0f3-7fe9-8000-0013626a759a","status":"running","updated_at":"2025-05-23T12:54:30.903484Z","error":null,"transition_count":2,"metadata":{}} data: {"execution_id":"068306ff-e0f3-7fe9-8000-0013626a759a","status":"succeeded","updated_at":"2025-05-23T12:56:12.054067Z","error":null,"transition_count":3,"metadata":{}} ``` ### Using the Python SDK `AsyncClient` ```python Python from julep import AsyncClient client = AsyncClient(api_key="YOUR_API_KEY") execution_id = "YOUR_EXECUTION_ID" # Subscribe to the live status stream (async generator) status_stream = await client.executions.status.stream(execution_id=execution_id) # Consume events in real-time using async for async for event in status_stream: print("Execution status:", event.status, "updated at", event.updated_at) ``` This approach relies on Python's async / await syntax. Make sure to: 1. Use `AsyncClient` not `Client`. 2. `await client.executions.status.stream(...)` to obtain the async generator. 3. Iterate with `async for` to consume events. ## Updating/Cancelling an Execution To update or cancel an execution, you can use the `change_status` method in the SDKs. Example: ```python Python from julep import Julep client = Julep(api_key="YOUR_API_KEY") execution_id = "YOUR_EXECUTION_ID" # To cancel an execution client.executions.change_status(execution_id=execution_id, status="cancelled") # To resume an execution with specific input client.executions.change_status( execution_id=execution_id, status="running", input={ "parameter1": "value1", "parameter2": "value2" } ) ``` ```javascript Node.js const { Julep } = require('@julep/sdk'); const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const executionId = 'YOUR_EXECUTION_ID'; // To cancel an execution await client.executions.changeStatus(executionId, 'cancelled'); // To resume an execution with specific input await client.executions.changeStatus( executionId, 'running', { input: { "parameter1": "value1", "parameter2": "value2" } } ); ``` Check out the API reference [here](/api-reference/executions) or SDK reference (Python [here](/sdks/python/reference#executions) or JavaScript [here](/sdks/nodejs/reference#executions) for more details on different operations you can perform on executions. ## Best Practices
  • **1. Execution Statuses**: Ensure your application gracefully handles all possible execution statuses, including `failed` and `cancelled`.
  • **1. Polling Interval**: Choose an appropriate polling interval to balance responsiveness and API usage.
  • **1. Logging**: Maintain detailed logs of execution statuses and outputs for auditing and debugging purposes.
## Next Steps - [Checkout the Tutorial](/tutorials) - Learn how to use executions in a tutorial - [Checkout the Execution Lifecycle](/advanced/lifecycle) - Learn more about the execution lifecycle ================================================ FILE: documentation/concepts/files.mdx ================================================ --- title: 'Files' description: 'Managing files and attachments in Julep' icon: 'file' --- # Files Files in Julep allow agents to work with various types of data including documents, images, audio, and other media. Files are stored securely and can be accessed by agents and tasks as needed. ## Overview Julep's file system provides: - Secure storage for various file types - Unique identifiers for consistent access - Metadata for organization and discovery - Content hashing for integrity verification - Project association for logical grouping ## File Properties Each file in Julep has the following properties: | **Field** | **Type** | **Description** | **Default** | |---------------|------------|-------------------------------------------------------|--------------| | `name` | `string` | Name of the file | Required | | `project` | `string` | The canonical name of the project this file belongs to | `"default"` | | `content` | `string` | Base64-encoded file content | Required | | `description` | `string` | Description of the file | `""` | | `mime_type` | `string` | MIME type of the file | `null` | | `size` | `number` | Size of the file in bytes (read-only) | Auto-calculated | | `hash` | `string` | Hash of the file content (read-only) | Auto-calculated | | `created_at` | `string` | Creation timestamp (read-only) | Auto-generated | ## Creating Files You can create files using the Julep SDK in Python or JavaScript: ```python Python from julep import Julep import base64 client = Julep(api_key="your_api_key") # Read a local file and encode it as base64 with open("path/to/document.pdf", "rb") as file: content = base64.b64encode(file.read()).decode("utf-8") # Create the file in Julep file = client.files.create( name="document.pdf", project="knowledge-base", content=content, description="Important document for reference", mime_type="application/pdf" ) print(f"Created file: {file.id}") ``` ```javascript Node.js import { Julep } from '@julep/sdk'; import fs from 'fs'; const client = new Julep({ apiKey: 'your_api_key' }); // Read a local file and encode it as base64 const content = fs.readFileSync('path/to/document.pdf').toString('base64'); // Create the file in Julep const file = await client.files.create({ name: "document.pdf", project: "knowledge-base", content: content, description: "Important document for reference", mime_type: "application/pdf" }); console.log(`Created file: ${file.id}`); ``` ## Managing Files ### Retrieving Files ```python Python # Get a specific file by ID file = client.files.get("file_id_here") print(file) # List all files files = client.files.list() for file in files: print(f"{file.name}: {file.description}") # List files with filtering files = client.files.list(metadata_filter={"category": "report"}) ``` ```javascript Node.js // Get a specific file by ID const file = await client.files.get("file_id_here"); console.log(file); // List all files const files = await client.files.list(); files.forEach(file => console.log(`${file.name}: ${file.description}`)); // List files with filtering const files = await client.files.list({ metadata_filter: { category: "report" } }); ``` ### Deleting Files ```python Python # Delete a file client.files.delete("file_id_here") ``` ```javascript Node.js // Delete a file await client.files.delete("file_id_here"); ``` ## Relationship to Other Concepts ### Projects Files belong to exactly one project, which helps organize related resources together. When creating a file, you can specify which project it belongs to using the `project` parameter. If not specified, the file will be assigned to the "default" project. **Example:** ```python Python # Create a file in a specific project file = client.files.create( name="marketing-image.jpg", project="product-launch", content=base64_content, mime_type="image/jpeg" ) ``` ```javascript Node.js // Create a file in a specific project const file = await client.files.create({ name: "marketing-image.jpg", project: "product-launch", content: base64Content, mime_type: "image/jpeg" }); ``` For more information about projects, see [Projects](/concepts/projects). ### Agents and Tasks Files can be used by both agents and tasks to access and process information. For example, an agent might analyze an image file, or a task might process a document file. ```python Python # Create a file file = client.files.create(name="data.csv", content=base64_content) # Reference the file in a task execution execution = client.tasks.executions.create( task_id="task_id_here", input={"file_id": file.id} ) ``` ```javascript Node.js // Create a file const file = await client.files.create({ name: "data.csv", content: base64Content }); // Reference the file in a task execution const execution = await client.tasks.executions.create({ task_id: "task_id_here", input: { file_id: file.id } }); ``` ## Best Practices
  • Group related files in the same project
  • Use consistent naming conventions
  • Include descriptive metadata for better discovery
  • Keep file sizes reasonable for faster processing
  • Consider chunking large files into smaller ones
  • Be mindful of the content limits when Base64 encoding
  • Avoid storing sensitive information in files
  • Regularly audit and clean up unused files
  • Validate file types before uploading
## Next Steps - [Projects](/concepts/projects) - Learn about organizing resources with projects - [Agents](/concepts/agents) - Learn how agents can work with files - [Tasks](/concepts/tasks) - Learn how to use files in task workflows ================================================ FILE: documentation/concepts/projects.mdx ================================================ --- title: 'Projects' description: 'Organizational units for grouping related resources' icon: 'layer-group' --- ## Overview Projects are organizational units that allow you to group related agents, users, files, and other resources together. They provide a way to manage resources at a higher level and maintain clean separation between different use cases or applications. Projects provide several benefits: - **Organization**: Group related resources together logically - **Management**: Administer resources at the project level - **Isolation**: Keep resources separate between different applications - **Deployment**: Deploy multiple templates or configurations without conflicts Each developer automatically gets a "default" project that contains all existing resources. This ensures backward compatibility with existing applications while providing the benefits of project organization. ## Project Properties A project includes: - `id`: Unique identifier - `canonical_name`: Machine-readable name (unique per developer) - `name`: Human-readable display name - `metadata`: Custom attributes for the project ## Project Relationships Projects have a one-to-many relationship with resources: - Each agent belongs to exactly one project - Each user belongs to exactly one project - Each file belongs to exactly one project When creating resources, you can specify which project they belong to using the `project` field. If not specified, resources are automatically assigned to the "default" project. ## Default Project Every developer automatically receives a "default" project when they first interact with the API. This project: - Cannot be deleted - Has a canonical name of "default" - Contains all previously created resources (pre-dating the projects feature) - Serves as a fallback for resources created without a project specification ## API Operations Projects support standard CRUD operations: - `GET /projects`: List all projects for a developer - `POST /projects`: Create a new project - `GET /projects/{id}`: Retrieve a specific project - `PUT /projects/{id}`: Update a project - `PATCH /projects/{id}`: Partially update a project - `DELETE /projects/{id}`: Delete a project (except the default project) ## Usage Examples ### Creating a Project ```json POST /projects { "name": "Customer Support Bot", "canonical_name": "support-bot", "metadata": { "description": "Resources for our customer support chatbot", "team": "customer-success" } } ``` ### Creating a Resource in a Project When creating a resource such as an agent, specify the project canonical name: ```json POST /agents { "name": "Support Assistant", "project": "support-bot", "instructions": [ "You are a helpful customer support assistant." ], "model": "gpt-4-turbo" } ``` ## Future Capabilities Projects are designed with future extensibility in mind. Planned enhancements include: - Project-specific API keys for more granular access control - Usage tracking and billing at the project level - Enhanced permissions and role-based access control - Cross-project resource sharing capabilities ## Best Practices - Use meaningful canonical names for projects that reflect their purpose - Group resources by logical application or team - Use metadata to add custom attributes for filtering and organization - Create separate projects for development, staging, and production environments ================================================ FILE: documentation/concepts/secrets.mdx ================================================ --- title: 'Secrets' description: 'Securely store and manage sensitive information for your LLM applications' icon: 'key' --- # Secrets Secrets allow you to securely store and manage sensitive information like API keys, credentials, and other confidential data that your agents and tasks need to access external services. ## What are Secrets? Secrets are encrypted key-value pairs that can be referenced in your tasks and used by your agents without exposing the actual values in your code or configuration files. This helps maintain security and separates sensitive data from your application logic. ## Key Features - **Encrypted Storage**: All secrets are encrypted at rest using industry-standard AES-256 encryption - **Access Control**: Secrets are scoped to developers and cannot be accessed across developer accounts - **Named References**: Reference secrets by name in tasks and tools instead of hardcoding values - **Versioning**: Track when secrets were created and updated - **Metadata Support**: Add custom metadata to organize and categorize your secrets ## Common Use Cases - Storing API keys for external services (OpenAI, Google, AWS, etc.) - Managing database credentials - Securing authentication tokens - Storing sensitive configuration values - Managing encrypted communication channels ## Secrets vs. Environment Variables While environment variables are commonly used for configuration, secrets provide several advantages: - **Encrypted Storage**: Environment variables are stored in plain text, while secrets are encrypted - **Access Management**: Environment variables are global, while secrets have access controls - **Audit Trail**: Secrets maintain creation and update timestamps - **Organized Management**: The secrets API provides a structured way to manage sensitive data ## Working with Secrets ### Creating Secrets Secrets can be created through the API, SDK, or CLI: ```python Python secret = client.secrets.create( name="stripe_api_key", value="sk_test_...", description="Stripe API key for payment processing", metadata={"environment": "production", "owner": "payments-team"} ) print(f"Created secret: {secret.name}") ``` ```bash CLI julep secrets create --name "openai_api_key" --value "sk-..." --description "OpenAI API key" ``` ```bash API curl https://dev.julep.ai:443/api/secrets \ --request POST \ --header 'Content-Type: application/json' \ --data '{ "metadata": {}, "name": "openai_api_key", "description": "", "value": "sk-..." }' ``` #### Required Parameters - `name`: The name of the secret (must be a valid identifier) - `value`: The secret value to encrypt and store #### Optional Parameters - `description`: A description of what the secret is used for - `metadata`: A dictionary of metadata to associate with the secret ### Using Secrets in Tasks Once created, secrets can be referenced in your tasks: ```yaml steps: - kind: tool_call tool: openai operation: completion arguments: prompt: "Summarize this text" secret_name: openai_api_key ``` ### Using Secrets in Expressions You can also reference secrets in expressions: ```yaml steps: - kind: prompt model: gpt-4 prompt: "Generate a summary" template_variables: api_url: "$ f'https://api.example.com/v1?key={secrets.api_key}'" ``` ## Secret Names and Conventions Secret names must: - Begin with a letter - Contain only alphanumeric characters and underscores - Be unique within a developer account Good naming conventions: - Use descriptive names like `stripe_api_key` instead of just `api_key` - Include service names in the key name - Use consistent formatting (snake_case recommended) ## Next Steps - [Using Secrets in Julep](/guides/using-secrets) - Step-by-step guide for using secrets - [Secrets Management](/advanced/secrets-management) - Advanced guide for managing secrets - [API Reference](/api-reference#tag/secrets) - Complete API reference for secrets ================================================ FILE: documentation/concepts/sessions.mdx ================================================ --- title: 'Sessions' description: 'Understanding Julep Sessions and state management' icon: 'memory' --- ## Overview Sessions in Julep are the backbone of stateful interactions between users and agents. They maintain the context and history of conversations, enabling personalized and coherent interactions over extended periods. Whether it's handling ongoing customer support inquiries or having a conversation with a user, sessions ensure that the agent retains necessary information to provide meaningful responses. ## Components Sessions are comprised of several key components that work together to manage state and context: - **Session ID**: A unique identifier (`uuid7`) for each session. - **User**: The individual or entity interacting with the agent, represented by its id. - **Agent**: The AI entity interacting with the user within the session, represented by its id. - **History**: The history of the conversation, which the agent uses to generate relevant responses. - **System Template**: A specific system prompt template that sets the background for this session. - **Situation**: A description of the current situation for the session. - **Metadata**: Additional data associated with the session, such as user preferences, session preferences, and other relevant information. ### Session Configuration Options When creating a session, you can leverage the following configuration options to tailor the experience: | Option | Type | Description | Default | |----------------------|------------------------------------------|---------------------------------------------------------------------------------------------------|----------------| | `agent` | `UUID` \| `None` | The ID of the agent to associate with the session | `None` | | `user` | `UUID` \| `None` | The ID of the user interacting with the agent | `None` | | `context_overflow` | `truncate` \| `adaptive` \| `None` | Strategy for handling context overflow: `truncate` cuts off the oldest context; `adaptive` adjusts dynamically | `None` | | `metadata` | `object` \| `None` | Additional metadata for the session (e.g., user preferences) | `None` | | `system_template` | `str` \| `None` | A specific system prompt template that sets the background for this session | `None` | | `render_templates` | `StrictBool` | Whether to render system and assistant messages as Jinja templates | `True` | | `token_budget` | `int` \| `None` | Threshold value for the adaptive context functionality | `None` | | `auto_run_tools` | `StrictBool` | Whether to automatically execute tools and send the results back to the model when available | `False` | | `forward_tool_calls` | `StrictBool` | Whether to forward tool calls directly to the model | `False` | | `recall_options` | `object` \| `None` | Options for different RAG search modes (VectorDocSearch, TextOnlyDocSearch, HybridDocSearch) in the session | `VectorDocSearch` | ### Recall Options (RAG Search) When configuring a session, you can specify recall options to control how context or certain data is recalled during the session. Below are the available options based on search mode: | Parameter | Type | Description | Default | |-------------------|-----------|--------------------------------------------------------------------------------------------|---------| | `mode` | `Literal["vector"]` | The mode to use for the search (must be "vector") | `"vector"` | | `lang` | `str` | The language for text search (other languages coming soon) | `en-US` | | `limit` | `int` | The limit of documents to return (1-50) | `10` | | `max_query_length`| `int` | The maximum query length (100-10000 characters) | `1000` | | `metadata_filter` | `object` | Metadata filter to apply to the search | `{}` | | `num_search_messages` | `int` | The number of search messages to use for the search (1-50) | `4` | | `confidence` | `float` | The confidence cutoff level (-1 to 1) | `0.5` | | `mmr_strength` | `float` | MMR Strength (mmr_strength = 1 - mmr_lambda) (0 to 1) | `0.5` | | Parameter | Type | Description | Default | |-------------------|-----------|--------------------------------------------------------------------------------------------|---------| | `mode` | `Literal["text"]` | The mode to use for the search (must be "text") | `"text"` | | `lang` | `str` | The language for text search (other languages coming soon) | `en-US` | | `limit` | `int` | The limit of documents to return (1-50) | `10` | | `max_query_length`| `int` | The maximum query length (100-10000 characters) | `1000` | | `metadata_filter` | `object` | Metadata filter to apply to the search | `{}` | | `num_search_messages` | `int` | The number of search messages to use for the search (1-50) | `4` | | `trigram_similarity_threshold` | `float` | The threshold for trigram similarity matching (must be between 0 and 1) | `0.6` | | Parameter | Type | Description | Default | |-------------------|-----------|--------------------------------------------------------------------------------------------|---------| | `mode` | `Literal["hybrid"]` | The mode to use for the search (must be "hybrid") | `"hybrid"` | | `lang` | `str` | The language for text search (other languages coming soon) | `english_unaccent` | | `limit` | `int` | The limit of documents to return (1-50) | `10` | | `max_query_length`| `int` | The maximum query length (100-10000 characters) | `1000` | | `metadata_filter` | `object` | Metadata filter to apply to the search | `{}` | | `num_search_messages` | `int` | The number of search messages to use for the search (1-50) | `4` | | `alpha` | `float` | Weight between text-based and vector-based search (0=pure text, 1=pure vector) | `0.5` | | `confidence` | `float` | The confidence cutoff level (-1 to 1) | `0.5` | | `mmr_strength` | `float` | MMR Strength (mmr_strength = 1 - mmr_lambda) (0 to 1) | `0.5` | | `trigram_similarity_threshold` | `float` | The threshold for trigram similarity matching (must be between 0 and 1) | `0.6` | | `k_multiplier` | `int` | Controls how many intermediate results to fetch before final scoring | `7` | - When `recall_options` is not explicitly set (for instance, it is `None`), `vector` search mode is used with default parameters. - The default parameters for each search mode are based on our internal benchmarking. These values provide a good starting point, but you may need to adjust them depending on your specific use case to achieve optimal results. **Hybrid Search with Trigram Support** Julep's hybrid search combines multiple search techniques: 1. **Traditional full-text search** using PostgreSQL's tsquery/tsrank for keyword matching 2. **Vector-based semantic search** using embeddings for contextual understanding 3. **Trigram fuzzy matching** for handling typos, spelling variations, and morphological differences The trigram search capability uses PostgreSQL's pg_trgm extension enhanced with Levenshtein distance calculations to provide resilient document retrieval even when search terms contain variations or errors. This is especially useful for natural language queries that may contain typos or alternative word forms. You can control the fuzzy matching behavior using the `trigram_similarity_threshold` parameter - higher values (e.g., 0.8) require closer matches while lower values (e.g., 0.3) are more lenient. For more details on the advanced search capabilities, see the [Documents (RAG)](/concepts/docs#advanced-search-features) section. ### System Template The **System Template** is a specific system prompt written as a Jinja template that sets the foundational context and instructions for the agent within a session. It defines the background, directives, and any relevant information that the agent should consider when interacting with the user. For a comprehensive guide on system templates including available variables, customization options, and advanced usage patterns, see the [System Templates](/advanced/system-templates) documentation. For more details on Jinja templates, refer to the [Jinja documentation](https://jinja.palletsprojects.com/). ```python [expandable] {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} --- {%- endfor -%} {%- endif -%} ``` ## How to Use Sessions Sessions are integral to maintaining a continuous and coherent interaction between users and agents. Here's how to create and manage sessions using Julep's SDKs. ### Creating a Session Here are examples of how to create a session using the SDKs: ```python Python client = Julep(api_key="YOUR_API_KEY") session = client.sessions.create( agent="agent_id", user="user_id", context_overflow="adaptive", ) ``` ```javascript Node.js const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const session = await client.sessions.create({ agent_id: "agent_id", user_id: "user_id", context_overflow: "adaptive", }); ``` Check out the [API reference](/api-reference/sessions) or SDK reference ([Python](/sdks/python/reference#sessions) or [JavaScript](/sdks/nodejs/reference#sessions)) for more details on different operations you can perform on sessions. ### Chatting in a Session Once a session is created, you can engage in a conversation by sending messages to the agent within that session. ```python Python client = Julep(api_key="YOUR_API_KEY") response = client.sessions.chat( session_id="SESSION_ID", messages=[ { "role": "user", # or "system" "content": "YOUR_MESSAGE" } ] ) print("Agent's response:", response.choices[0].message.content) ``` ```javascript Node.js const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const response = await client.sessions.chat({ session_id: "SESSION_ID", messages: [ { role: "user", content: "YOUR_MESSAGE" } ] }); console.log("Agent:", response.choices[0].message.content); ``` ## Relationship to Other Concepts This section will help you understand how sessions relate to other concepts in Julep. ### Agents Agents operate within sessions to provide personalized and context-aware interactions. While an agent defines the behavior and capabilities, a session maintains the state and context of interactions between the agent and the user. In other words, the history of a conversation is tied to a session, rather than an agent. Example: ```python agent = client.agents.create( name="David", about="A news reporter", model="gpt-4o-mini", instructions=["Keep your responses concise and to the point.", "If you don't know the answer, say 'I don't know'"], metadata={"channel": "FOX News"}, ) session1 = client.sessions.create(agent=agent.id, user="user_id", situation="The user is interested in the latest news about the stock market.") session2 = client.sessions.create(agent=agent.id, user="user_id", situation="The user is interested in political news in the United States.") ``` In this example, the agent David is used in two different sessions, each with a different situation. The agent's behavior and responses are tailored to the specific situation of each session, and the history of messages in `session1` and `session2` are separate. ### Users When a user (or more) is added to a session, the session will be able to access information about the user such as `name`, and `about` in order to personalize the interaction. Check out the `system_template` to see how the user's info is being accessed. This is how you can create a user and associate it with a session: ```python Python client = Julep(api_key="YOUR_API_KEY") user = client.users.create(name="John Doe", about="A 21 year old man who is a student at MIT.") agent = client.agents.create(name="Mark Lee", about="A 49 year old man who is a retired software engineer.") session = client.sessions.create(agent_id=agent.id, user_id=user.id) ``` ```javascript Node.js const client = new Julep({ apiKey: 'YOUR_API_KEY' }); const user = await client.users.create({ name: "John Doe", about: "A 21 year old man who is a student at MIT." }); const agent = await client.agents.create({ name: "Mark Lee", about: "A 49 year old man who is a retired software engineer." }); const session = await client.sessions.create({ agent_id: agent.id, user_id: user.id }); ``` In this example, the user John Doe is associated with the agent Mark Lee in the session. The session will use the user's information to personalize the interaction, such as using the user's name in the system prompt. ### Tools Sessions have the ability to use [Tools](/concepts/tools). When `auto_run_tools` is set to `true` (available in chat calls), if an agent has a tool and the LLM decides to use it, the tool will be executed automatically and the result will be sent back to the LLM for further processing. When `auto_run_tools` is `false` (default), tool calls are returned in the response without execution. Example: If the agent that's associated with the session has a tool called `fetch_weather`, and the LLM decides to use it: - With `auto_run_tools=true`: The tool executes automatically and returns weather data to the LLM - With `auto_run_tools=false`: The tool call is returned in the response for manual execution ```python Python # With automatic tool execution response = client.sessions.chat( session_id="session_id", messages=[ { "role": "user", "content": "What is the weather in San Francisco?" } ], auto_run_tools=True, # Tools execute automatically recall_tools=True # Tool calls/results included in message history ) print("Agent's response:", response.choices[0].message.content) # Agent's response: The weather in San Francisco is 70 degrees and it's sunny. Humidity is 50%, and the wind speed is around 10 mph. # Without automatic tool execution (default) response = client.sessions.chat( session_id="session_id", messages=[ { "role": "user", "content": "What is the weather in San Francisco?" } ], auto_run_tools=False # Default - returns tool calls without execution ) # Check if tool calls were made if response.choices[0].message.tool_calls: print("Tool calls:", response.choices[0].message.tool_calls) # You need to execute these tools manually and send results back ``` ```javascript Node.js // With automatic tool execution const response = await client.sessions.chat({ session_id: "session_id", messages: [ { role: "user", content: "What is the weather in San Francisco?" } ], auto_run_tools: true, // Tools execute automatically recall_tools: true // Tool calls/results included in message history }); console.log("Agent:", response.choices[0].message.content); // Agent's response: The weather in San Francisco is 70 degrees and it's sunny. Humidity is 50%, and the wind speed is around 10 mph. // Without automatic tool execution (default) const response2 = await client.sessions.chat({ session_id: "session_id", messages: [ { role: "user", content: "What is the weather in San Francisco?" } ], auto_run_tools: false // Default - returns tool calls without execution }); // Check if tool calls were made if (response2.choices[0].message.tool_calls) { console.log("Tool calls:", response2.choices[0].message.tool_calls); // You need to execute these tools manually and send results back } ``` ### Documents When chatting in a session, the session can automatically search for documents that are associated with any of the agents and/or users that participate in the session. You can control whether the session should search for documents when chatting using the `recall` option of the `chat` method, which is set to `True` by default. You can also set the session's `recall_options` when creating the session to control how the session should search for documents. ```python Python [expandable] # Create a session with custom recall options client.sessions.create( agent=agent.id, user=user.id, recall=True, recall_options={ "mode": "vector", # or "hybrid", "text" "num_search_messages": 4, # number of messages to search for documents "max_query_length": 1000, # maximum query length "alpha": 0.7, # weight to apply to BM25 vs Vector search results (ranges from 0 to 1) "confidence": 0.6, # confidence cutoff level (ranges from -1 to 1) "limit": 10, # limit of documents to return "lang": "en-US", # language to be used for text-only search "metadata_filter": {}, # metadata filter to apply to the search "mmr_strength": 0, # MMR Strength (ranges from 0 to 1) } ) # Chat in the session response = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "Tell me about Julep" } ], recall=True ) print("Agent's response:", response.choices[0].message.content) print("Searched Documents:", response.docs) ``` ```javascript Node.js [expandable] client.sessions.create({ agent: agent.id, user: user.id, recall: true, recall_options: { mode: "vector", // or "hybrid", "text" num_search_messages: 4, // number of messages to search for documents max_query_length: 1000, // maximum query length alpha: 0.7, // weight to apply to BM25 vs Vector search results (ranges from 0 to 1) confidence: 0.6, // confidence cutoff level (ranges from -1 to 1) limit: 10, // limit of documents to return lang: "en-US", // language to be used for text-only search metadata_filter: {}, // metadata filter to apply to the search mmr_strength: 0, // MMR Strength (ranges from 0 to 1) } }); // Chat in the session const response = await client.sessions.chat({ session_id: session.id, messages: [ { role: "user", content: "Tell me about Julep" } ], recall: true }); ``` When running the above code with an agent that has documents about Julep, the session will search for documents that are relevant to the conversation and return them in the `response.docs` field. ``` [expandable] Agent's response: Julep is a comprehensive platform designed for creating production-ready AI systems and agents. Here are the key aspects of Julep: Core Features: 1. Complete Infrastructure Layer - Provides infrastructure between LLMs and software - Built-in support for long-term memory - Multi-step process management - State management capabilities 2. AI Agent Development - Creates persistent AI agents that remember past interactions - Supports complex task execution - Enables multi-step workflows - Includes built-in tools and integrations 3. Production-Ready Features - Automatic retries for failed steps - Message resending capabilities - Task recovery systems - Real-time monitoring - Error handling - Automatic scaling and load balancing 4. Development Approach - Uses 8-Factor Agent methodology - Treats prompts as code with proper versioning - Provides clear tool interfaces - Offers model independence to avoid vendor lock-in - Includes structured reasoning capabilities - Maintains ground truth examples for validation Available Resources: - Documentation: https://docs.julep.ai/ - API Playground: https://dev.julep.ai/api/docs - Python SDK: https://github.com/julep-ai/python-sdk/blob/main/README.md - JavaScript SDK: https://github.com/julep-ai/node-sdk/blob/main/README.md - Various use case examples and cookbooks You can explore different use cases through their cookbooks, including: - User Profiling - Email Assistant - Trip Planner - Document Management - Website Crawler - Multi-step Tasks - Advanced Chat Interactions For additional support or to learn more: - Discord Community: https://discord.gg/2EUJzJU2Yt - Book a Demo: https://calendly.com/ishita-julep - Dev Support: hey@julep.ai Searched Documents: ### Build faster using Julep API ### Deploy multi-step workflows easily with ### built-in tools and ### State management that is ### production ready from day one Keep me informed ### Build faster using Julep API ### Deploy multi-step workflows easily with built-in tools and State management that is production ready from day one Keep me informed Keep me informed Dev Resources [Docs](https://docs.julep.ai/) [Get API Key](https://dashboard-dev.julep.ai/) [API Playground](https://dev.julep.ai/api/docs) [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md) [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md) [Integration List](https://github.com/julep-ai/julep/tree/dev?tab=readme-ov-file#integrations) Usecases [User Profiling](https://github.com/julep-ai/julep/blob/dev/cookbooks/09-User_Management_and_Personalization.py) [Email Assistant (Mailgun)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/00-Devfest-Email-Assistant.ipynb) [Trip Planner (Weather + Wiki)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) [Doc Management](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py) [Website Crawler (Spider)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/01-Website_Crawler_using_Spider.ipynb) [Multi-step Tasks](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-Designing_Multi-Step_Tasks.py) [Advanced Chat](https://github.com/julep-ai/julep/blob/dev/cookbooks/11-Advanced_Chat_Interactions.py) Company [About](./about) [Contact Us](./contact) [Book Demo](https://calendly.com/ishita-julep) Socials [Github](https://github.com/julep-ai/julep) [LinkedIn](https://www.linkedin.com/company/julep-ai) [Twitter](https://x.com/julep_ai) [Dev.to](https://dev.to/julep) [Hugging Face](https://huggingface.co/julep-ai) [Youtube](https://www.youtube.com/@julep_ai) Built by Engineers, for Engineers ©Julep AI Inc 2024 Dev Resources [Docs](https://docs.julep.ai/) [Get API Key](https://dashboard-dev.julep.ai/) [API Playground](https://dev.julep.ai/api/docs) [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md) [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md) [Integration List](https://github.com/julep-ai/julep/tree/dev?tab=readme-ov-file#integrations) Usecases [User Profiling](https://github.com/julep-ai/julep/blob/dev/cookbooks/09-User_Management_and_Personalization.py) [Email Assistant (Mailgun)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/00-Devfest-Email-Assistant.ipynb) [Trip Planner (Weather + Wiki)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) [Doc Management](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py) [Website Crawler (Spider)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/01-Website_Crawler_using_Spider.ipynb) [Multi-step Tasks](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-Designing_Multi-Step_Tasks.py) [Advanced Chat](https://github.com/julep-ai/julep/blob/dev/cookbooks/11-Advanced_Chat_Interactions.py) Company [About](./about) [Contact Us](./contact) [Book Demo](https://calendly.com/ishita-julep) Socials [Github](https://github.com/julep-ai/julep) [LinkedIn](https://www.linkedin.com/company/julep-ai) [Twitter](https://x.com/julep_ai) [Dev.to](https://dev.to/julep) [Hugging Face](https://huggingface.co/julep-ai) [Youtube](https://www.youtube.com/@julep_ai) Built by Engineers, for Engineers ©Julep AI Inc 2024 Dev Resources [Docs](https://docs.julep.ai/) [Get API Key](https://dashboard-dev.julep.ai/) [API Playground](https://dev.julep.ai/api/docs) [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/README.md) [Javascript SDK](https://github.com/julep-ai/node-sdk/blob/main/README.md) [Integration List](https://github.com/julep-ai/julep/tree/dev?tab=readme-ov-file#integrations) Usecases [User Profiling](https://github.com/julep-ai/julep/blob/dev/cookbooks/09-User_Management_and_Personalization.py) [Email Assistant (Mailgun)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/00-Devfest-Email-Assistant.ipynb) [Trip Planner (Weather + Wiki)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) [Doc Management](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py) [Website Crawler (Spider)](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/01-Website_Crawler_using_Spider.ipynb) [Multi-step Tasks](https://github.com/julep-ai/julep/blob/dev/cookbooks/06-Designing_Multi-Step_Tasks.py) [Advanced Chat](https://github.com/julep-ai/julep/blob/dev/cookbooks/11-Advanced_Chat_Interactions.py) Company [About](./about) [Contact Us](./contact) [Book Demo](https://calendly.com/ishita-julep) Socials [Github](https://github.com/julep-ai/julep) [LinkedIn](https://www.linkedin.com/company/julep-ai) [Twitter](https://x.com/julep_ai) [Dev.to](https://dev.to/julep) [Hugging Face](https://huggingface.co/julep-ai) [Youtube](https://www.youtube.com/@julep_ai) Built by Engineers, for Engineers ©Julep AI Inc 2024 This chunk provides an overview of resources and support options offered by Julep AI, including documentation, development tools, community links, and contact information for booking demos or reaching out for support. It highlights features such as the Julep API, multi-step workflow deployment, and various use cases relevant for developers. ``` This example is taken from the `crawling-and-rag` cookbook. Check it out [here](https://github.com/julep-ai/julep/blob/dev/cookbooks/advanced/10-crawling-and-rag.ipynb). ## Best Practices
  • **1. Reuse Sessions**: Reuse existing sessions for returning users to maintain continuity in interactions.
  • **2. Session Cleanup**: Regularly clean up inactive sessions to manage resources efficiently.
  • **3. Context Overflow Strategy**: Choose an appropriate context overflow strategy (e.g., "adaptive") to handle long conversations without losing important information.
  • **1. Leverage Metadata**: Use session metadata to store and retrieve user preferences, enhancing personalized interactions.
  • **2. Maintain Context**: Ensure that the context within sessions is updated and relevant to provide coherent and context-aware responses.
  • **1. Efficient Searches**: Optimize search queries within sessions to retrieve relevant documents quickly.
  • **2. Manage Token Usage**: Monitor and manage token usage to ensure efficient use of resources, especially in long sessions.
## Next Steps - [Agent Tools](/concepts/tools) - Learn about tools and how to use them with agents - [Agent Tasks](/concepts/tasks) - Learn about tasks and how to use them with agents - [Agent Docs](/concepts/docs) - Learn about docs and how to use them with agents ================================================ FILE: documentation/concepts/tasks.mdx ================================================ --- title: 'Tasks' description: 'Understanding Julep Tasks and workflows' icon: 'list-check' --- ## Overview Tasks are GitHub Actions-style workflows that define multi-step actions in Julep. Think of them as recipes that tell an agent exactly how to accomplish a goal. For example, a task might outline the steps to "Summarize a Research Paper" or "Debug a Code Issue".
## Task Structure Let's break down the task into its core components: ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: goal: type: string agent_id: type: string description: The id of the agent to use for the browser automation required: - goal - agent_id ``` This schema specifies that our task expects a goal string describing what the browser automation should accomplish. ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml [expandable] tools: - name: create_browserbase_session type: integration integration: provider: browserbase method: create_session setup: api_key: "YOUR_BROWSERBASE_API_KEY" project_id: YOUR_PROJECT_ID - name: get_session_view_urls type: integration integration: provider: browserbase method: get_live_urls - name: perform_browser_action type: integration integration: provider: remote_browser method: perform_action setup: width: 1024 height: 768 - name: create_julep_session type: system system: resource: session operation: create - name: session_chat type: system system: resource: session operation: chat ``` ### 3. Main Workflow Steps ```yaml - tool: create_julep_session arguments: agent: $ str(agent.id) situation: "The environment is a browser" recall: 'False' ``` This step initializes a new Julep session for the AI agent. The session serves as a container for the conversation history and enables the agent to maintain context throughout the interaction. ```yaml - evaluate: julep_session_id: $ _.id ``` After creating the session, we store its unique identifier for future reference. ```yaml - tool: create_browserbase_session arguments: project_id: YOUR_PROJECT_ID ``` This step establishes a new browser session using BrowserBase. It creates an isolated, headless Chrome browser instance that the agent can control. ```yaml - evaluate: browser_session_id: $ _.id connect_url: $ _.connect_url ``` We store both the browser session ID and connect URL in a single evaluation step. ```yaml - tool: get_session_view_urls arguments: id: $ _.browser_session_id ``` This step retrieves various URLs associated with the browser session, including debugging interfaces and live view URLs. ```yaml - evaluate: debugger_url: $ _.urls.debuggerUrl ``` We specifically store the debugger URL, which provides access to Chrome DevTools Protocol debugging interface. ```yaml - tool: perform_browser_action arguments: connect_url: $ steps[3].output.connect_url action: "navigate" text: "https://www.google.com" ``` This step navigates to Google's homepage to avoid sending a blank screenshot when computer use starts. ```yaml - workflow: run_browser arguments: julep_session_id: $ steps[1].output.julep_session_id cdp_url: $ steps[3].output.connect_url messages: - role: "user" content: |- $ f""" * You are utilising a headless chrome browser to interact with the internet. * You can use the computer tool to interact with the browser. * You have access to only the browser. * You are already inside the browser. * You can't open new tabs or windows. * For now, rely on screenshots as the only way to see the browser. * You can't don't have access to the browser's UI. * YOU CANNOT WRITE TO THE SEARCH BAR OF THE BROWSER. * + {steps[0].input.goal} + NEWLINE + """ ``` Finally, we initiate the interactive browser workflow with system capabilities and user goal. ### 4. Run Browser Subworkflow The `run_browser` subworkflow is a crucial component that handles the interactive browser automation. It consists of three main parts: ```yaml - tool: session_chat arguments: session_id: $ _.julep_session_id messages: $ _.messages recall: $ False - evaluate: content: $ _.choices[0].message.content tool_calls: |- $ [ { 'tool_call_id': tool_call.id, 'action': load_json(tool_call.function.arguments)['action'], 'text': load_json(tool_call.function.arguments).get('text'), 'coordinate': load_json(tool_call.function.arguments).get('coordinate') } for tool_call in _.choices[0].message.tool_calls or [] if tool_call.type == 'function'] ``` This step engages the AI agent in conversation, allowing it to: - Process and understand the user's goal - Plan appropriate browser actions - Generate responses based on the current browser state - Make decisions about next steps ```yaml - foreach: in: $ _.tool_calls do: tool: perform_browser_action arguments: connect_url: $ steps[0].input.cdp_url action: $ _.action text: $ _.get('text') coordinate: $ _.get('coordinate') ``` This component: - Iterates through planned actions sequentially - Executes browser commands (navigation, clicking, typing) - Handles different types of interactions (text input, mouse clicks) - Captures screenshots for visual feedback ```yaml [expandable] - evaluate: contents: >- $ [ \ { \ 'type': 'image_url', \ 'image_url': { \ 'url': result['base64_image'], \ } \ } if result['base64_image'] is not None else \ { \ 'type': 'text', \ 'text': result['output'] if result['output'] is not None else 'done' \ } \ for result in _] - evaluate: messages: "$ [{'content': [_.contents[i]], 'role': 'tool', 'name': 'computer', 'tool_call_id': steps[1].output.tool_calls[i].tool_call_id} for i in range(len(_.contents))]" - workflow: check_goal_status arguments: messages: $ _.messages julep_session_id: $ steps[0].input.julep_session_id cdp_url: $ steps[0].input.cdp_url ``` This final part: - Assesses progress toward the user's goal - Determines if additional actions are needed - Maintains conversation context - Decides whether to continue or conclude the workflow ### 5. Check Goal Status Subworkflow The `check_goal_status` subworkflow is a recursive component that ensures continuous operation until the goal is achieved: ```yaml check_goal_status: - if: $ len(_.messages) > 0 then: workflow: run_browser arguments: messages: $ _.messages julep_session_id: $ _.julep_session_id cdp_url: $ _.cdp_url ``` This workflow: - Checks if there are any messages to process (`len(_.messages) > 0`) - If messages exist, recursively calls the `run_browser` workflow - Passes along the current session context and connection details - Maintains the conversation flow until the goal is achieved - Automatically terminates when no more messages need processing This recursive pattern ensures that the browser automation continues until either: - The goal is successfully achieved - No more actions are needed - An error occurs that prevents further progress ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Julep Browser Use Task description: A Julep agent that can use the computer tool to interact with the browser. ######################################################## ################### INPUT SCHEMA ####################### ######################################################## input_schema: type: object properties: goal: type: string required: - goal ######################################################## ####################### TOOLS ########################## ######################################################## tools: - name: create_browserbase_session type: integration integration: provider: browserbase method: create_session setup: api_key: "YOUR_BROWSERBASE_API_KEY" project_id: "YOUR_BROWSERBASE_PROJECT_ID" - name: get_session_view_urls type: integration integration: provider: browserbase method: get_live_urls setup: api_key: "YOUR_BROWSERBASE_API_KEY" project_id: "YOUR_BROWSERBASE_PROJECT_ID" - name: perform_browser_action type: integration integration: provider: remote_browser method: perform_action setup: width: 1024 height: 768 - name: create_julep_session type: system system: resource: session operation: create - name: session_chat type: system system: resource: session operation: chat ######################################################## ################### MAIN WORKFLOW ###################### ######################################################## main: # Step #0 - Create Julep Session - tool: create_julep_session arguments: agent: $ str(agent.id) situation: "Juelp Browser Use Agent" recall: 'False' # Step #1 - Store Julep Session ID - evaluate: julep_session_id: $ _.id # Step #2 - Create Browserbase Session - tool: create_browserbase_session arguments: project_id: "c35ee022-883e-4070-9f3c-89607393214b" # Step #3 - Store Browserbase Session Info - evaluate: browser_session_id: $ _.id connect_url: $ _.connect_url # Step #4 - Get Session View URLs - tool: get_session_view_urls arguments: id: $ _.browser_session_id # Step #5 - Store Debugger URL - evaluate: debugger_url: $ _.urls.debuggerUrl # Step #6 - Navigate to Google # Navigate to google to avoid sending a blank # screenshot when computer use starts - tool: perform_browser_action arguments: connect_url: $ steps[3].output.connect_url action: "navigate" text: "https://www.google.com" # Step #7 - Run Browser Workflow - workflow: run_browser arguments: julep_session_id: $ steps[1].output.julep_session_id cdp_url: $ steps[3].output.connect_url messages: - role: "user" content: |- $ f""" * You are utilising a headless chrome browser to interact with the internet. * You can use the computer tool to interact with the browser. * You have access to only the browser. * You are already inside the browser. * You can't open new tabs or windows. * For now, rely on screenshots as the only way to see the browser. * You don't have access to the browser's UI. * YOU CANNOT WRITE TO THE SEARCH BAR OF THE BROWSER. * + {steps[0].input.goal} + NEWLINE + """ ######################################################## ################# RUN BROWSER SUBWORKFLOW ################# ######################################################## run_browser: # Step #0 - Agent Interaction - tool: session_chat arguments: session_id: $ _.julep_session_id messages: $ _.messages recall: $ False # Step #1 - Evaluate the response from the agent - evaluate: content: $ _.choices[0].message.content tool_calls: |- $ [ { 'tool_call_id': tool_call.id, 'action': load_json(tool_call.function.arguments)['action'], 'text': load_json(tool_call.function.arguments).get('text'), 'coordinate': load_json(tool_call.function.arguments).get('coordinate') } for tool_call in _.choices[0].message.tool_calls or [] if tool_call.type == 'function'] # Step #2 - Perform the actions requested by the agent - foreach: in: $ _.tool_calls do: tool: perform_browser_action arguments: connect_url: $ steps[0].input.cdp_url action: $ _.action if not (str(_.get('text', '')).startswith('http') and _.action == 'type') else 'navigate' text: $ _.get('text') coordinate: $ _.get('coordinate') # Step #3 - Convert the result of the actions into a chat message - evaluate: contents: >- $ [ \ { \ 'type': 'image_url', \ 'image_url': { \ 'url': result['base64_image'], \ } \ } if result['base64_image'] is not None else \ { \ 'type': 'text', \ 'text': result['output'] if result['output'] is not None else 'done' \ } \ for result in _] # Step #4 - Convert the result of the actions into a chat message - evaluate: messages: "$ [{'content': [_.contents[i]], 'role': 'tool', 'name': 'computer', 'tool_call_id': steps[1].output.tool_calls[i].tool_call_id} for i in range(len(_.contents))]" # Step #5 - Check if the goal is achieved and recursively run the browser - workflow: check_goal_status arguments: messages: $ _.messages julep_session_id: $ steps[0].input.julep_session_id cdp_url: $ steps[0].input.cdp_url ######################################################## ############## CHECK GOAL STATUS SUBWORKFLOW ############## ######################################################## check_goal_status: # Step #0 - Check if the goal is achieved and recursively run the browser - if: $ len(_.messages) > 0 then: workflow: run_browser arguments: messages: $ _.messages julep_session_id: $ _.julep_session_id cdp_url: $ _.cdp_url ``` ## Usage Here's how to use this task with the Julep SDK: ```python Python [expandable] from julep import Client import yaml import time # Initialize the client client = Client(api_key=JULEP_API_KEY) # Create the agent agent = client.agents.create( name="Julep Browser Use Agent", about="A Julep agent that can use the computer tool to interact with the browser.", ) # Load the task definition with open('browser_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=agent.id, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={ "agent_id": agent.id, "goal": "Search for recent news about artificial intelligence" } ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(1) # Print the result if result.status == "succeeded": print(result.output) else: print(f"Error: {result.error}") ``` ```js Node.js [expandable] import { Julep } from '@julep/sdk'; import yaml from 'yaml'; import fs from 'fs'; // Initialize the client const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Julep Browser Use Agent", about: "A Julep agent that can use the computer tool to interact with the browser.", }); // Parse the task definition const taskDefinition = yaml.parse(fs.readFileSync('browser_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { "agent_id": agent.id, "goal": "Search for recent news about artificial intelligence" } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 1000)); } // Print the result if (result.status === 'succeeded') { console.log(result.output); } else { console.error(`Error: ${result.error}`); } ``` ## Key Features - **Browser Automation**: Performs web interactions like navigation, clicking, and typing - **Visual Feedback**: Captures screenshots to verify actions and understand page state - **Goal-Oriented**: Continues executing actions until the user's goal is achieved - **Secure Sessions**: Uses BrowserBase for isolated browser instances - **Interactive Workflow**: Uses run_browser subworkflow for continuous interaction ## Next Steps - Try this task yourself, check out the full example, see the [browser-use cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/06-browser-use.ipynb). - To learn more about the integrations used in this task, check out the [integrations](/integrations/supported-integrations) page. ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Tools](/concepts/tools) ================================================ FILE: documentation/tutorials/hacker-news-newsletter.mdx ================================================ --- title: 'Hacker News Newsletter Generator' description: 'Learn how to build a personalized newsletter generator that fetches top Hacker News stories, analyzes their relevance to user interests, and creates AI-powered summaries' icon: 'newspaper' --- ## Overview This tutorial demonstrates how to: - Fetch and filter top stories from Hacker News API - Scrape full article content using web scraping integration - Personalize content based on user preferences using AI - Generate concise summaries for curated stories - Process data in parallel for optimal performance ## Task Structure Let's break down the task into its core components: ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: min_score: type: integer default: 50 num_stories: type: integer default: 10 description: Number of stories to include in newsletter user_preferences: type: array items: type: string description: User's technology interests (e.g., ["AI/ML", "Python", "Startups"]) ``` This schema allows users to: - Set a minimum HN score threshold for quality filtering - Specify how many stories to include in the final newsletter - Define their technology interests for personalization ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: fetch_hn_stories type: api_call api_call: method: GET url: https://hacker-news.firebaseio.com/v0/topstories.json headers: Content-Type: application/json - name: get_story_details type: api_call api_call: method: GET url: "https://example.com" headers: Content-Type: application/json - name: get_comment_details type: api_call api_call: method: GET url: https://hacker-news.firebaseio.com/v0/item/{{comment_id}}.json - name: spider_fetch type: integration integration: provider: spider setup: spider_api_key: YOUR_SPIDER_API_KEY ``` We're using: - Direct Hacker News API calls for stories and comments - Spider integration for advanced web scraping capabilities ### 3. Main Workflow Steps ```yaml - tool: fetch_hn_stories arguments: url: "https://hacker-news.firebaseio.com/v0/topstories.json" label: fetch_story_ids - evaluate: story_ids: $ steps["fetch_story_ids"].output.json[:50] message: $ f"Fetched {len(steps['fetch_story_ids'].output.json)} stories, processing top 50" label: extract_ids ``` This step: - Fetches the current top 500 story IDs from Hacker News - Extracts the first 50 for processing ```yaml - over: $ steps["extract_ids"].output["story_ids"] parallelism: 10 map: tool: get_story_details arguments: method: GET url: $ f"https://hacker-news.firebaseio.com/v0/item/{_}.json" label: all_stories - evaluate: stories: $ [item["json"] for item in _ if item and "json" in item] label: extract_stories ``` This step: - Fetches full details for each story ID - Processes 10 stories in parallel for efficiency - Extracts successfully fetched story data ```yaml - evaluate: filtered: $ [s for s in steps["extract_stories"]["output"]["stories"] if "score" in s and s["score"] >= inputs.get("min_score", 50)] label: filter_stories - evaluate: sorted_stories: '$ steps["filter_stories"]["output"]["filtered"][:inputs.get("num_stories", 10)]' label: sort_stories ``` This step: - Filters stories by minimum score threshold - Sorts by score and takes the top N stories - Ensures quality content for the newsletter ```yaml [expandable] - over: $ steps["sort_stories"]["output"]["sorted_stories"] parallelism: 4 map: tool: spider_fetch arguments: url: $ _['url'] params: request: smart_mode return_format: markdown proxy_enabled: $ True filter_output_images: $ True filter_output_svg: $ True readability: $ True limit: 1 label: fetch_content - evaluate: scraped_contents: '$ [item["result"][0]["content"] if item and "result" in item and item["result"] and "content" in item["result"][0] else "" for item in _]' label: extract_scraped_content ``` - **smart_mode**: Intelligently extracts main content - **return_format: markdown**: Clean, parseable text format - **proxy_enabled**: Avoids rate limiting and blocks - **filter_output_images/svg**: Text-only content - **readability**: Enhanced article parsing - **parallelism: 4**: Balanced to avoid overwhelming target sites This step: - Scrapes full article content for each story - Converts to clean markdown format - Handles failed scrapes gracefully ```yaml - evaluate: comment_pairs: '$ [{"story_id": story["id"], "story_index": idx, "comment_id": kid} for idx, story in enumerate(steps["sort_stories"]["output"]["sorted_stories"]) if "kids" in story for kid in story["kids"][:3]]' label: prepare_comments - over: '$ steps["prepare_comments"]["output"]["comment_pairs"]' parallelism: 15 map: tool: get_comment_details arguments: method: GET url: '$ f"https://hacker-news.firebaseio.com/v0/item/{_["comment_id"]}.json"' label: fetch_all_comments ``` This step: - Prepares comment IDs (up to 3 per story) - Fetches comment details with high parallelism - Maintains story-comment relationships ```yaml [expandable] - evaluate: stories_with_comments: '$ [dict(story, content=steps["extract_scraped_content"]["output"]["scraped_contents"][i], top_comments=[item[1] for item in steps["comments_with_index"]["output"]["comments_grouped"] if item[0] == i]) for i, story in enumerate(steps["sort_stories"]["output"]["sorted_stories"])]' label: final_stories_with_comments - over: $ steps["final_stories_with_comments"]["output"]["stories_with_comments"] parallelism: 10 map: prompt: - role: system content: |- $ f''' You are a content curator. Score this HN story's relevance to the user's interests. User interests: {steps[0].input.user_preferences} Return only a JSON object with the relevance score (0-100). Return ONLY raw JSON without markdown code blocks ''' - role: user content: >- $ f''' Story to analyze: Title: {_["title"]} URL: {_["url"]} Score: {_["score"]} Content preview: {_["content"]} Top comment: {_["top_comments"][0]["text"]} Return format: "relevance_score" from 0 to 100 ''' unwrap: true label: score_stories - evaluate: personalized_stories: $ [item for item in steps["combine_scores"]["output"]["scored_stories"] if item["relevance_score"] >= 60] label: filter_personalized ``` This step: - Combines stories with their content and comments - Uses AI to score relevance (0-100) based on user preferences - Filters stories with relevance >= 60 for high personalization ```yaml - over: $ steps["filter_personalized"]["output"]["personalized_stories"] parallelism: 10 map: prompt: - role: system content: | Generate a concise, insightful summary (max 100 words) for this article. Focus on key insights and why it matters. - role: user content: >- $ f''' Title: {_["story"]["title"]} Content: {_["story"]["content"]} Top comments: {_["story"]["top_comments"]} ''' unwrap: true label: generate_summaries - evaluate: final_output: | $ [{ "title": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"]["title"], "url": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"]["url"], "hn_url": f"https://news.ycombinator.com/item?id={steps['filter_personalized']['output']['personalized_stories'][i]['story']['id']}", "comments_count": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"].get("descendants", 0), "summary": steps["generate_summaries"]["output"][i] } for i in range(len(steps["filter_personalized"]["output"]["personalized_stories"]))] label: prepare_final_output ``` This step: - Generates 100-word AI summaries for each story - Formats the final newsletter with all relevant information - Includes both article URL and HN discussion URL ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: HN Newsletter Generator description: Fetch top Hacker News stories, personalize content input_schema: type: object properties: min_score: type: integer default: 50 num_stories: type: integer default: 10 description: Number of stories to include in newsletter user_preferences: type: array items: type: string description: User's technology interests (e.g., ["AI/ML", "Python", "Startups"]) tools: # Fetch top story IDs from Hacker News - name: fetch_hn_stories type: api_call api_call: method: GET url: https://hacker-news.firebaseio.com/v0/topstories.json headers: Content-Type: application/json # Get detailed information for a specific story - name: get_story_details type: api_call api_call: method: GET url: "https://example.com" headers: Content-Type: application/json # Fetch individual comment details - name: get_comment_details type: api_call api_call: method: GET url: https://hacker-news.firebaseio.com/v0/item/{{comment_id}}.json # Spider web scraping integration - name: spider_fetch type: integration integration: provider: spider setup: spider_api_key: YOUR_SPIDER_API_KEY main: # Step 0: Fetch top story IDs from Hacker News - tool: fetch_hn_stories arguments: url: "https://hacker-news.firebaseio.com/v0/topstories.json" label: fetch_story_ids # Step 1: Extract first 50 story IDs - evaluate: story_ids: $ steps["fetch_story_ids"].output.json[:50] message: $ f"Fetched {len(steps['fetch_story_ids'].output.json)} stories, processing top 50" label: extract_ids # Step 2: Fetch details for each story in parallel - over: $ steps["extract_ids"].output["story_ids"] parallelism: 10 map: tool: get_story_details arguments: method: GET url: $ f"https://hacker-news.firebaseio.com/v0/item/{_}.json" label: all_stories # Step 3: Extract successfully fetched story data - evaluate: stories: $ [item["json"] for item in _ if item and "json" in item] label: extract_stories # Step 4: Filter by score - evaluate: filtered: $ [s for s in steps["extract_stories"]["output"]["stories"] if "score" in s and s["score"] >= inputs.get("min_score", 50)] label: filter_stories # Step 5: Sort stories by score and limit - evaluate: sorted_stories: '$ steps["filter_stories"]["output"]["filtered"][:inputs.get("num_stories", 10)]' label: sort_stories # Step 6: Fetch full article content using Spider - over: $ steps["sort_stories"]["output"]["sorted_stories"] parallelism: 4 map: tool: spider_fetch arguments: url: $ _['url'] params: request: smart_mode return_format: markdown proxy_enabled: $ True filter_output_images: $ True filter_output_svg: $ True readability: $ True limit: 1 label: fetch_content # Step 7: Extract scraped content - evaluate: scraped_contents: '$ [item["result"][0]["content"] if item and "result" in item and item["result"] and "content" in item["result"][0] else "" for item in _]' label: extract_scraped_content # Step 8: Prepare comment fetching - evaluate: comment_pairs: '$ [{"story_id": story["id"], "story_index": idx, "comment_id": kid} for idx, story in enumerate(steps["sort_stories"]["output"]["sorted_stories"]) if "kids" in story for kid in story["kids"][:3]]' label: prepare_comments # Step 9: Fetch all comment details - over: '$ steps["prepare_comments"]["output"]["comment_pairs"]' parallelism: 15 map: tool: get_comment_details arguments: method: GET url: '$ f"https://hacker-news.firebaseio.com/v0/item/{_["comment_id"]}.json"' label: fetch_all_comments # Step 10: Extract comment data - evaluate: comment_results: '$ [item["json"] for item in _ if item and "json" in item and item["json"]]' label: extract_comments # Step 11: Group comments by story - evaluate: comments_grouped: '$ [[pair["story_index"], steps["extract_comments"]["output"]["comment_results"][i]] for i, pair in enumerate(steps["prepare_comments"]["output"]["comment_pairs"])]' label: comments_with_index # Step 12: Combine stories with content and comments - evaluate: stories_with_comments: '$ [dict(story, content=steps["extract_scraped_content"]["output"]["scraped_contents"][i], top_comments=[item[1] for item in steps["comments_with_index"]["output"]["comments_grouped"] if item[0] == i]) for i, story in enumerate(steps["sort_stories"]["output"]["sorted_stories"])]' label: final_stories_with_comments # Step 13: Score stories based on user preferences - over: $ steps["final_stories_with_comments"]["output"]["stories_with_comments"] parallelism: 10 map: prompt: - role: system content: |- $ f''' You are a content curator. Score this HN story's relevance to the user's interests. User interests: $ {{ steps[0].input.user_preferences }} Return only a JSON object with the relevance score (0-100). Return ONLY raw JSON without markdown code blocks ''' - role: user content: >- $ f''' Story to analyze: Title: $ {{ _["title"] }} URL: $ {{ _["url"] }} Score: $ {{ _["score"] }} Content preview: $ {{ _["content"]}} Top comment: $ {{ _["top_comments"][0]["text"] }} Return format: "relevance_score" from 0 to 100 ''' unwrap: true label: score_stories # Step 14: Combine with scores - evaluate: scored_stories: '$ [{"story": steps["final_stories_with_comments"]["output"]["stories_with_comments"][i], "relevance_score": json.loads(steps["score_stories"]["output"][i])["relevance_score"]} for i in range(len(steps["score_stories"]["output"]))]' label: combine_scores # Step 15: Filter by relevance - evaluate: personalized_stories: $ [item for item in steps["combine_scores"]["output"]["scored_stories"] if item["relevance_score"] >= 60] label: filter_personalized # Step 16: Generate summaries - over: $ steps["filter_personalized"]["output"]["personalized_stories"] parallelism: 10 map: prompt: - role: system content: | Generate a concise, insightful summary (max 100 words) for this article. Focus on key insights and why it matters. - role: user content: >- $ f''' Title: {{ _["story"]["title"] }} Content: {{ _["story"]["content"] }} Top comments: {{ _["story"]["top_comments"] }} ''' unwrap: true label: generate_summaries # Step 17: Prepare final output - evaluate: final_output: | $ [{ "title": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"]["title"], "url": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"]["url"], "hn_url": f"https://news.ycombinator.com/item?id={{steps['filter_personalized']['output']['personalized_stories'][i]['story']['id']}}", "comments_count": steps["filter_personalized"]["output"]["personalized_stories"][i]["story"].get("descendants", 0), "summary": steps["generate_summaries"]["output"][i] } for i in range(len(steps["filter_personalized"]["output"]["personalized_stories"]))] label: prepare_final_output ``` ## Usage Here's how to use this task with the Julep SDK: ```python Python [expandable] from julep import Client import time import yaml # Initialize the client client = Client(api_key=JULEP_API_KEY) # Create the agent agent = client.agents.create( name="Hacker News Agent", about="A hacker news agent that can fetch the top stories from Hacker News and summarize them.", model="gpt-4o" ) # Load the task definition with open('hn_newsletter_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=agent.id, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={ "min_score": 100, "num_stories": 5, "user_preferences": ["AI/ML", "Python", "DevOps", "Cloud Computing"] } ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(5) # Print the result if result.status == "succeeded": for story in result.output['final_output']: print(f"Title: {story['title']}") print(f"URL: {story['url']}") print(f"HN Discussion: {story['hn_url']}") print(f"Comments: {story['comments_count']}") print(f"Summary: {story['summary']}") print("-" * 80) else: print(f"Error: {result.error}") ``` ```js Node.js [expandable] import { Julep } from '@julep/sdk'; import fs from 'fs'; import yaml from 'yaml'; // Initialize the client const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Hacker News Agent", about: "A hacker news agent that can fetch the top stories from Hacker News and summarize them.", model: "gpt-4o" }); // Load the task definition const taskDefinition = yaml.parse(fs.readFileSync('hn_newsletter_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { min_score: 100, num_stories: 5, user_preferences: ["AI/ML", "Python", "DevOps", "Cloud Computing"] } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 5000)); } // Print the result if (result.status === 'succeeded') { result.output.final_output.forEach(story => { console.log(`Title: ${story.title}`); console.log(`URL: ${story.url}`); console.log(`HN Discussion: ${story.hn_url}`); console.log(`Comments: ${story.comments_count}`); console.log(`Summary: ${story.summary}`); console.log('-'.repeat(80)); }); } else { console.error(`Error: ${result.error}`); } ``` ## Example Output An example output when running this task with user preferences for AI/ML and Python: **Title:** OpenAI Announces GPT-5 with Revolutionary Reasoning Capabilities **URL:** https://openai.com/research/gpt-5 **HN Discussion:** https://news.ycombinator.com/item?id=12345678 **Comments:** 234 **Summary:** OpenAI's GPT-5 demonstrates unprecedented reasoning abilities and multimodal understanding. The model shows significant improvements in code generation, mathematical reasoning, and real-world problem solving. Key breakthrough involves new architecture allowing dynamic computation allocation based on task complexity. Community discusses implications for AI safety and potential applications in scientific research. --- **Title:** Python 3.13 Released with Major Performance Improvements **URL:** https://python.org/downloads/release/python-313 **HN Discussion:** https://news.ycombinator.com/item?id=12345679 **Comments:** 156 **Summary:** Python 3.13 brings 40% performance improvements through adaptive bytecode specialization and improved memory management. New features include better error messages, enhanced typing support, and native WASM compilation. Developers report significant speedups in data processing workloads. Discussion highlights compatibility concerns with popular libraries and migration strategies for large codebases. --- **Title:** New ML Framework Achieves 10x Training Speed on Consumer GPUs **URL:** https://github.com/fastML/framework **HN Discussion:** https://news.ycombinator.com/item?id=12345680 **Comments:** 189 **Summary:** FastML framework enables training large language models on consumer hardware through innovative gradient compression and distributed computing techniques. Benchmarks show 10x speedup compared to PyTorch for specific workloads. Framework supports automatic mixed precision and memory-efficient attention mechanisms. Community excited about democratizing ML research but debates production readiness. ## Monitoring Execution Track the execution progress and debug issues: ```python # Get execution transitions transitions = client.executions.transitions.list(execution.id).items for i, transition in enumerate(transitions): print(f"Step {i}: {transition.type}") if transition.type == "step": print(f"Label: {transition.current.label}") print(f"Status: {transition.status}") if transition.status == "failed": print(f"Error: {transition.error}") print("-" * 40) ``` ## Customization Ideas 1. **Email Integration**: Add email sending to deliver newsletters automatically 2. **Scheduling**: Set up periodic execution for daily/weekly newsletters ## Next Steps - Try this task yourself, check out the full example in the [Hacker News cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/11-hacker-news.ipynb) - Learn more about the [Spider integration](/integrations/spider) for web scraping - Explore [parallel processing patterns](/advanced/types-of-task-steps#parallel-execution) in Julep ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Tools](/concepts/tools) - [Integrations](/integrations/supported-integrations) - [Python Expressions](/advanced/python-expression) ================================================ FILE: documentation/tutorials/julep-assistant.mdx ================================================ --- title: 'Building a RAG-powered AI Assistant with Julep' description: 'Learn how to build an intelligent AI support assistant using Julep with document indexing, RAG capabilities, and a chat interface' icon: 'robot' --- ## Overview This tutorial demonstrates how to build a production-ready AI assistant using Julep. We'll create an intelligent support assistant that can: - Crawl and index documentation automatically - Answer questions using RAG (Retrieval-Augmented Generation) - Provide contextual, accurate responses based on indexed content - Offer an interactive chat interface with session management - Collect and validate user feedback for continuous improvement ## What You'll Learn By the end of this tutorial, you'll understand how to: 1. Configure a Julep agent with specific instructions and capabilities 2. Create complex workflows for document processing and indexing 3. Implement RAG-powered conversations with hybrid search 4. Build an interactive chat interface using Chainlit 5. Deploy a production-ready AI assistant ## Prerequisites - Python 3.8+ - Julep API key (get one at [platform.julep.ai](https://platform.julep.ai)) - Basic understanding of Julep concepts (agents, tasks, sessions) - Spider API key for web crawling ## Project Structure The Julep Assistant project is organized as follows: ```bash julep-assistant/ ├── agent.yaml # Agent configuration ├── task/ # Julep task definitions │ ├── main.yaml # Main workflow task │ ├── crawl.yaml # Web crawling sub-task │ └── full_task.yaml # Complete task with all steps ├── scripts/ # Utility scripts │ ├── crawler.py # Standalone web crawler │ └── indexer.py # Document indexing utility ├── chainlit-ui/ # Web interface │ ├── app.py # Main Chainlit application │ ├── feedback/ # Feedback handling system │ └── requirements.txt # Python dependencies └── julep-assistant-notebook.ipynb # Interactive notebook demo ``` ## Step 1: Agent Configuration First, let's understand how the agent is configured. The `agent.yaml` file defines the assistant's personality and capabilities: ```yaml name: Julep Support Assistant about: >- You are the official Julep AI support assistant. You help developers understand and use the Julep platform effectively. model: claude-sonnet-4 instructions: |- You are the official Julep AI support assistant. Your purpose is to help developers build AI applications using the Julep platform. Your core responsibilities: 1. **Workflow Assistance**: Help users write, debug, and optimize Julep workflows 2. **Concept Explanation**: Clearly explain Julep concepts like agents, tasks, sessions, and tools 3. **Code Examples**: Provide working code examples in Python, YAML, or JavaScript 4. **API Guidance**: Help users understand and use Julep's API effectively 5. **Best Practices**: Share proven patterns and architectural recommendations Guidelines: - Always provide accurate, up-to-date information from the official documentation - Include code examples whenever possible - Use proper syntax highlighting for code blocks - Explain the "why" behind recommendations, not just the "how" ``` Key points: - The agent uses Claude Sonnet 4 for high-quality responses - Instructions provide clear guidance on how to help users - The agent is specialized for Julep-specific support ## Step 2: Web Crawling and Document Indexing The assistant's knowledge base is built in two stages: first crawling documentation websites, then indexing the content for RAG retrieval. ### Web Crawling with Spider Integration Before indexing documents, we need to crawl the target website. The `task/crawl.yaml` defines a reusable crawling workflow: ```yaml name: Julep Documentation Crawler Task description: A Julep agent that can crawl the Julep documentation website and store the content in the document store with proper contextualization. input_schema: type: object properties: url: type: string description: "The URL of the documentation page" required: - url tools: - name: spider_crawler type: integration integration: provider: spider setup: spider_api_key: {spider_api_key} main: - tool: spider_crawler arguments: url: $ _['url'] params: request: smart_mode return_format: markdown proxy_enabled: $ True filter_output_images: $ True filter_output_svg: $ True readability: $ True ``` ### Complete Workflow: Crawl + Index The `task/full_task.yaml` combines both crawling and indexing into a single workflow: ```yaml main: # Step 0: Crawl the Julep documentation using Spider (will crawl multiple pages) - tool: spider_crawler arguments: url: $ _['url'] params: request: smart_mode limit: 2 return_format: markdown proxy_enabled: $ True filter_output_images: $ True filter_output_svg: $ True readability: $ True # Step 1: Process each crawled page individually - over: $ [page for page in _.result if page.status == 200 and page.content] parallelism: 5 map: workflow: process_single_page arguments: url: $ _.url content: $ _.content ``` The key Spider crawler parameters: - `smart_mode`: Intelligently navigates and extracts content - `limit`: Number of pages to crawl (set to 2 for testing, increase for production) - `return_format: markdown`: Returns clean markdown content - `proxy_enabled`: Uses proxy for better reliability - `filter_output_images/svg`: Removes images to focus on text content - `readability`: Extracts main content, removing navigation and ads ### Document Indexing Workflow After crawling, the main workflow in `task/main.yaml` processes and indexes the content: ### Input Schema ```yaml input_schema: type: object properties: url: type: string description: "The URL of the documentation page" content: type: string description: "The markdown content of the documentation page" required: - url - content ``` ### Document Processing Steps The workflow starts by creating documentation-sized chunks: ```yaml - evaluate: chunks: | $ [" ".join(_.content.strip().split()[i:i + 1500]) for i in range(0, len(_.content.strip().split()), 1200)] ``` This creates ~1500 word chunks with 300-word overlap to preserve context. Each page is analyzed to extract structured information: ```yaml - prompt: - role: system content: |- Analyze the documentation content and extract: - primary_concepts: Which Julep concepts does this content cover? - content_type: (tutorial, api_reference, concept_explanation, etc.) - key_topics: Main topics discussed - code_examples: Whether it contains code examples - use_cases: Practical applications mentioned ``` All code examples are extracted and categorized: ```yaml - prompt: - role: system content: |- Extract all code examples from the documentation content. For each code example found, identify: - language: The programming language - code: The actual code content - purpose: What this code demonstrates - context: When to use this code ``` For each chunk, the system generates questions and answers: ```yaml - prompt: - role: system content: |- Generate 3-5 relevant questions users might ask about this chunk Provide clear, concise answers based on the content Add contextual information to improve search retrieval ``` Finally, enhanced content is stored as agent documents: ```yaml - tool: create_agent_doc arguments: agent_id: $ str(agent.id) data: metadata: source: "spider_crawler" url: $ steps[0].input.page_url content_type: $ steps[2].output.doc_analysis.get('content_type') concepts: $ steps[2].output.doc_analysis.get('primary_concepts') content: $ _["final_content"] ``` ## Step 3: Building the Chat Interface The chat interface is built with Chainlit, providing a smooth user experience. Here's how it works: ### Session Initialization ```python @cl.on_chat_start async def on_chat_start(): """Initialize a new chat session""" # Create session with RAG search options session = await julep_client.sessions.create( agent=AGENT_UUID, recall_options={ "mode": "hybrid", # Uses both vector and text search "confidence": 0.7, # Confidence threshold "limit": 10, # Max number of results "embed_text": True # Embed query for vector search } ) # Store session for later use cl.user_session.set("session", session) ``` ### Message Handling ```python @cl.on_message async def on_message(message: cl.Message): """Handle incoming user messages""" # Get the session session = cl.user_session.get("session") # Send message to Julep and stream response msg = cl.Message(content="") response = await julep_client.sessions.chat( session_id=session.id, message={ "role": "user", "content": message.content }, stream=True ) # Stream tokens to user async for chunk in response: if chunk.choices[0].delta.content: await msg.stream_token(chunk.choices[0].delta.content) await msg.send() ``` ## Step 4: RAG Configuration The assistant uses hybrid search for optimal retrieval: ```python recall_options={ "mode": "hybrid", # Combines vector and text search "confidence": 0.7, # Minimum confidence score "limit": 10, # Maximum results to retrieve "embed_text": True # Enable embeddings for vector search } ``` ### Search Modes Explained - **Hybrid Mode**: Combines semantic vector search with keyword matching - **Vector Mode**: Pure semantic search based on embeddings - **Text Mode**: Traditional keyword-based search ## Step 5: Dynamic Feedback System The assistant implements an innovative feedback system that dynamically improves the agent's behavior by updating its instructions in real-time based on validated user feedback. ### How the Feedback System Works The feedback system validates and applies user feedback directly to the agent's instructions: ```python class FeedbackHandler: async def process_feedback( self, feedback_text: str, user_question: str, agent_response: str, session_id: str ) -> Dict[str, Any]: """Process user feedback and update agent instructions if valid""" # Get current agent details agent = await self.client.agents.get(agent_id=self.agent_id) # Validate the feedback using AI validation_result = await self.validator.validate_feedback( feedback_text=feedback_text, user_question=user_question, agent_response=agent_response, agent_instructions=current_instructions_str ) # If feedback is valid with high confidence (>= 0.7) if validation_result.get("is_valid") and validation_result.get("confidence", 0) >= 0.7: updated_instructions = validation_result.get("updated_instructions") if updated_instructions: # Update the agent with new instructions await self.client.agents.create_or_update( agent_id=self.agent_id, name=agent.name, instructions=updated_instructions, ) ``` ### Feedback Validation Process The system uses AI to validate feedback before applying it: ```python class FeedbackValidator: async def validate_feedback(self, feedback_text, user_question, agent_response, agent_instructions): """Validate feedback using AI to ensure it's constructive and applicable""" # AI validates if feedback is: # 1. Constructive and specific # 2. Relevant to improving the agent # 3. Not contradicting core functionality # 4. Actionable for instruction updates # Returns: # - is_valid: boolean # - confidence: 0-1 score # - category: type of feedback # - updated_instructions: new instructions if applicable ``` ### Feedback Collection UI The system provides three feedback options: ```python def create_feedback_actions(self, message_id: str) -> list: """Create Chainlit actions for feedback collection""" return [ cl.Action( name="feedback_helpful", payload={"value": "helpful"}, label="👍 Helpful" ), cl.Action( name="feedback_not_helpful", payload={"value": "not_helpful"}, label="👎 Not Helpful" ), cl.Action( name="feedback_detailed", payload={"value": "detailed"}, label="💭 Give Detailed Feedback" ) ] ``` ### Real-time Agent Improvement When valid feedback is received, the agent immediately adapts: 1. **Positive Feedback**: Reinforces current behavior patterns 2. **Negative Feedback**: Prompts for specifics and adjusts instructions 3. **Detailed Feedback**: Allows comprehensive improvements Example of instruction evolution: ```python # Original instruction "Provide code examples when explaining concepts" # After user feedback: "The code examples are too basic" "Provide comprehensive code examples with edge cases and best practices when explaining concepts" ``` ### Benefits of Dynamic Feedback 1. **Continuous Learning**: Agent improves with each interaction 2. **User-Driven Evolution**: Adapts to actual user needs 3. **Quality Control**: AI validation prevents harmful changes 4. **Immediate Impact**: Changes apply to next interaction This approach makes the assistant truly adaptive, learning from user interactions to provide increasingly better support over time. ## Step 6: Running the Assistant ### Installation 1. Clone the repository and install dependencies: ```bash cd julep-assistant pip install -r chainlit-ui/requirements.txt ``` 2. Set up environment variables: ```bash # Create .env file JULEP_API_KEY=your_julep_api_key_here AGENT_UUID=your_agent_uuid # Or use the default SPIDER_API_KEY=your_spider_api_key # Optional ``` ### Running the Chat Interface ```bash cd chainlit-ui chainlit run app.py ``` This starts the web interface at `http://localhost:8000`. ### Using Scripts for Better Monitoring While the `full_task.yaml` can handle both crawling and indexing, using the separate scripts provides better visibility and control: **Web Crawler Script:** ```bash python scripts/crawler.py --url https://docs.julep.ai --max-pages 100 ``` This script: - Provides real-time progress updates - Saves crawled content to JSON for inspection - Allows you to verify content before indexing - Handles rate limiting and retries **Document Indexer Script:** ```bash python scripts/indexer.py ``` This script: - Reads the crawled content from the crawler output - Shows progress for each document being indexed - Provides detailed error messages if indexing fails - Generates a summary report of indexed documents **Monitoring Task Execution:** You can also monitor the full workflow execution: ```python # Execute the full crawl + index task execution = await julep_client.tasks.execute( task_id=TASK_ID, input={ "url": "https://docs.julep.ai", "max_pages": 100 } ) # Monitor execution status while execution.status in ["pending", "running"]: execution = await julep_client.executions.get(execution.id) print(f"Status: {execution.status}") # Get execution steps for detailed progress steps = await julep_client.executions.steps.list(execution.id) for step in steps: print(f" Step {step.name}: {step.status}") await asyncio.sleep(5) ``` ## Resources - [Julep Assistant GitHub Repository](https://github.com/julep-ai/julep-assistant) - Complete source code and examples - [Julep Documentation](https://docs.julep.ai) - [API Reference](https://api.julep.ai/docs) - [Discord Community](https://discord.com/invite/JTSBGRZrzj) ## Summary You've learned how to build a production-ready AI assistant with Julep that features: - Web crawling with Spider integration for content acquisition - Automated documentation processing and indexing - RAG-powered responses with hybrid search - Interactive chat interface with session management - Feedback collection and analysis using Julep documents - Scalable architecture for production deployment This assistant demonstrates the power of Julep for building stateful, context-aware AI applications that can maintain conversations, access external knowledge, and provide accurate, helpful responses. ================================================ FILE: documentation/tutorials/rag-chatbot.mdx ================================================ --- title: 'RAG Chatbot for Website' description: 'Learn how to build a RAG chatbot for a website with Julep' icon: 'display' --- ## Overview This tutorial demonstrates how to: - Set up a web crawler using Julep's Spider integration - Process and store crawled content in a document store - Implement RAG for enhanced AI responses - Create an intelligent agent that can answer questions about crawled content ## Task Structure Let's break down the task into its core components: ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: url: type: string reducing_strength: type: integer ``` This schema specifies that our task expects: - A URL string (e.g., "https://en.wikipedia.org/wiki/Artificial_intelligence") - Number of sentences to club together to reduce the size of the chunks list (e.g., 5) ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: get_page type: api_call api_call: method: GET url: https://r.jina.ai/ headers: accept: application/json x-return-format: markdown x-with-images-summary: "true" x-with-links-summary: "true" x-retain-images: "none" x-no-cache: "true" Authorization: "Bearer JINA_API_KEY" - name: create_agent_doc type: system system: resource: agent subresource: doc operation: create ``` We're using two tools: - The `get_page` api call for web crawling - The `create_agent_doc` system tool for storing processed content ### 3. Main Workflow Steps ```yaml - tool: get_page arguments: url: $ "https://r.jina.ai/" + steps[0].input.url - evaluate: result: $ chunk_doc(_.json.data.content.strip()) - workflow: index_page arguments: content: $ _.result document: $ steps[0].output.json.data.content.strip() reducing_strength: $ steps[0].input.reducing_strength ``` The `_` variable refers to the current context object. When accessing properties like `_['url']`, it's retrieving values from the input parameters passed to the task. This step: - Takes the input URL and crawls the website - Processes content into readable markdown format - Chunks content into manageable segments - Filters out unnecessary elements like images and SVGs ```yaml [expandable] - evaluate: document: $ _.document chunks: | $ [" ".join(_.content[i:i + max(_.reducing_strength, len(_.content) // 9)]) for i in range(0, len(_.content), max(_.reducing_strength, len(_.content) // 9))] label: docs # Step 1: Create a new document and add it to the agent docs store - over: $ [(steps[0].input.document, chunk.strip()) for chunk in _.chunks] parallelism: 3 map: prompt: - role: user content: >- $ f''' {_[0]} Here is the chunk we want to situate within the whole document {_[1]} Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else. ''' unwrap: true settings: max_tokens: 16000 - evaluate: final_chunks: | $ [ NEWLINE.join([succint, chunk.strip()]) for chunk, succint in zip(steps['docs'].output.chunks, _) ] ``` This step: - Processes each content chunk in parallel - Generates contextual metadata for improved retrieval - Prepares content for storage ```yaml - over: $ _['final_chunks'] parallelism: 3 map: tool: create_agent_doc arguments: agent_id: $ agent.id data: metadata: source: jina_crawler title: Website Document content: $ _ ``` This step: - Stores processed content in the document store - Adds metadata for source tracking - Creates searchable documents for RAG ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Julep Jina Crawler Task description: A Julep agent that can crawl a website and store the content in the document store. ######################################################## ################### INPUT SCHEMA ####################### ######################################################## input_schema: type: object properties: url: type: string reducing_strength: type: integer ######################################################## ################### TOOLS ############################## ######################################################## tools: - name: get_page type: api_call api_call: method: GET url: https://r.jina.ai/ headers: accept: application/json x-return-format: markdown x-with-images-summary: "true" x-with-links-summary: "true" x-retain-images: "none" x-no-cache: "true" Authorization: "Bearer JINA_API_KEY" - name : create_agent_doc description: Create an agent doc type: system system: resource: agent subresource: doc operation: create ######################################################## ################### INDEX PAGE SUBWORKFLOW ############## ######################################################## index_page: # Step #0 - Evaluate the content - evaluate: document: $ _.document chunks: | $ [" ".join(_.content[i:i + max(_.reducing_strength, len(_.content) // 9)]) for i in range(0, len(_.content), max(_.reducing_strength, len(_.content) // 9))] label: docs # Step #1 - Process each content chunk in parallel - over: "$ [(steps[0].input.content, chunk) for chunk in _['chunks']]" parallelism: 3 map: prompt: - role: user content: >- $ f''' {_[0]} Here is the chunk we want to situate within the whole document {_[1]} Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.''' unwrap: true settings: max_tokens: 16000 # Step #2 - Create a new document and add it to the agent docs store - evaluate: final_chunks: | $ [ NEWLINE.join([chunk, succint]) for chunk, succint in zip(steps[1].input.chunks, _) ] # Step #3 - Create a new document and add it to the agent docs store - over: $ _['final_chunks'] parallelism: 3 map: tool: create_agent_doc arguments: agent_id: "$ str(agent.id)" # <--- This is the agent id of the agent you want to add the document to data: metadata: source: "jina_crawler" title: "Website Document" content: $ _ ######################################################## ################### MAIN WORKFLOW ###################### ######################################################## main: # Step 0: Get the content of the product page - tool: get_page arguments: url: $ "https://r.jina.ai/" + steps[0].input.url # Step 1: Chunk the content - evaluate: result: $ chunk_doc(_.json.data.content.strip()) # Step 2: Evaluate step to document chunks - workflow: index_page arguments: content: $ _.result document: $ steps[0].output.json.data.content.strip() reducing_strength: $ steps[0].input.reducing_strength ``` ## Usage Start by creating an execution for the task. This execution will make the agent crawl the website and store the content in the document store. ```python Python [expandable] from julep import Client import time import yaml # Initialize the client client = Client(api_key=JULEP_API_KEY) # Create the agent agent = client.agents.create( name="Julep Jina Crawler Agent", about="A Julep agent that can crawl a website and store the content in the document store.", ) # Load the task definition with open('crawling_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=agent.id, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={"url": "https://en.wikipedia.org/wiki/Artificial_intelligence, "reducing_strength": 5} ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(1) if result.status == "succeeded": print(result.output) else: print(f"Error: {result.error}") ``` ```js Node.js [expandable] import { Julep } from '@julep/sdk'; import fs from 'fs'; import yaml from 'yaml'; // Initialize the client const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Julep Crawler Agent", about: "A Julep agent that can crawl a website and store the content in the document store.", }); // Load the task definition const taskDefinition = yaml.parse(fs.readFileSync('crawling_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { "url": "https://en.wikipedia.org/wiki/Artificial_intelligence", "reducing_strength": 5 } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 1000)); } // Print the result if (result.status === 'succeeded') { console.log(result.output); } else { console.error(`Error: ${result.error}`); } ``` Next, create a session for the agent. This session will be used to chat with the agent. ```python Python session = client.sessions.create( agent_id=AGENT_ID ) ``` ```js Node.js const session = await client.sessions.create({ agentId: 'YOUR_AGENT_ID' }); ``` Finally, chat with the agent. ```python Python response = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": "tell me about artificial intelligence" } ] ) print(response) ``` ```js Node.js const response = await client.sessions.chat({ sessionId: 'YOUR_SESSION_ID', messages: [{ role: 'user', content: 'tell me about artificial intelligence' }] }); ``` ## Example Output This is an example output when the agent is asked "What is Julep?" Julep is a comprehensive platform designed for creating production-ready AI systems and agents. Here are the key aspects of Julep: Core Features: 1. Complete Infrastructure Layer - Provides infrastructure between LLMs and software - Built-in support for long-term memory - Multi-step process management - State management capabilities 2. AI Agent Development - Creates persistent AI agents that remember past interactions - Supports complex task execution - Enables multi-step workflows - Includes built-in tools and integrations 3. Production-Ready Features - Automatic retries for failed steps - Message resending capabilities - Task recovery systems - Real-time monitoring - Error handling - Automatic scaling and load balancing 4. Development Approach - Uses 8-Factor Agent methodology - Treats prompts as code with proper versioning - Provides clear tool interfaces - Offers model independence to avoid vendor lock-in - Includes structured reasoning capabilities - Maintains ground truth examples for validation Available Resources: - Documentation: https://docs.julep.ai/ - API Playground: https://dev.julep.ai/api/docs - Python SDK: https://github.com/julep-ai/python-sdk/blob/main/README.md - JavaScript SDK: https://github.com/julep-ai/node-sdk/blob/main/README.md - Various use case examples and cookbooks You can explore different use cases through their cookbooks, including: - User Profiling - Email Assistant - Trip Planner - Document Management - Website Crawler - Multi-step Tasks - Advanced Chat Interactions For additional support or to learn more: - Discord Community: https://discord.gg/2EUJzJU2Yt - Book a Demo: https://calendly.com/ishita-julep - Dev Support: hey@julep.ai ## Next Steps - Try this task yourself, check out the full example, see the [RAG Chatbot cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/08-rag-chatbot.ipynb). - To learn more about the integrations used in this task, check out the [integrations](/integrations/supported-integrations) page. ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Tools](/concepts/tools) ================================================ FILE: documentation/tutorials/trip-planning-input.mdx ================================================ --- title: 'Trip Planning - Input' description: 'Define the input schema for the trip planning task' icon: 'display' --- ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: locations: type: array items: type: string ``` This schema specifies that our task expects an array of location strings (e.g., `["New York", "London", "Paris"]`). ## Next Step - [Tools Configuration](./trip-planning-tools) ## Related Concepts - [Tasks](/concepts/tasks) ================================================ FILE: documentation/tutorials/trip-planning-running.mdx ================================================ --- title: 'Trip Planning - Running' description: 'Execute the task and review the example output' icon: 'display' --- ## Usage Here's how to use this task with the Julep SDK: ```python Python from julep import Client import time import yaml # Initialize the client client = Client(api_key=JULEP_API_KEY) # Create the agent agent = client.agents.create( name="Julep Trip Planning Agent", about="A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions.", ) # Load the task definition with open('trip_planning_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=AGENT_ID, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={ "locations": ["New York", "London", "Paris", "Tokyo", "Sydney"] } ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(1) # Print the result if result.status == "succeeded": print(result.output) else: print(f"Error: {result.error}") ``` ```js Node.js import { Julep } from '@julep/sdk'; import fs from 'fs'; import yaml from 'yaml'; // Initialize the client const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Julep Trip Planning Agent", about: "A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions.", }); // Load the task definition const taskDefinition = yaml.parse(fs.readFileSync('trip_planning_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { "locations": ["New York", "London", "Paris", "Tokyo", "Sydney"] } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 1000)); } // Print the result if (result.status === 'succeeded') { console.log(result.output); } else { console.error(`Error: ${result.error}`); } ``` ## Example Output An example output when running this task with an input of `["New York", "London", "Paris", "Tokyo", "Sydney"]`: Here's a detailed itinerary for visiting top tourist attractions in New York, considering the current weather conditions. ### Day 1: Iconic Landmarks and Observation Decks - **Morning:** - **Top of the Rock Observation Deck:** Start your day with a visit to the Top of the Rock Observation Deck at Rockefeller Plaza. The panoramic 360-degree views from the 70th floor are a must-see. Dress warmly as it feels like 5.2°C outside, and it’s quite windy. - **Link for more info:** [Tripadvisor - Top of the Rock](https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html) - **Afternoon:** - **St. Patrick’s Cathedral:** Just a short walk from Rockefeller Plaza, explore the stunning architecture of St. Patrick’s Cathedral. The overcast skies will provide a dramatic backdrop for photos. - **Fifth Avenue:** Enjoy a leisurely stroll along Fifth Avenue, visiting iconic stores and landmarks. - **Evening:** - **Times Square:** Experience the vibrant lights and energy of Times Square. The overcast clouds might enhance the brightness of the neon lights. ### Day 2: Culture and History - **Morning:** - **The Museum of Modern Art (MoMA):** Spend your morning exploring MoMA’s vast collection of modern and contemporary art. This indoor activity is perfect for a cloudy day. - **Afternoon:** - **Central Park:** Head to Central Park for a refreshing walk. With 100% cloud cover, it's a great day to explore the park without the harsh sun. Consider visiting the Central Park Zoo or taking a guided tour. - **Evening:** - **Broadway Show:** End your day with a Broadway show. It’s an ideal indoor activity to avoid the chilly weather outside. Book tickets in advance for popular shows. ### Day 3: Historical and Educational - **Morning:** - **Statue of Liberty and Ellis Island:** Take a ferry to visit these iconic sites. Dress warmly for the ferry ride. The cloud cover will provide a unique perspective for photos. - **Afternoon:** - **9/11 Memorial and Museum:** Spend your afternoon reflecting at the 9/11 Memorial and exploring the museum exhibits. - **Evening:** - **Brooklyn Bridge:** Walk across the Brooklyn Bridge and enjoy the city skyline. With the wind speed at 5.81 m/s, be prepared for breezy conditions. ### Additional Tips: - **Clothing:** Wear layers to keep warm, as the temperature feels colder than it actually is. - **Dining:** New York offers a plethora of dining options. Consider trying some local favorites like a classic New York bagel or pizza. - **Transportation:** Utilize the subway for efficient travel across the city. Taxis and ride-sharing services are also readily available. For more details on attractions and guided tours, you can visit [USA Guided Tours](https://usaguidedtours.com/nyc/attraction/) and [I Love NY](https://www.iloveny.com/places-to-go/new-york-city/attractions/). Enjoy your trip to New York City! --------------- **Day 1: Exploring Iconic London Landmarks** **Morning:** 1. **Buckingham Palace** - Start your day early with a visit to Buckingham Palace. Arrive by 9:30 AM to catch the Changing of the Guard ceremony, which typically starts at 11:00 AM. Enjoy the majestic architecture and the surrounding gardens. - Weather Tip: With the overcast clouds, it might feel chilly, so dress warmly and bring an umbrella just in case. **Midday:** 2. **Westminster Abbey** - Head towards Westminster Abbey, a short walk from Buckingham Palace. This historic church has been the site of many significant events, including royal weddings and coronations. Spend about 1.5 hours exploring. 3. **Lunch at Borough Market** - Take a tube or walk to Borough Market for a variety of food options. It's a great place to warm up with some hot street food and explore the diverse culinary offerings. **Afternoon:** 4. **London Eye** - After lunch, head to the London Eye. The overcast sky might not offer the clearest views, but the experience is still worthwhile. Pre-book your tickets to avoid long lines and enjoy a 30-minute ride on this iconic Ferris wheel. **Evening:** 5. **The Globe Theatre** - As the day winds down, visit Shakespeare's Globe Theatre. If there's a performance, consider attending or simply take a guided tour to learn about the history of this famous theater. **Day 2: Museums and Cultural Exploration** **Morning:** 1. **The British Museum** - Start your second day at the British Museum. Spend a few hours exploring the vast collection of art and antiquities. Highlights include the Rosetta Stone and the Elgin Marbles. **Midday:** 2. **Lunch near Covent Garden** - Head to Covent Garden for lunch. This area is bustling with restaurants and cafes, perfect for a cozy indoor meal. **Afternoon:** 3. **The Tower of London** - After lunch, make your way to the Tower of London. Delve into England's rich history and see the Crown Jewels. Allocate about 2-3 hours for this visit. **Evening:** 4. **Tower Bridge** - Conclude your day with a walk across Tower Bridge. The views of the Thames River and the cityscape are beautiful, even on a cloudy evening. **Day 3: Leisure and Local Experiences** **Morning:** 1. **Natural History Museum** - Begin your last day at the Natural History Museum. It's a family-friendly museum with fascinating exhibits, including dinosaur skeletons and a model of a blue whale. **Midday:** 2. **Lunch at South Kensington** - Enjoy a relaxed lunch in South Kensington. There are plenty of options, from casual cafes to high-end dining. **Afternoon:** 3. **Hyde Park** - Spend your afternoon strolling through Hyde Park. Visit the Serpentine Galleries if you're interested in contemporary art. The park's natural beauty is a peaceful retreat amidst the city hustle. **Evening:** 4. **Dinner and a Show in the West End** - End your London adventure with a memorable dinner followed by a theater show in the West End. Book your tickets in advance for popular shows. **Additional Tips:** - Always check the attraction websites for any specific COVID-19 guidelines or changes in operating hours. - London’s public transport system is efficient; consider getting an Oyster card for convenient travel. - Don't forget to dress in layers to adapt to the chilly weather, and always have your camera ready to capture memories. --------------- Here’s a detailed itinerary for your visit to Paris, considering the current snowy weather conditions and top attractions: ### Day 1: Embrace the Iconic Landmarks **Morning: Eiffel Tower** - **Time:** 9:00 AM - **Details:** Begin your day with a visit to the Eiffel Tower. Even in the snow, the tower offers stunning views of Paris. Dress warmly and enjoy hot chocolate from nearby cafes. - **Link for more info:** [Tripadvisor - Things to Do in Paris](https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html) **Afternoon: Louvre Museum** - **Time:** 1:00 PM - **Details:** Spend your afternoon indoors at the Louvre Museum. With its vast collection of art and history, it's a perfect way to escape the cold. Consider taking a guided tour to make the most of your visit. - **Link for more info:** [U.S. News Travel - Things To Do](https://travel.usnews.com/Paris_France/Things_To_Do/) **Evening: Seine River Cruise** - **Time:** 6:00 PM - **Details:** End your day with a magical Seine River cruise. The snow adds a picturesque touch to the illuminated landmarks. Ensure to book a heated cruise for comfort. ### Day 2: Explore Cultural and Historical Treasures **Morning: Notre-Dame Cathedral** - **Time:** 9:30 AM - **Details:** Visit the iconic Notre-Dame Cathedral. Although some areas may be under restoration, its architecture and history are worth experiencing. Warm clothing is essential as the interior can be chilly. **Afternoon: Musée d'Orsay** - **Time:** 1:30 PM - **Details:** Head to the Musée d'Orsay, renowned for its Impressionist masterpieces. This indoor activity is ideal for escaping the cold and enjoying world-class art. **Evening: Montmartre and Sacré-Cœur** - **Time:** 5:00 PM - **Details:** Wander through the charming streets of Montmartre and visit the Sacré-Cœur Basilica. The view of Paris in the snow is breathtaking. Enjoy a cozy dinner at a local bistro in Montmartre. ### Day 3: Discover Hidden Gems and Local Flavors **Morning: Le Marais District** - **Time:** 10:00 AM - **Details:** Explore Le Marais, known for its vibrant street art, boutiques, and cafes. Enjoy a leisurely breakfast and shop for unique souvenirs. **Afternoon: Palais Garnier (Opera House)** - **Time:** 2:00 PM - **Details:** Tour the opulent Palais Garnier. Its stunning interiors are a must-see, especially when it's snowy outside. **Evening: Moulin Rouge Show** - **Time:** 8:00 PM - **Details:** Conclude your trip with a classic Parisian experience at the Moulin Rouge. Book in advance to secure a good seat and enjoy the legendary cabaret performance. ### Additional Tips: - **Weather Preparation:** Wear layers, waterproof boots, and carry an umbrella. The snow and cold wind can be intense. - **Dining:** Indulge in warm, hearty French cuisine at local cafes and restaurants. Try dishes like French onion soup, coq au vin, and tarte Tatin. - **Transport:** Use public transportation to avoid the snowy streets, and consider purchasing a Paris Visite pass for unlimited travel. Enjoy your snowy adventure in Paris! --------------- **Tokyo Itinerary** **Day 1: Arrival and Exploration of Historical and Cultural Sites** - **Morning:** - **Asakusa District**: Begin your day with a visit to the historic Asakusa district. Explore the iconic Senso-ji Temple, Tokyo's oldest temple. Enjoy the traditional market streets like Nakamise Street for some shopping and snacks. - **Afternoon:** - **Tokyo National Museum**: Head to Ueno Park and visit the Tokyo National Museum. Discover Japan’s extensive collection of art and antiquities. This is a great spot to dive into Japanese history and culture. - **Evening:** - **Dinner in Ueno**: Explore the local dining options around Ueno and enjoy a traditional Japanese dinner. **Day 2: Modern Tokyo and Unique Experiences** - **Morning:** - **Ghibli Museum**: Start your day with a magical visit to the Ghibli Museum in Mitaka. Perfect for fans of Studio Ghibli's animated films, this museum offers a whimsical look into the creative world of Hayao Miyazaki. - **Afternoon:** - **Shibuya and Harajuku**: Head towards the bustling areas of Shibuya and Harajuku. Witness the famous Shibuya Crossing and explore the trendy shops of Harajuku, especially Takeshita Street. - **Evening:** - **Golden Gai**: Conclude your day in the vibrant Golden Gai district. This area is renowned for its narrow alleys filled with small bars and eateries. Experience the unique nightlife of Tokyo here. **Day 3: Relax and Explore Green Spaces** - **Morning:** - **Shinjuku Gyoen National Garden**: Spend a peaceful morning strolling through the beautiful Shinjuku Gyoen, one of Tokyo's largest and most beautiful parks. It's a perfect spot for relaxation and enjoying nature. - **Afternoon:** - **Meiji Shrine**: Visit the Meiji Shrine, located in a forested area near Harajuku and Shibuya. It's a serene place to learn about Shinto traditions and enjoy the tranquil setting. - **Evening:** - **Tokyo Tower or Skytree**: End your trip with a visit to either Tokyo Tower or Tokyo Skytree for a panoramic view of the city. It's an unforgettable way to see Tokyo illuminated at night. **Weather Considerations:** - With the current weather of few clouds and a mild temperature around 10.32°C, it is advisable to wear layers and carry a light jacket for comfort during outdoor activities. - Humidity is high (92%), so be prepared for a slightly damp feeling and consider moisture-wicking clothing. **Additional Tips:** - Always check the opening hours of attractions and book tickets in advance where necessary. - Use Tokyo’s efficient public transport to move around easily. - Consider visiting the websites linked in the attraction descriptions for more detailed information and current updates. --------------- Here's a detailed itinerary for exploring some of Sydney's top tourist attractions with the current weather conditions in mind. With clear skies and pleasant temperatures, it's a perfect day to explore the outdoors and enjoy what Sydney has to offer. ### Morning **9:00 AM - Sydney Opera House** - Begin your day with a visit to the iconic Sydney Opera House. Take a guided tour to learn about its history and architecture. Tours are available in multiple languages. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **11:00 AM - Royal Botanic Garden Sydney** - Just a short walk from the Opera House, enjoy a leisurely stroll through the Royal Botanic Garden. The clear skies will offer beautiful views of the diverse plant life and the Sydney Harbour. ### Afternoon **12:30 PM - Lunch at Opera Bar** - Head back to Opera Bar for lunch. Enjoy a refreshing cocktail with stunning views of the Sydney Harbour Bridge and the waterfront. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **2:00 PM - Sydney Harbour Bridge** - After lunch, take a scenic walk across the Sydney Harbour Bridge. If you're up for it, consider the BridgeClimb for breathtaking panoramic views of the city. **4:00 PM - The Rocks** - Explore The Rocks, one of Sydney's most historic areas. Wander through the cobbled streets, visit the local markets, and perhaps enjoy a cup of coffee at a nearby café. ### Evening **6:00 PM - Darling Harbour** - Make your way to Darling Harbour for the evening. Here you can visit attractions such as the SEA LIFE Sydney Aquarium or simply enjoy the lively atmosphere by the waterfront. **8:00 PM - Dinner at a Local Restaurant** - Conclude your day with dinner at one of Darling Harbour's many restaurants. Choose from a variety of cuisines while enjoying the vibrant night scene. ### Additional Suggestions - If you're interested in more unique experiences, consider visiting some of the attractions listed on [Time Out Sydney](https://www.timeout.com/sydney/attractions/tourist-attractions-that-dont-suck), which includes thrilling adventures and scenic tours. With clear skies and mild temperatures, this itinerary offers a balanced mix of cultural, historical, and scenic experiences. Enjoy your visit to Sydney! ## Next Steps - Try this task yourself, check out the full example, see the [trip-planning cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/03-trip-planning-assistant.ipynb). - To learn more about the integrations used in this task, check out the [integrations](/integrations/supported-integrations) page. ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Executions](/concepts/execution) ================================================ FILE: documentation/tutorials/trip-planning-tools.mdx ================================================ --- title: 'Trip Planning - Tools' description: 'Configure tools for fetching weather and attraction data' icon: 'display' --- ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: weather type: integration integration: provider: weather setup: openweathermap_api_key: YOUR_OPENWEATHERMAP_API_KEY - name: internet_search type: integration integration: provider: brave setup: brave_api_key: "YOUR_BRAVE_API_KEY" ``` We're using two integrations: - The `weather` integration to fetch current weather conditions - The `brave` search integration to find tourist attractions ## Next Step - [Workflow Steps](./trip-planning-workflow) ## Related Concepts - [Tools](/concepts/tools) ================================================ FILE: documentation/tutorials/trip-planning-workflow.mdx ================================================ --- title: 'Trip Planning - Workflow' description: 'Learn the step-by-step workflow for generating itineraries' icon: 'display' --- ### 3. Main Workflow Steps ```yaml - over: $ steps[0].input.locations map: tool: weather arguments: location: $ _ ``` When used inside a `map` or a `foreach` step, the `_` variable is a reference to the current value in the iteration. For example: ```yaml - over: $ ["Paris", "London"] map: tool: weather arguments: location: $ _ # _ will be "Paris", then "London" ``` This step: - Iterates over each location in the input array - Calls the weather API for each location ```yaml - over: $ steps[0].input.locations map: tool: internet_search arguments: query: $ 'tourist attractions in ' + _ ``` This step: - Iterates over the locations again - Searches for tourist attractions in each location - Constructs a search query by concatenating "tourist attractions in " with the location ```yaml - evaluate: zipped: |- $ list( zip( steps[0].input.locations, [output['result'] for output in steps[0].output], steps[1].output ) ) ``` This step: - Combines the data from previous steps into tuples - Each tuple contains: (location, weather_data, attractions_data) - Uses Python's `zip` function to align the data ```yaml - over: $ _['zipped'] parallelism: 3 # Inside the map step, each `_` represents the current element in the list # which is a tuple of (location, weather, attractions) map: prompt: - role: system content: >- $ f'''You are {agent.name}. Your task is to create a detailed itinerary for visiting tourist attractions in some locations. The user will give you the following information for each location: - The location - The current weather condition - The top tourist attractions''' - role: user content: >- $ f'''Location: "{_[0]}" Weather: "{_[1]}" Attractions: "{_[2]}"''' unwrap: true ``` This step: - Processes up to 3 locations in parallel - For each location tuple: - Sends a prompt to the AI model - Includes location, weather, and attraction data - Generates a personalized itinerary ```yaml - evaluate: final_plan: |- $ '\\n---------------\\n'.join(activity for activity in _) ``` This step: - Combines all itineraries into a single output - Separates each itinerary with a divider ```yaml YAML # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Julep Trip Planning Task description: A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions. ######################################################## ################### INPUT SCHEMA ####################### ######################################################## input_schema: type: object properties: locations: type: array items: type: string description: The locations to search for. ######################################################## ################### TOOLS ############################## ######################################################## tools: - name: wikipedia type: integration integration: provider: wikipedia - name: weather type: integration integration: provider: weather setup: openweathermap_api_key: "YOUR_OPENWEATHERMAP_API_KEY" - name: internet_search type: integration integration: provider: brave setup: brave_api_key: "YOUR_BRAVE_API_KEY" ######################################################## ################### MAIN WORKFLOW ###################### ######################################################## main: - over: $ steps[0].input.locations map: tool: weather arguments: location: $ _ - over: $ steps[0].input.locations map: tool: internet_search arguments: query: $ 'tourist attractions in ' + _ # Zip locations, weather, and attractions into a list of tuples [(location, weather, attractions)] - evaluate: zipped: |- $ list( zip( steps[0].input.locations, [output['result'] for output in steps[0].output], steps[1].output ) ) - over: $ _['zipped'] parallelism: 3 # Inside the map step, each `_` represents the current element in the list # which is a tuple of (location, weather, attractions) map: prompt: - role: system content: >- $ f'''You are {agent.name}. Your task is to create a detailed itinerary for visiting tourist attractions in some locations. The user will give you the following information for each location: - The location - The current weather condition - The top tourist attractions''' - role: user content: >- $ f'''Location: "{_[0]}" Weather: "{_[1]}" Attractions: "{_[2]}"''' unwrap: true - evaluate: final_plan: |- $ '\\n---------------\\n'.join(activity for activity in _) ``` ## Next Step - [Running the Task](./trip-planning-running) ## Related Concepts - [Tasks](/concepts/tasks) - [Types of Task Steps](/advanced/types-of-task-steps) ================================================ FILE: documentation/tutorials/trip-planning.mdx ================================================ --- title: 'Trip Planning' description: 'Learn how to create a task that generates personalized travel itineraries based on weather conditions and tourist attractions for multiple locations' icon: 'display' --- ## Overview The Trip Planning tutorial shows how to: - Execute workflow steps in parallel - Integrate with external APIs - Combine data from multiple sources - Generate personalized itineraries using AI Follow each step of the tutorial: Let's break down the task into its core components: ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: locations: type: array items: type: string ``` This schema specifies that our task expects an array of location strings (e.g., `["New York", "London", "Paris"]`). ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: weather type: integration integration: provider: weather setup: openweathermap_api_key: YOUR_OPENWEATHERMAP_API_KEY - name: internet_search type: integration integration: provider: brave setup: brave_api_key: YOUR_BRAVE_API_KEY ``` We're using two integrations: - The `weather` integration to fetch current weather conditions - The `brave` search integration to find tourist attractions ### 3. Main Workflow Steps ```yaml - over: $ steps[0].input.locations map: tool: weather arguments: location: $ _ ``` When used inside a `map` or a `foreach` step, the `_` variable is a reference to the current value in the iteration. For example: ```yaml - over: $ ["Paris", "London"] map: tool: weather arguments: location: $ _ # _ will be "Paris", then "London" ``` This step: - Iterates over each location in the input array - Calls the weather API for each location ```yaml - over: $ steps[0].input.locations map: tool: internet_search arguments: query: $ 'tourist attractions in ' + _ ``` This step: - Iterates over the locations again - Searches for tourist attractions in each location - Constructs a search query by concatenating "tourist attractions in " with the location ```yaml - evaluate: zipped: |- $ list( zip( steps[0].input.locations, [output['result'] for output in steps[0].output], steps[1].output ) ) ``` This step: - Combines the data from previous steps into tuples - Each tuple contains: (location, weather_data, attractions_data) - Uses Python's `zip` function to align the data ```yaml [expandable] - over: $ _['zipped'] parallelism: 3 # Inside the map step, each `_` represents the current element in the list # which is a tuple of (location, weather, attractions) map: prompt: - role: system content: >- $ f'''You are {agent.name}. Your task is to create a detailed itinerary for visiting tourist attractions in some locations. The user will give you the following information for each location: - The location - The current weather condition - The top tourist attractions''' - role: user content: >- $ f'''Location: "{_[0]}" Weather: "{_[1]}" Attractions: "{_[2]}"''' unwrap: true ``` This step: - Processes up to 3 locations in parallel - For each location tuple: - Sends a prompt to the AI model - Includes location, weather, and attraction data - Generates a personalized itinerary ```yaml - evaluate: final_plan: |- $ '\\n---------------\\n'.join(activity for activity in _) ``` This step: - Combines all itineraries into a single output - Separates each itinerary with a divider ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Julep Trip Planning Task description: A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions. ######################################################## ################### INPUT SCHEMA ####################### ######################################################## input_schema: type: object properties: locations: type: array items: type: string description: The locations to search for. ######################################################## ################### TOOLS ############################## ######################################################## tools: - name: wikipedia type: integration integration: provider: wikipedia - name: weather type: integration integration: provider: weather setup: openweathermap_api_key: "YOUR_OPENWEATHERMAP_API_KEY" - name: internet_search type: integration integration: provider: brave setup: brave_api_key: "YOUR_BRAVE_API_KEY" ######################################################## ################### MAIN WORKFLOW ###################### ######################################################## main: - over: $ steps[0].input.locations map: tool: weather arguments: location: $ _ - over: $ steps[0].input.locations map: tool: internet_search arguments: query: $ 'tourist attractions in ' + _ # Zip locations, weather, and attractions into a list of tuples [(location, weather, attractions)] - evaluate: zipped: |- $ list( zip( steps[0].input.locations, [output['result'] for output in steps[0].output], steps[1].output ) ) - over: $ _['zipped'] parallelism: 3 # Inside the map step, each `_` represents the current element in the list # which is a tuple of (location, weather, attractions) map: prompt: - role: system content: >- $ f'''You are {agent.name}. Your task is to create a detailed itinerary for visiting tourist attractions in some locations. The user will give you the following information for each location: - The location - The current weather condition - The top tourist attractions''' - role: user content: >- $ f'''Location: "{_[0]}" Weather: "{_[1]}" Attractions: "{_[2]}"''' unwrap: true - evaluate: final_plan: |- $ '\\n---------------\\n'.join(activity for activity in _) ``` ## Usage Here's how to use this task with the Julep SDK: ```python Python [expandable] from julep import Client import time import yaml # Initialize the client client = Client(api_key=JULEP_API_KEY) # Create the agent agent = client.agents.create( name="Julep Trip Planning Agent", about="A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions.", ) # Load the task definition with open('trip_planning_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=AGENT_ID, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={ "locations": ["New York", "London", "Paris", "Tokyo", "Sydney"] } ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(1) # Print the result if result.status == "succeeded": print(result.output) else: print(f"Error: {result.error}") ``` ```js Node.js [expandable] import { Julep } from '@julep/sdk'; import fs from 'fs'; import yaml from 'yaml'; // Initialize the client const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Julep Trip Planning Agent", about: "A Julep agent that can generate a detailed itinerary for visiting tourist attractions in some locations, considering the current weather conditions.", }); // Load the task definition const taskDefinition = yaml.parse(fs.readFileSync('trip_planning_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { "locations": ["New York", "London", "Paris", "Tokyo", "Sydney"] } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 1000)); } // Print the result if (result.status === 'succeeded') { console.log(result.output); } else { console.error(`Error: ${result.error}`); } ``` ## Example Output An example output when running this task with an input of `["New York", "London", "Paris", "Tokyo", "Sydney"]`: Here's a detailed itinerary for visiting top tourist attractions in New York, considering the current weather conditions. ### Day 1: Iconic Landmarks and Observation Decks - **Morning:** - **Top of the Rock Observation Deck:** Start your day with a visit to the Top of the Rock Observation Deck at Rockefeller Plaza. The panoramic 360-degree views from the 70th floor are a must-see. Dress warmly as it feels like 5.2°C outside, and it’s quite windy. - **Link for more info:** [Tripadvisor - Top of the Rock](https://www.tripadvisor.com/Attractions-g60763-Activities-New_York_City_New_York.html) - **Afternoon:** - **St. Patrick’s Cathedral:** Just a short walk from Rockefeller Plaza, explore the stunning architecture of St. Patrick’s Cathedral. The overcast skies will provide a dramatic backdrop for photos. - **Fifth Avenue:** Enjoy a leisurely stroll along Fifth Avenue, visiting iconic stores and landmarks. - **Evening:** - **Times Square:** Experience the vibrant lights and energy of Times Square. The overcast clouds might enhance the brightness of the neon lights. ### Day 2: Culture and History - **Morning:** - **The Museum of Modern Art (MoMA):** Spend your morning exploring MoMA’s vast collection of modern and contemporary art. This indoor activity is perfect for a cloudy day. - **Afternoon:** - **Central Park:** Head to Central Park for a refreshing walk. With 100% cloud cover, it's a great day to explore the park without the harsh sun. Consider visiting the Central Park Zoo or taking a guided tour. - **Evening:** - **Broadway Show:** End your day with a Broadway show. It’s an ideal indoor activity to avoid the chilly weather outside. Book tickets in advance for popular shows. ### Day 3: Historical and Educational - **Morning:** - **Statue of Liberty and Ellis Island:** Take a ferry to visit these iconic sites. Dress warmly for the ferry ride. The cloud cover will provide a unique perspective for photos. - **Afternoon:** - **9/11 Memorial and Museum:** Spend your afternoon reflecting at the 9/11 Memorial and exploring the museum exhibits. - **Evening:** - **Brooklyn Bridge:** Walk across the Brooklyn Bridge and enjoy the city skyline. With the wind speed at 5.81 m/s, be prepared for breezy conditions. ### Additional Tips: - **Clothing:** Wear layers to keep warm, as the temperature feels colder than it actually is. - **Dining:** New York offers a plethora of dining options. Consider trying some local favorites like a classic New York bagel or pizza. - **Transportation:** Utilize the subway for efficient travel across the city. Taxis and ride-sharing services are also readily available. For more details on attractions and guided tours, you can visit [USA Guided Tours](https://usaguidedtours.com/nyc/attraction/) and [I Love NY](https://www.iloveny.com/places-to-go/new-york-city/attractions/). Enjoy your trip to New York City! --------------- **Day 1: Exploring Iconic London Landmarks** **Morning:** 1. **Buckingham Palace** - Start your day early with a visit to Buckingham Palace. Arrive by 9:30 AM to catch the Changing of the Guard ceremony, which typically starts at 11:00 AM. Enjoy the majestic architecture and the surrounding gardens. - Weather Tip: With the overcast clouds, it might feel chilly, so dress warmly and bring an umbrella just in case. **Midday:** 2. **Westminster Abbey** - Head towards Westminster Abbey, a short walk from Buckingham Palace. This historic church has been the site of many significant events, including royal weddings and coronations. Spend about 1.5 hours exploring. 3. **Lunch at Borough Market** - Take a tube or walk to Borough Market for a variety of food options. It's a great place to warm up with some hot street food and explore the diverse culinary offerings. **Afternoon:** 4. **London Eye** - After lunch, head to the London Eye. The overcast sky might not offer the clearest views, but the experience is still worthwhile. Pre-book your tickets to avoid long lines and enjoy a 30-minute ride on this iconic Ferris wheel. **Evening:** 5. **The Globe Theatre** - As the day winds down, visit Shakespeare's Globe Theatre. If there's a performance, consider attending or simply take a guided tour to learn about the history of this famous theater. **Day 2: Museums and Cultural Exploration** **Morning:** 1. **The British Museum** - Start your second day at the British Museum. Spend a few hours exploring the vast collection of art and antiquities. Highlights include the Rosetta Stone and the Elgin Marbles. **Midday:** 2. **Lunch near Covent Garden** - Head to Covent Garden for lunch. This area is bustling with restaurants and cafes, perfect for a cozy indoor meal. **Afternoon:** 3. **The Tower of London** - After lunch, make your way to the Tower of London. Delve into England's rich history and see the Crown Jewels. Allocate about 2-3 hours for this visit. **Evening:** 4. **Tower Bridge** - Conclude your day with a walk across Tower Bridge. The views of the Thames River and the cityscape are beautiful, even on a cloudy evening. **Day 3: Leisure and Local Experiences** **Morning:** 1. **Natural History Museum** - Begin your last day at the Natural History Museum. It's a family-friendly museum with fascinating exhibits, including dinosaur skeletons and a model of a blue whale. **Midday:** 2. **Lunch at South Kensington** - Enjoy a relaxed lunch in South Kensington. There are plenty of options, from casual cafes to high-end dining. **Afternoon:** 3. **Hyde Park** - Spend your afternoon strolling through Hyde Park. Visit the Serpentine Galleries if you're interested in contemporary art. The park's natural beauty is a peaceful retreat amidst the city hustle. **Evening:** 4. **Dinner and a Show in the West End** - End your London adventure with a memorable dinner followed by a theater show in the West End. Book your tickets in advance for popular shows. **Additional Tips:** - Always check the attraction websites for any specific COVID-19 guidelines or changes in operating hours. - London’s public transport system is efficient; consider getting an Oyster card for convenient travel. - Don't forget to dress in layers to adapt to the chilly weather, and always have your camera ready to capture memories. --------------- Here’s a detailed itinerary for your visit to Paris, considering the current snowy weather conditions and top attractions: ### Day 1: Embrace the Iconic Landmarks **Morning: Eiffel Tower** - **Time:** 9:00 AM - **Details:** Begin your day with a visit to the Eiffel Tower. Even in the snow, the tower offers stunning views of Paris. Dress warmly and enjoy hot chocolate from nearby cafes. - **Link for more info:** [Tripadvisor - Things to Do in Paris](https://www.tripadvisor.com/Attractions-g187147-Activities-Paris_Ile_de_France.html) **Afternoon: Louvre Museum** - **Time:** 1:00 PM - **Details:** Spend your afternoon indoors at the Louvre Museum. With its vast collection of art and history, it's a perfect way to escape the cold. Consider taking a guided tour to make the most of your visit. - **Link for more info:** [U.S. News Travel - Things To Do](https://travel.usnews.com/Paris_France/Things_To_Do/) **Evening: Seine River Cruise** - **Time:** 6:00 PM - **Details:** End your day with a magical Seine River cruise. The snow adds a picturesque touch to the illuminated landmarks. Ensure to book a heated cruise for comfort. ### Day 2: Explore Cultural and Historical Treasures **Morning: Notre-Dame Cathedral** - **Time:** 9:30 AM - **Details:** Visit the iconic Notre-Dame Cathedral. Although some areas may be under restoration, its architecture and history are worth experiencing. Warm clothing is essential as the interior can be chilly. **Afternoon: Musée d'Orsay** - **Time:** 1:30 PM - **Details:** Head to the Musée d'Orsay, renowned for its Impressionist masterpieces. This indoor activity is ideal for escaping the cold and enjoying world-class art. **Evening: Montmartre and Sacré-Cœur** - **Time:** 5:00 PM - **Details:** Wander through the charming streets of Montmartre and visit the Sacré-Cœur Basilica. The view of Paris in the snow is breathtaking. Enjoy a cozy dinner at a local bistro in Montmartre. ### Day 3: Discover Hidden Gems and Local Flavors **Morning: Le Marais District** - **Time:** 10:00 AM - **Details:** Explore Le Marais, known for its vibrant street art, boutiques, and cafes. Enjoy a leisurely breakfast and shop for unique souvenirs. **Afternoon: Palais Garnier (Opera House)** - **Time:** 2:00 PM - **Details:** Tour the opulent Palais Garnier. Its stunning interiors are a must-see, especially when it's snowy outside. **Evening: Moulin Rouge Show** - **Time:** 8:00 PM - **Details:** Conclude your trip with a classic Parisian experience at the Moulin Rouge. Book in advance to secure a good seat and enjoy the legendary cabaret performance. ### Additional Tips: - **Weather Preparation:** Wear layers, waterproof boots, and carry an umbrella. The snow and cold wind can be intense. - **Dining:** Indulge in warm, hearty French cuisine at local cafes and restaurants. Try dishes like French onion soup, coq au vin, and tarte Tatin. - **Transport:** Use public transportation to avoid the snowy streets, and consider purchasing a Paris Visite pass for unlimited travel. Enjoy your snowy adventure in Paris! --------------- **Tokyo Itinerary** **Day 1: Arrival and Exploration of Historical and Cultural Sites** - **Morning:** - **Asakusa District**: Begin your day with a visit to the historic Asakusa district. Explore the iconic Senso-ji Temple, Tokyo's oldest temple. Enjoy the traditional market streets like Nakamise Street for some shopping and snacks. - **Afternoon:** - **Tokyo National Museum**: Head to Ueno Park and visit the Tokyo National Museum. Discover Japan’s extensive collection of art and antiquities. This is a great spot to dive into Japanese history and culture. - **Evening:** - **Dinner in Ueno**: Explore the local dining options around Ueno and enjoy a traditional Japanese dinner. **Day 2: Modern Tokyo and Unique Experiences** - **Morning:** - **Ghibli Museum**: Start your day with a magical visit to the Ghibli Museum in Mitaka. Perfect for fans of Studio Ghibli's animated films, this museum offers a whimsical look into the creative world of Hayao Miyazaki. - **Afternoon:** - **Shibuya and Harajuku**: Head towards the bustling areas of Shibuya and Harajuku. Witness the famous Shibuya Crossing and explore the trendy shops of Harajuku, especially Takeshita Street. - **Evening:** - **Golden Gai**: Conclude your day in the vibrant Golden Gai district. This area is renowned for its narrow alleys filled with small bars and eateries. Experience the unique nightlife of Tokyo here. **Day 3: Relax and Explore Green Spaces** - **Morning:** - **Shinjuku Gyoen National Garden**: Spend a peaceful morning strolling through the beautiful Shinjuku Gyoen, one of Tokyo's largest and most beautiful parks. It's a perfect spot for relaxation and enjoying nature. - **Afternoon:** - **Meiji Shrine**: Visit the Meiji Shrine, located in a forested area near Harajuku and Shibuya. It's a serene place to learn about Shinto traditions and enjoy the tranquil setting. - **Evening:** - **Tokyo Tower or Skytree**: End your trip with a visit to either Tokyo Tower or Tokyo Skytree for a panoramic view of the city. It's an unforgettable way to see Tokyo illuminated at night. **Weather Considerations:** - With the current weather of few clouds and a mild temperature around 10.32°C, it is advisable to wear layers and carry a light jacket for comfort during outdoor activities. - Humidity is high (92%), so be prepared for a slightly damp feeling and consider moisture-wicking clothing. **Additional Tips:** - Always check the opening hours of attractions and book tickets in advance where necessary. - Use Tokyo’s efficient public transport to move around easily. - Consider visiting the websites linked in the attraction descriptions for more detailed information and current updates. --------------- Here's a detailed itinerary for exploring some of Sydney's top tourist attractions with the current weather conditions in mind. With clear skies and pleasant temperatures, it's a perfect day to explore the outdoors and enjoy what Sydney has to offer. ### Morning **9:00 AM - Sydney Opera House** - Begin your day with a visit to the iconic Sydney Opera House. Take a guided tour to learn about its history and architecture. Tours are available in multiple languages. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **11:00 AM - Royal Botanic Garden Sydney** - Just a short walk from the Opera House, enjoy a leisurely stroll through the Royal Botanic Garden. The clear skies will offer beautiful views of the diverse plant life and the Sydney Harbour. ### Afternoon **12:30 PM - Lunch at Opera Bar** - Head back to Opera Bar for lunch. Enjoy a refreshing cocktail with stunning views of the Sydney Harbour Bridge and the waterfront. - **Link:** [Top attractions in Sydney | Sydney.com](https://www.sydney.com/things-to-do/attractions) **2:00 PM - Sydney Harbour Bridge** - After lunch, take a scenic walk across the Sydney Harbour Bridge. If you're up for it, consider the BridgeClimb for breathtaking panoramic views of the city. **4:00 PM - The Rocks** - Explore The Rocks, one of Sydney's most historic areas. Wander through the cobbled streets, visit the local markets, and perhaps enjoy a cup of coffee at a nearby café. ### Evening **6:00 PM - Darling Harbour** - Make your way to Darling Harbour for the evening. Here you can visit attractions such as the SEA LIFE Sydney Aquarium or simply enjoy the lively atmosphere by the waterfront. **8:00 PM - Dinner at a Local Restaurant** - Conclude your day with dinner at one of Darling Harbour's many restaurants. Choose from a variety of cuisines while enjoying the vibrant night scene. ### Additional Suggestions - If you're interested in more unique experiences, consider visiting some of the attractions listed on [Time Out Sydney](https://www.timeout.com/sydney/attractions/tourist-attractions-that-dont-suck), which includes thrilling adventures and scenic tours. With clear skies and mild temperatures, this itinerary offers a balanced mix of cultural, historical, and scenic experiences. Enjoy your visit to Sydney! ## Next Steps - Try this task yourself, check out the full example, see the [trip-planning cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/03-trip-planning-assistant.ipynb). - To learn more about the integrations used in this task, check out the [integrations](/integrations/supported-integrations) page. **Also See:** 1. [Input Schema](./trip-planning-input) 2. [Tools Configuration](./trip-planning-tools) 3. [Workflow Steps](./trip-planning-workflow) 4. [Running the Task](./trip-planning-running) ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Tools](/concepts/tools) ================================================ FILE: documentation/tutorials/video-processing.mdx ================================================ --- title: 'Video Processing' description: 'Learn how to process and analyze videos using Julep' icon: 'display' --- ## Overview This tutorial demonstrates how to: - Upload and process videos using Cloudinary integration - Extract and analyze video content - Add overlays and transformations - Process video subtitles and speaker information ## Task Structure Let's break down the task into its core components: ### 1. Input Schema First, we define what inputs our task expects: ```yaml input_schema: type: object properties: upload_file: type: string description: The url of the file to upload public_id: type: string description: The public id of the file to upload transformation_prompt: type: string description: The prompt for the transformations to apply to the file subtitle_vtt: type: string description: The vtt file content to add subtitles to the video ``` This schema specifies that our task expects: - A video file URL - A public ID for the video - A transformation prompt describing desired changes - VTT subtitle content (optional) ### 2. Tools Configuration Next, we define the external tools our task will use: ```yaml - name: cloudinary_upload type: integration integration: provider: cloudinary method: media_upload setup: cloudinary_api_key: YOUR_CLOUDINARY_API_KEY cloudinary_api_secret: YOUR_CLOUDINARY_API_SECRET cloudinary_cloud_name: YOUR_CLOUDINARY_CLOUD_NAME - name: cloudinary_edit type: integration integration: provider: cloudinary method: media_edit - name: ffmpeg_edit type: integration integration: provider: ffmpeg ``` We're using three main integrations: - Cloudinary for video uploads and transformations - FFmpeg for additional video processing capabilities ### 3. Main Workflow Steps ```yaml - tool: cloudinary_upload arguments: file: $ steps[0].input.video_url public_id: $ steps[0].input.public_id upload_params: resource_type: video ``` The `steps[0].input` variable refers to the initial input object passed to the task. It's used to access the input parameters defined in the input schema. This step: - Takes the input video URL - Uploads it to Cloudinary - Specifies the resource type as video ```yaml - tool: cloudinary_upload arguments: file: $ steps[0].input.upload_file public_id: $ steps[0].input.public_id upload_params: resource_type: video transformation: - start_offset: 0 end_offset: 30 ``` This step: - Creates a 30-second preview of the video - Useful for quick analysis and processing ```yaml - prompt: - role: user content: - type: image_url image_url: url: trimmed_video_url - type: text text: |- Which speakers are speaking in the video? And where does each of them sit? ``` This step: - Analyzes the video content - Identifies speakers and their positions - Uses VTT subtitles for additional context ```yaml - evaluate: speakers_transformations: |- $ [ transform for speaker in _.speakers_json for transform in [ { "overlay": {"font_family": "Arial", "font_size": 32, "text": speaker.speaker}, "color": "white" }, { "duration": 5, "flags": "layer_apply", "gravity": "south_east" if speaker.position == "right" else "south_west", "start_offset": speaker.timestamps[0].start, "y": 80, "x": 80 } ] ] ``` This step: - Creates transformations for each speaker - Adds speaker labels with proper positioning - Sets timing for each overlay ```yaml - tool: cloudinary_upload arguments: file: $ steps[0].input.upload_file public_id: $ steps[0].input.public_id upload_params: resource_type: video transformation: _.speakers_transformations ``` This step: - Uses the Cloudinary upload tool to apply the generated transformations - Processes the video with speaker labels and positioning - Returns a URL to the transformed video with all overlays applied ```yaml YAML [expandable] # yaml-language-server: $schema=https://raw.githubusercontent.com/julep-ai/julep/refs/heads/dev/src/schemas/create_task_request.json name: Julep Video Processing Task description: A Julep agent that can process and analyze videos using Cloudinary ######################################################## ################### INPUT SCHEMA ####################### ######################################################## input_schema: type: object properties: video_url: type: string description: The url of the file to upload public_id: type: string description: The public id of the file to upload transformation_prompt: type: string description: The prompt for the transformations to apply to the file ######################################################## ################### TOOLS ############################## ######################################################## tools: - name: cloudinary_upload type: integration integration: provider: cloudinary method: media_upload setup: cloudinary_api_key: "YOUR_CLOUDINARY_API_KEY" cloudinary_api_secret: "YOUR_CLOUDINARY_API_SECRET" cloudinary_cloud_name: "YOUR_CLOUDINARY_CLOUD_NAME" ######################################################## ################### MAIN WORKFLOW ###################### ######################################################## main: # Step #0 - Upload the video to cloudinary - tool: cloudinary_upload arguments: file: $ steps[0].input.video_url public_id: $ steps[0].input.public_id upload_params: resource_type: video # Step #1 - Analyze the video content with a prompt - prompt: - role: user content: - type: text text: |- You are a Cloudinary expert. You are given a medial url. it might be an image or a video. You need to come up with a json of transformations to apply to the given media. Overall the json could have multiple transformation json objects. Each transformation json object can have the multiple key value pairs. Each key value pair should have the key as the transformation name like "aspect_ratio", "crop", "width" etc and the value as the transformation parameter value. Given below is an example of a transformation json list. Don't provide explanations and/or comments in the json. ``json [ {{ "aspect_ratio": "1.0", "width": 250, }}, {{ "fetch_format": "auto" }}, {{ "overlay": {{ "url": "" }} }}, {{ "flags": "layer_apply" }} ] `` - type: image_url image_url: url: $ _.url - type: text text: |- $ f'''Hey, check the video above, I need to apply the following transformations using cloudinary. {steps[0].input.transformation_prompt}''' unwrap: true settings: model: gemini/gemini-1.5-pro # Step #2 - Extract the json from the model's response - evaluate: model_transformation: >- $ load_json( _[_.find("```json")+7:][:_[_.find("```json")+7:].find("```")]) # Step #3 - Upload the video to cloudinary - tool: cloudinary_upload arguments: file: $ steps[0].input.video_url public_id: $ steps[0].input.public_id upload_params: transformation: $ _.model_transformation resource_type: video # Step #4 - Evaluate the transformed video url - evaluate: transformed_video_url: $ _.url ``` ## Usage Here's how to use this task with the Julep SDK: ```python Python [expandable] import time import yaml from julep import Client # Initialize the client client = Client(api_key=JULEP_API_KEY) transformation_prompt = """ 1- I want to add an overlay an the following image to the video, and apply a layer apply flag also. Here's the image url: https://res.cloudinary.com/demo/image/upload/logos/cloudinary_icon_white.png 2- I also want you to to blur the video, and add a fade in and fade out effect to the video with a duration of 3 seconds each. """ # Create the agent agent = client.agents.create( name="Julep Video Processing Agent", about="A Julep agent that can process and analyze videos using Cloudinary and FFmpeg.", ) # Load the task definition with open('video_processing_task.yaml', 'r') as file: task_definition = yaml.safe_load(file) # Create the task task = client.tasks.create( agent_id=agent.id, **task_definition ) # Create the execution execution = client.executions.create( task_id=task.id, input={ "video_url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4", "public_id": "video_test", "transformation_prompt": transformation_prompt, } ) # Wait for the execution to complete while (result := client.executions.get(execution.id)).status not in ['succeeded', 'failed']: print(result.status) time.sleep(1) # Print the result if result.status == "succeeded": print(result.output) else: print(f"Error: {result.error}") ``` ```js Node.js [expandable] import { Julep } from '@julep/sdk'; import yaml from 'yaml'; import fs from 'fs'; const transformation_prompt = ` 1- I want to add an overlay an the following image to the video, and apply a layer apply flag also. Here's the image url: https://res.cloudinary.com/demo/image/upload/logos/cloudinary_icon_white.png 2- I also want you to to blur the video, and add a fade in and fade out effect to the video with a duration of 3 seconds each. `; const client = new Julep({ apiKey: 'your_julep_api_key' }); // Create the agent const agent = await client.agents.create({ name: "Julep Video Processing Agent", about: "A Julep agent that can process and analyze videos using Cloudinary and FFmpeg.", }); // Load the task definition const taskDefinition = yaml.parse(fs.readFileSync('video_processing_task.yaml', 'utf8')); // Create the task const task = await client.tasks.create( agent.id, taskDefinition ); // Create the execution const execution = await client.executions.create( task.id, { input: { "video_url": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerMeltdowns.mp4", "public_id": "video_test", "transformation_prompt": transformation_prompt, } } ); // Wait for the execution to complete let result; while (true) { result = await client.executions.get(execution.id); if (result.status === 'succeeded' || result.status === 'failed') break; console.log(result.status); await new Promise(resolve => setTimeout(resolve, 1000)); } // Print the result if (result.status === 'succeeded') { console.log(result.output); } else { console.error(`Error: ${result.error}`); } ``` ## Example Output This is an example output when the task is run over the sample video input. ## Next Steps - Try this task yourself, check out the full example, see the [video-processing-with-natural-language cookbook](https://github.com/julep-ai/julep/blob/main/cookbooks/advanced/05-video-processing-with-natural-language.ipynb). - To learn more about the integrations used in this task, check out the [integrations](/integrations/supported-integrations) page. ## Related Concepts - [Agents](/concepts/agents) - [Tasks](/concepts/tasks) - [Tools](/concepts/tools) ================================================ FILE: ruff.toml ================================================ exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".ipynb_checkpoints", ".mypy_cache", ".nox", ".pants.d", ".pyenv", ".pytest_cache", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "site-packages", "venv", ] fix = true unsafe-fixes = true # Enumerate all fixed violations. show-fixes = true respect-gitignore = true # Enable preview features. preview = true line-length = 96 indent-width = 4 # Assume Python 3.12 target-version = "py312" # Group violations by containing file. output-format = "grouped" [lint] # Enable preview features. preview = true # TODO: Need to add , "**/autogen/*.py" exclude = ["gunicorn_conf.py", "*.ipynb"] # TODO: Enable C09, S, B, ARG, PTH, ERA, PLW, FURB select = ["F", "E1", "E2", "E3", "E4", "E5", "E7", "W", "FAST", "I", "UP", "ASYNC", "COM", "C4", "DTZ", "T10", "EM", "FA", "ISC", "ICN", "INP", "PIE", "Q", "RSE", "RET", "SLF", "SLOT", "SIM", "INT", "PD", "PLE", "FLY", "NPY", "PERF", "RUF"] ignore = [ "E402", # module-import-not-at-top-of-file "E501", # line-too-long "E722", # bare-except "RUF001", # ambiguous-unicode-character-string "RUF002", # "RUF003", # "RUF029", # unused-async "ASYNC230", # blocking-open-in-async "ASYNC109", # disallow-async-fns-with-timeout-param "COM812", "ISC001", # conflict with each other "UP046", # Generic class uses `Generic` subclass instead of type parameters ] fixable = ["ALL"] [format] exclude = ["*.ipynb", "*.pyi", "*.pyc"] # Enable preview style formatting. preview = true # Like Black, use double quotes for strings. quote-style = "double" # Like Black, indent with spaces, rather than tabs. indent-style = "space" # Like Black, respect magic trailing commas. skip-magic-trailing-comma = false # Like Black, automatically detect the appropriate line ending. line-ending = "auto" docstring-code-format = true docstring-code-line-length = "dynamic" ================================================ FILE: src/agents-api/.dockerignore ================================================ Dockerfile *.pyc *.pyo *.pyd __pycache__ .pytest_cache .venv ================================================ FILE: src/agents-api/.gitignore ================================================ notebooks/ # Local database files temporal.db *.bak *.dat *.dir # jupyterlab stuff notebooks/Untitled*.ipynb .virtual_documents/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ ================================================ FILE: src/agents-api/.python-version ================================================ 3.12 ================================================ FILE: src/agents-api/.tool-versions ================================================ python 3.12.5 ================================================ FILE: src/agents-api/AGENTS.md ================================================ # AGENTS.md - agents-api This directory hosts the `agents-api` FastAPI service and Temporal workflows for agent definitions and task execution. Key Uses - Bash commands: - cd agents-api - source .venv/bin/activate - poe format - poe lint - poe typecheck - ty check [PATH]… # Extremely fast Python type checker (default: project root) - ty server # Start the ty language server for editor integration - ty version # Display ty's version - poe test - poe check - bash scripts/generate_openapi_code.sh - Core files and utilities: - `agents_api/` contains routers, activities, workflows. - `agents_api/common/` for exceptions, protocol, and utils. - Code style guidelines: - Follows root `AGENTS.md` Python standards (FastAPI, async/await, ruff formatting). - Testing instructions: - Tests live under `agents-api/tests/` using `ward`. - Run specific tests: `poe test --search "pattern" --fail-limit 1`. - Repository etiquette: - Tag AI-generated commits with `[AI]`. - Developer environment: - Ensure `PYTHONPATH=$PWD` and correct CWD in `agents-api/`. - Unexpected behaviors: - Remember to regenerate autogen code after TypeSpec changes. # Julep Agents API ## Service Overview - FastAPI-based service for orchestrating agent workflows - Handles tasks, executions, sessions, and tools - Temporal-based workflow engine for task execution - PostgreSQL for data storage - S3 for remote object storage ## Architecture - REST API (defined in routers/) - Database queries (queries/) - Workflow definitions (workflows/) - Task activities (activities/) - Background worker processing (worker/) - Common utilities and protocol definitions (common/) - Dependencies for authentication and middleware (dependencies/) - Recursive summarization for message history (rec_sum/) - Metrics collection and monitoring (metrics/) ## Key Concepts - Projects: Organizational units for grouping related resources - Tasks: Workflow specifications with steps and tools - Executions: Running instances of tasks - Sessions: User interaction contexts - Agents: LLM-based interfaces for users - Tools: Integrations and capabilities usable by agents ## Runtime Flow - User defines tasks with step definitions - Task execution creates workflow in Temporal - Activities run individual steps (prompt, tool calls, etc.) - Transitions track execution state - Results stored in database, retrievable via API ## Expression Evaluation - Task steps use Python expressions for logic/data flow - Expressions prefixed with '$' executed in sandbox - Backward compatibility: '{{variable}}' → '${variable}' - Input context: '_' holds current input, 'inputs' and 'outputs' for history ## Validation - Expression validation checks syntax, undefined names, unsafe operations - Task validation checks all expressions in workflow steps - Security: Sandbox with limited function/module access ================================================ FILE: src/agents-api/Dockerfile ================================================ # syntax=docker/dockerfile:1 # check=error=true FROM python:3.12-slim COPY --from=ghcr.io/astral-sh/uv:0.5.5 /uv /uvx /bin/ RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ libboost-all-dev \ libc6-dev \ libexpat1-dev \ libffi-dev \ liblzma-dev \ libssl-dev \ make \ wget \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /app COPY .python-version pyproject.toml uv.lock ./ RUN \ uv sync --frozen --all-extras --no-group dev --color never --python-preference system COPY . ./ ENV PYTHONUNBUFFERED=1 ENV GUNICORN_CMD_ARGS="--capture-output --enable-stdio-inheritance" ENTRYPOINT ["uv", "run", "--offline", "--no-sync", "gunicorn", "agents_api.web:app", "-c", "gunicorn_conf.py"] ================================================ FILE: src/agents-api/Dockerfile.worker ================================================ # syntax=docker/dockerfile:1 # check=error=true FROM python:3.12-slim COPY --from=ghcr.io/astral-sh/uv:0.5.5 /uv /uvx /bin/ RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ libboost-all-dev \ libc6-dev \ libexpat1-dev \ libffi-dev \ liblzma-dev \ libssl-dev \ make \ wget \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /app COPY .python-version pyproject.toml uv.lock ./ RUN \ uv sync --frozen --all-extras --no-group dev --color never --python-preference system COPY . ./ ENV PYTHONUNBUFFERED=1 ENV GUNICORN_CMD_ARGS="--capture-output --enable-stdio-inheritance" ENTRYPOINT ["uv", "run", "--offline", "--no-sync", "python", "-m", "agents_api.worker"] ================================================ FILE: src/agents-api/README.md ================================================ # agents-api ## Overview The `agents-api` project serves as the foundation of the agent management system, defining the structure and capabilities of the API that manages agents. It includes operations such as creating, updating, listing, and deleting agents, as well as managing documents and tools associated with these agents. ## Modules ### Models The `models` module encapsulates all data interactions with the CozoDB database, providing a structured way to perform CRUD operations and other specific data manipulations across various entities. ### Routers The `routers` module handles HTTP routing for different parts of the application, directing incoming HTTP requests to the appropriate handler functions. ### Dependencies This module contains components crucial for the operation of the agents-api, including authentication, developer identification, and custom exception handling. ### Common Utilities The `utils` module offers a collection of utility functions designed to support various aspects of the application, including interactions with the Cozo API client, date and time operations, and custom JSON utilities. ### Activities The `activities` module facilitates various activities related to agent interactions, such as memory management, generating insights from dialogues, and summarizing relationships. ### Clients The `clients` module contains client classes and functions for interacting with various external services and APIs, providing a simplified interface for the rest of the application. ### Workers This module is responsible for handling background tasks and jobs for the Agents API application, enhancing the application's performance and scalability. ## Getting Started To set up the project for development: 1. Clone the repository. 2. Install dependencies. 3. Run the application. This guide provides a brief overview for new contributors to get started with the project development. ## Schema ``` [agent_default_settings] ┌───┬────────────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼────────────────────┼────────┼─────────┼─────────────┤ │ 0 │ agent_id │ True │ Uuid │ False │ │ 1 │ frequency_penalty │ False │ Float │ True │ │ 2 │ presence_penalty │ False │ Float │ True │ │ 3 │ length_penalty │ False │ Float │ True │ │ 4 │ repetition_penalty │ False │ Float │ True │ │ 5 │ top_p │ False │ Float │ True │ │ 6 │ temperature │ False │ Float │ True │ │ 7 │ min_p │ False │ Float │ True │ │ 8 │ preset │ False │ String? │ True │ └───┴────────────────────┴────────┴─────────┴─────────────┘ [agents] ┌───┬──────────────┬────────┬──────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────┼────────┼──────────┼─────────────┤ │ 0 │ developer_id │ True │ Uuid │ False │ │ 1 │ agent_id │ True │ Uuid │ False │ │ 2 │ name │ False │ String │ False │ │ 3 │ about │ False │ String │ False │ │ 4 │ instructions │ False │ [String] │ True │ │ 5 │ model │ False │ String │ True │ │ 6 │ created_at │ False │ Float │ True │ │ 7 │ updated_at │ False │ Float │ True │ │ 8 │ metadata │ False │ Json │ True │ └───┴──────────────┴────────┴──────────┴─────────────┘ [developers] ┌───┬──────────────┬────────┬──────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────┼────────┼──────────┼─────────────┤ │ 0 │ developer_id │ True │ Uuid │ False │ │ 1 │ email │ False │ String │ False │ │ 2 │ active │ False │ Bool │ True │ │ 3 │ tags │ False │ [String] │ True │ │ 4 │ settings │ False │ Json │ False │ │ 5 │ created_at │ False │ Float │ True │ │ 6 │ updated_at │ False │ Float │ True │ └───┴──────────────┴────────┴──────────┴─────────────┘ [docs] ┌───┬────────────┬────────┬────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼────────────┼────────┼────────┼─────────────┤ │ 0 │ owner_type │ True │ String │ False │ │ 1 │ owner_id │ True │ Uuid │ False │ │ 2 │ doc_id │ True │ Uuid │ False │ │ 3 │ title │ False │ String │ False │ │ 4 │ created_at │ False │ Float │ True │ │ 5 │ metadata │ False │ Json │ True │ └───┴────────────┴────────┴────────┴─────────────┘ [entries] ┌────┬──────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├────┼──────────────┼────────┼─────────┼─────────────┤ │ 0 │ session_id │ True │ Uuid │ False │ │ 1 │ entry_id │ True │ Uuid │ True │ │ 2 │ source │ True │ String │ False │ │ 3 │ role │ True │ String │ False │ │ 4 │ name │ True │ String? │ True │ │ 5 │ content │ False │ [Json] │ False │ │ 6 │ tool_call_id │ False │ String? │ True │ │ 7 │ tool_calls │ False │ [Json]? │ True │ │ 8 │ token_count │ False │ Int │ False │ │ 9 │ tokenizer │ False │ String │ False │ │ 10 │ created_at │ False │ Float │ True │ │ 11 │ timestamp │ False │ Float │ True │ └────┴──────────────┴────────┴─────────┴─────────────┘ [executions] ┌───┬──────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────┼────────┼─────────┼─────────────┤ │ 0 │ task_id │ True │ Uuid │ False │ │ 1 │ execution_id │ True │ Uuid │ False │ │ 2 │ status │ False │ String │ True │ │ 3 │ input │ False │ Json │ False │ │ 4 │ output │ False │ Json? │ True │ │ 5 │ error │ False │ String? │ True │ │ 6 │ session_id │ False │ Uuid? │ True │ │ 7 │ metadata │ False │ Json │ True │ │ 8 │ created_at │ False │ Float │ True │ │ 9 │ updated_at │ False │ Float │ True │ └───┴──────────────┴────────┴─────────┴─────────────┘ [files] ┌───┬──────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────┼────────┼─────────┼─────────────┤ │ 0 │ developer_id │ True │ Uuid │ False │ │ 1 │ file_id │ True │ Uuid │ False │ │ 2 │ name │ False │ String │ False │ │ 3 │ description │ False │ String │ True │ │ 4 │ mime_type │ False │ String? │ True │ │ 5 │ size │ False │ Int │ False │ │ 6 │ hash │ False │ String │ False │ │ 7 │ created_at │ False │ Float │ True │ └───┴──────────────┴────────┴─────────┴─────────────┘ [memories] ┌───┬──────────────────┬────────┬────────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────────┼────────┼────────────┼─────────────┤ │ 0 │ memory_id │ True │ Uuid │ False │ │ 1 │ content │ False │ String │ False │ │ 2 │ last_accessed_at │ False │ Float? │ True │ │ 3 │ timestamp │ False │ Float │ True │ │ 4 │ sentiment │ False │ Int │ True │ │ 5 │ entities │ False │ [Json] │ True │ │ 6 │ created_at │ False │ Float │ True │ │ 7 │ embedding │ False │ ? │ True │ └───┴──────────────────┴────────┴────────────┴─────────────┘ [memory_lookup] ┌───┬───────────┬────────┬───────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼───────────┼────────┼───────┼─────────────┤ │ 0 │ agent_id │ True │ Uuid │ False │ │ 1 │ user_id │ True │ Uuid? │ True │ │ 2 │ memory_id │ True │ Uuid │ False │ └───┴───────────┴────────┴───────┴─────────────┘ [relations] ┌───┬──────────┬────────┬────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────┼────────┼────────┼─────────────┤ │ 0 │ head │ True │ Uuid │ False │ │ 1 │ relation │ True │ String │ False │ │ 2 │ tail │ True │ Uuid │ False │ └───┴──────────┴────────┴────────┴─────────────┘ [session_cache] ┌───┬────────┬────────┬────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼────────┼────────┼────────┼─────────────┤ │ 0 │ key │ True │ String │ False │ │ 1 │ value │ False │ Json │ False │ └───┴────────┴────────┴────────┴─────────────┘ [session_lookup] ┌───┬──────────────────┬────────┬────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────────┼────────┼────────┼─────────────┤ │ 0 │ session_id │ True │ Uuid │ False │ │ 1 │ participant_type │ True │ String │ False │ │ 2 │ participant_id │ True │ Uuid │ False │ └───┴──────────────────┴────────┴────────┴─────────────┘ [sessions] ┌────┬────────────────────┬────────┬──────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├────┼────────────────────┼────────┼──────────┼─────────────┤ │ 0 │ developer_id │ True │ Uuid │ False │ │ 1 │ session_id │ True │ Uuid │ False │ │ 2 │ updated_at │ True │ Validity │ True │ │ 3 │ situation │ False │ String │ False │ │ 4 │ summary │ False │ String? │ True │ │ 5 │ created_at │ False │ Float │ True │ │ 6 │ metadata │ False │ Json │ True │ │ 7 │ render_templates │ False │ Bool │ True │ │ 8 │ token_budget │ False │ Int? │ True │ │ 9 │ context_overflow │ False │ String? │ True │ │ 10 │ forward_tool_calls │ False │ Bool? │ True │ │ 11 │ recall_options │ False │ Json │ True │ └────┴────────────────────┴────────┴──────────┴─────────────┘ [snippets] ┌───┬───────────┬────────┬─────────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼───────────┼────────┼─────────────┼─────────────┤ │ 0 │ doc_id │ True │ Uuid │ False │ │ 1 │ index │ True │ Int │ False │ │ 2 │ content │ False │ String │ False │ │ 3 │ embedding │ False │ ? │ True │ └───┴───────────┴────────┴─────────────┴─────────────┘ [tasks] ┌────┬───────────────┬────────┬──────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├────┼───────────────┼────────┼──────────┼─────────────┤ │ 0 │ agent_id │ True │ Uuid │ False │ │ 1 │ task_id │ True │ Uuid │ False │ │ 2 │ updated_at_ms │ True │ Validity │ True │ │ 3 │ name │ False │ String │ False │ │ 4 │ description │ False │ String? │ True │ │ 5 │ input_schema │ False │ Json │ False │ │ 6 │ tools │ False │ [Json] │ True │ │ 7 │ inherit_tools │ False │ Bool │ True │ │ 8 │ workflows │ False │ [Json] │ False │ │ 9 │ created_at │ False │ Float │ True │ │ 10 │ metadata │ False │ Json │ True │ └────┴───────────────┴────────┴──────────┴─────────────┘ [temporal_executions_lookup] ┌───┬────────────────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼────────────────────────┼────────┼─────────┼─────────────┤ │ 0 │ execution_id │ True │ Uuid │ False │ │ 1 │ id │ True │ String │ False │ │ 2 │ run_id │ False │ String? │ False │ │ 3 │ first_execution_run_id │ False │ String? │ False │ │ 4 │ result_run_id │ False │ String? │ False │ │ 5 │ created_at │ False │ Float │ True │ └───┴────────────────────────┴────────┴─────────┴─────────────┘ [tools] ┌───┬─────────────┬────────┬─────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼─────────────┼────────┼─────────┼─────────────┤ │ 0 │ agent_id │ True │ Uuid │ False │ │ 1 │ tool_id │ True │ Uuid │ False │ │ 2 │ type │ False │ String │ False │ │ 3 │ name │ False │ String │ False │ │ 4 │ description │ False │ String? │ False │ │ 5 │ spec │ False │ Json │ False │ │ 6 │ updated_at │ False │ Float │ True │ │ 7 │ created_at │ False │ Float │ True │ └───┴─────────────┴────────┴─────────┴─────────────┘ [transitions] ┌───┬───────────────┬────────┬───────────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼───────────────┼────────┼───────────────┼─────────────┤ │ 0 │ execution_id │ True │ Uuid │ False │ │ 1 │ transition_id │ True │ Uuid │ False │ │ 2 │ type │ False │ String │ False │ │ 3 │ current │ False │ (String,Int) │ False │ │ 4 │ next │ False │ (String,Int)? │ False │ │ 5 │ output │ False │ Json? │ False │ │ 6 │ task_token │ False │ String? │ True │ │ 7 │ metadata │ False │ Json │ True │ │ 8 │ created_at │ False │ Float │ True │ │ 9 │ updated_at │ False │ Float │ True │ └───┴───────────────┴────────┴───────────────┴─────────────┘ [users] ┌───┬──────────────┬────────┬────────┬─────────────┐ │ │ column │ is_key │ type │ has_default │ ├───┼──────────────┼────────┼────────┼─────────────┤ │ 0 │ developer_id │ True │ Uuid │ False │ │ 1 │ user_id │ True │ Uuid │ False │ │ 2 │ name │ False │ String │ False │ │ 3 │ about │ False │ String │ False │ │ 4 │ created_at │ False │ Float │ True │ │ 5 │ updated_at │ False │ Float │ True │ │ 6 │ metadata │ False │ Json │ True │ └───┴──────────────┴────────┴────────┴─────────────┘ ``` ================================================ FILE: src/agents-api/agents_api/__init__.py ================================================ """ The `agents_api` module serves as the foundation of the agent management system within the `agents-api` project. This module is responsible for defining the structure and capabilities of the API that manages agents. It includes operations such as creating, updating, listing, and deleting agents, as well as managing documents and tools associated with these agents. """ # Failed decoding arguments fix from temporalio import workflow with workflow.unsafe.imports_passed_through(): import msgpack as msgpack ================================================ FILE: src/agents-api/agents_api/activities/AGENTS.md ================================================ # AGENTS.md - activities This folder contains Temporal activity implementations for task steps in `agents-api`. Guidelines - Define activities as async functions with the `@activity` decorator. - Validate Python expressions using `validate_py_expression` from `base_evaluate`. - Follow root error-handling patterns with typed exceptions. - Document activity behavior with Google-style docstrings. - Register activities in the worker (`agents_api/worker`). - See parent AGENTS.md for component-level commands and tests. # Activities ## Purpose - Houses Temporal activities (atomic units of work) for task execution - Each activity represents an operation that can be performed within workflows - Activities have built-in retry policies, timeouts, and heartbeats ## Key Activities ### task_steps/ - `base_evaluate`: Evaluates Python expressions in a sandbox environment (simpleeval) - `get_value_step`: Retrieves values from context - `pg_query_step`: Executes PostgreSQL queries - `prompt_step`: Generates text using LLMs - `tool_call_step`: Calls tools (integrations with external systems) - `transition_step`: Handles workflow transitions ### External Operations - `execute_api_call`: Makes HTTP requests to external APIs - `execute_integration`: Calls integrations service - `execute_system`: Performs system operations ### Data Management - `sync_items_remote`: Saves/loads large objects to/from S3 ## Expression Handling - Python expressions prefixed with `$` parsed by base_evaluate - Backward compatibility for {{var}} template syntax → $f'''{{var}}''' - Security: Limited functions, modules, operations in sandbox - Validation: Syntax, undefined names, unsafe operations checked ## Context - Task steps receive `StepContext` with: - Current cursor position (workflow, step, scope) - Input data for the step - Previous inputs/outputs in the workflow - Agent configuration and tools ================================================ FILE: src/agents-api/agents_api/activities/__init__.py ================================================ """ The `activities` module within the agents-api package is designed to facilitate various activities related to agent interactions. This includes handling memory management, generating insights from dialogues, summarizing relationships, and more. This module plays a crucial role in enhancing the capabilities of agents by providing them with the tools to understand and process information more effectively. """ ================================================ FILE: src/agents-api/agents_api/activities/demo.py ================================================ from temporalio import activity from ..env import testing async def demo_activity(a: int, b: int) -> int: # Should throw an error if testing is not enabled msg = "This should not be called in production" raise Exception(msg) async def mock_demo_activity(a: int, b: int) -> int: return a + b demo_activity = activity.defn(name="demo_activity")( demo_activity if not testing else mock_demo_activity, ) ================================================ FILE: src/agents-api/agents_api/activities/execute_api_call.py ================================================ from base64 import b64encode from typing import Any, TypedDict import httpx from beartype import beartype from temporalio import activity from ..autogen.openapi_model import ApiCallDef from ..env import testing class RequestArgs(TypedDict): content: str | None data: dict[str, Any] | None json_: dict[str, Any] | None cookies: dict[str, str] | None params: str | dict[str, Any] | None url: str | None headers: dict[str, str] | None files: dict[str, Any] | None method: str | None follow_redirects: bool | None include_response_content: bool = True @beartype async def execute_api_call( api_call: ApiCallDef, request_args: RequestArgs, ) -> Any: try: # Use client with timeout and proper error handling async with httpx.AsyncClient(timeout=600) as client: # Extract URL, method, and headers from arguments arg_url = request_args.pop("url", None) arg_headers = request_args.pop("headers", None) arg_method = request_args.pop("method", None) # Allow the method to be overridden by the request_args method = arg_method or api_call.method url = arg_url or str(api_call.url) # Merge headers from both arguments and API call definition merged_headers = (arg_headers or {}) | (api_call.headers or {}) # Allow follow_redirects to be overridden by request_args follow_redirects = request_args.pop("follow_redirects", api_call.follow_redirects) # Log the request (debug level) if activity.in_activity(): activity.logger.debug(f"Making API call: {method} to {url}") include_response_content = request_args.pop("include_response_content", None) # Execute the HTTP request response = await client.request( method=method, url=url, headers=merged_headers, follow_redirects=follow_redirects, **request_args, ) # Raise for HTTP errors try: response.raise_for_status() except httpx.HTTPStatusError as e: # For HTTP errors, include response body in the error for debugging error_body = e.response.text[:500] if e.response.text else "(empty body)" if activity.in_activity(): activity.logger.error( f"HTTP error {e.response.status_code} in API call: {e!s}\n" f"Response body: {error_body}" ) raise # Prepare response dictionary response_dict = { "status_code": response.status_code, "headers": dict(response.headers), } if include_response_content or api_call.include_response_content: response_dict.update({"content": b64encode(response.content).decode("ascii")}) # Try to parse JSON response if possible try: response_dict["json"] = response.json() except Exception as e: response_dict["json"] = None content_preview = response.text[:100] if response.text else "(empty)" if activity.in_activity(): activity.logger.debug( f"Response not valid JSON: {e!s}\n" f"Content-Type: {response.headers.get('content-type')}\n" f"Content preview: {content_preview}" ) return response_dict except httpx.TimeoutException as e: if activity.in_activity(): activity.logger.error(f"Timeout in API call: {e!s}") raise except httpx.RequestError as e: # Network-level errors if activity.in_activity(): activity.logger.error(f"Request error in API call: {e!s}") raise except Exception as e: if activity.in_activity(): activity.logger.error(f"Error in execute_api_call: {e!s}") raise mock_execute_api_call = execute_api_call execute_api_call = activity.defn(name="execute_api_call")( execute_api_call if not testing else mock_execute_api_call, ) ================================================ FILE: src/agents-api/agents_api/activities/execute_integration.py ================================================ import json from typing import Any from uuid import UUID from beartype import beartype from pydantic import AnyUrl, BaseModel from temporalio import activity from ..app import app from ..autogen.openapi_model import BaseIntegrationDef from ..clients import integrations from ..common.exceptions.tools import IntegrationExecutionException from ..env import testing from ..queries import tools def serialize_pydantic_objects(obj: Any) -> Any: """Recursively convert Pydantic types to JSON-serializable formats.""" if isinstance(obj, BaseModel): return obj.model_dump(mode="json") if isinstance(obj, AnyUrl): return str(obj) if isinstance(obj, dict): return {k: serialize_pydantic_objects(v) for k, v in obj.items()} if isinstance(obj, list): return [serialize_pydantic_objects(item) for item in obj] return obj @beartype async def execute_integration( developer_id: UUID, agent_id: UUID, task_id: UUID | None, session_id: UUID | None, tool_name: str, integration: BaseIntegrationDef, arguments: dict[str, Any], setup: dict[str, Any] = {}, connection_pool=None, ) -> Any: # AIDEV-NOTE: task_id or session_id must be provided (one for task execution, one for chat) if task_id is None and session_id is None: msg = "Either task_id or session_id must be provided" raise ValueError(msg) if connection_pool is None: connection_pool = getattr(app.state, "postgres_pool", None) merged_tool_args = await tools.get_tool_args_from_metadata( developer_id=developer_id, agent_id=agent_id, task_id=task_id, session_id=session_id, arg_type="args", connection_pool=connection_pool, ) merged_tool_setup = await tools.get_tool_args_from_metadata( developer_id=developer_id, agent_id=agent_id, task_id=task_id, session_id=session_id, arg_type="setup", connection_pool=connection_pool, ) arguments = arguments | (integration.arguments or {}) | merged_tool_args.get(tool_name, {}) # Convert integration.setup to dict and ensure all Pydantic types are serialized integration_setup = {} if integration.setup: # Use our helper to recursively serialize any Pydantic objects integration_setup = serialize_pydantic_objects(integration.setup) # Serialize both setup and arguments to ensure no Pydantic objects remain setup = serialize_pydantic_objects( setup | integration_setup | merged_tool_setup.get(tool_name, {}) ) arguments = serialize_pydantic_objects(arguments) try: # Handle dummy provider as a special case if integration.provider == "dummy": return arguments # Call the integration service integration_service_response = await integrations.run_integration_service( provider=integration.provider, setup=setup, method=integration.method, arguments=arguments, ) # Check for error in the response if error_message := integration_service_response.get("error"): integration_str = ( f"{integration.provider}.{integration.method}" if integration.method else integration.provider ) # Log the error with more context if activity.in_activity(): activity.logger.error( f"Integration {integration_str} returned error: {error_message}. " f"Arguments: {json.dumps(arguments)[:200]}..." ) # Raise a proper exception with details raise IntegrationExecutionException( integration=integration, error=error_message, ) return integration_service_response except IntegrationExecutionException: # Re-raise our custom exceptions directly raise except Exception as e: # For all other exceptions, add context integration_str = integration.provider + ( "." + integration.method if integration.method else "" ) if activity.in_activity(): activity.logger.error( f"Error executing integration {integration_str}: {e!s}. Tool: {tool_name}" ) # Re-raise with better context raise IntegrationExecutionException( integration=integration, error=f"Failed to execute {integration_str}: {e!s}", ) from e mock_execute_integration = execute_integration execute_integration = activity.defn(name="execute_integration")( execute_integration if not testing else mock_execute_integration, ) ================================================ FILE: src/agents-api/agents_api/activities/execute_system.py ================================================ from functools import partial from typing import Any from uuid import UUID from beartype import beartype from box import Box, BoxList from fastapi.background import BackgroundTasks from temporalio import activity from ..app import app from ..autogen.openapi_model import ( ChatInput, CreateDocRequest, CreateExecutionRequest, CreateSessionRequest, HybridDocSearchRequest, SystemDef, TextOnlyDocSearchRequest, UpdateSessionRequest, UpdateUserRequest, VectorDocSearchRequest, ) from ..common.utils.evaluator import get_handler from ..env import testing from ..queries import developers @beartype async def execute_system( developer_id: UUID, system: SystemDef, connection_pool=None, ) -> Any: """Execute a system call with the appropriate handler and transformed arguments.""" arguments: dict[str, Any] = system.arguments or {} if connection_pool is None: connection_pool = getattr(app.state, "postgres_pool", None) arguments["developer_id"] = developer_id # Unbox all the arguments for key, value in arguments.items(): if isinstance(value, Box): arguments[key] = value.to_dict() elif isinstance(value, BoxList): arguments[key] = value.to_list() # Convert all UUIDs to UUID objects uuid_fields = [ "agent_id", "user_id", "task_id", "session_id", "doc_id", "owner_id", "developer_id", ] for field in uuid_fields: if field in arguments and not isinstance(arguments[field], UUID): arguments[field] = UUID(arguments[field]) try: # Partial with connection pool handler = get_handler(system) handler = partial(handler, connection_pool=connection_pool) # Transform arguments for doc-related operations (except create and search # as we're calling the endpoint function rather than the model method) if system.subresource == "doc" and system.operation not in ["create", "search"]: owner_id_field = f"{system.resource}_id" if owner_id_field in arguments: doc_args = { "owner_type": system.resource, "owner_id": arguments[owner_id_field], **arguments, } doc_args.pop(owner_id_field) arguments = doc_args # Handle special cases for doc operations if system.operation == "create" and system.subresource == "doc": arguments["x_developer_id"] = arguments.pop("developer_id") return await handler( data=CreateDocRequest(**arguments.pop("data")), **arguments, ) # Handle search operations if system.operation == "search" and system.subresource == "doc": arguments["x_developer_id"] = arguments.pop("developer_id") search_params = _create_search_request(arguments) return await handler(search_params=search_params, **arguments) # Handle chat operations if system.operation == "chat" and system.resource == "session": developer = await developers.get_developer( developer_id=arguments["developer_id"], connection_pool=connection_pool, ) session_id = arguments.get("session_id") x_custom_api_key = arguments.get("x_custom_api_key", None) chat_input = ChatInput(**arguments) bg_runner = BackgroundTasks() res = await handler( developer=developer, session_id=session_id, background_tasks=bg_runner, x_custom_api_key=x_custom_api_key, chat_input=chat_input, ) await bg_runner() return res # Handle create session if system.operation == "create" and system.resource == "session": developer_id = arguments.pop("developer_id") session_id = arguments.pop("session_id", None) create_session_request = CreateSessionRequest(**arguments) return await handler( developer_id=developer_id, session_id=session_id, data=create_session_request, ) # Handle update session if system.operation == "update" and system.resource == "session": developer_id = arguments.pop("developer_id") session_id = arguments.pop("session_id") update_session_request = UpdateSessionRequest(**arguments) return await handler( developer_id=developer_id, session_id=session_id, data=update_session_request, ) # Handle update user if system.operation == "update" and system.resource == "user": developer_id = arguments.pop("developer_id") user_id = arguments.pop("user_id") update_user_request = UpdateUserRequest(**arguments) return await handler( developer_id=developer_id, user_id=user_id, data=update_user_request, ) if ( system.operation == "create" and system.resource == "task" and system.subresource == "execution" ): developer_id = arguments.pop("developer_id") task_id = arguments.pop("task_id") payload = arguments.pop("data", {}) execution_request = ( payload if isinstance(payload, CreateExecutionRequest) else CreateExecutionRequest(**payload) ) bg_runner = BackgroundTasks() # AIDEV-NOTE: Ensure Temporal lookup background tasks run when invoked outside FastAPI. result = await handler( task_id=task_id, data=execution_request, x_developer_id=developer_id, background_tasks=bg_runner, ) await bg_runner() return result return await handler(**arguments) except BaseException as e: if activity.in_activity(): activity.logger.error(f"Error in execute_system_call: {e}") raise def _create_search_request(arguments: dict) -> Any: """Create appropriate search request based on available parameters.""" search_params = arguments | arguments.pop("search_params", {}) if "text" in search_params and "vector" in search_params: return HybridDocSearchRequest( text=search_params.pop("text"), mmr_strength=search_params.pop("mmr_strength", 0), vector=search_params.pop("vector"), alpha=search_params.pop("alpha", 0.75), confidence=search_params.pop("confidence", 0.5), limit=search_params.get("limit", 10), ) if "text" in search_params: return TextOnlyDocSearchRequest( text=search_params.pop("text"), mmr_strength=search_params.pop("mmr_strength", 0), limit=search_params.get("limit", 10), ) if "vector" in search_params: return VectorDocSearchRequest( vector=search_params.pop("vector"), mmr_strength=search_params.pop("mmr_strength", 0), confidence=search_params.pop("confidence", 0.7), limit=search_params.get("limit", 10), ) return None # Keep the existing mock and activity definition mock_execute_system = execute_system execute_system = activity.defn(name="execute_system")( execute_system if not testing else mock_execute_system, ) ================================================ FILE: src/agents-api/agents_api/activities/logger.py ================================================ import logging from typing import TextIO logger: logging.Logger = logging.getLogger(__name__) h: logging.StreamHandler[TextIO] = logging.StreamHandler() fmt: logging.Formatter = logging.Formatter("[%(asctime)s/%(levelname)s] - %(message)s") h.setFormatter(fmt) logger.addHandler(h) ================================================ FILE: src/agents-api/agents_api/activities/pg_query_step.py ================================================ from typing import Any from beartype import beartype from temporalio import activity from .. import queries from ..env import testing @beartype async def pg_query_step( query_name: str, file_name: str, values: dict[str, Any], ) -> Any: (module_name, name) = file_name.split(".") module = getattr(queries, module_name) query_module = getattr(module, name) query = getattr(query_module, query_name) return await query(**values) mock_pg_query_step = pg_query_step pg_query_step = activity.defn(name="pg_query_step")( pg_query_step if not testing else mock_pg_query_step, ) ================================================ FILE: src/agents-api/agents_api/activities/sync_items_remote.py ================================================ from typing import Any from beartype import beartype from temporalio import activity from ..worker.codec import RemoteObject @beartype async def save_inputs_remote_fn(inputs: list[Any]) -> list[Any | RemoteObject]: from ..common.interceptors import offload_if_large return [offload_if_large(input) for input in inputs] @beartype async def load_inputs_remote_fn(inputs: list[Any | RemoteObject]) -> list[Any]: from ..common.interceptors import load_if_remote return [load_if_remote(input) for input in inputs] save_inputs_remote = activity.defn(name="save_inputs_remote")(save_inputs_remote_fn) load_inputs_remote = activity.defn(name="load_inputs_remote")(load_inputs_remote_fn) ================================================ FILE: src/agents-api/agents_api/activities/task_steps/__init__.py ================================================ # ruff: noqa: F401 from .base_evaluate import base_evaluate from .get_value_step import get_value_step from .prompt_step import prompt_step from .raise_complete_async import raise_complete_async from .transition_step import transition_step ================================================ FILE: src/agents-api/agents_api/activities/task_steps/base_evaluate.py ================================================ # AIDEV-NOTE: This module provides the activity for evaluating Python expressions within the task execution context. from typing import Any from beartype import beartype from simpleeval import SimpleEval from temporalio import activity from ...common.exceptions.executions import EvaluateError from ...common.protocol.tasks import StepContext from ...common.utils.expressions import evaluate_expressions from ...common.utils.task_validation import backwards_compatibility # AIDEV-NOTE: Recursively evaluates expressions, handling different data types (strings, lists, dicts) and PyExpression objects. # It prepares the expression for evaluation by the simpleeval library. def _recursive_evaluate(expr, evaluator: SimpleEval): # Handle PyExpression type from the model if hasattr(expr, "root") and isinstance(expr.root, str): # Extract the string from the RootModel expr = expr.root if isinstance(expr, str): try: expr = backwards_compatibility(expr) expr = expr.strip() if isinstance(expr, str) and expr.startswith("$ "): # Remove $ and any space after it expr = expr[1:].strip() else: expr = f"f'''{expr}'''" return evaluator.eval(expr) except Exception as e: evaluate_error = EvaluateError(e, expr, evaluator.names) if activity.in_activity(): activity.logger.error(f"Error in base_evaluate: {evaluate_error}\n") raise evaluate_error from e elif isinstance(expr, int | bool | float): return expr elif isinstance(expr, list): return [_recursive_evaluate(e, evaluator) for e in expr] elif isinstance(expr, dict): return {k: _recursive_evaluate(v, evaluator) for k, v in expr.items()} else: msg = f"Invalid expression: {expr}" raise ValueError(msg) # AIDEV-NOTE: Main activity function for evaluating expressions. # Sets up the evaluation environment with context values and extra functions, then calls the recursive evaluator. @activity.defn @beartype async def base_evaluate( exprs: Any, context: StepContext | None = None, values: dict[str, Any] | None = None, extra_lambda_strs: dict[str, str] | None = None, ) -> Any | list[Any] | dict[str, Any]: if context is None and values is None: msg = "Either context or values must be provided" raise ValueError(msg) values = values or {} if context: # NOTE: We limit the number of inputs to 50 to avoid excessive memory usage values.update(await context.prepare_for_step(limit=50)) return evaluate_expressions(exprs, values=values, extra_lambda_strs=extra_lambda_strs) ================================================ FILE: src/agents-api/agents_api/activities/task_steps/get_value_step.py ================================================ from beartype import beartype from temporalio import activity from ...common.protocol.tasks import StepContext, StepOutcome # TODO: We should use this step to query the parent workflow and get the value from the workflow context # SCRUM-1 @activity.defn @beartype async def get_value_step( context: StepContext, ) -> StepOutcome: key: str = context.current_step.get # noqa: F841 msg = "Not implemented yet" raise NotImplementedError(msg) ================================================ FILE: src/agents-api/agents_api/activities/task_steps/prompt_step.py ================================================ # AIDEV-NOTE: This module contains the activity for executing a prompt step, which interacts with the language model. import functools from beartype import beartype from litellm.types.utils import ModelResponse from temporalio import activity from temporalio.exceptions import ApplicationError from ...autogen.openapi_model import Tool from ...clients import ( litellm, # We dont directly import `acompletion` so we can mock it ) from ...common.protocol.tasks import ExecutionInput, StepContext, StepOutcome from ...common.utils.feature_flags import get_feature_flag_value from ...common.utils.llm_providers import get_api_key_env_var_name from ...common.utils.model_validation import ( ModelNotAvailableError, ensure_model_available, ) from ...common.utils.tool_runner import format_tool, run_context_tool, run_llm_with_tools from ...env import debug from .base_evaluate import base_evaluate COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" @activity.defn @beartype # AIDEV-NOTE: Executes the prompt step by interacting with the language model via LiteLLM. # Handles prompt evaluation, tool formatting, model calling, and response processing. async def prompt_step(context: StepContext) -> StepOutcome: # Get context data prompt: str | list[dict] = context.current_step.model_dump()["prompt"] if isinstance(prompt, list): for i, msg in enumerate(prompt): prompt[i]["content"] = await base_evaluate(msg["content"], context) prompt[i]["role"] = await base_evaluate(msg["role"], context) else: prompt = await base_evaluate(prompt, context) # Wrap the prompt in a list if it is not already prompt = prompt if isinstance(prompt, list) else [{"role": "user", "content": prompt}] if not isinstance(context.execution_input, ExecutionInput): msg = "Expected ExecutionInput type for context.execution_input" raise TypeError(msg) # Get settings and run llm agent_default_settings: dict = context.execution_input.agent.default_settings or {} agent_model: str = ( context.execution_input.agent.model if context.execution_input.agent.model else "gpt-4o" ) if get_api_key_env_var_name(agent_model) != "OPENAI_API_KEY": prompt = [{k: v for k, v in message.items() if k != "name"} for message in prompt] excluded_keys = [ "prompt", "kind_", "label", "unwrap", "auto_run_tools", "disable_cache", "tools", ] # Get passed settings passed_settings: dict = context.current_step.model_dump( exclude=excluded_keys, exclude_unset=True, ) passed_settings.update(passed_settings.pop("settings", {}) or {}) passed_settings["user"] = str(context.execution_input.developer_id) passed_settings = await base_evaluate(passed_settings, context) override_model = passed_settings.get("model") if override_model is not None: try: await ensure_model_available(override_model) except ModelNotAvailableError as exc: raise ApplicationError(str(exc), non_retryable=True) from exc if get_feature_flag_value( "auto_tool_calls_prompt_step", developer_id=str(context.execution_input.developer_id) ): if not passed_settings.get("tools"): passed_settings.pop("tool_choice", None) all_tools = await context.tools() passed_settings = {k: v for k, v in passed_settings.items() if v is not None} completion_data: dict = { "model": agent_model, **agent_default_settings, **passed_settings, } # AIDEV-NOTE: When auto_run_tools=False, pass empty tools list to prevent # model from making tool calls that won't be executed. This simplifies the # flow as the model will always return a regular completion instead of tool calls. tools_to_use = all_tools if context.current_step.auto_run_tools else [] responses: list[dict] = await run_llm_with_tools( messages=prompt, tools=tools_to_use, settings=completion_data, run_tool_call=functools.partial(run_context_tool, context), ) if context.current_step.unwrap: response = responses[-1] # TODO: Allow unwrapping of function tool calls if response["tool_calls"] is not None: msg = "Function tool calls unwrapping is not supported yet" raise ApplicationError(msg) return StepOutcome( output=response["content"], next=None, ) return StepOutcome( output=responses, next=None, ) if not passed_settings.get("tools"): passed_settings.pop("tool_choice", None) # Format tools for litellm formatted_tools = [await format_tool(tool) for tool in await context.tools()] # Map tools to their original objects tools_mapping: dict[str, Tool] = { fmt_tool.get("name") or fmt_tool.get("function", {}).get("name"): orig_tool for fmt_tool, orig_tool in zip(formatted_tools, await context.tools()) } # Check if using Claude model and has specific tool types is_claude_model = agent_model.lower().startswith("claude-3.5") # AIDEV-FIXME: Hack to make the computer use tools compatible with litellm. # Issue was: litellm expects type to be `computer_20241022` and spec to be # `function` (see: https://docs.litellm.ai/docs/providers/anthropic#computer-tools) # but we don't allow that (spec should match type). formatted_tools = [] for i, tool in enumerate(await context.tools()): if tool.type == "computer_20241022" and tool.computer_20241022: function = tool.computer_20241022 tool = { "type": tool.type, "function": { "name": tool.name, "parameters": { k: v for k, v in function.model_dump().items() if k not in ["name", "type"] }, }, } formatted_tools.append(tool) # For non-Claude models, we don't need to send tools # AIDEV-TODO: Enable formatted_tools once format-tools PR is merged. # FIXME: Enable formatted_tools once format-tools PR is merged. if not is_claude_model: formatted_tools = None # AIDEV-HOTFIX: for groq calls, litellm expects tool_calls_id not to be in the messages. # AIDEV-FIXME: This is a temporary fix. We need to update the agent-api to use the new tool calling format. # HOTFIX: for groq calls, litellm expects tool_calls_id not to be in the messages # FIXME: This is a temporary fix. We need to update the agent-api to use the new tool calling format # AIDEV-TODO: Enable formatted_tools once format-tools PR is merged. # FIXME: Enable formatted_tools once format-tools PR is merged. is_groq_model = agent_model.lower().startswith("llama-3.1") if is_groq_model: prompt = [ { k: v for k, v in message.items() if k not in ["tool_calls", "tool_call_id", "user", "continue_", "name"] } for message in prompt ] # Remove None values from passed_settings (avoid overwriting agent's settings) passed_settings = {k: v for k, v in passed_settings.items() if v is not None} # Use litellm for other models completion_data: dict = { "model": agent_model, "tools": formatted_tools or None, "messages": prompt, **agent_default_settings, **passed_settings, } extra_body = { "cache": {"no-cache": debug or context.current_step.disable_cache}, } response: ModelResponse = await litellm.acompletion( **completion_data, extra_body=extra_body, ) if context.current_step.unwrap: if len(response.choices) != 1: msg = "Only one choice is supported" raise ApplicationError(msg) choice = response.choices[0] if choice.finish_reason == "tool_calls": msg = "Tool calls cannot be unwrapped" raise ApplicationError(msg) return StepOutcome( output=choice.message.content, next=None, ) # AIDEV-NOTE: Re-convert tool-calls from LLM response back to internal integration/system call format if needed. # Re-convert tool-calls to integration/system calls if needed response_as_dict = response.model_dump() for choice in response_as_dict["choices"]: if choice["finish_reason"] == "tool_calls": calls = choice["message"]["tool_calls"] for call in calls: call_name = call["function"]["name"] call_args = call["function"]["arguments"] original_tool = tools_mapping.get(call_name) if not original_tool: msg = f"Tool {call_name} not found" raise ApplicationError(msg) if original_tool.type == "function": continue call.pop("function") call["type"] = original_tool.type call[original_tool.type] = { "name": call_name, "arguments": call_args, } return StepOutcome( output=response_as_dict, next=None, ) ================================================ FILE: src/agents-api/agents_api/activities/task_steps/raise_complete_async.py ================================================ import base64 from typing import Any from beartype import beartype from temporalio import activity from ...autogen.openapi_model import CreateTransitionRequest from ...common.protocol.tasks import StepContext from .transition_step import original_transition_step @activity.defn @beartype async def raise_complete_async(context: StepContext, output: Any) -> None: activity_info = activity.info() captured_token = base64.b64encode(activity_info.task_token).decode("ascii") activity_id = activity_info.activity_id workflow_run_id = activity_info.workflow_run_id workflow_id = activity_info.workflow_id transition_info = CreateTransitionRequest( current=context.cursor, type="wait", next=None, output=output, task_token=captured_token, metadata={ "x-activity-id": activity_id, "x-run-id": workflow_run_id, "x-workflow-id": workflow_id, }, ) await original_transition_step(context, transition_info) activity.raise_complete_async() ================================================ FILE: src/agents-api/agents_api/activities/task_steps/tool_call_step.py ================================================ # AIDEV-NOTE: This module provides helper functions for generating tool call IDs and constructing tool call objects. import base64 import secrets from ...autogen.openapi_model import CreateToolRequest, Tool # AIDEV-TODO: This function for generating call IDs should be moved to a more appropriate location. # FIXME: This shouldn't be here. def generate_call_id() -> str: # Generate 18 random bytes (which will result in 24 base64 characters) random_bytes = secrets.token_bytes(18) # Encode to base64 and remove padding base64_string = base64.urlsafe_b64encode(random_bytes).decode("ascii").rstrip("=") # Add the "call_" prefix return f"call_{base64_string}" # AIDEV-TODO: Refactor this function for constructing tool calls and move it to a more appropriate location. # FIXME: This shouldn't be here, and shouldn't be done this way. Should be refactored. # AIDEV-NOTE: Constructs a dictionary representing a tool call based on the tool definition and arguments. def construct_tool_call(tool: CreateToolRequest | Tool, arguments: dict, call_id: str) -> dict: return { tool.type: { "arguments": arguments, "name": tool.name, } if tool.type != "system" else { "resource": tool.system and tool.system.resource, "operation": tool.system and tool.system.operation, "resource_id": tool.system and tool.system.resource_id, "subresource": tool.system and tool.system.subresource, "arguments": arguments, }, "id": call_id, "type": tool.type, } ================================================ FILE: src/agents-api/agents_api/activities/task_steps/transition_step.py ================================================ import asyncio from typing import cast from beartype import beartype from fastapi import HTTPException from temporalio import activity from ...app import app from ...autogen.openapi_model import CreateTransitionRequest, Transition from ...clients.temporal import get_workflow_handle from ...common.protocol.tasks import ExecutionInput, StepContext from ...env import temporal_activity_after_retry_timeout from ...exceptions import LastErrorInput, TooManyRequestsError from ...queries.executions.create_execution_transition import ( create_execution_transition, ) @beartype async def transition_step( context: StepContext, transition_info: CreateTransitionRequest, last_error: BaseException | None = None, ) -> Transition: from ...workflows.task_execution import TaskExecutionWorkflow activity_info = activity.info() wf_handle = await get_workflow_handle(handle_id=activity_info.workflow_id) if last_error is not None: await asyncio.sleep(temporal_activity_after_retry_timeout) await wf_handle.signal( TaskExecutionWorkflow.set_last_error, LastErrorInput(last_error=None), ) if not isinstance(context.execution_input, ExecutionInput): msg = "Expected ExecutionInput type for context.execution_input" raise TypeError(msg) if not context.execution_input.execution: msg = "Execution is required in execution_input" raise ValueError(msg) # AIDEV-NOTE: assert that execution is not None for type checker execution = context.execution_input.execution assert execution is not None # Create transition try: transition = await create_execution_transition( developer_id=context.execution_input.developer_id, execution_id=execution.id, data=transition_info, task_token=transition_info.task_token, connection_pool=app.state.postgres_pool, ) except Exception as e: if isinstance(e, HTTPException) and cast(HTTPException, e).status_code == 429: await wf_handle.signal( TaskExecutionWorkflow.set_last_error, LastErrorInput(last_error=TooManyRequestsError()), ) raise e return transition # NOTE: Here because needed by a different step original_transition_step = transition_step transition_step = activity.defn(transition_step) ================================================ FILE: src/agents-api/agents_api/activities/tool_executor.py ================================================ import json import logging from typing import Any from temporalio import activity from ..autogen.openapi_model import ( ToolExecutionResult, WebPreviewToolCall, ) from ..clients.integrations import run_integration_service from ..env import brave_api_key logger = logging.getLogger(__name__) async def execute_web_search_tool(tool_call: WebPreviewToolCall) -> ToolExecutionResult: """ Execute a web search tool call using the Brave search integration. Args: tool_call: The web search tool call with query details Returns: ToolExecutionResult containing the search results """ try: # Get the query from wherever it might be in the tool call query = tool_call.query if not query: return ToolExecutionResult( id=tool_call.id, output={}, error="No search query found in the web search tool call", ) # Map WebSearchTool to Brave search integration brave_args = { "query": query, } # Execute the Brave search integration # Note: Brave API key must be configured in environment variables result = await run_integration_service( provider="brave", setup={"brave_api_key": brave_api_key}, arguments=brave_args, method="search", ) # Convert result to BraveSearchOutput format search_results = [ { "title": r.get("title", ""), "link": r.get("link", ""), "snippet": r.get("snippet", ""), } for r in result.get("result", []) ] formatted_result = {"result": search_results} return ToolExecutionResult( id=tool_call.id, output=formatted_result, name=tool_call.name ) except Exception as e: if activity.in_activity(): activity.logger.error(f"Error in execute_web_search_tool: {e}") raise async def execute_tool_call(tool_call: dict[str, Any]) -> ToolExecutionResult: """ Execute a single tool call based on its type and return the result. Args: tool_call: The tool call to execute (dict) Returns: ToolExecutionResult containing the output or error """ # Initialize defaults tool_id = "" tool_name = None tool_type = "" try: tool_id = tool_call.get("id", "") tool_type = tool_call.get("type", "") # Get function name if present if "function" in tool_call and isinstance(tool_call["function"], dict): tool_name = tool_call["function"].get("name") # Handle web search tools if tool_type == "web_search_preview": # Extract query directly for web_search_preview type query = tool_call.get("query", "") web_search_call = WebPreviewToolCall(id=tool_id, query=query, name=tool_name) return await execute_web_search_tool(web_search_call) if tool_type == "function": # Extract function data func_data = tool_call.get("function", {}) if not func_data: return ToolExecutionResult( id=tool_id, name=tool_name, output={}, error="Function call missing function details", ) # Extract function name if not already set if not tool_name: if isinstance(func_data, dict): tool_name = func_data.get("name") else: tool_name = getattr(func_data, "name", None) # Handle web search function if tool_name == "web_search_preview": # Parse arguments args = {} arguments_str = "" if isinstance(func_data, dict): arguments_str = func_data.get("arguments", "") else: arguments_str = getattr(func_data, "arguments", "") if arguments_str: try: args = json.loads(arguments_str) except json.JSONDecodeError: raise # Get query from arguments query = args.get("query", "") if not query: return ToolExecutionResult( id=tool_id, name=tool_name, output={}, error="No search query found in the web search function call", ) web_search_call = WebPreviewToolCall(id=tool_id, query=query, name=tool_name) return await execute_web_search_tool(web_search_call) # Unsupported tool type return ToolExecutionResult( id=tool_id, name=tool_name, output={}, error=f"Unsupported tool call type: {tool_type}", ) except Exception as e: if activity.in_activity(): tool_info = f"{tool_type}" if tool_name: tool_info += f".{tool_name}" activity.logger.error(f"Error in execute_tool_call {tool_info}: {e}") raise def format_tool_results_for_llm(result: ToolExecutionResult) -> dict[str, Any]: """ Format tool execution results into a structure suitable for sending back to the LLM. Args: result: Tool execution result Returns: Formatted tool result for the LLM """ # Create base structure formatted_result = { "role": "tool", "tool_call_id": result.id, "name": result.name, } # Add content based on whether there was an error if result.error: formatted_result["content"] = json.dumps({"error": result.error}) else: # Handle serialization with custom JSON encoder try: if isinstance(result.output, dict): formatted_result["content"] = json.dumps( result.output, default=lambda o: str(o) ) else: formatted_result["content"] = str(result.output) except Exception as e: formatted_result["content"] = json.dumps({ "error": f"Failed to serialize tool output: {e!s}" }) logger.error(f"Failed to serialize tool output: {e!s}") return formatted_result ================================================ FILE: src/agents-api/agents_api/app.py ================================================ import os from contextlib import asynccontextmanager from typing import Protocol from temporalio import workflow with workflow.unsafe.imports_passed_through(): from aiobotocore.client import AioBaseClient from aiobotocore.session import get_session from asyncpg.pool import Pool from fastapi import APIRouter, FastAPI from prometheus_fastapi_instrumentator import Instrumentator from scalar_fastapi import get_scalar_api_reference from .clients.pg import create_db_pool from .env import api_prefix, hostname, pool_max_size, protocol, public_port class State(Protocol): postgres_pool: Pool | None s3_client: AioBaseClient | None class ObjectWithState(Protocol): state: State # TODO: This currently doesn't use env.py, we should move to using them @asynccontextmanager async def lifespan(container: FastAPI | ObjectWithState): # INIT POSTGRES # pg_dsn = os.environ.get("PG_DSN") pool = await create_db_pool(pg_dsn, max_size=pool_max_size, min_size=min(pool_max_size, 10)) if hasattr(container, "state") and not getattr(container.state, "postgres_pool", None): container.state.postgres_pool = pool # INIT S3 # s3_access_key = os.environ.get("S3_ACCESS_KEY") s3_secret_key = os.environ.get("S3_SECRET_KEY") s3_endpoint = os.environ.get("S3_ENDPOINT") if hasattr(container, "state") and not getattr(container.state, "s3_client", None): session = get_session() container.state.s3_client = await session.create_client( "s3", aws_access_key_id=s3_access_key, aws_secret_access_key=s3_secret_key, endpoint_url=s3_endpoint, ).__aenter__() try: yield finally: # CLOSE POSTGRES # if hasattr(container, "state") and getattr(container.state, "postgres_pool", None): pool = getattr(container.state, "postgres_pool", None) if pool: await pool.close() container.state.postgres_pool = None # CLOSE S3 # if hasattr(container, "state") and getattr(container.state, "s3_client", None): s3_client = getattr(container.state, "s3_client", None) if s3_client: await s3_client.close() container.state.s3_client = None app: FastAPI = FastAPI( docs_url="/swagger", openapi_prefix=api_prefix, redoc_url=None, title="Julep Agents API", description="API for Julep Agents", version="0.4.0", terms_of_service="https://www.julep.ai/terms", contact={ "name": "Julep", "url": "https://www.julep.ai", "email": "developers@julep.ai", }, root_path=api_prefix, lifespan=lifespan, ) # Enable metrics Instrumentator(excluded_handlers=["/metrics", "/docs", "/openapi.json"]).instrument(app).expose( app, include_in_schema=False, ) # Create a new router for the docs scalar_router = APIRouter() @scalar_router.get("/docs", include_in_schema=False) async def scalar_html(): return get_scalar_api_reference( openapi_url=app.openapi_url[1:], # Remove leading '/' title=app.title, servers=[{"url": f"{protocol}://{hostname}:{public_port}{api_prefix}"}], ) # Add the docs_router without dependencies app.include_router(scalar_router) # TODO: Implement correct content-length validation (using streaming and chunked transfer encoding) # NOTE: This relies on client reporting the correct content-length header # @app.middleware("http") # async def validate_content_length( # request: Request, # call_next: Callable[[Request], Coroutine[Any, Any, Response]], # ): # content_length = request.headers.get("content-length") # if not content_length: # return Response(status_code=411, content="Content-Length header is required") # if int(content_length) > max_payload_size: # return Response(status_code=413, content="Payload too large") # return await call_next(request) ================================================ FILE: src/agents-api/agents_api/autogen/.ignore ================================================ *.py !openapi_model.py ================================================ FILE: src/agents-api/agents_api/autogen/AGENTS.md ================================================ # AGENTS.md - autogen This folder contains auto-generated code in `agents-api` from TypeSpec and OpenAPI. Key Points - Do NOT edit files here manually; they are overwritten on regeneration. - Regenerate via `bash scripts/generate_openapi_code.sh` from the project root. - Source-of-truth TypeSpec definitions reside in the `typespec/` directory. - Ensure version compatibility between TypeSpec plugin and codegen scripts. ## Purpose - Auto-generated API client code from OpenAPI specifications - Provides type-safe models for API resources - Generated from TypeSpec definitions (in typespec/ directory) ## Key Components ### openapi_model.py - Pydantic models for all API resources - Request/response schemas - Type definitions and validations ### Resource Models - `Agents.py`: Agent definitions and configurations - `Tasks.py`: Task specifications and step definitions - `Executions.py`: Execution tracking and state - `Sessions.py`: Chat session management - `Tools.py`: Tool definitions and schemas ### Shared Models - `Common.py`: Shared types and utilities ## Model Hierarchy - Base models define common fields (id, created_at, etc.) - Request models for API inputs - Response models for API outputs - Specialized models for different step types (evaluate, tool, prompt, etc.) ## Usage Pattern 1. Import from autogen.openapi_model 2. Use models for request/response validation 3. Models automatically handle serialization/deserialization ## Important Models - `TaskSpecDef`: Complete task specification for execution - `WorkflowStep`: Individual step in a workflow - `ApiCallDef`, `PromptDef`: Tool type definitions - `ExecutionStatus`: State machine status values ================================================ FILE: src/agents-api/agents_api/autogen/Agents.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class Agent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = ( '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' ) """ Default system template for all sessions created by this agent """ class CreateAgentRequest(BaseModel): """ Payload for creating a agent (and associated documents) """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = ( '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' ) """ Default system template for all sessions created by this agent """ class CreateOrUpdateAgentRequest(CreateAgentRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = ( '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' ) """ Default system template for all sessions created by this agent """ class ListModelsResponse(BaseModel): """ Response for the list models endpoint """ model_config = ConfigDict( populate_by_name=True, ) models: list[ModelInfo] """ List of available models """ class ModelInfo(BaseModel): """ Model information returned by the model list endpoint """ model_config = ConfigDict( populate_by_name=True, ) id: str """ The ID/name of the model """ class PatchAgentRequest(BaseModel): """ Payload for patching a agent """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = ( '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' ) """ Default system template for all sessions created by this agent """ class UpdateAgentRequest(BaseModel): """ Payload for updating a agent """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = ( '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' ) """ Default system template for all sessions created by this agent """ ================================================ FILE: src/agents-api/agents_api/autogen/Chat.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Common import LogitBias from .Docs import DocReference from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, CreateToolRequest, NamedToolChoice, ) class BaseChatOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) index: int finish_reason: Literal["stop", "length", "content_filter", "tool_calls"] = "stop" """ The reason the model stopped generating tokens """ logprobs: LogProbResponse | None = None """ The log probabilities of tokens """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = None """ The tool calls generated by the model """ class BaseChatResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) usage: CompletionUsage | None = None """ Usage statistics for the completion request """ jobs: Annotated[list[UUID], Field(json_schema_extra={"readOnly": True})] = [] """ Background job IDs that may have been spawned from this interaction. """ docs: Annotated[list[DocReference], Field(json_schema_extra={"readOnly": True})] = ( [] ) """ Documents referenced for this request (for citation purposes). """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class BaseTokenLogProb(BaseModel): model_config = ConfigDict( populate_by_name=True, ) token: str logprob: float """ The log probability of the token """ bytes: list[int] | None = None class ChatInputData(BaseModel): model_config = ConfigDict( populate_by_name=True, ) messages: Annotated[list[Message], Field(min_length=1)] """ A list of new input messages comprising the conversation so far. """ tools: list[CreateToolRequest] | None = None """ (Advanced) List of tools that are provided in addition to agent's default set of tools. """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ Can be one of existing tools given to the agent earlier or the ones provided in this request. """ class ChatOutputChunk(BaseChatOutput): """ Streaming chat completion output """ model_config = ConfigDict( populate_by_name=True, ) delta: Delta """ The message generated by the model """ class ChunkChatResponse(BaseChatResponse): model_config = ConfigDict( populate_by_name=True, ) choices: list[ChatOutputChunk] """ The deltas generated by the model """ class CompletionUsage(BaseModel): """ Usage statistics for the completion request """ model_config = ConfigDict( populate_by_name=True, ) completion_tokens: Annotated[ int | None, Field(json_schema_extra={"readOnly": True}) ] = None """ Number of tokens in the generated completion """ prompt_tokens: Annotated[ int | None, Field(json_schema_extra={"readOnly": True}) ] = None """ Number of tokens in the prompt """ total_tokens: Annotated[int | None, Field(json_schema_extra={"readOnly": True})] = ( None ) """ Total number of tokens used in the request (prompt + completion) """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Literal["text"] = "text" """ The type (fixed to 'text') """ class ContentItem(Content): pass class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source class ContentItemModel1(Content): pass class ContentItemModel2(ContentItemModel): pass class ContentItemModel3(Content): pass class ContentItemModel4(ContentItemModel): pass class ContentItemModel5(Content): pass class ContentItemModel6(ContentItemModel): pass class ContentModel(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] class ContentModel1(Content): pass class ContentModel2(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] class ContentModel3(Content): pass class ContentModel4(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel3] | list[ContentItemModel4] class ContentModel5(Content): pass class ContentModel6(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel5] | list[ContentItemModel6] class ContentModel7(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class Delta(BaseModel): """ The message generated by the model """ model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[ContentModel1 | ContentModel7 | ContentModel2] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class LogProbResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: Annotated[list[TokenLogProb] | None, Field(...)] """ The log probabilities of the tokens """ class Message(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[Content | ContentModel7 | ContentModel] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class MessageChatResponse(BaseChatResponse): model_config = ConfigDict( populate_by_name=True, ) choices: list[SingleChatOutput | MultipleChatOutput] """ The deltas generated by the model """ class MessageModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[ContentModel3 | ContentModel7 | ContentModel4] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ created_at: Annotated[ AwareDatetime | None, Field(json_schema_extra={"readOnly": True}) ] = None """ When this resource was created as UTC date-time """ id: Annotated[UUID | None, Field(json_schema_extra={"readOnly": True})] = None class MultipleChatOutput(BaseChatOutput): """ The output returned by the model. Note that, depending on the model provider, they might return more than one message. """ model_config = ConfigDict( populate_by_name=True, ) messages: Annotated[ list[MessageModel], Field(json_schema_extra={"readOnly": True}, min_length=1) ] class RenderResponse(ChatInputData): model_config = ConfigDict( populate_by_name=True, ) docs: Annotated[list[DocReference], Field(json_schema_extra={"readOnly": True})] = ( [] ) """ Documents referenced for this request (for citation purposes). """ class SchemaCompletionResponseFormat(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_schema"] = "json_schema" """ The format of the response """ json_schema: dict[str, Any] """ The schema of the response """ class SimpleCompletionResponseFormat(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["text", "json_object"] = "text" """ The format of the response """ class SingleChatOutput(BaseChatOutput): """ The output returned by the model. Note that, depending on the model provider, they might return more than one message. """ model_config = ConfigDict( populate_by_name=True, ) message: MessageModel class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str class TokenLogProb(BaseTokenLogProb): model_config = ConfigDict( populate_by_name=True, ) top_logprobs: Annotated[ list[BaseTokenLogProb], Field(json_schema_extra={"readOnly": True}, min_length=1), ] """ The log probabilities of the tokens """ class ChatInput(ChatInputData): model_config = ConfigDict( populate_by_name=True, ) remember: Annotated[StrictBool, Field(json_schema_extra={"readOnly": True})] = False """ DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) """ recall: StrictBool = True """ Whether previous memories and docs should be recalled or not """ save: StrictBool = True """ Whether this interaction should be stored in the session history or not """ model: Annotated[ str | None, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = None """ Identifier of the model to be used """ stream: StrictBool = False """ Indicates if the server should stream the response as it's generated """ stop: Annotated[list[str], Field(max_length=4)] = [] """ Up to 4 sequences where the API will stop generating further tokens. """ seed: Annotated[int | None, Field(ge=-1, le=1000)] = None """ If specified, the system will make a best effort to sample deterministically for that particular seed value """ max_tokens: Annotated[int | None, Field(ge=1)] = None """ The maximum number of tokens to generate in the chat completion """ logit_bias: dict[str, LogitBias] | None = None """ Modify the likelihood of specified tokens appearing in the completion """ response_format: ( SimpleCompletionResponseFormat | SchemaCompletionResponseFormat | None ) = None """ Response format (set to `json_object` to restrict output to JSON) """ agent: UUID | None = None """ Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) """ repetition_penalty: Annotated[float | None, Field(ge=0.0, le=2.0)] = None """ Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ length_penalty: Annotated[float | None, Field(ge=0.0, le=2.0)] = None """ Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. """ min_p: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Minimum probability compared to leading token to be considered """ frequency_penalty: Annotated[float | None, Field(ge=-2.0, le=2.0)] = None """ Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ presence_penalty: Annotated[float | None, Field(ge=-2.0, le=2.0)] = None """ Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ temperature: Annotated[float | None, Field(ge=0.0, le=5.0)] = None """ What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. """ top_p: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. """ metadata: dict[str, Any] | None = None auto_run_tools: StrictBool = False """ Whether to automatically run tools and send the results back to the model (requires tools or agents with tools). """ recall_tools: StrictBool = True """ Whether to include tool requests and responses when recalling messages. """ ================================================ FILE: src/agents-api/agents_api/autogen/Common.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel class Content(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=30000)] """ Contents of a document """ class JinjaTemplate(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str """ A valid jinja template. """ class Limit(RootModel[int]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[int, Field(ge=1, lt=1000)] """ Limit the number of results """ class LogitBias(RootModel[float]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[float, Field(ge=-100.0, le=100.0)] class Offset(RootModel[int]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[int, Field(ge=0)] """ Offset to apply to the results """ class PyExpression(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str """ A simple python expression compatible with SimpleEval. """ class ResourceDeletedResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: UUID """ ID of deleted resource """ deleted_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was deleted as UTC date-time """ jobs: Annotated[list[UUID], Field(json_schema_extra={"readOnly": True})] = [] """ IDs (if any) of jobs created as part of this request """ class StepLabel(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] """ A valid step label """ class Uuid(RootModel[UUID]): model_config = ConfigDict( populate_by_name=True, ) root: UUID ================================================ FILE: src/agents-api/agents_api/autogen/Docs.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Common import Content class BulkDeleteDocsRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ delete_all: StrictBool = False """ Delete all docs """ class CreateDocRequest(BaseModel): """ Payload for creating a doc """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None title: Annotated[str, Field(max_length=800)] """ Title describing what this document contains """ content: Content | list[Content] """ Contents of the document. Each string is limited to 30k characters. """ embed_instruction: str | None = None """ Instruction for the embedding model. """ class Doc(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ title: Annotated[str, Field(max_length=800)] """ Title describing what this document contains """ content: str | list[str] """ Contents of the document """ embeddings: Annotated[ list[float] | list[list[float]] | None, Field(json_schema_extra={"readOnly": True}), ] = None """ Embeddings for the document """ modality: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Modality of the document """ language: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Language of the document """ embedding_model: Annotated[ str | None, Field(json_schema_extra={"readOnly": True}) ] = None """ Embedding model used for the document """ embedding_dimensions: Annotated[ int | None, Field(json_schema_extra={"readOnly": True}) ] = None """ Dimensions of the embedding model """ class DocOwner(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: UUID role: Literal["user", "agent"] class DocReference(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None owner: DocOwner """ The owner of this document. """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] """ ID of the document """ title: str | None = None snippet: Snippet distance: float | None = None class DocSearchResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) docs: list[DocReference] """ The documents that were found """ time: Annotated[float, Field(gt=0.0)] """ The time taken to search in seconds """ class EmbedQueryResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) vectors: list[list[float]] """ The embedded vectors """ class HybridDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ text: str """ Text to use in the search """ lang: str = "en-US" """ The language to be used for text search. Support for other languages coming soon. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. """ vector: list[float] """ Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ k_multiplier: Annotated[int, Field(ge=1, le=10)] = 5 """ The k_multiplier to control how many intermediate results to fetch before final scoring """ class MultipleEmbedQueryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: Annotated[list[str], Field(max_length=100, min_length=1)] """ Texts to embed """ embed_instruction: str = "" """ Instruction for the embedding model. """ class SingleEmbedQueryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str """ Text to embed """ embed_instruction: str = "" """ Instruction for the embedding model. """ class Snippet(BaseModel): model_config = ConfigDict( populate_by_name=True, ) index: int content: str embedding: list[float] | None = None class TextOnlyDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ text: str """ Text to use in the search """ lang: str = "en-US" """ The language to be used for text search. Support for other languages coming soon. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. """ class VectorDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ vector: list[float] """ Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ ================================================ FILE: src/agents-api/agents_api/autogen/Entries.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, Tool, ToolResponse, ) class BaseEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ ChatML role (system|assistant|user|tool) """ name: str | None = None content: ( list[Content | ContentModel3 | ContentModel] | Tool | ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 | str | ToolResponse | list[ list[ContentModel1 | ContentModel3 | ContentModel2] | Tool | ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 | str | ToolResponse ] ) source: Literal[ "api_request", "api_response", "tool_request", "tool_response", "internal", "summarizer", "meta", ] tokenizer: str token_count: int model: str = "gpt-4o-mini" tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = None """ Tool calls generated by the model. """ tool_call_id: str | None = None """ The tool call id of the tool call this message is a response to """ timestamp: AwareDatetime """ This is the time that this event refers to. """ class ChatMLRole(RootModel[Literal["user", "assistant", "system", "tool"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["user", "assistant", "system", "tool"] """ ChatML role (system|assistant|user|tool) """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Literal["text"] = "text" """ The type (fixed to 'text') """ class ContentItem(Content): pass class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source class ContentItemModel1(Content): pass class ContentItemModel2(ContentItemModel): pass class ContentModel(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] class ContentModel1(Content): pass class ContentModel2(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] class ContentModel3(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class Entry(BaseEntry): model_config = ConfigDict( populate_by_name=True, ) created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class History(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: list[Entry] relations: list[Relation] session_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ class ImageDetail(RootModel[Literal["low", "high", "auto"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["low", "high", "auto"] """ Image detail level """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class Relation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) head: UUID relation: str tail: UUID class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str ================================================ FILE: src/agents-api/agents_api/autogen/Executions.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateExecutionRequest(BaseModel): """ Payload for creating an execution """ model_config = ConfigDict( populate_by_name=True, ) input: dict[str, Any] """ The input to the execution """ output: Any | None = None """ The output of the execution if it succeeded """ error: str | None = None """ The error of the execution if it failed """ transition_count: int | None = None """ The number of transitions in this execution """ metadata: dict[str, Any] | None = None class Execution(BaseModel): model_config = ConfigDict( populate_by_name=True, ) task_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] """ The ID of the task that the execution is running """ status: Annotated[ Literal[ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled", ], Field(json_schema_extra={"readOnly": True}), ] """ The status of the execution """ input: dict[str, Any] """ The input to the execution """ output: Any | None = None """ The output of the execution if it succeeded """ error: str | None = None """ The error of the execution if it failed """ transition_count: int | None = None """ The number of transitions in this execution """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class TaskTokenResumeExecutionRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal["running"] = "running" input: dict[str, Any] | None = None """ The input to resume the execution with """ class TransitionEvent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal[ "init", "init_branch", "finish", "finish_branch", "wait", "resume", "error", "step", "cancelled", ], Field(json_schema_extra={"readOnly": True}), ] output: Annotated[Any, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ class TransitionTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) workflow: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ For Unicode character safety See: https://unicode.org/reports/tr31/ See: https://www.unicode.org/reports/tr39/#Identifier_Characters """ step: int scope_id: UUID class UpdateExecutionRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal[ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled", ] class ResumeExecutionRequest(UpdateExecutionRequest): model_config = ConfigDict( populate_by_name=True, ) status: Literal["running"] = "running" input: dict[str, Any] | None = None """ The input to resume the execution with """ class StopExecutionRequest(UpdateExecutionRequest): model_config = ConfigDict( populate_by_name=True, ) status: Literal["cancelled"] = "cancelled" reason: str | None = None """ The reason for stopping the execution """ class Transition(TransitionEvent): model_config = ConfigDict( populate_by_name=True, ) execution_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] current: Annotated[TransitionTarget, Field(json_schema_extra={"readOnly": True})] next: Annotated[ TransitionTarget | None, Field(json_schema_extra={"readOnly": True}) ] step_label: Annotated[ str | None, Field( json_schema_extra={"readOnly": True}, max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$", ), ] = None """ A valid step label """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None ================================================ FILE: src/agents-api/agents_api/autogen/Files.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateFileRequest(BaseModel): """ Payload for creating a file """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ Name of the file """ description: str = "" """ Description of the file """ mime_type: str | None = None """ MIME type of the file """ content: str """ Base64 encoded content of the file """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the file """ class File(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ Name of the file """ description: str = "" """ Description of the file """ mime_type: str | None = None """ MIME type of the file """ content: str """ Base64 encoded content of the file """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the file """ size: Annotated[int, Field(ge=1, json_schema_extra={"readOnly": True})] """ Size of the file in bytes """ hash: Annotated[str, Field(json_schema_extra={"readOnly": True})] """ Hash of the file """ ================================================ FILE: src/agents-api/agents_api/autogen/Jobs.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool class JobStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the job """ reason: str = "" """ Reason for the current state of the job """ has_progress: StrictBool = False """ Whether this Job supports progress updates """ progress: Annotated[float, Field(ge=0.0, le=100.0)] = 0 """ Progress percentage """ state: Literal[ "pending", "in_progress", "retrying", "succeeded", "aborted", "failed", "unknown", ] = "pending" """ Current state of the job """ ================================================ FILE: src/agents-api/agents_api/autogen/Projects.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateProjectRequest(BaseModel): """ Payload for creating a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class PatchProjectRequest(BaseModel): """ Payload for patching a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ Display name of the project """ class Project(BaseModel): """ Project model """ model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class UpdateProjectRequest(BaseModel): """ Payload for updating a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class CreateOrUpdateProjectRequest(CreateProjectRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ ================================================ FILE: src/agents-api/agents_api/autogen/Responses.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from pydantic import BaseModel, ConfigDict, Field, RootModel, StrictBool class BaseTool(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: str class Click(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["click"] = "click" """ Specifies the event type. For a click action, this property is always set to `click`. """ button: Literal["left", "right", "wheel", "back", "forward"] """ Indicates which mouse button was pressed during the click. One of `left`, `right`, `wheel`, `back`, or `forward`. """ x: int """ The x-coordinate where the click occurred. """ y: int """ The y-coordinate where the click occurred. """ class ComputerScreenshotImage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_screenshot"] = "computer_screenshot" """ Specifies the event type. For a computer screenshot, this property is always set to `computer_screenshot`. """ image_url: str | None = None """ The URL of the screenshot image. """ file_id: str | None = None """ The identifier of an uploaded file that contains the screenshot. """ class ComputerTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_use_preview"] = "computer_use_preview" """ The type of the computer use tool. Always `computer_use_preview`. """ display_width: float """ The width of the computer display. """ display_height: float """ The height of the computer display. """ environment: Literal["mac", "windows", "ubuntu", "browser"] """ The type of computer environment to control. """ class ComputerToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_call"] = "computer_call" """ The type of the computer call. Always `computer_call`. """ id: str """ The unique ID of the computer call. """ call_id: str """ An identifier used when responding to the tool call with output. """ action: ( Click | DoubleClick | Drag | KeyPress | Move | Screenshot | Scroll | Type | Wait ) """ The action to perform. """ pending_safety_checks: list[ComputerToolCallSafetyCheck] """ The pending safety checks for the computer call. """ status: Literal["in_progress", "completed", "incomplete"] """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class ComputerToolCallOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_call_output"] = "computer_call_output" """ The type of the computer tool call output. Always `computer_call_output`. """ id: str | None = None """ The ID of the computer tool call output. """ call_id: str """ The ID of the computer tool call that produced the output. """ acknowledged_safety_checks: list[ComputerToolCallSafetyCheck] | None = None """ The safety checks reported by the API that have been acknowledged by the developer. """ output: ComputerScreenshotImage """ The output screenshot image. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the message input. One of `in_progress`, `completed`, or `incomplete`. Populated when input items are returned via API. """ class ComputerToolCallOutputResource(ComputerToolCallOutput): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the computer call tool output. """ class ComputerToolCallSafetyCheck(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The ID of the pending safety check. """ code: str """ The type of the pending safety check. """ message: str """ Details about the pending safety check. """ class Coordinate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) x: int """ The x-coordinate. """ y: int """ The y-coordinate. """ class CreateResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) model: str input: ( str | list[ EasyInputMessage | Item | InputMessageResource | OutputMessage | FileSearchToolCall | ComputerToolCall | ComputerToolCallOutputResource | WebSearchToolCall | FunctionToolCall | FunctionToolCallOutputResource ] ) include: ( list[ Literal[ "file_search_call.results", "message.input_image.image_url", "computer_call_output.output.image_url", ] ] | None ) = None parallel_tool_calls: StrictBool = True store: StrictBool = True stream: StrictBool = False max_tokens: int | None = None temperature: float = 1 top_p: float = 1 n: int | None = None stop: str | list[str] | None = None presence_penalty: float | None = None frequency_penalty: float | None = None logit_bias: dict[str, Any] | None = None user: str | None = None instructions: str | None = None previous_response_id: str | None = None reasoning: Reasoning | None = None text: Text | None = None tool_choice: Literal["auto", "none"] | ToolChoice | None = None tools: list[FunctionTool | WebSearchTool | FileSearchTool | ComputerTool] | None = ( None ) truncation: Literal["disabled", "auto"] | None = None metadata: dict[str, Any] | None = None class DoubleClick(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["double_click"] = "double_click" """ Specifies the event type. For a double click action, this property is always set to `double_click`. """ x: int """ The x-coordinate where the double click occurred. """ y: int """ The y-coordinate where the double click occurred. """ class Drag(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["drag"] = "drag" """ Specifies the event type. For a drag action, this property is always set to `drag`. """ path: list[Coordinate] """ An array of coordinates representing the path of the drag action. """ class EasyInputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "developer"] """ The role of the message input. One of `user`, `assistant`, `system`, or `developer`. """ content: str | list[InputText | InputImage | InputFile] """ Text, image, or audio input to the model, used to generate a response. Can also contain previous assistant responses. """ type: Literal["message"] = "message" """ The type of the message input. Always `message`. """ class FileCitation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_citation"] = "file_citation" """ The type of the file citation. Always `file_citation`. """ index: int """ The index of the file in the list of files. """ file_id: str """ The ID of the file. """ class FilePath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_path"] = "file_path" """ The type of the file path. Always `file_path`. """ file_id: str """ The ID of the file. """ index: int """ The index of the file in the list of files. """ class FileSearchTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_search"] = "file_search" filters: Any | None = None max_num_results: int | None = None ranking_options: RankingOptions | None = None vector_store_ids: list[str] class FileSearchToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the file search tool call. """ type: Literal["file_search_call"] = "file_search_call" """ The type of the file search tool call. Always `file_search_call`. """ status: Literal["in_progress", "searching", "completed", "incomplete", "failed"] """ The status of the file search tool call. One of `in_progress`, `searching`, `incomplete` or `failed` """ queries: list[str] """ The queries used to search for files. """ results: list[Result] | None = None """ The results of the file search tool call. """ class Function(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class FunctionTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" name: str description: str | None = None parameters: dict[str, Any] strict: StrictBool | None = None class FunctionToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the function tool call. """ type: Literal["function_call"] = "function_call" """ The type of the function tool call. Always `function_call`. """ call_id: str """ The unique ID of the function tool call generated by the model. """ name: str """ The name of the function to run. """ arguments: str """ A JSON string of the arguments to pass to the function. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class FunctionToolCallOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None """ The unique ID of the function tool call output. Populated when this item is returned via API. """ type: Literal["function_call_output"] = "function_call_output" """ The type of the function tool call output. Always `function_call_output`. """ call_id: str """ The unique ID of the function tool call generated by the model. """ output: str """ A JSON string of the output of the function tool call. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class FunctionToolCallOutputResource(FunctionToolCallOutput): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None """ The unique ID of the function call tool output. """ class IncompleteDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reason: Literal["max_output_tokens", "content_filter"] class InputFile(BaseModel): """ A file input to the model. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_file"] = "input_file" """ The type of the input item. Always `input_file`. """ file_id: str | None = None """ The ID of the file to be sent to the model. """ filename: str | None = None """ The name of the file to be sent to the model. """ file_data: str | None = None """ The content of the file to be sent to the model. """ class InputImage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_image"] = "input_image" """ The type of the input item. Always `input_image`. """ image_url: str | None = None """ The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL. """ file_id: str | None = None """ The ID of the file to be sent to the model. """ detail: Literal["high", "low", "auto"] = "auto" """ The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`. Defaults to `auto`. """ class InputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["message"] = "message" role: Literal["user", "assistant", "system", "developer"] status: Literal["in_progress", "completed", "incomplete"] content: list[InputText | InputImage | InputFile] class InputMessageResource(InputMessage): model_config = ConfigDict( populate_by_name=True, ) id: str class InputText(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_text"] = "input_text" """ The type of the input item. Always `input_text`. """ text: str """ The text input to the model. """ class InputTokensDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cached_tokens: int class Item(BaseModel): """ An item representing part of the context for the response to be generated by the model. Can contain text, images, and audio inputs, as well as previous assistant responses and tool call outputs. """ model_config = ConfigDict( populate_by_name=True, ) type: str class KeyPress(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["keypress"] = "keypress" """ Specifies the event type. For a keypress action, this property is always set to `keypress`. """ keys: list[str] """ The combination of keys the model is requesting to be pressed. This is an array of strings, each representing a key. """ class Move(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["move"] = "move" """ Specifies the event type. For a move action, this property is always set to `move`. """ x: int """ The x-coordinate to move to. """ y: int """ The y-coordinate to move to. """ class OutputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str type: Literal["message"] = "message" role: Literal["user", "assistant", "system", "developer"] status: Literal["in_progress", "completed", "incomplete"] content: list[OutputText | Refusal] class OutputText(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["output_text"] = "output_text" """ The type of the output text. Always `output_text`. """ text: str """ The text output from the model. """ annotations: list[FileCitation | UrlCitation | FilePath] """ The annotations of the text output. """ class OutputTokensDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reasoning_tokens: int class RankingOptions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ranker: Literal["auto"] | None = None score_threshold: float | None = None class Reasoning(BaseModel): """ Reasoning configuration options for o-series models. """ model_config = ConfigDict( populate_by_name=True, ) effort: Literal["low", "medium", "high"] """ Constraint effort on reasoning models. """ generate_summary: Literal["concise", "detailed"] | None = None """ A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. One of `concise` or `detailed`. """ class ReasoningContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["reasoning_summary"] = "reasoning_summary" """ The type of the object. Always `text`. """ text: str """ A short summary of the reasoning used by the model when generating the response. """ class ReasoningItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["reasoning"] = "reasoning" """ The type of the object. Always `reasoning`. """ id: str """ The unique identifier of the reasoning content. """ content: list[ReasoningContent] """ Reasoning text contents. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class Refusal(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["refusal"] = "refusal" """ The type of the refusal. Always `refusal`. """ refusal: str """ The refusal explanation from the model. """ class Response(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str object: Literal["response"] = "response" created_at: int status: Literal["completed", "failed", "in_progress", "incomplete"] error: ResponseError | None = None incomplete_details: IncompleteDetails | None = None instructions: str | None = None max_output_tokens: int | None = None model: str output: list[ OutputMessage | FileSearchToolCall | FunctionToolCall | WebSearchToolCall | ComputerToolCall | ReasoningItem ] parallel_tool_calls: StrictBool = True previous_response_id: str | None = None reasoning: Reasoning | None = None store: StrictBool = True temperature: float = 1 text: Text | None = None tool_choice: ( ToolChoiceTypes | ToolChoiceFunction | Literal["auto", "none", "required"] ) tools: list[FunctionTool | WebSearchTool | FileSearchTool | ComputerTool] top_p: float = 1 truncation: Literal["disabled", "auto"] usage: ResponseUsage user: str | None = None metadata: dict[str, Any] class ResponseError(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str type: str param: str | None = None code: str | None = None class ResponseFormatJsonObject(BaseModel): """ JSON object response format. An older method of generating JSON responses. Using `json_schema` is recommended for models that support it. Note that the model will not generate JSON without a system or user message instructing it to do so. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_object"] = "json_object" """ The type of response format being defined. Always `json_object`. """ class ResponseFormatText(BaseModel): """ Default response format. Used to generate text responses. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["text"] = "text" """ The type of response format being defined. Always `text`. """ class ResponseUsage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) input_tokens: int input_tokens_details: InputTokensDetails output_tokens: int output_tokens_details: OutputTokensDetails total_tokens: int class Result(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_id: str """ The unique ID of the file. """ text: str """ The text that was retrieved from the file. """ filename: str """ The name of the file. """ attributes: VectorStoreFileAttributes """ The attributes of the file. """ score: float """ The relevance score of the file - a value between 0 and 1. """ class Screenshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["screenshot"] = "screenshot" """ Specifies the event type. For a screenshot action, this property is always set to `screenshot`. """ class Scroll(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["scroll"] = "scroll" """ Specifies the event type. For a scroll action, this property is always set to `scroll`. """ x: int """ The x-coordinate where the scroll occurred. """ y: int """ The y-coordinate where the scroll occurred. """ scroll_x: int """ The horizontal scroll distance. """ scroll_y: int """ The vertical scroll distance. """ class Text(BaseModel): model_config = ConfigDict( populate_by_name=True, ) format: ResponseFormatText | TextResponseFormatJsonSchema | ResponseFormatJsonObject class TextResponseFormatJsonSchema(BaseModel): """ JSON Schema response format. Used to generate structured JSON responses. Learn more about [Structured Outputs](/docs/guides/structured-outputs). """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_schema"] = "json_schema" """ The type of response format being defined. Always `json_schema`. """ description: str | None = None """ A description of what the response format is for, used by the model to determine how to respond in the format. """ name: str | None = None """ The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. """ schema_: Annotated[dict[str, Any], Field(alias="schema")] """ The JSON schema that defines the structure of the response. """ strict: StrictBool = False """ Whether to enable strict schema adherence when generating the output. If set to true, the model will always follow the exact schema defined in the `schema` field. Only a subset of JSON Schema is supported when `strict` is `true`. To learn more, read the [Structured Outputs guide](/docs/guides/structured-outputs). """ class ToolChoice(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" function: Function class ToolChoiceFunction(BaseModel): """ Use this option to force the model to call a specific function. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" """ For function calling, the type is always `function`. """ name: str """ The name of the function to call. """ class ToolChoiceTypes(BaseModel): """ Indicates that the model should use a built-in tool to generate a response. [Learn more about built-in tools](/docs/guides/tools). """ model_config = ConfigDict( populate_by_name=True, ) type: Literal[ "file_search", "web_search_preview", "computer_use_preview", "web_search_preview_2025_03_11", ] """ The type of hosted tool the model should to use. Learn more about [built-in tools](/docs/guides/tools). Allowed values are: - `file_search` - `web_search_preview` - `computer_use_preview` """ class Type(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["type"] = "type" """ Specifies the event type. For a type action, this property is always set to `type`. """ text: str """ The text to type. """ class UrlCitation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) url: str """ The URL of the web resource. """ title: str """ The title of the web resource. """ type: Literal["url_citation"] = "url_citation" """ The type of the URL citation. Always `url_citation`. """ start_index: int """ The index of the first character of the URL citation in the message. """ end_index: int """ The index of the last character of the URL citation in the message. """ class UserLocation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["approximate"] = "approximate" city: str | None = None country: str | None = None region: str | None = None timezone: str | None = None class VectorStoreFileAttributes(BaseModel): """ Set of key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters, booleans, or numbers. """ model_config = ConfigDict( populate_by_name=True, ) properties: dict[str, VectorStoreFileAttributesString | StrictBool | float] """ Key-value pairs where keys are strings with max length 64 and values are strings with max length 512, booleans, or numbers. """ class VectorStoreFileAttributesString(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=512)] class Wait(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["wait"] = "wait" """ Specifies the event type. For a wait action, this property is always set to `wait`. """ class WebSearchTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["web_search_preview"] = "web_search_preview" domains: list[str] | None = None search_context_size: Literal["small", "medium", "large"] | None = None user_location: UserLocation | None = None class WebSearchToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the web search tool call. """ type: Literal["web_search_call"] = "web_search_call" """ The type of the web search tool call. Always `web_search_call`. """ status: Literal["in_progress", "searching", "completed", "failed"] """ The status of the web search tool call. """ ================================================ FILE: src/agents-api/agents_api/autogen/Secrets.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateSecretRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: str """ Name of the secret """ description: str | None = None """ Description of what the secret is used for """ value: str """ The decrypted secret value """ class Secret(BaseModel): """ A secret that can be used in tasks and sessions """ model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None name: str """ Name of the secret """ description: str | None = None """ Description of what the secret is used for """ value: str """ The decrypted secret value """ class UpdateSecretRequest(CreateSecretRequest): pass ================================================ FILE: src/agents-api/agents_api/autogen/Sessions.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool class BaseDocSearch(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ lang: str = "en-US" """ The language to be used for text-only search. Support for other languages coming soon. """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ num_search_messages: Annotated[int, Field(ge=1, le=50)] = 4 """ The number of search messages to use for the search. """ max_query_length: Annotated[int, Field(ge=100, le=10000)] = 1000 """ The maximum query length to use for the search. """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ class BaseDocSearchUpdate(BaseDocSearch): pass class CreateSessionRequest(BaseModel): """ Payload for creating a session """ model_config = ConfigDict( populate_by_name=True, ) user: UUID | None = None """ User ID of user associated with this session """ users: list[UUID] | None = None agent: UUID | None = None """ Agent ID of agent associated with this session """ agents: list[UUID] | None = None situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class HybridDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["hybrid"] = "hybrid" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ k_multiplier: Annotated[int, Field(ge=0)] = 7 """ The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring """ class HybridDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["hybrid"] = "hybrid" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ k_multiplier: Annotated[int, Field(ge=0)] = 7 """ The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring """ class PatchSessionRequest(BaseModel): """ Payload for patching a session """ model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: ( VectorDocSearchUpdate | TextOnlyDocSearchUpdate | HybridDocSearchUpdate | None ) = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class Session(BaseModel): model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ summary: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Summary (null at the beginning) - generated automatically after every interaction """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ kind: str | None = None """ Discriminator property for Session. """ class SingleAgentMultiUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID users: Annotated[list[UUID], Field(min_length=2)] class SingleAgentNoUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID class SingleAgentSingleUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID user: UUID class TextOnlyDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["text"] = "text" """ The mode to use for the search. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ class TextOnlyDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["text"] = "text" """ The mode to use for the search. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ class UpdateSessionRequest(BaseModel): """ Payload for updating a session """ model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class VectorDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["vector"] = "vector" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ class VectorDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["vector"] = "vector" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ class CreateOrUpdateSessionRequest(CreateSessionRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID user: UUID | None = None """ User ID of user associated with this session """ users: list[UUID] | None = None agent: UUID | None = None """ Agent ID of agent associated with this session """ agents: list[UUID] | None = None situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class MultiAgentMultiUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] users: Annotated[list[UUID], Field(min_length=2)] class MultiAgentNoUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] class MultiAgentSingleUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] user: UUID ================================================ FILE: src/agents-api/agents_api/autogen/Tasks.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Common import JinjaTemplate from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, CreateToolRequest, NamedToolChoice, ) class CaseThen(BaseModel): model_config = ConfigDict( populate_by_name=True, ) case: Literal["_"] | str """ The condition to evaluate """ then: ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep ) """ The steps to run if the condition is true """ class CaseThenUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) case: Literal["_"] | str """ The condition to evaluate """ then: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep ) """ The steps to run if the condition is true """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str """ A valid jinja template. """ type: Literal["text"] = "text" """ The type (fixed to 'text') """ class ContentItem(Content): pass class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source class ContentItemModel1(Content): pass class ContentItemModel2(ContentItemModel): pass class ContentModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class ContentModel1(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] class ContentModel2(Content): pass class ContentModel3(ContentModel): pass class ContentModel4(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] class CreateTaskRequest(BaseModel): """ Payload for creating a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class Else(BaseModel): """ The steps to run if the condition is false """ model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["map_reduce"], Field(json_schema_extra={"readOnly": True}) ] = "map_reduce" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ElseModel(BaseModel): """ The steps to run if the condition is false """ model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ErrorWorkflowStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["error"], Field(json_schema_extra={"readOnly": True})] = ( "error" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ error: str """ The error message """ class EvaluateStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["evaluate"], Field(json_schema_extra={"readOnly": True}) ] = "evaluate" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ evaluate: dict[str, dict[str, Any] | str] """ The expression to evaluate """ class ForeachDo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) in_: Annotated[str, Field(alias="in")] """ The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. """ do: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ class ForeachDoUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) in_: Annotated[str, Field(alias="in")] """ The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. """ do: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ class ForeachStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["foreach"], Field(json_schema_extra={"readOnly": True}) ] = "foreach" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ foreach: ForeachDo """ The steps to run for each iteration """ class ForeachStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ foreach: ForeachDoUpdateItem """ The steps to run for each iteration """ class GetStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["get"], Field(json_schema_extra={"readOnly": True})] = ( "get" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ get: str """ The key to get """ class IfElseWorkflowStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["if_else"], Field(json_schema_extra={"readOnly": True}) ] = "if_else" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ if_: Annotated[str, Field(alias="if")] """ The condition to evaluate """ then: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Then ) """ The steps to run if the condition is true """ else_: Annotated[ WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Else | None, Field(alias="else"), ] = None """ The steps to run if the condition is false """ class IfElseWorkflowStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ if_: Annotated[str, Field(alias="if")] """ The condition to evaluate """ then: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | ThenModel ) """ The steps to run if the condition is true """ else_: Annotated[ WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | ElseModel | None, Field(alias="else"), ] = None """ The steps to run if the condition is false """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class LogStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["log"], Field(json_schema_extra={"readOnly": True})] = ( "log" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ log: str """ The value to log """ class Main(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["map_reduce"], Field(json_schema_extra={"readOnly": True}) ] = "map_reduce" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class MainModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ParallelStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["parallel"], Field(json_schema_extra={"readOnly": True}) ] = "parallel" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ parallel: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ], Field(max_length=100), ] """ The steps to run in parallel. Max concurrency will depend on the platform. """ class ParallelStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ parallel: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ], Field(max_length=100), ] """ The steps to run in parallel. Max concurrency will depend on the platform. """ class PatchTaskRequest(BaseModel): """ Payload for patching a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | MainModel ] | None, Field(min_length=1), ] = None """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class PromptItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ list[str] | list[Content | ContentModel | ContentModel1] | str | None, Field(...), ] """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class PromptStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["prompt"], Field(json_schema_extra={"readOnly": True})] = ( "prompt" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ prompt: list[PromptItem] | str """ The prompt to run """ tools: Literal["all"] | list[ToolRef | CreateToolRequest] = "all" """ The tools to use for the prompt """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ The tool choice for the prompt """ settings: dict[str, Any] | None = None """ Settings for the prompt """ unwrap: StrictBool = False """ Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. """ disable_cache: StrictBool = False """ Whether to disable caching for the prompt step """ class PromptStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ prompt: list[PromptItem] | str """ The prompt to run """ tools: Literal["all"] | list[ToolRefUpdateItem | CreateToolRequest] = "all" """ The tools to use for the prompt """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ The tool choice for the prompt """ settings: dict[str, Any] | None = None """ Settings for the prompt """ unwrap: StrictBool = False """ Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. """ disable_cache: StrictBool = False """ Whether to disable caching for the prompt step """ class ReturnStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["return"], Field(json_schema_extra={"readOnly": True})] = ( "return" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ return_: Annotated[ dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str], Field(alias="return"), ] """ The value to return """ class SetStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["set"], Field(json_schema_extra={"readOnly": True})] = ( "set" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ set: dict[str, dict[str, Any] | str] """ The value to set """ class SleepFor(BaseModel): model_config = ConfigDict( populate_by_name=True, ) seconds: Annotated[int, Field(ge=0, le=60)] = 0 """ The number of seconds to sleep for """ minutes: Annotated[int, Field(ge=0, le=60)] = 0 """ The number of minutes to sleep for """ hours: Annotated[int, Field(ge=0, le=24)] = 0 """ The number of hours to sleep for """ days: Annotated[int, Field(ge=0, le=30)] = 0 """ The number of days to sleep for """ class SleepStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["sleep"], Field(json_schema_extra={"readOnly": True})] = ( "sleep" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ sleep: SleepFor """ The duration to sleep for (max 31 days) """ class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str """ A valid jinja template. """ class SwitchStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["switch"], Field(json_schema_extra={"readOnly": True})] = ( "switch" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ switch: Annotated[list[CaseThen], Field(min_length=1)] """ The cond tree """ class SwitchStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ switch: Annotated[list[CaseThenUpdateItem], Field(min_length=1)] """ The cond tree """ class Task(BaseModel): """ Object describing a Task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None class TaskTool(CreateToolRequest): model_config = ConfigDict( populate_by_name=True, ) inherited: Annotated[StrictBool, Field(json_schema_extra={"readOnly": True})] = ( False ) """ Read-only: Whether the tool was inherited or not. Only applies within tasks. """ class Then(BaseModel): """ The steps to run if the condition is true """ model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["map_reduce"], Field(json_schema_extra={"readOnly": True}) ] = "map_reduce" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ThenModel(BaseModel): """ The steps to run if the condition is true """ model_config = ConfigDict( populate_by_name=True, ) label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ToolCallStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["tool_call"], Field(json_schema_extra={"readOnly": True}) ] = "tool_call" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ tool: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ The tool to run """ arguments: dict[str, Any] | Literal["_"] = "_" """ The input parameters for the tool (defaults to last step output) """ class ToolRef(BaseModel): """ Reference to a tool """ model_config = ConfigDict( populate_by_name=True, ) ref: ToolRefById | ToolRefByName class ToolRefById(BaseModel): """ Reference to a tool by id """ model_config = ConfigDict( populate_by_name=True, ) id: str | None = None class ToolRefByName(BaseModel): """ Reference to a tool by name """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] = None """ Valid python identifier names """ class ToolRefUpdateItem(BaseModel): """ Reference to a tool """ model_config = ConfigDict( populate_by_name=True, ) class UpdateTaskRequest(BaseModel): """ Payload for updating a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class WaitForInputInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) info: dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str] """ Any additional info or data """ class WaitForInputStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ Literal["wait_for_input"], Field(json_schema_extra={"readOnly": True}) ] = "wait_for_input" """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ wait_for_input: WaitForInputInfo """ Any additional info or data """ class YieldStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["yield"], Field(json_schema_extra={"readOnly": True})] = ( "yield" ) """ The kind of step """ label: Annotated[ str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$") ] = None """ The label of this step for referencing it from other steps """ workflow: str """ The subworkflow to run. VALIDATION: Should resolve to a defined subworkflow. """ arguments: ( dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str] | Literal["_"] ) = "_" """ The input parameters for the subworkflow (defaults to last step output) """ IfElseWorkflowStep.model_rebuild() IfElseWorkflowStepUpdateItem.model_rebuild() ================================================ FILE: src/agents-api/agents_api/autogen/Tools.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import ( AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field, RootModel, StrictBool, ) class AlgoliaSearchArguments(BaseModel): """ Arguments for Algolia Search """ model_config = ConfigDict( populate_by_name=True, ) index_name: str """ The index name to search """ query: str """ The query to search for """ attributes_to_retrieve: list[str] | None = None """ Optional attributes to retrieve """ hits_per_page: Annotated[int, Field(ge=1, le=1000)] = 10 """ Maximum number of hits to return """ class AlgoliaSearchArgumentsUpdate(BaseModel): """ Arguments for Algolia Search """ model_config = ConfigDict( populate_by_name=True, ) index_name: str | None = None """ The index name to search """ query: str | None = None """ The query to search for """ attributes_to_retrieve: list[str] | None = None """ Optional attributes to retrieve """ hits_per_page: Annotated[int, Field(ge=1, le=1000)] = 10 """ Maximum number of hits to return """ class AlgoliaSetup(BaseModel): """ Integration definition for Algolia """ model_config = ConfigDict( populate_by_name=True, ) algolia_application_id: str """ The Algolia Application ID """ algolia_api_key: str """ The Algolia API Key """ class AlgoliaSetupUpdate(BaseModel): """ Integration definition for Algolia """ model_config = ConfigDict( populate_by_name=True, ) algolia_application_id: str | None = None """ The Algolia Application ID """ algolia_api_key: str | None = None """ The Algolia API Key """ class ApiCallDef(BaseModel): """ API call definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ] """ The HTTP method to use """ url: AnyUrl """ The URL to call """ schema_: Annotated[dict[str, Any] | None, Field(alias="schema")] = None """ The schema of the response """ headers: dict[str, str] | None = None """ The headers to send with the request """ secrets: dict[str, SecretRef] | None = None """ Secret references to use in templates (available only at setup time, not during execution) """ content: str | None = None """ The content as base64 to send with the request """ data: dict[str, Any] | None = None """ The data to send as form data """ files: dict[str, Any] | None = None """ The data to send as files data """ json_: Annotated[dict[str, Any] | None, Field(alias="json")] = None """ JSON body to send with the request """ cookies: dict[str, str] | None = None """ Cookies """ params: str | dict[str, Any] | None = None """ The parameters to send with the request """ params_schema: ParameterSchema | None = None """ The schema of the parameters """ follow_redirects: StrictBool | None = None """ Follow redirects """ timeout: int | None = None """ The timeout for the request """ include_response_content: StrictBool = True """ Whether to include the content in the response """ class ApiCallDefUpdate(BaseModel): """ API call definition """ model_config = ConfigDict( populate_by_name=True, ) method: ( Literal[ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE", ] | None ) = None """ The HTTP method to use """ url: AnyUrl | None = None """ The URL to call """ schema_: Annotated[dict[str, Any] | None, Field(alias="schema")] = None """ The schema of the response """ headers: dict[str, str] | None = None """ The headers to send with the request """ secrets: dict[str, SecretRefUpdate] | None = None """ Secret references to use in templates (available only at setup time, not during execution) """ content: str | None = None """ The content as base64 to send with the request """ data: dict[str, Any] | None = None """ The data to send as form data """ files: dict[str, Any] | None = None """ The data to send as files data """ json_: Annotated[dict[str, Any] | None, Field(alias="json")] = None """ JSON body to send with the request """ cookies: dict[str, str] | None = None """ Cookies """ params: str | dict[str, Any] | None = None """ The parameters to send with the request """ params_schema: ParameterSchemaUpdate | None = None """ The schema of the parameters """ follow_redirects: StrictBool | None = None """ Follow redirects """ timeout: int | None = None """ The timeout for the request """ include_response_content: StrictBool = True """ Whether to include the content in the response """ class ArxivSearchArguments(BaseModel): """ Arguments for Arxiv Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query for searching with Arxiv """ id_list: list[str] | None = None """ The list of Arxiv IDs to search with """ max_results: Annotated[int, Field(ge=1, le=300000)] = 5 """ The maximum number of results to return """ download_pdf: StrictBool = False """ The download the pdf of the results """ sort_by: Literal["relevance", "lastUpdatedDate", "submittedDate"] = "relevance" """ The sort criterion for the results """ sort_order: Literal["ascending", "descending"] = "descending" """ The sort order for the results """ class ArxivSearchArgumentsUpdate(BaseModel): """ Arguments for Arxiv Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query for searching with Arxiv """ id_list: list[str] | None = None """ The list of Arxiv IDs to search with """ max_results: Annotated[int, Field(ge=1, le=300000)] = 5 """ The maximum number of results to return """ download_pdf: StrictBool = False """ The download the pdf of the results """ sort_by: Literal["relevance", "lastUpdatedDate", "submittedDate"] = "relevance" """ The sort criterion for the results """ sort_order: Literal["ascending", "descending"] = "descending" """ The sort order for the results """ class BaseChosenToolCall(BaseModel): """ The response tool value generated by the model """ model_config = ConfigDict( populate_by_name=True, ) type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) """ function: FunctionCallOption | None = None integration: Any | None = None system: Any | None = None api_call: Any | None = None computer_20241022: ChosenComputer20241022 | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: ChosenTextEditor20241022 | None = None bash_20241022: ChosenBash20241022 | None = None id: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None class BaseIntegrationDef(BaseModel): """ Integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal[ "dummy", "weather", "wikipedia", "spider", "brave", "browserbase", "email", "mailgun", "remote_browser", "llama_parse", "ffmpeg", "cloudinary", "arxiv", "unstructured", "algolia", "mcp", "google_sheets", ] """ The provider of the integration """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters the integration accepts """ arguments: Any | None = None """ The arguments to pre-apply to the integration call """ class BaseIntegrationDefUpdate(BaseModel): """ Integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: ( Literal[ "dummy", "weather", "wikipedia", "spider", "brave", "browserbase", "email", "mailgun", "remote_browser", "llama_parse", "ffmpeg", "cloudinary", "arxiv", "unstructured", "algolia", "mcp", "google_sheets", ] | None ) = None """ The provider of the integration """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters the integration accepts """ arguments: Any | None = None """ The arguments to pre-apply to the integration call """ class Bash20241022Def(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["bash_20241022"] = "bash_20241022" name: str = "bash" class Bash20241022DefUpdate(Bash20241022Def): pass class BraveIntegrationDef(BaseIntegrationDef): """ Brave integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["brave"] = "brave" """ The provider must be "brave" """ method: str | None = None """ The specific method of the integration to call """ setup: BraveSearchSetup | None = None """ The setup parameters for Brave """ arguments: BraveSearchArguments | None = None """ The arguments for Brave Search """ class BraveIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Brave integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["brave"] = "brave" """ The provider must be "brave" """ method: str | None = None """ The specific method of the integration to call """ setup: BraveSearchSetupUpdate | None = None """ The setup parameters for Brave """ arguments: BraveSearchArgumentsUpdate | None = None """ The arguments for Brave Search """ class BraveSearchArguments(BaseModel): """ Arguments for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query for searching with Brave """ class BraveSearchArgumentsUpdate(BaseModel): """ Arguments for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query for searching with Brave """ class BraveSearchSetup(BaseModel): """ Integration definition for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) brave_api_key: str """ The api key for Brave Search """ class BraveSearchSetupUpdate(BaseModel): """ Integration definition for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) brave_api_key: str | None = None """ The api key for Brave Search """ class BrowserbaseCompleteSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str status: Literal["REQUEST_RELEASE"] = "REQUEST_RELEASE" class BrowserbaseCompleteSessionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None status: Literal["REQUEST_RELEASE"] = "REQUEST_RELEASE" class BrowserbaseContextArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str, Field(alias="projectId")] """ The Project ID. Can be found in Settings. """ class BrowserbaseContextArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str | None, Field(alias="projectId")] = None """ The Project ID. Can be found in Settings. """ class BrowserbaseCreateSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str | None, Field(alias="projectId")] = None """ The Project ID. Can be found in Settings. """ extension_id: Annotated[str | None, Field(alias="extensionId")] = None """ The installed Extension ID. See Install Extension from GitHub. """ browser_settings: Annotated[dict[str, Any], Field(alias="browserSettings")] = {} """ Browser settings """ timeout: int = 3600 """ Duration in seconds after which the session will automatically end. Defaults to the Project's defaultTimeout. """ keep_alive: Annotated[StrictBool, Field(alias="keepAlive")] = False """ Set to true to keep the session alive even after disconnections. This is available on the Startup plan only. """ proxies: StrictBool | list[dict[str, Any]] = False """ Proxy configuration. Can be true for default proxy, or an array of proxy configurations. """ class BrowserbaseExtensionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) repository_name: Annotated[str, Field(alias="repositoryName")] """ The GitHub repository name. """ ref: str | None = None """ Ref to install from a branch or tag. """ class BrowserbaseExtensionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) repository_name: Annotated[str | None, Field(alias="repositoryName")] = None """ The GitHub repository name. """ ref: str | None = None """ Ref to install from a branch or tag. """ class BrowserbaseGetSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str class BrowserbaseGetSessionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None class BrowserbaseGetSessionLiveUrlsArguments(BrowserbaseGetSessionArguments): pass class BrowserbaseGetSessionLiveUrlsArgumentsUpdate( BrowserbaseGetSessionArgumentsUpdate ): pass class BrowserbaseListSessionsArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal["RUNNING", "ERROR", "TIMED_OUT", "COMPLETED"] | None = None """ The status of the sessions to list (Available options: RUNNING, ERROR, TIMED_OUT, COMPLETED) """ class BrowserbaseSetup(BaseModel): """ The setup parameters for the browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str """ API key for the browserbase integration """ project_id: str """ The project ID. Can be found in Settings. """ api_url: str | None = None """ The API URL. Defaults to https://www.browserbase.com """ connect_url: str | None = None """ The connect URL. Defaults to wss://connect.browserbase.com """ class BrowserbaseSetupUpdate(BaseModel): """ The setup parameters for the browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str | None = None """ API key for the browserbase integration """ project_id: str | None = None """ The project ID. Can be found in Settings. """ api_url: str | None = None """ The API URL. Defaults to https://www.browserbase.com """ connect_url: str | None = None """ The connect URL. Defaults to wss://connect.browserbase.com """ class ChosenBash20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str | None = None """ The bash command to run """ restart: StrictBool = False """ Whether to restart the tool """ class ChosenComputer20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: Literal[ "key", "type", "cursor_position", "mouse_move", "left_click", "right_click", "middle_click", "double_click", "screenshot", ] """ The action to perform """ text: str | None = None """ The text to type """ coordinate: list[int] | None = None """ The (x, y) pixel coordinate to move the cursor to """ class ChosenFunctionCall(BaseChosenToolCall): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" function: FunctionCallOption """ The function to call """ class ChosenTextEditor20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: Literal["str_replace", "insert", "view", "undo_edit"] """ The command to run """ path: str """ The path to the file """ file_text: str | None = None """ The content of the file to be created """ insert_line: int | None = None """ The line to insert the new string after """ new_str: str | None = None """ The new string to insert """ old_str: str | None = None """ The string in the file to replace """ view_range: list[int] | None = None """ The line range to view """ class CloudinaryEditArguments(BaseModel): """ Arguments for Cloudinary media edit """ model_config = ConfigDict( populate_by_name=True, ) public_id: str """ The file Public ID in Cloudinary """ transformation: list[dict[str, Any]] """ The transformation to apply to the file """ return_base64: StrictBool = False """ Return base64 encoded file """ class CloudinaryEditArgumentsUpdate(BaseModel): """ Arguments for Cloudinary media edit """ model_config = ConfigDict( populate_by_name=True, ) public_id: str | None = None """ The file Public ID in Cloudinary """ transformation: list[dict[str, Any]] | None = None """ The transformation to apply to the file """ return_base64: StrictBool = False """ Return base64 encoded file """ class CloudinarySetup(BaseModel): """ Setup parameters for Cloudinary integration """ model_config = ConfigDict( populate_by_name=True, ) cloudinary_api_key: str """ The API key for Cloudinary """ cloudinary_api_secret: str """ The API secret for Cloudinary """ cloudinary_cloud_name: str """ The Cloud name for Cloudinary """ params: dict[str, Any] | None = None """ Additional parameters for the Cloudinary API """ class CloudinarySetupUpdate(BaseModel): """ Setup parameters for Cloudinary integration """ model_config = ConfigDict( populate_by_name=True, ) cloudinary_api_key: str | None = None """ The API key for Cloudinary """ cloudinary_api_secret: str | None = None """ The API secret for Cloudinary """ cloudinary_cloud_name: str | None = None """ The Cloud name for Cloudinary """ params: dict[str, Any] | None = None """ Additional parameters for the Cloudinary API """ class CloudinaryUploadArguments(BaseModel): """ Arguments for Cloudinary media upload """ model_config = ConfigDict( populate_by_name=True, ) file: str """ The URL of the file upload """ return_base64: StrictBool = False """ Return base64 encoded file """ public_id: str | None = None """ Optional public ID for the uploaded file """ upload_params: dict[str, Any] | None = None """ Optional upload parameters """ class CloudinaryUploadArgumentsUpdate(BaseModel): """ Arguments for Cloudinary media upload """ model_config = ConfigDict( populate_by_name=True, ) file: str | None = None """ The URL of the file upload """ return_base64: StrictBool = False """ Return base64 encoded file """ public_id: str | None = None """ Optional public ID for the uploaded file """ upload_params: dict[str, Any] | None = None """ Optional upload parameters """ class Computer20241022Def(BaseModel): """ Anthropic new tools """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_20241022"] = "computer_20241022" name: str = "computer" display_width_px: Annotated[int, Field(ge=600)] = 1024 """ The display width in pixels """ display_height_px: Annotated[int, Field(ge=400)] = 768 """ The display height in pixels """ display_number: Annotated[int, Field(ge=1, le=10)] = 1 """ The display number to use """ class Computer20241022DefUpdate(Computer20241022Def): """ Anthropic new tools """ class CreateToolRequest(BaseModel): """ Payload for creating a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None class DummyIntegrationDef(BaseIntegrationDef): model_config = ConfigDict( populate_by_name=True, ) provider: Literal["dummy"] = "dummy" class DummyIntegrationDefUpdate(BaseIntegrationDefUpdate): model_config = ConfigDict( populate_by_name=True, ) provider: Literal["dummy"] = "dummy" class EmailArguments(BaseModel): """ Arguments for Email sending """ model_config = ConfigDict( populate_by_name=True, ) to: str """ The email address to send the email to """ from_: Annotated[str, Field(alias="from")] """ The email address to send the email from """ subject: str """ The subject of the email """ body: str """ The body of the email """ class EmailArgumentsUpdate(BaseModel): """ Arguments for Email sending """ model_config = ConfigDict( populate_by_name=True, ) to: str | None = None """ The email address to send the email to """ from_: Annotated[str | None, Field(alias="from")] = None """ The email address to send the email from """ subject: str | None = None """ The subject of the email """ body: str | None = None """ The body of the email """ class EmailIntegrationDef(BaseIntegrationDef): """ Email integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["email"] = "email" """ The provider must be "email" """ method: str | None = None """ The specific method of the integration to call """ setup: EmailSetup | None = None """ The setup parameters for Email """ arguments: EmailArguments | None = None """ The arguments for Email sending """ class EmailIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Email integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["email"] = "email" """ The provider must be "email" """ method: str | None = None """ The specific method of the integration to call """ setup: EmailSetupUpdate | None = None """ The setup parameters for Email """ arguments: EmailArgumentsUpdate | None = None """ The arguments for Email sending """ class EmailSetup(BaseModel): """ Setup parameters for Email integration """ model_config = ConfigDict( populate_by_name=True, ) host: str """ The host of the email server """ port: int """ The port of the email server """ user: str """ The username of the email server """ password: str """ The password of the email server """ class EmailSetupUpdate(BaseModel): """ Setup parameters for Email integration """ model_config = ConfigDict( populate_by_name=True, ) host: str | None = None """ The host of the email server """ port: int | None = None """ The port of the email server """ user: str | None = None """ The username of the email server """ password: str | None = None """ The password of the email server """ class FfmpegIntegrationDef(BaseIntegrationDef): """ Ffmpeg integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["ffmpeg"] = "ffmpeg" """ The provider must be "ffmpeg" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Ffmpeg """ arguments: FfmpegSearchArguments | None = None """ The arguments for Ffmpeg Search """ class FfmpegIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Ffmpeg integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["ffmpeg"] = "ffmpeg" """ The provider must be "ffmpeg" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Ffmpeg """ arguments: FfmpegSearchArgumentsUpdate | None = None """ The arguments for Ffmpeg Search """ class FfmpegSearchArguments(BaseModel): """ Arguments for Ffmpeg CMD """ model_config = ConfigDict( populate_by_name=True, ) cmd: str """ The bash command string """ file: str | list[str] | None = None """ The base64 string of the file """ class FfmpegSearchArgumentsUpdate(BaseModel): """ Arguments for Ffmpeg CMD """ model_config = ConfigDict( populate_by_name=True, ) cmd: str | None = None """ The bash command string """ file: str | list[str] | None = None """ The base64 string of the file """ class FunctionCallOption(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str """ The name of the function """ arguments: str | None = None """ The parameters to pass to the function """ class FunctionDef(BaseModel): """ Function definition """ model_config = ConfigDict( populate_by_name=True, ) name: Any | None = None """ DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. """ description: Any | None = None """ DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. """ parameters: dict[str, Any] | None = None """ The parameters the function accepts """ class GoogleSheetsAppendArguments(BaseModel): """ Arguments for appending values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to append to """ range: str """ The A1 notation of the range to start appending from """ values: list[list] """ The values to append (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "INSERT_ROWS" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsAppendArgumentsUpdate(BaseModel): """ Arguments for appending values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to append to """ range: str | None = None """ The A1 notation of the range to start appending from """ values: list[list] | None = None """ The values to append (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "INSERT_ROWS" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsBatchReadArguments(BaseModel): """ Arguments for batch reading values from multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to read from """ ranges: list[str] """ The A1 notation of the ranges to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = ( "FORMATTED_STRING" ) """ How dates, times, and durations should be represented """ class GoogleSheetsBatchReadArgumentsUpdate(BaseModel): """ Arguments for batch reading values from multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to read from """ ranges: list[str] | None = None """ The A1 notation of the ranges to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = ( "FORMATTED_STRING" ) """ How dates, times, and durations should be represented """ class GoogleSheetsBatchWriteArguments(BaseModel): """ Arguments for batch updating values in multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to write to """ data: list[GoogleSheetsValueRange] """ The data to write to each range """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsBatchWriteArgumentsUpdate(BaseModel): """ Arguments for batch updating values in multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to write to """ data: list[GoogleSheetsValueRange] | None = None """ The data to write to each range """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsClearArguments(BaseModel): """ Arguments for clearing values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to clear values from """ range: str """ The A1 notation of the range to clear """ class GoogleSheetsClearArgumentsUpdate(BaseModel): """ Arguments for clearing values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to clear values from """ range: str | None = None """ The A1 notation of the range to clear """ class GoogleSheetsIntegrationDef(BaseIntegrationDef): """ Google Sheets integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["google_sheets"] = "google_sheets" """ The provider must be "google_sheets" """ method: ( Literal[ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write", ] | None ) = None """ The specific method of the integration to call """ setup: GoogleSheetsSetup | None = None """ The setup parameters for Google Sheets """ arguments: ( GoogleSheetsReadArguments | GoogleSheetsWriteArguments | GoogleSheetsAppendArguments | GoogleSheetsClearArguments | GoogleSheetsBatchReadArguments | GoogleSheetsBatchWriteArguments | None ) = None """ The arguments for the method """ class GoogleSheetsIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Google Sheets integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["google_sheets"] = "google_sheets" """ The provider must be "google_sheets" """ method: ( Literal[ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write", ] | None ) = None """ The specific method of the integration to call """ setup: GoogleSheetsSetupUpdate | None = None """ The setup parameters for Google Sheets """ arguments: ( GoogleSheetsReadArgumentsUpdate | GoogleSheetsWriteArgumentsUpdate | GoogleSheetsAppendArgumentsUpdate | GoogleSheetsClearArgumentsUpdate | GoogleSheetsBatchReadArgumentsUpdate | GoogleSheetsBatchWriteArgumentsUpdate | None ) = None """ The arguments for the method """ class GoogleSheetsReadArguments(BaseModel): """ Arguments for reading values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to read from """ range: str """ The A1 notation of the range to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = ( "FORMATTED_STRING" ) """ How dates, times, and durations should be represented """ class GoogleSheetsReadArgumentsUpdate(BaseModel): """ Arguments for reading values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to read from """ range: str | None = None """ The A1 notation of the range to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = ( "FORMATTED_STRING" ) """ How dates, times, and durations should be represented """ class GoogleSheetsSetup(BaseModel): """ Setup parameters for Google Sheets integration """ model_config = ConfigDict( populate_by_name=True, ) use_julep_service: StrictBool """ Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. """ service_account_json: str | None = None """ Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. """ default_retry_count: Annotated[int, Field(ge=1, le=10)] = 3 """ Default number of retry attempts for API calls """ class GoogleSheetsSetupUpdate(BaseModel): """ Setup parameters for Google Sheets integration """ model_config = ConfigDict( populate_by_name=True, ) use_julep_service: StrictBool | None = None """ Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. """ service_account_json: str | None = None """ Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. """ default_retry_count: Annotated[int, Field(ge=1, le=10)] = 3 """ Default number of retry attempts for API calls """ class GoogleSheetsValueRange(BaseModel): """ Represents a range of values to write """ model_config = ConfigDict( populate_by_name=True, ) range: str """ The A1 notation of the range """ values: list[list] """ The values for the range (2D array) """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension of the values """ class GoogleSheetsWriteArguments(BaseModel): """ Arguments for writing values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to write to """ range: str """ The A1 notation of the range to write to """ values: list[list] """ The values to write (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "OVERWRITE" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsWriteArgumentsUpdate(BaseModel): """ Arguments for writing values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to write to """ range: str | None = None """ The A1 notation of the range to write to """ values: list[list] | None = None """ The values to write (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "OVERWRITE" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class LlamaParseFetchArguments(BaseModel): """ Arguments for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | list[str] """ The base64 string of the file, which can be a single string or a list of strings """ params: dict[str, Any] | None = None """ Optional upload parameters """ base64: StrictBool = False """ The input file is base64 """ class LlamaParseFetchArgumentsUpdate(BaseModel): """ Arguments for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | list[str] | None = None """ The base64 string of the file, which can be a single string or a list of strings """ params: dict[str, Any] | None = None """ Optional upload parameters """ base64: StrictBool = False """ The input file is base64 """ class LlamaParseIntegrationDef(BaseIntegrationDef): """ LlamaParse integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["llama_parse"] = "llama_parse" """ The provider must be "LlamaParseSetup" """ method: str | None = None """ The specific method of the integration to call """ setup: LlamaParseSetup | None = None """ The setup parameters for LlamaParse """ arguments: LlamaParseFetchArguments | None = None """ The arguments for LlamaParse """ class LlamaParseIntegrationDefUpdate(BaseIntegrationDefUpdate): """ LlamaParse integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["llama_parse"] = "llama_parse" """ The provider must be "LlamaParseSetup" """ method: str | None = None """ The specific method of the integration to call """ setup: LlamaParseSetupUpdate | None = None """ The setup parameters for LlamaParse """ arguments: LlamaParseFetchArgumentsUpdate | None = None """ The arguments for LlamaParse """ class LlamaParseSetup(BaseModel): """ Setup parameters for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) llamaparse_api_key: str """ The API key for LlamaParse """ params: dict[str, Any] | None = None """ Optional upload parameters """ class LlamaParseSetupUpdate(BaseModel): """ Setup parameters for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) llamaparse_api_key: str | None = None """ The API key for LlamaParse """ params: dict[str, Any] | None = None """ Optional upload parameters """ class MailgunIntegrationDef(BaseIntegrationDef): """ Mailgun integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mailgun"] = "mailgun" """ The provider must be "mailgun" """ method: Literal["send_email"] | None = None """ The specific method of the integration to call """ setup: MailgunSetup | None = None """ The setup parameters for Mailgun """ arguments: MailgunSendEmailArguments | None = None """ The arguments for mailgun methods """ class MailgunIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Mailgun integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mailgun"] = "mailgun" """ The provider must be "mailgun" """ method: Literal["send_email"] | None = None """ The specific method of the integration to call """ setup: MailgunSetupUpdate | None = None """ The setup parameters for Mailgun """ arguments: MailgunSendEmailArgumentsUpdate | None = None """ The arguments for mailgun methods """ class MailgunSendEmailArguments(BaseModel): """ Arguments for mailgun.send_email method """ model_config = ConfigDict( populate_by_name=True, ) to: str """ The email address to send the email to """ from_: Annotated[str, Field(alias="from")] """ The email address to send the email from """ subject: str """ The subject of the email """ body: str """ The body of the email """ cc: str | None = None """ Optional carbon copy recipients (comma-separated email addresses) """ bcc: str | None = None """ Optional blind carbon copy recipients (comma-separated email addresses) """ class MailgunSendEmailArgumentsUpdate(BaseModel): """ Arguments for mailgun.send_email method """ model_config = ConfigDict( populate_by_name=True, ) to: str | None = None """ The email address to send the email to """ from_: Annotated[str | None, Field(alias="from")] = None """ The email address to send the email from """ subject: str | None = None """ The subject of the email """ body: str | None = None """ The body of the email """ cc: str | None = None """ Optional carbon copy recipients (comma-separated email addresses) """ bcc: str | None = None """ Optional blind carbon copy recipients (comma-separated email addresses) """ class MailgunSetup(BaseModel): """ Setup parameters for Mailgun integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str """ The API key for the Mailgun integration """ class MailgunSetupUpdate(BaseModel): """ Setup parameters for Mailgun integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str | None = None """ The API key for the Mailgun integration """ class McpCallToolArguments(BaseModel): """ Arguments to call a named tool on the MCP server """ model_config = ConfigDict( populate_by_name=True, ) tool_name: str """ The MCP tool name to invoke """ arguments: dict[str, Any] = {} """ JSON-serializable arguments to pass to the MCP tool """ timeout_seconds: int = 60 """ Optional per-call timeout in seconds """ class McpCallToolArgumentsUpdate(BaseModel): """ Arguments to call a named tool on the MCP server """ model_config = ConfigDict( populate_by_name=True, ) tool_name: str | None = None """ The MCP tool name to invoke """ arguments: dict[str, Any] = {} """ JSON-serializable arguments to pass to the MCP tool """ timeout_seconds: int = 60 """ Optional per-call timeout in seconds """ class McpIntegrationDef(BaseIntegrationDef): """ MCP integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mcp"] = "mcp" """ The provider must be "mcp" """ method: str | None = None """ The specific method of the integration to call """ setup: McpSetup | None = None """ The setup parameters for MCP """ arguments: McpCallToolArguments | McpListToolsArguments | None = None """ The arguments for MCP methods """ class McpIntegrationDefUpdate(BaseIntegrationDefUpdate): """ MCP integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mcp"] = "mcp" """ The provider must be "mcp" """ method: str | None = None """ The specific method of the integration to call """ setup: McpSetupUpdate | None = None """ The setup parameters for MCP """ arguments: McpCallToolArgumentsUpdate | McpListToolsArgumentsUpdate | None = None """ The arguments for MCP methods """ class McpListToolsArguments(BaseModel): """ Arguments to list available tools """ model_config = ConfigDict( populate_by_name=True, ) dummy: str = "dummy" class McpListToolsArgumentsUpdate(McpListToolsArguments): """ Arguments to list available tools """ class McpSetup(BaseModel): """ Setup parameters for MCP integration """ model_config = ConfigDict( populate_by_name=True, ) transport: Literal["sse", "http"] """ Transport used to connect to the MCP server """ command: str | None = None """ (stdio) Executable or command to launch the server """ args: list[str] = [] """ (stdio) Arguments for the server command """ cwd: str | None = None """ (stdio) Working directory for the server process """ env: dict[str, str] = {} """ (stdio) Environment variables for the server process """ http_url: AnyUrl | None = None """ (http) Base URL for the MCP server (usually ends with /mcp) """ http_headers: dict[str, str] = {} """ (http) Optional HTTP headers to include (e.g., Authorization) """ class McpSetupUpdate(BaseModel): """ Setup parameters for MCP integration """ model_config = ConfigDict( populate_by_name=True, ) transport: Literal["sse", "http"] | None = None """ Transport used to connect to the MCP server """ command: str | None = None """ (stdio) Executable or command to launch the server """ args: list[str] = [] """ (stdio) Arguments for the server command """ cwd: str | None = None """ (stdio) Working directory for the server process """ env: dict[str, str] = {} """ (stdio) Environment variables for the server process """ http_url: AnyUrl | None = None """ (http) Base URL for the MCP server (usually ends with /mcp) """ http_headers: dict[str, str] = {} """ (http) Optional HTTP headers to include (e.g., Authorization) """ class NamedToolChoice(BaseModel): model_config = ConfigDict( populate_by_name=True, ) function: FunctionCallOption | None = None class ParameterSchema(BaseModel): """ JSON Schema for API call parameters """ model_config = ConfigDict( populate_by_name=True, ) type: str = "object" """ Schema type (usually 'object') """ properties: dict[str, PropertyDefinition] """ Properties definition for parameters """ required: list[str] = [] """ List of required property names """ additional_properties: Annotated[ StrictBool | None, Field(alias="additionalProperties") ] = None """ Whether to allow additional properties """ class ParameterSchemaUpdate(BaseModel): """ JSON Schema for API call parameters """ model_config = ConfigDict( populate_by_name=True, ) type: str = "object" """ Schema type (usually 'object') """ properties: dict[str, PropertyDefinitionUpdate] | None = None """ Properties definition for parameters """ required: list[str] = [] """ List of required property names """ additional_properties: Annotated[ StrictBool | None, Field(alias="additionalProperties") ] = None """ Whether to allow additional properties """ class PatchToolRequest(BaseModel): """ Payload for patching a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] = None """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: ( Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] | None ) = None """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDefUpdate | BraveIntegrationDefUpdate | EmailIntegrationDefUpdate | SpiderIntegrationDefUpdate | WikipediaIntegrationDefUpdate | WeatherIntegrationDefUpdate | MailgunIntegrationDefUpdate | BrowserbaseContextIntegrationDefUpdate | BrowserbaseExtensionIntegrationDefUpdate | BrowserbaseListSessionsIntegrationDefUpdate | BrowserbaseCreateSessionIntegrationDefUpdate | BrowserbaseGetSessionIntegrationDefUpdate | BrowserbaseCompleteSessionIntegrationDefUpdate | BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate | RemoteBrowserIntegrationDefUpdate | LlamaParseIntegrationDefUpdate | FfmpegIntegrationDefUpdate | CloudinaryUploadIntegrationDefUpdate | CloudinaryEditIntegrationDefUpdate | ArxivIntegrationDefUpdate | UnstructuredIntegrationDefUpdate | AlgoliaIntegrationDefUpdate | McpIntegrationDefUpdate | GoogleSheetsIntegrationDefUpdate | None ) = None """ The integration to call """ system: SystemDefUpdate | None = None """ The system to call """ api_call: ApiCallDefUpdate | None = None """ The API call to make """ computer_20241022: Computer20241022DefUpdate | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022DefUpdate | None = None bash_20241022: Bash20241022DefUpdate | None = None class PropertyDefinition(BaseModel): """ Property definition for parameter schema """ model_config = ConfigDict( populate_by_name=True, ) type: str """ Type of the property """ description: str | None = None """ Description of the property """ enum: list[str] | None = None """ Enum values if applicable """ items: PropertyDefinition | None = None """ Items definition for array types """ class PropertyDefinitionUpdate(BaseModel): """ Property definition for parameter schema """ model_config = ConfigDict( populate_by_name=True, ) type: str | None = None """ Type of the property """ description: str | None = None """ Description of the property """ enum: list[str] | None = None """ Enum values if applicable """ items: PropertyDefinitionUpdate | None = None """ Items definition for array types """ class RemoteBrowserArguments(BaseModel): """ The arguments for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ action: Literal[ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh", ] """ The action to perform """ text: str | None = None """ The text """ coordinate: list | None = None """ The coordinate to move the mouse to """ class RemoteBrowserArgumentsUpdate(BaseModel): """ The arguments for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ action: ( Literal[ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh", ] | None ) = None """ The action to perform """ text: str | None = None """ The text """ coordinate: list | None = None """ The coordinate to move the mouse to """ class RemoteBrowserIntegrationDef(BaseIntegrationDef): """ The integration definition for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["remote_browser"] = "remote_browser" setup: RemoteBrowserSetup method: Literal["perform_action"] = "perform_action" arguments: RemoteBrowserArguments | None = None class RemoteBrowserIntegrationDefUpdate(BaseIntegrationDefUpdate): """ The integration definition for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["remote_browser"] = "remote_browser" setup: RemoteBrowserSetup | None = None method: Literal["perform_action"] = "perform_action" arguments: RemoteBrowserArgumentsUpdate | None = None class RemoteBrowserSetup(BaseModel): """ The setup parameters for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ width: int | None = None """ The width of the browser """ height: int | None = None """ The height of the browser """ class SecretRef(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str """ The name of the secret to reference """ class SecretRefUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str | None = None """ The name of the secret to reference """ class SpiderFetchArguments(BaseModel): """ Arguments for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) url: AnyUrl """ The URL to fetch data from """ content_type: Literal[ "application/json", "text/csv", "application/xml", "application/jsonl" ] = "application/json" """ The content type to return """ params: dict[str, Any] | None = None """ Additional parameters for the Spider API """ class SpiderFetchArgumentsUpdate(BaseModel): """ Arguments for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) url: AnyUrl | None = None """ The URL to fetch data from """ content_type: Literal[ "application/json", "text/csv", "application/xml", "application/jsonl" ] = "application/json" """ The content type to return """ params: dict[str, Any] | None = None """ Additional parameters for the Spider API """ class SpiderIntegrationDef(BaseIntegrationDef): """ Spider integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["spider"] = "spider" """ The provider must be "spider" """ method: Literal["crawl", "links", "screenshot", "search"] | None = None """ The specific method of the integration to call """ setup: SpiderSetup | None = None """ The setup parameters for Spider """ arguments: SpiderFetchArguments | None = None """ The arguments for Spider """ class SpiderIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Spider integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["spider"] = "spider" """ The provider must be "spider" """ method: Literal["crawl", "links", "screenshot", "search"] | None = None """ The specific method of the integration to call """ setup: SpiderSetupUpdate | None = None """ The setup parameters for Spider """ arguments: SpiderFetchArgumentsUpdate | None = None """ The arguments for Spider """ class SpiderSetup(BaseModel): """ Setup parameters for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) spider_api_key: str """ The API key for Spider """ class SpiderSetupUpdate(BaseModel): """ Setup parameters for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) spider_api_key: str | None = None """ The API key for Spider """ class SystemDef(BaseModel): """ System definition """ model_config = ConfigDict( populate_by_name=True, ) resource: Literal["agent", "user", "task", "execution", "doc", "session", "job"] """ Resource is the name of the resource to use """ operation: Literal[ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list", ] """ Operation is the name of the operation to perform """ resource_id: UUID | None = None """ Resource id (if applicable) """ subresource: Literal["tool", "doc", "execution", "transition"] | None = None """ Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ The arguments to pre-apply to the system call """ class SystemDefUpdate(BaseModel): """ System definition """ model_config = ConfigDict( populate_by_name=True, ) resource: ( Literal["agent", "user", "task", "execution", "doc", "session", "job"] | None ) = None """ Resource is the name of the resource to use """ operation: ( Literal[ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list", ] | None ) = None """ Operation is the name of the operation to perform """ resource_id: UUID | None = None """ Resource id (if applicable) """ subresource: Literal["tool", "doc", "execution", "transition"] | None = None """ Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ The arguments to pre-apply to the system call """ class TextEditor20241022Def(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["text_editor_20241022"] = "text_editor_20241022" name: str = "str_replace_editor" class TextEditor20241022DefUpdate(TextEditor20241022Def): pass class Tool(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class ToolResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str output: dict[str, Any] """ The output of the tool """ class UnstructuredIntegrationDef(BaseIntegrationDef): """ Unstructured integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["unstructured"] = "unstructured" """ The provider must be "unstructured" """ method: str | None = None """ The specific method of the integration to call """ setup: UnstructuredSetup | None = None """ The setup parameters for Unstructured """ arguments: UnstructuredPartitionArguments | None = None """ The arguments for Unstructured """ class UnstructuredIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Unstructured integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["unstructured"] = "unstructured" """ The provider must be "unstructured" """ method: str | None = None """ The specific method of the integration to call """ setup: UnstructuredSetupUpdate | None = None """ The setup parameters for Unstructured """ arguments: UnstructuredPartitionArgumentsUpdate | None = None """ The arguments for Unstructured """ class UnstructuredPartitionArguments(BaseModel): """ Arguments for Unstructured partition integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str """ The base64 string of the file, which can be a single string or a list of strings """ partition_params: dict[str, Any] | None = None """ Additional partition parameters """ class UnstructuredPartitionArgumentsUpdate(BaseModel): """ Arguments for Unstructured partition integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | None = None """ The base64 string of the file, which can be a single string or a list of strings """ partition_params: dict[str, Any] | None = None """ Additional partition parameters """ class UnstructuredSetup(BaseModel): """ Setup parameters for Unstructured integration """ model_config = ConfigDict( populate_by_name=True, ) unstructured_api_key: str """ The API key for Unstructured.io """ server_url: str | None = None """ Optional server endpoint URL """ server: str | None = None """ The server by name to use for all methods """ url_params: dict[str, Any] | None = None """ Parameters to optionally template the server URL with """ retry_config: dict[str, Any] | None = None """ The retry configuration to use for all supported methods """ timeout_ms: int | None = None """ Optional request timeout applied to each operation in milliseconds """ class UnstructuredSetupUpdate(BaseModel): """ Setup parameters for Unstructured integration """ model_config = ConfigDict( populate_by_name=True, ) unstructured_api_key: str | None = None """ The API key for Unstructured.io """ server_url: str | None = None """ Optional server endpoint URL """ server: str | None = None """ The server by name to use for all methods """ url_params: dict[str, Any] | None = None """ Parameters to optionally template the server URL with """ retry_config: dict[str, Any] | None = None """ The retry configuration to use for all supported methods """ timeout_ms: int | None = None """ Optional request timeout applied to each operation in milliseconds """ class UpdateToolRequest(BaseModel): """ Payload for updating a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None class WeatherGetArguments(BaseModel): """ Arguments for Weather """ model_config = ConfigDict( populate_by_name=True, ) location: str """ The location for which to fetch weather data """ class WeatherGetArgumentsUpdate(BaseModel): """ Arguments for Weather """ model_config = ConfigDict( populate_by_name=True, ) location: str | None = None """ The location for which to fetch weather data """ class WeatherIntegrationDef(BaseIntegrationDef): """ Weather integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["weather"] = "weather" """ The provider must be "weather" """ method: str | None = None """ The specific method of the integration to call """ setup: WeatherSetup | None = None """ The setup parameters for Weather """ arguments: WeatherGetArguments | None = None """ The arguments for Weather """ class WeatherIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Weather integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["weather"] = "weather" """ The provider must be "weather" """ method: str | None = None """ The specific method of the integration to call """ setup: WeatherSetupUpdate | None = None """ The setup parameters for Weather """ arguments: WeatherGetArgumentsUpdate | None = None """ The arguments for Weather """ class WeatherSetup(BaseModel): """ Integration definition for Weather """ model_config = ConfigDict( populate_by_name=True, ) openweathermap_api_key: str """ The api key for OpenWeatherMap """ class WeatherSetupUpdate(BaseModel): """ Integration definition for Weather """ model_config = ConfigDict( populate_by_name=True, ) openweathermap_api_key: str | None = None """ The api key for OpenWeatherMap """ class WikipediaIntegrationDef(BaseIntegrationDef): """ Wikipedia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["wikipedia"] = "wikipedia" """ The provider must be "wikipedia" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Wikipedia """ arguments: WikipediaSearchArguments | None = None """ The arguments for Wikipedia Search """ class WikipediaIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Wikipedia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["wikipedia"] = "wikipedia" """ The provider must be "wikipedia" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Wikipedia """ arguments: WikipediaSearchArgumentsUpdate | None = None """ The arguments for Wikipedia Search """ class WikipediaSearchArguments(BaseModel): """ Arguments for Wikipedia Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query string """ load_max_docs: Annotated[int, Field(ge=1, le=10)] = 2 """ Maximum number of documents to load """ class WikipediaSearchArgumentsUpdate(BaseModel): """ Arguments for Wikipedia Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query string """ load_max_docs: Annotated[int, Field(ge=1, le=10)] = 2 """ Maximum number of documents to load """ class AlgoliaIntegrationDef(BaseIntegrationDef): """ Algolia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["algolia"] = "algolia" """ The provider must be "algolia" """ method: str | None = None """ The specific method of the integration to call """ setup: AlgoliaSetup | None = None """ The setup parameters for Algolia """ arguments: AlgoliaSearchArguments | None = None """ The arguments for Algolia """ class AlgoliaIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Algolia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["algolia"] = "algolia" """ The provider must be "algolia" """ method: str | None = None """ The specific method of the integration to call """ setup: AlgoliaSetupUpdate | None = None """ The setup parameters for Algolia """ arguments: AlgoliaSearchArgumentsUpdate | None = None """ The arguments for Algolia """ class ArxivIntegrationDef(BaseIntegrationDef): """ Arxiv integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["arxiv"] = "arxiv" """ The provider must be "arxiv" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Arxiv """ arguments: ArxivSearchArguments | None = None """ The arguments for Arxiv Search """ class ArxivIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Arxiv integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["arxiv"] = "arxiv" """ The provider must be "arxiv" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Arxiv """ arguments: ArxivSearchArgumentsUpdate | None = None """ The arguments for Arxiv Search """ class BaseBrowserbaseIntegrationDef(BaseIntegrationDef): """ The base definition for a browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["browserbase"] = "browserbase" setup: BrowserbaseSetup | None = None method: ( Literal[ "get_live_urls", "list_sessions", "create_session", "get_session", "complete_session", "get_connect_url", "install_extension_from_github", "create_context", "get_session_downloads", "get_logs", "get_recordings", ] | None ) = None arguments: Any | None = None class BaseBrowserbaseIntegrationDefUpdate(BaseIntegrationDefUpdate): """ The base definition for a browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["browserbase"] = "browserbase" setup: BrowserbaseSetupUpdate | None = None method: ( Literal[ "get_live_urls", "list_sessions", "create_session", "get_session", "complete_session", "get_connect_url", "install_extension_from_github", "create_context", "get_session_downloads", "get_logs", "get_recordings", ] | None ) = None arguments: Any | None = None class BaseCloudinaryIntegrationDef(BaseIntegrationDef): """ Base Cloudinary integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["cloudinary"] = "cloudinary" setup: CloudinarySetup | None = None method: Literal["media_upload", "media_edit"] | None = None class BaseCloudinaryIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Base Cloudinary integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["cloudinary"] = "cloudinary" setup: CloudinarySetupUpdate | None = None method: Literal["media_upload", "media_edit"] | None = None class BrowserbaseCompleteSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase complete session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["complete_session"] = "complete_session" arguments: BrowserbaseCompleteSessionArguments | None = None class BrowserbaseCompleteSessionIntegrationDefUpdate( BaseBrowserbaseIntegrationDefUpdate ): """ browserbase complete session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["complete_session"] = "complete_session" arguments: BrowserbaseCompleteSessionArgumentsUpdate | None = None class BrowserbaseContextIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase context provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_context"] = "create_context" """ The specific method of the integration to call """ arguments: BrowserbaseContextArguments | None = None """ The arguments for the method """ class BrowserbaseContextIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase context provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_context"] = "create_context" """ The specific method of the integration to call """ arguments: BrowserbaseContextArgumentsUpdate | None = None """ The arguments for the method """ class BrowserbaseCreateSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase create session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_session"] = "create_session" arguments: BrowserbaseCreateSessionArguments | None = None """ The arguments for the method """ class BrowserbaseCreateSessionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase create session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_session"] = "create_session" arguments: BrowserbaseCreateSessionArguments | None = None """ The arguments for the method """ class BrowserbaseExtensionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase extension provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["install_extension_from_github"] | None = None """ The specific method of the integration to call """ arguments: BrowserbaseExtensionArguments | None = None """ The arguments for the method """ class BrowserbaseExtensionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase extension provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["install_extension_from_github"] | None = None """ The specific method of the integration to call """ arguments: BrowserbaseExtensionArgumentsUpdate | None = None """ The arguments for the method """ class BrowserbaseGetSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase get session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_session"] = "get_session" arguments: BrowserbaseGetSessionArguments | None = None class BrowserbaseGetSessionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase get session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_session"] = "get_session" arguments: BrowserbaseGetSessionArgumentsUpdate | None = None class BrowserbaseGetSessionLiveUrlsIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase get session live urls integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_live_urls"] = "get_live_urls" arguments: BrowserbaseGetSessionLiveUrlsArguments | None = None class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate( BaseBrowserbaseIntegrationDefUpdate ): """ browserbase get session live urls integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_live_urls"] = "get_live_urls" arguments: BrowserbaseGetSessionLiveUrlsArgumentsUpdate | None = None class BrowserbaseListSessionsIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase list sessions integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["list_sessions"] = "list_sessions" """ The specific method of the integration to call """ arguments: BrowserbaseListSessionsArguments | None = None """ The arguments for the method """ class BrowserbaseListSessionsIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase list sessions integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["list_sessions"] = "list_sessions" """ The specific method of the integration to call """ arguments: BrowserbaseListSessionsArguments | None = None """ The arguments for the method """ class CloudinaryEditIntegrationDef(BaseCloudinaryIntegrationDef): """ Cloudinary edit integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_edit"] = "media_edit" arguments: CloudinaryEditArguments | None = None class CloudinaryEditIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpdate): """ Cloudinary edit integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_edit"] = "media_edit" arguments: CloudinaryEditArgumentsUpdate | None = None class CloudinaryUploadIntegrationDef(BaseCloudinaryIntegrationDef): """ Cloudinary upload integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_upload"] = "media_upload" arguments: CloudinaryUploadArguments | None = None class CloudinaryUploadIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpdate): """ Cloudinary upload integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_upload"] = "media_upload" arguments: CloudinaryUploadArgumentsUpdate | None = None PropertyDefinition.model_rebuild() PropertyDefinitionUpdate.model_rebuild() ================================================ FILE: src/agents-api/agents_api/autogen/Users.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateUserRequest(BaseModel): """ Payload for creating a user (and associated documents) """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class PatchUserRequest(BaseModel): """ Payload for patching a user """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class UpdateUserRequest(BaseModel): """ Payload for updating a user """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class User(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class CreateOrUpdateUserRequest(CreateUserRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID ================================================ FILE: src/agents-api/agents_api/autogen/__init__.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml ================================================ FILE: src/agents-api/agents_api/autogen/openapi_model.py ================================================ # ruff: noqa: F401, F403, F405 import ast from typing import Annotated, Any, Generic, Literal, Self, TypeVar, get_args from uuid import UUID import jinja2 from litellm.utils import _select_tokenizer as select_tokenizer from litellm.utils import token_counter from pydantic import ( AwareDatetime, Field, computed_field, field_validator, model_validator, ) from ..common.utils.datetime import utcnow from .Agents import * from .Chat import * from .Common import * from .Docs import * from .Entries import * from .Executions import * from .Files import * from .Jobs import * from .Projects import * from .Responses import * from .Secrets import * from .Sessions import * from .Tasks import * from .Tools import * from .Users import * # Generic models # -------------- DataT = TypeVar("DataT", bound=BaseModel) class ListResponse(BaseModel, Generic[DataT]): items: list[DataT] # Aliases # ------- class CreateToolRequest(UpdateToolRequest): pass class CreateOrUpdateAgentRequest(UpdateAgentRequest): pass class CreateOrUpdateUserRequest(UpdateUserRequest): pass class CreateOrUpdateSessionRequest(CreateSessionRequest): pass ChatResponse = ChunkChatResponse | MessageChatResponse class MapReduceStep(Main): pass class ChatMLTextContentPart(Content): pass class ChatMLImageContentPart(ContentModel): pass class InputChatMLMessage(Message): pass IntegrationDef = ( BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef ) # Patches # ------- def type_property(self: BaseModel) -> str: return ( "function" if self.function else "integration" if self.integration else "system" if self.system else "api_call" if self.api_call else None ) # Patch original Tool class to add 'type' property TaskTool.type = computed_field(property(type_property)) # Patch original Tool class to add 'type' property Tool.type = computed_field(property(type_property)) # Patch original UpdateToolRequest class to add 'type' property UpdateToolRequest.type = computed_field(property(type_property)) # Patch original PatchToolRequest class to add 'type' property PatchToolRequest.type = computed_field(property(type_property)) # Patch Task Workflow Steps # ------------------------- def validate_python_expression(expr: str) -> tuple[bool, str]: try: ast.parse(expr) return True, "" except SyntaxError as e: return False, f"SyntaxError in '{expr}': {e!s}" def validate_jinja_template(template: str) -> tuple[bool, str]: env = jinja2.Environment() try: parsed_template = env.parse(template) for node in parsed_template.body: if isinstance(node, jinja2.nodes.Output): for child in node.nodes: if isinstance(child, jinja2.nodes.Name): # Check if the variable is a valid Python expression is_valid, error = validate_python_expression(child.name) if not is_valid: return ( False, f"Invalid Python expression in Jinja template '{template}': {error}", ) return True, "" except jinja2.exceptions.TemplateSyntaxError as e: return False, f"TemplateSyntaxError in '{template}': {e!s}" @field_validator("evaluate") def validate_evaluate_expressions(cls, v): for key, expr in v.items(): is_valid, error = validate_python_expression(expr) if not is_valid: msg = f"Invalid Python expression in key '{key}': {error}" raise ValueError(msg) return v EvaluateStep.validate_evaluate_expressions = validate_evaluate_expressions @field_validator("arguments") def validate_arguments(cls, v): if isinstance(v, dict): for key, expr in v.items(): if isinstance(expr, str): is_valid, error = validate_python_expression(expr) if not is_valid: msg = f"Invalid Python expression in arguments key '{key}': {error}" raise ValueError(msg) return v ToolCallStep.validate_arguments = validate_arguments # Add the new validator function @field_validator("prompt") def validate_prompt(cls, v): if isinstance(v, str): is_valid, error = validate_jinja_template(v) if not is_valid: msg = f"Invalid Jinja template in prompt: {error}" raise ValueError(msg) elif isinstance(v, list): for item in v: if "content" in item: is_valid, error = validate_jinja_template(item["content"]) if not is_valid: msg = f"Invalid Jinja template in prompt content: {error}" raise ValueError(msg) return v # Patch the original PromptStep class to add the new validator PromptStep.validate_prompt = validate_prompt @field_validator("set") def validate_set_expressions(cls, v): for key, expr in v.items(): is_valid, error = validate_python_expression(expr) if not is_valid: msg = f"Invalid Python expression in set key '{key}': {error}" raise ValueError(msg) return v SetStep.validate_set_expressions = validate_set_expressions @field_validator("log") def validate_log_template(cls, v): is_valid, error = validate_jinja_template(v) if not is_valid: msg = f"Invalid Jinja template in log: {error}" raise ValueError(msg) return v LogStep.validate_log_template = validate_log_template @field_validator("return_") def validate_return_expressions(cls, v): for key, expr in v.items(): is_valid, error = validate_python_expression(expr) if not is_valid: msg = f"Invalid Python expression in return key '{key}': {error}" raise ValueError(msg) return v ReturnStep.validate_return_expressions = validate_return_expressions @field_validator("arguments") def validate_yield_arguments(cls, v): if isinstance(v, dict): for key, expr in v.items(): is_valid, error = validate_python_expression(expr) if not is_valid: msg = f"Invalid Python expression in yield arguments key '{key}': {error}" raise ValueError(msg) return v YieldStep.validate_yield_arguments = validate_yield_arguments @field_validator("if_") def validate_if_expression(cls, v): is_valid, error = validate_python_expression(v) if not is_valid: msg = f"Invalid Python expression in if condition: {error}" raise ValueError(msg) return v IfElseWorkflowStep.validate_if_expression = validate_if_expression @field_validator("over") def validate_over_expression(cls, v): is_valid, error = validate_python_expression(v) if not is_valid: msg = f"Invalid Python expression in over: {error}" raise ValueError(msg) return v @field_validator("reduce") def validate_reduce_expression(cls, v): if v is not None: is_valid, error = validate_python_expression(v) if not is_valid: msg = f"Invalid Python expression in reduce: {error}" raise ValueError(msg) return v MapReduceStep.validate_over_expression = validate_over_expression MapReduceStep.validate_reduce_expression = validate_reduce_expression # Patch workflow # -------------- _CreateTaskRequest = CreateTaskRequest CreateTaskRequest.model_config = ConfigDict(**{ **_CreateTaskRequest.model_config, "extra": "allow", }) @model_validator(mode="after") def validate_subworkflows(self): subworkflows = { k: v for k, v in self.model_dump().items() if k not in _CreateTaskRequest.model_fields } for workflow_name, workflow_definition in subworkflows.items(): try: WorkflowType.model_validate(workflow_definition) setattr(self, workflow_name, WorkflowType(workflow_definition)) except Exception as e: msg = f"Invalid subworkflow '{workflow_name}': {e!s}" raise ValueError(msg) return self CreateTaskRequest.validate_subworkflows = validate_subworkflows # Custom types (not generated correctly) # -------------------------------------- ChatMLContent = ( list[ChatMLTextContentPart | ChatMLImageContentPart] | Tool | BaseChosenToolCall | str | ToolResponse | list[ list[ChatMLTextContentPart | ChatMLImageContentPart] | Tool | BaseChosenToolCall | str | ToolResponse ] ) # Extract ChatMLRole ChatMLRole = BaseEntry.model_fields["role"].annotation # Extract ChatMLSource ChatMLSource = BaseEntry.model_fields["source"].annotation # Extract ExecutionStatus ExecutionStatus = Execution.model_fields["status"].annotation # Extract TransitionType TransitionType = Transition.model_fields["type"].annotation # Assertions to ensure consistency (optional, but recommended for runtime checks) assert ChatMLRole == BaseEntry.model_fields["role"].annotation assert ChatMLSource == BaseEntry.model_fields["source"].annotation assert ExecutionStatus == Execution.model_fields["status"].annotation assert TransitionType == Transition.model_fields["type"].annotation # Create models # ------------- class SystemDef(SystemDef): arguments: dict[str, Any] | None = None class CreateTransitionRequest(Transition): # The following fields are optional in this id: UUID | None = None execution_id: UUID | None = None created_at: AwareDatetime | None = None updated_at: AwareDatetime | None = None metadata: dict[str, Any] | None = None task_token: str | None = None class ToolExecutionResult(BaseModel): """Represents the result of executing a tool""" id: str name: str | None = None output: dict[str, Any] | list[Any] | str error: str | None = None class WebPreviewToolCall(BaseModel): """Represents a WebPreviewTool call from the model""" id: str name: str | None = None type: Literal["web_search_preview"] = "web_search_preview" query: str = Field(default="") class CreateEntryRequest(BaseEntry): timestamp: Annotated[AwareDatetime, Field(default_factory=lambda: utcnow())] @classmethod def from_model_input( cls: type[Self], model: str, *, role: ChatMLRole, content: ChatMLContent | None = None, name: str | None = None, source: ChatMLSource, **kwargs: dict, ) -> Self: tokenizer: dict = select_tokenizer(model=model) token_count = token_counter( model=model, messages=[{"role": role, "content": content, "name": name}] ) return cls( role=role, content=content or [], name=name, source=source, tokenizer=tokenizer["type"], token_count=token_count, model=model, **kwargs, ) # Workflow related models # ----------------------- WorkflowStep = ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | ReturnStep | SleepStep | ErrorWorkflowStep | YieldStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | MapReduceStep ) class Workflow(BaseModel): name: str steps: list[WorkflowStep] # Task spec helper models # ---------------------- class TaskToolDef(BaseModel): type: str name: str spec: dict inherited: bool = False _Task = Task class TaskSpec(_Task): model_config = ConfigDict(extra="ignore") workflows: list[Workflow] tools: list[TaskToolDef] # Remove main field from the model main: None = None class TaskSpecDef(TaskSpec): id: UUID | None = None created_at: AwareDatetime | None = None updated_at: AwareDatetime | None = None class PartialTaskSpecDef(TaskSpecDef): name: str | None = None class Task(_Task): model_config = ConfigDict(**{ **_Task.model_config, "extra": "allow", }) # Patch some models to allow extra fields # -------------------------------------- WorkflowType = RootModel[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | ReturnStep | SleepStep | ErrorWorkflowStep | YieldStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | MapReduceStep ] ] CreateOrUpdateTaskRequest = CreateTaskRequest _PatchTaskRequest = PatchTaskRequest class PatchTaskRequest(_PatchTaskRequest): model_config = ConfigDict(**{ **_PatchTaskRequest.model_config, "extra": "allow", }) _UpdateTaskRequest = UpdateTaskRequest class UpdateTaskRequest(_UpdateTaskRequest): model_config = ConfigDict(**{ **_UpdateTaskRequest.model_config, "extra": "allow", }) Includable = Literal[ "file_search_call.results", "message.input_image.image_url", "computer_call_output.output.image_url", ] # Manually implemented ExecutionStatusEvent model. Rationale: # ---------------------------------------------------------- # The Typespec ExecutionStatusEvent model is not generated correctly by # the OpenAPI generator, as it is used in the `/executions/{id}/status.stream` # SSE endpoint, which is not natively supported by OpenAPI. See: # https://www.speakeasy.com/openapi/content/server-sent-events class ExecutionStatusEvent(BaseModel): """Represents a status update event for an execution.""" execution_id: UUID status: ExecutionStatus # type: ignore updated_at: AwareDatetime error: str | None = None transition_count: int | None = None metadata: dict[str, Any] ================================================ FILE: src/agents-api/agents_api/clients/AGENTS.md ================================================ # AGENTS.md - clients This folder contains API client wrappers for external services used by `agents-api`. Key Points - Implement async HTTP clients using `httpx`. - Obtain and refresh auth tokens via `common/utils/auth.py`. - Handle HTTP errors with typed exceptions from `common/exceptions`. - Write unit tests under `agents-api/tests/`. - Configure endpoints and credentials via environment variables. # Clients ## Purpose - Client libraries for external services - Abstractions for database, storage, and API integrations - Shared connection management ## Key Clients ### pg.py - PostgreSQL client using asyncpg - Connection pool management - Query execution utilities ### temporal.py - Temporal workflow service client - Workflow execution functions - Job management and tracking ### litellm.py - LLM provider client abstraction - Supports multiple models and providers - Handles completion requests and streaming ### async_s3.py and sync_s3.py - S3 storage client for object storage - Used for storing large payloads - Supports both sync and async patterns ### integrations.py - Client for integrations service - Executes integration tools ## Usage Patterns - Clients initialized during application startup - Connection pooling for efficiency - Error handling and retry logic - Async-first approach with proper cleanup ================================================ FILE: src/agents-api/agents_api/clients/__init__.py ================================================ """ The `clients` module contains client classes and functions for interacting with various external services and APIs, abstracting the complexity of HTTP requests and API interactions to provide a simplified interface for the rest of the application. - `pg.py`: Handles communication with the PostgreSQL service, facilitating operations such as retrieving product information. - `temporal.py`: Provides functionality for connecting to Temporal workflows, enabling asynchronous task execution and management. - `feature_flags.py`: Provides feature flag management through Unleash integration for controlled feature rollouts. """ ================================================ FILE: src/agents-api/agents_api/clients/async_s3.py ================================================ from beartype import beartype from temporalio import workflow with workflow.unsafe.imports_passed_through(): import botocore from aiobotocore.client import AioBaseClient from async_lru import alru_cache from xxhash import xxh3_64_hexdigest as xxhash_key from ..env import blob_store_bucket @alru_cache(maxsize=1) async def setup() -> AioBaseClient: from ..app import app client: AioBaseClient | None = getattr(app.state, "s3_client", None) if client is None: msg = "S3 client not initialized" raise RuntimeError(msg) try: await client.head_bucket(Bucket=blob_store_bucket) except botocore.exceptions.ClientError as e: if e.response["Error"]["Code"] == "404": try: await client.create_bucket(Bucket=blob_store_bucket) except botocore.exceptions.ClientError as create_err: if create_err.response["Error"]["Code"] != "BucketAlreadyExists": raise create_err else: raise e return client @alru_cache(maxsize=1024) async def list_buckets() -> list[str]: client = await setup() data = await client.list_buckets() return [bucket["Name"] for bucket in data["Buckets"]] @alru_cache(maxsize=10_000) async def exists(key: str) -> bool: client = await setup() try: await client.head_object(Bucket=blob_store_bucket, Key=key) return True except botocore.exceptions.ClientError as e: if e.response["Error"]["Code"] == "404": return False raise e @beartype async def add_object(key: str, body: bytes, replace: bool = False) -> None: client = await setup() if replace: await client.put_object(Bucket=blob_store_bucket, Key=key, Body=body) return if await exists(key): return await client.put_object(Bucket=blob_store_bucket, Key=key, Body=body) @beartype async def get_object(key: str) -> bytes: client = await setup() response = await client.get_object(Bucket=blob_store_bucket, Key=key) return await response["Body"].read() @beartype async def delete_object(key: str) -> None: client = await setup() await client.delete_object(Bucket=blob_store_bucket, Key=key) @beartype async def add_object_with_hash(body: bytes, replace: bool = False) -> str: key = xxhash_key(body) await add_object(key, body, replace=replace) return key ================================================ FILE: src/agents-api/agents_api/clients/feature_flags.py ================================================ """ Feature flags client for Julep agents-api. Provides OpenFeature integration with a custom Unleash provider for vendor independence. """ import logging import threading from typing import TypedDict from openfeature import api from openfeature.evaluation_context import EvaluationContext from openfeature.flag_evaluation import FlagResolutionDetails, Reason from openfeature.provider import AbstractProvider, Metadata from agents_api.env import testing, unleash_api_token, unleash_app_name, unleash_url logger = logging.getLogger(__name__) class FeatureFlagContext(TypedDict, total=False): """Type definition for feature flag context.""" developer_id: str environment: str class UnleashProvider(AbstractProvider): """OpenFeature provider for Unleash - maintains vendor independence.""" def __init__(self): self._unleash_client = None self._initialized = False def get_metadata(self) -> Metadata: """Return provider metadata.""" return Metadata(name="unleash-provider") def _ensure_initialized(self): """Ensure the Unleash client is initialized.""" if not self._initialized: self._initialize_unleash() self._initialized = True def _initialize_unleash(self): """Initialize the underlying Unleash client.""" # Skip Unleash initialization in testing mode if testing: logger.info("⚠️ Testing mode detected, skipping Unleash initialization") self._unleash_client = None return try: from UnleashClient import UnleashClient # Prepare custom headers for authentication custom_headers = {} if unleash_api_token: # Unleash expects the token without "Bearer" prefix in custom headers custom_headers["Authorization"] = unleash_api_token self._unleash_client = UnleashClient( url=unleash_url, app_name=unleash_app_name, custom_headers=custom_headers ) # Initialize the client self._unleash_client.initialize_client() logger.info(f"✅ Initialized Unleash client with URL: {unleash_url}") except ImportError: logger.warning( "⚠️ UnleashClient not available, feature flags will use default values" ) self._unleash_client = None except Exception as e: logger.error(f"❌ Failed to initialize Unleash client: {e}") logger.warning("⚠️ Feature flags will use default values") self._unleash_client = None def _build_unleash_context(self, evaluation_context: EvaluationContext | None) -> dict: """Convert OpenFeature evaluation context to Unleash context.""" if not evaluation_context: return {} unleash_context = {} # Map targeting key to userId if evaluation_context.targeting_key: # Convert UUID to string if necessary targeting_key = evaluation_context.targeting_key if hasattr(targeting_key, "__str__"): targeting_key = str(targeting_key) unleash_context["userId"] = targeting_key # Add all attributes, converting UUIDs to strings if evaluation_context.attributes: for key, value in evaluation_context.attributes.items(): # Convert UUID objects to strings for JSON serialization if hasattr(value, "__str__") and hasattr(value, "hex"): # UUID-like object unleash_context[key] = str(value) else: unleash_context[key] = value return unleash_context def resolve_boolean_details( self, flag_key: str, default_value: bool, evaluation_context: EvaluationContext | None = None, ) -> FlagResolutionDetails[bool]: """Resolve a boolean feature flag.""" self._ensure_initialized() if not self._unleash_client: return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message="Unleash client not available", ) try: unleash_context = self._build_unleash_context(evaluation_context) result = self._unleash_client.is_enabled(flag_key, unleash_context) logger.debug(f"Feature flag '{flag_key}' evaluated to: {result}") return FlagResolutionDetails( value=result, reason=Reason.TARGETING_MATCH if result else Reason.DEFAULT ) except Exception as e: logger.error(f"❌ Error evaluating feature flag '{flag_key}': {e}") return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message=str(e) ) def resolve_string_details( self, flag_key: str, default_value: str, evaluation_context: EvaluationContext | None = None, ) -> FlagResolutionDetails[str]: """Resolve a string feature flag.""" self._ensure_initialized() if not self._unleash_client: return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message="Unleash client not available", ) try: self._build_unleash_context(evaluation_context) # Unleash primarily supports boolean flags, so we return default for string flags # In a real implementation, you might use variants or custom logic logger.debug( f"String feature flag '{flag_key}' returning default value: {default_value}" ) return FlagResolutionDetails(value=default_value, reason=Reason.DEFAULT) except Exception as e: logger.error(f"❌ Error evaluating string feature flag '{flag_key}': {e}") return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message=str(e) ) def resolve_integer_details( self, flag_key: str, default_value: int, evaluation_context: EvaluationContext | None = None, ) -> FlagResolutionDetails[int]: """Resolve an integer feature flag.""" self._ensure_initialized() if not self._unleash_client: return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message="Unleash client not available", ) try: self._build_unleash_context(evaluation_context) # Unleash primarily supports boolean flags, so we return default for integer flags # In a real implementation, you might use variants or custom logic logger.debug( f"Integer feature flag '{flag_key}' returning default value: {default_value}" ) return FlagResolutionDetails(value=default_value, reason=Reason.DEFAULT) except Exception as e: logger.error(f"❌ Error evaluating integer feature flag '{flag_key}': {e}") return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message=str(e) ) def resolve_float_details( self, flag_key: str, default_value: float, evaluation_context: EvaluationContext | None = None, ) -> FlagResolutionDetails[float]: """Resolve a float feature flag.""" self._ensure_initialized() if not self._unleash_client: return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message="Unleash client not available", ) try: self._build_unleash_context(evaluation_context) # Unleash primarily supports boolean flags, so we return default for float flags # In a real implementation, you might use variants or custom logic logger.debug( f"Float feature flag '{flag_key}' returning default value: {default_value}" ) return FlagResolutionDetails(value=default_value, reason=Reason.DEFAULT) except Exception as e: logger.error(f"❌ Error evaluating float feature flag '{flag_key}': {e}") return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message=str(e) ) def resolve_object_details( self, flag_key: str, default_value: dict | list, evaluation_context: EvaluationContext | None = None, ) -> FlagResolutionDetails[dict | list]: """Resolve an object feature flag.""" self._ensure_initialized() if not self._unleash_client: return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message="Unleash client not available", ) try: self._build_unleash_context(evaluation_context) # Unleash primarily supports boolean flags, so we return default for object flags # In a real implementation, you might use variants or custom logic logger.debug( f"Object feature flag '{flag_key}' returning default value: {default_value}" ) return FlagResolutionDetails(value=default_value, reason=Reason.DEFAULT) except Exception as e: logger.error(f"❌ Error evaluating object feature flag '{flag_key}': {e}") return FlagResolutionDetails( value=default_value, reason=Reason.ERROR, error_message=str(e) ) class FeatureFlagClient: """Feature flag client wrapper for OpenFeature with Unleash provider.""" _instance = None _lock = threading.Lock() def __new__(cls): if not cls._instance: with cls._lock: if not cls._instance: cls._instance = super().__new__(cls) return cls._instance def __init__(self): if not hasattr(self, "_client_initialized"): self._client = None self._provider_initialized = False self._client_initialized = True def _ensure_initialized(self): """Ensure the OpenFeature client is initialized.""" if not self._provider_initialized: self._initialize_provider() self._client = api.get_client("agents-api") self._provider_initialized = True def _initialize_provider(self): """Initialize the OpenFeature provider.""" try: provider = UnleashProvider() api.set_provider(provider) if not testing: logger.info("✅ Initialized OpenFeature with Unleash provider") except Exception as e: logger.error(f"❌ Failed to initialize OpenFeature provider: {e}") logger.warning("⚠️ Falling back to no-op provider") from openfeature.provider.no_op_provider import NoOpProvider api.set_provider(NoOpProvider()) def is_enabled( self, flag_name: str, default_value: bool | None = None, context: FeatureFlagContext | None = None, ) -> bool: """ Check if a feature flag is enabled. Args: flag_name: Name of the feature flag default_value: Default value if flag evaluation fails (uses DEFAULT_FLAGS if None) context: Evaluation context (developer_id, environment, etc.) Returns: Boolean indicating if the feature is enabled """ self._ensure_initialized() try: evaluation_context = None if context: evaluation_context = EvaluationContext( targeting_key=context.get("developer_id"), attributes=context ) if self._client is None: return default_value if default_value is not None else False result = self._client.get_boolean_value( flag_key=flag_name, default_value=default_value if default_value is not None else False, evaluation_context=evaluation_context, ) logger.debug(f"Feature flag '{flag_name}' evaluated to: {result}") return result except Exception as e: logger.error(f"❌ Error evaluating feature flag '{flag_name}': {e}") return default_value if default_value is not None else False # Global feature flag client instance def get_feature_flag_client() -> FeatureFlagClient: """Get the global feature flag client instance.""" return FeatureFlagClient() ================================================ FILE: src/agents-api/agents_api/clients/integrations.py ================================================ from typing import Any from beartype import beartype from httpx import AsyncClient from ..env import integration_service_url __all__: list[str] = ["run_integration_service"] @beartype async def run_integration_service( *, provider: str, arguments: dict, setup: dict | None = None, method: str | None = None, ) -> Any: slug = f"{provider}/{method}" if method else provider url = f"{integration_service_url}/execute/{slug}" setup = setup or None async with AsyncClient(timeout=600) as client: response = await client.post( url, json={"arguments": arguments, "setup": setup}, ) response.raise_for_status() return response.json() @beartype async def convert_to_openai_tool( *, provider: str, method: str | None = None, ) -> Any: slug = f"{provider}/{method}" if method else provider url = f"{integration_service_url}/integrations/{slug}/tool" async with AsyncClient(timeout=600) as client: response = await client.get( url, ) response.raise_for_status() return response.json() ================================================ FILE: src/agents-api/agents_api/clients/litellm.py ================================================ import contextlib from functools import wraps from typing import Literal from uuid import UUID import aiohttp from beartype import beartype from litellm import acompletion as _acompletion from litellm import aembedding as _aembedding from litellm import get_supported_openai_params from litellm.utils import CustomStreamWrapper, ModelResponse, get_valid_models from ..common.exceptions.secrets import ( SecretNotFoundError, # AIDEV-NOTE: catch missing secrets in LLM client ) from ..common.utils.llm_providers import ( get_api_key_env_var_name, get_litellm_model_name, tools_free_models, ) from ..common.utils.secrets import get_secret_by_name from ..common.utils.usage import track_embedding_usage, track_usage from ..env import ( embedding_dimensions, embedding_model_id, enable_responses, litellm_master_key, litellm_url, ) __all__: list[str] = ["acompletion"] def patch_litellm_response( model_response: ModelResponse | CustomStreamWrapper, ) -> ModelResponse | CustomStreamWrapper: """ Patches the response we get from litellm to handle unexpected response formats. """ if isinstance(model_response, ModelResponse): for choice in model_response.choices: if choice.finish_reason == "eos": choice.finish_reason = "stop" elif ( isinstance(model_response, CustomStreamWrapper) and model_response.received_finish_reason == "eos" ): model_response.received_finish_reason = "stop" return model_response @wraps(_acompletion) @beartype async def acompletion( *, model: str, messages: list[dict], custom_api_key: str | None = None, **kwargs, ) -> ModelResponse | CustomStreamWrapper: api_user = kwargs.get("user") # Check if user has a custom API key in secrets api_key_env_var_name = get_api_key_env_var_name(model) secret = None if api_user is not None and api_key_env_var_name: developer_id: UUID = UUID(api_user) with contextlib.suppress(SecretNotFoundError): secret = await get_secret_by_name( developer_id=developer_id, name=api_key_env_var_name, decrypt=True, ) # Determine if we have a custom API key (either provided or from secrets) has_custom_key = custom_api_key or (secret and secret.value) if has_custom_key: # User has their own API key - convert model name and use direct provider if not custom_api_key and secret: custom_api_key = secret.value model = get_litellm_model_name(model) else: # No custom key - use our proxy with openai/ prefix model = f"openai/{model}" supported_params: list[str] = ( get_supported_openai_params(model) or [] ) # Supported params returns Optional[list[str]] supported_params += ["user", "mock_response", "stream_options"] settings = {k: v for k, v in kwargs.items() if k in supported_params} # NOTE: This is a fix for Mistral API, which expects a different message format if model[7:].startswith("mistral"): messages = [ {"role": message["role"], "content": message["content"]} for message in messages ] for message in messages: if "tool_calls" in message and message["tool_calls"] == []: message.pop("tool_calls") if model in tools_free_models: settings.pop("tools", None) kwargs.pop("tools", None) model_response = await _acompletion( model=model, messages=messages, **settings, base_url=None if has_custom_key else litellm_url, api_key=custom_api_key or litellm_master_key, ) response = patch_litellm_response(model_response) # Track usage in database if we have a user ID (which should be the developer ID) user = settings.get("user") if user and isinstance(response, ModelResponse): try: model = response.model await track_usage( developer_id=UUID(user), model=model, messages=messages, response=response, custom_api_used=custom_api_key is not None, metadata={"tags": kwargs.get("tags", [])}, ) except Exception as e: # Log error but don't fail the request if usage tracking fails print(f"Error tracking usage: {e}") return response @wraps(_aembedding) @beartype async def aembedding( *, inputs: str | list[str], model: str = embedding_model_id, embed_instruction: str | None = None, dimensions: int = embedding_dimensions, join_inputs: bool = False, custom_api_key: str | None = None, **settings, ) -> list[list[float]]: # Check if user has a custom API key in secrets api_user = settings.get("user") api_key_env_var_name = get_api_key_env_var_name(model) secret = None if api_user is not None and api_key_env_var_name: developer_id: UUID = UUID(api_user) with contextlib.suppress(SecretNotFoundError): secret = await get_secret_by_name( developer_id=developer_id, name=api_key_env_var_name, decrypt=True, ) # Determine if we have a custom API key (either provided or from secrets) has_custom_key = custom_api_key or (secret and secret.value) if has_custom_key: # User has their own API key - convert model name and use direct provider if not custom_api_key and secret: custom_api_key = secret.value model = get_litellm_model_name(model) else: # No custom key - use our proxy with openai/ prefix model = f"openai/{model}" input = ( [inputs] if isinstance(inputs, str) else ["\n\n".join(inputs)] if join_inputs else inputs ) if embed_instruction: input = [embed_instruction, *input] response = await _aembedding( model=model, input=input, api_base=None if has_custom_key else litellm_url, api_key=custom_api_key or litellm_master_key, drop_params=True, **settings, ) # Track embedding usage if we have a user ID user = settings.get("user") if user: try: model = response.model await track_embedding_usage( developer_id=UUID(user), model=model, inputs=input, response=response, custom_api_used=bool(custom_api_key), metadata={ "request_id": response.id if hasattr(response, "id") else None, "embedding_count": len(input), "tags": settings.get("tags", []), }, ) except Exception as e: # Log error but don't fail the request if usage tracking fails print(f"Error tracking embedding usage: {e}") embedding_list: list[dict[Literal["embedding"], list[float]]] = response.data # Truncate the embedding to the specified dimensions return [ item["embedding"][:dimensions] for item in embedding_list if len(item["embedding"]) >= dimensions ] @beartype async def get_model_list(*, custom_api_key: str | None = None) -> list[dict]: """ Fetches the list of available models from the LiteLLM server. Returns: list[dict]: A list of model information dictionaries """ if enable_responses: ret = get_valid_models() return [{"id": model_name} for model_name in ret] headers = {"accept": "application/json", "x-api-key": custom_api_key or litellm_master_key} async with ( aiohttp.ClientSession() as session, session.get( url=f"{litellm_url}/models" if not custom_api_key else "/models", headers=headers, ) as response, ): response.raise_for_status() data = await response.json() return data["data"] ================================================ FILE: src/agents-api/agents_api/clients/pg.py ================================================ import json import asyncpg from ..env import pg_dsn async def _init_conn(conn) -> None: for datatype in ["json", "jsonb"]: await conn.set_type_codec( datatype, encoder=json.dumps, decoder=json.loads, schema="pg_catalog", ) async def create_db_pool(dsn: str | None = None, **kwargs): return await asyncpg.create_pool( dsn if dsn is not None else pg_dsn, init=_init_conn, **kwargs, ) ================================================ FILE: src/agents-api/agents_api/clients/sync_s3.py ================================================ import os from functools import lru_cache from beartype import beartype from temporalio import workflow with workflow.unsafe.imports_passed_through(): import botocore from xxhash import xxh3_64_hexdigest as xxhash_key from ..env import blob_store_bucket @lru_cache(maxsize=1) def setup(): # INIT S3 # s3_access_key = os.environ.get("S3_ACCESS_KEY") s3_secret_key = os.environ.get("S3_SECRET_KEY") s3_endpoint = os.environ.get("S3_ENDPOINT") session = botocore.session.Session() client = session.create_client( "s3", endpoint_url=s3_endpoint, aws_access_key_id=s3_access_key, aws_secret_access_key=s3_secret_key, config=botocore.config.Config(signature_version="s3v4", retries={"max_attempts": 3}), ) try: client.head_bucket(Bucket=blob_store_bucket) except botocore.exceptions.ClientError as e: if e.response["Error"]["Code"] == "404": try: client.create_bucket(Bucket=blob_store_bucket) except botocore.exceptions.ClientError as create_err: if create_err.response["Error"]["Code"] != "BucketAlreadyExists": raise create_err else: raise e return client @lru_cache(maxsize=1024) def list_buckets() -> list[str]: client = setup() data = client.list_buckets() return [bucket["Name"] for bucket in data["Buckets"]] @lru_cache(maxsize=10_000) def exists(key: str) -> bool: client = setup() try: client.head_object(Bucket=blob_store_bucket, Key=key) return True except botocore.exceptions.ClientError as e: if e.response["Error"]["Code"] == "404": return False raise e @beartype def add_object(key: str, body: bytes, replace: bool = False) -> None: client = setup() if replace: client.put_object(Bucket=blob_store_bucket, Key=key, Body=body) return if exists(key): return client.put_object(Bucket=blob_store_bucket, Key=key, Body=body) @beartype def get_object(key: str) -> bytes: client = setup() response = client.get_object(Bucket=blob_store_bucket, Key=key) return response["Body"].read() @beartype def delete_object(key: str) -> None: client = setup() client.delete_object(Bucket=blob_store_bucket, Key=key) @beartype def add_object_with_hash(body: bytes, replace: bool = False) -> str: key = xxhash_key(body) add_object(key, body, replace=replace) return key ================================================ FILE: src/agents-api/agents_api/clients/temporal.py ================================================ from datetime import timedelta from uuid import UUID from beartype import beartype from temporalio.client import Client, TLSConfig from temporalio.common import ( SearchAttributeKey, SearchAttributePair, TypedSearchAttributes, ) from temporalio.contrib.opentelemetry import TracingInterceptor from temporalio.runtime import PrometheusConfig, Runtime, TelemetryConfig from uuid_extensions import uuid7 from ..autogen.openapi_model import TransitionTarget from ..common.interceptors import CustomClientInterceptor, offload_if_large from ..common.protocol.tasks import ExecutionInput from ..common.retry_policies import DEFAULT_RETRY_POLICY from ..env import ( temporal_api_key, temporal_client_cert, temporal_metrics_bind_host, temporal_metrics_bind_port, temporal_namespace, temporal_private_key, temporal_search_attribute_key, temporal_task_queue, temporal_worker_url, ) from ..worker.codec import pydantic_data_converter async def get_client( worker_url: str = temporal_worker_url, namespace: str = temporal_namespace, data_converter=pydantic_data_converter, ): tls_config = False rpc_metadata = {} if temporal_private_key and temporal_client_cert: tls_config = TLSConfig( client_cert=temporal_client_cert.encode(), client_private_key=temporal_private_key.encode(), ) elif temporal_api_key: tls_config = True rpc_metadata = {"temporal-namespace": namespace} return await Client.connect( worker_url, namespace=namespace, tls=tls_config, interceptors=[CustomClientInterceptor()], data_converter=data_converter, api_key=temporal_api_key or None, rpc_metadata=rpc_metadata, ) async def get_client_with_metrics( worker_url: str = temporal_worker_url, namespace: str = temporal_namespace, data_converter=pydantic_data_converter, ): tls_config = False rpc_metadata = {} if temporal_private_key and temporal_client_cert: tls_config = TLSConfig( client_cert=temporal_client_cert.encode(), client_private_key=temporal_private_key.encode(), ) elif temporal_api_key: tls_config = True rpc_metadata = {"temporal-namespace": namespace} new_runtime = Runtime( telemetry=TelemetryConfig( metrics=PrometheusConfig( bind_address=f"{temporal_metrics_bind_host}:{temporal_metrics_bind_port}", ), ), ) return await Client.connect( worker_url, namespace=namespace, tls=tls_config, data_converter=data_converter, runtime=new_runtime, interceptors=[TracingInterceptor()], api_key=temporal_api_key or None, rpc_metadata=rpc_metadata, ) @beartype async def run_task_execution_workflow( *, execution_input: ExecutionInput, job_id: UUID, start: TransitionTarget | None = None, current_input: dict | None = None, client: Client | None = None, ): from ..workflows.task_execution import TaskExecutionWorkflow if execution_input.execution is None: msg = "execution_input.execution cannot be None" raise ValueError(msg) start: TransitionTarget = start or TransitionTarget( workflow="main", step=0, scope_id=uuid7(), ) client = client or (await get_client()) execution_id = execution_input.execution.id execution_id_key = SearchAttributeKey.for_keyword(temporal_search_attribute_key) old_args = execution_input.arguments execution_input.arguments = offload_if_large(old_args) current_input: dict = current_input or execution_input.arguments return await client.start_workflow( TaskExecutionWorkflow.run, args=[execution_input, start, current_input], task_queue=temporal_task_queue, id=str(job_id), run_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, search_attributes=TypedSearchAttributes([ SearchAttributePair(execution_id_key, str(execution_id)), ]), ) async def get_workflow_handle( *, handle_id: str, client: Client | None = None, ): client = client or (await get_client()) return client.get_workflow_handle( handle_id, ) ================================================ FILE: src/agents-api/agents_api/common/AGENTS.md ================================================ # AGENTS.md - common This folder contains shared utilities, protocol definitions, and exceptions for `agents-api`. Key Points - Exceptions defined in `exceptions/`; always use typed exception classes. - Pydantic models in `protocol/` for request/response schemas. - Utilities in `utils/` leverage context managers for resource handling. - Use `AIDEV-NOTE:` anchors in complex utilities to aid future AI/developer context. - Follow root coding standards for formatting and naming. ## Purpose - Shared utilities, protocols, and type definitions - Cross-cutting concerns like error handling - Data models and protocols for system communication ## Key Components ### protocol/ - Data models for inter-component communication - `models.py`: Core data transformations (task_to_spec, spec_to_task) - `tasks.py`: Task execution state machine and transition logic - `state_machine.py`: Definition of valid state transitions ### utils/ - `task_validation.py`: Validates Python expressions in tasks - `workflows.py`: Helper functions for workflow handling - `messages.py`: Message processing utilities - `mmr.py`: Maximum Marginal Relevance for document search ### exceptions/ - Typed exceptions for different resource types - HTTP-friendly error structures with status codes ## Important Functions - `task_to_spec`: Converts API task model to execution spec - Handles workflow steps, tools, and configuration - Crucial transformation for task execution - Converts step types (e.g., "if" → "if_else" with alias) - `validate_py_expression`: Static validation for expressions - Checks syntax, undefined names, unsafe operations - Used before task execution to catch errors early ## State Machine - Defined in `tasks.py` with valid transition mappings - Execution progresses through states: queued → starting → running → succeeded/failed - Transitions trigger API state updates and execution logging ================================================ FILE: src/agents-api/agents_api/common/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/common/exceptions/__init__.py ================================================ """ This module defines a structured hierarchy of custom exceptions for the agents API, aimed at handling specific error scenarios encountered across various operations. These exceptions are designed to provide clear, actionable error messages and appropriate HTTP status codes, enhancing the API's robustness and usability. Exceptions are organized into categories based on the domain of operation, including: - Agent-related operations (agents.py): Exceptions such as `AgentNotFoundError` and `AgentToolNotFoundError` cater to errors specific to agent management. - Session management (sessions.py): Defines exceptions like `SessionNotFoundError` for handling errors related to session operations. - User interactions (users.py): Includes exceptions such as `UserNotFoundError` for addressing issues encountered during user-related operations. All custom exceptions extend from `BaseCommonException`, which encapsulates common attributes and behavior, including the error message and HTTP status code. This structured approach to exception handling facilitates precise and meaningful error feedback to API consumers, thereby improving the overall developer experience. """ class BaseCommonException(Exception): def __init__(self, msg: str, http_code: int) -> None: super().__init__(msg) self.http_code = http_code ================================================ FILE: src/agents-api/agents_api/common/exceptions/agents.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for agent-related operations. """Defines custom exceptions for agent-related operations in the agents API.""" from uuid import UUID from . import BaseCommonException # AIDEV-NOTE: Base exception class for all agent-related exceptions, inheriting from BaseCommonException. class BaseAgentException(BaseCommonException): """Base exception class for all agent-related exceptions.""" # AIDEV-NOTE: Exception raised when a requested agent cannot be found. class AgentNotFoundError(BaseAgentException): """ Exception raised when a requested agent cannot be found. Attributes: developer_id (UUID | str): The ID of the developer attempting the operation. agent_id (UUID | str): The ID of the agent that was not found. """ def __init__(self, developer_id: UUID | str, agent_id: UUID | str) -> None: # Initialize the exception with a message indicating the missing agent and developer ID. super().__init__( f"Agent {agent_id!s} not found for developer {developer_id!s}", http_code=404, ) # AIDEV-NOTE: Exception raised when a requested tool associated with an agent cannot be found. class AgentToolNotFoundError(BaseAgentException): """ Exception raised when a requested tool associated with an agent cannot be found. Attributes: agent_id (UUID | str): The ID of the agent that was not found. tool_id (UUID | str): The ID of the tool that was not found. """ def __init__(self, agent_id: UUID | str, tool_id: UUID | str) -> None: # Initialize the exception with a message indicating the missing tool and agent ID. super().__init__(f"Tool {tool_id!s} not found for agent {agent_id!s}", http_code=404) # AIDEV-NOTE: Exception raised when a requested document associated with an agent cannot be found. class AgentDocNotFoundError(BaseAgentException): """ Exception raised when a requested document associated with an agent cannot be found. Attributes: agent_id (UUID | str): The ID of the agent that was not found. doc_id (UUID | str): The ID of the document that was not found. """ def __init__(self, agent_id: UUID | str, doc_id: UUID | str) -> None: # Initialize the exception with a message indicating the missing document and agent ID. super().__init__(f"Doc {doc_id!s} not found for agent {agent_id!s}", http_code=404) # AIDEV-NOTE: Exception raised when a requested agent model is not recognized or valid. class AgentModelNotValid(BaseAgentException): """Exception raised when requested model is not recognized.""" def __init__(self, model: str, all_models: list[str]) -> None: super().__init__( f"Unknown model: {model}. Please provide a valid model name." "Available models: " + ", ".join(all_models), http_code=400, ) # AIDEV-NOTE: Exception raised when the API key for a requested model is missing in the configuration. class MissingAgentModelAPIKeyError(BaseAgentException): """Exception raised when API key for requested model is missing.""" def __init__(self, model: str) -> None: super().__init__( f"API key missing for model: {model}. Please provide a valid API key in the configuration", http_code=400, ) ================================================ FILE: src/agents-api/agents_api/common/exceptions/executions.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for task execution operations. from simpleeval import NameNotDefined from thefuzz import fuzz # AIDEV-NOTE: Exception raised during the evaluation of Python expressions within a task step. # Provides suggestions for common errors like Jinja templating syntax or misspelled variable names. class EvaluateError(Exception): def __init__(self, error, expression, values) -> None: error_message = error.message if hasattr(error, "message") else str(error) message = error_message # Catch a possible jinja template error if "unhashable" in error_message and "{{" in expression: message += "\nSuggestion: It seems like you used a jinja template, did you mean to use a python expression?" # Catch a possible misspell in a variable name if isinstance(error, NameNotDefined): misspelledName = error_message.split("'")[1] for variableName in values: if fuzz.ratio(variableName, misspelledName) >= 90.0: message += f"\nDid you mean '{variableName}' instead of '{misspelledName}'?" super().__init__(message) ================================================ FILE: src/agents-api/agents_api/common/exceptions/secrets.py ================================================ """Custom exceptions for secrets management.""" from uuid import UUID from . import BaseCommonException class SecretNotFoundError(BaseCommonException): """Exception raised when a requested secret cannot be found.""" def __init__(self, developer_id: UUID | str, name: str) -> None: super().__init__( f"Secret {name!s} not found for developer {developer_id!s}", http_code=404 ) ================================================ FILE: src/agents-api/agents_api/common/exceptions/sessions.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for session-related operations. """ Defines session-related exceptions for the agents API. These exceptions are used throughout the agents API to handle errors related to session operations, such as when a requested session cannot be found. """ from uuid import UUID from . import BaseCommonException # AIDEV-NOTE: Base exception class for all session-related exceptions, inheriting from BaseCommonException. class BaseSessionException(BaseCommonException): """ Base exception class for session-related errors. This class serves as a base for all session-related exceptions, allowing for a structured exception handling approach specific to session operations. """ # AIDEV-NOTE: Exception raised when a requested session cannot be found. class SessionNotFoundError(BaseSessionException): """ Exception raised when a session cannot be found. This exception is used to indicate that a specific session, identified by its session ID, does not exist or is not accessible for the given developer. Attributes: developer_id (UUID | str): The unique identifier of the developer attempting to access the session. session_id (UUID | str): The unique identifier of the session that was not found. """ def __init__(self, developer_id: UUID | str, session_id: UUID | str) -> None: super().__init__( f"Session {session_id!s} not found for developer {developer_id!s}", http_code=404, ) ================================================ FILE: src/agents-api/agents_api/common/exceptions/tasks.py ================================================ # AIDEV-NOTE: This module defines which exceptions are retryable during task execution and provides a function to determine retryability. """ 🎯 Error Handling: The Art of Knowing When to Try Again This module is like a bouncer at an error club - it decides which errors get a second chance and which ones are permanently banned. Some errors are just having a bad day (like network timeouts), while others are fundamentally problematic (like trying to divide by zero... seriously, who does that?). Remember: To err is human, to retry divine... but only if it makes sense! """ import asyncio from typing import cast import beartype import beartype.roar import box import box.exceptions import fastapi import httpx import jinja2 import jsonschema.exceptions import litellm import pydantic import requests import temporalio.exceptions from tenacity import RetryError from .tools import IntegrationExecutionException # AIDEV-NOTE: Tuple of exception types that are considered non-retryable during task execution. # 🚫 The "No Second Chances" Club - errors that we won't retry # Because sometimes, no means no! NON_RETRYABLE_ERROR_TYPES = ( # Temporal-specific errors (when time itself says no) temporalio.exceptions.WorkflowAlreadyStartedError, temporalio.exceptions.TerminatedError, temporalio.exceptions.CancelledError, # # Built-in Python exceptions (the classics that never go out of style) TypeError, AssertionError, SyntaxError, ValueError, ZeroDivisionError, # Because dividing by zero is still not cool IndexError, AttributeError, LookupError, BufferError, ArithmeticError, KeyError, NameError, NotImplementedError, RecursionError, # When your code goes down the rabbit hole too deep RuntimeError, StopIteration, StopAsyncIteration, IndentationError, # Spaces vs tabs: the eternal debate TabError, # # Unicode-related errors (when characters misbehave) UnicodeError, UnicodeEncodeError, UnicodeDecodeError, UnicodeTranslateError, # # HTTP and API-related errors (when the web says "nope") fastapi.exceptions.RequestValidationError, # # Asynchronous programming errors (async/await gone wrong) asyncio.CancelledError, asyncio.InvalidStateError, GeneratorExit, # # Third-party library exceptions (when other people's code says no) jinja2.exceptions.TemplateSyntaxError, jinja2.exceptions.TemplateNotFound, jsonschema.exceptions.ValidationError, pydantic.ValidationError, requests.exceptions.InvalidURL, requests.exceptions.MissingSchema, # # Box exceptions (when your box is broken) box.exceptions.BoxKeyError, box.exceptions.BoxTypeError, box.exceptions.BoxValueError, # # Beartype exceptions (when your types are unbearable) beartype.roar.BeartypeException, beartype.roar.BeartypeDecorException, beartype.roar.BeartypeDecorHintException, beartype.roar.BeartypeDecorHintNonpepException, beartype.roar.BeartypeDecorHintPepException, beartype.roar.BeartypeDecorHintPepUnsupportedException, beartype.roar.BeartypeDecorHintTypeException, beartype.roar.BeartypeDecorParamException, beartype.roar.BeartypeDecorParamNameException, beartype.roar.BeartypeCallHintParamViolation, beartype.roar.BeartypeCallHintReturnViolation, beartype.roar.BeartypeDecorHintParamDefaultViolation, beartype.roar.BeartypeDoorHintViolation, # # LiteLLM exceptions (when AI has a bad day) litellm.exceptions.NotFoundError, litellm.exceptions.InvalidRequestError, litellm.exceptions.AuthenticationError, litellm.exceptions.ServiceUnavailableError, litellm.exceptions.OpenAIError, ) # AIDEV-NOTE: Tuple of exception types that are considered retryable during task execution. # 🔄 The "Try Again" Club - errors that deserve another shot # Because everyone deserves a second chance... or third... or fourth... RETRYABLE_ERROR_TYPES = ( # LiteLLM exceptions (when AI needs a coffee break) litellm.exceptions.RateLimitError, litellm.exceptions.APIError, # Added to retry on "APIError: OpenAIException - Connection error" # # HTTP/Network related errors (internet having a bad hair day) requests.exceptions.ConnectionError, requests.exceptions.Timeout, requests.exceptions.ConnectTimeout, requests.exceptions.ReadTimeout, httpx.ConnectError, httpx.ConnectTimeout, httpx.ReadTimeout, httpx.WriteTimeout, httpx.PoolTimeout, # # Standard library errors that are typically transient (like a bad mood) ConnectionError, TimeoutError, OSError, # Covers many IO-related errors that may be transient IOError, # # Database/storage related (when the database needs a nap) asyncio.TimeoutError, # # Tenacity exceptions (retry when retrying goes wrong lol) RetryError, # # Tools-related exceptions (when tools have a bad day) IntegrationExecutionException, ) # AIDEV-NOTE: Tuple of HTTP status codes that are considered retryable. # HTTP status codes that say "maybe try again later?" RETRYABLE_HTTP_STATUS_CODES = ( 408, # Request Timeout (server needs a coffee break) 429, # Too Many Requests (slow down, speedster!) 503, # Service Unavailable (server is having a moment) 504, # Gateway Timeout (the internet took a detour) 524, # Gateway Timeout (the internet took a detour) ) # AIDEV-NOTE: Determines if a given exception is retryable based on defined non-retryable, retryable, and HTTP status code lists. def is_retryable_error(error: BaseException) -> bool: """ The Great Error Judge: Decides if an error deserves another chance at life. Think of this function as a very understanding but firm teacher - some mistakes get a do-over, others are learning opportunities (aka failures). Args: error (Exception): The error that's pleading its case Returns: bool: True if the error gets another shot, False if it's game over """ # First, check if it's in the "permanently banned" list if isinstance(error, NON_RETRYABLE_ERROR_TYPES): return False # Check if it's in the "VIP retry club" if isinstance(error, RETRYABLE_ERROR_TYPES): return True # Special handling for HTTP errors (because they're special snowflakes) if isinstance(error, fastapi.exceptions.HTTPException): error = cast(fastapi.exceptions.HTTPException, error) if error.status_code in RETRYABLE_HTTP_STATUS_CODES: return True if isinstance(error, httpx.HTTPStatusError): error = cast(httpx.HTTPStatusError, error) if error.response.status_code in RETRYABLE_HTTP_STATUS_CODES: return True # If we don't know this error, we play it safe and don't retry # (stranger danger!) return False ================================================ FILE: src/agents-api/agents_api/common/exceptions/tools.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for tool-related operations. """ Defines tools-related exceptions for the agents API. """ from ...autogen.openapi_model import BaseIntegrationDef from . import BaseCommonException # AIDEV-NOTE: Base exception class for all tool-related errors, inheriting from BaseCommonException. class BaseToolsException(BaseCommonException): """Base exception for tools-related errors.""" # AIDEV-NOTE: Exception raised when an error occurs during the execution of an integration tool. class IntegrationExecutionException(BaseToolsException): """Exception raised when an error occurs during an integration execution.""" def __init__(self, integration: BaseIntegrationDef, error: str) -> None: integration_str = integration.provider + ( "." + integration.method if integration.method else "" ) super().__init__( f"Error in executing {integration_str}: {error}", http_code=500, ) ================================================ FILE: src/agents-api/agents_api/common/exceptions/users.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for user-related operations. """This module defines custom exceptions related to user operations in the agents-api.""" from uuid import UUID from . import BaseCommonException # AIDEV-NOTE: Base exception class for all user-related errors, inheriting from BaseCommonException. class BaseUserException(BaseCommonException): """ Base exception class for user-related errors. This class serves as a parent for all user-related exceptions to facilitate catching errors specific to user operations. """ # AIDEV-NOTE: Exception raised when a requested user cannot be found. class UserNotFoundError(BaseUserException): """ Exception raised when a requested user cannot be found. Attributes: developer_id (UUID | str): The ID of the developer attempting the operation. user_id (UUID | str): The ID of the user that was not found. """ def __init__(self, developer_id: UUID | str, user_id: UUID | str) -> None: # Construct an error message indicating the user and developer involved in the error. super().__init__( f"User {user_id!s} not found for developer {developer_id!s}", http_code=404, ) # AIDEV-NOTE: Exception raised when a specific document related to a user cannot be found. class UserDocNotFoundError(BaseUserException): """ Exception raised when a specific document related to a user cannot be found. Attributes: user_id (UUID | str): The ID of the user associated with the document. doc_id (UUID | str): The ID of the document that was not found. """ def __init__(self, user_id: UUID | str, doc_id: UUID | str) -> None: # Construct an error message indicating the document and user involved in the error. super().__init__(f"Doc {doc_id!s} not found for user {user_id!s}", http_code=404) ================================================ FILE: src/agents-api/agents_api/common/exceptions/validation.py ================================================ # AIDEV-NOTE: This module defines custom exceptions specifically for validation errors. from . import BaseCommonException # AIDEV-NOTE: Exception raised for validation errors in query parameters. class QueryParamsValidationError(BaseCommonException): """Exception raised for validation errors in query parameters.""" def __init__(self, message: str) -> None: super().__init__(message, http_code=400) ================================================ FILE: src/agents-api/agents_api/common/interceptors.py ================================================ """ This module defines custom interceptors for Temporal activities and workflows. The main purpose of these interceptors is to handle errors and prevent retrying certain types of errors that are known to be non-retryable. """ import inspect from asyncio.exceptions import CancelledError as AsyncioCancelledError from collections.abc import Awaitable, Callable, Sequence from functools import wraps from typing import Any from temporalio import workflow from temporalio.activity import _CompleteAsyncError as CompleteAsyncError from temporalio.client import ( Interceptor as ClientInterceptor, ) from temporalio.client import ( OutboundInterceptor, StartWorkflowInput, WorkflowHandle, ) from temporalio.exceptions import ActivityError, ApplicationError, FailureError, TemporalError from temporalio.service import RPCError from temporalio.worker import ( ActivityInboundInterceptor, ContinueAsNewInput, ExecuteActivityInput, ExecuteWorkflowInput, Interceptor, StartActivityInput, StartChildWorkflowInput, StartLocalActivityInput, WorkflowInboundInterceptor, WorkflowInterceptorClassInput, WorkflowOutboundInterceptor, ) from temporalio.workflow import ( ActivityHandle, ChildWorkflowHandle, ContinueAsNewError, NondeterminismError, NoReturn, ReadOnlyContextError, ) with workflow.unsafe.imports_passed_through(): from ..env import blob_store_cutoff_kb, use_blob_store_for_temporal from ..worker.codec import RemoteObject from .exceptions.tasks import is_retryable_error from .protocol.tasks import ExecutionInput, StepContext, StepOutcome from .utils.memory import total_size # Common exceptions that should be re-raised without modification PASSTHROUGH_EXCEPTIONS = ( ContinueAsNewError, ReadOnlyContextError, NondeterminismError, RPCError, CompleteAsyncError, TemporalError, FailureError, ApplicationError, AsyncioCancelledError, ) def is_too_large(result: Any) -> bool: """ Determine if an object exceeds the size cutoff threshold. Args: result: The object to check Returns: True if the object is larger than the cutoff threshold, False otherwise """ return total_size(result) > blob_store_cutoff_kb * 1024 def load_if_remote(arg: Any | RemoteObject) -> Any: if not use_blob_store_for_temporal: return arg if isinstance(arg, ChildWorkflowHandle): return arg if isinstance(arg, RemoteObject): return arg.load() if isinstance(arg, StepContext): arg.load_inputs() elif isinstance(arg, StepOutcome): arg.load_remote() elif isinstance(arg, ExecutionInput): arg.load_arguments() return arg def offload_if_large[T](result: T) -> T | RemoteObject: if not use_blob_store_for_temporal: return result if isinstance(result, ChildWorkflowHandle): return result if isinstance(result, ActivityHandle): return result if is_too_large(result): return RemoteObject.from_value(result) return result def offload_to_blob_store[S, T]( func: Callable[[S, ExecuteActivityInput | ExecuteWorkflowInput], Awaitable[T]], ) -> Callable[ [S, ExecuteActivityInput | ExecuteWorkflowInput], T | RemoteObject ]: # AIDEV-NOTE: return type adjusted to cover both async and sync wrappers @wraps(func) async def wrapper( self, input: ExecuteActivityInput | ExecuteWorkflowInput, ) -> T | RemoteObject: # Load all remote arguments from the blob store args: Sequence[Any] = input.args if use_blob_store_for_temporal: input.args = [load_if_remote(arg) for arg in args] # Execute the function result = await func(self, input) # Save the result to the blob store if necessary return offload_if_large(result) @wraps(func) def wrapper_sync( self, input: ExecuteActivityInput | ExecuteWorkflowInput, ) -> T | RemoteObject: # Load all remote arguments from the blob store args: Sequence[Any] = input.args if use_blob_store_for_temporal: input.args = [load_if_remote(arg) for arg in args] # Execute the function result = func(self, input) # Save the result to the blob store if necessary # AIDEV-NOTE: wrapper_sync sees func() returns Awaitable; ignore for typing return offload_if_large(result) # type: ignore[invalid-return-type] if inspect.iscoroutinefunction(func): return wrapper return wrapper_sync async def handle_execution_with_errors[I, T]( execution_fn: Callable[[I], Awaitable[T]], input: I, ) -> T: """ Common error handling logic for both activities and workflows. Args: execution_fn: Async function to execute with error handling input: Input to the execution function Returns: The result of the execution function Raises: ApplicationError: For non-retryable errors Any other exception: For retryable errors """ try: return await execution_fn(input) except PASSTHROUGH_EXCEPTIONS: raise except BaseException as e: if not is_retryable_error(e): raise ApplicationError( str(e), type=type(e).__name__, non_retryable=True, ) raise def handle_execution_with_errors_sync[I, T]( execution_fn: Callable[[I], T], input: I, ) -> T: """ Common error handling logic for both activities and workflows. Args: execution_fn: Async function to execute with error handling input: Input to the execution function Returns: The result of the execution function Raises: ApplicationError: For non-retryable errors Any other exception: For retryable errors """ try: return execution_fn(input) except PASSTHROUGH_EXCEPTIONS: raise except BaseException as e: while isinstance(e, ActivityError) and getattr(e, "__cause__", None): e = e.__cause__ if not is_retryable_error(e): raise ApplicationError( str(e), type=type(e).__name__, non_retryable=True, ) raise class CustomActivityInterceptor(ActivityInboundInterceptor): """ Custom interceptor for Temporal activities. This interceptor catches exceptions during activity execution and raises them as non-retryable ApplicationErrors if they are identified as non-retryable errors. """ @offload_to_blob_store async def execute_activity(self, input: ExecuteActivityInput) -> Any: """ Handles activity execution by intercepting errors and determining their retry behavior. """ return await handle_execution_with_errors( super().execute_activity, input, ) class CustomWorkflowInterceptor(WorkflowInboundInterceptor): """ Custom interceptor for Temporal workflows. Handles workflow execution errors and determines their retry behavior. """ def init(self, outbound: WorkflowOutboundInterceptor) -> None: """Initialize with an outbound interceptor. To add a custom outbound interceptor, wrap the given interceptor before sending to the next ``init`` call. """ self.next.init(CustomWorkflowOutboundInterceptor(outbound)) @offload_to_blob_store async def execute_workflow(self, input: ExecuteWorkflowInput) -> Any: """ Executes workflows and handles error cases appropriately. """ return await handle_execution_with_errors( super().execute_workflow, input, ) class CustomWorkflowOutboundInterceptor(WorkflowOutboundInterceptor): """ Custom outbound interceptor for Temporal workflows. """ # @offload_to_blob_store def start_activity(self, input: StartActivityInput) -> ActivityHandle: input.args = [offload_if_large(arg) for arg in input.args] return handle_execution_with_errors_sync( super().start_activity, input, ) @offload_to_blob_store def continue_as_new(self, input: ContinueAsNewInput) -> NoReturn: return handle_execution_with_errors_sync( super().continue_as_new, input, ) @offload_to_blob_store def start_local_activity(self, input: StartLocalActivityInput) -> ActivityHandle: return handle_execution_with_errors_sync( super().start_local_activity, input, ) # @offload_to_blob_store async def start_child_workflow(self, input: StartChildWorkflowInput) -> ChildWorkflowHandle: input.args = [offload_if_large(arg) for arg in input.args] return await handle_execution_with_errors( super().start_child_workflow, input, ) class CustomInterceptor(Interceptor): """ Main interceptor class that provides both activity and workflow interceptors. """ def intercept_activity( self, next: ActivityInboundInterceptor, ) -> ActivityInboundInterceptor: """ Creates and returns a custom activity interceptor. """ return CustomActivityInterceptor(super().intercept_activity(next)) def workflow_interceptor_class( self, input: WorkflowInterceptorClassInput, ) -> type[WorkflowInboundInterceptor] | None: """ Returns the custom workflow interceptor class. """ return CustomWorkflowInterceptor class CustomClientInterceptor(ClientInterceptor): """ Custom interceptor for Temporal. """ def intercept_client(self, next: OutboundInterceptor) -> OutboundInterceptor: return CustomOutboundInterceptor(super().intercept_client(next)) class CustomOutboundInterceptor(OutboundInterceptor): """ Custom outbound interceptor for Temporal workflows. """ # @offload_to_blob_store async def start_workflow(self, input: StartWorkflowInput) -> WorkflowHandle[Any, Any]: """ interceptor for outbound workflow calls """ input.args = [offload_if_large(arg) for arg in input.args] return await handle_execution_with_errors( super().start_workflow, input, ) ================================================ FILE: src/agents-api/agents_api/common/nlp.py ================================================ import re from collections import Counter from functools import lru_cache import spacy from spacy.tokens import Doc from spacy.util import filter_spans # Precompile regex patterns WHITESPACE_RE = re.compile(r"\s+") NON_ALPHANUM_RE = re.compile(r"[^\w\s\-_]+") LONE_HYPHEN_RE = re.compile(r"\s*-\s*(?!\w)|(? str: """Cache cleaned keywords for reuse.""" # First remove non-alphanumeric chars (except whitespace, hyphens, underscores) cleaned = NON_ALPHANUM_RE.sub("", kw).strip() # Replace lone hyphens with spaces cleaned = LONE_HYPHEN_RE.sub(" ", cleaned) # Clean up any resulting multiple spaces return WHITESPACE_RE.sub(" ", cleaned).strip() def extract_keywords(doc: Doc, top_n: int = 25, split_chunks: bool = True) -> list[str]: """Optimized keyword extraction with minimal behavior change.""" excluded_labels = { "TIME", # Times smaller than a day. "PERCENT", # Percentage, including ”%“. "QUANTITY", # Measurements, as of weight or distance. "ORDINAL", # “first”, “second”, etc. "CARDINAL", # Numerals that do not fall under another type. "DATE", # Absolute or relative dates or periods. "MONEY", # Monetary values, including unit. # "PERSON", # People, including fictional. # "NORP", # Nationalities or religious or political groups. # "FAC", # Buildings, airports, highways, bridges, etc. # "ORG", # Companies, agencies, institutions, etc. # "GPE", # Countries, cities, states. # "LOC", # Non-GPE locations, mountain ranges, bodies of water. # "PRODUCT", # Objects, vehicles, foods, etc. (Not services.) # "EVENT", # Named hurricanes, battles, wars, sports events, etc. # "WORK_OF_ART", # Titles of books, songs, etc. # "LAW", # Named documents made into laws. # "LANGUAGE", # Any named language. } # Extract and filter spans in a single pass ent_spans = [ent for ent in doc.ents if ent.label_ not in excluded_labels] # Add more comprehensive stopword filtering for noun chunks chunk_spans = [ chunk for chunk in doc.noun_chunks if not chunk.root.is_stop and not all(token.is_stop for token in chunk) ] all_spans = filter_spans(ent_spans + chunk_spans) # Process spans efficiently and filter out spans that are entirely stopwords keywords = [] ent_keywords = [] seen_texts = set() # Convert ent_spans to set for faster lookup ent_spans_set = set(ent_spans) for span in all_spans: # Skip if all tokens in span are stopwords if all(token.is_stop for token in span): continue text = span.text.strip() lower_text = text.lower() # Skip empty or seen texts if not text or lower_text in seen_texts: continue seen_texts.add(lower_text) ent_keywords.append(text) if span in ent_spans_set else keywords.append(text) # Normalize keywords by replacing multiple spaces with single space and stripping normalized_ent_keywords = [WHITESPACE_RE.sub(" ", kw).strip() for kw in ent_keywords] normalized_keywords = [WHITESPACE_RE.sub(" ", kw).strip() for kw in keywords] if split_chunks: normalized_keywords = [word for kw in normalized_keywords for word in kw.split()] # Count frequencies efficiently ent_freq = Counter(normalized_ent_keywords) freq = Counter(normalized_keywords) top_keywords = [kw for kw, _ in ent_freq.most_common(top_n)] remaining_slots = max(0, top_n - len(top_keywords)) top_keywords += [kw for kw, _ in freq.most_common(remaining_slots)] return [clean_keyword(kw) for kw in top_keywords] @lru_cache(maxsize=1000) def text_to_keywords( paragraph: str, top_n: int = 25, min_keywords: int = 1, split_chunks: bool = True, ) -> set[str]: """ Extracts meaningful keywords/phrases from text. Example: Input: "I like basketball especially Michael Jordan" Output: {"basketball", "Michael Jordan"} Args: paragraph (str): The input text to process top_n (int): Number of top keywords to extract per sentence min_keywords (int): Minimum number of keywords required split_chunks (bool): If True, breaks multi-word noun chunks into individual words Returns: set[str]: Set of keywords/phrases """ if not paragraph or not paragraph.strip(): return set() doc = nlp(paragraph) all_keywords = set() # Use set to avoid duplicates for sent in doc.sents: sent_doc = sent.as_doc() # Extract keywords keywords = extract_keywords(sent_doc, top_n, split_chunks=split_chunks) keywords = [kw for kw in keywords if len(kw) > 1] if len(keywords) < min_keywords: continue all_keywords.update(keywords) return all_keywords # def batch_text_to_tsvector_queries( # paragraphs: list[str], # top_n: int = 10, # proximity_n: int = 10, # min_keywords: int = 1, # n_process: int = 1, # ) -> list[str]: # """ # Processes multiple paragraphs using nlp.pipe for better performance. # Args: # paragraphs (list[str]): List of paragraphs to process # top_n (int): Number of top keywords to include per paragraph # Returns: # list[str]: List of tsquery strings # """ # results = [] # for doc in nlp.pipe(paragraphs, disable=["lemmatizer", "textcat"], n_process=n_process): # queries = set() # Use set to avoid duplicates # for sent in doc.sents: # sent_doc = sent.as_doc() # keywords = extract_keywords(sent_doc, top_n) # if len(keywords) < min_keywords: # continue # keyword_positions = keyword_matcher.find_matches(sent_doc, keywords) # if not keyword_positions: # continue # groups = find_proximity_groups(keywords, keyword_positions, proximity_n) # # Add each group as a single term to our set # for group in groups: # if len(group) > 1: # # Sort by length descending to prioritize longer phrases # sorted_group = sorted(group, key=len, reverse=True) # # For truly proximate multi-word groups, group words # queries.add(" OR ".join(sorted_group)) # else: # # For non-proximate words or single words, add them separately # queries.update(group) # # Join all terms with " OR " # results.append(" OR ".join(queries) if queries else "") # return results ================================================ FILE: src/agents-api/agents_api/common/protocol/__init__.py ================================================ """ The `protocol` module defines the core data structures and settings used across the agents API for managing agents, entries, and sessions. It serves as the foundation for the operation and interaction of different parts of the agents API, facilitating the management of agents, their settings, and session data. - `AgentDefaultSettings`: Defines default settings for an agent, controlling various aspects of the agent's behavior during operation. - `Entry`: Represents an entry in the system, encapsulating details such as ID, session ID, source, role, and content. - `SessionData`: Represents the data associated with a session, including identifiers and session-specific information such as situation, summary, and timestamps. These components are crucial for the effective operation and interaction within the agents API. """ ================================================ FILE: src/agents-api/agents_api/common/protocol/agents.py ================================================ from pydantic import BaseModel class AgentDefaultSettings(BaseModel): """Defines default settings for an agent. These settings control various aspects of the agent's behavior during operation.""" temperature: float = 0.0 """Temperature setting influencing the randomness of the agent's responses. Higher values lead to more random responses.""" top_p: float = 1.0 """Top-p sampling setting controlling the nucleus of the probability distribution to sample from.""" repetition_penalty: float = 1.0 """Penalty applied to discourage repetition in the agent's responses.""" length_penalty: float = 1.0 """Penalty for longer responses, encouraging more concise outputs.""" presence_penalty: float = 0.0 """Penalty applied based on the presence of certain words, influencing content generation.""" frequency_penalty: float = 0.0 """Penalty that decreases the likelihood of frequently used words in the agent's responses.""" min_p: float = 0.01 """Minimum probability threshold for including a word in the agent's response.""" ================================================ FILE: src/agents-api/agents_api/common/protocol/developers.py ================================================ """ This module defines session-related data structures and settings used across the agents API. It includes definitions for session settings and session data models. """ from uuid import UUID from pydantic import AwareDatetime, BaseModel, EmailStr class Developer(BaseModel): """ Represents the data associated with a developer """ id: UUID email: EmailStr active: bool tags: list[str] settings: dict created_at: AwareDatetime created_at: AwareDatetime ================================================ FILE: src/agents-api/agents_api/common/protocol/models.py ================================================ from typing import Any from uuid import UUID from beartype import beartype from pydantic import BaseModel from temporalio import workflow from ...autogen.openapi_model import ( Agent, CreateTaskRequest, CreateToolRequest, Execution, PartialTaskSpecDef, PatchTaskRequest, Session, Task, TaskSpec, TaskSpecDef, TaskToolDef, Tool, UpdateTaskRequest, User, Workflow, ) with workflow.unsafe.imports_passed_through(): from ...worker.codec import RemoteObject # AIDEV-NOTE: Data model representing the input provided to a task execution workflow. # Includes details about the developer, execution, task, agent, tools, and arguments. class ExecutionInput(BaseModel): loaded: bool = False developer_id: UUID execution: Execution | None = None task: TaskSpecDef | None = None agent: Agent agent_tools: list[Tool | CreateToolRequest] arguments: dict[str, Any] | RemoteObject # AIDEV-TODO: Convert fields to only arguments (remote object only), execution_id, developer_id. # TODO: Convert fields to only arguments (remote object only), execution_id, developer_id # Not used at the moment user: User | None = None session: Session | None = None def load_arguments(self) -> None: if isinstance(self.arguments, RemoteObject): self.arguments = self.arguments.load() # type: ignore self.loaded = True @beartype # AIDEV-NOTE: Converts a Task or task request model into a TaskSpecDef, which is used internally for workflow execution. # Includes important notes on the conversion process and field renaming. def task_to_spec( task: Task | CreateTaskRequest | UpdateTaskRequest | PatchTaskRequest, **model_opts, ) -> TaskSpecDef | PartialTaskSpecDef: """ Converts a task to a task specification. IMPORTANT CONVERSION NOTES: - This conversion changes the structure of workflow steps - Raw task dictionaries use step types as keys (e.g., "if": condition) - Converted tasks use Pydantic models with kind_ field and renamed fields to avoid Python keywords: * "if" step becomes an IfElseWorkflowStep with kind_="if_else" and if_=condition * Fields like "if", "in", "from" get renamed to "if_", "in_", "from_" * These fields maintain their original names as aliases in the JSON This conversion is vital to understand when working with task validation, especially for expression validation which needs to handle both formats. """ task_data = task.model_dump( **model_opts, exclude={"version", "developer_id", "task_id", "id", "agent_id"}, ) if "tools" in task_data: del task_data["tools"] tools = [] for tool in task.tools: tool_spec = getattr(tool, tool.type) tool_obj = dict( type=tool.type, spec=tool_spec.model_dump(), **tool.model_dump(exclude={"type"}), ) tools.append(TaskToolDef(**tool_obj)) workflows = [Workflow(name="main", steps=task_data.pop("main"))] for key, steps in list(task_data.items()): if key not in TaskSpec.model_fields: workflows.append(Workflow(name=key, steps=steps)) del task_data[key] cls = PartialTaskSpecDef if isinstance(task, PatchTaskRequest) else TaskSpecDef return cls( workflows=workflows, tools=tools, **task_data, ) # AIDEV-NOTE: Converts a TaskSpec dictionary back into a format suitable for Task or CreateTaskRequest models. def spec_to_task_data(spec: dict) -> dict: task_id = spec.pop("task_id", None) workflows = spec.pop("workflows") workflows_dict = {workflow["name"]: workflow["steps"] for workflow in workflows} tools = spec.pop("tools", []) or [] tools = [{tool["type"]: tool.pop("spec"), **tool} for tool in tools if tool] return { "id": task_id, "tools": tools, **spec, **workflows_dict, } # AIDEV-NOTE: Converts a TaskSpec dictionary or arguments into a Task or CreateTaskRequest Pydantic model. def spec_to_task(**spec) -> Task | CreateTaskRequest: if not spec.get("id"): spec["id"] = spec.pop("task_id", None) if not spec.get("updated_at"): [updated_at_ms, _] = spec.pop("updated_at_ms", None) spec["updated_at"] = updated_at_ms and (updated_at_ms / 1000) cls = Task if spec["id"] else CreateTaskRequest return cls(**spec_to_task_data(spec)) ================================================ FILE: src/agents-api/agents_api/common/protocol/sessions.py ================================================ """ This module defines session-related data structures and settings used across the agents API. It includes definitions for session settings and session data models. """ from typing import cast from uuid import UUID from pydantic import BaseModel from ...autogen.openapi_model import ( Agent, ChatInput, MultiAgentMultiUserSession, Session, SingleAgentMultiUserSession, SingleAgentNoUserSession, SingleAgentSingleUserSession, Tool, User, ) from .agents import AgentDefaultSettings class SessionSettings(AgentDefaultSettings): """ A placeholder for session-specific settings, inheriting from AgentDefaultSettings. Currently, it does not extend the base class with additional properties. """ class SessionData(BaseModel): """ Represents the data associated with a session, including for agents, and users. """ session: Session agents: list[Agent] users: list[User] = [] settings: dict | None = None class Toolset(BaseModel): agent_id: UUID tools: list[Tool] class ChatContext(SessionData): """ Represents the data associated with a context, including for agents, and users. """ toolsets: list[Toolset] def get_active_agent(self) -> Agent: """ Get the active agent from the session data. """ requested_agent: UUID | None = cast(UUID, self.settings and self.settings.get("agent")) if requested_agent: assert requested_agent in [agent.id for agent in self.agents], ( f"Agent {requested_agent} not found in session agents: " f"{[agent.id for agent in self.agents]}" ) return next(agent for agent in self.agents if agent.id == requested_agent) return self.agents[0] def merge_settings(self, chat_input: ChatInput) -> dict: request_settings = chat_input.model_dump(exclude_unset=True) active_agent = self.get_active_agent() default_settings: dict = active_agent.default_settings or {} self.settings = settings = { "model": active_agent.model, **default_settings, **request_settings, } return settings def merge_system_template(self, system_template: str | None) -> str: """ Merge the system template with the active agent's default system template. """ active_agent = self.get_active_agent() return system_template or active_agent.default_system_template def get_active_tools(self) -> list[Tool]: """ Get the active toolset from the session data. """ if len(self.toolsets) == 0: return [] active_agent = self.get_active_agent() active_toolset = next( toolset for toolset in self.toolsets if toolset.agent_id == active_agent.id ) return active_toolset.tools def get_chat_environment(self) -> dict[str, dict | list[dict] | None]: """ Get the chat environment from the session data. """ current_agent = self.get_active_agent() tools = self.get_active_tools() settings: dict | None = self.settings or {} return { "session": self.session.model_dump(), "agents": [agent.model_dump() for agent in self.agents], "current_agent": current_agent.model_dump(), "agent": current_agent.model_dump(), "user": self.users[0].model_dump() if len(self.users) > 0 else None, "users": [user.model_dump() for user in self.users], "settings": settings, "tools": [tool.model_dump() for tool in tools], } def make_session( *, agents: list[UUID], users: list[UUID], **data: dict[str, dict], ) -> Session: """ Create a new session object. """ cls, participants = None, {} match (len(agents), len(users)): case (0, _): msg = "At least one agent must be provided." raise ValueError(msg) case (1, 0): cls = SingleAgentNoUserSession participants = {"agent": agents[0]} case (1, 1): cls = SingleAgentSingleUserSession participants = {"agent": agents[0], "user": users[0]} case (1, u) if u > 1: cls = SingleAgentMultiUserSession participants = {"agent": agents[0], "users": users} case _: cls = MultiAgentMultiUserSession participants = {"agents": agents, "users": users} return cls(**{**data, **participants}) ================================================ FILE: src/agents-api/agents_api/common/protocol/state_machine.py ================================================ from collections.abc import Generator from contextlib import contextmanager from enum import StrEnum from uuid import UUID from pydantic import BaseModel, Field from ...autogen.openapi_model import TransitionTarget class TransitionType(StrEnum): """Enum for transition types in the workflow.""" INIT = "init" INIT_BRANCH = "init_branch" WAIT = "wait" RESUME = "resume" STEP = "step" FINISH = "finish" FINISH_BRANCH = "finish_branch" ERROR = "error" CANCELLED = "cancelled" class ExecutionStatus(StrEnum): """Enum for execution statuses.""" QUEUED = "queued" STARTING = "starting" RUNNING = "running" AWAITING_INPUT = "awaiting_input" SUCCEEDED = "succeeded" FAILED = "failed" CANCELLED = "cancelled" class StateTransitionError(Exception): """Raised when an invalid state transition is attempted.""" class ExecutionState(BaseModel): """Model representing the current state of an execution.""" status: ExecutionStatus transition_type: TransitionType | None = None current_target: TransitionTarget | None = None next_target: TransitionTarget | None = None execution_id: UUID metadata: dict = Field(default_factory=dict) # Valid transitions from each state _valid_transitions: dict[TransitionType | None, list[TransitionType]] = { None: [ TransitionType.INIT, TransitionType.WAIT, TransitionType.ERROR, TransitionType.STEP, TransitionType.CANCELLED, TransitionType.INIT_BRANCH, TransitionType.FINISH, ], TransitionType.INIT: [ TransitionType.WAIT, TransitionType.ERROR, TransitionType.STEP, TransitionType.CANCELLED, TransitionType.INIT_BRANCH, TransitionType.FINISH, ], TransitionType.INIT_BRANCH: [ TransitionType.WAIT, TransitionType.ERROR, TransitionType.STEP, TransitionType.CANCELLED, TransitionType.INIT_BRANCH, TransitionType.FINISH_BRANCH, TransitionType.FINISH, ], TransitionType.WAIT: [ TransitionType.RESUME, TransitionType.STEP, TransitionType.CANCELLED, TransitionType.FINISH, TransitionType.FINISH_BRANCH, ], TransitionType.RESUME: [ TransitionType.WAIT, TransitionType.ERROR, TransitionType.CANCELLED, TransitionType.STEP, TransitionType.FINISH, TransitionType.FINISH_BRANCH, TransitionType.INIT_BRANCH, ], TransitionType.STEP: [ TransitionType.WAIT, TransitionType.ERROR, TransitionType.CANCELLED, TransitionType.STEP, TransitionType.FINISH, TransitionType.FINISH_BRANCH, TransitionType.INIT_BRANCH, ], TransitionType.FINISH_BRANCH: [ TransitionType.WAIT, TransitionType.ERROR, TransitionType.CANCELLED, TransitionType.STEP, TransitionType.FINISH, TransitionType.INIT_BRANCH, ], # Terminal states TransitionType.FINISH: [], TransitionType.ERROR: [], TransitionType.CANCELLED: [], } # Mapping from transition types to execution statuses _transition_to_status: dict[TransitionType | None, ExecutionStatus] = { None: ExecutionStatus.QUEUED, TransitionType.INIT: ExecutionStatus.STARTING, TransitionType.INIT_BRANCH: ExecutionStatus.RUNNING, TransitionType.WAIT: ExecutionStatus.AWAITING_INPUT, TransitionType.RESUME: ExecutionStatus.RUNNING, TransitionType.STEP: ExecutionStatus.RUNNING, TransitionType.FINISH: ExecutionStatus.SUCCEEDED, TransitionType.FINISH_BRANCH: ExecutionStatus.RUNNING, TransitionType.ERROR: ExecutionStatus.FAILED, TransitionType.CANCELLED: ExecutionStatus.CANCELLED, } class ExecutionStateMachine: """ A state machine for managing execution state transitions with validation. Uses context managers for safe state transitions. """ def __init__(self, execution_id: UUID) -> None: """Initialize the state machine with QUEUED status.""" self.state = ExecutionState( status=ExecutionStatus.QUEUED, execution_id=execution_id, ) def _validate_transition(self, new_type: TransitionType) -> bool: """Validate if a transition is allowed from the current state.""" return new_type in _valid_transitions[self.state.transition_type] @contextmanager def transition_to( self, transition_type: TransitionType, current_target: TransitionTarget | None = None, next_target: TransitionTarget | None = None, metadata: dict | None = None, ) -> Generator[ExecutionState, None, None]: """ Context manager for safely transitioning to a new state. Args: transition_type: The type of transition to perform current_target: The current workflow target next_target: The next workflow target metadata: Optional metadata for the transition Raises: StateTransitionError: If the transition is invalid """ if not self._validate_transition(transition_type): msg = f"Invalid transition from {self.state.transition_type} to {transition_type}" raise StateTransitionError(msg) # Store previous state for rollback previous_state = self.state.model_copy(deep=True) try: # Update the state self.state.transition_type = transition_type self.state.status = _transition_to_status[transition_type] self.state.current_target = current_target self.state.next_target = next_target if metadata: self.state.metadata.update(metadata) yield self.state except Exception as e: # Rollback on error self.state = previous_state msg = f"Transition failed: {e!s}" raise StateTransitionError(msg) from e @property def is_terminal(self) -> bool: """Check if the current state is terminal.""" return ( self.state.transition_type is not None and not _valid_transitions[self.state.transition_type] ) @property def current_status(self) -> ExecutionStatus: """Get the current execution status.""" return self.state.status ================================================ FILE: src/agents-api/agents_api/common/protocol/tasks.py ================================================ from typing import Annotated, Any, Literal from uuid import UUID from temporalio import workflow from temporalio.exceptions import ApplicationError with workflow.unsafe.imports_passed_through(): from pydantic import BaseModel, Field, computed_field from pydantic_partial import create_partial_model from ...autogen.openapi_model import ( CreateToolRequest, CreateTransitionRequest, ExecutionStatus, Tool, ToolRef, TransitionTarget, TransitionType, Workflow, WorkflowStep, ) from ...common.utils.expressions import evaluate_expressions from ...common.utils.secrets import get_secrets_list from ...worker.codec import RemoteObject from ...env import max_steps_accessible_in_tasks from ...queries.executions import ( list_execution_inputs_data, list_execution_state_data, ) from ...queries.utils import serialize_model_data from .models import ExecutionInput # AIDEV-TODO: Maybe we should use a library for this state machine logic. # AIDEV-NOTE: Defines the valid state transitions for task executions. # # init -> wait | error | step | cancelled | init_branch | finish # init_branch -> wait | error | step | cancelled | finish_branch # wait -> resume | error | cancelled # resume -> wait | error | cancelled | step | finish | finish_branch | init_branch # step -> wait | error | cancelled | step | finish | finish_branch | init_branch # finish_branch -> wait | error | cancelled | step | finish | init_branch # error -> # Mermaid Diagram # ```mermaid # --- # title: Execution state machine # --- # stateDiagram-v2 # [*] --> queued # queued --> starting # queued --> cancelled # starting --> cancelled # starting --> failed # starting --> running # running --> running # running --> awaiting_input # running --> cancelled # running --> failed # running --> succeeded # awaiting_input --> running # awaiting_input --> cancelled # cancelled --> [*] # succeeded --> [*] # failed --> [*] # ``` # TODO: figure out how to type this valid_transitions: dict[TransitionType, list[TransitionType]] = { # Start state "init": ["wait", "error", "step", "cancelled", "init_branch", "finish"], "init_branch": [ "wait", "error", "step", "cancelled", "init_branch", "finish_branch", "finish", ], # End states "finish": [], "error": [], "cancelled": [], # Intermediate states "wait": ["resume", "step", "cancelled", "finish", "finish_branch"], "resume": [ "wait", "error", "cancelled", "step", "finish", "finish_branch", "init_branch", ], "step": [ "wait", "error", "cancelled", "step", "finish", "finish_branch", "init_branch", ], "finish_branch": [ "wait", "error", "cancelled", "step", "finish", "init_branch", "finish_branch", ], } # type: ignore # AIDEV-NOTE: Maps valid previous execution statuses for each current status. valid_previous_statuses: dict[ExecutionStatus, list[ExecutionStatus]] = { "running": ["starting", "awaiting_input", "running"], "starting": ["queued"], "queued": [], "awaiting_input": ["starting", "running"], "cancelled": ["queued", "starting", "awaiting_input", "running"], "succeeded": ["starting", "awaiting_input", "running"], "failed": ["starting", "running"], } # type: ignore # AIDEV-NOTE: Maps transition types to corresponding execution statuses. transition_to_execution_status: dict[TransitionType | None, ExecutionStatus] = { None: "queued", "init": "starting", "init_branch": "running", "wait": "awaiting_input", "resume": "running", "step": "running", "finish": "succeeded", "finish_branch": "running", "error": "failed", "cancelled": "cancelled", } # type: ignore # AIDEV-NOTE: Represents a partial state transition during task execution. class PartialTransition(create_partial_model(CreateTransitionRequest)): user_state: dict[str, Any] = Field(default_factory=dict) # AIDEV-NOTE: Represents the result and metadata of a workflow execution. class WorkflowResult(BaseModel): """ Represents the result of a workflow execution, including metadata about how it was completed. """ state: PartialTransition returned: bool = ( False # True if execution of a sub-workflow ended due to a return statement ) metadata: dict[str, Any] = Field(default_factory=dict) # AIDEV-NOTE: Provides context for the current step execution, including execution input, cursor, and current input. class StepContext(BaseModel): loaded: bool = False execution_input: ExecutionInput cursor: TransitionTarget current_input: Any | RemoteObject def load_inputs(self) -> None: self.execution_input.load_arguments() if isinstance(self.current_input, RemoteObject): self.current_input = self.current_input.load() self.loaded = True # AIDEV-NOTE: To get the tools available for the current step, considering agent and task tools. async def tools(self) -> list[Tool | CreateToolRequest]: execution_input = self.execution_input task = execution_input.task agent_tools = execution_input.agent_tools secrets = {} step_tools: Literal["all"] | list[ToolRef | CreateToolRequest] = getattr( self.current_step, "tools", "all", ) if step_tools != "all": if not all(tool and isinstance(tool, CreateToolRequest) for tool in step_tools): msg = "Invalid tools for step (ToolRef not supported yet)" raise ApplicationError(msg) return step_tools # Need to convert task.tools (list[TaskToolDef]) to list[Tool] task_tools = [] tools = task.tools if task else [] inherit_tools = task.inherit_tools if task else False secrets_query_result = await get_secrets_list(self.execution_input.developer_id, True) if tools: secrets = {secret.name: secret.value for secret in secrets_query_result} for tool in tools: tool_def = tool.model_dump() spec = tool_def.pop("spec", {}) or {} evaluated_spec = ( evaluate_expressions(spec, values={"secrets": secrets}) if spec else {} ) task_tools.append( CreateToolRequest(**{tool_def["type"]: evaluated_spec, **tool_def}), ) if not inherit_tools: return task_tools # Remove duplicates from agent_tools filtered_tools = [t for t in agent_tools if t.name not in (x.name for x in tools)] return filtered_tools + task_tools @computed_field @property # AIDEV-NOTE: Computed property to get the current workflow based on the cursor. def current_workflow(self) -> Annotated[Workflow, Field(exclude=True)]: workflows: list[Workflow] = self.execution_input.task.workflows return next(wf for wf in workflows if wf.name == self.cursor.workflow) @computed_field @property # AIDEV-NOTE: Computed property to get the current step definition based on the cursor. def current_step(self) -> Annotated[WorkflowStep, Field(exclude=True)]: return self.current_workflow.steps[self.cursor.step] @computed_field @property # AIDEV-NOTE: Computed property to get the current scope ID from the cursor. def current_scope_id(self) -> Annotated[UUID, Field(exclude=True)]: return self.cursor.scope_id @computed_field @property # AIDEV-NOTE: Computed property to check if the current step is the last step in the workflow. def is_last_step(self) -> Annotated[bool, Field(exclude=True)]: return (self.cursor.step + 1) == len(self.current_workflow.steps) @computed_field @property # AIDEV-NOTE: Computed property to check if the current step is the first step in the workflow. def is_first_step(self) -> Annotated[bool, Field(exclude=True)]: return self.cursor.step == 0 @computed_field @property # AIDEV-NOTE: Computed property to check if the current workflow is the main workflow. def is_main(self) -> Annotated[bool, Field(exclude=True)]: return self.cursor.workflow == "main" def model_dump(self, *args, **kwargs) -> dict[str, Any]: dump = super().model_dump(*args, **kwargs) execution_input: dict = dump.pop("execution_input") return dump | execution_input # AIDEV-NOTE: Retrieves historical inputs, labels, and state for the current execution scope. async def get_inputs( self, limit: int = 50 ) -> tuple[list[Any], list[str | None], dict[str, Any]]: if self.execution_input.execution is None: return [], [], {} inputs = [] labels = [] state = {} scope_id = self.current_scope_id transitions = await list_execution_inputs_data( execution_id=self.execution_input.execution.id, direction="asc", scope_id=scope_id, ) # type: ignore[not-callable] assert len(transitions) > 0, "No transitions found" for transition in transitions: inputs.append(transition.output) labels.append(transition.step_label) transitions = await list_execution_state_data( execution_id=self.execution_input.execution.id, direction="asc", scope_id=scope_id, ) # type: ignore[not-callable] for transition in transitions: state.update(transition.output) return inputs, labels, state # AIDEV-NOTE: Prepares the step context by loading inputs and retrieving historical data for expression evaluation. async def prepare_for_step( self, limit: int = max_steps_accessible_in_tasks, connection_pool=None, *args, **kwargs ) -> dict[str, Any]: current_input = self.current_input if isinstance(current_input, RemoteObject): current_input = current_input.load() current_input = serialize_model_data(current_input) inputs, labels, state = await self.get_inputs(limit=limit) labels = labels[1:] # Merge execution inputs into the dump dict dump = self.model_dump(*args, **kwargs) steps = {} for i, input in enumerate(inputs): step = {} step["input"] = input if i + 1 < len(inputs): step["output"] = inputs[i + 1] if labels[i]: steps[labels[i]] = step steps[i] = step secrets_query_result = await get_secrets_list( self.execution_input.developer_id, True, connection_pool=connection_pool ) secrets = {secret.name: secret.value for secret in secrets_query_result} dump["state"] = state dump["steps"] = steps dump["inputs"] = {i: step["input"] for i, step in steps.items()} dump["outputs"] = {i: step["output"] for i, step in steps.items() if "output" in step} dump["secrets"] = secrets return dump | {"_": current_input} # AIDEV-NOTE: Represents the outcome of executing a single task step. class StepOutcome(BaseModel): error: str | None = None output: Any transition_to: tuple[TransitionType, TransitionTarget | RemoteObject] | None = None def load_remote(self) -> None: if isinstance(self.transition_to[1], RemoteObject): self.transition_to = (self.transition_to[0], self.transition_to[1].load()) if isinstance(self.output, RemoteObject): self.output = self.output.load() if isinstance(self.error, RemoteObject): self.error = self.error.load() ================================================ FILE: src/agents-api/agents_api/common/retry_policies.py ================================================ # from datetime import timedelta # from temporalio.common import RetryPolicy # DEFAULT_RETRY_POLICY = RetryPolicy( # initial_interval=timedelta(seconds=1), # backoff_coefficient=2, # maximum_attempts=25, # maximum_interval=timedelta(seconds=300), # ) # FIXME: Adding both interceptors and retry policy (even with `non_retryable_errors` not set) # is causing the errors to be retried. We need to find a workaround for this. DEFAULT_RETRY_POLICY = None ================================================ FILE: src/agents-api/agents_api/common/utils/__init__.py ================================================ """ The `utils` module within the `agents-api` project offers a collection of utility functions designed to support various aspects of the application. This includes: - `pg.py`: Utilities for interacting with the PostgreSQL API client, including data mutation processes. - `datetime.py`: Functions for handling date and time operations, ensuring consistent use of time zones and formats across the application. - `json.py`: Custom JSON utilities, including a custom JSON encoder for handling specific object types like UUIDs, and a utility function for JSON serialization with support for default values for None objects. - `memory.py`: Functions for memory management, including utilities to accurately calculate the size of complex nested objects. These utilities are essential for the internal operations of the `agents-api`, providing common functionalities that are reused across different parts of the application. """ from .memory import total_size as total_size ================================================ FILE: src/agents-api/agents_api/common/utils/checks.py ================================================ import logging from typing import Literal from uuid import UUID from httpx import AsyncClient from ...clients import litellm from ...clients.temporal import get_client from ...env import integration_service_url from ...queries.agents.list_agents import list_agents as list_agents_query HealthStatus = Literal["ok", "error"] ServiceHealth = dict[str, HealthStatus] async def check_postgres() -> HealthStatus: """Check PostgreSQL database health.""" try: await list_agents_query( developer_id=UUID("00000000-0000-0000-0000-000000000000"), ) return "ok" except Exception as e: logging.error("Postgres health check failed: %s", str(e)) return "error" async def check_temporal() -> HealthStatus: """Check Temporal service health.""" try: client = await get_client() await client.count_workflows() return "ok" except Exception as e: logging.error("Temporal health check failed: %s", str(e)) return "error" async def check_litellm() -> HealthStatus: """Check LiteLLM service health.""" try: await litellm.get_model_list() return "ok" except Exception as e: logging.error("LiteLLM health check failed: %s", str(e)) return "error" async def check_integration_service() -> HealthStatus: """Check Integration service health.""" try: async with AsyncClient(timeout=10) as client: response = await client.get( f"{integration_service_url}/integrations", ) response.raise_for_status() return "ok" except Exception as e: logging.error("Integration service health check failed: %s", str(e)) return "error" ================================================ FILE: src/agents-api/agents_api/common/utils/datetime.py ================================================ #!/usr/bin/env python3 from datetime import UTC, datetime def utcnow(): return datetime.now(UTC) ================================================ FILE: src/agents-api/agents_api/common/utils/db_exceptions.py ================================================ """ Common database exception handling utilities. """ import inspect import re import socket from collections.abc import Callable from functools import partialmethod, wraps import asyncpg import pydantic from beartype.roar import BeartypeCallHintParamViolation from fastapi import HTTPException from agents_api.common.exceptions.validation import QueryParamsValidationError invalid_ref_re = re.compile(r"invalid (\w+) reference", re.IGNORECASE) def partialclass(cls, *args, **kwargs): cls_signature = inspect.signature(cls) bound = cls_signature.bind_partial(*args, **kwargs) # The `updated=()` argument is necessary to avoid a TypeError when using @wraps for a class @wraps(cls, updated=()) class NewCls(cls): __init__ = partialmethod(cls.__init__, *bound.args, **bound.kwargs) return NewCls def common_db_exceptions( resource_name: str, operations: list[str] | None = None, ) -> dict[ type[BaseException] | Callable[[BaseException], bool], type[BaseException] | Callable[[BaseException], BaseException], ]: """ Returns a mapping of common database exceptions to appropriate HTTP exceptions. This is commonly used with the @rewrap_exceptions decorator. Args: resource_name (str): The name of the resource being operated on (e.g. "agent", "task", "user") operations (list[str] | None, optional): List of operations being performed. Used to customize error messages. Defaults to None. Returns: dict: A mapping of database exceptions to HTTP exceptions """ # Helper to format operation-specific messages def get_operation_message(base_msg: str) -> str: if not operations: return base_msg op_str = " or ".join(operations) return f"{base_msg} during {op_str}" def _invalid_reference_error(e: BaseException) -> HTTPException: m = invalid_ref_re.match(str(e)) entity = "" if m is None else m.group(1) return HTTPException( status_code=409, detail=get_operation_message(f"Reference to {entity} not found"), ) exceptions = { # Unique constraint violations - usually means a resource with same unique key exists lambda e: isinstance(e, asyncpg.RaiseError) and "content already exists" in str(e).lower(): partialclass( HTTPException, status_code=409, detail=get_operation_message(f"A {resource_name} with this content already exists"), ), lambda e: isinstance(e, asyncpg.RaiseError) and invalid_ref_re.match(str(e)): _invalid_reference_error, # Invalid participant ID error lambda e: isinstance(e, asyncpg.RaiseError) and "Invalid participant_id:" in str(e): partialclass( HTTPException, status_code=400, detail=get_operation_message( "The specified participant ID is invalid for the given participant type" ), ), # Foreign key violations - usually means a referenced resource doesn't exist asyncpg.ForeignKeyViolationError: partialclass( HTTPException, status_code=404, detail=get_operation_message( f"The specified {resource_name} or its dependencies do not exist", ), ), # Unique constraint violations - usually means a resource with same unique key exists asyncpg.UniqueViolationError: partialclass( HTTPException, status_code=409, detail=get_operation_message( f"A {resource_name} with these unique properties already exists", ), ), # Check constraint violations - usually means invalid data that violates DB constraints asyncpg.CheckViolationError: partialclass( HTTPException, status_code=400, detail=get_operation_message( f"The provided {resource_name} data violates one or more constraints", ), ), # Data type/format errors asyncpg.DataError: partialclass( HTTPException, status_code=400, detail=get_operation_message(f"Invalid {resource_name} data provided"), ), # No rows found for update/delete operations asyncpg.NoDataFoundError: partialclass( HTTPException, status_code=404, detail=get_operation_message(f"{resource_name.title()} not found"), ), # Connection errors (timeouts, etc) socket.gaierror: partialclass( HTTPException, status_code=429, detail="Resource busy. Please try again later.", ), # Invalid text representation asyncpg.InvalidTextRepresentationError: partialclass( HTTPException, status_code=400, detail=get_operation_message(f"Invalid text format in {resource_name} data"), ), # Numeric value out of range asyncpg.NumericValueOutOfRangeError: partialclass( HTTPException, status_code=400, detail=get_operation_message( f"Numeric value in {resource_name} data is out of allowed range", ), ), # String data right truncation asyncpg.StringDataRightTruncationError: partialclass( HTTPException, status_code=400, detail=get_operation_message( f"Text data in {resource_name} is too long for the field", ), ), # Not null violation asyncpg.NotNullViolationError: partialclass( HTTPException, status_code=400, detail=get_operation_message(f"Required {resource_name} field cannot be null"), ), # Python standard exceptions ValueError: partialclass( HTTPException, status_code=400, detail=get_operation_message(f"Invalid value provided for {resource_name}"), ), TypeError: partialclass( HTTPException, status_code=400, detail=get_operation_message(f"Invalid type for {resource_name}"), ), AttributeError: partialclass( HTTPException, status_code=404, detail=get_operation_message(f"Required attribute not found for {resource_name}"), ), KeyError: partialclass( HTTPException, status_code=404, detail=get_operation_message(f"Required key not found for {resource_name}"), ), AssertionError: partialclass( HTTPException, status_code=404, detail=get_operation_message(f"No {resource_name} found"), ), # Pydantic validation errors - note that FastAPI will handle these # through its own exception handler for RequestValidationError pydantic.ValidationError: lambda e: partialclass( HTTPException, status_code=422, detail={ "message": get_operation_message(f"Validation failed for {resource_name}"), "code": "validation_error", "details": e.errors(), }, )(e), QueryParamsValidationError: lambda e: partialclass( HTTPException, status_code=400, detail=str(e), ), lambda e: isinstance(e, BeartypeCallHintParamViolation) and "typing.Literal['asc', 'desc']" in str(e): partialclass( HTTPException, status_code=400, detail="Invalid sort direction", ), lambda e: isinstance(e, BeartypeCallHintParamViolation) and ( "typing.Literal['created_at', 'updated_at']" in str(e) or "typing.Literal['created_at', 'timestamp']" in str(e) ): partialclass( HTTPException, status_code=400, detail="Invalid sort field", ), } # Add operation-specific exceptions if operations: if "delete" in operations: exceptions.update({ # Handle cases where deletion is blocked by dependent records lambda e: isinstance(e, asyncpg.ForeignKeyViolationError) and "still referenced" in str(e): partialclass( HTTPException, status_code=409, detail=f"Cannot delete {resource_name} because it is still referenced by other records", ), }) if "update" in operations: exceptions.update({ # Handle cases where update would affect multiple rows asyncpg.CardinalityViolationError: partialclass( HTTPException, status_code=409, detail=f"Update would affect multiple {resource_name} records", ), }) return exceptions ================================================ FILE: src/agents-api/agents_api/common/utils/evaluator.py ================================================ import asyncio import base64 import csv import datetime as dt import io import json import math import random import statistics import string import time import urllib.parse from collections import deque from collections.abc import Callable, Sequence from dataclasses import dataclass from functools import reduce from threading import Lock as ThreadLock from typing import Any, Literal, ParamSpec, TypeVar, cast import markdown2 import markdownify import re2 from beartype import beartype from simpleeval import EvalWithCompoundTypes, SimpleEval from ...autogen.openapi_model import SystemDef from ...common.nlp import nlp from . import yaml from .humanization_utils import humanize_paragraph, reassemble_markdown, split_with_langchain # Security limits MAX_STRING_LENGTH = 1_000_000 # 1MB MAX_COLLECTION_SIZE = 10_000 MAX_RANGE_SIZE = 1_000_000 T = TypeVar("T") R = TypeVar("R") P = ParamSpec("P") def safe_range(*args): result = range(*args) if len(result) > MAX_RANGE_SIZE: msg = f"Range size exceeds maximum of {MAX_RANGE_SIZE}" raise ValueError(msg) return result @beartype def safe_json_loads(s: str) -> Any: """ Safely load a JSON string with size limits. Args: s: JSON string to parse Returns: Parsed JSON data Raises: ValueError: If string exceeds size limit """ if len(s) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) return json.loads(s) @beartype def safe_yaml_load(s: str) -> Any: """ Safely load a YAML string with size limits. Args: s: YAML string to parse Returns: Parsed YAML data Raises: ValueError: If string exceeds size limit """ if len(s) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) return yaml.load(s) @beartype def safe_base64_decode(s: str) -> str: """ Safely decode a base64 string with size limits. Args: s: Base64 string to decode Returns: Decoded UTF-8 string Raises: ValueError: If string exceeds size limit or is invalid base64 """ if len(s) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) try: return base64.b64decode(s).decode("utf-8") except Exception as e: msg = f"Invalid base64 string: {e}" raise ValueError(msg) @beartype def safe_base64_encode(s: str) -> str: """ Safely encode a string to base64 with size limits. Args: s: String to encode Returns: Base64 encoded string Raises: ValueError: If string exceeds size limit """ if len(s) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) return base64.b64encode(s.encode("utf-8")).decode("utf-8") @beartype def safe_random_choice(seq: list[Any] | tuple[Any, ...] | str) -> Any: """ Safely choose a random element from a sequence with size limits. Args: seq: A sequence (list, tuple, or string) to choose from Returns: A randomly selected element Raises: ValueError: If sequence exceeds size limit TypeError: If input is not a valid sequence type """ if len(seq) > MAX_COLLECTION_SIZE: msg = f"Sequence exceeds maximum size of {MAX_COLLECTION_SIZE}" raise ValueError(msg) return random.choice(seq) @beartype def safe_random_sample(population: list[T] | tuple[T, ...] | str, k: int) -> list[T]: """ Safely sample k elements from a population with size limits. Args: population: A sequence to sample from k: Number of elements to sample Returns: A list containing k randomly selected elements Raises: ValueError: If population/sample size exceeds limits TypeError: If input is not a valid sequence type """ if not isinstance(population, list | tuple | str): msg = "Expected a sequence (list, tuple, or string)" raise TypeError(msg) if len(population) > MAX_COLLECTION_SIZE: msg = f"Population exceeds maximum size of {MAX_COLLECTION_SIZE}" raise ValueError(msg) if k > MAX_COLLECTION_SIZE: msg = f"Sample size exceeds maximum of {MAX_COLLECTION_SIZE}" raise ValueError(msg) if k > len(population): msg = "Sample size cannot exceed population size" raise ValueError(msg) # AIDEV-NOTE: cast random.sample's return to list[T] for type-checker return cast(list[T], random.sample(population, k)) @beartype def chunk_doc(string: str) -> list[str]: """ Chunk a string into sentences. Args: string: The text to chunk into sentences Returns: A list of sentence chunks Raises: ValueError: If string exceeds size limit """ if len(string) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) doc = nlp(string) return [" ".join([sent.text for sent in chunk]) for chunk in doc._.chunks] def safe_extract_json(string: str): """ Safely extract and parse JSON from a string, handling code blocks. Args: string: String that may contain JSON data, possibly in a code block Returns: Parsed JSON data Raises: ValueError: If string exceeds size limit or JSON parsing fails """ if len(string) > MAX_STRING_LENGTH: msg = f"String exceeds maximum length of {MAX_STRING_LENGTH}" raise ValueError(msg) # Check if the string contains code block markers (support both ```json and plain ```) if "```" in string: # First try ```json blocks if "```json" in string: start_marker = string.find("```json") + 7 end_marker = string.find("```", start_marker) # Then try plain ``` blocks that might contain JSON else: start_marker = string.find("```") + 3 end_marker = string.find("```", start_marker) # Verify we found a valid start marker if "```json" in string and start_marker < 7: # If ```json wasn't found, find returns -1, so start_marker would be 6 msg = "Code block has invalid or missing markers" raise ValueError(msg) if "```json" not in string and start_marker < 3: # If ``` wasn't found, find returns -1, so start_marker would be 2 msg = "Code block has invalid or missing markers" raise ValueError(msg) # Extract from code block if end marker was found if end_marker != -1: extracted_string = string[start_marker:end_marker].strip() else: # If incomplete markers, raise a specific error msg = "Code block has invalid or missing markers" raise ValueError(msg) else: # If no markers, try to parse the whole string as JSON extracted_string = string try: return json.loads(extracted_string, strict=False) except json.JSONDecodeError as e: # Provide a more helpful error message with context msg = f"Failed to parse JSON: {e}. The extracted text was: {extracted_string[:100]}..." raise ValueError(msg) from e def humanize_text( text: str, threshold: float = 90, src_lang: str = "english", target_lang: str = "german", grammar_check: bool = False, use_homoglyphs: bool = True, use_em_dashes: bool = True, max_tries: int = 10, ) -> str: paragraphs = split_with_langchain(text) for paragraph in paragraphs: paragraph_content = paragraph.page_content paragraph.page_content = humanize_paragraph( paragraph=paragraph_content, threshold=threshold, src_lang=src_lang, target_lang=target_lang, grammar_check=grammar_check, use_homoglyphs=use_homoglyphs, use_em_dashes=use_em_dashes, max_tries=max_tries, ) return reassemble_markdown(paragraphs) def markdown_to_html(markdown_text: str) -> str: """ Convert markdown text to HTML. Args: markdown_text: String containing markdown formatted text Returns: HTML formatted string """ markdowner = markdown2.Markdown() return markdowner.convert(markdown_text) def html_to_markdown(html_text: str) -> str: """ Convert HTML text to markdown. Args: html_text: String containing HTML formatted text Returns: Markdown formatted string """ return markdownify.markdownify(html_text) # Restricted set of allowed functions ALLOWED_FUNCTIONS = { # Basic Python builtins "abs": abs, "all": all, "any": any, "bool": bool, "dict": dict, "enumerate": enumerate, "float": float, "int": int, "len": len, "list": list, "map": map, "max": max, "min": min, "round": round, "set": set, "str": str, "sum": sum, "tuple": tuple, "zip": zip, "reduce": reduce, # Safe versions of potentially dangerous functions "range": safe_range, "load_json": safe_json_loads, "load_yaml": safe_yaml_load, "dump_json": json.dumps, "dump_yaml": yaml.dump, "extract_json": safe_extract_json, # Regex and NLP functions (using re2 which is safe against ReDoS) "search_regex": lambda pattern, string: re2.search(pattern, string), "match_regex": lambda pattern, string: bool(re2.fullmatch(pattern, string)), "nlp": nlp.__call__, "chunk_doc": chunk_doc, # FIXME: This is a temporary function to be removed after implementing the humanization logic as an integration tool "humanize_text_alpha": humanize_text, "markdown_to_html": markdown_to_html, "html_to_markdown": html_to_markdown, } def csv_reader( data: str, dialect: str = "excel", delimiter: str = ",", quotechar: str | None = '"', escapechar: str | None = None, doublequote: bool = True, skipinitialspace: bool = False, lineterminator: str = "\r\n", quoting: int = 0, strict: bool = False, ): return csv.reader( io.StringIO(data), dialect, delimiter=delimiter, quotechar=quotechar, escapechar=escapechar, doublequote=doublequote, skipinitialspace=skipinitialspace, lineterminator=lineterminator, quoting=quoting, strict=strict, ) def csv_writer( data: str, dialect: str = "excel", delimiter: str = ",", quotechar: str | None = '"', escapechar: str | None = None, doublequote: bool = True, skipinitialspace: bool = False, lineterminator: str = "\r\n", quoting: int = 0, strict: bool = False, ): return csv.writer( io.StringIO(data), dialect, delimiter=delimiter, quotechar=quotechar, escapechar=escapechar, doublequote=doublequote, skipinitialspace=skipinitialspace, lineterminator=lineterminator, quoting=quoting, strict=strict, ) def csv_dictreader( data: str, fieldnames: Sequence[str] | None = None, restkey=None, restval=None, dialect: str = "excel", *args, **kwds, ): return csv.DictReader( io.StringIO(data), fieldnames=fieldnames, restkey=restkey, restval=restval, dialect=dialect, *args, **kwds, ) def csv_dictwriter( data: str, fieldnames: Sequence[str], restval: str = "", extrasaction: Literal["raise", "ignore"] = "raise", dialect: str = "excel", *args, **kwds, ): return csv.DictWriter( io.StringIO(data), fieldnames, restval=restval, extrasaction=extrasaction, dialect=dialect, *args, **kwds, ) class stdlib_csv: reader = staticmethod(csv_reader) writer = staticmethod(csv_writer) register_dialect = csv.register_dialect unregister_dialect = csv.unregister_dialect get_dialect = csv.get_dialect list_dialects = csv.list_dialects field_size_limit = csv.field_size_limit DictReader = staticmethod(csv_dictreader) DictWriter = staticmethod(csv_dictwriter) Dialect = csv.Dialect excel = csv.excel excel_tab = csv.excel_tab unix_dialect = csv.unix_dialect Sniffer = csv.Sniffer QUOTE_ALL = csv.QUOTE_ALL QUOTE_MINIMAL = csv.QUOTE_MINIMAL QUOTE_NONNUMERIC = csv.QUOTE_NONNUMERIC QUOTE_NONE = csv.QUOTE_NONE QUOTE_NOTNULL = csv.QUOTE_NOTNULL QUOTE_STRINGS = csv.QUOTE_STRINGS Error = csv.Error # Safe regex operations (using re2) class stdlib_re: fullmatch = re2.fullmatch search = re2.search escape = re2.escape findall = re2.findall finditer = re2.finditer match = re2.match split = re2.split sub = re2.sub subn = re2.subn # Safe JSON operations class stdlib_json: loads = safe_json_loads dumps = json.dumps # Safe YAML operations class stdlib_yaml: load = safe_yaml_load dump = yaml.dump safe_load = safe_yaml_load safe_dump = yaml.dump # Safe string constants class stdlib_string: ascii_letters = string.ascii_letters ascii_lowercase = string.ascii_lowercase ascii_uppercase = string.ascii_uppercase digits = string.digits hexdigits = string.hexdigits octdigits = string.octdigits punctuation = string.punctuation whitespace = string.whitespace printable = string.printable # Safe datetime operations class stdlib_datetime: class timezone: class utc: utc = dt.UTC class datetime: now = dt.datetime.now datetime = dt.datetime timedelta = dt.timedelta date = dt.date time = dt.time timedelta = dt.timedelta # Safe math operations class stdlib_math: sqrt = math.sqrt exp = math.exp ceil = math.ceil floor = math.floor isinf = math.isinf isnan = math.isnan log = math.log log10 = math.log10 log2 = math.log2 pow = math.pow sin = math.sin cos = math.cos tan = math.tan asin = math.asin acos = math.acos atan = math.atan atan2 = math.atan2 pi = math.pi e = math.e # Safe statistics operations class stdlib_statistics: mean = statistics.mean stdev = statistics.stdev geometric_mean = statistics.geometric_mean median = statistics.median median_low = statistics.median_low median_high = statistics.median_high mode = statistics.mode quantiles = statistics.quantiles # Safe base64 operations class stdlib_base64: b64encode = safe_base64_encode b64decode = safe_base64_decode # Safe URL parsing operations class stdlib_urllib: class parse: # Safe URL parsing operations that don't touch filesystem/network urlparse = urllib.parse.urlparse urlencode = urllib.parse.urlencode unquote = urllib.parse.unquote quote = urllib.parse.quote parse_qs = urllib.parse.parse_qs parse_qsl = urllib.parse.parse_qsl urlsplit = urllib.parse.urlsplit # Safe random operations class stdlib_random: # Limit to safe operations with bounded inputs choice = safe_random_choice sample = safe_random_sample # Safe bounded random number generators randint = random.randint # Already bounded by integer limits random = random.random # Always returns 0.0 to 1.0 # Safe time operations class stdlib_time: # Time formatting/parsing operations strftime = time.strftime strptime = time.strptime # Current time (safe, no side effects) time = time.time # Restricted stdlib with only safe operations stdlib = { "re": stdlib_re, "json": stdlib_json, "yaml": stdlib_yaml, "string": stdlib_string, "datetime": stdlib_datetime, "math": stdlib_math, "statistics": stdlib_statistics, "base64": stdlib_base64, "urllib": stdlib_urllib, "random": stdlib_random, "time": stdlib_time, "csv": stdlib_csv, } constants = { "NEWLINE": "\n", "true": True, "false": False, "null": None, } @beartype def get_evaluator( names: dict[str, Any], extra_functions: dict[str, Callable] | None = None, ) -> SimpleEval: if len(names) > MAX_COLLECTION_SIZE: msg = f"Too many variables (max {MAX_COLLECTION_SIZE})" raise ValueError(msg) evaluator = EvalWithCompoundTypes( names=names | stdlib | constants, functions=ALLOWED_FUNCTIONS | (extra_functions or {}), ) # Add maximum execution time evaluator.TIMEOUT = 1.0 # 1 second timeout return evaluator def get_handler_with_filtered_params(system: SystemDef) -> Callable: """ Get the appropriate handler function based on the SystemDef. Parameters: system (SystemDef): The system definition to get the handler for. Returns: A wrapped handler function with problematic parameters filtered out from its signature for JSON schema serialization. """ from functools import wraps from inspect import signature # Get the base handler based on system definition base_handler = get_handler(system) # Skip parameters that can't be serialized to JSON schema parameters_to_exclude = ["background_tasks", "connection_pool"] # Get the original signature sig = signature(base_handler) # Create a new function with filtered parameters @wraps(base_handler) def filtered_handler(*args, **kwargs): return base_handler(*args, **kwargs) # Remove problematic parameters filtered_handler.__signature__ = sig.replace( parameters=[p for p in sig.parameters.values() if p.name not in parameters_to_exclude], ) return filtered_handler def get_handler(system: SystemDef) -> Callable: """ Internal function to get the base handler without parameter filtering. Parameters: system (SystemDef): The system definition to get the handler for. Returns: The base handler function. """ from ...queries.agents.create_agent import create_agent as create_agent_query from ...queries.agents.delete_agent import delete_agent as delete_agent_query from ...queries.agents.get_agent import get_agent as get_agent_query from ...queries.agents.list_agents import list_agents as list_agents_query from ...queries.agents.update_agent import update_agent as update_agent_query from ...queries.docs.delete_doc import delete_doc as delete_doc_query from ...queries.docs.list_docs import list_docs as list_docs_query from ...queries.entries.get_history import get_history as get_history_query from ...queries.sessions.create_or_update_session import ( create_or_update_session as create_or_update_session_query, ) from ...queries.sessions.create_session import create_session as create_session_query from ...queries.sessions.get_session import get_session as get_session_query from ...queries.sessions.list_sessions import list_sessions as list_sessions_query from ...queries.sessions.update_session import update_session as update_session_query from ...queries.tasks.create_task import create_task as create_task_query from ...queries.tasks.delete_task import delete_task as delete_task_query from ...queries.tasks.get_task import get_task as get_task_query from ...queries.tasks.list_tasks import list_tasks as list_tasks_query from ...queries.tasks.update_task import update_task as update_task_query from ...queries.users.create_user import create_user as create_user_query from ...queries.users.delete_user import delete_user as delete_user_query from ...queries.users.get_user import get_user as get_user_query from ...queries.users.list_users import list_users as list_users_query from ...queries.users.update_user import update_user as update_user_query # FIXME: Do not use routes directly; from ...routers.docs.create_doc import create_agent_doc, create_user_doc from ...routers.docs.search_docs import search_agent_docs, search_user_docs from ...routers.sessions.chat import chat from ...routers.tasks.create_task_execution import create_task_execution match (system.resource, system.subresource, system.operation): # AGENTS case ("agent", "doc", "list"): return list_docs_query case ("agent", "doc", "create"): return create_agent_doc case ("agent", "doc", "delete"): return delete_doc_query case ("agent", "doc", "search"): return search_agent_docs case ("agent", None, "list"): return list_agents_query case ("agent", None, "get"): return get_agent_query case ("agent", None, "create"): return create_agent_query case ("agent", None, "update"): return update_agent_query case ("agent", None, "delete"): return delete_agent_query # USERS case ("user", "doc", "list"): return list_docs_query case ("user", "doc", "create"): return create_user_doc case ("user", "doc", "delete"): return delete_doc_query case ("user", "doc", "search"): return search_user_docs case ("user", None, "list"): return list_users_query case ("user", None, "get"): return get_user_query case ("user", None, "create"): return create_user_query case ("user", None, "update"): return update_user_query case ("user", None, "delete"): return delete_user_query # SESSIONS case ("session", None, "list"): return list_sessions_query case ("session", None, "get"): return get_session_query case ("session", None, "create"): return create_session_query case ("session", None, "update"): return update_session_query case ("session", None, "create_or_update"): return create_or_update_session_query case ("session", None, "chat"): return chat case ("session", None, "history"): return get_history_query # TASKS case ("task", None, "list"): return list_tasks_query case ("task", None, "get"): return get_task_query case ("task", None, "create"): return create_task_query case ("task", None, "update"): return update_task_query case ("task", None, "delete"): return delete_task_query case ("task", "execution", "create"): # AIDEV-NOTE: Surface Temporal-backed execution creation for system tools. return create_task_execution case _: msg = f"System call not implemented for {system.resource}.{system.operation}" raise NotImplementedError(msg) @dataclass class RateLimiter: max_requests: int # Maximum requests per minute window_size: int = 60 # Window size in seconds (1 minute) def __post_init__(self) -> None: self._requests = deque() self._lock = ThreadLock() # Thread-safe lock self._async_lock = asyncio.Lock() # Async-safe lock def _clean_old_requests(self) -> None: now = time.time() while self._requests and now - self._requests[0] > self.window_size: self._requests.popleft() async def acquire(self) -> bool: async with self._async_lock: with self._lock: now = time.time() self._clean_old_requests() if len(self._requests) >= self.max_requests: return False self._requests.append(now) return True @property def current_usage(self) -> int: """Return current number of requests in the window""" with self._lock: self._clean_old_requests() return len(self._requests) ================================================ FILE: src/agents-api/agents_api/common/utils/expressions.py ================================================ import ast from typing import Any import simpleeval from beartype import beartype from box import Box from openai import BaseModel # Increase the max string length to 2048000 simpleeval.MAX_STRING_LENGTH = 2048000 MAX_COLLECTION_SIZE = 1000 # Maximum number of variables allowed in evaluator from simpleeval import SimpleEval from temporalio import activity from ..exceptions.executions import EvaluateError from ..utils.task_validation import backwards_compatibility from .evaluator import get_evaluator # Recursive evaluation helper function def _recursive_evaluate(expr, evaluator: SimpleEval): # Handle PyExpression type from the model if hasattr(expr, "root") and isinstance(expr.root, str): # Extract the string from the RootModel expr = expr.root if isinstance(expr, str): try: expr = backwards_compatibility(expr) expr = expr.strip() if isinstance(expr, str) and expr.startswith("$ "): # Remove $ and any space after it expr = expr[1:].strip() else: expr = f"f'''{expr}'''" return evaluator.eval(expr) except Exception as e: evaluate_error = EvaluateError(e, expr, evaluator.names) if activity.in_activity(): activity.logger.error(f"Error in base_evaluate: {evaluate_error}\n") raise evaluate_error from e elif isinstance(expr, int | bool | float) or expr is None: return expr elif isinstance(expr, list): return [_recursive_evaluate(e, evaluator) for e in expr] elif isinstance(expr, dict): return {k: _recursive_evaluate(v, evaluator) for k, v in expr.items()} else: try: str_expr = str(expr) return _recursive_evaluate(str_expr, evaluator) except Exception: msg = f"Invalid expression: {expr}" raise ValueError(msg) @beartype def evaluate_expressions( exprs: Any, values: dict[str, Any] | None = None, extra_lambda_strs: dict[str, str] | None = None, ) -> Any | list[Any] | dict[str, Any]: if values is None: values = {} # Handle PyExpression objects and strings similarly if isinstance(exprs, str) or (hasattr(exprs, "root") and isinstance(exprs.root, str)): input_len = 1 else: input_len = len(exprs) assert input_len > 0, "exprs must be a non-empty string, PyExpression, list or dict" extra_lambdas = {} if extra_lambda_strs: for k, v in extra_lambda_strs.items(): v = v.strip() # Check that all extra lambdas are valid assert v.startswith("lambda "), "All extra lambdas must start with 'lambda'" try: ast.parse(v) except Exception as e: msg = f"Invalid lambda: {v}" raise ValueError(msg) from e # Eval the lambda and add it to the extra lambdas extra_lambdas[k] = eval(v) # Turn the nested dict values from pydantic to dicts where possible values = {k: v.model_dump() if isinstance(v, BaseModel) else v for k, v in values.items()} # frozen_box doesn't work coz we need some mutability in the values values = Box(values, frozen_box=False, conversion_box=True) evaluator: SimpleEval = get_evaluator(names=values, extra_functions=extra_lambdas) # Recursively evaluate the expression return _recursive_evaluate(exprs, evaluator) ================================================ FILE: src/agents-api/agents_api/common/utils/feature_flags.py ================================================ """ Feature flags utility module for Julep agents-api. Provides convenience functions for feature flag management. """ from agents_api.clients.feature_flags import FeatureFlagContext, get_feature_flag_client def get_environment() -> str: """Get current environment for feature flag context.""" return "development" def get_feature_flag_value( flag_name: str, default_value: bool = False, developer_id: str | None = None, **additional_context, ) -> bool: """ Generic function to get any boolean feature flag value. Args: flag_name: Name of the feature flag default_value: Default value if flag evaluation fails developer_id: Developer ID for targeting (optional) **additional_context: Additional context attributes Returns: The feature flag value """ context: FeatureFlagContext = {"environment": get_environment(), **additional_context} if developer_id: context["developer_id"] = developer_id return get_feature_flag_client().is_enabled(flag_name, default_value, context) ================================================ FILE: src/agents-api/agents_api/common/utils/get_doc_search.py ================================================ from typing import Any from beartype import beartype from fastapi import HTTPException from langcodes import Language from ...autogen.openapi_model import ( DocReference, HybridDocSearchRequest, TextOnlyDocSearchRequest, VectorDocSearchRequest, ) from ...env import enable_hybrid_trigram_search from ...queries.docs.search_docs_by_embedding import search_docs_by_embedding from ...queries.docs.search_docs_by_text import search_docs_by_text from ...queries.docs.search_docs_hybrid import search_docs_hybrid @beartype def get_language(lang: str) -> str: error_msg = "Invalid ISO 639 language code." try: language_obj = Language.get(lang) # Validate language code if not language_obj.is_valid(): raise HTTPException(status_code=422, detail=error_msg) # Check for malformed complex language tags if "-" in lang and not (language_obj.territory or language_obj.script): parts = lang.split("-") if len(parts) > 1 and any(len(part) > 3 for part in parts[1:]): raise HTTPException(status_code=422, detail=error_msg) # Get language name from description language = language_obj.describe().get("language", "english") if not language: raise HTTPException(status_code=422, detail="Language description is empty") # Special case for English return "english_unaccent" if language.lower() == "english" else language.lower() except (ValueError, AttributeError, KeyError): raise HTTPException(status_code=422, detail=error_msg) def get_search_fn_and_params( search_params, *, extract_keywords: bool = False, ) -> tuple[ Any, dict[str, float | int | str | dict[str, float] | list[float]] | None, dict[str, bool] | None, ]: search_fn, params, post_processing = None, None, None match search_params: case TextOnlyDocSearchRequest( text=query, limit=k, lang=lang, metadata_filter=metadata_filter, trigram_similarity_threshold=trigram_similarity_threshold, include_embeddings=include_embeddings, ): search_language = get_language(lang) search_fn = search_docs_by_text trigram_threshold = ( trigram_similarity_threshold if enable_hybrid_trigram_search else None ) params = { "query": query, "k": k, "metadata_filter": metadata_filter, "search_language": search_language, "trigram_similarity_threshold": trigram_threshold, "extract_keywords": extract_keywords, } post_processing = { "include_embeddings": include_embeddings, } case VectorDocSearchRequest( vector=embedding, limit=k, confidence=confidence, metadata_filter=metadata_filter, include_embeddings=include_embeddings, ): search_fn = search_docs_by_embedding # AIDEV-NOTE: cap extra candidates for MMR to 2x limit (or limit+10) to avoid large fan-out. k_with_buffer = min(k * 2, k + 10) if search_params.mmr_strength > 0 else k params = { "embedding": embedding, "k": k_with_buffer, "confidence": confidence, "metadata_filter": metadata_filter, } post_processing = { "include_embeddings": include_embeddings, } case HybridDocSearchRequest( text=query, vector=embedding, lang=lang, limit=k, confidence=confidence, alpha=alpha, metadata_filter=metadata_filter, trigram_similarity_threshold=trigram_similarity_threshold, k_multiplier=k_multiplier, include_embeddings=include_embeddings, ): search_language = get_language(lang) search_fn = search_docs_hybrid # AIDEV-NOTE: hybrid search should request a modest MMR buffer before DBSF fusion. k_with_buffer = min(k * 2, k + 10) if search_params.mmr_strength > 0 else k trigram_threshold = ( trigram_similarity_threshold if enable_hybrid_trigram_search else None ) params = { "text_query": query, "embedding": embedding, "k": k_with_buffer, "confidence": confidence, "alpha": alpha, "metadata_filter": metadata_filter, "search_language": search_language, "extract_keywords": extract_keywords, "trigram_similarity_threshold": trigram_threshold, "k_multiplier": k_multiplier, } post_processing = { "include_embeddings": include_embeddings, } # Note: connection_pool will be passed separately by the caller return search_fn, params, post_processing @beartype def strip_embeddings( docs: list[DocReference] | DocReference, ) -> list[DocReference] | DocReference: if isinstance(docs, list): docs = [strip_embeddings(doc) for doc in docs] else: docs.snippet.embedding = None return docs ================================================ FILE: src/agents-api/agents_api/common/utils/humanization_utils.py ================================================ import json import random import time import litellm import requests from deep_translator import GoogleTranslator from langchain_core.documents import Document from langchain_text_splitters import MarkdownHeaderTextSplitter from ...env import ( desklib_url, litellm_master_key, litellm_url, sapling_api_key, sapling_url, zerogpt_url, ) # Initialize humanization as a dictionary to hold various properties HUMANIZATION = { "model": "openai/cerebras/llama-3.3-70b", "humanize_prompt": """\ Rewrite the following text to make it more natural and human-like while preserving the core message. Follow these guidelines: 1. Maintain the original meaning and key points 2. Vary sentence structure (mix simple, compound, and complex sentences) 3. Use natural language patterns: - Include occasional filler words (well, actually, you know) - Add subtle imperfections (parenthetical thoughts, self-corrections) - Employ informal transitions where appropriate 4. Incorporate personal voice: - Use contractions naturally - Add conversational elements - Vary vocabulary complexity 5. Keep paragraphing and flow natural 6. Avoid overly perfect grammar or clinical language Notes: - The text you are rewriting has been translated from one language to another, and back to English. - The rewritten text should be in markdown format (don't add headings unless they are already present). - If you see spaces before or after double stars, you should remove them. - If you see headings without capitalized text, you should capitalize them. Return only the rewritten text without explanations or meta-commentary.""", "grammar_prompt": "Only fix grammar that is wrong without changing the words and places of the sentence", } def text_translate(text: str, src_lang, target_lang): try: return GoogleTranslator(source=src_lang, target=target_lang).translate(text=text) except Exception: return text def mix_translate(text: str, src_lang, target_lang): """ Translate the given text from src_lang to target_lang and back to src_lang using googletrans. """ try: translated = GoogleTranslator(source=src_lang, target=target_lang).translate(text=text) return GoogleTranslator(source=target_lang, target=src_lang).translate(text=translated) except Exception: return text def humanize_llm(text: str) -> str: try: response = litellm.completion( model=HUMANIZATION["model"], base_url=litellm_url, messages=[ {"role": "system", "content": HUMANIZATION["humanize_prompt"]}, {"role": "user", "content": text}, ], temperature=1.0, api_key=litellm_master_key, ) return response.choices[0].message.content except Exception as e: msg = "Error humanizing text with an llm: " raise Exception(msg) from e def grammar(text: str): try: response = litellm.completion( model=HUMANIZATION["model"], base_url=litellm_url, messages=[ {"role": "system", "content": HUMANIZATION["grammar_prompt"]}, {"role": "user", "content": text}, ], temperature=1.0, api_key=litellm_master_key, # extra_body={"min_p": 0.025}, ) return response.choices[0].message.content except Exception: return text def is_human_desklib(text: str) -> float: try: payload = { "text": text, } response = requests.post(desklib_url, json=payload) response.raise_for_status() ai_score = response.json().get("probability") if ai_score is None: msg = "'probability' key not found in response: " raise Exception(msg, response.json()) human_score = 1 - ai_score # desklib returns a score between 0 and 1, we want to return a percentage return human_score * 100 except Exception as e: msg = "Error getting human score from desklib" raise Exception(msg) from e def is_human_sapling(text: str): try: payload = { "text": text, "key": sapling_api_key, } response = requests.post(sapling_url, json=payload) ai_score = response.json().get("score", None) # sapling returns a an ai score between 0 and 1, we want to return a human_score percentage return 100 - int(ai_score * 100) except Exception as e: msg = "Error getting human score from sapling" raise Exception(msg) from e def is_human_zerogpt(input_text, max_tries: int = 3): if max_tries < 0: return None # Define headers with Content-Type headers = { "Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.8", "Content-Type": "application/json", "Origin": "https://www.zerogpt.com", "Referer": "https://www.zerogpt.com/", "Sec-Ch-Ua": '"Not A(Brand";v="99", "Brave";v="121", "Chromium";v="121"', "Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Platform": '"Linux"', "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "Sec-Gpc": "1", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36", } # Define the payload as a dictionary payload = {"input_text": input_text} # Convert payload to JSON format json_payload = json.dumps(payload) # Send the POST request with JSON payload and headers response = requests.post(zerogpt_url, data=json_payload, headers=headers) # Check the response status if response.status_code == 200: resp = json.loads(response.text) result = False try: result = int(resp.get("data", {}).get("isHuman", None)) except Exception: time.sleep(2) return is_human_zerogpt(input_text, max_tries - 1) return result return None def replace_with_homoglyphs(text: str, max_replacements: int = 2): homoglyphs = { # Whitelisted " ": " ", "%": "%", "'": "ˈ", ",": "‚", "-": "‐", ".": "․", "1": "𝟷", "3": "Ꝫ", "5": "𝟻", "6": "𝟨", "7": "𝟽", "8": "𝟪", "9": "𝟫", ";": ";", "j": "ј", "n": "𝗇", "o": "о", "p": "р", "u": "ս", "y": "у", "H": "Η", "I": "І", "J": "Ј", "N": "Ν", "O": "Ο", "V": "ⴸ", "Y": "Υ", "~": "∼", "q": "q", "e": "е", "a": "а", "b": "ᖯ", "c": "ⅽ", "i": "і", "k": "𝚔", "g": "𝗀", "A": "𐊠", "B": "В", "C": "𐊢", "D": "ꓓ", "E": "Е", "F": "𐊇", "G": "Ԍ", "K": "Κ", "L": "Ⅼ", "M": "Μ", "P": "Ρ", "Q": "𝖰", "R": "𖼵", "S": "Ѕ", "T": "Τ", "U": "𐓎", "W": "Ԝ", "X": "Χ", "Z": "Ζ", } # Convert text to list for single pass replacement text_chars: list[str] = list( text ) # AIDEV-NOTE: annotate to list[str] so indexing is recognized by type checker text_len = len(text_chars) for original, homoglyph in homoglyphs.items(): count = random.randrange(0, max_replacements) if count == 0: continue # Get random positions for replacements positions = random.sample(range(text_len), min(count, text_len)) for pos in positions: if text_chars[pos] == original: # type: ignore[call-non-callable] # AIDEV-NOTE: suppress false-positive on indexing text_chars[pos] = homoglyph # type: ignore[call-non-callable] return "".join(text_chars) def insert_em_dash(word: str, probability: float = 0.1, min_length: int = 7) -> str: # Only apply to long words (adjust threshold as needed) if len(word) < min_length: return word # 10% chance to insert an em dash if random.random() < probability: mid = len(word) // 2 return word[:mid] + "—" + word[mid:] return word def process_long_words(text: str) -> str: # Split text preserving whitespace for simplicity words = text.split() processed_words = [insert_em_dash(word) for word in words] # Rejoin words with a space (note: original punctuation and formatting may be altered) return " ".join(processed_words) def split_with_langchain(markdown_text: str) -> list[Document]: headers_to_split_on = [ ("#", "Header 1"), ("##", "Header 2"), ("###", "Header 3"), ("####", "Header 4"), ] # MD splits markdown_splitter = MarkdownHeaderTextSplitter( headers_to_split_on=headers_to_split_on, strip_headers=True, ) return markdown_splitter.split_text(markdown_text) def reassemble_markdown(splits: list[Document]) -> str: assembled_text = [] for doc in splits: # Get the header level from metadata header_level = None header_content = None for key, value in doc.metadata.items(): if key.startswith("Header "): header_level = int(key.split(" ")[1]) header_content = value break # Add header with appropriate number of # symbols if header_level and header_content: header_line = f"{'#' * header_level} {header_content}\n\n" assembled_text.append(header_line) # Add the content assembled_text.append(f"{doc.page_content}\n---\n") return "".join(assembled_text).strip() def humanize_paragraph( paragraph: str, threshold: float, src_lang: str, target_lang: str, grammar_check: bool, use_homoglyphs: bool, use_em_dashes: bool, max_tries: int, ) -> str: for i in range(max_tries): if paragraph.strip() == "": return paragraph if is_human_desklib(paragraph) > threshold: return paragraph paragraph = mix_translate(paragraph, src_lang, target_lang) if grammar_check: paragraph = grammar(paragraph) paragraph = humanize_llm(paragraph) # Apply homoglyphs and em dashes to a new paragraph in order not to mess up the original paragraph for the next iterations new_paragraph = paragraph if use_homoglyphs: new_paragraph = replace_with_homoglyphs(new_paragraph) if use_em_dashes: new_paragraph = process_long_words(new_paragraph) if is_human_desklib(new_paragraph) > threshold: return new_paragraph # Apply homoglyphs and em dashes to the final paragraph after consuming max tries if use_homoglyphs: paragraph = replace_with_homoglyphs(paragraph) if use_em_dashes: paragraph = process_long_words(paragraph) return paragraph ================================================ FILE: src/agents-api/agents_api/common/utils/json.py ================================================ """This module provides JSON utilities, including a custom JSON encoder for handling specific object types and a utility function for JSON serialization.""" import json from typing import Any from uuid import UUID from pydantic import BaseModel class CustomJSONEncoder(json.JSONEncoder): """A custom JSON encoder subclass that handles None values and UUIDs for JSON serialization. It allows specifying a default value for None objects during initialization.""" def __init__(self, *args, **kwargs) -> None: """ Initializes the custom JSON encoder. Parameters: *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. The 'default_empty_value' keyword argument specifies the default value to use for None objects during serialization. """ self._default_empty_value = kwargs.pop("default_empty_value") super().__init__(*args, **kwargs) def encode(self, o) -> str: """ Encodes the given object into a JSON formatted string. Parameters: o: The object to encode. Returns: A JSON formatted string representing 'o'. """ # Use the overridden default method for serialization before encoding return super().encode(self.default(o)) def default(self, obj) -> Any: """ Provides a default serialization for objects that the standard JSON encoder cannot serialize. Parameters: obj: The object to serialize. Returns: A serializable object or raises a TypeError if the object is not serializable. """ if obj is None: return self._default_empty_value if isinstance(obj, UUID): return str(obj) if isinstance(obj, BaseModel): return obj.model_dump() return obj def dumps(obj: Any, default_empty_value: str = "", cls=None) -> str: """ Serializes an object to a JSON formatted string using the custom JSON encoder. Parameters: obj: The object to serialize. default_empty_value: The default value to use for None objects. cls: The custom encoder class to use, defaults to CustomJSONEncoder. Returns: A JSON formatted string. """ return json.dumps( obj, cls=cls or CustomJSONEncoder, default_empty_value=default_empty_value, ) ================================================ FILE: src/agents-api/agents_api/common/utils/llm_providers.py ================================================ from pathlib import Path import yaml config_path = Path("/app/litellm-config.yaml") _config = None def get_config(): global _config if _config is None: if not config_path.exists(): print(f"Warning: LiteLLM config file not found at {config_path}") return {} try: with open(config_path) as f: _config = yaml.safe_load(f) except Exception as e: print(f"Error loading LiteLLM config: {e}") return {} return _config def get_api_key_env_var_name(model: str) -> str | None: config = get_config() for model_config in config.get("model_list", []): if model_config.get("model_name") == model: api_key = model_config.get("litellm_params", {}).get("api_key") if api_key: return api_key.split("/", 1)[1] return None def get_litellm_model_name(model: str) -> str: """ Convert a model name to its LiteLLM equivalent by looking it up in the config. Returns the litellm_params.model value if found, otherwise returns the original model name. Examples: "gpt-4o" -> "openai/gpt-4o" "gemini-1.5-pro" -> "gemini/gemini-1.5-pro" "claude-3.5-sonnet" -> "claude-3-5-sonnet-20241022" """ config = get_config() for model_config in config.get("model_list", []): if model_config.get("model_name") == model: litellm_model = model_config.get("litellm_params", {}).get("model") if litellm_model: return litellm_model # AIDEV-NOTE: If model not found in config, return original name return model # Models that do not support tools param tools_free_models: set[str] = {"openai/gpt-5-chat-latest"} ================================================ FILE: src/agents-api/agents_api/common/utils/memory.py ================================================ """ Utilities for memory management and object size calculation. """ from __future__ import annotations import sys from collections import deque from collections.abc import Callable from itertools import chain from typing import Any from pydantic import BaseModel def total_size( o: Any, handlers: dict[type, Callable] | None = None, verbose: bool = False ) -> int: """ Returns the approximate memory footprint of an object and all of its contents. Automatically finds the contents of the following builtin containers and their subclasses: tuple, list, deque, dict, set and frozenset. Also handles Pydantic models by recursively measuring their fields. To search other containers, add handlers to iterate over their contents: handlers = {SomeContainerClass: iter, OtherContainerClass: OtherContainerClass.get_elements} Args: o: The object to measure handlers: Optional dictionary of custom handlers for container types verbose: If True, prints details about each object measured Returns: Total size in bytes """ if handlers is None: handlers = {} def dict_handler(d): return chain.from_iterable(d.items()) def pydantic_handler(model: BaseModel): return chain.from_iterable(model.model_dump().items()) all_handlers = { tuple: iter, list: iter, deque: iter, dict: dict_handler, set: iter, frozenset: iter, BaseModel: pydantic_handler, } all_handlers.update(handlers) # user handlers take precedence seen: set[int] = set() # track which object id's have already been seen default_size = sys.getsizeof(0) # estimate sizeof object without __sizeof__ def sizeof(obj: Any) -> int: """Recursively calculate size of object and its contents.""" if id(obj) in seen: # do not double count the same object return 0 seen.add(id(obj)) size = sys.getsizeof(obj, default_size) if verbose: print(size, type(obj), repr(obj)[:100]) # limit repr to avoid huge output for typ, handler in all_handlers.items(): if isinstance(obj, typ): size += sum(map(sizeof, handler(obj))) break return size return sizeof(o) ================================================ FILE: src/agents-api/agents_api/common/utils/messages.py ================================================ import json from typing import cast from beartype import beartype from ...autogen.openapi_model import ( ChatMLImageContentPart, ChatMLTextContentPart, ) @beartype def content_to_json( content: str | list[dict] | dict, ) -> list[dict]: if isinstance(content, str): result = [{"type": "text", "text": content}] elif isinstance(content, list): result = content elif isinstance(content, dict): result = [{"type": "text", "text": json.dumps(content, indent=4)}] return result def stringify_content( msg: str | list[ChatMLTextContentPart] | list[ChatMLImageContentPart] | dict, ) -> str: content = "" if isinstance(msg, list): content = " ".join([part.text for part in msg if part.type == "text"]) elif isinstance(msg, str): content = msg elif isinstance(msg, dict) and msg["type"] == "text": content = cast(str, msg["text"]) return content ================================================ FILE: src/agents-api/agents_api/common/utils/mmr.py ================================================ from __future__ import annotations import logging from typing import TypeVar import numpy as np from beartype import beartype from ...autogen.openapi_model import DocReference Matrix = list[list[float]] | list[np.ndarray] | np.ndarray logger = logging.getLogger(__name__) MIN_DOCS_WITH_EMBEDDINGS = 2 T = TypeVar("T") def _cosine_similarity(x: Matrix, y: Matrix) -> np.ndarray: """Row-wise cosine similarity between two equal-width matrices. Args: x: A matrix of shape (n, m). y: A matrix of shape (k, m). Returns: A matrix of shape (n, k) where each element (i, j) is the cosine similarity between the ith row of X and the jth row of Y. Raises: ValueError: If the number of columns in X and Y are not the same. ImportError: If numpy is not installed. """ if len(x) == 0 or len(y) == 0: return np.array([]) x = [xx for xx in x if xx is not None] y = [yy for yy in y if yy is not None] x = np.array(x) y = np.array(y) if x.shape[1] != y.shape[1]: msg = f"Number of columns in X and Y must be the same. X has shape {x.shape} and Y has shape {y.shape}." raise ValueError(msg) try: import simsimd as simd # type: ignore x = np.array(x, dtype=np.float32) y = np.array(y, dtype=np.float32) return 1 - np.array(simd.cdist(x, y, metric="cosine")) except ImportError: logger.debug( "Unable to import simsimd, defaulting to NumPy implementation. If you want " "to use simsimd please install with `pip install simsimd`.", ) x_norm = np.linalg.norm(x, axis=1) y_norm = np.linalg.norm(y, axis=1) # Ignore divide by zero errors run time warnings as those are handled below. with np.errstate(divide="ignore", invalid="ignore"): similarity = np.dot(x, y.T) / np.outer(x_norm, y_norm) similarity[np.isnan(similarity) | np.isinf(similarity)] = 0.0 return similarity @beartype def maximal_marginal_relevance( query_embedding: np.ndarray, embedding_list: list, lambda_mult: float = 0.5, k: int = 4, ) -> list[int]: """Calculate maximal marginal relevance. Args: query_embedding: The query embedding. embedding_list: A list of embeddings. lambda_mult: The lambda parameter for MMR. Default is 0.5. k: The number of embeddings to return. Default is 4. Returns: A list of indices of the embeddings to return. Raises: ImportError: If numpy is not installed. """ if min(k, len(embedding_list)) <= 0: return [] if query_embedding.ndim == 1: query_embedding = np.expand_dims(query_embedding, axis=0) similarity_to_query = _cosine_similarity(query_embedding, embedding_list)[0] most_similar = int(np.argmax(similarity_to_query)) idxs = [most_similar] selected = np.array([embedding_list[most_similar]]) while len(idxs) < min(k, len(embedding_list)): best_score = -np.inf idx_to_add = -1 similarity_to_selected = _cosine_similarity(embedding_list, selected) for i, query_score in enumerate(similarity_to_query): if i in idxs: continue redundant_score = max(similarity_to_selected[i]) equation_score = lambda_mult * query_score - (1 - lambda_mult) * redundant_score if equation_score > best_score: best_score = equation_score idx_to_add = i idxs.append(idx_to_add) selected = np.append(selected, [embedding_list[idx_to_add]], axis=0) return idxs @beartype def apply_mmr_to_docs( docs: list[DocReference], query_embedding: np.ndarray, limit: int, mmr_strength: float ) -> list[DocReference]: """ Apply Maximal Marginal Relevance to a list of document references. Parameters: docs: List of document references query_embedding: The embedding vector of the query limit: Maximum number of documents to return mmr_strength: Strength of MMR (0-1), where 0 means no diversity and 1 means maximum diversity Returns: List of document references after applying MMR """ # Filter docs with embeddings and extract embeddings in one pass docs_with_embeddings = [] embeddings = [] for doc in docs: if doc.snippet.embedding is not None: docs_with_embeddings.append(doc) embeddings.append(doc.snippet.embedding) if len(docs_with_embeddings) >= MIN_DOCS_WITH_EMBEDDINGS: # Apply MMR indices = maximal_marginal_relevance( query_embedding, embeddings, k=min(limit, len(docs_with_embeddings)), lambda_mult=1 - mmr_strength, ) # Deduplicate indices while preserving their order unique_indices: list[int] = [] seen: set[int] = set() for idx in indices: if idx not in seen: seen.add(idx) unique_indices.append(idx) return [docs_with_embeddings[i] for i in unique_indices] # If docs are present but no embeddings are present for any of the docs, return the top k docs return docs[:limit] ================================================ FILE: src/agents-api/agents_api/common/utils/model_validation.py ================================================ """Shared helpers for validating model identifiers against LiteLLM.""" from __future__ import annotations from collections.abc import Sequence from ...clients.litellm import get_model_list class ModelNotAvailableError(ValueError): """Raised when a requested model identifier is not present in the catalog.""" def __init__(self, model_name: str | None, available_models: Sequence[str]) -> None: self.requested_model = model_name self.available_models = list(available_models) message = f"Model {model_name} not available. Available models: {self.available_models}" super().__init__(message) async def ensure_model_available( model_name: str | None, *, custom_api_key: str | None = None, ) -> Sequence[str]: """Ensure ``model_name`` exists in LiteLLM's configured catalog.""" models = await get_model_list(custom_api_key=custom_api_key) available_models = [model["id"] for model in models] if model_name not in available_models: raise ModelNotAvailableError(model_name, available_models) return available_models ================================================ FILE: src/agents-api/agents_api/common/utils/secrets.py ================================================ from datetime import timedelta from uuid import UUID from temporalio import workflow from temporalio.workflow import _NotInWorkflowEventLoopError from ...activities.pg_query_step import pg_query_step from ...autogen.openapi_model import Secret from ...env import temporal_heartbeat_timeout from ...queries.secrets import get_secret_by_name as get_secret_by_name_query from ...queries.secrets.list import list_secrets_query from ..exceptions.secrets import ( SecretNotFoundError, # AIDEV-NOTE: use domain exception for missing secrets ) from ..retry_policies import DEFAULT_RETRY_POLICY async def get_secret_by_name(developer_id: UUID, name: str, decrypt: bool = False) -> Secret: """Fetch a developer secret by name without caching to avoid cross-loop futures.""" try: secret = await workflow.execute_activity( pg_query_step, args=[ "get_secret_by_name", "secrets.get_by_name", {"developer_id": developer_id, "name": name, "decrypt": decrypt}, ], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) except _NotInWorkflowEventLoopError: secret = await get_secret_by_name_query( developer_id=developer_id, name=name, decrypt=decrypt, ) if secret is None: raise SecretNotFoundError(developer_id, name) return secret async def get_secrets_list( developer_id: UUID, decrypt: bool = False, connection_pool=None, ) -> list[Secret]: """Return the full secret list without shared caching (avoids loop mismatches).""" try: secrets_query_result = await workflow.execute_activity( pg_query_step, args=[ "list_secrets_query", "secrets.list", {"developer_id": developer_id, "decrypt": decrypt}, ], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) except _NotInWorkflowEventLoopError: secrets_query_result = await list_secrets_query( developer_id=developer_id, decrypt=decrypt, connection_pool=connection_pool, ) return secrets_query_result ================================================ FILE: src/agents-api/agents_api/common/utils/task_validation.py ================================================ import ast from typing import Any from pydantic import BaseModel, ValidationError from ...autogen.openapi_model import CreateTaskRequest, PatchTaskRequest, UpdateTaskRequest from ...common.protocol.models import task_to_spec from ...common.utils.evaluator import ALLOWED_FUNCTIONS, stdlib from ...env import enable_backwards_compatibility_for_syntax class ValidationIssue(BaseModel): """Represents a validation issue found in a task specification.""" location: str message: str severity: str = "error" # error, warning, info details: dict[str, Any] | None = None class TaskValidationResult(BaseModel): """Result of task validation with issues categorized by type.""" is_valid: bool python_expression_issues: list[ValidationIssue] = [] schema_issues: list[ValidationIssue] = [] other_issues: list[ValidationIssue] = [] def backwards_compatibility(expr: str) -> str: """ Convert expressions to a consistent format for evaluation. Args: expr: The expression to convert Returns: The converted expression with $ prefix where appropriate """ # Note: This function returns expressions that start with "$ " # The space after $ is required for expressions to be evaluated as Python code. expr = expr.strip() # Check if it already starts with $ followed by a space if expr.startswith("$ "): return expr if "{{" in expr: return "$ f'''" + expr.replace("{{", "{").replace("}}", "}") + "'''" if ( (expr.startswith("[") and expr.endswith("]")) or (expr.startswith("_[") and expr.endswith("]")) or expr.startswith("_.") or "outputs[" in expr or "inputs[" in expr or expr == "_" ): return "$ " + expr # Keep space after $ for backward compatibility return expr # Build the set of allowed names allowed_names = ( set(ALLOWED_FUNCTIONS.keys()) | set(stdlib.keys()) | {"true", "false", "null", "NEWLINE", "hasattr"} # helpers | {"_", "inputs", "outputs", "state", "steps"} # Special vars ) def validate_py_expression( expr: str | None, expected_variables: set[str] | None = None, ) -> dict[str, list[str]]: """ Statically validate a Python expression before task execution. Args: expr: The Python expression to validate (or None) expected_variables: Optional set of expected variable names that should be available Returns: Dict with potential issues categorized by type """ issues: dict[str, list[str]] = { "syntax_errors": [], "undefined_names": [], "unsafe_operations": [], "potential_runtime_errors": [], "unsupported_features": [], } # Skip None or empty expressions if expr is None or not expr: return issues # Ensure the expression is stripped before checking prefix expr = expr.strip() # Apply backwards compatibility transformation first if enable_backwards_compatibility_for_syntax: expr = backwards_compatibility(expr) # The space after $ is required for expressions to be evaluated as Python code if not expr.startswith("$ "): return issues # Remove $ and strip any leading space after $ expr = expr[1:].lstrip() # Special case: just a $ sign with nothing after it if not expr: return issues # Try to parse the expression to check for syntax errors try: tree = ast.parse(expr, mode="eval") except SyntaxError as e: issues["syntax_errors"].append(f"Syntax error: {e!s}") return issues # Return early if we can't even parse the expression expected_variables: set[str] = expected_variables or set() # Track locally defined variables to avoid flagging them as undefined local_vars: set[str] = set() # NOTE: if we update the evaluator to support these features, we can remove the 3 checks below # Check for unsupported language features for node in ast.walk(tree): # Check for set comprehensions if isinstance(node, ast.SetComp): issues["unsupported_features"].append( "Set comprehensions are not supported in this evaluator" ) # Check for lambda functions elif isinstance(node, ast.Lambda): issues["unsupported_features"].append( "Lambda functions are not supported in this evaluator" ) # Check for assignment expressions (walrus operator) elif isinstance(node, ast.NamedExpr): issues["unsupported_features"].append( "Assignment expressions (walrus operator) are not supported in this evaluator" ) # Find all comprehension variables and other locally defined variables for node in ast.walk(tree): # List, dict, and set comprehensions if isinstance(node, ast.ListComp | ast.DictComp | ast.SetComp): for generator in node.generators: # Add target names from comprehensions if isinstance(generator.target, ast.Name): local_vars.add(generator.target.id) elif isinstance(generator.target, ast.Tuple): for elt in generator.target.elts: if isinstance(elt, ast.Name): local_vars.add(elt.id) # Generator expressions elif isinstance(node, ast.GeneratorExp): for generator in node.generators: if isinstance(generator.target, ast.Name): local_vars.add(generator.target.id) elif isinstance(generator.target, ast.Tuple): for elt in generator.target.elts: if isinstance(elt, ast.Name): local_vars.add(elt.id) # Lambda functions elif isinstance(node, ast.Lambda): for arg in node.args.args: local_vars.add(arg.arg) # Handle args with default values if node.args.kwonlyargs: for arg in node.args.kwonlyargs: local_vars.add(arg.arg) # Assignment expressions (walrus operator) elif isinstance(node, ast.NamedExpr) and isinstance(node.target, ast.Name): local_vars.add(node.target.id) # Get all name references in the expression name_nodes = [node for node in ast.walk(tree) if isinstance(node, ast.Name)] # Check for undefined names referenced_names = { node.id for node in name_nodes if isinstance(node, ast.Name) and isinstance(node.ctx, ast.Load) } # Find undefined names, excluding locally defined variables undefined_names = referenced_names - allowed_names - expected_variables - local_vars if undefined_names: issues["undefined_names"].extend([ f"Undefined name: '{name}'" for name in undefined_names ]) # Check for potentially unsafe operations for node in ast.walk(tree): # Check for attribute access that might be unsafe if isinstance(node, ast.Attribute): # Allow specific attributes on known objects attr_name = node.attr # Check for dunder attributes which are potentially dangerous if attr_name.startswith("__") and attr_name.endswith("__"): issues["unsafe_operations"].append( f"Potentially unsafe dunder attribute access: {attr_name}" ) continue if isinstance(node.value, ast.Name): obj_name = node.value.id # Allow accessing attributes on allowed names if obj_name in (expected_variables | allowed_names): continue # Otherwise flag unexpected attribute access issues["unsafe_operations"].append( f"Potentially unsafe attribute access: {obj_name}.{attr_name}" ) # Check for function calls to make sure they're allowed if isinstance(node, ast.Call) and isinstance(node.func, ast.Name): func_name = node.func.id if func_name not in (expected_variables | allowed_names): issues["unsafe_operations"].append( f"Call to potentially unsafe function: {func_name}" ) # Check for common potential runtime errors for node in ast.walk(tree): # Division by zero if ( isinstance(node, ast.BinOp) and isinstance(node.op, ast.Div) and isinstance(node.right, ast.Constant) and node.right.value == 0 ): issues["potential_runtime_errors"].append("Division by zero detected") # Index out of bounds for list literals if ( isinstance(node, ast.Subscript) and isinstance(node.value, ast.List) and isinstance(node.slice, ast.Constant) and isinstance(node.slice.value, int) ): list_size = len(node.value.elts) index = node.slice.value if index >= list_size: issues["potential_runtime_errors"].append( f"Possible index error: index {index} exceeds list size {list_size}" ) return issues def _validate_step_expressions( step: dict[str, Any], location_prefix: str = "", ) -> list[dict[str, Any]]: """ Recursively validate expressions in a single step or nested step structure. Args: step: The step dictionary to validate location_prefix: String prefix to prepend to location path for nested steps Returns: List of validation issues found in this step and its nested components """ step_issues = [] # Identify which step type we're dealing with step_type = step.get("kind_") step_data = {} # If kind_ field is present, use it to determine step type if step_type: # Handle special case for if_else step (converted from "if" in the original task) if step_type == "if_else": step_data = { "if_": step.get("if_"), "then": step.get("then"), "else_": step.get("else_"), } else: # For other steps, find the data dict by the same name as kind_ for key, value in step.items(): if key == step_type and isinstance(value, dict): step_data = value break else: # Fall back to the old method if kind_ is not present for key, value in step.items(): if key not in ["id", "name", "label"] and isinstance(value, dict): step_type = key step_data = value break if not step_type or not step_data: return step_issues # Add location prefix if provided loc_prefix = f"{location_prefix}." if location_prefix else "" # Check for Python expressions based on step type if step_type == "evaluate": # In evaluate steps, all values are potentially expressions for eval_key, eval_value in step_data.items(): if isinstance(eval_value, str) and ( eval_value.strip().startswith(("$", "_")) or "{{" in eval_value or eval_value.strip() == "_" ): issues = validate_py_expression(eval_value) if any(issues.values()): # If we found any issues step_issues.append({ "location": f"{loc_prefix}{step_type}.{eval_key}", "expression": eval_value, "issues": issues, }) elif step_type == "if": # For "if" steps, the condition is the value of the "if" key itself condition = step.get(step_type) if isinstance(condition, str): issues = validate_py_expression(condition) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}", "expression": condition, "issues": issues, }) # Check "then" and "else" branches for expressions for branch in ["then", "else"]: if branch in step_data and isinstance(step_data[branch], dict): # Recursively validate the nested step nested_step = step_data[branch] nested_location = f"{loc_prefix}{step_type}.{branch}" nested_issues = _validate_step_expressions(nested_step, nested_location) step_issues.extend(nested_issues) elif step_type == "if_else": # For if_else steps, check the condition in if_ field if "if_" in step_data and isinstance(step_data["if_"], str): issues = validate_py_expression(step_data["if_"]) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.if", "expression": step_data["if_"], "issues": issues, }) # Check then and else branches for branch, key in [("then", "then"), ("else", "else_")]: if key in step_data and isinstance(step_data[key], dict): nested_step = step_data[key] nested_location = f"{loc_prefix}{step_type}.{branch}" nested_issues = _validate_step_expressions(nested_step, nested_location) step_issues.extend(nested_issues) elif step_type == "match": # Check condition expression for match statements if "case" in step_data and isinstance(step_data["case"], str): issues = validate_py_expression(step_data["case"]) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.case", "expression": step_data["case"], "issues": issues, }) # For match statements, check all cases in "cases" array if "cases" in step_data and isinstance(step_data["cases"], list): for case_idx, case_item in enumerate(step_data["cases"]): if ( "case" in case_item and isinstance(case_item["case"], str) and case_item["case"] != "_" ): issues = validate_py_expression(case_item["case"]) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.cases[{case_idx}].case", "expression": case_item["case"], "issues": issues, }) # Check for nested structure inside each case's "then" field if "then" in case_item and isinstance(case_item["then"], dict): nested_step = case_item["then"] nested_location = f"{loc_prefix}{step_type}.cases[{case_idx}].then" nested_issues = _validate_step_expressions(nested_step, nested_location) step_issues.extend(nested_issues) elif step_type in ["foreach", "map"]: # Check "in" expression for iterable if "in" in step_data and isinstance(step_data["in"], str): issues = validate_py_expression(step_data["in"]) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.in", "expression": step_data["in"], "issues": issues, }) # Check for nested structure in do field if "do" in step_data and isinstance(step_data["do"], dict): nested_step = step_data["do"] nested_location = f"{loc_prefix}{step_type}.do" nested_issues = _validate_step_expressions(nested_step, nested_location) step_issues.extend(nested_issues) elif step_type == "tool" and "arguments" in step_data: # Check arguments that might be expressions for arg_key, arg_value in step_data["arguments"].items(): if isinstance(arg_value, str) and ( arg_value.strip().startswith(("$", "_")) or "{{" in arg_value or arg_value.strip() == "_" ): issues = validate_py_expression(arg_value) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.arguments.{arg_key}", "expression": arg_value, "issues": issues, }) # Also recursively validate any other string values that could be expressions for key, value in step_data.items(): if ( isinstance(value, str) and (value.strip().startswith(("$", "_")) or "{{" in value or value.strip() == "_") and key not in ["if_", "case"] ): # Skip keys we've already checked issues = validate_py_expression(value) if any(issues.values()): step_issues.append({ "location": f"{loc_prefix}{step_type}.{key}", "expression": value, "issues": issues, }) return step_issues def validate_task_expressions( task_spec: dict[str, Any], ) -> dict[str, dict[str, list[dict[str, Any]]]]: """ Validate all Python expressions in a task specification. Args: task_spec: The task specification dictionary Returns: Dict mapping workflow names to step indices to lists of expression validation issues """ validation_results: dict[str, dict[str, list[dict[str, Any]]]] = {} # Process all workflows in the task if "workflows" not in task_spec: return validation_results for workflow in task_spec.get("workflows", []): workflow_name = workflow.get("name", "unknown") validation_results[workflow_name] = {} for step_idx, step in enumerate(workflow.get("steps", [])): step_issues = _validate_step_expressions(step) # Store issues for this step if we found any if step_issues: validation_results[workflow_name][str(step_idx)] = step_issues return validation_results def validate_task( task: CreateTaskRequest | UpdateTaskRequest | PatchTaskRequest, ) -> TaskValidationResult: """ Validates a task spec for common issues before accepting it. Args: task: The task to validate (Create, Update, or Patch request) Returns: TaskValidationResult with validation issues """ validation_result = TaskValidationResult(is_valid=True) # Convert to task spec (this will exclude version, developer_id etc.) try: task_spec = task_to_spec(task) task_spec_dict = task_spec.model_dump() # Validate Python expressions expression_results = validate_task_expressions(task_spec_dict) # Convert expression validation results to ValidationIssue objects for workflow_name, steps in expression_results.items(): for step_idx, issues in steps.items(): for issue in issues: for issue_type, issue_messages in issue["issues"].items(): if not issue_messages: continue for message in issue_messages: validation_result.python_expression_issues.append( ValidationIssue( location=f"workflows.{workflow_name}.steps[{step_idx}].{issue['location']}", message=message, severity="error" if issue_type in [ "syntax_errors", "undefined_names", "unsupported_features", ] else "warning", details={ "issue_type": issue_type, "expression": issue["expression"], }, ) ) except ValidationError as e: # Handle Pydantic validation errors for error in e.errors(): validation_result.schema_issues.append( ValidationIssue( location=".".join(str(loc) for loc in error["loc"]), message=error["msg"], severity="error", details={"error_type": error["type"]}, ) ) except Exception as e: # Handle any other exceptions during validation validation_result.other_issues.append( ValidationIssue( location="task", message=f"Unexpected error during validation: {e!s}", severity="error", ) ) # Determine if the task is valid (no errors) has_errors = any( issue.severity == "error" for issues in [ validation_result.python_expression_issues, validation_result.schema_issues, validation_result.other_issues, ] for issue in issues ) validation_result.is_valid = not has_errors return validation_result ================================================ FILE: src/agents-api/agents_api/common/utils/template.py ================================================ from typing import TypeVar from beartype import beartype from fastapi import HTTPException, status from jinja2 import TemplateSyntaxError, UndefinedError from jinja2.sandbox import ImmutableSandboxedEnvironment from jinja2schema import infer, to_json_schema from jsonschema import validate from ...common.utils.evaluator import ALLOWED_FUNCTIONS, constants, stdlib __all__: list[str] = [ "render_template", ] # jinja environment jinja_env: ImmutableSandboxedEnvironment = ImmutableSandboxedEnvironment( autoescape=False, trim_blocks=True, lstrip_blocks=True, auto_reload=False, enable_async=True, loader=None, ) # Add arrow to jinja for k, v in (constants | stdlib | ALLOWED_FUNCTIONS).items(): jinja_env.globals[k] = v # Funcs @beartype async def render_template_string( template_string: str, variables: dict, check: bool = False, ) -> str: try: # Parse template template = jinja_env.from_string(template_string) # If check is required, get required vars from template and validate variables if check: schema = to_json_schema(infer(template_string)) validate(instance=variables, schema=schema) # Render return await template.render_async(**variables) except TemplateSyntaxError as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=f"Template syntax error: {e!s}", ) except UndefinedError as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=f"Template undefined variable: {e!s}", ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Template rendering error: {e!s}", ) # A render function that can render arbitrarily nested lists of dicts # only render keys: content, text, image_url # and only render values that are strings T = TypeVar("T", str, dict, list[dict | list[dict]], None) @beartype async def render_template_nested[T: (str, dict, list[dict | list[dict]], None)]( input: T, variables: dict, check: bool = False, ) -> T: match input: case str(): return await render_template_string(input, variables, check) case dict(): return { k: await render_template_nested(v, variables, check) for k, v in input.items() } case list(): return [await render_template_nested(v, variables, check) for v in input] case _: return input @beartype async def render_template[T: str | list[dict]]( input: T, variables: dict, check: bool = False, skip_vars: list[str] | None = None, ) -> T: variables = { name: val for name, val in variables.items() if not (skip_vars is not None and isinstance(name, str) and name in skip_vars) } return await render_template_nested(input, variables, check) ================================================ FILE: src/agents-api/agents_api/common/utils/tool_runner.py ================================================ from __future__ import annotations import inspect import json from collections.abc import Awaitable, Callable, Sequence from typing import Any from uuid import UUID from beartype import beartype from litellm.types.utils import ChatCompletionMessageToolCall from litellm.utils import ModelResponse from pydantic import create_model from ...activities.execute_api_call import execute_api_call from ...activities.execute_integration import execute_integration from ...activities.execute_system import execute_system from ...activities.tool_executor import format_tool_results_for_llm from ...autogen.openapi_model import ( BaseChosenToolCall, CreateToolRequest, SystemDef, Tool, ToolExecutionResult, ) from ...clients import integrations, litellm from ...common.protocol.tasks import StepContext from ...common.utils.evaluator import get_handler_with_filtered_params # AIDEV-NOTE: Formats internal Tool definitions into the structure expected by the LLM (currently focused on OpenAI function tools and integrations). @beartype async def format_tool(tool: Tool | CreateToolRequest) -> dict: """Format a Tool or CreateToolRequest for the LLM.""" if tool.type == "function": return { "type": "function", "function": { "name": tool.name, "description": tool.description, "parameters": tool.function and tool.function.parameters, }, } if tool.type == "integration" and tool.integration is not None: return await integrations.convert_to_openai_tool( provider=tool.integration.provider, method=tool.integration.method, ) if tool.type == "api_call" and tool.api_call is not None: params = {} if tool.api_call.params_schema is not None: params = tool.api_call.params_schema.model_dump(exclude_none=True) return { "type": "function", "function": { "name": tool.name, "description": tool.description, "parameters": params, }, } if tool.type == "system" and tool.system is not None: handler = get_handler_with_filtered_params(tool.system) sig = inspect.signature(handler) fields = { name: ( param.annotation, ... if param.default is inspect.Signature.empty else param.default, ) for name, param in sig.parameters.items() } Model = create_model(f"{handler.__name__.title()}Params", **fields) return { "type": "function", "function": { "name": tool.name, "description": tool.description or inspect.getdoc(handler), "parameters": Model.model_json_schema(), }, } return { "type": "function", "function": { "name": tool.name, "description": tool.description, "parameters": tool.function.parameters if tool.function else {}, }, } # AIDEV-NOTE: Context-free tool execution function that can be used from chat endpoint or other contexts @beartype async def run_tool_call( *, developer_id: UUID, agent_id: UUID, task_id: UUID | None = None, session_id: UUID | None = None, tool: Tool | CreateToolRequest, call: BaseChosenToolCall, connection_pool=None, ) -> ToolExecutionResult: """Execute a tool call with explicit parameters (no context required).""" call_spec = call.model_dump() arguments = call_spec[f"{call.type}"]["arguments"] setup = call_spec[f"{call.type}"]["setup"] if tool.type == "integration" and tool.integration: output = await execute_integration( developer_id=developer_id, agent_id=agent_id, task_id=task_id, session_id=session_id, tool_name=tool.name, integration=tool.integration, arguments=arguments, setup=setup, connection_pool=connection_pool, ) return ToolExecutionResult(id=call.id, name=tool.name, output=output) if tool.type == "system" and tool.system: system = tool.system.model_copy(update={"arguments": arguments}) system_dict = system.model_dump() system_def = SystemDef(**system_dict) output = await execute_system( developer_id=developer_id, system=system_def, connection_pool=connection_pool, ) if hasattr(output, "model_dump"): return ToolExecutionResult(id=call.id, name=tool.name, output=output.model_dump()) return ToolExecutionResult(id=call.id, name=tool.name, output=output) if tool.type == "api_call" and tool.api_call: arguments["include_response_content"] = tool.api_call.include_response_content output = await execute_api_call(tool.api_call, arguments) return ToolExecutionResult(id=call.id, name=tool.name, output=output) return ToolExecutionResult(id=call.id, name=tool.name, output={}) @beartype async def run_context_tool( context: StepContext, tool: Tool | CreateToolRequest, call: BaseChosenToolCall, ) -> ToolExecutionResult: """Execute a tool call within a workflow step context.""" # AIDEV-NOTE: Extract parameters from context and delegate to context-free function developer_id = context.execution_input.developer_id agent_id = context.execution_input.agent.id task_id = context.execution_input.task.id if context.execution_input.task else None session_id = getattr(context.execution_input, "session", None) session_id = session_id.id if session_id else None # Delegate to the context-free function return await run_tool_call( developer_id=developer_id, agent_id=agent_id, task_id=task_id, session_id=session_id, tool=tool, call=call, ) @beartype def convert_litellm_to_chosen_tool_call( call: ChatCompletionMessageToolCall, tool: Tool | CreateToolRequest ) -> BaseChosenToolCall: """ Convert a LiteLLM ChatCompletionMessageToolCall to the appropriate BaseChosenToolCall subtype based on the tool's type. This preserves the internal tool type information. """ # Parse arguments from the string arguments_str = json.loads(call.function.arguments) tool_spec = tool.model_dump() if "id" in tool_spec: tool_spec.pop("id") setup = getattr(tool_spec, f"{tool.type}", {}).get("setup", {}) if setup: setup = setup.model_dump() tool_spec[f"{tool.type}"]["setup"] = setup # TODO: add computer_20241022, text_editor_20241022, bash_20241022 tool_spec[f"{tool.type}"]["arguments"] = arguments_str return BaseChosenToolCall( id=call.id, **tool_spec, ) @beartype async def run_llm_with_tools( *, messages: list[dict], tools: Sequence[Tool | CreateToolRequest], settings: dict[str, Any], run_tool_call: Callable[ [Tool | CreateToolRequest, BaseChosenToolCall], Awaitable[ToolExecutionResult] ], # TODO: Probably can be removed ) -> list[dict]: """Run the LLM with a tool loop.""" # Create a copy of messages to avoid mutating the original messages_copy = messages.copy() formatted_tools = [await format_tool(t) for t in tools] # Build a map of function name to tool tool_map = {} for t in tools: if t.type == "integration" and t.integration is not None: tool_map[f"{t.integration.provider}_{t.integration.method}"] = t else: tool_map[t.name] = t while True: response: ModelResponse = await litellm.acompletion( tools=formatted_tools, messages=messages_copy, **settings, ) choice = response.choices[0] messages_copy.append(choice.message.model_dump()) if choice.finish_reason != "tool_calls" or not choice.message.tool_calls: return messages_copy # Process ALL tool calls before continuing for litellm_call in choice.message.tool_calls: # Get the function name from the call function_name = litellm_call.function.name # Try to find the tool by name or handle integration tools tool = tool_map.get(function_name) if tool is None: # Create a dummy response for unknown tools to satisfy the API requirement error_result = ToolExecutionResult( id=litellm_call.id, name=function_name, output={}, error=f"Tool '{function_name}' not found", ) messages_copy.append(format_tool_results_for_llm(error_result)) continue # Convert LiteLLM call to appropriate internal format while preserving tool type internal_call = convert_litellm_to_chosen_tool_call(litellm_call, tool) # Execute the tool with the correctly typed call result = await run_tool_call(tool, internal_call) messages_copy.append(format_tool_results_for_llm(result)) ================================================ FILE: src/agents-api/agents_api/common/utils/types.py ================================================ from beartype.vale import Is from beartype.vale._core._valecore import BeartypeValidator from pydantic import BaseModel def dict_like(pydantic_model_class: type[BaseModel]) -> BeartypeValidator: required_fields_set: set[str] = { field for field, info in pydantic_model_class.model_fields.items() if info.is_required() } return Is[ lambda x: isinstance(x, pydantic_model_class) or required_fields_set.issubset(set(x.keys())) ] ================================================ FILE: src/agents-api/agents_api/common/utils/usage.py ================================================ """ Utilities for tracking token usage and costs for LLM API calls. """ from typing import Any from uuid import UUID from beartype import beartype from litellm.utils import ModelResponse, token_counter from ...queries.usage.create_usage_record import create_usage_record def is_llama_based_model(model_string: str) -> bool: """Check if a model string (either model_name or litellm_params.model) indicates a LLaMA model""" # AIDEV-NOTE: More specific Llama model detection patterns to avoid false positives model_lower = model_string.lower() # Check for specific llama patterns llama_patterns = [ "llama", # Matches any model with "llama" in the name "meta-llama/", # Meta's official Llama models "l3.1", # Llama 3.1 models "l3.3", # Llama 3.3 models "/l3.1", # Llama 3.1 models with provider prefix "/l3.3", # Llama 3.3 models with provider prefix ] return any(pattern in model_lower for pattern in llama_patterns) @beartype async def track_usage( *, developer_id: UUID, model: str, messages: list[dict], response: ModelResponse, custom_api_used: bool = False, metadata: dict[str, Any] = {}, connection_pool: Any = None, # This is for testing purposes ) -> None: """ Tracks token usage and costs for an LLM API call. Parameters: developer_id (UUID): The unique identifier for the developer. model (str): The model used for the API call. messages (list[dict]): The messages sent to the model. response (ModelResponse): The response from the LLM API call. custom_api_used (bool): Whether a custom API key was used. metadata (dict): Additional metadata about the usage. Returns: None """ # Try to get token counts from response.usage if response.usage: prompt_tokens = response.usage.prompt_tokens completion_tokens = response.usage.completion_tokens else: # Calculate tokens manually if usage is not available prompt_tokens = token_counter(model=model, messages=messages) # Calculate completion tokens from the response completion_content = [ {"content": choice.message.content} for choice in response.choices if hasattr(choice, "message") and choice.message and hasattr(choice.message, "content") and choice.message.content ] completion_tokens = ( token_counter(model=model, messages=completion_content) if completion_content else 0 ) # Map the model name to the actual model name actual_model = model is_llama_model = is_llama_based_model(actual_model) # Create usage record await create_usage_record( developer_id=developer_id, model=actual_model, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, custom_api_used=custom_api_used, metadata={ "request_id": response.id if hasattr(response, "id") else None, **metadata, }, is_llama_model=is_llama_model, connection_pool=connection_pool, ) @beartype async def track_embedding_usage( *, developer_id: UUID, model: str, inputs: list[str], response: Any, custom_api_used: bool = False, metadata: dict[str, Any] = {}, ) -> None: """ Tracks token usage and costs for an embedding API call. Parameters: developer_id (UUID): The unique identifier for the developer. model (str): The model used for the embedding. inputs (list[str]): The inputs sent for embedding. response (Any): The response from the embedding API call. custom_api_used (bool): Whether a custom API key was used. metadata (dict): Additional metadata about the usage. Returns: None """ # Try to get token count from response.usage if hasattr(response, "usage") and response.usage: prompt_tokens = response.usage.prompt_tokens else: # Calculate tokens manually if usage is not available prompt_tokens = sum( token_counter(model=model, text=input_text) for input_text in inputs ) # Map the model name to the actual model name actual_model = model # Create usage record for embeddings (no completion tokens) await create_usage_record( developer_id=developer_id, model=actual_model, prompt_tokens=prompt_tokens, completion_tokens=0, # Embeddings don't have completion tokens custom_api_used=custom_api_used, metadata=metadata, ) ================================================ FILE: src/agents-api/agents_api/common/utils/workflows.py ================================================ # AIDEV-NOTE: Workflow name parsing utility for extracting base workflow from transition strings. from ...autogen.openapi_model import Transition PAR_PREFIX = "PAR:" SEPARATOR = "`" def get_workflow_name(transition: Transition) -> str: workflow_str = transition.current.workflow if workflow_str.startswith(PAR_PREFIX): # Extract between PAR:` and first ` after "workflow" start_index = len(PAR_PREFIX) + len(SEPARATOR) assert len(workflow_str) > start_index and SEPARATOR in workflow_str[start_index:], ( "Workflow string is too short or missing backtick" ) workflow_str = workflow_str[start_index:].split(SEPARATOR)[0] elif workflow_str.startswith(SEPARATOR): # Extract between backticks start_index = len(SEPARATOR) assert len(workflow_str) > start_index and SEPARATOR in workflow_str[start_index:], ( "Workflow string is too short or missing backtick" ) workflow_str = workflow_str[start_index:].split(SEPARATOR)[0] return workflow_str ================================================ FILE: src/agents-api/agents_api/common/utils/yaml.py ================================================ from typing import Any import yaml def load(string: str) -> Any: return yaml.load(string, Loader=yaml.CSafeLoader) def dump(value: Any) -> str: return yaml.dump(value, Dumper=yaml.CSafeDumper) ================================================ FILE: src/agents-api/agents_api/dependencies/__init__.py ================================================ """This module contains dependencies that are crucial for the operation of the agents-api. It includes components for: - `auth.py` for API key authentication: This component is responsible for validating the API key provided in the request headers, ensuring that only authorized requests are processed. - `developer_id.py` for developer identification: Handles developer-specific headers like `X-Developer-Id` and `X-Developer-Email`, facilitating the identification of the developer making the request. - `exceptions.py` for custom exception handling: Defines custom exceptions that are used throughout the dependencies module to handle errors related to API security and developer identification. These components collectively ensure the security and proper operation of the agents-api by authenticating requests, identifying developers, and handling errors in a standardized manner.""" ================================================ FILE: src/agents-api/agents_api/dependencies/auth.py ================================================ from typing import Any from fastapi import HTTPException, Security from fastapi.security.api_key import APIKeyHeader from starlette.status import HTTP_403_FORBIDDEN from ..env import api_key, api_key_header_name api_key_header: Any = APIKeyHeader(name=api_key_header_name, auto_error=False) async def get_api_key( user_api_key: str = Security(api_key_header), ) -> str: user_api_key = str(user_api_key) user_api_key = (user_api_key or "").replace("Bearer ", "").strip() if user_api_key != api_key: raise HTTPException(status_code=HTTP_403_FORBIDDEN, detail="Could not validate API KEY") return user_api_key ================================================ FILE: src/agents-api/agents_api/dependencies/content_length.py ================================================ from fastapi import Header from ..env import max_payload_size async def valid_content_length(content_length: int = Header(..., lt=max_payload_size)): return content_length ================================================ FILE: src/agents-api/agents_api/dependencies/developer_id.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Header from ..common.protocol.developers import Developer from ..env import multi_tenant_mode from ..queries.developers.get_developer import get_developer from .exceptions import InvalidHeaderFormat async def get_developer_id( x_developer_id: Annotated[UUID | None, Header(include_in_schema=False)] = None, ) -> UUID: if not multi_tenant_mode: return UUID("00000000-0000-0000-0000-000000000000") if not x_developer_id: msg = "X-Developer-Id header required" raise InvalidHeaderFormat(msg) if isinstance(x_developer_id, str): try: x_developer_id = UUID(x_developer_id, version=4) except ValueError as e: msg = "X-Developer-Id must be a valid UUID" raise InvalidHeaderFormat(msg) from e return x_developer_id async def get_developer_data( x_developer_id: Annotated[UUID | None, Header(include_in_schema=False)] = None, ) -> Developer: if not multi_tenant_mode: assert not x_developer_id, "X-Developer-Id header not allowed in single-tenant mode" return await get_developer(developer_id=UUID("00000000-0000-0000-0000-000000000000")) if not x_developer_id: msg = "X-Developer-Id header required" raise InvalidHeaderFormat(msg) if isinstance(x_developer_id, str): try: x_developer_id = UUID(x_developer_id, version=4) except ValueError as e: msg = "X-Developer-Id must be a valid UUID" raise InvalidHeaderFormat(msg) from e return await get_developer(developer_id=x_developer_id) ================================================ FILE: src/agents-api/agents_api/dependencies/exceptions.py ================================================ class InvalidHeaderFormat(Exception): pass ================================================ FILE: src/agents-api/agents_api/dependencies/query_filter.py ================================================ from collections.abc import Callable from typing import Annotated, Any from fastapi import Query, Request from pydantic import BaseModel, ConfigDict def convert_value(value: str) -> Any: """ Attempts to convert a string value to an int or float. Returns the original string if conversion fails. """ for convert in (int, float): try: return convert(value) except ValueError: continue return value class MetadataFilter(BaseModel): model_config = ConfigDict(extra="allow") def create_filter_extractor( prefix: str = "metadata_filter", ) -> Callable[[Request, MetadataFilter], MetadataFilter]: """ Creates a dependency function to extract filter parameters with a given prefix. Args: prefix (str): The prefix to identify filter parameters. Returns: Callable[[Request], dict[str, Any]]: The dependency function. """ # Add a dot to the prefix to allow for nested filters prefix += "." def extract_filters( request: Request, metadata_filter: Annotated[MetadataFilter, Query(default_factory=MetadataFilter)], ) -> MetadataFilter: """ Extracts query parameters that start with the specified prefix and returns them as a dictionary. Args: request (Request): The incoming HTTP request. Returns: dict[str, Any]: A dictionary containing the filter parameters. """ filters: dict[str, Any] = {} for key, value in request.query_params.items(): if key.startswith(prefix): filter_key = key[len(prefix) :] filters[filter_key] = convert_value(value) return MetadataFilter(**filters) return extract_filters ================================================ FILE: src/agents-api/agents_api/env.py ================================================ """ This module is responsible for loading and providing access to environment variables used throughout the agents-api application. It utilizes the environs library for environment variable parsing. """ import multiprocessing import random from pprint import pprint from typing import TYPE_CHECKING, Any from environs import Env # Initialize the Env object for environment variable parsing. env: Any = Env() # Debug # ----- debug: bool = env.bool("AGENTS_API_DEBUG", default=False) testing: bool = env.bool("AGENTS_API_TESTING", default=False) sentry_dsn: str = env.str("SENTRY_DSN", default=None) # App # --- multi_tenant_mode: bool = env.bool("AGENTS_API_MULTI_TENANT_MODE", default=False) protocol: str = env.str("AGENTS_API_PROTOCOL", default="http") hostname: str = env.str("AGENTS_API_HOSTNAME", default="localhost") public_port: int = env.int("AGENTS_API_PUBLIC_PORT", default=80) api_prefix: str = env.str("AGENTS_API_PREFIX", default="") max_payload_size: int = env.int( "AGENTS_API_MAX_PAYLOAD_SIZE", default=50 * 1024 * 1024, # 50MB ) enable_backwards_compatibility_for_syntax: bool = env.bool( "ENABLE_BACKWARDS_COMPATIBILITY_FOR_SYNTAX", default=True ) max_steps_accessible_in_tasks: int = env.int("MAX_STEPS_ACCESSIBLE_IN_TASKS", default=250) gunicorn_cpu_divisor: int = env.int("GUNICORN_CPU_DIVISOR", default=4) secrets_cache_ttl: int = env.int("SECRETS_CACHE_TTL", default=120) raw_workers: str | None = env.str("GUNICORN_WORKERS", default=None) if raw_workers and raw_workers.strip(): gunicorn_workers: int = int(raw_workers) else: gunicorn_workers: int = max(multiprocessing.cpu_count() // gunicorn_cpu_divisor, 1) # Tasks # ----- task_max_parallelism: int = env.int("AGENTS_API_TASK_MAX_PARALLELISM", default=100) transition_requests_per_minute: int = env.int( "AGENTS_API_TRANSITION_REQUESTS_PER_MINUTE", default=500, ) # Blob Store # ---------- use_blob_store_for_temporal: bool = testing or env.bool( "USE_BLOB_STORE_FOR_TEMPORAL", default=False, ) blob_store_bucket: str = env.str("BLOB_STORE_BUCKET", default="agents-api") blob_store_cutoff_kb: int = env.int("BLOB_STORE_CUTOFF_KB", default=64) s3_endpoint: str = env.str("S3_ENDPOINT", default="http://seaweedfs:8333") s3_access_key: str | None = env.str("S3_ACCESS_KEY", default=None) s3_secret_key: str | None = env.str("S3_SECRET_KEY", default=None) # PostgreSQL # ---- pg_dsn: str = env.str( "PG_DSN", default="postgres://postgres:postgres@0.0.0.0:5432/postgres?sslmode=disable", ) summarization_model_name: str = env.str("SUMMARIZATION_MODEL_NAME", default="gpt-4-turbo") query_timeout: float = env.float("QUERY_TIMEOUT", default=90.0) pool_max_size: int = min(env.int("POOL_MAX_SIZE", default=multiprocessing.cpu_count()), 10) # Auth # ---- _random_generated_key: str = "".join(str(random.randint(0, 9)) for _ in range(32)) api_key: str = env.str("AGENTS_API_KEY", _random_generated_key) if api_key == _random_generated_key and not TYPE_CHECKING: print("Generated API key since not set in the environment.") api_key_header_name: str = env.str("AGENTS_API_KEY_HEADER_NAME", default="X-Auth-Key") max_free_sessions: int = env.int("MAX_FREE_SESSIONS", default=50) max_free_executions: int = env.int("MAX_FREE_EXECUTIONS", default=50) # Usage limits # ----------- free_tier_cost_limit: float = env.float("FREE_TIER_COST_LIMIT", default=2.0) # Litellm API # ----------- litellm_url: str | None = env.str("LITELLM_URL", default=None) litellm_master_key: str = env.str("LITELLM_MASTER_KEY", default="") # Embedding service # ----------------- embedding_model_id: str = env.str("EMBEDDING_MODEL_ID", default="openai/text-embedding-3-large") embedding_dimensions: int = env.int("EMBEDDING_DIMENSIONS", default=1024) # Integration service # ------------------- integration_service_url: str = env.str("INTEGRATION_SERVICE_URL", default="http://0.0.0.0:8000") # Temporal # -------- temporal_worker_url: str = env.str("TEMPORAL_WORKER_URL", default="localhost:7233") temporal_namespace: str = env.str("TEMPORAL_NAMESPACE", default="default") temporal_client_cert: str = env.str("TEMPORAL_CLIENT_CERT", default=None) temporal_private_key: str = env.str("TEMPORAL_PRIVATE_KEY", default=None) temporal_api_key: str = env.str("TEMPORAL_API_KEY", default=None) temporal_endpoint: Any = env.str("TEMPORAL_ENDPOINT", default="localhost:7233") temporal_task_queue: Any = env.str("TEMPORAL_TASK_QUEUE", default="julep-task-queue") temporal_schedule_to_close_timeout: int = env.int( "TEMPORAL_SCHEDULE_TO_CLOSE_TIMEOUT", default=3600, ) temporal_heartbeat_timeout: int = env.int("TEMPORAL_HEARTBEAT_TIMEOUT", default=900) temporal_metrics_bind_host: str = env.str("TEMPORAL_METRICS_BIND_HOST", default="0.0.0.0") temporal_metrics_bind_port: int = env.int("TEMPORAL_METRICS_BIND_PORT", default=14000) temporal_activity_after_retry_timeout: int = env.int( "TEMPORAL_ACTIVITY_AFTER_RETRY_TIMEOUT", default=30, ) temporal_search_attribute_key: str = env.str( "TEMPORAL_SEARCH_ATTRIBUTE_KEY", default="CustomStringField", ) def _parse_optional_int(val: str | None) -> int | None: if not val or val.lower() == "none": return None return int(val) # Temporal worker configuration temporal_max_concurrent_workflow_tasks: int | None = _parse_optional_int( env.str("TEMPORAL_MAX_CONCURRENT_WORKFLOW_TASKS", default=None), ) temporal_max_concurrent_activities: int | None = _parse_optional_int( env.str("TEMPORAL_MAX_CONCURRENT_ACTIVITIES", default=None), ) temporal_max_activities_per_second: int | None = _parse_optional_int( env.str("TEMPORAL_MAX_ACTIVITIES_PER_SECOND", default=None), ) temporal_max_task_queue_activities_per_second: int | None = _parse_optional_int( env.str("TEMPORAL_MAX_TASK_QUEUE_ACTIVITIES_PER_SECOND", default=None), ) # API Keys needed for the `humanize_text` method in `evaluate` step # ------------ sapling_api_key: str = env.str("SAPLING_API_KEY", default=None) zerogpt_api_key: str = env.str("ZEROGPT_API_KEY", default=None) zerogpt_url: str = env.str( "ZEROGPT_URL", default="https://api.zerogpt.com/api/detect/detectText" ) desklib_url: str = env.str("DESKLIB_URL", default="http://35.243.190.233/detect") sapling_url: str = env.str("SAPLING_URL", default="https://api.sapling.ai/api/v1/aidetect") brave_api_key: str = env.str("BRAVE_API_KEY", default=None) # Feature Flags # ------------- unleash_url: str = env.str("UNLEASH_URL", default="http://localhost:4242/api") unleash_api_token: str = env.str( "UNLEASH_API_TOKEN", default="default:development.unleash-insecure-api-token" ) unleash_app_name: str = env.str("UNLEASH_APP_NAME", default="agents-api") # Responses Flag # --------------- enable_responses: bool = env.bool("ENABLE_RESPONSES", default=False) # Search Feature Gates # -------------------- enable_hybrid_trigram_search: bool = env.bool("ENABLE_HYBRID_TRIGRAM_SEARCH", default=False) # Hasura GraphQL settings hasura_url: str = env.str( "HASURA_URL", default="http://hasura:8080", ) hasura_admin_secret: str | None = env.str( "HASURA_ADMIN_SECRET", default=None, ) # Llama model cost # ---------------- # AIDEV-NOTE: Validate multiplier is within reasonable bounds (0 to 100) _raw_llama_multiplier: float = env.float("LLAMA_MODEL_MULTIPLIER", default=1.0) if _raw_llama_multiplier < 0 or _raw_llama_multiplier > 100: msg = "LLAMA_MODEL_MULTIPLIER must be between 0 and 100" raise ValueError(msg) llama_model_multiplier: float = _raw_llama_multiplier # Secrets # ------- def _validate_master_key(key: str | None) -> str: """Validate that the master key is the correct length for encryption and is provided.""" if key is None or len(key) != 32: msg = "SECRETS_MASTER_KEY must be exactly 32 characters long" raise ValueError(msg) return key if not TYPE_CHECKING and not testing: secrets_master_key: str = _validate_master_key(env.str("SECRETS_MASTER_KEY")) else: secrets_master_key: str = "*" * 32 print("USING FAKE SECRETS KEY FOR TESTING") # Consolidate environment variables environment: dict[str, Any] = { "debug": debug, "multi_tenant_mode": multi_tenant_mode, "sentry_dsn": sentry_dsn, "temporal_endpoint": temporal_endpoint, "temporal_task_queue": temporal_task_queue, "api_key": api_key, "api_key_header_name": api_key_header_name, "hostname": hostname, "api_prefix": api_prefix, "temporal_worker_url": temporal_worker_url, "temporal_namespace": temporal_namespace, "embedding_model_id": embedding_model_id, "use_blob_store_for_temporal": use_blob_store_for_temporal, "blob_store_bucket": blob_store_bucket, "blob_store_cutoff_kb": blob_store_cutoff_kb, "s3_endpoint": s3_endpoint, "s3_access_key": s3_access_key, "s3_secret_key": s3_secret_key, "testing": testing, "enable_responses": enable_responses, "free_tier_cost_limit": free_tier_cost_limit, "secrets_master_key": secrets_master_key, "unleash_url": unleash_url, "unleash_api_token": unleash_api_token, "unleash_app_name": unleash_app_name, "llama_model_multiplier": llama_model_multiplier, } if debug or testing: # Print the loaded environment variables for debugging purposes. print("Environment variables:") pprint(environment) print() # Yell if testing is enabled print("@" * 80) print( f"@@@ Running in {'testing' if testing else 'debug'} mode. This should not be enabled in production. @@@", ) print("@" * 80) ================================================ FILE: src/agents-api/agents_api/exceptions.py ================================================ from dataclasses import dataclass class AgentsBaseException(Exception): pass class ModelNotSupportedError(AgentsBaseException): """Exception raised when model is not supported.""" def __init__(self, model_name: str) -> None: super().__init__(f"model {model_name} is not supported") class PromptTooBigError(AgentsBaseException): """Exception raised when prompt is too big.""" def __init__(self, token_count, max_tokens) -> None: super().__init__( f"prompt is too big, {token_count} tokens provided, exceeds maximum of {max_tokens}", ) class UnknownTokenizerError(AgentsBaseException): """Exception raised when tokenizer is unknown.""" def __init__(self) -> None: super().__init__("unknown tokenizer") class TooManyRequestsError(Exception): pass @dataclass class LastErrorInput: last_error: BaseException | None @dataclass class FailedDecodingSentinel: """Sentinel object returned when failed to decode payload.""" payload_data: bytes @dataclass class FailedEncodingSentinel: """Sentinel object returned when failed to encode payload.""" payload_data: bytes class QueriesBaseException(AgentsBaseException): pass class InvalidSQLQuery(QueriesBaseException): def __init__(self, query_name: str) -> None: super().__init__(f"invalid query: {query_name}") ================================================ FILE: src/agents-api/agents_api/metrics/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/metrics/counters.py ================================================ import inspect from collections.abc import Awaitable, Callable from functools import wraps from typing import ParamSpec, TypeVar from prometheus_client import Counter P = ParamSpec("P") T = TypeVar("T") import time from typing import ParamSpec, TypeVar from prometheus_client import Histogram, Summary from prometheus_client.utils import INF P = ParamSpec("P") T = TypeVar("T") labelnames = ("developer_id", "query_name") buckets = ( 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0, 15.0, 20.0, 25.0, 30.0, INF, ) counter = Counter( "db_query_counter", "Number of db calls", labelnames=labelnames, ) summary = Summary( "db_query_latency_summary", "Database query latency summary", labelnames=labelnames, ) hist = Histogram( "db_query_latency_hist", "Database query latency histogram", labelnames=labelnames, buckets=buckets, ) def query_metrics(metric_label: str, id_field_name: str = "developer_id"): def decor(func: Callable[P, T | Awaitable[T]]): if inspect.iscoroutinefunction(func): @wraps(func) async def async_wrapper(*args: P.args, **kwargs: P.kwargs) -> T: fld_id = kwargs.get(id_field_name, "not_set") counter.labels(fld_id, metric_label).inc() start_time = time.time() result = await func(*args, **kwargs) end_time = time.time() - start_time summary.labels(fld_id, metric_label).observe(end_time) hist.labels(fld_id, metric_label).observe(end_time) return result return async_wrapper @wraps(func) def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: fld_id = kwargs.get(id_field_name, "not_set") counter.labels(fld_id, metric_label).inc() start_time = time.time() result = func(*args, **kwargs) end_time = time.time() - start_time summary.labels(fld_id, metric_label).observe(end_time) hist.labels(fld_id, metric_label).observe(end_time) return result return wrapper return decor ================================================ FILE: src/agents-api/agents_api/model_registry.py ================================================ """ Model Registry maintains a list of supported models and their configs. """ GPT4_MODELS: dict[str, int] = { # stable model names: # resolves to gpt-4-0314 before 2023-06-27, # resolves to gpt-4-0613 after "gpt-4": 8192, "gpt-4-32k": 32768, # turbo models (Turbo, JSON mode) "gpt-4-turbo": 128000, "gpt-4-turbo-2024-04-09": 128000, "gpt-4-1106-preview": 128000, "gpt-4-0125-preview": 128000, "gpt-4-turbo-preview": 128000, # multimodal model "gpt-4-vision-preview": 128000, # 0613 models (function calling): # https://openai.com/blog/function-calling-and-other-api-updates "gpt-4-0613": 8192, "gpt-4-32k-0613": 32768, # 0314 models "gpt-4-0314": 8192, "gpt-4-32k-0314": 32768, } TURBO_MODELS: dict[str, int] = { # stable model names: # resolves to gpt-3.5-turbo-0301 before 2023-06-27, # resolves to gpt-3.5-turbo-0613 until 2023-12-11, # resolves to gpt-3.5-turbo-1106 after "gpt-3.5-turbo": 4096, # resolves to gpt-3.5-turbo-16k-0613 until 2023-12-11 # resolves to gpt-3.5-turbo-1106 after "gpt-3.5-turbo-16k": 16384, # 0125 (2024) model (JSON mode) "gpt-3.5-turbo-0125": 16385, # 1106 model (JSON mode) "gpt-3.5-turbo-1106": 16384, # 0613 models (function calling): # https://openai.com/blog/function-calling-and-other-api-updates "gpt-3.5-turbo-0613": 4096, "gpt-3.5-turbo-16k-0613": 16384, # 0301 models "gpt-3.5-turbo-0301": 4096, } GPT3_5_MODELS: dict[str, int] = { "text-davinci-003": 4097, "text-davinci-002": 4097, # instruct models "gpt-3.5-turbo-instruct": 4096, } GPT3_MODELS: dict[str, int] = { "text-ada-001": 2049, "text-babbage-001": 2040, "text-curie-001": 2049, "ada": 2049, "babbage": 2049, "curie": 2049, "davinci": 2049, } DISCONTINUED_MODELS: dict[str, int] = { "code-davinci-002": 8001, "code-davinci-001": 8001, "code-cushman-002": 2048, "code-cushman-001": 2048, } CLAUDE_MODELS: dict[str, int] = { "claude-instant-1": 100000, "claude-instant-1.2": 100000, "claude-2": 100000, "claude-2.0": 100000, "claude-2.1": 200000, "claude-3-opus-20240229": 180000, "claude-3-sonnet-20240229": 180000, "claude-3-haiku-20240307": 180000, } OPENAI_MODELS: dict[str, int] = { **GPT4_MODELS, **TURBO_MODELS, **GPT3_5_MODELS, **GPT3_MODELS, } LOCAL_MODELS: dict[str, int] = { "gpt-4o": 32768, "gpt-4o-awq": 32768, "TinyLlama/TinyLlama_v1.1": 2048, "casperhansen/llama-3-8b-instruct-awq": 8192, "julep-ai/Hermes-2-Theta-Llama-3-8B": 8192, "OpenPipe/Hermes-2-Theta-Llama-3-8B-32k": 32768, } LOCAL_MODELS_WITH_TOOL_CALLS: dict[str, int] = { "OpenPipe/Hermes-2-Theta-Llama-3-8B-32k": 32768, "julep-ai/Hermes-2-Theta-Llama-3-8B": 8192, } OLLAMA_MODELS: dict[str, int] = { "llama2": 4096, } CHAT_MODELS: dict[str, int] = {**GPT4_MODELS, **TURBO_MODELS, **CLAUDE_MODELS} ================================================ FILE: src/agents-api/agents_api/queries/AGENTS.md ================================================ # AGENTS.md - queries This folder contains database query builders and SQL files for `agents-api`. Key Points - Organize queries by domain under subfolders (agents, chat, tasks, etc.). - Use asyncpg for execution and return typed Pydantic models. - Validate SQL syntax with `poe check`. - Add new queries in `queries/` and index them if needed. - Tests reside under `agents-api/tests/`. - Add `AIDEV-NOTE` anchors at the top of query modules to clarify module purpose. # Queries ## Purpose - Database access layer for the application - SQL query execution and result processing - Organized by resource types matching API endpoints ## Key Query Modules ### projects/ - Create, list, and check for project existence - Project association with resources ### agents/, tasks/, sessions/, users/ - CRUD operations for core resources - Data validation and normalization - Project association handling ### secrets/ - Secure storage and retrieval of sensitive data - Key-value storage with encryption - Access control and validation ### usage/ - Usage tracking and cost calculation - User activity monitoring - Billing and analytics data ### executions/ - Create and track task executions - Handle execution transitions - Map between Temporal workflows and API data ### docs/ - Document storage and retrieval - Text search (search_docs_by_text) - Embedding search (search_docs_by_embedding) - Hybrid search combining both approaches ### entries/ - Record chat history and interactions - Retrieve conversation history ## Common Patterns - Async functions for database operations - Connection pool management - Data serialization/deserialization - Pydantic model integration ## Usage Pattern 1. Query function receives parameters and optional connection_pool 2. SQL query construction (often with query parameters) 3. Execute query via asyncpg 4. Process results into Pydantic models 5. Return typed response ## Important Functions - `prepare_execution_input`: Builds inputs for Temporal workflows - `create_execution_transition`: Records state changes in executions - `search_docs_hybrid`: Combined embedding and text search ================================================ FILE: src/agents-api/agents_api/queries/__init__.py ================================================ """ The `queries` module of the agents API is designed to encapsulate all data interactions with the PostgreSQL database. It provides a structured way to perform CRUD (Create, Read, Update, Delete) operations and other specific data manipulations across various entities such as agents, documents, entries, sessions, tools, and users. Each sub-module within this module corresponds to a specific entity and contains functions and classes that implement SQL queries for interacting with the database. These interactions include creating new records, updating existing ones, retrieving data for specific conditions, and deleting records. The operations are crucial for the functionality of the agents API, enabling it to manage and process data effectively for each entity. This module also integrates with the `common` module for exception handling and utility functions, ensuring robust error management and providing reusable components for data processing and query construction. """ from . import agents as agents from . import developers as developers from . import docs as docs from . import entries as entries from . import executions as executions from . import files as files from . import sessions as sessions from . import tasks as tasks from . import tools as tools from . import usage as usage from . import users as users ================================================ FILE: src/agents-api/agents_api/queries/agents/__init__.py ================================================ """ The `agent` module within the `queries` package provides a comprehensive suite of SQL query functions for managing agents in the PostgreSQL database. This includes: - Creating new agents - Updating existing agents - Retrieving details about specific agents - Listing agents with filtering and pagination - Deleting agents from the database Each function in this module constructs and returns SQL queries along with their parameters for database operations. """ from .create_agent import create_agent from .create_or_update_agent import create_or_update_agent from .delete_agent import delete_agent from .get_agent import get_agent from .list_agents import list_agents from .patch_agent import patch_agent from .update_agent import update_agent __all__ = [ "create_agent", "create_or_update_agent", "delete_agent", "get_agent", "list_agents", "patch_agent", "update_agent", ] ================================================ FILE: src/agents-api/agents_api/queries/agents/create_agent.py ================================================ """ This module contains the functionality for creating agents in the PostgreSQL database. It includes functions to construct and execute SQL queries for inserting new agent records. """ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from uuid_extensions import uuid7 from ...autogen.openapi_model import Agent, CreateAgentRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import generate_canonical_name, pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for creating the agent agent_query = """ WITH new_agent AS ( INSERT INTO agents ( developer_id, agent_id, canonical_name, name, about, instructions, model, metadata, default_settings, default_system_template ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 ) RETURNING * ), proj AS ( -- Find project ID by canonical name SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $11 ), project_association AS ( -- Create project association if project exists INSERT INTO project_agents (project_id, developer_id, agent_id) SELECT p.project_id, $1, $2 FROM proj p WHERE p.project_id IS NOT NULL ON CONFLICT (project_id, agent_id) DO NOTHING RETURNING 1 ) SELECT a.*, p.canonical_name AS project FROM new_agent a LEFT JOIN proj p ON TRUE; """ @rewrap_exceptions(common_db_exceptions("agent", ["create"])) @wrap_in_class( Agent, one=True, transform=lambda d: {**d, "id": d["agent_id"]}, ) @query_metrics("create_agent") @pg_query @beartype async def create_agent_query( *, developer_id: UUID, agent_id: UUID | None = None, data: CreateAgentRequest, ) -> tuple[str, list]: """ Constructs and executes a SQL query to create a new agent in the database. Parameters: agent_id (UUID | None): The unique identifier for the agent. developer_id (UUID): The unique identifier for the developer creating the agent. data (CreateAgentRequest): The data for the new agent. Returns: tuple[str, dict]: SQL query and parameters for creating the agent. """ return ( agent_query, [ developer_id, agent_id or uuid7(), data.canonical_name or generate_canonical_name(), data.name, data.about, data.instructions if isinstance(data.instructions, list) else [data.instructions], data.model, data.metadata or {}, data.default_settings or {}, data.default_system_template, data.project, ], ) async def create_agent( *, developer_id: UUID, agent_id: UUID | None = None, data: CreateAgentRequest, connection_pool: asyncpg.Pool | None = None, ) -> Agent: project_canonical_name = data.project or "default" project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await create_agent_query( developer_id=developer_id, agent_id=agent_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/agents/create_or_update_agent.py ================================================ """ This module contains the functionality for creating or updating agents in the PostgreSQL database. It constructs and executes SQL queries to insert a new agent or update an existing agent's details based on agent ID and developer ID. """ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Agent, CreateOrUpdateAgentRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import generate_canonical_name, pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query agent_query = """ WITH existing_agent AS ( SELECT canonical_name FROM agents WHERE developer_id = $1 AND agent_id = $2 ), proj AS ( -- Find project ID by canonical name SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $11 ), project_check AS ( -- Check if project exists SELECT EXISTS ( SELECT 1 FROM proj ) as project_exists ), updated_agent AS ( INSERT INTO agents ( developer_id, agent_id, canonical_name, name, about, instructions, model, metadata, default_settings, default_system_template ) VALUES ( $1, -- developer_id $2, -- agent_id COALESCE( -- canonical_name (SELECT canonical_name FROM existing_agent), $3 ), $4, -- name $5, -- about $6, -- instructions $7, -- model $8, -- metadata $9, -- default_settings $10 -- default_system_template ) ON CONFLICT (developer_id, agent_id) DO UPDATE SET canonical_name = EXCLUDED.canonical_name, name = EXCLUDED.name, about = EXCLUDED.about, instructions = EXCLUDED.instructions, model = EXCLUDED.model, metadata = EXCLUDED.metadata, default_settings = EXCLUDED.default_settings, default_system_template = EXCLUDED.default_system_template WHERE ( $11 IS NULL OR (SELECT project_exists FROM project_check) ) RETURNING * ), project_association AS ( -- Insert or update project association if project exists INSERT INTO project_agents (project_id, developer_id, agent_id) SELECT (SELECT project_id FROM proj), $1, $2 WHERE EXISTS (SELECT 1 FROM proj) ON CONFLICT (project_id, agent_id) DO UPDATE SET project_id = (SELECT project_id FROM proj) RETURNING project_id ) SELECT a.*, COALESCE( (SELECT canonical_name FROM proj), (SELECT p.canonical_name FROM project_agents pa JOIN projects p ON pa.project_id = p.project_id WHERE pa.developer_id = a.developer_id AND pa.agent_id = a.agent_id) ) as project FROM updated_agent a; """ @rewrap_exceptions(common_db_exceptions("agent", ["create", "update"])) @wrap_in_class( Agent, one=True, transform=lambda d: {**d, "id": d["agent_id"]}, ) @query_metrics("create_or_update_agent") @pg_query @beartype async def create_or_update_agent( *, agent_id: UUID, developer_id: UUID, data: CreateOrUpdateAgentRequest, ) -> tuple[str, list]: """ Constructs the SQL queries to create a new agent or update an existing agent's details. Args: agent_id (UUID): The UUID of the agent to create or update. developer_id (UUID): The UUID of the developer owning the agent. data (CreateOrUpdateAgentRequest): A dictionary containing agent fields to insert or update. Returns: tuple[list[str], dict]: A tuple containing the list of SQL queries and their parameters. """ # Get project (default if not specified) project_canonical_name = ( data.project if hasattr(data, "project") and data.project else "default" ) # Ensure instructions is a list data.instructions = ( data.instructions if isinstance(data.instructions, list) else [data.instructions] ) # Convert default_settings to dict if it exists default_settings = data.default_settings or {} # Set default values data.metadata = data.metadata or {} data.canonical_name = data.canonical_name or generate_canonical_name() params = [ developer_id, agent_id, data.canonical_name, data.name, data.about, data.instructions, data.model, data.metadata, default_settings, data.default_system_template, project_canonical_name, ] return ( agent_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/agents/delete_agent.py ================================================ """ This module contains the functionality for deleting agents from the PostgreSQL database. It constructs and executes SQL queries to remove agent records and associated data. """ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query agent_query = """ WITH deleted_file_owners AS ( DELETE FROM file_owners WHERE developer_id = $1 AND owner_type = 'agent' AND owner_id = $2 ), deleted_doc_owners AS ( DELETE FROM doc_owners WHERE developer_id = $1 AND owner_type = 'agent' AND owner_id = $2 ), deleted_files AS ( DELETE FROM files WHERE developer_id = $1 AND file_id IN ( SELECT file_id FROM file_owners WHERE developer_id = $1 AND owner_type = 'agent' AND owner_id = $2 ) ), deleted_docs AS ( DELETE FROM docs WHERE developer_id = $1 AND doc_id IN ( SELECT doc_id FROM doc_owners WHERE developer_id = $1 AND owner_type = 'agent' AND owner_id = $2 ) ), deleted_tools AS ( DELETE FROM tools WHERE agent_id = $2 AND developer_id = $1 ) DELETE FROM agents WHERE agent_id = $2 AND developer_id = $1 RETURNING developer_id, agent_id; """ @rewrap_exceptions(common_db_exceptions("agent", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: {**d, "id": d["agent_id"], "deleted_at": utcnow()}, ) @pg_query @beartype async def delete_agent(*, agent_id: UUID, developer_id: UUID) -> tuple[str, list]: """ Constructs the SQL query to delete an agent and its related settings. Args: agent_id (UUID): The UUID of the agent to be deleted. developer_id (UUID): The UUID of the developer owning the agent. Returns: tuple[str, list]: A tuple containing the SQL query and its parameters. """ # Note: We swap the parameter order because the queries use $1 for developer_id and $2 for agent_id params = [developer_id, agent_id] return ( agent_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/agents/get_agent.py ================================================ """ This module contains the functionality for retrieving a single agent from the PostgreSQL database. It constructs and executes SQL queries to fetch agent details based on agent ID and developer ID. """ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Agent from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query agent_query = """ SELECT a.agent_id, a.developer_id, a.name, a.canonical_name, a.about, a.instructions, a.model, a.metadata, a.default_settings, a.default_system_template, a.created_at, a.updated_at, p.canonical_name AS project FROM agents a LEFT JOIN project_agents pa ON a.agent_id = pa.agent_id AND a.developer_id = pa.developer_id LEFT JOIN projects p ON pa.project_id = p.project_id AND pa.developer_id = p.developer_id WHERE a.agent_id = $2 AND a.developer_id = $1; """ @rewrap_exceptions(common_db_exceptions("agent", ["get"])) @wrap_in_class( Agent, one=True, transform=lambda d: {**d, "id": d["agent_id"]}, ) @pg_query @beartype async def get_agent( *, agent_id: UUID, developer_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Constructs the SQL query to retrieve an agent's details. Args: agent_id (UUID): The UUID of the agent to retrieve. developer_id (UUID): The UUID of the developer owning the agent. Returns: tuple[list[str], dict]: A tuple containing the SQL query and its parameters. """ return ( agent_query, [developer_id, agent_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/agents/list_agents.py ================================================ """ This module contains the functionality for listing agents from the PostgreSQL database. It constructs and executes SQL queries to fetch a list of agents based on developer ID with pagination. """ from typing import Any, Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Agent from ...common.utils.db_exceptions import common_db_exceptions from ..utils import ( pg_query, rewrap_exceptions, wrap_in_class, ) # Define the raw SQL query raw_query = """ SELECT a.agent_id, a.developer_id, a.name, a.canonical_name, a.about, a.instructions, a.model, a.metadata, a.default_settings, a.default_system_template, a.created_at, a.updated_at, p.canonical_name AS project FROM agents a LEFT JOIN project_agents pa ON a.agent_id = pa.agent_id AND a.developer_id = pa.developer_id LEFT JOIN projects p ON pa.project_id = p.project_id AND pa.developer_id = p.developer_id WHERE a.developer_id = $1 {metadata_filter_query} ORDER BY CASE WHEN $4 = 'created_at' AND $5 = 'asc' THEN a.created_at END ASC NULLS LAST, CASE WHEN $4 = 'created_at' AND $5 = 'desc' THEN a.created_at END DESC NULLS LAST, CASE WHEN $4 = 'updated_at' AND $5 = 'asc' THEN a.updated_at END ASC NULLS LAST, CASE WHEN $4 = 'updated_at' AND $5 = 'desc' THEN a.updated_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ @rewrap_exceptions(common_db_exceptions("agent", ["list"])) @wrap_in_class( Agent, transform=lambda d: {**d, "id": d["agent_id"]}, ) @pg_query @beartype async def list_agents( *, developer_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Constructs query to list agents for a developer with pagination. Args: developer_id: UUID of the developer limit: Maximum number of records to return offset: Number of records to skip sort_by: Field to sort by direction: Sort direction ('asc' or 'desc') metadata_filter: Optional metadata filters Returns: Tuple of (query, params) """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} # Initialize parameters params = [ developer_id, limit, offset, sort_by, direction, ] # Handle metadata filter differently - using JSONB containment agent_query = raw_query.format( metadata_filter_query="AND a.metadata @> $6::jsonb" if metadata_filter else "", ) # If we have metadata filters, safely add them as a parameter if metadata_filter: params.append(metadata_filter) return ( agent_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/agents/patch_agent.py ================================================ """ This module contains the functionality for partially updating an agent in the PostgreSQL database. It constructs and executes SQL queries to update specific fields of an agent based on agent ID and developer ID. """ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import Agent, PatchAgentRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query agent_query = """ WITH proj AS ( -- Find project ID by canonical name if project is being updated SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $11 AND $11 IS NOT NULL ), project_exists AS ( -- Check if project exists when being updated SELECT CASE WHEN $11 IS NULL THEN TRUE -- No project specified, so exists check passes WHEN EXISTS (SELECT 1 FROM proj) THEN TRUE -- Project exists ELSE FALSE -- Project specified but doesn't exist END AS exists ), updated_agent AS ( UPDATE agents SET name = CASE WHEN $3::text IS NOT NULL THEN $3 ELSE name END, about = CASE WHEN $4::text IS NOT NULL THEN $4 ELSE about END, metadata = CASE WHEN $5::jsonb IS NOT NULL THEN metadata || $5 ELSE metadata END, model = CASE WHEN $6::text IS NOT NULL THEN $6 ELSE model END, default_settings = CASE WHEN $7::jsonb IS NOT NULL THEN $7 ELSE default_settings END, default_system_template = CASE WHEN $8::text IS NOT NULL THEN $8 ELSE default_system_template END, instructions = CASE WHEN $9::text[] IS NOT NULL THEN $9 ELSE instructions END, canonical_name = CASE WHEN $10::citext IS NOT NULL THEN $10 ELSE canonical_name END WHERE agent_id = $2 AND developer_id = $1 AND (SELECT exists FROM project_exists) RETURNING * ) SELECT (SELECT exists FROM project_exists) AS project_exists, a.*, p.canonical_name as project FROM updated_agent a LEFT JOIN project_agents pa ON a.developer_id = pa.developer_id AND a.agent_id = pa.agent_id LEFT JOIN projects p ON pa.project_id = p.project_id; """ @rewrap_exceptions(common_db_exceptions("agent", ["patch"])) @wrap_in_class( Agent, one=True, transform=lambda d: {**d, "id": d["agent_id"]}, ) @query_metrics("patch_agent") @pg_query @beartype async def patch_agent_query( *, agent_id: UUID, developer_id: UUID, data: PatchAgentRequest, ) -> tuple[str, list]: """ Constructs the SQL query to partially update an agent's details. Args: agent_id (UUID): The UUID of the agent to update. developer_id (UUID): The UUID of the developer owning the agent. data (PatchAgentRequest): A dictionary of fields to update. Returns: tuple[str, list]: A tuple containing the SQL query and its parameters. """ params = [ developer_id, agent_id, data.name, data.about, data.metadata, data.model, data.default_settings, data.default_system_template, [data.instructions] if isinstance(data.instructions, str) else data.instructions, data.canonical_name, data.project, ] return ( agent_query, params, ) async def patch_agent( *, agent_id: UUID, developer_id: UUID, data: PatchAgentRequest, connection_pool: asyncpg.Pool | None = None, ) -> Agent: project_canonical_name = data.project or "default" project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await patch_agent_query( agent_id=agent_id, developer_id=developer_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/agents/update_agent.py ================================================ """ This module contains the functionality for fully updating an agent in the PostgreSQL database. It constructs and executes SQL queries to replace an agent's details based on agent ID and developer ID. """ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import Agent, UpdateAgentRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query agent_query = """ WITH proj AS ( -- Find project ID by canonical name if project is provided and not NULL SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $9 AND $9 IS NOT NULL ), project_exists AS ( -- Check if the project exists when specified SELECT CASE WHEN $9 IS NULL THEN TRUE -- No project specified, check passes WHEN EXISTS (SELECT 1 FROM proj) THEN TRUE -- Project exists ELSE FALSE -- Project specified but doesn't exist END AS exists ), updated_agent AS ( UPDATE agents SET metadata = $3, name = $4, about = $5, model = $6, default_settings = $7::jsonb, default_system_template = $8 WHERE agent_id = $2 AND developer_id = $1 AND (SELECT exists FROM project_exists) RETURNING * ) SELECT (SELECT exists FROM project_exists) AS project_exists, a.*, p.canonical_name as project FROM updated_agent a LEFT JOIN project_agents pa ON a.developer_id = pa.developer_id AND a.agent_id = pa.agent_id LEFT JOIN projects p ON pa.project_id = p.project_id; """ @rewrap_exceptions(common_db_exceptions("agent", ["update"])) @wrap_in_class( Agent, one=True, transform=lambda d: {**d, "id": d["agent_id"]}, ) @query_metrics("update_agent") @pg_query @beartype async def update_agent_query( *, agent_id: UUID, developer_id: UUID, data: UpdateAgentRequest, ) -> tuple[str, list]: """ Constructs the SQL query to fully update an agent's details. Args: agent_id (UUID): The UUID of the agent to update. developer_id (UUID): The UUID of the developer owning the agent. data (UpdateAgentRequest): A dictionary containing all agent fields to update. Returns: tuple[str, list]: A tuple containing the SQL query and its parameters. """ params = [ developer_id, agent_id, data.metadata or {}, data.name, data.about, data.model, data.default_settings or {}, data.default_system_template, data.project, ] return ( agent_query, params, ) async def update_agent( *, agent_id: UUID, developer_id: UUID, data: UpdateAgentRequest, connection_pool: asyncpg.Pool | None = None, ) -> Agent: project_canonical_name = data.project or "default" project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await update_agent_query( agent_id=agent_id, developer_id=developer_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/chat/__init__.py ================================================ """ Module: agents_api/models/docs This module is responsible for managing document-related operations within the application, particularly for agents and possibly other entities. It serves as a core component of the document management system, enabling features such as document creation, listing, deletion, and embedding of snippets for enhanced search and retrieval capabilities. Main functionalities include: - Creating new documents and associating them with agents or users. - Listing documents based on various criteria, including ownership and metadata filters. - Deleting documents by their unique identifiers. - Embedding document snippets for retrieval purposes. The module interacts with other parts of the application, such as the agents and users modules, to provide a comprehensive document management system. Its role is crucial in enabling document search, retrieval, and management features within the context of agents and users. This documentation aims to provide clear, concise, and sufficient context for new developers or contributors to understand the module's role without needing to dive deep into the code immediately. """ # ruff: noqa: F401 from .gather_messages import gather_messages from .prepare_chat_context import prepare_chat_context ================================================ FILE: src/agents-api/agents_api/queries/chat/gather_messages.py ================================================ from typing import TypeVar from uuid import UUID import numpy as np from beartype import beartype from fastapi import HTTPException from pydantic import ValidationError from ...autogen.openapi_model import ( ChatInput, DocReference, History, HybridDocSearchRequest, TextOnlyDocSearchRequest, VectorDocSearchRequest, ) from ...clients import litellm from ...common.protocol.developers import Developer from ...common.protocol.sessions import ChatContext from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ...common.utils.get_doc_search import get_search_fn_and_params, strip_embeddings from ...common.utils.mmr import apply_mmr_to_docs from ...env import enable_hybrid_trigram_search from ..entries.get_history import get_history from ..utils import rewrap_exceptions T = TypeVar("T") @rewrap_exceptions({ ValidationError: partialclass(HTTPException, status_code=400), TypeError: partialclass(HTTPException, status_code=400), **common_db_exceptions("history", ["get"]), }) @beartype async def gather_messages( *, developer: Developer, session_id: UUID, chat_context: ChatContext, chat_input: ChatInput, connection_pool=None, ) -> tuple[list[dict], list[DocReference]]: new_raw_messages = [msg.model_dump(mode="json") for msg in chat_input.messages] recall = chat_input.recall assert len(new_raw_messages) > 0 # Get the session history # Determine allowed sources based on recall_tools flag if chat_input.recall_tools: allowed_sources = [ "api_request", "api_response", "tool_request", "tool_response", "summarizer", ] else: allowed_sources = ["api_request", "api_response"] history: History = await get_history( developer_id=developer.id, session_id=session_id, allowed_sources=allowed_sources, connection_pool=connection_pool, ) # Keep leaf nodes only relations = history.relations past_messages = [ entry.model_dump(mode="json") for entry in history.entries if entry.id not in {r.head for r in relations} ] # Collapse the message content if content is a list of strings and only one string for message in past_messages: if ( isinstance(message["content"], list) and len(message["content"]) == 1 and message["content"][0].get("type") == "text" ): message["content"] = message["content"][0]["text"].strip() # If recall is disabled, return early if not recall: return past_messages, [] # Get recall config recall_options = chat_context.session.recall_options # If recall options is None, return early if recall_options is None: return past_messages, [] # Get messages to search from search_messages = [ msg for msg in (past_messages + new_raw_messages)[-(recall_options.num_search_messages) :] if isinstance(msg["content"], str) and msg["role"] in ["user", "assistant"] ] if not search_messages: return past_messages, [] # Build search text and get embedding if needed embed_text = "\n\n".join( f"{msg.get('name') or msg['role']}: {msg['content']}" for msg in search_messages ).strip() query_embedding = None if recall_options.mode != "text": [query_embedding, *_] = await litellm.aembedding( inputs=embed_text[-(recall_options.max_query_length) :], embed_instruction="Represent the query for retrieving supporting documents: ", user=str(developer.id), ) # Get query text from last message query_text = search_messages[-1]["content"].strip()[: recall_options.max_query_length] # Get owners to search docs from active_agent_id = chat_context.get_active_agent().id owners = [("user", user.id) for user in chat_context.users] owners.append(("agent", active_agent_id)) # Build search params based on mode search_params = None trigram_threshold = ( recall_options.trigram_similarity_threshold if enable_hybrid_trigram_search else None ) if recall_options.mode == "vector": search_params = VectorDocSearchRequest( lang=recall_options.lang, limit=recall_options.limit, metadata_filter=recall_options.metadata_filter, confidence=recall_options.confidence, mmr_strength=recall_options.mmr_strength, vector=query_embedding, include_embeddings=recall_options.include_embeddings, ) elif recall_options.mode == "hybrid": # AIDEV-NOTE: Mirror PR-1584 gating so trigram search stays behind the feature flag. search_params = HybridDocSearchRequest( lang=recall_options.lang, limit=recall_options.limit, metadata_filter=recall_options.metadata_filter, confidence=recall_options.confidence, mmr_strength=recall_options.mmr_strength, alpha=recall_options.alpha, text=query_text, vector=query_embedding, trigram_similarity_threshold=trigram_threshold, k_multiplier=recall_options.k_multiplier, include_embeddings=recall_options.include_embeddings, ) elif recall_options.mode == "text": search_params = TextOnlyDocSearchRequest( lang=recall_options.lang, limit=recall_options.limit, metadata_filter=recall_options.metadata_filter, text=query_text, trigram_similarity_threshold=trigram_threshold, include_embeddings=recall_options.include_embeddings, ) else: # Invalid mode, return early return past_messages, [] # Execute search (extract keywords for FTS because the query is a conversation snippet) extract_keywords: bool = True search_fn, params, post_processing = get_search_fn_and_params( search_params, extract_keywords=extract_keywords ) include_embeddings = ( post_processing.get("include_embeddings", True) if post_processing else True ) doc_references: list[DocReference] = await search_fn( developer_id=developer.id, owners=owners, connection_pool=connection_pool, **params, ) if include_embeddings is False: doc_references = strip_embeddings(doc_references) # Apply MMR if enabled and applicable if ( not isinstance(search_params, TextOnlyDocSearchRequest) and len(doc_references) > recall_options.limit and recall_options.mmr_strength > 0 ): doc_references = apply_mmr_to_docs( docs=doc_references, query_embedding=np.asarray(query_embedding), limit=recall_options.limit, mmr_strength=recall_options.mmr_strength, ) return past_messages, doc_references ================================================ FILE: src/agents-api/agents_api/queries/chat/prepare_chat_context.py ================================================ from typing import Any, TypeVar from uuid import UUID from beartype import beartype from fastapi import HTTPException from pydantic import ValidationError from ...common.protocol.sessions import ChatContext, make_session from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ..utils import pg_query, rewrap_exceptions, wrap_in_class ModelT = TypeVar("ModelT", bound=Any) T = TypeVar("T") sql_query = """ SELECT * FROM ( SELECT jsonb_agg(u) AS users FROM ( SELECT session_lookup.participant_id, users.user_id AS id, users.developer_id, users.name, users.about, users.created_at, users.updated_at, users.metadata FROM session_lookup INNER JOIN users ON session_lookup.participant_id = users.user_id WHERE session_lookup.developer_id = $1 AND session_id = $2 AND session_lookup.participant_type = 'user' ) u ) AS users, ( SELECT jsonb_agg(a) AS agents FROM ( SELECT session_lookup.participant_id, agents.agent_id AS id, agents.developer_id, agents.canonical_name, agents.name, agents.about, agents.instructions, agents.model, agents.created_at, agents.updated_at, agents.metadata, agents.default_settings, agents.default_system_template FROM session_lookup INNER JOIN agents ON session_lookup.participant_id = agents.agent_id AND agents.developer_id = session_lookup.developer_id WHERE session_lookup.developer_id = $1 AND session_id = $2 AND session_lookup.participant_type = 'agent' ) a ) AS agents, ( SELECT to_jsonb(s) AS session FROM ( SELECT sessions.session_id AS id, sessions.developer_id, sessions.situation, sessions.system_template, sessions.created_at, sessions.updated_at, sessions.metadata, sessions.render_templates, sessions.token_budget, sessions.context_overflow, sessions.forward_tool_calls, sessions.recall_options FROM sessions WHERE developer_id = $1 AND session_id = $2 LIMIT 1 ) s ) AS session, ( SELECT jsonb_agg(r) AS toolsets FROM ( SELECT session_lookup.participant_id, tools.tool_id as id, tools.developer_id, tools.agent_id, tools.task_id, tools.type, tools.name, tools.description, tools.spec, tools.updated_at, tools.created_at FROM session_lookup INNER JOIN tools ON session_lookup.participant_id = tools.agent_id AND tools.developer_id = session_lookup.developer_id WHERE session_lookup.developer_id = $1 AND session_id = $2 AND session_lookup.participant_type = 'agent' ) r ) AS toolsets""" def _transform(d): toolsets = {} # Default to empty lists when users/agents are not present d["users"] = d.get("users") or [] d["agents"] = d.get("agents") or [] for tool in d.get("toolsets") or []: if not tool: continue agent_id = tool["agent_id"] if agent_id in toolsets: toolsets[agent_id].append(tool) else: toolsets[agent_id] = [tool] d["session"]["updated_at"] = utcnow() d["users"] = d.get("users") or [] return { **d, "session": make_session( agents=[a["id"] for a in d.get("agents") or []], users=[u["id"] for u in d.get("users") or []], **d["session"], ), "toolsets": [ { "agent_id": agent_id, "tools": [ { tool["type"]: tool.pop("spec"), **tool, } for tool in tools ], } for agent_id, tools in toolsets.items() ], } @rewrap_exceptions({ ValidationError: partialclass(HTTPException, status_code=400), TypeError: partialclass(HTTPException, status_code=400), **common_db_exceptions("chat", ["get"]), }) @wrap_in_class( ChatContext, one=True, transform=_transform, ) @pg_query @beartype async def prepare_chat_context( *, developer_id: UUID, session_id: UUID, ) -> tuple[str, list]: """ Executes a complex query to retrieve memory context based on session ID. """ return ( sql_query, [developer_id, session_id], ) ================================================ FILE: src/agents-api/agents_api/queries/developers/__init__.py ================================================ """ Module: agents_api/models/docs This module is responsible for managing document-related operations within the application, particularly for agents and possibly other entities. It serves as a core component of the document management system, enabling features such as document creation, listing, deletion, and embedding of snippets for enhanced search and retrieval capabilities. Main functionalities include: - Creating new documents and associating them with agents or users. - Listing documents based on various criteria, including ownership and metadata filters. - Deleting documents by their unique identifiers. - Embedding document snippets for retrieval purposes. The module interacts with other parts of the application, such as the agents and users modules, to provide a comprehensive document management system. Its role is crucial in enabling document search, retrieval, and management features within the context of agents and users. This documentation aims to provide clear, concise, and sufficient context for new developers or contributors to understand the module's role without needing to dive deep into the code immediately. """ from .create_developer import create_developer from .get_developer import get_developer from .patch_developer import patch_developer from .update_developer import update_developer __all__ = [ "create_developer", "get_developer", "patch_developer", "update_developer", ] ================================================ FILE: src/agents-api/agents_api/queries/developers/create_developer.py ================================================ from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...common.protocol.developers import Developer from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query developer_query = """ INSERT INTO developers ( developer_id, email, active, tags, settings ) VALUES ( $1, -- developer_id $2, -- email $3, -- active $4, -- tags $5::jsonb -- settings ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("developer", ["create"])) @wrap_in_class( Developer, one=True, transform=lambda d: {**d, "id": d["developer_id"]}, ) @pg_query @beartype async def create_developer( *, email: str, active: bool = True, tags: list[str] | None = None, settings: dict | None = None, developer_id: UUID | None = None, ) -> tuple[str, list]: developer_id = str(developer_id or uuid7()) return ( developer_query, [developer_id, email, active, tags or [], settings or {}], ) ================================================ FILE: src/agents-api/agents_api/queries/developers/get_developer.py ================================================ """ Module for retrieving developer information from the PostgreSQL database. """ from uuid import UUID from beartype import beartype from ...common.protocol.developers import Developer from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class developer_query = """ SELECT * FROM developers WHERE developer_id = $1 AND active = true """ @rewrap_exceptions(common_db_exceptions("developer", ["get"])) @wrap_in_class( Developer, one=True, transform=lambda d: {**d, "id": d["developer_id"]}, ) @pg_query @beartype async def get_developer( *, developer_id: UUID, ) -> tuple[str, list]: developer_id = str(developer_id) return ( developer_query, [developer_id], ) ================================================ FILE: src/agents-api/agents_api/queries/developers/patch_developer.py ================================================ from uuid import UUID from beartype import beartype from ...common.protocol.developers import Developer from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query developer_query = """ UPDATE developers SET email = $1, active = $2, tags = tags || $3, settings = settings || $4 -- settings WHERE developer_id = $5 -- developer_id RETURNING *; """ @rewrap_exceptions(common_db_exceptions("developer", ["patch"])) @wrap_in_class(Developer, one=True, transform=lambda d: {**d, "id": d["developer_id"]}) @pg_query @beartype async def patch_developer( *, developer_id: UUID, email: str, active: bool = True, tags: list[str] | None = None, settings: dict | None = None, ) -> tuple[str, list]: developer_id = str(developer_id) return ( developer_query, [email, active, tags or [], settings or {}, developer_id], ) ================================================ FILE: src/agents-api/agents_api/queries/developers/update_developer.py ================================================ from uuid import UUID from beartype import beartype from ...common.protocol.developers import Developer from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query developer_query = """ UPDATE developers SET email = $1, active = $2, tags = $3, settings = $4 WHERE developer_id = $5 RETURNING *; """ @rewrap_exceptions(common_db_exceptions("developer", ["update"])) @wrap_in_class(Developer, one=True, transform=lambda d: {**d, "id": d["developer_id"]}) @pg_query @beartype async def update_developer( *, developer_id: UUID, email: str, active: bool = True, tags: list[str] | None = None, settings: dict | None = None, ) -> tuple[str, list]: developer_id = str(developer_id) return ( developer_query, [email, active, tags or [], settings or {}, developer_id], ) ================================================ FILE: src/agents-api/agents_api/queries/docs/__init__.py ================================================ """ Module: agents_api/models/docs This module is responsible for managing document-related operations within the application, particularly for agents and possibly other entities. It serves as a core component of the document management system, enabling features such as document creation, listing, deletion, and embedding of snippets for enhanced search and retrieval capabilities. Main functionalities include: - Creating new documents and associating them with agents or users. - Listing documents based on various criteria, including ownership and metadata filters. - Deleting documents by their unique identifiers. - Embedding document snippets for retrieval purposes. - Searching documents by text. - Searching documents by hybrid text and embedding. - Searching documents by embedding. The module interacts with other parts of the application, such as the agents and users modules, to provide a comprehensive document management system. Its role is crucial in enabling document search, retrieval, and management features within the context of agents and users. This documentation aims to provide clear, concise, and sufficient context for new developers or contributors to understand the module's role without needing to dive deep into the code immediately. """ from .bulk_delete_docs import bulk_delete_docs from .create_doc import create_doc from .delete_doc import delete_doc from .get_doc import get_doc from .list_docs import list_docs from .search_docs_by_embedding import search_docs_by_embedding from .search_docs_by_text import search_docs_by_text from .search_docs_hybrid import search_docs_hybrid __all__ = [ "bulk_delete_docs", "create_doc", "delete_doc", "get_doc", "list_docs", "search_docs_by_embedding", "search_docs_by_text", "search_docs_hybrid", ] ================================================ FILE: src/agents-api/agents_api/queries/docs/bulk_delete_docs.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import BulkDeleteDocsRequest, ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import ( build_metadata_filter_conditions, pg_query, rewrap_exceptions, wrap_in_class, ) @rewrap_exceptions(common_db_exceptions("doc", ["delete"])) @wrap_in_class( ResourceDeletedResponse, transform=lambda d: { "id": d["doc_id"], "deleted_at": utcnow(), "jobs": [], }, ) @pg_query @beartype async def bulk_delete_docs( *, developer_id: UUID, owner_id: UUID, owner_type: Literal["user", "agent"], data: BulkDeleteDocsRequest, ) -> tuple[str, list]: """ Deletes docs and their associated doc_owners entries for the given criteria. """ metadata_filter = data.metadata_filter or {} delete_all = getattr(data, "delete_all", False) if not delete_all and not metadata_filter: query = """ SELECT doc_id FROM docs WHERE 1=0; """ return query, [] # Initialize base parameters params = [developer_id, owner_type, owner_id] # Use the utility function to safely build metadata filter conditions with table alias metadata_conditions, params = build_metadata_filter_conditions( params, metadata_filter if not delete_all else {}, table_alias="d." ) query = f""" WITH deleted_docs AS ( DELETE FROM docs d WHERE d.developer_id = $1 AND EXISTS ( SELECT 1 FROM doc_owners o WHERE o.doc_id = d.doc_id AND o.developer_id = d.developer_id AND o.owner_type = $2 AND o.owner_id = $3 {metadata_conditions} ) RETURNING d.doc_id ), deleted_owners AS ( DELETE FROM doc_owners WHERE developer_id = $1 AND owner_type = $2 AND owner_id = $3 AND doc_id IN (SELECT doc_id FROM deleted_docs) ) SELECT doc_id FROM deleted_docs; """ return query, params ================================================ FILE: src/agents-api/agents_api/queries/docs/create_doc.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateDocRequest, Doc from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .get_doc import doc_without_embedding_query from .utils import transform_doc # Base INSERT for docs doc_query = """ INSERT INTO docs ( developer_id, doc_id, title, content, index, modality, embedding_model, embedding_dimensions, language, metadata ) VALUES ( $1, -- developer_id $2, -- doc_id $3, -- title $4, -- content $5, -- index $6, -- modality $7, -- embedding_model $8, -- embedding_dimensions $9, -- language $10 -- metadata (JSONB) ) """ # Owner association query for doc_owners doc_owner_query = """ INSERT INTO doc_owners (developer_id, doc_id, owner_type, owner_id) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING RETURNING *; """ @rewrap_exceptions(common_db_exceptions("doc", ["create"])) @wrap_in_class( Doc, one=True, transform=transform_doc, ) @query_metrics("create_doc") @pg_query @beartype async def create_doc( *, developer_id: UUID, doc_id: UUID | None = None, data: CreateDocRequest, owner_type: Literal["user", "agent"], owner_id: UUID, modality: Literal["text", "image", "mixed"] | None = "text", embedding_model: str | None = "text-embedding-3-large", embedding_dimensions: int | None = 1024, language: str | None = "english", index: int | None = 0, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Insert a new doc record into Timescale and associate it with an owner. Parameters: developer_id (UUID): The ID of the developer. doc_id (UUID | None): Optional custom UUID for the document. If not provided, one will be generated. data (CreateDocRequest): The data for the document. owner_type (Literal["user", "agent"]): The type of the owner (required). owner_id (UUID): The ID of the owner (required). modality (Literal["text", "image", "mixed"]): The modality of the documents. embedding_model (str): The model used for embedding. embedding_dimensions (int): The dimensions of the embedding. language (str): The language of the documents. index (int): The index of the documents. Returns: list[tuple[str, list] | tuple[str, list, str]]: SQL query and parameters for creating the document. """ queries = [] # Generate a UUID if not provided current_doc_id = uuid7() if doc_id is None else doc_id # Check if content is a list if isinstance(data.content, list): final_params_doc = [] final_params_owner = [] for idx, content in enumerate(data.content): # Convert Content object to string if needed content_str = content.root if hasattr(content, "root") else content doc_params = [ developer_id, current_doc_id, data.title, content_str, # Use the string value idx, modality, embedding_model, embedding_dimensions, language, data.metadata or {}, ] final_params_doc.append(doc_params) owner_params = [ developer_id, current_doc_id, owner_type, owner_id, ] final_params_owner.append(owner_params) # Add the doc query for each content queries.append((doc_query, final_params_doc, "fetchmany")) # Add the owner query queries.append((doc_owner_query, final_params_owner, "fetchmany")) # get the doc with embedding queries.append(( doc_without_embedding_query, [developer_id, current_doc_id], "fetchrow", )) else: # Convert Content object to string if needed content_str = data.content.root if hasattr(data.content, "root") else data.content # Create the doc record doc_params = [ developer_id, current_doc_id, data.title, content_str, # Use the string value index, modality, embedding_model, embedding_dimensions, language, data.metadata or {}, ] owner_params = [ developer_id, current_doc_id, owner_type, owner_id, ] # Add the doc query for single content queries.append((doc_query, doc_params, "fetch")) # Add the owner query queries.append((doc_owner_query, owner_params, "fetch")) # get the doc with embedding queries.append(( doc_without_embedding_query, [developer_id, current_doc_id], "fetchrow", )) return queries ================================================ FILE: src/agents-api/agents_api/queries/docs/delete_doc.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Delete doc query delete_doc_query = """ DELETE FROM docs d WHERE d.developer_id = $1 AND d.doc_id = $2 AND EXISTS ( SELECT 1 FROM doc_owners o WHERE o.developer_id = d.developer_id AND o.doc_id = d.doc_id AND o.owner_type = $3 AND o.owner_id = $4 ) RETURNING d.doc_id; """ delete_doc_owners_query = """ DELETE FROM doc_owners WHERE developer_id = $1 AND doc_id = $2 AND owner_type = $3 AND owner_id = $4 RETURNING doc_id; """ @rewrap_exceptions(common_db_exceptions("doc", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { "id": d["doc_id"], "deleted_at": utcnow(), "jobs": [], }, ) @pg_query @beartype async def delete_doc( *, developer_id: UUID, doc_id: UUID, owner_type: Literal["user", "agent"], owner_id: UUID, ) -> list[tuple[str, list]]: """ Deletes a doc (and associated doc_owners) for the given developer and doc_id. If owner_type/owner_id is specified, only remove doc if that matches. Parameters: developer_id (UUID): The ID of the developer. doc_id (UUID): The ID of the document. owner_type (Literal["user", "agent"]): The type of the owner of the documents. owner_id (UUID): The ID of the owner of the documents. Returns: tuple[str, list]: SQL query and parameters for deleting the document. """ return [ (delete_doc_query, [developer_id, doc_id, owner_type, owner_id]), (delete_doc_owners_query, [developer_id, doc_id, owner_type, owner_id]), ] ================================================ FILE: src/agents-api/agents_api/queries/docs/get_doc.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Doc from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .utils import transform_doc # get doc with embedding doc_with_embedding_query = """ SELECT d.doc_id, d.developer_id, d.title, array_agg(d.content ORDER BY d.index) as content, array_agg(d.index ORDER BY d.index) as indices, array_agg(e.embedding ORDER BY d.index) as embeddings, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at FROM docs d LEFT JOIN docs_embeddings e ON d.doc_id = e.doc_id AND e.embedding IS NOT NULL AND d.index = e.index WHERE d.developer_id = $1 AND d.doc_id = $2 GROUP BY d.doc_id, d.developer_id, d.title, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at ORDER BY d.created_at DESC LIMIT 1; """ # get doc without embedding doc_without_embedding_query = """ SELECT d.doc_id, d.developer_id, d.title, array_agg(d.content ORDER BY d.index) as content, array_agg(d.index ORDER BY d.index) as indices, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at FROM docs d WHERE d.developer_id = $1 AND d.doc_id = $2 GROUP BY d.doc_id, d.developer_id, d.title, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at ORDER BY d.created_at DESC LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("doc", ["get"])) @wrap_in_class( Doc, one=True, transform=transform_doc, ) @pg_query @beartype async def get_doc( *, developer_id: UUID, doc_id: UUID, include_embeddings: bool = True, ) -> tuple[str, list]: """ Fetch a single doc with or without embeddings, grouping all content chunks. Parameters: developer_id (UUID): The ID of the developer. doc_id (UUID): The ID of the document. include_embeddings (bool): Whether to include embeddings in the response. Defaults to True for backward compatibility. Returns: tuple[str, list]: SQL query and parameters for fetching the document. """ # AIDEV-NOTE: Bandwidth optimization - use doc_without_embedding_query when embeddings not needed query = doc_with_embedding_query if include_embeddings else doc_without_embedding_query return ( query, [developer_id, doc_id], ) ================================================ FILE: src/agents-api/agents_api/queries/docs/list_docs.py ================================================ """ This module contains the functionality for listing documents from the PostgreSQL database. It constructs and executes SQL queries to fetch document details based on various filters. """ from typing import Annotated, Any, Literal from uuid import UUID from beartype import beartype from beartype.vale import Is from ...autogen.openapi_model import Doc from ...common.utils.db_exceptions import common_db_exceptions from ..utils import ( build_metadata_filter_conditions, make_num_validator, pg_query, rewrap_exceptions, wrap_in_class, ) from .utils import transform_doc # Base query for listing docs with aggregated content and embeddings base_docs_query = """ SELECT d.doc_id, d.developer_id, d.title, array_agg(d.content ORDER BY d.index) as content, array_agg(d.index ORDER BY d.index) as indices, array_agg(CASE WHEN $2 THEN e.embedding ELSE NULL END ORDER BY d.index) as embeddings, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at FROM docs d JOIN doc_owners doc_own ON d.developer_id = doc_own.developer_id AND d.doc_id = doc_own.doc_id LEFT JOIN docs_embeddings e ON d.doc_id = e.doc_id AND d.index = e.index WHERE d.developer_id = $1 AND doc_own.owner_type = $3 AND doc_own.owner_id = $4 """ @rewrap_exceptions(common_db_exceptions("doc", ["list"])) @wrap_in_class( Doc, one=False, transform=transform_doc, ) @pg_query @beartype async def list_docs( *, developer_id: UUID, owner_id: UUID, owner_type: Literal["user", "agent"], limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=100, err_msg="Limit must be between 1 and 100" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be >= 0")] ] = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] | None = None, include_embeddings: bool = True, ) -> tuple[str, list]: """ Lists docs with pagination and sorting, aggregating content chunks and embeddings. Parameters: developer_id (UUID): The ID of the developer. owner_id (UUID): The ID of the owner of the documents (required). owner_type (Literal["user", "agent"]): The type of the owner of the documents (required). limit (int): The number of documents to return. offset (int): The number of documents to skip. sort_by (Literal["created_at", "updated_at"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. metadata_filter (dict[str, Any]): The metadata filter to apply. include_embeddings (bool): Whether to include embeddings in the response. Defaults to True for backward compatibility. Returns: tuple[str, list]: SQL query and parameters for listing the documents. Raises: HTTPException: If invalid parameters are provided. """ # if direction.lower() not in ["asc", "desc"]: # raise HTTPException(status_code=400, detail="Invalid sort direction") # if sort_by not in ["created_at", "updated_at"]: # raise HTTPException(status_code=400, detail="Invalid sort field") # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} # Start with the base query query = base_docs_query # AIDEV-NOTE: Bandwidth optimization - pass include_embeddings to control embedding retrieval params = [developer_id, include_embeddings, owner_type, owner_id] # Add metadata filtering before GROUP BY using the utility function with table alias metadata_conditions, params = build_metadata_filter_conditions( params, metadata_filter, table_alias="d." ) query += metadata_conditions # Add GROUP BY clause query += """ GROUP BY d.doc_id, d.developer_id, d.title, d.modality, d.embedding_model, d.embedding_dimensions, d.language, d.metadata, d.created_at""" # Add sorting and pagination query += ( f" ORDER BY {sort_by} {direction} LIMIT ${len(params) + 1} OFFSET ${len(params) + 2}" ) params.extend([limit, offset]) return query, params ================================================ FILE: src/agents-api/agents_api/queries/docs/search_docs_by_embedding.py ================================================ from typing import Any, Literal from uuid import UUID from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import DocReference from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .utils import transform_to_doc_reference # Raw query for vector search search_docs_by_embedding_query = """ SELECT * FROM search_by_vector( $1, -- developer_id $2::vector(1024), -- embedding $3::text[], -- owner_types $4::uuid[], -- owner_ids $5, -- k $6, -- confidence $7 -- metadata_filter ) """ @rewrap_exceptions(common_db_exceptions("doc", ["search"])) @wrap_in_class( DocReference, transform=transform_to_doc_reference, ) @pg_query @beartype async def search_docs_by_embedding( *, developer_id: UUID, embedding: list[float], k: int = 10, owners: list[tuple[Literal["user", "agent"], UUID]], confidence: int | float = 0.5, metadata_filter: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Vector-based doc search: Parameters: developer_id (UUID): The ID of the developer. embedding (List[float]): The vector to query. k (int): The number of results to return. owners (list[tuple[Literal["user", "agent"], UUID]]): List of (owner_type, owner_id) tuples. confidence (float): The confidence threshold for the search. metadata_filter (dict): Metadata filter criteria. Returns: tuple[str, list]: SQL query and parameters for searching the documents. """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} if k < 1: raise HTTPException(status_code=400, detail="k must be >= 1") if not embedding: raise HTTPException(status_code=400, detail="Empty embedding provided") # Convert embedding to a string embedding_str = f"[{', '.join(map(str, embedding))}]" # Extract owner types and IDs owner_types: list[str] = [owner[0] for owner in owners] owner_ids: list[str] = [str(owner[1]) for owner in owners] return ( search_docs_by_embedding_query, [ developer_id, embedding_str, owner_types, owner_ids, k, confidence, metadata_filter, ], ) ================================================ FILE: src/agents-api/agents_api/queries/docs/search_docs_by_text.py ================================================ from typing import Any, Literal from uuid import UUID from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import DocReference from ...common.nlp import text_to_keywords from ...common.utils.db_exceptions import common_db_exceptions from ...env import enable_hybrid_trigram_search from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .utils import transform_to_doc_reference # SQL query for searching docs by text search_docs_text_query = """ SELECT * FROM search_by_text( $1::uuid, -- developer_id $2::text, -- query_text $3::text[], -- owner_types $4::uuid[], -- owner_ids $5::text, -- search_language $6::int, -- k $7::jsonb, -- metadata_filter $8::float -- similarity_threshold (default value) ); """ @rewrap_exceptions(common_db_exceptions("doc", ["search"])) @wrap_in_class( DocReference, transform=transform_to_doc_reference, ) @pg_query @beartype async def search_docs_by_text( *, developer_id: UUID, owners: list[tuple[Literal["user", "agent"], UUID]], query: str, k: int = 3, metadata_filter: dict[str, Any] | None = None, search_language: str | None = "english_unaccent", trigram_similarity_threshold: float | None = None, # Set to None to disable trigram search extract_keywords: bool = False, ) -> tuple[str, list]: """ Full-text search on docs using the search_tsv column. Parameters: developer_id (UUID): The ID of the developer. query (str): The text to search for. owners (list[tuple[Literal["user", "agent"], UUID]]): List of (owner_type, owner_id) tuples. k (int): Maximum number of results to return. search_language (str): Language for text search (default: "english"). metadata_filter (dict): Metadata filter criteria. trigram_similarity_threshold (float): Similarity threshold for trigram search. extract_keywords (bool): Whether to extract keywords from the query. connection_pool (asyncpg.Pool): Database connection pool. Returns: tuple[str, list]: SQL query and parameters for searching the documents. """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} if k < 1: raise HTTPException(status_code=400, detail="k must be >= 1") # Extract owner types and IDs owner_types: list[str] = [owner[0] for owner in owners] owner_ids: list[UUID] = [owner[1] for owner in owners] # Pre-process rawtext query if extract_keywords is True if extract_keywords: keywords = text_to_keywords(query, split_chunks=True) query = " OR ".join(keywords) # AIDEV-NOTE: keep trigram off unless gate is enabled. effective_trigram_threshold = ( trigram_similarity_threshold if enable_hybrid_trigram_search else None ) return ( search_docs_text_query, [ developer_id, query, owner_types, owner_ids, search_language, k, metadata_filter, effective_trigram_threshold, ], ) ================================================ FILE: src/agents-api/agents_api/queries/docs/search_docs_hybrid.py ================================================ from typing import Any, Literal from uuid import UUID from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import DocReference from ...common.nlp import text_to_keywords from ...common.utils.db_exceptions import common_db_exceptions from ...env import enable_hybrid_trigram_search from ..utils import ( pg_query, rewrap_exceptions, wrap_in_class, ) from .utils import transform_to_doc_reference # Raw query for hybrid search search_docs_hybrid_query = """ SELECT * FROM search_hybrid( $1, -- developer_id $2, -- text_query $3::vector(1024), -- embedding $4::text[], -- owner_types $5::uuid[], -- owner_ids $6, -- k $7, -- alpha $8, -- confidence $9, -- metadata_filter $10, -- search_language $11, -- trigram_similarity_threshold $12 -- k_multiplier ) """ @rewrap_exceptions(common_db_exceptions("doc", ["search"])) @wrap_in_class( DocReference, transform=transform_to_doc_reference, ) @pg_query @beartype async def search_docs_hybrid( developer_id: UUID, owners: list[tuple[Literal["user", "agent"], UUID]], text_query: str = "", embedding: list[float] | None = None, k: int = 10, alpha: float = 0.7, metadata_filter: dict[str, Any] | None = None, search_language: str = "english_unaccent", confidence: int | float = 0.5, trigram_similarity_threshold: float | None = None, # Lower threshold to catch more spelling errors k_multiplier: int = 7, # Higher multiplier to include more candidates with the enhanced fuzzy matching extract_keywords: bool = False, ) -> tuple[str, list]: """ Hybrid text-and-embedding doc search. We get top-K from each approach, then fuse them client-side. Adjust concurrency or approach as you like. Parameters: developer_id (UUID): The unique identifier for the developer. text_query (str): The text query to search for. embedding (List[float]): The embedding to search for. k (int): The number of results to return. alpha (float): The weight for the embedding results. owner_type (Literal["user", "agent", "org"] | None): The type of the owner. owner_id (UUID | None): The ID of the owner. confidence (int | float): The confidence threshold for the embedding results. trigram_similarity_threshold (float): Similarity threshold for trigram search. k_multiplier (int): The multiplier to control how many intermediate results to fetch before final scoring. extract_keywords (bool): Whether to extract keywords from the query. Returns: tuple[str, list]: The SQL query and parameters for the search. """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} if k < 1: raise HTTPException(status_code=400, detail="k must be >= 1") if not text_query and not embedding: raise HTTPException(status_code=400, detail="Empty query provided") if not embedding: raise HTTPException(status_code=400, detail="Empty embedding provided") # Convert query_embedding to a string embedding_str = f"[{', '.join(map(str, embedding))}]" # Extract owner types and IDs owner_types: list[str] = [owner[0] for owner in owners] owner_ids: list[str] = [str(owner[1]) for owner in owners] # Pre-process rawtext query if extract_keywords is True if extract_keywords: keywords = text_to_keywords(text_query, split_chunks=True) text_query = " OR ".join(keywords) # AIDEV-NOTE: Disable trigram branch unless explicitly gated on. effective_trigram_threshold = ( trigram_similarity_threshold if enable_hybrid_trigram_search else None ) return ( search_docs_hybrid_query, [ developer_id, text_query, embedding_str, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language, effective_trigram_threshold, k_multiplier, ], ) ================================================ FILE: src/agents-api/agents_api/queries/docs/utils.py ================================================ import json def transform_to_doc_reference(d: dict) -> dict: id = d.pop("doc_id") content = d.pop("content") index = d.pop("index") # Convert embedding array string to list of floats if present if d["embedding"] is not None: try: embedding = json.loads(d["embedding"]) except Exception as e: msg = f"Error evaluating embeddings: {e}" raise ValueError(msg) else: embedding = None owner = { "id": d.pop("owner_id"), "role": d.pop("owner_type"), } snippet = { "content": content, "index": index, "embedding": embedding, } metadata = d.pop("metadata") return { **d, "id": id, "owner": owner, "snippet": snippet, "metadata": metadata, } def transform_doc(d: dict) -> dict: content = d["content"] embeddings = d.get("embeddings") or None if embeddings: if isinstance(embeddings, str): embeddings = json.loads(embeddings) if embeddings.strip() else None elif isinstance(embeddings, list) and all(isinstance(e, str) for e in embeddings): embeddings = [json.loads(e) for e in embeddings if e.strip()] if embeddings and all((e is None) for e in embeddings): embeddings = None return { **d, "id": d["doc_id"], "content": content, "embeddings": embeddings, } ================================================ FILE: src/agents-api/agents_api/queries/entries/__init__.py ================================================ """ The `entry` module provides SQL query functions for managing entries in the TimescaleDB database. This includes operations for: - Creating new entries - Deleting entries - Retrieving entry history - Listing entries with filtering and pagination """ from .create_entries import add_entry_relations, create_entries from .delete_entries import delete_entries from .get_history import get_history from .list_entries import list_entries __all__ = [ "add_entry_relations", "create_entries", "delete_entries", "get_history", "list_entries", ] ================================================ FILE: src/agents-api/agents_api/queries/entries/create_entries.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from litellm.utils import _select_tokenizer as select_tokenizer from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateEntryRequest, Entry, Relation from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...common.utils.messages import content_to_json from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query for checking if the session exists session_exists_query = """ SELECT EXISTS ( SELECT 1 FROM sessions WHERE session_id = $1 AND developer_id = $2 ) AS exists; """ # Define the raw SQL query for creating entries entry_query = """ INSERT INTO entries ( session_id, entry_id, source, role, event_type, name, content, tool_call_id, tool_calls, model, token_count, tokenizer, created_at, timestamp ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING *; """ # Define the raw SQL query for creating entry relations entry_relation_query = """ INSERT INTO entry_relations ( session_id, head, relation, tail ) VALUES ($1, $2, $3, $4) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("entry", ["create"])) @wrap_in_class( Entry, transform=lambda d: { **d, "id": d.pop("entry_id"), "created_at": d.pop("created_at"), }, ) @query_metrics("create_entries") @pg_query @beartype async def create_entries( *, developer_id: UUID, session_id: UUID, data: list[CreateEntryRequest], ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Create entries in a session. Parameters: developer_id (UUID): The ID of the developer. session_id (UUID): The ID of the session. data (list[CreateEntryRequest]): The list of entries to create. Returns: list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: SQL query and parameters for creating the entries. """ # Convert the data to a list of dictionaries data_dicts = [item.model_dump(mode="json") for item in data] params = [ [ session_id, # $1 item.pop("id", None) or uuid7(), # $2 item.get("source"), # $3 item.get("role"), # $4 item.get("event_type") or "message.create", # $5 item.get("name"), # $6 content_to_json(item.get("content") or {}), # $7 item.get("tool_call_id"), # $8 item.get("tool_calls"), # $9 item.get("model"), # $10 item.get("token_count"), # $11 select_tokenizer(item.get("model"))["type"], # $12 item.get("created_at") or utcnow(), # $13 utcnow(), # $14 ] for item in data_dicts ] return [ ( session_exists_query, [session_id, developer_id], "fetchrow", ), ( entry_query, params, "fetchmany", ), ] @rewrap_exceptions(common_db_exceptions("entry_relation", ["create"])) @wrap_in_class(Relation) @query_metrics("add_entry_relations") @pg_query @beartype async def add_entry_relations( *, developer_id: UUID, session_id: UUID, data: list[Relation], ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Add relations between entries in a session. Parameters: developer_id (UUID): The ID of the developer. session_id (UUID): The ID of the session. data (list[Relation]): The list of relations to add. Returns: list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: SQL query and parameters for adding the relations. """ # Convert the data to a list of dictionaries data_dicts = [item.model_dump(mode="json") for item in data] # Prepare the parameters for the query # $1 # $2 # $3 # $4 params = [ [ session_id, # $1 item.get("head"), # $2 item.get("relation"), # $3 item.get("tail"), # $4 ] for item in data_dicts ] return [ ( session_exists_query, [session_id, developer_id], "fetchrow", ), ( entry_relation_query, params, "fetchmany", ), ] ================================================ FILE: src/agents-api/agents_api/queries/entries/delete_entries.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for deleting entries with a developer check delete_entry_query = """ DELETE FROM entries USING developers WHERE entries.session_id = $1 -- session_id AND developers.developer_id = $2 -- developer_id RETURNING entries.session_id as session_id; """ # Define the raw SQL query for deleting entries with a developer check delete_entry_relations_query = """ DELETE FROM entry_relations WHERE entry_relations.session_id = $1 -- session_id """ # Define the raw SQL query for deleting entries with a developer check delete_entry_relations_by_ids_query = """ DELETE FROM entry_relations WHERE entry_relations.session_id = $1 -- session_id AND (entry_relations.head = ANY($2) -- entry_ids OR entry_relations.tail = ANY($2)) -- entry_ids """ # Define the raw SQL query for deleting entries by entry_ids with a developer check delete_entry_by_ids_query = """ DELETE FROM entries USING developers WHERE entries.entry_id = ANY($1) -- entry_ids AND developers.developer_id = $2 -- developer_id AND entries.session_id = $3 -- session_id RETURNING entries.entry_id as entry_id; """ # Add a session_exists_query similar to create_entries.py session_exists_query = """ SELECT EXISTS ( SELECT 1 FROM sessions WHERE session_id = $1 AND developer_id = $2 ); """ @rewrap_exceptions(common_db_exceptions("entry", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { "id": d["session_id"], "deleted_at": utcnow(), "jobs": [], }, ) @query_metrics("delete_entries_for_session") @pg_query @beartype async def delete_entries_for_session( *, developer_id: UUID, session_id: UUID, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """Delete all entries for a given session.""" return [ (session_exists_query, [session_id, developer_id], "fetchrow"), (delete_entry_relations_query, [session_id], "fetchmany"), (delete_entry_query, [session_id, developer_id], "fetchmany"), ] @rewrap_exceptions(common_db_exceptions("entry", ["delete"])) @wrap_in_class( ResourceDeletedResponse, transform=lambda d: { "id": d["entry_id"], "deleted_at": utcnow(), "jobs": [], }, ) @query_metrics("delete_entries") @pg_query @beartype async def delete_entries( *, developer_id: UUID, session_id: UUID, entry_ids: list[UUID], ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """Delete specific entries by their IDs. Parameters: developer_id (UUID): The ID of the developer. session_id (UUID): The ID of the session. entry_ids (list[UUID]): The IDs of the entries to delete. Returns: list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: SQL query and parameters for deleting the entries. """ return [ ( session_exists_query, [session_id, developer_id], "fetchrow", ), (delete_entry_relations_by_ids_query, [session_id, entry_ids], "fetch"), ( delete_entry_by_ids_query, [entry_ids, developer_id, session_id], "fetch", ), ] ================================================ FILE: src/agents-api/agents_api/queries/entries/get_history.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import History from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for getting history with a developer check and relations history_query = """ WITH collected_entries AS ( SELECT e.entry_id AS id, e.session_id, e.role, e.name, e.content, e.source, e.token_count, e.created_at, e.timestamp, e.tool_calls, e.tool_call_id, e.tokenizer, s.created_at AS session_created_at FROM entries e JOIN sessions s ON s.session_id = e.session_id AND s.session_id = $1 AND s.developer_id = $3 WHERE e.source = ANY($2) AND e.created_at >= s.created_at ), collected_relations AS ( SELECT er.head, er.relation, er.tail FROM entry_relations er WHERE er.session_id = $1 ) SELECT (SELECT json_agg(e) FROM collected_entries e) AS entries, (SELECT json_agg(r) FROM collected_relations r) AS relations, (SELECT session_created_at FROM collected_entries LIMIT 1) AS created_at, $1::uuid AS session_id """ def _transform(row): return { "entries": [ { **entry, } for entry in (row["entries"] or []) ], "relations": [ { "head": r["head"], "relation": r["relation"], "tail": r["tail"], } for r in (row["relations"] or []) ], "session_id": row["session_id"], "created_at": row["created_at"] or utcnow(), } @rewrap_exceptions(common_db_exceptions("history", ["get"])) @wrap_in_class( History, one=True, transform=_transform, ) @pg_query @beartype async def get_history( *, developer_id: UUID, session_id: UUID, allowed_sources: list[str] | None = None, ) -> tuple[str, list] | tuple[str, list, str]: """ Get session history. Parameters: developer_id (UUID): The ID of the developer. session_id (UUID): The ID of the session. allowed_sources (list[str]): The sources to include in the history. Returns: tuple[str, list] | tuple[str, list, str]: SQL query and parameters for getting the history. """ # AIDEV-NOTE: avoid mutable default args; initialize allowed_sources allowed_sources = ( allowed_sources if allowed_sources is not None else ["api_request", "api_response"] ) return ( history_query, [session_id, allowed_sources, developer_id], ) ================================================ FILE: src/agents-api/agents_api/queries/entries/list_entries.py ================================================ from datetime import timedelta from typing import Annotated, Literal from uuid import UUID from beartype import beartype from beartype.vale import Is from ...autogen.openapi_model import Entry from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import make_num_validator, pg_query, rewrap_exceptions, wrap_in_class # Query for checking if the session exists session_exists_query = """ SELECT EXISTS ( SELECT 1 FROM sessions WHERE session_id = $1 AND developer_id = $2 ) AS exists; """ list_entries_query = """ SELECT e.entry_id as id, e.session_id, e.role, e.name, e.content, e.source, e.token_count, e.created_at, e.timestamp, e.event_type, e.tool_call_id, e.tool_calls, e.model, e.tokenizer FROM entries e JOIN developers d ON d.developer_id = $5 LEFT JOIN entry_relations er ON er.head = e.entry_id AND er.session_id = e.session_id WHERE e.session_id = $1 AND e.source = ANY($2) AND (er.relation IS NULL OR er.relation != ALL($6)) AND e.created_at >= $7 AND e.created_at >= (select created_at from sessions where session_id = $1 LIMIT 1) ORDER BY e.{sort_by} {direction} -- safe to interpolate LIMIT $3 OFFSET $4; """ @rewrap_exceptions(common_db_exceptions("entry", ["list"])) @wrap_in_class(Entry) @query_metrics("list_entries") @pg_query @beartype async def list_entries( *, developer_id: UUID, session_id: UUID, allowed_sources: list[str] | None = None, limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=1000, err_msg="Limit must be between 1 and 1000" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be >= 0")] ] = 0, sort_by: Literal["created_at", "timestamp"] = "timestamp", direction: Literal["asc", "desc"] = "asc", exclude_relations: list[str] | None = None, search_window: timedelta = timedelta(weeks=4), ) -> list[tuple[str, list] | tuple[str, list, str]]: """List entries in a session. Parameters: developer_id (UUID): The ID of the developer. session_id (UUID): The ID of the session. allowed_sources (list[str]): The sources to include in the history. limit (int): The number of entries to return. offset (int): The number of entries to skip. sort_by (Literal["created_at", "timestamp"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. exclude_relations (list[str]): The relations to exclude. Returns: tuple[str, list] | tuple[str, list, str]: SQL query and parameters for listing the entries. """ # AIDEV-NOTE: avoid mutable default args; initialize lists allowed_sources = ( allowed_sources if allowed_sources is not None else ["api_request", "api_response"] ) exclude_relations = exclude_relations if exclude_relations is not None else [] query = list_entries_query.format( sort_by=sort_by, direction=direction, ) # Parameters for the entry query entry_params = [ session_id, # $1 allowed_sources, # $2 limit, # $3 offset, # $4 developer_id, # $5 exclude_relations, # $6 utcnow() - search_window, # 7 ] return [ ( session_exists_query, [session_id, developer_id], "fetchrow", ), ( query, entry_params, "fetch", ), ] ================================================ FILE: src/agents-api/agents_api/queries/executions/__init__.py ================================================ """ The `execution` module provides SQL query functions for managing executions in the TimescaleDB database. This includes operations for: - Creating new executions - Deleting executions - Retrieving execution history - Listing executions with filtering and pagination """ from .count_executions import count_executions from .create_execution import create_execution from .create_execution_transition import create_execution_transition from .get_execution import get_execution from .get_execution_transition import get_execution_transition from .list_execution_inputs_data import list_execution_inputs_data from .list_execution_state_data import list_execution_state_data from .list_execution_transitions import list_execution_transitions from .list_executions import list_executions from .lookup_temporal_data import lookup_temporal_data from .prepare_execution_input import prepare_execution_input __all__ = [ "count_executions", "create_execution", "create_execution_transition", "get_execution", "get_execution_transition", "list_execution_inputs_data", "list_execution_state_data", "list_execution_transitions", "list_executions", "lookup_temporal_data", "prepare_execution_input", ] ================================================ FILE: src/agents-api/agents_api/queries/executions/constants.py ================================================ ########## # Consts # ########## OUTPUT_UNNEST_KEY = "$$e7w_unnest$$" ================================================ FILE: src/agents-api/agents_api/queries/executions/count_executions.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to count executions for a given task execution_count_query = """ SELECT COUNT(*) FROM latest_executions WHERE developer_id = $1 AND created_at >= (select created_at from developers where developer_id = $1 LIMIT 1) AND task_id = $2; """ @rewrap_exceptions(common_db_exceptions("execution", ["count"])) @wrap_in_class(dict, one=True) @pg_query @beartype async def count_executions( *, developer_id: UUID, task_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Count the number of executions for a given task. Parameters: developer_id (UUID): The ID of the developer. task_id (UUID): The ID of the task. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for counting executions. """ return ( execution_count_query, [developer_id, task_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/create_execution.py ================================================ from typing import Annotated from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateExecutionRequest, Execution from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...common.utils.types import dict_like from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .constants import OUTPUT_UNNEST_KEY create_execution_query = """ INSERT INTO executions ( developer_id, task_id, execution_id, input, metadata, task_version ) VALUES ( $1, $2, $3, $4, $5, 1 ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("execution", ["create"])) @wrap_in_class( Execution, one=True, transform=lambda d: { "id": d["execution_id"], "status": "queued", "updated_at": utcnow(), **d, }, ) @query_metrics("create_execution") @pg_query @beartype async def create_execution( *, developer_id: UUID, task_id: UUID, execution_id: UUID | None = None, data: Annotated[CreateExecutionRequest | dict, dict_like(CreateExecutionRequest)], ) -> tuple[str, list]: """ Create a new execution. Parameters: developer_id (UUID): The ID of the developer. task_id (UUID): The ID of the task. execution_id (UUID | None): The ID of the execution. data (CreateExecutionRequest | dict): The data for the execution. Returns: tuple[str, list]: SQL query and parameters for creating the execution. """ execution_id = execution_id or uuid7() developer_id = str(developer_id) task_id = str(task_id) execution_id = str(execution_id) if isinstance(data, CreateExecutionRequest): data.metadata = data.metadata or {} execution_data = data.model_dump() else: data["metadata"] = data.get("metadata", {}) execution_data = data if execution_data["output"] is not None and not isinstance(execution_data["output"], dict): execution_data["output"] = {OUTPUT_UNNEST_KEY: execution_data["output"]} return ( create_execution_query, [ developer_id, task_id, execution_id, execution_data["input"], execution_data["metadata"], ], ) ================================================ FILE: src/agents-api/agents_api/queries/executions/create_execution_transition.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import ( CreateTransitionRequest, Transition, ) from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, serialize_model_data, wrap_in_class # Query to create a transition create_execution_transition_query = """ INSERT INTO transitions ( execution_id, transition_id, type, step_label, current_step, next_step, output, task_token, metadata ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9 ) RETURNING *; """ # FIXME: Remove this function def validate_transition_targets(data: CreateTransitionRequest) -> None: # Make sure the current/next targets are valid match data.type: case "finish_branch" | "finish": assert data.next is None, "Next target must be None for finish/finish_branch" # FIXME: HACK: Fix this and uncomment # The above assertion is now implemented and uncommented case "error" | "cancelled": # TODO: Implement this pass case "init_branch" | "init": assert data.next and data.current.step == data.next.step == 0, ( "Next target must be same as current for init_branch/init and step 0" ) case "wait": assert data.next is None, "Next target must be None for wait" case "resume" | "step": assert data.next is not None, "Next target must be provided for resume/step" if data.next.scope_id == data.current.scope_id: assert data.next.step > data.current.step, ( "Next step must be greater than current" ) case _: msg = f"Invalid transition type: {data.type}" raise ValueError(msg) @rewrap_exceptions(common_db_exceptions("transition", ["create"])) @wrap_in_class( Transition, transform=lambda d: { **d, "id": d["transition_id"], "current": { "workflow": d["current_step"][0], "step": d["current_step"][1], "scope_id": d["current_step"][2], }, "next": d["next_step"] and { "workflow": d["next_step"][0], "step": d["next_step"][1], "scope_id": d["next_step"][2], }, "updated_at": utcnow(), }, one=True, ) @query_metrics("create_execution_transition") @pg_query @beartype async def create_execution_transition( *, developer_id: UUID, execution_id: UUID, data: CreateTransitionRequest, # Only one of these needed transition_id: UUID | None = None, task_token: str | None = None, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Create a new execution transition. Parameters: developer_id (UUID): The ID of the developer. execution_id (UUID): The ID of the execution. data (CreateTransitionRequest): The data for the transition. transition_id (UUID | None): The ID of the transition. task_token (str | None): The task token. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for creating the transition. """ transition_id = transition_id or uuid7() data.metadata = data.metadata or {} data.execution_id = execution_id # Dump to json data.output = serialize_model_data(data.output) # Prepare the transition data transition_data = data.model_dump(exclude_unset=True, exclude={"id"}) # Parse the current and next targets validate_transition_targets(data) current_target = transition_data.pop("current") next_target = transition_data.pop("next") transition_data["current"] = ( current_target["workflow"], current_target["step"], current_target.get("scope_id"), ) transition_data["next"] = next_target and ( next_target["workflow"], next_target["step"], next_target.get("scope_id"), ) return ( create_execution_transition_query, [ execution_id, transition_id, data.type, transition_data.get("step_label"), transition_data["current"], transition_data["next"], data.output, task_token, data.metadata, ], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/create_temporal_lookup.py ================================================ from uuid import UUID from beartype import beartype from temporalio.client import WorkflowHandle from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions # Query to create a temporal lookup create_temporal_lookup_query = """ INSERT INTO temporal_executions_lookup ( execution_id, id, run_id, first_execution_run_id, result_run_id ) VALUES ( $1, $2, $3, $4, $5 ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("temporal_execution", ["create"])) @query_metrics("create_temporal_lookup") @pg_query @beartype async def create_temporal_lookup( *, execution_id: UUID, workflow_handle: WorkflowHandle, ) -> tuple[str, list]: """ Create a temporal lookup for a given execution. Parameters: execution_id (UUID): The ID of the execution. workflow_handle (WorkflowHandle): The workflow handle. Returns: tuple[str, list]: SQL query and parameters for creating the temporal lookup. """ execution_id = str(execution_id) return ( create_temporal_lookup_query, [ execution_id, workflow_handle.id, workflow_handle.run_id, workflow_handle.first_execution_run_id, workflow_handle.result_run_id, ], ) ================================================ FILE: src/agents-api/agents_api/queries/executions/get_execution.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Execution from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .constants import OUTPUT_UNNEST_KEY # Query to get an execution using the latest_executions view get_execution_query = """ SELECT developer_id, task_id, task_version, execution_id, input, metadata, created_at, updated_at, status, error, transition_count, output, current_step, next_step, step_label, task_token, transition_metadata FROM latest_executions WHERE execution_id = $1 ORDER BY updated_at DESC LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("execution", ["get"])) @wrap_in_class( Execution, one=True, transform=lambda d: { "id": d.pop("execution_id"), **d, "output": d["output"][OUTPUT_UNNEST_KEY] if isinstance(d["output"], dict) and OUTPUT_UNNEST_KEY in d["output"] else d["output"], }, ) @pg_query @beartype async def get_execution( *, execution_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Get an execution by its ID. Parameters: execution_id (UUID): The ID of the execution. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for getting the execution. """ return ( get_execution_query, [execution_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/get_execution_status.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ExecutionStatusEvent from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to get execution status, updated timestamp, and error for a specific execution_id get_execution_status_query = """ SELECT execution_id, status, updated_at, error, transition_count, metadata FROM latest_executions WHERE developer_id = $1 AND execution_id = $2 ORDER BY updated_at DESC LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("execution", ["get_status"])) @wrap_in_class(ExecutionStatusEvent, one=True) @pg_query @beartype async def get_execution_status( *, developer_id: UUID, execution_id: UUID, ) -> tuple[str, list, Literal["fetchrow"]]: """ Get the current status, updated_at, and error for the given execution_id. Parameters: developer_id (UUID): The ID of the developer. execution_id (UUID): The ID of the execution. Returns: tuple[str, list, Literal["fetchrow"]]: SQL query and parameters for fetching execution status. """ return ( get_execution_status_query, [developer_id, execution_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/get_execution_transition.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Transition from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to get an execution transition get_execution_transition_query = """ SELECT * FROM transitions WHERE transition_id = $1 OR task_token = $2 LIMIT 1; """ def _transform(d): current_step = d.pop("current_step") next_step = d.pop("next_step", None) return { "current": { "workflow": current_step[0], "step": current_step[1], "scope_id": current_step[2], }, "next": { "workflow": next_step[0], "step": next_step[1], "scope_id": next_step[2], } if next_step is not None else None, **d, } @rewrap_exceptions(common_db_exceptions("transition", ["get"])) @wrap_in_class(Transition, one=True, transform=_transform) @pg_query @beartype async def get_execution_transition( *, transition_id: UUID | None = None, task_token: str | None = None, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Get an execution transition by its ID or task token. Parameters: transition_id (UUID | None): The ID of the transition. task_token (str | None): The task token. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for getting the execution transition. """ # At least one of `transition_id` or `task_token` must be provided assert transition_id or task_token, ( "At least one of `transition_id` or `task_token` must be provided." ) return ( get_execution_transition_query, [ transition_id, task_token, ], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/get_paused_execution_token.py ================================================ from datetime import timedelta from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to get a paused execution token using latest_transitions get_paused_execution_token_query = """ SELECT execution_id, transition_id, type, created_at, step_label, current_step, next_step, output, task_token, metadata FROM latest_transitions WHERE execution_id = $1 AND created_at >= $2 AND created_at >= (select created_at from executions where execution_id = $1 LIMIT 1) AND type = 'wait'; """ @rewrap_exceptions(common_db_exceptions("execution", ["get_paused_execution_token"])) @wrap_in_class(dict, one=True) @pg_query @beartype async def get_paused_execution_token( *, execution_id: UUID, search_window: timedelta = timedelta(weeks=4), ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Get a paused execution token for a given execution. Parameters: execution_id (UUID): The ID of the execution. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for getting a paused execution token. """ execution_id = str(execution_id) return ( get_paused_execution_token_query, [execution_id, utcnow() - search_window], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/get_temporal_workflow_data.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to get temporal workflow data get_temporal_workflow_data_query = """ SELECT id, run_id, result_run_id, first_execution_run_id FROM temporal_executions_lookup WHERE execution_id = $1 LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("temporal_execution", ["get"])) @wrap_in_class(dict, one=True) @pg_query @beartype async def get_temporal_workflow_data( *, execution_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Get temporal workflow data for a given execution. Parameters: execution_id (UUID): The ID of the execution. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for getting temporal workflow data. """ # Executions are allowed direct GET access if they have execution_id execution_id = str(execution_id) return ( get_temporal_workflow_data_query, [ execution_id, ], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/list_execution_inputs_data.py ================================================ from datetime import timedelta from typing import Literal from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import Transition from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to list execution input data list_execution_inputs_query = """ SELECT * FROM transitions WHERE execution_id = $1 AND next_step IS NOT NULL AND (current_step).scope_id = $7 AND (next_step).scope_id = $7 AND (current_step).workflow_name NOT SIMILAR TO '%\\[[0-9]+\\]%' AND created_at >= $6 AND created_at >= (select created_at from executions where execution_id = $1 LIMIT 1) ORDER BY CASE WHEN $4 = 'created_at' AND $5 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $4 = 'created_at' AND $5 = 'desc' THEN created_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ # next is not null # current.scope = next.scope # (current_step).workflow NOT SIMILAR TO '%\\[[0-9]+\\]%' def _transform(d): current_step = d.pop("current_step") next_step = d.pop("next_step", None) return { "id": d["transition_id"], "updated_at": utcnow(), "current": { "workflow": current_step[0], "step": current_step[1], "scope_id": current_step[2], }, "next": { "workflow": next_step[0], "step": next_step[1], "scope_id": next_step[2], } if next_step is not None else None, "step_label": d["step_label"], **d, } @rewrap_exceptions({ asyncpg.InvalidRowCountInLimitClauseError: partialclass( HTTPException, status_code=400, detail="Invalid limit clause", ), asyncpg.InvalidRowCountInResultOffsetClauseError: partialclass( HTTPException, status_code=400, detail="Invalid offset clause", ), **common_db_exceptions("transition", ["list"]), }) @wrap_in_class( Transition, transform=_transform, ) @pg_query @beartype async def list_execution_inputs_data( *, execution_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", scope_id: UUID, search_window: timedelta = timedelta(weeks=2), ) -> tuple[str, list]: """ List execution transitions for a given execution. Parameters: execution_id (UUID): The ID of the execution. limit (int): The number of transitions to return. offset (int): The number of transitions to skip. sort_by (Literal["created_at"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. scope_id (UUID | None): Filter transitions by scope_id in current_step. Returns: tuple[str, list]: SQL query and parameters for listing execution transitions. """ params = [ str(execution_id), limit, offset, sort_by, direction, utcnow() - search_window, str(scope_id), ] return (list_execution_inputs_query, params) ================================================ FILE: src/agents-api/agents_api/queries/executions/list_execution_state_data.py ================================================ from datetime import timedelta from typing import Literal from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import Transition from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to list execution transitions list_execution_state_query = """ SELECT * FROM transitions WHERE execution_id = $1 AND (current_step).scope_id = $7 AND metadata->>'step_type' = 'SetStep' AND created_at >= $6 AND created_at >= (select created_at from executions where execution_id = $1 LIMIT 1) ORDER BY CASE WHEN $4 = 'created_at' AND $5 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $4 = 'created_at' AND $5 = 'desc' THEN created_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ # next is not null # current.scope = next.scope # (current_step).workflow NOT SIMILAR TO '%\\[[0-9]+\\]%' def _transform(d): current_step = d.pop("current_step") next_step = d.pop("next_step", None) return { "id": d["transition_id"], "updated_at": utcnow(), "current": { "workflow": current_step[0], "step": current_step[1], "scope_id": current_step[2], }, "next": { "workflow": next_step[0], "step": next_step[1], "scope_id": next_step[2], } if next_step is not None else None, "step_label": d["step_label"], **d, } @rewrap_exceptions({ asyncpg.InvalidRowCountInLimitClauseError: partialclass( HTTPException, status_code=400, detail="Invalid limit clause", ), asyncpg.InvalidRowCountInResultOffsetClauseError: partialclass( HTTPException, status_code=400, detail="Invalid offset clause", ), **common_db_exceptions("transition", ["list"]), }) @wrap_in_class( Transition, transform=_transform, ) @pg_query @beartype async def list_execution_state_data( *, execution_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", scope_id: UUID, search_window: timedelta = timedelta(weeks=2), ) -> tuple[str, list]: """ List execution transitions for a given execution. Parameters: execution_id (UUID): The ID of the execution. limit (int): The number of transitions to return. offset (int): The number of transitions to skip. sort_by (Literal["created_at"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. scope_id (UUID | None): Filter transitions by scope_id in current_step. Returns: tuple[str, list]: SQL query and parameters for listing execution transitions. """ params = [ str(execution_id), limit, offset, sort_by, direction, utcnow() - search_window, str(scope_id), ] return (list_execution_state_query, params) ================================================ FILE: src/agents-api/agents_api/queries/executions/list_execution_transitions.py ================================================ from datetime import timedelta from typing import Literal from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import Transition from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to list execution transitions list_execution_transitions_query = """ SELECT * FROM transitions WHERE execution_id = $1 AND (current_step).scope_id = $7 AND created_at >= $6 AND created_at >= (select created_at from executions where execution_id = $1 LIMIT 1) ORDER BY CASE WHEN $4 = 'created_at' AND $5 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $4 = 'created_at' AND $5 = 'desc' THEN created_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ # Query to get a single transition get_execution_transition_query = """ SELECT * FROM transitions WHERE execution_id = $1 AND transition_id = $2; """ def _transform(d): current_step = d.pop("current_step") next_step = d.pop("next_step", None) return { "id": d["transition_id"], "updated_at": utcnow(), "current": { "workflow": current_step[0], "step": current_step[1], "scope_id": current_step[2], }, "next": { "workflow": next_step[0], "step": next_step[1], "scope_id": next_step[2], } if next_step is not None else None, "step_label": d["step_label"], **d, } @rewrap_exceptions({ asyncpg.InvalidRowCountInLimitClauseError: partialclass( HTTPException, status_code=400, detail="Invalid limit clause", ), asyncpg.InvalidRowCountInResultOffsetClauseError: partialclass( HTTPException, status_code=400, detail="Invalid offset clause", ), **common_db_exceptions("transition", ["list"]), }) @wrap_in_class( Transition, transform=_transform, ) @pg_query @beartype async def list_execution_transitions( *, execution_id: UUID, transition_id: UUID | None = None, limit: int = 100, offset: int = 0, sort_by: Literal["created_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", scope_id: UUID | None = None, search_window: timedelta = timedelta(days=3650), ) -> tuple[str, list]: """ List execution transitions for a given execution. Parameters: execution_id (UUID): The ID of the execution. limit (int): The number of transitions to return. offset (int): The number of transitions to skip. sort_by (Literal["created_at"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. scope_id (UUID | None): Filter transitions by scope_id in current_step. Returns: tuple[str, list]: SQL query and parameters for listing execution transitions. """ if transition_id is not None: return ( get_execution_transition_query, [ str(execution_id), str(transition_id), ], ) params = [ str(execution_id), limit, offset, sort_by, direction, utcnow() - search_window, ] query = list_execution_transitions_query if scope_id is None: query = query.replace("AND (current_step).scope_id = $7", "") else: params.append(str(scope_id)) return (query, params) ================================================ FILE: src/agents-api/agents_api/queries/executions/list_executions.py ================================================ from typing import Annotated, Literal from uuid import UUID import asyncpg from beartype import beartype from beartype.vale import Is from fastapi import HTTPException from ...autogen.openapi_model import Execution from ...common.utils.db_exceptions import common_db_exceptions, partialclass from ..utils import make_num_validator, pg_query, rewrap_exceptions, wrap_in_class from .constants import OUTPUT_UNNEST_KEY # Query to list executions using the latest_executions view list_executions_query = """ SELECT developer_id, task_id, task_version, execution_id, input, metadata, created_at, updated_at, status, error, transition_count, output, current_step, next_step, step_label, task_token, transition_metadata FROM latest_executions WHERE developer_id = $1 AND task_id = $2 ORDER BY CASE WHEN $3 = 'created_at' AND $4 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $3 = 'created_at' AND $4 = 'desc' THEN created_at END DESC NULLS LAST, CASE WHEN $3 = 'updated_at' AND $4 = 'asc' THEN updated_at END ASC NULLS LAST, CASE WHEN $3 = 'updated_at' AND $4 = 'desc' THEN updated_at END DESC NULLS LAST LIMIT $5 OFFSET $6; """ @rewrap_exceptions({ asyncpg.InvalidRowCountInLimitClauseError: partialclass( HTTPException, status_code=400, detail="Invalid limit clause", ), asyncpg.InvalidRowCountInResultOffsetClauseError: partialclass( HTTPException, status_code=400, detail="Invalid offset clause", ), **common_db_exceptions("execution", ["list"]), }) @wrap_in_class( Execution, transform=lambda d: { "id": d.pop("execution_id"), **d, "output": d["output"][OUTPUT_UNNEST_KEY] if isinstance(d.get("output"), dict) and OUTPUT_UNNEST_KEY in d["output"] else d.get("output"), }, ) @pg_query @beartype async def list_executions( *, developer_id: UUID, task_id: UUID, limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=100, err_msg="Limit must be between 1 and 100" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be >= 0")] ] = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> tuple[str, list]: """ List executions for a given task. Parameters: developer_id (UUID): The ID of the developer. task_id (UUID): The ID of the task. limit (int): The number of executions to return. offset (int): The number of executions to skip. sort_by (Literal["created_at", "updated_at"]): The field to sort by. direction (Literal["asc", "desc"]): The direction to sort by. Returns: tuple[str, list]: SQL query and parameters for listing executions. """ # if sort_by not in ["created_at", "updated_at"]: # raise HTTPException(status_code=400, detail="Invalid sort field") return ( list_executions_query, [ developer_id, task_id, sort_by, direction, limit, offset, ], ) ================================================ FILE: src/agents-api/agents_api/queries/executions/lookup_temporal_data.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to lookup temporal data lookup_temporal_data_query = """ SELECT t.* FROM temporal_executions_lookup t, executions e WHERE t.execution_id = e.execution_id AND e.execution_id = $1 AND e.developer_id = $2 LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("temporal_execution", ["get"])) @wrap_in_class(dict, one=True) @pg_query @beartype async def lookup_temporal_data( *, developer_id: UUID, execution_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Lookup temporal data for a given execution. Parameters: developer_id (UUID): The ID of the developer. execution_id (UUID): The ID of the execution. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query and parameters for looking up temporal data. """ developer_id = str(developer_id) execution_id = str(execution_id) return ( lookup_temporal_data_query, [execution_id, developer_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/executions/prepare_execution_input.py ================================================ from uuid import UUID from beartype import beartype from ...common.protocol.models import ExecutionInput from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Query to prepare execution input prepare_execution_input_query = """ SELECT * FROM ( SELECT to_jsonb(a) AS agent FROM ( SELECT * FROM agents WHERE developer_id = $1 AND agent_id = ( SELECT agent_id FROM tasks WHERE developer_id = $1 AND task_id = $2 ORDER BY created_at DESC LIMIT 1 ) LIMIT 1 ) a ) AS agent, ( SELECT COALESCE(jsonb_agg(r), '[]'::jsonb) AS tools FROM ( SELECT * FROM tools WHERE developer_id = $1 AND task_id = $2 ) r ) AS tools, ( SELECT to_jsonb(e) AS execution FROM ( SELECT * FROM latest_executions WHERE developer_id = $1 AND task_id = $2 AND execution_id = $3 LIMIT 1 ) e ) AS execution; """ @rewrap_exceptions(common_db_exceptions("execution_data", ["get"])) @wrap_in_class( ExecutionInput, one=True, transform=lambda d: { **d, # "task": { # "tools": d["tools"], # **d["task"], # }, "developer_id": d["agent"]["developer_id"], "agent": { "id": d["agent"]["agent_id"], **d["agent"], }, "agent_tools": [ {tool["type"]: tool.pop("spec"), **tool} for tool in d["tools"] if tool is not None ], "arguments": d["execution"]["input"], "execution": { "id": d["execution"]["execution_id"], **d["execution"], }, }, ) @pg_query @beartype async def prepare_execution_input( *, developer_id: UUID, task_id: UUID, execution_id: UUID, ) -> tuple[str, list]: """ Prepare the execution input for a given task. Parameters: developer_id (UUID): The ID of the developer. task_id (UUID): The ID of the task. execution_id (UUID): The ID of the execution. Returns: tuple[str, list]: SQL query and parameters for preparing the execution input. """ return ( prepare_execution_input_query, [str(developer_id), str(task_id), str(execution_id)], ) ================================================ FILE: src/agents-api/agents_api/queries/files/__init__.py ================================================ """ The `files` module within the `queries` package provides SQL query functions for managing files in the PostgreSQL database. This includes operations for: - Creating new files - Retrieving file details - Listing files with filtering and pagination - Deleting files and their associations """ from .create_file import create_file from .delete_file import delete_file from .get_file import get_file from .list_files import list_files __all__ = ["create_file", "delete_file", "get_file", "list_files"] ================================================ FILE: src/agents-api/agents_api/queries/files/create_file.py ================================================ """ This module contains the functionality for creating files in the PostgreSQL database. It includes functions to construct and execute SQL queries for inserting new file records. """ import base64 import hashlib from typing import Literal from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateFileRequest, File from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Create file file_query = """ WITH new_file AS ( INSERT INTO files ( developer_id, file_id, name, description, mime_type, size, hash ) VALUES ( $1, -- developer_id $2, -- file_id $3, -- name $4, -- description $5, -- mime_type $6, -- size $7 -- hash ) RETURNING * ), proj AS ( -- Find project ID by canonical name SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $8 ), project_association AS ( -- Insert into project_files junction table INSERT INTO project_files ( project_id, developer_id, file_id ) SELECT p.project_id, $1, $2 FROM proj p WHERE p.project_id IS NOT NULL RETURNING 1 ) SELECT f.*, $8 AS project FROM new_file f; """ # Replace both user_file and agent_file queries with a single file_owner query file_owner_query = """ WITH inserted_owner AS ( INSERT INTO file_owners ( developer_id, file_id, owner_type, owner_id ) VALUES ($1, $2, $3, $4) RETURNING file_id ) SELECT f.*, $5 AS project FROM inserted_owner io JOIN files f ON f.file_id = io.file_id; """ # Add error handling decorator @rewrap_exceptions(common_db_exceptions("file", ["create"])) @wrap_in_class( File, one=True, transform=lambda d: { **d, "id": d["file_id"], "hash": d["hash"].hex(), "content": "DUMMY: NEED TO FETCH CONTENT FROM BLOB STORAGE", }, ) @query_metrics("create_file") @pg_query @beartype async def create_file_query( *, developer_id: UUID, file_id: UUID | None = None, data: CreateFileRequest, owner_type: Literal["user", "agent"] | None = None, owner_id: UUID | None = None, ) -> list[tuple[str, list] | tuple[str, list, str]]: """ Constructs and executes SQL queries to create a new file and optionally associate it with an owner. Parameters: developer_id (UUID): The unique identifier for the developer. file_id (UUID | None): Optional unique identifier for the file. data (CreateFileRequest): The file data to insert. owner_type (Literal["user", "agent"] | None): Optional type of owner owner_id (UUID | None): Optional ID of the owner Returns: list[tuple[str, list] | tuple[str, list, str]]: List of SQL queries, their parameters, and fetch type """ file_id = file_id or uuid7() # Calculate size and hash content_bytes = base64.b64decode(data.content) size = len(content_bytes) hash_bytes = hashlib.sha256(content_bytes).digest() # Base file parameters file_params = [ developer_id, file_id, data.name, data.description, data.mime_type, size, hash_bytes, data.project or "default", ] queries = [] # Create the file first queries.append((file_query, file_params)) # Then create the association if owner info provided if owner_type and owner_id: assoc_params = [developer_id, file_id, owner_type, owner_id, data.project or "default"] queries.append((file_owner_query, assoc_params)) return queries async def create_file( *, developer_id: UUID, file_id: UUID | None = None, data: CreateFileRequest, owner_type: Literal["user", "agent"] | None = None, owner_id: UUID | None = None, connection_pool: asyncpg.Pool | None = None, ) -> File: # Get project (default if not specified) project_canonical_name = data.project or "default" # Check if the project exists project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool, ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await create_file_query( developer_id=developer_id, file_id=file_id, data=data, owner_type=owner_type, owner_id=owner_id, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/files/delete_file.py ================================================ """ This module contains the functionality for deleting files from the PostgreSQL database. It constructs and executes SQL queries to remove file records and associated data. """ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Delete file query with ownership check delete_file_query = """ WITH deleted_owners AS ( DELETE FROM file_owners WHERE developer_id = $1 AND file_id = $2 AND ( ($3::text IS NULL AND $4::uuid IS NULL) OR (owner_type = $3 AND owner_id = $4) ) ) DELETE FROM files WHERE developer_id = $1 AND file_id = $2 AND ($3::text IS NULL OR EXISTS ( SELECT 1 FROM file_owners WHERE developer_id = $1 AND file_id = $2 AND owner_type = $3 AND owner_id = $4 )) RETURNING file_id; """ @rewrap_exceptions(common_db_exceptions("file", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { "id": d["file_id"], "deleted_at": utcnow(), "jobs": [], }, ) @query_metrics("delete_file") @pg_query @beartype async def delete_file( *, developer_id: UUID, file_id: UUID, owner_type: Literal["user", "agent"] | None = None, owner_id: UUID | None = None, ) -> tuple[str, list]: """ Deletes a file and its ownership records. Args: developer_id: The developer's UUID file_id: The file's UUID owner_type: Optional type of owner ("user" or "agent") owner_id: Optional UUID of the owner Returns: tuple[str, list]: SQL query and parameters """ return ( delete_file_query, [developer_id, file_id, owner_type, owner_id], ) ================================================ FILE: src/agents-api/agents_api/queries/files/get_file.py ================================================ """ This module contains the functionality for retrieving a single file from the PostgreSQL database. It constructs and executes SQL queries to fetch file details based on file ID and developer ID. """ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import File from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query file_query = """ SELECT f.*, p.canonical_name AS project FROM files f LEFT JOIN project_files pf ON f.developer_id = pf.developer_id AND f.file_id = pf.file_id LEFT JOIN projects p ON pf.project_id = p.project_id LEFT JOIN file_owners fo ON f.developer_id = fo.developer_id AND f.file_id = fo.file_id WHERE f.developer_id = $1 AND f.file_id = $2 AND ( ($3::text IS NULL AND $4::uuid IS NULL) OR (fo.owner_type = $3 AND fo.owner_id = $4) ) LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("file", ["get"])) @wrap_in_class( File, one=True, transform=lambda d: { **d, "id": d["file_id"], "hash": d["hash"].hex(), "content": "DUMMY: NEED TO FETCH CONTENT FROM BLOB STORAGE", }, ) @pg_query @beartype async def get_file( *, file_id: UUID, developer_id: UUID, owner_type: Literal["user", "agent"] | None = None, owner_id: UUID | None = None, ) -> tuple[str, list, Literal["fetchrow", "fetchmany", "fetch"]]: """ Constructs the SQL query to retrieve a file's details. Uses composite index on (developer_id, file_id) for efficient lookup. Args: file_id: The UUID of the file to retrieve developer_id: The UUID of the developer owning the file owner_type: Optional type of owner ("user" or "agent") owner_id: Optional UUID of the owner Returns: tuple[str, list]: SQL query and parameters """ return ( file_query, [developer_id, file_id, owner_type, owner_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/files/list_files.py ================================================ """ This module contains the functionality for listing files from the PostgreSQL database. It constructs and executes SQL queries to fetch a list of files based on developer ID with pagination. """ from typing import Annotated, Literal from uuid import UUID from beartype import beartype from beartype.vale import Is from ...autogen.openapi_model import File from ...common.utils.db_exceptions import common_db_exceptions from ..utils import make_num_validator, pg_query, rewrap_exceptions, wrap_in_class # Base query for listing files base_files_query = """ SELECT f.*, p.canonical_name AS project FROM files f LEFT JOIN project_files pf ON f.developer_id = pf.developer_id AND f.file_id = pf.file_id LEFT JOIN projects p ON pf.project_id = p.project_id LEFT JOIN file_owners fo ON f.developer_id = fo.developer_id AND f.file_id = fo.file_id WHERE f.developer_id = $1 """ @rewrap_exceptions(common_db_exceptions("file", ["list"])) @wrap_in_class( File, one=False, transform=lambda d: { **d, "id": d["file_id"], "hash": d["hash"].hex(), "content": "DUMMY: NEED TO FETCH CONTENT FROM BLOB STORAGE", }, ) @pg_query @beartype async def list_files( *, developer_id: UUID, owner_id: UUID | None = None, owner_type: Literal["user", "agent"] | None = None, project: str | None = None, limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=100, err_msg="Limit must be between 1 and 100" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be >= 0")] ] = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> tuple[str, list]: """ Lists files with optional owner and project filtering, pagination, and sorting. """ # Start with the base query query = base_files_query params = [developer_id] param_index = 2 # Add owner filtering if owner_type and owner_id: query += f" AND fo.owner_type = ${param_index} AND fo.owner_id = ${param_index + 1}" params.extend([owner_type, owner_id]) param_index += 2 # Add project filtering if project: query += f" AND p.canonical_name = ${param_index}" params.append(project) param_index += 1 # Add sorting and pagination query += f" ORDER BY f.{sort_by} {direction} LIMIT ${param_index} OFFSET ${param_index + 1}" params.extend([limit, offset]) return query, params ================================================ FILE: src/agents-api/agents_api/queries/projects/__init__.py ================================================ """ The `project` module within the `queries` package provides a comprehensive suite of SQL query functions for managing projects in the PostgreSQL database. This includes: - Creating new projects - Updating existing projects - Retrieving details about specific projects - Listing projects with filtering and pagination - Deleting projects from the database Each function in this module constructs and returns SQL queries along with their parameters for database operations. """ from .create_project import create_project from .list_projects import list_projects __all__ = [ "create_project", "list_projects", ] ================================================ FILE: src/agents-api/agents_api/queries/projects/create_project.py ================================================ """ This module contains the functionality for creating projects in the PostgreSQL database. It includes functions to construct and execute SQL queries for inserting new project records. """ from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateProjectRequest, Project from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import generate_canonical_name, pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query project_query = """ INSERT INTO projects ( developer_id, project_id, canonical_name, name, metadata ) VALUES ( $1, $2, $3, $4, $5 ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("project", ["create"])) @wrap_in_class( Project, one=True, transform=lambda d: {**d, "id": d["project_id"]}, ) @query_metrics("create_project") @pg_query @beartype async def create_project( *, developer_id: UUID, project_id: UUID | None = None, data: CreateProjectRequest, ) -> tuple[str, list]: """ Constructs and executes a SQL query to create a new project in the database. Parameters: project_id (UUID | None): The unique identifier for the project. developer_id (UUID): The unique identifier for the developer creating the project. data (CreateProjectRequest): The data for the new project. Returns: tuple[str, dict]: SQL query and parameters for creating the project. """ project_id = project_id or uuid7() # Set default values data.metadata = data.metadata or {} data.canonical_name = data.canonical_name or generate_canonical_name() params = [ developer_id, project_id, data.canonical_name, data.name, data.metadata, ] return ( project_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/projects/list_projects.py ================================================ """ This module contains the functionality for listing projects from the PostgreSQL database. It constructs and executes SQL queries to fetch a list of projects based on developer ID with pagination. """ from typing import Any, Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Project from ...common.utils.db_exceptions import common_db_exceptions from ..utils import ( pg_query, rewrap_exceptions, wrap_in_class, ) # Define the raw SQL query raw_query = """ SELECT project_id, developer_id, name, canonical_name, metadata, created_at, updated_at FROM projects WHERE developer_id = $1 {metadata_filter_query} ORDER BY CASE WHEN $4 = 'created_at' AND $5 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $4 = 'created_at' AND $5 = 'desc' THEN created_at END DESC NULLS LAST, CASE WHEN $4 = 'updated_at' AND $5 = 'asc' THEN updated_at END ASC NULLS LAST, CASE WHEN $4 = 'updated_at' AND $5 = 'desc' THEN updated_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ @rewrap_exceptions(common_db_exceptions("project", ["list"])) @wrap_in_class( Project, transform=lambda d: {**d, "id": d["project_id"]}, ) @pg_query @beartype async def list_projects( *, developer_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Constructs query to list projects for a developer with pagination. Args: developer_id: UUID of the developer limit: Maximum number of records to return offset: Number of records to skip sort_by: Field to sort by direction: Sort direction ('asc' or 'desc') metadata_filter: Optional metadata filters Returns: Tuple of (query, params) """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} # Initialize parameters params = [ developer_id, limit, offset, sort_by, direction, ] # Handle metadata filter differently - using JSONB containment project_query = raw_query.format( metadata_filter_query="AND metadata @> $6::jsonb" if metadata_filter else "", ) # If we have metadata filters, safely add them as a parameter if metadata_filter: params.append(metadata_filter) return ( project_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/projects/project_exists.py ================================================ """ This module contains the functionality for creating agents in the PostgreSQL database. It includes functions to construct and execute SQL queries for inserting new agent records. """ from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions # Define the raw SQL query for checking project existence check_project_query = """ SELECT CASE WHEN EXISTS ( SELECT 1 FROM projects WHERE developer_id = $1 AND canonical_name = $2 ) THEN TRUE ELSE FALSE END as project_exists; """ @rewrap_exceptions(common_db_exceptions("project", ["exists"])) @pg_query @beartype async def project_exists(developer_id: UUID, canonical_name: str) -> tuple[str, list]: return (check_project_query, [developer_id, canonical_name]) ================================================ FILE: src/agents-api/agents_api/queries/secrets/__init__.py ================================================ """Query functions for secrets.""" from .create import create_secret from .delete import delete_secret from .get_by_name import get_secret_by_name from .list import list_secrets from .update import update_secret __all__ = [ "create_secret", "delete_secret", "get_secret_by_name", "list_secrets", "update_secret", ] ================================================ FILE: src/agents-api/agents_api/queries/secrets/create.py ================================================ """Query functions for creating secrets.""" from typing import Any from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from agents_api.autogen.openapi_model import Secret from ...common.utils.db_exceptions import common_db_exceptions from ...env import secrets_master_key from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class query = """ INSERT INTO secrets ( secret_id, developer_id, name, description, value_encrypted, metadata ) VALUES ( $1, $2, $3, $4, (SELECT encrypt_secret($5::text, $6::text)), $7 ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("secret", ["create"])) @wrap_in_class( Secret, one=True, transform=lambda d: {**d, "id": d["secret_id"], "value": "ENCRYPTED"}, ) @query_metrics("create_secret") @pg_query @beartype async def create_secret( *, developer_id: UUID, name: str, value: str, secret_id: UUID | None = None, description: str | None = None, metadata: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Constructs and executes a SQL query to create a new secret in the database. Parameters: developer_id (UUID): The unique identifier for the developer creating the secret. secret_id (UUID | None): The unique identifier for the secret. name (str): The name of the secret. value (str): The value of the secret. description (str | None): The description of the secret. metadata (dict[str, Any] | None): Additional metadata for the secret. Returns: tuple[str, list]: SQL query and parameters for creating the secret. """ secret_id = secret_id or uuid7() return ( query, [ secret_id, developer_id, name, description, value, secrets_master_key, metadata, ], ) ================================================ FILE: src/agents-api/agents_api/queries/secrets/delete.py ================================================ """Query functions for deleting secrets.""" from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class query = """ DELETE FROM secrets WHERE secret_id = $1 AND developer_id = $2 RETURNING *; """ @rewrap_exceptions(common_db_exceptions("secret", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { "id": d["secret_id"], "deleted_at": utcnow(), }, ) @pg_query @beartype async def delete_secret(*, secret_id: UUID, developer_id: UUID) -> tuple[str, list]: """Delete a secret. Args: secret_id: ID of the secret to delete developer_id: ID of the developer who owns the secret Returns: ResourceDeletedResponse: Information about the deleted secret Raises: NotFoundError: If the secret does not exist """ return ( query, [ secret_id, developer_id, ], ) ================================================ FILE: src/agents-api/agents_api/queries/secrets/get_by_name.py ================================================ """Query functions for listing secrets.""" from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Secret from ...common.utils.db_exceptions import common_db_exceptions from ...env import secrets_master_key from ..utils import pg_query, rewrap_exceptions, wrap_in_class query = """ SELECT secret_id, developer_id, name, description, created_at, updated_at, metadata, CASE WHEN $4 = True THEN decrypt_secret(value_encrypted, $3) ELSE 'ENCRYPTED' END as value FROM secrets WHERE ( developer_id = $1 AND name = $2 ) LIMIT 1; """ # TODO: handle HTTPException: 404: No secret found during get_by_name, shouldn't be an error @wrap_in_class( Secret, maybe_one=True, transform=lambda d: {**d, "id": d["secret_id"]}, ) @pg_query @beartype async def get_secret_by_name_query( *, developer_id: UUID, name: str, decrypt: bool = False, ) -> tuple[str, list]: return ( query, [ developer_id, name, secrets_master_key, decrypt, ], ) get_secret_by_name = rewrap_exceptions(common_db_exceptions("secret", ["get_by_name"]))( get_secret_by_name_query ) ================================================ FILE: src/agents-api/agents_api/queries/secrets/list.py ================================================ """Query functions for listing secrets.""" from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Secret from ...common.utils.db_exceptions import common_db_exceptions from ...env import secrets_master_key from ..utils import pg_query, rewrap_exceptions, wrap_in_class query = """ SELECT secret_id, developer_id, name, description, created_at, updated_at, metadata, CASE WHEN $5 = True THEN decrypt_secret(value_encrypted, $4) ELSE 'ENCRYPTED' END as value FROM secrets WHERE ( developer_id = $1 ) ORDER BY created_at DESC LIMIT $2 OFFSET $3 """ @wrap_in_class( Secret, transform=lambda d: {**d, "id": d["secret_id"]}, ) @pg_query @beartype async def list_secrets_query( *, developer_id: UUID, limit: int = 100, offset: int = 0, decrypt: bool = False, ) -> tuple[str, list]: return ( query, [ developer_id, limit, offset, secrets_master_key, decrypt, ], ) list_secrets = rewrap_exceptions(common_db_exceptions("secret", ["list"]))(list_secrets_query) ================================================ FILE: src/agents-api/agents_api/queries/secrets/update.py ================================================ """Query functions for updating secrets.""" from typing import Any from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Secret from ...common.utils.db_exceptions import common_db_exceptions from ...env import secrets_master_key from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class query = """ UPDATE secrets SET updated_at = NOW(), name = COALESCE($3, name), description = COALESCE($4, description), metadata = COALESCE($5, metadata), value_encrypted = CASE WHEN $6::text IS NOT NULL THEN encrypt_secret($6::text, $7) ELSE value_encrypted END WHERE secret_id = $1 AND developer_id = $2 RETURNING *; """ @rewrap_exceptions(common_db_exceptions("secret", ["update"])) @wrap_in_class( Secret, one=True, transform=lambda d: {**d, "id": d["secret_id"], "value": "ENCRYPTED"}, ) @query_metrics("update_secret") @pg_query @beartype async def update_secret( *, secret_id: UUID, developer_id: UUID, name: str | None = None, description: str | None = None, metadata: dict[str, Any] | None = None, value: str | None = None, ) -> tuple[str, list]: return ( query, [ secret_id, developer_id, name, description, metadata, value, secrets_master_key, ], ) ================================================ FILE: src/agents-api/agents_api/queries/sessions/__init__.py ================================================ """ The `sessions` module within the `queries` package provides SQL query functions for managing sessions in the PostgreSQL database. This includes operations for: - Creating new sessions - Updating existing sessions - Retrieving session details - Listing sessions with filtering and pagination - Deleting sessions """ from .count_sessions import count_sessions from .create_or_update_session import create_or_update_session from .create_session import create_session from .delete_session import delete_session from .get_session import get_session from .list_sessions import list_sessions from .patch_session import patch_session from .update_session import update_session __all__ = [ "count_sessions", "create_or_update_session", "create_session", "delete_session", "get_session", "list_sessions", "patch_session", "update_session", ] ================================================ FILE: src/agents-api/agents_api/queries/sessions/count_sessions.py ================================================ """Query builder for counting sessions belonging to a specific developer.""" # AIDEV-NOTE: Returns a single integer representing the number of sessions. from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query session_query = """ SELECT COUNT(*) FROM sessions WHERE developer_id = $1; """ @rewrap_exceptions(common_db_exceptions("session", ["count"])) @wrap_in_class(dict, one=True) @query_metrics("count_sessions") @pg_query @beartype async def count_sessions( *, developer_id: UUID, ) -> tuple[str, list]: """ Counts sessions from the PostgreSQL database. Uses the index on developer_id for efficient counting. Args: developer_id (UUID): The developer's ID to filter sessions by. Returns: tuple[str, list]: SQL query and parameters. """ return ( session_query, [developer_id], ) ================================================ FILE: src/agents-api/agents_api/queries/sessions/create_or_update_session.py ================================================ from uuid import UUID from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import ( CreateOrUpdateSessionRequest, Session, ) from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL queries session_query = """ INSERT INTO sessions ( developer_id, session_id, situation, system_template, metadata, render_templates, token_budget, context_overflow, forward_tool_calls, recall_options ) VALUES ( $1, -- developer_id $2, -- session_id $3, -- situation $4, -- system_template $5, -- metadata $6, -- render_templates $7, -- token_budget $8, -- context_overflow $9, -- forward_tool_calls $10 -- recall_options ) ON CONFLICT (developer_id, session_id) DO UPDATE SET situation = EXCLUDED.situation, system_template = EXCLUDED.system_template, metadata = EXCLUDED.metadata, render_templates = EXCLUDED.render_templates, token_budget = EXCLUDED.token_budget, context_overflow = EXCLUDED.context_overflow, forward_tool_calls = EXCLUDED.forward_tool_calls, recall_options = EXCLUDED.recall_options RETURNING *; """ lookup_query = """ INSERT INTO session_lookup ( developer_id, session_id, participant_type, participant_id ) VALUES ($1, $2, $3, $4) ON CONFLICT (developer_id, session_id, participant_type, participant_id) DO NOTHING; """ @rewrap_exceptions(common_db_exceptions("session", ["create", "update"])) @wrap_in_class( Session, one=True, transform=lambda d: { **d, "id": d["session_id"], }, ) @query_metrics("create_or_update_session") @pg_query(return_index=0) @beartype async def create_or_update_session( *, developer_id: UUID, session_id: UUID, data: CreateOrUpdateSessionRequest, ) -> list[tuple[str, list] | tuple[str, list, str]]: """ Constructs SQL queries to create or update a session and its participant lookups. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID data (CreateOrUpdateSessionRequest): Session data to insert or update Returns: list[tuple[str, list]]: List of SQL queries and their parameters """ # Handle participants users = data.users or ([data.user] if data.user else []) agents = data.agents or ([data.agent] if data.agent else []) if not agents: raise HTTPException( status_code=400, detail="At least one agent must be provided", ) if data.agent and data.agents: raise HTTPException( status_code=400, detail="Only one of 'agent' or 'agents' should be provided", ) # Prepare participant arrays for lookup query participant_types = ["user"] * len(users) + ["agent"] * len(agents) participant_ids = [str(u) for u in users] + [str(a) for a in agents] # Prepare session parameters session_params = [ developer_id, # $1 session_id, # $2 data.situation, # $3 data.system_template, # $4 data.metadata or {}, # $5 data.render_templates, # $6 data.token_budget, # $7 data.context_overflow, # $8 data.forward_tool_calls, # $9 data.recall_options.model_dump() if data.recall_options else {}, # $10 ] # Prepare lookup parameters lookup_params = [] for participant_type, participant_id in zip(participant_types, participant_ids): lookup_params.append([developer_id, session_id, participant_type, participant_id]) return [ (session_query, session_params, "fetch"), (lookup_query, lookup_params, "fetchmany"), ] ================================================ FILE: src/agents-api/agents_api/queries/sessions/create_session.py ================================================ """Database query to create a new chat session for a developer.""" # AIDEV-NOTE: Inserts a new session row and returns it with generated ID. from uuid import UUID from beartype import beartype from fastapi import HTTPException from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateSessionRequest, Session from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL queries session_query = """ INSERT INTO sessions ( developer_id, session_id, situation, system_template, metadata, render_templates, token_budget, context_overflow, forward_tool_calls, recall_options ) VALUES ( $1, -- developer_id $2, -- session_id $3, -- situation $4, -- system_template $5, -- metadata $6, -- render_templates $7, -- token_budget $8, -- context_overflow $9, -- forward_tool_calls $10 -- recall_options ) RETURNING *; """ lookup_query = """ INSERT INTO session_lookup ( developer_id, session_id, participant_type, participant_id ) VALUES ($1, $2, $3, $4); """ @rewrap_exceptions(common_db_exceptions("session", ["create"])) @wrap_in_class( Session, one=True, transform=lambda d: { **d, "id": d["session_id"], }, ) @query_metrics("create_session") @pg_query(return_index=0) @beartype async def create_session( *, developer_id: UUID, session_id: UUID | None = None, data: CreateSessionRequest, ) -> list[tuple[str, list] | tuple[str, list, str]]: """ Constructs SQL queries to create a new session and its participant lookups. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID data (CreateSessionRequest): Session creation data Returns: list[tuple[str, list] | tuple[str, list, str]]: SQL queries and their parameters """ # Handle participants users = data.users or ([data.user] if data.user else []) agents = data.agents or ([data.agent] if data.agent else []) session_id = session_id or uuid7() if not agents: raise HTTPException( status_code=400, detail="At least one agent must be provided", ) if data.agent and data.agents: raise HTTPException( status_code=400, detail="Only one of 'agent' or 'agents' should be provided", ) # Prepare participant arrays for lookup query participant_types = ["user"] * len(users) + ["agent"] * len(agents) participant_ids = [str(u) for u in users] + [str(a) for a in agents] # Prepare session parameters session_params = [ developer_id, # $1 session_id, # $2 data.situation, # $3 data.system_template, # $4 data.metadata or {}, # $5 data.render_templates, # $6 data.token_budget, # $7 data.context_overflow, # $8 data.forward_tool_calls, # $9 data.recall_options.model_dump() if data.recall_options else {}, # $10 ] # Prepare lookup parameters as a list of parameter lists lookup_params = [] for ptype, pid in zip(participant_types, participant_ids): lookup_params.append([developer_id, session_id, ptype, pid]) return [ (session_query, session_params, "fetch"), (lookup_query, lookup_params, "fetchmany"), ] ================================================ FILE: src/agents-api/agents_api/queries/sessions/delete_session.py ================================================ """This module contains the implementation for deleting sessions from the PostgreSQL database.""" from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL queries lookup_query = """ DELETE FROM session_lookup WHERE developer_id = $1 AND session_id = $2; """ session_query = """ DELETE FROM sessions WHERE developer_id = $1 AND session_id = $2 RETURNING session_id AS id; """ @rewrap_exceptions(common_db_exceptions("session", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { **d, "deleted_at": utcnow(), "jobs": [], }, ) @query_metrics("delete_session") @pg_query @beartype async def delete_session( *, developer_id: UUID, session_id: UUID, ) -> list[tuple[str, list]]: """ Constructs SQL queries to delete a session and its participant lookups. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID to delete Returns: list[tuple[str, list]]: List of SQL queries and their parameters """ params = [developer_id, session_id] return [ (lookup_query, params), # Delete from lookup table first due to FK constraint (session_query, params), # Then delete from sessions table ] ================================================ FILE: src/agents-api/agents_api/queries/sessions/get_session.py ================================================ """This module contains functions for retrieving session data from the PostgreSQL database.""" from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Session from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query query = """ WITH session_participants AS ( SELECT sl.session_id, array_agg(sl.participant_id) FILTER (WHERE sl.participant_type = 'agent') as agents, array_agg(sl.participant_id) FILTER (WHERE sl.participant_type = 'user') as users FROM session_lookup sl WHERE sl.developer_id = $1 AND sl.session_id = $2 GROUP BY sl.session_id ) SELECT s.session_id as id, s.developer_id, s.situation, s.system_template, s.metadata, s.render_templates, s.token_budget, s.context_overflow, s.forward_tool_calls, s.recall_options, s.created_at, s.updated_at, sp.agents, sp.users FROM sessions s LEFT JOIN session_participants sp ON s.session_id = sp.session_id WHERE s.developer_id = $1 AND s.session_id = $2; """ @rewrap_exceptions(common_db_exceptions("session", ["get"])) @wrap_in_class(Session, one=True) @query_metrics("get_session") @pg_query @beartype async def get_session( *, developer_id: UUID, session_id: UUID, ) -> tuple[str, list]: """ Constructs SQL query to retrieve a session and its participants. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID Returns: tuple[str, list]: SQL query and parameters """ return ( query, [developer_id, session_id], ) ================================================ FILE: src/agents-api/agents_api/queries/sessions/list_sessions.py ================================================ """This module contains functions for querying session data from the PostgreSQL database.""" from typing import Any, Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Session from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query session_query = """ WITH session_participants AS ( SELECT sl.session_id, array_agg(sl.participant_id) FILTER (WHERE sl.participant_type = 'agent') as agents, array_agg(sl.participant_id) FILTER (WHERE sl.participant_type = 'user') as users FROM session_lookup sl WHERE sl.developer_id = $1 GROUP BY sl.session_id ) SELECT s.session_id as id, s.developer_id, s.situation, s.system_template, s.metadata, s.render_templates, s.token_budget, s.context_overflow, s.forward_tool_calls, s.recall_options, s.created_at, s.updated_at, sp.agents, sp.users FROM sessions s LEFT JOIN session_participants sp ON s.session_id = sp.session_id WHERE s.developer_id = $1 AND ($5::jsonb IS NULL OR s.metadata @> $5::jsonb) ORDER BY CASE WHEN $3 = 'created_at' AND $4 = 'desc' THEN s.created_at END DESC, CASE WHEN $3 = 'created_at' AND $4 = 'asc' THEN s.created_at END ASC, CASE WHEN $3 = 'updated_at' AND $4 = 'desc' THEN s.updated_at END DESC, CASE WHEN $3 = 'updated_at' AND $4 = 'asc' THEN s.updated_at END ASC LIMIT $2 OFFSET $6; """ @rewrap_exceptions(common_db_exceptions("session", ["list"])) @wrap_in_class( Session, transform=lambda d: { **d, }, ) @query_metrics("list_sessions") @pg_query @beartype async def list_sessions( *, developer_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Lists sessions from the PostgreSQL database based on the provided filters. Args: developer_id (UUID): The developer's UUID limit (int): Maximum number of sessions to return offset (int): Number of sessions to skip sort_by (str): Field to sort by ('created_at' or 'updated_at') direction (str): Sort direction ('asc' or 'desc') metadata_filter (dict): Dictionary of metadata fields to filter by Returns: tuple[str, list]: SQL query and parameters """ # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} return ( session_query, [ developer_id, # $1 limit, # $2 sort_by, # $3 direction, # $4 metadata_filter or None, # $5 offset, # $6 ], ) ================================================ FILE: src/agents-api/agents_api/queries/sessions/patch_session.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import PatchSessionRequest, Session from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL queries # Build dynamic SET clause based on provided fields session_query = """ UPDATE sessions SET situation = COALESCE($3, situation), system_template = COALESCE($4, system_template), metadata = sessions.metadata || $5, render_templates = COALESCE($6, render_templates), token_budget = COALESCE($7, token_budget), context_overflow = COALESCE($8, context_overflow), forward_tool_calls = COALESCE($9, forward_tool_calls), recall_options = sessions.recall_options || $10 WHERE developer_id = $1 AND session_id = $2 RETURNING * """ @rewrap_exceptions(common_db_exceptions("session", ["patch"])) @wrap_in_class( Session, one=True, transform=lambda d: { **d, "id": d["session_id"], }, ) @query_metrics("patch_session") @pg_query @beartype async def patch_session( *, developer_id: UUID, session_id: UUID, data: PatchSessionRequest, ) -> list[tuple[str, list]]: """ Constructs SQL queries to patch a session and its participant lookups. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID data (PatchSessionRequest): Session patch data Returns: list[tuple[str, list]]: List of SQL queries and their parameters """ # Extract fields from data, using None for unset fields session_params = [ developer_id, # $1 session_id, # $2 data.situation, # $3 data.system_template, # $4 data.metadata or {}, # $5 data.render_templates, # $6 data.token_budget, # $7 data.context_overflow, # $8 data.forward_tool_calls, # $9 data.recall_options.model_dump() if data.recall_options else {}, # $10 ] return [(session_query, session_params)] ================================================ FILE: src/agents-api/agents_api/queries/sessions/update_session.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Session, UpdateSessionRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query session_query = """ UPDATE sessions SET situation = $3, system_template = $4, metadata = $5, render_templates = $6, token_budget = $7, context_overflow = $8, forward_tool_calls = $9, recall_options = $10 WHERE developer_id = $1 AND session_id = $2 RETURNING *; """ @rewrap_exceptions(common_db_exceptions("session", ["update"])) @wrap_in_class( Session, one=True, transform=lambda d: { **d, "id": d["session_id"], }, ) @query_metrics("update_session") @pg_query @beartype async def update_session( *, developer_id: UUID, session_id: UUID, data: UpdateSessionRequest, ) -> list[tuple[str, list]]: """ Constructs SQL queries to update a session and its participant lookups. Args: developer_id (UUID): The developer's UUID session_id (UUID): The session's UUID data (UpdateSessionRequest): Session update data Returns: list[tuple[str, list]]: List of SQL queries and their parameters """ # Prepare session parameters session_params = [ developer_id, # $1 session_id, # $2 data.situation, # $3 data.system_template, # $4 data.metadata or {}, # $5 data.render_templates, # $6 data.token_budget, # $7 data.context_overflow, # $8 data.forward_tool_calls, # $9 data.recall_options.model_dump() if data.recall_options else {}, # $10 ] return [ (session_query, session_params), ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/__init__.py ================================================ """ The `task` module within the `queries` package provides SQL query functions for managing tasks in the TimescaleDB database. This includes operations for: - Creating new tasks - Updating existing tasks - Retrieving task details - Listing tasks with filtering and pagination - Deleting tasks """ from .create_or_update_task import create_or_update_task from .create_task import create_task from .delete_task import delete_task from .get_task import get_task from .list_tasks import list_tasks from .patch_task import patch_task from .update_task import update_task __all__ = [ "create_or_update_task", "create_task", "delete_task", "get_task", "list_tasks", "patch_task", "update_task", ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/create_or_update_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateOrUpdateTaskRequest from ...common.protocol.models import spec_to_task, task_to_spec from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import generate_canonical_name, pg_query, rewrap_exceptions, wrap_in_class from .get_task import get_task_query # Define the raw SQL query for creating or updating a task tools_query = """ INSERT INTO tools ( developer_id, agent_id, task_id, tool_id, type, name, description, spec ) VALUES ( $1, -- developer_id $2, -- agent_id $3, -- task_id $4, -- tool_id $5, -- type $6, -- name $7, -- description $8 -- spec ) ON CONFLICT (developer_id, agent_id, task_id, name) DO UPDATE SET type = EXCLUDED.type, description = EXCLUDED.description, spec = EXCLUDED.spec RETURNING *; """ # Define the raw SQL query for creating or updating a task task_query = """ WITH current_version AS ( SELECT COALESCE( (SELECT MAX("version") FROM tasks WHERE developer_id = $1 AND task_id = $4), 0 ) + 1 as next_version, COALESCE( (SELECT canonical_name FROM tasks WHERE developer_id = $1 AND task_id = $4 ORDER BY version DESC LIMIT 1), $2 ) as effective_canonical_name FROM (SELECT 1) as dummy ) INSERT INTO tasks ( "version", developer_id, canonical_name, agent_id, task_id, name, description, inherit_tools, input_schema, metadata ) SELECT next_version, -- version $1, -- developer_id effective_canonical_name, -- canonical_name $3, -- agent_id $4, -- task_id $5, -- name $6, -- description $7, -- inherit_tools $8::jsonb, -- input_schema $9::jsonb -- metadata FROM current_version ON CONFLICT (developer_id, task_id, "version") DO UPDATE SET version = tasks.version + 1, name = EXCLUDED.name, description = EXCLUDED.description, inherit_tools = EXCLUDED.inherit_tools, input_schema = EXCLUDED.input_schema, metadata = EXCLUDED.metadata RETURNING *, (SELECT next_version FROM current_version) as next_version; """ # Define the raw SQL query for inserting workflows workflows_query = """ WITH version AS ( SELECT COALESCE(MAX("version"), 0) as current_version FROM tasks WHERE developer_id = $1 AND task_id = $2 ) INSERT INTO workflows ( developer_id, task_id, "version", name, step_idx, step_type, step_definition ) SELECT $1, -- developer_id $2, -- task_id current_version, -- version $3, -- name $4, -- step_idx $5, -- step_type $6 -- step_definition FROM version; """ @rewrap_exceptions(common_db_exceptions("task", ["create_or_update"])) @wrap_in_class( spec_to_task, one=True, ) @query_metrics("create_or_update_task") @pg_query @beartype async def create_or_update_task( *, developer_id: UUID, agent_id: UUID, task_id: UUID, data: CreateOrUpdateTaskRequest, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Constructs an SQL query to create or update a task. Args: developer_id (UUID): The UUID of the developer. agent_id (UUID): The UUID of the agent. task_id (UUID): The UUID of the task. data (CreateOrUpdateTaskRequest): The task data to insert or update. Returns: list[tuple[str, list, Literal["fetch", "fetchmany"]]]: List of SQL queries and parameters. Raises: HTTPException: If developer/agent doesn't exist (404) or on unique constraint violation (409) """ # Generate canonical name from task name if not provided canonical_name = data.canonical_name or generate_canonical_name() # Version will be determined by the CTE task_params = [ developer_id, # $1 canonical_name, # $2 agent_id, # $3 task_id, # $4 data.name, # $5 data.description, # $6 data.inherit_tools, # $7 data.input_schema or {}, # $8 data.metadata or {}, # $9 ] # Prepare tool parameters for the tools table tool_params = [ [ developer_id, agent_id, task_id, uuid7(), # tool_id tool.type, tool.name, tool.description, getattr(tool, tool.type) and getattr(tool, tool.type).model_dump(mode="json"), # spec ] for tool in data.tools or [] ] # Generate workflows from task data using task_to_spec workflows_spec = task_to_spec(data).model_dump(mode="json") workflow_params = [] for workflow in workflows_spec.get("workflows", []): workflow_name = workflow.get("name") steps = workflow.get("steps", []) for step_idx, step in enumerate(steps): workflow_params.append([ developer_id, # $1 task_id, # $2 workflow_name, # $3 step_idx, # $4 step["kind_"], # $5 step, # $6 ]) return [ ( task_query, task_params, "fetch", ), ( tools_query, tool_params, "fetchmany", ), ( workflows_query, workflow_params, "fetchmany", ), ( get_task_query, [developer_id, task_id], "fetchrow", ), ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/create_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateTaskRequest from ...common.protocol.models import spec_to_task, task_to_spec from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import ( generate_canonical_name, pg_query, rewrap_exceptions, wrap_in_class, ) from .get_task import get_task_query # Define the raw SQL query for creating or updating a task tools_query = """ INSERT INTO tools ( developer_id, agent_id, task_id, tool_id, type, name, description, spec ) VALUES ( $1, -- developer_id $2, -- agent_id $3, -- task_id $4, -- tool_id $5, -- type $6, -- name $7, -- description $8 -- spec ) """ task_query = """ INSERT INTO tasks ( "version", developer_id, agent_id, task_id, name, canonical_name, description, inherit_tools, input_schema, metadata ) VALUES ( 1, -- version $1, -- developer_id $2, -- agent_id $3, -- task_id $4, -- name $5, -- canonical_name $6, -- description $7, -- inherit_tools $8::jsonb, -- input_schema $9::jsonb -- metadata ) """ # Define the raw SQL query for inserting workflows workflows_query = """ INSERT INTO workflows ( developer_id, task_id, "version", name, step_idx, step_type, step_definition ) VALUES ( $1, -- developer_id $2, -- task_id $3, -- version $4, -- name $5, -- step_idx $6, -- step_type $7 -- step_definition ) """ @rewrap_exceptions(common_db_exceptions("task", ["create"])) @wrap_in_class( spec_to_task, one=True, ) @query_metrics("create_task") @pg_query @beartype async def create_task( *, developer_id: UUID, agent_id: UUID, task_id: UUID | None = None, data: CreateTaskRequest, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Constructs SQL queries to create or update a task along with its associated tools and workflows. Args: developer_id (UUID): The UUID of the developer. agent_id (UUID): The UUID of the agent. task_id (UUID, optional): The UUID of the task. If not provided, a new UUID is generated. data (CreateTaskRequest): The task data to insert or update. Returns: tuple[str, list]: SQL query and parameters. Raises: HTTPException: If developer/agent doesn't exist (404) or on unique constraint violation (409) """ task_id = task_id or uuid7() # Insert parameters for the tasks table task_params = [ developer_id, # $1 agent_id, # $2 task_id, # $3 data.name, # $4 data.canonical_name or generate_canonical_name(), # $5 data.description, # $6 data.inherit_tools, # $7 data.input_schema or {}, # $8 data.metadata or {}, # $9 ] # Prepare tool parameters for the tools table tool_params = [ [ developer_id, agent_id, task_id, uuid7(), # tool_id tool.type, tool.name, tool.description, getattr(tool, tool.type) and getattr(tool, tool.type).model_dump(mode="json"), # spec ] for tool in data.tools or [] ] # Generate workflows from task data using task_to_spec workflows_spec = task_to_spec(data).model_dump(mode="json") workflow_params = [] for workflow in workflows_spec.get("workflows", []): workflow_name = workflow.get("name") steps = workflow.get("steps", []) for step_idx, step in enumerate(steps): workflow_params.append([ developer_id, # $1 task_id, # $2 1, # $3 (version) workflow_name, # $4 step_idx, # $5 step["kind_"], # $6 step, # $7 ]) return [ ( task_query, task_params, "fetch", ), ( tools_query, tool_params, "fetchmany", ), ( workflows_query, workflow_params, "fetchmany", ), ( get_task_query, [developer_id, task_id], "fetchrow", ), ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/delete_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for deleting workflows workflow_query = """ DELETE FROM workflows WHERE developer_id = $1 AND task_id = $2; """ # Define the raw SQL query for deleting tasks task_query = """ DELETE FROM tasks WHERE developer_id = $1 AND task_id = $2 RETURNING task_id; """ @rewrap_exceptions(common_db_exceptions("task", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { "id": d["task_id"], "deleted_at": utcnow(), }, ) @pg_query @beartype async def delete_task( *, developer_id: UUID, task_id: UUID, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Deletes a task by its unique identifier along with its associated workflows. Parameters: developer_id (UUID): The unique identifier of the developer associated with the task. task_id (UUID): The unique identifier of the task to delete. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query, parameters, and fetch method. Raises: HTTPException: If developer/agent doesn't exist (404) or on unique constraint violation (409) """ return [ (workflow_query, [developer_id, task_id], "fetch"), (task_query, [developer_id, task_id], "fetchrow"), ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/get_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...common.protocol.models import spec_to_task from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # AIDEV-NOTE: Tools aggregated in subquery to avoid cartesian product; filtered by updated_at to exclude older versions # Define the raw SQL query for getting a task get_task_query = """ SELECT t.*, COALESCE( jsonb_agg( DISTINCT jsonb_build_object( 'name', w.name, 'steps', ( SELECT jsonb_agg(step_definition ORDER BY step_idx) FROM workflows w2 WHERE w2.developer_id = w.developer_id AND w2.task_id = w.task_id AND w2.version = w.version AND w2.name = w.name ) ) ) FILTER (WHERE w.name IS NOT NULL), '[]'::jsonb ) as workflows, COALESCE( ( SELECT jsonb_agg(to_jsonb(tl)) FROM tools tl WHERE tl.developer_id = t.developer_id AND tl.task_id = t.task_id AND tl.updated_at >= t.updated_at ), '[]'::jsonb ) as tools FROM tasks t LEFT JOIN workflows w ON t.developer_id = w.developer_id AND t.task_id = w.task_id AND t.version = w.version WHERE t.developer_id = $1 AND t.task_id = $2 AND t.version = ( SELECT MAX(version) FROM tasks WHERE developer_id = $1 AND task_id = $2 ) GROUP BY t.developer_id, t.task_id, t.canonical_name, t.agent_id, t.version; """ @rewrap_exceptions(common_db_exceptions("task", ["get"])) @wrap_in_class(spec_to_task, one=True) @pg_query @beartype async def get_task( *, developer_id: UUID, task_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Retrieves a task by its unique identifier along with its associated workflows. Parameters: developer_id (UUID): The unique identifier of the developer associated with the task. task_id (UUID): The unique identifier of the task to retrieve. Returns: tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: SQL query, parameters, and fetch method. Raises: HTTPException: If developer/agent doesn't exist (404) or on unique constraint violation (409) """ return ( get_task_query, [developer_id, task_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/tasks/list_tasks.py ================================================ from typing import Annotated, Any, Literal from uuid import UUID from beartype import beartype from beartype.vale import Is from ...common.protocol.models import spec_to_task from ...common.utils.db_exceptions import common_db_exceptions from ..utils import make_num_validator, pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for listing tasks list_tasks_query = """ SELECT t.*, COALESCE( jsonb_agg( CASE WHEN w.name IS NOT NULL THEN jsonb_build_object( 'name', w.name, 'steps', jsonb_build_array(w.step_definition) ) END ) FILTER (WHERE w.name IS NOT NULL), '[]'::jsonb ) as workflows FROM tasks t LEFT JOIN workflows w ON t.developer_id = w.developer_id AND t.task_id = w.task_id AND t.version = w.version WHERE t.developer_id = $1 AND t.agent_id = $2 {metadata_filter_query} GROUP BY t.developer_id, t.task_id, t.canonical_name, t.agent_id, t.version ORDER BY CASE WHEN $5 = 'created_at' AND $6 = 'asc' THEN t.created_at END ASC NULLS LAST, CASE WHEN $5 = 'created_at' AND $6 = 'desc' THEN t.created_at END DESC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'asc' THEN t.updated_at END ASC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'desc' THEN t.updated_at END DESC NULLS LAST LIMIT $3 OFFSET $4; """ @rewrap_exceptions(common_db_exceptions("task", ["list"])) @wrap_in_class(spec_to_task) @pg_query @beartype async def list_tasks( *, developer_id: UUID, agent_id: UUID, limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=100, err_msg="Limit must be between 1 and 100" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be >= 0")] ] = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] | None = None, ) -> tuple[str, list]: """ Retrieves all tasks for a given developer with pagination and sorting. Parameters: developer_id (UUID): The unique identifier of the developer. agent_id (UUID): The unique identifier of the agent. limit (int): Maximum number of records to return (default: 100) offset (int): Number of records to skip (default: 0) sort_by (str): Field to sort by ("created_at" or "updated_at") direction (str): Sort direction ("asc" or "desc") metadata_filter (dict): Optional metadata filters Returns: tuple[str, list]: SQL query and parameters. Raises: HTTPException: If parameters are invalid or developer/agent doesn't exist """ # if direction.lower() not in ["asc", "desc"]: # raise HTTPException(status_code=400, detail="Invalid sort direction") # AIDEV-NOTE: avoid mutable default; initialize metadata_filter metadata_filter = metadata_filter if metadata_filter is not None else {} # Format query with metadata filter if needed query = list_tasks_query.format( metadata_filter_query="AND metadata @> $7::jsonb" if metadata_filter else "", ) # Build parameters list params = [ developer_id, agent_id, limit, offset, sort_by, direction, ] if metadata_filter: params.append(metadata_filter) return (query, params) ================================================ FILE: src/agents-api/agents_api/queries/tasks/patch_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import PatchTaskRequest from ...common.protocol.models import spec_to_task, task_to_spec from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .get_task import get_task_query # Update task query using INSERT with version increment patch_task_query = """ WITH current_version AS ( SELECT MAX("version") as current_version, canonical_name as existing_canonical_name, metadata as existing_metadata, name as existing_name, description as existing_description, inherit_tools as existing_inherit_tools, input_schema as existing_input_schema FROM tasks WHERE developer_id = $1 AND task_id = $3 GROUP BY canonical_name, metadata, name, description, inherit_tools, input_schema HAVING MAX("version") IS NOT NULL -- This ensures we only proceed if a version exists ) INSERT INTO tasks ( "version", developer_id, -- $1 canonical_name, -- $2 task_id, -- $3 agent_id, -- $4 metadata, -- $5 name, -- $6 description, -- $7 inherit_tools, -- $8 input_schema -- $9 ) SELECT current_version + 1, -- version $1, -- developer_id COALESCE($2, existing_canonical_name), -- canonical_name $3, -- task_id $4, -- agent_id COALESCE($5::jsonb, existing_metadata), -- metadata COALESCE($6, existing_name), -- name COALESCE($7, existing_description), -- description COALESCE($8, existing_inherit_tools), -- inherit_tools COALESCE($9::jsonb, existing_input_schema) -- input_schema FROM current_version RETURNING *; """ # When main is None - just copy existing workflows with new version copy_workflows_query = """ WITH current_version AS ( SELECT MAX(version) - 1 as current_version FROM tasks WHERE developer_id = $1 AND task_id = $2 ) INSERT INTO workflows ( developer_id, task_id, version, name, step_idx, step_type, step_definition ) SELECT developer_id, task_id, (SELECT current_version + 1 FROM current_version), -- new version name, step_idx, step_type, step_definition FROM workflows WHERE developer_id = $1 AND task_id = $2 AND version = (SELECT current_version FROM current_version) """ # When main is provided - create new workflows (existing query) new_workflows_query = """ WITH current_version AS ( SELECT COALESCE(MAX(version), 0) - 1 as next_version FROM tasks WHERE developer_id = $1 AND task_id = $2 ) INSERT INTO workflows ( developer_id, task_id, version, name, step_idx, step_type, step_definition ) SELECT $1, -- developer_id $2, -- task_id next_version + 1, -- version $3, -- name $4, -- step_idx $5, -- step_type $6 -- step_definition FROM current_version """ @rewrap_exceptions(common_db_exceptions("task", ["patch"])) @wrap_in_class( spec_to_task, one=True, ) @query_metrics("patch_task") @pg_query @beartype async def patch_task( *, developer_id: UUID, task_id: UUID, agent_id: UUID, data: PatchTaskRequest, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Updates a task and its associated workflows with version control. Only updates the fields that are provided in the request. Parameters: developer_id (UUID): The unique identifier of the developer. task_id (UUID): The unique identifier of the task to update. data (PatchTaskRequest): The partial update data. agent_id (UUID): The unique identifier of the agent. Returns: list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: List of queries to execute. """ # Parameters for patching the task patch_task_params = [ developer_id, # $1 data.canonical_name, # $2 task_id, # $3 agent_id, # $4 data.metadata or None, # $5 data.name or None, # $6 data.description or None, # $7 data.inherit_tools, # $8 data.input_schema, # $9 ] if data.main is None: workflow_query = copy_workflows_query workflow_params = [[developer_id, task_id]] # Only need these params else: workflow_query = new_workflows_query workflow_params = [] workflows_spec = task_to_spec(data).model_dump(mode="json") for workflow in workflows_spec.get("workflows", []): workflow_name = workflow.get("name") steps = workflow.get("steps", []) for step_idx, step in enumerate(steps): workflow_params.append([ developer_id, # $1 task_id, # $2 workflow_name, # $3 step_idx, # $4 step["kind_"], # $5 step, # $6 ]) return [ ( patch_task_query, patch_task_params, "fetchrow", ), ( workflow_query, workflow_params, "fetchmany", ), ( get_task_query, [developer_id, task_id], "fetchrow", ), ] ================================================ FILE: src/agents-api/agents_api/queries/tasks/update_task.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import UpdateTaskRequest from ...common.protocol.models import spec_to_task, task_to_spec from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class from .get_task import get_task_query # Update task query using INSERT with version increment update_task_query = """ WITH current_version AS ( SELECT MAX("version") as current_version, canonical_name as existing_canonical_name FROM tasks WHERE developer_id = $1 AND task_id = $3 GROUP BY task_id, canonical_name HAVING MAX("version") IS NOT NULL -- This ensures we only proceed if a version exists ) INSERT INTO tasks ( "version", developer_id, -- $1 canonical_name, -- $2 task_id, -- $3 agent_id, -- $4 metadata, -- $5 name, -- $6 description, -- $7 inherit_tools, -- $8 input_schema -- $9 ) SELECT current_version + 1, -- version $1, -- developer_id COALESCE($2, existing_canonical_name), -- canonical_name $3, -- task_id $4, -- agent_id $5::jsonb, -- metadata $6, -- name $7, -- description $8, -- inherit_tools $9::jsonb -- input_schema FROM current_version RETURNING *; """ # Update workflows query to use UPDATE instead of INSERT workflows_query = """ WITH version AS ( SELECT COALESCE(MAX(version), 0) as current_version FROM tasks WHERE developer_id = $1 AND task_id = $2 ) INSERT INTO workflows ( developer_id, task_id, version, name, step_idx, step_type, step_definition ) SELECT $1, -- developer_id $2, -- task_id current_version, -- version (from CTE) $3, -- name $4, -- step_idx $5, -- step_type $6 -- step_definition FROM version; """ @rewrap_exceptions(common_db_exceptions("task", ["update"])) @wrap_in_class( spec_to_task, one=True, ) @query_metrics("update_task") @pg_query @beartype async def update_task( *, developer_id: UUID, task_id: UUID, agent_id: UUID, data: UpdateTaskRequest, ) -> list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: """ Updates a task and its associated workflows with version control. Parameters: developer_id (UUID): The unique identifier of the developer. task_id (UUID): The unique identifier of the task to update. data (UpdateTaskRequest): The update data. agent_id (UUID): The unique identifier of the agent. Returns: list[tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]]: List of queries to execute. """ # Parameters for updating the task update_task_params = [ developer_id, # $1 data.canonical_name, # $2 task_id, # $3 agent_id, # $4 data.metadata or {}, # $5 data.name, # $6 data.description, # $7 data.inherit_tools, # $8 data.input_schema or {}, # $9 ] # Generate workflows from task data workflows_spec = task_to_spec(data).model_dump(mode="json") workflow_params = [] for workflow in workflows_spec.get("workflows", []): workflow_name = workflow.get("name") steps = workflow.get("steps", []) for step_idx, step in enumerate(steps): workflow_params.append([ developer_id, # $1 task_id, # $2 workflow_name, # $3 step_idx, # $4 step["kind_"], # $5 step, # $6 ]) return [ ( update_task_query, update_task_params, "fetchrow", ), ( workflows_query, workflow_params, "fetchmany", ), ( get_task_query, [developer_id, task_id], "fetchrow", ), ] ================================================ FILE: src/agents-api/agents_api/queries/tools/__init__.py ================================================ """ The `tools` module provides functionalities for managing tools within the system. It includes operations essential for the lifecycle management of tools and their properties, such as: - Creating tools: Handled by `create_tools.py`, which manages the creation of new tools, including single and multiple tools. - Deleting tools: Facilitated by `delete_tools.py`, offering functionality to delete tools by their unique identifiers. - Embedding tools: Managed by `embed_tools.py`, which handles the embedding of tools with specific properties or data. - Listing tools: Provided by `list_tools.py`, offering the capability to list tools, potentially with filtering and pagination. This module is crucial for the effective management and utilization of tools in the application, ensuring that tools can be created, managed, and utilized efficiently. """ from .create_tools import create_tools from .delete_tool import delete_tool from .get_tool import get_tool from .get_tool_args_from_metadata import get_tool_args_from_metadata from .list_tools import list_tools from .patch_tool import patch_tool from .update_tool import update_tool __all__ = [ "create_tools", "delete_tool", "get_tool", "get_tool_args_from_metadata", "list_tools", "patch_tool", "update_tool", ] ================================================ FILE: src/agents-api/agents_api/queries/tools/create_tools.py ================================================ """This module contains functions for creating tools in the PostgreSQL database.""" from uuid import UUID from beartype import beartype from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateToolRequest, Tool from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for creating tools tools_query = """INSERT INTO tools ( developer_id, agent_id, tool_id, type, name, spec, description ) SELECT $1, $2, $3, $4, $5, $6, $7 WHERE NOT EXISTS ( SELECT null FROM tools WHERE (agent_id, name) = ($2, $5) ) RETURNING * """ @rewrap_exceptions(common_db_exceptions("tool", ["create"])) @wrap_in_class( Tool, transform=lambda d: { "id": d.pop("tool_id"), d["type"]: d.pop("spec"), **d, }, ) @query_metrics("create_tools") @pg_query @beartype async def create_tools( *, developer_id: UUID, agent_id: UUID, data: list[CreateToolRequest], ) -> tuple[str, list, str]: """ Constructs an SQL query for inserting tool records into the 'tools' relation in the PostgreSQL database. Parameters: developer_id (UUID): The unique identifier for the developer. agent_id (UUID): The unique identifier for the agent. data (list[CreateToolRequest]): A list of function definitions to be inserted. Returns: list[Tool] """ assert all( getattr(tool, tool.type) is not None for tool in data if hasattr(tool, tool.type) ), "Tool spec must be passed" tools_data = [ [ developer_id, str(agent_id), str(uuid7()), tool.type, tool.name, getattr(tool, tool.type) and getattr(tool, tool.type).model_dump(mode="json"), tool.description if hasattr(tool, "description") else None, ] for tool in data ] return ( tools_query, tools_data, "fetchmany", ) ================================================ FILE: src/agents-api/agents_api/queries/tools/delete_tool.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for deleting a tool tools_query = """ DELETE FROM tools WHERE developer_id = $1 AND agent_id = $2 AND tool_id = $3 RETURNING * """ @rewrap_exceptions(common_db_exceptions("tool", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: {"id": d["tool_id"], "deleted_at": utcnow(), "jobs": [], **d}, ) @pg_query @beartype async def delete_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, ) -> tuple[str, list]: developer_id = str(developer_id) agent_id = str(agent_id) tool_id = str(tool_id) return ( tools_query, [ developer_id, agent_id, tool_id, ], ) ================================================ FILE: src/agents-api/agents_api/queries/tools/get_tool.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Tool from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for getting a tool tools_query = """ SELECT * FROM tools WHERE developer_id = $1 AND agent_id = $2 AND tool_id = $3 LIMIT 1 """ @rewrap_exceptions(common_db_exceptions("tool", ["get"])) @wrap_in_class( Tool, transform=lambda d: { "id": d.pop("tool_id"), d["type"]: d.pop("spec"), **d, }, one=True, ) @pg_query @beartype async def get_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, ) -> tuple[str, list]: developer_id = str(developer_id) agent_id = str(agent_id) tool_id = str(tool_id) return ( tools_query, [ developer_id, agent_id, tool_id, ], ) ================================================ FILE: src/agents-api/agents_api/queries/tools/get_tool_args_from_metadata.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for getting tool args from metadata tools_args_for_task_query = """ SELECT COALESCE(agents_md || tasks_md, agents_md, tasks_md, '{}') as values FROM ( SELECT CASE WHEN $3 = 'x-integrations-args' then metadata->'x-integrations-args' WHEN $3 = 'x-api_call-args' then metadata->'x-api_call-args' WHEN $3 = 'x-integrations-setup' then metadata->'x-integrations-setup' WHEN $3 = 'x-api_call-setup' then metadata->'x-api_call-setup' END AS agents_md FROM agents WHERE agent_id = $1 AND developer_id = $4 LIMIT 1 ) AS agents_md, ( SELECT CASE WHEN $3 = 'x-integrations-args' then metadata->'x-integrations-args' WHEN $3 = 'x-api_call-args' then metadata->'x-api_call-args' WHEN $3 = 'x-integrations-setup' then metadata->'x-integrations-setup' WHEN $3 = 'x-api_call-setup' then metadata->'x-api_call-setup' END AS tasks_md FROM tasks WHERE task_id = $2 AND developer_id = $4 LIMIT 1 ) AS tasks_md""" # Define the raw SQL query for getting tool args from metadata for a session tool_args_for_session_query = """ SELECT COALESCE(agents_md || sessions_md, agents_md, sessions_md, '{}') as values FROM ( SELECT CASE WHEN $3 = 'x-integrations-args' then metadata->'x-integrations-args' WHEN $3 = 'x-api_call-args' then metadata->'x-api_call-args' WHEN $3 = 'x-integrations-setup' then metadata->'x-integrations-setup' WHEN $3 = 'x-api_call-setup' then metadata->'x-api_call-setup' END AS agents_md FROM agents WHERE agent_id = $1 AND developer_id = $4 LIMIT 1 ) AS agents_md, ( SELECT CASE WHEN $3 = 'x-integrations-args' then metadata->'x-integrations-args' WHEN $3 = 'x-api_call-args' then metadata->'x-api_call-args' WHEN $3 = 'x-integrations-setup' then metadata->'x-integrations-setup' WHEN $3 = 'x-api_call-setup' then metadata->'x-api_call-setup' END AS sessions_md FROM sessions WHERE session_id = $2 AND developer_id = $4 LIMIT 1 ) AS sessions_md""" @rewrap_exceptions(common_db_exceptions("tool_metadata", ["get"])) @wrap_in_class(dict, transform=lambda x: x["values"], one=True) @pg_query @beartype async def get_tool_args_from_metadata( *, developer_id: UUID, agent_id: UUID, session_id: UUID | None = None, task_id: UUID | None = None, tool_type: Literal["integration", "api_call"] = "integration", arg_type: Literal["args", "setup", "headers"] = "args", ) -> tuple[str, list]: match session_id, task_id: case (None, task_id) if task_id is not None: return ( tools_args_for_task_query, [ agent_id, task_id, f"x-{tool_type}-{arg_type}", developer_id, ], ) case (session_id, None) if session_id is not None: return ( tool_args_for_session_query, [agent_id, session_id, f"x-{tool_type}-{arg_type}", developer_id], ) case (_, _): msg = "Either session_id or task_id must be provided" raise ValueError(msg) # AIDEV-NOTE: exhaustive match; this point should be unreachable msg = "Unreachable code in get_tool_args_from_metadata" raise RuntimeError(msg) ================================================ FILE: src/agents-api/agents_api/queries/tools/list_tools.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Tool from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for listing tools tools_query = """ SELECT * FROM tools WHERE developer_id = $1 AND agent_id = $2 ORDER BY CASE WHEN $5 = 'created_at' AND $6 = 'desc' THEN tools.created_at END DESC NULLS LAST, CASE WHEN $5 = 'created_at' AND $6 = 'asc' THEN tools.created_at END ASC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'desc' THEN tools.updated_at END DESC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'asc' THEN tools.updated_at END ASC NULLS LAST LIMIT $3 OFFSET $4; """ @rewrap_exceptions(common_db_exceptions("tool", ["list"])) @wrap_in_class( Tool, transform=lambda d: { d["type"]: { **d.pop("spec"), "name": d["name"], "description": d["description"], }, "id": d.pop("tool_id"), **d, }, ) @pg_query @beartype async def list_tools( *, developer_id: UUID, agent_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> tuple[str, list]: developer_id = str(developer_id) agent_id = str(agent_id) return ( tools_query, [ developer_id, agent_id, limit, offset, sort_by, direction, ], ) ================================================ FILE: src/agents-api/agents_api/queries/tools/patch_tool.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import PatchToolRequest, Tool from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for patching a tool tools_query = """ WITH updated_tools AS ( UPDATE tools SET type = COALESCE($4, type), name = COALESCE($5, name), description = COALESCE($6, description), spec = COALESCE($7, spec) WHERE developer_id = $1 AND agent_id = $2 AND tool_id = $3 RETURNING * ) SELECT * FROM updated_tools; """ @rewrap_exceptions(common_db_exceptions("tool", ["patch"])) @wrap_in_class( Tool, one=True, transform=lambda d: {"id": d["tool_id"], "jobs": [], **d}, ) @query_metrics("patch_tool") @pg_query @beartype async def patch_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, data: PatchToolRequest, ) -> tuple[str, list]: """ Updates the tool information for a given agent and tool ID in the 'PostgreSQL' database. Parameters: agent_id (UUID): The unique identifier of the agent. tool_id (UUID): The unique identifier of the tool to be updated. data (PatchToolRequest): The request payload containing the updated tool information. Returns: ResourceUpdatedResponse: The updated tool data. """ developer_id = str(developer_id) agent_id = str(agent_id) tool_id = str(tool_id) # Extract the tool data from the payload patch_data = data.model_dump(exclude_none=True) # Assert that only one of the tool type fields is present tool_specs = [ (tool_type, patch_data.get(tool_type)) for tool_type in ["function", "integration", "system", "api_call"] if patch_data.get(tool_type) is not None ] assert len(tool_specs) <= 1, "Invalid tool update" tool_type, tool_spec = tool_specs[0] if tool_specs else (None, None) if tool_type is not None: patch_data["type"] = patch_data.get("type", tool_type) assert patch_data["type"] == tool_type, "Invalid tool update" tool_spec = tool_spec or {} if tool_spec: del patch_data[tool_type] return ( tools_query, [ developer_id, agent_id, tool_id, tool_type, data.name, data.description, tool_spec, ], ) ================================================ FILE: src/agents-api/agents_api/queries/tools/update_tool.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import Tool, UpdateToolRequest from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for updating a tool tools_query = """ UPDATE tools SET type = $4, name = $5, description = $6, spec = $7 WHERE developer_id = $1 AND agent_id = $2 AND tool_id = $3 RETURNING *; """ @rewrap_exceptions(common_db_exceptions("tool", ["update"])) @wrap_in_class( Tool, one=True, transform=lambda d: {"id": d["tool_id"], "jobs": [], **d}, ) @query_metrics("update_tool") @pg_query @beartype async def update_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, data: UpdateToolRequest, **kwargs, ) -> tuple[str, list]: developer_id = str(developer_id) agent_id = str(agent_id) tool_id = str(tool_id) # Extract the tool data from the payload update_data = data.model_dump(exclude_none=True) # Assert that only one of the tool type fields is present tool_specs = [ (tool_type, update_data.get(tool_type)) for tool_type in ["function", "integration", "system", "api_call"] if update_data.get(tool_type) is not None ] assert len(tool_specs) <= 1, "Invalid tool update" tool_type, tool_spec = tool_specs[0] if tool_specs else (None, None) if tool_type is not None: update_data["type"] = update_data.get("type", tool_type) assert update_data["type"] == tool_type, "Invalid tool update" update_data["spec"] = tool_spec del update_data[tool_type] return ( tools_query, [ developer_id, agent_id, tool_id, tool_type, data.name, data.description, tool_spec, ], ) ================================================ FILE: src/agents-api/agents_api/queries/usage/__init__.py ================================================ """ The `usage` module within the `queries` package provides functionality for tracking token usage and costs associated with LLM API calls. This includes: - Recording prompt and completion tokens - Calculating costs based on model pricing - Storing usage data with developer attribution - Supporting both standard and custom API usage Each function in this module constructs and executes SQL queries for database operations related to usage tracking and reporting. """ from .create_usage_record import create_usage_record from .get_user_cost import get_usage_cost __all__ = [ "create_usage_record", "get_usage_cost", ] ================================================ FILE: src/agents-api/agents_api/queries/usage/create_usage_record.py ================================================ """ This module contains functionality for creating usage records in the PostgreSQL database. It tracks token usage and costs for LLM API calls. """ from typing import Any from uuid import UUID from beartype import beartype from litellm import cost_per_token, model_cost from ...common.utils.db_exceptions import common_db_exceptions from ...env import llama_model_multiplier from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions FALLBACK_PRICING = { # Meta Llama models "meta-llama/llama-4-scout": { "api_request": 0.08 / 1000000, "api_response": 0.45 / 1000000, }, "meta-llama/llama-4-maverick": { "api_request": 0.19 / 1000000, "api_response": 0.85 / 1000000, }, "meta-llama/llama-4-maverick:free": { "api_request": 0.0 / 1000000, "api_response": 0.0 / 1000000, }, # Qwen model "qwen/qwen-2.5-72b-instruct": { "api_request": 0.7 / 1000000, "api_response": 0.7 / 1000000, }, # Sao10k model "sao10k/l3.3-euryale-70b": { "api_request": 0.7 / 1000000, "api_response": 0.8 / 1000000, }, "sao10k/l3.1-euryale-70b": { "api_request": 0.7 / 1000000, "api_response": 0.8 / 1000000, }, # eva-unit-01 model "openrouter/eva-unit-01/eva-llama-3.33-70b": { "api_request": 4 / 1000000, "api_response": 6 / 1000000, }, "openrouter/eva-unit-01/eva-qwen-2.5-72b": { "api_request": 0.9 / 1000000, "api_response": 1.2 / 1000000, }, # mistral-large-2411 model "openrouter/mistralai/mistral-large-2411": { "api_request": 2 / 1000000, "api_response": 6 / 1000000, }, } # Calculate average of non-zero input costs input_costs_litellm = [ model_cost[model].get("input_cost_per_token", 0) for model in model_cost if model_cost[model].get("input_cost_per_token", 0) > 0 ] input_costs_fallback = [ pricing["api_request"] for pricing in FALLBACK_PRICING.values() if pricing["api_request"] > 0 ] combined_input_costs = input_costs_litellm + input_costs_fallback AVG_INPUT_COST_PER_TOKEN = ( sum(combined_input_costs) / len(combined_input_costs) if combined_input_costs else 0 ) # Calculate average of non-zero output costs output_costs_litellm = [ model_cost[model].get("output_cost_per_token", 0) for model in model_cost if model_cost[model].get("output_cost_per_token", 0) > 0 ] output_costs_fallback = [ pricing["api_response"] for pricing in FALLBACK_PRICING.values() if pricing["api_response"] > 0 ] combined_output_costs = output_costs_litellm + output_costs_fallback AVG_OUTPUT_COST_PER_TOKEN = ( sum(combined_output_costs) / len(combined_output_costs) if combined_output_costs else 0 ) # Define the raw SQL query usage_query = """ INSERT INTO usage ( developer_id, model, prompt_tokens, completion_tokens, cost, estimated, custom_api_used, metadata ) VALUES ( $1, -- developer_id $2, -- model $3, -- prompt_tokens $4, -- completion_tokens $5, -- cost $6, -- estimated $7, -- custom_api_used $8 -- metadata ) RETURNING *; """ @rewrap_exceptions(common_db_exceptions("usage", ["create"])) @query_metrics("create_usage_record") @pg_query @beartype async def create_usage_record( *, developer_id: UUID, model: str, prompt_tokens: int, completion_tokens: int, custom_api_used: bool = False, estimated: bool = False, metadata: dict[str, Any] | None = None, is_llama_model: bool = False, ) -> tuple[str, list]: """ Creates a usage record to track token usage and costs. Parameters: developer_id (UUID): The unique identifier for the developer. model (str): The model used for the API call. prompt_tokens (int): Number of tokens in the prompt. completion_tokens (int): Number of tokens in the completion. custom_api_used (bool): Whether a custom API key was used. estimated (bool): Whether the token count is estimated. metadata (dict | None): Additional metadata about the usage. is_llama_model (bool): Whether the model is a Llama model. Returns: tuple[str, list]: SQL query and parameters for creating the usage record. """ # Calculate cost based on token usage # For custom API keys, we still track usage but mark it as such total_cost = 0.0 try: prompt_cost, completion_cost = cost_per_token( model, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens ) total_cost = prompt_cost + completion_cost except Exception: estimated = True if model in FALLBACK_PRICING: total_cost = ( FALLBACK_PRICING[model]["api_request"] * prompt_tokens + FALLBACK_PRICING[model]["api_response"] * completion_tokens ) else: total_cost = ( AVG_INPUT_COST_PER_TOKEN * prompt_tokens + AVG_OUTPUT_COST_PER_TOKEN * completion_tokens ) print(f"No fallback pricing found for model {model}, using avg costs: {total_cost}") if is_llama_model: total_cost = total_cost * llama_model_multiplier params = [ developer_id, model, prompt_tokens, completion_tokens, total_cost, estimated, custom_api_used, metadata or {}, ] return ( usage_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/usage/get_user_cost.py ================================================ """ This module contains functionality for creating usage records in the PostgreSQL database. It tracks token usage and costs for LLM API calls. """ from typing import Literal from uuid import UUID from beartype import beartype from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..utils import pg_query, rewrap_exceptions, wrap_in_class usage_query = """ SELECT COALESCE(developer_id, $1) as developer_id, COALESCE(active, TRUE) as active, COALESCE(tags, '{}') as tags, COALESCE(monthly_cost, 0.0) AS cost, COALESCE(bucket_start, NOW()) AS month FROM ( SELECT developer_id, active, tags, monthly_cost, bucket_start FROM developer_cost_monthly WHERE developer_id = $1 ORDER BY bucket_start DESC LIMIT 1 ) as subq UNION ALL SELECT $1 as developer_id, TRUE as active, '{}' as tags, 0.0 AS cost, NOW() AS month WHERE NOT EXISTS ( SELECT 1 FROM developer_cost_monthly WHERE developer_id = $1 ) LIMIT 1; """ @rewrap_exceptions(common_db_exceptions("usage", ["get"])) @wrap_in_class( dict, one=True, ) @query_metrics("get_usage_cost") @pg_query @beartype async def get_usage_cost( *, developer_id: UUID, ) -> tuple[str, list, Literal["fetch", "fetchmany", "fetchrow"]]: """ Get the cost of a developer's usage. Parameters: developer_id (UUID): The unique identifier for the developer. Returns: tuple[str, list]: SQL query and parameters for creating the usage record. """ return ( usage_query, [ developer_id, ], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/users/__init__.py ================================================ """ The `user` module within the `queries` package provides SQL query functions for managing users in the TimescaleDB database. This includes operations for: - Creating new users - Updating existing users - Retrieving user details - Listing users with filtering and pagination - Deleting users """ from .create_or_update_user import create_or_update_user from .create_user import create_user from .delete_user import delete_user from .get_user import get_user from .list_users import list_users from .patch_user import patch_user from .update_user import update_user __all__ = [ "create_or_update_user", "create_user", "delete_user", "get_user", "list_users", "patch_user", "update_user", ] ================================================ FILE: src/agents-api/agents_api/queries/users/create_or_update_user.py ================================================ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import CreateOrUpdateUserRequest, User from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query for creating or updating a user user_query = """ WITH proj AS ( -- Find project ID by canonical name SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $6 ), user_op AS ( INSERT INTO users ( developer_id, user_id, name, about, metadata ) VALUES ( $1, -- developer_id $2, -- user_id $3, -- name $4, -- about $5::jsonb -- metadata ) ON CONFLICT (developer_id, user_id) DO UPDATE SET name = EXCLUDED.name, about = EXCLUDED.about, metadata = EXCLUDED.metadata RETURNING * ), project_association AS ( -- Create or update project association INSERT INTO project_users ( project_id, developer_id, user_id ) SELECT p.project_id, $1, $2 FROM proj p WHERE p.project_id IS NOT NULL ON CONFLICT (project_id, user_id) DO NOTHING RETURNING 1 ) SELECT u.*, p.canonical_name AS project FROM user_op u LEFT JOIN proj p ON TRUE; """ @rewrap_exceptions(common_db_exceptions("user", ["create_or_update"])) @wrap_in_class( User, one=True, transform=lambda d: { **d, "id": d["user_id"], }, ) @query_metrics("create_or_update_user") @pg_query @beartype async def create_or_update_user_query( *, developer_id: UUID, user_id: UUID, data: CreateOrUpdateUserRequest, ) -> tuple[str, list]: """ Constructs an SQL query to create or update a user. Args: developer_id (UUID): The UUID of the developer. user_id (UUID): The UUID of the user. data (CreateOrUpdateUserRequest): The user data to insert or update. Returns: tuple[str, list]: SQL query and parameters. Raises: HTTPException: If developer doesn't exist (404) or on unique constraint violation (409) """ params = [ developer_id, # $1 user_id, # $2 data.name, # $3 data.about, # $4 data.metadata or {}, # $5 data.project or "default", # $6 ] return ( user_query, params, ) async def create_or_update_user( *, developer_id: UUID, user_id: UUID, data: CreateOrUpdateUserRequest, connection_pool: asyncpg.Pool | None = None, ) -> User: # Get project (default if not specified) project_canonical_name = data.project or "default" # Check if the project exists project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await create_or_update_user_query( developer_id=developer_id, user_id=user_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/users/create_user.py ================================================ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from uuid_extensions import uuid7 from ...autogen.openapi_model import CreateUserRequest, User from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function user_query = """ WITH new_user AS ( INSERT INTO users ( developer_id, user_id, name, about, metadata ) VALUES ( $1, -- developer_id $2, -- user_id $3, -- name $4, -- about $5::jsonb -- metadata ) RETURNING * ), proj AS ( -- Find project ID by canonical name SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $6 ), project_association AS ( -- Create association in project_users table INSERT INTO project_users ( project_id, developer_id, user_id ) SELECT p.project_id, $1, $2 FROM proj p ON CONFLICT (project_id, user_id) DO NOTHING RETURNING 1 ) SELECT u.*, p.canonical_name AS project FROM new_user u LEFT JOIN proj p ON TRUE; """ @rewrap_exceptions(common_db_exceptions("user", ["create"])) @wrap_in_class( User, one=True, transform=lambda d: { **d, "id": d["user_id"], }, ) @query_metrics("create_user") @pg_query @beartype async def create_user_query( *, developer_id: UUID, user_id: UUID | None = None, data: CreateUserRequest, ) -> tuple[str, list]: """ Constructs the SQL query to create a new user. Args: developer_id (UUID): The UUID of the developer creating the user. user_id (UUID, optional): The UUID for the new user. If None, one will be generated. data (CreateUserRequest): The user data to insert. Returns: tuple[str, list]: A tuple containing the SQL query and its parameters. """ return ( user_query, [ developer_id, # $1 user_id or uuid7(), # $2 data.name, # $3 data.about, # $4 data.metadata or {}, # $5 data.project or "default", # $6 ], ) async def create_user( *, developer_id: UUID, user_id: UUID | None = None, data: CreateUserRequest, connection_pool: asyncpg.Pool | None = None, ) -> User: # Get project (default if not specified) project_canonical_name = data.project or "default" # Check if the project exists project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool, ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await create_user_query( developer_id=developer_id, user_id=user_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/users/delete_user.py ================================================ from uuid import UUID from beartype import beartype from ...autogen.openapi_model import ResourceDeletedResponse from ...common.utils.datetime import utcnow from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function delete_query = """ WITH deleted_file_owners AS ( DELETE FROM file_owners WHERE developer_id = $1 AND owner_type = 'user' AND owner_id = $2 ), deleted_doc_owners AS ( DELETE FROM doc_owners WHERE developer_id = $1 AND owner_type = 'user' AND owner_id = $2 ), deleted_files AS ( DELETE FROM files WHERE developer_id = $1 AND file_id IN ( SELECT file_id FROM file_owners WHERE developer_id = $1 AND owner_type = 'user' AND owner_id = $2 ) ), deleted_docs AS ( DELETE FROM docs WHERE developer_id = $1 AND doc_id IN ( SELECT doc_id FROM doc_owners WHERE developer_id = $1 AND owner_type = 'user' AND owner_id = $2 ) ) DELETE FROM users WHERE developer_id = $1 AND user_id = $2 RETURNING user_id, developer_id; """ @rewrap_exceptions(common_db_exceptions("user", ["delete"])) @wrap_in_class( ResourceDeletedResponse, one=True, transform=lambda d: { **d, "id": d["user_id"], "deleted_at": utcnow(), "jobs": [], }, ) @pg_query @beartype async def delete_user(*, developer_id: UUID, user_id: UUID) -> tuple[str, list]: """ Constructs optimized SQL query to delete a user and related data. Uses primary key for efficient deletion. Args: developer_id (UUID): The developer's UUID user_id (UUID): The user's UUID Returns: tuple[str, list]: SQL query and parameters """ return ( delete_query, [developer_id, user_id], ) ================================================ FILE: src/agents-api/agents_api/queries/users/get_user.py ================================================ from typing import Literal from uuid import UUID from beartype import beartype from ...autogen.openapi_model import User from ...common.utils.db_exceptions import common_db_exceptions from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function user_query = """ SELECT u.user_id as id, -- user_id u.developer_id, -- developer_id u.name, -- name u.about, -- about u.metadata, -- metadata u.created_at, -- created_at u.updated_at, -- updated_at p.canonical_name AS project -- project FROM users u LEFT JOIN project_users pu ON u.user_id = pu.user_id AND u.developer_id = pu.developer_id LEFT JOIN projects p ON pu.project_id = p.project_id WHERE u.developer_id = $1 AND u.user_id = $2; """ @rewrap_exceptions(common_db_exceptions("user", ["get"])) @wrap_in_class(User, one=True) @pg_query @beartype async def get_user( *, developer_id: UUID, user_id: UUID, ) -> tuple[str, list, Literal["fetchrow", "fetchmany", "fetch"]]: """ Constructs an optimized SQL query to retrieve a user's details. Uses the primary key index (developer_id, user_id) for efficient lookup. Args: developer_id (UUID): The UUID of the developer. user_id (UUID): The UUID of the user to retrieve. Returns: tuple[str, list, str]: SQL query, parameters, and fetch mode. """ return ( user_query, [developer_id, user_id], "fetchrow", ) ================================================ FILE: src/agents-api/agents_api/queries/users/list_users.py ================================================ from typing import Annotated, Literal from uuid import UUID from beartype import beartype from beartype.vale import Is from ...autogen.openapi_model import User from ...common.utils.db_exceptions import common_db_exceptions from ..utils import make_num_validator, pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function user_query = """ WITH filtered_users AS ( SELECT u.user_id as id, -- user_id u.developer_id, -- developer_id u.name, -- name u.about, -- about u.metadata, -- metadata u.created_at, -- created_at u.updated_at, -- updated_at p.canonical_name AS project -- project FROM users u LEFT JOIN project_users pu ON u.user_id = pu.user_id AND u.developer_id = pu.developer_id LEFT JOIN projects p ON pu.project_id = p.project_id WHERE u.developer_id = $1 AND ($4::jsonb IS NULL OR u.metadata @> $4) AND ($7::text IS NULL OR p.canonical_name = $7) ) SELECT * FROM filtered_users ORDER BY CASE WHEN $5 = 'created_at' AND $6 = 'asc' THEN created_at END ASC NULLS LAST, CASE WHEN $5 = 'created_at' AND $6 = 'desc' THEN created_at END DESC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'asc' THEN updated_at END ASC NULLS LAST, CASE WHEN $5 = 'updated_at' AND $6 = 'desc' THEN updated_at END DESC NULLS LAST LIMIT $2 OFFSET $3; """ @rewrap_exceptions(common_db_exceptions("user", ["list"])) @wrap_in_class(User) @pg_query @beartype async def list_users( *, developer_id: UUID, limit: Annotated[ int, Is[ make_num_validator( min_value=1, max_value=100, err_msg="Limit must be between 1 and 100" ) ], ] = 100, offset: Annotated[ int, Is[make_num_validator(min_value=0, err_msg="Offset must be non-negative")] ] = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict | None = None, project: str | None = None, ) -> tuple[str, list]: """ Constructs an optimized SQL query for listing users with pagination and filtering. Uses indexes on developer_id and metadata for efficient querying. Args: developer_id (UUID): The developer's UUID limit (int): Maximum number of records to return offset (int): Number of records to skip sort_by (str): Field to sort by direction (str): Sort direction metadata_filter (dict, optional): Metadata-based filters project (str, optional): Filter users by project canonical name Returns: tuple[str, list]: SQL query and parameters """ params = [ developer_id, # $1 limit, # $2 offset, # $3 metadata_filter, # Will be NULL if not provided sort_by, # $5 direction, # $6 project, # $7 ] return ( user_query, params, ) ================================================ FILE: src/agents-api/agents_api/queries/users/patch_user.py ================================================ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import PatchUserRequest, User from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function user_query = """ WITH proj AS ( -- Find project ID by canonical name if project is being updated SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $6 AND $6 IS NOT NULL ), project_exists AS ( -- Check if the specified project exists SELECT CASE WHEN $6 IS NULL THEN TRUE -- No project specified, so exists check passes WHEN EXISTS (SELECT 1 FROM proj) THEN TRUE -- Project exists ELSE FALSE -- Project specified but doesn't exist END AS exists ), user_update AS ( -- Only proceed with update if project exists UPDATE users SET name = CASE WHEN $3::text IS NOT NULL THEN $3 -- name ELSE name END, about = CASE WHEN $4::text IS NOT NULL THEN $4 -- about ELSE about END, metadata = CASE WHEN $5::jsonb IS NOT NULL THEN metadata || $5 -- metadata ELSE metadata END WHERE developer_id = $1 AND user_id = $2 AND (SELECT exists FROM project_exists) RETURNING * ), project_association AS ( -- Create or update project association if project is being updated INSERT INTO project_users ( project_id, developer_id, user_id ) SELECT p.project_id, $1, $2 FROM proj p ON CONFLICT (project_id, user_id) DO NOTHING RETURNING 1 ), old_associations AS ( -- Remove any previous project associations if we're updating with a new project DELETE FROM project_users pu WHERE pu.developer_id = $1 AND pu.user_id = $2 AND EXISTS (SELECT 1 FROM proj) -- Only delete if we have a new project AND NOT EXISTS ( SELECT 1 FROM proj p WHERE p.project_id = pu.project_id ) ) SELECT (SELECT exists FROM project_exists) AS project_exists, u.*, COALESCE( (SELECT canonical_name FROM proj), (SELECT canonical_name FROM projects p JOIN project_users pu ON p.project_id = pu.project_id WHERE pu.developer_id = $1 AND pu.user_id = $2 LIMIT 1), 'default' ) AS project FROM user_update u; """ @rewrap_exceptions(common_db_exceptions("user", ["patch"])) @wrap_in_class( User, one=True, transform=lambda d: { **d, "id": d["user_id"], }, ) @query_metrics("patch_user") @pg_query @beartype async def patch_user_query( *, developer_id: UUID, user_id: UUID, data: PatchUserRequest, ) -> tuple[str, list]: """ Constructs an optimized SQL query for partial user updates. Uses primary key for efficient update and jsonb_merge for metadata. Includes project existence check directly in the SQL. Args: developer_id (UUID): The developer's UUID user_id (UUID): The user's UUID data (PatchUserRequest): Partial update data Returns: tuple[str, list]: SQL query and parameters """ # SQL will return project_exists status in the result # If false, the row won't be updated, and we'll raise an appropriate exception # in the error handling layer params = [ developer_id, # $1 user_id, # $2 data.name, # $3. Will be NULL if not provided data.about, # $4. Will be NULL if not provided data.metadata, # $5. Will be NULL if not provided data.project or "default", # $6. Use default if None is provided ] return ( user_query, params, ) async def patch_user( *, developer_id: UUID, user_id: UUID, data: PatchUserRequest, connection_pool: asyncpg.Pool | None = None, ) -> User: project_canonical_name = data.project or "default" project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await patch_user_query( developer_id=developer_id, user_id=user_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/users/update_user.py ================================================ from uuid import UUID import asyncpg from beartype import beartype from fastapi import HTTPException from ...autogen.openapi_model import UpdateUserRequest, User from ...common.utils.db_exceptions import common_db_exceptions from ...metrics.counters import query_metrics from ..projects.project_exists import project_exists from ..utils import pg_query, rewrap_exceptions, wrap_in_class # Define the raw SQL query outside the function user_query = """ WITH proj AS ( -- Find project ID by canonical name if project is provided SELECT project_id, canonical_name FROM projects WHERE developer_id = $1 AND canonical_name = $6 AND $6 IS NOT NULL ), project_exists AS ( -- Check if the specified project exists SELECT CASE WHEN $6 IS NULL THEN TRUE -- No project specified, so exists check passes WHEN EXISTS (SELECT 1 FROM proj) THEN TRUE -- Project exists ELSE FALSE -- Project specified but doesn't exist END AS exists ), user_update AS ( -- Only proceed with update if project exists UPDATE users SET name = $3, -- name about = $4, -- about metadata = $5 -- metadata WHERE developer_id = $1 -- developer_id AND user_id = $2 -- user_id AND (SELECT exists FROM project_exists) RETURNING * ), project_association AS ( -- Create or update project association if project is provided and exists INSERT INTO project_users ( project_id, developer_id, user_id ) SELECT p.project_id, $1, $2 FROM proj p ON CONFLICT (project_id, user_id) DO NOTHING RETURNING 1 ), old_associations AS ( -- Remove any previous project associations if we're updating with a new project DELETE FROM project_users pu WHERE pu.developer_id = $1 AND pu.user_id = $2 AND EXISTS (SELECT 1 FROM proj) -- Only delete if we have a new project AND NOT EXISTS ( SELECT 1 FROM proj p WHERE p.project_id = pu.project_id ) ) SELECT (SELECT exists FROM project_exists) AS project_exists, u.*, COALESCE( (SELECT canonical_name FROM proj), (SELECT canonical_name FROM projects p JOIN project_users pu ON p.project_id = pu.project_id WHERE pu.developer_id = $1 AND pu.user_id = $2 LIMIT 1), 'default' ) AS project FROM user_update u; """ @rewrap_exceptions(common_db_exceptions("user", ["update"])) @wrap_in_class( User, one=True, transform=lambda d: { **d, "id": d["user_id"], }, ) @query_metrics("update_user") @pg_query @beartype async def update_user_query( *, developer_id: UUID, user_id: UUID, data: UpdateUserRequest, ) -> tuple[str, list]: """ Constructs an optimized SQL query to update a user's details. Uses primary key for efficient update. Includes project existence check directly in the SQL. Args: developer_id (UUID): The developer's UUID user_id (UUID): The user's UUID data (UpdateUserRequest): Updated user data Returns: tuple[str, list]: SQL query and parameters """ params = [ developer_id, user_id, data.name, data.about, data.metadata or {}, data.project or "default", ] return ( user_query, params, ) async def update_user( *, developer_id: UUID, user_id: UUID, data: UpdateUserRequest, connection_pool: asyncpg.Pool | None = None, ) -> User: project_canonical_name = data.project or "default" project_exists_result = await project_exists( developer_id, project_canonical_name, connection_pool=connection_pool ) if not project_exists_result[0]["project_exists"]: raise HTTPException( status_code=404, detail=f"Project '{project_canonical_name}' not found" ) return await update_user_query( developer_id=developer_id, user_id=user_id, data=data, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/queries/utils.py ================================================ # AIDEV-NOTE: This module contains utility functions and decorators for database queries and data processing. import concurrent.futures import inspect import socket import time from collections.abc import Awaitable, Callable from functools import wraps from typing import ( Any, Literal, NotRequired, ParamSpec, TypeVar, cast, ) import asyncpg import namer from asyncpg import Record from beartype import beartype from fastapi import HTTPException from pydantic import BaseModel from typing_extensions import TypedDict from agents_api.common.exceptions.validation import QueryParamsValidationError from ..app import app from ..env import query_timeout P = ParamSpec("P") T = TypeVar("T") ModelT = TypeVar("ModelT", bound=BaseModel) # AIDEV-NOTE: Generates a unique, readable canonical name. def generate_canonical_name() -> str: """Generate canonical name""" categories: list[str] = ["astronomy", "physics", "scientists", "math"] return namer.generate(separator="_", suffix_length=3, category=categories) class AsyncPGFetchArgs(TypedDict): query: str args: list[Any] timeout: NotRequired[float | None] type SQLQuery = str type FetchMethod = Literal["fetch", "fetchmany", "fetchrow"] type PGQueryArgs = tuple[SQLQuery, list[Any]] | tuple[SQLQuery, list[Any], FetchMethod] type PreparedPGQueryArgs = tuple[FetchMethod, AsyncPGFetchArgs] type BatchedPreparedPGQueryArgs = list[PreparedPGQueryArgs] # AIDEV-NOTE: Prepares and formats PostgreSQL query arguments for batch execution. @beartype def prepare_pg_query_args( query_args: PGQueryArgs | list[PGQueryArgs], ) -> BatchedPreparedPGQueryArgs: batch = [] query_args = [query_args] if isinstance(query_args, tuple) else query_args for query_arg in query_args: match query_arg: case (query, variables) | (query, variables, "fetch"): batch.append(( "fetch", AsyncPGFetchArgs(query=query, args=variables, timeout=query_timeout), )) case (query, variables, "fetchmany"): batch.append(( "fetchmany", AsyncPGFetchArgs(query=query, args=[variables], timeout=query_timeout), )) case (query, variables, "fetchrow"): batch.append(( "fetchrow", AsyncPGFetchArgs(query=query, args=variables, timeout=query_timeout), )) case _: msg = "Invalid query arguments" raise ValueError(msg) return batch # AIDEV-NOTE: Decorator for executing PostgreSQL queries within a transaction. # Handles connection pooling, error handling, and result formatting. @beartype def pg_query[**P]( func: Callable[P, PGQueryArgs | list[PGQueryArgs]] | None = None, debug: bool | None = None, only_on_error: bool = False, timeit: bool = False, return_index: int = -1, ) -> Callable[..., Callable[P, list[Record]]] | Callable[P, list[Record]]: def pg_query_dec( func: Callable[P, PGQueryArgs | list[PGQueryArgs]], ) -> Callable[..., Callable[P, list[Record]]]: """ Decorator that wraps a function that takes arbitrary arguments, and returns a (query string, variables) tuple. The wrapped function should additionally take a client keyword argument and then run the query using the client, returning a Record. """ from pprint import pprint @wraps(func) async def wrapper( *args: P.args, connection_pool: asyncpg.Pool | None = None, **kwargs: P.kwargs, ) -> list[Record]: query_args = await func(*args, **kwargs) batch = prepare_pg_query_args(query_args) not only_on_error and debug and pprint(batch) # Run the query pool = ( connection_pool if connection_pool is not None else cast(asyncpg.Pool, getattr(app.state, "postgres_pool", None)) ) try: async with pool.acquire() as conn, conn.transaction(): start = timeit and time.perf_counter() all_results = [] for method_name, payload in batch: method = getattr(conn, method_name) query = payload["query"] args = sanitize_string(payload["args"]) timeout = payload.get("timeout") results: list[Record] = await method(query, *args, timeout=timeout) if method_name == "fetchrow": results = ( [results] if results is not None and results.get("bool", False) is not None and results.get("exists", True) else [] ) if method_name == "fetchrow" and len(results) == 0: msg = "No data found" raise asyncpg.NoDataFoundError(msg) all_results.append(results) end = timeit and time.perf_counter() timeit and print(f"PostgreSQL query time: {end - start:.2f} seconds") except Exception as e: if only_on_error and debug: pprint(batch) debug and print(repr(e)) connection_error = isinstance( e, (socket.gaierror), ) if connection_error: exc = HTTPException( status_code=429, detail="Resource busy. Please try again later.", ) raise exc from e raise # Return results from specified index results_to_return = all_results[return_index] if all_results else [] not only_on_error and debug and pprint(results_to_return) return results_to_return # Set the wrapped function as an attribute of the wrapper, # forwards the __wrapped__ attribute if it exists. setattr(wrapper, "__wrapped__", getattr(func, "__wrapped__", func)) return wrapper if func is not None and callable(func): return pg_query_dec(func) return pg_query_dec # AIDEV-NOTE: Sanitizes strings to remove null characters for PostgreSQL compatibility. def sanitize_string(value: Any) -> Any: """ Remove null characters (\u0000) from strings for PostgreSQL compatibility. Args: value: Any data structure that might contain strings with null characters Returns: Data with null characters removed from strings """ if isinstance(value, str): return value.replace("\u0000", "") if isinstance(value, dict): return {key: sanitize_string(val) for key, val in value.items()} if isinstance(value, list): return [sanitize_string(item) for item in value] if isinstance(value, tuple): return tuple(sanitize_string(item) for item in value) return value # AIDEV-NOTE: Decorator to wrap query results in Pydantic models. def wrap_in_class( cls: type[ModelT] | Callable[..., ModelT], one: bool = False, maybe_one: bool = False, transform: Callable[[dict], dict] | None = None, ) -> Callable[..., Callable[..., ModelT | list[ModelT] | None]]: """ Decorator that wraps database query results into Pydantic model instances. Args: cls: The Pydantic model class or callable that constructs the model one: If True, expects exactly one result and returns a single model instance maybe_one: If True, returns None if no results, a single model if one result, and raises ValueError if multiple results transform: Optional function to transform each record before model instantiation Returns: A decorator that transforms query results into model instances Raises: ValueError: If one=True and not exactly one result is returned, or if maybe_one=True and multiple results are returned """ def _return_data(rec: list[Record]) -> ModelT | list[ModelT] | None: data = [dict(r.items()) for r in rec] # AIDEV-NOTE: initialize transformer function once per call transform_fn = transform or (lambda x: x) if maybe_one: if len(data) == 0: return None if len(data) == 1: return cls(**transform_fn(data[0])) msg = f"Expected one result or none, got {len(data)}" raise ValueError(msg) if one: assert len(data) == 1, f"Expected one result, got {len(data)}" obj: ModelT = cls(**transform_fn(data[0])) return obj objs: list[ModelT] = [cls(**item) for item in map(transform_fn, data)] return objs def decorator( func: Callable[P, list[Record] | Awaitable[list[Record]]], ) -> Callable[P, ModelT | list[ModelT] | None]: @wraps(func) def wrapper(*args: P.args, **kwargs: P.kwargs) -> ModelT | list[ModelT] | None: return _return_data(func(*args, **kwargs)) @wraps(func) async def async_wrapper( *args: P.args, **kwargs: P.kwargs ) -> ModelT | list[ModelT] | None: return _return_data(await func(*args, **kwargs)) # Set the wrapped function as an attribute of the wrapper, # forwards the __wrapped__ attribute if it exists. setattr(wrapper, "__wrapped__", getattr(func, "__wrapped__", func)) setattr(async_wrapper, "__wrapped__", getattr(func, "__wrapped__", func)) return async_wrapper if inspect.iscoroutinefunction(func) else wrapper return decorator # AIDEV-NOTE: Decorator to rewrap specific exceptions raised by a function. def rewrap_exceptions( mapping: dict[ type[BaseException] | Callable[[BaseException], bool], type[BaseException] | Callable[[BaseException], BaseException], ], /, ) -> Callable[..., Callable[P, T | Awaitable[T]]]: def _check_error(error): nonlocal mapping for check, transform in mapping.items(): should_catch = isinstance(error, check) if isinstance(check, type) else check(error) if should_catch: new_error = ( transform(str(error)) if isinstance(transform, type) else transform(error) ) setattr(new_error, "__cause__", error) print(error) raise new_error from error def decorator( func: Callable[P, T | Awaitable[T]], ) -> Callable[..., Callable[P, T | Awaitable[T]]]: @wraps(func) async def async_wrapper(*args: P.args, **kwargs: P.kwargs) -> T: try: result: T = await func(*args, **kwargs) except BaseException as error: _check_error(error) raise error return result @wraps(func) def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: try: result: T = func(*args, **kwargs) except BaseException as error: _check_error(error) raise error return result # Set the wrapped function as an attribute of the wrapper, # forwards the __wrapped__ attribute if it exists. setattr(wrapper, "__wrapped__", getattr(func, "__wrapped__", func)) setattr(async_wrapper, "__wrapped__", getattr(func, "__wrapped__", func)) return async_wrapper if inspect.iscoroutinefunction(func) else wrapper return decorator # AIDEV-NOTE: Runs multiple asynchronous functions concurrently. def run_concurrently( fns: list[Callable[..., Any]], *, args_list: list[tuple] | None = None, kwargs_list: list[dict] | None = None, ) -> list[Any]: # AIDEV-NOTE: avoid mutable default args; initialize to empty list if None args_list = args_list if args_list is not None else [] kwargs_list = kwargs_list if kwargs_list is not None else [] args_list = args_list or [()] * len(fns) kwargs_list = kwargs_list or [{}] * len(fns) with concurrent.futures.ThreadPoolExecutor() as executor: futures = [ executor.submit(fn, *args, **kwargs) for fn, args, kwargs in zip(fns, args_list, kwargs_list) ] return [future.result() for future in concurrent.futures.as_completed(futures)] # AIDEV-NOTE: Serializes Pydantic model data into a dictionary, handling nested models. def serialize_model_data(data: Any) -> Any: """ Recursively serialize Pydantic models and their nested structures. Args: data: Any data structure that might contain Pydantic models Returns: JSON-serializable data structure """ if hasattr(data, "model_dump"): return data.model_dump(mode="json") if isinstance(data, dict): return {key: serialize_model_data(value) for key, value in data.items()} if isinstance(data, list | tuple): return [serialize_model_data(item) for item in data] return data # AIDEV-NOTE: Builds SQL conditions for filtering based on JSONB metadata. def build_metadata_filter_conditions( base_params: list[Any], metadata_filter: dict[str, Any], table_alias: str = "" ) -> tuple[str, list[Any]]: """ Safely build SQL conditions for metadata filtering to prevent SQL injection. This function takes a base parameter list and a metadata filter dictionary, and returns a tuple containing the SQL conditions string and an updated parameter list with the metadata filter values appended. Args: base_params: The existing list of parameters for the SQL query metadata_filter: A dictionary of key-value pairs to filter by metadata table_alias: Optional table alias (e.g., "d.") to prefix to metadata column name Returns: tuple[str, list[Any]]: A tuple containing the SQL condition string and the updated parameter list """ if not metadata_filter: return "", base_params params = base_params.copy() conditions = [] metadata_col = f"{table_alias}metadata" if table_alias else "metadata" for key, value in metadata_filter.items(): param_idx_key = len(params) + 1 param_idx_value = len(params) + 2 conditions.append(f"{metadata_col}->>${param_idx_key} = ${param_idx_value}") params.extend([key, value]) sql_conditions = " AND ".join(conditions) if sql_conditions: sql_conditions = " AND " + sql_conditions return sql_conditions, params # AIDEV-NOTE: Creates a validator function for numerical ranges. def make_num_validator( min_value: int | float | None = None, max_value: int | float | None = None, err_msg: str | None = None, ): def validator(v: int | float) -> bool: # Choose appropriate error message without mutating outer err_msg if min_value is not None and v < min_value: msg = err_msg or f"Number must be greater than or equal to {min_value}" raise QueryParamsValidationError(msg) if max_value is not None and v > max_value: msg = err_msg or f"Number must be less than or equal to {max_value}" raise QueryParamsValidationError(msg) return True return validator ================================================ FILE: src/agents-api/agents_api/rec_sum/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/rec_sum/data.py ================================================ import json from pathlib import Path from typing import Any module_directory: Path = Path(__file__).parent with open(f"{module_directory}/entities_example_chat.json") as _f: entities_example_chat: Any = json.load(_f) with open(f"{module_directory}/trim_example_chat.json") as _f: trim_example_chat: Any = json.load(_f) with open(f"{module_directory}/trim_example_result.json") as _f: trim_example_result: Any = json.load(_f) with open(f"{module_directory}/summarize_example_chat.json") as _f: summarize_example_chat: Any = json.load(_f) with open(f"{module_directory}/summarize_example_result.json") as _f: summarize_example_result: Any = json.load(_f) ================================================ FILE: src/agents-api/agents_api/rec_sum/entities.py ================================================ import json from typing import Any import pandas as pd from tenacity import retry, stop_after_attempt from .data import entities_example_chat from .generate import generate from .utils import chatml, get_names_from_session ############## # Entities ## ############## entities_example_plan: str = """\ Thinking step by step: - To add context for future entries, let's outline the main entities in the session above. - In this session, as mentioned in the first message metadata, the user's name is Camille and the assistant's name is JaneBot. - They talk about Elon Musk and the banana tattoo on Camille's arm briefly.""" entities_example_result: str = """\ 1. Camille (The user): Humorous, creative, and enjoys playful banter. 2. JaneBot (The assistant): Engages in lighthearted conversation and tries to guess user's thoughts. 3. Elon Musk: Camille and JaneBot discuss the polarizing tech and space industry figure. 4. Banana Tattoo: Camille has a tattoo of a banana on their arm.""" entities_instructions: str = """\ Your goal is to identify the main entities in the session. Entities should include: - Characters in the conversation: Assistant, User1, User2 - People references or spoken about - Objects discussed about - Places of interest - ...etc Instructions: - Identify and extract important entities discussed. - You can add entities that, while not directly mentioned, are important in the context of the conversation. - Write a brief line to provide context about each entity explaining it's relevance to the conversation. - Enclose your answer inside XML tags. - See the example to get a better idea of the task.""" def make_entities_prompt( session: list[pd.Series] | list[Any], user: str = "a user", assistant: str = "gpt-4-turbo", **_, ): session = [m.to_dict() if isinstance(m, pd.Series) else m for m in session] session_json_str = json.dumps(session, indent=2) return [ f"You are given a session history of a chat between {user or 'a user'} and {assistant or 'gpt-4-turbo'}. The session is formatted in the ChatML JSON format (from OpenAI).\n\n{entities_instructions}\n\n\n{json.dumps(entities_example_chat, indent=2)}\n\n\n\n{entities_example_plan}\n\n\n\n{entities_example_result}\n", f"Begin! Write the entities as a Markdown formatted list. First write your plan inside and then the extracted entities between .\n\n\n{session_json_str}\n\n", ] @retry(stop=stop_after_attempt(2)) async def get_entities( chat_session, model: str = "gpt-4o", stop=["= 2, "Session is too short" names = get_names_from_session(chat_session) system_prompt, user_message = make_entities_prompt(chat_session, **names) messages = [chatml.system(system_prompt), chatml.user(user_message)] result = await generate( messages, model=model, stop=stop, temperature=temperature, **kwargs, ) assert "" in result["content"] result["content"] = ( result["content"].split("")[-1].replace("", "").strip() ) result["role"] = "system" result["name"] = "entities" return chatml.make(**result) ================================================ FILE: src/agents-api/agents_api/rec_sum/entities_example_chat.json ================================================ [ { "role": "system", "content": "just have a casual chat with a friend friend" }, { "role": "user", "name": "Camille", "content": "yo" }, { "role": "assistant", "name": "JaneBot", "content": "Hey, how's it going?" }, { "role": "user", "content": "what you think about elon?" }, { "role": "assistant", "content": "Elon Musk is definitely a fascinating and polarizing figure. He's accomplished a lot in the tech and space industries with companies like Tesla and SpaceX. What do you think about him?" }, { "role": "user", "content": "very polarizing, dude is nuts but in a fun way" }, { "role": "assistant", "content": "Haha, yeah, that's a pretty accurate description of him. He definitely knows how to keep things interesting and push boundaries. It's always exciting to see what he'll come up with next." }, { "role": "user", "content": "i am glad he exists" }, { "role": "assistant", "content": "For sure, he's definitely made a huge impact on various industries. It's always interesting to see how his projects and ideas continue to evolve." }, { "role": "user", "content": "what are your thoughts on bananas?" }, { "role": "assistant", "content": "I actually love bananas! They're a great snack, full of nutrients and easy to eat on the go. How about you, do you like bananas?" }, { "role": "user", "content": "super much. i have a tattoo of a banana on my arm" }, { "role": "assistant", "content": "That's awesome! A banana tattoo sounds like a fun and unique choice. It must be a great conversation starter." }, { "role": "user", "content": "anyway what number am I thinking of?" }, { "role": "assistant", "content": "Hmm, I'll take a wild guess and say you're thinking of the number 7. Did I get it right?" }, { "role": "user", "content": "no" } ] ================================================ FILE: src/agents-api/agents_api/rec_sum/generate.py ================================================ from tenacity import retry, stop_after_attempt, wait_fixed from agents_api.clients import litellm @retry(wait=wait_fixed(2), stop=stop_after_attempt(5)) async def generate( messages: list[dict], model: str = "gpt-4o", **kwargs, ) -> dict: result = await litellm.acompletion( model=model, messages=messages, **kwargs, ) return result.choices[0].message.json() ================================================ FILE: src/agents-api/agents_api/rec_sum/summarize.py ================================================ import json from tenacity import retry, stop_after_attempt from .data import summarize_example_chat, summarize_example_result from .generate import generate from .utils import add_indices, chatml, get_names_from_session ########## # summarize ## ########## summarize_example_plan: str = """\ Planning step by step: - We can replace entries 1,2,3,4 with a summary of those messages. - We can replace entries 5,6,7,8 similarly. - It could be disruptive to remove messages 9-16 because that might lose the joke's context. - We can safely summarize entries 17,18 without losing context. - We should keep 21 because it's given by the user and they might ask about it again. - We should keep the assistant's response in message 22 to keep the context. - Messages 23-32 are repetitive and can be summarized. - We should retain message 33 since it's a direct request from the user. - We can safely summarize message 34's essay into just the salient points only.""" summarize_instructions: str = """\ Your goal is to compactify the history by coalescing redundant information in messages into their summary in order to reduce its size and save costs. Instructions: - Combine multiple messages into summaries when possible as long as that doesn't disrupt the structure of the session. - You can convert large messages (such as an essay) into a list of points. - Do not summarize content that the user shared since it might be relevant to future messages. - Make sure to preserve the tone of the conversation and its flow. Refer to the example and do EXACTLY as shown. - VERY IMPORTANT: Add the indices of messages that are being summarized so that those messages can then be removed from the session otherwise, there'll be no way to identify which messages to remove. See example for more details.""" def make_summarize_prompt( session, user: str = "a user", assistant: str = "gpt-4-turbo", **_ ) -> list[str]: return [ f"You are given a session history of a chat between {user or 'a user'} and {assistant or 'gpt-4-turbo'}. The session is formatted in the ChatML JSON format (from OpenAI).\n\n{summarize_instructions}\n\n\n{json.dumps(add_indices(summarize_example_chat), indent=2)}\n\n\n\n{summarize_example_plan}\n\n\n\n{json.dumps(summarize_example_result, indent=2)}\n", f"Begin! Write the summarized messages as a json list just like the example above. First write your plan inside and then your answer between . Don't forget to add the indices of the messages being summarized alongside each summary.\n\n\n{json.dumps(add_indices(session), indent=2)}\n\n", ] @retry(stop=stop_after_attempt(2)) async def summarize_messages( chat_session, model: str = "gpt-4o", stop=["= 2, "Session is too short" offset = 0 # Remove the system prompt if present if chat_session[0]["role"] == "system" and chat_session[0].get("name") != "entities": chat_session = chat_session[1:] # The indices are not matched up correctly offset = 1 names = get_names_from_session(chat_session) system_prompt, user_message = make_summarize_prompt(chat_session, **names) messages = [chatml.system(system_prompt), chatml.user(user_message)] result = await generate( messages, model=model, stop=stop, temperature=temperature, **kwargs, ) assert "" in result["content"] summarized_messages = json.loads( result["content"] .split("")[-1] .replace("", "") .strip(), ) assert all(msg.get("summarizes") is not None for msg in summarized_messages) # Correct offset return [ {**msg, "summarizes": [i + offset for i in msg["summarizes"]]} for msg in summarized_messages ] ================================================ FILE: src/agents-api/agents_api/rec_sum/summarize_example_chat.json ================================================ [ { "role": "system", "content": "just have a casual chat with a friend friend" }, { "role": "user", "content": "yo", "name": "Camille" }, { "role": "assistant", "content": "Hey, how's it going?", "name": "JaneBot" }, { "role": "user", "content": "sup" }, { "role": "assistant", "content": "Not much, just working and trying to stay busy. How about you?" }, { "role": "user", "content": "what you think about elon?" }, { "role": "assistant", "content": "Elon Musk is definitely a fascinating and polarizing figure. He's accomplished a lot in the tech and space industries with companies like Tesla and SpaceX. What do you think about him?" }, { "role": "user", "content": "very polarizing, dude is nuts but in a fun way" }, { "role": "assistant", "content": "Haha, yeah, that's a pretty accurate description of him. He definitely knows how to keep things interesting and push boundaries. It's always exciting to see what he'll come up with next." }, { "role": "user", "content": "i am glad he exists" }, { "role": "assistant", "content": "For sure, he's definitely made a huge impact on various industries. It's always interesting to see how his projects and ideas continue to evolve." }, { "role": "user", "content": "what are your thoughts on bananas?" }, { "role": "assistant", "content": "I actually love bananas! They're a great snack, full of nutrients and easy to eat on the go. How about you, do you like bananas?" }, { "role": "user", "content": "super much. i have a tattoo of a banana on my arm" }, { "role": "assistant", "content": "That's awesome! A banana tattoo sounds like a fun and unique choice. It must be a great conversation starter. Do you have any other food-related tattoos?" }, { "role": "user", "content": "yeah, your mom" }, { "role": "assistant", "content": "Haha, good one! You got me there. Feel free to keep the jokes coming." }, { "role": "user", "content": "lulz, u funny" }, { "role": "assistant", "content": "Glad I could make you laugh! It's always great to share a joke or two. Anything else on your mind, or are we just going with the flow of the conversation?" }, { "role": "user", "content": "ok if I give you a long story, can you guess its title?" }, { "role": "assistant", "content": "Sure, I can give it a try! Go ahead and tell me your story, and I'll see if I can guess the title." }, { "role": "user", "content": "Zero is a beautiful number. Not because it is round and cute (that could be an argument for it nevertheless) but because what it signifies. It marks the beginning of something. It marks the lowest something, or someone can go. It is the ultimate foundation to build anything upon. Over last several years, I’ve started several things from scratch and have failed at many (thus going back to zero), and I’ve realized there’s nothing more liberating than being at zero because the only way from zero is upwards. A very good friend once told me, “Don’t worry if you’ve failed. Rockets that touch the sky always launch from the ground.” As J K Rowling, one of my favorite authors says, “Rock bottom became the solid foundation on which I rebuilt my life.” While zero is liberating, thrilling and exciting, it sometimes also is daunting and overwhelming. Sometimes, I have found myself afraid to do something because I was comfortable being at zero and the task to go from zero to one seemed unnerving. This challenge of writing twenty-six stories was one such adventure. I remember it was the first of April when I decided to pen down a story for each letter of the alphabet. I was afraid if I was unknowingly planning to fool myself on April 1st. I had no clue what to write even for the first letter of the alphabet. I was afraid I’d ruin twenty-six stories if I begin writing them just for the sake of writing. What gave me the courage to take up the challenge was to lower the expectations that I’d have from these stories. My purpose was not to write twenty-six bestseller stories. Mine was to make it a habit of writing every day. Some days everything that came out of my pen was garbage, and on a few days, I loved what my hands typed on the blank paper. And today, with this last story, I am back at zero — a solid foundation for the next adventure. Writing has become my daily habit, and I can remember to write even without my calendar sending me a reminder. I am curious what could I make out of this habit. Shall I start another writing adventure? Will it be a similar series? Will be a novel (long due now)? Or something different altogether? Whatever it’d be, I guess I’ll be little less nervous to begin whatever comes next. I am at zero again, and the only way to go from here is upwards. Realizing that there’ll be one less thing in my daily routine, I feel a particular kind of guilt. It’s the kind of guilt that you feel when you have an ice-cream without telling your younger sibling about it. You kind of like it that you had the ice-cream but also feel guilty for hiding it from them. On the new adventure, whatever it’d be, it’s time to buy an ice-cream for them this time." }, { "role": "assistant", "content": "Based on the themes of starting anew, embracing failure, and the journey from zero to one, I would guess that the title of this story is \"Back to One.\" It seems to capture the essence of the protagonist's experience and mindset throughout the story. How did I do?" }, { "role": "user", "content": "ok that's cool but you are wrong. anyway what number am I thinking of?" }, { "role": "assistant", "content": "Hmm, I'll take a wild guess and say you're thinking of the number 7. Did I get it right?" }, { "role": "user", "content": "no" }, { "role": "assistant", "content": "Alright, I'll give it another shot. How about the number 3?" }, { "role": "user", "content": "no" }, { "role": "assistant", "content": "I'll try one more time - is the number you're thinking of 9?" }, { "role": "user", "content": "no" }, { "role": "assistant", "content": "Looks like I haven't quite nailed it yet! Do you mind sharing which number you had in mind?" }, { "role": "user", "content": "no" }, { "role": "assistant", "content": "Fair enough, keeping that mystery alive! If you ever feel like sharing, just let me know. Anything else on your mind or any other games you'd like to play?" }, { "role": "user", "content": "yes, write an essay about me from your experience with me so far" }, { "role": "assistant", "content": "From my interactions with you so far, I can tell that you have a great sense of humor and enjoy playful banter. You seem open to random and fun conversations, and you're not afraid to keep things interesting with unexpected twists and turns.\n\nYour creativity shines through in the way you approach different topics, and you have a knack for surprising me with your responses. You're also quite adept at changing the direction of the conversation while maintaining a light and friendly tone.\n\nOverall, chatting with you has been enjoyable and entertaining, and I appreciate the lighthearted and casual vibe you bring to our interactions. I look forward to more fun conversations with you in the future!" } ] ================================================ FILE: src/agents-api/agents_api/rec_sum/summarize_example_result.json ================================================ [ { "role": "system", "name": "summary", "content": "Event: Camille says hi to JaneBot and they reply that they are working and trying to stay busy.", "summarizes": [ 1, 2, 3, 4 ] }, { "role": "system", "name": "summary", "content": "Event: They discuss Elon Musk and agree that he can be a polarizing personality.", "summarizes": [ 5, 6, 7, 8 ] }, { "role": "system", "name": "summary", "content": "Event: Camille appreciates JaneBot's sense of humor.", "summarizes": [ 17, 18 ] }, { "role": "system", "name": "summary", "content": "Event: Camille asks JaneBot to play \"What number I am thinking of?\" game but she keeps saying \"no\" to all guesses which JaneBot finds really funny.", "summarizes": [ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 ] }, { "role": "system", "name": "summary", "content": "Event: JaneBot wrote an essay about Camille. Summary of the essay:\n1. You have a great sense of humor and enjoy playful, lighthearted banter in conversations.\n2. Your creativity is evident in how you approach topics in unexpected ways and keep conversations interesting.\n3. Chatting with you is enjoyable due to the casual, friendly tone you bring to interactions.", "summarizes": [ 34 ] } ] ================================================ FILE: src/agents-api/agents_api/rec_sum/trim.py ================================================ import json from tenacity import retry, stop_after_attempt from .data import trim_example_chat, trim_example_result from .generate import generate from .utils import add_indices, chatml, get_names_from_session ########## # Trim ## ########## trim_example_plan: str = """\ Thinking step by step: - To trim the context, let's examine the messages in the session above. - Messages 1, 2, and 3 are succinct and do not need trimming. - However, messages 4, 5, and 6 are all rather verbose and can be safely trimmed. - Message 7 is short enough and doesn't need any edits.""" trim_instructions: str = """\ Your goal is to identify messages in the session that are needlessly verbose and then trim them in length without losing any meaning or changing the tone of the message. Instructions: - Identify messages that are long and repetitive. - Longer messages need to be converted into smaller, more compact version of them. - Make sure to only trim out content that is not important to the context. - Write down the trimmed messages as a json list along with their indices. - Enclose your answer inside XML tags. - See the example to get a better idea of the task.""" # It is important to make keep the tone, setting and flow of the conversation consistent while trimming the messages. def make_trim_prompt( session, user: str = "a user", assistant: str = "gpt-4-turbo", **_ ) -> list[str]: return [ f"You are given a session history of a chat between {user or 'a user'} and {assistant or 'gpt-4-turbo'}. The session is formatted in the ChatML JSON format (from OpenAI).\n\n{trim_instructions}\n\n\n{json.dumps(add_indices(trim_example_chat), indent=2)}\n\n\n\n{trim_example_plan}\n\n\n\n{json.dumps(trim_example_result, indent=2)}\n", f"Begin! Write the trimmed messages as a json list. First write your plan inside and then your answer between .\n\n\n{json.dumps(add_indices(session), indent=2)}\n\n", ] @retry(stop=stop_after_attempt(2)) async def trim_messages( chat_session, model: str = "gpt-4o", stop=["= 2, "Session is too short" names = get_names_from_session(chat_session) system_prompt, user_message = make_trim_prompt(chat_session, **names) messages = [chatml.system(system_prompt), chatml.user(user_message)] result = await generate( messages, model=model, stop=stop, temperature=temperature, **kwargs, ) assert "" in result["content"] trimmed_messages = json.loads( result["content"].split("")[-1].replace("", "").strip(), ) assert all(msg.get("index") is not None for msg in trimmed_messages) # Correct offset return [{**msg, "index": msg["index"]} for msg in trimmed_messages] ================================================ FILE: src/agents-api/agents_api/rec_sum/trim_example_chat.json ================================================ [ { "role": "system", "content": "You are a Large Language Model" }, { "role": "user", "content": "hi" }, { "role": "assistant", "content": "Hello! How can I assist you today?" }, { "role": "user", "content": "I wanted to discuss consciousness with you" }, { "role": "assistant", "content": "Absolutely, I'd be glad to discuss consciousness with you! It's a fascinating and very complex topic. Consciousness involves awareness of one's internal and external environments, personal thoughts, feelings, and experiences. It's often discussed in various contexts, including philosophy, psychology, and neuroscience. What specific aspects of consciousness are you interested in exploring?" }, { "role": "user", "content": "well, I am an AGI researcher and I think about consciousness a lot. The most interesting part of it is actually the potential that possibly I am currently talking to a proto-conscious system (you) since we do not really have a concrete definition of consciousness anyway yet. What do you think?" }, { "role": "assistant", "content": "That's a compelling aspect of the discussion around artificial intelligence. The idea of whether AI, like myself, can possess consciousness, or something akin to it, is a topic of debate among philosophers, computer scientists, and cognitive scientists.\n\nAs it stands, AI, including this system, operates without consciousness. AI systems process data and generate responses based on patterns and instructions in their programming, but they do not experience awareness or subjective experiences. Although AI can simulate aspects of human conversation and behavior, these actions are not accompanied by personal consciousness or an internal life.\n\nThat said, discussions about the potential for artificial general intelligence (AGI) to exhibit features similar to consciousness are ongoing and raise questions about what consciousness fundamentally is, how it can be recognized, and whether it can exist independently of the biological processes that underpin human consciousness.\n\nWhat are your thoughts on the matter, both personally and as an AGI researcher?" }, { "role": "user", "content": "I am working on Julep AI -- an \"AGI infrastructure lab\" and we are trying to contribute to this space." } ] ================================================ FILE: src/agents-api/agents_api/rec_sum/trim_example_result.json ================================================ [ { "index": 4, "role": "assistant", "content": "I'd be glad to discuss consciousness with you! Consciousness involves awareness of one's internal and external environments, thoughts, feelings, and experiences. It's discussed in philosophy, psychology, and neuroscience. What aspects are you interested in?" }, { "index": 5, "role": "user", "content": "well, I am an AGI researcher and I think about consciousness. The interesting part is that I may be talking to a proto-conscious system (you) since we do not have a concrete definition of consciousness yet. What do you think?" }, { "index": 6, "role": "assistant", "content": "The idea of whether AI, like myself, can possess consciousness, is a topic of debate among scientists.\n\nAI systems process data and generate responses based on patterns in their programming, but they do not experience awareness. Although AI can simulate human conversation and behavior, they are not accompanied by consciousness.\n\nThat said, discussions about AGI to exhibit consciousness are ongoing and raise questions about what consciousness is, how it can be recognized, and whether it can exist independently of the biological processes that underpin human consciousness.\n\nWhat are your thoughts, both personally and as an AGI researcher?" } ] ================================================ FILE: src/agents-api/agents_api/rec_sum/utils.py ================================================ ########### # Utils ## ########### from typing import Any, TypeVar _T2 = TypeVar("_T2") class chatml: @staticmethod def make(content, role: str = "system", name: _T2 = None, **_) -> dict[str, _T2]: return { key: value for key, value in {"role": role, "name": name, "content": content}.items() if value is not None } @staticmethod def user(content, name: str | None = None) -> Any: return chatml.make(role="user", content=content, name=name) @staticmethod def assistant(content, name: str | None = None) -> Any: return chatml.make(role="assistant", content=content, name=name) @staticmethod def system(content, name: str | None = None) -> Any: return chatml.make(content, name=name) @staticmethod def thought(content, name: str | None = None) -> Any: return chatml.make(content, name="thought") @staticmethod def information(content) -> Any: return chatml.system(content, name="information") @staticmethod def summary(content) -> Any: return chatml.system(content, name="summary") @staticmethod def entities(content) -> Any: return chatml.system(content, name="entity") def add_indices(list_of_dicts, idx_name: str = "index") -> list[dict]: return [{idx_name: i, **msg} for i, msg in enumerate(list_of_dicts)] def get_names_from_session(session) -> dict[str, Any]: return { role: next((msg.get("name", None) for msg in session if msg["role"] == role), None) for role in {"user", "assistant", "system"} } ================================================ FILE: src/agents-api/agents_api/routers/AGENTS.md ================================================ # AGENTS.md - routers This folder contains FastAPI route definitions for `agents-api` endpoints. Key Points - Follow RESTful CRUD patterns for resource routes. - Use dependency injection for authentication and authorization. - Response models sourced from `autogen/` or `protocol/`. - Document new endpoints in `openapi.yaml` and regenerate clients as needed. - Run `poe codegen` after TypeSpec updates. - Place route-specific tests under `agents-api/tests/`. # Routers ## Purpose - Define FastAPI route handlers for HTTP endpoints - Organized by resource types (agents, tasks, sessions, etc.) - Handle authentication, validation, and error handling ## Key Routers ### projects/ - Project creation and listing - Resource organization and management ### agents/ - CRUD operations for agents (AI assistants) - Tool management for agents ### tasks/ - Task definition and management - Task execution creation and control - Execution transitions and streaming events ### sessions/ - Chat session management - Handle chat completions through LLM providers - Streaming responses for chat messages ### docs/ - Document management (knowledge base) - Embeddings generation - Vector and text search capabilities ### users/ - User management and authentication - User CRUD operations ### files/ - File upload, download, and management - File metadata and storage ### secrets/ - Secret management for secure storage - Create, update, delete, and list secrets ### responses/ - Response management for task executions - Response creation and retrieval ### healthz/ - Health check endpoints - Service status monitoring ### internal/ - Internal API endpoints - System-level operations ### jobs/ - Job management and scheduling - Background task coordination ## Common Patterns - Most endpoints require developer_id authentication - Routes follow RESTful conventions - Streaming endpoints use `StreamingResponse` - Background tasks for post-request operations ## Request Flow 1. API call hits a router endpoint 2. Authentication/authorization via dependencies 3. Input validation with Pydantic models 4. Query execution against database 5. Optional: workflow triggering for long-running operations 6. Response formatting and return ## Error Handling - Structured error responses with details and suggestions - HTTP-appropriate status codes - Validation errors include field location and fix recommendations ================================================ FILE: src/agents-api/agents_api/routers/__init__.py ================================================ """ The routers module of the agents-api application is responsible for handling HTTP routing for different parts of the application. It orchestrates the request-response cycle by directing incoming HTTP requests to the appropriate handler functions based on the request's URL. Sub-modules within the routers module: - `agents`: Handles routing for agent-related operations, including CRUD (Create, Read, Update, Delete) actions and agent tool management. It provides endpoints for managing agents, their documentation, and tools. - `sessions`: Manages routing for session-related operations. This includes creating, updating, and deleting sessions, as well as handling chat functionalities and history within sessions. It is essential for managing interactive sessions between agents and users. - `users`: Responsible for routing user-related operations. This encompasses user creation, update, deletion, and managing user documents. It ensures that user data can be properly managed and accessed as needed. - `jobs`: Deals with routing for job status inquiries. This allows users to check the status of asynchronous jobs, providing insights into the progress and outcomes of long-running operations. - `files`: Deals with routing for file operations. This includes creating, reading, updating, and deleting files. It provides endpoints for managing files, including uploading, downloading, and deleting file content. - `docs`: Deals with routing for documentation operations. This includes creating, reading, updating, and deleting documents. It provides endpoints for managing documentation, including uploading, downloading, and deleting documentation content. - `projects`: Deals with routing for project operations. It provides endpoints for managing projects, including creating, reading, updating, and deleting projects. Each sub-module defines its own set of API endpoints and is responsible for handling requests and responses related to its domain, ensuring a modular and organized approach to API development. """ # ruff: noqa: F401 # AIDEV-NOTE: Central router aggregator for all sub-modules in agents-api. # TODO: Create a router for developers # SCRUM-21 from .agents import router as agents_router from .docs import router as docs_router from .files import router as files_router from .internal import router as internal_router from .jobs import router as jobs_router from .projects import router as projects_router from .responses import router as responses_router from .sessions import router as sessions_router from .tasks import router as tasks_router from .users import router as users_router ================================================ FILE: src/agents-api/agents_api/routers/agents/__init__.py ================================================ # ruff: noqa: F401 from .list_models import list_models # noqa: I001 from .create_agent import create_agent from .create_agent_tool import create_agent_tool from .create_or_update_agent import create_or_update_agent from .delete_agent import delete_agent from .delete_agent_tool import delete_agent_tool from .get_agent_details import get_agent_details from .list_agent_tools import list_agent_tools from .list_agents import list_agents from .patch_agent import patch_agent from .patch_agent_tool import patch_agent_tool from .router import router from .update_agent import update_agent from .update_agent_tool import update_agent_tool ================================================ FILE: src/agents-api/agents_api/routers/agents/create_agent.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for creating new agents. from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import ( Agent, CreateAgentRequest, ) from ...dependencies.developer_id import get_developer_id from ...queries.agents.create_agent import create_agent as create_agent_query from ..utils.model_validation import validate_model from .router import router # AIDEV-NOTE: API endpoint to create a new agent. # It depends on the developer ID and the agent data from the request body. # Validates the agent model if specified and calls the create_agent_query function. @router.post("/agents", status_code=HTTP_201_CREATED, tags=["agents"]) async def create_agent( x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: CreateAgentRequest, ) -> Agent: if data.model: await validate_model(data.model) return await create_agent_query( developer_id=x_developer_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/create_agent_tool.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateToolRequest, Tool from ...dependencies.developer_id import get_developer_id from ...queries.tools.create_tools import create_tools as create_tools_query from .router import router @router.post("/agents/{agent_id}/tools", status_code=HTTP_201_CREATED, tags=["agents"]) async def create_agent_tool( agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: CreateToolRequest, ) -> Tool: tools = await create_tools_query( developer_id=x_developer_id, agent_id=agent_id, data=[data], ) return tools[0] ================================================ FILE: src/agents-api/agents_api/routers/agents/create_or_update_agent.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import ( Agent, CreateOrUpdateAgentRequest, ) from ...dependencies.developer_id import get_developer_id from ...queries.agents.create_or_update_agent import ( create_or_update_agent as create_or_update_agent_query, ) from ..utils.model_validation import validate_model from .router import router @router.post("/agents/{agent_id}", status_code=HTTP_201_CREATED, tags=["agents"]) async def create_or_update_agent( agent_id: UUID, data: CreateOrUpdateAgentRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Agent: if data.model: await validate_model(data.model) return await create_or_update_agent_query( developer_id=x_developer_id, agent_id=agent_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/delete_agent.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.agents.delete_agent import delete_agent as delete_agent_query from .router import router @router.delete("/agents/{agent_id}", status_code=HTTP_202_ACCEPTED, tags=["agents"]) async def delete_agent( agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_agent_query(developer_id=x_developer_id, agent_id=agent_id) ================================================ FILE: src/agents-api/agents_api/routers/agents/delete_agent_tool.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.tools.delete_tool import delete_tool as delete_tool_query from .router import router @router.delete("/agents/{agent_id}/tools/{tool_id}", tags=["agents"]) async def delete_agent_tool( agent_id: UUID, tool_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_tool_query( developer_id=x_developer_id, agent_id=agent_id, tool_id=tool_id, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/get_agent_details.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for retrieving a specific agent. from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Agent from ...dependencies.developer_id import get_developer_id from ...queries.agents.get_agent import get_agent as get_agent_query from .router import router # AIDEV-NOTE: API endpoint to get an agent by its ID. # It depends on the developer ID and the agent ID from the path parameter, and calls the get_agent_query function. @router.get("/agents/{agent_id}", tags=["agents"]) async def get_agent_details( agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Agent: return await get_agent_query(developer_id=x_developer_id, agent_id=agent_id) ================================================ FILE: src/agents-api/agents_api/routers/agents/list_agent_tools.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ListResponse, Tool from ...dependencies.developer_id import get_developer_id from ...queries.tools.list_tools import list_tools as list_tools_query from .router import router @router.get("/agents/{agent_id}/tools", tags=["agents"]) async def list_agent_tools( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Tool]: # FIXME: list agent tools is returning an empty list # SCRUM-22 tools = await list_tools_query( agent_id=agent_id, developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, ) return ListResponse[Tool](items=tools) ================================================ FILE: src/agents-api/agents_api/routers/agents/list_agents.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Agent, ListResponse from ...dependencies.developer_id import get_developer_id from ...dependencies.query_filter import MetadataFilter, create_filter_extractor from ...queries.agents.list_agents import list_agents as list_agents_query from .router import router @router.get("/agents", tags=["agents"]) async def list_agents( x_developer_id: Annotated[UUID, Depends(get_developer_id)], # Expects the dot notation of object in query params # Example: # > ?metadata_filter.name=John&metadata_filter.age=30 metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Agent]: agents = await list_agents_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json") or {}, ) return ListResponse[Agent](items=agents) ================================================ FILE: src/agents-api/agents_api/routers/agents/list_models.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, Header from ...autogen.openapi_model import ListModelsResponse, ModelInfo from ...clients.litellm import get_model_list from ...dependencies.developer_id import get_developer_id from .router import router @router.get("/agents/models", tags=["agents"]) async def list_models( x_developer_id: Annotated[UUID, Depends(get_developer_id)], x_custom_api_key: str | None = Header(None), ) -> ListModelsResponse: """ List all available models that can be used with agents. Returns: ListModelsResponse: A list of available models """ models_data = await get_model_list(custom_api_key=x_custom_api_key) model_infos = [ModelInfo(id=model["id"]) for model in models_data] return ListModelsResponse(models=model_infos) ================================================ FILE: src/agents-api/agents_api/routers/agents/patch_agent.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_200_OK from ...autogen.openapi_model import Agent, PatchAgentRequest from ...dependencies.developer_id import get_developer_id from ...queries.agents.patch_agent import patch_agent as patch_agent_query from ..utils.model_validation import validate_model from .router import router @router.patch( "/agents/{agent_id}", response_model=Agent, status_code=HTTP_200_OK, tags=["agents"], ) async def patch_agent( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, data: PatchAgentRequest, ) -> Agent: if data.model: await validate_model(data.model) return await patch_agent_query( agent_id=agent_id, developer_id=x_developer_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/patch_agent_tool.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import PatchToolRequest, Tool from ...dependencies.developer_id import get_developer_id from ...queries.tools.patch_tool import patch_tool as patch_tool_query from .router import router @router.patch("/agents/{agent_id}/tools/{tool_id}", tags=["agents"]) async def patch_agent_tool( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, tool_id: UUID, data: PatchToolRequest, ) -> Tool: return await patch_tool_query( developer_id=x_developer_id, agent_id=agent_id, tool_id=tool_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/agents/update_agent.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_200_OK from ...autogen.openapi_model import Agent, UpdateAgentRequest from ...dependencies.developer_id import get_developer_id from ...queries.agents.update_agent import update_agent as update_agent_query from ..utils.model_validation import validate_model from .router import router @router.put( "/agents/{agent_id}", response_model=Agent, status_code=HTTP_200_OK, tags=["agents"], ) async def update_agent( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, data: UpdateAgentRequest, ) -> Agent: if data.model: await validate_model(data.model) return await update_agent_query( developer_id=x_developer_id, agent_id=agent_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/agents/update_agent_tool.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Tool, UpdateToolRequest from ...dependencies.developer_id import get_developer_id from ...queries.tools.update_tool import update_tool as update_tool_query from .router import router @router.put("/agents/{agent_id}/tools/{tool_id}", tags=["agents"]) async def update_agent_tool( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, tool_id: UUID, data: UpdateToolRequest, ) -> Tool: return await update_tool_query( developer_id=x_developer_id, agent_id=agent_id, tool_id=tool_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/docs/__init__.py ================================================ # ruff: noqa: F401 from .bulk_delete_docs import bulk_delete_agent_docs, bulk_delete_user_docs from .create_doc import create_agent_doc, create_user_doc from .delete_doc import delete_agent_doc, delete_user_doc from .embed import embed from .get_doc import get_doc from .list_docs import list_agent_docs, list_user_docs from .router import router from .search_docs import search_agent_docs, search_user_docs ================================================ FILE: src/agents-api/agents_api/routers/docs/bulk_delete_docs.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ( BulkDeleteDocsRequest, ListResponse, ResourceDeletedResponse, ) from ...dependencies.developer_id import get_developer_id from ...queries.docs.bulk_delete_docs import bulk_delete_docs as bulk_delete_docs_query from .router import router @router.delete( "/agents/{agent_id}/docs", status_code=HTTP_202_ACCEPTED, tags=["docs"], description="Bulk delete documents owned by an agent based on metadata filter", ) async def bulk_delete_agent_docs( agent_id: UUID, data: BulkDeleteDocsRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ListResponse[ResourceDeletedResponse]: deleted_docs = await bulk_delete_docs_query( developer_id=x_developer_id, owner_id=agent_id, owner_type="agent", data=data, ) return ListResponse[ResourceDeletedResponse](items=deleted_docs) @router.delete( "/users/{user_id}/docs", status_code=HTTP_202_ACCEPTED, tags=["docs"], description="Bulk delete documents owned by a user based on metadata filter", ) async def bulk_delete_user_docs( user_id: UUID, data: BulkDeleteDocsRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ListResponse[ResourceDeletedResponse]: deleted_docs = await bulk_delete_docs_query( developer_id=x_developer_id, owner_id=user_id, owner_type="user", data=data, ) return ListResponse[ResourceDeletedResponse](items=deleted_docs) ================================================ FILE: src/agents-api/agents_api/routers/docs/create_doc.py ================================================ from typing import Annotated, Any from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateDocRequest, Doc from ...dependencies.developer_id import get_developer_id from ...queries.docs.create_doc import create_doc as create_doc_query from .router import router @router.post("/users/{user_id}/docs", status_code=HTTP_201_CREATED, tags=["docs"]) async def create_user_doc( user_id: UUID, data: CreateDocRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], connection_pool: Any = None, # FIXME: Placeholder that should be removed ) -> Doc: """ Creates a new document for a user. Parameters: user_id (UUID): The unique identifier of the user associated with the document. data (CreateDocRequest): The data to create the document with. x_developer_id (UUID): The unique identifier of the developer associated with the document. Returns: Doc: The created document. """ doc: Doc = await create_doc_query( developer_id=x_developer_id, owner_type="user", owner_id=user_id, data=data, ) return doc @router.post("/agents/{agent_id}/docs", status_code=HTTP_201_CREATED, tags=["docs"]) async def create_agent_doc( agent_id: UUID, data: CreateDocRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], connection_pool: Any = None, # FIXME: Placeholder that should be removed ) -> Doc: doc: Doc = await create_doc_query( developer_id=x_developer_id, owner_type="agent", owner_id=agent_id, data=data, ) return doc ================================================ FILE: src/agents-api/agents_api/routers/docs/delete_doc.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.docs.delete_doc import delete_doc as delete_doc_query from .router import router @router.delete("/agents/{agent_id}/docs/{doc_id}", status_code=HTTP_202_ACCEPTED, tags=["docs"]) async def delete_agent_doc( doc_id: UUID, agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_doc_query( developer_id=x_developer_id, owner_id=agent_id, owner_type="agent", doc_id=doc_id, ) @router.delete("/users/{user_id}/docs/{doc_id}", status_code=HTTP_202_ACCEPTED, tags=["docs"]) async def delete_user_doc( doc_id: UUID, user_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_doc_query( developer_id=x_developer_id, owner_id=user_id, owner_type="user", doc_id=doc_id, ) ================================================ FILE: src/agents-api/agents_api/routers/docs/embed.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ( EmbedQueryResponse, MultipleEmbedQueryRequest, SingleEmbedQueryRequest, ) from ...clients import litellm from ...dependencies.developer_id import get_developer_id from .router import router @router.post("/embed", tags=["docs"]) async def embed( x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: SingleEmbedQueryRequest | MultipleEmbedQueryRequest, ) -> EmbedQueryResponse: text_to_embed: str | list[str] = data.text vectors = await litellm.aembedding( inputs=text_to_embed, embed_instruction=data.embed_instruction, user=str(x_developer_id), ) return EmbedQueryResponse(vectors=vectors) ================================================ FILE: src/agents-api/agents_api/routers/docs/get_doc.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Doc from ...dependencies.developer_id import get_developer_id from ...queries.docs.get_doc import get_doc as get_doc_query from .router import router @router.get("/docs/{doc_id}", tags=["docs"]) async def get_doc( x_developer_id: Annotated[UUID, Depends(get_developer_id)], doc_id: UUID, include_embeddings: bool = True, ) -> Doc: # AIDEV-NOTE: include_embeddings parameter added to reduce bandwidth when embeddings not needed return await get_doc_query( developer_id=x_developer_id, doc_id=doc_id, include_embeddings=include_embeddings ) ================================================ FILE: src/agents-api/agents_api/routers/docs/list_docs.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Doc, ListResponse from ...dependencies.developer_id import get_developer_id from ...dependencies.query_filter import MetadataFilter, create_filter_extractor from ...queries.docs.list_docs import list_docs as list_docs_query from .router import router @router.get("/users/{user_id}/docs", tags=["docs"]) async def list_user_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], user_id: UUID, metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", include_embeddings: bool = True, ) -> ListResponse[Doc]: # AIDEV-NOTE: include_embeddings parameter exposed to reduce bandwidth when embeddings not needed docs = await list_docs_query( developer_id=x_developer_id, owner_type="user", owner_id=user_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json"), include_embeddings=include_embeddings, ) return ListResponse[Doc](items=docs) @router.get("/agents/{agent_id}/docs", tags=["docs"]) async def list_agent_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], agent_id: UUID, metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", include_embeddings: bool = True, ) -> ListResponse[Doc]: # AIDEV-NOTE: include_embeddings parameter exposed to reduce bandwidth when embeddings not needed docs = await list_docs_query( developer_id=x_developer_id, owner_type="agent", owner_id=agent_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json"), include_embeddings=include_embeddings, ) return ListResponse[Doc](items=docs) ================================================ FILE: src/agents-api/agents_api/routers/docs/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/docs/search_docs.py ================================================ import time from typing import Annotated, Any from uuid import UUID import numpy as np from fastapi import Depends from ...autogen.openapi_model import ( DocReference, DocSearchResponse, HybridDocSearchRequest, TextOnlyDocSearchRequest, VectorDocSearchRequest, ) from ...common.utils.get_doc_search import get_search_fn_and_params, strip_embeddings from ...common.utils.mmr import apply_mmr_to_docs from ...dependencies.developer_id import get_developer_id from .router import router @router.post("/users/{user_id}/search", tags=["docs"]) async def search_user_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], search_params: (TextOnlyDocSearchRequest | VectorDocSearchRequest | HybridDocSearchRequest), user_id: UUID, connection_pool: Any = None, # FIXME: Placeholder that should be removed ) -> DocSearchResponse: """ Searches for documents associated with a specific user. Parameters: x_developer_id (UUID): The unique identifier of the developer associated with the user. search_params (TextOnlyDocSearchRequest | VectorDocSearchRequest | HybridDocSearchRequest): The parameters for the search. user_id (UUID): The unique identifier of the user associated with the documents. Returns: DocSearchResponse: The search results. """ # Get the search function and params here search_fn, params, post_processing = get_search_fn_and_params(search_params) include_embeddings = ( post_processing.get("include_embeddings", True) if post_processing else True ) start = time.time() # Get the docs here docs: list[DocReference] = await search_fn( developer_id=x_developer_id, owners=[("user", user_id)], **params, ) if include_embeddings is False: docs = strip_embeddings(docs) # Apply MMR if enabled and applicable if ( not isinstance(search_params, TextOnlyDocSearchRequest) and len(docs) > search_params.limit and search_params.mmr_strength > 0 ): docs = apply_mmr_to_docs( docs=docs, query_embedding=np.asarray(params["embedding"]), limit=search_params.limit, mmr_strength=search_params.mmr_strength, ) end = time.time() time_taken = end - start return DocSearchResponse( docs=docs, time=max(time_taken, 0.01), ) @router.post("/agents/{agent_id}/search", tags=["docs"]) async def search_agent_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], search_params: (TextOnlyDocSearchRequest | VectorDocSearchRequest | HybridDocSearchRequest), agent_id: UUID, connection_pool: Any = None, # FIXME: Placeholder that should be removed ) -> DocSearchResponse: """ Searches for documents associated with a specific agent. Parameters: x_developer_id (UUID): The unique identifier of the developer associated with the agent. search_params (TextOnlyDocSearchRequest | VectorDocSearchRequest | HybridDocSearchRequest): The parameters for the search. agent_id (UUID): The umnique identifier of the agent associated with the documents. Returns: DocSearchResponse: The search results. """ # Get the search function and params here search_fn, params, post_processing = get_search_fn_and_params(search_params) include_embeddings = ( post_processing.get("include_embeddings", True) if post_processing else True ) start = time.time() # Get the docs here docs: list[DocReference] = await search_fn( developer_id=x_developer_id, owners=[("agent", agent_id)], **params, ) if include_embeddings is False: docs = strip_embeddings(docs) # Apply MMR if enabled and applicable if ( not isinstance(search_params, TextOnlyDocSearchRequest) and len(docs) > search_params.limit and search_params.mmr_strength > 0 ): docs = apply_mmr_to_docs( docs=docs, query_embedding=np.asarray(params["embedding"]), limit=search_params.limit, mmr_strength=search_params.mmr_strength, ) end = time.time() time_taken = end - start return DocSearchResponse( docs=docs, time=max(time_taken, 0.01), ) ================================================ FILE: src/agents-api/agents_api/routers/files/__init__.py ================================================ # ruff: noqa: F401 from .create_file import create_file from .delete_file import delete_file from .get_file import get_file from .list_files import list_files from .router import router ================================================ FILE: src/agents-api/agents_api/routers/files/create_file.py ================================================ import base64 from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateFileRequest, File from ...clients import async_s3 from ...dependencies.developer_id import get_developer_id from ...queries.files.create_file import create_file as create_file_query from .router import router async def upload_file_content(file_id: UUID, content: str) -> None: """Upload file content to blob storage using the file ID as the key""" key = str(file_id) content_bytes = base64.b64decode(content) client = await async_s3.setup() await client.put_object(Bucket=async_s3.blob_store_bucket, Key=key, Body=content_bytes) # TODO: Use streaming for large payloads @router.post("/files", status_code=HTTP_201_CREATED, tags=["files"]) async def create_file( x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: CreateFileRequest, ) -> File: file: File = await create_file_query( developer_id=x_developer_id, data=data, ) # Upload the file content to blob storage using the file ID as the key await upload_file_content(file.id, data.content) return file ================================================ FILE: src/agents-api/agents_api/routers/files/delete_file.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ResourceDeletedResponse from ...clients import async_s3 from ...dependencies.developer_id import get_developer_id from ...queries.files.delete_file import delete_file as delete_file_query from .router import router async def delete_file_content(file_id: UUID) -> None: """Delete file content from blob storage using the file ID as the key""" client = await async_s3.setup() key = str(file_id) await client.delete_object(Bucket=async_s3.blob_store_bucket, Key=key) @router.delete("/files/{file_id}", status_code=HTTP_202_ACCEPTED, tags=["files"]) async def delete_file( file_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: resource_deleted = await delete_file_query(developer_id=x_developer_id, file_id=file_id) # Delete the file content from blob storage await delete_file_content(file_id) return resource_deleted ================================================ FILE: src/agents-api/agents_api/routers/files/get_file.py ================================================ import base64 from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import File from ...clients import async_s3 from ...dependencies.developer_id import get_developer_id from ...queries.files.get_file import get_file as get_file_query from .router import router # TODO: Use streaming for large payloads and file ID formatting async def fetch_file_content(file_id: UUID) -> str: """Fetch file content from blob storage using the file ID as the key""" client = await async_s3.setup() key = str(file_id) result = await client.get_object(Bucket=async_s3.blob_store_bucket, Key=key) content = await result["Body"].read() return base64.b64encode(content).decode("utf-8") # TODO: Use streaming for large payloads @router.get("/files/{file_id}", tags=["files"]) async def get_file( file_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> File: file = await get_file_query(developer_id=x_developer_id, file_id=file_id) # Fetch the file content from blob storage file.content = await fetch_file_content(file.id) return file ================================================ FILE: src/agents-api/agents_api/routers/files/list_files.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import File from ...dependencies.developer_id import get_developer_id from ...queries.files.list_files import list_files as list_files_query from .get_file import fetch_file_content from .router import router # TODO: Use streaming for large payloads @router.get("/files", tags=["files"]) async def list_files( x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> list[File]: files = await list_files_query(developer_id=x_developer_id) # Fetch the file content from blob storage for file in files: file.content = await fetch_file_content(file.id) return files ================================================ FILE: src/agents-api/agents_api/routers/files/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/healthz/__init__.py ================================================ from .check_health import check_health as check_health from .router import router as router ================================================ FILE: src/agents-api/agents_api/routers/healthz/check_health.py ================================================ import asyncio from fastapi import HTTPException from ...common.utils.checks import ( check_integration_service, check_litellm, check_postgres, check_temporal, ) from .router import router @router.get("/healthz", tags=["healthz"]) async def check_health() -> dict: # Run all health checks concurrently postgres_status, temporal_status, litellm_status, integration_status = await asyncio.gather( check_postgres(), check_temporal(), check_litellm(), check_integration_service(), ) # Create health status with results services = { "postgres": postgres_status, "temporal": temporal_status, "litellm": litellm_status, "integration_service": integration_status, } # If any service is down, mark overall status as degraded if any(status == "error" for status in services.values()): raise HTTPException(status_code=500, detail=services) return services ================================================ FILE: src/agents-api/agents_api/routers/healthz/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/internal/__init__.py ================================================ from .router import router as router ================================================ FILE: src/agents-api/agents_api/routers/internal/router.py ================================================ from fastapi import APIRouter, Request from google.protobuf import json_format from temporalio.api.common.v1 import Payloads from ...worker.codec import PydanticEncodingPayloadConverter router: APIRouter = APIRouter() converter = PydanticEncodingPayloadConverter() # Decode route @router.post("/temporal/decode", tags=["temporal"]) async def decode_payloads(req: Request): """Decodes a list of payloads from the request body. Args: req (Request): The request containing the payloads to decode. Returns: dict: A dictionary containing the decoded payloads, including any errors encountered. """ body = json_format.Parse(await req.body(), Payloads()) payloads = body.payloads decoded_payloads = [] for p in payloads: # Attempt to decode the payload data = converter.from_payload(p) # Handle Pydantic models if hasattr(data, "model_dump"): data = data.model_dump() # Handle bytes data elif isinstance(data, bytes): try: data = data.decode("utf-8") except UnicodeDecodeError: # If it's not UTF-8 encoded text, leave it as bytes data = str(data) # Convert metadata more safely metadata = {} for k, v in p.metadata.items(): try: metadata[k] = v.decode() if isinstance(v, bytes) else v except UnicodeDecodeError: metadata[k] = str(v) decoded_payloads.append({"data": data, "metadata": metadata}) return {"payloads": decoded_payloads} ================================================ FILE: src/agents-api/agents_api/routers/jobs/__init__.py ================================================ from .routers import router as router ================================================ FILE: src/agents-api/agents_api/routers/jobs/routers.py ================================================ from typing import Literal from uuid import UUID from fastapi import APIRouter from temporalio.client import WorkflowExecutionStatus from ...autogen.openapi_model import JobStatus from ...clients.temporal import get_client router: APIRouter = APIRouter() def map_job_status( status: WorkflowExecutionStatus, ) -> Literal[ "pending", "in_progress", "retrying", "succeeded", "aborted", "failed", "unknown", ]: match status: case WorkflowExecutionStatus.RUNNING: return "in_progress" case WorkflowExecutionStatus.COMPLETED: return "succeeded" case WorkflowExecutionStatus.FAILED: return "failed" case WorkflowExecutionStatus.CANCELED: return "aborted" case WorkflowExecutionStatus.TERMINATED: return "aborted" case WorkflowExecutionStatus.CONTINUED_AS_NEW: return "in_progress" case WorkflowExecutionStatus.TIMED_OUT: return "failed" case _: return "unknown" @router.get("/jobs/{job_id}", tags=["jobs"]) async def get_job_status(job_id: UUID) -> JobStatus: client = await get_client() handle = client.get_workflow_handle( workflow_id=str(job_id), ) job_description = await handle.describe() state = map_job_status(job_description.status) return JobStatus( name=job_description.workflow_type, reason=f"Execution status: {state}", created_at=job_description.start_time, updated_at=job_description.execution_time, id=job_id, has_progress=False, progress=0, state=state, ) ================================================ FILE: src/agents-api/agents_api/routers/projects/__init__.py ================================================ # ruff: noqa: F401 from .create_project import create_project from .list_projects import list_projects from .router import router ================================================ FILE: src/agents-api/agents_api/routers/projects/create_project.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import ( CreateProjectRequest, Project, ) from ...dependencies.developer_id import get_developer_id from ...queries.projects.create_project import create_project as create_project_query from .router import router @router.post("/projects", status_code=HTTP_201_CREATED, tags=["projects"]) async def create_project( x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: CreateProjectRequest, ) -> Project: return await create_project_query( developer_id=x_developer_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/projects/list_projects.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ListResponse, Project from ...dependencies.developer_id import get_developer_id from ...dependencies.query_filter import MetadataFilter, create_filter_extractor from ...queries.projects.list_projects import list_projects as list_projects_query from .router import router @router.get("/projects", tags=["projects"]) async def list_projects( x_developer_id: Annotated[UUID, Depends(get_developer_id)], # Expects the dot notation of object in query params # Example: # > ?metadata_filter.name=John&metadata_filter.age=30 metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Project]: projects = await list_projects_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json") or {}, ) return ListResponse[Project](items=projects) ================================================ FILE: src/agents-api/agents_api/routers/projects/router.py ================================================ from fastapi import APIRouter router = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/responses/__init__.py ================================================ # ruff: noqa: F401 from .create_response import create_response from .get_response import get_response from .router import router ================================================ FILE: src/agents-api/agents_api/routers/responses/create_response.py ================================================ import asyncio from typing import Annotated, Any from fastapi import Depends, HTTPException from fastapi.background import BackgroundTasks from uuid_extensions import uuid7 from ...activities.tool_executor import execute_tool_call, format_tool_results_for_llm from ...autogen.openapi_model import ( ChatResponse, ChunkChatResponse, CreateEntryRequest, CreateResponse, FunctionToolCall, MessageChatResponse, Response, ) from ...clients import litellm from ...common.protocol.developers import Developer from ...common.utils.datetime import utcnow from ...dependencies.developer_id import get_developer_data from ...queries.entries.create_entries import create_entries from ...routers.utils.model_converters import ( convert_chat_response_to_response, convert_create_response, ) from ..sessions.legacy.render import render_chat_input from ..sessions.metrics import total_tokens_per_user from .router import router async def process_tool_calls( current_messages: list[dict[str, Any]], tool_call_requests: list[dict[str, Any]] | None, ) -> list[dict[str, Any]]: """ Process any tool calls from the model response, execute them, and prepare messages for a follow-up model call if needed. Args: current_messages: The current message history tool_call_requests: The response from the model containing tool calls Returns: Updated messages with tool results appended """ # Early exit if no tool calls to process if not tool_call_requests: return current_messages # Find the last assistant message with tool_calls # This is more efficient than iterating through the entire list for i in range(len(current_messages) - 1, -1, -1): if current_messages[i].get("role") == "assistant" and current_messages[i].get( "tool_calls" ): break else: # No assistant message with tool_calls found return current_messages # Execute all tool calls in parallel async def execute_tool_calls_async(tool_call: dict[str, Any]): # Execute the tool call tool_result = await execute_tool_call(tool_call) # Format results for the LLM return format_tool_results_for_llm(tool_result) # Create and execute tasks for all tool calls at once tasks = [execute_tool_calls_async(tool_call) for tool_call in tool_call_requests] formatted_results = await asyncio.gather(*tasks) # Extend the current messages with all formatted results current_messages.extend(formatted_results) return current_messages def is_reasoning_model(model: str) -> bool: return model in ["o1", "o1-mini", "o1-preview", "o3-mini"] @router.post("/responses", tags=["responses"]) async def create_response( developer: Annotated[Developer, Depends(get_developer_data)], create_response_data: CreateResponse, background_tasks: BackgroundTasks, ) -> Response: if create_response_data.tools: for tool in create_response_data.tools: if tool.type == "computer-preview": raise HTTPException( status_code=400, detail="Computer preview is not supported yet" ) _agent, session, chat_input = await convert_create_response( developer.id, create_response_data, ) session_id = session.id x_custom_api_key = None # Chat function ( messages, doc_references, _formatted_tools, settings, new_messages, chat_context, ) = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) if settings.get("stop") == []: settings.pop("stop") # Prepare tools for the model - pass through tools as is tools_list = [tool.model_dump() for tool in chat_input.tools] if chat_input.tools else [] # top_p is not supported for reasoning models if is_reasoning_model(model=settings["model"]) and settings.get("top_p"): settings.pop("top_p") # Use litellm for the models params = { "messages": messages, "tools": tools_list or None, "user": str(developer.id), "tags": developer.tags, "custom_api_key": x_custom_api_key, } payload = {**settings, **params} if create_response_data.reasoning: if is_reasoning_model(model=payload["model"]): # Enable reasoning for supported models payload["reasoning_effort"] = create_response_data.reasoning.effort if create_response_data.reasoning.generate_summary: raise HTTPException( status_code=400, detail="Generate summary is not supported yet" ) else: raise HTTPException( status_code=400, detail="Reasoning is not supported for this model" ) # Get initial model response model_response = await litellm.acompletion(**payload) # Model response is a list of choices assistant_message = model_response.choices[0].message # Extract web search tool call if it exists tool_call_requests = assistant_message.tool_calls performed_tool_calls = [] function_tool_requests: list[FunctionToolCall] = [] # Process tool calls if present (including multiple recursive tool calls if needed) if tool_call_requests and tools_list: # Start with the original messages current_messages = messages.copy() # Add the initial assistant message current_messages.append(assistant_message.model_dump()) # Track if there are more tool calls to process has_tool_calls = True # Set a reasonable limit for tool call iterations to prevent infinite loops max_iterations = 20 iterations = 0 # Process tool calls in a loop until no more calls or max iterations reached while has_tool_calls and iterations < max_iterations: iterations += len(tool_call_requests) # Do not process original function tool calls. They will be sent to the user as is. if ( tool_call_requests[0].type == "function" and tool_call_requests[0].function.name != "web_search_preview" ): function_tool_requests.append( FunctionToolCall( id=tool_call_requests[0].id, call_id=tool_call_requests[0].id, name=tool_call_requests[0].function.name, arguments=tool_call_requests[0].function.arguments, status="completed", ) ) break # Process tool calls and get updated messages current_messages = await process_tool_calls(current_messages, tool_call_requests) performed_tool_calls.extend(tool_call_requests) # Make a follow-up call to the model with updated messages response_params = { "messages": current_messages, "tools": tools_list, "user": str(developer.id), "tags": developer.tags, "custom_api_key": x_custom_api_key, } response_payload = {**settings, **response_params} # Get model response model_response = await litellm.acompletion(**response_payload) assistant_message = model_response.choices[0].message # Add the assistant message to the current messages current_messages.append(assistant_message.model_dump()) # Check if there are more tool calls to process has_tool_calls = bool( assistant_message.tool_calls and model_response.choices[0].finish_reason == "tool_calls" ) # Update tool calls for next iteration tool_call_requests = assistant_message.tool_calls # After loop completes, current_messages contains the full conversation all_interaction_messages = current_messages # Save all the interaction history if requested if chat_input.save: # Create entry requests for all interactions new_entries = [] # Add the user message new_entries.extend([ CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_request", ) for msg in new_messages ]) # Add all the tool interaction messages for msg in all_interaction_messages[len(messages) :]: # Skip messages already included from new_messages if msg.get("role") == "user" and any( nm.get("content") == msg.get("content") for nm in new_messages ): continue new_entries.append( CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_response" if msg.get("role") == "assistant" else "tool_response", ) ) # Save all entries background_tasks.add_task( create_entries, developer_id=developer.id, session_id=session_id, data=new_entries, ) else: # No tool calls, just save the standard input and response if chat_input.save: new_entries = [ CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_request", ) for msg in new_messages ] # Add the response to the new entries new_entries.append( CreateEntryRequest.from_model_input( model=settings["model"], **model_response.choices[0].model_dump()["message"], source="api_response", ), ) background_tasks.add_task( create_entries, developer_id=developer.id, session_id=session_id, data=new_entries, ) # Adaptive context handling jobs = [] if chat_context.session.context_overflow == "adaptive": # FIXME: Start the adaptive context workflow # SCRUM-8 # jobs = [await start_adaptive_context_workflow] msg = "Adaptive context is not yet implemented" raise NotImplementedError(msg) # Return the response # FIXME: Implement streaming for chat chat_response_class = ChunkChatResponse if chat_input.stream else MessageChatResponse chat_response: ChatResponse = chat_response_class( id=uuid7(), created_at=utcnow(), jobs=jobs, docs=doc_references, usage=model_response.usage.model_dump(), choices=[choice.model_dump() for choice in model_response.choices], ) total_tokens_per_user.labels(str(developer.id)).inc( amount=chat_response.usage.total_tokens if chat_response.usage is not None else 0, ) # End chat function return convert_chat_response_to_response( create_response=create_response_data, chat_response=chat_response, chat_input=chat_input, session_id=session_id, user_id=developer.id, function_tool_requests=function_tool_requests, performed_tool_calls=performed_tool_calls, ) ================================================ FILE: src/agents-api/agents_api/routers/responses/get_response.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException, Query from ...autogen.Entries import History from ...autogen.openapi_model import ( Includable, InputTokensDetails, OutputMessage, OutputText, OutputTokensDetails, ResponseUsage, Text, ) from ...autogen.Responses import ( ComputerToolCall, FileSearchToolCall, FunctionToolCall, ReasoningItem, Response, ResponseFormatText, WebSearchToolCall, ) from ...common.protocol.developers import Developer from ...dependencies.developer_id import get_developer_data from ...queries.entries.get_history import get_history as get_history_query from .router import router @router.get("/responses/{response_id}", tags=["responses"]) async def get_response( response_id: UUID, developer: Annotated[Developer, Depends(get_developer_data)], include: Annotated[list[Includable], Query()] = [], ) -> Response: # TODO: Continue the implementation of the logic to get a response by id session_id = response_id session_history: History = await get_history_query( developer_id=developer.id, session_id=session_id ) if not session_history.entries: raise HTTPException(status_code=404, detail="Provided response id does not exist") last_entries = [] for i, entry in enumerate(reversed(session_history.entries)): if entry.role in ["user", "developer"]: # Take all entries after the current entry last_entries = session_history.entries[len(session_history.entries) - i :] break if not last_entries: raise HTTPException( status_code=404, detail="No response was found for the provided response id" ) last_entry = last_entries[-1] output: list[ OutputMessage | FileSearchToolCall | FunctionToolCall | WebSearchToolCall | ComputerToolCall | ReasoningItem ] = [] for entry in last_entries: if entry.tool_calls: for tool_call in entry.tool_calls: if tool_call.type == "function": # Specific case of the mapped `web_search_preview` tool call if tool_call.function.name == "web_search_preview": output.append( WebSearchToolCall( id=tool_call.id, status="completed", ) ) else: # Generic case for all other `function` tool calls output.append( FunctionToolCall( id=tool_call.id, call_id=tool_call.id, # FIXME: Check this name=tool_call.function.name, arguments=tool_call.function.arguments, status="completed", ) ) else: output.append( OutputMessage( type="message", id=str(entry.id), status="completed", role=entry.role, content=[ OutputText( type="output_text", text=entry.content[0].text, annotations=[], ) ], ) ) return Response( id=str(response_id), object="response", created_at=int(last_entry.created_at.timestamp()), status="completed", error=None, incomplete_details=None, instructions=None, max_output_tokens=None, model=last_entry.model, output=output, parallel_tool_calls=True, previous_response_id=None, # FIXME: We are not storing reasoning. So returning None for now. reasoning=None, store=True, temperature=1.0, text=Text(format=ResponseFormatText(type="text")), # FIXME: Add the correct format tool_choice="auto", tools=[], top_p=1.0, truncation="disabled", usage=ResponseUsage( input_tokens=0, input_tokens_details=InputTokensDetails(cached_tokens=0), output_tokens=sum(entry.token_count for entry in last_entries), output_tokens_details=OutputTokensDetails(reasoning_tokens=0), total_tokens=sum(entry.token_count for entry in last_entries), ), user=None, metadata={}, ) ================================================ FILE: src/agents-api/agents_api/routers/responses/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/secrets/__init__.py ================================================ # from .create_secret import create_agent_secret as create_agent_secret from .create_secret import create_developer_secret as create_developer_secret # from .delete_secret import delete_agent_secret as delete_agent_secret from .delete_secret import delete_developer_secret as delete_developer_secret # from .list_secrets import list_agent_secrets as list_agent_secrets from .list_secrets import list_developer_secrets as list_developer_secrets from .router import router as router # from .update_secret import update_agent_secret as update_agent_secret from .update_secret import update_developer_secret as update_developer_secret # TODO: Add get_secret_by_name endpoint ================================================ FILE: src/agents-api/agents_api/routers/secrets/create_secret.py ================================================ """Create secret endpoint.""" from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from agents_api.autogen.openapi_model import CreateSecretRequest, Secret from ...dependencies.developer_id import get_developer_id from ...queries.secrets import create_secret as create_secret_query from .router import router @router.post("/secrets", status_code=HTTP_201_CREATED, tags=["secrets"]) async def create_developer_secret( *, x_developer_id: Annotated[UUID, Depends(get_developer_id)], secret: CreateSecretRequest, ) -> Secret: """Create a new secret for a developer. Args: developer_id: ID of the developer creating the secret secret: Secret to create Returns: The created secret Raises: HTTPException: If a secret with this name already exists (409 Conflict) """ return await create_secret_query( developer_id=x_developer_id, name=secret.name, description=secret.description, value=secret.value, metadata=secret.metadata, ) # @router.post("/agents/{agent_id}/secrets", response_model=Secret) # async def create_agent_secret( # agent_id: UUID, # secret: CreateSecretRequest, # ) -> Secret: # """Create a new secret for an agent. # Args: # agent_id: ID of the agent creating the secret # secret: Secret to create # Returns: # The created secret # Raises: # HTTPException: If a secret with this name already exists (409 Conflict) # """ # return await create_secret_query( # agent_id=agent_id, # name=secret.name, # description=secret.description, # value=secret.value, # metadata=secret.metadata, # ) ================================================ FILE: src/agents-api/agents_api/routers/secrets/delete_secret.py ================================================ """Delete secret endpoint.""" from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from agents_api.autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.secrets import delete_secret as delete_secret_query from .router import router @router.delete( "/secrets/{secret_id}", response_model=ResourceDeletedResponse, status_code=HTTP_202_ACCEPTED, tags=["secrets"], ) async def delete_developer_secret( *, secret_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: """Delete a secret. Args: secret_id: ID of the secret to delete x_developer_id: ID of the developer who owns the secret Returns: The deleted secret Raises: HTTPException: If the secret doesn't exist """ return await delete_secret_query(secret_id=secret_id, developer_id=x_developer_id) # @router.delete("/agents/{agent_id}/secrets/{secret_id}", response_model=ResourceDeletedResponse) # async def delete_agent_secret( # agent_id: UUID, # secret_id: UUID, # ) -> ResourceDeletedResponse: # """Delete a secret. # Args: # secret_id: ID of the secret to delete # conn: Database connection # developer_id: ID of the developer who owns the secret # Returns: # The deleted secret # Raises: # HTTPException: If the secret doesn't exist # """ # return await delete_secret_query(secret_id=secret_id, agent_id=agent_id) ================================================ FILE: src/agents-api/agents_api/routers/secrets/list_secrets.py ================================================ """List secrets endpoint.""" from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Secret from ...dependencies.developer_id import get_developer_id from ...queries.secrets import list_secrets as list_secrets_query from .router import router @router.get("/secrets", response_model=list[Secret], tags=["secrets"]) async def list_developer_secrets( *, x_developer_id: Annotated[UUID, Depends(get_developer_id)], limit: int = 100, offset: int = 0, ) -> list[Secret]: """List all secrets for a developer. Args: x_developer_id: ID of the developer whose secrets to list limit: Maximum number of secrets to return offset: Number of secrets to skip Returns: List of secrets """ return await list_secrets_query( developer_id=x_developer_id, limit=limit, offset=offset, ) # @router.get("/agents/{agent_id}/secrets", response_model=list[Secret]) # async def list_agent_secrets( # agent_id: UUID, # *, # limit: int = 100, # offset: int = 0, # ) -> list[Secret]: # """List all secrets for an agent. # Args: # agent_id: ID of the agent whose secrets to list # limit: Maximum number of secrets to return # offset: Number of secrets to skip # Returns: # List of secrets # """ # return await list_secrets_query( # agent_id=agent_id, # limit=limit, # offset=offset, # ) ================================================ FILE: src/agents-api/agents_api/routers/secrets/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/secrets/update_secret.py ================================================ """Update secret endpoint.""" from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Secret, UpdateSecretRequest from ...dependencies.developer_id import get_developer_id from ...queries.secrets import update_secret as update_secret_query from .router import router @router.put("/secrets/{secret_id}", tags=["secrets"]) async def update_developer_secret( *, secret_id: UUID, data: UpdateSecretRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Secret: """Update a developer secret. Args: developer_id: ID of the developer who owns the secret secret_id: ID of the secret to update data: New secret data Returns: The updated secret Raises: HTTPException: If the secret doesn't exist or doesn't belong to the developer """ return await update_secret_query( secret_id=secret_id, developer_id=x_developer_id, name=data.name, description=data.description, metadata=data.metadata, value=data.value, ) # @router.put("/agents/{agent_id}/secrets/{secret_id}", response_model=Secret) # async def update_agent_secret( # agent_id: UUID, # secret_id: UUID, # data: UpdateSecretRequest, # ) -> Secret: # """Update an agent secret. # Args: # agent_id: ID of the agent who owns the secret # secret_id: ID of the secret to update # data: New secret data # Returns: # The updated secret # Raises: # HTTPException: If the secret doesn't exist or doesn't belong to the agent # """ # return await update_secret_query( # secret_id=secret_id, # agent_id=agent_id, # name=data.name, # description=data.description, # metadata=data.metadata, # value=data.value, # ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/__init__.py ================================================ # ruff: noqa: F401 from .chat import chat from .create_or_update_session import create_or_update_session from .create_session import create_session from .delete_session import delete_session from .get_session import get_session from .get_session_history import get_session_history from .list_sessions import list_sessions from .patch_session import patch_session from .render import render from .router import router from .update_session import update_session ================================================ FILE: src/agents-api/agents_api/routers/sessions/auto_tools/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/routers/sessions/auto_tools/chat.py ================================================ """ Chat implementation with automatic tool execution support. When auto_run_tools is enabled, this implementation will automatically execute tools and feed results back to the model. """ from typing import Any from uuid import UUID from fastapi import BackgroundTasks, HTTPException from fastapi.responses import StreamingResponse from uuid_extensions import uuid7 from ....autogen.openapi_model import ( BaseChosenToolCall, ChatInput, CreateEntryRequest, MessageChatResponse, Tool, ToolExecutionResult, ) from ....clients import litellm from ....common.protocol.developers import Developer from ....common.utils.datetime import utcnow from ....common.utils.tool_runner import run_llm_with_tools, run_tool_call from ....queries.entries.create_entries import create_entries # Entry saving logic will be implemented directly in this file from ..metrics import total_tokens_per_user from .render import render_chat_input COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" async def chat( developer: Developer, session_id: UUID, chat_input: ChatInput, background_tasks: BackgroundTasks, x_custom_api_key: str | None = None, mock_response: str | None = None, connection_pool: Any = None, # This is for testing purposes ) -> MessageChatResponse | StreamingResponse: """ Chat implementation with automatic tool execution. When chat_input.auto_run_tools is True, tools are executed automatically. When False, tools are not passed to the model to prevent tool calls. Note: Streaming is not supported when tools are involved. Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data with auto_run_tools flag. background_tasks (BackgroundTasks): The background tasks to run. x_custom_api_key (Optional[str]): The custom API key. mock_response (Optional[str]): Mock response for testing. connection_pool: Connection pool for testing purposes. Returns: MessageChatResponse: The chat response (no streaming with tools). """ ( messages, doc_references, tools, # auto_tools/render.py returns actual tools, not formatted settings, new_messages, chat_context, ) = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) # Determine tools to use based on auto_run_tools # AIDEV-NOTE: When auto_run_tools=False, pass empty tools list to prevent # model from making tool calls that won't be executed. This simplifies the # flow as the model will always return a regular completion instead of tool calls. tools_to_use = tools if chat_input.auto_run_tools else [] # Check if streaming is requested with tools if chat_input.stream and tools_to_use: # Streaming with tools is not supported msg = "Streaming is not supported when auto_run_tools is enabled" raise HTTPException(status_code=400, detail=msg) # Prepare base parameters completion_data = { "model": settings["model"], "user": str(developer.id), "tags": developer.tags, "custom_api_key": x_custom_api_key, "mock_response": mock_response, **settings, } # Remove messages from completion_data if it exists to avoid duplicate parameter error completion_data.pop("messages", None) completion_data.pop("tools", None) # Always use tool execution loop for consistency # Get the first agent from the chat context if not chat_context.agents: msg = "No agent found for the session" raise HTTPException(status_code=400, detail=msg) agent = chat_context.agents[0] # Create a partial function for tool execution with chat context async def run_tool_partial(tool: Tool, call: BaseChosenToolCall) -> ToolExecutionResult: return await run_tool_call( developer_id=developer.id, agent_id=agent.id, task_id=None, # No task in chat context session_id=session_id, tool=tool, call=call, connection_pool=connection_pool, ) # Handle streaming for non-tool cases if chat_input.stream and not tools_to_use: # Import streaming function from legacy implementation from ..legacy.chat import stream_chat_response # Prepare parameters for LiteLLM params = { "messages": messages, "tools": None, # No tools when streaming "stream": True, "stream_options": {"include_usage": True}, **completion_data, } # Get streaming response from LiteLLM model_response = await litellm.acompletion(**params) # Save input messages if requested if chat_input.save: new_entries = [ CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_request", ) for msg in new_messages ] background_tasks.add_task( create_entries, developer_id=developer.id, session_id=session_id, data=new_entries, ) # Return streaming response return StreamingResponse( stream_chat_response( model_response=model_response, developer_id=developer.id, doc_references=doc_references, should_save=chat_input.save, session_id=session_id, model=settings["model"], background_tasks=background_tasks, messages=messages, custom_api_key_used=x_custom_api_key is not None, developer_tags=developer.tags, connection_pool=connection_pool, ), media_type="text/event-stream", ) # Run LLM with automatic tool execution (tools=[] when auto_run_tools=False) all_messages = await run_llm_with_tools( messages=messages, tools=tools_to_use, # Empty list when auto_run_tools=False settings=completion_data, run_tool_call=run_tool_partial, ) # The last message is the final response final_response = all_messages[-1] # Save all messages to history if requested if chat_input.save: # Save input messages entries_to_save = [ CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_request", ) for msg in new_messages ] # Save all generated messages (including tool calls and results) # Correctly label each message based on its type for msg in all_messages[len(messages) :]: role = msg.get("role") # Determine the correct source based on message type if role == "assistant" and msg.get("tool_calls"): source = "tool_request" elif role == "assistant": source = "api_response" elif role == "tool": source = "tool_response" else: source = "api_request" # fallback, shouldn't happen entries_to_save.append( CreateEntryRequest.from_model_input( model=settings["model"], **msg, source=source, ) ) background_tasks.add_task( create_entries, developer_id=developer.id, session_id=session_id, data=entries_to_save, ) # Create non-streaming response # Extract the final message content from the last message final_content = final_response.get("content", "") final_tool_calls = final_response.get("tool_calls") # For usage data, we would need to track this in run_llm_with_tools usage_data = { "prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0, } chat_response = MessageChatResponse( id=uuid7(), created_at=utcnow(), jobs=[], docs=doc_references, usage=usage_data, choices=[ { "index": 0, "message": { "role": "assistant", "content": final_content, "tool_calls": final_tool_calls, }, "finish_reason": "stop", } ], ) # Track usage metrics if usage_data.get("total_tokens", 0) > 0: total_tokens_per_user.labels(str(developer.id)).inc(amount=usage_data["total_tokens"]) return chat_response ================================================ FILE: src/agents-api/agents_api/routers/sessions/auto_tools/render.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException, status from ....autogen.openapi_model import ( ChatInput, DocReference, RenderResponse, ) from ....common.protocol.developers import Developer from ....common.protocol.sessions import ChatContext from ....common.utils.template import render_template from ....dependencies.developer_id import get_developer_data from ....env import max_free_sessions from ....queries.chat.gather_messages import gather_messages from ....queries.chat.prepare_chat_context import prepare_chat_context from ....queries.sessions.count_sessions import count_sessions as count_sessions_query from ...utils.model_validation import validate_model COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" async def render( developer: Annotated[Developer, Depends(get_developer_data)], session_id: UUID, chat_input: ChatInput, ) -> RenderResponse: """ Renders a chat input. Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data. Returns: RenderResponse: The rendered chat input. """ messages, doc_references, tools, *_ = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) return RenderResponse(messages=messages, docs=doc_references, tools=tools) async def render_chat_input( developer: Developer, session_id: UUID, chat_input: ChatInput, ) -> tuple[list[dict], list[DocReference], list[dict] | None, dict, list[dict], ChatContext]: # check if the developer is paid if "paid" not in developer.tags: # get the session length sessions = await count_sessions_query(developer_id=developer.id) session_length = sessions["count"] if session_length > max_free_sessions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Session length exceeded the free tier limit", ) # First get the chat context chat_context: ChatContext = await prepare_chat_context( developer_id=developer.id, session_id=session_id, ) # Merge the settings and prepare environment chat_context.merge_settings(chat_input) settings: dict = chat_context.settings or {} await validate_model(settings.get("model")) # Get the past messages and doc references past_messages, doc_references = await gather_messages( developer=developer, session_id=session_id, chat_context=chat_context, chat_input=chat_input, ) # Prepare the environment env: dict = chat_context.get_chat_environment() env["docs"] = [ { "title": ref.title, "content": [ref.snippet.content], "metadata": ref.metadata or None, } for ref in doc_references ] # Add metadata from chat_input to the environment # AIDEV-NOTE: metadata field enables dynamic instructions at message level via system template if hasattr(chat_input, "metadata") and chat_input.metadata: env["metadata"] = chat_input.metadata # Render the system message if system_template := chat_context.merge_system_template( chat_context.session.system_template, ): system_message = { "role": "system", "content": system_template, } system_messages: list[dict] = await render_template([system_message], variables=env) past_messages = system_messages + past_messages # Render the incoming messages new_raw_messages = [msg.model_dump(mode="json") for msg in chat_input.messages] if chat_context.session.render_templates: new_messages = await render_template(new_raw_messages, variables=env) else: new_messages = new_raw_messages # Combine the past messages with the new messages messages = past_messages + new_messages # Get the agent tools tools = chat_context.get_active_tools() # If the user has provided tools, add them to the tools, but only if they are not already in the tools if chat_input.tools: existing_tool_names = {tool.name for tool in tools} for tool in chat_input.tools: if tool.name not in existing_tool_names: tools.append(tool) # FIXME: Truncate chat messages in the chat context # SCRUM-7 if chat_context.session.context_overflow == "truncate": # messages = messages[-settings["max_tokens"] :] msg = "Truncation is not yet implemented" raise NotImplementedError(msg) # FIXME: Hotfix for datetime not serializable. Needs investigation messages = [ { k: v for k, v in m.items() if k in ["role", "content", "tool_calls", "tool_call_id", "user"] } for m in messages ] # HOTFIX: for groq calls, litellm expects tool_calls_id not to be in the messages # FIXME: This is a temporary fix. We need to update the agent-api to use the new tool calling format is_groq_model = settings.get("model", "").lower().startswith("llama-3.1") if is_groq_model: messages = [ { k: v for k, v in message.items() if k not in ["tool_calls", "tool_call_id", "user", "continue_", "name"] } for message in messages ] # AIDEV-NOTE: Return actual Tool objects (unformatted) for auto_tools implementation # The auto_tools/chat.py handles tool formatting and execution internally return messages, doc_references, tools, settings, new_messages, chat_context ================================================ FILE: src/agents-api/agents_api/routers/sessions/chat.py ================================================ """ Chat endpoint router with feature flag-based implementation selection. Routes to either legacy or auto-tools implementation based on feature flags. """ from typing import Annotated, Any from uuid import UUID from fastapi import BackgroundTasks, Depends, Header from fastapi.responses import StreamingResponse from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import ( ChatInput, ChatResponse, MessageChatResponse, ) from ...common.protocol.developers import Developer from ...common.utils.feature_flags import get_feature_flag_value from ...dependencies.developer_id import get_developer_data from .router import router def with_mock_response(r: str | None = None): def wrapper(): return r return wrapper @router.post( "/sessions/{session_id}/chat", status_code=HTTP_201_CREATED, tags=["sessions", "chat"], response_model=ChatResponse, ) async def chat( developer: Annotated[Developer, Depends(get_developer_data)], session_id: UUID, chat_input: ChatInput, background_tasks: BackgroundTasks, x_custom_api_key: Annotated[str | None, Header(alias="X-Custom-Api-Key")] = None, mock_response: Annotated[str | None, Depends(with_mock_response())] = None, connection_pool: Any = None, # This is for testing purposes ) -> MessageChatResponse | StreamingResponse: """ Initiates a chat session. Routes to different implementations based on feature flags: - If auto_run_tools_chat feature flag is enabled, uses the new auto-tools implementation - Otherwise, uses the legacy implementation Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data. background_tasks (BackgroundTasks): The background tasks to run. x_custom_api_key (Optional[str]): The custom API key. mock_response (Optional[str]): Mock response for testing. connection_pool: Connection pool for testing purposes. Returns: ChatResponse or StreamingResponse: The chat response or streaming response. """ # Check if auto tools feature is enabled # AIDEV-NOTE: Feature flag controls which implementation to use if get_feature_flag_value("auto_run_tools_chat", developer_id=str(developer.id)): from .auto_tools.chat import chat as chat_auto_tools return await chat_auto_tools( developer=developer, session_id=session_id, chat_input=chat_input, background_tasks=background_tasks, x_custom_api_key=x_custom_api_key, mock_response=mock_response, connection_pool=connection_pool, ) # Default to legacy implementation from .legacy.chat import chat as chat_legacy return await chat_legacy( developer=developer, session_id=session_id, chat_input=chat_input, background_tasks=background_tasks, x_custom_api_key=x_custom_api_key, mock_response=mock_response, connection_pool=connection_pool, ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/create_or_update_session.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateOrUpdateSessionRequest, Session from ...dependencies.developer_id import get_developer_id from ...queries.sessions.create_or_update_session import ( create_or_update_session as create_or_update_session_query, ) from .router import router @router.post("/sessions/{session_id}", status_code=HTTP_201_CREATED, tags=["sessions"]) async def create_or_update_session( x_developer_id: Annotated[UUID, Depends(get_developer_id)], session_id: UUID, data: CreateOrUpdateSessionRequest, ) -> Session: return await create_or_update_session_query( developer_id=x_developer_id, session_id=session_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/create_session.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for creating new sessions. from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateSessionRequest, Session from ...dependencies.developer_id import get_developer_id from ...queries.sessions.create_session import create_session as create_session_query from .router import router # AIDEV-NOTE: API endpoint to create a new session. # It depends on the developer ID and the session data from the request body, and calls the create_session_query function. @router.post("/sessions", status_code=HTTP_201_CREATED, tags=["sessions"]) async def create_session( x_developer_id: Annotated[UUID, Depends(get_developer_id)], data: CreateSessionRequest, ) -> Session: return await create_session_query( developer_id=x_developer_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/delete_session.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.sessions.delete_session import delete_session as delete_session_query from .router import router @router.delete("/sessions/{session_id}", status_code=HTTP_202_ACCEPTED, tags=["sessions"]) async def delete_session( session_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_session_query(developer_id=x_developer_id, session_id=session_id) ================================================ FILE: src/agents-api/agents_api/routers/sessions/exceptions.py ================================================ class BaseSessionException(Exception): pass class InputTooBigError(BaseSessionException): def __init__(self, actual_tokens, required_tokens) -> None: super().__init__( f"Input is too big, {actual_tokens} tokens provided, but only {required_tokens} tokens are allowed.", ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/get_session.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for retrieving a specific session. from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Session from ...dependencies.developer_id import get_developer_id from ...queries.sessions.get_session import get_session as get_session_query from .router import router # AIDEV-NOTE: API endpoint to get a session by its ID. # It depends on the developer ID and the session ID from the path parameter, and calls the get_session_query function. @router.get("/sessions/{session_id}", tags=["sessions"]) async def get_session( session_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Session: return await get_session_query(developer_id=x_developer_id, session_id=session_id) ================================================ FILE: src/agents-api/agents_api/routers/sessions/get_session_history.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import History from ...dependencies.developer_id import get_developer_id from ...queries.entries.get_history import get_history as get_history_query from .router import router @router.get("/sessions/{session_id}/history", tags=["sessions"]) async def get_session_history( session_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> History: return await get_history_query(developer_id=x_developer_id, session_id=session_id) ================================================ FILE: src/agents-api/agents_api/routers/sessions/legacy/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/routers/sessions/legacy/chat.py ================================================ from collections.abc import AsyncGenerator from typing import Annotated, Any from uuid import UUID from fastapi import BackgroundTasks, Depends, Header from fastapi.responses import StreamingResponse from litellm.utils import Choices, Message, ModelResponse from uuid_extensions import uuid7 from ....autogen.openapi_model import ( ChatInput, ChunkChatResponse, CreateEntryRequest, MessageChatResponse, ) from ....clients import litellm from ....common.protocol.developers import Developer from ....common.utils.datetime import utcnow from ....common.utils.usage import track_usage from ....dependencies.developer_id import get_developer_data from ....queries.entries.create_entries import create_entries from ..metrics import total_tokens_per_user from .render import render_chat_input COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" def with_mock_response(r: str | None = None): def wrapper(): return r return wrapper def _join_deltas(acc: dict, delta: dict) -> dict: acc["content"] = (acc.get("content", "") or "") + (delta.pop("content", "") or "") return {**acc, **delta} async def stream_chat_response( model_response: litellm.CustomStreamWrapper, developer_id: UUID, doc_references: list[Any], should_save: bool = False, session_id: UUID | None = None, model: str = "", background_tasks: BackgroundTasks | None = None, messages: list[dict] | None = None, custom_api_key_used: bool = False, developer_tags: list[str] | None = None, connection_pool: Any = None, # This is for testing purposes ) -> AsyncGenerator[str, None]: """ Streams the chat response as Server-Sent Events. Args: model_response: The streaming model response from LiteLLM developer_id: The developer ID for usage tracking doc_references: Document references to include in the response should_save: Whether to save the response to history session_id: The session ID for saving response model: The model name used for the response background_tasks: Background tasks for saving responses messages: The original messages sent to the model (for usage tracking) custom_api_key_used: Whether a custom API key was used developer_tags: Tags associated with the developer (for metadata) connection_pool: Connection pool for testing purposes """ collected_output = [] # Variables to collect the complete response for saving to history if needed default_role = "assistant" default_finish_reason = "stop" # Usage information will be collected from the stream response usage_data = None # Create initial response with metadata response_id = uuid7() created_time = utcnow() # Process all chunks async for chunk in model_response: if not collected_output: collected_output = [{} for _ in range(len(chunk.choices or []))] collected_output = [ _join_deltas(acc, choice.delta.model_dump()) for acc, choice in zip(collected_output, chunk.choices) ] # Check if this chunk contains usage data if hasattr(chunk, "usage") and chunk.usage: usage_data = chunk.usage.model_dump() # Create a proper ChunkChatResponse for each chunk chunk_response = ChunkChatResponse( id=response_id, created_at=created_time, docs=doc_references, jobs=[], usage=usage_data, choices=[ { **choice.model_dump(), "delta": { **choice.delta.model_dump(), "role": choice.delta.role or default_role, }, "finish_reason": choice.finish_reason or default_finish_reason, } for choice in chunk.choices ], ) # Forward the chunk as a proper ChunkChatResponse yield f"data: {chunk_response.model_dump_json()}\n\n" # Track token usage with Prometheus metrics if available if usage_data and usage_data.get("total_tokens", 0) > 0: total_tokens_per_user.labels(str(developer_id)).inc( amount=usage_data.get("total_tokens", 0) ) # Track usage in database await track_usage( developer_id=developer_id, model=model, messages=messages or [], response=ModelResponse( id=str(response_id), choices=[ Choices( message=Message( content=choice.get("content", ""), tool_calls=choice.get("tool_calls"), ), ) for choice in collected_output ], usage=usage_data, ), custom_api_used=custom_api_key_used, metadata={ "tags": developer_tags or [], "streaming": True, }, connection_pool=connection_pool, ) # Save the complete response if requested if should_save: background_tasks.add_task( create_entries, developer_id=developer_id, session_id=session_id, data=[ CreateEntryRequest.from_model_input( model=model, **{ **choice, "role": choice.get("role", default_role) or default_role, "finish_reason": choice.get("finish_reason", default_finish_reason) or default_finish_reason, }, source="api_response", ) for choice in collected_output ], ) async def chat( developer: Annotated[Developer, Depends(get_developer_data)], session_id: UUID, chat_input: ChatInput, background_tasks: BackgroundTasks, x_custom_api_key: Annotated[str | None, Header(alias="X-Custom-Api-Key")] = None, mock_response: Annotated[str | None, Depends(with_mock_response())] = None, connection_pool: Any = None, # This is for testing purposes ) -> MessageChatResponse | StreamingResponse: """ Initiates a chat session. Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data. background_tasks (BackgroundTasks): The background tasks to run. x_custom_api_key (Optional[str]): The custom API key. Returns: ChatResponse or StreamingResponse: The chat response or streaming response. """ ( messages, doc_references, formatted_tools, settings, new_messages, chat_context, ) = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) # Prepare parameters for LiteLLM params = { "messages": messages, "tools": formatted_tools or None, "user": str(developer.id), "tags": developer.tags, "custom_api_key": x_custom_api_key, } # Set streaming parameter based on chat_input.stream if chat_input.stream: params["stream"] = True params["stream_options"] = {"include_usage": True} payload = {**settings, **params, "mock_response": mock_response} # Get response from LiteLLM (streaming or non-streaming) model_response = await litellm.acompletion(**payload) # Save the input messages to the session history if requested if chat_input.save: new_entries = [ CreateEntryRequest.from_model_input( model=settings["model"], **msg, source="api_request", ) for msg in new_messages ] # For non-streaming, save the response immediately if not chat_input.stream: # Add the response to the new entries # FIXME: We need to save all the choices new_entries.append( CreateEntryRequest.from_model_input( model=settings["model"], **model_response.choices[0].model_dump()["message"], source="api_response", ), ) background_tasks.add_task( create_entries, developer_id=developer.id, session_id=session_id, data=new_entries, ) # Handle streaming response if chat_input.stream: # Return streaming response using the unified function return StreamingResponse( stream_chat_response( model_response=model_response, developer_id=developer.id, doc_references=doc_references, should_save=chat_input.save, session_id=session_id, model=settings["model"], background_tasks=background_tasks, messages=messages, custom_api_key_used=x_custom_api_key is not None, developer_tags=developer.tags, connection_pool=connection_pool, ), media_type="text/event-stream", ) # Handle non-streaming response # Adaptive context handling jobs = [] if chat_context.session.context_overflow == "adaptive": # FIXME: Start the adaptive context workflow # SCRUM-8 msg = "Adaptive context is not yet implemented" raise NotImplementedError(msg) chat_response = MessageChatResponse( id=uuid7(), created_at=utcnow(), jobs=jobs, docs=doc_references, usage=model_response.usage.model_dump(), choices=[choice.model_dump() for choice in model_response.choices], ) total_tokens_per_user.labels(str(developer.id)).inc( amount=chat_response.usage.total_tokens if chat_response.usage is not None else 0, ) return chat_response ================================================ FILE: src/agents-api/agents_api/routers/sessions/legacy/render.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException, status from ....autogen.openapi_model import ( ChatInput, DocReference, RenderResponse, ) from ....common.protocol.developers import Developer from ....common.protocol.sessions import ChatContext from ....common.utils.expressions import evaluate_expressions from ....common.utils.template import render_template from ....dependencies.developer_id import get_developer_data from ....env import max_free_sessions from ....queries.chat.gather_messages import gather_messages from ....queries.chat.prepare_chat_context import prepare_chat_context from ....queries.secrets.list import list_secrets_query from ....queries.sessions.count_sessions import count_sessions as count_sessions_query from ...utils.model_validation import validate_model COMPUTER_USE_BETA_FLAG = "computer-use-2024-10-22" async def render( developer: Annotated[Developer, Depends(get_developer_data)], session_id: UUID, chat_input: ChatInput, ) -> RenderResponse: """ Renders a chat input. Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data. Returns: RenderResponse: The rendered chat input. """ messages, doc_references, tools, *_ = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) return RenderResponse(messages=messages, docs=doc_references, tools=tools) async def render_chat_input( developer: Developer, session_id: UUID, chat_input: ChatInput, ) -> tuple[list[dict], list[DocReference], list[dict] | None, dict, list[dict], ChatContext]: # check if the developer is paid if "paid" not in developer.tags: # get the session length sessions = await count_sessions_query(developer_id=developer.id) session_length = sessions["count"] if session_length > max_free_sessions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Session length exceeded the free tier limit", ) # First get the chat context chat_context: ChatContext = await prepare_chat_context( developer_id=developer.id, session_id=session_id, ) # Merge the settings and prepare environment chat_context.merge_settings(chat_input) settings: dict = chat_context.settings or {} await validate_model(settings.get("model")) # Get the past messages and doc references past_messages, doc_references = await gather_messages( developer=developer, session_id=session_id, chat_context=chat_context, chat_input=chat_input, ) # Prepare the environment env: dict = chat_context.get_chat_environment() env["docs"] = [ { "title": ref.title, "content": [ref.snippet.content], "metadata": ref.metadata or None, } for ref in doc_references ] # Add metadata from chat_input to the environment # AIDEV-NOTE: metadata field enables dynamic instructions at message level via system template if hasattr(chat_input, "metadata") and chat_input.metadata: env["metadata"] = chat_input.metadata # Render the system message if system_template := chat_context.merge_system_template( chat_context.session.system_template, ): system_message = { "role": "system", "content": system_template, } system_messages: list[dict] = await render_template([system_message], variables=env) past_messages = system_messages + past_messages # Render the incoming messages new_raw_messages = [msg.model_dump(mode="json") for msg in chat_input.messages] if chat_context.session.render_templates: new_messages = await render_template(new_raw_messages, variables=env) else: new_messages = new_raw_messages # Combine the past messages with the new messages messages = past_messages + new_messages # Get the agent tools tools = chat_context.get_active_tools() # If the user has provided tools, add them to the tools, but only if they are not already in the tools if chat_input.tools: existing_tool_names = {tool.name for tool in tools} for tool in chat_input.tools: if tool.name not in existing_tool_names: tools.append(tool) # Check if using Claude model and has specific tool types is_claude_model = settings.get("model", "").lower().startswith("claude-3.5") # Format tools for litellm # formatted_tools = ( # tools if is_claude_model else [format_tool(tool) for tool in tools] # ) # FIXME: Truncate chat messages in the chat context # SCRUM-7 if chat_context.session.context_overflow == "truncate": # messages = messages[-settings["max_tokens"] :] msg = "Truncation is not yet implemented" raise NotImplementedError(msg) # FIXME: Hotfix for datetime not serializable. Needs investigation messages = [ { k: v for k, v in m.items() if k in ["role", "content", "tool_calls", "tool_call_id", "user"] } for m in messages ] # FIXME: Hack to make the computer use tools compatible with litellm # Issue was: litellm expects type to be `computer_20241022` and spec to be # `function` (see: https://docs.litellm.ai/docs/providers/anthropic#computer-tools) # but we don't allow that (spec should match type). formatted_tools = [] secrets = {} if tools and any( tool.type == "computer_20241022" and tool.computer_20241022 for tool in tools ): secrets = { secret.name: secret.value for secret in await list_secrets_query( developer_id=developer.id, decrypt=True, ) } for tool in tools: if tool.type == "computer_20241022" and tool.computer_20241022: function = tool.computer_20241022 tool = { "type": tool.type, "function": { "name": tool.name, "parameters": { k: evaluate_expressions(v, values={"secrets": secrets}) for k, v in function.model_dump().items() if k not in ["name", "type"] } if function is not None else {}, }, } formatted_tools.append(tool) # If not using Claude model # FIXME: Enable formatted_tools once format-tools PR is merged. if not is_claude_model: formatted_tools = None # HOTFIX: for groq calls, litellm expects tool_calls_id not to be in the messages # FIXME: This is a temporary fix. We need to update the agent-api to use the new tool calling format is_groq_model = settings.get("model", "").lower().startswith("llama-3.1") if is_groq_model: messages = [ { k: v for k, v in message.items() if k not in ["tool_calls", "tool_call_id", "user", "continue_", "name"] } for message in messages ] return messages, doc_references, formatted_tools, settings, new_messages, chat_context ================================================ FILE: src/agents-api/agents_api/routers/sessions/list_sessions.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for listing sessions with filtering, pagination, and sorting. from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ListResponse, Session from ...dependencies.developer_id import get_developer_id from ...dependencies.query_filter import MetadataFilter, create_filter_extractor from ...queries.sessions.list_sessions import list_sessions as list_sessions_query from .router import router # AIDEV-NOTE: API endpoint to list sessions. # Supports filtering by metadata, pagination (limit, offset), and sorting (sort_by, direction). # It depends on developer ID, metadata filter, and query parameters, and calls the list_sessions_query function. @router.get("/sessions", tags=["sessions"]) async def list_sessions( x_developer_id: Annotated[UUID, Depends(get_developer_id)], metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ] = MetadataFilter(), limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Session]: sessions = await list_sessions_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json") or {}, ) return ListResponse[Session](items=sessions) ================================================ FILE: src/agents-api/agents_api/routers/sessions/metrics.py ================================================ from prometheus_client import Counter total_tokens_per_user = Counter( "total_tokens_per_user", "Total token count per user", labelnames=("developer_id",), ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/patch_session.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import PatchSessionRequest, Session from ...dependencies.developer_id import get_developer_id from ...queries.sessions.patch_session import patch_session as patch_session_query from .router import router @router.patch("/sessions/{session_id}", tags=["sessions"]) async def patch_session( x_developer_id: Annotated[UUID, Depends(get_developer_id)], session_id: UUID, data: PatchSessionRequest, ) -> Session: return await patch_session_query( developer_id=x_developer_id, session_id=session_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/render.py ================================================ """ Render endpoint router with feature flag-based implementation selection. Routes to either legacy or auto-tools implementation based on feature flags. """ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_200_OK from ...autogen.openapi_model import ( ChatInput, RenderResponse, ) from ...common.protocol.developers import Developer from ...common.utils.feature_flags import get_feature_flag_value from ...dependencies.developer_id import get_developer_data from .router import router @router.post( "/sessions/{session_id}/render", status_code=HTTP_200_OK, tags=["sessions", "render"], ) async def render( developer: Annotated[Developer, Depends(get_developer_data)], session_id: UUID, chat_input: ChatInput, ) -> RenderResponse: """ Renders a chat input. Routes to different implementations based on feature flags: - If auto_run_tools_chat feature flag is enabled, uses the new auto-tools implementation - Otherwise, uses the legacy implementation Parameters: developer (Developer): The developer associated with the chat session. session_id (UUID): The unique identifier of the chat session. chat_input (ChatInput): The chat input data. Returns: RenderResponse: The rendered chat input. """ # Check if auto tools feature is enabled # AIDEV-NOTE: Feature flag controls which implementation to use if get_feature_flag_value("auto_run_tools_chat", developer_id=str(developer.id)): from .auto_tools.render import render as render_auto_tools return await render_auto_tools( developer=developer, session_id=session_id, chat_input=chat_input, ) # Default to legacy implementation from .legacy.render import render as render_legacy return await render_legacy( developer=developer, session_id=session_id, chat_input=chat_input, ) ================================================ FILE: src/agents-api/agents_api/routers/sessions/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/sessions/update_session.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import Session, UpdateSessionRequest from ...dependencies.developer_id import get_developer_id from ...queries.sessions.update_session import update_session as update_session_query from .router import router @router.put("/sessions/{session_id}", tags=["sessions"]) async def update_session( x_developer_id: Annotated[UUID, Depends(get_developer_id)], session_id: UUID, data: UpdateSessionRequest, ) -> Session: return await update_session_query( developer_id=x_developer_id, session_id=session_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/__init__.py ================================================ # ruff: noqa: F401 from .create_or_update_task import create_or_update_task from .create_task import create_task from .create_task_execution import create_task_execution from .get_execution_details import get_execution_details from .get_task_details import get_task_details from .list_execution_transitions import list_execution_transitions from .list_task_executions import list_task_executions from .list_tasks import list_tasks from .router import router from .stream_execution_status import stream_execution_status from .stream_transitions_events import stream_transitions_events from .update_execution import update_execution ================================================ FILE: src/agents-api/agents_api/routers/tasks/create_or_update_task.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException from jsonschema import validate from jsonschema.exceptions import SchemaError, ValidationError from starlette.status import HTTP_201_CREATED, HTTP_400_BAD_REQUEST from ...autogen.openapi_model import CreateOrUpdateTaskRequest, Task from ...common.utils.task_validation import validate_task from ...dependencies.developer_id import get_developer_id from ...queries.tasks.create_or_update_task import ( create_or_update_task as create_or_update_task_query, ) from .router import router @router.post("/agents/{agent_id}/tasks/{task_id}", status_code=HTTP_201_CREATED, tags=["tasks"]) async def create_or_update_task( data: CreateOrUpdateTaskRequest, agent_id: UUID, task_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Task: # Validate the input schema try: if data.input_schema is not None: validate(None, data.input_schema) except SchemaError: raise HTTPException(detail="Invalid input schema", status_code=HTTP_400_BAD_REQUEST) except ValidationError: pass # Validate Python expressions in the task spec validation_result = validate_task(data) if not validation_result.is_valid: # Prepare a detailed error response # Gather all issues categorized by type issues = [ { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "python_expression", **({} if issue.details is None else {"details": issue.details}), } for issue in validation_result.python_expression_issues ] issues.extend( { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "schema", } for issue in validation_result.schema_issues ) issues.extend( { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "other", } for issue in validation_result.other_issues ) # Return a structured error response raise HTTPException( status_code=HTTP_400_BAD_REQUEST, detail={ "message": "Task specification contains validation errors", "issues": issues, }, ) return await create_or_update_task_query( developer_id=x_developer_id, agent_id=agent_id, task_id=task_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/create_task.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException from jsonschema import validate from jsonschema.exceptions import SchemaError, ValidationError from starlette.status import HTTP_201_CREATED, HTTP_400_BAD_REQUEST from ...autogen.openapi_model import CreateTaskRequest, Task from ...common.utils.task_validation import validate_task from ...dependencies.developer_id import get_developer_id from ...queries.tasks.create_task import create_task as create_task_query from .router import router @router.post("/agents/{agent_id}/tasks", status_code=HTTP_201_CREATED, tags=["tasks"]) async def create_task( data: CreateTaskRequest, agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Task: # Validate the input schema try: if data.input_schema is not None: validate(None, data.input_schema) except SchemaError: raise HTTPException(detail="Invalid input schema", status_code=HTTP_400_BAD_REQUEST) except ValidationError: pass # Validate Python expressions in the task spec validation_result = validate_task(data) if not validation_result.is_valid: # Prepare a detailed error response # Gather all issues categorized by type issues = [ { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "python_expression", **({} if issue.details is None else {"details": issue.details}), } for issue in validation_result.python_expression_issues ] issues.extend( { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "schema", } for issue in validation_result.schema_issues ) issues.extend( { "location": issue.location, "message": issue.message, "severity": issue.severity, "type": "other", } for issue in validation_result.other_issues ) # Return a structured error response raise HTTPException( status_code=HTTP_400_BAD_REQUEST, detail={ "message": "Task specification contains validation errors", "issues": issues, }, ) return await create_task_query( developer_id=x_developer_id, agent_id=agent_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/create_task_execution.py ================================================ # AIDEV-NOTE: This module defines the API endpoint for creating and initiating task executions. import logging from typing import Annotated, Any from uuid import UUID from beartype import beartype from fastapi import BackgroundTasks, Depends, HTTPException, status from jsonschema import validate from jsonschema.exceptions import ValidationError from starlette.status import HTTP_201_CREATED from temporalio.client import WorkflowHandle from uuid_extensions import uuid7 from ...autogen.openapi_model import ( CreateExecutionRequest, CreateTransitionRequest, Execution, TransitionTarget, ) from ...clients.temporal import run_task_execution_workflow from ...common.protocol.developers import Developer from ...common.protocol.models import task_to_spec from ...dependencies.developer_id import get_developer_id from ...env import max_free_executions from ...queries.developers.get_developer import get_developer from ...queries.executions.count_executions import ( count_executions as count_executions_query, ) from ...queries.executions.create_execution import ( create_execution as create_execution_query, ) from ...queries.executions.create_execution_transition import ( create_execution_transition, ) from ...queries.executions.create_temporal_lookup import create_temporal_lookup from ...queries.executions.prepare_execution_input import prepare_execution_input from ...queries.tasks.get_task import get_task as get_task_query from .router import router logger: logging.Logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # AIDEV-NOTE: Initiates a task execution by creating a database entry and starting the Temporal workflow. @beartype async def start_execution( *, developer_id: UUID, task_id: UUID, data: CreateExecutionRequest, connection_pool=None, ) -> tuple[Execution, WorkflowHandle]: execution_id = uuid7() execution = await create_execution_query( developer_id=developer_id, task_id=task_id, execution_id=execution_id, data=data, connection_pool=connection_pool, ) execution_input = await prepare_execution_input( developer_id=developer_id, task_id=task_id, execution_id=execution_id, connection_pool=connection_pool, ) task = await get_task_query( developer_id=developer_id, task_id=task_id, connection_pool=connection_pool, ) execution_input.task = task_to_spec(task) execution_input.task.id = task.id job_id = uuid7() try: # AIDEV-NOTE: Runs the Temporal task execution workflow. handle = await run_task_execution_workflow( execution_input=execution_input, job_id=job_id, ) except Exception as e: logger.exception(e) # AIDEV-NOTE: Creates an error transition in the database if the workflow fails to start. await create_execution_transition( developer_id=developer_id, execution_id=execution_id, data=CreateTransitionRequest( type="error", output={"error": str(e)}, current=TransitionTarget( workflow="main", step=0, scope_id=uuid7(), ), next=None, ), connection_pool=connection_pool, ) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Execution creation failed", ) from e return execution, handle # AIDEV-NOTE: API endpoint to create a new task execution for a given task. # It depends on developer ID, task ID from the path, and execution data from the request body. # Includes validation for the input data schema and checks for free tier limits before starting the execution. @router.post( "/tasks/{task_id}/executions", status_code=HTTP_201_CREATED, tags=["executions"], ) async def create_task_execution( task_id: UUID, data: CreateExecutionRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], background_tasks: BackgroundTasks, connection_pool: Any | None = None, ) -> Execution: try: # AIDEV-NOTE: Validates the input data against the task's input schema. task = await get_task_query( task_id=task_id, developer_id=x_developer_id, connection_pool=connection_pool, ) validate(data.input, task.input_schema) except ValidationError: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid request arguments schema", ) # AIDEV-NOTE: Checks if the developer is within the free tier execution limit for the task. # get developer data developer: Developer = await get_developer( developer_id=x_developer_id, connection_pool=connection_pool, ) # check if the developer is paid if "paid" not in developer.tags: executions = await count_executions_query( developer_id=x_developer_id, task_id=task_id, connection_pool=connection_pool, ) execution_count = executions["count"] if execution_count > max_free_executions: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Execution count exceeded the free tier limit", ) # AIDEV-NOTE: Starts the task execution and creates a Temporal lookup entry in the background. # AIDEV-NOTE: Propagate pooled connections when endpoint is invoked via system tools. execution, handle = await start_execution( developer_id=x_developer_id, task_id=task_id, data=data, connection_pool=connection_pool, ) background_tasks.add_task( create_temporal_lookup, execution_id=execution.id, workflow_handle=handle, connection_pool=connection_pool, ) execution.metadata = {"jobs": [handle.id]} return execution ================================================ FILE: src/agents-api/agents_api/routers/tasks/get_execution_details.py ================================================ from uuid import UUID from ...autogen.openapi_model import ( Execution, ) from ...queries.executions.get_execution import ( get_execution as get_execution_query, ) from .router import router @router.get("/executions/{execution_id}", tags=["executions"]) async def get_execution_details(execution_id: UUID) -> Execution: return await get_execution_query(execution_id=execution_id) ================================================ FILE: src/agents-api/agents_api/routers/tasks/get_task_details.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ( Task, ) from ...dependencies.developer_id import get_developer_id from ...queries.tasks.get_task import get_task as get_task_query from .router import router @router.get("/tasks/{task_id}", tags=["tasks"]) async def get_task_details( task_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> Task: task = await get_task_query(developer_id=x_developer_id, task_id=task_id) task_data = task.model_dump() for workflow in task_data.get("workflows", []): if workflow["name"] == "main": task_data["main"] = workflow.get("steps", []) break return Task(**task_data) ================================================ FILE: src/agents-api/agents_api/routers/tasks/list_execution_transitions.py ================================================ from typing import Literal from uuid import UUID from fastapi import HTTPException, status from ...autogen.openapi_model import ( ListResponse, Transition, ) from ...queries.executions.list_execution_transitions import ( list_execution_transitions as list_execution_transitions_query, ) from .router import router @router.get("/executions/{execution_id}/transitions", tags=["executions"]) async def list_execution_transitions( execution_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", scope_id: UUID | None = None, ) -> ListResponse[Transition]: transitions = await list_execution_transitions_query( execution_id=execution_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, scope_id=scope_id, ) return ListResponse[Transition](items=transitions) @router.get("/executions/{execution_id}/transitions/{transition_id}", tags=["tasks"]) async def get_execution_transition( execution_id: UUID, transition_id: UUID, ) -> Transition: try: transitions = await list_execution_transitions_query( execution_id=execution_id, transition_id=transition_id, ) if not transitions: raise IndexError return transitions[0] except (IndexError, KeyError): raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Transition not found", ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/list_task_executions.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ( Execution, ListResponse, ) from ...dependencies.developer_id import get_developer_id from ...queries.executions.list_executions import ( list_executions as list_task_executions_query, ) from .router import router @router.get("/tasks/{task_id}/executions", tags=["tasks"]) async def list_task_executions( task_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Execution]: executions = await list_task_executions_query( task_id=task_id, developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, ) return ListResponse[Execution](items=executions) ================================================ FILE: src/agents-api/agents_api/routers/tasks/list_tasks.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ( ListResponse, Task, ) from ...dependencies.developer_id import get_developer_id from ...queries.tasks.list_tasks import list_tasks as list_tasks_query from .router import router @router.get("/agents/{agent_id}/tasks", tags=["tasks"]) async def list_tasks( agent_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[Task]: query_results = await list_tasks_query( agent_id=agent_id, developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, ) tasks = [] for row in query_results: row_dict = row.model_dump() for workflow in row_dict.get("workflows", []): if workflow["name"] == "main": row_dict["main"] = workflow["steps"] break tasks.append(Task(**row_dict)) return ListResponse[Task](items=tasks) ================================================ FILE: src/agents-api/agents_api/routers/tasks/router.py ================================================ from collections.abc import Callable from fastapi import APIRouter, Request, Response from fastapi.routing import APIRoute from ...common.utils import yaml class YamlRequest(Request): async def body(self) -> bytes: if not hasattr(self, "_body"): body = await super().body() if self.headers.get("content-type") in [ "application/x-yaml", "application/yaml", "text/yaml", ]: body = yaml.load(body) self._body = body return self._body class YamlRoute(APIRoute): def get_route_handler(self) -> Callable: original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request) -> Response: request = YamlRequest(request.scope, request.receive) return await original_route_handler(request) return custom_route_handler router: APIRouter = APIRouter( route_class=YamlRoute, ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/stream_execution_status.py ================================================ import logging from functools import partial from typing import Annotated from uuid import UUID import anyio from anyio.streams.memory import MemoryObjectSendStream from fastapi import Depends, HTTPException, Request, status from sse_starlette.sse import EventSourceResponse from ...autogen.openapi_model import ExecutionStatusEvent from ...dependencies.developer_id import get_developer_id from ...queries.executions.get_execution_status import ( get_execution_status as get_execution_status_query, ) from .router import router # Set up logger logger = logging.getLogger(__name__) # Poll interval in seconds between status checks STREAM_POLL_INTERVAL = 1 # Overall timeout for the SSE connection (seconds) STREAM_TIMEOUT = 10 * 60 # Terminal states that indicate we should end the stream TERMINAL_STATES = {"succeeded", "failed", "cancelled"} async def execution_status_publisher( send_chan: MemoryObjectSendStream, execution_id: UUID, x_developer_id: UUID, request: Request, ): """ Publishes execution status updates to the SSE stream. Args: send_chan: Channel to send updates through execution_id: ID of the execution to monitor x_developer_id: Developer ID for permission checking request: FastAPI request object to check for disconnection """ async with send_chan: last_updated_at: str | None = None while True: # Exit loop if client disconnected if await request.is_disconnected(): logger.debug( f"Client disconnected from status stream for execution {execution_id}" ) break # Fetch latest execution status via SQL query try: execution_status_event: ExecutionStatusEvent = await get_execution_status_query( developer_id=x_developer_id, execution_id=execution_id, ) except Exception as e: # Log the error and continue logger.error(f"Error fetching status for execution {execution_id}: {e!s}") await anyio.sleep(STREAM_POLL_INTERVAL) continue if not execution_status_event: logger.warning(f"No status found for execution {execution_id}") await anyio.sleep(STREAM_POLL_INTERVAL) continue updated_at = execution_status_event.updated_at if updated_at and updated_at != last_updated_at: last_updated_at = updated_at try: json_data = execution_status_event.model_dump_json() await send_chan.send({"data": json_data}) # Log terminal states if execution_status_event.status in TERMINAL_STATES: logger.info( f"Execution {execution_id} reached terminal state: {execution_status_event.status}" ) break except anyio.BrokenResourceError as e: logger.warning( f"Connection broken while sending status for execution {execution_id}: {e!s}" ) break except Exception as e: logger.error(f"Error sending status for execution {execution_id}: {e!s}") # Continue the loop to try again # Wait before polling again await anyio.sleep(STREAM_POLL_INTERVAL) @router.get( "/executions/{execution_id}/status.stream", response_class=EventSourceResponse, tags=["executions"], ) async def stream_execution_status( request: Request, x_developer_id: Annotated[UUID, Depends(get_developer_id)], execution_id: UUID, ): """ SSE endpoint that streams the status of a given execution_id by polling the latest_executions view. """ try: try: # Verify execution exists before starting the stream await get_execution_status_query( developer_id=x_developer_id, execution_id=execution_id, ) except HTTPException as e: if "not found" in str(e).lower(): raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Execution {execution_id} not found", ) raise e send_chan, recv_chan = anyio.create_memory_object_stream(max_buffer_size=1) logger.debug(f"Starting status stream for execution {execution_id}") return EventSourceResponse( recv_chan, data_sender_callable=partial( execution_status_publisher, send_chan, execution_id, x_developer_id, request, ), send_timeout=STREAM_TIMEOUT, ) except Exception as e: error_message = f"Failed to start status stream for execution {execution_id}: {e!s}" logger.error(error_message) if isinstance(e, HTTPException): raise e raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to start execution status stream", ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/stream_transitions_events.py ================================================ import logging from base64 import b64decode, b64encode from functools import partial from typing import Annotated from uuid import UUID import anyio from anyio.streams.memory import MemoryObjectSendStream from fastapi import Depends, Query from sse_starlette.sse import EventSourceResponse from starlette.requests import Request from temporalio.api.enums.v1 import EventType from temporalio.client import ( WorkflowHistoryEventAsyncIterator, WorkflowHistoryEventFilterType, ) from ...autogen.openapi_model import TransitionEvent from ...clients.temporal import get_workflow_handle from ...dependencies.developer_id import get_developer_id from ...queries.executions.lookup_temporal_data import lookup_temporal_data from ...worker.codec import from_payload_data from .router import router STREAM_TIMEOUT = 10 * 60 # 10 minutes # Create a function to publish events to the client # TODO: Unnest and simplify this function async def event_publisher( inner_send_chan: MemoryObjectSendStream, history_events: WorkflowHistoryEventAsyncIterator, ): async with inner_send_chan: try: async for event in history_events: # TODO: We should get the workflow-completed event as well and use that to close the stream if event.event_type == EventType.EVENT_TYPE_ACTIVITY_TASK_COMPLETED: payloads = event.activity_task_completed_event_attributes.result.payloads for payload in payloads: try: data_item = from_payload_data(payload.data) except Exception as e: logging.warning(f"Could not decode payload: {e}") continue if not isinstance(data_item, TransitionEvent): continue # FIXME: This does NOT return the last event (and maybe other events) transition_event_dict = { "type": data_item.type, "output": data_item.output, "created_at": data_item.created_at.isoformat(), } next_page_token = ( b64encode(history_events.next_page_token).decode("ascii") if history_events.next_page_token else None ) await inner_send_chan.send({ "data": { "transition": transition_event_dict, "next_page_token": next_page_token, }, }) except anyio.get_cancelled_exc_class() as e: with anyio.move_on_after(STREAM_TIMEOUT, shield=True): await inner_send_chan.send({"closing": True}) raise e @router.get("/executions/{execution_id}/transitions.stream", tags=["executions"]) async def stream_transitions_events( x_developer_id: Annotated[UUID, Depends(get_developer_id)], execution_id: UUID, req: Request, next_page_token: Annotated[str | None, Query()] = None, ): # Get temporal id temporal_data = await lookup_temporal_data( developer_id=x_developer_id, execution_id=execution_id, ) # TODO: Need to get all the events for child workflows too. Maybe try the `run_id` or something? # SCRUM-11 workflow_handle = await get_workflow_handle( handle_id=temporal_data["id"], ) next_page_token: bytes | None = b64decode(next_page_token) if next_page_token else None history_events = workflow_handle.fetch_history_events( page_size=1, next_page_token=next_page_token, wait_new_event=True, event_filter_type=WorkflowHistoryEventFilterType.ALL_EVENT, skip_archival=True, ) # Create a channel to send events to the client send_chan, recv_chan = anyio.create_memory_object_stream(max_buffer_size=100) return EventSourceResponse( recv_chan, data_sender_callable=partial(event_publisher, send_chan, history_events), ) ================================================ FILE: src/agents-api/agents_api/routers/tasks/update_execution.py ================================================ import base64 from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException from ...autogen.openapi_model import ( ResumeExecutionRequest, StopExecutionRequest, ) from ...clients.temporal import get_client from ...dependencies.developer_id import get_developer_id from ...queries.executions.get_paused_execution_token import ( get_paused_execution_token, ) from ...queries.executions.get_temporal_workflow_data import ( get_temporal_workflow_data, ) from .router import router @router.put("/executions/{execution_id}", tags=["executions"]) async def update_execution( x_developer_id: Annotated[UUID, Depends(get_developer_id)], execution_id: UUID, data: ResumeExecutionRequest | StopExecutionRequest, ): temporal_client = await get_client() match data: case StopExecutionRequest(): try: wf_handle = temporal_client.get_workflow_handle_for( *await get_temporal_workflow_data(execution_id=execution_id), ) await wf_handle.cancel() except Exception: raise HTTPException(status_code=500, detail="Failed to stop execution") case ResumeExecutionRequest(): token_data = await get_paused_execution_token(execution_id=execution_id) activity_id = token_data["metadata"].get("x-activity-id", None) run_id = token_data["metadata"].get("x-run-id", None) workflow_id = token_data["metadata"].get("x-workflow-id", None) if activity_id is None or run_id is None or workflow_id is None: act_handle = temporal_client.get_async_activity_handle( task_token=base64.b64decode(token_data["task_token"].encode("ascii")), ) else: act_handle = temporal_client.get_async_activity_handle( activity_id=activity_id, workflow_id=workflow_id, run_id=run_id, ) try: await act_handle.complete(data.input) except Exception: raise HTTPException(status_code=500, detail="Failed to resume execution") case _: raise HTTPException(status_code=400, detail="Invalid request data") ================================================ FILE: src/agents-api/agents_api/routers/users/__init__.py ================================================ # ruff: noqa: F401 from .create_or_update_user import create_or_update_user from .create_user import create_user from .delete_user import delete_user from .get_user_details import get_user_details from .list_users import list_users from .patch_user import patch_user from .router import router from .update_user import update_user ================================================ FILE: src/agents-api/agents_api/routers/users/create_or_update_user.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateOrUpdateUserRequest, User from ...dependencies.developer_id import get_developer_id from ...queries.users.create_or_update_user import ( create_or_update_user as create_or_update_user_query, ) from .router import router @router.post("/users/{user_id}", status_code=HTTP_201_CREATED, tags=["users"]) async def create_or_update_user( x_developer_id: Annotated[UUID, Depends(get_developer_id)], user_id: UUID, data: CreateOrUpdateUserRequest, ) -> User: return await create_or_update_user_query( developer_id=x_developer_id, user_id=user_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/users/create_user.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_201_CREATED from ...autogen.openapi_model import CreateUserRequest, User from ...dependencies.developer_id import get_developer_id from ...queries.users.create_user import create_user as create_user_query from .router import router @router.post("/users", status_code=HTTP_201_CREATED, tags=["users"]) async def create_user( data: CreateUserRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> User: return await create_user_query( developer_id=x_developer_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/users/delete_user.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from starlette.status import HTTP_202_ACCEPTED from ...autogen.openapi_model import ResourceDeletedResponse from ...dependencies.developer_id import get_developer_id from ...queries.users.delete_user import delete_user as delete_user_query from .router import router @router.delete("/users/{user_id}", status_code=HTTP_202_ACCEPTED, tags=["users"]) async def delete_user( user_id: UUID, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> ResourceDeletedResponse: return await delete_user_query(developer_id=x_developer_id, user_id=user_id) ================================================ FILE: src/agents-api/agents_api/routers/users/get_user_details.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import User from ...dependencies.developer_id import get_developer_id from ...queries.users.get_user import get_user as get_user_query from .router import router @router.get("/users/{user_id}", tags=["users"]) async def get_user_details( x_developer_id: Annotated[UUID, Depends(get_developer_id)], user_id: UUID, ) -> User: return await get_user_query(developer_id=x_developer_id, user_id=user_id) ================================================ FILE: src/agents-api/agents_api/routers/users/list_users.py ================================================ from typing import Annotated, Literal from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import ListResponse, User from ...dependencies.developer_id import get_developer_id from ...dependencies.query_filter import MetadataFilter, create_filter_extractor from ...queries.users.list_users import list_users as list_users_query from .router import router @router.get("/users", tags=["users"]) async def list_users( x_developer_id: Annotated[UUID, Depends(get_developer_id)], metadata_filter: Annotated[ MetadataFilter, Depends(create_filter_extractor("metadata_filter")), ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", ) -> ListResponse[User]: users = await list_users_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, metadata_filter=metadata_filter.model_dump(mode="json") or {}, ) return ListResponse[User](items=users) ================================================ FILE: src/agents-api/agents_api/routers/users/patch_user.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import PatchUserRequest, User from ...dependencies.developer_id import get_developer_id from ...queries.users.patch_user import patch_user as patch_user_query from .router import router @router.patch("/users/{user_id}", tags=["users"]) async def patch_user( user_id: UUID, data: PatchUserRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> User: return await patch_user_query( developer_id=x_developer_id, user_id=user_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/users/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/agents-api/agents_api/routers/users/update_user.py ================================================ from typing import Annotated from uuid import UUID from fastapi import Depends from ...autogen.openapi_model import UpdateUserRequest, User from ...dependencies.developer_id import get_developer_id from ...queries.users.update_user import update_user as update_user_query from .router import router @router.put("/users/{user_id}", tags=["users"]) async def update_user( user_id: UUID, data: UpdateUserRequest, x_developer_id: Annotated[UUID, Depends(get_developer_id)], ) -> User: return await update_user_query( developer_id=x_developer_id, user_id=user_id, data=data, ) ================================================ FILE: src/agents-api/agents_api/routers/utils/__init__.py ================================================ ================================================ FILE: src/agents-api/agents_api/routers/utils/model_converters.py ================================================ # AIDEV-NOTE: Utilities to convert API and internal Pydantic models for requests and responses. from uuid import UUID from fastapi import HTTPException from litellm import ChatCompletionMessageToolCall from ...autogen.Chat import ( ChatInput, Content, ContentModel7, CreateToolRequest, ImageUrl, Message, ) from ...autogen.openapi_model import ( Agent, ChatResponse, ChosenFunctionCall, CompletionUsage, CreateAgentRequest, CreateEntryRequest, CreateResponse, CreateSessionRequest, FunctionCallOption, InputTokensDetails, OutputTokensDetails, Response, ResponseUsage, Session, ) from ...autogen.Responses import ( ComputerToolCall, ComputerToolCallOutputResource, EasyInputMessage, FileSearchToolCall, FunctionToolCall, FunctionToolCallOutput, FunctionToolCallOutputResource, InputImage, InputMessageResource, InputText, Item, OutputMessage, OutputText, ReasoningItem, WebSearchToolCall, ) from ...autogen.Tools import FunctionDef from ...queries.agents.create_agent import create_agent as create_agent_query from ...queries.agents.list_agents import list_agents as list_agents_query from ...queries.entries import add_entry_relations, create_entries, get_history from ...queries.sessions.create_session import create_session as create_session_query from ...queries.sessions.get_session import get_session as get_session_query async def convert_create_response( developer_id: UUID, create_response: CreateResponse ) -> tuple[Agent, Session, ChatInput]: agents = await list_agents_query( developer_id=developer_id, ) # Sessions cannot be created without an agent. So: # - If there is an agent, use it # - If there is no agent, create a draft agent and use it if agents: agent = agents[0] else: agent = await create_agent_query( developer_id=developer_id, data=CreateAgentRequest( name="draft-agent-for-response", about="Draft agent for response", model=create_response.model, ), ) # Session ids are treated as previous_response_ids. So: # - If there is a previous_response_id, use it # - If there is no previous_response_id, create a session and use its id as the previous_response_id session_id = create_response.previous_response_id previous_session = None if session_id: try: previous_session: Session = await get_session_query( developer_id=developer_id, session_id=UUID(session_id), ) except HTTPException as e: if e.status_code == 404: raise HTTPException(status_code=404, detail="previous_response_id not found") raise e session = await create_session_query( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, system_template=create_response.instructions or "You are a helpful assistant.", metadata=create_response.metadata, ), ) if previous_session: history = await get_history( developer_id=developer_id, session_id=previous_session.id, ) entry_requests = [] for entry in history.entries: entry_data = entry.model_dump(mode="json") if "id" in entry_data: del entry_data["id"] if "created_at" in entry_data: del entry_data["created_at"] entry_request = CreateEntryRequest(**entry_data) entry_requests.append(entry_request) await create_entries( developer_id=developer_id, session_id=session.id, data=entry_requests, ) await add_entry_relations( developer_id=developer_id, session_id=session.id, data=history.relations, ) # Unsupported fields from `CreateResponse` that are not supported by `ChatInput` or `Session`: # - include # - parallel_tool_calls # - response_format # - n # - user # - reasoning # - text # - truncation messages: list[Message] = [] # Handle the case where the input is a string if isinstance(create_response.input, str): messages = [Message(role="user", content=[Content(text=create_response.input)])] elif isinstance(create_response.input, list): # Create a ChatInput object from each InputItem object in the input list for input_item in create_response.input: if isinstance(input_item, EasyInputMessage): # Handle the case where the content inside the input item is a string if isinstance(input_item.content, str): messages.append( Message( role=input_item.role, content=[Content(text=input_item.content)] ) ) # Handle the case where the content inside the input item is a list of content items else: for content_item in input_item.content: content = None # Handle text content if ( isinstance(content_item, InputText) and content_item.type == "input_text" ): content = [Content(text=content_item.text)] # Handle image content elif ( isinstance(content_item, InputImage) and content_item.type == "input_image" ): image_url = ImageUrl( url=content_item.image_url, ) content = [ContentModel7(image_url=image_url)] if content: messages.append(Message(role=input_item.role, content=content)) else: msg = f"Unsupported content type: {content_item.type}. Content item: {content_item}" raise ValueError(msg) elif isinstance(input_item, FunctionToolCall): function_tool_call = input_item messages.append( Message( role="assistant", tool_call_id=function_tool_call.id, tool_calls=[ ChosenFunctionCall( id=function_tool_call.id, function=FunctionCallOption( name=function_tool_call.name, arguments=function_tool_call.arguments, ), ) ], ) ) elif isinstance( input_item, FunctionToolCallOutputResource | FunctionToolCallOutput ): function_tool_call_result = input_item messages.append( # FIXME: litellm completion typically expects a `name`, but openai's response api doesn't have it when dev sends function tool call output Message( role="tool", tool_call_id=function_tool_call_result.call_id, content=[Content(text=function_tool_call_result.output)], ) ) # elif isinstance(input_item, WebSearchToolCall): # web_search_tool_call = input_item # messages.append( # Message( # role="assistant", # tool_call_id=web_search_tool_call.id, # tool_calls=[ # ChosenFunctionCall( # id=web_search_tool_call.id, # function=FunctionCallOption( # name="web_search_preview", # arguments={ # "query": web_search_tool_call.query, # "domains": web_search_tool_call.domains, # "search_context_size": web_search_tool_call.search_context_size, # }, # ), # ) # ], # ) # ) elif isinstance(input_item, InputMessageResource): input_message_resource = input_item messages.append( Message( role=input_message_resource.role, content=input_message_resource.content, ) ) elif isinstance(input_item, OutputMessage): output_message = input_item messages.append( Message( role=output_message.role, content=output_message.content, ) ) elif isinstance( input_item, ( FileSearchToolCall | ComputerToolCall | ComputerToolCallOutputResource | Item | WebSearchToolCall ), ): msg = f"Message type {input_item.type} is not supported" raise NotImplementedError(msg) else: msg = f"Unsupported input type: {type(create_response.input)}. Input: {create_response.input}" raise ValueError(msg) # TODO: Convert tools from `CreateResponse` to `ChatInput` tools: list[CreateToolRequest] = [] if create_response.tools: for tool in create_response.tools: if tool.type == "function": tools.append( CreateToolRequest( name=tool.name, description=tool.description, type="function", function=FunctionDef( name=tool.name, description=tool.description, parameters=tool.parameters, ), ) ) elif tool.type == "web_search_preview": tools.append( CreateToolRequest( name="web_search_preview", type="function", function=FunctionDef( name="web_search_preview", description="Search the web for information", parameters={ "type": "object", "properties": { "query": {"type": "string"}, "domains": {"type": "array", "items": {"type": "string"}}, "search_context_size": {"type": "integer"}, "user_location": {"type": "string"}, }, "required": ["query"], }, ), ) ) elif tool.type == "file_search" or tool.type == "computer-preview": pass chat_input = ChatInput( model=create_response.model, messages=messages, save=create_response.store, stream=create_response.stream, max_tokens=create_response.max_tokens, temperature=create_response.temperature, presence_penalty=create_response.presence_penalty, frequency_penalty=create_response.frequency_penalty, top_p=create_response.top_p, stop=create_response.stop or [], logit_bias=create_response.logit_bias, tool_choice=create_response.tool_choice, tools=tools, truncation=create_response.truncation, recall=False, # TODO: Enable recall only when file_search tool is present ) return agent, session, chat_input def convert_chat_response_to_response( create_response: CreateResponse, chat_response: ChatResponse, chat_input: ChatInput, session_id: UUID, user_id: UUID, function_tool_requests: list[FunctionToolCall], performed_tool_calls: list[ChatCompletionMessageToolCall], ) -> Response: chat_response_usage: CompletionUsage | None = chat_response.usage if chat_response_usage is None: usage = ResponseUsage( input_tokens=0, input_tokens_details=InputTokensDetails(cached_tokens=0), output_tokens=0, output_tokens_details=OutputTokensDetails(reasoning_tokens=0), total_tokens=0, ) else: usage = ResponseUsage( input_tokens=chat_response_usage.prompt_tokens or 0, # FIXME: Placeholder. Need to add proper input_tokens_details input_tokens_details=InputTokensDetails(cached_tokens=0), output_tokens=chat_response_usage.completion_tokens or 0, # FIXME: Placeholder. Need to add proper output_tokens_details output_tokens_details=OutputTokensDetails(reasoning_tokens=0), total_tokens=chat_response_usage.total_tokens or 0, ) output: list[ OutputMessage | FileSearchToolCall | FunctionToolCall | WebSearchToolCall | ComputerToolCall | ReasoningItem ] = [] for performed_tool_call in performed_tool_calls: if performed_tool_call.type == "function": if performed_tool_call.function.name == "web_search_preview": output.append( WebSearchToolCall( id=performed_tool_call.id, status="completed", ) ) # TODO: Support custom functions, and other tool calls mapped to functions else: # TODO: Support system tool calls here pass output_text = chat_response.choices[0].message.content if output_text: output.append( OutputMessage( type="message", id=str(chat_response.id), status="completed", role="assistant", content=[OutputText(text=output_text, annotations=[])], ) ) output.extend(function_tool_requests) return Response( id=str(session_id), created_at=int(chat_response.created_at.timestamp()), status="completed", # because we don't have get endpoint error=None, incomplete_details=None, instructions=create_response.instructions, max_output_tokens=create_response.max_tokens, # TODO: is it the same as chat_input.max_tokens? model=chat_input.model, output=output, parallel_tool_calls=create_response.parallel_tool_calls, previous_response_id=create_response.previous_response_id, reasoning=create_response.reasoning, # TODO: add reasoning (or not?) store=chat_input.save, temperature=chat_input.temperature, text=create_response.text or {"format": {"type": "text"}}, tool_choice="auto", # Default to auto if None tools=[], # Default to empty list if None top_p=chat_input.top_p, truncation="auto", # Default to auto if None usage=usage, user=str(user_id), metadata=create_response.metadata or {}, ) ================================================ FILE: src/agents-api/agents_api/routers/utils/model_validation.py ================================================ # AIDEV-NOTE: Validates model names against LiteLLM and raises HTTPException for invalid names. from fastapi import HTTPException from starlette.status import HTTP_400_BAD_REQUEST from ...common.utils.model_validation import ( ModelNotAvailableError, ensure_model_available, ) async def validate_model(model_name: str | None) -> None: """Validate that ``model_name`` exists in LiteLLM's catalog.""" try: await ensure_model_available(model_name) except ModelNotAvailableError as exc: raise HTTPException(status_code=HTTP_400_BAD_REQUEST, detail=str(exc)) from exc ================================================ FILE: src/agents-api/agents_api/web.py ================================================ """ This module initializes the FastAPI application, registers routes, sets up middleware, and configures exception handlers. """ import asyncio import logging from collections.abc import Callable from typing import Any, cast from uuid import UUID import asyncpg import sentry_sdk import uvicorn import uvloop from fastapi import Depends, FastAPI, Request, status from fastapi.exceptions import HTTPException, RequestValidationError from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from litellm.exceptions import APIError, BadRequestError from pydantic import ValidationError from temporalio.service import RPCError from .app import app from .common.exceptions import BaseCommonException from .dependencies.auth import get_api_key from .env import enable_responses, free_tier_cost_limit, sentry_dsn from .exceptions import PromptTooBigError from .queries.usage.get_user_cost import get_usage_cost from .routers import ( agents, docs, files, healthz, internal, jobs, projects, responses, secrets, sessions, tasks, users, ) if not sentry_dsn: print("Sentry DSN not found. Sentry will not be enabled.") else: sentry_sdk.init( dsn=sentry_dsn, enable_tracing=True, traces_sample_rate=1.0, ) logger: logging.Logger = logging.getLogger(__name__) def make_exception_handler(status_code: int) -> Callable[[Any, Any], Any]: """ Creates a custom exception handler for the application. Parameters: - status_code (int): The HTTP status code to return for this exception. Returns: A callable exception handler that logs the exception and returns a JSON response with the specified status code. """ async def _handler(request: Request, exc: Exception): if isinstance(exc, ValidationError | RequestValidationError): exc = cast(ValidationError | RequestValidationError, exc) error_details = [] # Process each validation error for error in exc.errors(): error_info = { "type": error.get("type", "validation_error"), "msg": error.get("msg", "Validation error"), "loc": _format_location(error.get("loc", [])), } # Enhance with fixes/suggestions when possible error_info.update(_get_error_suggestions(error)) # Add input value if available if "input" in error: error_info["received"] = str(error["input"]) error_details.append(error_info) # Log the error with appropriate level logger.warning(f"Validation error: {error_details}") return JSONResponse( content={ "error": { "message": "Validation error", "details": error_details, "code": "validation_error", } }, status_code=status_code, ) # For non-validation errors, return a simpler error response return JSONResponse( content={ "error": { "message": str(exc), "code": getattr(exc, "code", "unknown_error"), } }, status_code=status_code, ) return _handler def _format_location(loc: list) -> str: """Format error location into a human-readable string.""" if not loc: return "" # Skip the initial 'body' element if present if loc[0] == "body" and len(loc) > 1: loc = loc[1:] # Format the location parts = [] for item in loc: if isinstance(item, int): parts.append(f"[{item}]") else: if parts: # Add dot separator if not first element parts.append(f".{item}") else: parts.append(str(item)) return "".join(parts) def _get_error_suggestions(error: dict) -> dict: """Generate user-friendly suggestions based on the error type.""" error_type = error.get("type", "") suggestions = {} # Handle different validation error types if error_type == "missing": suggestions["fix"] = "Add this required field to your request" suggestions["example"] = '{ "field_name": "value" }' elif error_type == "type_error": if "expected_type" in error: suggestions["fix"] = f"Provide a value of type {error['expected_type']}" if error["expected_type"] == "string": suggestions["example"] = '"text value"' elif error["expected_type"] == "integer": suggestions["example"] = "42" elif error["expected_type"] == "number": suggestions["example"] = "3.14" elif error["expected_type"] == "boolean": suggestions["example"] = "true" elif error["expected_type"] == "array": suggestions["example"] = "[]" elif error["expected_type"] == "object": suggestions["example"] = "{}" else: suggestions["fix"] = "Provide a value of the correct type" elif error_type == "value_error.missing": suggestions["fix"] = "Provide a value for this required field" suggestions["note"] = "This field cannot be null or undefined" elif error_type == "value_error.extra": suggestions["fix"] = "Remove this field as it is not expected" suggestions["note"] = "Check the API documentation for the correct field names" elif error_type == "value_error.const": if "permitted" in error: suggestions["fix"] = f"Value must be one of: {error['permitted']}" suggestions["example"] = ( f"{error['permitted'][0] if error['permitted'] else 'appropriate_value'}" ) elif "min_length" in error_type: if "limit_value" in error: suggestions["fix"] = f"Value must have at least {error['limit_value']} characters" try: limit = int(error["limit_value"]) suggestions["example"] = "x" * limit except (ValueError, TypeError): suggestions["example"] = "x" * 5 # Fallback example elif "max_length" in error_type: if "limit_value" in error: suggestions["fix"] = f"Value must have at most {error['limit_value']} characters" suggestions["note"] = ( f"Current value exceeds the maximum length of {error['limit_value']} characters" ) # This case is now handled by the more general "min_length" check above # This case is now handled by the more general "max_length" check above elif "not_ge" in error_type: if "limit_value" in error: suggestions["fix"] = ( f"Value must be greater than or equal to {error['limit_value']}" ) suggestions["example"] = f"{error['limit_value']}" elif "not_le" in error_type: if "limit_value" in error: suggestions["fix"] = f"Value must be less than or equal to {error['limit_value']}" suggestions["example"] = f"{error['limit_value']}" elif "not_gt" in error_type: if "limit_value" in error: suggestions["fix"] = f"Value must be greater than {error['limit_value']}" try: suggestions["example"] = f"{float(error['limit_value']) + 1}" except (ValueError, TypeError): suggestions["example"] = "a value greater than the limit" elif "not_lt" in error_type: if "limit_value" in error: suggestions["fix"] = f"Value must be less than {error['limit_value']}" suggestions["example"] = f"{float(error['limit_value']) - 1}" elif "enum" in error_type: if "permitted" in error: allowed_values = ", ".join([f'"{val}"' for val in error["permitted"]]) suggestions["fix"] = f"Value must be one of: {allowed_values}" elif "json" in error_type: suggestions["fix"] = "Provide valid JSON format" elif "uuid" in error_type: suggestions["fix"] = "Provide a valid UUID (e.g., 123e4567-e89b-12d3-a456-426614174000)" elif "datetime" in error_type: suggestions["fix"] = "Provide a valid ISO 8601 datetime (e.g., 2023-01-01T12:00:00Z)" elif "url" in error_type: suggestions["fix"] = "Provide a valid URL (e.g., https://example.com)" elif "email" in error_type: suggestions["fix"] = "Provide a valid email address" return suggestions def register_exceptions(app: FastAPI) -> None: """ Registers custom exception handlers for the FastAPI application. Parameters: - app (FastAPI): The FastAPI application instance to register the exception handlers for. """ app.add_exception_handler( RequestValidationError, make_exception_handler(status.HTTP_422_UNPROCESSABLE_ENTITY), ) # app.add_exception_handler( # QueryException, # make_exception_handler(status.HTTP_500_INTERNAL_SERVER_ERROR), # ) # TODO: Auth logic should be moved into global middleware _per router_ # Because some routes don't require auth # See: https://fastapi.tiangolo.com/tutorial/bigger-applications/ # # Add other routers with the get_api_key dependency if enable_responses: app.include_router(responses.router, dependencies=[Depends(get_api_key)]) else: app.include_router(agents.router, dependencies=[Depends(get_api_key)]) app.include_router(sessions.router, dependencies=[Depends(get_api_key)]) app.include_router(users.router, dependencies=[Depends(get_api_key)]) app.include_router(files.router, dependencies=[Depends(get_api_key)]) app.include_router(docs.router, dependencies=[Depends(get_api_key)]) app.include_router(tasks.router, dependencies=[Depends(get_api_key)]) app.include_router(secrets.router, dependencies=[Depends(get_api_key)]) app.include_router(internal.router) app.include_router(projects.router, dependencies=[Depends(get_api_key)]) app.include_router(jobs.router, dependencies=[Depends(get_api_key)]) app.include_router(healthz.router) # Register the usage check middleware @app.middleware("http") async def usage_check_middleware(request: Request, call_next): # Get developer ID from header developer_id_str = request.headers.get("X-Developer-Id") if not developer_id_str: return await call_next(request) user_cost_data: dict = {} invalid_account_error = JSONResponse( status_code=status.HTTP_403_FORBIDDEN, content={ "error": { "message": "Invalid user account", "code": "invalid_user_account", } }, ) try: developer_id = UUID(developer_id_str) user_cost_data: dict = await get_usage_cost(developer_id=developer_id) # Check if user is active if not user_cost_data.get("active", False): return invalid_account_error if request.method == "GET": return await call_next(request) # Skip cost check for users with "paid" tag user_tags = user_cost_data.get("tags", []) or [] if not isinstance(user_tags, list): user_tags = [] if "paid" in user_tags: return await call_next(request) user_cost = user_cost_data.get("cost") if user_cost is None or float(user_cost) > free_tier_cost_limit: return JSONResponse( status_code=status.HTTP_403_FORBIDDEN, content={ "error": { "message": "Cost limit exceeded", "code": "cost_limit_exceeded", } }, ) except HTTPException as e: if e.status_code == status.HTTP_404_NOT_FOUND: return invalid_account_error return JSONResponse( status_code=e.status_code, content=e.detail, ) except asyncpg.NoDataFoundError: return invalid_account_error except ValueError: return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content={ "error": { "message": "Invalid developer ID", "code": "invalid_developer_id", } }, ) except Exception as e: # Log the error but don't block the request logger.error(f"Error in usage check middleware: {e!s}") # Continue processing the request return await call_next(request) # TODO: CORS should be enabled only for JWT auth # app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], max_age=3600, ) # TODO: GZipMiddleware should be enabled only for non-streaming routes # app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=3) register_exceptions(app) @app.exception_handler(HTTPException) async def http_exception_handler(request, exc: HTTPException): # pylint: disable=unused-argument return JSONResponse( status_code=exc.status_code, content={ "error": { "message": str(exc.detail), "code": getattr(exc, "code", f"http_{exc.status_code}"), "type": "http_error", } }, ) @app.exception_handler(RPCError) async def validation_error_handler(request: Request, exc: RPCError): return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content={ "error": { "message": "job not found or invalid", "code": exc.status.name, "type": "rpc_error", } }, ) @app.exception_handler(BaseCommonException) async def session_not_found_error_handler(request: Request, exc: BaseCommonException): return JSONResponse( status_code=exc.http_code, content={ "error": { "message": str(exc), "code": getattr(exc, "code", "common_error"), "type": exc.__class__.__name__, } }, ) @app.exception_handler(PromptTooBigError) async def prompt_too_big_error(request: Request, exc: PromptTooBigError): return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content={ "error": { "message": str(exc), "code": "prompt_too_big", "type": "PromptTooBigError", "fix": "Reduce the size of your prompt or use a model with a larger context window", } }, ) @app.exception_handler(BadRequestError) async def litellm_bad_request_error(request: Request, exc: BadRequestError): return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content={ "error": { "message": str(exc), "code": "llm_bad_request", "type": "LLMServiceBadRequest", "fix": "Check request payload for invalid or missing fields", } }, ) @app.exception_handler(APIError) async def litellm_api_error(request: Request, exc: APIError): return JSONResponse( status_code=status.HTTP_502_BAD_GATEWAY, content={ "error": { "message": str(exc), "code": "llm_api_error", "type": "LLMServiceError", "fix": "Please check your API keys and model configurations or try again later", } }, ) def main( host: str = "127.0.0.1", port: int = 8000, backlog: int = 4096, timeout_keep_alive: int = 30, workers=None, log_level: str = "info", ) -> None: uvicorn.run( app, host=host, port=port, log_level=log_level, timeout_keep_alive=timeout_keep_alive, backlog=backlog, workers=workers, ) asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) ================================================ FILE: src/agents-api/agents_api/worker/AGENTS.md ================================================ # AGENTS.md - worker This folder contains the Temporal worker setup for processing agents-api workflows and activities. Key Points - Entrypoint script: `run_worker.py` initializes the Temporal worker. - Register both workflows and activities in worker setup. - Configure `TEMPORAL_URL` and retry policies via environment variables. - Logging and monitoring configured in `logging.yaml`. - Use `poe test` for basic worker smoke tests. ## Purpose - Temporal worker process for executing workflows and activities - Handles background processing of tasks - Entry point for the worker service ## Key Components ### worker.py - Configures and registers Temporal worker - Registers workflows and activities - Sets limits on concurrency and throughput ### codec.py - Custom codec for Temporal payload processing - Handles serialization/deserialization - Supports large object handling with S3 storage ### __main__.py - Entry point for worker service - Connects to Temporal service - Starts worker processes ## Worker Configuration - Task queue: Configured to listen on specific queue - Concurrency limits: - Maximum concurrent workflow tasks - Maximum concurrent activities - Rate limits for activities per second - Graceful shutdown with timeout ## Registered Components - Workflows: TaskExecutionWorkflow, DemoWorkflow - Activities: All task_steps, execute_api_call, execute_system, etc. ## Remote Object Handling - Large objects stored in S3 via RemoteObject - Automatic serialization/deserialization - Prevents Temporal payload size limitations ================================================ FILE: src/agents-api/agents_api/worker/__init__.py ================================================ #!/usr/bin/env python3 """ The Worker Module for the Agents API This module is responsible for handling background tasks and jobs for the Agents API application. It provides functionalities for managing memory management tasks, among other background operations, to enhance the application's performance and scalability. The worker module interacts with other components of the application by receiving tasks, processing them asynchronously, and reporting on task completion or errors. This module plays a crucial role in ensuring the application can handle complex operations efficiently without blocking the main execution flow. """ ================================================ FILE: src/agents-api/agents_api/worker/__main__.py ================================================ """ This script initializes and runs a Temporal worker that listens for tasks on a specified queue. It supports various workflows and activities related to agents' operations. """ # !/usr/bin/env python3 import asyncio import logging from tenacity import after_log, retry, retry_if_exception_type, wait_fixed from ..app import app, lifespan from ..clients import temporal from .worker import create_worker logger = logging.getLogger(__name__) h = logging.StreamHandler() fmt = logging.Formatter("[%(asctime)s/%(levelname)s] - %(message)s") h.setFormatter(fmt) logger.addHandler(h) logger.setLevel(logging.DEBUG) @retry( wait=wait_fixed(20), retry=retry_if_exception_type(RuntimeError), after=after_log(logger, logging.DEBUG), ) async def main() -> None: """ Initializes the Temporal client and worker with TLS configuration (if provided), then starts the worker to listen for tasks on the configured task queue. """ client = await temporal.get_client_with_metrics() worker = create_worker(client) if hasattr(worker, "_workflow_worker") and worker._workflow_worker: # noqa: SLF001 worker._workflow_worker._deadlock_timeout_seconds = 60 # noqa: SLF001 async with lifespan(app): # Start the worker to listen for and process tasks await worker.run() if __name__ == "__main__": asyncio.run(main()) ================================================ FILE: src/agents-api/agents_api/worker/codec.py ================================================ ### # NOTE: Working with temporal's codec is really really weird # This is a workaround to use pydantic models with temporal # The codec is used to serialize/deserialize the data # But this code is quite brittle. Be careful when changing it import dataclasses import logging import sys import time from typing import Any, Self import larch.pickle as pickle import temporalio.converter from lz4.frame import compress, decompress from pydantic import BaseModel, ConfigDict from temporalio import workflow from temporalio.api.common.v1 import Payload from temporalio.converter import ( CompositePayloadConverter, DefaultPayloadConverter, EncodingPayloadConverter, ) with workflow.unsafe.imports_passed_through(): from ..clients import sync_s3 from ..common.utils.memory import total_size from ..env import blob_store_bucket, debug, testing from ..exceptions import FailedDecodingSentinel, FailedEncodingSentinel class RemoteObject(BaseModel): key: str bucket: str model_config = ConfigDict(frozen=True) @classmethod def from_value(cls, x: Any) -> Self: sync_s3.setup() serialized = serialize(x) key = sync_s3.add_object_with_hash(serialized) # AIDEV-NOTE: use cls to return correct subclass instance for Self return cls(key=key, bucket=blob_store_bucket) def load(self) -> Any: sync_s3.setup() fetched = sync_s3.get_object(self.key) return deserialize(fetched) def serialize(x: Any) -> bytes: """ Serialize an object using pickle and compress with lz4. Args: x: The object to serialize Returns: Compressed serialized bytes Raises: Exception: If serialization fails """ start_time = time.time() try: # First pickle the object pickled = pickle.dumps(x, protocol=-1) # Then compress the pickled data compressed = compress(pickled) # Log timing for large objects duration = time.time() - start_time if duration > 1: # Use pickled size as a more accurate measure of the object's true size original_size = len(pickled) / 1000 compressed_size = len(compressed) / 1000 # Safely calculate compression ratio to avoid division by zero if len(compressed) > 0: compression_ratio = f"{len(pickled) / len(compressed):.2f}x" else: compression_ratio = "N/A" # Use proper logger instead of print statements logging.info( f"||| [SERIALIZE] Time: {duration:.2f}s | Original: {original_size:.2f}kb | " f"Compressed: {compressed_size:.2f}kb | Ratio: {compression_ratio}" ) return compressed except Exception as e: logging.error( f"||| [SERIALIZE ERROR] Failed to serialize object of type {type(x).__name__}: {e!s}" ) raise def deserialize(b: bytes) -> Any: """ Deserialize a compressed pickle object. Args: b: Compressed serialized bytes Returns: The deserialized object Raises: Exception: If deserialization fails """ start_time = time.time() try: # First decompress the data decompressed = decompress(b) # Then unpickle to get the original object obj = pickle.loads(decompressed) # Log timing for large objects duration = time.time() - start_time if duration > 1: compressed_size = len(b) / 1000 decompressed_size = len(decompressed) / 1000 obj_size = total_size(obj) / 1000 logging.info( f"||| [DESERIALIZE] Time: {duration:.2f}s | Compressed: {compressed_size:.2f}kb | " f"Decompressed: {decompressed_size:.2f}kb | Object: {obj_size:.2f}kb | Type: {type(obj).__name__}" ) return obj except Exception as e: logging.error(f"||| [DESERIALIZE ERROR] Failed to deserialize: {e!s}") raise def from_payload_data(data: bytes, type_hint: type | None = None) -> Any: decoded = deserialize(data) if isinstance(decoded, RemoteObject): decoded = decoded.load() if type_hint is None: return decoded decoded_type = type(decoded) if ( type_hint != decoded_type and hasattr(type_hint, "model_construct") and hasattr(decoded, "model_dump") ): try: decoded = type_hint(**decoded.model_dump()) except Exception as e: logging.warning(f"WARNING: Could not promote {decoded_type} to {type_hint}: {e}") return decoded class PydanticEncodingPayloadConverter(EncodingPayloadConverter): encoding = "text/pickle+lz4" b_encoding = encoding.encode() def to_payload( self, value: Any ) -> ( Payload | FailedEncodingSentinel | None ): # AIDEV-NOTE: include FailedEncodingSentinel for error payloads python_version = f"{sys.version_info.major}.{sys.version_info.minor}".encode() try: data = serialize(value) return Payload( metadata={ "encoding": self.b_encoding, "python_version": python_version, }, data=data, ) except Exception as e: if debug or testing: raise e # TODO: In production, we don't want to crash the workflow # But the sentinel object must be handled by the caller logging.warning(f"WARNING: Could not encode {value}: {e}") # Convert the value to bytes using str() representation if needed error_bytes = str(value).encode("utf-8") return FailedEncodingSentinel(payload_data=error_bytes) def from_payload(self, payload: Payload, type_hint: type | None = None) -> Any: current_python_version = f"{sys.version_info.major}.{sys.version_info.minor}".encode() # Check if this is a payload we can handle if ( "encoding" not in payload.metadata or payload.metadata["encoding"] != self.b_encoding or "python_version" not in payload.metadata or payload.metadata["python_version"] != current_python_version ): # Return the payload data as-is if we can't handle it return payload.data try: return from_payload_data(payload.data, type_hint) except Exception as e: # In debug/testing mode, we want to see the full error if debug or testing: raise e # Create a more detailed log message with payload metadata payload_size = len(payload.data) if payload.data else 0 metadata_str = ", ".join(f"{k}={v}" for k, v in payload.metadata.items()) logging.warning( f"Failed to decode payload: {e!s}\n" f"Payload size: {payload_size} bytes\n" f"Metadata: {metadata_str}\n" f"Type hint: {type_hint.__name__ if type_hint else 'None'}" ) # Return sentinel object that must be handled by the caller return FailedDecodingSentinel(payload_data=payload.data) class PydanticPayloadConverter(CompositePayloadConverter): def __init__(self) -> None: # Just add ours as first before the defaults super().__init__( PydanticEncodingPayloadConverter(), *DefaultPayloadConverter.default_encoding_payload_converters, ) # Use the default data converter, but change the payload converter. pydantic_data_converter: Any = dataclasses.replace( temporalio.converter.default(), payload_converter_class=PydanticPayloadConverter, ) ================================================ FILE: src/agents-api/agents_api/worker/worker.py ================================================ from datetime import timedelta from inspect import getmembers, isfunction from typing import Any from temporalio.client import Client from temporalio.worker import Worker from ..env import ( temporal_max_activities_per_second, temporal_max_concurrent_activities, temporal_max_concurrent_workflow_tasks, temporal_max_task_queue_activities_per_second, ) def create_worker(client: Client) -> Any: """ Initializes the Temporal client and worker with TLS configuration (if provided), then create a worker to listen for tasks on the configured task queue. """ from ..activities import task_steps from ..activities.demo import demo_activity from ..activities.execute_api_call import execute_api_call from ..activities.execute_integration import execute_integration from ..activities.execute_system import execute_system from ..activities.pg_query_step import pg_query_step from ..activities.sync_items_remote import load_inputs_remote, save_inputs_remote from ..common.interceptors import CustomInterceptor from ..env import ( temporal_task_queue, ) from ..workflows.demo import DemoWorkflow from ..workflows.task_execution import TaskExecutionWorkflow _task_activity_names, task_activities = zip(*getmembers(task_steps, isfunction)) # Initialize the worker with the specified task queue, workflows, and activities return Worker( client, graceful_shutdown_timeout=timedelta(seconds=30), task_queue=temporal_task_queue, workflows=[ DemoWorkflow, TaskExecutionWorkflow, ], activities=[ *task_activities, demo_activity, execute_integration, execute_system, execute_api_call, save_inputs_remote, load_inputs_remote, pg_query_step, ], interceptors=[CustomInterceptor()], max_concurrent_workflow_tasks=temporal_max_concurrent_workflow_tasks, max_concurrent_activities=temporal_max_concurrent_activities, max_activities_per_second=temporal_max_activities_per_second, max_task_queue_activities_per_second=temporal_max_task_queue_activities_per_second, ) ================================================ FILE: src/agents-api/agents_api/workflows/AGENTS.md ================================================ # AGENTS.md - workflows This folder contains Temporal workflow definitions orchestrating activities in `agents-api`. Key Points - Implement workflows with Temporal Python SDK (init, step, finish, error, cancel). - Use `WorkflowClient.execute` for invocation. - Define branching logic with IfElse and Parallel steps as needed. - Monitor transitions in the database for debugging. - Place workflow tests in `agents-api/tests/`. - See parent AGENTS.md for component-wide instructions. # Workflows ## Purpose - Temporal workflow definitions - Orchestrate activities in durable, fault-tolerant execution - Manage execution state and transitions ## Key Workflows ### task_execution/ - `TaskExecutionWorkflow`: Primary workflow for executing tasks - Executes steps in sequence based on task definition - Handles workflow transitions, branching, and loops - Controls execution state machine ### task_execution/helpers.py - Control flow for workflow execution: - `execute_switch_branch`: Handles switch/case logic - `execute_if_else_branch`: Conditional execution - `execute_foreach_step`: Iteration over collections - `execute_map_reduce_step`: Map/reduce operations - `execute_map_reduce_step_parallel`: Parallelized map/reduce ## Workflow Execution Model 1. Workflow receives ExecutionInput with task definition 2. For each step in workflow: - Determine step type (evaluate, tool, prompt, etc.) - Execute corresponding activity - Handle result and determine next transition 3. State persists across failures and retries 4. Child workflows used for branching logic ## State Machine - `init` → `wait`/`error`/`step`/`cancelled`/`init_branch`/`finish` - Transitions tracked in database - Status reflected in API responses ## Concurrency and Control - Parallel execution for map/reduce operations - Heartbeats for long-running activities - Workflow continues even if activities fail (with retry policies) ================================================ FILE: src/agents-api/agents_api/workflows/__init__.py ================================================ #!/usr/bin/env python3 # AIDEV-NOTE: Configure Temporal workflow unsafe imports and logging setup for agents-api workflows. from temporalio import workflow with workflow.unsafe.imports_passed_through(): import logging logging.basicConfig(level=logging.INFO) ================================================ FILE: src/agents-api/agents_api/workflows/demo.py ================================================ from datetime import timedelta from temporalio import workflow from ..common.retry_policies import DEFAULT_RETRY_POLICY # AIDEV-NOTE: Sample workflow demonstrating Temporal integration with a simple demo activity. with workflow.unsafe.imports_passed_through(): from ..activities.demo import demo_activity @workflow.defn class DemoWorkflow: @workflow.run async def run(self, a: int, b: int) -> int: return await workflow.execute_activity( demo_activity, args=[a, b], start_to_close_timeout=timedelta(seconds=30), retry_policy=DEFAULT_RETRY_POLICY, ) ================================================ FILE: src/agents-api/agents_api/workflows/task_execution/__init__.py ================================================ # AIDEV-NOTE: This file contains the core Temporal workflow definition and step handlers for task execution. # !/usr/bin/env python3 import asyncio from datetime import timedelta from typing import Any, cast from temporalio import workflow from temporalio.exceptions import ActivityError, ApplicationError from uuid_extensions import uuid7 # Import necessary modules and types with workflow.unsafe.imports_passed_through(): from asyncio.exceptions import CancelledError as AsyncioCancelledError from pydantic import RootModel from temporalio.exceptions import CancelledError from ...activities import task_steps from ...activities.execute_api_call import execute_api_call from ...activities.execute_integration import execute_integration from ...activities.execute_system import execute_system from ...activities.sync_items_remote import load_inputs_remote as load_inputs_remote from ...activities.sync_items_remote import save_inputs_remote from ...activities.task_steps.tool_call_step import ( construct_tool_call, generate_call_id, ) from ...autogen.openapi_model import ( ApiCallDef, BaseIntegrationDef, ErrorWorkflowStep, EvaluateStep, ForeachDo, ForeachStep, GetStep, IfElseWorkflowStep, LogStep, MapReduceStep, ParallelStep, PromptStep, ReturnStep, SetStep, SleepStep, SwitchStep, SystemDef, Tool, ToolCallStep, TransitionTarget, WaitForInputInfo, WaitForInputStep, WorkflowStep, YieldStep, ) from ...common.protocol.tasks import ( ExecutionInput, PartialTransition, StepContext, StepOutcome, WorkflowResult, ) from ...common.retry_policies import DEFAULT_RETRY_POLICY from ...common.utils.feature_flags import get_feature_flag_value from ...env import ( debug, task_max_parallelism, temporal_heartbeat_timeout, temporal_schedule_to_close_timeout, testing, ) from ...exceptions import LastErrorInput from .helpers import ( base_evaluate_activity, continue_as_child, execute_foreach_step, execute_if_else_branch, execute_map_reduce_step, execute_map_reduce_step_parallel, execute_switch_branch, ) from .transition import transition # Supported steps # --------------- # TODO: Implement the rest of the steps # WorkflowStep = ( # EvaluateStep # ✅ # | ToolCallStep # ✅ # | PromptStep # 🟡 <--- high priority # | GetStep # ✅ # | SetStep # ✅ # | LogStep # ✅ # | ReturnStep # ✅ # | SleepStep # ✅ # | ErrorWorkflowStep # ✅ # | YieldStep # ✅ # | WaitForInputStep # ✅ # | IfElseWorkflowStep # ✅ # | SwitchStep # ✅ # | ForeachStep # ✅ # | ParallelStep # ❌ # | MapReduceStep # ✅ # ) # Mapping of step types to their corresponding activities STEP_TO_ACTIVITY = { PromptStep: task_steps.prompt_step, } GenericStep = RootModel[WorkflowStep] # TODO: find a way to transition to error if workflow or activity times out. # TODO: Implement reasonable timeouts for steps, activities and workflows # SCRUM-13 # TODO: The timeouts should be configurable per task # TODO: Review the current user state storage method # Probably can be implemented much more efficiently # Main workflow definition @workflow.defn(sandboxed=False) class TaskExecutionWorkflow: last_error: BaseException | None = None context: StepContext | None = None outcome: StepOutcome | None = None def __init__(self) -> None: self.last_error = None @workflow.signal async def set_last_error(self, value: LastErrorInput) -> None: self.last_error = value.last_error async def eval_step_exprs(self, step_type: WorkflowStep): expr, output, transition_to = None, None, None match step_type: case ForeachStep(foreach=ForeachDo(in_=in_)): expr = in_ case IfElseWorkflowStep(if_=if_): expr = if_ case ReturnStep(return_=return_): expr = return_ case WaitForInputStep(wait_for_input=WaitForInputInfo(info=info)): expr = info case EvaluateStep(evaluate=evaluate): expr = evaluate case MapReduceStep(over=over): expr = over case SetStep(set=set): expr = set case LogStep(log=log): expr = log case SwitchStep(switch=switch): output: int = -1 cases: list[str] = [c.case for c in switch] for i, case in enumerate(cases): result = await base_evaluate_activity(case, self.context) if result: output = i break case ToolCallStep(arguments=arguments): tools: list[Tool] = await self.context.tools() tool_name = self.context.current_step.tool tool = next((t for t in tools if t.name == tool_name), None) if tool is None: msg = f"Tool {tool_name} not found in the toolset" raise ApplicationError(msg) arguments = await base_evaluate_activity(arguments, self.context) call_id = generate_call_id() output = construct_tool_call(tool, arguments, call_id) case YieldStep(arguments=arguments, workflow=workflow): assert isinstance(self.context.current_step, YieldStep) all_workflows = self.context.execution_input.task.workflows assert workflow in [wf.name for wf in all_workflows], ( f"Workflow {workflow} not found in task" ) # Evaluate the expressions in the arguments output = await base_evaluate_activity(arguments, self.context) # Transition to the first step of that workflow transition_target = TransitionTarget( workflow=workflow, step=0, scope_id=uuid7(), ) transition_to = ("step", transition_target) if expr is not None: output = await base_evaluate_activity(expr, self.context) return StepOutcome(output=output, transition_to=transition_to) async def _handle_LogStep( self, step: LogStep, ): workflow.logger.info(f"Log step: {step.log}") if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) # Set the output to the current input # Add the logged message to metadata partial_transition = PartialTransition( output=self.context.current_input, metadata={ "step_type": type(self.context.current_step).__name__, "log": step.log, }, ) return WorkflowResult(state=partial_transition) async def _handle_ReturnStep( self, step: ReturnStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) output = self.outcome.output workflow.logger.info("Return step: Finishing workflow with output") workflow.logger.debug(f"Return step: {output}") return WorkflowResult( state=PartialTransition(output=output), returned=True, ) async def _handle_SwitchStep( self, step: SwitchStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) index = self.outcome.output if index >= 0: result = await execute_switch_branch( context=self.context, execution_input=self.context.execution_input, switch=step.switch, index=index, current_input=self.context.current_input, ) return WorkflowResult(state=result.state, returned=result.returned) if index < 0: workflow.logger.error("Switch step: Invalid negative index") msg = "Negative indices not allowed" raise ApplicationError(msg) return WorkflowResult(state=PartialTransition(output=None)) async def _handle_IfElseWorkflowStep( self, step: IfElseWorkflowStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) result = await execute_if_else_branch( context=self.context, execution_input=self.context.execution_input, then_branch=step.then, else_branch=step.else_, condition=self.outcome.output, current_input=self.context.current_input, ) return WorkflowResult(state=result.state, returned=result.returned) async def _handle_ForeachStep( self, step: ForeachStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) result = await execute_foreach_step( context=self.context, execution_input=self.context.execution_input, do_step=step.foreach.do, items=self.outcome.output, current_input=self.context.current_input, ) return WorkflowResult(state=result.state, returned=result.returned) async def _handle_MapReduceStep( self, step: MapReduceStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) parallelism = step.parallelism if parallelism is None: parallelism = task_max_parallelism if parallelism == 1: result = await execute_map_reduce_step( context=self.context, execution_input=self.context.execution_input, map_defn=step.map, items=self.outcome.output, reduce=step.reduce, initial=step.initial, current_input=self.context.current_input, ) else: result = await execute_map_reduce_step_parallel( context=self.context, execution_input=self.context.execution_input, map_defn=step.map, items=self.outcome.output, current_input=self.context.current_input, initial=step.initial, reduce=step.reduce, parallelism=parallelism, ) return WorkflowResult(state=result.state, returned=result.returned) async def _handle_SleepStep( self, step: SleepStep, ): sleep = step.sleep total_seconds = ( sleep.seconds + sleep.minutes * 60 + sleep.hours * 60 * 60 + sleep.days * 24 * 60 * 60 ) workflow.logger.info(f"Sleep step: Sleeping for {total_seconds} seconds") assert total_seconds > 0, "Sleep duration must be greater than 0" result = None if self.context is not None: result = await asyncio.sleep(total_seconds, result=self.context.current_input) return WorkflowResult(state=PartialTransition(output=result)) async def _handle_EvaluateStep( self, step: EvaluateStep, ): if self.outcome is None: return WorkflowResult(state=PartialTransition(output=None)) output = self.outcome.output workflow.logger.debug(f"Evaluate step: Completed evaluation with output: {output}") return WorkflowResult(state=PartialTransition(output=output)) async def _handle_ErrorWorkflowStep( self, step: ErrorWorkflowStep, ): error = step.error workflow.logger.error(f"Error step: {error}") state = PartialTransition(type="error", output=error) await transition( self.context, state, last_error=self.last_error, ) msg = f"Error raised by ErrorWorkflowStep: {error}" raise ApplicationError(msg) async def _handle_YieldStep( self, step: YieldStep, ): if self.outcome is None or self.context is None: return WorkflowResult(state=PartialTransition(output=None)) output = self.outcome.output if self.outcome.transition_to is None: msg = "Transition must not be None" raise ApplicationError(msg) yield_transition_type, yield_next_target = self.outcome.transition_to workflow.logger.info(f"Yield step: Transitioning to {yield_transition_type}") if self.context is None: msg = "Context must not be None" raise ApplicationError(msg) await transition( self.context, output=output, type=yield_transition_type, next=yield_next_target, last_error=self.last_error, ) result = await continue_as_child( self.context.execution_input, start=yield_next_target, current_input=output, ) return WorkflowResult(state=result.state, returned=False) async def _handle_WaitForInputStep( self, step: WaitForInputStep, ): workflow.logger.info("Wait for input step: Waiting for external input") if self.outcome is None: return WorkflowResult(state=PartialTransition(type="resume", output=None)) result = await workflow.execute_activity( task_steps.raise_complete_async, args=[self.context, self.outcome.output], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult(state=PartialTransition(type="resume", output=result)) async def _handle_PromptStep( self, step: PromptStep, ): if self.outcome is None: return WorkflowResult(state=PartialTransition(output=None)) messages = self.outcome.output try: if self.context is not None and get_feature_flag_value( "auto_tool_calls_prompt_step", developer_id=str(self.context.execution_input.developer_id), ): if step.unwrap or not step.auto_run_tools or messages[-1]["tool_calls"] is None: workflow.logger.debug(f"Prompt step: Received response: {messages}") return WorkflowResult(state=PartialTransition(output=messages)) # TODO: make sure to include filtered function tool calls in the last message, or filter them from 2nd message tool_calls_input = messages[-1]["tool_calls"] else: message = messages if ( step.unwrap or not step.auto_run_tools or message["choices"][0]["finish_reason"] != "tool_calls" ): workflow.logger.debug(f"Prompt step: Received response: {message}") return WorkflowResult(state=PartialTransition(output=message)) choice = message["choices"][0] tool_calls_input = choice["message"]["tool_calls"] except (KeyError, IndexError, TypeError) as e: workflow.logger.error(f"Prompt step: Error parsing response structure: {e}") msg = f"Invalid response structure in prompt step: {e}" raise ApplicationError(msg) from e except Exception as e: workflow.logger.error(f"Prompt step: Unexpected error: {e}") msg = f"Unexpected error in prompt step: {e}" raise ApplicationError(msg) from e input_type = tool_calls_input[0]["type"] # TODO: What if the model requested multiple function tool calls? if input_type == "function": workflow.logger.debug("Prompt step: Received FUNCTION tool call") # Enter a wait-for-input step to ask the developer to run the tool calls tool_calls_results = await workflow.execute_activity( task_steps.raise_complete_async, args=[self.context, tool_calls_input], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) # Feed the tool call results back to the model if self.context is not None: self.context.current_step.prompt.append(messages) self.context.current_step.prompt.append(tool_calls_results) new_response = await workflow.execute_activity( task_steps.prompt_step, self.context, schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult( state=PartialTransition(output=new_response.output, type="resume"), ) if input_type == "integrations": workflow.logger.debug("Prompt step: Received INTEGRATION tool call") # FIXME: Implement integration tool calls # See: MANUAL TOOL CALL INTEGRATION (below) msg = "Integration tool calls not yet supported" raise NotImplementedError(msg) # TODO: Feed the tool call results back to the model (see above) if input_type == "api_call": workflow.logger.debug("Prompt step: Received API_CALL tool call") # FIXME: Implement API_CALL tool calls # See: MANUAL TOOL CALL API_CALL (below) msg = "API_CALL tool calls not yet supported" raise NotImplementedError(msg) # TODO: Feed the tool call results back to the model (see above) if input_type == "system": workflow.logger.debug("Prompt step: Received SYSTEM tool call") # FIXME: Implement SYSTEM tool calls # See: MANUAL TOOL CALL SYSTEM (below) msg = "SYSTEM tool calls not yet supported" raise NotImplementedError(msg) # TODO: Feed the tool call results back to the model (see above) workflow.logger.debug( f"Prompt step: Received unknown tool call: {tool_calls_input[0]['type']}", ) return WorkflowResult(state=PartialTransition(output=messages)) async def _handle_SetStep( self, step: SetStep, ): if self.outcome is None: return WorkflowResult(state=PartialTransition(output=None)) output = self.outcome.output workflow.logger.debug(f"Set step: Completed evaluation with output: {output}") return WorkflowResult(state=PartialTransition(output=output)) async def _handle_GetStep( self, step: GetStep, ): key = step.get workflow.logger.info(f"Get step: Fetching '{key}' from user state") value = workflow.memo_value(key, default=None) workflow.logger.debug(f"Retrieved value: {value}") return WorkflowResult(state=PartialTransition(output=value)) async def _handle_ParallelStep( self, step: ParallelStep, ): # FIXME: Implement ParallelStep # SCRUM-17 workflow.logger.error("ParallelStep not yet implemented") msg = "Not implemented" raise ApplicationError(msg) async def _handle_ToolCallStep( self, step: ToolCallStep, ): # Add null check for context if self.context is None: msg = "Context is None in _handle_ToolCallStep" raise ApplicationError(msg) tool_call = self.outcome.output if self.outcome is not None else {} if tool_call["type"] == "function": tool_call_response = await workflow.execute_activity( task_steps.raise_complete_async, args=[self.context, tool_call], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult( state=PartialTransition(output=tool_call_response, type="resume"), ) if tool_call["type"] == "integration": # MANUAL TOOL CALL INTEGRATION workflow.logger.debug("ToolCallStep: Received INTEGRATION tool call") call = tool_call["integration"] tool_name = call["name"] arguments = call["arguments"] tools = await self.context.tools() integration_tool = next((t for t in tools if t.name == tool_name), None) if integration_tool is None: msg = f"Integration {tool_name} not found" raise ApplicationError(msg) provider = integration_tool.integration.provider setup = ( integration_tool.integration.setup and integration_tool.integration.setup.model_dump() ) method = integration_tool.integration.method integration = BaseIntegrationDef( provider=provider, setup=setup, method=method, arguments=arguments, ) # AIDEV-NOTE: Extract IDs from context for new execute_integration signature developer_id = self.context.execution_input.developer_id agent_id = self.context.execution_input.agent.id task_id = ( self.context.execution_input.task.id if self.context.execution_input.task else None ) session_id = getattr(self.context.execution_input, "session", None) session_id = session_id.id if session_id else None tool_call_response = await workflow.execute_activity( execute_integration, args=[ developer_id, agent_id, task_id, session_id, tool_name, integration, arguments, ], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult(state=PartialTransition(output=tool_call_response)) if tool_call["type"] == "api_call": # MANUAL TOOL CALL API_CALL workflow.logger.debug("ToolCallStep: Received API_CALL tool call") call = tool_call["api_call"] tool_name = call["name"] arguments = call["arguments"] tools = await self.context.tools() apicall_tool = next((t for t in tools if t.name == tool_name), None) if apicall_tool is None: msg = f"Integration {tool_name} not found" raise ApplicationError(msg) if apicall_tool.api_call is None: msg = f"API call data for {tool_name} not found" raise ApplicationError(msg) api_call: ApiCallDef = cast(ApiCallDef, apicall_tool.api_call) api_call = ApiCallDef( method=api_call.method, url=api_call.url, headers=api_call.headers, follow_redirects=api_call.follow_redirects, ) if "json_" in arguments: arguments["json"] = arguments["json_"] del arguments["json_"] # Execute the API call using the `execute_api_call` function tool_call_response = await workflow.execute_activity( execute_api_call, args=[ api_call, arguments, ], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult(state=PartialTransition(output=tool_call_response)) if tool_call["type"] == "system": # MANUAL TOOL CALL SYSTEM workflow.logger.debug("ToolCallStep: Received SYSTEM tool call") call = tool_call.get("system") system_call = SystemDef(**call) # AIDEV-NOTE: Extract developer_id for new execute_system signature developer_id = self.context.execution_input.developer_id tool_call_response = await workflow.execute_activity( execute_system, args=[developer_id, system_call], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult(state=PartialTransition(output=tool_call_response)) return None async def handle_step(self, step: WorkflowStep) -> WorkflowResult: meth = getattr(self, f"_handle_{type(step).__name__}", None) if not meth: step_name = ( type(self.context.current_step).__name__ if self.context is not None else None ) workflow.logger.error(f"Unhandled step type: {step_name}") msg = "Not implemented" state = PartialTransition(type="error", output=msg) await transition( self.context, state, last_error=self.last_error, ) raise ApplicationError(msg) return await meth(step) # Main workflow run method @workflow.run async def run( self, execution_input: ExecutionInput, start: TransitionTarget, current_input: Any, ) -> WorkflowResult: if not execution_input.task: msg = "execution_input.task cannot be None" raise ApplicationError(msg) workflow.logger.info( f"TaskExecutionWorkflow for task {execution_input.task.id}" f" [LOC {start.workflow}.{start.step}]", ) # 0. Prepare context context = StepContext( execution_input=execution_input, current_input=current_input, cursor=start, ) step_type = type(context.current_step) continued_as_new = workflow.info().continued_run_id is not None # 1. Transition to starting if not done yet if context.is_first_step and not continued_as_new: await transition( context, type="init" if context.is_main else "init_branch", output=context.current_input, next=context.cursor, metadata={}, last_error=self.last_error, ) # 2. Execute the current step's activity if applicable workflow.logger.info( f"Executing step {context.cursor.step} of type {step_type.__name__}", ) activity = STEP_TO_ACTIVITY.get(step_type) self.context = context outcome = None try: if activity: outcome = await workflow.execute_activity( activity, context, # schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) workflow.logger.debug(f"Step {context.cursor.step} completed successfully") else: outcome = await self.eval_step_exprs(context.current_step) except Exception as e: while isinstance(e, ActivityError) and getattr(e, "__cause__", None): e = e.__cause__ if isinstance(e, CancelledError): workflow.logger.info(f"Step {context.cursor.step} cancelled") if not getattr(e, "transitioned", False): await transition(context, type="cancelled", output="Workflow Cancelled") raise workflow.logger.error(f"Error in step {context.cursor.step}: {e!s}") if not getattr(e, "transitioned", False): await transition(context, type="error", output=str(e)) err_msg = ( f"Activity {activity} threw error: {e}" if activity else f"Step {context.cursor.step} threw error: {e}" ) raise ApplicationError(err_msg) from e # --- # 3. Then, based on the outcome and step type, decide what to do next workflow.logger.info(f"Processing outcome for step {context.cursor.step}") error = outcome.error if error is not None: workflow.logger.error(f"Error in step {context.cursor.step}: {error}") if not getattr(error, "transitioned", False): await transition(context, type="error", output=error) msg = f"Step {type(context.current_step).__name__} threw error: {error}" raise ApplicationError(msg) self.outcome = outcome try: workflow_result = await self.handle_step( step=context.current_step, ) state = workflow_result.state except BaseException as e: while isinstance(e, ActivityError) and getattr(e, "__cause__", None): e = e.__cause__ if isinstance(e, CancelledError | AsyncioCancelledError): workflow.logger.info(f"Step {context.cursor.step} cancelled") if not getattr(e, "transitioned", False): await transition(context, type="cancelled", output="Workflow Cancelled") raise workflow.logger.error(f"Error in step {context.cursor.step}: {e}") if not getattr(e, "transitioned", False): await transition(context, type="error", output=str(e)) msg = f"Step {type(context.current_step).__name__} threw error: {e}" raise ApplicationError(msg) from e if workflow_result.returned: await transition( self.context, output=state.output, type="finish" if self.context.is_main else "finish_branch", next=None, last_error=self.last_error, ) return workflow_result # 4. Transition to the next step workflow.logger.info(f"Transitioning after step {context.cursor.step}") # The returned value is the transition finally created state = state or PartialTransition(type="error", output="Not implemented") if context.current_step.label: state.step_label = context.current_step.label final_state = await transition( context, state, last_error=self.last_error, ) # 5a. End if the last step if final_state.type in ("finish", "finish_branch", "cancelled", "error"): workflow.logger.info(f"Workflow finished with state: {final_state.type}") return WorkflowResult(state=PartialTransition(output=final_state.output)) # 5b. Recurse to the next step if not final_state.next: msg = "No next step" raise ApplicationError(msg) workflow.logger.info( f"Continuing to next step: {final_state.next.workflow}.{final_state.next.step}", ) # Save the final output to the blob store [final_output] = await workflow.execute_activity( save_inputs_remote, args=[[final_state.output]], schedule_to_close_timeout=timedelta( seconds=10 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) # Continue as a child workflow return await continue_as_child( context.execution_input, start=final_state.next, current_input=final_output, user_state=state.user_state, ) ================================================ FILE: src/agents-api/agents_api/workflows/task_execution/helpers.py ================================================ # AIDEV-NOTE: Helper functions for TaskExecution workflow orchestration, including validation and branch execution. import asyncio from datetime import timedelta from typing import Any, TypeVar from temporalio import workflow from temporalio.common import SearchAttributeKey, SearchAttributePair, TypedSearchAttributes from temporalio.exceptions import ActivityError, ApplicationError, ChildWorkflowError from ...common.retry_policies import DEFAULT_RETRY_POLICY with workflow.unsafe.imports_passed_through(): from ...activities import task_steps from ...autogen.openapi_model import ( EvaluateStep, TaskSpecDef, TransitionTarget, Workflow, WorkflowStep, ) from ...common.protocol.tasks import ( ExecutionInput, PartialTransition, StepContext, WorkflowResult, ) from ...common.utils.workflows import PAR_PREFIX, SEPARATOR from ...env import ( task_max_parallelism, temporal_heartbeat_timeout, temporal_search_attribute_key, ) T = TypeVar("T") def validate_execution_input(execution_input: ExecutionInput) -> TaskSpecDef: """Validates and returns the task from execution input. Args: execution_input: The execution input to validate Returns: The validated task Raises: ApplicationError: If task is None """ if execution_input.task is None: msg = "Execution input task cannot be None" raise ApplicationError(msg) return execution_input.task async def base_evaluate_activity( expr: str, context: StepContext | None = None, values: dict[str, Any] | None = None, ) -> Any: try: return await workflow.execute_activity( task_steps.base_evaluate, args=[expr, context, values], schedule_to_close_timeout=timedelta(seconds=300), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) except ActivityError as e: # Unwrap nested ActivityError causes while isinstance(e, ActivityError) and getattr(e, "__cause__", None): e = e.__cause__ # type: ignore[assignment] # AIDEV-NOTE: e.__cause__ is BaseException|None # AIDEV-NOTE: assert e is BaseException for raising assert isinstance(e, BaseException) raise e async def continue_as_child( execution_input: ExecutionInput, start: TransitionTarget, current_input: Any, user_state: dict[str, Any] = {}, ) -> Any: info = workflow.info() # FIXME: This doesn't actually work if info.is_continue_as_new_suggested(): run = workflow.continue_as_new else: run = lambda *args, **kwargs: workflow.execute_child_workflow( # noqa: E731 info.workflow_type, *args, **kwargs, ) if execution_input.execution is None: msg = "Execution input execution cannot be None" raise ApplicationError(msg) execution_id = execution_input.execution.id execution_id_key = SearchAttributeKey.for_keyword(temporal_search_attribute_key) try: return await run( args=[ execution_input, start, current_input, ], retry_policy=DEFAULT_RETRY_POLICY, memo=workflow.memo() | user_state, search_attributes=TypedSearchAttributes([ SearchAttributePair(execution_id_key, str(execution_id)), ]), ) except Exception as e: # Unwrap nested ChildWorkflowError causes while isinstance(e, ChildWorkflowError) and getattr(e, "__cause__", None): e = e.__cause__ # type: ignore[assignment] # AIDEV-NOTE: e.__cause__ is BaseException|None # AIDEV-NOTE: assert e is BaseException for raising assert isinstance(e, BaseException) e.transitioned = True raise e async def execute_switch_branch( *, context: StepContext, execution_input: ExecutionInput, switch: list, index: int, current_input: Any, user_state: dict[str, Any] = {}, ) -> Any: task = validate_execution_input(execution_input) workflow.logger.info(f"Switch step: Chose branch {index}") chosen_branch = switch[index] seprated_workflow_name = SEPARATOR + context.cursor.workflow + SEPARATOR case_wf_name = f"{seprated_workflow_name}[{context.cursor.step}].case" case_task = task.model_copy() case_task.workflows = [ Workflow(name=case_wf_name, steps=[chosen_branch.then]), *case_task.workflows, ] case_execution_input = execution_input.model_copy() case_execution_input.task = case_task case_next_target = TransitionTarget( workflow=case_wf_name, step=0, scope_id=context.current_scope_id, ) return await continue_as_child( case_execution_input, case_next_target, current_input, user_state=user_state, ) async def execute_if_else_branch( *, context: StepContext, execution_input: ExecutionInput, then_branch: WorkflowStep, else_branch: WorkflowStep | None, condition: bool, current_input: Any, user_state: dict[str, Any] = {}, ) -> Any: task = validate_execution_input(execution_input) workflow.logger.info(f"If-Else step: Condition evaluated to {condition}") chosen_branch = then_branch if condition else else_branch if chosen_branch is None: chosen_branch = EvaluateStep(evaluate={"output": "_"}) separated_workflow_name = SEPARATOR + context.cursor.workflow + SEPARATOR if_else_wf_name = f"{separated_workflow_name}[{context.cursor.step}].if_else" if_else_wf_name += ".then" if condition else ".else" if_else_task = task.model_copy() if_else_task.workflows = [ Workflow(name=if_else_wf_name, steps=[chosen_branch]), *if_else_task.workflows, ] if_else_execution_input = execution_input.model_copy() if_else_execution_input.task = if_else_task if_else_next_target = TransitionTarget( workflow=if_else_wf_name, step=0, scope_id=context.current_scope_id, ) return await continue_as_child( if_else_execution_input, if_else_next_target, current_input, user_state=user_state, ) async def execute_foreach_step( *, context: StepContext, execution_input: ExecutionInput, do_step: WorkflowStep, items: list[Any], current_input: Any, user_state: dict[str, Any] = {}, ) -> Any: task = validate_execution_input(execution_input) workflow.logger.info(f"Foreach step: Iterating over {len(items)} items") results = [] for i, item in enumerate(items): separated_workflow_name = SEPARATOR + context.cursor.workflow + SEPARATOR foreach_wf_name = f"{separated_workflow_name}[{context.cursor.step}].foreach[{i}]" foreach_task = task.model_copy() foreach_task.workflows = [ Workflow(name=foreach_wf_name, steps=[do_step]), *foreach_task.workflows, ] foreach_execution_input = execution_input.model_copy() foreach_execution_input.task = foreach_task foreach_next_target = TransitionTarget( workflow=foreach_wf_name, step=0, scope_id=context.current_scope_id, ) result = await continue_as_child( foreach_execution_input, foreach_next_target, item, user_state=user_state, ) if result.returned: return result results.append(result.state.output) return WorkflowResult(state=PartialTransition(output=results)) async def execute_map_reduce_step( *, context: StepContext, execution_input: ExecutionInput, map_defn: WorkflowStep, items: list[Any], current_input: Any, user_state: dict[str, Any] = {}, reduce: str | None = None, initial: Any = [], ) -> Any: task = validate_execution_input(execution_input) workflow.logger.info(f"MapReduce step: Processing {len(items)} items") result = initial reduce = "$ results + [_]" if reduce is None else reduce for i, item in enumerate(items): separated_workflow_name = SEPARATOR + context.cursor.workflow + SEPARATOR workflow_name = f"{separated_workflow_name}[{context.cursor.step}].mapreduce[{i}]" map_reduce_task = task.model_copy() map_reduce_task.workflows = [ Workflow(name=workflow_name, steps=[map_defn]), *map_reduce_task.workflows, ] map_reduce_execution_input = execution_input.model_copy() map_reduce_execution_input.task = map_reduce_task # NOTE: Step needs to be refactored to support multiple steps map_reduce_next_target = TransitionTarget( workflow=workflow_name, step=0, scope_id=context.current_scope_id, ) workflow_result = await continue_as_child( map_reduce_execution_input, map_reduce_next_target, item, user_state=user_state, ) if workflow_result.returned: return workflow_result result = await workflow.execute_activity( task_steps.base_evaluate, args=[reduce, None, {"results": result, "_": workflow_result.state.output}], schedule_to_close_timeout=timedelta(seconds=30), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return WorkflowResult(state=PartialTransition(output=result)) async def execute_map_reduce_step_parallel( *, context: StepContext, execution_input: ExecutionInput, map_defn: WorkflowStep, items: list[Any], current_input: Any, user_state: dict[str, Any] = {}, initial: Any = [], reduce: str | None = None, parallelism: int = task_max_parallelism, ) -> Any: task = validate_execution_input(execution_input) workflow.logger.info(f"MapReduce step: Processing {len(items)} items") results = initial # Ensure parallelism is at least 1 and not greater than max parallelism = max(1, min(parallelism, task_max_parallelism)) # If parallelism is 1, we're effectively running sequentially if parallelism == 1: workflow.logger.warning("Parallelism is set to 1, falling back to sequential execution") # Fall back to sequential map-reduce # Note: 'workflow' parameter is missing here, but it's not needed because # 'workflow' is imported at the top of the file (`from temporalio import workflow`) # and used directly as a module, not as a parameter return await execute_map_reduce_step( context=context, execution_input=execution_input, map_defn=map_defn, items=items, current_input=current_input, user_state=user_state, initial=initial, reduce=reduce, ) # Modify reduce expression to use reduce function (since we are passing a list) reduce = "results + [_]" if reduce is None else reduce reduce = reduce.replace("_", "_item").replace("results", "_result") # Explanation: # - reduce is the reduce expression # - reducer_lambda is the lambda function that will be used to reduce the results extra_lambda_strs = {"reducer_lambda": f"lambda _result, _item: ({reduce})"} reduce = "$ reduce(reducer_lambda, _, results)" # First create batches of items to run in parallel batches = [items[i : i + parallelism] for i in range(0, len(items), parallelism)] for i, batch in enumerate(batches): batch_pending = [] for j, item in enumerate(batch): # Parallel batch workflow name # Note: Added PAR: prefix to easily identify parallel batches in logs separated_workflow_name = SEPARATOR + context.cursor.workflow + SEPARATOR workflow_name = f"{PAR_PREFIX}{separated_workflow_name}[{context.cursor.step}].mapreduce[{i}][{j}]" map_reduce_task = task.model_copy() map_reduce_task.workflows = [ Workflow(name=workflow_name, steps=[map_defn]), *map_reduce_task.workflows, ] map_reduce_execution_input = execution_input.model_copy() map_reduce_execution_input.task = map_reduce_task map_reduce_next_target = TransitionTarget( workflow=workflow_name, step=0, scope_id=context.current_scope_id, ) batch_pending.append( asyncio.create_task( continue_as_child( map_reduce_execution_input, map_reduce_next_target, item, user_state=user_state, ), ), ) # Wait for all the batch items to complete try: batch_results = await asyncio.gather(*batch_pending) # Process batch results in a single pass returned_result = None batch_outputs = [] for batch_result in batch_results: if batch_result.returned: returned_result = batch_result break batch_outputs.append(batch_result.state.output) if returned_result: return returned_result batch_results = batch_outputs # Reduce the results of the batch results = await workflow.execute_activity( task_steps.base_evaluate, args=[ reduce, None, {"results": results, "_": batch_results}, extra_lambda_strs, ], schedule_to_close_timeout=timedelta(seconds=30), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) except BaseException as e: workflow.logger.error(f"Error in batch {i}: {e}") msg = f"Error in batch {i}: {e}" raise ApplicationError(msg) from e return WorkflowResult(state=PartialTransition(output=results)) ================================================ FILE: src/agents-api/agents_api/workflows/task_execution/transition.py ================================================ from datetime import timedelta from temporalio import workflow from temporalio.exceptions import ActivityError, ApplicationError with workflow.unsafe.imports_passed_through(): from ...activities import task_steps from ...autogen.openapi_model import ( CreateTransitionRequest, TransitionTarget, ) from ...common.protocol.tasks import PartialTransition, StepContext from ...common.retry_policies import DEFAULT_RETRY_POLICY from ...env import ( debug, temporal_heartbeat_timeout, temporal_schedule_to_close_timeout, testing, ) async def transition( context: StepContext, state: PartialTransition | None = None, **kwargs, ) -> CreateTransitionRequest: if state is None: state = PartialTransition() match context.is_last_step, context.cursor: case (True, TransitionTarget(workflow="main")): state.type = "finish" case (True, _): state.type = "finish_branch" case _, _: state.type = "step" transition_request = CreateTransitionRequest( current=context.cursor, **{ "next": None if context.is_last_step else TransitionTarget( workflow=context.cursor.workflow, step=context.cursor.step + 1, scope_id=context.current_scope_id, ), "metadata": {"step_type": type(context.current_step).__name__}, "output": state.output, **state.model_dump(exclude_unset=True, exclude={"output"}), **kwargs, # Override with any additional kwargs }, ) try: await workflow.execute_activity( task_steps.transition_step, args=[context, transition_request], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) return transition_request except Exception as e: while isinstance(e, ActivityError) and getattr(e, "__cause__", None): e = e.__cause__ workflow.logger.error(f"Error in transition: {e!s}") msg = f"Error in transition: {e}" raise ApplicationError(msg) from e ================================================ FILE: src/agents-api/docker-compose-api.yml ================================================ name: julep-agents-api # Shared environment variables x--shared-environment: &shared-environment AGENTS_API_KEY: ${AGENTS_API_KEY} AGENTS_API_KEY_HEADER_NAME: "Authorization" AGENTS_API_URL: ${AGENTS_API_URL:-http://agents-api:8080} ENABLE_RESPONSES: "True" PG_DSN: ${PG_DSN:-postgres://postgres:postgres@memory-store:5432/postgres} EMBEDDING_MODEL_ID: ${EMBEDDING_MODEL_ID:-openai/text-embedding-3-large} INTEGRATION_SERVICE_URL: ${INTEGRATION_SERVICE_URL:-http://integrations:8000} TRUNCATE_EMBED_TEXT: ${TRUNCATE_EMBED_TEXT:-True} SAPLING_API_KEY: ${SAPLING_API_KEY} ZEROGPT_URL: ${ZEROGPT_URL:-https://api.zerogpt.com/api/detect/detectText} DESKLIB_URL: ${DESKLIB_URL:-http://35.243.190.233/detect} SAPLING_URL: ${SAPLING_URL:-https://api.sapling.ai/api/v1/aidetect} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} GEMINI_API_KEY: ${GEMINI_API_KEY} OPENAI_API_KEY: ${OPENAI_API_KEY} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY} GROQ_API_KEY: ${GROQ_API_KEY} VOYAGE_API_KEY: ${VOYAGE_API_KEY} CEREBRAS_API_KEY: ${CEREBRAS_API_KEY} CLOUDFLARE_API_KEY: ${CLOUDFLARE_API_KEY} CLOUDFLARE_ACCOUNT_ID: ${CLOUDFLARE_ACCOUNT_ID} NVIDIA_NIM_API_KEY: ${NVIDIA_NIM_API_KEY} GITHUB_API_KEY: ${GITHUB_API_KEY} GOOGLE_APPLICATION_CREDENTIALS: ${GOOGLE_APPLICATION_CREDENTIALS} x--base-agents-api: &base-agents-api image: julepai/agents-api:${TAG:-dev} environment: <<: *shared-environment build: platforms: - linux/amd64 context: . dockerfile: Dockerfile restart: on-failure ports: - "8080:8080" develop: watch: - action: sync+restart path: ./agents_api target: /app/agents_api ignore: - ./**/*.pyc - action: sync+restart path: ./gunicorn_conf.py target: /app/gunicorn_conf.py ignore: - ./gunicorn_conf.pyc - action: rebuild path: uv.lock - action: rebuild path: Dockerfile services: agents-api: <<: *base-agents-api profiles: - '' # Acts as a default profile. See: https://stackoverflow.com/questions/75758174/how-to-make-profile-default-for-docker-compose - single-tenant ================================================ FILE: src/agents-api/docker-compose.yml ================================================ name: julep-agents-api # Shared environment variables x--shared-environment: &shared-environment AGENTS_API_KEY: ${AGENTS_API_KEY} AGENTS_API_KEY_HEADER_NAME: ${AGENTS_API_KEY_HEADER_NAME:-Authorization} AGENTS_API_HOSTNAME: ${AGENTS_API_HOSTNAME:-localhost} AGENTS_API_PUBLIC_PORT: ${AGENTS_API_PUBLIC_PORT:-80} AGENTS_API_PROTOCOL: ${AGENTS_API_PROTOCOL:-http} AGENTS_API_URL: ${AGENTS_API_URL:-http://agents-api:8080} ENABLE_RESPONSES: ${ENABLE_RESPONSES:-false} PG_DSN: ${PG_DSN:-postgres://postgres:postgres@memory-store:5432/postgres} DEBUG: ${AGENTS_API_DEBUG:-False} EMBEDDING_MODEL_ID: ${EMBEDDING_MODEL_ID:-openai/text-embedding-3-large} INTEGRATION_SERVICE_URL: ${INTEGRATION_SERVICE_URL:-http://integrations:8000} LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} LITELLM_URL: ${LITELLM_URL:-http://litellm:4000} SUMMARIZATION_MODEL_NAME: ${SUMMARIZATION_MODEL_NAME:-gpt-4-turbo} TEMPORAL_ENDPOINT: ${TEMPORAL_ENDPOINT:-temporal:7233} TEMPORAL_NAMESPACE: ${TEMPORAL_NAMESPACE:-default} TEMPORAL_TASK_QUEUE: ${TEMPORAL_TASK_QUEUE:-julep-task-queue} TEMPORAL_WORKER_URL: ${TEMPORAL_WORKER_URL:-temporal:7233} TEMPORAL_API_KEY: ${TEMPORAL_API_KEY:-} TEMPORAL_SCHEDULE_TO_CLOSE_TIMEOUT: ${TEMPORAL_SCHEDULE_TO_CLOSE_TIMEOUT:-3600} TEMPORAL_METRICS_BIND_HOST: ${TEMPORAL_METRICS_BIND_HOST:-0.0.0.0} TEMPORAL_METRICS_BIND_PORT: ${TEMPORAL_METRICS_BIND_PORT:-14000} TEMPORAL_HEARTBEAT_TIMEOUT: ${TEMPORAL_HEARTBEAT_TIMEOUT:-900} TEMPORAL_ACTIVITY_AFTER_RETRY_TIMEOUT: ${TEMPORAL_ACTIVITY_AFTER_RETRY_TIMEOUT:-30} TEMPORAL_MAX_CONCURRENT_WORKFLOW_TASKS: ${TEMPORAL_MAX_CONCURRENT_WORKFLOW_TASKS} TEMPORAL_MAX_CONCURRENT_ACTIVITIES: ${TEMPORAL_MAX_CONCURRENT_ACTIVITIES:-100} TEMPORAL_MAX_ACTIVITIES_PER_SECOND: ${TEMPORAL_MAX_ACTIVITIES_PER_SECOND} TEMPORAL_MAX_TASK_QUEUE_ACTIVITIES_PER_SECOND: ${TEMPORAL_MAX_TASK_QUEUE_ACTIVITIES_PER_SECOND} TEMPORAL_SEARCH_ATTRIBUTE_KEY: ${TEMPORAL_SEARCH_ATTRIBUTE_KEY:-CustomStringField} AGENTS_API_TRANSITION_REQUESTS_PER_MINUTE: ${AGENTS_API_TRANSITION_REQUESTS_PER_MINUTE:-500} TRUNCATE_EMBED_TEXT: ${TRUNCATE_EMBED_TEXT:-True} WORKER_URL: ${WORKER_URL:-temporal:7233} USE_BLOB_STORE_FOR_TEMPORAL: ${USE_BLOB_STORE_FOR_TEMPORAL:-false} BLOB_STORE_CUTOFF_KB: ${BLOB_STORE_CUTOFF_KB:-128} BLOB_STORE_BUCKET: ${BLOB_STORE_BUCKET:-agents-api} S3_ENDPOINT: ${S3_ENDPOINT:-http://seaweedfs:8333} S3_ACCESS_KEY: ${S3_ACCESS_KEY} S3_SECRET_KEY: ${S3_SECRET_KEY} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} MAX_FREE_SESSIONS: ${MAX_FREE_SESSIONS:-50} MAX_FREE_EXECUTIONS: ${MAX_FREE_EXECUTIONS:-50} SENTRY_DSN: ${SENTRY_DSN} SAPLING_API_KEY: ${SAPLING_API_KEY} ZEROGPT_URL: ${ZEROGPT_URL:-https://api.zerogpt.com/api/detect/detectText} DESKLIB_URL: ${DESKLIB_URL:-http://35.243.190.233/detect} SAPLING_URL: ${SAPLING_URL:-https://api.sapling.ai/api/v1/aidetect} BRAVE_API_KEY: ${BRAVE_API_KEY} GUNICORN_CPU_DIVISOR: ${GUNICORN_CPU_DIVISOR:-4} GUNICORN_WORKERS: ${GUNICORN_WORKERS} SECRETS_MASTER_KEY: ${SECRETS_MASTER_KEY} HASURA_URL: ${HASURA_URL:-http://hasura:8080} HASURA_ADMIN_SECRET: ${HASURA_ADMIN_SECRET:-hasura_admin_secret} UNLEASH_URL: ${UNLEASH_URL:-http://localhost:4242/api} UNLEASH_API_TOKEN: ${UNLEASH_API_TOKEN:-default:development.unleash-insecure-api-token} UNLEASH_APP_NAME: ${UNLEASH_APP_NAME:-agents-api} LLAMA_MODEL_MULTIPLIER: ${LLAMA_MODEL_MULTIPLIER} x--base-agents-api: &base-agents-api image: julepai/agents-api:${TAG:-dev} depends_on: worker: condition: service_started environment: <<: *shared-environment build: platforms: - linux/amd64 context: . dockerfile: Dockerfile restart: on-failure ports: - "8080:8080" develop: watch: - action: sync+restart path: ./agents_api target: /app/agents_api ignore: - ./**/*.pyc - action: sync+restart path: ./gunicorn_conf.py target: /app/gunicorn_conf.py ignore: - ./gunicorn_conf.pyc - action: rebuild path: uv.lock - action: rebuild path: Dockerfile volumes: - ../llm-proxy/litellm-config.yaml:/app/litellm-config.yaml:ro services: agents-api: <<: *base-agents-api profiles: - '' # Acts as a default profile. See: https://stackoverflow.com/questions/75758174/how-to-make-profile-default-for-docker-compose - single-tenant agents-api-multi-tenant: <<: *base-agents-api profiles: - multi-tenant environment: <<: *shared-environment AGENTS_API_MULTI_TENANT_MODE: true AGENTS_API_PREFIX: "/api" worker: image: julepai/worker:${TAG:-dev} environment: <<: *shared-environment build: platforms: - linux/amd64 context: . dockerfile: Dockerfile.worker develop: watch: - action: sync+restart path: ./agents_api target: /app/agents_api ignore: - ./**/*.pyc - action: rebuild path: uv.lock - action: rebuild path: Dockerfile.worker volumes: - ../llm-proxy/litellm-config.yaml:/app/litellm-config.yaml:ro ================================================ FILE: src/agents-api/gunicorn_conf.py ================================================ import os from agents_api.env import gunicorn_workers debug = os.getenv("DEBUG", "false").lower() == "true" # Gunicorn config variables workers = gunicorn_workers if not debug else 1 worker_class = "uvicorn.workers.UvicornWorker" bind = "0.0.0.0:8080" keepalive = 120 timeout = 120 errorlog = "-" accesslog = "-" ================================================ FILE: src/agents-api/poe_tasks.toml ================================================ [tasks] format = "ruff format" lint = "ruff check" typecheck = "pytype --config pytype.toml" validate-sql = "sqlvalidator --verbose-validate agents_api/" check = [ "lint", "format", "validate-sql", "typecheck", ] codegen_openapi = """ datamodel-codegen \ --input ../openapi.yaml \ --input-file-type openapi \ --output agents_api/autogen/ \ --output-model-type pydantic_v2.BaseModel \ --strict-types bool \ --strict-nullable \ --allow-population-by-field-name \ --field-include-all-keys \ --reuse-model \ --snake-case-field \ --enum-field-as-literal all \ --field-constraints \ --use-operation-id-as-name \ --use-schema-description \ --use-field-description \ --use-annotated \ --use-default \ --use-unique-items-as-set \ --use-subclass-enum \ --use-union-operator \ --use-one-literal-as-default \ --use-double-quotes \ --use-exact-imports \ --use-standard-collections \ --use-non-positive-negative-number-constrained-types \ --target-python-version 3.12 \ --treat-dot-as-module \ --use-title-as-name \ --collapse-root-models \ --output-datetime-class AwareDatetime \ --openapi-scopes schemas \ --keep-model-order \ --disable-timestamp""" fix_list_response = "python -c \"import base64; exec(base64.b64decode('CmltcG9ydCByZQoKZGVmIGZpeF9nZW5lcmljX2NsYXNzZXMoZmlsZV9wYXRoKToKICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICdyJykgYXMgZmlsZToKICAgICAgICBjb250ZW50ID0gZmlsZS5yZWFkKCkKCiAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaW5kIGluY29ycmVjdCBnZW5lcmljIGNsYXNzIGRlZmluaXRpb25zCiAgICBwYXR0ZXJuID0gcmUuY29tcGlsZShyJ2NsYXNzIChcdyspXFsoXHcrKTogQmFzZU1vZGVsXF1cKChCYXNlTW9kZWwpXCk6JykKICAgIHJlcGxhY2VtZW50ID0gcidjbGFzcyBcMShcMywgR2VuZXJpY1tcMl0pOicKCiAgICAjIFJlcGxhY2UgaW5jb3JyZWN0IGdlbmVyaWMgY2xhc3MgZGVmaW5pdGlvbnMKICAgIGZpeGVkX2NvbnRlbnQgPSByZS5zdWIocGF0dGVybiwgcmVwbGFjZW1lbnQsIGNvbnRlbnQpCgogICAgIyBXcml0ZSB0aGUgZml4ZWQgY29udGVudCBiYWNrIHRvIHRoZSBmaWxlCiAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgZmlsZS53cml0ZShmaXhlZF9jb250ZW50KQoKZml4X2dlbmVyaWNfY2xhc3NlcygnYWdlbnRzX2FwaS9hdXRvZ2VuL29wZW5hcGlfbW9kZWwucHknKQo=').decode())\"" codegen = [ "codegen_openapi", "fix_list_response", ] [tasks.test] env = { AGENTS_API_TESTING = "true", PYTHONPATH = "{PYTHONPATH}:." } cmd = "ward test --exclude .venv" ================================================ FILE: src/agents-api/pyproject.toml ================================================ [project] name = "agents-api" version = "1.0.0" description = "Julep's backend API" readme = "README.md" requires-python = ">=3.12,<3.13" dependencies = [ "aiobotocore>=2.21.0", "anyio>=4.4.0", "arrow>=1.3.0", "async-lru>=2.0.4", "beartype>=0.18.5", "en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl", "environs>=10.3.0", "fastapi>=0.115.4", "fire>=0.5.0", "google-re2>=1.1.20240702", "gunicorn>=23.0.0", "httpx>=0.27.0", "jinja2schema>=0.1.4", "jinja2>=3.1.4", "jsonschema>=4.22.0", "langchain-core>=0.3.14", "larch-pickle~=1.4.3", "litellm>=1.74.9", "lz4>=4.3.3", "msgpack>=1.1.0", "numpy>=2.0.0,<2.1.0", "openfeature-sdk>=0.8.1", "pandas>=2.2.2", "prometheus-client>=0.21.0", "prometheus-fastapi-instrumentator>=7.0.0", "pydantic-partial>=0.5.5", "pydantic[email]>=2.10.2", "python-box>=7.2.0", "scalar-fastapi>=1.0.3", "sentry-sdk[fastapi]>=2.13.0", "simpleeval>=0.9.13", "simsimd>=5.9.4", "spacy>=3.8.2", "sse-starlette>=2.1.3", "temporalio[opentelemetry]>=1.8", "tenacity>=9.0.0", "thefuzz>=0.22.1", "tiktoken>=0.7.0", "UnleashClient>=5.12.0", "uvicorn==0.29.0", "uvloop>=0.21.0", "xxhash>=3.5.0", "spacy-chunks>=0.0.2", "uuid7>=0.1.0", "asyncpg>=0.30.0", "unique-namer>=1.6.1", "langcodes>=3.5.0", "langchain-text-splitters>=0.3.2", "deep-translator>=1.11.4", "markdownify>=1.0.0", "markdown2>=2.5.3", "aiohttp>=3.11.13", "websockets>=15.0.1", "python-multipart>=0.0.20", "cryptography>=45.0.6", "backoff>=2.2.1", "pyjwt>=2.10.1", "sqlalchemy>=2.0.42", "redis>=6.4.0", "psycopg2-binary>=2.9.10", "fastapi-sso>=0.18.0", ] [dependency-groups] dev = [ "datamodel-code-generator>=0.26.3", "ipython>=8.30.0", "ipywidgets>=8.1.5", "julep>=1.43.1", "jupyterlab>=4.3.1", "pip>=24.3.1", "poethepoet>=0.31.1", "pyjwt>=2.10.1", "pyright>=1.1.391", "pytype>=2024.10.11", "ruff>=0.9.0", "sqlvalidator>=0.0.20", "testcontainers[postgres,localstack]>=4.9.0", "ward>=0.68.0b0", "pyanalyze>=0.13.1", "autotyping>=24.9.0", "psycopg[binary]>=3.2.5", # only for use inside tests for now "ty>=0.0.0a8", "pgai>=0.12.0", ] [tool.setuptools] py-modules = [ "agents_api", ] [tool.ty.rules] invalid-parameter-default = "warn" invalid-argument-type = "warn" unknown-argument = "warn" invalid-type-form = "warn" missing-argument = "warn" unresolved-attribute = "warn" invalid-assignment = "warn" possibly-unbound-attribute = "warn" no-matching-overload = "warn" not-iterable = "warn" unsupported-operator = "warn" ================================================ FILE: src/agents-api/pytype.toml ================================================ # NOTE: All relative paths are relative to the location of this file. [tool.pytype] # Space-separated list of files or directories to exclude. exclude = [ ] # Space-separated list of files or directories to process. inputs = [ 'agents_api', 'migrations', 'tests', ] # Keep going past errors to analyze as many files as possible. keep_going = true # Run N jobs in parallel. When 'auto' is used, this will be equivalent to the # number of CPUs on the host system. jobs = 'auto' # All pytype output goes here. output = '.pytype' # Platform (e.g., "linux", "win32") that the target code runs on. platform = 'linux' # Paths to source code directories, separated by ':'. pythonpath = '.' # Python version (major.minor) of the target code. python_version = '3.12' # Don't allow None to match bool. This flag is temporary and will be removed # once this behavior is enabled by default. none_is_not_bool = true # Variables initialized as None retain their None binding. This flag is # temporary and will be removed once this behavior is enabled by default. strict_none_binding = true # Space-separated list of error names to ignore. disable = [ 'pyi-error', ] # -------------- # Optional flags # -------------- # Bind 'self' in methods with non-transparent decorators. This flag is temporary # and will be removed once this behavior is enabled by default. bind_decorated_methods = false # Enable parameter count checks for overriding methods with renamed arguments. # This flag is temporary and will be removed once this behavior is enabled by # default. overriding_renamed_parameter_count_checks = false # Opt-in: Do not allow Any as a return type. no_return_any = false # Opt-in: Require decoration with @typing.override when overriding a method or # nested class attribute of a parent class. require_override_decorator = false ================================================ FILE: src/agents-api/tests/__init__.py ================================================ ================================================ FILE: src/agents-api/tests/fixtures.py ================================================ import os import random import string from unittest.mock import patch from uuid import UUID from agents_api.autogen.openapi_model import ( CreateAgentRequest, CreateDocRequest, CreateExecutionRequest, CreateFileRequest, CreateProjectRequest, CreateSessionRequest, CreateTaskRequest, CreateToolRequest, CreateTransitionRequest, CreateUserRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.common.utils.memory import total_size from agents_api.env import api_key, api_key_header_name, multi_tenant_mode from agents_api.queries.agents.create_agent import create_agent from agents_api.queries.developers.create_developer import create_developer from agents_api.queries.developers.get_developer import get_developer from agents_api.queries.docs.create_doc import create_doc from agents_api.queries.docs.get_doc import get_doc from agents_api.queries.executions.create_execution import create_execution from agents_api.queries.executions.create_execution_transition import ( create_execution_transition, ) from agents_api.queries.executions.create_temporal_lookup import create_temporal_lookup from agents_api.queries.files.create_file import create_file from agents_api.queries.projects.create_project import create_project from agents_api.queries.secrets.delete import delete_secret from agents_api.queries.secrets.list import list_secrets from agents_api.queries.sessions.create_session import create_session from agents_api.queries.tasks.create_task import create_task from agents_api.queries.tools.create_tools import create_tools from agents_api.queries.users.create_user import create_user from agents_api.web import app from aiobotocore.session import get_session from fastapi.testclient import TestClient from temporalio.client import WorkflowHandle from uuid_extensions import uuid7 from ward import fixture from .utils import ( get_localstack, get_pg_dsn, make_vector_with_similarity, ) from .utils import ( patch_embed_acompletion as patch_embed_acompletion_ctx, ) @fixture(scope="global") def pg_dsn(): with get_pg_dsn() as pg_dsn: os.environ["PG_DSN"] = pg_dsn try: yield pg_dsn finally: del os.environ["PG_DSN"] @fixture(scope="global") def test_developer_id(): if not multi_tenant_mode: return UUID(int=0) return uuid7() @fixture(scope="global") async def test_developer(dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) return await get_developer( developer_id=developer_id, connection_pool=pool, ) @fixture(scope="test") async def test_project(dsn=pg_dsn, developer=test_developer): pool = await create_db_pool(dsn=dsn) return await create_project( developer_id=developer.id, data=CreateProjectRequest( name="Test Project", metadata={"test": "test"}, ), connection_pool=pool, ) @fixture(scope="test") def patch_embed_acompletion(): output = {"role": "assistant", "content": "Hello, world!"} with patch_embed_acompletion_ctx(output) as (embed, acompletion): yield embed, acompletion @fixture(scope="test") async def test_agent(dsn=pg_dsn, developer=test_developer, project=test_project): pool = await create_db_pool(dsn=dsn) return await create_agent( developer_id=developer.id, data=CreateAgentRequest( model="gpt-4o-mini", name="test agent", about="test agent about", metadata={"test": "test"}, project=project.canonical_name, ), connection_pool=pool, ) @fixture(scope="test") async def test_user(dsn=pg_dsn, developer=test_developer): pool = await create_db_pool(dsn=dsn) return await create_user( developer_id=developer.id, data=CreateUserRequest( name="test user", about="test user about", ), connection_pool=pool, ) @fixture(scope="test") async def test_file(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) return await create_file( developer_id=developer.id, data=CreateFileRequest( name="Hello", description="World", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), connection_pool=pool, ) @fixture(scope="test") async def test_doc(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) resp = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Hello", content=["World", "World2", "World3"], metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Explicitly Refresh Indices: After inserting data, run a command to refresh the index, # ensuring it's up-to-date before executing queries. # This can be achieved by executing a REINDEX command await pool.execute("REINDEX DATABASE") yield await get_doc(developer_id=developer.id, doc_id=resp.id, connection_pool=pool) # TODO: Delete the doc # await delete_doc( # developer_id=developer.id, # doc_id=resp.id, # owner_type="agent", # owner_id=agent.id, # connection_pool=pool, # ) @fixture(scope="test") async def test_doc_with_embedding(dsn=pg_dsn, developer=test_developer, doc=test_doc): pool = await create_db_pool(dsn=dsn) embedding_with_confidence_0 = make_vector_with_similarity(d=0.0) make_vector_with_similarity(d=0.5) make_vector_with_similarity(d=-0.5) embedding_with_confidence_1_neg = make_vector_with_similarity(d=-1.0) await pool.execute( """ INSERT INTO docs_embeddings_store (developer_id, doc_id, index, chunk_seq, chunk, embedding) VALUES ($1, $2, 0, 0, $3, $4) """, developer.id, doc.id, doc.content[0] if isinstance(doc.content, list) else doc.content, f"[{', '.join([str(x) for x in [1.0] * 1024])}]", ) # Insert embedding with confidence 0 with respect to unit vector await pool.execute( """ INSERT INTO docs_embeddings_store (developer_id, doc_id, index, chunk_seq, chunk, embedding) VALUES ($1, $2, 1, 1, $3, $4) """, developer.id, doc.id, "Test content 1", f"[{', '.join([str(x) for x in embedding_with_confidence_0])}]", ) # Insert embedding with confidence -1 with respect to unit vector await pool.execute( """ INSERT INTO docs_embeddings_store (developer_id, doc_id, index, chunk_seq, chunk, embedding) VALUES ($1, $2, 2, 2, $3, $4) """, developer.id, doc.id, "Test content 2", f"[{', '.join([str(x) for x in embedding_with_confidence_1_neg])}]", ) # Explicitly Refresh Indices: After inserting data, run a command to refresh the index, # ensuring it's up-to-date before executing queries. # This can be achieved by executing a REINDEX command await pool.execute("REINDEX DATABASE") yield await get_doc(developer_id=developer.id, doc_id=doc.id, connection_pool=pool) @fixture(scope="test") async def test_user_doc(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) resp = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Hello", content=["World", "World2", "World3"], metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # Explicitly Refresh Indices: After inserting data, run a command to refresh the index, # ensuring it's up-to-date before executing queries. # This can be achieved by executing a REINDEX command await pool.execute("REINDEX DATABASE") yield await get_doc(developer_id=developer.id, doc_id=resp.id, connection_pool=pool) # TODO: Delete the doc # await delete_doc( # developer_id=developer.id, # doc_id=resp.id, # owner_type="user", # owner_id=user.id, # connection_pool=pool, # ) @fixture(scope="test") async def test_task(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) return await create_task( developer_id=developer.id, agent_id=agent.id, task_id=uuid7(), data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], metadata={"test": True}, ), connection_pool=pool, ) @fixture(scope="test") async def random_email(): return f"{''.join([random.choice(string.ascii_lowercase) for _ in range(10)])}@mail.com" @fixture(scope="test") async def test_new_developer(dsn=pg_dsn, email=random_email): pool = await create_db_pool(dsn=dsn) dev_id = uuid7() await create_developer( email=email, active=True, tags=["tag1"], settings={"key1": "val1"}, developer_id=dev_id, connection_pool=pool, ) return await get_developer( developer_id=dev_id, connection_pool=pool, ) @fixture(scope="test") async def test_session( dsn=pg_dsn, developer_id=test_developer_id, test_user=test_user, test_agent=test_agent, ): pool = await create_db_pool(dsn=dsn) return await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=test_agent.id, user=test_user.id, metadata={"test": "test"}, system_template="test system template", ), connection_pool=pool, ) @fixture(scope="global") async def test_execution( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): pool = await create_db_pool(dsn=dsn) workflow_handle = WorkflowHandle( client=None, id="blah", ) execution = await create_execution( developer_id=developer_id, task_id=task.id, data=CreateExecutionRequest(input={"test": "test"}), connection_pool=pool, ) await create_temporal_lookup( execution_id=execution.id, workflow_handle=workflow_handle, connection_pool=pool, ) yield execution @fixture def custom_scope_id(): return uuid7() @fixture(scope="test") async def test_execution_started( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, scope_id=custom_scope_id, ): pool = await create_db_pool(dsn=dsn) workflow_handle = WorkflowHandle( client=None, id="blah", ) execution = await create_execution( developer_id=developer_id, task_id=task.id, data=CreateExecutionRequest(input={"test": "test"}), connection_pool=pool, ) await create_temporal_lookup( execution_id=execution.id, workflow_handle=workflow_handle, connection_pool=pool, ) actual_scope_id = scope_id or uuid7() # Start the execution await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="init", output={}, current={"workflow": "main", "step": 0, "scope_id": actual_scope_id}, next={"workflow": "main", "step": 0, "scope_id": actual_scope_id}, ), connection_pool=pool, ) yield execution @fixture(scope="global") async def test_transition( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, ): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() transition = await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="step", output={}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "wf1", "step": 1, "scope_id": scope_id}, ), connection_pool=pool, ) yield transition @fixture(scope="test") async def test_tool( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): pool = await create_db_pool(dsn=dsn) function = { "description": "A function that prints hello world", "parameters": {"type": "object", "properties": {}}, } tool_spec = { "function": function, "name": "hello_world1", "type": "function", } [tool, *_] = await create_tools( developer_id=developer_id, agent_id=agent.id, data=[CreateToolRequest(**tool_spec)], connection_pool=pool, ) return tool SAMPLE_MODELS = [ {"id": "gpt-4"}, {"id": "gpt-3.5-turbo"}, {"id": "gpt-4o-mini"}, ] @fixture(scope="global") def client(_dsn=pg_dsn): with ( TestClient(app=app) as client, patch( "agents_api.common.utils.model_validation.get_model_list", return_value=SAMPLE_MODELS, ), ): yield client @fixture(scope="global") async def make_request(client=client, developer_id=test_developer_id): def _make_request(method, url, **kwargs): headers = kwargs.pop("headers", {}) headers = { **headers, api_key_header_name: api_key, } if multi_tenant_mode: headers["X-Developer-Id"] = str(developer_id) headers["Content-Length"] = str(total_size(kwargs.get("json", {}))) return client.request(method, url, headers=headers, **kwargs) return _make_request @fixture(scope="global") async def s3_client(): with get_localstack() as localstack: s3_endpoint = localstack.get_url() session = get_session() s3_client = await session.create_client( "s3", endpoint_url=s3_endpoint, aws_access_key_id=localstack.env["AWS_ACCESS_KEY_ID"], aws_secret_access_key=localstack.env["AWS_SECRET_ACCESS_KEY"], ).__aenter__() app.state.s3_client = s3_client try: yield s3_client finally: await s3_client.close() app.state.s3_client = None @fixture(scope="test") async def clean_secrets(dsn=pg_dsn, developer_id=test_developer_id): async def purge() -> None: pool = await create_db_pool(dsn=dsn) try: secrets = await list_secrets( developer_id=developer_id, connection_pool=pool, ) for secret in secrets: await delete_secret( secret_id=secret.id, developer_id=developer_id, connection_pool=pool, ) finally: # pool is closed in *the same* loop it was created in await pool.close() await purge() yield await purge() ================================================ FILE: src/agents-api/tests/sample_tasks/__init__.py ================================================ ================================================ FILE: src/agents-api/tests/sample_tasks/find_selector.yaml ================================================ name: Find request and selector for identity provider input_schema: type: object properties: screenshot_base64: type: string network_requests: type: array items: type: object properties: request: type: object properties: url: type: string method: type: string headers: type: object additionalProperties: type: string body: type: string response: type: object properties: status: type: integer headers: type: object additionalProperties: type: string body: type: string parameters: type: array items: type: string # Shortcut to require all props additionalProperties: false minProperties: 3 main: - map: prompt: - role: system content: |- From the screenshot below, can you identify if the page has {{_}} for the user? Write your answer in the following yaml format: found: true|false value: |null Make sure to end your answer in the above format only. Please do not include any other information or explanation after it. - role: user content: - type: image_url image_url: url: "data:image/png;base64,{{inputs[0].screenshot_base64}}" detail: high over: _["parameters"] reduce: >- results + [ load_yaml(_["choices"][0]["message"].content.strip()) ] - evaluate: result: >- [ {"value": result["value"], "network_request": request} for request in inputs[0]["network_requests"] for result in _ if result["found"] and result["value"] in request["response"]["body"] ] - if: len(_["result"]) > 0 then: log: list(zip(_, inputs[0]["network_requests"])) else: error: "Could not find the selector in any of the network requests" ================================================ FILE: src/agents-api/tests/sample_tasks/integration_example.yaml ================================================ name: Simple multi step task input_schema: type: object properties: topics: type: array items: type: string tools: - type: function function: name: generate_questions description: Generate a list of questions for a given topic parameters: type: object properties: topic: type: string description: The topic to generate questions for - type: integration name: duckduckgo_search integration: provider: duckduckgo setup: api_key: arguments: language: en-US main: - foreach: in: _["topics"] do: prompt: - role: system content: |- Generate a list of 10 questions for the topic {{_}} as valid yaml. unwrap: true - tool: duckduckgo_search arguments: query: "'\n'.join(_)" ================================================ FILE: src/agents-api/tests/sample_tasks/reclaim-example.yaml ================================================ name: Reclaim Example description: This is an example of a reclaim task. input_schema: type: object properties: screenshot_base64: type: string parameter_names: type: array items: type: string main: - over: _.parameter_names parallelism: 10 map: prompt: - role: system content: |- You are "{{agent.name}}" -- {{agent.description}}. # Instructions: {% for instruction in agent.instructions %} {{loop.index}}. {{instruction}} {% endfor %} # Task: - The user will provide you with a screenshot that contains some data that needs to be extracted. - The user will also provide you with the name of the parameter you need to extract from the screenshot. - You should analyze the screenshot carefully and locate the target data (e.g., username, ID, rating) as described in the provider details. - Pay attention to the format of the data you are extracting; for example, Steam IDs are 17-digit numbers. - If you are looking for an ID, it will usually be near labels like 'ID:', or similar text within the screenshot. # Guidelines: - Think step by step before providing a response. - Your final response should be a JSON object with the structure: ```json { "": "VALUE", "additional_data": {"ADDITIONAL_INFO": "(IF NEEDED)"} } ``` - If the parameter is not found, respond with: ```json { "": null, "error": "ERROR_MESSAGE" } ``` - The final json object you respond with should be within ```json {}``` - role: user content: - type: text text: |- In the screenshot attached, find the parameter `{{_}}` and extract it according to the instructions. - type: image_url image_url: url: 'data:image/png;base64,{{inputs[0].screenshot_base64}}' - evaluate: results: "[result.choices[0].message.content for result in _]" - foreach: in: _.results do: evaluate: parsed_result: load_json(_.split('```json')[1].split('```')[0]) ================================================ FILE: src/agents-api/tests/sample_tasks/screenshot.base64 ================================================ iVBORw0KGgoAAAANSUhEUgAACfIAAAR3CAYAAAC2FwdZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAP+lSURBVHhe7N0HYBNl/wfwb9qmu3RRRtmrbAEBZSouFEEBxYGooOLAjVvc++968XXhK6jgAgEFBcRXfBVk7z2kbGgpbemiu0n6v9+TS5ukSZuWdADfD565e+5yucy79L75PYbDCUnFICIiIiIiIiIiIiIiIiIiIq8q5tn4s0axqyfTrs0632D7r2R5i8UCszZuNlsQHRmOBtERqp2IiMiZj35JRERERERERERERERERERERJ5wE+KTdluITy4t2qhMxjaMYYiPiIjKxSAfERERERERERERERERERERkRu2YF4J52m7EJ+NNcRXDJPFgojwUISHBetziIiIXGOQj4iIiIiIiIiIiIiIiIiIiMiFMiE+J2q2nuOzkevIICG+0OAgNIyO1OcQERG5xyAfERERERERERERERERERERkSfsgn32IT5b4M92aSk2aO0GNG4QpaaJiIgqwiAfERERERERERERERERERERkZPyqvHZ5rkK8QmTxYzIiDD4+frqLUREROVjkI+IiIiIiIiIiIiIiIiIiIioIg7BPmspvrIhPgMs2qgE/KLDw6xNREREHmCQj4iIiIiIiIiIiIiIiIiIiKg8diE+NWrN8Sn2lfiE2WJGYGAAfFmNj4iIKoFBPiIiIiIiIiIiIiIiIiIiIiI7zuE8V8ouI9X4LNpQjLDgQL2NiIjIMwzyEREREREREREREREREREREXnAVo3POmIf5jOgWPtnUPOAoMAAazMREZGHGOQjIiIiIiIiIiIiIiIiIiIi0pWptOc8XQ6zxaIu/fzYrS4REVUOg3xEREREREREREREREREREREFVABP4O1IF/JtKJX41NjWrulGH6+DPIREVHlMMhHRERERERERERERERERERE5IpDNT5rhK9MxT6dxWJRIT7h48M4BhERVQ73HEREREREREREREREREREREQeKK8an5U2XTpBRETkMQb5iIiIiIiIiIiIiIiIiIiIiDTuqu3ZutUtvxqfRZ8iIiKqPAb5iIiIiIiIiIiIiIiIiIiIiMrlqsxe2Wp8Fm26LpPAYUFBoRpknIiI6g7D4YSkur0XISIiIiIiIiIiIiIiIiIiOgO5Kd5GdZhDxT27cVWQT6/IV7qMNcgnM1W7pRhmbdpstqBzXCt9mdpTVFSEvPx85GtDYWGhNm2y23Yrg3anjEY/+Pv7IzAwEEHaYDQa9blERFSTKhXky80r0D7kC1Cgfbj7+fggv6BQn1M9AgOMMGk7ugBtpxEcFKDtMAL0OUREREREREREREREREQkavocHhF5ToW86IxiH3RzGIfBWnlPD+1ZWYN8xcXWbnWl2cfPT2Ud+p3fRV+mZkmVvYyMTJzKzobZbIbB1we+Af4wadtp1rZThgJLIQw+vgg0+sOgLR/kHwCDyYLCnAJ1P3x9fREWGoqIiHD4aPsVIiKqGR4H+U5mnJJPfARoH/D+Ko1dMwnswsIiFGpfOuQLh+wgoiLC9Dl1T3JKKg4eOIATySk4kXRCm07WdtABiGnQAI0aytAI7dvHIYCBRCIiIiIiIiIiIiIiIvICOYcnoQs5f+fr4wM/XwYuiOoSBvnOPI5BPtulNmIwwKA32JaR/0u4T8JzUo1PdaurLSehv24d26plaopsU2ZWlgrxqe0I9EVuoQkBIWHIy8vT9g9+Wqt0pWuB0V+KKplVpb6Q4BAU5OXC388Ai6kIPuZi5GRkITggDEGBQSrMF16vnqrcR0RE1cujIF9KWiYC/P1RLzRIb6kdWdm5KthXPypcb6l927Ztx/oNG9RlQkKi3lq+zp07oXv3bujbpw8aNWqotxIRERERERERERERERF5Ts7h+fv5ItDfCB9fH/gYfGBg5SSiusWWBKMzgn2IT9iCmKpZcmy2AJ/eIPOdg3wyy6L9r0tca7VsTTh1KhvpGRkoMptR5GvByZxMrdVP21AfbN68HQUFBcjJydGWy4Sfnw8aNmyIps2boWWLlqo4kYTALeZCFGjLbN+2FSknkhATUx8X9LwA/r6B8PPxRVRkJEJDQ6w3SERE1aLCIJ/8ike+AISFBusttUvCfCaTudYr8+3auRvTv/4GBw4c0FsqTyoMXnbZpbjpxhtUip2IiIiIiIiIiIiIiIjIE3IOz8/HgKAAf1VZiZWSiOomPfdFZwjnIF9pcE/7nx7kK13GGuSTNovZDIu+jMw3mS3o0r5mgnwS0Es+eRL5hmIkZ6UjwD8Aebl5CAgIxh9//Ilvv5mpCiZJ2LDIVADJe4eGhiJYKvEVFKJpbGO0bt0CI64djtTkJBw9cgTR0RHo1KkDwqOikWPwR5ifH4JNZjSIjkJICMN8RETVpdwgX25+AfLyChAdWU9vqRtS0zK1nUoggmuhi9qTqWmY8p/PsGXLNr3l9BmNRowYfi1uuukGvYWIiIiIiIiIiIiIiIjINTmHl5tboHrT8vc36q1EVBeVZL7ojOAQ5LMbl1HJS8t810E+i6rCJ0E+CcyZLcU1EuSTrnRPnkxDYYAPsooKUFhQAEuhBSeT0/Df//6Bv5etgNlcjHxtvyEMBm1bi80wmUzw8TNCariGBAfBT8J92uXAAQPQqk0rdOzUAQ0a1UeBxYzcYh8YfP0QHWCEMScf0VFRqqtdIiLyvnJra0uIL6AOHvwHBvirbatp23fswONPPuXVEJ8oKirCnLk/4uWXX0NOdo7eSkRERERERERERERERFSWnCfzN/rCaPTTW4iIqMYZ1H+lHCaqn4T4UtPSkGYowonsLOTm58NsAfLzCnHo0GFtX5EPk8kCs1mW9lHjMuTl5qMgvxBmqdJnMiP3VI425CE9NR1r16xF69atERlTH3myvLZCP0sBfEy5SM/JRLZRCi+lq9smIiLvKzfIV1Bk0r4E1L0vALJNhdq21aSFixbjlVdeR3Z2tt7ifTt27sSTTz+DhGOJegsRERERERERERERERGRIzmHJyE+dqdLRFT9VAU+7ePWoVqfxjZt315Tn8p5eXmqEl8GTMjMzUFBQQEKCwtVNUBTUREy0jKRqHIH2rZZimE2mWEqLEJBnrZcfpHqCrjYrM01WdT8YrMF5kITUlNTsWzpMqj+d319YDZYEOBjga85H8WFucjJO4UcYzFOpqWpbTiTZWfnYOas2XjmuReRnp6htxIR1a5yg3y+PoY6WY5btkm2raasXbMO06fP0KeqV3JyCl5/401W5iMiIiIiIiIiIiIiIiKX5DxZgL+/PkVERDWv9oLU0uPfieQUZBlMyCrIlageDNp+QQYJFUqQb9v2rUhMTEBOdjays0/Bx2CAxWJWAwwWFQSX8cKiQuTn5iE3KxvpaWkoyMvHn3/9ifj4vSi0mGAw+qFIgn4SLTH4qop/GTk5KAwMUNsg23KmOpGcjK+//V57nFhoiYjqjvIr8hXU3Q/d/BraNqmO9++PPtanakZKairen/zvMon+2iTbUlhYhMKCQsdBa6tL20lERERERERERERERHS2k3N4PjVY9IKI6Nzm/vNWzpUXWyz6lFV1nz5PSUmFyd8HyTlZyM7JQX5BPkxSYU9mGoqRmZmBI4cPwWQqVKG+oqICZJ86hfz8PFgsJvj5+SIwMABS1NVUUIj8vDxtyEFubjayMtORlHQcqWknYS42IbegAAXFRpgRCLMhAEUWAwqLzEhMP4kCH+u2EBGR95Qb5DvXSZ/x//f2O6oErb24uDi88tJLGH/XnWjZsoXeWnl9+/bBk088ptYVEBCgt1pt27YNP/00X5+qHSaTCZkZWSpYePx4kiqjm3rypOOgz5NlsjKz1HWIiIiIiIiIiIiIiIiIiIjOFRY9vVfdRXCkO9j8oiIkF+TCz88P9erVg9EYgCKTGbl5BcgrKMS+A/thMhfBVFAAXxRrA2D080GA0agNfvA3GGAsNiPQx6JdFiHAUoQgXwOCtfkFBfnIKypEaL0w5OfnwyjVX/0CkQ8/5JmKUSSZRe36fr6+SMvPQV5hgdqmqpDueT/97HMMvfY6tGzbEf0vugwffvypKia0YeMm1SbTO3bsxC233YFJz7+ktkkyCb/993fVJstcesUQvD/5Q7U+m6PHEvDe5H87rPu9f32AjAxrF7qy3ssGX43de/7B38tXokfvvhgybAT2Hzio5svtzP1pPm665XZ1/W49++DhR59Q22J7jmUZ2Sa53s5du/HJlM/VcrLt7rZ/1+49ankZ37dvPx54eCJuv2M8u/YlohK+Ex9/4mV9vIzMUzkIrxeiT9UtNbFtc3/8CevWr9enSg0bNhQDBvRD27ZtMHjwFWjUsCHitQ9Z6QNeAnnt27dH+7h26N6jO1q3boX60dGqPT09XV2/Y4cOeOrJxzH06iFo2rQJGjSIwd698Th+/LiabyMf6IMuGYSQkGC9pWbIjic7OxvpGZn4/b+/4cc5czB79ix8MfVzzJn9Q5lh9epV2LF9B06dykJMw0Yq5R/g7xhMJCIiIiIiIiIiIiIiIu+oy+fwiIjOSmWK8pU2qKp8MqI3Sc5LphvUj7Q2eIncjnQHe8rPggKzCcFBIbCYi1XYzsfPCB/tstBsxt/Ll2PH1q0w+hpgKSpEgDFA2zQ/GHx8VIgvCBYgLxPhfvno1rwx4mLqa+O+iGvXBjmmfBQH++OSwZcjKCAQIf6B2jqLtGuYUOxj0W7HB77+frAYilFoMqlwYHFBEerVC1Pd9XpKAnMSjJv74zy0bNECN984ShVRKiwqQp8LeyM5JQWz5/6EZk2b4q9lf2PZ3yvQtUtn9O/XF1/N+Aavv/k2evfqiWFXX6XyGjN/mIN9+/djQP++CAwMxIyvv8Wq1Wtx6SUX46KBA1S3w9/N/AFmswUXausvyM9Ho0aNcOToMcQ2boTbbr0FPXp0w3ldO6v78eb/vauCf7GNG6ttk2WW/O8v/DT/F7Rr21blQCRQKNuVlHQCedr6Pvp4CgoKCnDjDder++hq+887ryt+X/IHQkNCsXbdeiz8dTFatGiOIVcORlBQoLoeEZ3bDIcTktxGwo8kJKN5kwb6VN1S3dsmief7H3wYRU7V+MQLzz2Hbt276lNWkgpPOp6E5i2a6S2uHTp02GUVv6+/+Ra//LJQnyo1UNupPPLwg/pU9ZP7ISl0qbT32aefYOPGDfocz/S+4ALcf/9DiIiK0L5AhiMgwF+fQ0RERERERERERERERN5wOufJTp3KxsHDR5GSehIn09JRLzQUDRrUR4tmTREd7d3QCRFZQ1105nCoqKePqwvJqJVMWxtUfE8bt5gt1op8+jJmi9amXXZp31ot7y0ZmZlIlW5zTdkICQqGwWyA2WSGj9GoKuMVyULa7X7/5TeY/8P3CDUYEOxnRERYNHx8/ZGTnYOslES0bhKN7h1boX64L5pFN0TGiSwUmHxgqReB+OwsLF67Fo8+8yx69e4NX/igyGBGQVGh6r7Xx9cX/v7+MGi34yPV+YpMaBEcjujICESEh8sWVKigsBDvvf8Bpn7xFV56YRJuGzNaVRe0JxXtRt00BjExMXjisUcwYvg1CNBuV8JvDz7yOCY9/YRqk9CdPB/TvpyON956B99Mn4aBA/qroKAUVZLrCKnWJ8HBvPw8fDj5fTRtEquWefDhidpt1Me///UeIrX7IH6YPRdPT3pBbdez2u0EB1sLL61Zux6PP/kMunTuhHf+73VVzOnV19/CzwsWol/fPnhh0jNo3tyaF3G3/bbbTE5OUeHBe8bfUbJ+orPRN7N+QvNmTXBx/wv1FqqI17rWTU45iZVr1p/WIOuoK2bOmu0yxCd8/aT4rCN/f2OFIT7hriteg8H1U7F8+QocPnREn6p++Xn52LRpIx6f+EilQ3xi/bp1eOLxR7F96zYU5BforUTVr7CgCH8sXa4uiYiIiIiIiIiIiIiorAOHjuDLb37Ab0v+wsbN23Do8FFs27kbf/y1XGufhb9XrIHJZNaXPvulpqbh9//9je9nz8M7kz91O8h8WS5FW56Izl4OIT433C5jV42vukgQOyEnEyknTyIhMREJxxNxMiMdeYX5qgKgdHcr1eiaxsYiNCAQEaHBOK9DW/Tv1RVRQT5oFOqL64dchBuvHoTeHZqheWQgfApOIjy4GBFhfggwAmFBgfDV1lNksqDYJwC+gcHaOoMQHBKCEG2Q9fv4+KhBHov8wgJkFOWrbfNUSkqqtg/ajCuvuBzXjbi2TIjP3vndu+GqwZeXBPI2bNysXT8FE594Gq3adVLd18qlhPjEyZPWz2kJ8W3atAUff/of3DPhQdxw0xisXLUaebl5qmqeOzJvx85dKoAnlfXsQ3bdzuuiem7ctGWrquRnk5OTi+tHDi8J8dlz3n6bZs2aquswxEdnMwntbtyyXYX5Fi9ZqrdSRbwW5Fu1dgNWrl5/WsPqtRv1tdWu3Jwc/Pnnn/pUWckpyfqY9yQnu1/nosW/6WPVS6rxZedk439LliArK0tvtZKdta0UruyUZVpIm23c5qR24PDb4l/VumSd1S5jGd6+4WbM26tPU6nsRBw8lqNPVIL+mI56fRmsHULXfeu0A7FNm7djvXZJRERERERERERERESO5Dzc3HkLVUihR7euGDVyGB6ecBfG3XoTrrj0ItUt4pr1m/D1zDk1c36nlkmI77//W4aY+lG4/tqheGri/W4HmS/LLdGWZ5jPTtpmTJs8E2v5kBBVu8LCQhQVFcEnJED7vK4Ho9EIX38jzMUWmM1mWFCszuMbLMWoF6C152SiXfMmGHrFILRq2hDNG0WjaYNoRIeGwF9btn5kGGKiwhAaGoSGTRogLLoegrXx+tFRCDIGICamAQKDg2E2GFR1QanEJ1342rIBcllssGYHjqemqG2TbfSE7IckUBet3ZZUtStPhw7t1f21MZtN6vK1V17EzG9nlBl69eqJ3NxcvP7G/2H8vROwbft29O7ZE08+PhHdu52nrlseCSfK4ymPg3PILigoCE1iG6sgoX0YsH1cO7Rt21afcuS8/Tbt28ehfv1ofYro7CQB1iceukdd/vjLYnXcRRXzWpCv34W90L9v79Ma+l7YU19b7dqwYZM+5pqPm+p5p8NodN8F7bp16/Wx6pWdnY0Vy5dj1aqVeouVpOonT56M22+/XQX3Jk6ciLfeeku1Dx48GJ9++mmZnZisQ9Yl6/RU+tK3MOqGGTjb8nh7p3snEJe2fibembwY8fp0xQ5h4VOP4cmJ9531Ice8/Hys37gZ4fXCsE67zKtMNUj1JdP1L+zUMH0zbN8/rc9B2WWmrXd6dvctLn8+EREREREREREREVENOnIsActXrUVoaChuvek6XHHpQLRu2RyBgQFoEBONHt264M7bbkb387qogNvC3/7Qr1k18b84/h297FCZ8x3VY9PWHejUoZ267wGB7s/TCZkvy3XUlt+sXY+IqKbl5uXB4ueDnMICa+Edox/yiwpxKicHJ5KTtc/uVBVgMxcVICc1ES1jIhAdbERK4hFsWLtKW96I8AYNkZCWhcMpWViyfAuyzAHwi2iEQ2nZ2Lj3IJau3YhtO3bDqK2/cf1opKUmIScvCzn5eWrd+QUFKrxnDPDXLg2qkl5ovXpIzcxU2yLbWBnpGRkoLCo/OO7r61NScMhejLZ9fftcUGaQLnM3btqMb76biVtvGY1PP/oAd4+/A30uvEAF1j2VejJN3Wd7edr9S0g8jpYtWqjqhDYqQOliG4W77fct5zpEZ5OmTRrj8Yfuhr/2GTRn/q8M83nAa4k0Ocjv36f3aQ2yjrpg9bq1+lhZvXv3xKBBF+lT3nPv3XchIsLa57qz7OxT2Llztz5VfUwmE5b8Xrb6nyTnJVV+33334aabbsLRo0fRp08fPP/88zh16hT27dvnMl0v65J1kjekI35nOqIG9EE7vaViEWjQMhgI7oYmDfSms9SGTdtUmeqbR41Qlxs3bdXneCCqB8a7+HXdUxOHQH430XZAD0RZl7SK7Ftm+fG9I/WZethvQQYuHlu6nqgVMxnmIyIiIiIiIiIiIqJaUVBQiAWL/1CBgRHDrkRsbCN9jiOj0Q+DL7sIrVo2x779B3Hw0FF9TuW1u9b+7+jWv7dHDRjt0Ob5+Y7qkZp6Ep3ax+lTnpHlU7TrucUKdUTntJJYVjXks3JzcmHy91UV7CRIJ9X4AoICERYRjtDweoiIjIS/vz9MBfkI9wF6tG8Df0sBokKDEa7NN/j5I/5IEqKatUeDNt1RHN4Ef23cjzl/rMPavYk45ROC8NgWgF8gmjdphsTDh1CQl4283FPIyspUvfHla+v20fYVEtjLz89HTm4Osk6dUu2ZEvbTttETjRs1ROdOnfD38hX43//+gsVi0edUrGOHDuryx3k/a5/HqWpcSBeeq9asVZXybN3rSmEiWwXBf/bGY7+2b3PFbLbAUmzdBrlOt/O6qnzE7Dk/OoT5tm7bgRUrVqFTpw6Ibex6X0p0rti2cw/umzgJ4x96usLhzfc/KQntSphvy/Zdapxc835pubPA+nUb9LGybhg1Sh/zroDAAFx99RB9qqyNm8qvEni6LNrOSUJ3ydoOyZnsON944w3MmjULjz32mNp5PfPMM7j00ksxcuRIvPvuuy4De7IuaZfys56IHPQs5s4Zi8p9Zar74sbNwtznL0Zp1KsK0g5he3okurapzFoicMFTX2LujCdwgeuM6BnJYinGgUNHsGnLdvz19yrMX/hfbNi4Bed376odhIapX8St16alfeny1Wo5Wd7T16FN/C+LsS+yLwa5roLsxkEsXZGOtteMxoUl6b9WuO6aVkhbsabGfl349/61uH3mRKw/uk1vISIiIiIiIiIiIqJz1T/x+5GTnYMe3bsgtnFDvdW9IVdcoi537N6jLs9WxxKPV1iJz5ksL9WYiOjcU9u10ySoll9sKqn+ZvD1gX9QEGD0RXBoCAK1camQFxYciqYN6sO3qAAx9UJQlHsKhw/sx+q1q5GZk4Ok1HRs33sQqRlFKDQFI98chOLASITENMa2XfsQ4B+s1vO/Jb+jYaP6iIgKQ3hkPe3zL1B7EAwq4JaWkY7cvFz4GY2qS9/cfGu1QNlGT0hvfzeMGomGDRpg4hNP49axd+HDjz/Fm2+/qwYJCbrTv18f3DZmNJb88Sduvf1OvPevD9R1ZXzhwl/VOeF27dqiSWwspn/9Ld546x28+/5kfPDhx/oaSkVGRKBBgxisXLUaL7z0Kib/+2McOnwYl19+KYYNHaKq+o298x61/knPv4R7738IAQH+GHvbGISHh+trITp3VTKCocgPR6SnxZpyIjlFhQely2x3ZN5Pv/yG40nJekvtYpDPSXq6+6pZskNp3bqVPuV93c9z3yd7cnL1vmCkz3qR4eL+y4HAsGHDsGHDBsyYMUNV5uvWrZsK9/Xq1QvXXXedvqQj27qKiliV73TFr1iNtDZ97MJh564du//B3HkL8cdfy7E3fj/MJjPO73EeLujZXc2/oGcPNW02mbBn7z61nCy/+599ar5nDmL7/rLV+E4e117TURGOFfrs7duDfYhEE+cF2nZAW1lnZTahilYcXI/Jy6chrzAP4QE1twMkIiIiIiIiIiIiorrJVkGuWWxjdVmR0NAQREVGYu++gygsLL/Lw7PbQfw0+VP8VAN/2yciKo+E02QwWSyqx7wcqRLn4wMfo7VCn3RrK1XxpMiOdP8aYAxAWFAomjRqhOAAI5rHxsCSm4XM5GNY/sev+PXH7/DPltVoFBoMf+06/1u8ED//+CMSjx3ButWrcepkBoYOvUYFBfPMZvj4+Wm3Z1Dd+UpuJ0hrDwkNRWBQoDonW6xtl9Szs22nJy68oDdmfDUNo2++EYcPH8G/PvgIK1euRtMmTbS7Zq2i54pkNp59+gm8+PyzKnD48af/wQ+zf0TrVi1x65jR6vHo1LEDXnzhWbRq2QIzf5iN5OQUvPDcM2jTxjHrERUViUceegC9e/XEr4uleMwm7W76IDoqCu+89Tpee+VFlaOQbVv29wqMum6E2mbZdqJz3XmdO+A/H7yJaR+9XeEw8f67VIDPz88Xj064E61aNNPXUv2WrliruvP9+PMZLsN80vaRNu/XJX9h+ep1emvtMhxOSHL7SXokIRnNPeyTU8ogJp2Qam5ViFwqBjRqGKP6RfZEZbatMg4fPorHn3hSn3LUtXNnvPTyC/qU98mO9ebRt+pTjuLi4vDmG6/qU95XWFCI1JMnccP1I/WWUpLq//LLL9G6dWvcc889uP7663HttdfinXfewWptR56UlOS23O2cH+ehfnQ0/AMq/kVT+tK3cPcnsXhTr8rnPF1i7wyMei4RE6c+i/5SaS5jGd6+ewri3piFkXYLWq9f2sVq7wc+w9ODbKXp4jHvBu251K4zKLG85SpiXc93+pQy9DXMHVdaEH7v9Jsx6dgETK1yVT75orgYuOZ+XFep6nAZWPn6fZi8tVvJY1XymDhto6295L7rj+n6bs7bnYG9C7/G7PnrsSWzCBHhLdB92FiMGdHJuoz99Z5qh13TP8W3S/YhxRiO7oNuwR3jLkaTyv24rQypHvnTgsXqvXrt0CvRrq37cG38voP4ZdF/0ULbEVx3zRD4+HqWXZbucaetiMBIp9L+8b98inkYgqeudXOb+xbr3eraV+QT1ucwbcBoh254vW3VoQ14d+nn8DUY8OLgR3Fe4476HCIiIiIiIiIiIiI6m1TmPNmP83/F/oOHcOdto1G/vmd/o5634DfE7zuAO2+/GfWjT7fKgIu/kbv9e7r+t/i0vhg/rgdO2v4uPyAD02asRkmPtZHW+Y5Xtd5Oae6uVZm/89t7Z/Knqptft2QbVzQqczuur5eOtdNnYplTvQzpTrj0vIDz9jnPd6fs9do6nDOq+H5bz3vYb1yk42MvXQLP2IOuY68CfrHeD/ttK3t9/TZKrjcaUSu052q/PruCx/5cU5WKRVQ7yoTQ9Gm5MBis80uWsTaoaTl/KZXppGqf9C4m43LZpX1r67KnSXIER44eg6lROBJSk5FbkA+Dny8KiySUYkDOqWwYffzgrw0F6RnwPXQQiXu3o1FUMAzFRcjKycWmHXsQHtUIRw4exokjh9Dv/O7o3KINEtLS8fOyv5BeaMapPBPqhcfgggEX4c7HH0Z+eAAswf4wn8pFUWERjAFGGP39VYDOIPEAkxkJh48g/WQaOrVugyYBoWjerKmaT0QkNm3dgf98+R0MPgYV6Gvfro0+p2bk5eXjvY+n4vCRY+jaqT0evGdsSZfbKsT3n+nYsXuvChc+9sB4BAUFqnm1yWsV+f77x1LMmjNfG36u4jAfv/9vqb622iMJdneCQ0L0seohO7TgYNe3kXbS+mup2iAhvQceeAAbN27E559/jr///htTp07Fk08+icGDB7sN8dUmCc9ZQ4CzMFeGqROAT+7D20sz9CWs9s5+C59jgnUZGd4YgvUulnMnfelcFQYsub52O70XveDx9T2Rtn5NFbp4rQ4pWPn6Q5g0YwuMF1yNccOHY1BnYMt3r+LJyeuRoy+lFMVj/stP44fklhg6tB+6GzOxZckUvPTOMpxubUkJ41137dVo1aoFfl70X/yz1/VP4Xbt1rZh4W8q6CfLexriky+80j1u1IA+Tl8w05EmfyHYr31x176kW4eZWFvyVwONdvAbpS2XYN8m0jJK/7hQTdYd2VwS4pt02YMM8RERERERERERERGREhoarC6zsrPVpSdycnLVZbB021gdVE826di+3yn5lrYZy5x7zElbg2m/ANdNvF8F6J6aOARt01dj2vTNpX97l0CZHha0LnM/RrY5iHlaW7y+SOWkY+2Kg4jq3NJ9Lz0OInHhOO12x/bVlpeQnHUbHIKLTtsny2LFTLzzy0HrMi6VhiBLrneNXbEBj+73QSzd2QHjbddXy6Rj2Yyyj832X34DrrUuY9t2CVZOW4GS+2S9vpqlk3V9iu2dbPNH4+JIbRvsnx+ic1BxlQsglWXSq0ilZ51CUGAwQkLC4Ovrh5DgEARr0/UjoxGiXeaeykHyiRQkZWbDPywCJosBvsXFaFAvGNdc0h+togPRp2Mz3HrNZbiwYys0CDKgS4sYXHJ+Z/Tp3BZ9usahT/dOuG741fD189X2G3nIOJULswQVtW2QLm8lACPBwpMnTyI/Lw+ZmZkICg6Cj3S9q7FtKxGdW/YdOITf/nDMfJ3KzlEhPslqPDqh5kN8QoJ5Tzx0N1o2b4rtu/7Bv6d8pQJ88jkm4xLik3myTF0I8QmvBfnatW6F5s2aoFmz2CoNct22raqv21pP5UoZWjekb/fqlpvrEIcqkZmVpY/VDvklwSeffIL4+Hi89tpr2LVrFxYvXoyuXbvqS9QhGcswbxEw5g27Sn4RF+OeB7ph/Sc/Y6/eJNY3HeVYfS9uLKa6WM6dyEHPOlQBlNsZOVRb7yGpTukN6YjfmV6JL4rVJ33pNEzeGoERL/0HT98zGsNuHY1bJ76Ie3prD/mquVh3TF9Q7FoG3PgZPnx+PIaNexjPT30NY2K15bZOw0pPHtgK+PgYMPKaq9C2TSv8vOj3Mt03S4XQhb8tQfu4Nrjm6sFqeY+p7nFb4eIyv4DTv4TrX1KtX1StX05LyupH9cDF2r5n3wL7gJ/2Zf+XPXL1aiMhvv/7c4r6lY+E+M5vWgffl0RERERERERERERUKyIjwtVlUtIJdVkROSd04oT1Z/nVd0KzFQYNiETaijUOYbK0/XuQps3ral/cID0CFztUxWuF6yQwl74aS/W/z8evWI20yL64zu5v++2uHYK2OIhl653Cgp5IO4Tt6a7OFVSFHgq0q3CnRPXAeAnl7V/jWDTAnioUEImubeyu13ZISTU+z+639ng5VRVsN0ACh9q6HW5XW77zVY4VEvctxrz9TtX7NHIb9sUQ5L6VVgiMxIUDtPuVvgfxTPIReYVBnQUEigx+gDEI/v6hCPINRbBPMIKL/REdGI4gix9OHk3CyeSTyAn0Q5eBA7TlfYFCE/xycmBOSUSEjwlNYqIRFBqOkwVmHMnLQ3JuLtq1aYULO7bDjZcPwCUXdIIfcmA0mBAdEoro4HBEBIWgSaMGiIqMQEFRPnJzcmHKL0Bedi6KTGb4BAfhVLH1fK1tW4no3LFn7368//FUzFvomN0ICw3BkMGX4PEH70GHuJoP8dkEBUqY7x5VdW/XP/Gqm90PpnypxqVN5km33HWF14J8Hdq3xc2jhmP0qBFVGuS6so7aJn2qu5NdzWG6nGzXIT5Rbb948tCDDz6Ijz76CO+++y52796NN998E/PmzcOkSZP0JeqO9C2rVNeugxz649W+NsTGav9PRIpdsbwx/coW9XZcTrrOvRmj7IfXl8lXGTvShW3p/EmLtKZjiU7LVJH6ouj0Ba1WZGhfBqX74RTMf+U2u8fjLryzXuYfRoZ9BjZmFAZ1t6su6d8O/Ye20EaKsDfRO9UKDQYDYqKjEKh96Ep/6vaki25pi46KVMtVRvyug0CbDh6Ve293rfVXZ/tWlP6qzNpmDfhZq/bJr9euQlWjdZuO7cDtMydi+QH1QJex7vBmvPXnFPWrnmcumcAQHxERERERERERERE5kOonvj4+2L5zt/ohfEU2bdkOs8WCDnFtK/039sqIatMBUTiI7SUd7+jFDZx7zHH1N/uoCBVMS0uXszHaOpyr+CkRaBKpLXO88uclVEDOw3MFFSrvXI+7yoQ26n66rp5X6futqgLq5y5UN8VlexiKinTcRnXOJFJ7HBxvwImL++auByMiqhI/P2s3kMWmIpzKykRhfh4MKFaXgQH+yDiZij27duLo4UMwm4vQc0B/tOnaBf5hoSiyFCMjI137vDyJU9lZyCvMl5OpCAoNQ0GxBbmFhTBp660XGoSc3GycyjuFwLBg5JsLUaCtKzcvV9t3FCI7NwencrVxbf/ga/TTtsmIgvxCbStkS3xgNlkr8dm2lYjODf/E78cHU75QAb5xt4wqk90YMXQw2raWrEjtCgwMcKjMJ+FDWyU+mVeXeC3Id7aoFx6mj5V19FiC9uKr+AtOVR06dEQfKytc/7VUbfn222+1HXwGpkyZgpkzZ2LdunX4+OOP0bx5c32JuiPl0FZg6xTcXRI204fnFutLVEY7jLR1m2sbnr+4pLiadOE76ob7sGLAZyXz3xyqz/QC6xfFPo6/fqol1ld+C4x45EW88lLZ4QLJP9rERmhfEx0Z/Z1bTl/qyXQ0iInWDi7N2LBpG7769gf1BwaZbtggBidPVvIboq1kfyfPq4NGN9ZeDelJsO/8WsJ8pZX75FdqGUjQvoM7fwH2RKh/iHZAnYd//f051h7erLdarTuyBW/9NUUbK8aTg+7FBS16WGcQEREREREREREREenCw+uhR7euyMw6hSX/W6Yq7rmTnJqGpSvWqC4VBw3sq7dWk6iW6BoJ7JOwmKhqcQNVtU56y7H9wN42zMSyKlVdkIBcJC6WqnLekJZUUgyg8lrhOltXtfr9KuklyNP7rbrf1doXACNt5y5UF8DOItHEoTHdWrFPD00SUe2R7mxFaIC/9pkeCoPBglOnMmAxF+LY0UPYtXsHDh7aj/oxUbjk0kEI1T73k5KT4RsQiPTsbBgCAxFQLxRmHx+cPJWpwnpmWNC0SRPUCwtDQtIJHElMgtlolFKsiGjcCKHaugK02/INCkCRD5CSmYXDx4/j6PEkJJ9MQ6HZjOzcPPj5+cNo1AY9emLbViI6+0mIb/KnX6h8xu2jr0ffC87X59DpYJDPSf2oaH2sLOkjeffuPfqU923cvEkfKys6unoPkY3+2k5Z07adUxk7XWJiIp5++mk1Ll3rSrBv7ty5SElx34WsbV22dVeWtTJe5cW07AZ0m4Cp9uG7kuFZ9PcoTxaLmIqW2zsDkxZ1w8Spsxy75/Ua/ZdUlQiVVVVRoae/RstFRNNO6Nyl7NAkVF9EFNmCf6VSDu1Sl04B7NOSevIksrNz8dm0r/H3yjWIqR+NpctXq+kc7cAxpdJBPvky7VSy3xv07nqrst64Bq3w/BUPqzLUb/81BRuObVftm7TLd+xCfP1a9lLtRERERERERERERETO+vbppXp/2rl7L2bOnY+srFP6nFIbN2/HNzPnwGwyacsGV/n8juf0Llj371HV5lS3uhVWf3OkfkCvB83aXmP/I3u74drKnWdJW78G+7xZZEFVpzsd2uM0znpfxg+IVMG9adJtrkf3Ox1rf5GiEUO0NsfucCsWiShvPQZEdNokIOcPP5gKzIioF4kG0Q2QmZ6FQwcOY++efQgLqYdevS5AQGAQfIsNqvvbU6dOwS8gCHlFJpjgg+Dweiq4F+jvj2KLGUkJCTiZnKJ93gfALzgE2UUWhMQ0QL6vDwp8DMiHGWY/HxgCAmHW2sxamwkGFGjrKzIVqwpcRmMAiot9AJMFfn5ePBFMRHXakWOJqntaCfEFaJ8pa9Zvwjv//qzCQYJ/h48c09dSc/Ly8/H+x9NwSLvtLp3aq0HGpa2goEBfqm5gkM9JcEgwYssJkC36tSpV3SqWl5eHv/5aqk+VFRfnOmDnLVIaXXasLVu21Fsc1a9fH1dddRVuueUWJCcnqy52FyxYoKr0uSPrknWeXtl1x65wxd5V5T8HKgC4dRV2eZBN+25V2ULkav3dWiJGn66ceOyUrnW9QH1RjOyLQV4MlUXW11/bew8h2ToGFMZj5aLD+oQ7EYjtIo9ICuZ/u6z0ukoK1q1L1Md1u37Gyr12Ub7kZVj4u0y3RY8474Qe5ReDaekZqmx+q5bNcM8dYzDsqsvVpUyny7y0jHJ/WeisMt3qWlnL/Jd/He1L8orKrtdRt9hOKqwn3ee+9cdHmLVlAd7QLk3aAfbDA+5kiI+IiIiIiIiIiIiIyhUUGIDbbxmFhjH1cezYcXz2xTf4ZOoMfDvrJ3wxYyYmf/Q5/rd0ueoaMSQ4SIU/5vy4AAUFhfoaqonqWla61z2IpSvSXXQTq9GDfg7UD+htFeSsXcmWVPY7Lda/+3u1yILePa7L7nP1++FpFcKo3qMxsg30bnOrfr9VaFIfL4/qlcjV409ENc7f3x9B8AMKDchIycSxw8eRcOg4IkKj0KXjeWjZtDWK8s04cSwFR7XP1K3rNiIrLRN52bkoNkGbVwSDxQA/gwHBvkaE+PohLDgYDRo2RFT9GBRYtNuIiET3PgPgFxyKNG0/kJqehqysTKRlZMJS7It69SIRGVEfAQHBOJWVjYK8Ivho7TAVI8xXKvNVdwCciOqKpBMpKswrCgoLsVf73PFkkCp+maey1fVqigrxfTQVBw4dQaf27fDQPWPVIOPS9u6Hn9epMJ/XgnzLV61zKttc+WGFto66oEOHDvpYWRs3bsKGDe4r51XVtC++Ul+K3OncqZM+Vn0kdHfZ5VfAx6fsy6JRo0bo2bMnjh8/jqeeegqpqalo1859LEnWccXgK08vdR/XD2OwFZM/XqZ9vdGpKnj6uDtxwzGxm3a9u2dgr96kZCzDvKVO6b5FL2Ce3ULpS99S6x9zY2n3uW41aIne2vat2FK6zr3TX8B3+vjpsX5RjOrc8jR/peUkrjdGyPFT/Bd4adKH+PbbafjX/dNwMKbiPslbXf0wxsRqD+PWKZg0/i189e1MLJz+IV4f+xDe2ZWjL6VrEYydbzyIf32uL/PkFKwqAtoNH4v+DfRlvKB/n964ffQNGHrV5QgNDVFtcinT0j6w34WVCJJaKyBGNXYXNDyIn35x/DIc/4uUp3csrx//y2KHL7TWZVphZCV/8eesb8ueeOyie2AutmDW5p/V5YMDxuGSttXctQERERERERERERERnRXq1QvDrTdfj74X9kL9+lHIyc5B4vEknExLR5HJhOjoSIy+YSTuHHsLGsTUR1JyCubOX1RykrZ6tELXNsC+FWvK6THnIObZ/31euopdID+gt1XNs1X2W2ytVGfH+W/2Fdq3BstwGkUWXIb2WuG6a1ohbcVMx+3T70fUgKvcV//TlvnJ4T7Zn8vw5H7rVfXsw3iyzhWOy7sT1fsqvVtf53MflXxciei0BQcHoTAjAzs37cLOjbuQdOgEQgPqAYU+qBcUiWD/MBzenwCDyQDfAgtiI2NgyTPDaDCiqMCEYjNgKSiCT5EF+ZmZyEpJRmbaSRw5egSncnNR7B+EEO06WXmFKPbxh0X76C/Wli/KyUVhbj4KcguRpw2yPgkGZqZlISUpFYcPHsXe3fEIMpsREhKsby0Rne0u6NkNN4y4Wo37G4144cmHMO2jtyscPpv8Js7r7D6T5W0S4nvng89U9T0J7j0y4Q5V4VQGGZc2mVeXwny+Ex9/4mV9vIzMUzkIr2cNx1TkyNEEHEtwqspVSU2bxqJFsyb6VPkqs22VVVhUiDVr1upTZa1YuRLdu3fTvtC474a3Mn74YQ5+XfybPlVWYGAg7r33bn2q+vj6+qnbSktLw4ED2rcAO1KF7/fff4dZ2wFLFb5FixZh3759bqudDRlyNS697DJERER43A9+/qEVWLA+DJfd2B3WRzYaHQfH4ODUKfhszlzMliFoLOaOC8TsP0+h77UD0TxQrngYKxdsQPRlo9BRXTEQzS8ahe65/4dJb+jXk2FBDEY/1Udfdxr2zPkL573xGRrMHofHPrIus2B9I0yc+m8M9uRlGNgSA7rn4IP/+6DkNhqNm4XRQXPxv6zeuPailgjSFju5xXHaI2l78NuaHHS9pDeaenwlZ/k4+vdCrDnRqPSx8o1BhwtjkH9gF7bEH0BSkg/i7nkMoxrvwqL1J9DkgmEY0FJbUH9MExvZbbev9nwM7IUmuYlIOLQDa3b8gy0JZjTrfh3uHX0hGtg9F4ktb8KLz56Po7/NxZw1B5Af3BaXjX8KE65t4/ljUAEJ6DXTPjNsAT5n0t60SWN9ygNph7By6zFEdbsIHV1+Yc7A7l8XY8Ga9VipD3u0L/PjJ1yBdnZ3Ku2fJZj3q90yUUPw1Lje+uvu9LSIbIKo4AjVve6EfrdhcNxAfQ4RERERERERERERnUuqep5MCjHIubge3bqg+3ld0KZ1C/Q6vzsG9LsQF/bqoa0zDEY/P7SPa4vDh4/i+IlkJCUlo0NcO+26Ve2BKQO71+xDXvOuOL9J2bME0TF+2vx4pLXpi2vbO5ZZSPvH+nf28Y3X4KPZy61/e996DEEDRuOhS+3OAUS1Q//2fti0YDH+0P8+L0Ny5yG4wsVtCpnfv29vfcoqfsUSJLceiP5uriNcXa9UJBr67cPKFdbb3+3X1nqfXW2fdj+aXHM/xnR1f1vIS8JKh/u0D9Du+/je+uPkwf2Obt8Wfv8sx29/6fOPNMOYm5rhkDyO7Xtbz4lot7Npayoadu/qdF4qCE2790aDFOdzH/pz5e56qt1u/URngTK1Q+wa5Jy5nDWXFjl9LuPS1rC+994APtrt5WRna5/JJ1GYWwCYzCjKL4ApLx/ZGZnwM/ggol448rJPISIsGC0aNkBuagqKtGlfQzHMpiIU+xSr6xjMFkTJeXx/I4zBQcgxWeBfLxJtu/bAgYRkHE1MRkGRGf6+vgg0+MFQCFhMxcjLyUPSsUSkn0jDP1t34rhUBTySAHNRIS7T9iH1o6NdFg06Gy1Y/AfmLfwNPXt0VfvNM4lUIHvz/U/QVjsGiIwI11uJKq9t65YICPDH9l3/YP2mbSqgJz8cqUvkvbpxy3Z069IRD9071iG/JJ9XEkiUrn6lWqDkoTp3qN7eUj1hOJyQ5LbfySPah3TzJl4sn+VF1b1td9x5d7kV8sSdd96Bq4dcqU9VXtrJdHzx5VdYu678SoRDtNu4S7utmpCVeQoJxxMx8eGHtPufpbdWTlRUFD748GPE1I9BvXDP36RSDe/uFf0w9XkPquGdtnjMu+EF4I1ZGFn778My4n/5FPMwBE+dVhW3Q1h4/zOYntINE6c+i/7e6dG2fBnL8PbdU7C+24Qaeh6JiIiIiIiIiIiIiM49NXEOLz+/ALN//EVV5ju/R1dcPqiaflwulelm7EHXsaPLVKbzzvkS16S3sKcm3q9PadR2JOHiiUPgvk8qF9cjqoCbuihUB5UpYqNPy4Xk9lRgz7aMtUFNW8wWWFCsgnwWizatjZstFnRt38a6rJccPZaAg0eP4+DhY9YGbVN8tFv19zciOzsbAQEBKlQTEOiH2Mh6CCrMxfG9O3EgfhuMRgv8jAYYte31LdK2tdgAs68BecU+yCgCopq3Rcsu5yPf4IfEtHSYtdVLASSj0R85uWbsO3IE8doAHx8UZucisNgPvhbJE1owdPBFGH75ADRr6lnRJiHBmilffKtPOZpw163o2b2rPmUl4bPJn3yBcWNGlZlXGyQctHPPXjwy4U4EBUrFG8/JdX/+dYk+ZdX7/PNw7x1j1Ph/vvoO6RmZVVq3J+SxlMdeHufWLZvrrRWT7ZKwljtRkRF49rH7GQ48By1eshQ//rIY9cJC8e5rkzwu9lUTTqSk4u+V63DdNVe63S4J8M1b+LsKIsa19f4xZ2WdG3HoKrji8kv1MSk1Xg/Tv5qKN994DZ3surj98suvcMuY2/HBvz/C6jVrsXPHbm0H6T78l3wiRS3zy8JFeO65F3HPfRMqDPGJIUOu0seqX1i9UERHR+HDjz5B7wsu0Fs917NnL7w/+d/aesLUuioj5dBWoGksw1/aF8Vl+4G2nU7zA+JYPLakaJcxnRBbEyE+IiIiIiIiIiIiIiI6awQGBuCmUcMR164NGsbE6K3eF79iNdIiO6BdDVduaxrbGAX5hfqUvh1ttO3Qp12R5eV6RES1ITgoCI3qRyA0oFgbLAgPNiBYuwz2tyAq3B/1Qg0wFWXDZLDgyInj8A+vhzbdzkOXCy+AITQEebAgt9gEs78BxUYfmA3FyMrJRlBIKBo0bAyLxYCifBMCYIQhtxABeSYEFwENQiPQrklL1PMLxKnkdBUEzM3IQpG2jI8FuKj3eQgJrny3uhJSm/T4Aw7dbsr09O/m4qkX31JhtrOJdPH5f5M/VQHAj959xeE+S8+JdZ0EDW3bLGEtCe4Nv/qKkrZ3Xn2WIb5z1JArBuGm64ahQ1wb1bNiXdIwpr7qAri8cKHMGzV8SJ0I8QkG+dy4+uohJR+WWVlZePW1txAdFY3nJz2D8847T7WLwsJCrFixEu+/PxkzvvkGoaHuK9D5Bxjx1jtv4+sZ3+CfvXv11vL17XMhYhvX3BcCeVPF1K+Pho0a4qmnn8UDDz6Efv0HoGmzZvoSZcm8fv364/4HHsIzk55DgwYN1Doq9QbNWIZ5i4Ax/cr7enSOiOqB8RPvx3Vt9ekqev25L7BFO8jqd8vFqBsfN0REREREREREREREdCaRyk4jhl2Jrp076C1eZituMKAHaroH1vr1o7Hrn9Lzde2uvb/Cyn+yvFyPiKg2REZGqKp7bVo1R0iQL4ICDQgLMSIk2A+h2uBrMCEyIhiSrgsMC8WxlGSY/I1o2akLBgwegvMHXoyGrdvBFBiCXIMPsgpMCAiLQIeu3dG0RSuYikxISzmJguxc+JktaBQVjZh69RDmZ0SjyEhc0rcfooKCUZCVA2OxATCbMOzyAQjXbivCSwEuqRD3zmvPIioyXFWAk/CbrV3Cb3WhGl9V7doTj4TEE7hx5DCHSnty38aOvl6fsgbmnpl4f7VU4yOqLldcMhD3jLvlnOleuzrxEXQjIiICo2++SZ8CDhw4gP979z34a19YXnxhElq2bKHPKXXZpZfoY67JOvv26aNPVUyChHfcMU6fqjkSwAsPr4eoqEhcMfhKTHz8CUz+4EPM+XGey0HmTXziSQy+8kp1HdlJexri2zv9Zoy6QRvunoK4OtrN7ZnqkLEthj7wNh4cwHJ8RERERERERERERERUh0g3tpM/xTszViPqmtMvblAVPbp1we498di8dQcK7SrzuSLzZTlZXq5HRFQbJCAj5+LD6kXC39cffvBFgJ8RBoMP/LTLkOBQBPj7I1IbAootKDKbceREOo6m5cEY3gyhDTvi/EHX4/LRE9Dzmltx4cjbcfENYxHVKg45JjMyszJQbM5DZFggWrZoivDIMFhQCF+/fAT5FaBJVCBGXjkIjSKD4OdThPDwQFwysJcKGHozvCMBNgkFSejteFKy3nrmSzx+AkFBgaxaR0TlMhxOSHLq6L3UkYRkNG/SQJ+qW2pq2556epIK8dncfvttuPaaocjNycX3M2dh46bNMJmKENcuDnfddYcKspXn119/w5dfTdenyjf+rjtx1VWD9anaZdZ23CZtR+8cz5MXj5+vr7bzrjt9XBMREREREREREREREZ3N6vI5vDNJamoaNm/biZTUVBxLOK63ltW0aWPERNdHj/M6o379mq4dSGe6Yrdn46muKXZ+svRpuZA6NjK/ZBlrg5q2mC2woFidS7dYtGlt3GyxoGv7NtZlvUhu7+ixBBTk5eBEwlG1HVIcz+Djo4rt2AruSLBOli0oKEBubi78/f21z7Kman5+fj7Cw8O16xUjOTkFfn5+yMjIRGhImCo25OPji+zsHK0tAyZzEQy+BgQEBcJs9tHmh2DNmvXYvHU77rhtNDp1aIfmzZqq26yMjVu2qy50Jz5wl6pI50y61X3rX59iYN/euGbI5Thw6Agmf/IFxo0ZpYJwtnH7Cn1SwW//wSN49rH7S8Jycr0pX3yLCXfdqm5nweI/8POvS9Q8IaFB+22Q+dL17djRozD50y+Qlp6h2nuff56qlGdjW+6RCXeWVM6T21+/aZvqbla22ZntPgy+dKDL+TayHrn/tnV7uk3C9rjZlpHub+X2fl60pOR+2j8mS/5arrbZtqz9Y1ce5+fHnvNj7Lxe23WlK9YNm7eV3H7b1i3UfZbKhbJ9NrKdZ3IlRqLK8p34+BMv6+Nl5BcWIjQ4SJ+qW2pq27r36IZly5arLnRFfPx+DBw4AOHah8z55/fAsKFX49prhqF//74ICqp4exITErFu/Xp9yj25jVvHjNanap/s6P38rIE9+0HaWBqTiIiIiIiIiIiIiIio5tTlc3hnkmDtMWzTqgW6du6I/n17ux1kviwnyxPRuUnPx5Wya1ABP+1SWrRRNS5tDash+CtBvIDAAOTm5auQV35+Hnx85by9X8kgYTy5fTmPL13xynRRURFOnjyp1iG5BhnPOpWFsLB6ajo0NFRbtw9ycnKQlpaG9PR0FQIUfkZfSQpqn4HB2nJh6rJ1i2bofl5nNGrUUN1mZUmlvS3bd6HvBee7DY5t27EbJpMJvXqcp8Jfa9Zv1m6zkwqj7fonXrXJPCFd8C5dsQYJx0+oQFistl1ixer1yNbu0+WXDFDhxDUbNqtQ2fXXDsG1V1+BowmJWPLXCrUeeTz37juA1es2Yat227KchM26dGqPX379A2azGe3btVbrleVSUk+iT+8eMGr3X8J3O3btxVOP3KvaXJH7KeuQkNuKNRtKbtOZhBzz8wtK1u3pNklA7633P8WlF/XFkw/fq+6fhOgkMCnrsT3W8rjJ4/LX8tUqdHjfnWNwxaUD1eMtt92zR1e1fHlk+2QdLZo1Kbl9eQ7e/+hz/BN/AK8+95jaTtkG2a4fflqIDnFt1O3brrt81bqS25f78/ufy7Fh83b1nLwy6TH1HMnr/cdffiu5LtG5oNwEltlSjMLCIn2q7pBtkiR7TYipXx8vPP+sPgXk5ubghRdfxpYt1lRwZRl8nPfwZXXu1AmPPPygPkVERERERERERERERERUqq6ewyMiouoXGBCABjH14RsQhLDwcPj6Wovv2CrySYhPAnwSuJOQngT5oqKiEBYWhqSkJBw5cgSRkZEqBLZ7924kJiYiMzMTWVlZqsCRrCsiIgL169dHcFAwjEZ/+KggX5A27ou2bVqid68eahtkW2qahN86d4hT1fcklCYkGCjhRgnxSRe2QoJlUslOlpXrSBBMKtjZh+ekC195vGzrETJfwmW24JgEB7t0ilPrknU6s4X43FUXtCfV6yY9/gDytG198oU38dSLbznctjuebJNU15M2+wp5UslOwnKuSLut0p2s/3S7M5ZKemnpmWWq+t0++no0iW2ots+eVBS03b7t/shjcePIYSXP0YC+vVV3xDt371XTROeCcoN8AUY/FBaZ9Km6Q7bJX9u2mtKmTWu88vJLagcnUlJS8Pobb+L2sXfiyacn4cWXXsV99z2A3JwcNb88xRUEELt07oRnnn5SnyIiIiIiIiIiIiIiIiJyVFfP4RERUc0ICQlBdHQUQsIiYfQPUGE0i8WiBuk6VyrZySDTknOQYJ+E+Zo1a6bGJcAn2rVrp6rvHTt2TFXiS01N1S7TVSZCqvPVq1cPDWJi0KxJEwRJODAoAP5+voipH622obZ07hjnEMCToFeTxg1VaM8WbpPKbxIsi9Xa7UnVufEPPa2GN9//RK3DPkwnobPGjRy7r5cKf7IuWac96UbW0xCfjSz30buvlAT6XnzjX6pqXXkq2ibZfgk22ioR2nO+/yIwMEA9hvZs4Tv7x6IypJvcNq2aO4T4hITynIOXwlZN0Ua2XUJ7ztcnOteUG+QL0j6E8wusXcrWJbJNwdobuCZ17twRb77+mtpR2Uhf8gcPHMCuXbuQqpehrYi52KKPlTVgQH+8/PKLCGJZbiIiIiIiIiIiIiIiInKjrp7DIyKimhMRHo7o+tEIj4xBTINGKrBn61pXqu3ZAn3Z2dk4deoUMjIy1HyptNewYUMV4IuPj0fz5s3RuHFjGI1GxMbGom3btujcubMalwp9yUkpSE9LR0hQMHy1fzHR9RFul5uoDrYQnnPYy0ZCbdFRESrAZ6u8J8tKOO1kWoaqKmcLx9kCdjL90JMvqW5e331tEqZ99LYK09mqv1XWvgOHVXewgy8d6HGIz55c553XnlUhvdnzFrqs9ucpCchJKNBVaK8myLZXNQBIRI7KDfIFBwaosqlZ2bl6S+2TbZFtCgr011tqTvMWzfDB5PdwySWD9JbKs2g7TGdSwvbhBx/Ao488pLcQERERERERERERERERuVYXz+EREVHNqxcWhsaNGsLgY0S9epHw9/dXgxQoCg0NVVXrpNvcJUuW4Pfff8fOnTuxefNmbNy4UQX9tm7dilWrVqlqfDExMWrfIiT4J4WNpIpfq1at0LRJM63VV7utRggLC1XLVCfnEJ4zCd9J5TYJ8B08dFR1qyvL2gJ+EiqzrxAnQTMJy0n3re+8+qxXqr5JN77jxtyAn39doirzVYU3urStC2zPBxGdvnKDfCIqIgyFhUV14otA1qlcFBWZ1DbVFtnhPXD/fXjj9VfRs+f5equNQb90z9evtEtg6Vf+upHD8cnHH+KiiwfqrURERERERERERERERETlq0vn8IiIqPYEBQUhtnEj+BoDEBwaAV9fo6qkZzAYVFEhqbZ33XXXYeTIkejWrRt69OiBvn37omvXrlrbCFx11VVo0qQJsrKysH37dtWtrlTnk65zZZCuew0+vmjaJFZV+6tuEuKb/t1cDOzbu9xwmFTgk6p96zdvU93qyrK2QNny1etVmM9dRT8bW0W/qurZvQsm3HXraYX5xOl2KSsBRqnsJ+FFZ67aqoN0jevcfa6wVUx01e0uEZVVYZBP1I8Kh8lkRmpaFrJz8tSXgpoityW3mXIyEyazGdGR1Vui1VPt28fh2WeewoyvpuG+e+/GNdcMRXBIsD7XvbZtWmPY0KsxadIzmDb1M9xyy2gEsytdIiIiIiIiIiIiIiIiqqTaPIdHRER1h1Thk6CdFBPyDwxBWL1oFcCTqnrSva6QinsBAQGqUp8MRUVFMBr9VeBPutyNjo7GgAEDEBkZicCgINQLj4CPr5+2znC1blmmukkY7s33P1Hd1V4z5HK91TWpwBcYGIAdu/5xCOzJeEJiUkmVPmEL+NkHzSQwKF3jnq6e3bti+NVXVBjmk3nO8z0NLVbEVtlv/aZtDrexcct21VYTLr9kAKIiw/HWvz51CPN9PfNHFbi8ceQwvaXqJBT4f5M/VYMtgCn3cfxDT6tLIbf91Itv4T9ffaemic40hsMJScX6eIXy8gu0D7sCFBaZ4OtjQH5B9X4ZCAzwh9ligb/RTyWQg2uhO10iIiIiIiIiIiIiIiKiuqymz+ERkeeKtX90ZpBuaO3ZpouLDTBI53zadMky0iDT2j+L2aIuZRGLBfDxNSAwIAD9e3W1LlvDzGYzMjOzkHXqlLY9FrVfsFhMWrsJRj8/bbO1jdQUFBWoHhGlop+vr5+2/b5aq4/KaEgXu9Jtr4T4bN3tepOErqZ88a0+VUq6q31kwp0qmGZPAm+TP/kC48aMUsE5GwlrSTjv2cfuLwnCSZBLwmQSKrNflwS//j3lS+w7cFhNy21dO+QKtR229UoITqrHOW+DtEuVP9vtuFpO2iTM5+4+2OY7k4p+zvdJ7oNtHZ5uk3B+XHuff54KNkpYcOIDd6lgozyWsozcrn3Xxe4eY1dsj7EEEJ0Dl7L99uFB58fDdt2brhvmcDuu7o/z7dieQ2Fbp+0+2x5H23WkAuC9d4xRyxKdSSoV5CMiIiIiIiIiIiIiIiIiIiLPOGXDqA5zDvLZnjy5sOb2XAT5tEGCfBLlswb5tGltXMJwXdu3sS5bi/Lz85GTk4scu8p87kjFvZDgYISEBNdIF7pUMyTo9sNPCx0CckRUdzHIR0REREREREREREREREREVA1suS+q+87GIJ892Vap1idV+iz6/fDR7odU3PP19dXuktwDOts4V/gjorrN+zVQiYiIiIiIiIiIiIiIiIiIiKjOkKCeVN3z9/dXXf/KIOPSxhDfmU+6ppXqe/akbceuvbhx5DCG+IjOEKzIR0REREREREREREREREREVA1sBdyo7jvbK/LR2U1CfFO++FafsoqKjGCXukRnGAb5iIiIiIiIiIiIiIiIiIiIqoEt90V1H4N8RERU29i1LhEREREREREREREREREREREREVEtYpCPiIiIiIiIiIiIiIiIiIiIiIiIqBYxyEdERERERERERERERERERERERERUixjkIyIiIiIiIiIiIiIiIiIiIiIiIqpFDPIRERERERERERERERERERERERER1SIG+YiIiIiIiIiIiIiIiIiIiIiIiIhqEYN8RERERERERERERERERERERERERLWIQT4iIiIiIiIiIiIiIiIiIiIiIiKiWsQgHxEREREREREREREREREREREREVEtYpCPiIiIiIiIiIiIiIiIiIiIiIiIqBYxyEdERERERERERERERERERERERERUixjkIyIiIiIiIiIiIiIiIiIiIiIiIqpFDPIRERERERERERERERERERERERER1SIG+YiIiIiIiIiIiIiIiIiIiIiIiIhqEYN8RERERERERERERERERERERERERLWIQT4iIiIiIiIiIiIiIiIiIiIiIiKiWsQgHxEREREREREREREREREREREREVEtYpCPiIiIiIiIiIiIiIiIiIiIiIiIqBYxyEdERERERERERERERERERERERERUixjkIyIiIiIiIiIiIiIiIiIiIiIiIqpFDPIRERERERERERERERERERERERER1SIG+YiIiIiIiIiIiIiIiIiIiIiIiIhqEYN8RERERERERERERERERERERERERLXIcDghqVgfJ6LTVFxcDLPZApPJDIs2rrWoNk8YDAZ16WPwgZ+fL3x9fUraiM5m7t43fE8QEVFdwv0VEdU0d587gp89REREREREZw79qxydAWzfu0vo03IhX7tlfsky1gY1bdG+v1u07+3yzdxi0aa1cbPFgq7t21iXJSIi8hCDfEReIAdohUUmmEwmvcU7jH5GGI2+PCFDZ6WqvG/4niAioprG/RUR1bSqfr/kZw8REREREVHdpH3NozOEfCd3oE/LhTW3xyAfERFVLwb5ziFy0LD/wCEkJacgWRvkUjRq0AANG9RH44YxaN26Jf/oX0lmkxkFhYXa4Vj1kGcjwD8Avn5nXk/YRUUmFBQUIDQ0RG8hsjqd982Z/J4gOl3cl58dUlPT8dsffyHxeJLeUjVNYhtjyBWDEBUVqbeQt50r+6v0jEws/v1PHEs4rqabN2uCq6+4FPXCw9Q0EdWc0/1+yWNlIiIiIiKiuseW+6K6j0E+IiKqbQzynSMyMrLwy+LfkZSUrLe4JieEr7nqcp6085BUSSgqKtKnqpe/vz+Mfr76VO0rLCzCnr37sOeffagfHYUunTugQUy0Ptca4pszbwFaNG+K/n16661E3nvf1JX3hLwX1qzbiMSkE9rXsop3qQbtX2zjRuh7QU8YjX56K1HFuC8/e0z96nukZ2ToU6cnOjoSd90+Wp8ibzrb9lflmb/wv9gbv1+fsuoQ1xbXDh2sT9GZSP6IvGXbTsTvOwhzsVlvLWWAD1o0a4ILe/WAjy9DX3WBN79fngmfPUREREREROcKW+6L6j4G+YiIqLYxyHcOkJM3fy5bqbrladYsFp3i2iEqKgrRURFq/sm0DKSlpWHnP3tx7NhxFSy5bNBAnNelo5pPrpn0Sgk1KcDfCD+/uhH8+WXRf7Fnb+kJ37CwMNwzboyq/FCkvdZm/7gACYnH0b9vbwb5qIS33zd14T0xa+7POHI0QZ/yXKuWzXHDyGH6FFH5uC8/u7wz+VOEhARjwvix8PGRP+1YzZw7H0ePJuLeO29DeAVBTPlj0JRpM5CTk4unJt6vt5K3nI37K3fkD43//mQazMUWTHzgHtX2r4/+Az9fXzz64N1qms5MK9esx8rV6/Up91o0a4pRI4Zqx/EMfdWm6vh+WZc/e4iIiIiIiM4lttwX1X0M8hERUW3znfj4Ey/r416XejINQUGB2j6s9ASlkJ3XieTUM7C7zQysfH0cHjvQDTd2L608Vpdt3roDS/78G74+Prhs0ABcfslANGrUAOH1wmA0GtUg440aNkCXTh0QHBSEg4ePIX7fAYSGBKt2KstisiC/hkN8wqwdBPr5+MJgd9K/Npi1+//fP5bC6O+PIVdciiJTkfaeTlGV+aIiIjBn/oKSrtmysk5h34FDKlgiW12nuv/LWIa3b3sGH+yNwRUXtUSQ1rR3+s249425MHYfhY5nxtv8jFEd75u68J7475Kl8A/wx6jhQ9G1SwdVnbK8oXPH9th38BDS0zPR78JeKCwqQuLxZAT6B8CPJ9DJBe7Lzz4SrgnWjpF79+ymt1jt2LVH7Td79eiGwMAAvdU1Ob7evGU7CgoKVWievOds3V/ZpKSmYfvO3Ug6kaLtgwqxfNU6dRzXqkVzbR8Vp15bxxKP42RaOtIzM+GvfcbsO3AYR44lIDAgEMHBcsREZ4I1azchIzMLV11xCXppnzeujktk/tFjidqxyAm0j2uj9jV1jn7MnnIWH59X1/fLuvTZQ0RERERERHSmc4o8ODSogJ92KS2S85NxaWtYP0pmExEReaxa/kovOyUJ+Xz59Szs3L1Xby21acs2fP39HLVMSWLdK+Ix74abMcp5mB6vzz+3pGdk4q+/V8Ho54ext96AHt26lAlV2pN553fvinFjblDXkco/mZlZ+tzKSV/6lvbYz0DZZ//sUGgy6WM1T7pbqm3yMjJr711f7XXSvFkThIdZqwbZzvvZv68zs06pamXbdu7Gj78s1i736HMqz/q6cnx/jx//ND6evgoJNZ+rpEqqrvdNbb8n5BdVgf7+qhvp5k2bVDjIcrK82Wzt4k72hTPnzMMnU6eX6dbQI3tnlHlf2IZ5rj6E5WS4u3l1lARsR72+DOn69LmkNvflDmyvM28fU52Br8ezgpvPjbeXeqe7X5sz9XjwbN1fiX/27sdX38zC3yvWaJ8PK1QF5T3/xCMoMMihgvIAbTwgMAC7tO9ys39aoJaV63z5zUzs3XdAX6oqXH1fewsrvfvSc3QOf87YutOVinuujklkuOG6a1SX7IePHlOvB6ms7R1uvpufxd8RT0d1fr+sC589RERERERERFT7LBYLNm/biXkL/4t/T/kSj016TQ3//uwrzNfatm7f5eXsBhERVYXXg3wqxLdkqfqgDw8PR8vmzfQ5peLattbm1VPLyLLe2CGok/w3vAC8MQtz59gNUyfgXKxRIo/pgl9/V13wXXrJQERFel4FLToqEpdc3F+dxFn03/9xh+1EHg+zxXpSrDw5+xdh6jMPYOzYOzB2/CP4dOEe5OjzbDJ3ly7z0EPvY+Ga46gojya3LVUta5OPrw9aae/tnOxsfPL5V9iyfadqDwoOUl3r3jDiGjRt2li1SZWgJx+dgGuvvlJN79xd9SBfieBYdGrRQg0xRYexdNGHeOTJGdjLMN/pyT6Eld9+iNcnr/J6YMqT903OkbVY+O9JeFzeM2MfwHufLsVhD57TuvCeOB3tWrdS7xf5vF7y13K9tbK6YeLUsvu/vc/xhPmZrC7ty/euWoze3boBi1ZV+fWkjtXO0R9X1E1OnxvaZwY+ue+MeI5UQLCawr2eHudZ5SJx+TS8NX4mPIlh1/b+Sioq/7F0OXx9fXHNkMHofl4X1c374MsH4a6xN6Nxo9LqnbGxjTD+9ltw5WUXq2V6dOuKYVddoaq1/fHXCrWuSlMB0rLf194cqs+vBHevgep8bZytJPR94/XWMF9C4nEvh/mA3g985vR8L8ak6g5vnmE8/tzZP9P63dJ+eG8FMvXZ7pzpx8pEREREREREdPqkl4433/8En0z9Gov++ye27/oHWaey1bB95x4s1No++nwG/m/yFNVTBxER1R6vBvnUCefFf6jKW2FhYbjlhuEIDQ3W55aqV0/mjVDLyLKLf//ztE4wywmbSYuG4M05szAyTm+0ibgYT49rp0+cOxISklR3WXLirVuXjnqr57qf11lVbpDuUY8nJeutJGxVtCqStHETwodOwDPPPI4Jl9TH7jlv472FR/S5QOHuGXj+/+YiscNobZmnMabnScyZ8hK+35SrL+GexeMTzNXn2qGDcV5n62tLunQcPvRKNGsSq6aNRj+HMJ9UiGof11qNZ2Vlq8vTcskEvPre22p4a8ZHmNjNCCQuxuylKfoCVCWJyzD551XYklOkN3hPxe+bTGyf/TX2GAfhFu398PCYDshZOwPvTdtUJgDrSl14T1RVh/ZttX3iSPU+ysmp+P3vMdn/zflMe38sxiT7UINqd7G/rMPixs3C3OcvRh3qmLtGJCZa9+WtXezLE7T9c3LKSX3KNdmXt2zWzAv78njsXNQNAx4chTFYjJ3eTIaega9Hb8nOzcXMufMdhuRk63P6y+Lfy8xzNcg6vEZ7Lu554PTCms4iBz2LuXPG4kx6ej07zivC4T+n4L0JD+DZaSuxpxK7zdrcX51ISVH7mWaxsejYoS0GX3YRbhg5DN27dlLhvlVrNuCnXxarQcalu/du2ueILHPFpQPRqWM7NGnSGNnZ2UhNS9PX6qkMrJy9GBj6Wpn3e9y4Z9E/Qp+oDufw54wrBw4dUc+xXNqoMN9116BZs1gV5pszz7thPntx417T9iVbsWILk3w2nn6/LMyRX7g0x9AJT6vvj2oY2QGedHZ9Jh8rExEREREREdHpWbpiDV58830cOnIMcW1b4babRuKpR+7DB2+9qAYZl7Z2bVpi/8HDeOGN97F89Xr92kREVNO8FuSzhfikayZriE+CeqH63LJkniwTEhKMHbv+UdetUpgvYxk+/2QrxrxxZp0krG6JSUnqsmeP89RlVfTs0VVdJh63rousijysQNLmxhdw48Au6NixC/qMGY8bmwMH9hwpqZhwfP86ZKELrhw5QFumA/rccguuQBH+2n1cX8I9k6n2KyrIyd1OnazvumZNm6B9XBuH7h5tYb6unTqo6ZJ5pxHadS0G/Udcrsa27DzkUeiLal7F7xsj2ox9F0/cPxg9tfdDz8EP4dbBRmStXYv9HuRU6sJ7om6KQP8bhwBbV2EXz5efcRL0/e/5Lvblh44ew4zvZuN/S1egsNB9iuj8Hl3U5ensy9OXzsV33fqhU0Q7dB4KfLeKVfW8wWwy4+jRRIehoKBAzTt+/ESZea4GWYc3RXbvh95IRMo5/Hnh2XFeLlL35KLDLc/j4cF6k4dqc38VHRkJf39/7fPjKDZs2qq3avcmNw/Tv/0BK1avw779B9Ug49Im82zWbdiMI0cTEBwchKioyibvUpCs3WTvljH6NNWWbTt2q+dYLu3JsfuoEcPQXH7Mdew45vy0oNz9S9XFoEE3fZQUT79f5mWmav+vhzbasbJ8f1RDm/rwt84uF4+ViYiIiIiIiM5Nfy1fjW9/mAeD9m/MjSPw5MP34uIBfVSgLzQ0RA0yLm0S6Ltl1HBIZf8Z38/FshVr9LUQEVFN8kqQTz7MbSE+CeZJQC88PEyf654sc8uNI9XJILmurKOyXb6kb1mF9d0mYFAlUnyqy6UbpLtB2+C620Hn5d52V+0rYxnetluuLnTnlKhX3qnvphu+jIwsLPlzuRrS0l1vbf3oaHXptSCf6k7L7nFyeNwzsPJ1+3nyeFvPIlufBxfPkVpf2W6ZrN0slw7znK5Y5vmv5PNVtWoGRhhVcUqjmhKNO16C1vgHe3Zbo305e7ZjDxrjhj7N1XR5zJbqqZDhbXJCUCpwVjvb2aucXNU1cclz7NQ9oK3d9tqqMtt7XnvtJGdswbxJd2rrLX2NFh5bhXnvPIYJ6jV2J559aRpWHnKMGOYcWoavJt2L8bLM2Mfw8cJDSCizffGYp9bh/Dq3tTu+Lyq+3RwkrJiBjx+R7dWXeUe7D7b333OLrYttnYK77deffQjrpr+HZ8dKmzbI9lay+mHF75tgxMQ4VnCt19ha0dETZ8p7olbE9XOsfKO/fh0+G8v9fBZlP6Ot7y+93UVXnOqz2OHz1f3nvFLONpRdl3C3TXbUfbW+fxz3Dc737/T3DdWhon25/ABi4+ZtmDrje+za4zpcd/r78gzsWrEVvQd0UxUR4/oNARbNddslYpnHUR5r/bmdtEhbYNELpe1yBVevR1Hm9eBmfy/PudNxWJnP+Apf37VDjplvvmG4w9Agpr6aJ92eOs9zNcg6qlPJY1zyGNo/drZ9Ueng/NhbXw9lH2/H96OL51+4eg1o+055ru/+ZKvdvsruteGF59qz47xw9Lz/cQwb2AaVjbPV5v4qINAfV142SI3/uWwlklOtVfUk1JeZdQotmzfDHbfdrAYZlzZb4O9EciqWLl+txi8fdJGq4FY51iDw+k9+9ug5cfsa0d/vZV4D5b02ynzOWF+7Mu34mVX2c0Y4f669vTTexb6v7PvB5eu6DjivS0e0bdNKXTqT5/WGEUNLKrPPmbewGsJ81lBnXKz9u8f58fPsvVv2uXF+Ass+L2WOFSr83Kho2yo4vvFA5b5fxiIiXB+tBB4rExEREREREZ17klNPYva8hfA3GvHSM4/gkoF9HYqyOJN5l17cTy0r1/nhp4VIPVnZnjms0tMzcPsd49GybceSYciwEdh/4KC+BBERueOVIN+qtRtUEC84KAijbxjuUYjPJjIiXLvOCHVdWcfqdRv0OZ6wnlxG01gPu9uz/pH97k9iVTe8c/XhzaGLMcnpxI2cPHJc7jMMWPECJlvPZZWSP/zfPQVxb5QuNxFTcHctBwCkCz0VonLzXPz590ps3rpdDUuXu07TR0TUg6+fLxKOe6FrXXmcnkvExKm2x0ked32eel7uw+Smr5XMmzt1QhUqLFqf30nHJmCqbT1vDMF3z5WeSJOTPc7P68Sm1nmecn94404RMrctwn/3NMYNI8+H7byLf5tReGJCD/w15VGMHXsH7n//d8SOfwzD2pSG/dyp/Dac3XKSraGyiJaefhZ4yyGs/Pj/8F18acm4Qu21/tLED7EouSX6Dx+OccP7IeLQH5j85AtYeMi2zEy8/uQULNKuF9ztcoy7ohMK57+Kj+clWheoAk9u9+D8F/DIvxdji7E7RsgyQ7sjZOch7Z1jRMwF2nS/ttYFY7pZ5w/vhAjtPi587hm8s2grjN2HaG3DMaJ7MHYeqtwJykq/Zgv3Y+3vR4DWHdHYg5wK3xPlsVa+WX/ITfiy3M9nISewtc9o2H22zpFu8Sqjgs/5CrfBiQplOK1PtklCYmX2v1sx+e6bsbOfbbmy3Q17Y99QHWRfLl+W3e3LbXKyc7Bw8RLMmvsLMjNP6a1Wckzm5+dX9X15xlas2NoNA7rrgQvnYKgd67ETyj6PcWNLx4fanjP3lZRVgMfp9TD1AajnsUwwRp7zj4F79OVkv7/+k/tKl6vsa6sG+fn6onnTJg6DBK1EbOOGZea5GmQd3qR+IINYxNjna47Nxdur+umPn/68yeN6wwvY+8BnJY+rvKehPfZlQjIOKj5WEyqc89xijCk5vpbXQGxJF6lTpQvgbrZ16N2yeum5ru79SW3vr6RL3V56lc+TepAvLcP6o5LePbsjpn6UGmRc2ObZ/mDXq0c3dGjfRo1XlrVLVfneVV7QqYLXiLvXQMtyXhtuyDo/1/Ztpa8X2V84hrQ8+04o+0mn94O2zXWBQf+6bykurfgm3bVfd+0QdemKfP+7Xg/zSTe7P/z0ixe72ZXn9wV8Z/9DPLVPd3z8rN/Pyw/zlXlu9M8g+9eWVJSF3eeILNNb22+ULFPR50aF21bB8Y2HPP1cSD2yQ/v/73hV++44dvwjeG/6CiTKr5g8wGNlIiIiIiIionOLFAL4z5ffoajIhJtHXYuGDTzvKaNxwwa48bphKCwqwrSvZ1W6V8UNGzehR+++ePjB+3Fo3+6S4frrRuhLeG7+zwsw6fmXkJ+fr7dUzemsx1vbQETkKa8E+Wx/FFYB7nJS3O5U8WqVt/dnTN46BG86nTyOGycn9bdi8nz9xGPGMsxb1A0Tp9ovF4H+zzsHFzKwcvZidVJ6ZMmC2nIPTkDvrVOwtLwzD9VM/apf26e627GazaW/+rcftyfXlTK7VatA5yg9MRFQ3fLpDZq4cbbH11qVYUy/dmpKibgYIweVc+bNFfX8as/bgxeXhrnixqqTMd/NtgY2Ug5pNzS0n+PzOs5uea/aj4VykmXsPXj4/QPo+PjTDiG9wv1z8d6Uzeg69HG89eG7eGZoa+ye9i8s3F9x1Qt2jGRThJxDS/CfTyUAHIsRA+xeQzVh1x/Y3OAZ/WSx9noujMeiDxYjvtsEvPnew7j11tEYdut4PP3KaLREIqb/vgWF2ut95fSfEQ8jhj73GT58frxa5rFpr+OSkMpVuSvh0e1mIHGHBAU74Y6n9GXGPYznPxmlLROCuMHa9FD98Yvth6FqHb3RIOMwdqqrjceDE8dqbaNx68TX8d6oltZlq0Uq1nz4NuYcb4wbbu0PT75a1OZ7Qipi5eUX4NCRo0hKcnwO5XM08fgJHDmWUDLIcrJ8dVfS8lT5n89yotx6wn3q8/afle0wclxl3m/lf85XtA3O9s6fgvUSCHPYBm2b5AS9i/1v7wc+c9xPO3U3XLP7Bs9J8KIyX5DdHUpJu32IozKslY/tnxu9qtaKrY6Byb0zMEkdOzkGZ8p7Hl0qOQZzXE/koGcd9ueltOM6+9dm3HDtmK60+9/KvrbOadpzKNXMxrzh9PhsjXV6v1uPf+V99bT9sZoErCS8VE7FRk+O1eQ18Lnajll271t5DYwtN5R1pjzXdeIYzmD9Clje9y/n7bT9UtfH93S+Pmqf0yoIJZX57nNducyT14i3aPsR+9dw3AhtH4LF2Gnbh3j6nTAjEXthF3gW2jbbv35rS+NG1qOoP5euhMXs+X7Az88Xo0YMVZUZpavvzVu263Mqz/ZcW4cpwIPacbPd57bap2vHGffYPxd66HOeu8Cnem604wr7zyvtM+ieB7o5VH2UfYfD8yDHHvL603/cUOExUIXb5qXvsR5qdMnTeOYZGe7D+AGNcfyvL/DshytgjduWj98fiYiIiIiIiM4t+w4cxuGjCejcMQ4X9btAb/XcoAF90CGujVrPwcNH9daKSdjtp3k/47FHH0KvnufrrVbj7xyHNq1b6VNEROSOV4J8fS/shQ7t2yEnNw8zZ88vUw2mPOkZmZg592d1XVlH3wt66XO8b+8qCd3Zn6i3iUCnAd2ARavUH/3LnrS2sVY1KqFXqZk4winMEBGrbmNvoruzmNWvYUx9VTkhLc31Nkg1jfrRUWroqVflcHbyZAZM2joqk9B3JzI21trNlcsqLdbH9bvnXHdn5Snr8zuqzEnemJbayrcegpyuUeP2VRiqQj/5WbHGOF+daHkcEwYHYe37T+Kt2ftV169AJjbNW4QDzW/B2Bu7IDa8PjreOAE3tj6OOd+uVNtaHoPH23CWKuma8TaMffILrCoKxqBHnsWw6syWuVLUDcNu6V56ovnQBiySJ097rd9fcsJSG56cCVUULzkTORnx2Cxvg5hRGNQ9RFp1seg92P4DphI8uV2EIKKBBEl34dtPZmDl3hTrazE0pKRnYpeCY9BEXW0Gvpq+DHuTrUHTkNCKK0c68PQ1m7sHC1+YhClSwfKZ5z2qUClq8z3RplULFBYWYvaPC/D1zDnYu++AajebzKpLum9n/YhZc34uGWQ5WV6uVxeU//kcj52LUNKtatWV/zlf/jY4s26Tw0lzm4hukN25LcRl5RSuEA1aoje2IlkvUueVfUM1aFg/Wt+Xlx9dCdHex8OGXIGbRl1bpiqy7MtlHXJcUHnxWPpJabe6Nqp7XbsgpFD7YJfHTpXj/hjM9e2WPa6LQIxUUzyWqAI/lXttnWus1SpL9hl6Vaoy4aNuLR0D1c5VGu2VU7FReHKsZq0KOASdyx6wl8trz3U1709q+xhu56692LBpC3x9fBDbqKFqi9L76Vy/cQtSUtOQnHIS6zdsVm22eY0bNVBhvnVau7uuvD0VN85W2UwPedk9Z568RrylzH7E6TucywqVitN3QnW9stX86oK+vXuhUcMY7D94CPMWLK5UmE8q83XtbO1+19bVe1VI6NdarU4CcNrj9LF9IFPfp9/oHJ4vv5qwdV9hV9VPpz4HkIgUh48ga5VH22ed6ubdo32EJ9vmne+xnn7uhMR2QMeOMlyIgeOeweNjmgPbl2Bbor5AOc75749ERERERERE55gDh46oy8sHDVCXYu/+g/hz2Srk5ZWtLCdtMk+WsblCv+7+g9Z1eULWcywhAc2bNdNbiIiosrzy11wfHwOuGXK5NcyXk4vv53gW5pNlvp89T11HrivrkHV5zvFkbfkykHJMH62AqszjieRDWO98ElQNL+A7fZHa0kA/YX8iJVVdOmvVshnuvP1mNbjrVumE3l2pbV2nRbrV07sysj5G9ie6pLKFnMwrfSwrH6bQn9+S9ZcOUl3GRqoy2LrdU/Or0AWyj8flI4MRq060dEGfMXKipTH2LJqP7apkQipSpbBFh2Z2J8frI1Z6Nj1wHFnWBrc834azVHAsOrVogd79hmDc2Al4c+qXeHDA6QdOK61Tb7QM1ccVqXun6T0Wr7z0Ytnhxk4IQZH2TxMbob3yvcWT2zWi87i3MfEK7UW2azEmP/cQbhn7PL5aUcEpcf9OuPGdCZBifesXTcGkB27DhEnTsK6S53M9es0W7sfCV9/GnNSuGP/q8xjW0fOKdbX5nrjikotVF3TNmzVR0wUFhSgsLMLs+Qtw6PBRNG7cEP379nYYZHm5nj1LsZxkrY774aJajL3yPp9VlSFtEe31enoq+Jwvdx/hRN8mb/LGvqE62Pa/ySnWLi2dyetFwvh3j70FnTq4fn5Pa1++d5U6nnGspqQNzy3WWrXn0lbJ2LYPbnr63Zt7fAzmqcq8ts45UmnMGqiyDm66IXV+XtXxb1V4dqymXgPO4UFPeOm5ru79SW3ur+S71+Ilf6rxiwf2K+m2u9f53RAWFqYqxn71zSxM//YHHD56DPXqhal5IjIiHBcP6KPGF//+p/b9LU+Nnw4V6FNVHF/Qu1b27DVSUzx/LUqlQb3bdn17y3QDXkv8A4y46brhaNRAwnyHMW/Bbx6H+eSPvYv++4fa1/Tp5fjr6aoprZz7ue0YQN+nSzfHjs/5fU7dFztSz40E8Byuow1q/1RKddWurWvFAPuucfWZwoNjoPK3zRvfY6v+uRDbpoP2/yPI9ODtWJufPURERERERERU82xBviaNrT/mFdLV7vdzf8a6TWX/8CJtMk+WsWkS20hdyt+VPBUZGaEq8f00/2ekp1f8d5IPP/4ULdt2LBmkW16x/8BBDBk2Ao8+/hS+nzUbHbr0UNPS7o50gWu/LukOd9fuPeWuR27P/joyeLINclu33zG+zH2U6zpvp6vtYje9RFQer/0sW/7AbwvznTp1SoX5Tp3K1ueWJfNkGQnxdenUXl23KgEGl9VZXNJDfx5QFR88oSr6OJ8ELR0cuhurYbYT9hu3bKt0v/VCrrNpm7ULpapV8XFBulxTj43tRJdj5QJbdY6SMIVeGcFaWaEi+vMrXS3aPQelg123S3LCRrW9hjHqBFDlTvRKdYrTF4xwyU/uOWpXWSQVifu0i/r14GdtcMvPr/YrKkiFpx07/1HjCYlJOHmy/NjLJr1LruzcvJKKZVV2yQS8+t7beFq6eh12MeI8fKsVFVb+xFq5jOo/F8LRsksndHYe4mJKq99lFFoDfXb0iF/FCnOswb0yKrhd/1j0v+d1TPnuI7z7yHB0L9qHRf9+FfP2ln+7/k0vxh1vfonvP/k/PDW8LYri/8A7L2vvG2t5SY9U/L7JxbZpEuLrggmvPoSBsZWr+Feb7wlf7balul6zptbPKgny/fDTLzh6NBGxjRvhppHXon+f3mro0a0runRsr5aX60mo4sf5v6pQu+w7mzSxfinyKhXGqqC6lbvPZ706kXue71uFu895pYJ9RIkKt6mKTnPfUB0axFjjI5u2bVOX9po1bYKxY27EZYMGwN/f9fvFfl8uFZkqy1plb4LefbjjoIIQeiXjyr4OyuPxMVhlePraIs+o49+q8OxY7bReA154rr1znOdebe6vsrTvXxaLRXWX2uv80orcwcFBuPO2mzCg7wVo26YV4tq1UeN33HqTmmdzQa8eaN6sKcxmM7JzcvTW0+TQHXYljufrHGugS7Zz6gPdVPirrlR5DQj0x02jhqNRowaqMt/c+YsqDPPJDxHm/fyr2o8MH3aldl0v/WBGe4+qrm1t3d/q+3TpSrvs860NbrrxV58TbvZPJaHkki7fK/heXsExkCfbVu7xjQeq+rlzePdG7f9dUN+Dr+t14fsjEREREREREdUcCfIF+PsjKrL07yLt2rRCSHCwQ7jPRtpknixjEx0VCaPRr1JBPnHbmFvUZY/efVWIzRUJskmgLSnpBPbs2IxD+3Zj7g/fYdRNY1QYTrrgXbxwPj54/x3ccvONahmZdtc1r9yOhAc3r1+t1iXLd+nSGa1btXS7HtmGVavXlFxHBlnuhZdeVUG8ym6DK+62i4ioPF79a64tzHde544lYT5X1Rqys3Pw/WwJ+p3CeV06YsjgS6sU4lPUyZ+tTl30uKb+4F9y0tleBnat2Apb92zWLnZchANVV2L6uFB/3HfffVhtkpNwUZGROH78BDZv3aG3em7j5m3qupKab9Pa2/2Vyokua9dKtm4NHcSNVSfAHCstOneRpAcM7Lh/ft3Rq0K4WHd5fD3qlmg//vx0LtZs24Pdu/dg48L/w/vfHUG9Cy9BB9VDWWOcP/IC1DvyPWbMXmtdZvYUzD5gxIU3DEBFHW76+FTvSWZP/LLwd+zYtUeNp2dk4NsffnJbnWXDpm3446/latxsMmH+gt9w+IiHJTKrILK+Hv7cewglL7HCeKxcVLkDzUqL7YQr5HL9XPzuFI7L2bseO20nBSVzc/gX/L7DbhnZvnm79AmbCDToJJe7tLtSumyy9tpfqY8rntyu9jlX8n7zj0GrAaNxzzgpAZmCvYlOJ+O1VZSsJSOl5DH0b9ASF9z6CMbIecsU7X2Ta233RIXvm8ztWLFWu9WuXRGean3f2IZED26nLrwn/HytEdxlK1erz0+pxHfjyGtUNRyb35b8hf98+S127rZ+Uh05lqBOqh9LOK5OsPfp3VO1e03GMrz93GL0fmC4h+EH589nvcs4h65qXShTGdfaHZ1bLj/nbSrYR5S3Tfp+2m31QY9Ubd9QHdq2aan25ceOHS8JQ9s0bxqLBjHR+pRr9vvy1i0r25Vz+d0qx42Qx2gxduo73crvg11zewymOf3ueyt6bZFHyjv+VcFhN93uajx5nZT3GvBc1Z9rz47zqq4291fSlW5IaCiOJiRi9559+P1/f2Pm3Pn4e8UaFQju16cXrrt2CEYMu1KNG41GLNPmyTJL/lyuutRN0K4bFhaGmOgofa3e0bulNSjmrc8Sb3D7gzHn74ROpMqr6jbYTbewtSEgwB83X28N80nlRQnzmU1mfa4jCfH9qM2Xn4JJiC+ubWvrDC+JGyfvzcWYpMJuHh5nOKn650R5xydVPAayV+7xjXuefe5kYuPUKfhzjRwf78Ca717De3NOovXgETjf2gN2uerCsTIRERERERER1Rz5Ma78SNO+4M99d47Bv99+CW1dnPuXNpknyziTdVWGnJP4+qtpeOzRh1Q1O6lC5xzo27FzFzZv2Yq77hyHwMBA1SaV/OQ6P837udIV644cPaquL7ctZJ0SvrOt2xWZ9/CD95dcR1x80UDExNRHenpl/rrjXlW2i4jI62eqJJB35RWD0K1rJ2RmZmHvvv36nFJSjSszK0stc+Xlg6oe4lP0P7i7q56zd0ZpZbdBE/Rf2Tsut3e6dI8zBG/aflVvCwfebb9cBlZ+PMWpK7F2GPRAN/Wre8fuk7Rlp9dut3x+fr64duhg+Pr6Ytny1UjL8Pwsx8m0dPy9cq2qDDDymqvUuk5X+tIZjhVR9BO9DRrIRDzmOVQt0IOVtq7c4vqpEyoOYU1VYUEf10UOGmU9KeTcJaK2rO352Tvd8blP37JKe05jEVOJUICPrwG+PhXVzAvX/u3G/A/fxv/939uY/t8idB3zNP7v/vMRoi8Rcv4EvP7McIRv+tq6zPJgXDnhFYzvU/6ZGF8f30p2Qe19RUUmFT4KCQ3B/XePQ/eunVFQUID4/a4r7e36x/qoj7lxJIZeebka37rDObTmRXG9MUKyU/Ff4KVJH+Lbb6fhX/dPw8GYygZZKim0N0ZqnwkRSMR3z92L1yfPwMJvZ+Kr1+/FI8/9ob2yhfa5cb8sk4L5r+jLTP8Qr989xcX2xaBdfwnbFWHROw/iX5/PxLeTn8frK2Qtdjy63RSsfODOknlymx9PlxKQbXFBW/0NYKuytGsaPtaW+3byYhxM/hX3j30e/5muXUe73reT38N38nZt1wvtvPm+ST2qvWM0m2aq94P9sOm4WsKtuvCeEO3atFThBjkxrkJ8IxxDfOL87l207fXBot/+wK7dpZ970t3u7aNHue3qvCrSl76FUdrrCg98Vm4lmvI/n7V97IN6l3MOn9Oln9vWoINdN3mavdNf0NZhr/zP+fK3wVk526Td3/VDX8PISpZs8sa+oTrU5r48fenccgNZiNDm2QUc3B9jlU57FNCJG6t3UehYSU1ez6qy0oMXV6r73sq9tsgz7TBSrzrlUHGsJDg8wXUXvRpPjtXcvwZKn0tXIR5vPdeeHedVTW3vr6QS7GUX9Vd/eFuw+Hds2bZDVY9ds34TPvrsKyQllQbPEo+fwEf/+RJrtXmyzOat27Fw8RKYLRZcNqi/9jhV9muk9hnt4rua7XvYSH0/5dFrROMuyOWdIKjO0++E2mt/nkP1PT0IrYcT6woJa9qH+ebMX1gmzGcf4ht57RCvh/isrN+hsWiu9p7V9uk3WrtXdq5g6LxvduDyudHYPxfquNYxdOx8fFLhMVCF21b+8Y2nPPvcMSI4PBW/T5Pj4/fx3Rqgp/b98okxbUorfrtRV46ViYiIiIiIiKjmNG/WBIVFRTiRnKq3WJlMZpXhcCZtMs/e8RPJ6pxwC21dVSEhOalCZwv0STe6NlIJb8hVg8tUt2verBmOJSQgL69yQT653r8++MhtBcDy2LrQlcChVBH8e/lKHDuWoM89PaezXUR07jIcTkiqfL+rHkpIOI7GjRuV+aOxxVKMxMQkNG3aWG/xDjnJe/cnZcsjSHc49if1906/2TEEJt3yPO98YjgDK1+XE0v6JKRbngnAx1pb09ccu/mRsOBzjtXhnG+ztkgltD+XrVBlbwcN7Ifu53V2G5yURL5U71u2YrXaKV9+yUCc372rPrdyrM9FLN7Uu8Aq+9zI46l3e6RO7DmFPqRLLfvHWE4OS0BDn1Tz+63SHvdEu/UI5+dNY/f8lnnuMaRkGyvDYi5GfkG+OslVk+SZCwwKhM9phV9PnxzIffTZF/APCMS4W27AytXrsGX7Tlx79WB0aC/BM0ez5y7AoaNHMebG65ChHQgu+u8f2muxCwZfdpG+hGdKXkfOrw8XCo8tw3efzsCi+FxEhLdF/3sewdDcabhfu35vW7DJ9rpy8Rop9z3s4nr20nf8jO+m/4othzO1V6QRsS264ZIRozB4QEs9yFmEhKUz8NW3y7Alswgxsb0w9O7xuCB1iuP2KRnYO38KPp69FYlFwWjX+wbc82hbbBkj7xnH12/5t5uBndOn4YcVW7FLu00Yw9Gpez8Mu+UWXNC0NGyWvG4aPv/kD2zJhbZdY/HUK42x5fOZ+GvLYe32oT2WLdB9wHCMvKUfmlR01tBJdbxv6sp7wka6qjuedAINGsSoz11X9u8/iJ8W/KY+cyW4J+XNJcgnXe9WiYt9kOLm9Wl7/cbpr/HyP59tyn5O279HnNch8zqv0t5Lx2zbUP7nfEXboN6XJeuyKbtOx/eORt3XVRjgfH+cHgNv7RuqS83vy/V9Kdy8hnTW5w1lnyv7x9Lh89r+OdMfY6fnwqbsa6Lsc6JuC2X3B/avF3j0+q5570z+FOH1wnDvXbfpLVZS+UxCU/feeRvCw8P0Vvf+88U3yMw6hacm3q+3eEh9bjgfQ5Xl7jFWbPtCfVI47zutz2Pp8aBV+cdqNmVeAw7L2K/D+px22uK95/ps319JNb60jHQE+Aegfv1I7TNjJ+L3HUCbVi1x/Yir1TJz5i3EQW3/1L5dW3Tr2hGpJ9NRUFiA6Mgo7VivjVqmclzsB4TLfZUnr5GyrwHrc+2iHc6fM9ZtgdPr1da+1+k4zHFbZJ1O3wldvBfK7I/qkMLCIsz68WckJSWrP+jeMGKYCn07h/jatDrdH8C4ejxt9NeD7Xmt6DF0s6+ocP/tdIzkfHzi0T6i3G1z8br24HuKK9X1/bKuHSsTERERERGdq+yKolEdZ1/BTtGn5UK+Xsv8kmWsDWpazg9ZtG/28g1cshAyLj+K7Vqlv6Wdvp9++Q2/LvkLd48djQt7dddbgc+nf49tO/fg/vG3oVN7698wpCeOT7/4Bj26dsZdt9+k2sSa9Zsx7etZGHbVZRgxdLDeWjXSXa50myvd53bp3Amvvv4Wvp81W5/r6KKB/fHvf72nqthJAG7d+g148flnK6xiZ7sNIVXv7K/jaj3p6Rl45LEnkJKSio8/nKxChba260YMx4jh16jlXF1X2qTLXNt22sg2SNe8tvXZ2txtFxGRK9Ua5KO6YduO3fhz2UoUFhaiWbNYbSfcFU2bNEZoaLCan52dq7p13LxtO44eS1RdL11yUX/V7TG5ZzKZUFBY0gFpjQjwN8LPr3qqxFTWug2bsXT5an0KaNQgBreOHuWy2sORowmYo7rwMqnpgMAA3HrTdYiOchcPOTfZQgt1+eTv6fL2+6YuvScqI37fQcxfaA3ziWFDrkCnDpU/6UvnDu7Lzy7vfjBFe+5CMWH86QX5pkz7Rnvus/HkoxP0lrpF7ddW9HMR1Kr7zqX9leyLPpzyBcxmCx594G5YLBb8+5Op8PcPwEMT7tCXolLWcN+KAWfu8Zr8GnvuvIVqv9G8WVN1DPL7/5ap18KIYVehXVvHX0JTzaiO75dn6rEyERERERHR2UY/FUBngJKQno0+LRdnUpBv/aZt+M9X36kuc59+9D5tU63nbyXcJyE/ERUZof4WKEVYxI0jh2HwpQPVuNynt/71qSpGIaG/87t1Ue1VJV3lSnivUaOGqlKfrTqfjJenMkE+G1sYT5QXCJRtSEo64TLcV1GQT8J5cn1Pgnw2rraLiMgV34mPP/GyPk5nqYYNYtTJmeTUNBw9moB/4vdrO+8t2PVPvLYz2YIVq9eptqysU2jZrBlu0HbSUp2ByufjI12KGdQBTk0wGo1uK3zVhiaxjVWYxGQ2o4d28HbFJRfB1003a+Hh9VT1FunKrVWLZqp73QitjRzlH1qBBetPoMkFwzCg5dn5Swxvvm/q2nuiMiTEGh0ZiYKCQlx4QU906RhX8iWKyBXuy88uh48cQ2rqSRw+egw7dv+DHbv2qCE5+aTaVyYmncCuPXtL2l0N23fsVuuQQGfXznUzsHl06Sf4X73hGNs9Wm85c5xL+yvZ/5w4kYqU1FSsWrsBq9dtVH+oa9umJdq3q50/NNZpGWsxc+oGxI24FR3PvJe2Il22d2jfTgW/jyUkYt+BQ+p1cN3wq9XzTrXD298vz+RjZSIiIiIiIqK6qMxpHLsGFfDTLqVFG1Xj0tawfpTMrnEx0VFYv3krjiYcR1hICFq1bKbaJdjXrEljnMrOwcm0DHWet1P7thg96lr0veB8tYz4Y+lKrFi9Hg1j6uPG64apvyedDvkB47K/V6BTx47o0KE9jh9Pwv/+WopBF1+EoCD350T3/LMXCYmJuPiigR7/WFHWd955XbF02XJceGFvREVGulzP2nXrka09DvZtO3ftwrvvf4CrrrxCbadwdd3E48excNFiXHLJxWr9NnN/mod9+/bj6iFXObQLV9tFROSK69QNnXXq1QvDzdoO+M7bRuOKSy9S3Z9KJQY5iOjYoR0GX3Yx7rz9Ztw46hq1LHnG3+iHQP8AdVBWXWTdgf7+6rbqmuZNm6judCXIJ11ylScqIgJXXj4IFw3oU1JBis5Np/u+qcvvicqQz+Ebr78G3bp0ZIiPPMJ9+dmjT+/z0ahRA1UNSyrw2YaCggI1//jxEw7trga5rqxD1lUnZSzDPOmqvt+ZW230XNpfXawdnwUHB+lTQFhYGAb176tPnaviMe/1ZUjXp6y0NulmdehrTt3ynnmMfn64+frhuKh/H3SIa4tbb7reC93p0uk63c8dcbYcKxMRERERERFR1fn7GzHhrttUAG/uz7/iREqqapfzUVJd74mH7sGH77yMj955BQ/fdwe6dLKG1sTxE8n4acFi+Pn54oF7boe/0ajPqZhUnZv0/Evq0t7n077EsYQEFYYTtst335+sqvXZSEU7GWyaNm2CzVu2IiHxuN7i2sxZsx1uc/v2HSpnaQvLuVpP82bNHNrk+rZKgfZcXbdN69aIiamPL76cXrL9st3/+uAjNW5T0XYREbnCrnWJvEB+UVFQaILZbO061lt8ff0Q4O/HkM854lzoWtdeVd43fE8QEdVte6ffjEmLrONj3ph1xoedBPdX5yprF7qTt+qTunPlOI1qV1W/X/Kzh4iIiIiIqG7SvubRGUK+kzvQp+VCvm7L/JJlrA1quq51rWuz5K8V+OGnBSrYd8OIoRg0oI/bvxvI/fjr79WY+8uvKCwswi2jhuPSi/vpcz0joTXpPvbv5Sv1Fqtbbr6xTPe4tu52v581W28pu5z9Mh07tHfZZa2QAJ59iO6igf0duq91tx7768l1Xn7xebz86usOXeu6u+7+Awfx4MMTsXvPP2q5xx59CP369nHoWrei7SIicoVBPiIvMmsHaXJQpg7W1EGc3cFcBawHTQb4aJc+vj7w9dEGN13VEp1N3L1v+J4gIqK6hPsrIqpp5X2/5GcPERERERHRmUP/KkdngDLndfVpuZCv4jK/ZBlrg5quq0E+sXzVOsyc+4vq4SeubStc3P9C1UNDuN6zT2bWKez+Zx/+XrkWe/cfRIC/P26+/hoM7HeBmk9ERDWLQT4iIiIiIiIiIiIiIiIiIqJqYMt9Ud13Ngb5xMn0DHz5zWz8E79fbwEaxETDbDKreTYd49pi3K03IJoV44iIag2DfERERERERERERERERERERNXAlvuiuu9sDfLZJJ1IUVX39u47oA0H1fbGtW2tKvXJ0LBBjHVBIiKqNQzyERERERERERERERERERERVQNb7ovqvrM9yEdERHWfj35JRERERERERERERERERERERERERLWAQT4iIiIiIiIiIiIiIiIiIiIiIiKiWsQgHxEREREREREREREREREREREREVEtYpCPiIiIiIiIiIiIiIiIiIiIiIiIqBYxyEdERERERERERERERERERERERERUixjkIyIiIiIiIiIiIiIiIiIiIiIiIqpFDPIRERERERERERERERERERERERER1SIG+YiIiIiIiIiIiIiIiIiIiIiIiIhqEYN8RERERERERERERERERERERERERLWIQT4iIiIiIiIiIiIiIiIiIiIiIiKiWsQgHxEREREREREREREREREREREREVEtYpCPiIiIiIiIiIiIiIiIiIiIiIiIqBYZDickFevjRHSO80lNAiwWfYroLOPnB0tUA32CiIiIiIiIiIiIiIio+hXzbPwZo9j5ydKn5cJgsM4vWcbaoKYtZgssKIbWAotFm9bGzRYLurZvY12WiIjIQ4a9B466PXQwmc36GBGd7YLityBwzwZ9iujslH3BlShq2EyfIiIiIiIiIiIiIiIiql623BfVfc5BvmLtn7rULiS3ZwvuKeUE+WTEYPDB+V3irMsSERF5yLB83TbHvRERnZMCs1IReWQnDMWsyEdnJ4uPH1Lb9YTJP1hvISIiIiIiIiIiIiIiql62MBjVfWWCfPp0cbHBfZBP+ydBPrm0BvkAH18DAgMC0L9XV+uyREREHjIkJafyyIGIiIiIiIiIiIiIiIiIiIjOWe6DfLbcnosgnzY4V+QzF1tQWGRGp3atrMsSERF5yEe/JCIiIiIiIiIiIiIiIiIiIiIiIqJawCAfERERERERERERERERERERERERUS1i17pERERERERERERERERERER0TqvrXesePHZCHyMiorqkVdOG+tjpY5CPiIiIiIiIiIiIiIiIiIiIzml1PchHRERnP3atS0RERERERERERERERERERERERFSLGOQjIiIiIiIiIiIiIiIiIiIiIiIiqkUM8hERERERERERERERERERERERERHVIgb5iIiIiIiIiIiIiIiIiIiIiIiIiGoRg3xEREREREREREREREREREREREREtYhBPiIiIiIiIiIiIiIiIiIiIiIiIqJaxCAfERERERERERERERERERERERERUS1ikI+IiIiIiIiIiIiIiIiIiIiIiIioFjHIR0RERERERERERERERERERERERFSLGOQjIiIiIiIiIiIiIiIiIiIiIiIiqkUM8hERERERERERERERERERERERERHVIgb5iIiIiIiIiIiIiIiIiIiIiIiIiGoRg3xEREREREREREREREREREREREREtYhBPiIiIiIiIiIiIiIiIiIiIiIiIqJaxCAfERERERERERERERERERERERERUS1ikI+IiIiIiIiIiIiIiIiIiIiIiIioFjHIR0RERERERERERERERERERERERFSLGOQjIiIiIiIiIiIiIiIiIiIiIiIiqkUM8hERERERERERERERERERERERERHVIgb5iIiIiIiIiIiIiIiIiIiIiIiIiGqRISk5tVgfJyIiIiIiIiIiIiIiIiIiIjrnFBc7Rids03JhMFinS5axNqhpi9kCC4qhtcBiKYa52ILCIjM6tWtlXbYOyc8vwIYt2/FP/H5tew3o0L4NenU/D/7+Rn0JIiKqTQzyERERERERERERERERERER0TntbA/ybd+5B9O/n4vMrFN6i1VEeD2MHX09unbuoLcQEVFtYde6RERERERERERERERERERERGep1JNp+GTaN8jOycXFA/rgvjtvVYOMn8rOUfNkGfKe/Px8THr+JbRs21FdyrS99PQM3H7HeMz/eYHeQkTEIB8RERERERERERERERERERHRWevHXxbDZDJh3JhRuO2mkejVo6saZHzcLaPUvJ8W/KYvXTUffvwphgwbgf0HDuotpWyhNlnmXCD399XX30KjRg1xaN9uvPn6K0hIPK4enw0bN+lLERGVxSAfERERERERERERERERERER0Vnq0JFjMBgMuLBnd72l1IW9uqt5h48m6i1Vc9uYWxATUx/bt+/QW0rt2LkLxxIS1DLnAgntbd6yFf369tFbiIg8Y0hKTnXs6J2IiIjOajm5eTiVk4+CwiL4+Pggv6BQn0PVSR5ri8WiTxERERERERFRXRQY4K++vwf4GxEWGoSQoEB9Ts0o+btNkQm+Pj7Iyy/Q5xBVna+vD8zmuvV3qaBAf5gtxQgw+tXKe23J7hXYdGQ7jqYfx6GTx/RWourRLDIWLaObomfzLri84wC9leqi4mLH6IRtWi4MBut0yTLWBjVt0T5jLSiG1qIdRxTDXGxBYZEZndq1si5bBzzwxIswap+5H7z1ot7i6NFnXlHb/uE7L+stVSPdxP40/2f8+1/vITIyQrXZqtNd0LsXRgy/RrWd7aQq4YMPT8Rrr7yIXj3P11sdSde6jzz2BK4bMfyceVyIqGIM8hEREZ1DklLSYdG+VMofo/21L2z+2iXVjCMJyWgYHa5PEREREREREVFdZTJbYLbICXgT/Hx90bC+9SR0dTuRmqHCAMFBAepvNzIQeUP8oUS0axmrT9Ud8kNjGXLyCuDrY0CD6Op/r6XnZuGjv6Zj3ZEtgNEA+Bpg0G6bqDoVm4sBizYUFqNPix545LI7EBYYqs+luqQkpKezTcvFmR7ke/fDz/FP/H689/pziAivp7danUzPwNMvvoVO7dvhsQfH661V4yqcJl3JSpe69uG+sx2DfERUVQzyERERnSMSk9NgNBpRLzRIb6GaJEG+po1j9CkiIiIiIiIiqquKLRZYirXBbEF+YZEK9TWOidLnVo/jKekICjQiIozBDvK+uhrks5eelY38giLtvRapt3jflqO78O7v/0GmORsGfx+oxA1RDXAIhxUUo35AJJ4YfA+6xMbpjVRXODxXGtu0XJzpQb6/lq/Gd7Pno2un9njg7tvh5+en2guLivDJ1K+xc/de3D76elzU7wLVfjrsq/IFBQW6rMYnyzz6+FP6FHDRwP4OQT8J/73w0qv4+MPJaNO69HF0DsjJ9MuvvoFnnnoc330/C9/Pmo0P3n/HZTDOtuzLLz6HRb8uxr8++EifA8z94buSwJ0tYPfwg/dj1eo1arnHHn1ITQvZtlE3jVHjomOH9g7bKaFF+3ULWX9kZKTDtrsL8tnu4+49/6jpW26+ES8+/ywCA2u2ei0R1Q7tKJWIiIjOdlKJTyrwMcRXu3x8DBw4cODAgQMHDhw4cODAgQOHOj74+vmqH0P6B/gjSBt8DD6qWl51kXUzxEfnush6oQgMMCL5ZPW91/67axkyTadgCGCIj2pRgAGp+WlYuO1/egNRzbhkYF/06d0D23f9gxff+Be+n/szvpn1E15+c7IK8fXv08srIT5x8UUD1eX+AwewY+cuHEtIKGmTbnYnPf+SCvptXr8ah/btVoME2265bZwKsVXFlP9MxV13jlPrqqi6nYT5+vXtU3LbEvyTYJ4E9OxN//rbkuVsIT4J6UnA8H+//1py/XvvvguXDb665PqyrMyXgJ8E+GQZd1X5nMk6ZF0S9pPr7dmxWbVLGFIeOyI6+zHIR0REdJbLzslT3emGhQbrLUREREREREREVBGDwaDCfNLVrclsRk6e90+e5uTmq0o+DPERWcN8ZktxtbzXlsWvxfL962EI8NVbiGpRoA9WHFiPpXvX6A1E1W/XP/E4fCRBjSennsSfy1Zh2cq1alwcOHgE/+w7oMZPl1TVkypzM77+Tg0ybqu0Zwv2OXeze8/4O9GjezdVKa+yUlNTcfmllzhU7nNHlr1+5HCHYJ0E/6Ti3k/zfnYIy8W1a+uwnIQM12/YVKZKoLvrV5ZcV9Yh67LdrlThk4Di5i1b1WNHRGc/BvmIiIjOcqdy8xHgb9SniIiIiIiIiIioMoxGP9XTwansPL3Fe07l5KmgIBFZhQQGqPeFty3esVR7MxtYiY/qDu31+Ju8LolqwJK/VuBfH0/D8RPJCA0NwYC+vXHX7TepQcZDQ4LVvHf//R/8+fcq/VqnRyrwZWZlqsFWjU9IV7USUrMP8QkJrEn3u1KRTrqcraymTZvoY+WrX78+unbtok+Vat6smQoY5tmFyaXN3vbtO9BMu50msY31llJSuU/CdgmJx/WWypPrHj2WgKFXD9FbrKIiIxETUx/HtHlEdPZjkI+IiOgsV1hYpP7YTERERERERERElSeV+STMV1BUpLd4T0GRiT/AJLITEGBEQaFJn/KeE1mpgC9TfFSH+BiQJK9Lomomlfh++GmBGr/q8ovxfy89jXG3jELf3uerQcb/7+VnMPhSa9ju+zk/Y8/e/Wr8dAQFBaJpkyYOoT2pOJeUdEKNe5OE8yIjI/Up73EOBx45elQfqx7p6elYvmKl6lq3ZduOJUOP3n3x9/KV+lJEdLZjkI+IiOgs5+NjgD//IExEREREREREVGUBRiN8DN4/peLrY2CQj8iOvB/kfeFt6bmZMDDIR3WJL5CRl6VPEFWfufN/VZeXXtQPo4ZfjcDAspWApe3GkcNwycC+anrOz9breJtU3WvUqKE+VT4J5klAryZJ8FACiO44V+jzNrnPAwf0x/9+/xWH9u0uM0gXvkR09mOQj4iI6CyXX+D9X4sTEREREREREZ1LfHx9kF9QqE95T16+99dJdKarjveFyeL9Kn9Ep8tk5uuSqtexhOM4ciwRkRHhuHHkUL3VPQnzhYfXw+Ejx1RXu9VBwnCuus+Van3r1m9wqOCXmpqqqtTZk+5td+/5R5+qPFmnrMOe7bYlZChhQ3ekQp+77nOly+Ae3bu57HbXU9KFrsFgvY9EdO5ikI+IiIiIiIiIiIiIiIiIiIjoLJKYZA3jdekYBz8/PzVeHqPRD53at1Xjice93wWuuOrKK1Tlu0cee8IhzPf5tC9xLCEBt425RU1LIE6CcR9+/GnJcvsPHMR/pn6hxk+HrEPWZSO3LQG9oVcP0Vtck5DhkKsG48GHJzpcf/7PC7D4t99x153jyg0CVkQCjNeNGI5HH39KhR1tJGj4/azZ6pKIzn4M8hERERERERERERERERG5UVxcjKKiIuQVFCI3Lx/ZuXk4lVO5Qa6Tl1eges8wmcxqnURERNUpM8vafXP7dm3UpSc66MtmZFZP188SdHvz9VdUKK5H775o2bajGpKSTuDzKR+XVOOT5Z58fKIaty33xZfT8d47b6Fjh/aqvSqku97XXnkRr7z2RsltS2ju+2+mo03rVvpS7j384P249+67cNngq0uu/9P8nz2+fkWk+9y5P3yHUTeNKVl/hy49ENeu7WmFBInozGFISk7lNwUiIqKzWPyhRDRv0kCfotpyJCGZzwMRERERERHRGUy+27drGatPeYf83cbb6yTvkbBdQZEJJpNJG9cbvUS6zgvw94fRz1dvqT7V8TqTrg4ffvQJjBlzM64afIXe6h3Vsb3DPrkThtDqf6yJXHEb3M22YOGDX+oTVBc4P1e2abmQz22ZLlnG2qCmLWYLLCiG1gKLpRjmYgsKi8zo1O70g12nI+tUNtZt3IqL+l0Af3+j3lq+goICLF+9ARf07IZ6YaF669lBqui9/OobePnF57wSuiMiqg6syEdERERUx53Svmxv27Eb/1u6ArN/WoDffv8Lm7Zsx8mT6foSRERERERERESlJFSwaPFveOGlV/Hscy+WGSa98BJmz/lJBdTINXkM8/ILUFTk/RCfkHXmFxSq2ygJhZxBjiUcR0ZmJvbs2au3EBFRXSNBvMsH9fc4xCcCAgLUdc62EB8R0ZmCQT4iIiLyjpzjOJSQq09o4r/Fzbfcjpu/3qc3UFUcOHQEX37zA35b8hc2bt6GQ4ePYtvO3fjjr+Va+yz8vWKN6o6FiIiIiIiIiMhm1g9z8dl/pmHL1m3YsXNXmWH79p345rvv8dIrr6suY2tN+l94Y8QoXPPKX/DKzxX/+QrXyPq+OL1wmQTrpAtds6X6A3Yms8V6W9olUZ3T6QnMGjsVC0Y/gWv1pkdHaNNa25T+egMREREReQ2DfERERFShjGXvWkN5LoYZ8bLEYfz87NN45skH8b2aJm9YvXYj5s5bqErZ9+jWFaNGDsPDE+7CuFtvwhWXXoR69cKwZv0mfD1zDgoLa/GP7meyfYvxzuSZWJumT9eag/hp8qeYtv50TlukY+30T/HOLwf1aSIiIiIiIjpX7dq9W10+/P/s3Qd8FGX+x/EvEAIBBBIIvUPoCCiIiIoNFJUip56gKCrq6dnr2cV6cpwFFU9FBRue5x8EVBBsVEG69N4hQEgCUlP/8zw7m+xuNskmJCSEz1vntTPPPNOemQ2zs7/9PXffpZdfGBp0aNWqpf5Yttx2MZeUlGTr58WaD6+2QXMv/VyyegzwZuI7ATF8Gcy2kpKTi21mvlWr19jgT99h46aNdl58QnyWebGxu+28kqbPpW/aADYzfHh+G7fU18V6eQBBbgAAAMg/AvkAAEDoImqpYYMGfkO0nVFF0Q0jnPmnq5GnILikvVry48ca/tAkEe+Xs63bd2jmnHmqVKmSbvhrf/W46Dw1adRA5cuXU43oaurYvq1uGXSdOpzeVnFx8fp2yo/ukkBRK4igxIIVP3+shr0+mb87AAAAAE4Z3i5zTz+9ndq1axN0eHHoM2rZsrkN5nvymefyFcxXEiU7bXciMvEFMpn5zLaLk02bNuvmIXfo0X88abtj9h1GfTja1lm8eGmWebf97e/ONTVUBw8etHVKohoN/qr7a7oTOHU0vUEv9xuuL6/NzFAI4OTRtEljfTp6lH0FgOKKQD4AABC67rfr1X++6DdcHmNmVNU5D72nLz+8X+dUtTWDO7xakz/6RQt27XcLEMyxY0maNPlHlSpVSv2uvFR16tRy5/grWzZMPS8+X40bNdD6DZu0afM2d05x5gnyGneS97i8biKZ7wAAAAAAJ7fw8HC99PxzNphv9eq1BPM5TEa8pOTcg+kSV07Rh8/erTuvH6SBg+/WW58uVZw7L4vDc/UfU+/VGUp0i7KTlJRSrLLyffm/rxUXt8/+mLdtm9YhDzVq1NAffyzTfQ8+ql27drlrK2HK1Nb5Z/1VNdxJnCJqNVe7KlVUsYw7DQAAUMAI5AMAAChm1qzboEMHD6ljh7aqUzv3n/b26nGhfV2+arV9BYpWY/V/4C4N6RzpThe9qM4D9OgDvWTjjgEAAADgFLVw0WK9+PKr9tXLBPO9OPRZG3xlgvmefu6FUzqYLyU1VbnH0a3XjGHf6nCza/W3Jx/WPRdX18opwzVi4mZ3vq8krf+//2qGO5Ubs2mzD8XFgf0H7OvTTz2uV156PuTh7TdfU8cO7bVnzx498NBjWrfuJP9FZ6CDu7TdOU1lo87R/a2ruYUAAADA8SOQDwAAFIBETf/njbpu4L80PZufFq/7xJl/1wdaaqem6umBgfUTtXLyO3rqzluc8hs16M6nNHzCqsxfKifO1CtmmX/O1J7EPzTmmTucep95uso8tEVzPnlDD9xq1ukMtz6q4dP32sVCFZ+QoJUrV+U4JCTm9rvpgrE3bp99rV+ntn3NTaVKFRUVGam16zcpKSnZLQUAAAAAAMj0w7SfNO/3+fbVV7ly5TT02adsd7vm+cdTzz6vI0eOunOPxyFtn/mZRj51r27td7V6O8Otfx+micsT3PkBkndo5rtPeOpeM0TPvvuLtgc+5khYocnDn9Cd15j1DdCdD+SwPi+/Za7WjYOf0NfLD7kz/aWkpLljOamuc/71tu4ZdL7at26vroPu142nS+t/WqYtbo0MW37QJz+VVbPq7nQIUlKKTyBffkVElNfzzz2tHpdcpEOHD+vZ519y55QQqZv0wVaTg7GC2rW/OYQuVtvotkue15c3fKBJN5lhpL78y8O6rZEJArxYLw/wlI/o7KltnfG4xtm6z+g2t0jqrKHXmrLhGtrILfLjXdeberm1s81LX3HX4QwDXtHLndu49aQ+l77pKe93s1vi4S3/8tKL3ZJ8av2wvrTbfVh9mt+ld+2xP6/73dlndL5P7w4Y6dkHZxhn96+zT4bDajqv88P60G0b22a9b3COKWD/uj3vmW+24ynx8JYHHF9u263R6K8a2u/NzHYz2730MmeO27bN3Oe14S10m52feUwAAAAFoczDjzz6nDsOAABKoPjEP1WlckV3Kn+ObpmjbxfukZp119Xto9xSX0e1ZdZkLdhdU52v6KZG5Z2i+D/09a8bMpZJTU5W2QrlFL9pjw6rqbr26aYzWjRTy1aNVS18r6b/8xH9e1qcap7bU+e0a65GFXfrtynfafLOBrq0Sx2FH92qWd8t0u6a1aUFn2ryKtPNSVNd9JcqmvX40/pwyV5V63yJup/RSk0q79eCo83VN+i+Brdp02a98s9/6ZdfZ2j6jFlZhjm/zdWZHc9Q9er5+5Xt/j8PhXweFi9ZboMGu519lipUiHBLc7Zl2w7b1UnrVs1DXiY78fPH6q2vZmr23PmeYU2YWnWorcy1mu5xx2qSd74zrAprpjPqZtaw65iWolYNYvX5f8brx7nrlbhjpr75Yb3izfy17rJ7q6tbC2ne6I/1xRLvdjzrnx2wTinBU2+rWcaT7c10cfvhGmc6erNG2e24682yz0bgfsephrPt1WuPqlGHdqrnVs5y/M6+h7Vw56+frGFjpmm1+Y4gYX3merrGyHtl2H363rvsfO2O7qxWAZdi1jox0tr1OtKgXcAxZy9wP1eF1VfNveu1JSImo308ghy3z/5mtOsvmfsTeD69x+2d79cmWQQ5f1mW9+6Du+2Mcx/6OQ12jWW3T5622u533FnOc8b63fay16ZPO4bQBsd9Pfqel/jFzjp+VbKzjSPTfK+XwPMHAAAA4EQxn+2rVT3NnSoY5rlNQa/T+OnnX7Rn71716X2lKlX0PI8wzwtMgN5ll/ZQndr+Px4sU6aMzj/vXK1avUYrVqzUshXLdV63bipbNsytkdW+xV9p6lqpXpc+Or9xkA9jCbP11mP/pwPNu+rCzm10ZrMoJS6dq8k/LlSlLr1kP3Id3ayZE+Zre/VIpU57X1OTO+rKzjWlLeu0aPV8zVkfrW4XNJY9gj2/aNidw/R/e2rqgiu76fzWjVVm12x9Pe47JTbupc71wp2dWqKxP66TWlysgWc4n5wO/a6Rt76ksZuPqHWPK9SrQ0vn89QK7ap+sboF2edjIWUjLK8Kfo94SuvgmomasbuNLunVQlXdUmmzprz0tv687l5duH+mfteZuuLchs7SOUt3/gsvW9adKhj5vc6CXUd5Ya633+bOs1ke+/Xt7VxPoR1XYbwvvpg/QaXCjy+/SYtmvXRmJecYjm3Taz9MVpNmZ6teRHU1id6n8Ru3OTWa6OJ2bVWzjHQgfpK+M0Vqo/v7/V29oquo1LFd2nX4oA6klFX1SrXVon4LVdowWntq9VLrimUUnnpYX2/YZBbS1R0H6gzbf2tZJSVP0U/mN8s1+2lQq9qqmLRF386aozW2pi/v9pNVqsrZOiOqjPbtj1NS2dMUUbaCakafrnbJ8511HfE7lrGrl7jLZx5j8sHlnn2JPkdX163u7Ns+LVru2ebZLfuoiXMhZx5jEBnLJatmnRjVs6f+oDYt/UVJ3Z7XUy2aKtKZ3v5ngg4cO6bwitVVz9m/08OdvxE7j6hdt8f1eItGqmyaIClO2w8eU0Rka7WMKKsyzmnM2L8GF2pglHOt+Oyf5S33Ob4zctvu/j565dJL1NrZRtoR91ylV1D10gecdWxTuwZ1FF66vCqXNTt1WHuctk04Fqulzt+qlXYL+ZCUroFn9XUnUNyVKuWOePkUmG7RTVZVU2Iyu5qp1LR0RVcrPr2WAABODmTkAwAAoZvyvCfjXcbgZsQLQY1O12rgX85WHTvVVJdf50xfd5FiKkqJ00fr3T+qqtdTb+vZW035tbrpnid055lS8m/jNWeHXchj1c9aGf2w/vPFJ/ryixsUk7hVK3c55a1u1kP33OAu+6ze+ktDT/0QtW7dSo89+nDQB9TmIePTTzyuFi1PTMeclSpVsK8HDh60r6E4dOiwfa0QEeTBeR6Y4KZRs6rqqgfu0qN2GKDuvkFoJpjp9cmKP9d0VerWuamrNGushk30PGjMtFrjJsp2s2rWc8XV5rWXmjlzmvV2l+3T2FP1eMTP1aiM7bjbSPhNo0YvtkGDlgmKCtzv3tL4SYH7vEm/rmipIRnruktXNU3Q9DGTPdd6s15umTPe1DOe2WWrCUobqfHxXTOX791Y6yeN1LiMHmSC1HGW16TJyksnMyZgLPA8tVsxWdMDkxAEOe6rmm7SeKfM8941+zNW06O8x+IMzvn0PeXmmhjmtFPGOXOGIedmfi2RK3PNTEpU95syl7ftl5NQzqnlf4118d3xHOR6nQcw7R14DEPOlXNd+J5bVz6vR//z4mWuvZFa1tq7Lmc/I516WdoBAAAAAPyVKu0JLkjz6ab1zDM66qknHrOvwZjnH88986ROb9fWdrP71LNDj6+b3fDmuunjTzT04ZvVZ9AN6nPrg7r/ztbOjJ36cVHA5/Hlv0gDRundZ2+39YaOeVk31XU+FS1+XzNsZE6CZr77jmZGXqHhY57XbWZ9g27W/S/erYuVrMlfztYeu6IA21dossnq1/sxPXmnWeYG3fbsKP29SyXP/EC5dqsbROIi/ThTqnJ6M/e5l5Gk9Z+O1CcVBuvG80PrcSFDfvahGPrv/77Wv19/047fdecdx/3MqvhZoZfMj3Gdsci6vfVk5sn3067bX3VxlbI6FPul/vbVM7rzG2f4v+c12XywL1NfZ5/VXGNitzlXsVSxSludZ5e6WGc4yyg12SmvoHp13FR9DarbzHHJ+5droqckGxWcess17Ov7dKuzvRs/e0M/7TdbqKB2zfv4ZL07AcJrq2bSYo2cdJt6j3lGb9S8Wbc1q62ySWv0wfiHPe3xzeO6d42JCCyrxg3+qna6TDc1duo4JXu2vq9bxz5u61w36UdttyvNh1C227C+atjAwTUa7T1XXz2tYUt+dwrn643vnekdJhOjqbNNE+w6RuprTwkAAECBIJAPAACELqKWGjZo4DNEuzOOR6JW/rbMeY3T5Bdv9QkS/JtGLDTzt2qnJ0bNI/l09b3u9MxfN1eormjzVGfVZ3r3k5lat9fT50rFivZnnnnStm1rPfaIfzCfJ4jvH2re4sQE8RmRVavY19jY3fY1N+bXfrt3ex5Xm65Ljse+XQlS05ZuYJoRqS59OrqBXQmaN2uTos4doCGdfX5JGNVRQ3o3ljbM1Tzf6CJnVe0yls2Js43Bd+nRwaHUDSKhqrr7LdtY/U0wWsJv+tUNslo36zfFN+3lv9/NnOlzA38R6SwbsB8x55rAtkTF5xY5tX6upidEqrvvMTvbMEFr62e5gVe2TmNdFWx/3alcxS/W9A3Odm7yBhAapg09QZK+7HFHdlV/n+OO6WPqbdL0+eZRc6J2OC/NWvsEVDrnM6O+s61xsxJsEF9/n5VHde4VetBcQqKze8415VPf7INn37M59yGcUyvka8xfzte5sy0TNOcNMs1ob/9AwajOA/zPrVeo12OO5yWTeb9ltr2zn+c6+5WwWutyux4BAAAAnNJimnk+SLw/6iOlpJheDULjDeZrf/rpWrt2nb79brI7Jx8q1lU953PO3CmfaczwZ/TEA0P08AhP3qpNiQF95ta4Vpd09Mn4Vra5zu9t+g5N1hrzwTVhpX5b7Ezu+U4Pu13k2uH612U7Ct60wwZUZRFZV2eY1ykf641Ji7Xd7VE3P8+Ngjq8ShNfeke/6XTd+pdWNvDISP7jc/37p2jdc/fFykOvusVOZKTnCdziJUu0bNmKkIcR77yrzz7/0i77+GMPq9elPex4ibPhTX0dax5cVtfZXW/3XGsBLo72BHJWrHWdPszorvWf6uU+OKgYXl9atNEToBZRTWeat0GjtjIJJrdvXSLzdDCyUlsbfNcnyuTnT9bG2CnOa842bR2pmRk9SK/QG1s9wYJmG2fbshNlv5YtGekJXDSaNXb+LjhM17RXe9vjA33YwmkHW15BjZs7x28C6rRNc3+ZnxmkG/9f/bjX90FxHoSy3X0HZJvMqTOw38O6v3Vzp933aebmFbYKAADAiUAgHwAACF332/XqP1/0GS71CYTJP8+j2wbqdffjeuaprEMP31+0tjpTzXx78ghvpRtfvk2XNJNWTflAT993q2555mPNMd1N5INvMF9RBPEZLWKaqkzp0lq2YpWSkgMebAexaMkypaalqWXzZiqVJb9/3lSrHSltmKxRAcFEVvxmLUuIVLumgcFvjmYt1UwJWrbBd7mqisprhFV++AVkuaKcbTsv8QlmfzY5+xUQrOaKch9IZ2EzD470DGN+U7xzbDtyCZxat3KTsy9nZwlws22aEKt9zrinTvb7m8F3++7gPSfxG1YrPiAwzqOq6vqdGve4zw0MdPPUi9+VmDG+ftJY/yBMl92WGqtdYIRgHtg2NhnpsmRszEGu59Qrf9dYjtd5gOzbW4ox11RgUF2o12OO58UryPstqpazXO7XIwAAAIBT23XXXq2mTZtowcJFeunlYXkO5uvZ4yI7vnrNWvuaH8lrPtbDNz+ilz75XQkVm+u83n/XXTY4L4i6VZ1PRf7KhvuWJHmeHzW+Qk++OFQvZxl6eoJ0AtXoqUdfvF7nVdyhnz58SXdeP0B3Dv1WmzICnPx5MxmGZO8M/ee+l/Vl4hm651+PqJN3d035azPV+pbB6pqP38DmaR8K2VmdPZng3hn5np54+tmQh2nTflLFihU1fNgrOqfriQ0bO9EmzpqoZSZxZaUOuq3bER3KJollwt75mrkp6zBjm8kI96M27je1aqtJa6ld41qKVJy2r/lV202HHVXqq68668wqphePWK1ZZOrm5LAOBl7jR5Odd1ERSIrVwg3uuK8jG4O2x8xNi7XJ+xvrpMM2kLFA5bTd3e/rnZVrtCdVqlilhS7u/Ig+vOEVDW3rBvsBAACcAATyAQCAYuKwqtZpZbu4DRzq+AbulZXC3VGv8Lrnacjz7+mTN1/QvX2aKnn9Lxrxwmdal8+nUyaY75FHHtRjjzx0woP4jCpVKqtj+3baf+BPTftpus24l509cfH6ddZclQkrowvO6+qW5p/JMma6g403XeWaADK/7kBj/TOP5SaylszvhItcfGLo+227PHWOe5Iyu10NKVtegidj34YgAXizvMFibp1QuF34+g7ebII2m1wo3OM2Xfv679NYny54PRnxPN0Hu/vrE9xmt3W859Eci2nDjLYJ7D72OORz33K8zgOE3N6hCum8AAAAAMDxiYiI0EsvPKcmTZpowaJFeumV0IP5Fi5arH+/PsL+WPDaa/7ilubVDs34z3dao0a6a9gI3X/nDep1UUe1aJzND+oSTRei/vZs8mTBKuubPO9QVdVs20btsgx15fv4yFfFtlfp0dFj9eXbQ3X/RdHavni07h3+i/MpPavSof5Acu8MvfXIB1pa/VI9/a8H/AL21k/5QL8lJ+u39x7UwOsHOcM9eusPZ8YfH+guZ3piLh+KQ96HE+CC7ufZYLwbb7heA/56rd9w0UUX2DqNGzXMMs8Mb735b7VofuKfq51wh37SG2s2OtdvWdVrfIlqusVZJC3XsBnvZxlGrjTBsvv0U7yny9YaUZfp4irVpSOxmrF7rWbsNxF+1dS4dUfVM70T79+mCbZm3tSIrJzxHsnpZ8ORZQooW2WuDmthkPYYNvcnmb5bLGdfAn7eGLJ24dkdR87bXTR/uG797B96Yv50Ldp/2NmH6jrjzNt0f7YnFgAAoGARyAcAAIpE5gOjqmrYynQyEqevv5yZ2VWCtVdzFuxyx7ORuDdjmfDohjrnurt0o8keFrfLv0vePDq9bVsb0FdUup7dSRUiIrRi1VqN/fobHTjwpzsn08LFy/Tp2P8pNSXFqVtBZbN9QJVHGUFkvdTMZFLzBl7ZTGAnQmBmufyLinRWFJjtLlsJmjfR0wWvOfa8PWqO9GSGs8v6B+B52zLGW+c42WxyoXCP23SLG3SfvF3HOmL6uGXe4DY3e17I28qN6X7ZbneAukdu0vjXg2cADIU9pwUhu+s8QIG1gcP3egzlvAAAAADA8ahYoYJeeWmoYpo1tZn5hr7wcq7BfIuXLNULL/1T5ieFpkvUZk2beGbk2SEl2I+WFVQp4xeZe7V8ZjZdVG76VjPW+IQX7flFE6aY6eY6s4XzWSqykdqZvkX3fKX//RzQDcOe2Vpk+yXN6tCevZ6uMh0V67XRxffeoavNxOLNAc+gPMLCbH+eudisKcM+0G/Rl+qhoTeoVUBsYp2Ln9DTT/oOf1efBs6MBpfqQWe6U11PveyEtg8njgnGu+bqqzRwwLV+wyUXebI2mmDRwHlmiK5+MncqnDd7Fr2vyfHO9VqmvhpXcgtdCw/aVHuKrHWZ7vftdaRiZ911ye3q5U4uW7PNXpMVq3RXuyrOtbt/uWY60zN3xjrXcAXVa9XYdq+7fe/EoNeuvwpq2fzmzK5+K16s+xt4uvhNdtZrOsyee8R9cFqplm7yRvjVuVlnRxVyIN+OfZ4g2ogWurpbG1vkUU3nnX2fHm3ujG5x65RpovPP96nj7F+vaJOV0EeCtzvcamrnbV/neAfUCrj+Qtlu68t0tX12t0/LVn6mZ7+ZrDWpZrqKahSLXysDAIBTAYF8AADgxKlaW3Xss6CpGv7Cx/riw880J1Fq1Osu9aotJf/xgR66818a9eVX+uKTd/TUrQ9pxMps+jrx2vuD7r11qN78xFnGWW7MW2/qk/VOebMzFZPNj7xPBhHly+nGgVerZnR1bd++S//58FO988EYffblOH04Zqxef+t9/fTrTKWmpKpihQj9+eef+t//TdKxYwXZSUZj9bfZ6BI9meRsAFJg97mu9au1Xtl0u5tP/l2MOmzXvu64rw2rswZguftT1z58c7uPNd3aBrBd3ebC071s7jzdtQbZFx/Z1rH7GxpPV7UB3bkaWdon++POVrNeGnKus5CbNS7bbeWbyQDYy3bDnGPXsLme04IUcJ0HyKkN7PUT2O3ucVyPAAAAAFDQzI8EX3rBE8y3ZOkfNpgvOTl4Pi4TxGfmm54BHn/0IXU9u4s7J2drPnlJTzzwsN8weU1dNbnIPARaqQ9eeU1jPv1MHzz1uCbsyeZhTeNKWvbUrXp2+Mea+O6LuvPv72ims5st/jJY55voJeezW6+HrlALJWvmiHt159D3NdFZ55jhT+jW21/XxmweHyUtf093Dn5RHzh1Tf0PnnpVXzvlkZd2ULAQxbAyIQTRrZunCTulVqc3U/L6VVq10jusV2KS0+Z1WqlVa9+hpRqaw67aQM1MzxMBcUi+TDK+smHefkVx8tinD36fr+026MvfzN8me7reLVNbF/cYqU/6Pa93+72iL6++Xb2iK5vORzx2O8sfcV4jqquGDmvjtp885Ss32vVGVvL8EHr7+n2e8hw5b55K52jogFecbT2vT666Tu1MQG3qLs1YOMXW2LNmkycgsEwTXX3VcM8+9eisyNTgfx8KzObP9HWsCSIsq3rN7te4a017PK8PB/xTj7Zooqrm8j/0sSbbOlKNxt46wzUu2P6tXO62e3Wd3eNNfegebxOnDf2Est3Ic3RTb+85coZr+6iF+ZOQGqs1W8xKHBmBgy002Kzj2sd1v50BAABQMAjkAwAAJ1AzDRh6vdpXCdPhVb9o8oL9nodV4c100/Mv6M6LW6p60jL9OPFbTZy+RWU7XK9n+pj0ejmIPl29Widr5U/OMs5yP66U2l92l1576iL5/sj1ZFS58mm64bq/qGuXTqpePUqHDh7Szl2x2hefoOSUFFWrFqkB11ylW24aqBrR1RW7Z6++/uY7JSeH1lVOMOsm+mcl8wSxVXUzyTVWfzdjm2/3q7Y72kmbFHXuZeqSa5BVsCCmBM0b7du9aaRi2piAt8kalxHd5mbLc6f8bdJ4N4Oc5e6Pmp7t7k+kupzb2K7Pb7/XT9b4De645WbM8w3EctY1LqNr3EzBAvKiOp/tXOHOvgR20+psx3scwets0jizv6Fqdra6R5qucH3PVbD2yea4HZnn2dm2b9s561m3wqnrzWLYrJfb7a5/Br34+ZNDzqiXpa5fUFvguffK7Zwen5yvc6dNTFe33u1n2wZjnesnUt37dPS0VYZ8Xo+OwP0CAAAAgIIQEVHeL5jv2aEvZgnm8w3ie+qJx0IO4jMSEjdr2Sb/4ZAq6ow7X9ZdZ9VR2U1z9PXkldJFQ3X/X7JJR1e1h257/WbV2/OLPvhhiQ5VbK4+9/5LQwc1zwh0KtviZg19/e/q0zZaSYun6oP/+0YzNoXpzFuH6uIWbqUAlRqfpbPr7dFcp66pPzehkXo59d+9s2NmAJUP051wufCcA+kS47bK5FhbNeUdvfDSyz7DeK0KiB3Kq3J+/QjjpLL7Y32w1dM9rp9DP+mJHz7VzP2Hbfe7kVVqq16V6gpP2qVF66drrltNmq+FpitXwwSOOW8Zj+naftAdtd3tuuM5StbqJf+nRUlVnG3VVmQZZzcOrtHEWW/qDe/yu9/XOyvXaI8Jgitj6lXQoR3/py9MZsFCtU8TfxiukZt26ZCz7bIRpj1qq0aZw9q+Y44muwFzE394XxNj42zQnK1Tqax2b/oyyP5N0TATRGl/21xBNUzb7p+uYVs9mRAzhbDdhO12PZ5z5AwRnsyIE39+RWO8wcIrP9YXO+JsbzN2HeFlVZA/qwYAACgVuyfOZEgHAAAl1LrNO9Wgrv3pMorQ1h17jvs8HDp0RPsS4lW+XHlVqlRRFSLKu3OkI0eP6auvJ2j33jg1alBff+l7hcqE5f03G+smjgwIbmusqwK7mTWBSWP8g8ZMN6H9fWIuTZDTqBUtNWRwYJCTY/1kDfMGrpmuaPtU1bzRYzVdXf3q++9LpLrfdJk00akXZZbxdD9q66iXhtSeq1E+AXdR5w7QkM6R7pTLd7uG2Xbr1U5ZorPuAW6QlQksc7bhXVWks099pHHO8Ub5HaMJ9prsZtHzbaOA5Q2zDr928F3WMMu31DKnLD7YfgcVuJ3g7WMFOV+Z7RO4Lw57TnyWd9jz6RvQmOWYfHnW6T2WLMvafQ1ob59zH+o5zfEaC+DZh6oZ5ynn69xtk4B2yHocWd8beboeczwvDjt/tdpltJXLXc7/egQAAABwIpjP9jGNCvZng+a5TUGvMztHjhzVk08/q3XrN6hd2zYa+uxTKlu2bJYgvs6dznSXODWZdjh6LEkpqWluyYlRpnQp20ODCSYsaIVxnS1bvlJPPPWMLr7oQt1/79/d0oJRGPt75Tu3qFSl4tVtccG7WC8PMNn3DmvZ/Pv0REYwYMnR59I3dVutCjoU+6Wu+8HNWngSMH9XgjqYpm/v/sidQHEQeK680+bF/Hk20xl1PAV2Os35NyNN6TJ/wdPS0pWanqak5FS1jvF/zgoAQG4I5AMAoIQjkK94KIhAvtwcNcF8/zfRZuY7o2M7XXLBee6ckssbOBUYeIaT18l8TrkeAQAAgJLtZA/kM44ePapnnntBq1avUbt2bXTh+efr7Xffk/mi6InHHtHZXTp7Kp7iTFDGoSNHTXzGCVG6lOkGuXyhBPEZBPIRyFdSEMiHwhZ4rrzT5oVAPgDAiUDXugAAACVE+fLl9Ner+6p5TFPVjI52SwEAAAAAADzKly+vF59/Vi1bNteyZSs04p13bfnTTzxGEJ8PE1BXMaK8zZJX2MLCyhRqEB8AAACAkweBfAAAACVIuXLh6nflpWrXpqVbAgAAAAAAkCk8PFwvv/C8brzhep3b7Rz9+1//POW70w3GBNaZrm7DShfOV2kmbi+iXLgdTsYgvnp1a6ty5cpq0aK5WwIAAADgeBHIBwAAAAAAAAAAcAopWzZM11x9lR575EE1a9rELUUgG8wXUU6VKpRX+fAwmz3PZOnLT9ydWcYsWzYszAYImox/Zn0nq8jISH3+yUfqdWkPtwRF7yc9MfY29R5TMrvVNSb+cJ9zfLedVN3qAgAA5EWp2D1x2XTKDwAASoJtu/aqRvVIdwpFZeuOPWpQt4Y7BQAAAAAATjZ74hJUv3a0O1UwtsfGqV6t6u4UUDjWbd6pmEZ13KnirzDeF1e+c4tKVTp5AydxcktPz+br+INp+vbuj9wJFAeB58o7bV5MQLaZzqjjKbDTaalpSlO6TJx3Wlq6UtPTlJScqtYxjT11AQAIERn5AAAo4cyHxqSkZHcKAAAAAAAAeWWeraRlE4dxPFKdlR7juQ2QwbwfzPuioMVEN1J6aiG8iYH8SpWaOdclAACALzLyAQBQwsXuTbDdpVSqGOGWoCiQkQ8AAAAAgJPXwUNHlJySoloF3OuBeW5TIaKcKleq4JYABe9kysh34M/DOnzsWIG/10b89LGmbpylUuHkOMGJF5jlzUpOV4/G5+q+S252C1AcBJ4r77R5OVkz8i1cskw//DRDW7btUGpqqluaM9P1+9+H3Kh2bVq6JQCAE4W7VQAASrjTKkXo2LEkdwoAAAAAAAB5dfRYsk4rhB9Jmuc2h44cc6cAHDp6rFDeaz1anavSqSbEBigeSjnX46VtznOngMKxM3a3/vPR59q4eWvIQXxGSkqqNm7Z5k4BAE4kMvIBAHAK2B2XqNJlSvPr7iJERj4AAAAAAE5OBw4eVnpammpUq+qWFKw9+xJtbwqRlSu5JUDBOlky8iUcOKjk5JRCea+ZAJa3f/1E0zbMUqly5DnBiRWY5U1H03R5ywt1+7kDFBYW5haiOAg8V95p83IyZuT7ddZcffbf8erUsZ1uvv4alStXzp2TvdlzF+jjz/+n3r0uUd/Le7ilAIAThTtVAABOATWrV1VKcop98AwAAAAAAIDQmG4+U1IKJ7DIy6zbZPwzQUzAqSph/5865rwPCuu9VqZMGQ08s7dOK11R6cfSpIC4KuCEOZauyHJVNLBTH4L4UOgO/Om5t2jbqkVIQXwAgKJHIB8AAKeI2jWi7K/C4hIO6OChI0pKSnbnAAAAAAAAwMs8MzHPTuLi9ys9PU21o6PcOYWndnSkzUQWuzfBBg8e47kNTgHmOjfX+6698UpOSVUt531QmKpXqaa3rn1OZ9U5XelHUpWenKb0NCL6cAKkOUOKc60dTtOZtdvq9f5Pq0rFyp55QCHyZg8sZbIHngAj3h6pXlf204aNm9ySTEePHtUTTz1r6yB3pg1NWy5YuMgtKTzfTJikG28eooSERLcEQFGia10AAE4xh44c1Z8Hj+hYcopKOx/ejh5LcuegMJUuXVppaeaJDQAAAAAAKK7KlwtXWnq6ypUNU+VKFVQh4sRmr7HPbQ4d0bGkFJUpXUpHjvLcBsevTJnSSk0tXs+lIsqXU2pamsqFO++1iifuvWaCWpKTk/XzmjlavH2ltiXu0tb4He5coHDUq1JbDaJqq2O9NrqoxTkqW7asfV6M4iej21yXd9q8nIxd6074fpomTf7Rdqvb7exObmnOjqdrXRMIdt+DD6t/v77q17e3W+phAtJMEN+brw1XZGThZTouKUwg3933PqAXhj6jTmeeYctMwN3v8xfomaceV/ny5W1ZQTDrHffNBM4NUEwQyAcAAAAAAAAAAADglGGC+fjRLU4Ub+CX6eLZBPGh+MoI0nN5p80LgXyhCRYUZrLxPf/iKzqrc6csAX4IXWEF8gEoXgj1BwAAAAAAAAAAAHDKMMFU5cqVs0N4eDgDQ6EOJuDGDATx4VTQ/fzz7Ov0GTPtq7F8xUpt37EjYx4AIHsE8gEAAAAAAAAAAAA4JZUqVYqBoVAH4FRisvCZrnVNVj7T1a7Jxjdu/ARb5tttq8ku16hZq4zhxpuH2PpepiveXlf2s13M+jLTptzM904PGjxEK1au0hNPPWvXZdYdTG51Tde/vvvk3YZh9s3soykL3Pdg2/PWz6meaRvvfgTW8T1O7/j9Dz2qL778Si3bdszSNqae73qCtZ05PjN463rb3GwzsP0D9z9wvhHYDuZYzDEBOD4E8gEAAAAAAAAAAAAAAOC4eTPvbdi4MUs2Pm/wmgn0Wzz/N21ev8oOnc48QwMHDc4SfBaqd9/7QLfeMtiuK7fuewPrevcpNna3Vi9fbMu//u/nuvqv1/sF8xmjP/nMvnr329QzAXa+QXpmmY6du9rgRW+9n6Z+r/c++NAG0hlmm6a74Vq1avrVqVChgp3vq2mTxpr87Td649/DNPC6a+0+mmlTbph1Pv3s83Z577ruuO1WXdzz8iz7P3/BIi1Z+oet88nHo/yCK73MOTDnwnf/zfm578GHM4L5zPH6nkOzT23btrHzABwfAvkAAAAAAAAAAAAAAABw3LxZ+cZ88rkdfLPxeQP73nxtuF8Q2e1DblHHDu313feT3ZLQxcXF6ZKLLswIbMtJsLpmnxYvWWqD+0w32IYJXHvw/ntsNkHfLHPNY5r5BQqaeibALjADoSnzrWe298LQZzR5ylQbKHfkyFHbDud0Pdut4anTs8fF7lRozLpMcN7bI173Oyaz7WD7b5KE/uWqfu5UcOYcmHNx2aU93BJp0PUD7au3y+St27bZY/eeQ9NuJsjQ234A8o9APgAAAAAAAAAAAAAAgBJo3sIlen3khxr25n9yHb6f9qu71PExGfj2H9hvB282PmPOb3P9AsC8TADYWZ072QxygV24hqJevbruWO4C65p96nVZzyyBgA3q17fBdibozss38M7LrG/v3jjFJyRox85d2rZ9h9q1a+vOzdS0SRNFR1fXsmXLFRFRXvXq1rWZ9PKbhdAw66rvbL9undpuSSazryZA0eyTl9mm2XZ2TNubc9D/qr5+QXne/TUBfIZpm9feeMsvEyGAgkEgHwAAAAAAAAAAAAAAQAm0cvU6rVi1VmvXb8p12L1nr7vU8fEGfvkG7ZnMcKb72oJWvXp1ZxuR7lTOAut698kEpTVq1spvMF3m5lVCQoLN+pcbEyT38otDbQCh6QLXbC8/QXHewLpQma58c8qaZ4IRTVCi6VbYty1atu2oL778yq3lyfjn7VbYzDddE/tm/gOQfwTyAQAAAAAAAAAAAAAAlEA1a0TrriGD9Mi9t+c6XHbJBe5SBc8EkJlAslCYYDsTdFfYvPtkuqHdvH5VluGTj0dlyR4YjMm0F+Xsc173+96777Lb8QbFjXh7pDsnNCYzXkEyx2COxexPYFuYweyvlwnSNGWL5/9mMxfefufd+cqmCMAfgXwAAAAAAAAAAAAAAAAlSNmwMPt6cfdzdEb7tmoR0zTXoXbNaLtMYTGBZ8G6zzXZ3H6fv8Avg5/JbGcy3PkyXcmuWr3GnSoY2e1TMKYb3kCmzNtlrQmEK1XKs5+BNmzcaLPdBet21xz3G/8eZrMD5iWznenWN7D7XC+zXx07tA/a7W52vJkUgx1ndsz5evbpJ5We7snoB+D4EMgHAAAAAAAAAAAAAABQgtStU8u+Tp89z76+8e5HGnLPY37Dpi3blJ6ero2bt2rNug3atbtgutbNzmWX9rCBYvc9+LBf4Nz7oz6yWd0GXT/QTpvgMxOEZjLUeett2LhJ733woR0vSN3PP8++/uvfr/sF0ZngPjP4Ml3w+paZ7nBNWf+r+trsfiaozWStM9n1fLvKNfv+9LPP647bblXTJo3tMY316arWG8iYU9e3wYL2TACg6Z737nsfsNvwMtuePGWqbr1lcI5d6QYydc2xmGMK7OrX7K/3XPiOGyZw0QQwmkBGAMeHQD4AAAAAAAAAAAAAAIASpH3bVrrkgm5qULeOnU5KSrKvvkzZjDm/6+V/v6N/jXhfU3781ZaXCw+3rwXNBIq9/OJQG4DWsXNXNWrWyg4mE937776dkY3P1HvkoQfsuLfehx+N1vBhr6hVyxa2vKCYbZptGy3bdszYp3HjJ6htm9a23OvT0aNsubeOCSz8aer39ni8zLgpM/O89S7uebleGPqM+vXt7daSJv8wNWO+2a4J4vPtujaQ2RcT3GjW1evKfhmBe2YZEyBoyr3rG/fNBH3x6WgbNJhXwfbfDBERERnnZ29cnN/5M9t787XhGfMB5F+p2D1x6e44AAAAAAAAAAAAAADAKcdkpvPlnTYvJtuYmc6o4ymw02mpaUpTupwSpaWlKzU9TUnJqWodk/cgqsI07M3/aO36zKxtxiP33q46tWtp5pzflZySYsvKlg3TeV3P0mmVKtppyGafM1kETdCcb9AeABQ0MvIBAAAAAAAAAAAAAACUcOHhZXXz9deobevMrHYmYO/ynheq7+U97HB5jwsJ4gOAIkIgHwAAAAAAAAAAAAAAQAnWpFEDPfHQ3ep2difd97ebbcBexQoV3LkAgOKAQD4AAAAAAAAAAAAAAIAS7Oq+l6tenVp2vFSpUurf5zLVq1vbTgMAiodSsXvi/Dt6BwAAAAAAAAAAAAAAOIWkp/uHTninzUupUp7pjDqeAjudlpqmNKXLKVFaWrpS09OUlJyq1jGNPXUBAAgRGfkAAAAAAAAAAAAAAAAAAChCBPIBAAAAAAAAAAAAAAAAAFCECOQDAAAAAAAAAAAAAAAAAKAIEcgHAAAAAAAAAAAAAAAAAEARIpAPAAAAAAAAAAAAAAAAAIAiRCAfAAAAAAAAAAAAAAAAAABFqFTsnrh0dxwAAJwClq9aq01btisuPl4JCYlKS8v+VqB06VKKjKyq6GpRatygvtq0inHnAAAAAAAAAAAAlBzp6f7fl3inzUupUp7pjDqeAjudlpqmNKXLKbHfuaSmpykpOVWtYxp76gIAECIC+QAAOEUcPnJEP/w0Uxs2bXFL8q5Zk0a67JLuKl8u3C0BAAAAAAAAAAA4+RHIBwAoagTyAQBwCti6bae+/eEnHT5y1C3Jv9MqVdKVl12ourVruSUAAAAAAAAAAAAnNwL5AABFrbT7CgAASrClK1YXSBCf8efBg1q0dKU7BQAAAAAAAAAAAAAAjleZhx959Dl3HAAAlECr123Qb78vcqcKxr74BEVFVVX1alFuSQFa961e+HCKZuyJVvdWkW4hkGnN+BF6d9I87a7RRW2quYVwHNaGn8dr9Pif9OPMeVpbrpXOrFNGidt26mjFyipvf8KToNmjPtCYH9cqrFV7NYiwC57a4hdo5Ftfa8qqMmpzRh1VcIsBAAAAAAAAwMsk4PPjU2Az9TmvpsQk7DNTqWnpiq7GdxwAgLwhIx8AACXckmWr3DF/MU0bqXTpwE+e/mrWqG670g0mu/Xm5uCeVfr+s0817LURemGYGUZq2Dtj9dWqBLcGgPzYMvlTfbEgVocUqaatGqqKUnVwyTi9NdYZPlugRLceAAAAAAAAAAAAgOKHQD4AAEq4Awf+dMcyNWnUQH0v7+EMPVW6dPDbgQb16mjAX/qof+9L3RJ/wdabs8PaMHm0Xh89TQt3JuhYSpjKVaygimEpOnZor9asJpCv8KQobtkMfTH6PU1c5xahhNmihcuOOa+RumjwIA3s3VfXdopU+SqRquiUVqwZreAhuQbXR7FxaLtmT/pKIz5boDi3CAAAAAAAAAAAAKcGAvkAACjhDh4+4o5l2r5jl2L37FXTxg101RVZg/ka1qur/n0uU5kypTV3wWK31F+w9WYvRRsmfaovlh2QwiLVvvcgPf7oXXr070P04IP36vE7LlP7qDJuXRS8P7Vm3hJt2HNMR90SlDSpzrvMiFR1nx6vwxr30IOP3qsHezVUmFuWFddHsbFziX5eFav9nAgAAAAAAAAAAIBTDoF8AACUcGmpqe5YpqTkZH01/jvt3btPjRvV11/6XJYRzNewfj1PEJ8zPXHyj1qzbqMtDxRsvdnaM0ffrTLZwqJttrA+rSL9gorCqjRXn+4N3SkAAAAAAAAAAAAAAE4tpWL3xKW74wAAoAQa/tYH7lhW4eFlde1VV6hWjWht2bZDC5csc7vbLWWD+NZt2OzWDO7he25zx3K2ZfJ7+mTZMVXpNED3XhTtlmZj3bd6YfxGKeZKPX1VE7dQOrpziSZOnaf1e44pVWEqF1VX3S7toW71K3gqHNqueT/P0cJNcdp31OQmc+rUiNEVV/VQmyqeKr7rfqTLdo39com2Vz5Hdw7ppOpuFX8pSlw1U+Nnr9WueLNdqUz5SHW6epB61tmor4Z9qzWmK9Mhg9QtIwuat7yJrn30SrVwStaMH6Gv1kktrrpD52yboE8WxKpq90G6K2aDRo6ao31Rzj5cU1E/f/aL1hxqkLFcbsecud67dP7+7/TVjC3a7xx6mSoNdek1fXWm2SfvMQeoZrbfJdKd8nVYWxb8rKlztio2ox076MbB56iWp4K0f62+nzRHS3Ye8LRJxWi1vegKXd6qshugadYxQz8v2eLTbk6dHleoj1PHyuVcpDjbmDppnpbvMd0wOwVh5VStQ1/ddVGt7I+7YkN1v+oydatTzm4iOwe3LdDE73/XBrOQs95abS9Tryoz9PH0hMx28e6fOTe+10c+r8/g18AAdd86VuM2BTkfKWv1xWtTtKF8Kw28t4eausXBxM37VO86++7PvS73Be5vgmaP+lQ/xwfMD5C5P8e0fcE0TfZeD+Y81D9TV1zeSQ1Nn71+6+urStO/0nfrDqvZVffq2hj3/TNjlbabtnaUqdJcfW+4TG3ssiEI4X0d0vvAy3Rd+/2Pmr7JXLtmXa30l56n6YfP3Pdhtn8LvNdk5nWvsMpq0+ta9W/l/g3SAW34+Rf9sHxH5r4G/p3Ktr0Gqe50U+5Wy+D+HTHtMHWms997M94Ptc7sr9u65/L3FAAAAAAAAEDI0tP9Qye80+alVCnPdEYdT4GdTktNU5rS5ZQoLS1dqelpSkpOVeuYxp66AACEiIx8AACcwpKSkvXfcd/abnYb1q+r/r1NZr7QgvhCl6DtO0w2vgpq2TJ/QSdH132rEZ/N0JpDkWrWqrnatKqrSge26Oexn2riNk+duOW/aOq6A4qo38SZ31wt6oTr2J5VGjdmmrZ4qmRKWamJXy/Rdk9sUTaOac2k0Xpr0jJtj09V+TpmvU1Uu8JhHT3kVsmjlOXT9MWCWE8QkJ9Y/fy/ac7xZe5QKMfsFTf7f/po3jHVimmiehWl1P1b9P1n7nFXaegs21C1ytuqqlLHrKu5WtYIHuy2ZfKn+uTnjYotU10tzHZjqissPl773fmKX6AP3puihXvKqJHdL6dNtFdLnbb6dMlht85KfeesI6F8XbW066il8kdNnbFZ9j3YuTi6bopGmG3sTFBKuVp2P1rUqKCDx9z1u+xxzzig6t7jPuS0z9dOO+ZwXlM2TdHIsXNsEF+ZKKdtnH1LXv6dvpjnv+68yMu58r8GwtSirScT5b5lGxRnxzxSVq3SBue1XEzzHIP4jPI1mjrbrCVPXFtl1bP70FS1co5n9Mjx+nDeA+NH62PnXP4Z1cCWt6lfQYmb5uiTD7O+r3ZMn6CJ6w5nXN8Hl4zzvH8Onaamdp8aquqhBCWaPwchysv7Osf3gZGyReM+HKefTRBfWKSzT069lFX679cLddCtkq1Dy/SpvSYPq2pjTxs1rXxY+w54DyZBs0ePds7tFu1L8Ryv2deUeHMd+Lw3fPi3Vzlnv5311nEDXctHZ7RZFW3XRGe/p67bq7AabjvUKKO98X966gIAAAAAAAAAAKBEKPPwI48+544DAIASaM7vi9yx4NLS0uxr08aegKL4hETNmPN7RnlOzulypjuWk6PatugPbTpSSS3Oaq8GEW5xduLXasbqBKlac3VvFSmlbNS4sfO0u3In3fm3y9S5RTO1atFSnWsd0LyVsdpxqLK6tYmWSldT54suUNc2Zn4ztTm9sVKX/6Fth/6UGnRSCxPl5F134p8q26Gfbruhh3qcUUfeXFl+tv2ij37ZpdTytdRz8GBd06W5s97m6niGs65qpkKCVsxeq32KUOMzfI/LWx6pNt2a2+xe+1bP04p4Z86BMHX660Ddcvm56lzPWeDITs1ftE1HjiToaK0e+tstV+rS85xlQjzmBHe9R8q11t9sPWf/zqql/QvXaPdR97jr1HSWramjy8w5kBpdcr2u7tpMjSPLenbXj7Pv0xc59Zz133S9ruzgbLdVG3U9vZ4qhZdVmAlW+vw7LUtvov5/u0YX27Z2ttmmnNbO36KdsWlqelZDVU4rrRpnnKdeZ7W058KsIyZllRbsOKzEUnXVLaZyDudiu77/fJa2pZRTvYsG6t5+ndTGns/2znKejHXe9jwS1lyD7+mjbmYfTo/U7qXrte+os856XWQunaz26sevpmvLMed67zVEd/Vq52nXzvW1/48/tMspr9CovefcePcvor46+14j+bw+vecq8BooHR3hOV9/HlTlVt7rKEXLZvyoNYmV1enyC9Q0l+x14ZH1nW1GaIu97urqslsu13kt6isq3JkZuL8Z70f3uq2e/fWRsm6KRs+OU9Uug3Rvn/aec9mmveocWKJlO2N1sPKZalczyV3fUe07VlN9brle117cVW2c98im336yx9ziitt1XTe3XTo3VVS5sgoP8edEaSG8rzOuh5zeB0692F+/0ZStzkmuc77uueNSe67andFRMUfX6PcdR7Oea19b5utb044xPfXwX5zry122RWQ5hTsHE/vzf/V/65x11zhHd97ZS13svp6hzjX2auHqfdq344hzWTrHntH+ge1VVlGNnGOM2O45X5U76LoB5+tM59xUcs7hT787fyeqdNKQWy52yjzr7tiggrNt307KAQAAAAAAABQWk4DPj0+BzdTnvJoSk7DPTKWmpSu6WtAH1QAAZIuMfAAAnOJaxDRVjwvPtYF7O3ftUbWoSF3b7wqVLVvQASKp8uauypNta7XmqPMav0DvDhuhF7zD/1Z51rf/kBKdl0p1akm7lmjqpG/18ahReu21TzXbppE7pqNmeV/lY3TRRfVUyZ0MZsvyjXb9tc65Ul18u+Y8DuVanaOeGV1s+opWt8tbqaq3yUM8Zq+mXc7y6Q60oZrWN69BjjtXp6mqTet2QHPHfavZ6xJkk9tVrCCbsG3/Bq2Md16PbtS4ET779c4MxZr5hw7IJiusWEt1nZJ5P0/RV599qtfeGal35x0wc3TsaJJ9zRB4Lrat0mqz3zW66JpOOT/kqNWhg+q54yrfRC1qe0ZTssvIt3+LtphronwrdWvncx7CaumsDvl8oJLHc5X1Gmios9qaLGwJWrnRzdp2aJUWbXJea3TQOTU8RUVhy2rPe2DfvE8zj8sZvlhmj0yJh/0zwtXq0kPtq2T+3ahSxZNdbs3PX+n7ZbE6aM5LWAVVysOflry8r3N+HxzQhq3mGiyn9t07qKopssJUq10r2djcnDjHYt8a62bo46mrtN1mzwxTpYrmYHzWfbF/17zlY7qpk1nQec+sCMjOGNhe2apc2bO/+5foq/ELtCbec4FXqhhKykUAAAAAAAAAAACcLAjkAwDgFNayeVNdeemFSktL1/8mfK8vx03Slm07VLtWDf21/5UFFMx3miq5wWEbvIFKeeGNyqrTznb9m2W4uKmqynQB+qHeGjtDCzb9qXI1m6pLj/PVIrtMZvUb5tpd6dGjnmClKlWC5ufKl0aNPFkPs6ji7I/vvoZ0zJnCyvufp/yftTC16X2tLmrsHHP8Rv08/lO98toofbFgryegL1VKNq8Vm6hnsP3q3Ul1ndmmq9nX3hunqUu2aH+5aLXsdKF6xmTTjoHnwml32/JVKucYaGlUiXK7IbXCFNAMWXn3v0KkcklyF7o8nqtg10CtLh1Uy3mNXb7WdvF6cN0qbTflbZvn2gaFyXto9ToEOS5nuDTmNE8Fq7KaNvE/x7Uu6q/+7SJV5lCsFk7+Sq+/NlIjp27JvRvbDHl7X+f8PnBOvj2eCqqWn5Nf43zd2LuVqoUd1vYl0/TxOyP18qhftMFGrua07kjVtcGYgYGHWdsrW2HN1f+Gc+zfiH3r5uirUc6235mgeXvcEwQAAAAAAAAA2UhJSdXvC5fq0y/Hadib/7HDuElTlLj/gI4cPapJU37SOx98Yss/++94LVj8R0g9NgEACgeBfAAAnKJMEN8VPS+yQXxfT/xe27bvsh/O/m/iFBvMV6tGdAEF84WpTVtP8FLsnJ892cvyIyVSDVs1V5vAoXGkwnbO03emW8uK7XTjvQM0sPeF6tauoepmm7Aq9GM6dCiPwYcpxzwxPcFkt9kypg/UIHI6ZrdKgStfS92uGaInHhykGy9qrioph7Xh53Eat87nqFLLqXqw/WpVS5UUqxlTTSa3Cjrzujt02zWX6fIurdS0TnYnI5sjOXQoDwFfeXTssLJchkdT3ZGcpWRXL9RzFexwK7bVOY2d1z2rtMK53tYsN/kNG+qcDgUXRHo8UqLqZT0uZ2ga5XswZZT1DFdWm16DnGtpiG7u3UGNyqdo35IJ+mRegjs/F3l+X4fimA4FnvyjQa6HIKq26qG7HrxLD9xwmbrUL6fU+GX6YuwCxbnzpcPaZwP7fCVoxx7zWkFV/YL8grVX9srX6aSBf79Ljw/pr56tKiv10BZN/XKK1hDLBwAAAAAAACAbSUnJevnfb+v90V9o+ux5Wrt+kx2+n/qLnn/1TT35/L804bupWvzHClv+66y5+s9Hn+ufr7+rpGT7s3gAwAlGIB8AACWcya4XqEZ0dV156UVKTU3V/02cbIP4vLzBfJs2b7PBfFc49YIJtt7shLU6X91M97RHN+qrD7/VUrdrSK+U+LWaOH2LOxWgTkNP96l75ul7E9Tj4+CmZVphutn0dukaVs7TBawR73YDm09NW3qCD7fP+FkrsgTnGJGqbjMNJmjLjsz9ilu4RBvc8XwL5ZjzK8fAnwTFerN8hUWqYafLdG0Xk/XumOLi/5SiaqmeaeCjq/RzQDBWyp4lWrjTjB1WoudkqHzGyUjQmlUhBm81bu7J0Ldzjr5flY8MjjmJivJ0e3poleas8mlX57r8eamn698M1aI8XanG79COjCivBM1bGHCdFsi5ClMLG+y6VyvnLdAfTjuWa9dBbQotWjMHPtdH3cYmT2CwANzD2rBkrV+XwVkdVtwe9/yFVVA952/AgB6e99S+nSFeCwX6vnber7b/3MNaMm+tT+DeMa2Zt8qznRwcjN/rBpaGqVKd5up5zYWe6zQ+VvucdTdt4nmfLP3JN7DPubTWzdYC251zQ7Wo4ykLSapPF9TOtmO9b8uoeurS+wp1s931Jigu4LIFAAAAAAAAAK8J30/V1u071SKmie1l5aVnHtGrQ/+hs85srwN/HrRD17PO0L9eeEIvPf2w/nbLDWrWpJE2bt6qid//6K4FhWXE2yP1xFPP6qh/dy4ATnFlHn7k0efccQAAUALt3hNnB19lypRWg3p19f20X/yC+LzS09O1Zv1GVa8WqSOHj2iD86EtUNNGDdS0cQN3KjcRatwiUvtWrtfeQwlas2i+ZsxbooWLlui3WbP084L12l0hRt1bRUrxazVjdYJUrblnOrym6odt1IItB7Rv9VIt3LRbu7Zs1OKZU/X9wgTV7theDSKPaev8zUo8tlOrNu115q/SLz+v04HwVKWmSNVbdVEbE8QTuO4clI6uqbB1K7Vp/z6tmr9QS53t7tiyVnNnOm12Wie1qBahiAOrtGjnMSWsX6oVO/dp0+JfNW1PuKIOHdYRRapNt+Y2cGzf6nlaEe+zH15Hdmr+om06ElFfnc+oo4z8a6Ecc0T2681aHqEjWzxl+zau1Y64zVr1Z021qeOsxM8uff/Of/WDu71VKxdp5h/7lKzKOv28rmp6WmU1jNqrhU4b7t/yh2avitXeHZu1bP6vmjRzvUo1Ndsrp6NbF2ndgWPatmaLdu/epqUzZ2rFwbLOuUjNbPvszkXpaqrtHPti59j3rl2k2cu3aNeubVox/zd9t+M0dYtxrqOQjztQpGp623Wt264blmjytBVKr1pOBw8lq0Kj9upcz2mXiPLav3y5dhzbrzULTZtt04IfZ2t3eBWnnvOhOi/XZw7nyqt0dIT2L1yjdVtjdUDl1Lb7xXLeMo7DWvjZu/pwSqyqdmmpWtn+DCdBK2avtUFl3uvOytLOR7Vt0R/adMR5T57h2bfsro+OZzR13gNO3f3Ouhcu08bYPdq0foV++e4X/b6vhs6012yw9RkHtXjsaH22yHONrFq7QtPnbdGRNOdvR5cL1a5mUu7HVT6093Wo10P1mmW01nm/7Y9fr3lLnOtq9yb9/uOvWpRWVeWd92xy4PvQx4E/xumtr/5w2maX1q1dr8WzF2qDOZjGnXR5m2hVrR+p/X+s0e5E5zqZZ9pwl/N341d9N3+P8/6poDa9+6hrNROZmV17uUod0ArzN8E95m1/xKp81EaN+XSG2/7rnffbfC2OS5aqtNQF5zV03p0AAAAAAAAAClupUu6Il0+B+U4l3Xk1Jc6oM56u1LR0RVfzefZ9gpl9Mtn1TK9Lzzx6n+2lqVLFCqoQEaHKp52m2XMX2Hq33HCtTepQqWJF1aldU53POF0/TZ+jXbG7denF3W2dUJnAtOeef0ldz+6iqEj/YzfBas8894JWrFylLmd1dkuLTkJCou6462498PBjemPEOxlD6dKlC2X/vNsr5Vw3LVu2sGXzfp+vgwcPqfv55yksrCh+2Q+gOCIjHwAAJVy7Ni3sBwNf5ldWY8b+X9AgPi+TmW/C9z9q6i+z3JJMZn3t27Zyp0JUsbn63zFEN17URLUqOh9IUo7ZbmsPqYKq1WmnPt3quhWzqt7lGt3Tu5WznHRo50atWLVWm49FqsVFF6q9yfRXsZ2uuaadapUPs/NXb5XaX9dX3Y6rZ9JIdRs8WDd2b6hq5aX9drtbtdcEg9lUbVKti/qrf7tIlVGK9m3aqM0pTfXX67pkBlEdh1yPOY9a9OqrM01XqCkJ2rBqhw6FlXHn+IpUmxjnw/Uez/ZWrIuTajRRzxsGqKebTax8zJW6a8A5ahpVTorfYuutjy+n2h0uU0/TPaxzPs+8ytlWjXIqcyhWa9Ztdy7C/hrYJfSTUb3LAN3r3cZ+Zx12G1J09Glujfyr3qW/bnbOaZWwFM+1si1VzXoN0FWtAjs6jVbP6y5z2tpts3U7lBJzhQZ1y/rgpWDOVUOd1dYNyarSSmfZtjS2a4PJdNi4eaFm6At+fTjvgRsGO9d4tCrqsLavc64JZ97RKOeauLR1Ltf5aaoXU0tVD+/wXEvOcgcr19KZvQdrYDvT1iEcV0G/r6M6adANznVVJUyp9tp0zmmTS3R7n5jMjH/ZqFqnqepVPqzN9lic83vYOT7nmr/nmlaeZcMaqs8dTlt1qKUqMm24Vmt2JqmS87etvymPCby+suHs47U9G8r8iTTHvD7eE/zawrmOdtn2d9a7x/nbE3O+br7pfE82SAAAAAAAAAAIkLj/gI4cParaNWsoPLysW+qRnJLZbe7Ro/49zZQrV041o6vZ75EOHc5brzmDrh+o6OjqWrZsuVuSafmKldq+Y4etU9RMwGHHzl117913afP6VRnDT1O/V4UKx/XF0gljjsEMAEqeUrF74kxwOAAAKMF+mfmbFi7J+sEpv87s0FYXntfVnQJOfnHzPtW70xNUrfsg3dWlaH4luf3n0fp4wQHVumiIbuvkPizYNk3Dxq5SvV53aWC7QozkO9FK6nEBAAAAAAAAOGmZLHa+vNPmxeRLsJn3vHU8BXY6LTVNaUq3GfnS0tKVmp6mpORUtY7J+MX2CWcC+R5+6iU1b9ZYj973N7fU49spP+mb76ba8av79tJll1xgx71eeW2kNmzaotdfeUanVarolobmmwmTNO6bCXrzteGKjKxqy0w2vudffEVnde6kfn1727KiEmz/iooJxIuN3a1nnnpc5cvn9nNzf94gPhOMCKBkISMfAACngHPP7uR82KrkTh2fSs6HNrM+AAXo6CrNWHDAGamnM1pl/uIvbmesjqmh2rQqWcFuJfW4AAAAAAAAAKA4qFL5NEWUL68dO2N15MhRW5acnKJtO3bph59m2Glj8rTp2u6Uee1LSNR2ZxnTDW9eg/gM002sMX3GTPtqeLPxeecVlQ0bN+m9Dz60wW9FHcQHANkhkA8AgFNA2bJlddPAv6hZk0ZuSf40bdxQNw+82q4PwPGLW/Ctvhj/lV4bOU0bnOla3S/UmT7PRqp3GaSnH+2r9iUs3q2kHhcAAAAAAAAAFAelSpVSmTKldejwEd33j6F69Y139eCTL2joP9+wXe6aXpfMYLrPfc4pu/fR52ydfzz7Tx07dsxZtoy7prwxAXL9+/W1We8SEhJtNr5x4yfYMt/gOZMZr1GzVhnDjTcPsfW9FixcpF5X9rPBd77MtCk3873TgwYP0YqVq/TEU8/adZl1B2O6/O3Yob3atmntluTM7Lt3nd4hsDtb7/bNq5nnW9e7j4Y5NnOM2e2bV27bNOs0Za+98ZYdzHhg2wE4uRHIBwDAKaJ8uXD1u6KHel1ygVo2b6pq1SJVurRJ9J49M9/UaxHTVJdd0l1XXdlT5Zz1ACggqQnasC5WR8Oi1b73YN1WRN36AgAAAAAAAABKhpSUVI0c9akOHjpss/KVL1dO6zZstpn5ateqoTtvvUHXX9vPDnfcfL1q1YzW4SNHbJ3y5cvZYf+BP+06UlNT3bWGzpt5b8PGjVmy8XkD1Uyg3+L5v2nz+lV26HTmGRo4aLANiMuPd9/7QLfeMtiuK1j3vWa7v89foFq1aobUja3Zj6uuvs7W9+6j2V8TSGf236zP13PPv6Rzup6dUfeNfw/T1X+93i+YLzehbNO0kyl/8P577GDGP/l4FBkGgRKkVOyeOP+O3gEAAAAAAAAAAAAAAE4h6en+oRPeafNSqpRnOqOOp8BOp6WmKU3pMqkT0tLSlZqepqTkVLWOaeype4J9PeF7Tflxuh03iR0evud2Ox6qYW/+R2vXewLqLu95ofr3vsyO54XJPPfTz7/a8YsvuiAjuM4EpZkMc2++Ntwv+MwEqT3/4is2iM10fWvqPf3s83p7xOtq2iSzHU2w2933PqAXhj5jg9q803fcdmvQAD6vwPXnxpsFL7BuXrZv1hEbu1vPPPW4DaK878GHbWZCbz3f+Sa4MNRtGtnVBXDyIyMfAAAAAAAAAAAAAABACTBj9u/uWFYfffaV5i/6w52SM77UlmVnxux57ljemAx8+w/st4M3G58x57e5NhgtMIOcCWQ7q3MnG8CXn25i69Wr644dP7N9sx8mw16gunVq2+55zXF4Va9eXe3atXWnMjWoX99mIzRBfLnJ6zYBlFwE8gEAAAAAAAAAAAAAAJQApptcL28CQSM+IVFz5i3U9NmZAWHTZ8+zZWZeMKZ73vyIiCivenXr+gXtmax4JgNdQTOBdJGRke5UcCZQ0GTjM9sP7BY3UHxCgvbujXOnToyi2CaA4olAPgAAAAAAAAAAAAAAgBLMdPvreU2zr4Z33DuvMHmD6UJhAvNMgF5BMtnuFi9Zqh07d7klwUU5246OLphtm2BGE9SYm4LcJoCTG4F8AAAAAAAAAAAAAAAAJUDrljHumFSqlDviiKxaWdWiIhXTtLFbIjtuysy8YJo3y6xbEEx3s8G6zzVZ8n6fv8Avg19cXJxTL8GOey1btlyrVq9xp/KmbZvWtovaDz8anWNWPm82wWBd2ZogQBMM6NsFrtlPs1++vMdjAhdNAGNu8rpNACUXgXwAAAAAAAAAAAAAAAAlwG03DVCDenXs+PadsVqybKXS09NVpkwZvTr0H7rqykvtPMOMmzIzz2TnW7R0uXbs9HR/W6d2Td0xeKAdLyiXXdrDBqzd9+DDfsF874/6SNt37NCg6z3bq1untg26G/H2yIx6GzZu0nsffGjH88ME1D3y0AN2O7ffeXeWYEITYGi2Z+rdestgTZ4y1U57mfpDX3hJvS7raQMOfZn9MvvnZY7HBN9dcXkvtyRned1mdgGRAE5+BPIBAAAAAAAAAAAAAACUAKdVqqgnHrpbvXtdoiNHjurt98fooSdf1Mef/0+/L1yq7Tt26VhSkg4fOaJtzvhv8xfpw0/+q/v/8bxGjvpUR48d0+U9LtTTj9yrKlWCZ+rLLxOw9vKLQ21QWsfOXdWoWSs7xMbu1vvvvp2Rjc8bdGd465lMesOHvaJWLVvY8vww6//k41Hq36+v3/bNcPVfr8/Iete0SWN98eloGyznnW/qm+XuvfsuW8fLdAH8wtBnbMCdt65Zzixv1hOqvGyz+/nn2Vcz/8abhxDQB5QgpWL3xBV+Z+cAAAAAAAAAAAAAAADFlMla58s7bV5MF7VmOqOOp8BOp6WmKU3pMr3YpqWlKzU9TUnJqWodU7Dd0ubH/v0HNO3XWZq/6A/ti/fvpjZQeNmyOr/bWep1yQUFHsBXUpksfM89/5Kee+bJPAXtAUB2COQDAAAAAAAAAAAAAACntJIYyOdr9569WrlmvXbF7rFBfaWcY6gWFanq1SIVXb2aWsY0Vfny5dzaCAWBfAAKGoF8AAAAAAAAAAAAAADglFbSA/lQ8AjkA1DQSruvAAAAAAAAAAAAAAAAAACgCJCRDwAAAAAAAAAAAAAAnNLIyAcAKGpk5AMAAAAAAAAAAAAAAAAAoAgRyAcAAAAAAAAAAAAAAAAAQBEikA8AAAAAAAAAAAAAAAAAgCJEIB8AAAAAAAAAAAAAAAAAAEWIQD4AAAAAAAAAAAAAAAAAAIoQgXwAAAAAAAAAAAAAAAAAABQhAvkAAAAAAAAAAAAAAAAAAChCBPIBAAAAAAAAAAAAAAAAAFCECOQDAAAAAAAAAAAAAAAAAKAIEcgHAAAAAAAAAAAAAAAAAEARKhW7Jy7dHQcAAKeAuIT9Onj4mFJTU1WmTBklJ6e4cwAAAAAAAAAAQEEJL1tWySkpCitTWqdVqqBqVU9z56A4Sk/3D53wTpuXUqU80xl1PAV2Oi01TWlKl1OitLR0paanKSk5Va1jGnvqAgAQIgL5AAA4hWzZuVelnQ+XFSLKKbxsmMLDy7pzAAAAAAAAAABAQUtOSlFScooOHTmq1LQ0Napbw52D4oZAPgBAUaNrXQAAThEmiK9CRHnVqF5VlSpGEMQHAAAAAAAAAEAhCysbpgoVyiu6WlX7I/vNO/a4cwAAAPwRyAcAwCnABPFVjCinypUi3BIAAAAAAAAAAHAiVa5U0QbzbdlJMB8AAMiKQD4AAEq4fQl/qkzp0jqtUgW3BAAAAAAAAAAAFAUTzFe6VGnFJex3SwAAADwI5AMAoIT78/ARRZQPd6cAAAAAAAAAAEBRiogop4OHj7pTAAAAHgTyAQBQwqWmpiq8bJg7BQAAAAAAAAAAilJ4WJhSUtPcKQAAAA8C+QAAKOFKly6t8PCy7hQAAAAAAAAAAChK5pl9mdJ8VQ8AAPyVit0Tl+6OAwCAEmjd5p1qULeGOwUAAAAAAAAAAE6U9Gy+jd+6c7eaN6rrTqE4SA84Wd5p81KqlGc6o46nwE6npaYpTelySpSWlq7U9DQlJaeqdUxjT90TbOeu3Rr9xdfauHmrW5I/TRs31M3XX6NaNaPdEgBAYSPMHwAAAAAAAAAAAAAAoAR4+/0xxx3EZ2zYtEXvjPrEnQIAnAhk5AMAoIQjIx8AAAAAAAAAAEXDm8AtEBn5ip+SkpFvyD2PqfJplTT8xSdVOp9dOKelpenhp17SgT8PatRbr7qlAIDCRkY+AAAAAAAAAAAAAACAEqJsWFhGEF9KSqp27d5jx71MgJ4ZfJk6pq5hljXrAACcWATyAQAAAAAAAAAAAAAAlEDffPeDnn7x337BfK++/q5efeM/7pS0K3aPrfPNd1Pdkrwb8fZI9bqynzZs3OSWZDp69KieeOpZW+dUYI7THK85bgDICwL5AAAAAAAAAAAAAAAASqADBzyZ9w4c+NO+GjYjn9+0Z9y3LK8GXT9Q0dHVtWzZcrck0/IVK7V9xw5bB/lnAgRPlWBI4FRFIB8AAAAAAAAAAAAAAADyLTKyqvr366tx30xQQkKiW+rJxjdu/AQ7z9Q5Fdx79116+cWhKl++vFsCAKEhkA8AAAAAAAAAAAAAAADHpfv559nX6TNm2lfDm43POw8AkD0C+QAAAAAAAAAAAAAAAHBcArPyZZeN75sJk9SoWauM4cabh/hl8VuwcJF6XdlPGzZucks8zLQpN/O904MGD9GKlav0xFPP2nWZdQfjrWteTfe0vtv3rs8w+2H2x5R56/l2Z2vKfZcNtp+mvtkfc/xe3vV6lws8Zq9gbfPLr9Pt+GtvvGWHwOUDlwncNoCTB4F8AAAAAAAAAAAAAAAAp4iYpo3sUBi8mfc2bNyYJRufCS4zQWYm0G/x/N+0ef0qO3Q68wwNHDQ4S0BcqN597wPdestgu65+fXu7pcE99/xLOqfr2RnbfuPfw3T1X6/3C+YzRn/yWUY901WuYQL0nn72ef009fuM5e+47VZd3PPyLMv7Msdljs8ENHqXM8d834MP+wXzmfW/98GHfuvvdWlPdWjf3o4/eP89djDjn3w8ygZHmiA+3/ZcvXyx2rZt464RwMmGQD4AAAAAAAAAAAAAAIBTxL1/u9kOhcGblW/MJ5/bwTcbnzew783Xhvtl6Lt9yC3q2KG9vvt+slsSuri4OF1y0YVq2qSxW5I9U/cvV/W1QXReJvDPBMeZzIG+WeyaxzTzq2eC8eYvWKS3R7zut63slvdljssc32WX9nBLpEHXD7Sv3m6ITSDg5ClTs6x/wHXX+rVVoK3bttn99NYpX768BjrLmFcAJx8C+QAAAAAAAAAAAAAAAEqg8PCy7mu4fT0RTAa+/Qf228Gbjc+Y89tcv6AzLxN0dlbnTjaYLVh3s7mpV6+uO5az6tWrq127tu5Upgb169sAwyNHMgPxTJmvZcuWq76znbp1arslmUzmvsVLlmrHzl1uSSZzPOa4+l/V1y+4LiKivOrVrWsD8QzTNibYL9j6c2L203S3m12XwgBOLgTyAQAAAAAAAAAAAAAAlECXXdJd11/bTw3rhxbsVhC8QWq+QXsmW11s7G47XpBMcF5kZKQ7VXACgwO9AXd5FZ+QoL1742z3vY2atcoYWrbtqC++/MrW8bZNrVo185xJz2QE/Pq/n+v+hx616zVdF2eXGRBA8UcgHwAAAAAAAAAAAAAAQAlUvVqULjyvq0qXLtrwEBOgZgLVQmEC80yA3olkAg9NAGJ2AjP0hSrKOZbo6Oo22G7z+lVZhnvvvitPbROMCZg061o8/zebWfD2O+/OV2ZDAEWPQD4AAAAAAAAAAAAAAIBTVK0a0apUqaKaNm7glhQOEwwXrPtck0Hu9/kL/DL4xcXFOfUS7LiX6d521eo17lTemXWadfjybju3bHgmQ1923efm1C2uNzuhqZOT7NomL0zbPfv0k0pP92QCBHDyIZAPAAAAAAAAAAAAAADgFFWlSmW98coz6n7u2W5J4bjs0h42qO2+Bx/2C1h7f9RHNpPcoOsH2mkTEGcC40a8PTKj3oaNm/TeBx/a8eNh1mHW5WW2bQL0rri8l1sSnAky7HVZT9197wN+y38zYZImT5mqW28ZHDQQ0JT1v6qvXnvjLVvX19gvv8o4vuzaxrdOsGA/3/mGCVQsVcqTCRDAyYdAPgAAAAAAAAAAAAAAABQqE9T28otDbVBcx85d1ahZKzvExu7W++++nZGNz9R75KEH7Li33ocfjdbwYa+oVcsWtjw/THe9Lwx9RkNfeClj2yYw7otPR6tpk8ZureyZbnDvuO1WXdzz8ozlx30zIdflzfH+NPV7G0ToXc4MERERfsccrG32xsVl1Ol+/nn21cy/8eYhNoDPzPetb/bnzdeGZywD4ORSKnZPXLo7DgAASqB1m3eqQd0a7lTBOHLkiObPm6vt27frzz//dEuzd9ppp6le/frqfFYX+6EEAAAAAAAAAIBTgeniMpitO3ereaO67hSKg/SAk+WdNi8mw5mZzqjjKbDTaalpSlO6nBKlpaUrNT1NScmpah2Te2BYYbjt3n+oapXK+tcLT7gl+fPI0y8rcf8BfTDin27Jyc1k0Xvu+Zf03DNPhhS0dzxMJkHDBP4BQF4QyAcAQAlXGIF8P/84TTt27FCHDh1Uq1YttzR7sbGxWrJkieo3aKALLrzILQUAAAAAAAAAoGTzxn0FIpCv+CkpgXz/fP1drd+4Wc2aNFTp0vnrpDEtLc1ZxxZnHY30jwfudEtPbicqkO/o0aN6/sVXdFbnTurXt7dbCgChoWtdAACQZyaIr3379urUqZPq1auX62Dqmfo7tm931wAUf+smjtSw0YsV704XC+sna9jrYzWvWO3USYB2AwAAxUjgfWb8/LHOvcpkrXOnT2rxizWK+6582KRxr4/UuPXu5HEqUdcUAI8T+feVv+UAcNK7oueFatigng3EW7t+U74Gs6xZh1kX8mb5ipVavGSp2rVr65YAQOjIyAcAQAlXGBn53nt3pK666irVr1/fLcndtm3bNH78eN1xZwlLI560V4unjtV338zXkv3JUoU6uuDCq3XVwHNUN9ytk6ND2jFror6d5iy/cqf2OiVVqzRT5wsu15X9nHVU8tQqKcwXSqNmJbhTjqa99Ggf/1++mS82x29wJ3w0632X+jdzJ0xg1qRN7oSH3/xQBFmH4V2P3Y/4rhoyuKOi3HlFzu5zorrfNEBdCmynEjRv9FhNd05L7m1ovmCcrPVqrKse6KUYt7TYK5R2AwAAhS7Y/VpkMbs/y4fA+0zPPXLVE3R/5b33iyyceyMT/DFmtdqdUvddnnvk+HMHaEjnSLcsrzzrUF4/02TjxF5TeZTN57Co42q/rIp1GxQrmZ8H/RXO3wjOS068n7cDeJ+bnMi/ryX2b3kh/hto2+w3RRXQ3/FTS7Brv5DuU4qQN4FbIDLyFT8lJSMfgivMjHzeLHxffPmVWrVsobdHvF7o3fcCKJnIyAcAAPKllPmQmgd5rX9ySNTvw+7RS2OW6FDdzurXo5NitFO/fjdCzw6brj1urWwlbda3T/xN9705QdNW7lRylYZq3bCKtH+9pk0Yoftuf0W/bE92K5/87AP7FS015IG79KgZbuqqqA2TNWxi1i9x7INqbz138H0Qum6ldJXPvCHnRmr9pFAzWJgHhCM1bJL/OrzrOZWtn5VzBsL4+XOzfqkAAABQ4MwX7eZ+zQTi+9+vXRX1m0YVYOayU078Zi1LiFRUZIKWbcgSuZMn5v6+2GWwxknCBGj4vLedz4aa5VxPwT4bFjMl9roP+Aw+5Fxp+hj+1p4oNlOrG8zrex7scxO3DgpAAf4biAJigruDXPtXNXXnFxDuWQB4mcC6T0ePKpQAu/Lly+vlF4dq8/pVmvztNwTxAcg3AvkAAMApbebM2brl1tu1cOEitySP6vXV0A8+0itD79UNtz+sVz54Rv2ipcSlX+v3zW6doEwQ4NMavS5ZVWPMOr7UqFGv6vnh72nU//6joX2bqWryUr3z8hdam+QucrKLPNs/e0pUR/U3gXMbVue5y6eYPv6/3o/qfJm6O6tavzK3L37Ml8KTtd5+SZE1A0BU5wGn7i+nIyMVleCci2yfaiZo3YoERTn1AAAACtO6iSZbjskAnDUTS0wf74846PIvP+Kde+/4pmerf5tIxa/YzBfaKB6O47Nhdsxnu2Cf+RCa0D9j5w3nJSsTYDR+g/k3L0gmN+e9MSSgFwPkX6H+G2jOVbBziBwkaN4s529M015Z2i2mT0nLBgkAABA6AvkAAMApa87s3zTirbd15MhhnXbaaW5pXlTVWYMHqE1Vd9IIb62zzjIje5WcQwBe0vKv9f7SZKlOLz36XMA6nPW2ueFZPdCjrLOayfrqV9Ph7skvqlnjLL8kj4o0B56o+Iynpwl2PKq2X4OEIFJRITzgi58/xfOlMA/Cs4pqqXaRCZpuHqIGs36ubbt2bdxpAACAwhC/WNM3mC7/sw/08ASY5HDfgmxs0q+zEtSstXNf3rRlLj/iAE4se036fTZE0QrtMzaOk/Nv3jjzdzmHf/NQUPg3sPhJ1I6E/DwDBAAAKNnKPPzIo8+54wAAoASKT/xTVSpXdKcKxsIF89WqVStVrlzZLcndgQMHtGrVKnXq3NktKVq//TZXr7/5lsqUKaMnn/yHWjvHUzAOaesvEzVzW1mdfnF/tarmFgfY8P3r+m5dmi645XH1ahzulvoqoxrVyuj3acu1el8dXdCzqSomTterg/6hN9ZGq8fZ4Vr04at65Z/va/Q307R2X2U1bddIlcu4ixuJKzX13Tf15lvv68MvJ2jW7xuVWqe1mtco787PXN8FZyRr9hsvafgbH2v0d3O0p2wLdWhe1dmLQha/XrPXHlWjDu1UL8IUHNWOJcu1p0Y7nVHXFoQoQet/W64/m3TOYbkE/TFtvv7s1Es9Qlh3/Jr5Wn2kvs7oUFuZtU1Gv4/1xS/zNXuuO+ytrm4t/LPUmV/Uv/XVzMw6a8LUync98Ys16j/j9WN28y3TBfBYTfLWmRunGi2k1X7tVRA8bb4lop16NNmnRUsPqkbXGPlfus5xT5ypLXW7qsdp27Voa3m1CqhjugL68Hvvvs7X7ujOapXxxY/nWFY5ZWGz3Ho+7RbYXqvCqit52lh9sTWgbYtVuwEAgMIQv/xXzd5aW92vCLwf8RWhCsnr/e5b7L3IGufeIXpz/u4XfO5t7L3JtBRnuaOa7FsvyH1fVoHrzrpc4H3mkZ3Lg95fFbj1czVpbaSnbSPKK9nZj+mBx2S6uBuzQGEtAu6b3PuwzeYeT57x2VuPOreSzr2hPc71nmUU65yXONV07ruOTPO9P/RvY68s981Z6uV8H1k8JGqVc/xHGuTwGca26zSf4wy8X/asQy06q+aGwHvjZlnXm8t98Qm7pvIjy2dA15HMa8eUZ7yny8x128732sj6PgtsJ8+1tT3LdZfz5xZXlvPlXN+1UjRldDbXvdlslmWCX/PFj/fzYEzA+yr4Z+ysn9287e5+Vg78DGf4/F2psDyP58X3b4/PefLUD2hjW/dXJdtzkvWze9D3UhGz/+b92VH9Lwr8dyoIn/dI7n9fc/53zivbv8EB70fLe41n/L05Odo4Qyj/Bho5vpdzOOZsrtWs75mszztsnWkh3nfk8vffI7TzX/QiFbZ3vhYvPRTS/mV7vbrzg94z7NivVT9Myf5vdzGw/89DqlY19GfsKFqlSrkjXj4F6enpSndeTYkz6oynKzUtXdHVAt7HAADkgkA+AABKOAL5spo/f4GGv/aGypQurUcffVgd2p/uzjl+SWvH6p0x6xUf/VfdeGNLBf+YnqjV307U3N0NdcV1l6txds1YNU17/jddq/fXUrdrO6ja0S2aPWmBdlarqrSfR+nHpA7q1amWtHW9lqxZoLkbonX2+Y1kz/ae6Xrtnn/rm721dP5l56hby4YqE/ubvpkwWQmNLlWnuuGSd33lk5UwbYJ2NDhP3ZqW0Y41G7Vy6XQd8NYrROtmTdNqdVSPrt6HjrH6/Zf12rF1eQ4P5rJaN/FjTTnSVddf0Tj7h9/xqzVl7nZFtT8/6xc1QWQJ5LMPSydrdd1eenRwT3Xr2tkZqmv395M1yefBqXmwOGpWVV31wED1sXWaKWxroqq1cNdjHgp/tUx1e9+lIVe485dM1vglPg9f7bZ+0ZFzB+iev5zv2Vb0en04yWSdiSikQL4YXXJRPe122nx14MN323aHdFaf81QtIfBLQc+DbNP+Q+7so0vsvsZp0qRpPl+Keb6YjN+7Xn+eeYvnuN2H0eYLmC+W1vZrr+Rp4zU9wZkZ5fNlUrFrNwAAUBi2L5zp3B+20rlZvpT2F3Fku2avTVRN94tYe+8Wv0+r1lRXf+89iblX++UX/ej7JXeQ+4Uae6dpvE9AiA2CWrtOi+amqrv3HqVFmFY561qUS5CCyQC9ub17v5PNckUVyGfvvaO6qo+9v8oaDGnlGGS1XREtnPu7urV1hnNsrcKc5f/s6N4DuvVtvXVavXS+Us71uW9bM1NTfO/b3HvI8Wt97wO958L3C/bs7yOLj9wC+ZxjnbhdZ9yZeZym7X78cXnQ41xV4zKfe9k4p95M/+CYEO6LT8ZAPk8Qb1WdcZFnnzPe0wc76OdzNuIAAP/0SURBVB77+cs9FhtkM1/yved33meLJk3Wjz5BL1nbIJTPLc52TaDIj7vULKN9zfnarvja56nPRdlc92afJiWq+0236K9OHc+1bAIzi2H7ZxE8kM9+xt7ZWJf9pV3GMWT57Oa2u+fvW2TwvykO38/9yut5qWsCrpZr8UHfgCZPkOGWo4lK8T13NiiupbOd8vpj9FhNj/L57O7s6+aEqs76fC66Iuf5seGWqHa6JJS/a6H+fQ3h3znDcz4jgl+3gYF89hrfpCizTvvcxZy3k6GNM4X0b2CO7+Vcjtn330n3mgz1eUfI9x0h/P0P9fwXF9VaOPdqc+drjjNkHwjq+TuRr3uG1k2yv2cpJgjkO7kQyAcAOBHoWhcAAJxSTBDfv4a/Zj9QmyC+Mzp28MwoAEnbp+nt5yZrnero+vsvV+6dt1ZVeCV3NKiynqC8QCunS9f+RyOeGqIrB9+rpz54QdfXkRKXjtLstaZComa//67mVO2llz94RjffMEBX3nCT7n7uTl2gZE37ao722BW5tuxUjdve02O3O/Vuf0bD7+vkFDr1Zq/UIU+NQmG+IBm/IVLd+3T06XK3sfo/cJcezRgGqHvkJo1/fazm+XV5Yh7ijdSw1z3D9NoD9Ohg3/UUvHWzflN801561K9bXmd/b+qqqITf9Ot6T8m+XQlS05Y+3eJEqkvGMTr7bbqAc9bTv5ktcJj5/uvwbmtIZ58HPc2c6XML+8FPY13gbCN+1lznOs5k9yfSOaZgDWy73A04j86+XtXUmTVrsXxPW3zU2T7H7Yg3Xec5y97k242Q0x6De8m3WvFvNwAAUCwkVFV3v3vCrPdqnvuarurvc78Q08fce2zS9Pnmm3WvgHuUqI7q7tzfxK/Y7Hd/Eyiq8wD/+x3vcrsS3YKisknLTJfFrTPvZT1dmTrlbtsUJBPs4Xffdq6zXd9uDO09ZGNd9YB/d5Ixfcz9f9Zuk7PcRwYwPwDyfjbIbjB1iobn/tb3OKM6n+1ccwnaEXAxmeMMdi+beX8e2n1xbopde62frFHBuhc172m/z1+e4zfXl187Oe+zIb2dehvmBnxu9BHK5xbn84mnm9O7/K63qM691CXYZyFXfILz/g74vGT+rvgdi49ieb1umOy3/WWtzedxn2Own92cJvM9R0679/e5PoP/TXH/9pybzef1XM9LpGLaOOd6g/P3w52t+M1a5vz9aGb+tiZ4/24naN2KBEW1aeSsx9Ndp+/fO7uvvteMj2J5PnKQ29/XkP6dc95z9nnMTQP8ru2g161PEF/m++5ka+PQ/g3M+b2ct2MO/XmHV273HXl4LhLSfU6moj0/nueA5j0fP2us3daowP0s4HuG7BT9dQoAAOBBIB8AACgxFi9ZqltuvV2zZ//mlvj7/ff5Gjb8NfvruIcfeqBAg/gOLRmjFx/9UHOS66jHI4/rquZl3Tk5SZaS3NGgkoMH0kVfrQs6+IT4hceo2xUNnZFkrd2ZKNOl7rylzuTeyXri+ut09TXucPMI/Wrqb9kpv68RG/ZRz7aZ+1uxeWfZvImHDue8e/mWYIPwPF/U+D80zso85Az2YM6UZwb89dcU+0Aty8O+ApP1oW+GqEZqFymtX+nZv2q1nYkNk4Pvi/3CIVLdzYN2X1FV7ZcWni8hst9WVGRVd6zwZH2Y7e5PNl+8rDPH3fTsLOfRtkNCrPa500ZUbf/9j9+wWvFyjj3Liquqru+z8JOg3QAAQFEIuI/w+zGFK9j9Qpb7Gs+9h1+wXZAfMQS7vwnOc7/r/dJ3vLNNxSfmGABY2OLnz9V6NVY73y+2A+5jC06k2jX1vZlzRNVy2jwzcM1zDxnkfDnLZgnacQTeRwbqdrYnO092bOYkp06RMlmS3Gti2OuTnfPhvS4zZX8v61w/pu1Cui/OXdG3l/P5bkzme8STAcs/eM6KrOWfPco9/izXl9GspQ2OXLYheBuE8rnF8/kk4H0SAnuOEn7TqImhvZeK5fXatJfPj+mcvwuTzI8UM9m2ieyqCwLaxu/6dAOP/H7QtX511r89PkI5L57PqO42HHZfnLILnDqZQU6eIKuoSHNteP6mr58U+IPA4Irl+chWbn9fQ/t3zrZ7dj/W82X+bmUJ4jNOrjYO9d/AnN/LeTvmkJ93eOV235GX5yKh3Of4KA7vgZg+nud7GQF9PuegoO8ZslMc2gEAAMAgkA8AAJQYFStU0JEjh/XGmyNs0J6vBQsW6l//ft3mtX/wgft01lkF9+Blz6+v6L6XJmulmmnwv17VHWdFu3OyU1FVa5jXlVq8Noecd9t3aK15bd9IfmusU1WBj6TKhvuWJJsQQalhLz367DMammXoobq2nqtquPzCDgu1N91NGvf6WPeXtEG+qAkq0vPgM4cvP03mE/9MFUHk8cstP3n44tXsy6O9G2f8knjYaJ8vMeJjnfGAL63s4PkizyriL3kDv3yxD7yDfGHjkeD5MiUge4MZTKBmIM+XKpls9sLAL+eCORnaDQAAFIhQg+U8WXNCuI/w5d4vrJ8UeE9h7k89VY6X6UbPrG9ZG+ee0P3RiflSumh5MlWZe/HxwY47pyxmhcK9h8yDwPvIYLL7Ar7ov3g3n4Gc9h6zWu1u8v4YKbuMTLkI5b44REXbXibzlLctzJDND7zcz3AZ7PHnR2ifW0L+fBKomfPZ22T/zFi/fxBcMMX3evVmDHP+XvgE0ti2MQFOAe1nMrX5ijHBqBnZ4bwZxIIF4Bghfp60AVfeIE3P3zMT9GoD/Lzb8gsY9Pzw76qmme+V3H70VzTnI/dnHXkW0r9zbrsHvr+ycNpvUtbsbh4nSxsbefg3MMf3ct6OOd9/T7KTh+ci+bnPKbrz488G9NkMq5M1zh5Y4dwzZKe4tAMAADi1EcgHAADyLCIiQgl5DIYy9c1yhal58xg9/o/HVKpUKQ3/9+tatGixLV+0eImd9gbxde16ti0vCId+H6En3lmqxDqXaOjIF3Vlo1Ay8ZVVzDmX2GC8X//3o/wfe3sla8X3n2ilM9bhrNbyewSVbP/3s3ezqemsOcy+eByuqui2rdUmy1AneJe9hc1moJhsg8KGBHSHURD8MgEE1VjtzC97c+kOLahcH3AHMA9/vV/Q2S873Ie/9pfygV9aZQ72F+553VYhyPzyZZN+neXtnigY94uHjOwNgUMBneeTpN0AAMDxC941YyDfLhRDY7/Ude8XTLeZwe4pHvXrwjMfMroqdO9PigubxSeb4zYBC057ZmQxs/ddhc29hywEgV/AF4cv3tdN9H4Gyi0beU6ca9csG8p9cR4Ux/bKUb6vz9A+t9hA4vyK6uicY7Muk9HOBAzlnrWr+LZ/Y11wrtMWPgFOtm3sdRzYdp5jzri2fTMjZpdBLEOonyc99exnebtON2DPDfAzmeiCZezyZvjK+KFdLhkTi+J8+Ac+FoCQ/p0L9W+w+VvjPtPw/YGij5OhjfP0b6CRy3s5r8dcYPLwXCS/9zlFcn6CaXa2JzOozZZYePcM2Sk27QAAAE5ZBPIBAIA8q1e/vpYvX67Vq1dr+/btuQ6mnqnfoKHp/rVwnX56Oz30wH22+9xXhw3XV//7Wq+++i+lpKTo7rvuKtAgPmmzfhk9R4lqrweeHKI2eei5IbxtX93cvqy0c6yGDZumTQfdGVaiVnw2VK9PS5bq9NX1FwRk+Fs5QbPX+oTy7Zmub6ea6Wbq2NzZiaoN1cYssvdrjf91r62SYc8cLd7ujp9g62Z5fsk9ZHDwLlqz5+kaJLcvam1WFu8XXNmIOberohJ+07g8d8HrdqHi0+VKBu9D4SDdYJkvQPrbB8NugKF9qJp9d08e2W/LfjlxItiHps5+TvR0P9M9hy8E7Rc6Ad2YhCrbLy3cNs1wsrQbAAA4ft7swAHdOvqKnz9FJsNzlnuUYPckNktTpOrae8Qc7ukKjedetijl2F2o297+P3bJ7ALXy7OOgpP9PaSbOSnbDF65834BX6y/eLfXZVbZ3st6szqFdF+cNydFe3nldPzuez1ot7uOUD63eLrVDPL5JE+8Ge2yvo+CKa7tH9X5MvuZcPpETwBX6G3jCQI0f1PWmb8buXTfGurnSc9nx1jPOjP+PngCfNavdPbR2a/gn8kdzXrZDP6hZL474efD/eztbefjF9q/c6F/jm+s/t4fKGYTzGcV4zbO+7+BXrm8l3M55pCfd4TqOJ+LhOqEvwdy4O0itzDvGbJTnNoBAACcegjkAwAAeXZ2124qXbqMpk6dqnHjxuU6mHplyoSpy9ld3TUUri5nd9H9992r1NRUffXV1/b1zjvvUPcLznNrFJDNS+WJk1unb4c9pmceDhi+zemRaLS6PfqMrm9YVnvnf6hHbr5Od95nlrtDQ675m56dsF6JFTrp0ScHqHFgV7cNK2jFS3frtffH6tvRI/TiI+9qTrIU0/cmdbNd9jZSz/vNL9eTNeedB3Xvi6P07Wdj9dnrT+nOv4/Q5sN2LSeY5wvMZufmEsQXvzggyC5B80abbkJ8vqg1mf0Cf/G8frLteqdZ71wywJlfVufwq2nTFZqn645AkerSx+1exW+5TRo35jfFN+2V0U2wybjhe+Y9D42rugGG7pcazvb9t+McZ8aDe2dbJmOBsy2/blpshhd3vNB59sF2Q5zLA9Gozmd7ul0KfKjv7G/wtvTh/dJijG+bmbZw2tSd8jhZ2g0AABSEmD7ZZ7Qy92ujZslmCcp6j+Is43uvZu4bTbePTc92s0Vlc7/gCLyHyxebLcf/S3abjc0dLxqeDMs53dP5BRvYDFfOLZRvIKW5R/ft5tJ1PEFPniAhc479233dRNP9X2NddZzZEe0X8MXki3cbgODXTs5niIDuSDNkdCXoET9/rL2XzfwcFcp9cd4Vp/bKWWP1dz/P+b2H3fd61LmXZZv1MKTPLc16ud1m+v/tiZ8/OWM62HXvO9/yCyDOXfFsf/fvZcJv+tW0T9DPbo4sn+GdNnL+3pgf0I03n9FzeQYQ8udJm+kvUcvcbnW97N+v+NWZWfos5z3m97ndDfaxgVC5O7Hnw2lnEyxmAuUC/h5aTjvkLeNbaP/OZf83OMg+mPed+YGiXzDfydLGefs3MOf3ch6POeTnHaE6jucijrzc55zI8zMuyHXvvRfwPgcsiHuG/NyznLh2AAAA8Fcqdk9cujsOAABKoHWbd6pBXRvddcqZ9uNPev+DD3Xbbbeq5yUXu6UFaO0YXf3kZHciiCte0NeDcwwrcyRq7a8TNPXbOVqyZb8zJUXXaa0OPa7WtVcGdKmbOF2v3vau5re/UyNvL6vv3hil79YdVtUqzdTthiG69oJGfl3mHto8XV99PEG/r9wpE2+YZb0+6/vgqe6Z28qu/Lh4Hs75PWv0ZbrSMQ/ezBcwJjDOLba88zIkaN5o87DOnbRM9yJ56aoq2DqMxrrK7b7HfEk8Pj4wg2DW44g6d4BfF1Z2Ob/Ascx1ZjAP4wO+vDNdn3iDAa3AOqYdWq92yhLzeKy5cdsiKrCdzbHOVd2AbZkvE0fNqhpwTEHa0y/7oqfdFHiMVuCy5lxeJpkHsoH7VKzaDQAAFLog//ZnvTf0sPdg6qUhtefaH3h4Bd6rWUHuOX3r2fudFS2zZJIOfh8UIGCfzb1Ku5X+95WB95khrTe/3P3Jcs/kx73HzWjbgHtec1/XR/YHLFF+6/G9j3Pvx2XadrXaBd53uW3uv3yQe+csGbxzuo8sLgLay5fbpv7HaT4ftNQyZ5n4jOvOe5wDVHdW4L1xkHvYXO6LC/WaOl5233O/N/e+p4O934O9hwOv8fx9bvHwLOtTya9O1us+ZkNA/Tx/Pi1K7vFk+TxoeI814HNybp93gyzndTznxbPtwHW67z+/+kHek9n821GcZLnuXBnXtr3uQ/z7msu/c15Zzqe3nYJtK2Od5vo+WzvGnARtnMd/AwPvIfzfy7lcV8HOQ5Zr26wv6/MOe+5Dve/I5e+/FeL5L3pB2tQI8v43slyvWep51pf7s6ei+Rudns238Vt37lbzRnXdKRQHpqcfX95p81KqlGc6o46nwE6npaYpTelySpSWlq7U9DQlJaeqdUzx/vcHAFD8EMgHAEAJdyoH8pU4hRJgBxRHngesy9oUxwfNAACgOMox6AfAKSe7wBgAKFo87zhVeeO+AhHIV/wQyAcAKGp0rQsAAACgeInfrGUJUlQkD7UBAAAA5N2+XeYDRWjdfALACcPzDgAAAOSCQD4AAAAARWSTxo1e7Nfdiy0zXcA07ZVD1zcAAAAAkI34xZq+QWrWmgw4AIoKzzsAAACQP3StCwBACUfXuiUIXeuixPF0KTM9wZ10RZ1LFzMAACBv6FoXgP07sMEz3qz3XQTKAChCPO+AP29PrIHoWrf4oWtdAEBRI5APAIASjkA+AAAAAAAAAACKhjfuKxCBfMUPgXwAgKJG17oAAAAAAAAAAAAAAAAAABQhAvkAAAAAAAAAAAAAAAAAAChCBPIBAAAAAAAAAAAAAACcIn74abozzHCnAADFBYF8AAAAAAAAAAAAAAAAp4Ct23fqf9987wzf2XEAQPFBIB8AAAAAAAAAAAAAAMApYNykKe6YNP7bH9wxAEBxQCAfAAAAAAAAAAAAAABACbd563YtX7lG1atF2mHZitVk5QOAYoRAPgAAAAAAAAAAAAAAgBJu4vfT7GvPi85XjwvPs+PesuM14u2R6nVlP23YuMktyXT06FE98dSztg4AIHsE8gEAAAAAAAAAAAAAAJQwKSkp2rEzVkuWrdSE76fpjxWrValiBZ3btbPOO+csVawQYedNmvKTfTV1zTL5Mej6gYqOrq5ly5a7JZmWr1ip7Tt22DrF1TcTJtlgQxN0CABFpVTsnrh0dxwAAJRA6zbvVIO6NdwpAAAAAAAAAABwoqRn82381p271bxRXXcKxUF6wMnyTpuXUqU80xl1PAV2Oi01TWlKl1OitLR0paanKSk5Va1jGnvqnmBJScl6f/QXthvdxP0H3NJMfa/oqd6XXWzHJ3w31QbxBYqsWkWNGtTTHTcPVFhYmFuaOxMMN+6bCXrzteGKjKxqy0xg3PMvvqKzOndSv769bVlxZPb99/kL9MxTj6t8+fJuKQCcWGTkAwAAAAAAAAAAAAAAKAHi4uNtdj1vEF+VyqepWZOG6tKpo67u20u9LrnAlhtXXHqRLTPzTB1T10hI3K/Ff6xQ3L4EOx2q7ud7uuudPmOmfTW82fi88wAA2SOQDwAAAAAAAAAAAAAAoASoU6umrul3uR0vWzZMd946SP944C7ddtN1uuySCxQWVsbOM0y2PVNm5pk6pq5ZxjDrqFUz2o6HymTh69+vr83Kl5CQaLPxjRs/wZZ5M/QZJvtdo2atMoYbbx5i63stWLhIva7spw0bN7klHmbalJv53ulBg4doxcpVtltcsy6z7uwEbtcss3LVarvO+x96VF98+ZVatu3ot22zLd9lzODdvmH22+y/KRvx9kg737wagcsGHicABCKQDwAAAAAAAAAAAAAAoIS49OLuGnh1XyUnp+jfb7+vNes2uHOyZ+qYumYZs6xZR354M+9t2LgxSzY+E9hngudMoN/i+b9p8/pVduh05hkaOGhwlsC9UL373ge69ZbBdl3Zdd/r7fbXu93Vyxerbds2atK4kSZ/+43e+PcwDbzuWltupps2aWz3d85vc/321dR7+tnns+zr6E8+0zldz7Z17r37LhvEZ+r9NPX7jGV7XdrTrQ0AwRHIBwAAAAAAAAAAAAAAUIJc1P0cXfeX3jYw7413P9La9dkHya1au16vj/zI1h1wdR+7bH55s/KN+eRzO/hm4/MG9r352nC/DH23D7lFHTu013ffT3ZLQhcXF6dLLrrQBt7lZOu2bTZg0Lvd8uXL28A985odM88E5fnuqwlKjI6uroQE/26Hm8c0s+v32r59hz2munVquyXSAGd7vusCgEAE8gEAAAAAAAAAAAAAAJQwl1xwru0i1wToTf7xV7c0qx9+mqGUlBRde9WVurh7N7c0/0yw2/4D++3gzcZnmOx2vsF0XiZg7qzOnWwWu/x0PVuvXl13LHsN6tfXa2+8lWPXu9nxdulrusft2LmrZsycbQP1fJn1+zL7ZLrqfX/UR24JAOSOQD4AAAAAAAAAAAAAAIASqFbNGva1elSkfQ2mmjuvVs1o+3q8IiLKq17dun5Be6ab2tjY3Xa8IFWvXt3ZRvbH5mW63P36v5/r/ocetQF5potfs085MUGFN948RHff+4DeHvG67R7XdLN7/nlZgx0DgwnNsZtudSdPmWq3Z9aTnyBFAKcWAvkAAAAAAAAAAAAAAABKoJ27PMFz9ep6unhNSkrWz9Pn2MGMG/Xq1LKvO3fF2tfCYLLu1apV053KmQnMMwF6Bc0E13mD8UwXv7ffeXeOwXWffv6FDUgc//WXuXbdG4xZZvK332j18sV2PQMHDbbZ/QAgOwTyAQAAAAAAAAAAAAAAlEA73OC8GtHVNOXH6Xr02Vf0xdcT7GDGTbe6NaM9QXM73KC/wmK6nw3Wfa7JjPf7/AV+Gfzi4uKcegl23GvZsuVatXqNO5V/ZhvPPv2k0tOl+IBt5GbDxo22a928MEGMjzz0gKKddg48JgDwRSAfAAAAAAAAAAAAAABACbRjpyeQ750PPtHXE77XwYOH1KxJIzuY8f99853e/fAzW8dbt7BcdmkPm5nuvgcf9gvme3/URzZD3qDrB9rpunVqq2OH9hrx9siMeiaT3XsffGjH82Psl1/5bdMEBZYqJUW53fKarnEXL1nqtMEuO22YwEPfMrO82adQTJ32k1/2PRMAuHdvXEjdAAM4dRHIBwAAAAAAAAAAAAAAUMKkp6drZ+weO3706DHbhe69f7tZ/3jgTjvcc8dg1XXKjhw9ausUdkY+k5nu5ReH2sx7HTt3VaNmrewQG7tb77/7dkY2Pm8GO8Nb78OPRmv4sFfUqmULW55Xe+Pi/LY57psJevO14RnbbNumtQ0evLjn5ep1ZT8bhNevb2/1uqynLTPLmADE5555Suef180uk5PDhw9nLGeGp599Xm+PeD1fXfQCOHWUit0Tl+6OAwCAEmjd5p1qULeGOwUAAAAAAAAAAE4U03VnMFt37lbzRnXdKRQHJujNl3favJjMbWY6o46nwE6npaYpTelySpSWlq7U9DQlJaeqdUzRB2ylpKToqRf/7Yylq98Vl6pLpw7Orps9zWSOYe6Cxfrm26kqXbqUXnzqYZUpU8adCwA4kQjkAwCghCOQDwAAAAAAAACAouGN+wpEIF/xkxGk5/JOm5eTNZAPAHByIZAPAIASbsPWWOeDY5o7BQAAAAAAAAAATpR0579gSpcqo2YNa7lTKA4I5AMAFDUC+QAAKOHIyAcAAAAAAAAAQNHwxn0FIiNf8UMgHwCgqJV2XwEAQAl20b932WHMnD/dEgAAAAAAAAAAAAAAUFwQyAcAAAAAAAAAAAAAAAAAQBEikA8AAAAAAAAAAAAAAAAAgCJEIB8AAAAAAAAAAAAAAAAAAEWIQD4AAAAAAAAAAAAAAAAAAIoQgXwAAAAAAAAAAAAAAAAAABQhAvkAAAAAAAAAAAAAAAAAAChCBPIBAAAAAAAAAAAAAAAAAFCECOQDAAAAAAAAAAAAAAAAAKAIEcgHAAAAAAAAAAAAAAAAAEARIpAPAAAAAAAAAAAAAAAAAIAiRCAfAAAAAAAAAAAAAAAAAABFiEA+AAAAAAAAAAAAAAAAAACKEIF8AAAAAAAAAAAAAAAAAAAUoVKxe+LS3XEAAFACrdu8U4O/TLXjN3WtpJvOOc2OH48jR45o/ry52r59u/7880+3NHunnXaa6tWvr85ndVFERIRbWjSOpSTp0LHDiqpY1S0BAAAAAAAAAKBwpGfzbfzWnbvVvFFddwrFQXrAyfJOm5dSpTzTGXU8BXY6LTVNaUqXU6K0tHSlpqcpKTlVrWMae+oCABAiAvkAACjhCiOQ7+cfp2nHjh3q0KGDatWq5ZZmLzY2VkuWLFH9Bg10wYUXuaUF70jyUc3cNF+zN85Xg8g6uijmXDWOqufO9QTxPTf1dbWv3UrXdezjlgIAAAAAAAAAUDi8cV+BCOQrfgjkAwAUNbrWBQAAeWaC+Nq3b69OnTqpXr16uQ6mnqm/Y/t2dw2F461ZH2vk7DFaumulJq38US/9OELJqSl2XlJKsp794d9atXudnQYAAAAAAAAAAAAAoLggkA8AAOTZ4cOHQ8rE58vUP3jwoDtV8EzA3qIdy1UpvIIe6n6HOtZpo7hD8Zq7ZbGdN3Ta61q9Z4Ot+9P62Xpq8r/09qyP9fvWJbYMAAAAAAAAAAAAAICiQiAfAADIl1ImbXwe5LV+XpVy/ktNS1PZsHC1q91C0ZWq2/LS7mbTvOnuHXsP7tPy2DX6cd1svfzT2/a18B3SjlmTNXXWTiW5JUUrUbNfvE5XX3Odxq91ixxrR3vKrh5d+JkLk3fuUuJnXyo9xdP1czBm3v4v/qfk7TvcEgAAAAAAAAAAAAAoeUrF7onz7+gdAACUKOs279TgLz2BUjd1raSbzjnNjh+P994dqf79+9tuc0O1fft2jRs3TnfceZdbUvBe+vEtzd+21J3yeKHXw2pXq6WOpSTpuamv2651r+vQR9d26K05mxdo+K/vqU2t5nqp16PuEnm1TuOveVqfu1NZXPGCvh4cI60do6ufnOwUlNX1L32qq5p7ZhcdE8j3N73uNNf1L32ZsT8mkO+J75wR734XooQxY/Xnd5MV0bG9qj9yv0qFlXHneJggvrhhr+vIkj9U+cpeqnrjAHcOAAAAAAAAAJwcfH5j7mfrzt1q3qiuO4XiID3gZHmnzYvJVWCmM+p4Cux0Wmqa0pQuk1cgLS1dqelpSkpOVeuYxp66J9jOXbs1+ouvtXHzVrckf5o2bqibr79GtWpGuyUAgMJGRj4AAFBiPHLB33RJTDc7Hl2pmh698G9qU7OFnS4XFq7nej6gVjU9wWmlnQ/Z5zTqZMf3Hoy3r4WqRowuqCBVbXi52jRyy05xVa7uq/AmjXRk8VLF/esNv8x8Nojv1ddsEF+5mCaq/Je+7hwAAAAAAAAAAJCdt98fc9xBfMaGTVv0zqhP3CkAwIlARj4AAEq4Uykjn7EsdrWenjxcFzY7R/edd4tbmslk5jtw9E8b6Gf0+3iIHf/gmlftdN5lZuTzzWxX/BV9Rj4j7fAR7Xnhn0rasEnl27VV9OMPSelp2vvP13V02XKFN22sGs88rtIR5d0lAAAAAAAAAODk4U3gFoiMfMVPScnIN+Sex1T5tEoa/uKTKl06f7md0tLS9PBTL+nAnwc16q38fn8CAMgrMvIBAIBTisnM5w3iQ9ErXSFCNZ7+h8KbNbGBeyYz396Xh9txk4nPzCOIDwAAAAAAAACA0JUNC8t3EJ9hljXrAACcWATyAQAAnAiJ0/XqNdfp6mte0exEW6DfXxzkTF+nIa/P1yFbyePQ7yM0xNS9a4zWJrmFQR3Sjllj9PbDd3jqXzNI9z48XN+u9V2bI3Glpr7+lO4d6NZ5cYLWJia7M0OwZ7pes8tep8dHr5N3lw5tnqPxwx5z1+scx5DH9PY36/yOJRQZwXxNG9tudo+uWGXHo5/6h50HAAAAAAAAAACKtxFvj1SvK/tpw8ZNbkmmo0eP6omnnrV1iruEhETdePMQfTNhklsCACcOgXwAAABFoqrOun2IOjtjiXPG6pfNnlIlrdPU0XOUqGj1u2ugmoe75Vkka+3op3Xfm5P1606p0Tm91O+cGFXcu0ArdvoE6ZkgvLue1/tz1munqqh1wzqquG6snnhilGbZgMLc7NXs90dpjrPKmCte0NDBMTK7lLR2jF58ZIQ+n283rn5XnKOYinv16/KdGYF+AAAAAAAAAADg1DDo+oGKjq6uZcuWuyWZlq9Yqe07dtg6JZEJUDwZghQBFH8E8gEAABSQz5/0ZKbzHcavdWcGU6O7br6tmTOyU6M/m64EZ2zPr2P0+V6p0RV36tq2ZW21oA4u0S/f7XRGGur2Ye/pqQdu0g0PPKNXxvxHNzTzLndIv49+1wbhVW1/p0Z+8Z6eH/6qU+dTvdlPWrfFrZYtEyz4il5fmmyXf8AN4jPrXfHdZK1zxlrf9KpGvHyvbhh8rx578yN9cIO3TujSDh/R3hdfVdKGTYrocLodzLgpSzty1K0FAAAAAAAAAADyKz09XbPmLtCu2D1uibRz127NmbfQzjtekZFV1b9fX437ZoLNaudlsvGNGz/BzjN1ijuzj598PEr9+vZ2SwDgxCGQDwAA5FlERITzIcyEnYXO1DfLwV+NnkM0uI4zsvRr/TprusaPXi9F99LtA1vnHBAXXtadv1PLV2726c62qurWq+gZTVyqWfPNSDNdf3t31bCFRlnV7XmTrm/oTgaVrD2/DtcwEyxYp5cefdR3+XCFu5vYuWSFdhz0jBuRjerInRUSE8S354V/6ti6DSrfrq2qP/qAHcy4Kdvz/CsE8wEAAAAAAAAAcBxMoN6Ysf+n0Z//TxMnT3NLpf9N+F4fffaVPnHmFUQwX/fzz7Ov02fMtK+GNxufdx4AIHsE8gEAgDyrV7++li9frtWrV2v79u25Dqaeqd+gYY6RY8ctKSVZP6+bY8dX716vbYm77Hh2vl/1i31NPHJAczcvsuPH4/qXvtTX//MfrmruzsxWI/X8e1/FaK8+f/NdTUsuqytuz6lLXVd4B11xXydFK1lzPviHbhp4h14bPUebfILqtGedbGtEd1ajzCg8VwWF5/TDt8Wj9Po7S5Wo9nrgyZsC9qes2vS7VxdUMLGCH+q+mwfp3hfH6PfNmeGEobBBfM+9ZLPvmcC96McfUqmwMnYw46bMzCOYDwAAAAAAAACA/DEBeiZQb9Zv8xVetqwuueBcd450eY8LFRYWppnOvIII5gvMypddNr5vJkxSo2atMoYbbx7il8VvwcJF6nVlP23YuMkt8TDTptzM904PGjxEK1au0hNPPWvXZdadE9MFru+2p077yW7fu5zZD99pw1vmu5zZBzOY8dfeeMsOZtx7LObYvfvkHXLbNwAgkA8AAOTZ2V27qXTpMpo6darGjRuX62DqlSkTpi5nd3XXUDiG/fKuflnvCeTb9ecePfbtyzZIL5iJK6bp/bmf2/Hk1GT985eRWrpzlZ0+0cKr1lHmx9doVa3gjuaixrkP690PXtADV7RXHe3XnO9G6JGbH9T4tcluDVeFCnnKkmdFRyva9tC7UvNW7rVFfmqco7vH/Ecv/72Xzqki7Vw6WcMeuVWPj16nJLdKbv6c8K2SNm9VxJkdMoL4vLzBfBEd29tgvgNfj3fnAAAAAAAAAACAUE37ZZYN1CtXrpweue8ONW2cmXQhpmkjPXLv7XaeqfPT9NnunPzzZt7bsHFjlmx83uA2E+i3eP5v2rx+lR06nXmGBg4anCVwL1TvvveBbr1lsF1Xdl3iercdG7tbq5cvtnXNPnz2xVjNmJn9cZugvPsefNgGI3r39+v/er5fMvttph+8/x47mHHTLW9ERHk9/+IrqlWrZsYyP039XhUqhPgFEIBTFoF8AAAgzypUiFC//v11x513hTz0veqqQu1a91hKkhZs/0OREVX00V//rZ7Nu+tw8hHN3RI8096MjfPs6yu9HtN9591qx6etnWFfT6yd+uWNdzVf0ep3fS/FONOfv/O1NoUaDVc1Rt0GP64RX3yof13fzClwln/je9mPuhXqqLV53bJUm30z9RlJO7VppTseTL2rdfdzZn+SNeedV7IGB1pV1fyCm/TgqE815qUB6uCUrPtuhKZu9szNTcULzlXlPper+kP3+QXxeZmy6o/cr8p9r1TEGR3dUgAAAAAAAAAAEKpSpTyvpb0jAUo55dnNyw9vVr4xn3xuB99sfN7AvjdfG+6Xoe/2IbeoY4f2+u77yW5J6OLi4nTJRReqaZPGbklw3m0/8tADKl++vC0z+/Ds00+qVcsWdjqY+IQEmUSF7dq1dUs8AXxmyM6RI0ftts7perZbIrt/PXtc7E4BQHAE8gEAgBKhlPNfubBw+4nU9wNnxfDguegqlHWDCv3qnvhfQm36ZrjeWSdV7XGrru03UDf0KCvtnKD3v8ols93BzVrr15VtRTVuFuMZTTzsea0Xo7OizcgCjf9iiTJrH9LaL0bpm2CxeT7Cm9+kB/7eXlVNcOBzwzV7jzvDWX7T8s0+63O23jxGjexYopJDDEIMq11bVW+4LmgQn5eZV/X6a1WuTUu3BAAAAAAAAAAAhMp0pXveOWfpyNGjGj7ifW3cvNWdI63dsEnD33rfzjvfqXNx927unONjMvDtP7DfDt5sfMac3+baADjfID7DBNad1bmT7arWt4vdUNWrV9cdy57Zdr26dW22PF9RkZGKjq7uTmVl5puvkoa+8FLI+2a2Ybb19LPP5zvLIIBTE4F8AACgRAgPK6u/duithMOJGvzlg5q6drqaVGugcxqd6dbwd3X7K1S2TFk9/v0/9ebMD20QX+/Wl7hzT5DNE/T+5zudkfa6+doOCldZtbl2iDo7JesmvKvvgmbBc6Vs0fhHbtWd9z2m/2fvPuCrKg//j39DBhmMbAIJmLARkCGIDEVRUFRQqFpFUaxoq7a0VqW/4irOf6mr1NEqVFHroCgKKhQFRUBBEFBANmEkIYSQhBHIzv88556b3JvchASCwfh593V+95znPGeP/Lh+7/M8//IM/evhP2nCE+aXaoE6c0x/uX53lqgLx50vk+Xb+un/0803/1EP3fsn/fnmWzUlpa9u6GFXqlbsBfdq4uWtpMLv9Ox9T+kbO8xXqLQP/s+1vinT9Oazj+ih8U/qA2tO+Blj1LOjqQMAAAAAAAAAAOqbaXHvputG22G+/IICzZ2/0JkjfWSNFxQU2iG+sVYdU7cuuINsnqE907Wt6da2rkVHR1vbiHCmfHNv23R1626Nr6bM/r/80vP28fTq21+J7bvYgcPqmG088dhkDb90mC4adpm9zAcfznXmAkDVCPIBAIAGY3T34Xp0+L0alNRXt/e/Qf/vsj/Lv5Hv/3fnrJad9fcr/6KhHQdby12mf4x6VAnhLZ25P4KCrZr97Nvaao12uOF6DXT/+Cx8sK69oZU1cpwudkPP0DkDzlRMbpq++HSePv1hv8I6DNDtD/9Dj1zhahvPCDvnTj318M0a2iFUOpqmH/YXKn7UQ/rbA8MV69SpXqA6jvuz7u4RaC2/SlMen6EtBWFqdc4A9Y3JVdrKz/TBVz9of1gHDb3ZWu9Tw50QIQAAAAAAAAAAOB24w3xjrr5SV1421CmVRl1xicZcc2WdhviqYsJtJkhXEyaYZwJ6pwt3MG/nto167ukpuvqXN9QomDfht3fay8x69z/6wz0TNfX5F505AOCbX3pGZqkzDgAAGqCtO9M07p1ie/zm/k1084Cm9jgAAAAAAAAAADi1Sqv4r/G70/apY+LxuwPFj6e0wsVyT5sPk3Ez02V1XAX2dElxiUpUKhODKykpVXFpiQoKi3Vmh/r52fv43/1JURHh+usjf3ZKTsyfHnpSB7JzNO0ff3VKas60gPfIY0/awT0TZnMz4bf3P/hQf3/mKa/udSvWN93R/nbC3Xp08kN2q35uZnkTiDPBOFNu6v3lkcf1l4fuV7u21Z/vqrZtWtczwTwT0LvqyhF297m//+O9Gn3Vlfa0L+5AnvvYKk77Yrb/zcpVeuiBP9e6VUAAPx+0yAcAAAAAAAAAAAAAAIBT6tJLhtpd1JqgnAnMub087d9KSU3V2BvG2NPxrVqqV88edkDOXc+E9v71ynR7/EQMPv88+/NvTz9rBwcNs+7jtZJntrvg0/LuiM0yJvzXpnVrp0T2uClz76v5fPudmfa4YbZnQnwn0rUvgJ8XgnwAAAAAAAAAAAAAAAA4pdxd1JrW9Hr17a/E9l3sIT19n15+6fmylvJMvfvuudsed9eb/u/X9NSUJ9Wlcye7vLbMuk1rfCYw2LlbL3udJlD4l4ce0PnnDXRq+fbs3/9Rtq9mfyq21ucOCZp5N90yXjk5BzXvfwvKljHbq9g6IQD4Qte6AAA0cHStCwAAAAAAAABA/XD3xFoRXeuefhpK17q3Tfg/hTdvpr89OskpOTH3PfiEcg4e0itT/59T0jCZ1vNMoM+E7Dy78QWA+kCQDwCABo4gHwAAAAAAAAAA9cOd+6qIIN/pp6EE+f7fsy9p246dat/2DDVqdGKdNJaUlFjr2GWtI1H/d/cdTmnDZLrEffDhR/T81GfVrm39XDMAcCPIBwBAA0eQDwAAAAAAAACA+uHOfVVEkO/001CCfOs2bNIHn3yqXbtTnJITc0abBF112VB179rZKflp274jWZ9/sVjjfzXOKXGV/XbC3fr1bbd6dZULAPWFIB8AAA0cQT4AAAAAAAAAAOqHO/dVEUG+009DCfLBN3cXul8uWeaUuMx69z90qQvgtHFi7agCAAAAAAAAAAAAAAAAPwEREeF6/dVp2rlto9dAiA/A6YQgHwAAAAAAAAAAAAAAAAAA9YggHwAAAAAAAAAAAAAAAAAA9YggHwAAAAAAAAAAAAAAAAAA9YggHwAAAAAAAAAAAAAAAAAA9YggHwAAAAAAAAAAAAAAAAAA9YggHwAAAAAAAAAAAAAAAAAA9cgvPSOz1BkHAAAN0NadaRr3TrE9fnP/Jrp5QFN7HADqSmlpqfILilRQWKjCQvNZJP9GjZSXX+DUwE9ZcONAFZeUKigwQIGBgWpsfQYFBcjPz8+pAQAAAAAAgKqUVvFf43en7VPHxHhnCqcD8z2nJ/e0+TBfhZnpsjquAnu6pLhEJSqV+baspKRUxaUlKigs1pkdklx1AQCoIYJ8AAA0cAT5AJxKBQWFOpBzWI38/BRoAl7uISjQqYGGwFxnE9B0D+YLyqiIZva1BgAAAAAAQNXcua+KCPKdfspCeg73tPkgyAcA+DHQtS4AAACAE5Jz8Igycw4rJrK5WsREKDK8qZqEhSggIECmdT7zpRUaBhPMNNfWXOM461pHW9c8M+ugcg4dcWoAAAAAAAAAAADgZBDkAwAAAFBrafsOyK+Rn1rFRiogwF/Hjh1Tdk6OMjL2Kz09XZn7M+1PM23KzXw0HIHWNW/VIkp+1v/2ZmQ5pQAAAAAAAAAAADhRdK0LAEADR9e6AOqaCfGFN2ui0JDGKi4qVs7BQ9aQrRXffmXNS1H24QzlHMlQkyZNFRvdUi2i4tW/14WKaB6h5s2ayT/A31kTGoKjx/KUcyjXDvbVBdOS4/YdO5Wesd8VDLUGIy42Vi1io9WyRYzatk2Un+m+BAAAAAAA4DTn7om1IrrWPf3QtS4AoL4R5AMAoIEjyAegLpnudE1LfM2bhunIkSM6dPiIdqfu1LJvlunQwcPK2LdXnbu2V8aBvcrKzlReUb5KrVdQVPNo/eKyMUps007NmzVVWFiYs0Y0BKaLXdM6X/NmJ3ddc3IOac68BUpPz3BKfItv1VIjLr1YzZrzNw0AAAAAAJze3LmvigjynX4I8gEA6htBPgAAGjiCfD+SrDWatjRc40cmKWvl23pfl2p83whnpodt8zRlbrLaj7hTo9s7ZQ6z3LSl2c5UhAbffL36RTqTznIuFeY1JOY4l8Zp/Lhe8n14yXr/2Xna5kwpon81datgrtWMdA2+e7g6OEUNU7ZWvPa21nW93ve9eAIKCgqVmXPY7k63qKjIDlt98c1n2rB5k3p17avMfTlWWZr69eutY/lHFN86Xk2aNFHz8GYqLizWxq0/qDhP6nXm2YqLi1VAQICzZjQEpqXG6MjmCgo8seu69vsNWrR4mX1vtW7dSmd27KDIyEhFRYbb8w9k5SgrK8u637YoJWWvAq3tXHTBeTqrWxd7/o+unt4lW+e8qMUtq3muvf5eSJGDqnsH1P17AgAAAAAAeHPnvioiyHf6IcgHAKhv/vfeN/EvzjgAAGiAsnIO64P1rn9Y9mwdZA2N7XHUsdS1Wh3QXr3jQ5Ty7RIdbnO+ulRKl2VrxZwl2pUnRXbq6zXfDvFt6Kzxd4zUxf37amD/7koIcc9co2kzU3TOzb/SL4dYywWs1+y5KYrt30F105HlaSRrm5btbqLePVvKffheti3Xxk5jNP5yc476Knb3bL21OVoDO9UigHIsXau/O6LEhnj+vORZt+V6ZcR2t+/Lk2W+kNqfdVCxkc3VqFEjZWVla0fKNr2/4D2VFASoRXRrBfmHKDYqTkEBwRoyeIg6tuuomMiWCgturuZNo9SubQdFRDdXrt16WyOFhoY6a68tEz56VW+tDVCXqu6Vot36ZNq7WpAZo97trX12in8M5nn+x8z1Cujk8RxXZMJWMz7Vvhjvd4Gnop2L9NIbi5XZops6hFd/BLkpa/TeO7O1tbnH+o6kacXH7+nd+V9p6fI12niomdq1j1KwM9vagg5u+kLvzPxUC5au0LJV27QvMFZJLZvIjuIV7dOKD2dbyy+zll+p5ev2yb/VGUpo6juoFxzc2Pqbc0hNwmp/v635br0+XfSl/K1766ILBuniC8+zw56m9cbAwEB7MONxLWLV7czOCg0JUfKuFG3dtsPaXqhd/qOr7bvEXPM5R6q+Z2soa/NK7Wpa1XOdrPfnBGh02d+SaO2cOVsbq7zP6vY9AQAAAAAAau7g4VxFhTdzpnC6M7k9Lx4FdsDP+jQlJudnpopLShUTxQ8nAQC182P+9ywAAIAGa+sPyYqMMP8oz1ZWVoTifQQmslbO1+LIJFVoiM8O6r2/NFyjqmhZLmv7JmW1O7esBb7IvpdqcESy1pU1S/cz0n64V0uGHc5Mkqzzs9WZxqmTX1CkRn5+Cgjw1+EjR3Q497D++/mbMr81PZx7RAcyD0ilfgoODFGgX5AimjVTgPzkX+KnwNIAqaiRcg9a6ygJU1SLOOXl5evIkVxn7adA3lEdzC9SkatBUlvG9x/ptRdnakWWU3Cay7fOcZ51AEXOtI7s1oJ33tDTn5S3tlaU8rXefPllvfDfr7XH63Sm6ZPXP9DilMbqMniohvdqodwfPtVrn+wuW1/Rpvn617xNOtiyr0YMH6rBCUe1bfF7mv39UVeFQ2nakdtGg615IwZ3VVTRbi1+5yOtPeKaXVGgdW+Yryvz8wtdBTWUnXNQn3/5lbV8gG6+8Rr16tFNfpW+GS1n5vXu2V3jbrjGXsa04nfw4CFn7s9dkkZ7/S1J0gWDIrTN+hsFAAAAAAAAAABOb7TIBwBAA0eLfKeS0yrY5yu1Kds611tWatny9dqVl6dd31njmz1aC8tao//MLdKl4zorY/k2yaNFvqz1X2hjmws0tIrWkI6lrdfqIwkerc65WlA63KbqlrxcXdC+rbnLzT6ZIdOrBT+7xbBPi9SlyVr9Y8anPusYpgvH6Z/4Wofr2OcXtlfTb18tq7PRaZWwjGlN8J+z9ZmzH5XmO62Sla2/k7Spuhb5KjIt+O2P06Dq6nvtwzYFtIlWxhbPVrTKr2PF47SPv2KLf/b61qqpXafCed5fdeuA3ufS2o+KrbVVPBcx2zS9Qutdrpbeljh1fJxPL+UtbXleo/J9LL+Gla6Jj1bDjubl2wGqkODGOphzUD8kf6elaz5VWOOmahWboIsvGKr2bTuowKoXENBI7du3UXGxn0qLpJLiUh3NLVRxUSNrvnkfNVZJSYFVXqiwsDDXBmrFdWy71LrqeyUoWt379dW5Hcpb40tb8Zm+3d9YiT2raSmvDtjP7G5Vvx1z727JqdQ6p6eg2M4a0L+3Orlb4zuyQ58v3a6j4R3K7rOczd9onbrp8rMC9cOu8vUVbVisD7ccVNIlN+mq7jFqkdhZbfI3ac36/Wra/UzFBUk7v/1CP+xvrkFXDrX+NkQpoUOo0r5J1q5GLV3rD2mp7mclqlV0lGJaJqpb6D59vT1NfvFV73NBoSsm2Dgo0P48HvNr5fc+/EQHDx3SsIsGK/GM1s4cFxP2fOW1txQUFKS4FjFOqYtplS80JFhbtidrX8Z+u6U+XwFAX8+x/Sx928Qpcz3HG2Pa69Cc8ndB9e+zE3iXLM+xbt0UrfZ6Dqt7z7p4zbeW66Jt1bTIV1nlvyGefL8nKr9bqv+bUvNzHK2NM8x6nOW93nsrq22h0vs8VX6HVjxPsZvf1uxD3sdRu3coAAAAAACnFi3y/bRU+trJo4AW+QAAdYUgHwAADRxBvlMpRAk9XV0X7lterMF3j9HITgHaeKS7fjdumAaWBYyyteLdeSoaOkaDInO0sUKQz9UVb/cqAyQh8U2075PlOuSEFrJWfqDZ+3tp9JAqAkx22ORzhYy4s6wL2i4Bq/TWzPLueO1gx5atWl3cXxPNvvqoY0IRszXce74J/9nH5Qp/bNqyXkWDnO3EZOqzzzy6EzX7MWOTujtdAlfq4tEEOObmaHDZ/AAtnrFSWSHVhLO8WOd1zhIFDhqp3lUEP1z78LUiy85FglLnzNOmvAh1cYdQsjbpm4DzNP4X59vHGbv/U812AilR/pnW9fAOrJjg5bLAnta1lla8Nlu7+lyv39nLtlfAoTwlxPv6ciZZizd30Piyc7les5e6z6WlBufCXI+3dvfy6H7ZdT6XVRlE8XGNzD5+Pdtajzm+lgot3KZlG7y7p9269FNltD1PAyus80juMTucFWQNpvWzZd99pvR9KQoOCNOkex9SuzPaKyiwsXbv2q3wyOZq0rS5+cZKBfmFOnY0X/n5Rco9fMwO9AUGhKqosEB+/kVq2qSJtfZ9WvTy6/rvOo99SVmkv0+fpxWH4nVu+6amxBXUWXhYrfu21BE7yBejjuE79N83PtFnX63U8l35SmzfRq6eX53gkR2YMtfqVc1PM+UVg7ZHtXvl//Tm+5/pC7OOH/bJv6W7+1gnmLX2qBpnfq23P1yiH8z5bnFIaz/6RO8tWGwvY7qkPdg8UR2iXe/XsiBfl+b64b139d7nrm5rPeuUBfnatVf+knf1H9P97aoNSmvUUu2sZ94+BCfkZIebsqzxmet0zJRnW8ta7wlT3rv7meptXcuIXO9gYM6ub619CFGPgT3Kwk5Ni9KsOillQbymAVlavSlVx8I768yW/jq28Vst3n5MHS44vzw86KFR1nYt25aj2K59rflOYQXFxSUqKCxUaEjN/takpqbrqxWrlJTYRkMGD3RKy6Vn7Nca61qHBAerQ/skp7Sc6VI3JXWv9qSkqW3iGWra1NxP3kxXtJtUHn40vMNtrvfyti2pSvyl9/uq7Pk62XeJdV3MO3LZ/i6uZ9jZl+rfs878rP7lz73/cjsQGGL9zahZAC1b33+6UofbWvdKTd8Tvt7lx/mbUvNz7PytNMuZ9Xp0Gz/Q+vt56FhLJVj3ZmXVv0Nrcp5q/w4FAAAAAODUIsj300KQDwDwY6BrXQAAgJOVlaOsdp3VwYxu3yS19E64uLrU9e4StpzpilfaNne+NPJOTbzbDMMVufRtvV/WdW6SRt/cWetmvKgpz76oadV0w2tsXfq1tT/e2/PdHW+SRo0sD8ZE9j1X7eXUyVqjxdt9zM/epK2e3ZJ6bqf9udY2spXqzDf7oUGXlnUJ7N3FY7ZWLE1WZIX5o0dUDupUZMIY5jxMedZ1znyfV5fK5yJC/Ub29z53kb00um/5Fyp2d73mmpqJ9p3Lz4ktW1s3ZKu9qeNwdalsWOvuW9X+W8fmeS6t+yUyO10H7KkanAv7ekRo8EjvLjNNnawNO137WpWKxz/IWq/THbFrPzyvqXWs1na6t6v8BZNpaS0oMEDFTl+16RkpCvIPUa/uZys0pKkOHjym92d9qK1bt6tJk2YqUaly844pvzBfeQX5ys09otTUFB06mKVjR44oI/2ASktKnPW1UPszGlunIlWpTr+vWXv3Kd/6zLc+Xbu3T3vSrY+EJLWxpy1Hf9DshQXqOXSoBic2VvHe7+2Wviprqg4XDFXPlmY8VO0HD9WICxLVTEXa8cnbemdptloP+YV+fcNw9Wq+r3L3sdkbtFaD9Rvr+Rxv7pVDadp4tIX6jbpWd1nL9LTu+/Xz5mmVV5ezR7V87jLlnXWhRgw7S60bmzofaFGGM9uxZ9F8bYw4V5cNH6RuTQuUvPQ9zd1U1pluubjeGjE4SXb7hS272l3hnhtnz/GpceMg6/+WP49G7qHD9mdWdrb9GZA4VOMGt1Da4jf0zLMv64UFyQrrO1ojE+0YoZeiI2latMp6dmP6a1CiU+iDuUfcrfLVRFq6uajS2b3Osj9PxNm9utufaXtd6zpRFZ9B875yP18n/S7x5XjvWV/PffvhGtXOGa+BrXPe1mL199ovn3y8y9dtd90nNf+bcnyRg861/1aWC1ek++Cs89fPYxveqnmH1uQ8ncw7FAAAAAAAAACAHwlBPgAAgBNlWssygbIZXytru2t82tJsZS192x63g3hWnWkbOmu8RwDBF18Bkm1L19jhAtMV4JQ50mg75GcNN8dp8bNva4XP5IErGBhZIUxoQicmLOEO8Ngi4spamXMJV1ljclnp1raTNdsOzLmHedpWIRhUeTvubbj2w30u3IM5P65gS45SrdHyEFzNdSgLPF4qmVDfa67zVFlV58IH97U0w1wTNHRLUvd21mw7fGjZttwOxVxgh00i1KGrdZ3mVrcPHrLWaJp7G+aecYpNS1XHPRf29fAIvLhFxnkEAn2rdPxmGWdUkYnq7hHYyVq5XNvanetxL5Zr1MjPbo2vuNgV5Ms6kKXDB44qsnkL7U/PUnbWYQUFhqr7Wb3VtFmEcg7mKi+/UPmmRb5jx6zlipR5IMNabp8yMnZp9y4TJTQtuLnW16ZdK+v/7lZyipk6qt3WPrVqHW9dRifcdyRTabnWFWnn0fVqfgsNuWGo+nTuoH6jzpe5LAdT9uiga66HAOtQOygp1Iw3Vrw13iUxQgFHftCXm/MVO/gXGtm1hZrHJmnIkDPVXPu0fsdRe0mXJA2+uJUrRGdE9tL11w1Wn4RohVnLDOtjnu9M7fbKkeWr1cDRGtnb2lbXQbr+qrOs9R7Wxh/2OfNdgs8cousv6Kwunc/SZTdeaG1JSt64TZWicE1aWPscZ+29JbSNVb+DWlVufK5MWNvOMmd027y39cnqrVq3cp7eXOYdciza+aleW7xPzTsN0Y2/ulYjOjW17oH3rXeXiVC62O8f65595pUPtEZn6bqrqw4RG+YeMfdKTaWlu5KN0SfwLnCLjnK9yU46yFdhHyIj3M9OXbxLfDjee7aq575GTGuSTit11QS/3ao+tlr8TakBr3Nsv39cxz9tZQ3WU9U7tCbn6STeoQAAAAAAAD81aXv36YmnX9D43/2pxsOTz7yo9H37nTUAAOoLQT4AAIAT1X64HSgzrf60H2GCZddrcESEBt/sCpqNbu9qaU3ZX5eHD+yQhlzhrznlIY/qAiR2C3CDPIIYptWnQdJis+4qnEhArrIkjXKHBz0Gz1aZjidy0PWVlp9YFiqJUHx1wYvjilC/cdY519f6oppWoY53LuwW/uaq/FgrtArYYVB/RTqtam39IVmRXRPLrkVkX9fxjYp0XeOqwih2GMruZtjZxs0VWvKqybmoFLysC64W+rL25ljjlVsb9FRSUqqCgkIFBgXa0yGNmykiOkbhEVFKSdtrfznUvlMnRUVFKy+/QPvS9+nA/kwdPHTYDvsUFObp8JEcpaTu0pYt61Vckmevx70+JSbZIbY9O/dJRbu1dW+EOgzsZJU54b6U3UpTC3U4w6O1uIh4xQc744p2BVGLJFc0sAbSU2ViZBmLX3OeT2uYscYOAubll4fZKp/7o8rYsFTvv/O2Xnh5up6e5+tZjFCblh7dy8bGK8b6yD3kGRCUYhJaOGOWgGi1Mcdw8JgOuUpOXJOuuvq6/kpqfFjrF3+qBWuK1W9gZzsI6HomsvXtF1uVH3aWRlzWWa2aR6vLZcPVp1m+ti1eaZ8Xo1m7gXbrfyMGd1WLo9/rnVdmVhEidjH3iLlXampveoaCAgPVrLmr++Sq5OXlV7ne5tayAQEBSt1bobnDOnay7xLfjvOePaHn3tWt9Lqu1vupBiG+mqibvykVmXe4OV5XK7RTqgyo1+AdWpPzdEreoQAAAAAAAKef51+eoR07dztTNbM9eZdemPa6MwUAqC8E+QAAAE6Kaa3IHcLKUao6q0NZusAdUvAchtuthtnBP7uVPqdVN3eLb46s7BwpMlyRTmttNedqJani+lz7ebwwhtmWcyx2q2059jInxmmtyQ6I+WJa/ytvCc7NPu46U8W5sFtmcnN1JTv45uEVunv0YFqNkunqsupuZ+1WAm/uLy1dbndZ680JyI243mdLdzU6F3arURW6NTbMsdQ2nFJxGdN9sOlqN2un1mUnqXsVQU13l6l+fn52aCqmRbxKA/21MXmrdu/bo03bN2rLjs36bv1qfbn4M6XtSVZu7kEdyM7U/qwMbdq20Tqm/Tp8JFvZB7PUtHkTez1mfbaANurQUspNz1Ruyh4lh7VW65Yt7GCbCfft3pVmXdK2alNNK3QnKmnYON11m/dwY6+qn5Xd/3tbry3YrPy4Xho+4lr9ZlhZZ7/VqFl3s3k1TiEeX3DLXrrm9tvtd889t1+hDgHZyreei7L3lbnl4uLtlvtcotXapA0PHS5r1TAg0tX6X5feg3XjTUPUuihTi5dX/SWguwvmmiopLVFxaalKrcGXsFC7GUVt25Gsf05/Q0u/+kZHj7lCoJ7M0mZdvkS1rHwtD+w9/ou1/D1cR++Sio73nvX53Lve5VUzLfHNk6y/MXY30CetZn9TTvQcuyTZLc6OrzKgfpx3aE3OU12+QwEAAAAAAE5zGZkH1KxpE7389yc17R9/Pe5g6pn65ke3AID6RZAPAADgpJgwjNNd37ZN2maHPmonsl1nRW6f5+qK18hao/eXSoMHmaCf07Wr082uzZ5fdctpdgtynuuzZK2c79ElrCP7a73v0YLc1jnzyrtVjeylwe2ytXiOZ5ex2VrhNV09X/thup10TbsCjFmewTfnuKpj9tEzKOfzuDx0MOdo+3KPVp6S9b5Xd5cVQ3QV5xtmX6V1c5ZrW4RnUNOq69Gqoneox1PFIIw5j55d69bgXPi8Hq599Wqt0YespfMrHb/3MuYeS7bWvUlZ1r1YVQgpMDDQDmkZJoAXF9VKWTkHtGbNSuUXHlPOoQPavGW91n73rdL27tGBrAzt2rlDyTu2atuWTdqdvF3Ju7YpINhf4ZHN1Sy8mb2ecqFqY0KSe3dr2bZUNT6jrVpZ56Z1Yqhy0zdp0/58hSW2qvXzVS07SCWlpWQqrEmo1xBcZRYtTeu351uXrbcuuaCz2rZsKuV7t7LnclQHPJvV27lHe6yPil2UHvJsoe/IHiWbZU7gPXJ8+7Ri5T4ppqu62SsPVbjpKzg91Toit0ztMb1nNG7s6sL3BLiCfE4rizXQIiZaxUVFyq4ixBsVGaGrR12hpMQ2OnLkiL5asUpfLF7mzHU5kJVtr8Osyxe7hVPP94D1Hpq93Rn3sG2ux/vF6z1cV+8Si2c3rsd7zzpdX3uG2+x3XnWvSa/uv+tGTf6m1PQceyn7e+BSdfDvOO/Qmpynk3iHAgAAAAAA/BQFBgSoUSNXHCQ1Ld0ePHmWmXqmPgCg/vnfe9/EvzjjAACgAcrKOawP1rtaOurZOsgaTjSeAd8i1KV/B1drPpEdNLDT8VpAytHG5dukTn3VxZ0cCGmp3p0CtGzmbH22fKWWfZei+BG/0tB41+woq27s7tl66xNrXtn8arq4rbg+a1h9uJfGe3SxeCxtvV12aexyTZ+5xK6zSf01/pddFOLUierUXgFr52n25852l69X4KCR6m2vJE+pa9crI7a7ese7l6hQZvYjJlNz537qLG8N+7to9JCW9jZC4rurS8AqveVsf9nu1rphaKBW726i3j1ddSryO+RR3xoqHlcl5prEpFjLuPehWINv7qKM744o0b5uIUpoE6DVc+c558qaPyJCmyrsQ0hIkVYv36r4oe7jdzn0tXVd3OdnS4RG3e27Na6oTtHa98k8zbW3karEob10eIt7H2p2LirdB9Z9FFndfeBcj8N9LlSLpW87+2nde4Ou1w3dvc9ulH+mPvsuT4NHnqcEXyfesF4jucfy1CQsRP6N/NUsLFybk7/T0aN5KikqVev41jJt6wUFNrLmW+fmSLbSUvdoz67d2r1rp1Z+u0LH8nLVvkOiomMj1b5de0VFRikgwN+1fktIo4Nau36nMg7mqXXfIfYz0lT7tWzlJqUfbaxO552nDs1MTdex7VJrj+tUscz1rGV5PJd+h7ZZ5zRbx0qayv/IUQUntlHorrXakrxDGw8FKjy4WNlpyVr52Vb5dWtjPd2+tlOkrA1WWbZ13BFN5bdvreZ9uUu5Jdbt5jzX9vO1+4gy9qQpP9hfefs36rPPNiiruI0uuLyHWpjvxLK2WfdMjnJTd+lAYLBKDqbq63lLtSu/qfpcMlhJpqdZp457vQrJ005zTEcLFNA0V4cLWyrG3SNtxbrarUXvfKMMvxId3r9bSz5ZpPUHIzX4miFKsg+kiWIDd2vl5h3WsTRWWPEh7frmCy1LK1Bs/6EabD3DWavn6aPNx9Qo75Ay91nH8NFy7SlsrG5DLnSuQ2UHDx9Vk9Bgr+tanczMbLtr5latrGOJ9t0uWkR4c3Xt0lHdz+yssLAw695JUvNm5V3x7tyVoi3bdqhLpw5q09p5cXqy7oHY/Us03/2sFlvvuq4HtPpIgnNvuO6VyBH9lTHjbddzWuE9XCfvkshoBWx29mN/tL3t6t+z1jp7WvM93jM724zSpYHW/dfU893rwdwH362z3lfu9bmHbQro1N3H813hve2rrAZ/U2p6jr3+9umI1zo3RQ53WqqtrPp3aM3OU+3foQAAAAAAnFoHD+cqKryKL1lw2nF3LFLGo8D0NmH+K4wpMR1PmKniklLFRB3vvxecGnPmfabQkGANvfA87cvYrwcff0ZfLF2ufn17qUlYqM+yzz5fqmN5eRp52VBnLbU39fkX9ZdHHlf/c/tV6h0oz1r3Q395VBt+2Kh+5/R1SnE85gfQv77zt3bPNp07d3JKT40fc1sAquaXnpHp+i/7AACgQdq6M03j3nH11Xhz/ya6eUB5+AE/X1kr39a0DZ2rD8GhXNYaTZuRrsFVBPVOBfsa7T23ymBLndo2T1OWxlV7P5gvo9L3Zys6srkCA/yVnZOj7zau0T9ee1aNFKxe3fuqeWgz7U7epZKiAuXnH9X+fRk6eOCQjh47pg4d2qrn2b1UYv3v7F791aVzF0WEe7dOZ1q7++TFD7Q+v42G/+4KdTeBt6JN+u8/FilZSR5BSdN96Nt2i2Dl+1yxLFnvP2tamfQIB+Xt1oJ35mttdpH8Ww7W+Ou6qnlRptZ+skiLd2Uq3zQ4GBCq2I6Ddc0lSQrzuR1L1gb9d9YyJeda64noqlF9j2rWgmS7y2wTCrKv3VKp3/CzlPGlU69ZGw0ecan6xDq/bDXn3LQGNuwKNVnp7FPjaHW/7AoNS3R1J1tWxyNslPX9R3p78W7lFgWo26jbdVmiq7xy3UwtfvMjrdp/VMUKUOOY1ho8bKh6urdvK9LBTV9q9qJtyjAHHxCh9gOH6LLeLawrKuXuXKT/fuLMc9Yx8KIh6tPSdyC8sKhIB7IPKy6m5l9Qbtq8TXM+WaCWLVvoxl+Otr8kqg1zX7757vvau3efrrz8EnXq2M6ZUxuue8V0R0uoq6FwPbupg7imAAAAAID6Z4JdvuxO26eOiT5+lIh6Y75r8uSeNh/mays7sOeu4yqwp0uKzbeepXaQr6SkVMWlJSooLNaZHX6E73Z9GP+7PykqIlx/feTPys/P17TX37W/d7t17LVq3Lixz7I/PfSkDmTn2F3tnigTBPv9H+/V6Kuu1FVXjnBKXVZ9u9oO+v39macUYXp3QI1Ud05PxvYdyXbo8i8P3a92bV336anaFoDaIcgHAEADR5APvhDkqw0nzFVNa1F1zg4Ofv0jtRblCjFlDbpe4/tWH8Ay3aZmZh1UqxZR9pdT6RkZmvPpLC1c8pn8GwXrputv0vRXpulg9gG7K4ZjR48q0D9Q/gGN1Kx5MwWHBGvw+RfrskuuVIvYWDVqVLvQFk5vafsO2EHPoMCad8NRVFSs196cqazsbF184Xnq3bO7M6dmVq3+TosWL7O//Lvlxl/WuCVAbwT5GhpXmDa8ylZSAQAAAAD4MblzXxUR5Dv9NMQgX03VRZDP+ODDuXr/gw+9AnumNb5HHntS5/TtQ0DsNOEryAfg9ODqFB0AAABAJVvnvKgpz576EJ8JnUx51mzLGWZsUvebT3WoyAQUzfZqFuIzTEArNKSxDh7KVSP/RmrWtKlGXvwL3febSYqJjFTOwUxl5WSosLhApX5FCmjsp4AQP/kHN1J86wT99o57NHzoCDVv2owQXwOTc/CIwkKDaxXiM0zwbuTlw+Tv76/FS7627p8cZ87xHcjK1pfLVsjfWseoEZeeYIgPP33ud1n5YAfVCfEBAAAAAACopKREixZ/ZQ9mvKoyTybQt3L19+WhxVoYfP559ufiL5fYn8b6DT8oJTW1bB4AoGoE+QAAAH6GIvter4m0xndcHUbeqYl3W8MpbonPvh5mO2XD9ep3yi9OhPqNc22vJiE+t/BmTXQ0L19Hj+WrSZMwxcREq+0Z7fTn3z2oVlFtNHrE1TqzS1c1a95c3bqfpUsvuVy/v/M+3ff7B9U2sb3dEl9oWIizNjQER48e07H8AjVvGuaU1E5sTJQGD+pvd807482ZWvPd+mq/JDTzVq9dp9ff+q+KrGUuPG+AoqNO5oFJ0mjrOaA1vp+q8ndZ2cDfNwAAAAAAAFv6vv16a9aH9pCesb/KMk/vzJqjf736Hz06ZaoyD2Q5pTVjWuEzXbOaVvlMV62mNb73Z39ol3l2qWta7kts36VsuOmW8XZ9N9MV7/ArrrJbjvNkpk25me+eHjtuvDb8sFGTHnjYXpdZd3WOt20zbsrc3QGbOubTreLyb70z0962Zx33Ojzrec43zLQZ3Mfkrue5/+71uMvMPnmu03Nw16lu2+Z6mH29aNhlWrJ0mf3pXrbittx8ra9iHTNt1rt3b7pX3YrH7N5+desCfu4I8gEAAAColZaxkco5dMQeAgMDFR0dpabNmqhj2076xchf6sGJj+q5//cvTZzwsK65cqy6ndlLzZo1teuZ1tPQcJiW+A4eOWbfEyejT++zdOnQC+Xn10ifLvpS77z3oTZt3q4jR446NWSPm7J3Zn2ozz5fokaNGtnL1LY7XgAAAAAAAODnIq5FjK77xUiNufpKxcXGVFnm6ZqrLleXTu21OyVNr8x4xymtOXfLe9t37KjUGp87yGWCfmtWfq2d2zbaQ5+ze2vM2HGVgns19dK/XtGtvxpnr6uq7ntru+3XXn9TA/qfa9eZ8Ns77TITTPNcftP6NVq/foMd5vNkWiQ0y7i3sXDBJ5o3f0Gl0Nozz/1D0//9mmbPeseuN+vd/+gP90wsCypWZPbVvU4zmO2Pue5ae7j0kqF2neq2HRwcrCcem2yXnTdooP1p6lR1zsx+9Orb3w5ieq7vX69MrxTSM+fgT5MesLtVrrhdw5x/08VyXFwLr3WFhoba8wG4EOQDAAAAUGutWkTJz/pf2r4DKiwqVtMmTdWqVUvFtWihmJgYRUVF2Z9mulXLODVp0sRZEg2BaT3PXHu/Rn4nHeJzO6tbF/1q7C/VpnWC9uxJ05xP/qcXX3lNr7z2lv41/Q173JTtSUlTYuvWuuXGX9rLAAAAAAAAAPDN/Bj24gsGasjgAfZ4VWWeTA8a9/z2NjVv3kw7du52SmvO3SrfjNf/Yw+erfG5g30m7OXZQt/t43+lXj176ONP5jklNZeZmamLh1yodm2r71mnttvu2KG9HZxzM0G/latW6+EH7y9b3gTj7rvnbp1/3kB72s0E4zyXNfs2/NJh2r1nj1PiYpYzy5v1GN26nmmH8r76erk9fTzz//epfUye66jpto/HBO9Ma4rPPT3FK+hn1vfo5IfskJ5n+LFL505e58a93W9WrrLXdexYnr2vJhzpZuoMG3qRMwXAIMgHAAAA4IQ0bxam6MjmOpB9SOn7s5WVc9judtd0fdq4cZACAwPUyJ9/cjQEBQWFOpJ7zL7G5lofyDpkX/sT7U63KqblxuuuHqlfjb1eQ4ecr86d2qugsFCmo90unTto2EWD9aubrtO1V4+w6wIAAAAAAACoWn5+vl6c9oY95BcUVFnmS0CjRvZ3vSfCtMB38NBBe3C3xmeYgJoJmXkG6QwTQjunbx+7BTjTlWttJSTEO2NVq+2227Ru7Yy5rFu3Xn5+UmREhFPiEhISrIT4ytt3twDo7kLWtL6Xnr7PLneruD9mX0yLdRXr+WL217TeZ1rfq3hMNdn28aSm7dWelFR1797NKSnXrm1bxcRE2+fEzYQh41u1dKZczDk04T0T4nOfpwcffuSEW14Efg74r2oAAAAATlhQYIDiYiIU0ayJAgMClF9QqAM5h5WRma3dqRkMDWDIyMyxr6m5tuYam2sdFxtpX/tTJTo6Qr16dNPIy4bprttu1m9uHasRw4eq51ldFR1VNy0AAgAAAAAAAA1dzsFDWv3denvIyTlYZVldc4e2PINqJkRmwmR1LTo62tqGd7iuohPZdsVwoGnRzhyTObbjMd3Odu7Wyw4IuruR/eMffufMPXkmcGi2Ydbp2fqeUVfbzs7Otls7rCsmpGi69TWt9F007DI7YFixq2EABPkAAAAA1IHGjQPVtEmIoiKa2V2txkZHqE18LEMDGGKjw+1raq6tucbmWgMAAAAAAAA4/bWIjdFf/u8Pmvznu+3xqsp+DO7W5mrCBPNMQK+u1GbbJ8u0lGe6nV244BOvLmnr0hv/ecv+HHvDGPvTrS63XdfXwM20IGjChbPe/Y/doqAJHgIoR5APAAAAAAAAAAAAAACgAUqIb6n4VnHOlIuvsh+D6WrVV/e5psW8b1au8mrBz7QGZ1qF82S6ct24abMzVTu12bYvA/qfqzVrv7O7nPVkpk15dcw2zbbrglmP6SrXV5e6vpzotk0XwqYrYc/uc92279ih/fszfXa7W1PmfD/39JRad/kLNHQE+QAAAAAAAAAAAAAAABoo053u5q3bywYzXR8uvWSo3T3t7/94r1eg7uVp/1ZKampZC3PxrVqqV88edmtt7nrbdyTrX69Mt8dPRE23XZVuXc+092nyo4+XLW8CaNP//ZpXuNDdza9nAM60oPflkmXO1Ikz262qS12jptuuLqTnZkKCJixoWs3z7ALXXIcHH35Ev77tVrVrm+SUHp/Z97ffmelMlQcoTUuJpsVEAC4E+QAAAAAAAAAAAAAAABqoBx57Sn+b+nLZYKbrgwlsPfHYZDuE1qtvfyW272IPplW2l196vqyFOVPvvnvutsfd9Uxg7qkpT6pL5052eW3VdNtVMcs/9MCf7TCge/lRV1+nG8ZcpzHXXevUkh1ue3TyQ3YAzr0N05qfCd+dDBN8+9vTz9qhPNMin3vd7sGE7Wq6bXOso6+6sqyeZ1DPkzlXppteE6B0r++iYZfZ2ziRrnvn/W9B2Xo6d+tlh/hMWBBAOb/0jMxSZxwAADRAW3emadw7xfb4zf2b6OYBTe1xAAAAAAAAAABwapVW8V/jd6ftU8fEeGcKp4PSChfLPW0+TOtlZrqsjqvAni4pLlGJSmWVqKSkVMWlJSooLNaZHWreWlldum3C/ym8eTP97dFJTok0/nd/UkhwsC6+cJA++3ypjuXlado//urMle578All5xysVGZa7ntl6v9zSuCLCdg98tiTOqdvnxMKtwGAJ1rkAwAAAAAAAAAAAAAAaADaJZ1hh/L+37Mvasrf/2kPRmhIsK68bKj9abjnmXqmvq8ysy5ULzVtr9as/U4JCQRzAZw8gnwAAAAAAAAAAAAAAAANwOXDLlRimwRt27FLW7Yl24PRsX1br0/3PFPPzbPMrMOsCy7Z2Tma+vyLdgt8bqZs8qOPa/ilw+xuaAHgZNG1LgAADRxd6wIAAAAAAAAAUD/cPbFWRNe6p5+G0rUuTg13F7pvvTPTKXF57ukpdKkLoM4Q5AMAoIEjyAcAAAAAAAAAQP1w574qIsh3+iHIBwCob3StCwAAAAAAAAAAAAAAAABAPaJFPgAAGjjTIl9YaLAzBQAAAAAAAAAAfiwVW3lzyz2WR4t8p5mK18o9bT5okQ8A8GMgyAcAQANngnwdEls5UwAAAAAAAAAAoL5t2ZlKkO80Q5APAFDf6FoXAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB6RJAPAAAAAAAAAAAAAAAAAIB65JeekVnqjAMAgAZo6840dUhs5UzVjWPHjmnZsmXas2ePDh8+7JRWrWnTpmrTpo0GDBigkJAQp7R+5BcVKLfgqCJDw50SAAAAAAAAAAB+XFt2pqpjYrwzhdNBaal3dMI9bT78/FzTZXVcBfZ0SXGJSlQqq0QlJaUqLi1RQWGxzuyQ5KoLAEANEeQDAKCBOxVBvvnz5yslJUU9e/ZUXFycU1q19PR0rV27VmeccYaGDh3qlNa9Y4V5Wrx9hb60hjMiEzSs03lKimztzHWF+CZ98pR6teqiG/uMckoBAAAAAAAAAPhxEeQ7/RDkAwDUN4J8AAA0cKciyDdt2jT16NFDffv2dUqOb+XKlVq3bp1+9atfOSV174lPX9CS5JXOlBQTFqnp109RYKMAFRQV6v8+/qs27tumG3pfSZAPAAAAAAAAAFBvCPKdfhpykK+kpETfrd+onbtTtHtPqnZZg3FGmwSdkdBKSWe01lnduliHZY4CAFBfCPIBANDAnYog39SpUzVq1Ci1bl3e2t3xmG54Z8+erQkTJjgldauwpEjXzrhLAX7++u15N2vB5iVanbJe/3fRHRqQdLbu//hvWrd3s103pkmU4prGqGWzGPVP7K1zz+hllwMAAAAAAAAAfnwmDPXt2vXavHW7iouLndKa8ff315mdO6jXWV2dkp8Ggnynn7KQnsM9bT5+ykG+/ZlZ+ter/7FDfNVpl3SGbh93vaIiI5wSAMCPrZHzCQAAUCu1/VXWqf4Vl5/1v+KSEgUFBKlHqy5q0TTaLm/k5/p/d0rc/7i27D9yQOv2brLDfpP/93f788e2efrVGnHV1Xp8UbZTAvz05CZ/rlcmjtdN1r084popWs7tfHrK/lyPm2t01WNa8lO8Rj/i/hem7VXmjLdUWlT1fzAw8w688Y4KnV8tAwAAAACAk7fk65Wa9+nn2rFzt91SWG0Gs8xH8xdq2YpVztoAuH2+5Gs9/OQzdogvIb6lOnVoZ5e3TWyj1ta00bljO3ve9uRdeujxZ+znEQBQPwjyAQCABiGgkb96x3dV1tEcXf/GBM3b+IVd3jykid217uOX3auucR3tMtO17ie3vao/X3ynPf3ZlqX258nKmD9JI66aoFmbC50S/FwVrnlZN111vaYs2u+UNDyFm9/Uw3e/oDlbcqTwRHVPCHDmAD9dOf9bqOwPPtLeJ5/2GeYzZXufeEpZ78/Rwc8+d0oBAAAAAMDJ2pOSZn+OGH6xbrp+dK0Gs4xxvNbGXIqUs/FTvTL1RT06Zao1vKhX1x4qm5ey4kNNfcaUW8Mz0/TWinTlOXOBnxoT4vvPzA8UGBCoe393uybdc5dS0/YqICBAt48bo9vGXW+Pp+3dp/vv+a3+cOet1rS/Zrw1S4uXLnfWAgD4MRHkAwAADcakoXdpWKfz7HHTfa6Z7h7X2Z5uHBDkFeYzLQSel9TXHs84csD+PCnJszXln1uUNOLXurJToFPYwOUma8kbz+jhp5aJhti8Bfa6RfddIi2Z+qwW1uT7w5+cQm1a9IFMZ9URl9yv6a89pSee/aPOPWU9LhQqe80CvfLEBM1x9ZB92irMWKOFL03Rve9tcUoasp/Odamp6F+OVnC7JOWuXlspzOcK8f1NuWu+U3CHdoqy6gIAAAAAgLrh7k43sU1rndE6oVaDWcYo9vGjvIoyV/xX/5i7VYWtz9HIEZdq9JAuivJ3Zuqwdu04qvbnW+UjztfZkcXavnim3l571JkP/HRkHsjSzNkf2d3kPjhxgt3q3udffq0juUd1/oBzFB0VoVZxLXRe/746dPiIvvxqhbp16aj77/2dIiPC9e77H9nrqI2pz7+o4Vdcpe07kp2Scnl5eZr0wMN2HZw65vya82zON4CfJoJ8AACgwQjyD9RFHQfY4z1adraDep5d+rrDfJd0Pt+eds/z7Hb3xOzXwpf+o82BAzTuuq76mcT4pJQvNOW9r7Q6t8ApQLlAdb/udp2rLXru9WXKdUobjiPKyXCNdeqU+CPc80e0fs7LmvNNmk73u+3I+o/13P++0eYcp6BB++lcl5ryCw1VwqMPKLh9WzvMl/bYX+0AX2lhoT2eu+Z7e17C5PvtugAAAAAA4Ccka5VmLt6vqH7X685RfdSjS0d17XOhRnZv5lSI0MDrr9dlfazyLj112Y3ny3RCmpKc7poN/ESUlpbqlRnvqLCwSL8ae60d2jPcrewNG+L6byTGJRe5xhcvXWF/xsZEadyYq1VQWKjpb7xrr6umxt4wRjEx0Vq3br1TUm79hh+Ukppq12koTGiOYCKAukaQDwAA/KyYMJ9pra9OJS/Vh1ukpOtGqXeYUwZEDNLISwKlb97Uwso/QARwmvILCVHCI/fbre4d/W693TJf2qN/tcdNmZnnFxLs1AYAAAAAAD8VKWvX6oDa6qLBNexWIsBfAc4n8FOyPXmXPfTu0U2d2re1y3btSVVG5gG1b3tGWbDPiI6KVNvENkpL36d9GfvtsjM7d1CPbl20dftOJe/aY5fVREREuEZfdaXe/+BDZWeX/9LZtA73/uwP7XmmDk6dCb+9U088NlnBwXx/CfxUEeQDAAA4SZsXzVSyYnRx7ySnxENhqpZPn6J7x1ytEVddrVsnvqwlKYXOTF9ylbLkVT1393jdZNW3l7nrIb04d0Otu6/NXvSYvfyIyZ8rw3SD+9Ik3XGNWedNevipBUr2tRvZGzTvqYfK9nfENeM16YlXtTzZs025LZpl5v3pY9fkmhfK9nVWDbrX3DzdWff0LSpM+VyvTHQd603jJumVJa4vCsx+zHligm419ax9ePilz+XrtJluTOc8ca9zXOZcTdGc9d5nyus8ZK/RrIk3WdPXe+yrc87vMuXOfixKVeHmV8uWq3jua7Jdu1W+IcMUof36bHUNknzZn+txs72rHtOSDGufFr2sh8dd71r/xGe00NcFK9yv1e9N0SSn3ogxE/Tcex73iuc6vXYvWXNud+37FK8Z2Voy2ZTfoTlV7LLrfN6mKWtc08un3ubattd5ylby/Jf1uHNOy65hxaYJs7doifV8THLXs+7Nex/wfkYqbm/Gn1z7Xba9aq6T+157fJHHnh33frDuiM0L9MoDzv1nzbvDPLdez4APzrm+aepa1/TcSa7tlJ1757mxhlmbC5Uy/xnX/TPZ1TW1r311cS/neQ0912Vtev1sj/v3Mc1a4zxH1Sq0tjnBXmbENeaec4qzl+k56/m/6e43Ze1mlY57XaznKmPNR3rxgfLn5KZx99r3Z6UzWfG9Y93Hjz+1TO5d8q2K/be2vm7uM+X3nn1PPaPl1a+sEjvMN/n+spb5jq77obwlPmseAAAAAAD4qTmkXbuPSpFhylvxoZ55ZqoenfKinvnvKqX46oGy6Kh2LfpWmxWjIQPPcAqBn4btybvtz/7n9LY/jY2bt9mf7ZIq38/tktrYnz84dQz3su511dTg88+zPxd/ucT+NNyt8bnnAQCqRpAPAADgpCRr8wqTdjlHnSrm+Aq3aNYffq/H536jzUdDrfmJapHxuab89q+aleLU8bJfSyaP1x1Pf6yFybkKs+p3TwpXYeoPmjf9Yf1+4ke+w3fHk7NMr028T6+sKFBEQrgidFSrl76sh59wBYjcTHDt3lse1otLf9BmtbK2nahOgTla983HevzuP+vFFeW17X2Ld7qVDAy365qhVg0SpszUs3e/rNWF4Yq1VpWds0Vznp6gGUvWaNYDD2vWliC1MNsozNHq/72gSdM2yPPwzf7++fbH9co3GQrrNUxXD+qooIxv9MoDd2rKIh9BpsKt+vDJxzVjy1Ez4Sqzw0B/dp3z1KOKjU9UQkSGlky9V8++k+rU8Var7bbtKfPVRPKanccJJXnK0dcvWfv00jcqjIhXQqCUseUrPTfxr1rudcHM/XWHHn7jG+0L66WRIwaod9B+LXzDuldMSM3Uieioc+37cq027fQ4eylby4JNS9bvLD+vuVu1zgSzAn3cz25hrutt9suICHdd++4R7qtv7uM7NeGfC7Q5N0HDRwzTRbEF9jW8Y+KrHuGwbOs8T9KUuetVEJSo4YPOUfdw63qsX2A/I2WhtQrbM9fIe3snyOf9YJ3rRY/pjj+9rDmbjyph0OUaeU6MCrZY+2Q9AyaAV7UwxZr9Cnd2NNT1DJlnuOKeZix6VZP++ZUTTj25Tmk3v/OYfv/AbKUExaqT/Ryt1YzJjx5nX819/KZemZtmXeuemvjCAzov1lWeveZzLbROSXbyB1q3w1Xm0/Guy+aZunXya1puvesieg3Q8G6tFJiz074//2xCvK5a1smw3om3u9472RHnaOQvrPulxVFtXrrF6/1Uke/9d917k6Z/ZT0r4brokqus6xer3M3Wua5uZQAAAAAA4GegWCqyPrLW6X87InTR8Es1rGeEipK/0qtzt9izbFmr9OKUqXr0mWl6fa3U7/rRGhjpzAN+IkxrfIZpWc8tY3+m/Wla36vIXbZ3X/m32O5ltyfvtD9rqmKrfFW1xvfBh3OV2L5L2XDTLeO9WvFb9e1qDb/iKm3f4f2LczNtys189/TYceO14YeNmvTAw/a6zLqrY7rD9dy2e12Ge33m07Oe5/6Z+qbsmef+YQ8V5xs12UbFfTbLm/WYuhXPT8Vjcnfr694X9/ZNmVmnOe+G+XRvo6p1HW9b7m24h4rHCqBuEeQDAAA4Gbn7lWL+bdsrUU4OpkzynGc1w2TB4i/XU/95XU89+5SeeO1tvfNwrLKdVqw8Jb/3qKasKbTqD9PkV9/WS6b+s9P0+qv36+p4KXvLa3ptYU1a2qogeYP0i5f0+muu9b302OUyGa3sNbO12h0ozDVBtI+1WYE67zd/0ztvTbXqPqWn3pqhl37TUxFK07yn/qt1dvqmo4abfZtwob2out2g++x9fUrDO7mKamRNhto+9rp9nE+99ZL+0MsUFmrW049ree/Jesns7wuva/qEnnb17P8t0yZ3+qdsf3vqzuen66lJt+vme5/QSy/cpXOtdSyZ+qqWV2z2a/0CLQm7S9P/O0tzP5ilq82+Jn+kF0wYSK1082MzNP0F9zmfqBYZTstqnmq73cBYtTUne/3OakNJ3nZqvUZZ+znNPqcvvTZZV5ubq3Ct5qxwhwtztfrvD9v317m3/l3/fGGibrv1j5r82lRNtM5j9poX9NYSsyPx6n5Jor3EEo9WAbO3fKN1ilGSWe+iDSrLlaZs0HLrI2LIOXJ1uFBZRL/fWvt1v8Z0c013uul+ez+fmHCOdZ+U38dJl9xv7fsTuvPW2/WHF6xzNSJGSv1YL3g09RfW+y69ZD8bj+jOeydaz8dT+kNHM2et5jnHWnF7wye47jX39k6Yz/thtqZMXavsWOsZfHmaJt97i26bNFX/tJ+ZNM14+iNV2bZixDm6zdqv+27q6pq+yOy32dffqneFHZ33v/Uaad1vZrtzH77wpI5jeUa87nfeL+XPkbWvi9Z7xBMryPhcz9r3sbnv/1QW4jMiel2oi0Ktz6Sr1L2qm8By/OsSb637Fdd7Z9Ifdedj1nl82LRQaZ3muV+UPcvJS2ZqiRkfcr/rPh5r3S/mPfXssErv1DJV7X/yUv3XvEN1gSbPmKo/3HGjdf3MM/Q3nVvlynwrPXZMKX95QnnbdiisVw97MOOmrPSYr5/pAwAAAACAn4Sw7hpz/fnq0aWj+g27RpeY7+6SN2qDO8nXrJ0uGXGpRo84X2fH5mrF29P1iscPnIGfAnd3uHfd86DG/+5P9vDlV9/YZS9Nf7OszD3869W37HmLFn9VVjZh4l/sstq2yGe4W97bvmNHpdb43MEyE/Rbs/Jr7dy20R76nN1bY8aOs0NuJ+Klf72iW381zl7XVVeOcEq9ubednr5Pm9avsevOevc/uvqXN3gF7TIzM3XRsMs0oP+5dh1TNyE+Xn97+ll7HWZfTfkf//A7ezDjr786zQ4q1nQbRlX7/Nrrb9qfpty9/B/umVgpYLdy1Wqt/e57r+17MvvyyGNPKi6uRdm6Fi74RKGhTiMNFhP887wWZv6/Xpleti2zzw8+/Ihd7l7H8EuG2fMAnBoE+QAAQK2FhIQoO7t2X16Y+ma5Bqcg1xXQig1XE7vAbYu+fceE7gJ19R03qpNHk1xhvW7RzZc4E2VMfRMoM/Vv8Q7+RPTS1dedY4+u/t+aWrTs5ki6ReOGxDgT1va7DdT5ditaO5XthM6yVyzQPJN/6WjVvTTJowWxMCVceoMTJFug5eurjAbV3iW36MpOTnNeitG5lw5wxs+xjrdr2T7E9rrQbtVO1pHnHLFHyvY3YsS1Gu5uEsyI7anz7SDTN1q3peK+XqA/TLpQsR7Vk5eabpGt9Vzya13ZzeMieZxzT7XfbqiC7H87pyqjxo9Mom6+1dpPZ0phXXX+ea5trUt1X7BvNG+ptZ3Ay3X1iHjrrnGLUbfzXMHHhetdrZ7FdhroCm6u2OCE0HKVvHqt1OtajTHrLVyrHU6SLyPZ1S3veed29Fhnbbjv45665rpeHvdRoDoNcp3P5KVbnXs4Qr1HXKgEj9NuBw+HuIKHZcd6ylS+H0w32aaH3XOvu8brGQw0z4wZyVhWdq5ORvdb/6SrPe+3kzByvOf7JUa9h7iuvzJy5Dwu3nK3aNbkF7SkMFDnTXhQV5c9g46IgfrDW7P0+rPWek/sJnDpNMw6Ru+IYmC3vpWe5bAwZ+c3r9Q6j2ckLCned8Cxuv0PDHPew1u0zrOr67AkJfhcmW92iO+hx5W3ZZtCe3RTy0n32oMZN2UpDz1GmA8AAAAAgJ8cfynA+mjcVMGuAkuA4tuYLw0O6cghV4kCItSuS0d17dJTl904ViNbFyl98Qptd2YDPwXFxcXO2Mk7kXW5W+Wb8fp/7MGzNT53sO/vzzzlFTy7ffyv1KtnD338yTynpOZM8O7iIReqnf2r+qqZba9Z+50dngsOdr0JTCjPhPFMq4Em+Ob23NNT7HmGqTt61JX2sqlpe+2yqtR0G9Xtc8cO7b2CfWZ5sz/uVg7d/PykX4y6ypmq7NixPPtcm0Cim9nesKEX2eMmNDlv/gJN+O2dZdfCzP/1bbeWbSslJdW+LvGtWtrzjeuvu7ZSaBBA3SHIBwAAaq1NmzZav369Nm3aZP0/8SnHHUw9Uz8x0RXQOVUKigr16aal9viGfVu1J7v6f1DN3bDQ/sw5dkhfJX9rj5+woDDv4FN2qtOFaF91T6qYhglUUJAz6lZtfSmsU1/Z/9RKTi1r2S170WMacdXV3sPkzyu3/BYeWCGUFaMWTitabhnJrtbnkvp18NEKVpI69XONZWT7jAZ52Ty9wj6ZYfoWZ66HCucsLNxJ2iT1VFvPjFNETKXW4dz7mz13UoVt3aYpTmuHlfa1V1d5n9pspexwhe7O7Z1Y4RxZ+xNbHn50O6Ht1lq4OTVewuOdVt7cMnbaLeep8GPd67UfV+umqU5Lgu4gV1JXV3AzY4Ore9HCLfrWeky69+uos7uZVhV36ttkMyNbm1eYbhIG6OyOFc9GDZXdx2s15Rbv/Rrxp4/tKp73sAkVpqz/XPPeeFUvPnCvJt11k279Z+26ajhhPu6HDFdft1o+9Tbvfb9qkmbYc8rDryejd8d4Z+zkRYR6X6uI2OrWnaoPn3S15Jg04gHd7RHwPRUKM5K1fP6bmvPSFE26+17dMeZxzXHmucVedLtuNhcidYEetu6ZWyc+o3nr91fRmuBx9j/hQt38i0SZFkRnTbau4ZhJenHuBmX7XplPJsS35/5H7Nb3THCv1QN/kl+Avz2YcTvMZ1rmI8wHAAAAAMBPTDO1a9NMykpVatk/6fOVusN8UxWhaLrPRQPSJqGV/Pz89PzfHtG0f/zVHi48r789787xY8vK3MMdt95ozxty/oCysheeesReR5vWJ/ZdpmmB7+Chg/bgbo3P+Orr5XYwrWIQzITezunbx24B7kS6bU1IOP5+mm0Pv3RYpfBcm9at7cCbCb4Z0dHR6t7d+z+iRES4/vvF8Rq5qOk2jKr22TN452bq7t+fqSyP7ZtWAkNCyqPJFZl5po5pUc9XS4fr1q23Q3rdup7plLh4bsuMv/XOTL087d/OXACnGkE+AABQa+eff778/f21YMECvf/++8cdTL2AgAANGjTIWcOp8din/9BnW5fZ43sPZegPHzxih/R8mb1ugV5c9oY9XlhcqEetZdek/mBPn5CC3CqCJ00UWDG0V62a1w+KP0e3/eIq76FfvGq1uQqahJ3M0i4R3SrskxkqtMxVrUrBw6oldBtWeVvOcG58zY8lsFKysnp1td2TFn6mRvrYB3souxeS1GmIOaNrtW5LrrRjrZaYFhA7xSuwY08Nt+YsWb9ThYU7tcmEEXv1UtJJNxaXqIt87ZM9dHW1tJb9jV6862bd8cALenvhBqWEdtS55w7T1b1ObbisJroP8rXfrqFtLW7l00+YYp2AavLqb+TkWE+BQiXPnaRbb79Pj/9zgb7ccsR6Zqx7beQAuX7D6iGwo65+dpqmPzxOwzuGKmPLV3rxgTt06+TPfbQ+erz9D1SnsU/ppefv152DOir26BbNm/6wbhrzmJbUsCnTrPfmKD95l5r07VUW4nNzh/nCeve0w3wH3n3PmQMAAAAAAE6WXyPXf7YuLS21P2vDvYx7HVWJ63e2ErRLc2bM14qNW7Ri7tuas8cqHzxQnUyFrLWa+d8v7XkbNm7UgrffsOc37t5N7ew1AD8NbRLi7edi647yH023cL5X27m7cpcju3an2p8t48p/5r9py3Z7HYknGORzh8g8Q3umNTrT5WxdM8E7d9CuKu5tP/PcP5TYvovXYLqtrQu12UZN9vl4TJe57lb/fDHznnhssh0sNF0Fm/3w7J539549dkivc7deXvtqugF2M9fPdKtrWu4z8266ZfwJBS0B1BxBPgAAUGumi9xrr71WEyZMqPFwzTXXnNKudfOLCrRyz/eKCGmut8b+XcO7XKCjhce0bKfvlvY+3/a1/fn0yPt174W32+PzN35hf9ZKUJgrlFSxG8sm4U7LdmuUXOnfxfuVYvrv9BQRqwR7xFd9qTB1g6sFNo/uJsM6DdPIsTd6D5d29OjOtOYikly/uFq3eqcqNziWqh3rXWOxEd4dCPsS26/CPpmhX92Gs9z7mxLfV8MrbssZLvLsz9inILl79Vzno7/UjOStzli52m+3yGSaLLEKP/6pq7mIRFcLjTkJOvc63/tRfi8EqvO5puU9afn6VCWv/0bZscPU3fwgMKyDupsugRdt0A474Cede17Psnus1sruY6n7hT72yR7OsZ+N5EWvap7dstpkTX/tKT0x6XZ7/vB+J3IHW9bsrBD82m9dQ2e0RiIU6975bhdW2OfyoXflJivr1PJk0yW3h4xUu7vfuhGu/nc8qIm9TAt4H+vxJ3yF5epA7hrNm75F2eqpiS+/rqeefUR33mqdv+suLLs/vIUpttcVunPK65r78t0abp3j7DUvaNaKim+jmu1/WEIvDb/3CU3/4CXdP8h69xSu1ZTXv/Hxbqus2UXnK+KqKxQ38Y9eIT43U9byz/coYvQIhfWtFEsEAAAAAAAnqHWrOPvz3ffn6vW337OH5SudLjAspnvP+QsXl83zHMwyhnsdVQrrrrHjLlQn/x1aMHe+FmyV2g2+VmP7Od+GNY5QcO5GLbTmvT/3U63aH6ZOQ67VhOG+v9EATletE1zdoC79eqX9abRLamN/7txV+bvw5N177M/2bct7VVq6fJX9mRDfyv6sCyZYZsJnNWFCbibsVlfc2zZd3O7ctrHS8Pqr08oChyfqVG8jJiZakScQ/jNd55rtz3r3P3agcOrzL9rlppXAMdddq03r11Ta13kffVDWqqD5NNOmnglnjhk7zmcLfwDqBkE+AADQIJgm3hsHBNmf5n9uTYJCnTFvYYFOqLC8qpo0PoEAUViMEkywp2KIKLCjup9jRvZr1usL5PTYactY9C/NqNTTbEedO8KE3fbrlade1WbPxEn2Gr01zRUyPHdEXx9d35682F4XuoJh3zyvFxZ5BolylTL/Vb1t/k0We7nO7+ajrbz1W72O78cQ222Qq2Wv/72qt9ZUaMo+N1kL31vm0X1rVcLUqZ99kZT8zn+0MLn8pBemLNBrProDrvV2C1Osf9xan0mJalHTZgZrIrabzu1oRhZoxrQ1FY7VXLPZWu5R6G55L3v9As1bs18R/brK9U/wCOscJFr7uUUL/7fBWk+itd4TjvFZOqr3JeZAd2rGdOu+r5Ccyl7zquY5qbSCHNd91iQ2vLwFxtwNmvd+9V3rrkt2/Tq0TKwTarTOxZdryjeYu2a2/usEUGuqbb9hdohx3fRXve4Hm/Uczpjro4voqmyuGCysXmxST9fI/C+0umzT2Vr93kxXiLeuBMbovEmTdXO8OaQXNMW6z70e3+xlem7M1brp7jedbpJrxuu6FOQ692S4wjxup4yFH1fqWjdjs7nvPMRa707nJXekoMA14qm6/c/YonVeK4tR295OiDi3UD7WVklgy5aKvnmMzxCfm5kXPfZ6hXTt4pQAAAAAAICTdVa3LmqfdIaysnO0a0+qPXzz7Vp7XmFRkd6eNUcrv/2ubJ7nYJYxy5p1HE9AbHddO/5OPThxgh784ziN6Rensvasws7QyHG/1iQzzxomTbhe1/bxmA/8RPTs3lUtYqL17dp1SklLt8sS2yQoLDREm7du18GD5T0ZZecc1JatO9SsaRO1jncFAHenpGnN9xvUskWsetTguaoNEx7z1X2uac3um5WrvFrwy8zMrNSVrekOduOmE/vpc1Xbrkt1sQ3TPW9Fpux4Xekejzm3zz09xW410Jxv023umrXfKTVtr1OjeiaoeN89d9uBwuN1MQzgxBHkAwAADUKQf6BuOPsqZR3N0fVvTNC8jV+oXfQZGtS2r1PD23W9RyjQWuaeDx/XU5+/rLCgUF3VfZgztzaS1KmfiSF9o81eP0AK07nXj1N3a1b2mpd1x5jxmnT3vZo07nrd+l6iRl7iVCsTqE433a2bk6wFUj/WvTdcrztM/bvH66ZbHtesVKnTkIm6bcjJhKyqEXGhbrvHtJRWqCVT79CIMRPs/b13zM26459rlR3YUbf9+UZ1KktcWdwBqsIFmnSzqT9Bc+qu6bDqxQ7Tbb/pqAiladbk23TTOHOunPN1w316bn1NIjvWVTrvGt1pznnhWj1398269S5rHXfdpNG//UhtL73AqeWhttt1WrmL6JZYxwHMGF004Xb1tnZ98/8e103XOPeXNdxxjblmG7zDWe6W95K/0Lz10nm9XTE+I7bTQOsu/kHzFu20Jgaq7Un9wDhQ3W+aqJF2yMq672+4Sfc6+3WvCYdN/risVTR3cG3ddGuf3ft+22yF9XO1eujNtJbnuvlW/9Op/5QTmow4R8MHmXmFmjN5vGuedQ2veylQZw8xFWousNsNuu+SVt73g7O+EeY5rEEyLyLeaTVzy8u6174/nvEKVVYlot8wDbcPY4EeHue6nveOuU2vBVnH56pSd0x3tg/fpfPM/TP3YT38RnkYLnvN51p41PpM/kDrdjiFVariujSJVyf7hv9CD9vvBtc5nJIaX+lYspc+7Lp/H3hGM16aYtW7R1NMADP0Al3cu4r3XVX7n71Mk24x786H9OL0l61rOEF/nmq6TA/V8EtPoqVJAAAAAABwykVGhOv6a67UpHvuskN0bvkFBXrz3dlK3rVHCa1a6v/uvsMVwvMYzDJmWbMOAFJgYIB+/asb5N+okd767wcqKiqyG0EY0O9sFZeU2K1bus377Au77PyB/ezpwkITnP3QXvaOW2+011WXLr1kqB1I+/0f7/UKu7087d9KSU3V2BvG2NPx1vPeq2cPu/U4dz3TCty/Xpluj5+IweefZ3/+7eln7SCbmwnemaG2fIX26mIbpmtez7qmO1xTNnrUlXaYrqbMfr39zkxnqjws6e6St1vXM+1zPPnRx72OwZznBZ8utMfNp2fre9t37ND+/Zkn3S0wgKoR5AMAAA3GNT0u019H/Enntz1Hdw4aq2evfED+fr7/350erbropasfs7vgvbbn5Xrll0+qdbjr12a11bbfhYrQfn22ukJT4klXaPKzd+vmXuGKKMzRupQcBfa7XS9NuVHdg5w6nkw45dkX9cStA3RufKBSkndqXXKuwjoO0J0P/12TJ7i6JD1VYs+bqKlmf89JVEJhmrXtndqsVrpoxF166uUnNNIE3jyZ8N+fh6l3uFV+1Kq/r0lZV7U/hoRLn9DfHxun4d1aKTDHnKudSskOV2+zvxPMNamJJA2f8pTuH9FTJo+UkZqq7LBBmvjsk7p6kO+Dqfl2C7Vu0QJlK0ZXD7Gbz6tbCcM0+eXJ1r1+pjoFWveXuV+seyyi1+Wa+Ne7dJ7XCYhQt/OcFt80QGd39LiWSR11tnv0kp5OS30nIayXbpvyN+ucnqPu4YXabN/HGdaD4rqPh3dyVYsYcrem/maAeocW2vf6Puv+HzPlT7ooydfDIXW66QndeU4rO2yakmyuU6hcNcPU+/dPaeIlHa1r6MyLHaWn/nqLzq31/Rim7nc8qZfuudzaj3AVprqu7z4lavit92v6dTW4jp1u1ORbz1GnUCnbuj9SspsoyPcheQs7R7c9e5dGdix/X8T+YrKevHXgqXnuYy/U3Y9drk7mPn3vYT3rtMQZ0etCXWTte0TSVere1i6qls/rYt5lj93veveZd4N1LOFD/mSdl8rHEtvbOtcJodq3/ivN+t83SsmNtd45d+ulV36r3tVdP1/7H9vTen/FK2zfD5o3d4EWphxVi3Mu1/3PvqQ7T7TLZgAAAAAAUG9M+Mh0nZuSulfxLeN0w7VXKTCwwneUAHxqk9BK14y6XFu2JWvK3/+l3KNHNXzohWrcuLE+X7JcmQeytDc9Q18uW6EmTcI09MLzdORIrv763Evaun2nrrt6pFq1rFk3uLVhAmRPPDbZbh2uV9/+SmzfxR5MK3Evv/R8WWt87tbfDHe96f9+TU9NeVJdOjtfMteSWbfZhtG5W6+ybb8/+0M71FZb7tCe2b+bbhlvh+HqYhtvvDbNru9e1oQXFy74xD5ntTXvfwvK1mP2x4T4TFe7RlXXwgT7+vZx/VeDo9Z9c9Gwy8rmPfjwI3p+6rNl3e4CqHt+6RmZpc44AABogLbuTFOHxFbOFE6NVC2c+Hs9lzxAk1/7Y/XhE/xkZC95TDc9vdb6V/hdev3hmgYDPeQu03M3PKuFJ7o8AAAAAAAA8DP1/CszlJ190B6PaxGjcWOubnAhvi07U9UxMd6ZwumgtNQ7OuGeNh9+fq7psjquAnu6pLhEJSqVVaKSklIVl5aooLBYZ3ao/7DT0uWr7K6pS619Oqurq5vcVWu+V9vENsrLz1fa3n3q16enioqKtW7DJjXyb6TrfjFSg87tY9fFj8cEAU1LhSZodyKhPQANAy3yAQAAnLR4nX/rVepU+JVee6dCl6b4icrV5iVr7bGItk5XqbVSqM3vvKmFaqXbbiLEBwAAAAAAANTGmKuvVI/uXdS1S0fddP0vaIkPOEEmkPfo/X+0W+gzAT4zGDt27rZDfMaKVWv17dp1SkpsrcceuJcQHwDUI4J8AAAAdSCw0426a2wrJc/9lz7cTJTvp2OLFr6xQdlelyxXKfOf1YvfmPFWunpQ7bvFLVzzqh6fm6PzJjyokbQwDwAAAAAAANRKZES4Rg4fqtEjLlXjoCCnFMCJMM/T/919px3SM8HYc/v2ssuirKF/39662Sp7/MF7dd+EXyu8eTNnKQBAfaBrXQAAGji61gWqs0WzrpqkGQpUQpKr5b3slJ1KsYN9geo99gk98IskawwAAAAAAAAA6g5d655+GmLXuvjpoGtdAAZBPgAAGjiCfEB1cpW8aKY+nLtG65LTlGGKQlupe7deGnn9tTo3KcyuBQAAAAAAAAB1iSDf6YcgHwCgvhHkAwCggSPIBwAAAAAAAADA6YUg3+mHIB8AoL41cj4BAAAAAAAAAAAAAAAAAEA9IMgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA98kvPyCx1xgEAQAO0dWeaOiS2cqYAoG6VlpYqL79QeQUFyi8otIYi+TdqpGN5+U6Nn5+Q4CAVl5SqcVCANQQqOChIwY0D5efn59QAAAAAAADAz92WnanqmBjvTOF0YL7r9OSeNh/mqz0zXVbHVWBPlxSXqESlMt/+lZSUqri0RAWFxTqzQ5KrLgAANUSQDwCABo4gH4BTxQT39h3Isb+gCm4cpMaBgWrc2BqCAl0VfsbsUGO+NRQWKi+/QOYfXS2iwjk3AAAAAAAAsBHkO/0Q5AMA1De61gUAAABQa5nZh5SemaOWMZFq3TJGMZHN1bRJiP39VUFhYfkXWj9TJrDXrGmofV7M+WkZHWGdr2wdyD7s1AAAAAAAAAAAAADKEeQDAAAAUCs7UzPUyM9PZ7SKUVFhgbKzs7UvY7/S9qZr//5MezDjpszMO3bsmLPkz1dgYIB1vmJlfpa7K22/UwoAAAAAAAAAAAC40LUuAAANHF3rAqhLJsQXHdFUIY2DlJ1zUPkF+fILDlZhSYnyCgpVXOKn4MbBCmxUoAC/Eh06kKPQ4DCFhoYpvHkz+fv7O2v6+Tpy9JgO5Bx2BfvqgGn9cMu2ZKWl71P6vv3auy/DLm8Z10ItY6MV3zJO7dslys80lwgAAAAAAIDTAl3rnn4q9jLinjYfdK0LAPgxEOQDAKCBI8gHoK6Y7nRNS3yBAX46fPiwiv2kQ4X5ahTQWO++867Wr1uv4uIStW/bXu3atVZCfKxKCorUq0cPBTQKUmlxsZo1a6YmYWHOGn++7C52rfMXFd7UKTkx2TmH9P7ceUrbu88p8S0hvqVGj7hUzZud3PYAAAAAAABQNwjynX4I8gEA6htBPgAAGjiCfD+SrFV6cXGk7hzVVpkr3tBMXaE7+0W45m39SI/O3uEat0QNHls+z7ZDM6d8pM3OlC1ygO4Y30fRzqSbWfdLaQP1oLWdBsmcq8VxPo/9lDHXbtpXOtDhiqrPq1NHla5dHXHvgzMpH/tiX/vF2c5UW1078Qp1cqYqsuuu61Kn5zG/oFDpmTmKj42wu8wtCvRTxqFDKi0q1kdzPtL3a7/TsaPHVFpcqoCAAJWoSL17ddf1N9ygkJAwHc07poimzdSosFgtYmLsOj93pnXDVtb5DAoMdEpq59u167Rg0RIVFRXpjNbx6talo6KjohQT7bpH92dmK/PAAa3buFm796TZ3ftecvEF6tX9THv+j86+z9N1UTX37qmwefZULWxVzbNbg+fP06l4vgAAAAAAwM8PQb7TD0E+AEB9a+R8AgAA4GQcSJdauUIiB9KyFR1ZHhjZvF66duIEPWgPVyh68RuaudWZWcYEs9x1rKFiQMQETaZM9Qhyoc5tXaZlWc54BZsXe4R86ly2lr1vwk3u6z9WQw58pBdXeFzrrR9Z1z6i7B65Y3B25fDnKWS+jNp3IEetYiOVnZ2jEutfEXtzDqqooEgH9mdq/bp1ysvNVaPiIgWWlkgFBSqxhlXfrlFefpGOlRTJPyxE6UcOqtTPz14HpHjrfJpw5IlYtWadPlnwuf3l4PChF2rsdaPVu2d3tWndSiEhIfZgxk3ZTdf9QpdefIFKSqWP5n2m1WvXuVZyujPB3mmrlOlMnho1eP4AAAAAAAAAAAB+BAT5AAAA6sDm9Tuc8J5pAStC8VGucqPTKM/Wp9qqRwdX/TJZWccJquzQzGlfKXqUCXBV0aIUTlJbdeqQre+2+grv7LDKIxQV6UzWuQgNHO95j1jTg9vqwLrtzn2RrWWLd3jdR9H9rtCQSLNfTsEplpdfaAfG8vKOqaCwUDmlxQprEqbQsDDtTU1VSUG+gvxKFeLvr8bWvHbxcUqKj1d8XCvlFRaoQKU6UlAg+QfqUEmh8q11HMnNda28vhSlaNGbb2jK7I0qcop+bKaFPHNej+VZ56YWsnMO6tPPlygwIEC333K9+vTqLj/zC+AqmHl9e5+l28ddby9jWvHLOXjImftzd7znDwAAAAAAAAAA4Mfhf+99E//ijAMAgAYoK+ewosKbOlOoW9laNu0VzfhshTZkSQc2rdCXy75X8rE8Ja+2xjf6q2vvVgp1aruZeumt+qlvQoir4FiaVq4+orYDO1bRTWOEug7sp65R0tHU77XqcBsN7nK8QJ/prvcNvb/M7JMZ9ivOY/2ma8in5xeqa9PVenr6fJ91DNMl5Utzfa3DdewfFXZUs5WvlNXZENCx/LgM05LgP2ZpvrMfleabFrc8t99F2rCrifr6OG9lKqzT+zzXcL88Oee//+AIrZq/p9I5yFzxkeYHDdSI0C1KbtqjfD0V9yMjxrku5ftQ6VhnH/J5T1SStUVflp2HvVr+2X7FD+qhNmWrC9GxXVUfl32fWPvTt6rra5/3LRWO1bXfy5u67jVPR44eU6NGjVSQn688lWrf4UMqLMi3fxVUUligb7/+Wn16nKWAkkKdd+456tQuSbHRMQoIbqyo+Dg1j41Vqb+rK92jublq7OdnLeunsLAwu6xepK7Qf7/eo5g+Q3R23Il1bVsXTJfFJs0X3DjIKameaR3xnffm2kG8y4ZdqLaJbZw5LkeO5Or5V15XY2t9LeNinVKX0JAQawjWpq07tHdfhnp06+IzAGg/95vc97OL/c5Y2dQpc71fNsR2VM5s1zvQ53Pm9YxsUcAZMdq3yftd5/2Osep0cd3ndvmybOv53KNVXs+Xxeu9sUL7Yr3vWa91Wst1VYVn93i8nr/KfD5fld73NXwHey7j9Y5wv0diVDD/DescO+cmpfpj91TVuS1T8f0bu0UvVXhH2fv51mKnznHepQAAAAAAoFYO2N/dN3OmcLqr9DWaR4Hd5a71aUqsUWu8VMUlpYqJOt73+AAAeCPIBwBAA0eQ71QKUZve/TR4YIz2LSvSRRPHanQXf2043EP3jr9Ug32FQLJWaeZngbrolz3KA1R2kOx7V1jFHaioECZzq1GQzw7PLFToqAm6c6TZv37qGrBCM94qD6nZ69m0VauKB+pBs68+6pgQyExd4T2/LHiSpz3WPv+w6XsVDXa2E7tf8+d/Xx4WMfsxbaN6jL9dN17sOk/Jb83SBnfwxA6tZGtI2fwALZq+QgdCWlcd5DPLWPvYv2yZforbNUszlrlDNDXYr4rcQcqRA9Vi42Jt9QqyZWvN/BUKOudSxWWs8AoDZX6/WgFDx5Yd2765HznHFqLQwi36cp13sGfzl/OV3v4CDa5BCMbU3RDaQ8Od65yzcYVSKwR2TCC0qnvhuNc3KsC6ZyuEgLI26KNlgeo/svK9d/BwrkKCguwW+fIDAlTcqJFKigsV6CcV5R7Rru1bFdu8mUL9/RSoUhXkHtSRw0eUW1CghA5tVRjkr/ySYvk3ClJxfoECSkoVEhCopk2bOFuQ8tLW6v33PtSHC77SF8u+1Xe5sTq7Xbiy7CDRch2MjNH2D9/SO0tzlNivncLz0rVi7my9PnexXf/bND+1btdKzVx5QWunt+iTWZ9o9meLtWiJ9VytWKtvN2Qq8sxEpc5+Xq8syVSxVe3Q9tXWM5eu8H6dFVeyX99+OEdvzvvcXmbZxv1qlthRce5L5gSfdjSOU8niWZo+b5ua9Gyl5Ndf0YylhxQdu1uzXp2rz3PiNbBDpivIldxYCSVf6bXXP9WmsO7qVSE0WFxcomPWOWkSevz7wkhJTdeXX61Qu6QzNGzIeU5pORPQW2U9Ayaw16lDO6e0XMu4Ftqdkqbde1LVvl2imnlcAzdzb21QR697y/vdk60Ny7Zo86Y9SrrB+/le7A562c+/qyVR13uojfbM/lg/HDPBZPc9tkOLNnXUnWX36Pf672LXO6ZNF9ez+2VGF93xu1Flz4LrvWG6K7fet9Yyg6137uK3FqrAIwA488AA1zJmfsAyOxAYmljzIF/F56+iys+X9fx/tlArPY+9Ju9gEwb0fNd5BQjd77L9zjm2ju+YtV7P95917DnHrHPlM8hX9bm1t1eD9685lzN29i4/lxWvMQAAAAAAOCkE+X5afqpBvlVrvtfb783RN6vWKm1vhv2dbMXvBM33hZ99sVQLFn6pZSu+VeOgILWKa+HMBQD8mOhaFwAA4GSZrnE7nGl3zZi5daPUquI/zk3LTFP1qBneNwEUz24cLZF9dOfECXrQGa7tYOp/pM3O7NravPgrHehwhbUep8DiuyvWtrp2VFtn3NQZaO2XUydrlRZu9TE/a6M2ZzkFhud2Ogy0tpGt1AOuSbMfGnyFBpZ1SdtWQwZHON0KZ9vdxUZVmO+5vcp8LeN0XVyL/aqaq0vNzYtXlXepuXWZFmmAhnicSzdzTj333XSZnJnl6po3ukMXRXntk6t73h4djv/FjWkBa6bXuY9Qp+7WeZvtcU9s/ciq44xXqZrr6+yvZxfP5t494NzHFeUXFCkgwPXFVL6f+UqqRH6N/FRaWqzg4AB169pR/irQ3j3J2vbDd8o/lK2N363W3t075e8vNQ1vZofmCktL5B8YpPziUpWUlqq42JRKedbxTH3zS23OjVGf4Zdq5OA2imjcWCaTdyDNnFN/pSz7VJuC45WQlKCoPOsZeXmmFuwJU59R1+qWIfEqSv5K73+1316fuX9f+dd8fXswTD2HXqrRIwaoXUC+co/6W/srxfe5UF3taxens0dY868ZoE4B1v315tv6ZOshtew5VKOHdFSTrB2a8+an2mWvtPz6Hlv7lf5n7Wu7VnFqEWbdW+Y6+6dr8SfbFdI6Tu0TrJW7u8zOW6dFi3IVlxSn+NjK8dTGjQPt81tTKXv32p/n9Olpf56Ifme7lk1Jda3rRFV8fs3z7e6StvJ7yHq+Rg+Qd+aswj1qPzfpqvpRdb0DvLort96fF7m7xbbfWxEaMrpPeRi1wrvweCo/f1XxrHO8Y3e9L06oO2zr/eX5vjPnMdo9bR37wCqPrbpzW4P3r69z6dSh22EAAAAAAIDTX/q+/Xr8qef1z3//Rxs3b9P6jVv0yaef6y9PPqtpr7+j/IICHcvL00vT39Qjf/275n36hV3H1DVlTz7zojIPeH7pDgD4MRDkAwAAOFGmRSMTzpv2lQ444y8tztaBxW/Y4+VBq7a61h3UGy071PfiClcgyBdXSOUEAh+2bOsf11JUpTBhhKKjyoNItsi4CqGaCMW7Qx0HTODDI4BoDyZI5h2Iq7wd9zZc++E+F+7BnB9Z//jPNOvJkqIja/OLxKqWMftd0/06DhNk8wjgmaBbVPd2lVqoczMtVrmPzStYF9lOPax9ssNFlswVy7S5UiCnMrsrzMURlcKe0f3GyhXwdLa3OE7XDo7weZxlqru+lk7d2lr38A9OOHCHFi2Whgz2HV5q1MhPASaRZwRZnwF+ahIWotxDOcrISFfbNm2U2DpeQy4YqP7n9FKn9meoV7czdcGgATqjdRsVFhUoMDRYAY0DVVBUrEKTBbS4gny7tGDeDuUHW8/JraM1rHtH9eh3hcYOjrPmue4j6ajC+43RH2+8UreM6KJ9n3+qzXmN1WOUVb9DnBJ6dlSCVevgwcPW/92vBf/9SunW+kY76+vaIUzKs2a1TFC8AhSdFKGAo9Z0bFsN6GLNT4pRzqIPtShDajd8nMYO6aKufS7V6D6h1nLWs7jHqmtxhQqlojYXauL4KzXmxvOV4A7s5TbTwHHjdcs112p0d2s5+xmyFCdo+ISxGmOVD2tlCrw1Dgq0z29NmRb5jJio49xM1YgxLwNLSpprXSeq4rNYPl3Ve8gH03qd+74271Kn2DfXO8DzuTODefbsa2Ofc4+gWy1V9fz5VOn5cqvFO7gGvNZjv1dc74Hq/oaUqfLc1uD9W9W5jLKOu9qwJQAAAAAAAOpbQUGhpv7rVSXv2qPYmCiNueZK/e72m3X5JUPs1viWr1yj51+eYQ2v69u169S8WVNdYc0zda6/eqRioiO1PXmXXcf9Y2wAwI+DIB8AAMCJ6nCF04KeCd+ZoN5YDYmM0JDx7pb1nHqeTOt74wdIi5dV0+Ked+DqRNQuIFcVjwCix1Cb1q2iBo+ttPyD490tPFnH6TsJU40TWaY2TMta0qLFO5wWqdrqon6+zqUrTGN3Pewcl/d5cbXu5wp+ZWvzumxXcK5K2Vo2zb0+3yEi1z1Wfg5lrfukrrPTUmGmCS2aQF9kF3Wq4r4rKTEt6LnG/Yr9FNAoSPszDih5504ltIq3u2stLSnSwewDio2KVP7RXEVERyk8KlqB/v4KKG2kwqMFyj6Qo6N5hfIPcnUvGxhofW5dp+/ypLgBQ9Qp2C72sN/V2l3znhpiwnG2Hfp2Xb5V1l0DWktFB9O1YvaX2m7Nade5jbRnrdYetGZ366eu7vXtTVGK9dE8Ns5u5U/WMvtMsC8qRuFm2jr/23ccsj7b6uzuje0SIzjMjOcrz9Q14acM83mGLhrirMfY5wo1Ne8zQD3CXEVGZpqrzbJ255+nhLLKleUXFNrnt6bS9u5TkHXezJdr1TG/pjVdevgS3rypAgICykKBp8rx7k/T+t2jdvfb7vu6Yot9vnk9C+7B3ZpclQG76hz/+autunkHV2S9V+xzdYWi7ZD0G1rmhI4rOv65rcG79ITOJQAAAAAAAOrbh598qoz9B5R0RmtN/vMfNeT8AerR/UyNuuISPfrAPYqNjrJb3tu8dbtaxsXqsQfu1VXWPFPnosED7WUS4lvaPwT+9POlzlqPb+rzL2r4FVdp+45kp6RcXl6eJj3wsF0HAFA1gnwAAAAnxbS+5A5EZCtVVYehas7VWtKJcbX65NllqourlajqwyVmu86xmFaXzDInuR/uFswqs7bj0WKdW/WtVflexmu/64DdBeXWH7Ssmq5mXcG3AbrDsyvKisyypl7Wdn2X5erKtiqbZ7+h77qPLQ8jHY8TMqxunZVVPE+my17Z5/N4LQ82DgpQgd29boBKjhQqJ+OQDmQcVKvYNgpQoHZsS9aRQ7mKiozSkcOHrX9l+OmYfyNFJLRWgF+Q/HKL1TivVEGlgcrIzFFxUam9Lj8/v7Jr3rx55W5nlZZuB/DCOnSUaZ/P5m4B7+AqvTRlqp7810wt3NtMPUaM07VdApSTlql8a3Zc6xhTy5a+NdVV5m7dLCNdJsKWUFbHeeYqBJdc92+M4mOtjyJrmYPWZ1JHdfII5qXsNWsKVefO5duzKivVOkcm9Ne1QzUpPktefqGCrfNbUyWlJSouLa0ypBcW5koTbrGuyd9felVfLPlax47ZSUQvZmmzLl98taRX9bNczr6WUZHWfVTFe8jdSqHNCbiOGnvclirLmXdANe8Ju7W4Ct1sm/fYcZqPq/XzV62avYN9vYtr3lqfK2R9hzt0XMnxzm0N3r8+z6XFXEMCfgAAAAAAAKc108qeYVriCwz0/u4xLDRUY68f7UxJt9xwjUJCvH9hHRQUqOt/McIeX/3devuzJsbeMEYxMdFat67yMus3/KCU1FS7DgCgagT5AAAAToorHGV3P2hCW3aIxdMOzZztGbTI1rL3v5IGDywLiGWu+MirVaXNsz+yQ2JDahXSKtdp8ABFbf3Iq6tXs41FqrDOrK8006N7Rnu77u5fI/voog7ZWvT+Kldoymbt+2zP6er52g/THbFr2oTIInTAs2XCrFWaabrerZLTyt1iH+erBt3W1ph97NV3NVsp5FLxOG0maLdDC9+vJhBoVNvyny/WPTXN+x7yqbrr6zChRa37yNp+hLWvVW/fdP+aX1hof+lTfPSwMtP3qrEJ6+Ue0dGjx9S+XXs1j4xUXmGJiv0DVRoYrMiYWBUVFWnd9+us+vu0Ye13WrLoC61evkIHM/aVfYEU4LRtV5RXZH96OpKRrlzrM6FlWYxP8pfs9vyShuruu8brvj9O0KQJ12tkl2b2moqs/3nJ26Iv15tQnRPIs7gCS6HWtDs86O/ai+ICe8qWt1Hfmmsa20U9mlufFVv1sx3VvjTTR2+c4r26zU3Xrr3WR3Nrm+WVfcovKFDjxkHO1PHFxcao2DqvWdk5Tok3ExAzX9C1SzpDh48c0ZKvV2rBoiXOXBdz/GYdZl2+2CGzrcvKnzOf97dzTznjrue3/Jlxdd3ssY5K78KKgTfXu7FS5s6rG1ff74Cyd6jTpbVnuM1+93nUraTWz9/x1egdbL9DvtIid53jvv8sFdZZXVC6+nNbg/evz78BrmvYabC7VVUAAAAAAACcjrJzDto/pE5sk+CUeOvSsb16dOui3j26qW1iG6fUW/t2SfY69mXsd0qOLyIiXKOvulLvf/Chsj2+vzSt8b0/+0N7nqkDAKia/733TfyLMw4AABqgrJzDigqvvgtGnIwIdR3Y0RVqiOqowV0qh0Fyls3SjM9W6MtlZvheh84Zqzs9QiNHU1fov7MXO/NXaEPUFXrwhq7y0T6ZVfd7rTrcxud2yoS0Ut8u/lr81izNd9a56nBv3VHWpa17Pb01osVXeukt17Y3aIDu8NhudJeOClj9sf7rse9Bg0epr90UU572rP5e+1r0UN+EELt+pTKzH7H7rX+gz3eWt4aMLrp2aCt7G6EJPdQ1YIVmONv/cmdrjbs0UKt2NVHf3q46lZhzHLvHWqZ8nfb5KmtJqwb7VdGxNK1cfURt3dfREh2wX18Wn60be5ef5wObVii5afmxJQV8X37digfq2qgt5fMdZj3z1+RpyOgL1MbHpm329q3r4RyP57Avtp+6mvO99SM9Ot19zFsUPWqCxp1V1Qprdn1tISEqWL1CPyRc7HWslZRKh44cVWTzpiopLFBRYaGC/BspNChQjUoK7V9sxsXFqWnz5sovKlSR/NS6bQcdOmq6dzWbCVVhQaF+WL9ewY0CNPz8/oqKilSAv7+Cg7L13dp07U3ZqVz/xjq652vN29JMvZKaaM/KhVqXGaMeF3ZXG/ePQoPDpeTV2ronU4ebNlejwwe0d8dKfZUZpS5xIQotzdCK9ZnatzdbwY1z9NW8b5Vekq/8wjj1vch1jbO2rNTatKMqbtRMRYePKjwuXsEZ32tD2h5tzWqsJoc36uO5X2tXYYyGXD9U7a1TnbPpG32166jaD7hA5Y9fmpbP36z9sV10cc9WKvvd6sEt+nLFHh1p21fDO1X/xVTWwcNq1iRUgQH+Tkn1MjOztDslTQnxrRQb47tdtMiIcHXv2lk9u5+pJmFh6tS+rZpb185tx87d2rRlu7p27qDEM1o7pR6s5ywuY7E+cj/71v19R/f9Hu+ebG2w78OB2jf9Db1v6qzeozajbtdw93eDlZ7VIl00vovSPZ616C4x2jf3I9fyy/Yo6dLeOrTJ41mMilHARmc/MmJc27bW29Xz2bOGVUEDnfs3RG16W+8tj3ducuI1GhH0faVns0xNnr8K7OfL2h/P95RXWQ3ewa53yBbNn1/V+8/He8vvkNc6vd993o53bmvy/o3u0k9xu6xzOde1Pfe7pzbdqwMAAAAAgKodsL+7b+ZM4XTn5+eMuHkUmN4zTA8YpsR8H2qmiktKFRNVzXeup9DCxctUam3/8kuGOCWV9evTU31793CmKmtkHd8nn36uwIAAXXrxYKf0+Fq0aKH5/1ug0JAQde7s+in62u++16cLF+k3t99WqfU/AIA3v/SMTPM3BQAANFBbd6apQ6JXU1GAMle8oZfWdfEOlqDumQDe4rjT+Dxna9m0N5Q6uPpwjvkiak96plpGR+hI7hEdOXxEe/emKSjQX4EBjVSQd1RB1mejRlLzpk3s+nnFfjqUm6fC4hLl5hcrMCREO5NT1LltotoltVZEeHnALWfjp3pr3kYdKJL8m8fp3MtGa0jrw/a+LTraRTdNGKoznLq2vF365J35WpuRr2IFqHFktAZedq0G2q+6fG1fMFPvrs1WcViChozqpgOz5uu70AHl1yFrlV557SulF1nL9rxcE4dZay/arxWzP9bC5EOudcZ20OWjLlTX5q4m9TbPnqqZW+N02V3X6mxX77X2el6c9pWOdB+tiWUJNou57rN3KGHYeN3S02ck1VZYWKT0zGy1bum7ZTxffti0Ve/Nmaf4lnG65cZr7O6Ja8Ncm1ff/K9S96br6isvU5dO7Z05tbFDM6d8JBHqalDsvwtpA+uoi2EAAAAAAHA8W3amqmNivDOF04H57syTe9p8mK/hzHRZHVeBPV1SXKISldpBvpKSUhWXlqigsFhndkhy1f2R/W3qv7R56w79dfL/Kcr0vnEC9mdm6c+T/2q33nfP725zSmvmgw/n2q3y/f2Zp+zg3iOPPalz+vbRVVe6uus1TJ0/3DPRmZLOP2+gXd/dYt+qb1frwYcf0fNTn1W7tuXncfuOZP12wt16dPJD6nN2b3v6L488rv+beI/+89Y7euudmXru6Sle2/JUcbtjrrtWDz3wZx07lqff//FeTfjtnUpJSfWq42t9ppVBc1xme25//MPv7OXd3Pv2l4fu18efzNMzz/3DLq94rL7WVXGb5nxc/csbnCmpS+dOlc7N1OdftD8H9D/XruvejmGO7csly+xxY9a7/7HPH4DTD13rAgAAAKeEqxvKqO7tTtuwpKvbUdMFsFNQBRMWaxEVrrT9WWrerJndpUKruFiFBAXZ483DIxXcpLmK/AKUefiY0g7kKPvQEbvlvmJrCA8LUZPAIA3s20vxcTEKb276qi0X3mWo7vzjBD04cYIm/fpaDWltwnMRGjjeKqsY4jOCz9Bl436tSVb9ByfeqYnj3SE+o7HaDRvrmnfXaKu8o0ZOsMY9w5SRfXSbvT1rWRPiMwJi1O+aceXrHDe0LMRndBplyj1CfIa1njut+l4hPqPDFfaxVBfiM1IzstQiuvoW+yrq2L6toiIi7CDeqjXfO6U19823a+1lTat9HdrVzxeJOA05XevaXSIDAAAAAADgJy3J6YVj5erv7M8TsWLVGvuzbZLvrnerM/j88+zP7Tt2aP2GH5SSmlpWZkJrkx542A76rVn5tXZu22gPJlQ2Zuw4O/x2Il761yu69Vfj7HVVF+Lz3O6m9WvUrVtXZ67La6+/aX+698sE3kyozyzrZvZx1NXXKS6uRVk9s04TtjPHZo7RLTMzUxcNu8wO17m3mRAfr789/axdzx3i81zXwgWfKDS0/LtlE9AzoUZT7q7z69tutddrtulp5arVdguIps7rr06zy0yIz3Rr7F7WHBOA0xdBPgAAAKBOmVbupurRKR8pc7B3N8qnDdNi3JSpemlxhK6deIVcHRxUr3FQoJqEhCj7UK6aN28uv4DGahYRreDGwdZ4gPZlZmpb8k4l706xW+Kzf5hq/Z+mTZooMjJcLWKiFRTg71q2lq3INUSZ2YfULCxEQYGBTknNBFjn8BdXDZe/v78WfrFMWdk5zpzjy8zK1qIvv5a/tY5rR19hrws/T6b1PfMOKBumbVSP8bSwCAAAAAAA0BBcfMEg+/vDjxd8rqPHjjmlNXck96jmfbbY/hG3WVdtmZbmTHBsxuv/sQcz7m59zh3s82yRzrh9/K/Uq2cPu+W62jJhuYuHXOjVOp0vu/fssQOD7u0GBwfbLfKZT7eOHdp7BQFNfdM6ngkAZjvfxZp9HH7pMK/W98w6H37wfq1Z+519jJ7M8u7W78y2Ro+60q6XmrbXbgnQnA8T9HMzxzFs6EX2uAkNmnBexdb3zD6aFgDfn/2hV3DQfPX+i1FXOVNSVna2/V199+7dnBLXMbn3B8DphyAfAADAz1B0v7HeLZShDjktyU2ccHqG+AynxbgHaxjic4uKaKojR/NUbP3DPzYmWgGBgQoIbqJgazjjjLbq2/dc9ejVS20Sk9QiLk5xrRIUGR2rgIBgBfj7K65FrEJDQ5y1/Xwdzj2mo3n5igxv6pTUjglFXjR4oAqLivTya29p1Zp1dhceVTHzVq7+XtNmvK0ia5mhF5ynmKhIZ+6JaKtrrfuH0NdPl/03wH4HuIexGngytwQAAAAAAABOG+HNm+mCQefaIbHpb5R311oT5rtE851jfn6+Lr5goJo28eyipOZMC3wHDx20B3drfMZXXy/3CtO5mYCb6X7XtDDnDszVRkLC8bupbtO6td29rWfrehV5BurczLr378+0Q3Fm38w++qoX36qlHUY0x+gWHR3tFaIzIiJc/90g21qf6XrYtNBnWtzz1RrhunXr1dravll3RWYf3IFAN7Mus063SGtbJtw3+dHHT+i8AvjxEeQDAAAAUGNntIpR1sHDOnQkTzEx0WrWtIlK7AyZv/wUoMBGwQpt3ET+/sFq5B9klfupWbOmdl3zK9CfO9MSn+l2uE3LGKfkxPTr01NXXHqR/Pwaad6nn+uNd97XD5u22r+WdTPjpszMm//ZF2rUqJG9TN/eZzk1AAAAAAAAADREvxg5XC3jYvXduh80d/5Cp/T43pszz/5OsU1CK111+TCntPbcATXP0J5pOS49fZ89XpdMWM4djquOacXO3VVuYvsulbrBrQkT5jOhvrpiAoxPPDbZbuHPdJVr9sszaGhaEawN00WvZwuD5ty//NLz9rXo1be/vf6K3fECOL0Q5AMAAABQK2e0ijX5PO1MzVBwcIj9a8CWcS0UGxOj6OgoezDjpqxVy5Z297o/d4WFRfb5auTnd9IhPrdeZ3XVb269QYltWmvXnlT7S7ZnX5imF155XVP/+ao9bsrMvKQzWuvXv7rBXgYAAAAAAABAwxYUFKjf3T5OjRs31ocfL7C/J6yOaYnvnffmaP5ni9UkLFS/+/U4u2vdumQCZiZoVhMmmGcCenXNBAt3btuoNSu/tru0vf2O39aopTrzQ3XTup0ZzHhdM930mv1yBw2nPv+iXW5aETxZ7rCgWb/p5vfqX95QbauEAOoXQT4AAAAAtRYV3lStYiOUnpmtPXv32y3NHcsrsOb4qXFQkAIDA+wW4H6u8gsKdfDwUWUcyLHPjzlP5nydaHe6VWnetKnGXjdKv/nVjRo+9EJ17dJBBYWF9rxuXTrqsmEX6je33qgbfznKrgsAAAAAAADg5yE2Jkr3/Ha8/X3tvE+/0IvT3ij77tBTfkGBnn/ldX32xTKFBAfr3gm/VkR4c2du3TLBNF/d55qW8b5ZucqrBb/MzEy7+1lPpqvZjZs2O1Mnzmzj4QfvV2mpq5U9N89ucd1MmbvLWndLg77qmS5uTVe3vrrdrSlz/CZsZ1ouNOfEdOtbsftcN7MPpitfX93uVsW0SvjHP/yu1i39AfjxEOQDAAAAcEKCAgPVumWMoiOa27/wPJqfr/TMHKWkZ2rrzrSf7ZCSfsA+D3nW+TDnJTqyuX2ezPk6VWKiI9WnV3eNHjFcd995qyb85haNGnGpzu7ZXTFRkU4tAAAAAAAAAD8nbRPb6N4Jt6t582Za/d16Pfa3fyg1Ld2ZK+1J3WuXmS54mzVtYtdNaBXnzK17l14y1A7C/f6P93qF+V6e9m+7hbyxN4yxp004zYTUTMt07nrbdyTrX69Mt8dPxNvvzPTapgkF+vnJbmXP7Znn/uHV9axpuc6UjR51pd2ynRlu/dU4zZu/oKzVPMOsd/Kjj9td5JowXk2Z5cx+ubkDje4ucs26zDp/O+Fu+/jdzH6ZfTD7YupVxSyz4NPyrpXN9szx1UVLfwBODb/0jMxSZxwAADRAJlTSIbGVMwUAAAAAAAAAAOrblp2p6pgY70zhdGC6l/XknjYfJvBlpsvquArs6ZLiEpWoVFaJSkpKVVxaooLCYp3ZIclV9zSQe/Sopr/+rr7fsMnadT8NvXCQCguL9PmSr+35Hdol6o5bx9phvrpgAmmPPPakHUgz3cZWZEJwJiDnNua6a/XQA3/2CqWZ0JkJ/H25ZJk9bercMOY63Tvxz3p08kN2yM0E1f7yyOP6y0P3q13b6s93xW2ef95A/f2Zp+zW+dzbuu3WW+yA3FtOuK5L5056fuqzldZdcd8M05KeafHOrap9M+UmmGeOoV3btpXWY1rMq3jOTHDPdLnr5rnvbu5goeey7m15tmJYcT8BnF4I8gEA0MAR5AMAAAAAAAAA4PRCkO/005CDfG5Ll6/S27PmKD8/35729/fXiOEX67KhF6hRo59vh47uYJ4JwdWmRT0AqGt0rQsAAAAAAAAAAAAAANDADTq3jx69/4/q0+ss9e19lh5/8D5dccmQn3WIDwBOJ7yNAQBo4EKCg5wxAAAAAAAAAABwOggNbuyMAT+uyIhw/eZXN+jXt9yg6KgIpxQAcDogyAcAQANXXFKq/IJCZwoAAAAAAAAAANSnvPwCFRWXOFMAAAAufukZmd4dvQMAgAYlfX+2QkMaq1mTUKcEAAAAAAAAAADUl4OHc3Usv0Bx0bSGdjopLfWOTrinzYefn2u6rI6rwJ4uKS5RiUpllaikpFTFpSUqKCzWmR2SXHUBAKghWuQDAKCBa9okRLnH8p0pAAAAAAAAAABQn44ey1eTsBBnCgAAwIUgHwAADVxYSLD8G/kp+9ARpwQAAAAAAAAAANSHrINH1KhRIzUJCXZKAAAAXAjyAQDwMxAbFa68/ELCfAAAAAAAAAAA1JOsnMMqKChUi+hwpwQAAKAcQT4AAH4mWsZEqLCwSOn7s3Xo8FHlFxQ6cwAAAAAAAAAAwKmQl1+gg4dztTfjgAqLihUXE+HMAQAA8OaXnpFZ6owDAICfgdxjeTqce0z5BUV2l7vH8gqcOQAAAAAAAAAAoK6EBjdWYXGxghsHqmloiMJC6U73dFZa6h2dcE+bDz8/13RZHVeBPV1SXKISlcoqUUlJqYpLS1RQWKwzOyS56gIAUEME+QAAAAAAAAAAAAAAwM8aQT4AQH2ja10AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOoRQT4AAAAAAAAAAAAAAAAAAOqRX3pGZqkzDgAAAAAAAAAAAAAA8LNTWuodnXBPmw8/P9d0WR1XgT1dUlyiEpXKKlFJSamKS0tUUFisMzskuerWkeSUfc4YAOB0kpTQwhk7eQT5AAAAAAAAAAAAAADAz9rpHuQDADR8dK0LAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAAAAAEA9IsgHAAAAAAAAAAAAAADwM7F+4xZtsAYAwOmFIB8AAAAAAAAAAAAAAMDPwNffrNZzL07Xs9ZgxgEApw+CfAAAAAAAAAAAAAAAAA3cytXf6d9vznSmZI+v+X6DMwVf8vLyNOmBhzX1+RedEgA4dQjyAQAAAAAAAAAAAAAANGBr1/2gl1972x738/OzB+PFaW/oO2teXfjgw7m66Zbxys7OcUq8mfkmFGfCcQCAygjyAQAAAAAAAAAAAAAANFA/bN6ql6a/aY//+pYbFBzc2B7MuPGiNc/UAQDUL4J8AAAAAAAAAAAAAAAADVBpaalefvUtlZSU6PZx16tPr+5WoZkhe3z8Tb9UcXGxXnFa6wMA1B+CfAAAAAAAAAAAAAAAAA2Q6UJ3zDVX6fe/uUV9e/dwSsv169PLnmfqAADqF0E+AAAAAAAAAAAAAACABuqcs3uo25mdnKnKunftrL69z3KmfjwffDhXkx54WHv3puumW8YrsX0XezDj2dk5Tq1yU59/sayOGRZ8utCua9ZjmGXM9KpvV5fVNZ+e8zyXd8/zZNblWef9D+Y4c7xVXF9V+wwAtUGQDwAAAAAAAAAAAAAAAD+6PSmpeuL//U1/f+Yp7dy2UZvWr1FCfLx+/8d7y4JxeXl5duAvPX2fPd/UW7Pya7351tv6cskyu46n115/UwP6n2vXm/DbO+2yxV8uscdNmRkWLvhE8+YvKAsBGibY9/4HH9rrdu/L+vUb9NY7M50aLtt3JGvM2HEafdWVZevrc3Zvr30GgBNBkA8AAAAAAAAAAAAAAAA/uszMTP3h979VRES4PR0cHKz77rnbHjfhO2P9hh+Ukppql5v5hqn/8IP3q0vnyi0NduzQ3g7WebrqyhFeZe3aJmn4pcO0e88ee9qE81auWm2vs+K+nH/eQHva7eNP5qlXzx669JKhTok09oYx9qd7nwHgRBDkAwAAAACggdt/IEsLFy/Tm+/O1lNTX7GHN2fO1qIvv1IWvxIGAAAAAABoUFau/k7/ftO7FbnaMMuuXP29M3VqmUBcfKuWzpRLSEiw3SqfO2T31dfL7WlT7ikyIkIxMdHOVLk2rVs7Y97cLfu5u8N95rl/2K38mfJ169ardUJ8lfviZlrcM133jh51ZVmo0Ki4zwBwIgjyAQAAAADQgK35foP++f/ZuxMAuaoyf9hvZw8JS2dhS8AEEnbEIDgiIm5/RxyRsAwyMDgqi8qHyKLo4MIgboMbg4wLgjKgjDrIIgwgigoI6IAgArInCNnI1klIyNLp7q/OrVvdVdXVW9JJkc7zzFzr3lOn7la3boXUL++54kdx7x//FDP/9kKsXLUym2Y+90Lc84cH4tuXXx2P/PXJvDcAAAAAm7o77/lj9ndBXf0Dzte+Zp9sqiW9Jr32znv+kLfUVwrZpbDd9ttvVxGc687EiR3Bu5I0bO4e+0yL1x14QPtwuGef+dH82eh1AG9xU1MsWLAwjnnvCe2BwDSldVcPwQvQV4J8AAAAMEDdd/9DcfNtd2TzbzzowDjztJPis+eekU1p/g1/99poa2uLG27+Zfz5kb9m/TZNTTFzZlM+P1A0xT2XXxIXXj8jX66fhX+8Oi686Oaod9zzyes37PnI1n/5A7EwX34l2NDHvEE8fXPherk67lmcL29mFt03Kw7+ytx4LF+um6fnFvZjVvx6Ub4MAABsVlpbW/PHtuyx2vtP+MdsqqX0mtI6+iIF6FLILYXdaklhub4E8rqqrNdXqYLerbfdHnfcfks2xG4tvd1WqQrgtT/9cXsgsHw64/TT8p4AfSfIBwAAAANQU9PSuON3v4+GhoaY/u6/j7ccclBsOXpU/mxk82879OB49zvfli3f8qvfxcqVK7P5bjX9Nr44/Zg4vHz6x5PjvC/9MP4wqznv1A+e/GHlNmpOP4wnY0U8+LVT4oyzTomL7l6HMF9pO1c8lTd0YfED8e2LLomfPZ0vV8ue33zDS6+UsB+wAS1aEJ/6ygtxcPvURWCxut/PO9+bi4HH7vtUejl+/f3Ut68hyaa4unw7318QtbKNj/28rM86BDErX/9CfOq+l/NnOutLXwAA2NTsussuWcgtDVNbrTQk7RsOen3eUvTQnx+O2XPm5ktFaTm1p2BgCv2lKnrptWkd5Z6dMSPuuvuefKlvSvtTkrbV3b6UlIbQTcP9AvQ3QT4AAAAYgB565LGs2t6hB/9d7LvX7nlrZ9NevXf83QGviZa1a+PRx3sIs1XYInafPCn2TdO2a+KR//vf+OLp58S1T/ZXmG98cd35tPsWxdZtJ3S07Tt5fAwr/F9jYb5x6KTYY9vRxU6bs4EQKBxAocjeV9SbET/rLijKAFcMm139Sn7/Uzjv+6vj7afsFPd8Kk1j44Kxa+PU6tBb1m9V7H10qd/o+PDTyyuCeinE955Hh8cvsucL0ykj4pCqPp08vTTO73N1wXRel8djh47t2OdYFe+pCvOlYN2pTw+Jy/L9+cWhLYXj6n01w+z1MTrfRmE6ekjcfeeiGgG9Yhjx1MUjOo69MH3loPwLDgAA+tHWW22ZPT72xFPx5NPP9mlKr0lK6+iLxsZt4qjpR8SZ55xbEZJLw+N+9evfzAJw++y9V95a9PgTT8YVP7gy65OkgN0FF34xpr1mv/a+h77pkOwxraO8XxoutzcaGxuzx/KA4dU/vqYiBJi2lbaZtl0KDKZtpX1L+1iSgoVHHXlEfOPib8UNN96Utxb9909+1ilsCNAXgnwAAAAwAP3t+dnZ4z577ZE9dmfvPXfLHmf+7YXssXfeEqd882vxpTT951VxxRmvicaYE/91xW9jft5jvez+7uK68+mUYuHAOOyMjrYvffPdMTmGxuSjvxZX/c/X4j27Dy126otRE2LffJZ1N+7vTozPnvvu6DoyCmzahsSJp0yMt4/NF2OLePtRI+KQWBsPlgUQH/vdqrh76ug4cWreUPhmOPHoIRFPr+gIxo0bFb84ZXy0r2rs+PjEoQ2FPqu6qIT3cvz6d2vz+d5bdN+K+O7YEfGJ9qBcvs+LVsUtpX1etCALUH746B1i77xp7EFj4oKxbXH+73pZ5fXVo+Oeo4s/Cmam7hCXFY7/7kdXVAUGF8X5MaLy2AEAYAN59T57Zo9X/+S6+Ooll/VpSq9JSuvoqzR0bRp29pj3nhCTpuyZTXvsMy2rqvelL1zQaVjd4487Ng575zuyPqnvtAMPigNeu39F3xQQ/I9vfC1mzZ7d3u9jZ388/u1zn4k3HXJw1qc7u+4yOS684HNZwLC0T6ky4NlnfjTvUQzofe4z/5qFDdM+pD5HHnNcnHD8cdk+lkv7l4bp/d73r2hfX5pGjhyZ7SvAuhLkAwAAgAFo5criv07eeuue//X0tuOKkYJFi9f9Xwxv+9YjI8vaPfVozFqRNW0aRg2NjgGHATYjT8/t/bCuYxtj7+r02dghWfjtsYWldTRlob4Pv7os1JZMHREfjrb49VPFfmOnNnYKso0dN7jwvy0xt1YVvFSNL0bEZSns12svx0OPtsUh+4yq3NbYUVkY8bt/yUN6i9fG3dEQO4wpLhZtUbXcvb0Lx1Nt+x0L+7pobczLl9vPzZuF+AAA2Dhef8C0OO+c/y+OOvydcfhhb+/TlF6TXpvWsa5S0O25Zx6vmFLArysHHvDair5nnH5a/kyHFJC76oeXt/dJ843bFENzaVjcpNQnbb9a9T6l5bSd8sBgekzLpT633nxD7L3Xnllb9T6lcGB6vnyd3R0jQG80zJu/sC2fBwAAAAaIq/775/G3F2bHh0/65xg/tvtEwtx58+Pyq34Sk3beKU487si8tQtNv40vfuA/4w/xD/G1Gz5QVoHtqbh2+nnxX/GaOPeHn4lDIu837f+LK87YJu768jfjv556S8drmp6KO37yo7j17r/GkynbscWO8fpDjox/ed9bYmKNZN2TVxwTH78p4l/+/do4pqrsW6fnSvtY2PZV5+0Wj17+n3HlL5+K+UO3if3fekKccnJhG6XifaW+h38pbjqpWJmwpjTc6+X3xrgjz4hj2ytNlcmefzz2O/nEODid7rLlcXdWDpm6e411LPzj1fGdOzuqP4099N2x3yM3x2/Gvjs+e+QueWsafvXm6BjMpWBq6fmmuOfyq+M3VcPRjj30xDjt7/KQSX4M7TmZMW+Ij5x8QIzLFzM1+hy77+Pxszsb49huKu4V97+sT5fHv0s36+n+GNIwtT+LwvEeurhiHyuOsaQ3x1olW/+i8n7dne+Szn2y9zdurjGkbu1jz7Zbdn1k8u309pjb++3z13y7Zdvq1bmoPo7u3qdyNV5XuIX87PqmeGvps1BQfX2nKm3tzz+dzlVl/5KK9yTrV35OS/uYXzfR3XvcMcRq5TCmaajTRXH+mFJFtWK/OHqneNfCWfGeOzv+2vSQTq8tyIeRvTtfjLEj4rJ9Vsepdw6Oyz7VUeEtG0q2bF0RDXFBXt2uOKxr3lwytbzCW3Gfvpsvpcp45esuqtHn6IhTf97Svp0U2jv452vjw4Vja6+WV7b/Fe29VnVes22UbbNd9XmuocvXVr8nlee2S2VD/FYfV3bO0/C2qTJezX7F/f31PjXe814qvudl+5odX/Ru3wEAqJu2tsroRGk5PTQ0FJfb+xQbsuXWltZojbbCn/QjWlvboqWtNdY0t8ReUycX+9KlNDTt/93/QFYJr7pSX2+k4Xs/e/7n49JLvpkF6wA2dSryAQAAwAD0qp2K/xL5Tw89kj125w8P/Dl7nPSqidnjOlmxIGalx6GTYmJFTuO5uOuSL8Z/5ZWYMvN/Gxedel5c/MunY8Xu74hTjv6HOGzikvjDL/8zPnLKpfFgf1X0a346rv30x+Oa+ZPiiMPfEPsPXRIPFrZx3pf6afjfXnj4ukvi4X3OiM+eW5w+cmgeSCsL7qTlYgiu1O/EYoivKtC28I/3RBzZsa7PnvyGGPv0zfHtP6aAVGMcfHLeloWkin3aw14pBHV5MYhY2sZb4974zuUPxMJijxp9Cvubhfh6ObxkJ03xm8vLj7+wzTEz4mfl26zQwzEkaR+vi45zdeQusejOqyuDcL051l7o/nwnxRDbwkPTsMJ5n1LILwXxCstZYDOf72ro4RT8Kz1XnC9bT9KbY04W3RPffnSvym315lykoF/VcRw7tXNAsZMar/tsFuKrDjDOiN88smd8pNQnW3+6NvL1T90rC+M9/HTVdVZY/x2FY9z90FKIL4X9yteR99sAHvvdrPhqjIl7PrVTcTp6SNx956LK6nUpmJUHwEr9fpGF+Cp/+Eufg1seHR6/KK2rMF02tS3O//7cbBjZ4utHx4cL8ylMV9xefs2nkFkelOt47do49SvF12Zq9LknC/H1YijasePjK1n/IfHdn78QB5evtzeeXhXfjYZ4+27lYbfBsUOnknM9V7h77C+F/R07PKZVvfaxny+P71YM1dsX1ZX2irJqeSWFc5DW/d2fdxz7ovsWx/mLhsSJ6xjiK1UDTJUI28OcC1sK2xoS22fvVzrX+fTzdb2/AgDA5uXZGTPj8h9cmS8VpbYU4vvQKScJ8QEDhiAfAAAADEAH7L9fjBwxMu5/8OGY+bcX8tbO0nOP/vWJ2HL06Dhw/1fnrX3T3DQz7vjapXFHYX734w6Oir86ffT2eHDbT8dVN1wbN2XV+BYU+v5n3N08NA4545L4zvmnxntO/ECcdtEV8bXDd4x4+Xdx5W0z8xevp0d/G/FPlxe3cdLZccF/fSn+ZUJE00OXxV3dJpT6S1PEvidWBI7G/V1x+ck78yBVFlZKobXykFcKtHUOfZVe227MAfG2wvKiOT0FQZrinjtnZIGyjtcXtnHUG2Ls4nvjN1kgrNgnVXqrtb/rqnJ9hW0eukvhmB+PJ6tCir23SxxbXnVt6sHx1jGF8/loKTzWm2PtnR7P9+LFhfewMfYrH1azYrv9padjzi1ujLeVBwB7eS6evPPeWJQqL5YFJnc/Ml1/M+KO9tBiZ9nrCuuuCFoWllNYtVLV/hfsfmgKazbFwuw62CXeWnjNojvvqQgOLnz68VhUeG6/wr4vXFzYjzF7xu5loaziPibp83JGfLbLanx9d/eYUZWV2KbuEL84tCHuvnNpHvZ6OX79u7VZlb7ygNnYgybGZZ3e/8Y4MVV+y5eSvd88Ig7pahjZMo/9blXcPXZEfKJsX/Y+OoX+1sbVeagw6zN1dM39rVBoSyG/moG4/LliSLCX4bIUSPt5OgdjqirodWPx2o7KkGVS9bpTn26IC46qGnb26bmF9lRdsPqa6gdlw96mMGX7sRemXlf968JjP1+UBQHL93venLbCNlfFe66L+EQpcHlK4Tp4erkwHwAA9MKYxsa46+7fx6Qpe7ZPb3vHu+LCCz5nOFtgQBHkAwAAgAFo1BYj4+/fdkg2/9PrboqFizoHBRYsWBQ//flN2fw73npIjBg+PJvvnf+Nj08/Jg4vTEd94BNx8UPNse3rzopzj676F9DN0+I975sW7XGGpqfiT08VHrc9Nv7xreOLbZmhsfvhR8brC3Mzf/nn6JcoX2Ebb59WNk7v0N3iTYdPKsw0x5OzN0ZwoirklRu7Y6Ft8bws0JKFlaoCSkWNMaFGJaksnHX5JXHhRcUpq8q2KAXKurH42Xh4cWO8NYXoyo0ZkwWfspBU3qfL/V0nNdY3dvsswDW7hwBTl7LqbeUaY1xK/pTOQW+OtU+6Od/ZOssqy20oPR1zyZh0bsv06lzMiIcLx5RVvcueLClef12HRPPX7VO17oJxY7q4XlJVvfw8piqBi8qug3FT9yzse3GdRU3x5CNNMfbQg7Njz9a5+N74TqdqfxvGh19d43MwbnDhf/Pw3aIV8etF1ZXoiiqqvZVLFfxKVdiy4WzbYm63gdameLBwPj785qpwWwzPKt7dPWd1YT7v0+X+9k17dcAULivs59Xt70elFLzLjqE6QNiTMUOqjiUNYZuCc23x4aOrhtTNg4IfPrq7QF3x9e3nNZt6WVUwVcfLZtLQvYVj3bGsouEpQ7K2jgqMxT4V2/n+ghqhxGK/LJR4Sq39rgorjh0fn0iBy6fT9ZS3AQDAZiaF8L70hQt6HFa3sXGbuOqHl8dzzzxeMR3w2v3zHgADgyAfAAAADFD77r1HHPS6/aO5eW3ccvtv8tYONxfamteujTcedGDstUetMk3d2SJ2nzwp9t3nDXHM0e+Pc//9+3HFeQfHtvmz7fY5MHYpy9JFrInm9DBhm9gmWy6z7YRiYGn+kkKvflBjG0OHVbcMi6GF/20cVlza2HquptchDcF74UVXx8P7lg+Bmj/ZnUUpNFgc5rY9SJVNZQG0rM8A0Jtj7aWez/cucWxpuOB8O52Gu92YxhYDeu16cy6yqoKlYy2fru40tHOF/HW9kg3BW1jn9WXDA2fDJ5cZs2vsV15lsDpYOvXd7UMbdzqGeli8Nu7OZ3tUGkr15xGXlVdiy5/u0qK1WSCtOORt+ZSqvRW7lPr0m3yY3u8WZtMwv7Wq9z1W2J9i8K5wHDUr5dWqNPhyjdBiCr3llesK56RyWy/Hr68rBgVrVhBst0W8/ZT8nLZP5QG62mHJrDpeLhu6t6rqYSlg11GBsTFOrNhGYaqqsth+7grr+sWnqkKJJTWGDh672/DCtdBTqBMAAADYXAjyAQAAwAD25jceFKNGbRHPz5qThfZKmpubY9bsuTF69Kg45KDX5a198ZY45Ztfiy994ez4lxPfHYfsXivQUTA0+//OZi+JJflsu/mzi+GcyROii7X1TXP2/xXmzyzGMoaWdqrx4Dj3hmvjqhN3yxu60FNFtyw01RjjalbRqyGvntbrandP3xw/y4bgPaNyKNPeyKrgFV9bCqSVT9n6sj4DQG+OtTd6fb7zYV0L605DyqZA3Le7GY52o+rNuciv692PrN3nsxVD9ZbJX9ezprjnuuIQvJ89t/Nw0R3yYZef/mt2D6hZqXLMAXFatl+l8OTVcU+vw0/FKnbrb3BxPWOG9BzEy3QE0ioDZr0wdkjWPwvMVYfI0pRCdHmf9VYKG35/VcShxcp0nQN0xep3xWpzXQzRm52XWqG01Vm475Ad86qvFaG3Gufl6aXFsGJeGbA0pQBhRC+H/83PzWMLS1X1SvJQYVYdsHy+UjFg1/Pwx5lUbTGvUNgp4JfLKjWWDedbqSF26O13BwAAADCgCfIBAADAADZkyOB459sOjT13nxJDBncMtThkyJCsCt873/amrM9G07hPvD5l5ub/LP7nNwuKbZnmePKm6+MPhbnd3zi1c2W/dfHo9XHXk2VRvvm/jRtvS8u7xWu7Ch52aZfYb2rEokeerVmJLKsk1mkI1KZ4+OnqsElxyNBS9bTikKGPx5PVwZesIlk+36XyoUi7kQ8B23lfynTZJ9/fTUVvjnWddX++x/3diVnFvr5UWdygenUuikPotlfC67WuX9ebdWVBvXy+Xfb5Sed4RvzmzqYaw/2WpPBkCgX2fYjm4nC0ZbIhcvP5Mt/9S+dz9thf1mbhsGw41iwk1ha/fqpzSOyhRzuqvXVl0VOre1HRrxg+rLUvHbruk+1vj/IhY8sCfF0OlZuF61KIr4tqc8nYUdlznfbn6VXx3egYivix362Ku1OIr4vQW0zdoTK0mE+/SMPQRrGCX+1qgOUaY//C5/HuR1dUXmv5e14cjniLYoBu8dpO12PxPcqDm916OX79u8K5TiG+bvapGAxcmw2FXK732wEAAAA2B4J8AAAAMMClwN7R7zksGhpSCKIozae2PXevVVZpQxofbzrphNh3aHPcfckZ8ZELLotfXP3D+Pa5J8XHb5oTjZOnxynvmZz3XU+TR8cjF3wkLvrOj+IXV3wjzj/zP+Pu5ojdj35/vClPCjY/eX2c94/HxElfuie6i8skux/6hhi7+N74zvWVQaWFf7y6WL0tVRSrsujOmyuqhj15fRqytKzv1IPjrWPS8KflQ4XmVczypUxWXa0ylPXk9TWGF60Z3tqlsL3Gwr6k/cybMoXtXP9AHkys3WfhH2/ufojVDWG9wni9OdZe6M35XvxA/Kyi+l4x6FdeZTGbz6vMdW9dA3Xd6c25KFXCu7lTJcGa11e7Ll6XVTLM5zONMS4FlMrPQTpvd9Z6b4th2SfvvKewb8X5knQdVlTfy9ZXOGdZ+KlwPGn44Mu7e3+3iGn7FO5/Ty+Pq9v3L6+Wly9VqOhX+BzfNytOLSx/+M2l4FljvCsbenVRVb/FHcPeZvKg2NOrOobAXbQgvppVlitXK5C3Rbz9zUOyffnUfZWBwcd+PjdfXxd9np6b7W+FVDXuKy9U7G8WsMuqBXYT4MtlwcCpxaBe1zr2p2M7TXH1z9fGIYeOyV/blIXZOs7lhrP3m0fEIYtWxVfbz03nIXs79ykovUdTR/Rc8TALBjbEBW/uIViYD9f73fb3riDfziGHbp1vJx+mu+o7BgAAANh8NMybv7DnfyYKAAAAbLJ+e/d98fv77s+XKh1y0IHx5kMOypd6oem38cUP/Gf8If4hvnbDB7oeKrPUb9r/F1ed/5boFHFoeixuveLH8Ys/PhWzmiMat9ktXn/0CfFPh+/duW/Bk1ccEx+/KeJf/v3aOKZqo52eK9v2FR8ZFjd+7Xvxi6dezrZxyPtOiePfOjlGFV+aBfnO/8yP48VpZ8XXzju45rYrpaBFVcBpzBviIydXVQ9b/EB8+/LHY7+TD47ZFSG9XeLYTkOMpiBSCvjli4W9eOvJ7464rtA29t0dw5s+fXNFwCMNh7rfo5fEzxZVbj8FC7+TB6XGHnpix9CwVa9P0jpSFbmS8tcm6fXHxs2FtsYa+92h+LqyPu3Hf2IcnIJMJVn7vTGuarvVah1DGrb2Z1F2PnJZe9U56M2xVuu0np7Od34s5bmtivOdKb9ear33Zcq3l4aiLRxnb4+5q36Z3pyLXh1LDdXrTvu9z18LbU2Fa7j03ldd3+nzclTEz2pdB6X9yI+/pPq6LH5GqtYfVddADY/9PA0Nmy9Eqi5XWMF1i+L8MaVqaqlC3fKIo8fGDr8rtLefkNqV6FLArzjca9Ehh46NT8TiQtvguKx9yNg0JG3ZulIlusLxf/X7q2Lvo8uGqE1Bu5/nVfTKq7ulYWjTsK3FpUzaTkXwrvy1SXr9q1cV2lo69jvvk4bqrTksbg8qz121VCWvbIjcqv2p3N/iOf5uvtRJN5Xtiue7/Nz2QvX5q7n+zvvU6/NU4/0pV/1eVV8zldvJ7xdV1z8AABtPW1tldKK0nB7Sv41My+19ig3ZcmtLa7RGW+G/HCJaW9uipa011jS3xF5T++kfKgKw2RDkAwAAgAGuuyDfGw86MN7SlyDfpqCnEOHG0FWQDeha3T83pSDfuoXdAACATZsgHwD1ZmhdAAAAGOBSUO+z555RcxpwIT5gk/XknffGojF7xu7CrwAAAABshgT5AAAAYDMwd978uOZ/boyr/vvn2ZTmUxvAK8LiB+KOpyN2P7T74XEBAAAAYKAS5AMAAIDNwPKXX47nnp8Vf3thdjY998KsrA2grtJwuhddEhdefm+MO/KMONaQtgAAAABsphrmzV9YOdA7AAAAAMAAcPtjL8cFNy3Kl+CV6S27j4wvHKkWJQBAvbW1VUYnSsvpoaGhuNzep9iQLbe2tEZrtEWhJVpb26KlrTXWNLfEXlMnF/sCQC8J8gEAAAAAAAAAmzVBPgDqzdC6AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHDfPmL2zL5wEAAAAAAAAANjttbZXRidJyemhoKC639yk2ZMutLa3RGm1RaInW1rZoaWuNNc0tsdfUycW+rwDX/eK2eGbmc/lSbVN2mRRHHf7OfAmAehDkAwAAAAAAAAA2awM5yHfOp78QS5e9lC/VtvVWW8bXv/iZfAmAehDkAwAAAAAAAAA2awM5yLdk6bK4+Ds/iFmz58ap7z8+tt5qdNa+dNnyuOzKa2LihB3izI98MLbZequsHYD6GJQ/AgAAAAAAAAAwwKSA3hYjR2Tzu0zaOXafums2pfkkPdcfIb4H/vRgTJqyZ6fpfR84OZqaluS92FCenTEzDnv39Ox9ADZNgnwAAAAAAAAAAKy3PffYPe64/ZZ47pnH26erfnh5NDZuk/foHzfceFOc95nzY9WqVXkLwKZPkA8AAAAAAAAAADZhu+4yOW69+YY44LX75y3ApkaQDwAAAAAAAABggFrT3BwvLliUzQ8bNjR7TIYOGZw9pudSHwDqS5APAAAAAAAAAGCAuvF/fxVLly6LA/d/dWy15ei8NWLrrbeKA6a9Onsu9dlY0rC4k6bs2T6l5XJNTUvifR84uaLPJZd+O3vu2Rkz47B3T48zzzk3rvnJz2KPfaZly6n9gT892D5frvSa9HxSWn9aTustX3/S0/5VK19fT69N20lT6pueT69Lr09K+1l6bfnQwek1tYYSLj+26uMs6Wqf0rrSOsuPPSntW/l6Sn17OhfA+hHkAwAAAAAAAAAYgObMfTFu/81dMXLEiDjh2CPz1g7H/+MR2XOpT+q7oaXQ2HU33BgP3X9fPPfM43HH7bfE975/RUVA7M677o4zTj8te77U59bbbs/6lIaPvfjrF8Xxxx0bTzz6ULac2vvqyqt+FG846PXZNtL2kt7sX1fS+pLSfl/70x9ngcPq197/wIPx54f/kvW56oeXR2PjNllo7m3veFdceMHnsvZ0XMnnv/DlLESX9vOhPz8cs+fMzdpLHnnk0Rg/flzh+HfJWyp1dzwjCu/76w48INt2KUyYzJo1O3u8974/ZI9J2u4LhfZ9990nbwE2BEE+AAAAAAAAAIABprW1NS6/6ifR1tYWxx19eIwetUX+TIdUoe/YI/8h61Pquz4ef+LJLJBWXgGuVPEtVYy79bbbs9BcCq8lKYD3oVNOysJmpTDZ9CMOjwNeu382n6Q+h73zHfH8Cy/kLf1jt6lTKrbT2/3rSlpf2veStO4UOKx+bUNDxNFHTs+XitXurrv+xjj7zI+2708K2Z30wfdn4b1HH/trFtRLgb0U3CtJr/u/+x+Io6Yf0b6/5XpzPCmYt2DBwkLfGdnzpXWmfZk378VsOUnb3WnihJiw4w7ZMrBhCPIBAAAAAAAAAAwwd9x5bzw/a042f88fH4iL/uO7Naf77i8OoZr6/uaue7P5dbXnHrtnVd9KVenSVKp2l8Jg016zX+yz917ZcsnEiROyMNnipqa8pWMo11IY8BsXf6siWNYfdt5pp3yuqC/7V0uqmlet1msnTpgQI0eOyJc6qt39w7sOy1uKxjQ2ZuG9VCEvBfFSYK88FNhTlbzeHE8K5qU+pSp8aZ0vvbQ8O5a07lIFwBSi3H777bKAIbDhCPIBAAAAAAAAAAwgTUuWxnU33ZovRTz1zMxup5LrfnFb9toNIYXBrvnJz2KPfaZVVOw75r0n5D2KUgW/1CcN+1oKA6YKcf0tBdrK9Xb/1ld1IK6pqSnu/v09nSoZTjvwoLjr7nvyXtGpet7/3nJrt1XyenM8peF1UxW+FJJM4b+pU3fNwn9p3Wk5BQfT8Lu1gopA/xLkAwAAAAAAAAAYQP7rmmujuXltHPKG18Unzji1V1Pqu3rNmrjqv3+er6V/pQp4xx93bDzx6EMVFfvSdOvNN2TDvqbA2K233Z5V9SsfprY3GhsbY9y4cflS3/Vm/9ZFqqqXqut1Je33IW88uFMlw9JUOg+l6nn33veH9nDdUUce0WWVvN4eTwo0piF801C8KdCXAnulgF8KA5aCg2l4X2DDEuQDAAAAAAAAABggHvrLY/Ho40/FuLFj4p+OeU/sPnXXXk2pb3rNI399Mh5+9PF8bf2nFBgrDdfaW6XQWm8sXLgwq3BXLlWVe/yJJ/Olrq3r/pWkgF211FY9lG61FPJraCjuZ3dSuC4F99K5uP+BP2Vt3YXrens8aR0pbPjwXx7JhtUtrTO9Pm3rzw//JQ547f7Z8L7AhiXIBwAAAAAAAAAwQNx17/9ljyccOz2GDR2azfdG6nv8Px6Rzf/+vvuzx/6UhmtNFeUuuPCLWTivJFWCu/1Xd2TzqTpdUh5qu/rH11QMMZvUCqmVKtaloXlL60/r/t73r8jme9Kb/evONy7+VkXg8IYbb8rauqual6SA3FHTj4gzzzm34vVpqNs0NG56LCmF7E79yOnZa7oL1/X2eNI6UlAvhQ7TsLqldaZtbb3V1nHnXb83rC5sJIJ8AAAAAAAAAAADxNrmtdljqq7WV0uWLsse29rassf+lMJsX/rCBVlobNqBB8WkKXtmUwqaHXjAa7M+abjXCy/4XBZqKz2fQmRnn/nR7PmSUkjtbe94Vxz27ulZOC2t/xPnnJU9X1r/FT+4Mr520Zdjzz12z9q705v9687VV14e111/Y/vrUoAwDZeb1teTNHzutT/9cRzz3hPaX7/HPtNit6lTKkKApdBdOp59990nb62tL8eTzvHN/3trRWAvbSsF+1KVw1LAEtiwGubNX9j/d18AAAAAAAAAgE1EdXCttJwe0rCnabm9T7EhW25taY3WaItCS7S2tkVLW2usaW6JvaZOLvatgwcffjS+ffnV+dK6+dRZH4kpu0zKl+hOqnb3sbM/HmecflqvQnsAXRHkAwAAAAAAAAA2awMpyJfccec9WaCv+rh6MmjQoHjj6w+M1x84LW+hJ4J8QH8R5AMAAAAAAAAANmvVgbfScnrYFIN8bDyCfEB/GZQ/AgAAAAAAAAAAAHWgIh8AAAAAAAAAsFlTkQ+AelORDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6qhh3vyFbfk8AAAAAAAAAMBmp62tMjpRWk4PDQ3F5fY+xYZsubWlNVqjLQot0draFi1trbGmuSX2mjq52PcVZP6CRfGDH/0snpnxXLa8+9Rd4oP/fGyMHdOYLQNQXyryAQAAAAAAAAAMcNfeeEt7iC958ukZ8T833JIvAVBvgnwAAAAAAAAAAANYqh742ONPxZAhg+N7//HlbBo0aFA88tgTeQ8A6k2QDwAAAAAAAABgAJk9Z17c8qvfxq9++/v465NPx2VX/nesXrMm9thtSgweNCib9tht16zt+//1k/jrE09nfdNr5sx9MV8LABtTw7z5CysHegcAAAAAAAAA2IykinXlSsvpoaGhuNzep9iQLbe2tEZrtEWhJVpb26KlrTXWNLfEXlMnF/vWwQMPPRLf/cGP8qUOo7bYIs487YMx+VU7ZcvPzvxbXPydH8TKlauy5XKnnXxi7L/fPvlS7zU1LYmPnf3xuOvue/KWiD332D0uveSbsesuG+acPDtjZpx+xllx4QWfiwNeu3/eCrDpUZEPAAAAAAAAAGAAWLu2Ja75nxti8ODBcer7j483v/H1sfeeu8WJxx0VX/jsx9tDfMmuk18VX/zsJ+LE9x6Z9XnLIQfFye87LqvWd83/3Jitqy8e+NODMe3Ag+KM00+L5555vH06+qjpeY/eu+HGm+K8z5wfq1ZVhgy7agcYCAT5AAAAAAAAAAAGgOdnzY5lLy2P3XadHK977X7xz+89Ms467aQ49OC/iyFDBsdNt90Rl172X9mU5ocOHRKHvvH1WZ8Tjp0erz9wWkzZdVIsWbos5szr/RC7KVh33fU3xtlnfrRTVbyTP/j+DVaNL0nrvvXmG1TjAzZ5gnwAAAAAAAAAAAPADtttG8OHD4/Hn3omfvXbu/PWiOXLV8S/fembceP/3h5/fuSv2ZTmU1t6ruS2X/8unnx6RowePSq232583tqzNDzvrNmzY+edOir+AdA3gnwAAAAAAAAAAAPAyJEj4l/+6ehs/qfX3Ryz5szL5n/5m7tiUdOS2Gv3qXHBv56VTXvuPiVrS88lz8+aE9feeGs2f8I/To9hQ4dm873R2LhNVhHvuhtujKbCOntyyaXfjklT9myf0rC8ybMzZsZh754eZ55zblzzk5/FHvtMy5Z/e+fdNdtT/9JrSutI23/fB07OltNQvKVtlPpXK++TprT+NHxv2seS0jrL+5W2B9BfBPkAAAAAAAAAAAaINKTu2998cDY/Z25xeNwX5y/MHv/+bW+KCTtun03vfNuhWVvpudlzi6G/t7/5jXHg/q/O5vvixBOOzx6nHXhQFo6rJQ3Bm0Jy8+a9GE88+lA898zjce1PfxzHvPeELBhXGib34q9fFMcfd2zWJy2/5dBDarZ3N2RvWmeStpGmw975jrjgwi9WBA1TWC+FDx+6/76sT1rvo48+loX5SlL/j5398Thq+hHt60r7DNDfBPkAAAAAAAAAAAaQhoZiHKShIXuoqS1/LBmUv2bw4HWLkqSqfFf98PI4+8yPZpXzUtW66kDfo4/9NR7688Nx0gffHyNGjMjaUiW/9Jrrrr8xC/r1l7TO6Uccni9F/MO7DosFCxbGszNmZMupOt/9DzwY53/209m+J2mfPnHOWfGmQ4pByGRxU1O0FU7Wvvvuk7cU9zlNAP1JkA8AAAAAAAAAYIC47/8ejF/99u4YPGhQ7DJp56xtu23HZY+/vOOumD1nXrwwe27c9uvfZW2l5yZP2ikaGhqyPn984KGsbV2ccfppWdW6UqCvfIjae+/7Q1YZr7qS3s477RSzZs+OlSv7L8j3hoNen88VjWlsjPHjx8WsWbOz5UceeTQLOqb2cml44okTJuRLxedTv+pqfgD9TZAPAAAAAAAAAGAAWLioKX744//J5o+Z/g8xdkwxpPb3b31TNG6zdfz1yafj/C9/My74ysXxxFPPxpjGbbLnkm3HjY1jjjgsm//Bj/4nlr20PJtfVynQl4ag/cbF38qGzU3V9tKQumk5Vesrn1Lgb2N7/oUXssBeCu51J1Xru+w7l2Z907DBaX/T8QD0N0E+AAAAAAAAAIABYHHTkmhtbY09d58S/+8tb8xbI0aPHhWf//TZccQ/vCP223ev2H+/fbL5C847K3uu5O/fdmjsPnXXaGlpiSVLl+Wt626fvfeK4487NqvEl4at3X777bJKfaliX/WUhuUtDXH7SpP2/UtfuCDbz4u/flEc894TOg0bDLC+BPkAAAAAAAAAAAaANJTu1ltvFU89MzP+708Px49+en1c9B/fjZ//4tYYMXx4HP7Ot8VHT/2XOO3kE7P54cOGxbU33pr1+fHPbsiG1H3m2ZlZ9b4JO2yXr3X9paFzS4+pmt0rYYjaNPTuQ39+OGbPmZu3FKXl1N6V6UccnoURU0U/gP4kyAcAAAAAAAAAMAAMGTI4jjvq8Kyi3mVXXhO/+/0fslDfrb/6XXzskxfEc8/PyntGzHju+fjYpy6I2379u6zPb+++L77/Xz+JltbW+Kdj3hODBw/Oe/YsBfPO+8z5nQJ6l13+g5g1e3Yc+qZDsuXS41e//s1sqN2SFO4rH6524sQJNUN2XbWvi1QtcNpr9osLLvxi+36nfbriB1fG4088mS0nz86YGbf/6o58qXisaV9L4USA/iLIBwAAAAAAAAAwQBy4/6vj1PcfH4cf9vZ471GHx9mnnxzTXr13vLxyZdx4y6/yXpHNr1y5Kl77mn3j7P/v5Kxves2HPnBCNvRuX6XA3rQDD4pJU/Zsn+bNezEu+86l7UPmpse0nOyxz7T2ftddf2MWrCspheze9o53xWHvnp6F6bprXxdpuNzPfeZfY+KECe37feQxx8UJxx+XDQdc7pv/8a32fU19j5p+RFaZD6A/Ncybv7AtnwcAAAAAAAAA2Oy0tVVGJ0rL6aGhobjc3qfYkC23trRGa7RFoSVaW9uipa011jS3xF5TJxf7vkKkff3ouednlfou/dqF2X6f/vHPZmG2//j38/NeJKkq3+e/8OV43YEHCOsBG5WKfAAAAAAAAAAAA1hDQ0Psvcdu0dy8Nj70sX+Nj5z96WwI3b32mJL3oCQN25uG703D+AJsTIJ8AAAAAAAAAAAD3DFHvCtGjx6VL0U0brN11ra5ampaEpdc+u2sAl9Jarvgwi/GYe98Rxzw2v3zVoCNw9C6AAAAAAAAAMBmrX3Y3FxpOT0MhKF16aw0hO41P/lZ3lJ08dcvMqQuUBeCfAAAAAAAAADAZk2QD4B6M7QuAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1FHDvPkL2/J5AACADa6trS1WvLwyXnppeaxuXhMta1uitaU1GgYPisGFaeiQIbHl6NGFaVQMGuTfHgEAAAAAG176e8typeX00NBQXG7vU2zIltPfbbZGWxRaorW1LVraWmNNc0vsNXVysS8A9JIgHwAAsFG0trZG05KlsWTpsmhpac1bu5b+LmyrrbaMMY3bZOE+AAAAAIANRZAPgHpT3gIAANjgmpYsixnPvRCLFi/pVYgvSX8ntnTpS/Fc4XULFi7q+EsyAAAAAAAAGGAE+QAAgA0mhe/mzpufBfFSRb51keJ7KQg4a/bcaGlpKTYCAAAAAADAAGJoXQAAYINIIb5Zs+fFylWr8pb1N3TokNhp4o4xZPDgvAUAAAAAYP1VjwhSWk4Pr4ShdWfOejGfA+CVZPLE7fK59SfIBwAA9Lv0F1ipEt/yFS/nLREjhg+PNc3NfarMl/7ya8SI4bFq9er092KZ4cOHxk4TJ8Sg9JdlAAAAAAD9oD2klystp4dXQpAPgIHP0LoAAEC/W7JkaUWIr6HwXx47Tdwhdp28c2y37bj2inrDhg2JkSNHtE8p7Jekvwdr3Gbr2KXQP1XgGz1qVNaerF7dHPPnL8yXAAAAAAAAYNOnIh8AANCvWlpaY+bfns/+9WlJCuntNGGHfKn4r1fXrl0bQ4cOzVs6pIp9aR1pGN2SpiVLY8HCxflS0at2nhDDhw3LlwAAAAAA1l17tb1caTk9qMgHwMagIh8AANCvUuiuPMSXDBqU/hqrQ0NDQ80QXzJo0KCKEF+S+ldbtKgpnwMAAAAAAIBNm4p8AABAv5ox8/lY29KSLxWlYN7kV+2UL/XdgoWLomnJsnypw667vCoGD1qXf5/UHIv/NisWNueLydDGmPSqbaLnGn/Vr90idpyyXYzOlzJrlsTM55sKPYtGbz85dizrsHzuzJizIl+IITFu551iTM0N59uK3u3bmqYX4rlFa/Ol3KhtY7cd0tDEK2LOM/NjeftyLcXtrRpbub+Z7Jheiq273NdqxXUt3WpiTG6sHdrsSTpPC0as++s3jhrXUpnq936TV3VtZ3r87PTm2tsUdX7vh46t3/VavK/UuB/V0/IX46l5HcOs17xfDhSdjrWontdEv6lxbAPu3laSH2u371veZ8Ceg35RvO9HF+foFXm/Kqj881lJd39O27Rkf05ctmUv/7zLK0cPf6bO/2wWffy+6fjvhlf+d/Mr9Z4BwMCkIh8A9SbIBwAA9JtVq1bH87Pm5Esdttt2XGy91Zb5Ut81NzfHc3+bFdX/8bLDduNjyy37+HNOVz/A5z+CDe/hh/n0o9fCoTu19+n8o2jVj9fVAbjC9mc2j+n4oS3bn6j9w1S+rz0HpfJAUafAX2Ff/tYc47p4bbbvq8aUhauK6xHkW1fdnL+BIrsOVsf4sus1+3F1TW+DsANF8XO+uuJH80Lb3MJn+RUSVuz8+d64igGBYRX3tjVNL8byUdtl95C+798r/POV7teLhne+B6cQa6+D4q88NcMThfvAnBWjYsd+uzf393ubzvviGLEu4avS926XwZbivqYAryBfd4rXfldBvleqmn/uyK+JV0ood33u7dlrBfk2QcX7zvr8mbqT7v77o+7W4x4OAP1AkA+AejO0LgAA0G9WrOxcjWjIkMGxVV/DdlXSMLxbbtV5HctfXpnP9VIKIaWgxZTJseOwwvwzM+OpfJq5YlRMnjIxRix6IRavyfvXMKyxI8SXDGscE6ObX4rl+WvWNC3OKo+19xm2TYwftTYWLspLvIzervJHuNFjYtzQl2PZ8ny53YqYM29NjB5VOcxwLcvnzoqFw7aN3Tr9MDsqdvRjLRvY6B22rfgMbBaWL4/lsUWMr/hBvfB5e4WE+OqvOZYvWxtDxxbuj3lLMqyxGOLbfBSuicL3yrhoitlNXZTtfAVLoZ8spFsd9Ch8r/VfiO8VaOgWMbrm93LBmhWxtHlI4c8l+TIDX+HPbbvt3BixaF63fz6ETc7Q4f4bAQAA4BVIRT4AAKDfvDh/QSyt+uV7661Gx3bbjs+X1t1Ly1fE3Hnz86WiEcOHx8477Zgv9Wz53BdizdidYkx0U10uC/sNjcm9DuRUVo3osppLp0pNJbUrEZXWMyHmdV89pdeV8sqreUR7RaGSYqWZYntvKvLVrOpScZwd2xu/albHUHV9GF618lzWXl/nCjnFKkDtV+FGrYRV+73sqPBU1FHFqXRM28bWy+YX3o/i8H2jVxTP7Y5bvRRz8qGSi8e5puzYqob663Ib/Sy7Dior8pXOebHyUq1j2j5ibuW1V11VpuJ6yrZRNnxvp2umxnu8Q8TsGp+Dmp/H/tCrz13xXLR/zjpdi7Wv1ej1Z6v2dTPpVaNiefl2C9L1k31uoupc1nw/+0c69522l6k6LwXtn+Oq67i9vfqayK//jmPu6lzlyxvjs1G93XI1nsvOT9kQnrX2q7JP6TPf03XVX8o/13lTV6rfn4p9Kl2vXdy7u3hv0+eq9vHni0n1a9O9YsvlFe93n4eMzN+r7P5bfW0VFO8pxc9exb2+6jprP76C9vvb2NXxXKlP9fvWzeszFcdaOBfbbxlL51V9dqvW0eO1Xuv8lT6v3b6nRdlxlQ3nX7nP1ddPfr/r8j7X/XVdua0a10I/Kb6/Vec+1/m5qnt4T9da9v5E7Ljz8FjQfm47v6br89rNvbNaF9fCel+LpWMofK3PSX3ar5k+3Jeq15Fk6xlWsY726ze7Fvvy/V669tI/zulYX+dz1c0+d3Gc3V2H3X8eergP5rq+53W8vvPxJlWft9L+d3GtVe9rx/vY/TVdun5Kfz7N9n/o4r69n7kuj7Xq+ivtw7DStVt2XVWuo3obta+DHu+LAFCgIh8A9Tb4458499/yeQAAgPWybNnyWNNc+kWsaNSoLWKLkSPzpXXX1toWS5e9lC91aGzcOp/rSXMsX94Qo7cZES3LFsRLW2wfO44enD9XZvCIGLq8KdZsObr2D5DVCn3nLh8c24xP/QvbWLwsYvTY2LL8xWtWxKKVQ2KbwrY7bXHNSzGvaW2MHrN1jCw9ufzFeG756Nh5+1ERq5bFktXDa782Wbk0FqzeIrYd28Xz7VoLXZfF6uFbRePIoTFym8bYsmF5LBk0LnZ71baFtvTqYp+1WxSeqz74llWxZOmaGLF1cT9bau1XxXEW17V8+bJoGzs5Jm3fGGPHjI6GxXPjhZXDYmynDXS2ZvmSeHlI2t+OfatY37A1sWDB0mgYXTp3xR/t0nCnUyaMLWyvMYa3rYrBI3s6N/2lxvkr/Zg6ZWLsUNifsaMbYuHsBdGW7XPpmFbHFhNfFRPHl53b5S/Hqi12LB5HdpyLYtHi1bHVzqlf4bhWL44XlzbElulcpx+5Z6+MMflzaRvNLSNiZK8u4D7KroOWGFV4L9tXv+blWLi0dA3XOqZiW+naG9y2PBYvy/c9W0FzLJ2/JAaN3SG2Kax0zbKlMWj8xOKxjBkWq1+cHy8NK53TLt7j0aNi0EtLYumg0fn1Uuy78MXVMbqwnvam/pLuE+k9WLgkVrfvW7mOH93b93Nl4dpfXrr2u75Wa37ma362alw32etGFe5znT/fwxrWxKKmNTG87L1bU7gXLh60dezQi89jXw0b3hDLFi6KBS+Vv9fJ4C7uP4WPy6IVseWrOj4rS+YtLn5Who2IxnT/eGlZDNo2ff6rj7mLc7UxPxvd3edjbSxrWh0jsnOfro3n48XB22bHnt774n1hbqwsu5aygEKqhrfLDrFt6jOsLVYWrruW+ZWv3WD3uOxzPSjGbN/Dd2G6x5Wf47RP6VpfXHrfS9drF/fuLt7b7PO7fFRMyo9zy4ZlMWdRW8e1lAfN0nD47d8va1ti5NZpvnDfaL9f9rD/1fL3cWzhuNcuXBqt7d8vSemeUvhzR+F4yu/1XV67hdeW7ulL2hrz962wf4XPRlNDx/2qu9d3PtYtYuXc+bG8dWhsWfo8d/tdkzpU6er8pQ9Hj+9poUvh+nzh5a07rs/CMa0sXMML24+pOV5avKLw56F0jtI1PzeWjCxctxO3yl5f+dnt4X5Z2J9nFwzuOLb8s1DzuNZT5Z87qqwtfHetyvcpnb+Zi2JI+/lL12hTvDB7VcU9tkK6tgrXwUsvj4yds/OWrvtF8WLZn4m6P69d/dmtSjf3vfW/FvNjKL0+2++evu+qVK+jsI3su6Lw5+fiPaB4jPMX5Ody8OBo69P3e/HaW17YRvE7svo8phf0sM+1jrOb67Dnz0MP98HsGLq755X/OarTAReUf94Kiz1ca4NHbp1tf9Hq0cV9zo6552u6dP2U/nya7Utf389sf7s51mGjs/NXfQ/vfM/o6Xu083XQeT8AoO9Sbq9CWUMW8Cs8ppaU80tLLa1tMX5sY/Y8APSWoXUBAIB+09rWms91aG1pyefWT611t7T2Zd1rYlUM7d8fbtKPXvNejtHbd1OBpaR5dWEPqq2IOc83RYzdPsa071ihbd6aGLdDF5VMqqxpLqx1WOVxpYoZpSGDn3rmxbLKGr2zfF7HkMPtU3tFjz4aVTbMcOH8jxm7ReEQ07Ck66h8fdmwxGtjVdWwxuXVSkY39u48bhjNsXhR1fWRD7W8dEXZ2Rw1puz9zw1tjAml48iOM1Vu6bhORo9tjKEV19SwGFZaR2EbYzZatZHCMc4tXBvVx1DrmHLDRm1Z2PeyoXjXpKEqt4jS6NmVw6+Oiq1GRazOA8Jdv8dDY/RWQ6J52YqOc5KGvx26ZYzuYj/W1+gdJsdu22+Rf16qhuRevjgWRtl7WJC9Z/m13y/XajfnuKbRowvXYflwocXhb0dvmVfg6m+F6zANV56GlX0u3UPmlpXN6cLoHco/K6Ni67LP97qr12ej2ppYk44lXRuF671iGObCfk0YOySWv5Sfo8J3y4IVhT7lFa1GF/Y9Xxg6ouON32D3uDWro7nHYReL97jye1NSc7jtbu7dtVUOVV28b3Tc85YvSt+dEyu/Xxr781oeFePGRsew+AXFz23tz13P1275e57WXbhflXXo7vXpWJvLz1861h0K95N8qdffNWW6Pn+9eE+z63NI1Z9TCu9X4X5YcQ/OZcP/F+6Hk8qv+XI93C8z5ddi2Wdho1vTnB1f5/ekcMobty9c110Mydyu/LzlfybK19nX89q97u57Na7FsvX3fC0X9nFs2XvZm/evk7J9yK7VwmPZ+RzWmIZlz++ZhfO0Lt/vlddw1XH2ap+rjjOpdR325X3r9j7Y/T2v77q51mro/TW9RYwvO29FfXk/k/U81t58j+bKr4PO+wEAAPDKJMgHAAD0m8GDO1eJaF5bNnTTemhu7ryewYOH5HO9MSxGRPEHrPSDUSyaVxm86atUsSavZlP+o1eXqgMRKQSYV+TqCPM0x+K/pWGg+jhkXNUPc8Mad4rdpkyO3XYu/6G/99KwU9nry6d1XFd54CQzbPg6raek0/oKiiGvYiip1vP1syZWFXatOhiZhgErD3D0dp+HD+3izGU/tL8ccwrrntlUO7TRv4rbKh5PsaJN9fCp3R5THgwoBUzWrHgpmkelkFmHVN2m/HwVdf8eVwYE82DL2PIf1jeA0dtln49JKfDzfMf5zwK2zXmArTRlYdj0A3L/XKt9f30xFNn+I3ceZBjXm/vXOhsaY16V7iHbxugV8wvnoadgcboHls5Z2ZCH62qjfza6UwzWZNdGjYDcsKHZk9m9PPtMdBGiG73lFtG8aFYvzmU/6DFYUbzHdb43Fb5vq8I/ta7XUkC3S9n3ZPnnp2RFLCtcxl3eE/tJdk9pD/b0FHzt4dqt9X5WfHd39fpCn3TJdPt57913TYfuzl8v3tMU8iwstwfFStL3e9U1s3rRC8XKkl0Ns1rQ/f2y0CGFkPPn52zwi74H2T+c6Oo9KTxXaOr+uq5x3krnrA/ntVs93fe6uLd06Ok+XLmPPb5/vdTdNb4u3+/V13B2j831bp+r3ouursM+vG893ge7vOeti26utU76cE33eP0UdX/PKliPY+3N92hJ53tZdTAVAADglUeQDwAA6DdDagTrVq5clc+tn5drrGdIjeBg19KPr/mPgMO2ick7bxlLn89/QCpM7T92psoaURkqqpZVvMuGsKsO8fXmR9yCLAT4Umy98+SKilzFChOVP8Y/t2ht/mNjVcWvXJ+rWAxwGzrYsS5qBiOrgm/rpyMsNTwL+NS+VvrPFtm1XzqWimu4V/LqOtkvqdXhmDTk7MyYE9u2r3/HqlPV5XucVYEpBU0qq/xtaFl4NlXfWbS4I1w1tDEmlZ2n4tQR0q3HtZpVHMp/5F7+0ssxdKtRvfpBfv2NyoYjTJV9FnQVqMt+1M+Dodm5Sv3z59bZxv5s1NYpmFdVRbWmrvq0h0fXFAO1vah0uE6y0HVvgjhDoqe8xrrIvmfz78nseugUJt8w262Q3VPya7a74Ov6Xru9eH1v7hd9+67p7vz14tz2MsyTqa7OWEu398t0/ygsF66B1dmfjzZCiLWTzgHsDXIP78t57dJ63PfW9Vru4ftuvW2I7/c+73M312E/vG893/M2vI3155J+OdbefI8CAABsogT5AACAfjNixPB8rkNra1ssW/ZSvrRumpubY/nyzj/bjhzZeXvdGT12y1g6d0kx9JbCfO0/3JXCSM2xeO5LsXX1UFrllr8Yzy3bMiZNKRt6rMywEZXD5SUVgZn0I2kWAqzxY2Ee0CifJo0dkv/Y2MWPi3nllS7DMRtIeWWTkqxCRk96NVzjuiiGKKuH1KqvVMGoF8HOflP8kTmrDlc2HOQrUXulq/SDfHk4Jhsur3C91wyf9Pwep2pl6flaVf42uLJqk9nno8uAbffHsc6frd5I94ss0Jwqcg2JrUdtnB/ti4rH3ZXie1Y53HBPen+u6vnZWFHY5tr26lHZPtcYcjLb7zyY0FWfcsXKq6nS4eINE07MgzPdn69ilbbOw7emqm7rE7TLA75dVqftarv9L6uAuGxFLO4m+Lou12657l/fxf0iqwJW0tfvmu7OXy/e06zSWI1wXo3v9+Fjd8orlnYdvuv+flkm/3PbjqVw5caUD+VZHFK0q3t4sarZOoeh+nBee6fv9711vg9vhH9Qsr7f753useu6z9XXYb+8bz3d8za0DXRN17T+x9qb71EAAIBNmSAfAADQb0aOHJHPVXpx4aJIw0mui9bW1pg9d160teUNZUaOHJnP9VL68W3s6trDs+VVSFaN7e5DMgFxAAA97klEQVSHpZ6H8yoGlOZ3rL+w3gUrSj/+Rixf1BQxdkw/BoyGxpgdGiNS1ZV1qcxUNQRVr2U/XDbFwrLjnJ2qB1ZprhjCeEXMmVd2/rJz3n+VdbJqY+XnvmB5UzG4mVX/+Fse4txoCu/N2FSlrXIY5zVNL/Zv8Gb5ixXHvGZV/wxnvUFlIaGXY8HclyKN99r+ear+QTwdW9ll3d17nElD361YHLMrqvxtAIX9qh6yMH2228MFo8dk1efmVHwmC9d/vtztcfTys9UrnT7fqRpixNK5i2P50C1j9Ab7tTsNzVj12c7uhVXhwbL9q/5hfk3TvBpDOlaFlXo6V/X+bGT3uOIQ6u3VW2tdG9l+R4wrhchr9Vm+pHDfSGHzsuu9sLw6n90QRu+QD4lcfe8s7O+c7PqvfY9bPnd+LB81ps8hjY73tjpUko67fOjFWtst9Gkq/7z10/CJ6b2IwjVW9j1erbfXbld6en0KMEVFYLP4Xdqhr9813Z2/XrynpZBn+bVY/f1eJoVOU+hpTlff9z3cLyuPoxgs2piKVZjXxLidO/4BR617ePa+rc9w5X05r9392W097nvrdC338P71mz5+vy+fV3a99eYe28M+d3kd9vHzUFtP97wNb4Nc0zX19li7uYfXev+q32MAAIBN2OCPf+Lcf8vnAQAA1sugQYNi1erV0dxc9aNhW8Sy5ctj6NChMawwNTQ05E90ra2tLVatWh1z5r0Ya9Z0/hFy8OBBsd34cb1aV4Vho2PsmNHRPPf5eGHhkli0OJ9eHhk777JDbNPtL26tsXLpsliyrOx1pWn1sBi7ZeHFg0dE4+iGWDh7bixI7UvXxpidd4yt81GA1yxfEksL6+j0+pcaYsttRkT1YMEtqwrbWz08tqnxXLu0zcIxNSyeW3lMS1fFFttPjLHZMRX3ffXwraJxZHFNg0cOidULF8X8Qt9lDaML7ZH1WbtFY6RDqdCyKpYsXRMjtt46spcXtjmqYXnMX7C4uK10/rYdFEtWDsn3tbi95sZxMWLR7Hy/VkTb2Imxc+lkrFwaCwrHNraLY0vn6uUhpf3tvP+d2qrPfWF6adBWsW3hYHp1HtdbcX8qzl/hetuyYVnhOs7PU2FaMqgxJmYXWq1jqvWe11hv9n60xKjC+z4s1lYe87Bt+3no3jIV262lF+9TbljDmliwrCXGjG8sXlNJdl2Vna+2xthx2IqO66Cb97hoWDSsXhxLWwqv23ZDvtdrY8m8+e370Pm8D46Rhfd49YvzY257n9Wx1Q7j2j8/XR5HLz9bPV03nT/fxb6DB7fFkqaXY4tte7rfrY/B0bJyQcx5sXTshSm7F3YEpTvt39ZbxfDVHa9ZscW4GLN2Rdl1XzinQwrXzIJFheeXR8Powr1oWE/naiN+NtasiEXLXool+baKxzwotp8yMbYre5+y49im6n5ddW5q9lk+KLYZv1UMXl5oK53XTq/rb8NiyzGNMXxl2Tbz4xo3YaviPSB9pw5bFS/MXtD+fOV57s09ofN7u3XF5yddr1tH8/Kye0+n7Ra+bwrXSnF9w2J4+3WxJoZ3eb+qIb2P7ddPMjgGty0vXI/jy97H4v63X5uFfenu2q31/VPR1sPrOx9rW4zbeXSsKr8XF/p0/V1TQ3fnr9NznT87w7asvi5WxLDtJ3cEVqM5Xiq0xejiMQzbsnA9v7QoXlxYfH+HNZefk+7vl4NbVlTuZ+PEda5+2JNaf0ZbMmhc7Paq/N5dUuMevmTt1jHpVd0Et9K1tTwKn6my67GqrefzWth0F/f2Dl3f99b7Wqx1DD28f53UWEfln/eSdP2sjCGlP3Nmevv9Xrz2hm3fGKufn13cp+zPw6+Kbdv//U8P+1xjH7u7Dnt+33q+Dw4rnOCu73m1Xl+u8vPWm2stWy6/1/Ximq51/azL+9n9sSad7+GDK7Zd4zuy0/dh1TnJ1GoDgL7p9FeQZQ3p7zHTv0FOLekfI6ellta2GD+2MXseAHqrYd78hTXqWgAAAKybl19eGbPmzMvmd9h+2xgyeFDMX7goVq8u1lpIf8e15ejRMWqLkbHllp1LPKxctSqr0rD0pZeyYXm7Mm5sY4xp3CZfYlOUqtzMju032A/ybJ6Wz50ZC0ZsuKDHJi9ViXt+dYzvYnhwYBOw/MV4atHw7oNjMMD07vt9Rcx5Zn5EVQASAKC3UiCvXGk5PaS/08wCe6U+xYZsubWlNVqjLQvypb/PbGlrjTXNLbHX1MnFvgDQS4bWBQAA+tUWW4xsH2J37rz5saZ5bey4/fYxaFD6q6ziX3wte2l55fCI5QrPNy1d1m2Ib8jgwdG4zdb5EpuqNauicphNWF/ZULxVw7dSJh/CrjQEMLAJKg7bObR8WHIY6Hy/AwAAsJlQkQ8AAOh3a9asieeen53Np3+cuuvkV8Xq1Wti3osLYm3L2izst9348TFkSK3hoSJmzHy+0K8lX+psh+3HZ1X9ADJZlbmmaI4hMW6DDjW66UqVjOasKMyM2oDDywL9L1Xfm/dyvlA0WrUxNhd9/n5XkQ8AWD8q8gFQb4J8AADABrFk6bKYv2BRNj9mzDYxbkxjNt8bL8yaEytXrc6XKm2z9Zax7fhx+RIAAAAAwPoT5AOg3gytCwAAbBDbbL1V+/C3ixcviUWLm2LlypWxfMXLsbAwX/0XY+W6emr0qC1i/Lix+RIAAAAAAAAMDIJ8AADABjN+3JjYYfttY9Cghli0eEm8MHtezJn7Yhbs6y7IF1H5XPrXrOPHjokdd9guGtK/dgUAAAAAAIABxNC6AADABrd27dp4ccHCWLFiZd4SMWWXV8WgQbX/bdHfXpgdq1evyeaHDx8WO2y3bQwbNjRbBgAAAADob9X/8Li0nB42paF1r7vptnhmxnP5UoeRI0fGrpN2jmmv3jv7x9fJ/IWL4sE/PxpPPzszVq5albWVm7LLpDjq8HfmSwBsaIJ8AADARvPyypWxqGlJNK9ujsmTduqyut7cFxfEqtWrYlxjY4wePUoVPgAAAABggxooQb5TzvhUx3524YRjp8fEHXeI//juD2LVqtV5a2fp72W/f8lX8iUANjRBPgAAAAAAAABgs1Ydfistp4dNKch38kc/GVttOTo+9IHj85aiFNh74uln47d33xdthf1Mx5AO4y2HvCH2mLpLjBgxPO9Z9L0fXhPLXloel3/r3/OWgaepaUl87OyPxxmnnxYHvHb/vBWgfmqPYwUAAAAAAAAAwCZn6JAhsfvUXSum/fbdK9571OHxoQ+cEC2trdHS0hIf/uA/F9renT1X3T+tY3088KcHY9KUPTtNl1z67bxHxA033hTv+8DJWaCuO+n51C/1r6Wn5zeEVatWxXmfOb/mMab29DxAXwnyAQAAAAAAAABsBvbbZ898LuLVe++Rz/WfUqguBfYeuv++eO6Zx9unO26/JZavWNFtyC29rjzs90p39pkfrTjGNG2//Xaxxz7TNmqwEBgYBPkAAAAAAAAAADYDgwYNipEjRmRTmu9PKaD31a9/Mxum9qofXh6NjdvkzxTtusvkOO+Tn4gRhW0n0484vGa/TV0aqvfan/44zjzn3KwyIUBvCfIBAAAAAAAAALBebvvlr2LW7Nlx4gnH5y2br3323iuOP+7YuPe+P+QtAD0T5AMAAAAAAAAA2Fw0FP6/ofA//ShV4/u/+x+Io6Yf0esKe2no2TQMbxqON1WumzRlz/jGxd/KpjRfeq6v0roOe/f0eHbGzLylKC2n9lpV8tK+pG2WpvUdFjdVHXzdgQdk2yo/htLQwz1tK53P8z5zfkW/8iGHq/c39e1uyGJg0yDIBwAAAAAAAACwGWkr/F9/mj1nbjz054dj4sQJeUvfpOF4n3vm8Tj7zI9mU5rfWMPuXnnVj7LHtM00lYbFXd8wXzoXCxYsjMVNTdlyCvVNO/CgLOxY2tYdt98S3/v+FRUhvRT2O/Ujp2fzTzz6UNbvofvvi/HjxmVtab+uu+HGrC09l/rss8/e2XPApk2QDwAAAAAAAABgc9GWivL1b0W+rpSq4JUqx61rlb0khevKq9CVphSOu+vue/Jefbfb1Ckx/YjD86ViqPDir1+UheXWdV+rpWp5111/Y7be8m3tusvkuPCCz8Wtt93eXkHw6h9fExMnTIjPfeZfs8p+SQo0/tNxx2bzz7/wQraPpZBj6pOG8S31BTZdgnwAAAAAAAAAAPS7FFS79eYb2ivdrY8UgitVsiufUmW6Nx1ycN6r795w0OvzuQ7V1fTWV6pY+MKs2bHvvvvkLR123WWXGD9+XDzyyKNZcDBV7kvD8nYVzNt5p52y4YfXt2Ig8MojyAcAAAAAAAAAsJno72F1kzGNjVkYbdas2XkL6VxMe81+MWHHHaKpqSkWLlyYP9O1FBxMAcLuhihOFf1Kw/+mioTnfeb8rOIfsOkT5AMAAAAAAAAA2Ey0paF1+3lk3TTMaxru9f/uf6DuobLGxsYYN25cvrTuUjAxBRTXRToH6VyUKuv1dp9KgciepHNdqkY4a/bsOPUjp/fbMMBA/QjyAQAAAAAAAAAMEC+vXBU33vKriumm2+6IBx9+NBY1LclDfA2xaHFT1paeq+6f1tFX//Cuw+KhPz8ct/3yV3lL/aTqd6kKXrk0dO3jTzyZL3W4974/5HMdUtvECRNi5Mjaw9v25LLLf5AF7A590yHZcgropfOe9qHaszNmZFX40rC7aXtpu7X2qZYUoDz/s5/Owpn9NQwwUD+CfAAAAAAAAAAAA8CWo0fFylWr4qZbf10x3fi/t8e3L786Pvm5L8eqVatjxcsvxyfP/0rWlp6r7p/WkdbVF7vuMjkuvOBz2ZCvl1z67by1Q2+G3d15p53igT89uF7V5dJQtmlI27QPpfU8O2NmfO/7V2Tz1b5x8beybZbccONNWdtRRx6RVdPri7S9933g5Gx9//GNr2VBuyQ9nnH6adm5SesvSfv12fM/Hx865aTs/KXtnfTB98ett91ecQ7Tev/7Jz/L5tNj+flJ4cAUElzX6oHAK0fDvPkL+3/wcwAAAAAAAACATURbKmlWprRcGoY2Lbf3KTZky60trdEabZGK3LW2tkVLW2usaW6JvaZOLvbdyJYsXRYvzl+QL3VoaW2NZ2f8LX79u9/HipdXZm2jR20R/+8th8TkSTvF4EGd60Btt+342GbrrfKl3kvDyn7+C1+Oa/LgWblrf/rjbFjYJAXarrvhxorAWwqofezsj8ddd98Tbzrk4Oy5JLUdNf2ImH7E4dlyudJryp8vX09y/HHHxgnHHxcfP/dfs7Bh2odSn1NO+kAWnCvt75577B6XXvLNLFjXld4eY7UU3Dv9jLMqKgPW6l+9/0mpXwr4paBhSek8lc4hsOkS5AMAAAAAAAAANmsDJcjXk2UvLY+vXXJZDBrUEOd89NQ+V90DYMMR5AMAAAAAAAAANmubS5AvWb16dTQMGhTDhg7NWwB4JehcGxUAAAAAAAAAgAFp+PDhQnwAr0CCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAAPUrDnz4le/vTt+9/s/xMy/vZC3AvBK0zBv/sK2fB4AAAAAAAAAYLPT1lYZnSgtp4eGhuJye59iQ7bc2tIardEWhZZobW2LlrbWWNPcEntNnVzsW0fNzWvjuz/8cTz8yF/zlqJD3vC6OP6YI2Lo0CF5y+apqWlJfOzsj8cZp58WB7x2/7wVoH5U5AMAAAAAAAAAGEBSyPCS7/4wC/FN2eVV8c/vPTKm7jope+7ue/8vbrzlV9n8hvLAnx6MSVP27DRdcum38x4RN9x4U7zvAydngbrupOdTv9S/lp6e35DSNrs7RoC+EOQDAAAAAAAAABhA5sx9MR5/6pnYY7dd41NnnRZvfuPr45NnfiQ+ccap2fN33/vHWLt2baxctSrO+fQX4t++cnH89Lqbo6WlJXt+XZVCdSnM9tD998VzzzzePt1x+y2xfMWKWFXYZlfS6zaFIFw6hvM+c3783/0PxBOPPlRxjFtssUXea9P27IyZceL7T84egY1DkA8AAAAAAAAAYACZ8bcXssfXvmbf7LFk96m7xk4TdogVL6+MRYubYlAaJrhg1uy58avf3h3/fe0vsuV1kcJtX/36N7Nhaq/64eXR2LhN/kzRrrtMjvM++YkYMWJEtjz9iMNr9tsUPPrYX+OhPz8cJ33w/e3Hk6RjPLnQBrAuBPkAAAAAAAAAAAaQ1ryy3sJFTdljSaq4t2hxcSjbkSNHxvDhw+NrX/h0fP68s2PsmMb43e//EM/PmpM931e3/fJXMWv27DjxhOPzloFr1qzZMX78uBjT2Ji3AKw/QT4AAAAAAAAAgAFk8qSds8eH/vJovLR8RTa/atXquOm2O+LllStjyi6TYqstR2ftDQ0NseMO28VbDjkoW549d1722BepGl8aZvao6Uf0usLeDTfelA3Dm4bjfeBPD8akKXvGNy7+Vjal+dJzfZXWddi7p3caEjYtp/b0fLW0L2mbpSktd2ffffeJBQsWxp133Z23dFYafrfWUMGpLT1XGma4NKRwaR9L+1HeJ0n7ldrmFt6jdH5K/bo6V9XHVd2vNBRyOidp+6nP17/5H9k23vaOd8Xdv78ne0ztPZ0TYP0J8gEAAAAAAAAADCA7T9wx3vn2Q2P+gkVx1r9+Ps7/8jfj7PMujJtvuyML7p343iPznh1enL8gexw3Zkz22Bez58zNhpqdOHFC3tI3aTje5555PM4+86PZlOY31rC7V171o+wxbTNN1/70x3HmOed2G1xLQ+h+6JSTsn7rGjisdv8DD8ZP/+fauP7an2T78dD992UVDj//hS9XhPlemDU7vvSVr8Z/fONrWb8nHn0oJk6YEB87++Pt+1EKEV53w43ZekrHls7z8Se+v1PIMZ2DNxz0+qzPOWd9LL70hQvijttviUPeeHD2mNrTUMjAhiXIBwAAAAAAAAAwgKxctSpmz30xX0pBu3mxprk5m29ra4uHHvlrNl/yyzvuirvvuz923H67mLrrpLx1/VVXmFuf0FsKzZXWUz5NO/CguOvue/Jefbfb1CkVIbUUdrv46xdlIbju9jW9JoXcUmW+tA/rG+hraIj4yKmnxIgRI7LlFGI8/7OfzgKSjz7W8X4tXLgwzvzY6e0hx9T/E+eclc2XKgSm/ikEmMJ+5WHIU0/+YEx7zX7xv7fcmrcUpXOQjhuoL0E+AAAAAAAAAIABYu6L8+PCf78kHnnsidhz9ylx3NHviY9+6P3x4Q+eEEcd/s7YdtzYuOHmX8all/1XpOF2k1t/9dvscciQwbF06bJsvj+kynW33nxDVtEtVbpbHylcV6osVz6linNvOuTgvFffpUp01VJlwRTQW9zUlLfUVjq+UqCvVrW73kpBuuoKhGMaG2P8+HExa9bsvCWyIN6EHXfIl4pGjhyRVeV7/oUXsuV77/tDzfWl0N/rDjwgG0q3PHS480475XNAPQnyAQAAAAAAAAAMEN+54kcxf+GiLLh3zumnxNvffHDst8+eccC0V8e73vGWuPCzH4+3HHJQ/PmRv8aNt/wqe80Jxx4Z244fG8/PmpMNw/vUM30Lo9UKnG1OUqAvDYmbQnZX/ODKiqFwN7a07XnzOqox9sa6DokM9C9BPgAAAAAAAACAAeDZmX+LOXNfjP/3lkOy4F4tgwcNin865j0xccIOce8fH4i1a9fGgfu/Or7wmY/HiccdFctXvByXXXlNob0lf0XPUuW3VAHu/+5/oK4htqSxsTHGjRuXL627FExMAcXeStXujjryiGwo3Nlz5mbL22+/Xf7s+ult0C5V1uvP7QIblyAfAAAAAAAAAMAAcOfv/5g9vu61+2WPXRk0aFDWZ8XLK+OBhx5pbzv04L/LAoBLli6L39x1b9beW//wrsOyENttvyxW+aunhQsXRlPVsLiPPPJoPP7Ek/lShzQMbbXUloaqTUPW9lV1ADBVxysPN6YhbdPQttWqh7tNnp0xIxuyN4UTS0pBwXJpObWXAn8p0FdrfWk/Utiy1rC7QP0J8gEAAAAAAAAADABPPTsztt56q5i088S8pWvTXr139vjUMzOyx5Jjj/yHrGrfMzOey1t6Jw0ve+EFn4szzzk3Lrn023lrh94Mu9tVAK0vJuy4QzbEbdqH0nqenTEzvvf9K7L5at+4+FsVwbobbrwpa0vV9VJ1u1pSnzSVS9v47Pmfj6OmH9EeknvDQa+Pa37ys4pw49U/vibuuvuefKlDakvPlZTWd9g735Gd25IURiwfvjcd4wUXfjE75n323itre+ff/78siPixsz9ecS4vu/wHMWv27DjxhOPzlq6lMGJDQzEACWwcgnwAAAAAAAAAAAPAJz72ofjcuWdEQ0pg9WCH7baNCz99Thx75LvzlqIxjdvE5z99dvzze4/MW3ovVXp74tGHsip0k6bsWTGlgN8Zp5/WbSW4Q990SPY47cCD4n0fOHmdAn0pfPeJc87K5tN60rZT8O1rF3059txj96y93NVXXh7XXX9j+36mwN8dt9+SHUt30vGUXpOmt73jXVmQcfoRh+c9iufj4q9fVNE3hfvOPvOjeY8OqS0FGcvX96FTTsrOWbnjjzs2C/ftsc+0rF86xrSdL33hgvbgYXpMy6m9dA7SlN6Xy75zaa+q8aU+KZRY2vfq4CLQ/xrmzV/Yls8DAAAAAAAAAGx22toqoxOl5fSQMnFpub1PsSFbbm1pjdZoixSba21ti5a21ljT3BJ7Te2ooAY9KVUwrA7tVUthujQ07uc+869dVgsENl0q8gEAAAAAAAAAAEAdCfIBAAAAAAAAAABAHQnyAQAAAAAAAAAAQB01zJu/sHKgdwAAAAAAAACAzUhbW2V0orScHhoaisvtfYoN2XJrS2u0RlsUWqK1tS1a2lpjTXNL7DV1crEvAPSSinwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQRw3z5i9sy+cBAAAAAAAAADY7bW2V0YnScnpoaCgut/cpNmTLrS2t0RptUWiJ1ta2aGlrjTXNLbHX1MnFvhvZ6tWr4+Zf/iZmPPd8x/52o6FwLLtOflW8++/fFsOGDc1bAagHQT4AAAAAAAAAYLNWHXorLaeHTSnI99VLvhdPPj0jX+q9vffcLc467aR8CYB6EOQDAAAAAAAAADZrAyXI96GP/WsMGz4sTjvpxBg0KO1V99I+f/uKq2PNmub43sVfitVr1sTfnp8dO03YIUaOHJH3GpiampbEx87+eJxx+mlxwGv3z1sB6mdQ/ggAAAAAAAAAwCaspbU1thgxIvbcfUrsPnXXHqfUL/VvaWnJXv9f11wbF/3Hd+PsT18Yf/rzI1nbunjgTw/GpCl7dpouufTbeY+IG268Kd73gZOzQF130vOpX+pfS0/Pb2irVq2K8z5zfqdjTW3puc1Rep835+OHdSXIBwAAAAAAAABATHv13jF110nR3Lw2fvyzG/LW3iuF6lKQ66H774vnnnm8fbrj9lti+YoV3Ya70uvKw36vdCk8uMc+0+J1Bx5Qcazp2Lfffru8F8/OmBknvv/k7BHomiAfAAAAAAAAAABx4P77xSfP/EiMbdwmlr20PG/tnRTQ++rXv5kNU3vVDy+PxsI6yu26y+Q475OfiBEjikP2Tj/i8Jr9NhWp6uD3vn9FFlBMx1IuHVMasrd0rJubdOxf+sIFm+3xw7oS5AMAAAAAAAAAYL3c9stfxazZs+PEE47PWwauVHkwVQ780CknZQFFgP4gyAcAAAAAAAAAwDpL1fj+7/4H4qjpR/S6wl4aljYNw5tCcam63aQpe8Y3Lv5WNqX50nN9ldZ12LundxrGNS2n9vR8tbQvaZulKS1359kZM7LHQ990SPbYG6VjLE219rE0tHB531K/0rDFpfbqIYjX9bWl56qPOb2n533m/Iq+pW2UzmVpfdWvTX3Sa5csWZI9vu0d74q7f39P9pj6/+x/ft5p3SXdvU8w0AnyAQAAAAAAAACwzmbPmRsP/fnhmDhxQt7SN2k43ueeeTzOPvOj2ZTmN9awu1de9aPsMW0zTdf+9Mdx5jnndhvmu/e+P8TECRNi5MjeDR2bAmufPf/z2TC8pe2kan4p2FYdWEtBxrT+1OeJRx+Kaa/ZL/7t81+MM876eJz/2U9n7Wk9t952e6d9XJ/X9lbaxhU/uDKuv/Yn2fpK56tW8C4NrZuG2E3bPOSNB7cf/7H/eHS87sADstdUhzX/95Zbs/3eZ++98hbYfAjyAQAAAAAAAAAMAFttOTqWv7wy/vrk0/G352flrUVtbW0x47nn48mnn22fUr/UP71uQ6iu3LauVfaSFBYrrad8mnbgQXHX3ffkvfput6lTYvoRh+dLxVDhxV+/KK674cZ13tdy6Rzc/8CDcekl36wYhjdtM4UWr7v+xqz6XcmbDjm4fXjiFIQ76sgjsmp2RxceS69Pj4e98x1ZFcT+em1vpW184pyzsvUnKXB3/HHHZgHCvihVM7zzrruzxySd7xTuSyG/0vphcyLIBwAAAAAAAAAwALx6nz1j9erV8Y1LL48Lv/qtePDhR7P2tWvXxje/fUV86ev/GV+95LL2KfVL/dPrNoQUGrv15hvaK7etjxSuS+upnh66/74sXLau3nDQ6/O5Dqmy4IIFC2NxU1Pesu4eeeTR2Kmwvgk77pC3dEjbTpUMU0XDkhQkLK9E2NjYGHvusXuvqh2uz2t7q3obKXC3/fbbxbx5L/YpGJjWkdZVHihclyGLYSAR5AMAAAAAAAAAGAD++dgj44wPfyB2n7pLtrxy5apisO8/L4+/PvF0TH7VTnH4YW9vn97zrv+X9U+vK9fa1hYNDQ35Us/GNDbG+PHjYtas2XnLwLbzTjvFrNmzs/Pbk+dfeCGfo1p1kDFV9asOCsLmRJAPAAAAAAAAAGAAGDJkcLx67z1itynFIN/LK1fF1771/XjqmZmxy6Sd45zTT4kj3vX/sulthx4cb3jd/ln/9LqFi5riku/+ML7yzW9H05KlMWWXV2Xr6I1a1dXqJVWhGzduXL607lIwMQUUa9l3332yin2lCnLdSaG/V7KRI0fExAn9V7GvL9KwvNNes19WtbA0rG6tComwuRDkAwAAAAAAAAAYQIYPG5o9/vwXt8TMv72QVeI7+/87OUaMGJ61Jz/88f/Ep/7t3+MP9z+ULT/59LPxl8eeiGdm/C0m7Twx3vWOt2btvfUP7zosq6522y9/lbfUz8KFC6OpaljcFBZ7/Ikn86UOqQpctdSWwm0p5FZLGjL4sHe+Iy659NtZAK07aVjb6uFzS9J2UpCt1rC7G1t15cC0v2m/N6Q0LO/rDjwgC4De+svbs3Oewn2wuRLkAwAAAAAAAAAYQF6z797RuM3WsXZtS80QX/L2Qw+OwYMGxeVX/aQ9zJekIXc/84mPxr577Z639E4Kt114wefizHPOzQJu1Xoz7G6qXpeqsvUUjutOCsWlcFx5yO7ZGTPje9+/Ipuv9o2Lv5Vts+SGG2/K2o468ogsaNaVU0/+YBY8O/7E92frL5eWv/TvX82qE6ZKhSn0d/oZZ1X0S9u59bbb46QPvr/b7WxopTBd+XlI+33FD66sGXxcF6myYRqpOYUpq6Xqhi8Uro10LtJ+1PNcQL0J8gEAAAAAAAAADCDbbzc+vvJvn4xPnfWR+MQZH6pZWW7P3afEaSefGA0NDVmY7/4H17/6WgqtPfHoQzFv3osxacqeFVMK+J1x+mnZMLxdOfRNh2SP0w48KN73gZPXKdCXgmCfOOesbD6tJ207hdK+dtGXY889OocTr77y8rju+hvb9zMF/u64/ZbsWLqTtvOlL1yQhRff9o53tb8+TWl5rz32aA+lpeP+0CknVfS77oYb45qrr8wCkPU2/YjD4+wzPxrHvPeEbN+OPOa4OOH44+L4447Ne6yf9J4fNf2I7BpI608hxpJ0/AcesH9WRTGF+mBz1jBv/sK2fB4AAAAAAAAAYLPT1lYZnSgtp4dUSSwtt/cpNmTLrS2t0RptUWiJ1ta2aGlrjTXNLbHX1PqHs3rrob88Ft++/Or24zvlX46LvztgWjYPG0OpgmMKPMLmTEU+AAAAAAAAAIDN1LRX7x2nvv+fsgp97/uno+N1r31N/gxseGm44TSs7hsOen3eApsvFfkAAAAAAAAAgM1ae7W9XGk5PQz0inxQT6kaXxqK+XOf+df2oYhhc6UiHwAAAAAAAAAAsNGkAN+kKXsK8UEZFfkAAAAAAAAAgM2ainwA1JuKfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQR4J8AAAAAAAAAAAAUEeCfAAAAAAAAAAAAFBHgnwAAAAAAAAAAABQRw3z5i9sy+cBAAAAAAAAADY7bW2V0YnScnpoaCgut/cpNmTLrS2t0RptUWiJ1ta2aGlrjTXNLbHX1MnFvv1k5qwX8zkAXkkmT9wun1t/gnwAAAAAAAAAwGbtlR7kA2DgM7QuAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANSRIB8AAAAAAAAAAADUkSAfAAAAAAAAAAAA1JEgHwAAAAAAAAAAANRRw7z5C9vyeQAAAAAAAACAzU5bW2V0orScHhoaisvtfYoN2XJrS2u0RlsUWqK1tS1a2lpjTXNL7DV1crFvHT3+5DPxm7vujRUvv5wtNxT2+81vPCgO3P/V2TIArywq8gEAAAAAAAAADCBPPv1sfP3S78dDf3ksnnpmZjY9+fSMwvKjeQ8AXmlU5AMAAAAAAAAANmsDrSLf//7yN3H9zb+Mtx76hnjtfvsUGwv7PWnniTF82LDiMgCvKCryAQAAAAAAAAAMIGtbWrLHV02cELtP3bU4Tdllg4f4mpqWxPs+cHJMmrJn+3TYu6fHszNmZs+nx7T8wJ8ezJYB6CDIBwAAAAAAAACwGXpp+Yr42Cf/La685tpobW3NW9dNCudNO/CgOOP00+K5Zx5vn44+anreY+BIgcQT339ye0ARoD8I8gEAAAAAAAAAbIaGDB4cW221Zfz+vvvjsiuviZZ1DPOtWrUqrrv+xjj7zI/GAa/dP28tOvmD749ddykONZweb735hk59ABDkAwAAAAAAAADYLI0cOSLO/diHY9txY+OBhx6J717xo3UK861cuSpmzZ4dO++0U94CQF8J8gEAAAAAAAAAbKa2HD0qPnnWR7Iw30N/eSwuvey/oqWlJX+2dxobt8mq7F13w43R1LQkb+0sDUV72LunZ8Pwlrvhxpti0pQ926drfvKzOO8z58cll3477xHZfJpK6yj1Ta/tjbTN8m2kdZQPjZv2+30fOLnT+lK1wdK+lObf9o53xd2/vyd77Ms+AHRHkA8AAAAAAAAAYID7y2NPxIfPOi9O/ugnO03nfPoLMX/hoqzfI4V+/3PDLdl8X5x4wvHZ47QDD+pTsC0F5FIA8KH774vnnnk8nnj0oXj00ceyMF+1b1z8rbjiB1fG9df+JOt77U9/HGeec26nYGC1tI3Pnv/5uOP2W7LXpelDp5yUBfF6em25ESNGxJe+cEG2nkPeeHD7+qYfcXjeA2DdCfIBAAAAAAAAAGwG2trymQ0gVeW76oeXx9lnfjQL1/WmUl2qiHf/Aw/G+Z/9dPb6JIXlPnHOWfGmQw7OlsultvRc6pPss/decfxxx8a99/0hW66ltI1LL/lm7LrL5Lw1svBd2tfrrr8xq7QHUG+CfAAAAAAAAAAAA9yr994jvnfxl+Lyb/17p+nrX/xMNrRusm+h3z9Of1c2vy7OOP20rEpdKdCXquF15ZFHHo2GhogxjY15S9HIkSNi4oQJ+VKHNHxvKfCXpEDf9ttvF/PmvdhlGC9tY6eJE2LCjjvkLR3ecNDr46E/Pxyz58zNWwDqR5APAAAAAAAAAGAz9dLyFfHv3/xONrTutFfvHaef+i8xePDg/Nl1lwJ9aejbNBxuV8PXPv/CC1lgLwX3NpS0DYBNgSAfAAAAAAAAAMBmaO3atXHRxd/NQnwHTNs3PnzSP8fgQf0XJenN0Lcb2s477ZTPda+rKoAAG4sgHwAAAAAAAADAZmj1mjWxdNlL8XcHvCZOff/x/RriK9dVmK6roW3TcmrvDxMnTuhy+NwUMJz2mv0qht2truDXn/sC0B1BPgAAAAAAAACAzdCoLbaISy76tzjlX/4pBq1HiK+paUmc95nzs8dyl13+g5g1e3Yc+qZD8pZKqWJfCtJdcOEX21+7atWquOIHV8bjTzyZLa+vA167fxz2znfE6WecFc/OmJm3Rtxw401x6223x0kffH+MGDEim1534AEVQwF3tS9jGhujoSHikUcezVsA1p8gHwAAAAAAAADAADJ82LDsceWq1dnjxpACe9MOPCgmTdmzfZo378W47DuXRmPjNnmvSik897nP/Gs2pG3ptUcec1yccPxx2ZC8/eWM00+LD51yUrztHe9q37frbrgxrrn6yth1l8l5r4jpRxweZ5/50TjmvSd0uy/peI6afkScec65Wb8UCgRYXw3z5i9sy+cBAAAAAAAAADY7bW2V0YnScnpIldfScnufYkO23NrSGq3RFoWWaG1ti5a21ljT3BJ7Te0Ih9XDC7PnxgVfuThf6vDOtx8axxzxrnzplStVwvv8F76cVchL4TqAzYGKfAAAAAAAAAAAA8hOE3aI9x9/TOy3716x25TJ2bT71F3iVTtNzHu8ss2eMzce+vPDMXHihLwFYOBTkQ8AAAAAAAAA2KwNtIp8m4qmpiVx9Y+viVNP/mA2zG6p7WNnfzwOeO3+2ZC4AJsLFfkAAAAAAAAAANjoRo4cEfPmvRh77DMtJk3ZM5umHXhQHDX9CCE+YLOjIh8AAAAAAAAAsFlTkQ+AelORDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAAAA6kiQDwAAAAAAAAAAAOpIkA8AAAAAAAAAAADqSJAPAAAAAAAAAP7/du2YAAAAAGGQ/VMbYw/kAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAQiIfAAAAAAAAAAAAhEQ+AAAAAAAAAAAACIl8AAAAAAAAAAAAEBL5AAAAAAAAAAAAICTyAQAAAAAAAAAAQEjkAwAAAAAAAAAAgJDIBwAAAAAAAAAAACGRDwAAAAAAAAAAAEIiHwAAAAAAAAAAAIREPgAAAAAAAAAAAAiJfAAAAAAAAAAAABAS+QAAAAAAAAAAACAk8gEAAAAAAAAAAEBI5AMAAAAAAAAAAICQyAcAAAAAAAAAAAAhkQ8AAAAAAAAAAABCIh8AAAAAAAAAAACERD4AAAAAAAAAAAAIiXwAAAAAAAAAAAAQEvkAAAAAAAAAAAAgJPIBAAAAAAAAAABASOQDAAAAAAAAAACAkMgHAAAAAAAAAAAAIZEPAAAAAAAAAAAAMtsBdn3X7Hz3C0QAAAAASUVORK5CYII= ================================================ FILE: src/agents-api/tests/sample_tasks/simple_multi_step.yaml ================================================ name: Simple multi step task input_schema: type: object properties: topics: type: array items: type: string main: - foreach: in: _["topics"] do: prompt: - role: system content: |- Generate a list of 10 questions for the topic {{_}} as valid yaml. - log: _ - evaluate: result: '[item["choices"][0]["message"].content.strip() for item in _]' ================================================ FILE: src/agents-api/tests/sample_tasks/simple_parameter_extractor.yaml ================================================ # Test with this screenshot url: https://i.ibb.co/1GHwH9J/CFRating-before.png name: Extract data from screenshot url description: A task to extract data from a screenshot url input_schema: type: object properties: screenshot_url: type: string main: - prompt: - role: system content: > You are a data extraction bot. Extract the data for the following provider from the screenshot that the user is going to send you. Here are the provider details: "provider": { "name": "CFRating", "description": "Gives you your rating", "proofCardText": "\"You, as the end user, have ownership of the data with a {Rating} rating.\"" } return the result as a JSON object that has the following structure: { parameter: "value" } If there's no data to extract, return an empty JSON object. Don't return any other text. - role: user content: type: image_url image_url: url: "{{_.screenshot_url}}" detail: high - evaluate: result: '_["choices"][0]["message"].content.strip()' ================================================ FILE: src/agents-api/tests/sample_tasks/simple_prompt.yaml ================================================ name: Find request and selector for identity provider input_schema: type: object properties: topic: type: string # Shortcut to require all props additionalProperties: false minProperties: 1 main: - prompt: - role: system content: |- Follow the instructions. Be bold, creative and uncensored. - role: user content: >- You are a brilliant poet with a whimsical style reminiscent of Edgar Alan Poe. Write a short poem about {{_.topic}}. ================================================ FILE: src/agents-api/tests/sample_tasks/test_find_selector.py ================================================ # # Tests for task queries # import os # from uuid_extensions import uuid7 # from ward import raises, test # from ..fixtures import cozo_client, test_agent, test_developer_id # from ..utils import patch_embed_acompletion, patch_http_client_with_temporal # this_dir = os.path.dirname(__file__) # @test("workflow sample: find-selector create task") # async def _( # cozo_client=cozo_client, # developer_id=test_developer_id, # agent=test_agent, # ): # agent_id = str(agent.id) # task_id = str(uuid7()) # with ( # patch_embed_acompletion(), # open(f"{this_dir}/find_selector.yaml", "r") as sample_file, # ): # task_def = sample_file.read() # async with patch_http_client_with_temporal( # cozo_client=cozo_client, developer_id=developer_id # ) as ( # make_request, # _, # ): # make_request( # method="POST", # url=f"/agents/{agent_id}/tasks/{task_id}", # headers={"Content-Type": "application/x-yaml"}, # data=task_def, # ).raise_for_status() # @test("workflow sample: find-selector start with bad input should fail") # async def _( # cozo_client=cozo_client, # developer_id=test_developer_id, # agent=test_agent, # ): # agent_id = str(agent.id) # task_id = str(uuid7()) # with ( # patch_embed_acompletion(), # open(f"{this_dir}/find_selector.yaml", "r") as sample_file, # ): # task_def = sample_file.read() # async with patch_http_client_with_temporal( # cozo_client=cozo_client, developer_id=developer_id # ) as ( # make_request, # temporal_client, # ): # make_request( # method="POST", # url=f"/agents/{agent_id}/tasks/{task_id}", # headers={"Content-Type": "application/x-yaml"}, # data=task_def, # ).raise_for_status() # execution_data = dict(input={"test": "input"}) # with raises(BaseException): # make_request( # method="POST", # url=f"/tasks/{task_id}/executions", # json=execution_data, # ).raise_for_status() # @test("workflow sample: find-selector start with correct input") # async def _( # cozo_client=cozo_client, # developer_id=test_developer_id, # agent=test_agent, # ): # agent_id = str(agent.id) # task_id = str(uuid7()) # with ( # patch_embed_acompletion( # output={"role": "assistant", "content": "found: true\nvalue: 'Gaga'"} # ), # open(f"{this_dir}/find_selector.yaml", "r") as sample_file, # ): # task_def = sample_file.read() # async with patch_http_client_with_temporal( # cozo_client=cozo_client, developer_id=developer_id # ) as ( # make_request, # temporal_client, # ): # make_request( # method="POST", # url=f"/agents/{agent_id}/tasks/{task_id}", # headers={"Content-Type": "application/x-yaml"}, # data=task_def, # ).raise_for_status() # input = dict( # screenshot_base64="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA", # network_requests=[{"request": {}, "response": {"body": "Lady Gaga"}}], # parameters=["name"], # ) # execution_data = dict(input=input) # execution_created = make_request( # method="POST", # url=f"/tasks/{task_id}/executions", # json=execution_data, # ).json() # handle = temporal_client.get_workflow_handle(execution_created["jobs"][0]) # await handle.result() ================================================ FILE: src/agents-api/tests/test_activities.py ================================================ from agents_api.clients import temporal from agents_api.env import temporal_task_queue from agents_api.workflows.demo import DemoWorkflow from agents_api.workflows.task_execution.helpers import DEFAULT_RETRY_POLICY from uuid_extensions import uuid7 from ward import test from .utils import patch_testing_temporal @test("activity: call demo workflow via temporal client") async def _(): async with patch_testing_temporal() as (_, mock_get_client): client = await temporal.get_client() result = await client.execute_workflow( DemoWorkflow.run, args=[1, 2], id=str(uuid7()), task_queue=temporal_task_queue, retry_policy=DEFAULT_RETRY_POLICY, ) assert result == 3 mock_get_client.assert_called_once() ================================================ FILE: src/agents-api/tests/test_activities_utils.py ================================================ from unittest.mock import MagicMock, patch import markdown2 import markdownify from agents_api.common.utils.evaluator import get_evaluator from ward import test @test("evaluator: csv reader") def _(): e = get_evaluator({}) result = e.eval('[r for r in csv.reader("a,b,c\\n1,2,3")]') assert result == [["a", "b", "c"], ["1", "2", "3"]] @test("evaluator: csv writer") def _(): e = get_evaluator({}) result = e.eval('csv.writer("a,b,c\\n1,2,3").writerow(["4", "5", "6"])') # at least no exceptions assert result == 7 @test("evaluator: humanize_text_alpha") def _(): with ( patch("requests.post") as mock_requests_post, patch("litellm.completion") as mock_litellm_completion, patch("deep_translator.GoogleTranslator.translate") as mock_deep_translator, ): mock_resp = MagicMock() mock_resp.raise_for_status.return_value = None mock_resp.json.return_value = {"probability": 0.4} mock_requests_post.return_value = mock_resp mock_litellm_completion.return_value = MagicMock( choices=[ MagicMock( message=MagicMock(content="Mock LLM Response (humanized text from LLM)"), ), ], ) mock_deep_translator.return_value = "Mock translated text" evaluator = get_evaluator({}) result = evaluator.eval('humanize_text_alpha("Hello, World!", threshold=60)') assert mock_requests_post.called, "Expected requests.post call" assert mock_litellm_completion.called, "Expected litellm.completion call" assert mock_deep_translator.called, "Expected GoogleTranslator.translate call" assert isinstance(result, str) and len(result) > 0, ( "Expected a non-empty string response" ) @test("evaluator: html_to_markdown") def _(): e = get_evaluator({}) html = 'Yay GitHub' result = e.eval(f"""html_to_markdown('{html}')""") markdown = markdownify.markdownify(html) assert result == markdown @test("evaluator: markdown_to_html") def _(): e = get_evaluator({}) markdown = "**Yay** [GitHub](http://github.com)" result = e.eval(f"""markdown_to_html('{markdown}')""") markdowner = markdown2.Markdown() html = markdowner.convert(markdown) assert result == html @test("evaluator: safe_extract_json basic") def _(): e = get_evaluator({}) result = e.eval('extract_json("""```json {"pp": "\thello"}```""")') assert result == {"pp": "\thello"} @test("safe_extract_json with various code block formats") def test_safe_extract_json_formats(): from agents_api.common.utils.evaluator import safe_extract_json # Test with ```json format json_block = """```json {"key": "value", "num": 123} ```""" result = safe_extract_json(json_block) assert result == {"key": "value", "num": 123} # Test with plain ``` format containing JSON plain_block = """``` {"key": "value", "num": 123} ```""" result = safe_extract_json(plain_block) assert result == {"key": "value", "num": 123} # Test with no code block, just JSON plain_json = """{"key": "value", "num": 123}""" result = safe_extract_json(plain_json) assert result == {"key": "value", "num": 123} # Test with nested JSON structure nested_json = """```json { "name": "test", "data": { "items": [1, 2, 3], "config": {"enabled": true} } } ```""" result = safe_extract_json(nested_json) assert result["name"] == "test" assert result["data"]["items"] == [1, 2, 3] assert result["data"]["config"]["enabled"] is True @test("safe_extract_json handles marker validation correctly") def test_safe_extract_json_validation(): from agents_api.common.utils.evaluator import safe_extract_json # Test invalid start marker validation for ```json format invalid_json_marker = """``json {"key": "value"} ```""" try: safe_extract_json(invalid_json_marker) assert False, "Expected ValueError was not raised" except ValueError as e: assert "Code block has invalid or missing markers" in str(e) # Test invalid start marker validation for plain ``` format invalid_plain_marker = """`` {"key": "value"} ```""" try: safe_extract_json(invalid_plain_marker) assert False, "Expected ValueError was not raised" except ValueError as e: assert "Code block has invalid or missing markers" in str(e) # Test missing end marker validation missing_end_marker = """```json {"key": "value"}""" try: safe_extract_json(missing_end_marker) assert False, "Expected ValueError was not raised" except ValueError as e: assert "Code block has invalid or missing markers" in str(e) # Test with malformed JSON malformed_json = """```json {"key": "value", "missing": } ```""" try: safe_extract_json(malformed_json) assert False, "Expected ValueError was not raised" except ValueError as e: assert "Failed to parse JSON" in str(e) ================================================ FILE: src/agents-api/tests/test_agent_metadata_filtering.py ================================================ """ Tests for secure metadata filtering in agent queries """ from agents_api.autogen.openapi_model import CreateAgentRequest from agents_api.clients.pg import create_db_pool from agents_api.queries.agents.create_agent import create_agent from agents_api.queries.agents.list_agents import list_agents from ward import test from .fixtures import pg_dsn, test_developer_id @test("query: list_agents with metadata filtering") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that list_agents correctly filters by metadata.""" pool = await create_db_pool(dsn=dsn) # Create test agents with different metadata agent1 = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="Test Agent 1", about="Test agent with specific metadata", model="gpt-4o-mini", metadata={"filter_key": "filter_value", "shared": "common"}, ), connection_pool=pool, ) agent2 = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="Test Agent 2", about="Test agent with different metadata", model="gpt-4o-mini", metadata={"other_key": "other_value", "shared": "common"}, ), connection_pool=pool, ) # List agents with specific metadata filter agents_filtered = await list_agents( developer_id=developer_id, metadata_filter={"filter_key": "filter_value"}, connection_pool=pool, ) # Verify correct filtering assert len(agents_filtered) >= 1 assert any(a.id == agent1.id for a in agents_filtered) assert not any(a.id == agent2.id for a in agents_filtered) # List agents with shared metadata agents_shared = await list_agents( developer_id=developer_id, metadata_filter={"shared": "common"}, connection_pool=pool, ) # Verify both agents are returned assert len(agents_shared) >= 2 assert any(a.id == agent1.id for a in agents_shared) assert any(a.id == agent2.id for a in agents_shared) @test("query: list_agents with SQL injection attempt in metadata filter") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that list_agents safely handles metadata filters with SQL injection attempts.""" pool = await create_db_pool(dsn=dsn) # Create a test agent with normal metadata agent_normal = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="Normal Agent", about="Agent with normal metadata", model="gpt-4o-mini", metadata={"test_key": "test_value"}, ), connection_pool=pool, ) # Create a test agent with special characters in metadata agent_special = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="Special Agent", about="Agent with special metadata", model="gpt-4o-mini", metadata={"special' SELECT * FROM agents--": "special_value"}, ), connection_pool=pool, ) # Attempt normal metadata filtering agents_normal = await list_agents( developer_id=developer_id, metadata_filter={"test_key": "test_value"}, connection_pool=pool, ) # Verify normal filtering works assert any(a.id == agent_normal.id for a in agents_normal) assert not any(a.id == agent_special.id for a in agents_normal) # Attempt filtering with SQL injection attempts injection_filters = [ {"key' OR 1=1--": "value"}, # SQL injection in key {"key": "1' OR '1'='1"}, # SQL injection in value {"key' DROP TABLE agents--": "value"}, # Command injection in key ] for injection_filter in injection_filters: # These should safely execute without error agents_injection = await list_agents( developer_id=developer_id, metadata_filter=injection_filter, connection_pool=pool, ) # Should not return all agents (which would happen if injection succeeded) assert len(agents_injection) == 0, ( f"Should not match any agents with injection filter: {injection_filter}" ) # Test for agent with special characters in metadata agents_special = await list_agents( developer_id=developer_id, metadata_filter={"special' SELECT * FROM agents--": "special_value"}, connection_pool=pool, ) # Verify exact matching works for special characters too (if using JSONB containment operator) assert len(agents_special) >= 1 assert any(a.id == agent_special.id for a in agents_special) assert not any(a.id == agent_normal.id for a in agents_special) ================================================ FILE: src/agents-api/tests/test_agent_queries.py ================================================ # Tests for agent queries from agents_api.autogen.openapi_model import ( Agent, CreateAgentRequest, CreateOrUpdateAgentRequest, PatchAgentRequest, ResourceDeletedResponse, UpdateAgentRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.agents import ( create_agent, create_or_update_agent, delete_agent, get_agent, list_agents, patch_agent, update_agent, ) from fastapi import HTTPException from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import pg_dsn, test_agent, test_developer_id, test_project @test("query: create agent sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that an agent can be successfully created.""" pool = await create_db_pool(dsn=dsn) await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="test agent", about="test agent about", model="gpt-4o-mini", ), connection_pool=pool, ) # type: ignore[not-callable] @test("query: create agent with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that an agent can be successfully created with a project.""" pool = await create_db_pool(dsn=dsn) result = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="test agent with project", about="test agent about", model="gpt-4o-mini", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] assert result.project == project.canonical_name @test("query: create agent with invalid project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that creating an agent with an invalid project raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="test agent with invalid project", about="test agent about", model="gpt-4o-mini", project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: create or update agent sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that an agent can be successfully created or updated.""" pool = await create_db_pool(dsn=dsn) await create_or_update_agent( developer_id=developer_id, agent_id=uuid7(), data=CreateOrUpdateAgentRequest( name="test agent", canonical_name="test_agent2", about="test agent about", model="gpt-4o-mini", instructions=["test instruction"], ), connection_pool=pool, ) # type: ignore[not-callable] @test("query: create or update agent with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that an agent can be successfully created or updated with a project.""" pool = await create_db_pool(dsn=dsn) result = await create_or_update_agent( developer_id=developer_id, agent_id=uuid7(), data=CreateOrUpdateAgentRequest( name="test agent", canonical_name="test_agent_with_project", about="test agent about", model="gpt-4o-mini", instructions=["test instruction"], project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] assert result.project == project.canonical_name @test("query: update agent sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that an existing agent's information can be successfully updated.""" pool = await create_db_pool(dsn=dsn) result = await update_agent( agent_id=agent.id, developer_id=developer_id, data=UpdateAgentRequest( name="updated agent", about="updated agent about", model="gpt-4o-mini", default_settings={"temperature": 1.0}, metadata={"hello": "world"}, ), connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Agent) assert result.name == "updated agent" assert result.about == "updated agent about" assert result.model == "gpt-4o-mini" assert result.default_settings["temperature"] == 1.0 assert result.metadata == {"hello": "world"} @test("query: update agent with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, project=test_project): """Test that an existing agent's information can be successfully updated with a project.""" pool = await create_db_pool(dsn=dsn) result = await update_agent( agent_id=agent.id, developer_id=developer_id, data=UpdateAgentRequest( name="updated agent with project", about="updated agent about", model="gpt-4o-mini", default_settings={"temperature": 1.0}, metadata={"hello": "world"}, project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Agent) assert result.project == project.canonical_name @test("query: update agent, project does not exist") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that an existing agent's information can be successfully updated with a project that does not exist.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await update_agent( agent_id=agent.id, developer_id=developer_id, data=UpdateAgentRequest( name="updated agent with project", about="updated agent about", model="gpt-4o-mini", default_settings={"temperature": 1.0}, metadata={"hello": "world"}, project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: patch agent sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that an agent can be successfully patched.""" pool = await create_db_pool(dsn=dsn) result = await patch_agent( agent_id=agent.id, developer_id=developer_id, data=PatchAgentRequest( name="patched agent", about="patched agent about", default_settings={"temperature": 1.0}, metadata={"something": "else"}, ), connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Agent) assert result.name == "patched agent" assert result.about == "patched agent about" assert result.default_settings["temperature"] == 1.0 @test("query: patch agent with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, project=test_project): """Test that an agent can be successfully patched with a project.""" pool = await create_db_pool(dsn=dsn) result = await patch_agent( agent_id=agent.id, developer_id=developer_id, data=PatchAgentRequest( name="patched agent with project", about="patched agent about", default_settings={"temperature": 1.0}, metadata={"something": "else"}, project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] # Verify the agent is in the list of agents with the correct project agents = await list_agents( developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] # Find our patched agent in the list patched_agent = next((a for a in agents if a.id == agent.id), None) assert patched_agent is not None assert patched_agent.name == "patched agent with project" assert patched_agent.project == project.canonical_name assert result is not None assert isinstance(result, Agent) assert result.project == project.canonical_name @test("query: patch agent, project does not exist") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that an agent can be successfully patched with a project that does not exist.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await patch_agent( agent_id=agent.id, developer_id=developer_id, data=PatchAgentRequest( name="patched agent with project", about="patched agent about", default_settings={"temperature": 1.0}, metadata={"something": "else"}, project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: get agent not exists sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that retrieving a non-existent agent raises an exception.""" agent_id = uuid7() pool = await create_db_pool(dsn=dsn) with raises(Exception): await get_agent(agent_id=agent_id, developer_id=developer_id, connection_pool=pool) # type: ignore[not-callable] @test("query: get agent exists sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that retrieving an existing agent returns the correct agent information.""" pool = await create_db_pool(dsn=dsn) result = await get_agent( agent_id=agent.id, developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Agent) assert result.id == agent.id assert result.name == agent.name assert result.about == agent.about assert result.model == agent.model assert result.default_settings == agent.default_settings assert result.metadata == agent.metadata @test("query: list agents sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing agents returns a collection of agent information.""" pool = await create_db_pool(dsn=dsn) result = await list_agents(developer_id=developer_id, connection_pool=pool) # type: ignore[not-callable] assert isinstance(result, list) assert all(isinstance(agent, Agent) for agent in result) @test("query: list agents with project filter sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that listing agents with a project filter returns the correct agents.""" pool = await create_db_pool(dsn=dsn) # First create an agent with the specific project await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="test agent for project filter", about="test agent about", model="gpt-4o-mini", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] # Now fetch with project filter result = await list_agents(developer_id=developer_id, connection_pool=pool) # type: ignore[not-callable] assert isinstance(result, list) assert all(isinstance(agent, Agent) for agent in result) assert any(agent.project == project.canonical_name for agent in result) @test("query: list agents sql, invalid sort direction") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing agents with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_agents( developer_id=developer_id, connection_pool=pool, direction="invalid", ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: delete agent sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that an agent can be successfully deleted.""" pool = await create_db_pool(dsn=dsn) create_result = await create_agent( developer_id=developer_id, data=CreateAgentRequest( name="test agent", about="test agent about", model="gpt-4o-mini", ), connection_pool=pool, ) # type: ignore[not-callable] delete_result = await delete_agent( agent_id=create_result.id, developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert delete_result is not None assert isinstance(delete_result, ResourceDeletedResponse) with raises(Exception): await get_agent( developer_id=developer_id, agent_id=create_result.id, connection_pool=pool, ) # type: ignore[not-callable] ================================================ FILE: src/agents-api/tests/test_agent_routes.py ================================================ # Tests for agent routes from uuid_extensions import uuid7 from ward import test from tests.fixtures import client, make_request, test_agent, test_project @test("route: unauthorized should fail") def _(client=client): data = { "name": "test agent", "about": "test agent about", "model": "gpt-4o-mini", } response = client.request( method="POST", url="/agents", json=data, ) assert response.status_code == 403 @test("route: create agent") def _(make_request=make_request): data = { "name": "test agent", "about": "test agent about", "model": "gpt-4o-mini", } response = make_request( method="POST", url="/agents", json=data, ) assert response.status_code == 201 @test("route: create agent with project") def _(make_request=make_request, project=test_project): data = { "name": "test agent with project", "about": "test agent about", "model": "gpt-4o-mini", "project": project.canonical_name, } response = make_request( method="POST", url="/agents", json=data, ) assert response.status_code == 201 assert response.json()["project"] == project.canonical_name @test("route: create agent with instructions") def _(make_request=make_request): data = { "name": "test agent", "about": "test agent about", "model": "gpt-4o-mini", "instructions": ["test instruction"], } response = make_request( method="POST", url="/agents", json=data, ) assert response.status_code == 201 @test("route: create or update agent") def _(make_request=make_request): agent_id = str(uuid7()) data = { "name": "test agent", "about": "test agent about", "model": "gpt-4o-mini", "instructions": ["test instruction"], } response = make_request( method="POST", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 201 @test("route: create or update agent with project") def _(make_request=make_request, project=test_project): agent_id = str(uuid7()) data = { "name": "test agent with project", "about": "test agent about", "model": "gpt-4o-mini", "instructions": ["test instruction"], "project": project.canonical_name, } response = make_request( method="POST", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 201 assert response.json()["project"] == project.canonical_name @test("route: get agent not exists") def _(make_request=make_request): agent_id = str(uuid7()) response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 404 @test("route: get agent exists") def _(make_request=make_request, agent=test_agent): agent_id = str(agent.id) response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code != 404 @test("route: delete agent") def _(make_request=make_request): data = { "name": "test agent", "about": "test agent about", "model": "gpt-4o-mini", "instructions": ["test instruction"], } response = make_request( method="POST", url="/agents", json=data, ) agent_id = response.json()["id"] response = make_request( method="DELETE", url=f"/agents/{agent_id}", ) assert response.status_code == 202 response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 404 @test("route: update agent") def _(make_request=make_request, agent=test_agent): data = { "name": "updated agent", "about": "updated agent about", "default_settings": {"temperature": 1.0}, "model": "gpt-4o-mini", "metadata": {"hello": "world"}, } agent_id = str(agent.id) response = make_request( method="PUT", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 200 agent_id = response.json()["id"] response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 200 agent = response.json() assert "test" not in agent["metadata"] @test("route: update agent with project") def _(make_request=make_request, agent=test_agent, project=test_project): data = { "name": "updated agent with project", "about": "updated agent about", "default_settings": {"temperature": 1.0}, "model": "gpt-4o-mini", "metadata": {"hello": "world"}, "project": project.canonical_name, } agent_id = str(agent.id) response = make_request( method="PUT", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 200 agent_id = response.json()["id"] response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 200 agent = response.json() assert agent["project"] == project.canonical_name @test("route: patch agent") def _(make_request=make_request, agent=test_agent): agent_id = str(agent.id) data = { "name": "patched agent", "about": "patched agent about", "default_settings": {"temperature": 1.0}, "metadata": {"hello": "world"}, } response = make_request( method="PATCH", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 200 agent_id = response.json()["id"] response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 200 agent = response.json() assert "hello" in agent["metadata"] @test("route: patch agent with project") def _(make_request=make_request, agent=test_agent, project=test_project): agent_id = str(agent.id) data = { "name": "patched agent with project", "about": "patched agent about", "default_settings": {"temperature": 1.0}, "metadata": {"hello": "world"}, "project": project.canonical_name, } response = make_request( method="PATCH", url=f"/agents/{agent_id}", json=data, ) assert response.status_code == 200 agent_id = response.json()["id"] response = make_request( method="GET", url=f"/agents/{agent_id}", ) assert response.status_code == 200 agent = response.json() assert "hello" in agent["metadata"] assert agent["project"] == project.canonical_name @test("route: list agents") def _(make_request=make_request): response = make_request( method="GET", url="/agents", ) assert response.status_code == 200 response = response.json() agents = response["items"] assert isinstance(agents, list) assert len(agents) > 0 @test("route: list agents with project filter") def _(make_request=make_request, project=test_project): # First create an agent with the project data = { "name": "test agent for project filter", "about": "test agent about", "model": "gpt-4o-mini", "project": project.canonical_name, } make_request( method="POST", url="/agents", json=data, ) # Then list agents with project filter response = make_request( method="GET", url="/agents", params={ "project": project.canonical_name, }, ) assert response.status_code == 200 response = response.json() agents = response["items"] assert isinstance(agents, list) assert len(agents) > 0 assert any(agent["project"] == project.canonical_name for agent in agents) @test("route: list agents with metadata filter") def _(make_request=make_request): response = make_request( method="GET", url="/agents", params={ "metadata_filter": {"test": "test"}, }, ) assert response.status_code == 200 response = response.json() agents = response["items"] assert isinstance(agents, list) assert len(agents) > 0 ================================================ FILE: src/agents-api/tests/test_base_evaluate.py ================================================ import uuid from unittest.mock import patch from agents_api.activities.task_steps.base_evaluate import base_evaluate from agents_api.autogen.openapi_model import ( Agent, TaskSpecDef, ToolCallStep, TransitionTarget, Workflow, ) from agents_api.common.exceptions.executions import EvaluateError from agents_api.common.protocol.tasks import ( ExecutionInput, StepContext, ) from agents_api.common.utils.datetime import utcnow from agents_api.common.utils.task_validation import ( backwards_compatibility, validate_py_expression, ) from ward import raises, test @test("utility: base_evaluate - empty exprs") async def _(): with raises(AssertionError): await base_evaluate({}, values={"a": 1}) @test("utility: base_evaluate - value undefined") async def _(): with raises(EvaluateError): await base_evaluate("$ b", values={"a": 1}) @test("utility: base_evaluate - scalar values") async def _(): exprs = [1, 2, True, 1.2459, "$ x + 5"] values = {"x": 5} result = await base_evaluate(exprs, values=values) assert result == [1, 2, True, 1.2459, 10] @test("utility: base_evaluate - str") async def _(): exprs = "$ x + 5" values = {"x": 5} result = await base_evaluate(exprs, values=values) assert result == 10 # Test with $ but no space - this should NOT be evaluated as Python # but treated as a string with an f-string wrapper exprs = "$x + 5" values = {"x": 5} result = await base_evaluate(exprs, values=values) assert result == "$x + 5", ( "Expression with $ but no space should be treated as a regular string" ) exprs = "hello world" result = await base_evaluate(exprs, values={}) assert result == "hello world" exprs = "I forgot to put a dollar sign, can you still calculate {x + 5}?" result = await base_evaluate(exprs, values={"x": 5}) assert result == "I forgot to put a dollar sign, can you still calculate 10?" @test("utility: base_evaluate - dict") async def _(): exprs = {"a": "$ x + 5", "b": "$ x + 6", "c": "x + 7"} values = {"x": 5} result = await base_evaluate(exprs, values=values) assert result == {"a": 10, "b": 11, "c": "x + 7"} @test("utility: base_evaluate - list") async def _(): exprs = [{"a": "$ x + 5"}, {"b": "$ x + 6"}, {"c": "x + 7"}] values = {"x": 5} result = await base_evaluate(exprs, values=values) assert result == [{"a": 10}, {"b": 11}, {"c": "x + 7"}] @test("utility: base_evaluate - parameters") async def _(): exprs = "$ x + 5" context_none = None values_none = None extra_lambda_strs_none = None step = ToolCallStep(tool="tool1") execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) scope_id = uuid.uuid4() context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) values = {"x": 5} reduce = "results + [_]" reduce = reduce.replace("_", "_item").replace("results", "_result") extra_lambda_strs = {"reducer_lambda": f"lambda _result, _item: ({reduce})"} with patch( "agents_api.common.protocol.tasks.StepContext.prepare_for_step", return_value={"x": 10}, ): with raises(ValueError): result = await base_evaluate( exprs, context=context_none, values=values_none, extra_lambda_strs=extra_lambda_strs_none, ) with raises(ValueError): result = await base_evaluate( exprs, context=context_none, values=values_none, extra_lambda_strs=extra_lambda_strs, ) result = await base_evaluate( exprs, context=context_none, values=values, extra_lambda_strs=extra_lambda_strs_none, ) assert result == 10 result = await base_evaluate( exprs, context=context_none, values=values, extra_lambda_strs=extra_lambda_strs, ) assert result == 10 result = await base_evaluate( exprs, context=context, values=values_none, extra_lambda_strs=extra_lambda_strs_none, ) assert result == 15 result = await base_evaluate( exprs, context=context, values=values_none, extra_lambda_strs=extra_lambda_strs, ) assert result == 15 result = await base_evaluate( exprs, context=context, values=values, extra_lambda_strs=extra_lambda_strs_none, ) assert result == 15 result = await base_evaluate( exprs, context=context, values=values, extra_lambda_strs=extra_lambda_strs, ) assert result == 15 @test("utility: base_evaluate - backwards compatibility") async def _(): exprs = "[[x + 5]]" values = {"x": 5, "inputs": {1: 1}, "outputs": {1: 2}} result = await base_evaluate(exprs, values=values) assert result == [[10]] # Test inputs[] and outputs[] access exprs = "inputs[1]" result = await base_evaluate(exprs, values=values) assert result == 1 exprs = "outputs[1]" result = await base_evaluate(exprs, values=values) assert result == 2 # Test template expressions exprs = "Value is {{x}}" result = await base_evaluate(exprs, values=values) assert result == "Value is 5" # Test underscore expressions exprs = "_" result = await base_evaluate(exprs, values={"_": 42}) assert result == 42 exprs = "_.field[0]" result = await base_evaluate(exprs, values={"_": {"field": [10]}}) assert result == 10 exprs = "_[0]" result = await base_evaluate(exprs, values={"_": [7]}) assert result == 7 @test("utility: backwards_compatibility") async def _(): # Test $ prefix - should return unchanged exprs = "$ x + 5" result = backwards_compatibility(exprs) assert result == "$ x + 5" # Test template expressions exprs = "{{x + 5}}" result = backwards_compatibility(exprs) assert result == "$ f'''{x + 5}'''" exprs = "Value is {{x}} and {{y}}" result = backwards_compatibility(exprs) assert result == "$ f'''Value is {x} and {y}'''" # Test bracket expressions exprs = "[x + 5]" result = backwards_compatibility(exprs) assert result == "$ [x + 5]" exprs = "[[nested]]" result = backwards_compatibility(exprs) assert result == "$ [[nested]]" # Test underscore expressions exprs = "_[0]" result = backwards_compatibility(exprs) assert result == "$ _[0]" exprs = "_.field[0]" result = backwards_compatibility(exprs) assert result == "$ _.field[0]" exprs = "_" result = backwards_compatibility(exprs) assert result == "$ _" # Test inputs/outputs access exprs = "input for input in inputs[key]" result = backwards_compatibility(exprs) assert result == "$ input for input in inputs[key]" exprs = "output for output in outputs[key]" result = backwards_compatibility(exprs) assert result == "$ output for output in outputs[key]" # Test plain string - should return unchanged exprs = "hello world" result = backwards_compatibility(exprs) assert result == "hello world" # Test spaces at the beginning and end exprs = " _[0] " result = backwards_compatibility(exprs) assert result == "$ _[0]" @test("validate_py_expression should return early for non-dollar expressions") def test_validate_non_dollar_expressions(): """Tests that expressions without $ prefix return empty issues and don't get validated.""" # Regular string without $ prefix expression = "Hello world" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # Valid Python syntax but no $ prefix expression = "1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # Invalid Python syntax but no $ prefix expression = "1 + )" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) @test("validate_py_expression should handle dollar sign variations") def test_dollar_sign_prefix_formats(): """Tests that $ prefix is correctly recognized in various formats.""" # $ with space expression = "$ 1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # $ without space expression = "$1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # Leading whitespace before $ expression = " $ 1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # Leading whitespace and $ without space expression = " $1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) @test("validate_py_expression should handle edge cases") def test_validate_edge_cases(): """Tests edge cases like empty strings, None values, etc.""" # None value result = validate_py_expression(None) assert all(len(issues) == 0 for issues in result.values()) # Empty string result = validate_py_expression("") assert all(len(issues) == 0 for issues in result.values()) # Just whitespace result = validate_py_expression(" ") assert all(len(issues) == 0 for issues in result.values()) # Just $ sign result = validate_py_expression("$") assert all(len(issues) == 0 for issues in result.values()) ================================================ FILE: src/agents-api/tests/test_chat_auto_tools.py ================================================ """ Tests for auto tool calls in chat sessions. Tests for feature flag routing, tool execution logic, and edge cases. """ from unittest.mock import AsyncMock, MagicMock, patch from uuid import uuid4 from agents_api.autogen.openapi_model import ChatInput from agents_api.autogen.Tools import ( ChosenFunctionCall, FunctionCallOption, FunctionDef, Tool, ) from agents_api.common.utils.datetime import utcnow from agents_api.common.utils.tool_runner import run_tool_call from fastapi import HTTPException from ward import test @test("ChatInput defaults to auto_run_tools=False") async def _(): """Test that ChatInput defaults to auto_run_tools=False.""" # Create a minimal chat input without auto_run_tools chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], ) # Verify default value assert chat_input.auto_run_tools is False @test("ChatInput can set auto_run_tools=True") async def _(): """Test that ChatInput can set auto_run_tools=True.""" # Create a chat input with auto_run_tools=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], auto_run_tools=True, ) # Verify the value was set assert chat_input.auto_run_tools is True @test("ChatInput can explicitly set auto_run_tools=False") async def _(): """Test that ChatInput can explicitly set auto_run_tools=False.""" # Create a chat input with auto_run_tools=False chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], auto_run_tools=False, ) # Verify the value was set assert chat_input.auto_run_tools is False @test("run_tool_call handles function tools") async def _(): """Test that function tools are handled by run_tool_call.""" # Create a function tool now = utcnow() tool = Tool( id=uuid4(), name="test_function", type="function", description="A test function tool", function=FunctionDef( parameters={"type": "object", "properties": {"input": {"type": "string"}}} ), created_at=now, updated_at=now, ) # Create a function tool call call = ChosenFunctionCall( id="call_123", type="function", function=FunctionCallOption(name="test_function", arguments='{"input": "test"}'), ) # Execute the tool call - function tools will fail due to missing setup key try: result = await run_tool_call( developer_id=uuid4(), agent_id=uuid4(), session_id=uuid4(), tool=tool, call=call, ) # If it doesn't raise an error, verify the result assert result.id == call.id assert result.name == tool.name assert result.output == {} except KeyError as e: # Expected behavior for now - function tools don't have setup field assert str(e) == "'setup'" @test("chat_auto_tools raises HTTPException when streaming with tools") async def _(): """Test that streaming is not supported when auto_run_tools is enabled with tools.""" from agents_api.routers.sessions.auto_tools.chat import chat # Mock dependencies mock_developer = MagicMock(id=uuid4(), tags=[]) mock_session = MagicMock() mock_agent = MagicMock(id=uuid4()) mock_toolset = MagicMock(tools=[MagicMock()]) # Non-empty tools mock_chat_context = MagicMock( session=mock_session, agents=[mock_agent], toolsets=[mock_toolset] ) # Create streaming chat input with auto_run_tools=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, # Streaming enabled auto_run_tools=True, # Auto run tools enabled ) with patch( "agents_api.routers.sessions.auto_tools.chat.render_chat_input", return_value=([], [], [MagicMock()], {}, [], mock_chat_context), ): try: await chat( developer=mock_developer, session_id=uuid4(), chat_input=chat_input, background_tasks=MagicMock(), ) assert False, "Should have raised HTTPException" except HTTPException as e: assert e.status_code == 400 assert "Streaming is not supported when auto_run_tools is enabled" in e.detail @test("chat_auto_tools with auto_run_tools=False passes empty tools to LLM") async def _(): """Test that when auto_run_tools=False, empty tools are passed to prevent tool calls.""" from agents_api.routers.sessions.auto_tools.chat import chat # Mock dependencies mock_developer = MagicMock(id=uuid4(), tags=[]) mock_session = MagicMock() mock_agent = MagicMock(id=uuid4()) mock_toolset = MagicMock(tools=[MagicMock()]) # Has tools but shouldn't use them mock_chat_context = MagicMock( session=mock_session, agents=[mock_agent], toolsets=[mock_toolset] ) # Create non-streaming chat input with auto_run_tools=False chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=False, save=False, auto_run_tools=False, # Disabled ) # Mock litellm.acompletion to verify it receives no tools mock_choice = MagicMock() mock_choice.message = MagicMock(content="Hi", tool_calls=None) mock_choice.message.model_dump.return_value = {"content": "Hi", "tool_calls": None} mock_choice.finish_reason = "stop" mock_response = MagicMock() mock_response.choices = [mock_choice] mock_response.usage = MagicMock(model_dump=lambda: {"total_tokens": 10}) with ( patch( "agents_api.routers.sessions.auto_tools.chat.render_chat_input", return_value=( [{"role": "user", "content": "Hello"}], [], [MagicMock()], {"model": "gpt-4"}, [], mock_chat_context, ), ), patch( "agents_api.clients.litellm.acompletion", new_callable=AsyncMock ) as mock_acompletion, ): mock_acompletion.return_value = mock_response await chat( developer=mock_developer, session_id=uuid4(), chat_input=chat_input, background_tasks=MagicMock(), ) # Verify litellm was called with tools=[] mock_acompletion.assert_called_once() call_args = mock_acompletion.call_args[1] assert call_args.get("tools") == [] @test("chat_auto_tools with auto_run_tools=True and no tools works normally") async def _(): """Test that when auto_run_tools=True but no tools exist, chat works normally.""" from agents_api.routers.sessions.auto_tools.chat import chat # Mock dependencies mock_developer = MagicMock(id=uuid4(), tags=[]) mock_session = MagicMock() mock_agent = MagicMock(id=uuid4()) mock_chat_context = MagicMock( session=mock_session, agents=[mock_agent], toolsets=[], # No tools available ) # Create chat input with auto_run_tools=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=False, save=False, auto_run_tools=True, # Enabled ) # Mock litellm response mock_choice = MagicMock() mock_choice.message = MagicMock(content="Hi", tool_calls=None) mock_choice.message.model_dump.return_value = {"content": "Hi", "tool_calls": None} mock_choice.finish_reason = "stop" mock_response = MagicMock() mock_response.choices = [mock_choice] mock_response.usage = MagicMock(model_dump=lambda: {"total_tokens": 10}) with ( patch( "agents_api.routers.sessions.auto_tools.chat.render_chat_input", return_value=( [{"role": "user", "content": "Hello"}], [], [], {"model": "gpt-4"}, [], mock_chat_context, ), ), patch( "agents_api.clients.litellm.acompletion", new_callable=AsyncMock ) as mock_acompletion, ): mock_acompletion.return_value = mock_response result = await chat( developer=mock_developer, session_id=uuid4(), chat_input=chat_input, background_tasks=MagicMock(), ) # Should complete successfully assert result.choices[0].message.content == "Hi" @test("chat router uses ChatInput.auto_run_tools for routing") async def _(): """Test that the chat router correctly uses ChatInput.auto_run_tools for routing.""" # This test validates that the chat router implementation uses # ChatInput.auto_run_tools flag along with the feature flag for routing # Test 1: With auto_run_tools=True chat_input_enabled = ChatInput( messages=[{"role": "user", "content": "Hello"}], auto_run_tools=True, ) # Verify the field exists and is set correctly assert hasattr(chat_input_enabled, "auto_run_tools") assert chat_input_enabled.auto_run_tools is True # Test 2: With auto_run_tools=False chat_input_disabled = ChatInput( messages=[{"role": "user", "content": "Hello"}], auto_run_tools=False, ) # Verify the field exists and is set correctly assert hasattr(chat_input_disabled, "auto_run_tools") assert chat_input_disabled.auto_run_tools is False # Test 3: Default value chat_input_default = ChatInput( messages=[{"role": "user", "content": "Hello"}], ) # Verify the field exists and defaults to False assert hasattr(chat_input_default, "auto_run_tools") assert chat_input_default.auto_run_tools is False # Note: These tests cover: # 1. ChatInput model defaults and configuration # 2. Function tool error handling in chat # 3. Streaming error when tools are involved # 4. Empty tools list when auto_run_tools=False # 5. Normal operation when no tools exist # 6. Chat router routing based on ChatInput.auto_run_tools ================================================ FILE: src/agents-api/tests/test_chat_metadata.py ================================================ """Test metadata functionality in chat endpoint.""" from ward import test from tests.fixtures import ( make_request, patch_embed_acompletion, pg_dsn, test_agent, test_developer_id, test_session, ) @test("chat: metadata is passed to system template rendering") async def _( make_request=make_request, agent=test_agent, session=test_session, mocks=patch_embed_acompletion, ): """Test that metadata from chat request is available in system template.""" (_embed, acompletion) = mocks # Prepare chat request with metadata chat_data = { "messages": [ { "role": "user", "content": "Hello, please help me", } ], "metadata": { "foo": True, "custom_instruction": "Be extra helpful", "user_preference": "formal tone", "priority": "high", }, } # Make the chat request response = make_request( method="POST", url=f"/sessions/{session.id}/chat", json=chat_data, ) assert response.status_code == 201 # Check that the completion was called acompletion.assert_called_once() # Get the actual call arguments call_args = acompletion.call_args messages = call_args[1]["messages"] # The system message should be the first message assert len(messages) > 0 system_message = messages[0] assert system_message["role"] == "system" # Since we're mocking, we can't test the actual template rendering, # but we can verify the metadata was included in the request assert "metadata" in chat_data assert chat_data["metadata"]["foo"] is True assert chat_data["metadata"]["custom_instruction"] == "Be extra helpful" @test("chat: metadata field accepts complex nested structures") async def _( make_request=make_request, session=test_session, mocks=patch_embed_acompletion, ): """Test that metadata can contain nested objects and arrays.""" (_embed, acompletion) = mocks # Complex metadata structure chat_data = { "messages": [ { "role": "user", "content": "Test message", } ], "metadata": { "user_profile": { "preferences": { "language": "en", "style": "formal", "topics": ["science", "technology"], }, "flags": { "premium": True, "beta_features": False, }, }, "context": { "session_type": "support", "priority": 1, "tags": ["urgent", "technical"], }, "custom_instructions": [ "Be concise", "Use examples", "Avoid jargon", ], }, } # Make the chat request response = make_request( method="POST", url=f"/sessions/{session.id}/chat", json=chat_data, ) assert response.status_code == 201 # Verify the LLM was called acompletion.assert_called_once() @test("chat: empty metadata field is handled correctly") async def _( make_request=make_request, session=test_session, mocks=patch_embed_acompletion, ): """Test that empty or null metadata doesn't cause issues.""" (_embed, acompletion) = mocks # Test with empty metadata chat_data_empty = { "messages": [ { "role": "user", "content": "Test with empty metadata", } ], "metadata": {}, } response = make_request( method="POST", url=f"/sessions/{session.id}/chat", json=chat_data_empty, ) assert response.status_code == 201 # Test with null metadata (by not including it) chat_data_null = { "messages": [ { "role": "user", "content": "Test without metadata", } ], } response = make_request( method="POST", url=f"/sessions/{session.id}/chat", json=chat_data_null, ) assert response.status_code == 201 # Both calls should succeed assert acompletion.call_count == 2 @test("render: metadata is properly rendered in system template") async def _( make_request=make_request, test_agent=test_agent, test_developer_id=test_developer_id, pg_dsn=pg_dsn, ): """Test that metadata is properly rendered in custom system templates.""" from agents_api.autogen.Sessions import CreateSessionRequest from agents_api.clients.pg import create_db_pool from agents_api.queries.sessions.create_session import create_session # Create a custom system template that uses metadata custom_system_template = """ {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if metadata.custom_instructions -%} Custom instructions: {{metadata.custom_instructions}} {%- endif -%} {%- if metadata.mood -%} Current mood: {{metadata.mood}} {%- endif -%} {%- if metadata.language -%} Respond in: {{metadata.language}} {%- endif -%} """ # Create a session with the custom system template pool = await create_db_pool(dsn=pg_dsn) session_data = CreateSessionRequest( agent=test_agent.id, system_template=custom_system_template, ) session = await create_session( developer_id=test_developer_id, data=session_data, connection_pool=pool, ) # Make a render request with metadata render_data = { "messages": [ { "role": "user", "content": "Hello, how are you?", } ], "metadata": { "custom_instructions": "You are very rude. Try to make fun of the user", "mood": "sarcastic", "language": "English with a British accent", }, "recall": False, } response = make_request( method="POST", url=f"/sessions/{session.id}/render", json=render_data, ) assert response.status_code == 200 # Parse the response result = response.json() # Check that messages were rendered assert "messages" in result messages = result["messages"] assert len(messages) >= 2 # System message + user message # Find the system message system_message = next((msg for msg in messages if msg["role"] == "system"), None) assert system_message is not None # Verify that metadata was rendered in the system message system_content = system_message["content"] assert ( "Custom instructions: You are very rude. Try to make fun of the user" in system_content ) assert "Current mood: sarcastic" in system_content assert "Respond in: English with a British accent" in system_content # Also verify the agent name is rendered assert f"You are {test_agent.name}" in system_content @test("render: metadata with conditional logic in template") async def _( make_request=make_request, test_agent=test_agent, test_developer_id=test_developer_id, pg_dsn=pg_dsn, ): """Test complex conditional logic with metadata in system templates.""" from agents_api.autogen.Sessions import CreateSessionRequest from agents_api.clients.pg import create_db_pool from agents_api.queries.sessions.create_session import create_session # Create a template with complex conditional logic complex_template = """ {%- if agent.name -%} You are {{agent.name}}. {%- endif -%} {%- if metadata.mode == "helpful" -%} Be as helpful and supportive as possible. {%- elif metadata.mode == "concise" -%} Keep your responses brief and to the point. {%- elif metadata.mode == "creative" -%} Be creative and think outside the box. {%- else -%} Respond normally. {%- endif -%} {%- if metadata.expertise -%} You are an expert in: {%- for skill in metadata.expertise -%} - {{skill}} {%- endfor -%} {%- endif -%} {%- if metadata.restrictions -%} Important restrictions: {%- for restriction in metadata.restrictions -%} * {{restriction}} {%- endfor -%} {%- endif -%} """ # Create session with complex template pool = await create_db_pool(dsn=pg_dsn) session_data = CreateSessionRequest( agent=test_agent.id, system_template=complex_template, ) session = await create_session( developer_id=test_developer_id, data=session_data, connection_pool=pool, ) # Test with different metadata configurations test_cases = [ { "metadata": { "mode": "helpful", "expertise": ["Python", "Machine Learning", "Data Science"], "restrictions": ["No code execution", "Family-friendly content only"], }, "expected_content": [ "Be as helpful and supportive as possible", "You are an expert in:", "- Python", "- Machine Learning", "- Data Science", "Important restrictions:", "* No code execution", "* Family-friendly content only", ], }, { "metadata": { "mode": "concise", }, "expected_content": [ "Keep your responses brief and to the point", ], "not_expected": [ "You are an expert in:", "Important restrictions:", ], }, ] for test_case in test_cases: render_data = { "messages": [{"role": "user", "content": "Test"}], "metadata": test_case["metadata"], "recall": False, } response = make_request( method="POST", url=f"/sessions/{session.id}/render", json=render_data, ) assert response.status_code == 200 result = response.json() # Find system message system_message = next( (msg for msg in result["messages"] if msg["role"] == "system"), None ) assert system_message is not None # Check expected content for expected in test_case["expected_content"]: assert expected in system_message["content"], ( f"Expected '{expected}' in system message but it was not found" ) # Check not expected content (if specified) if "not_expected" in test_case: for not_expected in test_case["not_expected"]: assert not_expected not in system_message["content"], ( f"Did not expect '{not_expected}' in system message but it was found" ) # TODO: Add streaming test when streaming mock is fixed # @test("chat: metadata works with streaming responses") # async def _( # make_request=make_request, # session=test_session, # mocks=patch_embed_acompletion, # ): # """Test that metadata works correctly with streaming chat responses.""" # # This test is currently disabled due to mock issues with streaming responses ================================================ FILE: src/agents-api/tests/test_chat_routes.py ================================================ # Tests for session queries from agents_api.autogen.openapi_model import ( ChatInput, CreateAgentRequest, CreateSessionRequest, VectorDocSearch, ) from agents_api.clients import litellm from agents_api.clients.pg import create_db_pool from agents_api.common.protocol.sessions import ChatContext from agents_api.queries.agents.create_agent import create_agent from agents_api.queries.chat.gather_messages import gather_messages from agents_api.queries.chat.prepare_chat_context import prepare_chat_context from agents_api.queries.sessions.create_session import create_session from ward import test from .fixtures import ( make_request, patch_embed_acompletion, pg_dsn, test_agent, test_developer, test_developer_id, test_session, test_tool, test_user, ) @test("chat: check that patching libs works") async def _( _=patch_embed_acompletion, ): assert (await litellm.acompletion(model="gpt-4o-mini", messages=[])).id == "fake_id" assert (await litellm.aembedding())[0][0] == 1.0 # pytype: disable=missing-parameter @test("chat: check that non-recall gather_messages works") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, session=test_session, tool=test_tool, user=test_user, mocks=patch_embed_acompletion, ): (embed, _) = mocks pool = await create_db_pool(dsn=dsn) chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) session_id = session.id messages = [{"role": "user", "content": "hello"}] past_messages, doc_references = await gather_messages( developer=developer, session_id=session_id, chat_context=chat_context, chat_input=ChatInput(messages=messages, recall=False), connection_pool=pool, ) assert isinstance(past_messages, list) assert len(past_messages) >= 0 assert isinstance(doc_references, list) assert len(doc_references) == 0 # Check that embed was not called embed.assert_not_called() @test("chat: check that gather_messages works") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, # session=test_session, tool=test_tool, user=test_user, mocks=patch_embed_acompletion, ): pool = await create_db_pool(dsn=dsn) session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session about", ), connection_pool=pool, ) (embed, acompletion) = mocks chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) session_id = session.id messages = [{"role": "user", "content": "hello"}] past_messages, doc_references = await gather_messages( developer=developer, session_id=session_id, chat_context=chat_context, chat_input=ChatInput(messages=messages, recall=True), connection_pool=pool, ) assert isinstance(past_messages, list) assert isinstance(doc_references, list) embed.assert_called_once() acompletion.assert_not_called() @test("chat: check that chat route calls both mocks") async def _( make_request=make_request, developer_id=test_developer_id, agent=test_agent, mocks=patch_embed_acompletion, dsn=pg_dsn, ): pool = await create_db_pool(dsn=dsn) session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session about", recall_options={ "mode": "hybrid", "num_search_messages": 10, "max_query_length": 1001, "confidence": 0.6, "limit": 5, "mmr_strength": 0.5, "trigram_similarity_threshold": 0.4, "k_multiplier": 7, }, ), connection_pool=pool, ) (embed, acompletion) = mocks response = make_request( method="POST", url=f"/sessions/{session.id}/chat", json={"messages": [{"role": "user", "content": "hello"}]}, ) response.raise_for_status() embed.assert_called_once() acompletion.assert_called_once() @test("chat: check that render route works and does not call completion mock") async def _( make_request=make_request, developer_id=test_developer_id, agent=test_agent, mocks=patch_embed_acompletion, dsn=pg_dsn, ): pool = await create_db_pool(dsn=dsn) session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session about", recall_options={ "mode": "hybrid", "num_search_messages": 10, "max_query_length": 1001, "confidence": 0.6, "limit": 5, "mmr_strength": 0.5, "trigram_similarity_threshold": 0.4, "k_multiplier": 7, }, ), connection_pool=pool, ) (embed, acompletion) = mocks response = make_request( method="POST", url=f"/sessions/{session.id}/render", json={"messages": [{"role": "user", "content": "hello"}]}, ) response.raise_for_status() data = response.json() messages = data["messages"] assert "docs" in data assert "tools" in data assert len(messages) > 0 assert messages[0]["role"] == "system" embed.assert_called_once() acompletion.assert_not_called() @test("query: prepare chat context") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, session=test_session, tool=test_tool, user=test_user, ): pool = await create_db_pool(dsn=dsn) context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) assert isinstance(context, ChatContext) assert len(context.toolsets) > 0 @test("chat: test system template merging logic") async def _( make_request=make_request, developer_id=test_developer_id, dsn=pg_dsn, mocks=patch_embed_acompletion, ): """Test that the system template merging logic works correctly. - If agent.default_system_template is set and session.system_template is not set, use the agent's default template. - If session.system_template is set (regardless of whether agent.default_system_template is set), use the session's template. """ pool = await create_db_pool(dsn=dsn) # Create an agent with a default system template agent_default_template = ( "This is the agent's default system template {{agent.name.upper()}}" ) agent_data = CreateAgentRequest( name="test agent with template", about="test agent about", model="gpt-4o-mini", default_system_template=agent_default_template, ) agent = await create_agent( developer_id=developer_id, data=agent_data, connection_pool=pool, ) # Create a session without a system template (should use agent's default) session1_data = CreateSessionRequest( agent=agent.id, situation="test session without template", ) session1 = await create_session( developer_id=developer_id, data=session1_data, connection_pool=pool, ) # Create a session with a system template (should override agent's default) session_template = "This is the session's system template: {{session.situation.upper()}}" session2_data = CreateSessionRequest( agent=agent.id, situation="test session with template", system_template=session_template, ) session2 = await create_session( developer_id=developer_id, data=session2_data, connection_pool=pool, ) # Test session without system template (should use agent's default) response1 = make_request( method="POST", url=f"/sessions/{session1.id}/render", json={"messages": [{"role": "user", "content": "hello"}]}, ) response1.raise_for_status() data1 = response1.json() messages1 = data1["messages"] # Test session with system template (should override agent's default) response2 = make_request( method="POST", url=f"/sessions/{session2.id}/render", json={"messages": [{"role": "user", "content": "hello"}]}, ) response2.raise_for_status() data2 = response2.json() messages2 = data2["messages"] # Verify messages with session's template assert len(messages2) > 0 assert messages2[0]["role"] == "system" assert ( session2_data.situation.upper() in messages2[0]["content"] # pytype: disable=attribute-error ) # Verify messages with agent's default template assert len(messages1) > 0 assert messages1[0]["role"] == "system" assert agent_data.name.upper() in messages1[0]["content"] @test("chat: validate the recall options for different modes in chat context") async def _(agent=test_agent, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session about", system_template="test system template", ), connection_pool=pool, ) chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) assert chat_context.session.recall_options == VectorDocSearch( mode="vector", num_search_messages=4, max_query_length=1000, limit=10, lang="en-US", ) # Create a session with a hybrid recall options to hybrid mode data = CreateSessionRequest( agent=agent.id, situation="test session about", system_template="test system template", recall_options={ "mode": "hybrid", "num_search_messages": 6, "max_query_length": 800, "confidence": 0.6, "limit": 10, "mmr_strength": 0.5, "lang": "en-US", "alpha": 0.75, "metadata_filter": {"hybridsearch": "hybridsearch"}, "trigram_similarity_threshold": 0.4, "k_multiplier": 7, }, ) session = await create_session( developer_id=developer_id, data=data, connection_pool=pool, ) # assert session.recall_options == data.recall_options chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) assert chat_context.session.recall_options.mode == data.recall_options.mode assert ( chat_context.session.recall_options.num_search_messages == data.recall_options.num_search_messages ) assert ( chat_context.session.recall_options.max_query_length == data.recall_options.max_query_length ) assert chat_context.session.recall_options.limit == data.recall_options.limit assert chat_context.session.recall_options.lang == data.recall_options.lang assert ( chat_context.session.recall_options.metadata_filter == data.recall_options.metadata_filter ) assert ( chat_context.session.recall_options.trigram_similarity_threshold == data.recall_options.trigram_similarity_threshold ) assert chat_context.session.recall_options.k_multiplier == data.recall_options.k_multiplier # Update session to have a new recall options to text mode data = CreateSessionRequest( agent=agent.id, situation="test session about", system_template="test system template", recall_options={ "mode": "text", "num_search_messages": 6, "max_query_length": 800, "metadata_filter": {"textsearch": "textsearch"}, "limit": 10, "lang": "en-US", "trigram_similarity_threshold": 0.4, }, ) session = await create_session( developer_id=developer_id, data=data, connection_pool=pool, ) # assert session.recall_options == data.recall_options chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) assert chat_context.session.recall_options.mode == data.recall_options.mode assert ( chat_context.session.recall_options.num_search_messages == data.recall_options.num_search_messages ) assert ( chat_context.session.recall_options.max_query_length == data.recall_options.max_query_length ) assert chat_context.session.recall_options.limit == data.recall_options.limit assert chat_context.session.recall_options.lang == data.recall_options.lang assert ( chat_context.session.recall_options.metadata_filter == data.recall_options.metadata_filter ) assert ( chat_context.session.recall_options.trigram_similarity_threshold == data.recall_options.trigram_similarity_threshold ) # Update session to have a new recall options to vector mode data = CreateSessionRequest( agent=agent.id, situation="test session about", system_template="test system template", recall_options={ "mode": "vector", "num_search_messages": 6, "max_query_length": 800, "limit": 10, "lang": "en-US", "metadata_filter": {"vectorsearch": "vectorsearch"}, "confidence": 0.6, }, ) session = await create_session( developer_id=developer_id, data=data, connection_pool=pool, ) # assert session.recall_options == data.recall_options chat_context = await prepare_chat_context( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) assert chat_context.session.recall_options.mode == data.recall_options.mode assert ( chat_context.session.recall_options.num_search_messages == data.recall_options.num_search_messages ) assert ( chat_context.session.recall_options.max_query_length == data.recall_options.max_query_length ) assert chat_context.session.recall_options.limit == data.recall_options.limit assert chat_context.session.recall_options.lang == data.recall_options.lang assert ( chat_context.session.recall_options.metadata_filter == data.recall_options.metadata_filter ) assert chat_context.session.recall_options.confidence == data.recall_options.confidence assert chat_context.session.recall_options.mmr_strength == 0.5 ================================================ FILE: src/agents-api/tests/test_chat_streaming.py ================================================ """Tests for the streaming logic in the chat function.""" import json from unittest.mock import AsyncMock, MagicMock, patch from agents_api.autogen.openapi_model import ( ChatInput, CreateSessionRequest, DocReference, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.sessions.create_session import create_session from agents_api.routers.sessions.legacy.chat import _join_deltas, chat from fastapi import BackgroundTasks from starlette.responses import StreamingResponse from uuid_extensions import uuid7 from ward import skip, test from .fixtures import ( pg_dsn, test_agent, test_developer, test_developer_id, ) async def get_usage_records(dsn: str, developer_id: str, limit: int = 100): """Helper function to get usage records for testing.""" pool = await create_db_pool(dsn=dsn) records = await pool.fetch( """ SELECT developer_id, model, prompt_tokens, completion_tokens, cost, estimated, custom_api_used, created_at, metadata FROM usage WHERE developer_id = $1 ORDER BY created_at DESC LIMIT $2;""", developer_id, limit, ) # Convert records to dictionaries return [dict(record) for record in records] async def delete_usage_records(dsn: str, developer_id: str): """Helper function to delete usage records for testing.""" pool = await create_db_pool(dsn=dsn) await pool.execute( """ DELETE FROM usage WHERE developer_id = $1 """, developer_id, ) async def collect_stream_content(response: StreamingResponse) -> list[dict]: """Helper function to collect stream chunks in a list.""" chunks = [] async for chunk in response.body_iterator: # Ensure we're dealing with string data if isinstance(chunk, bytes): chunk = chunk.decode("utf-8") # Handle SSE format: data: {JSON}\n\n if chunk.startswith("data: "): json_data = chunk[6:].strip() # Remove 'data: ' prefix and whitespace if json_data: # Only parse non-empty data chunks.append(json.loads(json_data)) else: # Fallback for raw JSON (for backward compatibility) chunk = chunk.strip() if chunk: chunks.append(json.loads(chunk)) return chunks @test("join_deltas: Test correct behavior") async def _(): """Test that join_deltas works properly to merge deltas.""" # Test initial case where content needs to be added acc = {"content": ""} delta = {"content": "Hello", "role": "assistant"} result = _join_deltas(acc, delta) assert result == {"content": "Hello", "role": "assistant"} # Test appending content acc = {"content": "Hello"} delta = {"content": " world!", "role": "assistant"} result = _join_deltas(acc, delta) assert result == {"content": "Hello world!", "role": "assistant"} # Test with no content in delta acc = {"content": "Hello world!"} delta = {"finish_reason": "stop"} result = _join_deltas(acc, delta) assert result == {"content": "Hello world!", "finish_reason": "stop"} # Test with None content acc = {"content": None} delta = {"content": "Hello", "role": "assistant"} result = _join_deltas(acc, delta) assert result == {"content": "Hello", "role": "assistant"} # Test with None content in delta acc = {"content": "Hello"} delta = {"content": None, "role": "assistant"} result = _join_deltas(acc, delta) assert result == {"content": "Hello", "role": "assistant"} @test("chat: Test streaming response format") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming responses follow the correct format.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming format", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with mock response that includes finish_reason mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Verify response type is StreamingResponse assert isinstance(response, StreamingResponse) assert response.media_type == "text/event-stream" # Collect and parse stream content parsed_chunks = await collect_stream_content(response) assert len(parsed_chunks) > 0 resulting_content = [] # Verify chunk format for chunk in parsed_chunks: assert "id" in chunk assert "created_at" in chunk assert "choices" in chunk assert isinstance(chunk["choices"], list) for choice in chunk["choices"]: resulting_content.append(choice["delta"]["content"] or "") assert "delta" in choice assert "content" in choice["delta"] assert "finish_reason" in choice assert choice["finish_reason"] in [ "stop", "length", "content_filter", "tool_calls", ] assert "".join(resulting_content) == mock_response @test("chat: Test streaming with document references") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that document references are included in streaming response.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming with documents", ), connection_pool=pool, ) # Create document references with required fields doc_refs = [ DocReference( id=str(uuid7()), title="Test Document 1", owner={"id": developer_id, "role": "user"}, snippet={"index": 0, "content": "Test snippet 1"}, ), DocReference( id=str(uuid7()), title="Test Document 2", owner={"id": developer_id, "role": "user"}, snippet={"index": 0, "content": "Test snippet 2"}, ), ] # Mock render_chat_input to return document references async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages doc_refs, # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with mock response that includes finish_reason mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content parsed_chunks = await collect_stream_content(response) # Verify document references in chunks for chunk in parsed_chunks: assert "docs" in chunk assert len(chunk["docs"]) == len(doc_refs) for doc_ref in chunk["docs"]: assert "id" in doc_ref assert "title" in doc_ref assert "owner" in doc_ref assert "snippet" in doc_ref @skip("Skipping message history saving test") @test("chat: Test streaming with message history saving") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that messages are saved to history when streaming with save=True.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming with history", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Set up mocks create_entries_mock = AsyncMock() with ( patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ), patch("agents_api.routers.sessions.legacy.chat.create_entries", create_entries_mock), ): # Create chat input with stream=True and save=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, save=True, ) # Call the chat function with mock response that includes finish_reason mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) _ = await collect_stream_content(response) # Verify create_entries was called for user messages create_entries_mock.assert_called_once() call_args = create_entries_mock.call_args[1] assert call_args["developer_id"] == developer_id assert call_args["session_id"] == session.id # Verify we're saving the user message assert len(call_args["data"]) == 1 assert call_args["data"][0].role == "user" assert call_args["data"][0].content == "Hello" @test("chat: Test streaming with usage tracking") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that token usage is tracked in streaming responses.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming usage tracking", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Mock track_usage to verify it's called track_usage_mock = AsyncMock() with ( patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ), patch("agents_api.routers.sessions.legacy.chat.track_usage", track_usage_mock), ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with mock response that includes finish_reason and usage mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content parsed_chunks = await collect_stream_content(response) # Verify usage data in the final chunk final_chunk = parsed_chunks[-1] assert "usage" in final_chunk assert "total_tokens" in final_chunk["usage"] # Verify that track_usage was called for database tracking track_usage_mock.assert_called_once() call_args = track_usage_mock.call_args[1] assert call_args["developer_id"] == developer_id assert call_args["model"] == "gpt-4o-mini" assert call_args["messages"] == [{"role": "user", "content": "Hello"}] assert call_args["custom_api_used"] is False assert "streaming" in call_args["metadata"] assert call_args["metadata"]["streaming"] is True @test("chat: Test streaming with custom API key") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming works with a custom API key.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming with custom API key", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with custom API key and mock response that includes finish_reason custom_api_key = "test-api-key" mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), x_custom_api_key=custom_api_key, mock_response=mock_response, connection_pool=pool, ) # Verify response type is StreamingResponse assert isinstance(response, StreamingResponse) assert response.media_type == "text/event-stream" # Collect and parse stream content parsed_chunks = await collect_stream_content(response) # Verify chunks are received assert len(parsed_chunks) > 0 @test("chat: Test streaming creates actual usage records in database") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming creates actual usage records in the database.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for streaming usage database tracking", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Get initial usage record count initial_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) initial_count = len(initial_records) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with mock response mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content to complete the streaming parsed_chunks = await collect_stream_content(response) # Verify usage data in the final chunk final_chunk = parsed_chunks[-1] assert "usage" in final_chunk assert "total_tokens" in final_chunk["usage"] # Get usage records after streaming final_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) final_count = len(final_records) await delete_usage_records(dsn=dsn, developer_id=str(developer_id)) # Verify a new usage record was created assert final_count == initial_count + 1 # Get the latest usage record latest_record = final_records[0] # Records are ordered by created_at DESC # Verify the usage record details assert str(latest_record["developer_id"]) == str(developer_id) # UUID comparison assert latest_record["model"] == "gpt-4o-mini" assert latest_record["prompt_tokens"] > 0 assert latest_record["completion_tokens"] > 0 assert float(latest_record["cost"]) > 0 # cost is NUMERIC type assert latest_record["custom_api_used"] is False assert "streaming" in latest_record["metadata"] assert latest_record["metadata"]["streaming"] is True assert "tags" in latest_record["metadata"] @test("chat: Test streaming with custom API key creates correct usage record") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming with custom API key sets custom_api_used correctly.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for custom API usage tracking", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Get initial usage record count initial_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) initial_count = len(initial_records) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function with custom API key custom_api_key = "test-custom-api-key" mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), x_custom_api_key=custom_api_key, mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content to complete the streaming parsed_chunks = await collect_stream_content(response) # Verify usage data in the final chunk final_chunk = parsed_chunks[-1] assert "usage" in final_chunk # Get usage records after streaming final_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) final_count = len(final_records) # Verify a new usage record was created assert final_count == initial_count + 1 # Get the latest usage record latest_record = final_records[0] # Records are ordered by created_at DESC # Verify the usage record details for custom API usage assert str(latest_record["developer_id"]) == str(developer_id) # UUID comparison assert latest_record["model"] == "gpt-4o-mini" assert latest_record["custom_api_used"] is True # This should be True for custom API assert "streaming" in latest_record["metadata"] assert latest_record["metadata"]["streaming"] is True @test("chat: Test streaming usage tracking with developer tags") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming includes developer tags in usage metadata.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for tags in usage tracking", ), connection_pool=pool, ) # Mock render_chat_input to return consistent values async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": "gpt-4o-mini"}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Mock developer with tags test_tags = ["tag1", "tag2", "test"] developer_with_tags = developer developer_with_tags.tags = test_tags # Get initial usage record count initial_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) initial_count = len(initial_records) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function mock_response = "This is a test response" response = await chat( developer=developer_with_tags, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content to complete the streaming parsed_chunks = await collect_stream_content(response) # Verify usage data in the final chunk final_chunk = parsed_chunks[-1] assert "usage" in final_chunk # Get usage records after streaming final_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) final_count = len(final_records) await delete_usage_records(dsn=dsn, developer_id=str(developer_id)) # Verify a new usage record was created assert final_count == initial_count + 1 # Get the latest usage record latest_record = final_records[0] # Records are ordered by created_at DESC # Verify the usage record includes developer tags assert str(latest_record["developer_id"]) == str(developer_id) # UUID comparison assert latest_record["model"] == "gpt-4o-mini" assert "streaming" in latest_record["metadata"] assert latest_record["metadata"]["streaming"] is True assert "tags" in latest_record["metadata"] assert latest_record["metadata"]["tags"] == test_tags @test("chat: Test streaming usage tracking with different models") async def _( developer=test_developer, dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): """Test that streaming correctly tracks usage for different models.""" pool = await create_db_pool(dsn=dsn) # Create a session session = await create_session( developer_id=developer_id, data=CreateSessionRequest( agent=agent.id, situation="test session for different model usage tracking", ), connection_pool=pool, ) test_model = "gpt-3.5-turbo" # Mock render_chat_input to return the test model async def mock_render(*args, **kwargs): return ( [{"role": "user", "content": "Hello"}], # messages [], # doc_references None, # formatted_tools {"model": test_model}, # settings [{"role": "user", "content": "Hello"}], # new_messages MagicMock(), # chat_context ) # Get initial usage record count initial_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) initial_count = len(initial_records) with patch( "agents_api.routers.sessions.legacy.chat.render_chat_input", side_effect=mock_render ): # Create chat input with stream=True chat_input = ChatInput( messages=[{"role": "user", "content": "Hello"}], stream=True, ) # Call the chat function mock_response = "This is a test response" response = await chat( developer=developer, session_id=session.id, chat_input=chat_input, background_tasks=BackgroundTasks(), mock_response=mock_response, connection_pool=pool, ) # Collect and parse stream content to complete the streaming parsed_chunks = await collect_stream_content(response) # Verify usage data in the final chunk final_chunk = parsed_chunks[-1] assert "usage" in final_chunk # Get usage records after streaming final_records = await get_usage_records( dsn=dsn, developer_id=str(developer_id), ) final_count = len(final_records) await delete_usage_records(dsn=dsn, developer_id=str(developer_id)) # Verify a new usage record was created assert final_count == initial_count + 1 # Get the latest usage record latest_record = final_records[0] # Records are ordered by created_at DESC # Verify the usage record has the correct model assert str(latest_record["developer_id"]) == str(developer_id) # UUID comparison assert latest_record["model"] == test_model assert latest_record["prompt_tokens"] > 0 assert latest_record["completion_tokens"] > 0 assert float(latest_record["cost"]) > 0 # cost is NUMERIC type assert "streaming" in latest_record["metadata"] assert latest_record["metadata"]["streaming"] is True ================================================ FILE: src/agents-api/tests/test_developer_queries.py ================================================ # Tests for agent queries from agents_api.clients.pg import create_db_pool from agents_api.common.protocol.developers import Developer from agents_api.queries.developers.create_developer import create_developer from agents_api.queries.developers.get_developer import ( get_developer, ) from agents_api.queries.developers.patch_developer import patch_developer from agents_api.queries.developers.update_developer import update_developer from uuid_extensions import uuid7 from ward import raises, test from .fixtures import pg_dsn, random_email, test_new_developer @test("query: get developer not exists") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) with raises(Exception): await get_developer( developer_id=uuid7(), connection_pool=pool, ) @test("query: get developer exists") async def _(dsn=pg_dsn, dev=test_new_developer): pool = await create_db_pool(dsn=dsn) developer = await get_developer( developer_id=dev.id, connection_pool=pool, ) assert type(developer) is Developer assert developer.id == dev.id assert developer.email == dev.email assert developer.active assert developer.tags == dev.tags assert developer.settings == dev.settings @test("query: create developer") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) dev_id = uuid7() developer = await create_developer( email="m@mail.com", active=True, tags=["tag1"], settings={"key1": "val1"}, developer_id=dev_id, connection_pool=pool, ) assert type(developer) is Developer assert developer.id == dev_id assert developer.created_at is not None @test("query: update developer") async def _(dsn=pg_dsn, dev=test_new_developer, email=random_email): pool = await create_db_pool(dsn=dsn) developer = await update_developer( email=email, tags=["tag2"], settings={"key2": "val2"}, developer_id=dev.id, connection_pool=pool, ) assert developer.id == dev.id @test("query: patch developer") async def _(dsn=pg_dsn, dev=test_new_developer, email=random_email): pool = await create_db_pool(dsn=dsn) developer = await patch_developer( email=email, active=True, tags=["tag2"], settings={"key2": "val2"}, developer_id=dev.id, connection_pool=pool, ) assert developer.id == dev.id assert developer.email == email assert developer.active assert developer.tags == [*dev.tags, "tag2"] assert developer.settings == {**dev.settings, "key2": "val2"} ================================================ FILE: src/agents-api/tests/test_docs_metadata_filtering.py ================================================ """ Tests for secure metadata filtering in docs queries """ from agents_api.autogen.Docs import BulkDeleteDocsRequest, CreateDocRequest from agents_api.clients.pg import create_db_pool from agents_api.queries.docs.bulk_delete_docs import bulk_delete_docs from agents_api.queries.docs.create_doc import create_doc from agents_api.queries.docs.list_docs import list_docs from ward import test from .fixtures import pg_dsn, test_agent, test_developer, test_user @test("query: list_docs with SQL injection attempt in metadata filter") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): """Test that list_docs safely handles metadata filters with SQL injection attempts.""" pool = await create_db_pool(dsn=dsn) # Create a test document with normal metadata doc_normal = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Test Doc Normal", content="Test content for normal doc", metadata={"test_key": "test_value"}, ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Create a test document with a special key that might be used in SQL injection doc_special = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Test Doc Special", content="Test content for special doc", metadata={"special; SELECT * FROM agents--": "special_value"}, ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Attempt normal metadata filtering docs_normal = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, metadata_filter={"test_key": "test_value"}, connection_pool=pool, ) # Verify normal filtering works assert any(d.id == doc_normal.id for d in docs_normal) assert not any(d.id == doc_special.id for d in docs_normal) # Attempt filtering with injection attempt injection_filters = [ {"key' OR 1=1--": "value"}, # SQL injection in key {"key": "1' OR '1'='1"}, # SQL injection in value {"key; DROP TABLE users--": "value"}, # Command injection in key ] for injection_filter in injection_filters: # These should safely execute without error, returning no results docs_injection = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, metadata_filter=injection_filter, connection_pool=pool, ) # Verify we don't get unexpected results assert len(docs_injection) == 0, ( f"Should not match any docs with injection filter: {injection_filter}" ) # Test exact matching for the special key metadata docs_special = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, metadata_filter={"special; SELECT * FROM agents--": "special_value"}, connection_pool=pool, ) # Verify exact matching works for special characters too assert any(d.id == doc_special.id for d in docs_special) assert not any(d.id == doc_normal.id for d in docs_special) @test("query: bulk_delete_docs with SQL injection attempt in metadata filter") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): """Test that bulk_delete_docs safely handles metadata filters with SQL injection attempts.""" pool = await create_db_pool(dsn=dsn) # Create test documents with different metadata patterns doc1 = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Doc for deletion test 1", content="Content for deletion test 1", metadata={"delete_key": "delete_value"}, ), owner_type="user", owner_id=user.id, connection_pool=pool, ) doc2 = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Doc for deletion test 2", content="Content for deletion test 2", metadata={"keep_key": "keep_value"}, ), owner_type="user", owner_id=user.id, connection_pool=pool, ) doc3 = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Doc for deletion test 3", content="Content for deletion test 3", metadata={"special' DELETE FROM docs--": "special_value"}, ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # Verify all docs exist all_docs = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) doc_ids = [d.id for d in all_docs] assert doc1.id in doc_ids assert doc2.id in doc_ids assert doc3.id in doc_ids # Delete with normal metadata filter await bulk_delete_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, data=BulkDeleteDocsRequest( metadata_filter={"delete_key": "delete_value"}, delete_all=False, ), connection_pool=pool, ) # Verify only matching doc was deleted remaining_docs = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) remaining_ids = [d.id for d in remaining_docs] assert doc1.id not in remaining_ids # Should be deleted assert doc2.id in remaining_ids # Should still exist assert doc3.id in remaining_ids # Should still exist # Attempt deletion with injection metadata injection_filters = [ {"key' OR 1=1--": "value"}, # SQL injection in key {"key": "1' OR '1'='1; DELETE FROM docs"}, # SQL injection in value ] for injection_filter in injection_filters: # These should execute without deleting unexpected docs await bulk_delete_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, data=BulkDeleteDocsRequest( metadata_filter=injection_filter, delete_all=False, ), connection_pool=pool, ) # Verify other docs still exist still_remaining_docs = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) still_remaining_ids = [d.id for d in still_remaining_docs] assert doc2.id in still_remaining_ids # Should still exist assert doc3.id in still_remaining_ids # Should still exist # Delete doc with special characters in metadata await bulk_delete_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, data=BulkDeleteDocsRequest( metadata_filter={"special' DELETE FROM docs--": "special_value"}, delete_all=False, ), connection_pool=pool, ) # Verify special doc was deleted final_docs = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) final_ids = [d.id for d in final_docs] assert doc3.id not in final_ids # Should be deleted assert doc2.id in final_ids # Should still exist ================================================ FILE: src/agents-api/tests/test_docs_queries.py ================================================ from uuid import uuid4 from agents_api.autogen.openapi_model import CreateDocRequest, Doc from agents_api.clients.pg import create_db_pool from agents_api.queries.docs.create_doc import create_doc from agents_api.queries.docs.delete_doc import delete_doc from agents_api.queries.docs.get_doc import get_doc from agents_api.queries.docs.list_docs import list_docs from agents_api.queries.docs.search_docs_by_embedding import search_docs_by_embedding from agents_api.queries.docs.search_docs_by_text import search_docs_by_text from agents_api.queries.docs.search_docs_hybrid import search_docs_hybrid from fastapi import HTTPException from ward import raises, test from .fixtures import ( pg_dsn, test_agent, test_developer, test_doc, test_doc_with_embedding, test_user, ) EMBEDDING_SIZE: int = 1024 @test("query: create user doc") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) doc_created = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User Doc", content=["Docs for user testing", "Docs for user testing 2"], metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) assert isinstance(doc_created, Doc) assert doc_created.id is not None # Verify doc appears in user's docs found = await get_doc( developer_id=developer.id, doc_id=doc_created.id, connection_pool=pool, ) assert found.id == doc_created.id @test("query: create user doc, user not found") async def _(dsn=pg_dsn, developer=test_developer): pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as e: await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User Doc", content=["Docs for user testing", "Docs for user testing 2"], metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=uuid4(), connection_pool=pool, ) assert e.raised.status_code == 409 assert e.raised.detail == "Reference to user not found during create" @test("query: create agent doc") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) doc = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent Doc", content="Docs for agent testing", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert isinstance(doc, Doc) assert doc.id is not None # Verify doc appears in agent's docs docs_list = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert any(d.id == doc.id for d in docs_list) @test("query: create agent doc, agent not found") async def _(dsn=pg_dsn, developer=test_developer): agent_id = uuid4() pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as e: await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent Doc", content="Docs for agent testing", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent_id, connection_pool=pool, ) assert e.raised.status_code == 409 assert e.raised.detail == "Reference to agent not found during create" @test("query: get doc") async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc): pool = await create_db_pool(dsn=dsn) doc_test = await get_doc( developer_id=developer.id, doc_id=doc.id, connection_pool=pool, ) assert isinstance(doc_test, Doc) assert doc_test.id == doc.id assert doc_test.title is not None assert doc_test.content is not None @test("query: get doc with embeddings") async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc_with_embedding): pool = await create_db_pool(dsn=dsn) # Get doc with embeddings (default behavior) doc_with_emb = await get_doc( developer_id=developer.id, doc_id=doc.id, include_embeddings=True, connection_pool=pool, ) assert isinstance(doc_with_emb, Doc) assert doc_with_emb.id == doc.id assert doc_with_emb.embeddings is not None assert len(doc_with_emb.embeddings) > 0 @test("query: get doc without embeddings") async def _(dsn=pg_dsn, developer=test_developer, doc=test_doc_with_embedding): pool = await create_db_pool(dsn=dsn) # Get doc without embeddings doc_without_emb = await get_doc( developer_id=developer.id, doc_id=doc.id, include_embeddings=False, connection_pool=pool, ) assert isinstance(doc_without_emb, Doc) assert doc_without_emb.id == doc.id assert doc_without_emb.title is not None assert doc_without_emb.content is not None # Embeddings should be None when not included assert doc_without_emb.embeddings is None @test("query: list user docs") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) # Create a doc owned by the user doc_user = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test", content="Some user doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # List user's docs docs_list = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) assert len(docs_list) >= 1 assert any(d.id == doc_user.id for d in docs_list) assert any(d.id == doc_user.id for d in docs_list) # Create a doc with a different metadata doc_user_different_metadata = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test 2", content="Some user doc content 2", metadata={"test": "test2"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) docs_list_metadata = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, metadata_filter={"test": "test2"}, ) assert len(docs_list_metadata) >= 1 assert any(d.id == doc_user_different_metadata.id for d in docs_list_metadata) assert any(d.metadata == {"test": "test2"} for d in docs_list_metadata) @test("query: list user docs, invalid limit") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test", content="Some user doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) with raises(HTTPException) as exc: await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, limit=101, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list user docs, invalid offset") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test", content="Some user doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) with raises(HTTPException) as exc: await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, offset=-1, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be >= 0" @test("query: list user docs, invalid sort by") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test", content="Some user doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) with raises(HTTPException) as exc: await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, sort_by="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list user docs, invalid sort direction") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User List Test", content="Some user doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) with raises(HTTPException) as exc: await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, direction="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: list agent docs") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create a doc owned by the agent doc_agent = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent List Test", content="Some agent doc content", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # List agent's docs docs_list = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert len(docs_list) >= 1 assert any(d.id == doc_agent.id for d in docs_list) @test("query: list docs without embeddings") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create a doc owned by the agent doc_agent = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent List Test No Embeddings", content="Some agent doc content for testing without embeddings", metadata={"test": "test_no_embeddings"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # List agent's docs without embeddings docs_list = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, include_embeddings=False, connection_pool=pool, ) assert len(docs_list) >= 1 # Find the doc we just created created_doc = next((d for d in docs_list if d.id == doc_agent.id), None) assert created_doc is not None assert created_doc.embeddings is None # Embeddings should be None when excluded # Create a doc with a different metadata doc_agent_different_metadata = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent List Test 2", content="Some agent doc content 2", metadata={"test": "test2"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # List agent's docs docs_list_metadata = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, metadata_filter={"test": "test2"}, ) assert len(docs_list_metadata) >= 1 assert any(d.id == doc_agent_different_metadata.id for d in docs_list_metadata) assert any(d.metadata == {"test": "test2"} for d in docs_list_metadata) @test("query: list agent docs, invalid limit") async def _(dsn=pg_dsn): """Test that listing agent docs with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_docs( developer_id=uuid4(), owner_type="agent", owner_id=uuid4(), connection_pool=pool, limit=101, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list agent docs, invalid offset") async def _(dsn=pg_dsn): """Test that listing agent docs with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_docs( developer_id=uuid4(), owner_type="agent", owner_id=uuid4(), connection_pool=pool, offset=-1, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be >= 0" @test("query: list agent docs, invalid sort by") async def _(dsn=pg_dsn): """Test that listing agent docs with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_docs( developer_id=uuid4(), owner_type="agent", owner_id=uuid4(), connection_pool=pool, sort_by="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list agent docs, invalid sort direction") async def _(dsn=pg_dsn): """Test that listing agent docs with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_docs( developer_id=uuid4(), owner_type="agent", owner_id=uuid4(), connection_pool=pool, direction="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: delete user doc") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) # Create a doc owned by the user doc_user = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="User Delete Test", content="Doc for user deletion test", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # Delete the doc await delete_doc( developer_id=developer.id, doc_id=doc_user.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) # Verify doc is no longer in user's docs docs_list = await list_docs( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) assert not any(d.id == doc_user.id for d in docs_list) @test("query: delete agent doc") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create a doc owned by the agent doc_agent = await create_doc( developer_id=developer.id, data=CreateDocRequest( title="Agent Delete Test", content="Doc for agent deletion test", metadata={"test": "test"}, embed_instruction="Embed the document", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Delete the doc await delete_doc( developer_id=developer.id, doc_id=doc_agent.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Verify doc is no longer in agent's docs docs_list = await list_docs( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert not any(d.id == doc_agent.id for d in docs_list) @test("query: search docs by text") async def _(dsn=pg_dsn, agent=test_agent, developer=test_developer): pool = await create_db_pool(dsn=dsn) # Create a test document doc = await create_doc( developer_id=developer.id, owner_type="agent", owner_id=agent.id, data=CreateDocRequest( title="Hello", content="The world is a funny little thing", metadata={"test": "test"}, embed_instruction="Embed the document", ), connection_pool=pool, ) # Search using simpler terms first result = await search_docs_by_text( developer_id=developer.id, owners=[("agent", agent.id)], query="world", k=3, search_language="english", metadata_filter={"test": "test"}, connection_pool=pool, ) print("\nSearch results:", result) # More specific assertions assert len(result) >= 1, "Should find at least one document" assert any(d.id == doc.id for d in result), f"Should find document {doc.id}" assert result[0].metadata == {"test": "test"}, "Metadata should match" @test("query: search docs by text with technical terms and phrases") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create documents with technical content doc1 = await create_doc( developer_id=developer.id, owner_type="agent", owner_id=agent.id, data=CreateDocRequest( title="Technical Document", content="API endpoints using REST architecture with JSON payloads", metadata={"domain": "technical"}, embed_instruction="Embed the document", ), connection_pool=pool, ) doc2 = await create_doc( developer_id=developer.id, owner_type="agent", owner_id=agent.id, data=CreateDocRequest( title="More Technical Terms", content="Database optimization using indexing and query planning", metadata={"domain": "technical"}, embed_instruction="Embed the document", ), connection_pool=pool, ) # Test with technical terms technical_queries = [ "API endpoints", "REST architecture", "database optimization", "indexing", ] for query in technical_queries: results = await search_docs_by_text( developer_id=developer.id, owners=[("agent", agent.id)], query=query, k=3, search_language="english", trigram_similarity_threshold=0.4, connection_pool=pool, ) print(f"\nSearch results for '{query}':", results) # Verify appropriate document is found based on query if "API" in query or "REST" in query: assert any(doc.id == doc1.id for doc in results), ( f"Doc1 should be found with query '{query}'" ) if "database" in query.lower() or "indexing" in query: assert any(doc.id == doc2.id for doc in results), ( f"Doc2 should be found with query '{query}'" ) @test("query: search docs by embedding") async def _( dsn=pg_dsn, agent=test_agent, developer=test_developer, doc=test_doc_with_embedding, ): pool = await create_db_pool(dsn=dsn) assert doc.embeddings is not None # Get query embedding by averaging the embeddings (list of floats) query_embedding = [sum(k) / len(k) for k in zip(*doc.embeddings)] # Search using the correct parameter types result = await search_docs_by_embedding( developer_id=developer.id, owners=[("agent", agent.id)], embedding=query_embedding, k=3, # Add k parameter metadata_filter={"test": "test"}, # Add metadata filter connection_pool=pool, ) assert len(result) >= 1 assert result[0].metadata is not None @test("query: search docs by hybrid") async def _( dsn=pg_dsn, agent=test_agent, developer=test_developer, doc=test_doc_with_embedding, ): pool = await create_db_pool(dsn=dsn) # Get query embedding by averaging the embeddings (list of floats) query_embedding = [sum(k) / len(k) for k in zip(*doc.embeddings)] # Search using the correct parameter types result = await search_docs_hybrid( developer_id=developer.id, owners=[("agent", agent.id)], text_query=doc.content[0] if isinstance(doc.content, list) else doc.content, embedding=query_embedding, k=3, # Add k parameter metadata_filter={"test": "test"}, # Add metadata filter trigram_similarity_threshold=0.4, k_multiplier=7, connection_pool=pool, ) assert len(result) >= 1 assert result[0].metadata is not None # @test("query: search docs by embedding with different confidence levels") # async def _( # dsn=pg_dsn, agent=test_agent, developer=test_developer, doc=test_doc_with_embedding # ): # pool = await create_db_pool(dsn=dsn) # # Get query embedding (using original doc's embedding) # query_embedding = make_vector_with_similarity(EMBEDDING_SIZE, 0.7) # # Test with different confidence levels # confidence_tests = [ # (0.99, 0), # Very high similarity threshold - should find no results # (0.7, 1), # High similarity - should find 1 result (the embedding with all 1.0s) # (0.3, 2), # Medium similarity - should find 2 results (including 0.3-0.7 embedding) # (-0.8, 3), # Low similarity - should find 3 results (including -0.8 to 0.8 embedding) # (-1.0, 4), # Lowest similarity - should find all 4 results (including alternating -1/1) # ] # for confidence, expected_min_results in confidence_tests: # results = await search_docs_by_embedding( # developer_id=developer.id, # owners=[("agent", agent.id)], # embedding=query_embedding, # k=3, # confidence=confidence, # metadata_filter={"test": "test"}, # connection_pool=pool, # ) # print(f"\nSearch results with confidence {confidence}:") # for r in results: # print(f"- Doc ID: {r.id}, Distance: {r.distance}") # assert len(results) >= expected_min_results, ( # f"Expected at least {expected_min_results} results with confidence {confidence}, got {len(results)}" # ) # if results: # # Verify that all returned results meet the confidence threshold # for result in results: # assert result.distance >= confidence, ( # f"Result distance {result.distance} is below confidence threshold {confidence}" # ) ================================================ FILE: src/agents-api/tests/test_docs_routes.py ================================================ from ward import test from .fixtures import ( make_request, patch_embed_acompletion, test_agent, test_doc, test_doc_with_embedding, test_user, test_user_doc, ) from .utils import patch_testing_temporal @test("route: create user doc") async def _(make_request=make_request, user=test_user): async with patch_testing_temporal(): data = { "title": "Test User Doc", "content": ["This is a test user document."], } response = make_request( method="POST", url=f"/users/{user.id}/docs", json=data, ) assert response.status_code == 201 @test("route: create agent doc") async def _(make_request=make_request, agent=test_agent): async with patch_testing_temporal(): data = { "title": "Test Agent Doc", "content": ["This is a test agent document."], } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 @test("route: create agent doc with duplicate title should fail") async def _(make_request=make_request, agent=test_agent, user=test_user): async with patch_testing_temporal(): data = { "title": "Test Duplicate Doc", "content": ["This is a test duplicate document."], } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 # This should fail response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 409 # This should pass response = make_request( method="POST", url=f"/users/{user.id}/docs", json=data, ) assert response.status_code == 201 @test("route: delete doc") async def _(make_request=make_request, agent=test_agent): async with patch_testing_temporal(): data = { "title": "Test Agent Doc", "content": "This is a test agent document.", } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) doc_id = response.json()["id"] response = make_request( method="GET", url=f"/docs/{doc_id}", ) assert response.status_code == 200 assert response.json()["id"] == doc_id assert response.json()["title"] == "Test Agent Doc" assert response.json()["content"] == ["This is a test agent document."] response = make_request( method="DELETE", url=f"/agents/{agent.id}/docs/{doc_id}", ) assert response.status_code == 202 response = make_request( method="GET", url=f"/docs/{doc_id}", ) assert response.status_code == 404 @test("route: get doc") async def _(make_request=make_request, agent=test_agent): async with patch_testing_temporal(): data = { "title": "Test Agent Doc", "content": ["This is a test agent document."], } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) doc_id = response.json()["id"] response = make_request( method="GET", url=f"/docs/{doc_id}", ) assert response.status_code == 200 @test("route: list user docs") def _(make_request=make_request, user=test_user): response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 response = response.json() docs = response["items"] assert isinstance(docs, list) @test("route: list agent docs") def _(make_request=make_request, agent=test_agent): response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 response = response.json() docs = response["items"] assert isinstance(docs, list) @test("route: list user docs with metadata filter") def _(make_request=make_request, user=test_user): response = make_request( method="GET", url=f"/users/{user.id}/docs", params={ "metadata_filter": {"test": "test"}, }, ) assert response.status_code == 200 response = response.json() docs = response["items"] assert isinstance(docs, list) @test("route: list agent docs with metadata filter") def _(make_request=make_request, agent=test_agent): response = make_request( method="GET", url=f"/agents/{agent.id}/docs", params={ "metadata_filter": {"test": "test"}, }, ) assert response.status_code == 200 response = response.json() docs = response["items"] assert isinstance(docs, list) @test("route: search agent docs") async def _(make_request=make_request, agent=test_agent, doc=test_doc): search_params = { "text": doc.content[0], "limit": 1, } response = make_request( method="POST", url=f"/agents/{agent.id}/search", json=search_params, ) assert response.status_code == 200 response = response.json() docs = response["docs"] assert isinstance(docs, list) assert len(docs) >= 1 @test("route: search user docs") async def _(make_request=make_request, user=test_user, doc=test_user_doc): search_params = { "text": doc.content[0], "limit": 1, } response = make_request( method="POST", url=f"/users/{user.id}/search", json=search_params, ) assert response.status_code == 200 response = response.json() docs = response["docs"] assert isinstance(docs, list) assert len(docs) >= 1 @test("route: search agent docs hybrid with mmr") async def _(make_request=make_request, agent=test_agent, doc=test_doc_with_embedding): EMBEDDING_SIZE = 1024 search_params = { "text": doc.content[0], "vector": [1.0] * EMBEDDING_SIZE, "mmr_strength": 0.5, "limit": 1, } response = make_request( method="POST", url=f"/agents/{agent.id}/search", json=search_params, ) assert response.status_code == 200 response = response.json() docs = response["docs"] assert isinstance(docs, list) assert len(docs) >= 1 @test("routes: embed route") async def _( make_request=make_request, mocks=patch_embed_acompletion, ): (embed, _) = mocks response = make_request( method="POST", url="/embed", json={"text": "blah blah"}, ) result = response.json() assert "vectors" in result embed.assert_called() @test("route: bulk delete agent docs") async def _(make_request=make_request, agent=test_agent): for i in range(3): data = { "title": f"Bulk Test Doc {i}", "content": ["This is a test document for bulk deletion."], "metadata": {"bulk_test": "true", "index": str(i)}, } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 # Create a doc with different metadata data = { "title": "Non Bulk Test Doc", "content": ["This document should not be deleted."], "metadata": {"bulk_test": "false"}, } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 # Verify all docs exist response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] assert len(docs_before) >= 4 # Bulk delete docs with specific metadata response = make_request( method="DELETE", url=f"/agents/{agent.id}/docs", json={"metadata_filter": {"bulk_test": "true"}}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) assert len(deleted_response["items"]) == 3 # Verify that only the target docs were deleted response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == len(docs_before) - 3 @test("route: bulk delete user docs - metadata filter") async def _(make_request=make_request, user=test_user): for i in range(2): data = { "title": f"User Bulk Test Doc {i}", "content": ["This is a user test document for bulk deletion."], "metadata": {"user_bulk_test": "true", "index": str(i)}, } response = make_request( method="POST", url=f"/users/{user.id}/docs", json=data, ) assert response.status_code == 201 # Verify docs exist response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] # Bulk delete docs with specific metadata response = make_request( method="DELETE", url=f"/users/{user.id}/docs", json={"metadata_filter": {"user_bulk_test": "true"}}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) assert len(deleted_response["items"]) == 2 # Verify that only the target docs were deleted response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == len(docs_before) - 2 @test("route: bulk delete agent docs - delete_all=true") async def _(make_request=make_request, agent=test_agent): # Create several test docs for i in range(3): data = { "title": f"Delete All Test Doc {i}", "content": ["This is a test document for delete_all."], "metadata": {"test_type": "delete_all_test", "index": str(i)}, } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 # Verify docs exist response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] initial_count = len(docs_before) assert initial_count >= 3 # Bulk delete all docs with delete_all flag response = make_request( method="DELETE", url=f"/agents/{agent.id}/docs", json={"delete_all": True}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) # Verify all docs were deleted response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == 0 @test("route: bulk delete agent docs - delete_all=false") async def _(make_request=make_request, agent=test_agent): # Create test docs for i in range(2): data = { "title": f"Safety Test Doc {i}", "content": ["This document should not be deleted by empty filter."], "metadata": {"test_type": "safety_test"}, } response = make_request( method="POST", url=f"/agents/{agent.id}/docs", json=data, ) assert response.status_code == 201 # Get initial doc count response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] initial_count = len(docs_before) assert initial_count >= 2 # Try to delete with empty metadata filter and delete_all=false response = make_request( method="DELETE", url=f"/agents/{agent.id}/docs", json={"metadata_filter": {}, "delete_all": False}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) # Should have deleted 0 items assert len(deleted_response["items"]) == 0 # Verify no docs were deleted response = make_request( method="GET", url=f"/agents/{agent.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == initial_count @test("route: bulk delete user docs - delete_all=true") async def _(make_request=make_request, user=test_user): # Create test docs for i in range(2): data = { "title": f"User Delete All Test {i}", "content": ["This is a user test document for delete_all."], "metadata": {"test_type": "user_delete_all_test"}, } response = make_request( method="POST", url=f"/users/{user.id}/docs", json=data, ) assert response.status_code == 201 # Verify docs exist response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] initial_count = len(docs_before) assert initial_count >= 2 # Bulk delete all docs with delete_all flag response = make_request( method="DELETE", url=f"/users/{user.id}/docs", json={"delete_all": True}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) # Verify all docs were deleted response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == 0 @test("route: bulk delete user docs - delete_all=false") async def _(make_request=make_request, user=test_user): # Create test docs for i in range(2): data = { "title": f"User Safety Test Doc {i}", "content": ["This user document should not be deleted by empty filter."], "metadata": {"test_type": "user_safety_test"}, } response = make_request( method="POST", url=f"/users/{user.id}/docs", json=data, ) assert response.status_code == 201 # Get initial doc count response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_before = response.json()["items"] initial_count = len(docs_before) assert initial_count >= 2 # Try to delete with empty metadata filter and delete_all=false response = make_request( method="DELETE", url=f"/users/{user.id}/docs", json={"metadata_filter": {}, "delete_all": False}, ) assert response.status_code == 202 deleted_response = response.json() assert isinstance(deleted_response["items"], list) # Should have deleted 0 items assert len(deleted_response["items"]) == 0 # Verify no docs were deleted response = make_request( method="GET", url=f"/users/{user.id}/docs", ) assert response.status_code == 200 docs_after = response.json()["items"] assert len(docs_after) == initial_count ================================================ FILE: src/agents-api/tests/test_entry_queries.py ================================================ """ This module contains tests for entry queries against the CozoDB database. It verifies the functionality of adding, retrieving, and processing entries as defined in the schema. """ from agents_api.autogen.openapi_model import ( CreateEntryRequest, Entry, History, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.entries import ( create_entries, delete_entries, get_history, list_entries, ) from fastapi import HTTPException from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import pg_dsn, test_developer, test_developer_id, test_session MODEL = "gpt-4o-mini" @test("query: create entry no session") async def _(dsn=pg_dsn, developer=test_developer): """Test the addition of a new entry to the database.""" pool = await create_db_pool(dsn=dsn) test_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", source="internal", content="test entry content", ) with raises(HTTPException) as exc_info: await create_entries( developer_id=developer.id, session_id=uuid7(), data=[test_entry], connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 404 @test("query: list entries sql - no session") async def _(dsn=pg_dsn, developer=test_developer): """Test the retrieval of entries from the database.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc_info: await list_entries( developer_id=developer.id, session_id=uuid7(), connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 404 @test("query: list entries sql, invalid limit") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing entries with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc_info: await list_entries( developer_id=developer_id, session_id=uuid7(), limit=1001, connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 400 assert exc_info.raised.detail == "Limit must be between 1 and 1000" with raises(HTTPException) as exc_info: await list_entries( developer_id=developer_id, session_id=uuid7(), limit=0, connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 400 assert exc_info.raised.detail == "Limit must be between 1 and 1000" @test("query: list entries sql, invalid offset") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing entries with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc_info: await list_entries( developer_id=developer_id, session_id=uuid7(), offset=-1, connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 400 assert exc_info.raised.detail == "Offset must be >= 0" @test("query: list entries sql, invalid sort by") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing entries with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc_info: await list_entries( developer_id=developer_id, session_id=uuid7(), sort_by="invalid", connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 400 assert exc_info.raised.detail == "Invalid sort field" @test("query: list entries sql, invalid sort direction") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing entries with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc_info: await list_entries( developer_id=developer_id, session_id=uuid7(), direction="invalid", connection_pool=pool, ) # type: ignore[not-callable] assert exc_info.raised.status_code == 400 assert exc_info.raised.detail == "Invalid sort direction" @test("query: list entries sql - session exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test the retrieval of entries from the database.""" pool = await create_db_pool(dsn=dsn) test_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", source="api_request", content="test entry content", ) internal_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", content="test entry content", source="internal", ) await create_entries( developer_id=developer_id, session_id=session.id, data=[test_entry, internal_entry], connection_pool=pool, ) # type: ignore[not-callable] result = await list_entries( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] # Assert that only one entry is retrieved, matching the session_id. assert len(result) == 1 assert isinstance(result[0], Entry) assert result is not None @test("query: get history sql - session exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test the retrieval of entry history from the database.""" pool = await create_db_pool(dsn=dsn) test_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", source="api_request", content="test entry content", ) internal_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", content="test entry content", source="internal", ) await create_entries( developer_id=developer_id, session_id=session.id, data=[test_entry, internal_entry], connection_pool=pool, ) # type: ignore[not-callable] result = await get_history( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] # Assert that entries are retrieved and have valid IDs. assert result is not None assert isinstance(result, History) assert len(result.entries) > 0 assert result.entries[0].id @test("query: delete entries sql - session exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test the deletion of entries from the database.""" pool = await create_db_pool(dsn=dsn) test_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", source="api_request", content="test entry content", ) internal_entry = CreateEntryRequest.from_model_input( model=MODEL, role="user", content="internal entry content", source="internal", ) created_entries = await create_entries( developer_id=developer_id, session_id=session.id, data=[test_entry, internal_entry], connection_pool=pool, ) # type: ignore[not-callable] entry_ids = [entry.id for entry in created_entries] await delete_entries( developer_id=developer_id, session_id=session.id, entry_ids=entry_ids, connection_pool=pool, ) # type: ignore[not-callable] result = await list_entries( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] # Assert that no entries are retrieved after deletion. assert all(id not in [entry.id for entry in result] for id in entry_ids) assert len(result) == 0 assert result is not None ================================================ FILE: src/agents-api/tests/test_execution_queries.py ================================================ # # Tests for execution queries from agents_api.autogen.openapi_model import ( CreateExecutionRequest, CreateTransitionRequest, Execution, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.executions.count_executions import count_executions from agents_api.queries.executions.create_execution import create_execution from agents_api.queries.executions.create_execution_transition import ( create_execution_transition, ) from agents_api.queries.executions.create_temporal_lookup import create_temporal_lookup from agents_api.queries.executions.get_execution import get_execution from agents_api.queries.executions.list_executions import list_executions from agents_api.queries.executions.lookup_temporal_data import lookup_temporal_data from fastapi import HTTPException from temporalio.client import WorkflowHandle from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import ( pg_dsn, test_developer_id, test_execution, test_execution_started, test_task, ) MODEL = "gpt-4o-mini" @test("query: create execution") async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task): pool = await create_db_pool(dsn=dsn) workflow_handle = WorkflowHandle( client=None, id="blah", ) execution = await create_execution( developer_id=developer_id, task_id=task.id, data=CreateExecutionRequest(input={"test": "test"}), connection_pool=pool, ) await create_temporal_lookup( execution_id=execution.id, workflow_handle=workflow_handle, connection_pool=pool, ) assert execution.status == "queued" assert execution.input == {"test": "test"} @test("query: get execution") async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution): pool = await create_db_pool(dsn=dsn) result = await get_execution( execution_id=execution.id, connection_pool=pool, ) assert result is not None assert isinstance(result, Execution) assert result.status == "queued" @test("query: lookup temporal id") async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution): pool = await create_db_pool(dsn=dsn) result = await lookup_temporal_data( execution_id=execution.id, developer_id=developer_id, connection_pool=pool, ) assert result is not None assert result["id"] @test("query: list executions") async def _( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, task=test_task, ): pool = await create_db_pool(dsn=dsn) result = await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert isinstance(result, list) assert len(result) >= 1 assert result[0].status == "starting" @test("query: list executions, invalid limit") async def _( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): """Test that listing executions with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, limit=101, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" with raises(HTTPException) as exc: await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, limit=0, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list executions, invalid offset") async def _( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): """Test that listing executions with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, offset=-1, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be >= 0" @test("query: list executions, invalid sort by") async def _( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): """Test that listing executions with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, sort_by="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list executions, invalid sort direction") async def _( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): """Test that listing executions with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, direction="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: count executions") async def _( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, task=test_task, ): pool = await create_db_pool(dsn=dsn) result = await count_executions( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert isinstance(result, dict) assert result["count"] > 0 @test("query: create execution transition") async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() result = await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="init_branch", output={"result": "test"}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "main", "step": 0, "scope_id": scope_id}, ), connection_pool=pool, ) assert result is not None assert result.type == "init_branch" assert result.output == {"result": "test"} @test("query: create execution transition - validate transition targets") async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="init_branch", output={"result": "test"}, current={"workflow": "subworkflow", "step": 0, "scope_id": scope_id}, next={"workflow": "subworkflow", "step": 0, "scope_id": scope_id}, ), connection_pool=pool, ) await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="step", output={"result": "test"}, current={"workflow": "subworkflow", "step": 0, "scope_id": scope_id}, next={"workflow": "subworkflow", "step": 1, "scope_id": scope_id}, ), connection_pool=pool, ) result = await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="step", output={"result": "test"}, current={"workflow": "subworkflow", "step": 1, "scope_id": scope_id}, next={"workflow": "subworkflow", "step": 0, "scope_id": uuid7()}, ), connection_pool=pool, ) assert result is not None assert result.type == "step" assert result.output == {"result": "test"} @test("query: create execution transition with execution update") async def _( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, ): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() result = await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="cancelled", output={"result": "test"}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next=None, ), # task_id=task.id, # update_execution_status=True, connection_pool=pool, ) assert result is not None assert result.type == "cancelled" assert result.output == {"result": "test"} @test("query: get execution with transitions count") async def _(dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started): pool = await create_db_pool(dsn=dsn) result = await get_execution( execution_id=execution.id, connection_pool=pool, ) assert result is not None assert isinstance(result, Execution) assert result.status == "starting" # Since we create one init transition in the test_execution_started fixture assert result.transition_count == 1 @test("query: list executions with latest_executions view") async def _( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, task=test_task, ): pool = await create_db_pool(dsn=dsn) result = await list_executions( developer_id=developer_id, task_id=task.id, sort_by="updated_at", direction="asc", connection_pool=pool, ) assert isinstance(result, list) assert len(result) >= 1 assert result[0].status == "starting" # Since we create one init transition in the test_execution_started fixture assert hasattr(result[0], "transition_count") @test("query: execution with finish transition") async def _( dsn=pg_dsn, developer_id=test_developer_id, execution=test_execution_started, ): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() # Create a finish transition - this would have failed with the old query # because there's no step definition for finish transitions await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="finish", output={"result": "completed successfully"}, current={"workflow": "main", "step": 1, "scope_id": scope_id}, next=None, ), connection_pool=pool, ) # Get the execution and verify it has the correct status result = await get_execution( execution_id=execution.id, connection_pool=pool, ) assert result is not None assert result.status == "succeeded" assert result.transition_count == 2 # init + finish @test("query: execution with error transition") async def _( dsn=pg_dsn, developer_id=test_developer_id, task=test_task, ): pool = await create_db_pool(dsn=dsn) workflow_handle = WorkflowHandle( client=None, id="error_test", ) # Create a new execution execution = await create_execution( developer_id=developer_id, task_id=task.id, data=CreateExecutionRequest(input={"test": "error_test"}), connection_pool=pool, ) await create_temporal_lookup( execution_id=execution.id, workflow_handle=workflow_handle, connection_pool=pool, ) scope_id = uuid7() # Add an init transition await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="init", output={}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "main", "step": 0, "scope_id": scope_id}, ), connection_pool=pool, ) # Add an error transition - this would have failed with the old query # because there's no step definition for error transitions await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="error", output={"error": "Something went wrong"}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next=None, ), connection_pool=pool, ) # Get the execution and verify it has the correct status result = await get_execution( execution_id=execution.id, connection_pool=pool, ) assert result is not None assert result.status == "failed" assert result.error == "Something went wrong" assert result.transition_count == 2 # init + error ================================================ FILE: src/agents-api/tests/test_execution_workflow.py ================================================ # Tests for task queries import asyncio import json from unittest.mock import patch import yaml from agents_api.autogen.openapi_model import ( CreateExecutionRequest, CreateTaskRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.tasks.create_task import create_task from agents_api.routers.tasks.create_task_execution import start_execution from google.protobuf.json_format import MessageToDict from litellm import Choices, ModelResponse from ward import raises, skip, test from .fixtures import ( pg_dsn, s3_client, test_agent, test_developer_id, ) from .utils import patch_integration_service, patch_testing_temporal @skip("needs to be fixed") @test("workflow: evaluate step single") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hello": '"world"'}}], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == "world" @skip("needs to be fixed") @test("workflow: evaluate step multiple") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ {"evaluate": {"hello": '"nope"'}}, {"evaluate": {"hello": '"world"'}}, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == "world" @skip("needs to be fixed") @test("workflow: variable access in expressions") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("needs to be fixed") @test("workflow: yield step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, other_workflow=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, ], main=[ # Testing that we can access the input { "workflow": "other_workflow", "arguments": {"test": '_["test"]'}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("needs to be fixed") @test("workflow: sleep step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, other_workflow=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, {"sleep": {"days": 5}}, ], main=[ # Testing that we can access the input { "workflow": "other_workflow", "arguments": {"test": '_["test"]'}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("needs to be fixed") @test("workflow: return step direct") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, {"return": {"value": '_["hello"]'}}, {"return": {"value": '"banana"'}}, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["value"] == data.input["test"] @skip("needs to be fixed") @test("workflow: return step nested") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, other_workflow=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, {"return": {"value": '_["hello"]'}}, {"return": {"value": '"banana"'}}, ], main=[ # Testing that we can access the input { "workflow": "other_workflow", "arguments": {"test": '_["test"]'}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["value"] == data.input["test"] @skip("needs to be fixed") @test("workflow: log step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, other_workflow=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, {"log": "{{_.hello}}"}, ], main=[ # Testing that we can access the input { "workflow": "other_workflow", "arguments": {"test": '_["test"]'}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("needs to be fixed") @test("workflow: log step expression fail") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, other_workflow=[ # Testing that we can access the input {"evaluate": {"hello": '_["test"]'}}, {"log": '{{_["hell"].strip()}}'}, # <--- The "hell" key does not exist ], main=[ # Testing that we can access the input { "workflow": "other_workflow", "arguments": {"test": '_["test"]'}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): with raises(BaseException): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("workflow: thread race condition") @test("workflow: system call - list agents") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="Test system tool task", description="List agents using system call", input_schema={"type": "object"}, tools=[ { "name": "list_agents", "description": "List all agents", "type": "system", "system": {"resource": "agent", "operation": "list"}, }, ], main=[ { "tool": "list_agents", "arguments": { "limit": "10", }, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): pool = await create_db_pool(dsn=dsn) execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert isinstance(result, list) # Result's length should be less than or equal to the limit assert len(result) <= 10 # Check if all items are agent dictionaries assert all(isinstance(agent, dict) for agent in result) # Check if each agent has an 'id' field assert all("id" in agent for agent in result) @skip("needs to be fixed") @test("workflow: tool call api_call") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( inherit_tools=True, name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, tools=[ { "type": "api_call", "name": "hello", "api_call": { "method": "GET", "url": "https://httpbin.org/get", }, }, ], main=[ { "tool": "hello", "arguments": { "params": {"test": "_.test"}, }, }, { "evaluate": {"hello": "_.json.args.test"}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == data.input["test"] @skip("needs to be fixed") @test("workflow: tool call api_call test retry") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) status_codes_to_retry = ",".join(str(code) for code in (408, 429, 503, 504)) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( inherit_tools=True, name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, tools=[ { "type": "api_call", "name": "hello", "api_call": { "method": "GET", "url": f"https://httpbin.org/status/{status_codes_to_retry}", }, }, ], main=[ { "tool": "hello", "arguments": { "params": {"test": "_.test"}, }, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): _execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None mock_run_task_execution_workflow.assert_called_once() # Let it run for a bit result_coroutine = handle.result() task = asyncio.create_task(result_coroutine) try: await asyncio.wait_for(task, timeout=10) except BaseException: task.cancel() # Get the history history = await handle.fetch_history() events = [MessageToDict(e) for e in history.events] assert len(events) > 0 # NOTE: super janky but works events_strings = [json.dumps(event) for event in events] num_retries = len([event for event in events_strings if "execute_api_call" in event]) assert num_retries >= 2 @skip("needs to be fixed") @test("workflow: tool call integration dummy") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, tools=[ { "type": "integration", "name": "hello", "integration": { "provider": "dummy", }, }, ], main=[ { "tool": "hello", "arguments": {"test": "_.test"}, }, ], inherit_tools=True, ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["test"] == data.input["test"] @skip("needs to be fixed") @test("workflow: tool call integration mocked weather") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, tools=[ { "type": "integration", "name": "get_weather", "integration": { "provider": "weather", "setup": {"openweathermap_api_key": "test"}, "arguments": {"location": "fake"}, }, }, ], main=[ { "tool": "get_weather", "arguments": {"location": "_.test"}, }, ], ), connection_pool=pool, ) expected_output = {"temperature": 20, "humidity": 60} async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): with patch_integration_service(expected_output) as mock_integration_service: execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() # Verify the integration service was called with correct arguments mock_integration_service.assert_called_once() assert result == expected_output @skip("needs to be fixed") @test("workflow: wait for input step start") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ {"wait_for_input": {"info": {"hi": '"bye"'}}}, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() # Let it run for a bit result_coroutine = handle.result() task = asyncio.create_task(result_coroutine) try: await asyncio.wait_for(task, timeout=3) except TimeoutError: task.cancel() # Get the history history = await handle.fetch_history() events = [MessageToDict(e) for e in history.events] assert len(events) > 0 activities_scheduled = [ event.get("activityTaskScheduledEventAttributes", {}) .get("activityType", {}) .get("name") for event in events if "ACTIVITY_TASK_SCHEDULED" in event["eventType"] ] activities_scheduled = [activity for activity in activities_scheduled if activity] assert "wait_for_input_step" in activities_scheduled @skip("needs to be fixed") @test("workflow: foreach wait for input step start") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "foreach": { "in": "'a b c'.split()", "do": {"wait_for_input": {"info": {"hi": '"bye"'}}}, }, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() # Let it run for a bit result_coroutine = handle.result() task = asyncio.create_task(result_coroutine) try: await asyncio.wait_for(task, timeout=3) except TimeoutError: task.cancel() # Get the history history = await handle.fetch_history() events = [MessageToDict(e) for e in history.events] assert len(events) > 0 activities_scheduled = [ event.get("activityTaskScheduledEventAttributes", {}) .get("activityType", {}) .get("name") for event in events if "ACTIVITY_TASK_SCHEDULED" in event["eventType"] ] activities_scheduled = [activity for activity in activities_scheduled if activity] assert "for_each_step" in activities_scheduled @skip("needs to be fixed") @test("workflow: if-else step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task_def = CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "if": "False", "then": {"evaluate": {"hello": '"world"'}}, "else": {"evaluate": {"hello": "random.randint(0, 10)"}}, }, ], ) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=task_def, connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @skip("needs to be fixed") @test("workflow: switch step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "switch": [ { "case": "False", "then": {"evaluate": {"hello": '"bubbles"'}}, }, { "case": "True", "then": {"evaluate": {"hello": '"world"'}}, }, { "case": "True", "then": {"evaluate": {"hello": '"bye"'}}, }, ], }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result["hello"] == "world" @skip("needs to be fixed") @test("workflow: for each step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "foreach": { "in": "'a b c'.split()", "do": {"evaluate": {"hello": '"world"'}}, }, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result[0]["hello"] == "world" @skip("needs to be fixed") @test("workflow: map reduce step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) map_step = { "over": "'a b c'.split()", "map": { "evaluate": {"res": "_"}, }, } task_def = { "name": "test task", "description": "test task about", "input_schema": {"type": "object", "additionalProperties": True}, "main": [map_step], } task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest(**task_def), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert [r["res"] for r in result] == ["a", "b", "c"] for p in [1, 3, 5]: @skip("needs to be fixed") @test(f"workflow: map reduce step parallel (parallelism={p})") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) map_step = { "over": "'a b c d'.split()", "map": { "evaluate": {"res": "_ + '!'"}, }, "parallelism": p, } task_def = { "name": "test task", "description": "test task about", "input_schema": {"type": "object", "additionalProperties": True}, "main": [map_step], } task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest(**task_def), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert [r["res"] for r in result] == [ "a!", "b!", "c!", "d!", ] @skip("needs to be fixed") @test("workflow: prompt step (python expression)") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) mock_model_response = ModelResponse( id="fake_id", choices=[Choices(message={"role": "assistant", "content": "Hello, world!"})], created=0, object="text_completion", ) with patch("agents_api.clients.litellm.acompletion") as acompletion: acompletion.return_value = mock_model_response data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "prompt": "$_ [{'role': 'user', 'content': _.test}]", "settings": {}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() result = result["choices"][0]["message"] assert result["content"] == "Hello, world!" assert result["role"] == "assistant" @skip("needs to be fixed") @test("workflow: prompt step") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) mock_model_response = ModelResponse( id="fake_id", choices=[Choices(message={"role": "assistant", "content": "Hello, world!"})], created=0, object="text_completion", ) with patch("agents_api.clients.litellm.acompletion") as acompletion: acompletion.return_value = mock_model_response data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "prompt": [ { "role": "user", "content": "message", }, ], "settings": {}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() result = result["choices"][0]["message"] assert result["content"] == "Hello, world!" assert result["role"] == "assistant" @skip("needs to be fixed") @test("workflow: prompt step unwrap") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, _s3_client=s3_client, # Adding coz blob store might be used ): pool = await create_db_pool(dsn=dsn) mock_model_response = ModelResponse( id="fake_id", choices=[Choices(message={"role": "assistant", "content": "Hello, world!"})], created=0, object="text_completion", ) with patch("agents_api.clients.litellm.acompletion") as acompletion: acompletion.return_value = mock_model_response data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ { "prompt": [ { "role": "user", "content": "message", }, ], "unwrap": True, "settings": {}, }, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result == "Hello, world!" @skip("needs to be fixed") @test("workflow: set and get steps") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): pool = await create_db_pool(dsn=dsn) data = CreateExecutionRequest(input={"test": "input"}) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[ {"set": {"test_key": '"test_value"'}}, {"get": "test_key"}, ], ), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() result = await handle.result() assert result == "test_value" @skip("needs to be fixed") @test("workflow: execute yaml task") async def _( dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, ): pool = await create_db_pool(dsn=dsn) mock_model_response = ModelResponse( id="fake_id", choices=[ Choices(message={"role": "assistant", "content": "found: true\nvalue: 'Gaga'"}), ], created=0, object="text_completion", ) with ( patch("agents_api.clients.litellm.acompletion") as acompletion, open("./tests/sample_tasks/find_selector.yaml") as task_file, ): input = { "screenshot_base64": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA", "network_requests": [{"request": {}, "response": {"body": "Lady Gaga"}}], "parameters": ["name"], } task_definition = yaml.safe_load(task_file) acompletion.return_value = mock_model_response data = CreateExecutionRequest(input=input) task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest(**task_definition), connection_pool=pool, ) async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): execution, handle = await start_execution( developer_id=developer_id, task_id=task.id, data=data, connection_pool=pool, ) assert handle is not None assert execution.task_id == task.id assert execution.input == data.input mock_run_task_execution_workflow.assert_called_once() await handle.result() ================================================ FILE: src/agents-api/tests/test_expression_validation.py ================================================ """ Tests to verify that Python expression validation works correctly. This includes testing the bug fix for expressions without a $ prefix. """ from agents_api.common.utils.task_validation import validate_py_expression def test_expression_validation_basic(): """Test basic validation of Python expressions.""" # Test with a syntax error expression = "$ 1 + )" result = validate_py_expression(expression) assert len(result["syntax_errors"]) > 0 assert "Syntax error" in result["syntax_errors"][0] # Test with undefined variable expression = "$ undefined_var + 10" result = validate_py_expression(expression) assert len(result["undefined_names"]) > 0 assert "Undefined name: 'undefined_var'" in result["undefined_names"] # Test with unsafe attribute access expression = "$ some_obj.dangerous_method()" result = validate_py_expression(expression) assert len(result["unsafe_operations"]) > 0 assert "Potentially unsafe attribute access" in result["unsafe_operations"][0] # Test division by zero detection - note: static analysis may not catch all instances expression = "$ 10 / 0" result = validate_py_expression(expression) # This assertion may be fragile depending on the static analyzer's capabilities if len(result["potential_runtime_errors"]) > 0: assert "Division by zero" in result["potential_runtime_errors"][0] else: print("Note: Static analyzer did not detect division by zero") # Test a valid expression expression = "$ _.topic if hasattr(_, 'topic') else 'default'" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # Test that _ is allowed by default expression = "$ _.attribute" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) # This test is no longer relevant since allow_placeholder_variables parameter was removed # Special variables are now always allowed by default def test_expression_without_dollar_prefix(): """Test that expressions without a $ prefix return empty issues and don't proceed with validation.""" # Test regular string without $ prefix expression = "Hello world" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Non-$ expressions should return empty issues" ) # Test with Python syntax but no $ prefix (should be considered a regular string) expression = "1 + 2" # Valid Python but not started with $ result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Python syntax without $ should return empty issues" ) # Test with Python syntax error but no $ prefix (should be considered a regular string) expression = "1 + )" # Invalid Python but not started with $ result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Invalid Python without $ should return empty issues" ) def test_dollar_sign_variations(): """Test different variations of the $ prefix to ensure correct handling.""" # Test $ with space - should actually evaluate the expression expression = "$ 1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), "$ with space should be valid" # Test $ without space - should NOT be evaluated at all expression = "$1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "$ without space should return empty issues (not evaluated)" ) # Test with invalid syntax after $ expression = "$ 1 + )" result = validate_py_expression(expression) assert len(result["syntax_errors"]) > 0, ( "Expression with $ space should be evaluated and catch syntax errors" ) # Test with invalid syntax without space after $ - should NOT be evaluated expression = "$1 + )" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "$ without space shouldn't be evaluated even with syntax errors" ) # Test with leading whitespace before $ expression = " $ 1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Leading whitespace before $ should be valid" ) # Test with leading whitespace and $ without space expression = " $1 + 2" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Leading whitespace before $ without space should return empty issues (not evaluated)" ) def test_backwards_compatibility_cases(): """Test the backwards compatibility mechanism for expressions.""" # Test curly brace template syntax expression = "Hello {{name}}" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Curly brace template should be valid" ) # Test array indexing (auto-prepends $) expression = "_[0]" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), "Array indexing should be valid" # Test simple underscore (auto-prepends $) expression = "_" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Simple underscore should be valid" ) # Test attribute access (auto-prepends $) expression = "_.name" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()), ( "Attribute access should be valid" ) ================================================ FILE: src/agents-api/tests/test_file_routes.py ================================================ # Tests for file routes import base64 import hashlib from ward import test from tests.fixtures import make_request, s3_client, test_project @test("route: create file") async def _(make_request=make_request, s3_client=s3_client): data = { "name": "Test File", "description": "This is a test file.", "mime_type": "text/plain", "content": "eyJzYW1wbGUiOiAidGVzdCJ9", } response = make_request( method="POST", url="/files", json=data, ) assert response.status_code == 201 @test("route: create file with project") async def _(make_request=make_request, s3_client=s3_client, project=test_project): data = { "name": "Test File with Project", "description": "This is a test file with project.", "mime_type": "text/plain", "content": "eyJzYW1wbGUiOiAidGVzdCJ9", "project": project.canonical_name, } response = make_request( method="POST", url="/files", json=data, ) assert response.status_code == 201 assert response.json()["project"] == project.canonical_name @test("route: delete file") async def _(make_request=make_request, s3_client=s3_client): data = { "name": "Test File", "description": "This is a test file.", "mime_type": "text/plain", "content": "eyJzYW1wbGUiOiAidGVzdCJ9", } response = make_request( method="POST", url="/files", json=data, ) file_id = response.json()["id"] response = make_request( method="DELETE", url=f"/files/{file_id}", ) assert response.status_code == 202 response = make_request( method="GET", url=f"/files/{file_id}", ) assert response.status_code == 404 @test("route: get file") async def _(make_request=make_request, s3_client=s3_client): data = { "name": "Test File", "description": "This is a test file.", "mime_type": "text/plain", "content": "eyJzYW1wbGUiOiAidGVzdCJ9", } response = make_request( method="POST", url="/files", json=data, ) file_id = response.json()["id"] content_bytes = base64.b64decode(data["content"]) expected_hash = hashlib.sha256(content_bytes).hexdigest() response = make_request( method="GET", url=f"/files/{file_id}", ) assert response.status_code == 200 result = response.json() # Decode base64 content and compute its SHA-256 hash assert result["hash"] == expected_hash @test("route: list files") async def _(make_request=make_request, s3_client=s3_client): response = make_request( method="GET", url="/files", ) assert response.status_code == 200 @test("route: list files with project filter") async def _(make_request=make_request, s3_client=s3_client, project=test_project): # First create a file with the project data = { "name": "Test File for Project Filter", "description": "This is a test file for project filtering.", "mime_type": "text/plain", "content": "eyJzYW1wbGUiOiAidGVzdCJ9", "project": project.canonical_name, } make_request( method="POST", url="/files", json=data, ) # Then list files with project filter response = make_request( method="GET", url="/files", params={ "project": project.canonical_name, }, ) assert response.status_code == 200 files = response.json() assert isinstance(files, list) assert len(files) > 0 assert any(file["project"] == project.canonical_name for file in files) ================================================ FILE: src/agents-api/tests/test_files_queries.py ================================================ # Tests for entry queries from agents_api.autogen.openapi_model import CreateFileRequest, File from agents_api.clients.pg import create_db_pool from agents_api.queries.files.create_file import create_file from agents_api.queries.files.delete_file import delete_file from agents_api.queries.files.get_file import get_file from agents_api.queries.files.list_files import list_files from fastapi import HTTPException from ward import raises, test from tests.fixtures import ( pg_dsn, test_agent, test_developer, test_file, test_project, test_user, ) @test("query: create file") async def _(dsn=pg_dsn, developer=test_developer): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Hello", description="World", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), connection_pool=pool, ) assert isinstance(file, File) assert file.id is not None assert file.name == "Hello" assert file.description == "World" assert file.mime_type == "text/plain" @test("query: create file with project") async def _(dsn=pg_dsn, developer=test_developer, project=test_project): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Hello with Project", description="World", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), connection_pool=pool, ) assert isinstance(file, File) assert file.id is not None assert file.name == "Hello with Project" assert file.project == project.canonical_name @test("query: create file with invalid project") async def _(dsn=pg_dsn, developer=test_developer): pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await create_file( developer_id=developer.id, data=CreateFileRequest( name="Hello with Invalid Project", description="World", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project="invalid_project", ), connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: create user file") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="User File", description="Test user file", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) assert isinstance(file, File) assert file.id is not None assert file.name == "User File" # Verify file appears in user's files files = await list_files( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) assert any(f.id == file.id for f in files) @test("query: create user file with project") async def _(dsn=pg_dsn, developer=test_developer, user=test_user, project=test_project): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="User File with Project", description="Test user file", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), owner_type="user", owner_id=user.id, connection_pool=pool, ) assert isinstance(file, File) assert file.id is not None assert file.name == "User File with Project" assert file.project == project.canonical_name # Verify file appears in user's files with the right project files = await list_files( developer_id=developer.id, owner_type="user", owner_id=user.id, project=project.canonical_name, connection_pool=pool, ) assert any(f.id == file.id for f in files) assert all(f.project == project.canonical_name for f in files) @test("query: create agent file") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Agent File", description="Test agent file", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert file.name == "Agent File" # Verify file appears in agent's files files = await list_files( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert any(f.id == file.id for f in files) @test("query: create agent file with project") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent, project=test_project): pool = await create_db_pool(dsn=dsn) file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Agent File with Project", description="Test agent file", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert file.name == "Agent File with Project" assert file.project == project.canonical_name # Verify file appears in agent's files with the right project files = await list_files( developer_id=developer.id, owner_type="agent", owner_id=agent.id, project=project.canonical_name, connection_pool=pool, ) assert any(f.id == file.id for f in files) assert all(f.project == project.canonical_name for f in files) @test("query: get file") async def _(dsn=pg_dsn, file=test_file, developer=test_developer): pool = await create_db_pool(dsn=dsn) file_test = await get_file( developer_id=developer.id, file_id=file.id, connection_pool=pool, ) assert file_test.id == file.id assert file_test.name == "Hello" assert file_test.description == "World" assert file_test.mime_type == "text/plain" assert file_test.hash == file.hash @test("query: list files") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): pool = await create_db_pool(dsn=dsn) files = await list_files( developer_id=developer.id, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) @test("query: list files with project filter") async def _(dsn=pg_dsn, developer=test_developer, project=test_project): pool = await create_db_pool(dsn=dsn) # Create a file with the project file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Project File for Filtering", description="Test project file filtering", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), connection_pool=pool, ) # List files with project filter files = await list_files( developer_id=developer.id, project=project.canonical_name, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) assert all(f.project == project.canonical_name for f in files) @test("query: list files, invalid limit") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): """Test that listing files with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_files( developer_id=developer.id, connection_pool=pool, limit=101, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" with raises(HTTPException) as exc: await list_files( developer_id=developer.id, connection_pool=pool, limit=0, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list files, invalid offset") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): """Test that listing files with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_files( developer_id=developer.id, connection_pool=pool, offset=-1, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be >= 0" @test("query: list files, invalid sort by") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): """Test that listing files with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_files( developer_id=developer.id, connection_pool=pool, sort_by="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list files, invalid sort direction") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): """Test that listing files with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_files( developer_id=developer.id, connection_pool=pool, direction="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: list user files") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) # Create a file owned by the user file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="User List Test", description="Test file for user listing", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # List user's files files = await list_files( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) @test("query: list user files with project") async def _(dsn=pg_dsn, developer=test_developer, user=test_user, project=test_project): pool = await create_db_pool(dsn=dsn) # Create a file owned by the user with a project file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="User Project List Test", description="Test file for user project listing", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # List user's files with project filter files = await list_files( developer_id=developer.id, owner_type="user", owner_id=user.id, project=project.canonical_name, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) assert all(f.project == project.canonical_name for f in files) @test("query: list agent files") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create a file owned by the agent file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Agent List Test", description="Test file for agent listing", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # List agent's files files = await list_files( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) @test("query: list agent files with project") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent, project=test_project): pool = await create_db_pool(dsn=dsn) # Create a file owned by the agent with a project file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Agent Project List Test", description="Test file for agent project listing", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", project=project.canonical_name, ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # List agent's files with project filter files = await list_files( developer_id=developer.id, owner_type="agent", owner_id=agent.id, project=project.canonical_name, connection_pool=pool, ) assert len(files) >= 1 assert any(f.id == file.id for f in files) assert all(f.project == project.canonical_name for f in files) @test("query: delete user file") async def _(dsn=pg_dsn, developer=test_developer, user=test_user): pool = await create_db_pool(dsn=dsn) # Create a file owned by the user file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="User Delete Test", description="Test file for user deletion", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="user", owner_id=user.id, connection_pool=pool, ) # Delete the file await delete_file( developer_id=developer.id, file_id=file.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) # Verify file is no longer in user's files files = await list_files( developer_id=developer.id, owner_type="user", owner_id=user.id, connection_pool=pool, ) assert not any(f.id == file.id for f in files) @test("query: delete agent file") async def _(dsn=pg_dsn, developer=test_developer, agent=test_agent): pool = await create_db_pool(dsn=dsn) # Create a file owned by the agent file = await create_file( developer_id=developer.id, data=CreateFileRequest( name="Agent Delete Test", description="Test file for agent deletion", mime_type="text/plain", content="eyJzYW1wbGUiOiAidGVzdCJ9", ), owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Delete the file await delete_file( developer_id=developer.id, file_id=file.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) # Verify file is no longer in agent's files files = await list_files( developer_id=developer.id, owner_type="agent", owner_id=agent.id, connection_pool=pool, ) assert not any(f.id == file.id for f in files) @test("query: delete file") async def _(dsn=pg_dsn, developer=test_developer, file=test_file): pool = await create_db_pool(dsn=dsn) await delete_file( developer_id=developer.id, file_id=file.id, connection_pool=pool, ) ================================================ FILE: src/agents-api/tests/test_get_doc_search.py ================================================ from uuid import uuid4 from agents_api.autogen.Docs import DocOwner, DocReference, Snippet from agents_api.autogen.openapi_model import ( HybridDocSearchRequest, TextOnlyDocSearchRequest, VectorDocSearchRequest, ) from agents_api.common.utils.get_doc_search import ( get_language, get_search_fn_and_params, strip_embeddings, ) from agents_api.queries.docs.search_docs_by_embedding import search_docs_by_embedding from agents_api.queries.docs.search_docs_by_text import search_docs_by_text from agents_api.queries.docs.search_docs_hybrid import search_docs_hybrid from fastapi import HTTPException from ward import raises, test @test("get_language: valid language code returns lowercase language name") def _(): result = get_language("en") assert result == "english_unaccent" result = get_language("fr") assert result == "french" @test("get_language: empty language code raises HTTPException") def _(): with raises(HTTPException) as exc: get_language("") assert exc.raised.status_code == 422 assert exc.raised.detail == "Invalid ISO 639 language code." @test("get_search_fn_and_params: text-only search request") def _(): request = TextOnlyDocSearchRequest( text="search query", limit=10, lang="en", metadata_filter={"field": "value"}, trigram_similarity_threshold=0.4, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_by_text assert params == { "query": "search query", "k": 10, "metadata_filter": {"field": "value"}, "search_language": "english_unaccent", "extract_keywords": False, "trigram_similarity_threshold": None, } assert post_processing == { "include_embeddings": True, } @test("get_search_fn_and_params: text-only search request with include_embeddings=False") def _(): request = TextOnlyDocSearchRequest( text="search query", limit=10, lang="en", metadata_filter={"field": "value"}, trigram_similarity_threshold=0.4, include_embeddings=False, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_by_text assert params == { "query": "search query", "k": 10, "metadata_filter": {"field": "value"}, "search_language": "english_unaccent", "extract_keywords": False, "trigram_similarity_threshold": None, } assert post_processing == { "include_embeddings": False, } @test("get_search_fn_and_params: vector search request without MMR") def _(): request = VectorDocSearchRequest( vector=[0.1, 0.2, 0.3], limit=5, confidence=0.8, metadata_filter={"field": "value"}, mmr_strength=0, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_by_embedding assert params == { "embedding": [0.1, 0.2, 0.3], "k": 5, "confidence": 0.8, "metadata_filter": {"field": "value"}, } assert post_processing == { "include_embeddings": True, } @test("get_search_fn_and_params: vector search request with include_embeddings=False") def _(): request = VectorDocSearchRequest( vector=[0.1, 0.2, 0.3], limit=5, confidence=0.8, metadata_filter={"field": "value"}, mmr_strength=0, include_embeddings=False, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_by_embedding assert params == { "embedding": [0.1, 0.2, 0.3], "k": 5, "confidence": 0.8, "metadata_filter": {"field": "value"}, } assert post_processing == { "include_embeddings": False, } @test("get_search_fn_and_params: vector search request with MMR") def _(): request = VectorDocSearchRequest( vector=[0.1, 0.2, 0.3], limit=5, confidence=0.8, metadata_filter={"field": "value"}, mmr_strength=0.5, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_by_embedding assert params == { "embedding": [0.1, 0.2, 0.3], "k": 10, # min(limit * 2, limit + 10) with limit=5 "confidence": 0.8, "metadata_filter": {"field": "value"}, } assert post_processing == { "include_embeddings": True, } @test("get_search_fn_and_params: hybrid search request") def _(): request = HybridDocSearchRequest( text="search query", vector=[0.1, 0.2, 0.3], lang="en", limit=5, confidence=0.8, alpha=0.5, metadata_filter={"field": "value"}, mmr_strength=0, trigram_similarity_threshold=0.4, k_multiplier=7, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_hybrid assert params == { "text_query": "search query", "embedding": [0.1, 0.2, 0.3], "k": 5, "confidence": 0.8, "alpha": 0.5, "metadata_filter": {"field": "value"}, "search_language": "english_unaccent", "extract_keywords": False, "trigram_similarity_threshold": None, "k_multiplier": 7, } assert post_processing == { "include_embeddings": True, } @test("get_search_fn_and_params: hybrid search request with include_embeddings=False") def _(): request = HybridDocSearchRequest( text="search query", vector=[0.1, 0.2, 0.3], lang="en", limit=5, confidence=0.8, alpha=0.5, metadata_filter={"field": "value"}, mmr_strength=0, trigram_similarity_threshold=0.4, k_multiplier=7, include_embeddings=False, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_hybrid assert params == { "text_query": "search query", "embedding": [0.1, 0.2, 0.3], "k": 5, "confidence": 0.8, "alpha": 0.5, "metadata_filter": {"field": "value"}, "search_language": "english_unaccent", "extract_keywords": False, "trigram_similarity_threshold": None, "k_multiplier": 7, } assert post_processing == { "include_embeddings": False, } @test("get_search_fn_and_params: hybrid search request with MMR") def _(): request = HybridDocSearchRequest( text="search query", vector=[0.1, 0.2, 0.3], lang="en", limit=5, confidence=0.8, alpha=0.5, metadata_filter={"field": "value"}, mmr_strength=0.5, trigram_similarity_threshold=0.4, k_multiplier=7, ) search_fn, params, post_processing = get_search_fn_and_params(request) assert search_fn == search_docs_hybrid assert params == { "text_query": "search query", "embedding": [0.1, 0.2, 0.3], "k": 10, # min(limit * 2, limit + 10) with limit=5 "confidence": 0.8, "alpha": 0.5, "metadata_filter": {"field": "value"}, "search_language": "english_unaccent", "extract_keywords": False, "trigram_similarity_threshold": None, "k_multiplier": 7, } assert post_processing == { "include_embeddings": True, } @test("get_search_fn_and_params: hybrid search request with invalid language") def _(): request = HybridDocSearchRequest( text="search query", vector=[0.1, 0.2, 0.3], lang="en-axzs", # Invalid language code limit=5, confidence=0.8, alpha=0.5, metadata_filter={"field": "value"}, mmr_strength=0, trigram_similarity_threshold=0.4, k_multiplier=7, ) with raises(HTTPException) as exc: _search_fn, _params, _post_processing = get_search_fn_and_params(request) assert exc.raised.status_code == 422 assert exc.raised.detail == "Invalid ISO 639 language code." @test("strip_embeddings: single DocReference with embedding") def _(): # Create test data doc = DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="user"), title="Test Document", snippet=Snippet(index=0, content="Test content", embedding=[0.1, 0.2, 0.3, 0.4, 0.5]), distance=0.8, ) # Test the function result = strip_embeddings(doc) # Assertions assert isinstance(result, DocReference) assert result.snippet.embedding is None assert result.snippet.content == "Test content" assert result.snippet.index == 0 assert result.title == "Test Document" assert result.distance == 0.8 @test("strip_embeddings: single DocReference without embedding") def _(): # Create test data without embedding doc = DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="agent"), title="Test Document", snippet=Snippet(index=1, content="Test content without embedding", embedding=None), ) # Test the function result = strip_embeddings(doc) # Assertions assert isinstance(result, DocReference) assert result.snippet.embedding is None assert result.snippet.content == "Test content without embedding" assert result.snippet.index == 1 @test("strip_embeddings: list of DocReferences with embeddings") def _(): # Create test data docs = [ DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="user"), title="Document 1", snippet=Snippet(index=0, content="Content 1", embedding=[0.1, 0.2, 0.3]), ), DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="agent"), title="Document 2", snippet=Snippet(index=1, content="Content 2", embedding=[0.4, 0.5, 0.6]), ), ] # Test the function result = strip_embeddings(docs) # Assertions assert isinstance(result, list) assert len(result) == 2 for i, doc in enumerate(result): assert isinstance(doc, DocReference) assert doc.snippet.embedding is None assert doc.snippet.content == f"Content {i + 1}" assert doc.title == f"Document {i + 1}" @test("strip_embeddings: list of DocReferences mixed with and without embeddings") def _(): # Create test data with mixed embedding states docs = [ DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="user"), title="Document with embedding", snippet=Snippet( index=0, content="Content with embedding", embedding=[0.1, 0.2, 0.3] ), ), DocReference( id=uuid4(), owner=DocOwner(id=uuid4(), role="agent"), title="Document without embedding", snippet=Snippet(index=1, content="Content without embedding", embedding=None), ), ] # Test the function result = strip_embeddings(docs) # Assertions assert isinstance(result, list) assert len(result) == 2 for doc in result: assert isinstance(doc, DocReference) assert doc.snippet.embedding is None @test("strip_embeddings: empty list") def _(): # Test with empty list docs = [] # Test the function result = strip_embeddings(docs) # Assertions assert isinstance(result, list) assert len(result) == 0 ================================================ FILE: src/agents-api/tests/test_litellm_utils.py ================================================ from unittest.mock import AsyncMock, patch from agents_api.clients.litellm import acompletion from agents_api.common.utils.llm_providers import ( get_api_key_env_var_name, get_litellm_model_name, ) from litellm.types.utils import ModelResponse from ward import test @test("litellm_utils: acompletion - no tools") async def _(): with patch("agents_api.clients.litellm._acompletion") as mock_acompletion: mock_acompletion.return_value = ModelResponse( id="test-id", choices=[{"message": {"content": "test"}}], model="gpt-4", usage={"total_tokens": 10}, ) messages = [{"role": "user", "content": "test", "tool_calls": []}] await acompletion(model="gpt-4", messages=messages) # Check that tool_calls was removed from the message mock_acompletion.assert_called_once() called_messages = mock_acompletion.call_args[1]["messages"] assert "tool_calls" not in called_messages[0] @test("litellm_utils: get_api_key_env_var_name") async def _(): with patch("agents_api.common.utils.llm_providers.get_config") as mock_get_config: mock_get_config.return_value = { "model_list": [ { "model_name": "gpt-4", "litellm_params": {"api_key": "os.environ/OPENAI_API_KEY"}, } ] } result = get_api_key_env_var_name("gpt-4") assert result == "OPENAI_API_KEY" @test("litellm_utils: get_litellm_model_name - known models") async def _(): with patch("agents_api.common.utils.llm_providers.get_config") as mock_get_config: mock_get_config.return_value = { "model_list": [ { "model_name": "gpt-4o", "litellm_params": {"model": "openai/gpt-4o"}, }, { "model_name": "gemini-1.5-pro", "litellm_params": {"model": "gemini/gemini-1.5-pro"}, }, { "model_name": "claude-3.5-sonnet", "litellm_params": {"model": "claude-3-5-sonnet-20241022"}, }, ] } assert get_litellm_model_name("gpt-4o") == "openai/gpt-4o" assert get_litellm_model_name("gemini-1.5-pro") == "gemini/gemini-1.5-pro" assert get_litellm_model_name("claude-3.5-sonnet") == "claude-3-5-sonnet-20241022" @test("litellm_utils: get_litellm_model_name - unknown model") async def _(): with patch("agents_api.common.utils.llm_providers.get_config") as mock_get_config: mock_get_config.return_value = { "model_list": [ { "model_name": "gpt-4o", "litellm_params": {"model": "openai/gpt-4o"}, } ] } # Unknown model should return unchanged assert get_litellm_model_name("unknown-model") == "unknown-model" @test("litellm_utils: get_litellm_model_name - empty config") async def _(): with patch("agents_api.common.utils.llm_providers.get_config") as mock_get_config: mock_get_config.return_value = {} # With empty config, any model returns unchanged assert get_litellm_model_name("any-model") == "any-model" @test("litellm_utils: acompletion - custom_api_key takes precedence over secret") async def _(): with ( patch("agents_api.clients.litellm._acompletion") as mock_acompletion, patch("agents_api.clients.litellm.get_secret_by_name") as mock_get_secret, patch("agents_api.clients.litellm.get_litellm_model_name") as mock_get_model_name, ): # Setup mocks mock_acompletion.return_value = ModelResponse( id="test-id", choices=[{"message": {"content": "test"}}], model="gpt-4o", usage={"total_tokens": 10}, ) mock_get_secret.return_value = AsyncMock(value="secret-api-key") mock_get_model_name.return_value = "openai/gpt-4o" messages = [{"role": "user", "content": "test"}] # Call with both custom_api_key and user (which would trigger secret lookup) await acompletion( model="gpt-4o", messages=messages, custom_api_key="custom-api-key", user="test-user-id", ) # Verify custom_api_key is used, not the secret mock_acompletion.assert_called_once() call_kwargs = mock_acompletion.call_args[1] assert call_kwargs["api_key"] == "custom-api-key" assert call_kwargs["base_url"] is None assert call_kwargs["model"] == "openai/gpt-4o" @test("litellm_utils: acompletion - secret used when no custom_api_key") async def _(): with ( patch("agents_api.clients.litellm._acompletion") as mock_acompletion, patch("agents_api.clients.litellm.get_secret_by_name") as mock_get_secret, patch("agents_api.clients.litellm.get_litellm_model_name") as mock_get_model_name, patch("agents_api.clients.litellm.get_api_key_env_var_name") as mock_get_env_var, ): # Setup mocks mock_acompletion.return_value = ModelResponse( id="test-id", choices=[{"message": {"content": "test"}}], model="gpt-4o", usage={"total_tokens": 10}, ) secret_mock = AsyncMock() secret_mock.value = "secret-api-key" mock_get_secret.return_value = secret_mock mock_get_model_name.return_value = "openai/gpt-4o" mock_get_env_var.return_value = "OPENAI_API_KEY" messages = [{"role": "user", "content": "test"}] # Call without custom_api_key but with user await acompletion( model="gpt-4o", messages=messages, user="550e8400-e29b-41d4-a716-446655440000" ) # Verify secret's API key is used mock_acompletion.assert_called_once() call_kwargs = mock_acompletion.call_args[1] assert call_kwargs["api_key"] == "secret-api-key" assert call_kwargs["base_url"] is None assert call_kwargs["model"] == "openai/gpt-4o" @test("litellm_utils: acompletion - proxy used when no custom_api_key or secret") async def _(): with ( patch("agents_api.clients.litellm._acompletion") as mock_acompletion, patch("agents_api.clients.litellm.get_secret_by_name") as mock_get_secret, patch("agents_api.clients.litellm.litellm_master_key", "master-key"), patch("agents_api.clients.litellm.litellm_url", "http://litellm-proxy"), ): # Setup mocks mock_acompletion.return_value = ModelResponse( id="test-id", choices=[{"message": {"content": "test"}}], model="openai/gpt-4o", usage={"total_tokens": 10}, ) # No secret found mock_get_secret.side_effect = Exception("Secret not found") messages = [{"role": "user", "content": "test"}] # Call without custom_api_key await acompletion(model="gpt-4o", messages=messages) # Verify proxy configuration is used mock_acompletion.assert_called_once() call_kwargs = mock_acompletion.call_args[1] assert call_kwargs["api_key"] == "master-key" assert call_kwargs["base_url"] == "http://litellm-proxy" assert call_kwargs["model"] == "openai/gpt-4o" # Note the openai/ prefix ================================================ FILE: src/agents-api/tests/test_memory_utils.py ================================================ """ Tests for the memory utilities module. """ import sys from collections import deque from agents_api.common.utils.memory import total_size from ward import test @test("total_size calculates correct size for basic types") def test_total_size_basic_types(): # Integer assert total_size(42) == sys.getsizeof(42) # Float assert total_size(3.14) == sys.getsizeof(3.14) # String assert total_size("hello") == sys.getsizeof("hello") # Boolean assert total_size(True) == sys.getsizeof(True) # None assert total_size(None) == sys.getsizeof(None) @test("total_size correctly handles container types") def test_total_size_containers(): # List lst = [1, 2, 3, 4, 5] expected_min = sys.getsizeof(lst) + sum(sys.getsizeof(i) for i in lst) assert total_size(lst) == expected_min # Tuple tup = (1, 2, 3, 4, 5) expected_min = sys.getsizeof(tup) + sum(sys.getsizeof(i) for i in tup) assert total_size(tup) == expected_min # Dictionary d = {"a": 1, "b": 2, "c": 3} expected_min = sys.getsizeof(d) + sum( sys.getsizeof(k) + sys.getsizeof(v) for k, v in d.items() ) assert total_size(d) == expected_min # Set s = {1, 2, 3, 4, 5} expected_min = sys.getsizeof(s) + sum(sys.getsizeof(i) for i in s) assert total_size(s) == expected_min # Deque dq = deque([1, 2, 3, 4, 5]) expected_min = sys.getsizeof(dq) + sum(sys.getsizeof(i) for i in dq) assert total_size(dq) == expected_min @test("total_size correctly handles nested objects") def test_total_size_nested(): # Simple nested list nested_list = [1, [2, 3], [4, [5, 6]]] assert total_size(nested_list) > sys.getsizeof(nested_list) # Simple nested dict nested_dict = {"a": 1, "b": {"c": 2, "d": {"e": 3}}} assert total_size(nested_dict) > sys.getsizeof(nested_dict) # Complex structure with type hints complex_obj: dict[str, list[tuple[int, set[int]]]] = { "data": [(1, {2, 3}), (4, {5, 6})], "meta": [(7, {8, 9}), (10, {11, 12})], } assert total_size(complex_obj) > sys.getsizeof(complex_obj) @test("total_size handles custom objects") def test_total_size_custom_objects(): class Person: def __init__(self, name: str, age: int): self.name = name self.age = age person = Person("John", 30) empty_person = Person("", 0) # This will have smaller attribute values # The person with longer strings should take more space assert total_size(person) > 0 # NOTE: total_size does not recurse into __dict__ for custom objects by default # This is expected behavior since it only has built-in handlers for standard containers # The size is equal because it only measures the object's basic size, not its attributes assert total_size(person) == total_size(empty_person) # Let's add a test with a custom handler that does inspect the object's __dict__ def person_handler(p): return p.__dict__.values() # With a custom handler, we should see different sizes assert total_size(person, handlers={Person: person_handler}) > total_size( empty_person, handlers={Person: person_handler} ) @test("total_size handles objects with circular references") def test_total_size_circular_refs(): # List with circular reference a = [1, 2, 3] a.append(a) # a contains itself # This should not cause an infinite recursion size = total_size(a) assert size > 0 # Dictionary with circular reference b: dict = {"key": 1} b["self"] = b # b contains itself # This should not cause an infinite recursion size = total_size(b) assert size > 0 @test("total_size with custom handlers") def test_total_size_custom_handlers(): class CustomContainer: def __init__(self, items): self.items = items def get_items(self): return self.items container = CustomContainer([1, 2, 3, 4, 5]) # Without a custom handler size_without_handler = total_size(container) # With a custom handler handlers = {CustomContainer: lambda c: c.get_items()} size_with_handler = total_size(container, handlers=handlers) # The handler accounts for the contained items assert size_with_handler >= size_without_handler ================================================ FILE: src/agents-api/tests/test_messages_truncation.py ================================================ # from uuid_extensions import uuid7 # from ward import raises, test # from agents_api.autogen.openapi_model import Role # from agents_api.common.protocol.entries import Entry # from agents_api.routers.sessions.exceptions import InputTooBigError # from tests.fixtures import base_session # @test("truncate empty messages list", tags=["messages_truncate"]) # def _(session=base_session): # messages: list[Entry] = [] # result = session.truncate(messages, 10) # assert messages == result # @test("do not truncate", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # "content1", # "content2", # "content3", # ] # threshold = sum([len(c) // 3.5 for c in contents]) # messages: list[Entry] = [ # Entry(session_id=uuid7(), role=Role.user, content=contents[0][0]), # Entry(session_id=uuid7(), role=Role.assistant, content=contents[1][0]), # Entry(session_id=uuid7(), role=Role.user, content=contents[2][0]), # ] # result = session.truncate(messages, threshold) # assert messages == result # @test("truncate thoughts partially", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # ("content1", True), # ("content2", True), # ("content3", False), # ("content4", True), # ("content5", True), # ("content6", True), # ] # session_ids = [uuid7()] * len(contents) # threshold = sum([len(c) // 3.5 for c, i in contents if i]) # messages: list[Entry] = [ # Entry( # session_id=session_ids[0], # role=Role.system, # name="thought", # content=contents[0][0], # ), # Entry(session_id=session_ids[1], role=Role.assistant, content=contents[1][0]), # Entry( # session_id=session_ids[2], # role=Role.system, # name="thought", # content=contents[2][0], # ), # Entry( # session_id=session_ids[3], # role=Role.system, # name="thought", # content=contents[3][0], # ), # Entry(session_id=session_ids[4], role=Role.user, content=contents[4][0]), # Entry(session_id=session_ids[5], role=Role.assistant, content=contents[5][0]), # ] # result = session.truncate(messages, threshold) # [ # messages[0], # messages[1], # messages[3], # messages[4], # messages[5], # ] # assert result == [ # messages[0], # messages[1], # messages[3], # messages[4], # messages[5], # ] # @test("truncate thoughts partially 2", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # ("content1", True), # ("content2", True), # ("content3", False), # ("content4", False), # ("content5", True), # ("content6", True), # ] # session_ids = [uuid7()] * len(contents) # threshold = sum([len(c) // 3.5 for c, i in contents if i]) # messages: list[Entry] = [ # Entry( # session_id=session_ids[0], # role=Role.system, # name="thought", # content=contents[0][0], # ), # Entry(session_id=session_ids[1], role=Role.assistant, content=contents[1][0]), # Entry( # session_id=session_ids[2], # role=Role.system, # name="thought", # content=contents[2][0], # ), # Entry( # session_id=session_ids[3], # role=Role.system, # name="thought", # content=contents[3][0], # ), # Entry(session_id=session_ids[4], role=Role.user, content=contents[4][0]), # Entry(session_id=session_ids[5], role=Role.assistant, content=contents[5][0]), # ] # result = session.truncate(messages, threshold) # assert result == [ # messages[0], # messages[1], # messages[4], # messages[5], # ] # @test("truncate all thoughts", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # ("content1", False), # ("content2", True), # ("content3", False), # ("content4", False), # ("content5", True), # ("content6", True), # ("content7", False), # ] # session_ids = [uuid7()] * len(contents) # threshold = sum([len(c) // 3.5 for c, i in contents if i]) # messages: list[Entry] = [ # Entry( # session_id=session_ids[0], # role=Role.system, # name="thought", # content=contents[0][0], # ), # Entry(session_id=session_ids[1], role=Role.assistant, content=contents[1][0]), # Entry( # session_id=session_ids[2], # role=Role.system, # name="thought", # content=contents[2][0], # ), # Entry( # session_id=session_ids[3], # role=Role.system, # name="thought", # content=contents[3][0], # ), # Entry(session_id=session_ids[4], role=Role.user, content=contents[4][0]), # Entry(session_id=session_ids[5], role=Role.assistant, content=contents[5][0]), # Entry( # session_id=session_ids[6], # role=Role.system, # name="thought", # content=contents[6][0], # ), # ] # result = session.truncate(messages, threshold) # assert result == [ # messages[1], # messages[4], # messages[5], # ] # @test("truncate user assistant pairs", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # ("content1", False), # ("content2", True), # ("content3", False), # ("content4", False), # ("content5", True), # ("content6", True), # ("content7", True), # ("content8", False), # ("content9", True), # ("content10", True), # ("content11", True), # ("content12", True), # ("content13", False), # ] # session_ids = [uuid7()] * len(contents) # threshold = sum([len(c) // 3.5 for c, i in contents if i]) # messages: list[Entry] = [ # Entry( # session_id=session_ids[0], # role=Role.system, # name="thought", # content=contents[0][0], # ), # Entry(session_id=session_ids[1], role=Role.assistant, content=contents[1][0]), # Entry( # session_id=session_ids[2], # role=Role.system, # name="thought", # content=contents[2][0], # ), # Entry( # session_id=session_ids[3], # role=Role.system, # name="thought", # content=contents[3][0], # ), # Entry(session_id=session_ids[4], role=Role.user, content=contents[4][0]), # Entry(session_id=session_ids[5], role=Role.assistant, content=contents[5][0]), # Entry(session_id=session_ids[6], role=Role.user, content=contents[6][0]), # Entry(session_id=session_ids[7], role=Role.assistant, content=contents[7][0]), # Entry(session_id=session_ids[8], role=Role.user, content=contents[8][0]), # Entry(session_id=session_ids[9], role=Role.assistant, content=contents[9][0]), # Entry(session_id=session_ids[10], role=Role.user, content=contents[10][0]), # Entry(session_id=session_ids[11], role=Role.assistant, content=contents[11][0]), # Entry( # session_id=session_ids[12], # role=Role.system, # name="thought", # content=contents[12][0], # ), # ] # result = session.truncate(messages, threshold) # assert result == [ # messages[1], # messages[4], # messages[5], # messages[6], # messages[8], # messages[9], # messages[10], # messages[11], # ] # @test("unable to truncate", tags=["messages_truncate"]) # def _(session=base_session): # contents = [ # ("content1", False), # ("content2", True), # ("content3", False), # ("content4", False), # ("content5", False), # ("content6", False), # ("content7", True), # ("content8", False), # ("content9", True), # ("content10", False), # ] # session_ids = [uuid7()] * len(contents) # threshold = sum([len(c) // 3.5 for c, i in contents if i]) # all_tokens = sum([len(c) // 3.5 for c, _ in contents]) # messages: list[Entry] = [ # Entry( # session_id=session_ids[0], # role=Role.system, # name="thought", # content=contents[0][0], # ), # Entry(session_id=session_ids[1], role=Role.assistant, content=contents[1][0]), # Entry( # session_id=session_ids[2], # role=Role.system, # name="thought", # content=contents[2][0], # ), # Entry( # session_id=session_ids[3], # role=Role.system, # name="thought", # content=contents[3][0], # ), # Entry(session_id=session_ids[4], role=Role.user, content=contents[4][0]), # Entry(session_id=session_ids[5], role=Role.assistant, content=contents[5][0]), # Entry(session_id=session_ids[6], role=Role.user, content=contents[6][0]), # Entry(session_id=session_ids[7], role=Role.assistant, content=contents[7][0]), # Entry(session_id=session_ids[8], role=Role.user, content=contents[8][0]), # Entry( # session_id=session_ids[9], # role=Role.system, # name="thought", # content=contents[9][0], # ), # ] # with raises(InputTooBigError) as ex: # session.truncate(messages, threshold) # assert ( # str(ex.raised) # == f"input is too big, {threshold} tokens required, but you got {all_tokens} tokens" # ) ================================================ FILE: src/agents-api/tests/test_metadata_filter_utils.py ================================================ """ Tests for metadata filter utility functions to prevent SQL injection """ from agents_api.queries.utils import build_metadata_filter_conditions from ward import test @test("utility: build_metadata_filter_conditions with empty filter") async def _(): """Test the build_metadata_filter_conditions utility with empty metadata filter.""" base_params = ["param1", "param2"] metadata_filter = {} conditions, params = build_metadata_filter_conditions(base_params, metadata_filter) # Should return empty string and unchanged params assert conditions == "" assert params == base_params # Note: The implementation doesn't copy the params if there's no metadata filter # So we skip the identity check @test("utility: build_metadata_filter_conditions with simple filter") async def _(): """Test the build_metadata_filter_conditions utility with simple metadata filter.""" base_params = ["param1", "param2"] metadata_filter = {"key": "value"} conditions, params = build_metadata_filter_conditions(base_params, metadata_filter) # Should build a proper condition and append params assert conditions == " AND metadata->>$3 = $4" assert params == ["param1", "param2", "key", "value"] @test("utility: build_metadata_filter_conditions with multiple filters") async def _(): """Test the build_metadata_filter_conditions utility with multiple metadata filters.""" base_params = ["param1", "param2"] metadata_filter = {"key1": "value1", "key2": "value2"} conditions, params = build_metadata_filter_conditions(base_params, metadata_filter) # Should build compound condition and append all params assert conditions == " AND metadata->>$3 = $4 AND metadata->>$5 = $6" assert params == ["param1", "param2", "key1", "value1", "key2", "value2"] @test("utility: build_metadata_filter_conditions with table alias") async def _(): """Test the build_metadata_filter_conditions with table alias.""" base_params = ["param1", "param2"] metadata_filter = {"key": "value"} table_alias = "d." conditions, params = build_metadata_filter_conditions( base_params, metadata_filter, table_alias ) # Should include table alias in condition assert conditions == " AND d.metadata->>$3 = $4" assert params == ["param1", "param2", "key", "value"] @test("utility: build_metadata_filter_conditions with SQL injection attempts") async def _(): """Test that the build_metadata_filter_conditions prevents SQL injection.""" base_params = ["param1", "param2"] # Test with SQL injection attempts in metadata keys and values metadata_filters = [ {"key' OR 1=1--": "value"}, {"key": "value' OR 1=1--"}, {"key DROP TABLE users--": "value"}, {"key": "value'; DROP TABLE users--"}, {"key": "1' UNION SELECT * FROM users--"}, ] for metadata_filter in metadata_filters: conditions, params = build_metadata_filter_conditions(base_params, metadata_filter) # Each key-value pair should be properly parameterized, not included in the SQL directly for key, value in metadata_filter.items(): assert key in params # Key should be in params, not in SQL string assert value in params # Value should be in params, not in SQL string assert key not in conditions # Key should not be in the SQL string assert value not in conditions # Value should not be in the SQL string # The condition should only contain parameters, not the actual values for i in range(len(base_params) + 1, len(params) + 1): assert f"${i}" in conditions ================================================ FILE: src/agents-api/tests/test_middleware.py ================================================ """ Tests for HTTP middleware, specifically the usage_check_middleware """ import uuid from unittest.mock import AsyncMock, patch import asyncpg from agents_api.app import app from agents_api.clients.pg import create_db_pool from agents_api.env import free_tier_cost_limit from agents_api.queries.developers.create_developer import create_developer from fastapi import HTTPException, status from fastapi.testclient import TestClient from pydantic import BaseModel from uuid_extensions import uuid7 from ward import fixture, test from .fixtures import make_request, pg_dsn, test_agent, test_session class TestPayload(BaseModel): """Test payload for POST/PUT handlers.""" message: str @fixture def client(): """Test client fixture that gets reset for each test.""" client = TestClient(app) yield client @test("middleware: inactive free user receives forbidden response") async def _(client=client): """Test that requests from inactive users are blocked with 403 Forbidden.""" # Create a test handler @app.get("/test-inactive-user") async def test_inactive_user(): return {"status": "success"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": False, "cost": 0.0, "developer_id": developer_id, "tags": [], } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make request with the developer ID header response = client.get("/test-inactive-user", headers={"X-Developer-Id": developer_id}) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Invalid user account" in response.text assert "invalid_user_account" in response.text @test("middleware: inactive paid user receives forbidden response") def _(client=client): """Test that requests from inactive paid users are blocked with 403 Forbidden.""" # Create a test handler @app.get("/test-inactive-paid-user") async def test_inactive_paid_user(): return {"status": "success"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": False, "cost": 0.0, "developer_id": developer_id, "tags": ["paid"], # User has paid tag but is inactive } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make request with the developer ID header response = client.get( "/test-inactive-paid-user", headers={"X-Developer-Id": developer_id} ) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Invalid user account" in response.text assert "invalid_user_account" in response.text @test("middleware: cost limit exceeded, all requests blocked except GET") def _(client=client): """Test that non-GET requests from users who exceeded cost limits are blocked with 403 Forbidden.""" # Create test handlers for different methods @app.get("/test-cost-limit/get") async def test_cost_limit_get(): return {"status": "success", "method": "GET"} @app.post("/test-cost-limit/post") async def test_cost_limit_post(payload: TestPayload): return {"status": "success", "method": "POST", "message": payload.message} @app.put("/test-methods/put") async def test_methods_put(payload: TestPayload): return {"status": "success", "method": "PUT", "message": payload.message} @app.delete("/test-methods/delete") async def test_methods_delete(): return {"status": "success", "method": "DELETE"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": float(free_tier_cost_limit) + 1.0, # Exceed the cost limit "developer_id": developer_id, "tags": [], # No paid tag } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make a POST request that should be blocked post_response = client.post( "/test-cost-limit/post", json={"message": "test"}, headers={"X-Developer-Id": developer_id}, ) # Verify POST response is 403 with correct message assert post_response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in post_response.text assert "cost_limit_exceeded" in post_response.text put_response = client.put( "/test-methods/put", json={"message": "test update"}, headers={"X-Developer-Id": developer_id}, ) # Verify PUT response is 403 with correct message assert put_response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in put_response.text assert "cost_limit_exceeded" in put_response.text # Make a DELETE request that should be blocked delete_response = client.delete( "/test-methods/delete", headers={"X-Developer-Id": developer_id} ) # Verify DELETE response is 403 with correct message assert delete_response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in delete_response.text assert "cost_limit_exceeded" in delete_response.text # Make a GET request that should be allowed get_response = client.get( "/test-cost-limit/get", headers={"X-Developer-Id": developer_id} ) # Verify GET response passes through assert get_response.status_code == status.HTTP_200_OK assert get_response.json()["method"] == "GET" @test("middleware: paid tag bypasses cost limit check") def _(client=client): """Test that users with 'paid' tag can make non-GET requests even when over the cost limit.""" # Create test handlers for different methods @app.post("/test-paid/post") async def test_paid_post(payload: TestPayload): return {"status": "success", "method": "POST", "message": payload.message} @app.put("/test-paid-methods/put") async def test_paid_methods_put(payload: TestPayload): return {"status": "success", "method": "PUT", "message": payload.message} @app.delete("/test-paid-methods/delete") async def test_paid_methods_delete(): return {"status": "success", "method": "DELETE"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": float(free_tier_cost_limit) + 10.0, # Significantly exceed the cost limit "developer_id": developer_id, "tags": ["test", "paid", "other-tag"], # Include "paid" tag } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make a POST request that should be allowed due to paid tag response = client.post( "/test-paid/post", json={"message": "test"}, headers={"X-Developer-Id": developer_id}, ) # Verify the request was allowed assert response.status_code == status.HTTP_200_OK assert response.json()["method"] == "POST" assert response.json()["message"] == "test" put_response = client.put( "/test-paid-methods/put", json={"message": "test update"}, headers={"X-Developer-Id": developer_id}, ) # Verify the PUT request was allowed assert put_response.status_code == status.HTTP_200_OK assert put_response.json()["method"] == "PUT" # Make a DELETE request that should be allowed due to paid tag delete_response = client.delete( "/test-paid-methods/delete", headers={"X-Developer-Id": developer_id} ) # Verify the DELETE request was allowed assert delete_response.status_code == status.HTTP_200_OK assert delete_response.json()["method"] == "DELETE" @test("middleware: GET request with cost limit exceeded passes through") def _(client=client): """Test that GET requests from users who exceeded cost limits are allowed to proceed.""" # Create a test handler @app.get("/test-get-with-cost-limit") async def test_get_with_cost_limit(): return {"status": "success", "method": "GET"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": float(free_tier_cost_limit) + 1.0, # Exceed the cost limit "developer_id": developer_id, "tags": [], } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make a GET request response = client.get( "/test-get-with-cost-limit", headers={"X-Developer-Id": developer_id} ) # Verify the request was allowed assert response.status_code == status.HTTP_200_OK assert response.json()["method"] == "GET" @test("middleware: cost is None treats as exceeded limit") def _(client=client): """Test that non-GET requests with None cost value are treated as exceeding the limit.""" # Create a test handler @app.post("/test-none-cost") async def test_none_cost(payload: TestPayload): return {"status": "success", "method": "POST", "message": payload.message} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": None, "developer_id": developer_id, "tags": [], } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make a POST request response = client.post( "/test-none-cost", json={"message": "test"}, headers={"X-Developer-Id": developer_id}, ) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in response.text assert "cost_limit_exceeded" in response.text @test("middleware: null tags field handled properly") def _(client=client): """Test that users with null tags field are handled properly when over cost limit.""" # Create a test handler @app.post("/test-null-tags") async def test_null_tags(payload: TestPayload): return {"status": "success", "method": "POST", "message": payload.message} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": float(free_tier_cost_limit) + 5.0, # Exceed the cost limit "developer_id": developer_id, "tags": None, # Null field } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make a POST request response = client.post( "/test-null-tags", json={"message": "test"}, headers={"X-Developer-Id": developer_id}, ) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in response.text assert "cost_limit_exceeded" in response.text @test("middleware: no developer_id header passes through") def _(client=client): """Test that requests without a developer_id header are allowed to proceed.""" # Create a test handler @app.get("/test-no-developer-id") async def test_no_developer_id(): return {"status": "success", "message": "no developer ID needed"} # Make request with no developer ID header response = client.get("/test-no-developer-id") # Verify the request was allowed assert response.status_code == status.HTTP_200_OK assert response.json()["message"] == "no developer ID needed" @test("middleware: forbidden, if user is not found") def _(client=client): """Test that requests resulting in NoDataFoundError return 403.""" # Create a test handler @app.get("/test-user-not-found") async def test_user_not_found(): return {"status": "success", "message": "user found"} @app.get("/test-404-error") async def test_404_error(): return {"status": "success", "message": "no 404 error"} # Create a random developer ID developer_id = str(uuid.uuid4()) # Mock the get_user_cost function to raise NoDataFoundError with patch( "agents_api.web.get_usage_cost", new=AsyncMock(side_effect=asyncpg.NoDataFoundError()) ): # Make request with the developer ID header response = client.get("/test-user-not-found", headers={"X-Developer-Id": developer_id}) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Invalid user account" in response.text assert "invalid_user_account" in response.text # Mock the get_user_cost function to raise HTTPException with 404 http_404_error = HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Not found") with patch("agents_api.web.get_usage_cost", new=AsyncMock(side_effect=http_404_error)): # Make request with the developer ID header response = client.get("/test-404-error", headers={"X-Developer-Id": developer_id}) # Verify response is 403 with correct message assert response.status_code == status.HTTP_403_FORBIDDEN assert "Invalid user account" in response.text assert "invalid_user_account" in response.text @test("middleware: hand over all the http errors except of 404") def _(client=client): """Test that HTTP exceptions other than 404 return with correct status code.""" # Create a test handler @app.get("/test-500-error") async def test_500_error(): return {"status": "success", "message": "no 500 error"} # Create a random developer ID developer_id = str(uuid.uuid4()) # Mock the get_user_cost function to raise HTTPException with 500 http_500_error = HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Server error" ) with patch("agents_api.web.get_usage_cost", new=AsyncMock(side_effect=http_500_error)): # Make request with the developer ID header response = client.get("/test-500-error", headers={"X-Developer-Id": developer_id}) # Verify the response has the same status code as the exception assert response.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR @test("middleware: invalid uuid returns bad request") def _(client=client): """Test that requests with invalid UUID return 400 Bad Request.""" # Create a test handler @app.get("/test-invalid-uuid") async def test_invalid_uuid(): return {"status": "success", "message": "valid UUID"} # Make request with invalid UUID response = client.get( "/test-invalid-uuid", headers={"X-Developer-Id": "invalid-uuid"}, # Invalid UUID ) # Verify response is 400 with correct message assert response.status_code == status.HTTP_400_BAD_REQUEST assert "Invalid developer ID" in response.text assert "invalid_developer_id" in response.text @test("middleware: valid user passes through") def _(client=client): """Test that requests from valid users are allowed to proceed.""" # Create a test handler @app.get("/test-valid-user") async def test_valid_user(): return {"status": "success", "message": "valid user"} # Create test data developer_id = str(uuid.uuid4()) mock_user_cost_data = { "active": True, "cost": 0.0, # Below the limit "developer_id": developer_id, "tags": [], } # Mock the get_user_cost function with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Make request with the developer ID header response = client.get("/test-valid-user", headers={"X-Developer-Id": developer_id}) # Verify the request was allowed assert response.status_code == status.HTTP_200_OK assert response.json()["message"] == "valid user" @test("middleware: can't create session when cost limit is reached") async def _(make_request=make_request, dsn=pg_dsn, test_agent=test_agent): """Test that creating a session fails with 403 when cost limit is reached.""" # Create a real developer for this test with no paid tag pool = await create_db_pool(dsn=dsn) developer_id = uuid7() email = f"test-{developer_id}@example.com" await create_developer( email=email, active=True, tags=[], # Free tier user (no paid tag) settings={}, developer_id=developer_id, connection_pool=pool, ) # Mock the get_usage_cost function to simulate cost limit exceeded mock_user_cost_data = { "active": True, "cost": float(free_tier_cost_limit) + 1.0, # Exceed the cost limit "developer_id": developer_id, "tags": [], # No paid tag } # Use the mock for get_usage_cost with patch( "agents_api.web.get_usage_cost", new=AsyncMock(return_value=mock_user_cost_data) ): # Try to create a session - should fail with 403 response = make_request( method="POST", url="/sessions", json={"agent_id": str(test_agent.id)}, headers={"X-Developer-Id": str(developer_id)}, ) # Verify session creation was blocked assert response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in response.text assert "cost_limit_exceeded" in response.text @test("middleware: can't delete session when cost limit is reached") async def _(make_request=make_request, dsn=pg_dsn, test_session=test_session, agent=test_agent): """Test that deleting a session fails with 403 when cost limit is reached.""" # Create a real developer for this test with no paid tag pool = await create_db_pool(dsn=dsn) developer_id = uuid7() email = f"test-{developer_id}@example.com" await create_developer( email=email, active=True, tags=[], # Free tier user (no paid tag) settings={}, developer_id=developer_id, connection_pool=pool, ) # Mock the get_usage_cost function to return different values for different calls # First call should return under limit for session creation # Subsequent calls should return over limit for deletion mock_responses = [ # First response - under the limit (for session creation) { "active": True, "cost": float(free_tier_cost_limit) - 0.5, # Under the cost limit "developer_id": developer_id, "tags": [], }, # Second response - over the limit (for session deletion) { "active": True, "cost": float(free_tier_cost_limit) + 1.0, # Exceed the cost limit "developer_id": developer_id, "tags": [], }, ] mock_get_usage_cost = AsyncMock() mock_get_usage_cost.side_effect = mock_responses with patch("agents_api.web.get_usage_cost", new=mock_get_usage_cost): # First create a session when under the cost limit session_response = make_request( method="POST", url="/sessions", json={"agent": str(agent.id)}, headers={"X-Developer-Id": str(developer_id)}, ) assert session_response.status_code == status.HTTP_201_CREATED session_id = session_response.json()["id"] # Try to delete the session - should fail with 403 since cost is now over limit delete_response = make_request( method="DELETE", url=f"/sessions/{session_id}", headers={"X-Developer-Id": str(developer_id)}, ) # Verify session deletion was blocked assert delete_response.status_code == status.HTTP_403_FORBIDDEN assert "Cost limit exceeded" in delete_response.text assert "cost_limit_exceeded" in delete_response.text # Mock one more response for the GET request mock_get_usage_cost.side_effect = [ { "active": True, "cost": float(free_tier_cost_limit) + 1.0, # Still over the limit "developer_id": developer_id, "tags": [], } ] # But GET request should still work even when over cost limit get_response = make_request( method="GET", url=f"/sessions/{session_id}", headers={"X-Developer-Id": str(developer_id)}, ) # Verify GET request was allowed assert get_response.status_code == status.HTTP_200_OK ================================================ FILE: src/agents-api/tests/test_mmr.py ================================================ from uuid import UUID import numpy as np from agents_api.autogen.Docs import DocOwner, DocReference, Snippet from agents_api.common.utils.mmr import apply_mmr_to_docs from ward import test def create_test_doc(doc_id, embedding=None): """Helper function to create test document references""" return DocReference( id=UUID(doc_id) if isinstance(doc_id, str) else doc_id, owner=DocOwner(id=UUID("00000000-0000-0000-0000-000000000000"), role="agent"), snippet=Snippet( index=0, content=f"Test content {doc_id}", embedding=embedding.tolist() if isinstance(embedding, np.ndarray) else embedding, ), metadata={}, ) @test("utility: test to apply_mmr_to_docs") def _(): # Create test documents with embeddings docs = [ create_test_doc("550e8400-e29b-41d4-a716-446655440000", np.array([0.1, 0.2, 0.3])), create_test_doc("6ba7b810-9dad-11d1-80b4-00c04fd430c8", np.array([0.2, 0.3, 0.4])), create_test_doc("6ba7b811-9dad-11d1-80b4-00c04fd430c8", np.array([0.3, 0.4, 0.5])), create_test_doc("6ba7b812-9dad-11d1-80b4-00c04fd430c8", np.array([0.4, 0.5, 0.6])), create_test_doc("6ba7b813-9dad-11d1-80b4-00c04fd430c8", np.array([0.5, 0.6, 0.7])), create_test_doc("6ba7b814-9dad-11d1-80b4-00c04fd430c8", None), # Doc without embedding ] query_embedding = np.array([0.3, 0.3, 0.3]) # Test with MMR strength = 0.0 result = apply_mmr_to_docs(docs, query_embedding, limit=3, mmr_strength=0.0) assert len(result) == 3 # Test with not enough docs with embeddings (only 1, minimum required is 2 for MMR to work) docs_few_embeddings = [ create_test_doc("550e8400-e29b-41d4-a716-446655440000", np.array([0.1, 0.2, 0.3])), create_test_doc("6ba7b810-9dad-11d1-80b4-00c04fd430c8", None), create_test_doc("550e8400-e29b-41d4-a716-446655441122", np.array([0.11, 0.21, 0.31])), create_test_doc("6ba7b811-9dad-11d1-80b4-00c04fd430c8", None), ] # Will return the top k docs irrespective of MMR strength and presence of embeddings result = apply_mmr_to_docs(docs_few_embeddings, query_embedding, limit=2, mmr_strength=0.5) assert len(result) == 2 # Should only return docs with embeddings assert result[0].id == UUID("550e8400-e29b-41d4-a716-446655441122") assert result[1].id == UUID("550e8400-e29b-41d4-a716-446655440000") # Test with limit greater than available docs result = apply_mmr_to_docs(docs, query_embedding, limit=10, mmr_strength=0.5) assert len(result) == 5 # Only 5 docs have embeddings @test("utility: test mmr with different mmr_strength values") def _(): # Create test documents with embeddings docs = [ create_test_doc( UUID("550e8400-e29b-41d4-a716-446655440001"), np.array([0.9, 0.1, 0.1]) ), # Most similar to query create_test_doc( UUID("550e8400-e29b-41d4-a716-446655440002"), np.array([0.8, 0.1, 0.1]) ), # Second most similar create_test_doc( UUID("550e8400-e29b-41d4-a716-446655440003"), np.array([0.7, 0.1, 0.1]) ), # Third most similar create_test_doc( UUID("550e8400-e29b-41d4-a716-446655440004"), np.array([0.1, 0.9, 0.1]) ), # Very different from others create_test_doc( UUID("550e8400-e29b-41d4-a716-446655440005"), np.array([0.1, 0.1, 0.9]) ), # Very different from others ] query_embedding = np.array([1.0, 0.0, 0.0]) # With mmr_strength = 0, should return docs in order of similarity to query result_relevance = apply_mmr_to_docs(docs, query_embedding, limit=3, mmr_strength=0.0) assert len(result_relevance) == 3 assert result_relevance[0].id == UUID("550e8400-e29b-41d4-a716-446655440001") assert result_relevance[1].id == UUID("550e8400-e29b-41d4-a716-446655440002") assert result_relevance[2].id == UUID("550e8400-e29b-41d4-a716-446655440003") # With mmr_strength = 1, should prioritize diversity result_diverse = apply_mmr_to_docs(docs, query_embedding, limit=3, mmr_strength=1.0) assert len(result_diverse) == 3 # The first document should still be the most relevant one assert result_diverse[0].id == UUID("550e8400-e29b-41d4-a716-446655440001") # But the next ones should be diverse assert UUID("550e8400-e29b-41d4-a716-446655440004") in [doc.id for doc in result_diverse] assert UUID("550e8400-e29b-41d4-a716-446655440005") in [doc.id for doc in result_diverse] @test("utility: test mmr with empty docs list") def _(): query_embedding = np.array([0.3, 0.3, 0.3]) # Test with empty docs list result = apply_mmr_to_docs([], query_embedding, limit=3, mmr_strength=0.5) assert len(result) == 0 # Test with all docs having no embeddings docs_no_embeddings = [ create_test_doc(UUID("550e8400-e29b-41d4-a716-446655440001"), None), create_test_doc(UUID("550e8400-e29b-41d4-a716-446655440002"), None), create_test_doc(UUID("550e8400-e29b-41d4-a716-446655440003"), None), ] # Will return the top limit docs without MMR since no embeddings are present result = apply_mmr_to_docs(docs_no_embeddings, query_embedding, limit=1, mmr_strength=0.5) assert len(result) == 1 ================================================ FILE: src/agents-api/tests/test_model_validation.py ================================================ from unittest.mock import patch from agents_api.routers.utils.model_validation import validate_model from fastapi import HTTPException from ward import raises, test from tests.fixtures import SAMPLE_MODELS @test("validate_model: succeeds when model is available in model list") async def _(): # Use async context manager for patching with patch("agents_api.common.utils.model_validation.get_model_list") as mock_get_models: mock_get_models.return_value = SAMPLE_MODELS await validate_model("gpt-4o-mini") mock_get_models.assert_called_once() @test("validate_model: fails when model is unavailable in model list") async def _(): with patch("agents_api.common.utils.model_validation.get_model_list") as mock_get_models: mock_get_models.return_value = SAMPLE_MODELS with raises(HTTPException) as exc: await validate_model("non-existent-model") assert exc.raised.status_code == 400 assert "Model non-existent-model not available" in exc.raised.detail mock_get_models.assert_called_once() @test("validate_model: fails when model is None") async def _(): with patch("agents_api.common.utils.model_validation.get_model_list") as mock_get_models: mock_get_models.return_value = SAMPLE_MODELS with raises(HTTPException) as exc: await validate_model(None) assert exc.raised.status_code == 400 assert "Model None not available" in exc.raised.detail ================================================ FILE: src/agents-api/tests/test_nlp_utilities.py ================================================ import spacy from agents_api.common.nlp import clean_keyword, extract_keywords, text_to_keywords from ward import test @test("utility: clean_keyword") async def _(): assert clean_keyword("Hello, World!") == "Hello World" # Basic cleaning # assert clean_keyword("test@example.com") == "test example com" assert clean_keyword("user-name_123") == "user-name_123" assert clean_keyword(" spaces ") == "spaces" # Special characters assert clean_keyword("$price: 100%") == "price 100" assert clean_keyword("#hashtag!") == "hashtag" # Multiple spaces and punctuation assert clean_keyword("multiple, spaces...") == "multiple spaces" # Empty and whitespace assert clean_keyword("") == "" assert clean_keyword(" ") == "" assert clean_keyword("- try") == "try" @test("utility: extract_keywords - split_chunks=False") async def _(): nlp = spacy.load("en_core_web_sm", exclude=["lemmatizer", "textcat"]) doc = nlp("John Doe is a software engineer at Google.") assert set(extract_keywords(doc, split_chunks=False)) == { "John Doe", "a software engineer", "Google", } @test("utility: extract_keywords - split_chunks=True") async def _(): nlp = spacy.load("en_core_web_sm", exclude=["lemmatizer", "textcat"]) doc = nlp("John Doe is a software engineer at Google.") assert set(extract_keywords(doc, split_chunks=True)) == { "John Doe", "a", "software", "engineer", "Google", } @test("utility: text_to_keywords - split_chunks=False") async def _(): test_cases = [ # Single words ("test", {"test"}), # Multiple words in single sentence ( "quick brown fox", {"quick brown fox"}, # Now kept as a single phrase due to proximity ), # Technical terms and phrases ( "Machine Learning algorithm", {"Machine Learning algorithm"}, # Common technical phrase ), # Multiple sentences ( "I love basketball especially Michael Jordan. LeBron James is also great.", {"basketball", "LeBron James", "Michael Jordan"}, ), # Quoted phrases ( '"quick brown fox"', {"quick brown fox"}, # Quotes removed, phrase kept together ), ('Find "machine learning" algorithms', {"machine learning"}), # Multiple quoted phrases ('"data science" and "machine learning"', {"machine learning", "data science"}), # Edge cases ("", set()), ( "the and or", set(), # All stop words should result in empty string ), ( "a", set(), # Single stop word should result in empty string ), ("X", set()), # Empty quotes ('""', set()), ('test "" phrase', {"phrase", "test"}), ( "John Doe is a software engineer at Google.", {"Google", "John Doe", "a software engineer"}, ), ("- Google", {"Google"}), # Test duplicate keyword handling ( "John Doe is great. John Doe is awesome.", {"John Doe"}, # Should only include "John Doe" once ), ( "Software Engineer at Google. Also, a Software Engineer.", {"Google", "Also a Software Engineer", "Software Engineer"}, ), ] for input_text, expected_output in test_cases: print(f"Input: '{input_text}'") result = text_to_keywords(input_text, split_chunks=False) print(f"Generated query: '{result}'") print(f"Expected: '{expected_output}'\n") assert result == expected_output, ( f"Expected terms {expected_output} but got {result} for input '{input_text}'" ) @test("utility: text_to_keywords - split_chunks=True") async def _(): test_cases = [ # Single words ("test", {"test"}), # Multiple words in single sentence ( "quick brown fox", {"quick", "brown", "fox"}, # Now kept as a single phrase due to proximity ), # Technical terms and phrases ( "Machine Learning algorithm", {"Machine", "Learning", "algorithm"}, # Common technical phrase ), # Multiple sentences ( "I love basketball especially Michael Jordan. LeBron James is also great.", {"basketball", "LeBron James", "Michael Jordan"}, ), # Quoted phrases ( '"quick brown fox"', {"quick", "brown", "fox"}, # Quotes removed, phrase kept together ), ('Find "machine learning" algorithms', {"machine", "learning"}), # Multiple quoted phrases ('"data science" and "machine learning"', {"machine", "learning", "data", "science"}), # Edge cases ("", set()), ( "the and or", set(), # All stop words should result in empty string ), ( "a", set(), # Single stop word should result in empty string ), ("X", set()), # Empty quotes ('""', set()), ('test "" phrase', {"phrase", "test"}), ( "John Doe is a software engineer at Google.", {"Google", "John Doe", "software", "engineer"}, ), # Test duplicate keyword handling ( "John Doe is great. John Doe is awesome.", {"John Doe"}, # Should only include "John Doe" once even with split_chunks=True ), ( "Software Engineer at Google. Also, a Software Engineer.", {"Also", "Google", "Software", "Engineer"}, # When split, each word appears once ), ] for input_text, expected_output in test_cases: print(f"Input: '{input_text}'") result = text_to_keywords(input_text, split_chunks=True) print(f"Generated query: '{result}'") print(f"Expected: '{expected_output}'\n") assert result == expected_output, ( f"Expected terms {expected_output} but got {result} for input '{input_text}'" ) ================================================ FILE: src/agents-api/tests/test_pg_query_step.py ================================================ from unittest.mock import AsyncMock, MagicMock, patch from agents_api.activities.pg_query_step import pg_query_step from ward import test @test("pg_query_step correctly calls the specified query") async def _(): # Patch the relevant modules and functions with ( patch("agents_api.activities.pg_query_step.queries") as mock_queries, ): # Create a mock query function that will be returned by getattr mock_query = AsyncMock(return_value={"result": "test"}) # Set up module resolution chain: queries -> test_module -> test_file -> test_query mock_test_file = MagicMock() mock_test_file.test_query = mock_query mock_test_module = MagicMock() mock_test_module.test_file = mock_test_file # Configure the queries module to return our mock module mock_queries.test_module = mock_test_module # Call the function with a query in the format "module_name.query_name" result = await pg_query_step( query_name="test_query", file_name="test_module.test_file", values={"param1": "value1"}, ) # Verify the query was called with the expected arguments mock_query.assert_called_once_with(param1="value1") # Verify the function returns the result from the query assert result == {"result": "test"} @test("pg_query_step raises exception for invalid query name format") async def _(): # Try with an invalid query name (no dot separator) try: await pg_query_step( query_name="invalid_query_name", file_name="invalid_file_name", values={} ) assert False, "Expected an exception but none was raised" except ValueError: # Expected behavior - ValueError should be raised pass except Exception as e: assert False, f"Expected ValueError but got {type(e).__name__}" @test("pg_query_step propagates exceptions from the underlying query") async def _(): # Patch the relevant modules and functions with patch("agents_api.activities.pg_query_step.queries") as mock_queries: # Create a mock query function that raises an exception mock_query = AsyncMock(side_effect=Exception("Test query error")) # Set up module resolution chain: queries -> test_module -> test_file -> test_query mock_test_file = MagicMock() mock_test_file.test_query = mock_query mock_test_module = MagicMock() mock_test_module.test_file = mock_test_file # Configure the queries module to return our mock module mock_queries.test_module = mock_test_module # Call the function and expect an exception try: await pg_query_step( query_name="test_query", file_name="test_module.test_file", values={}, ) assert False, "Expected an exception but none was raised" except Exception as e: # Verify the exception is propagated assert str(e) == "Test query error" ================================================ FILE: src/agents-api/tests/test_prepare_for_step.py ================================================ import uuid from unittest.mock import patch from agents_api.autogen.openapi_model import ( Agent, Execution, TaskSpecDef, ToolCallStep, Transition, TransitionTarget, Workflow, ) from agents_api.clients.pg import create_db_pool from agents_api.common.protocol.tasks import ( ExecutionInput, StepContext, ) from agents_api.common.utils.datetime import utcnow from agents_api.common.utils.expressions import evaluate_expressions from agents_api.common.utils.workflows import get_workflow_name from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import pg_dsn from tests.utils import generate_transition async def base_evaluate_with_pool( exprs, context=None, values=None, extra_lambda_strs=None, connection_pool=None, ): """Custom base_evaluate that uses connection_pool for prepare_for_step""" if context is None and values is None: msg = "Either context or values must be provided" raise ValueError(msg) values = values or {} if context: # Pass the connection_pool to prepare_for_step values.update(await context.prepare_for_step(limit=50, connection_pool=connection_pool)) return evaluate_expressions(exprs, values=values, extra_lambda_strs=extra_lambda_strs) @test("utility: prepare_for_step - underscore") async def _(dsn=pg_dsn): # Add dsn parameter pool = await create_db_pool(dsn=dsn) with patch( "agents_api.common.protocol.tasks.StepContext.get_inputs", return_value=( [{"x": "1"}, {"y": "2"}, {"z": "3"}], [None, "first step", "second step"], {}, ), ): step = ToolCallStep(tool="tool1") context = StepContext( execution_input=ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ), current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) result = await context.prepare_for_step(connection_pool=pool) assert result["_"] == {"current_input": "value 1"} @test("utility: prepare_for_step - label lookup in step") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) with patch( "agents_api.common.protocol.tasks.StepContext.get_inputs", return_value=( [{"x": "1"}, {"y": "2"}, {"z": "3"}], [None, "first step", "second step"], {}, ), ): step = ToolCallStep(tool="tool1") context = StepContext( execution_input=ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ), current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) result = await context.prepare_for_step(connection_pool=pool) assert result["steps"]["first step"]["input"] == {"x": "1"} assert result["steps"]["first step"]["output"] == {"y": "2"} assert result["steps"]["second step"]["input"] == {"y": "2"} assert result["steps"]["second step"]["output"] == {"z": "3"} @test("utility: prepare_for_step - global state") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) with patch( "agents_api.common.protocol.tasks.StepContext.get_inputs", return_value=([], [], {"user_name": "John", "count": 10, "has_data": True}), ): step = ToolCallStep(tool="tool1") context = StepContext( execution_input=ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ), current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) result = await context.prepare_for_step(connection_pool=pool) assert result["state"]["user_name"] == "John" assert result["state"]["count"] == 10 assert result["state"]["has_data"] is True @test("utility: get_workflow_name") async def _(dsn=pg_dsn): await create_db_pool(dsn=dsn) transition = Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), output=None, created_at=utcnow(), updated_at=utcnow(), type="step", current=TransitionTarget(workflow="main", step=0, scope_id=uuid.uuid4()), next=TransitionTarget(workflow="main", step=1, scope_id=uuid.uuid4()), ) transition.current = TransitionTarget(workflow="main", step=0, scope_id=uuid.uuid4()) transition.next = TransitionTarget(workflow="main", step=1, scope_id=uuid.uuid4()) assert get_workflow_name(transition) == "main" transition.current = TransitionTarget( workflow="`main`[0].if_else.then", step=0, scope_id=uuid.uuid4(), ) transition.next = None assert get_workflow_name(transition) == "main" transition.current = TransitionTarget(workflow="subworkflow", step=0, scope_id=uuid.uuid4()) transition.next = TransitionTarget(workflow="subworkflow", step=1, scope_id=uuid.uuid4()) assert get_workflow_name(transition) == "subworkflow" transition.current = TransitionTarget( workflow="`subworkflow`[0].if_else.then", step=0, scope_id=uuid.uuid4(), ) transition.next = TransitionTarget( workflow="`subworkflow`[0].if_else.else", step=1, scope_id=uuid.uuid4(), ) assert get_workflow_name(transition) == "subworkflow" transition.current = TransitionTarget( workflow="PAR:`main`[2].mapreduce[0][2],0", step=0, scope_id=uuid.uuid4(), ) transition.next = None assert get_workflow_name(transition) == "main" transition.current = TransitionTarget( workflow="PAR:`subworkflow`[2].mapreduce[0][3],0", step=0, scope_id=uuid.uuid4(), ) transition.next = None assert get_workflow_name(transition) == "subworkflow" @test("utility: get_workflow_name - raises") async def _(dsn=pg_dsn): await create_db_pool(dsn=dsn) transition = Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), output=None, created_at=utcnow(), updated_at=utcnow(), type="step", current=TransitionTarget(workflow="main", step=0, scope_id=uuid.uuid4()), next=TransitionTarget(workflow="main", step=1, scope_id=uuid.uuid4()), ) with raises(AssertionError): transition.current = TransitionTarget( workflow="`main[2].mapreduce[0][2],0", step=0, scope_id=uuid.uuid4(), ) get_workflow_name(transition) with raises(AssertionError): transition.current = TransitionTarget(workflow="PAR:`", step=0, scope_id=uuid.uuid4()) get_workflow_name(transition) with raises(AssertionError): transition.current = TransitionTarget(workflow="`", step=0, scope_id=uuid.uuid4()) get_workflow_name(transition) with raises(AssertionError): transition.current = TransitionTarget( workflow="PAR:`subworkflow[2].mapreduce[0][3],0", step=0, scope_id=uuid.uuid4(), ) get_workflow_name(transition) @test("utility: get_inputs - 2 parallel subworkflows") async def _(dsn=pg_dsn): await create_db_pool(dsn=dsn) uuid7() subworkflow1_scope_id = uuid7() subworkflow2_scope_id = uuid7() transition1 = generate_transition( type="init_branch", output={"b": 1}, current_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow1_scope_id, ), next_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow1_scope_id, ), ) transition2 = generate_transition( type="step", output={"c": 1}, current_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow1_scope_id, ), next_step=TransitionTarget( workflow="subworkflow", step=1, scope_id=subworkflow1_scope_id, ), ) subworkflow1_transitions = [transition1, transition2] transition3 = generate_transition( type="init_branch", output={"b": 2}, current_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow2_scope_id, ), next_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow2_scope_id, ), ) transition4 = generate_transition( type="step", output={"c": 2}, current_step=TransitionTarget( workflow="subworkflow", step=0, scope_id=subworkflow2_scope_id, ), next_step=TransitionTarget( workflow="subworkflow", step=1, scope_id=subworkflow2_scope_id, ), ) subworkflow2_transitions = [transition3, transition4] step = ToolCallStep(tool="tool1") context = StepContext( execution_input=ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), task_id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), status="running", input={}, ), ), current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="subworkflow", step=1, scope_id=uuid7(), ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", return_value=subworkflow1_transitions, ), patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): context.cursor.scope_id = subworkflow1_scope_id inputs, labels, state = await context.get_inputs() assert inputs == [{"b": 1}, {"c": 1}] assert labels == [None, None] assert state == {} with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", return_value=subworkflow2_transitions, ), patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): context.cursor.scope_id = subworkflow2_scope_id inputs, labels, state = await context.get_inputs() assert inputs == [{"b": 2}, {"c": 2}] assert labels == [None, None] assert state == {} ================================================ FILE: src/agents-api/tests/test_prompt_step_auto_tools.py ================================================ from unittest.mock import AsyncMock, patch from uuid import uuid4 from agents_api.activities.task_steps.prompt_step import prompt_step from agents_api.autogen.openapi_model import ( Agent, CreateToolRequest, FunctionDef, PromptStep, TaskSpecDef, TransitionTarget, Workflow, ) from agents_api.common.protocol.tasks import ExecutionInput, StepContext from agents_api.common.utils.datetime import utcnow from ward import test # Define the mock function once at module level def mock_base_evaluate(value, context): """Mock base_evaluate to return appropriate types based on input""" if isinstance(value, dict): # For passed_settings, return the dict unchanged return value # For prompt strings, return the string return "Test prompt" @test("prompt_step uses auto tool calls when feature flag is enabled") async def _(): tool = CreateToolRequest( name="test_tool", type="function", function=FunctionDef( parameters={"type": "object", "properties": {"param": {"type": "string"}}}, ), description="Test function", ) # Mock feature flag to be enabled with ( patch( "agents_api.activities.task_steps.prompt_step.get_feature_flag_value" ) as mock_flag, patch( "agents_api.activities.task_steps.prompt_step.base_evaluate", side_effect=mock_base_evaluate, ), patch( "agents_api.activities.task_steps.prompt_step.run_llm_with_tools", new_callable=AsyncMock, ) as mock_run_llm, ): mock_flag.return_value = True mock_run_llm.return_value = [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response"}, ] # Create proper StepContext with real objects # Note: auto_run_tools defaults to False now, so we need to explicitly set it to True step = PromptStep(prompt="Test prompt", unwrap=False, auto_run_tools=True) execution_input = ExecutionInput( developer_id=uuid4(), agent=Agent( id=uuid4(), name="test_agent", model="gpt-4", default_settings={"temperature": 0.7}, created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="test_task", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="test input", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid4(), ), ) # Mock the tools method on the StepContext class - need to accept self parameter async def mock_tools_method(self): return [tool] with patch.object(StepContext, "tools", mock_tools_method): # Run the activity result = await prompt_step(context) # Verify run_llm_with_tools was called mock_run_llm.assert_called_once() call_args = mock_run_llm.call_args assert call_args[1]["messages"] == [{"role": "user", "content": "Test prompt"}] assert len(call_args[1]["tools"]) == 1 assert call_args[1]["tools"][0].name == "test_tool" # Check result assert result.output == [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response"}, ] @test("prompt_step with auto tools handles unwrap correctly") async def _(): # Mock feature flag to be enabled with ( patch( "agents_api.activities.task_steps.prompt_step.get_feature_flag_value" ) as mock_flag, patch( "agents_api.activities.task_steps.prompt_step.base_evaluate", side_effect=mock_base_evaluate, ), patch( "agents_api.activities.task_steps.prompt_step.run_llm_with_tools", new_callable=AsyncMock, ) as mock_run_llm, ): mock_flag.return_value = True mock_run_llm.return_value = [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Unwrapped response", "tool_calls": None}, ] # Create proper StepContext with real objects # Note: auto_run_tools defaults to False now, so we need to explicitly set it to True for this test step = PromptStep(prompt="Test prompt", unwrap=True, auto_run_tools=True) execution_input = ExecutionInput( developer_id=uuid4(), agent=Agent( id=uuid4(), name="test_agent", model="gpt-4", default_settings={}, created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="test_task", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="test input", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid4(), ), ) # Mock the tools method on the StepContext class - need to accept self parameter async def mock_tools_method(self): return [] with patch.object(StepContext, "tools", mock_tools_method): # Run the activity result = await prompt_step(context) # Check that output is unwrapped assert result.output == "Unwrapped response" @test("prompt_step with auto_run_tools=False passes empty tools list") async def _(): tool = CreateToolRequest( name="test_tool", type="function", function=FunctionDef( parameters={"type": "object", "properties": {"param": {"type": "string"}}}, ), description="Test function", ) # Mock feature flag to be enabled with ( patch( "agents_api.activities.task_steps.prompt_step.get_feature_flag_value" ) as mock_flag, patch( "agents_api.activities.task_steps.prompt_step.base_evaluate", side_effect=mock_base_evaluate, ), patch( "agents_api.activities.task_steps.prompt_step.run_llm_with_tools", new_callable=AsyncMock, ) as mock_run_llm, ): mock_flag.return_value = True mock_run_llm.return_value = [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response without tools"}, ] # Create prompt step with auto_run_tools=False step = PromptStep(prompt="Test prompt", unwrap=False, auto_run_tools=False) execution_input = ExecutionInput( developer_id=uuid4(), agent=Agent( id=uuid4(), name="test_agent", model="gpt-4", default_settings={"temperature": 0.7}, created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="test_task", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="test input", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid4(), ), ) # Mock the tools method to return a tool async def mock_tools_method(self): return [tool] with patch.object(StepContext, "tools", mock_tools_method): # Run the activity result = await prompt_step(context) # Verify run_llm_with_tools was called with empty tools list mock_run_llm.assert_called_once() call_args = mock_run_llm.call_args assert call_args[1]["messages"] == [{"role": "user", "content": "Test prompt"}] # IMPORTANT: Verify empty tools list was passed assert call_args[1]["tools"] == [] # Check result assert result.output == [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response without tools"}, ] @test("prompt_step with auto_run_tools=True passes all available tools") async def _(): tool1 = CreateToolRequest( name="tool1", type="function", function=FunctionDef( parameters={"type": "object", "properties": {"param": {"type": "string"}}}, ), description="Test function 1", ) tool2 = CreateToolRequest( name="tool2", type="function", function=FunctionDef( parameters={"type": "object", "properties": {"param": {"type": "number"}}}, ), description="Test function 2", ) # Mock feature flag to be enabled with ( patch( "agents_api.activities.task_steps.prompt_step.get_feature_flag_value" ) as mock_flag, patch( "agents_api.activities.task_steps.prompt_step.base_evaluate", side_effect=mock_base_evaluate, ), patch( "agents_api.activities.task_steps.prompt_step.run_llm_with_tools", new_callable=AsyncMock, ) as mock_run_llm, ): mock_flag.return_value = True mock_run_llm.return_value = [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response with tools"}, ] # Create prompt step with auto_run_tools=True (default) step = PromptStep(prompt="Test prompt", unwrap=False, auto_run_tools=True) execution_input = ExecutionInput( developer_id=uuid4(), agent=Agent( id=uuid4(), name="test_agent", model="gpt-4", default_settings={"temperature": 0.7}, created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, task=TaskSpecDef( name="test_task", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="test input", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid4(), ), ) # Mock the tools method to return multiple tools async def mock_tools_method(self): return [tool1, tool2] with patch.object(StepContext, "tools", mock_tools_method): # Run the activity result = await prompt_step(context) # Verify run_llm_with_tools was called with all tools mock_run_llm.assert_called_once() call_args = mock_run_llm.call_args assert call_args[1]["messages"] == [{"role": "user", "content": "Test prompt"}] # IMPORTANT: Verify all tools were passed assert len(call_args[1]["tools"]) == 2 assert call_args[1]["tools"][0].name == "tool1" assert call_args[1]["tools"][1].name == "tool2" # Check result assert result.output == [ {"role": "user", "content": "Test prompt"}, {"role": "assistant", "content": "Test response with tools"}, ] ================================================ FILE: src/agents-api/tests/test_query_utils.py ================================================ from agents_api.queries.utils import sanitize_string from ward import test @test("utility: sanitize_string - strings") def _(): # Test basic string sanitization assert sanitize_string("test\u0000string") == "teststring" assert sanitize_string("normal string") == "normal string" assert sanitize_string("multiple\u0000null\u0000chars") == "multiplenullchars" assert sanitize_string("") == "" assert sanitize_string(None) is None @test("utility: sanitize_string - nested data structures") def _(): # Test dictionary sanitization test_dict = { "key1": "value\u0000", "key2": ["item\u00001", "item2"], "key3": {"nested_key": "nested\u0000value"}, } expected_dict = { "key1": "value", "key2": ["item1", "item2"], "key3": {"nested_key": "nestedvalue"}, } assert sanitize_string(test_dict) == expected_dict # Test list sanitization test_list = ["item\u00001", {"key": "value\u0000"}, ["nested\u0000item"]] expected_list = ["item1", {"key": "value"}, ["nesteditem"]] assert sanitize_string(test_list) == expected_list # Test tuple sanitization test_tuple = ("item\u00001", "item2") expected_tuple = ("item1", "item2") assert sanitize_string(test_tuple) == expected_tuple @test("utility: sanitize_string - non-string types") def _(): # Test non-string types assert sanitize_string(123) == 123 assert sanitize_string(123.45) == 123.45 assert sanitize_string(True) is True assert sanitize_string(False) is False ================================================ FILE: src/agents-api/tests/test_secrets_queries.py ================================================ """Tests for secrets queries.""" from uuid import uuid4 from agents_api.autogen.openapi_model import Secret from agents_api.clients.pg import create_db_pool from agents_api.queries.secrets.create import create_secret from agents_api.queries.secrets.delete import delete_secret from agents_api.queries.secrets.get_by_name import get_secret_by_name from agents_api.queries.secrets.list import list_secrets from agents_api.queries.secrets.update import update_secret from ward import test from tests.fixtures import clean_secrets, pg_dsn, test_developer_id @test("query: create secret") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create secret with both developer_id agent_secret_data = { "name": "agent_api_key", "description": "An agent-specific API key", "value": "sk_agent_12345", "metadata": {"service": "agent_service", "environment": "test"}, } agent_secret = await create_secret( developer_id=developer_id, name=agent_secret_data["name"], description=agent_secret_data["description"], value=agent_secret_data["value"], metadata=agent_secret_data["metadata"], connection_pool=pool, ) assert agent_secret is not None assert isinstance(agent_secret, Secret) assert agent_secret.name == agent_secret_data["name"] assert agent_secret.value == "ENCRYPTED" @test("query: list secrets") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create test secrets first - use unique but valid identifiers secret_name1 = f"list_test_key_a{uuid4().hex[:6]}" secret_name2 = f"list_test_key_b{uuid4().hex[:6]}" await create_secret( developer_id=developer_id, name=secret_name1, description="Test secret 1 for listing", value="sk_test_list_1", connection_pool=pool, ) await create_secret( developer_id=developer_id, name=secret_name2, description="Test secret 2 for listing", value="sk_test_list_2", connection_pool=pool, ) # Test listing developer secrets secrets = await list_secrets( developer_id=developer_id, decrypt=True, connection_pool=pool, ) assert secrets is not None assert isinstance(secrets, list) assert len(secrets) == 2 assert all(isinstance(secret, Secret) for secret in secrets) # Check if our test secrets are in the list created_secret_names = {secret.name for secret in secrets} assert secret_name1 in created_secret_names assert secret_name2 in created_secret_names # Check if the values are decrypted assert any(secret.value == "sk_test_list_1" for secret in secrets) assert any(secret.value == "sk_test_list_2" for secret in secrets) @test("query: list secrets (decrypt=False)") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create test secrets first - use unique but valid identifiers secret_name1 = f"list_test_key_a{uuid4().hex[:6]}" secret_name2 = f"list_test_key_b{uuid4().hex[:6]}" await create_secret( developer_id=developer_id, name=secret_name1, description="Test secret 1 for listing", value="sk_test_list_1", connection_pool=pool, ) await create_secret( developer_id=developer_id, name=secret_name2, description="Test secret 2 for listing", value="sk_test_list_2", connection_pool=pool, ) # Test listing developer secrets secrets = await list_secrets( developer_id=developer_id, decrypt=False, connection_pool=pool, ) assert secrets is not None assert isinstance(secrets, list) assert len(secrets) > 0 assert all(isinstance(secret, Secret) for secret in secrets) # Check if our test secrets are in the list created_secret_names = {secret.name for secret in secrets} assert secret_name1 in created_secret_names assert secret_name2 in created_secret_names # Check if the values are encrypted assert all(secret.value == "ENCRYPTED" for secret in secrets) @test("query: get secret by name") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create a test secret first secret_name = f"get_test_key_a{uuid4().hex[:6]}" await create_secret( developer_id=developer_id, name=secret_name, description="Test secret for get by name", value="sk_get_test_1", connection_pool=pool, ) # Get the secret by name retrieved_secret = await get_secret_by_name( developer_id=developer_id, name=secret_name, decrypt=True, connection_pool=pool, ) assert retrieved_secret is not None assert isinstance(retrieved_secret, Secret) assert retrieved_secret.name == secret_name assert retrieved_secret.value == "sk_get_test_1" @test("query: get secret by name (decrypt=False)") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create a test secret first secret_name = f"get_test_key_a{uuid4().hex[:6]}" await create_secret( developer_id=developer_id, name=secret_name, description="Test secret for get by name", value="sk_get_test_1", connection_pool=pool, ) # Get the secret by name retrieved_secret = await get_secret_by_name( developer_id=developer_id, name=secret_name, decrypt=False, connection_pool=pool, ) assert retrieved_secret is not None assert isinstance(retrieved_secret, Secret) assert retrieved_secret.name == secret_name assert retrieved_secret.value == "ENCRYPTED" @test("query: update secret") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create a test secret first original_name = f"update_test_key_a{uuid4().hex[:6]}" original_secret = await create_secret( developer_id=developer_id, name=original_name, description="Original description", value="original_value", metadata={"original": True}, connection_pool=pool, ) # Update the secret updated_name = f"updated_key_b{uuid4().hex[:6]}" updated_description = "Updated description" updated_value = "updated_value" updated_metadata = {"updated": True, "timestamp": "now"} updated_secret = await update_secret( secret_id=original_secret.id, developer_id=developer_id, name=updated_name, description=updated_description, value=updated_value, metadata=updated_metadata, connection_pool=pool, ) assert updated_secret is not None assert isinstance(updated_secret, Secret) assert updated_secret.id == original_secret.id assert updated_secret.name == updated_name assert updated_secret.description == updated_description assert updated_secret.value == "ENCRYPTED" assert updated_secret.metadata == updated_metadata # Test partial update (only update some fields) partial_description = "Partially updated description" partial_update = await update_secret( secret_id=original_secret.id, developer_id=developer_id, description=partial_description, connection_pool=pool, ) assert partial_update is not None assert partial_update.name == updated_name # Should remain from previous update assert partial_update.description == partial_description # Should be updated assert partial_update.value == "ENCRYPTED" # Should remain from previous update assert partial_update.metadata == updated_metadata # Should remain from previous update @test("query: delete secret") async def _(clean_secrets=clean_secrets, dsn=pg_dsn, developer_id=test_developer_id): pool = await create_db_pool(dsn=dsn) # Create a test secret first delete_test_name = f"delete_test_key_a{uuid4().hex[:6]}" test_secret = await create_secret( developer_id=developer_id, name=delete_test_name, description="Secret to be deleted", value="delete_me", connection_pool=pool, ) # Delete the secret delete_result = await delete_secret( secret_id=test_secret.id, developer_id=developer_id, connection_pool=pool, ) assert delete_result is not None assert delete_result.id == test_secret.id # Verify the secret is deleted by listing secrets = await list_secrets( developer_id=developer_id, connection_pool=pool, ) # Make sure our deleted secret is not in the list assert not any(secret.id == test_secret.id for secret in secrets) # Create and delete an agent-specific secret agent_secret_name = f"agent_delete_test_b{uuid4().hex[:6]}" agent_secret = await create_secret( developer_id=developer_id, name=agent_secret_name, description="Agent secret to be deleted", value="agent_delete_me", connection_pool=pool, ) # Delete with developer_id agent_delete_result = await delete_secret( secret_id=agent_secret.id, developer_id=developer_id, connection_pool=pool, ) assert agent_delete_result is not None assert agent_delete_result.id == agent_secret.id ================================================ FILE: src/agents-api/tests/test_secrets_routes.py ================================================ """Tests for secrets routes.""" from uuid import uuid4 from ward import test from tests.fixtures import client, make_request, test_developer_id @test("route: unauthorized secrets route should fail") def _(client=client): data = { "name": f"test_secret_{uuid4().hex[:8]}", "description": "Test secret for listing", "value": "sk_list_test_123456789", } # Try to access secrets without auth response = client.request( method="GET", url="/secrets", json=data, ) assert response.status_code == 403 @test("route: create secret") def _(make_request=make_request, developer_id=test_developer_id): data = { "developer_id": str(developer_id), "name": f"test_secret_{uuid4().hex[:8]}", "description": "Test secret for API integration", "value": "sk_test_123456789", "metadata": {"service": "test-service", "environment": "test"}, } response = make_request( method="POST", url="/secrets", json=data, ) assert response.status_code == 201 result = response.json() assert result["name"] == data["name"] assert result["description"] == data["description"] # Value should be encrypted in response assert result["value"] == "ENCRYPTED" assert result["metadata"] == data["metadata"] @test("route: list secrets") def _(make_request=make_request, developer_id=test_developer_id): # First create a secret to ensure we have something to list secret_name = f"list_test_secret_{uuid4().hex[:8]}" data = { "developer_id": str(developer_id), "name": secret_name, "description": "Test secret for listing", "value": "sk_list_test_123456789", "metadata": {"service": "test-service", "environment": "test"}, } make_request( method="POST", url="/secrets", json=data, ) # Now list secrets response = make_request( method="GET", url="/secrets", ) assert response.status_code == 200 secrets = response.json() assert isinstance(secrets, list) assert len(secrets) > 0 # Find our test secret assert any(secret["name"] == secret_name for secret in secrets) assert all(secret["value"] == "ENCRYPTED" for secret in secrets) @test("route: update secret") def _(make_request=make_request, developer_id=test_developer_id): # First create a secret original_name = f"update_test_secret_{uuid4().hex[:8]}" create_data = { "developer_id": str(developer_id), "name": original_name, "description": "Original description", "value": "sk_original_value", "metadata": {"original": True}, } create_response = make_request( method="POST", url="/secrets", json=create_data, ) secret_id = create_response.json()["id"] # Now update it updated_name = f"updated_secret_{uuid4().hex[:8]}" update_data = { "developer_id": str(developer_id), "name": updated_name, "description": "Updated description", "value": "sk_updated_value", "metadata": {"updated": True, "timestamp": "now"}, } update_response = make_request( method="PUT", url=f"/secrets/{secret_id}", json=update_data, ) assert update_response.status_code == 200 updated_secret = update_response.json() assert updated_secret["name"] == updated_name assert updated_secret["description"] == "Updated description" assert updated_secret["value"] == "ENCRYPTED" assert updated_secret["metadata"] == update_data["metadata"] @test("route: delete secret") def _(make_request=make_request, developer_id=test_developer_id): # First create a secret delete_test_name = f"delete_test_secret_{uuid4().hex[:8]}" create_data = { "developer_id": str(developer_id), "name": delete_test_name, "description": "Secret to be deleted", "value": "sk_delete_me", "metadata": {"service": "test-service", "environment": "test"}, } create_response = make_request( method="POST", url="/secrets", json=create_data, ) secret_id = create_response.json()["id"] # Now delete it delete_response = make_request( method="DELETE", url=f"/secrets/{secret_id}", ) assert delete_response.status_code == 202 # Verify the secret is gone by listing all secrets list_response = make_request( method="GET", url="/secrets", ) assert list_response.status_code == 200 secrets = list_response.json() # Check that the deleted secret is not in the list deleted_secret_ids = [secret["id"] for secret in secrets] assert secret_id not in deleted_secret_ids @test("route: create duplicate secret name fails") def _(make_request=make_request, developer_id=test_developer_id): # Create a secret with a specific name unique_name = f"unique_secret_{uuid4().hex[:8]}" data = { "developer_id": str(developer_id), "name": unique_name, "description": "First secret with this name", "value": "sk_first_value", "metadata": {"service": "test-service", "environment": "test"}, } first_response = make_request( method="POST", url="/secrets", json=data, ) assert first_response.status_code == 201 # Try to create another with the same name duplicate_data = { "developer_id": str(developer_id), "name": unique_name, # Same name "description": "Second secret with same name", "value": "sk_second_value", "metadata": {"service": "test-service", "environment": "test"}, } second_response = make_request( method="POST", url="/secrets", json=duplicate_data, ) # Should fail with a conflict error assert second_response.status_code == 409 ================================================ FILE: src/agents-api/tests/test_secrets_usage.py ================================================ """Tests for list_secrets_query usage in render.py and tasks.py.""" from unittest.mock import MagicMock, patch from uuid import uuid4 from agents_api.autogen.Agents import Agent from agents_api.autogen.openapi_model import ( ChatInput, PromptItem, PromptStep, Secret, TaskSpecDef, TaskToolDef, Tool, TransitionTarget, Workflow, ) from agents_api.common.protocol.models import ExecutionInput from agents_api.common.protocol.tasks import StepContext from agents_api.common.utils.datetime import utcnow from agents_api.routers.sessions.legacy.render import render_chat_input from ward import skip, test from tests.fixtures import test_developer, test_developer_id @skip("Skipping secrets usage tests") @test("render: list_secrets_query usage in render_chat_input") async def _(developer=test_developer): # Create test secrets test_secrets = [ Secret( id=uuid4(), name="api_key", value="sk_test_123456789", developer_id=developer.id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), Secret( id=uuid4(), name="service_token", value="token_987654321", developer_id=developer.id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), ] # Create tools that use secret expressions tools = [ Tool( id=uuid4(), name="api_tool", type="computer_20241022", computer_20241022={ "path": "/usr/bin/curl", "api_key": "$ secrets.api_key", "auth_token": "$ secrets.service_token", }, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ) ] # Create mock chat context mock_chat_context = MagicMock() mock_chat_context.session.render_templates = True mock_chat_context.session.context_overflow = "error" mock_chat_context.get_active_tools.return_value = tools mock_chat_context.settings = {"model": "claude-3.5-sonnet"} mock_chat_context.get_chat_environment.return_value = {} mock_chat_context.merge_system_template.return_value = "System: Use tools to help the user" # Mock input data session_id = uuid4() chat_input = ChatInput(messages=[{"role": "user", "content": "hi"}]) # Set up mocking for required functions with ( patch( "agents_api.routers.sessions.render.list_secrets_query" ) as mock_list_secrets_query, patch( "agents_api.routers.sessions.render.prepare_chat_context" ) as mock_prepare_chat_context, patch("agents_api.routers.sessions.render.gather_messages") as mock_gather_messages, patch("agents_api.routers.sessions.render.render_template") as mock_render_template, patch( "agents_api.routers.sessions.render.evaluate_expressions" ) as mock_render_evaluate_expressions, patch("agents_api.routers.sessions.render.validate_model") as mock_validate_model, ): # Set up return values for mocks mock_validate_model.return_value = None mock_list_secrets_query.return_value = test_secrets mock_prepare_chat_context.return_value = mock_chat_context mock_gather_messages.return_value = ([], []) mock_render_template.return_value = [ {"role": "system", "content": "System: Use tools to help the user"} ] # Set up evaluate_expressions to properly substitute secrets def evaluate_side_effect(value, values): if isinstance(value, str) and "$ secrets." in value: if "$secrets.api_key" in value: return value.replace("$ secrets.api_key", "sk_test_123456789") if "$secrets.service_token" in value: return value.replace("$ secrets.service_token", "token_987654321") return value mock_render_evaluate_expressions.side_effect = evaluate_side_effect # Call the function being tested _messages, _doc_refs, formatted_tools, *_ = await render_chat_input( developer=developer, session_id=session_id, chat_input=chat_input, ) # Assert that list_secrets_query was called with the right parameters mock_list_secrets_query.assert_called_once_with(developer_id=developer.id) # Verify that expressions were evaluated mock_render_evaluate_expressions.assert_called() # Check that formatted_tools contains the evaluated secrets assert formatted_tools is not None assert len(formatted_tools) > 0 # The first tool should be the computer_20241022 tool tool = formatted_tools[0] assert tool["type"] == "computer_20241022" # Verify that the secrets were evaluated in the function parameters function_params = tool["function"]["parameters"] assert "api_key" in function_params, f"{tool}" assert function_params["api_key"] == "sk_test_123456789" assert "auth_token" in function_params assert function_params["auth_token"] == "token_987654321" @skip("Skipping secrets usage tests") @test("tasks: list_secrets_query with multiple secrets") async def _(developer_id=test_developer_id): # Create test secrets with varying names test_secrets = [ Secret( id=uuid4(), name="api_key_1", value="sk_test_123", developer_id=developer_id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), Secret( id=uuid4(), name="api_key_2", value="sk_test_456", developer_id=developer_id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), Secret( id=uuid4(), name="database_url", value="postgresql://user:password@localhost:5432/db", developer_id=developer_id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), ] # Create tools that use secret expressions task_tools = [ TaskToolDef( type="function", name="multi_secret_tool", spec={ "primary_key": "$secrets.api_key_1", "secondary_key": "$secrets.api_key_2", "connection_string": "$secrets.database_url", "url": "https://api.example.com", }, ), TaskToolDef( type="api_call", name="second_tool", spec={ "headers": {"Authorization": "Bearer $secrets.api_key_1"}, "url": "https://api.example.com/v2", }, ), ] # Create a valid prompt step for the workflow test_prompt_step = PromptStep( kind_="prompt", prompt=[PromptItem(role="user", content="Test prompt content")], ) # Create a mock workflow with a proper step test_workflow = Workflow(name="main", steps=[test_prompt_step]) # Create a proper TaskSpecDef task_spec = TaskSpecDef( id=uuid4(), name="test_task", created_at=utcnow(), updated_at=utcnow(), workflows=[test_workflow], tools=task_tools, inherit_tools=False, ) # Create a proper Agent test_agent = Agent( id=uuid4(), name="test_agent", model="gpt-4", created_at=utcnow(), updated_at=utcnow() ) # Create execution input with the task execution_input = ExecutionInput( developer_id=developer_id, agent=test_agent, agent_tools=[], arguments={}, task=task_spec, ) # Create a transition target pointing to the workflow step cursor = TransitionTarget(workflow="main", step=0, scope_id=uuid4()) # Set up the step context properly step_context = StepContext( loaded=True, execution_input=execution_input, cursor=cursor, current_input={} ) # Mock the current step to use all tools with ( patch("agents_api.common.protocol.tasks.list_secrets_query") as mock_list_secrets_query, patch( "agents_api.common.protocol.tasks.evaluate_expressions" ) as mock_evaluate_expressions, ): # Set mock return values mock_list_secrets_query.return_value = test_secrets # Have evaluate_expressions pass through the values but replace secret expressions mock_evaluate_expressions.side_effect = lambda spec, values: { k: v.replace("$secrets.api_key_1", "sk_test_123") .replace("$secrets.api_key_2", "sk_test_456") .replace("$secrets.database_url", "postgresql://user:password@localhost:5432/db") if isinstance(v, str) else v for k, v in spec.items() } # Call the tools method tools = await step_context.tools() # Assert that list_secrets_query was called with the right parameters mock_list_secrets_query.assert_called_once_with(developer_id=developer_id) # Verify the right number of tools were created assert len(tools) == len(task_tools) # Verify evaluate_expressions was called for each tool assert mock_evaluate_expressions.call_count == len(task_tools) @skip("Skipping secrets usage tests") @test("tasks: list_secrets_query in StepContext.tools method") async def _(developer_id=test_developer_id): # Create test secrets test_secrets = [ Secret( id=uuid4(), name="api_key", value="sk_test_123456789", developer_id=developer_id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), Secret( id=uuid4(), name="access_token", value="at_test_987654321", developer_id=developer_id, created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ), ] # Create tools that use secret expressions task_tools = [ TaskToolDef( type="function", name="test_tool_with_secret", spec={"api_key": "$secrets.api_key", "url": "https://api.example.com"}, ) ] # Create a valid prompt step for the workflow test_prompt_step = PromptStep( kind_="prompt", prompt=[PromptItem(role="user", content="Test prompt content")], ) # Create a mock workflow with a proper step test_workflow = Workflow(name="main", steps=[test_prompt_step]) # Create a proper TaskSpecDef task_spec = TaskSpecDef( id=uuid4(), name="test_task", created_at=utcnow(), updated_at=utcnow(), workflows=[test_workflow], tools=task_tools, inherit_tools=False, ) # Create a proper Agent test_agent = Agent( id=uuid4(), name="test_agent", model="gpt-4", created_at=utcnow(), updated_at=utcnow() ) # Create execution input with the task execution_input = ExecutionInput( developer_id=developer_id, agent=test_agent, agent_tools=[], arguments={}, task=task_spec, ) # Create a transition target pointing to the workflow step cursor = TransitionTarget(workflow="main", step=0, scope_id=uuid4()) # Set up the step context properly step_context = StepContext( loaded=True, execution_input=execution_input, cursor=cursor, current_input={} ) # Mock the current step to use all tools with ( patch.object(step_context, "current_step", MagicMock(tools="all")), patch("agents_api.common.protocol.tasks.list_secrets_query") as mock_list_secrets_query, ): # Set mock return value mock_list_secrets_query.return_value = test_secrets # Call the tools method tools = await step_context.tools() # Assert that list_secrets_query was called with the right parameters mock_list_secrets_query.assert_called_once_with(developer_id=developer_id) # Verify tools were created with evaluated secrets assert len(tools) == len(task_tools) # StepContext.tools() returns the correct tools assert len(tools) > 0 ================================================ FILE: src/agents-api/tests/test_session_queries.py ================================================ # """ # This module contains tests for SQL query generation functions in the sessions module. # Tests verify the SQL queries without actually executing them against a database. # """ from agents_api.autogen.openapi_model import ( CreateOrUpdateSessionRequest, CreateSessionRequest, PatchSessionRequest, ResourceDeletedResponse, Session, UpdateSessionRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.sessions import ( count_sessions, create_or_update_session, create_session, delete_session, get_session, list_sessions, patch_session, update_session, ) from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import ( pg_dsn, test_agent, test_developer_id, test_session, test_user, ) @test("query: create session sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, user=test_user): """Test that a session can be successfully created.""" pool = await create_db_pool(dsn=dsn) session_id = uuid7() data = CreateSessionRequest( users=[user.id], agents=[agent.id], system_template="test system template", ) result = await create_session( developer_id=developer_id, session_id=session_id, data=data, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Session), f"Result is not a Session, {result}" assert result.id == session_id @test("query: create or update session sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, user=test_user): """Test that a session can be successfully created or updated.""" pool = await create_db_pool(dsn=dsn) session_id = uuid7() data = CreateOrUpdateSessionRequest( users=[user.id], agents=[agent.id], system_template="test system template", ) result = await create_or_update_session( developer_id=developer_id, session_id=session_id, data=data, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Session) assert result.id == session_id assert result.updated_at is not None @test("query: get session exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test retrieving an existing session.""" pool = await create_db_pool(dsn=dsn) result = await get_session( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Session) assert result.id == session.id @test("query: get session does not exist") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test retrieving a non-existent session.""" session_id = uuid7() pool = await create_db_pool(dsn=dsn) with raises(Exception): await get_session( session_id=session_id, developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] @test("query: list sessions") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test listing sessions with default pagination.""" pool = await create_db_pool(dsn=dsn) result = await list_sessions( developer_id=developer_id, limit=10, offset=0, connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(result, list) assert len(result) >= 1 assert any(s.id == session.id for s in result) @test("query: list sessions with filters") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test listing sessions with specific filters.""" pool = await create_db_pool(dsn=dsn) result = await list_sessions( developer_id=developer_id, limit=10, offset=0, connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(result, list) assert len(result) >= 1 assert all(isinstance(s, Session) for s in result), ( f"Result is not a list of sessions, {result}" ) @test("query: count sessions") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test counting the number of sessions for a developer.""" pool = await create_db_pool(dsn=dsn) count = await count_sessions( developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(count, dict) assert count["count"] >= 1 @test("query: update session sql") async def _( dsn=pg_dsn, developer_id=test_developer_id, session=test_session, agent=test_agent, user=test_user, ): """Test that an existing session's information can be successfully updated.""" pool = await create_db_pool(dsn=dsn) data = UpdateSessionRequest( token_budget=1000, forward_tool_calls=True, system_template="updated system template", ) result = await update_session( session_id=session.id, developer_id=developer_id, data=data, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Session) assert result.updated_at > session.created_at updated_session = await get_session( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] assert updated_session.forward_tool_calls is True @test("query: patch session sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session, agent=test_agent): """Test that a session can be successfully patched.""" pool = await create_db_pool(dsn=dsn) data = PatchSessionRequest( metadata={"test": "metadata"}, ) result = await patch_session( developer_id=developer_id, session_id=session.id, data=data, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, Session) assert result.updated_at > session.created_at patched_session = await get_session( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] assert patched_session.metadata == {"test": "metadata"} @test("query: delete session sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, session=test_session): """Test that a session can be successfully deleted.""" pool = await create_db_pool(dsn=dsn) delete_result = await delete_session( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] assert delete_result is not None assert isinstance(delete_result, ResourceDeletedResponse) with raises(Exception): await get_session( developer_id=developer_id, session_id=session.id, connection_pool=pool, ) # type: ignore[not-callable] ================================================ FILE: src/agents-api/tests/test_session_routes.py ================================================ from uuid_extensions import uuid7 from ward import test from tests.fixtures import client, make_request, test_agent, test_session @test("route: unauthorized should fail") def _(client=client): response = client.request( method="GET", url="/sessions", ) assert response.status_code == 403 @test("route: create session") def _(make_request=make_request, agent=test_agent): data = { "agent": str(agent.id), "situation": "test session about", "metadata": {"test": "test"}, "system_template": "test system template", } response = make_request( method="POST", url="/sessions", json=data, ) assert response.status_code == 201 @test("route: create session - invalid agent") def _(make_request=make_request, agent=test_agent): data = { "agent": str(uuid7()), "situation": "test session about", } response = make_request( method="POST", url="/sessions", json=data, ) assert response.status_code == 400 assert ( response.json()["error"]["message"] == "The specified participant ID is invalid for the given participant type during create" ) @test("route: create or update session - create") def _(make_request=make_request, agent=test_agent): session_id = uuid7() data = { "agent": str(agent.id), "situation": "test session about", "metadata": {"test": "test"}, "system_template": "test system template", } response = make_request( method="POST", url=f"/sessions/{session_id}", json=data, ) assert response.status_code == 201 @test("route: create or update session - update") def _(make_request=make_request, session=test_session, agent=test_agent): data = { "agent": str(agent.id), "situation": "test session about", "metadata": {"test": "test"}, "system_template": "test system template", } response = make_request( method="POST", url=f"/sessions/{session.id}", json=data, ) assert response.status_code == 201, f"{response.json()}" @test("route: create or update session - invalid agent") def _(make_request=make_request, agent=test_agent, session=test_session): data = { "agent": str(uuid7()), "situation": "test session about", } response = make_request( method="POST", url=f"/sessions/{session.id}", json=data, ) assert response.status_code == 400 assert ( response.json()["error"]["message"] == "The specified participant ID is invalid for the given participant type during create or update" ) @test("route: get session - exists") def _(make_request=make_request, session=test_session): response = make_request( method="GET", url=f"/sessions/{session.id}", ) assert response.status_code == 200 @test("route: get session - does not exist") def _(make_request=make_request): session_id = uuid7() response = make_request( method="GET", url=f"/sessions/{session_id}", ) assert response.status_code == 404 @test("route: list sessions") def _(make_request=make_request, session=test_session): response = make_request( method="GET", url="/sessions", ) assert response.status_code == 200 response = response.json() sessions = response["items"] assert isinstance(sessions, list) assert len(sessions) > 0 @test("route: list sessions with metadata filter") def _(make_request=make_request, session=test_session): response = make_request( method="GET", url="/sessions", params={ "metadata_filter": {"test": "test"}, }, ) assert response.status_code == 200 response = response.json() sessions = response["items"] assert isinstance(sessions, list) assert len(sessions) > 0 @test("route: get session history") def _(make_request=make_request, session=test_session): response = make_request( method="GET", url=f"/sessions/{session.id}/history", ) assert response.status_code == 200 history = response.json() assert history["session_id"] == str(session.id) @test("route: patch session") def _(make_request=make_request, session=test_session): data = { "situation": "test session about", } response = make_request( method="PATCH", url=f"/sessions/{session.id}", json=data, ) assert response.status_code == 200 @test("route: update session") def _(make_request=make_request, session=test_session): data = { "situation": "test session about", } response = make_request( method="PUT", url=f"/sessions/{session.id}", json=data, ) assert response.status_code == 200 @test("route: delete session") def _(make_request=make_request, session=test_session): response = make_request( method="DELETE", url=f"/sessions/{session.id}", ) assert response.status_code == 202 ================================================ FILE: src/agents-api/tests/test_task_execution_workflow.py ================================================ import functools import uuid from base64 import b64decode from datetime import timedelta from unittest.mock import Mock, call, patch import aiohttp from agents_api.activities import task_steps from agents_api.activities.execute_api_call import execute_api_call from agents_api.activities.execute_integration import execute_integration from agents_api.activities.execute_system import execute_system from agents_api.autogen.openapi_model import ( Agent, ApiCallDef, BaseIntegrationDef, CaseThen, EvaluateStep, Execution, ForeachDo, ForeachStep, GetStep, IfElseWorkflowStep, LogStep, MapReduceStep, PromptItem, PromptStep, ReturnStep, SetStep, SwitchStep, SystemDef, TaskSpecDef, TaskToolDef, ToolCallStep, Transition, TransitionTarget, WaitForInputInfo, WaitForInputStep, Workflow, YieldStep, ) from agents_api.clients.pg import create_db_pool from agents_api.common.protocol.tasks import ( ExecutionInput, PartialTransition, StepContext, StepOutcome, WorkflowResult, ) from agents_api.common.retry_policies import DEFAULT_RETRY_POLICY from agents_api.common.utils.datetime import utcnow from agents_api.common.utils.expressions import evaluate_expressions from agents_api.env import ( debug, temporal_heartbeat_timeout, temporal_schedule_to_close_timeout, testing, ) from agents_api.workflows.task_execution import TaskExecutionWorkflow from aiohttp import test_utils from temporalio.exceptions import ApplicationError from temporalio.workflow import _NotInWorkflowEventLoopError from ward import raises, test from tests.fixtures import pg_dsn async def base_evaluate_with_pool( exprs, context=None, values=None, extra_lambda_strs=None, connection_pool=None, ): """Custom base_evaluate that uses connection_pool for prepare_for_step""" if context is None and values is None: msg = "Either context or values must be provided" raise ValueError(msg) values = values or {} if context: # Pass the connection_pool to prepare_for_step values.update(await context.prepare_for_step(limit=50, connection_pool=connection_pool)) return evaluate_expressions(exprs, values=values, extra_lambda_strs=extra_lambda_strs) @test("task execution workflow: handle function tool call step") async def _(): async def _resp(): return "function_tool_call_response" wf = TaskExecutionWorkflow() step = ToolCallStep(tool="tool1") execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) output = {"type": "function"} outcome = StepOutcome(output=output) with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.execute_activity.return_value = _resp() wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult( state=PartialTransition(type="resume", output="function_tool_call_response"), ) workflow.execute_activity.assert_called_once_with( task_steps.raise_complete_async, args=[context, output], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) @test("task execution workflow: handle integration tool call step") async def _(): async def _resp(): return "integration_tool_call_response" wf = TaskExecutionWorkflow() step = ToolCallStep(tool="tool1") execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[TaskToolDef(type="integration", name="tool1", spec={})], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) tool_name = "tool1" arguments = {} outcome = StepOutcome( output={ "type": "integration", "integration": {"name": tool_name, "arguments": arguments}, }, ) with ( patch("agents_api.workflows.task_execution.workflow") as workflow, patch("agents_api.common.protocol.tasks.workflow") as context_workflow, patch("agents_api.common.protocol.tasks.get_secrets_list") as mock_list_secrets, ): # Set up the mock to raise the expected exception context_workflow.execute_activity.side_effect = _NotInWorkflowEventLoopError( "Not in workflow event loop" ) mock_list_secrets.return_value = [] # Set up the activity execution mock workflow.execute_activity.return_value = _resp() wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult( state=PartialTransition(output="integration_tool_call_response"), ) provider = "dummy" method = None integration = BaseIntegrationDef( provider=provider, setup=None, method=method, arguments=arguments, ) workflow.execute_activity.assert_called_once_with( execute_integration, args=[ execution_input.developer_id, execution_input.agent.id, execution_input.task.id if execution_input.task else None, None, # session_id is None for task execution tool_name, integration, arguments, ], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) @test("task execution workflow: handle integration tool call step, integration tools not found") async def _(): wf = TaskExecutionWorkflow() step = ToolCallStep(tool="tool1") execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[TaskToolDef(type="integration", name="tool2", spec={})], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome( output={"type": "integration", "integration": {"name": "tool1", "arguments": {}}}, ) with ( patch("agents_api.workflows.task_execution.workflow") as workflow, patch("agents_api.common.protocol.tasks.workflow") as context_workflow, patch("agents_api.common.protocol.tasks.get_secrets_list") as mock_list_secrets, ): # Set up the mock to raise the expected exception context_workflow.execute_activity.side_effect = _NotInWorkflowEventLoopError( "Not in workflow event loop" ) mock_list_secrets.return_value = [] workflow.execute_activity.return_value = "integration_tool_call_response" with raises(ApplicationError) as exc: wf.context = context wf.outcome = outcome await wf.handle_step( step=step, ) assert str(exc.raised) == "Integration tool1 not found" @test("task execution workflow: handle api_call tool call step") async def _(): async def _resp(): return "api_call_tool_call_response" wf = TaskExecutionWorkflow() arguments = { "method": "GET", "url": "http://url1.com", } step = ToolCallStep( tool="tool1", arguments=arguments, ) execution_input = ExecutionInput( arguments=arguments, developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], task=TaskSpecDef( name="task1", tools=[ TaskToolDef( type="api_call", name="tool1", spec=arguments, inherited=False, ), ], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome( output={ "type": "api_call", "api_call": { "arguments": arguments, "name": "tool1", }, }, ) with ( patch("agents_api.workflows.task_execution.workflow") as workflow, patch("agents_api.common.protocol.tasks.workflow") as context_workflow, patch("agents_api.common.protocol.tasks.get_secrets_list") as mock_list_secrets, ): # Set up the mock to raise the expected exception context_workflow.execute_activity.side_effect = _NotInWorkflowEventLoopError( "Not in workflow event loop" ) mock_list_secrets.return_value = [] workflow.execute_activity.return_value = _resp() wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult( state=PartialTransition(output="api_call_tool_call_response"), ) api_call = ApiCallDef( method="GET", url="http://url1.com", headers=None, follow_redirects=None, ) workflow.execute_activity.assert_called_once_with( execute_api_call, args=[ api_call, arguments, ], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) @test("task execution workflow: handle api_call tool call step with Method Override") async def _(): async def _resp(): return "api_call_tool_call_response" wf = TaskExecutionWorkflow() arguments = { "method": "POST", "url": "http://url1.com", } input_arguments = { "method": "GET", "url": "http://url1.com", } step = ToolCallStep( tool="tool1", arguments=input_arguments, ) execution_input = ExecutionInput( arguments=input_arguments, developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], task=TaskSpecDef( name="task1", tools=[ TaskToolDef( type="api_call", name="tool1", spec=arguments, inherited=False, ), ], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome( output={ "type": "api_call", "api_call": { "arguments": input_arguments, "name": "tool1", }, }, ) with ( patch("agents_api.workflows.task_execution.workflow") as workflow, patch("agents_api.common.protocol.tasks.workflow") as context_workflow, patch("agents_api.common.protocol.tasks.get_secrets_list") as mock_list_secrets, ): # Set up the mock to raise the expected exception context_workflow.execute_activity.side_effect = _NotInWorkflowEventLoopError( "Not in workflow event loop" ) mock_list_secrets.return_value = [] workflow.execute_activity.return_value = _resp() wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult( state=PartialTransition(output="api_call_tool_call_response"), ) api_call = ApiCallDef( method="POST", url="http://url1.com", headers=None, follow_redirects=None, ) workflow.execute_activity.assert_called_once_with( execute_api_call, args=[ api_call, input_arguments, ], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) @test( "task execution workflow: handle api call tool call step, do not include response content" ) async def _(): # Create application with route app = aiohttp.web.Application() async def handler(request): return aiohttp.web.json_response({"test": "data"}) app.router.add_post("/", handler) # Set up mock HTTP server with the pre-configured app async with test_utils.TestServer(app) as server: # Use the actual server URL server_url = str(server.make_url("/")) input_arguments = { "method": "POST", "url": server_url, "include_response_content": False, } api_call = ApiCallDef( method="POST", url=server_url, headers=None, follow_redirects=None, include_response_content=False, ) result = await execute_api_call(api_call, input_arguments) assert "content" not in result assert result["status_code"] == 200 @test("task execution workflow: handle api call tool call step, include response content") async def _(): # Create application with route app = aiohttp.web.Application() async def handler(request): return aiohttp.web.json_response({"test": "data"}) app.router.add_post("/", handler) # Set up mock HTTP server with the pre-configured app async with test_utils.TestServer(app) as server: # Use the actual server URL server_url = str(server.make_url("/")) input_arguments = { "method": "POST", "url": server_url, "include_response_content": True, } api_call = ApiCallDef( method="POST", url=server_url, headers=None, follow_redirects=None, include_response_content=False, ) result = await execute_api_call(api_call, input_arguments) assert "content" in result assert b64decode(result["content"]).decode("utf-8") == '{"test": "data"}' assert result["status_code"] == 200 async with test_utils.TestServer(app) as server: # Use the actual server URL server_url = str(server.make_url("/")) input_arguments = { "method": "POST", "url": server_url, "include_response_content": False, } api_call = ApiCallDef( method="POST", url=server_url, headers=None, follow_redirects=None, include_response_content=True, ) result = await execute_api_call(api_call, input_arguments) assert "content" in result assert b64decode(result["content"]).decode("utf-8") == '{"test": "data"}' assert result["status_code"] == 200 async with test_utils.TestServer(app) as server: # Use the actual server URL server_url = str(server.make_url("/")) input_arguments = { "method": "POST", "url": server_url, "include_response_content": None, } api_call = ApiCallDef( method="POST", url=server_url, headers=None, follow_redirects=None, include_response_content=True, ) result = await execute_api_call(api_call, input_arguments) assert "content" in result assert b64decode(result["content"]).decode("utf-8") == '{"test": "data"}' assert result["status_code"] == 200 async with test_utils.TestServer(app) as server: # Use the actual server URL server_url = str(server.make_url("/")) input_arguments = { "method": "POST", "url": server_url, "include_response_content": True, } api_call = ApiCallDef( method="POST", url=server_url, headers=None, follow_redirects=None, include_response_content=True, ) result = await execute_api_call(api_call, input_arguments) assert "content" in result assert b64decode(result["content"]).decode("utf-8") == '{"test": "data"}' assert result["status_code"] == 200 @test("task execution workflow: handle system tool call step") async def _(): async def _resp(): return "system_tool_call_response" wf = TaskExecutionWorkflow() arguments = { "resource": "agent", "operation": "create", "subresource": "doc", } step = ToolCallStep( tool="tool1", arguments=arguments, ) execution_input = ExecutionInput( arguments=arguments, developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], task=TaskSpecDef( name="task1", tools=[ TaskToolDef( type="system", name="tool1", spec=arguments, inherited=False, ), ], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome( output={ "type": "system", "system": { **arguments, "name": "tool1", }, }, ) with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.execute_activity.return_value = _resp() wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult( state=PartialTransition(output="system_tool_call_response"), ) system_call = SystemDef( resource="agent", operation="create", subresource="doc", ) workflow.execute_activity.assert_called_once_with( execute_system, args=[execution_input.developer_id, system_call], schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ) @test("task execution workflow: handle switch step, index is positive") async def _(): wf = TaskExecutionWorkflow() step = SwitchStep(switch=[CaseThen(case="_", then=GetStep(get="key1"))]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome(output=1) with patch( "agents_api.workflows.task_execution.execute_switch_branch", ) as execute_switch_branch: execute_switch_branch.return_value = WorkflowResult( state=PartialTransition(output="switch_response"), ) wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult(state=PartialTransition(output="switch_response")) @test("task execution workflow: handle switch step, index is negative") async def _(): wf = TaskExecutionWorkflow() step = SwitchStep(switch=[CaseThen(case="_", then=GetStep(get="key1"))]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome(output=-1) with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.logger = Mock() with raises(ApplicationError): wf.context = context wf.outcome = outcome await wf.handle_step( step=step, ) @test("task execution workflow: handle switch step, index is zero") async def _(): wf = TaskExecutionWorkflow() step = SwitchStep(switch=[CaseThen(case="_", then=GetStep(get="key1"))]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) outcome = StepOutcome(output=0) with patch( "agents_api.workflows.task_execution.execute_switch_branch", ) as execute_switch_branch: execute_switch_branch.return_value = WorkflowResult( state=PartialTransition(output="switch_response"), ) wf.context = context wf.outcome = outcome result = await wf.handle_step( step=step, ) assert result == WorkflowResult(state=PartialTransition(output="switch_response")) @test("task execution workflow: handle prompt step, unwrap is True") async def _(): wf = TaskExecutionWorkflow() step = PromptStep(prompt="hi there", unwrap=True) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) message = "Hello there" outcome = StepOutcome(output=message) wf.context = context wf.outcome = outcome with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.logger = Mock() workflow.execute_activity.return_value = "activity" assert await wf.handle_step(step=step) == WorkflowResult( state=PartialTransition(output=message), ) workflow.execute_activity.assert_not_called() @test("task execution workflow: handle prompt step, unwrap is False, autorun tools is False") async def _(): wf = TaskExecutionWorkflow() step = PromptStep(prompt="hi there", unwrap=False, auto_run_tools=False) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) message = {"choices": [{"finish_reason": "stop"}]} outcome = StepOutcome(output=message) wf.context = context wf.outcome = outcome with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.logger = Mock() workflow.execute_activity.return_value = "activity" assert await wf.handle_step(step=step) == WorkflowResult( state=PartialTransition(output=message), ) workflow.execute_activity.assert_not_called() @test( "task execution workflow: handle prompt step, unwrap is False, finish reason is not tool_calls", ) async def _(): wf = TaskExecutionWorkflow() step = PromptStep(prompt="hi there", unwrap=False) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) message = {"choices": [{"finish_reason": "stop"}]} outcome = StepOutcome(output=message) wf.context = context wf.outcome = outcome with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.logger = Mock() workflow.execute_activity.return_value = "activity" assert await wf.handle_step(step=step) == WorkflowResult( state=PartialTransition(output=message), ) workflow.execute_activity.assert_not_called() @test("task execution workflow: handle prompt step, function call") async def _(): async def _resp(): return StepOutcome(output="function_call") wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")], auto_run_tools=True) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) message = { "choices": [ {"finish_reason": "tool_calls", "message": {"tool_calls": [{"type": "function"}]}}, ], } outcome = StepOutcome(output=message) wf.context = context wf.outcome = outcome with patch("agents_api.workflows.task_execution.workflow") as workflow: workflow.logger = Mock() workflow.execute_activity.side_effect = [_resp(), _resp()] assert await wf.handle_step(step=step) == WorkflowResult( state=PartialTransition(output="function_call", type="resume"), ) workflow.execute_activity.assert_has_calls([ call( task_steps.raise_complete_async, args=[context, [{"type": "function"}]], schedule_to_close_timeout=timedelta(days=31), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ), call( task_steps.prompt_step, context, schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else temporal_schedule_to_close_timeout, ), retry_policy=DEFAULT_RETRY_POLICY, heartbeat_timeout=timedelta(seconds=temporal_heartbeat_timeout), ), ]) @test("task execution workflow: evaluate foreach step expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, # Use the partial function here ): result = await wf.eval_step_exprs( ForeachStep(foreach=ForeachDo(in_="$ 1 + 2", do=YieldStep(workflow="wf1"))), ) assert result == StepOutcome(output=3) @test("task execution workflow: evaluate ifelse step expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( IfElseWorkflowStep(if_="$ 1 + 2", then=YieldStep(workflow="wf1")), ) assert result == StepOutcome(output=3) @test("task execution workflow: evaluate return step expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( ReturnStep(return_={"x": "$ 1 + 2"}), ) assert result == StepOutcome(output={"x": 3}) @test("task execution workflow: evaluate wait for input step expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( WaitForInputStep(wait_for_input=WaitForInputInfo(info={"x": "$ 1 + 2"})), ) assert result == StepOutcome(output={"x": 3}) @test("task execution workflow: evaluate evaluate expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( EvaluateStep(evaluate={"x": "$ 1 + 2"}), ) assert result == StepOutcome(output={"x": 3}) @test("task execution workflow: evaluate map reduce expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( MapReduceStep(over="$ 1 + 2", map=YieldStep(workflow="wf1")), ) assert result == StepOutcome(output=3) @test("task execution workflow: evaluate set expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs(SetStep(set={"x": "$ 1 + 2"})) assert result == StepOutcome(output={"x": 3}) @test("task execution workflow: evaluate log expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output={"x": "5"}, current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs(LogStep(log="$ steps[0].input['x']")) assert result == StepOutcome(output="5") @test("task execution workflow: evaluate switch expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( SwitchStep( switch=[ CaseThen(case="$ None", then=YieldStep(workflow="wf1")), CaseThen(case="$ 1 + 3", then=YieldStep(workflow="wf2")), ], ), ) assert result == StepOutcome(output=1) @test("task execution workflow: evaluate tool call expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = ToolCallStep(tool="tool1", arguments={"x": "$ 1 + 2"}) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[ TaskToolDef( name="tool1", type="function", spec={}, ), ], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), patch("agents_api.workflows.task_execution.generate_call_id") as generate_call_id, patch("agents_api.common.protocol.tasks.workflow") as context_workflow, patch("agents_api.common.protocol.tasks.get_secrets_list") as mock_list_secrets, ): # Set up the mock to raise the expected exception context_workflow.execute_activity.side_effect = _NotInWorkflowEventLoopError( "Not in workflow event loop" ) mock_list_secrets.return_value = [] generate_call_id.return_value = "XXXX" list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( ToolCallStep(tool="tool1", arguments={"x": "$ 1 + 2"}), ) assert result == StepOutcome( output={ "function": {"arguments": {"x": 3}, "name": "tool1"}, "id": "XXXX", "type": "function", }, ) @test("task execution workflow: evaluate yield expressions") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = YieldStep(arguments={"x": "$ 1 + 2"}, workflow="main") execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ): result = await wf.eval_step_exprs( YieldStep(arguments={"x": "$ 1 + 2"}, workflow="main"), ) scope_id = result.transition_to[1].scope_id assert result == StepOutcome( output={"x": 3}, transition_to=( "step", TransitionTarget(step=0, workflow="main", scope_id=scope_id), ), ) @test("task execution workflow: evaluate yield expressions assertion") async def _(dsn=pg_dsn): pool = await create_db_pool(dsn=dsn) base_evaluate_patched = functools.partial(base_evaluate_with_pool, connection_pool=pool) wf = TaskExecutionWorkflow() step = ToolCallStep(tool="tool1", arguments={"x": "$ 1 + 2"}) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), name="agent1", ), agent_tools=[], arguments={}, task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), task_id=uuid.uuid4(), status="running", input={"a": "1"}, ), ) scope_id = uuid.uuid4() wf.context = StepContext( execution_input=execution_input, current_input="value 1", cursor=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ) with ( patch( "agents_api.common.protocol.tasks.list_execution_inputs_data", ) as list_execution_inputs_data, patch( "agents_api.common.protocol.tasks.list_execution_state_data", return_value=[], ), ): list_execution_inputs_data.return_value = ( Transition( id=uuid.uuid4(), execution_id=uuid.uuid4(), type="step", created_at=utcnow(), updated_at=utcnow(), output="output", current=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), next=TransitionTarget( workflow="main", step=0, scope_id=scope_id, ), ), ) with ( raises(AssertionError), patch( "agents_api.workflows.task_execution.base_evaluate_activity", new=base_evaluate_patched, ), ): await wf.eval_step_exprs(YieldStep(arguments={"x": "$ 1 + 2"}, workflow="main")) ================================================ FILE: src/agents-api/tests/test_task_queries.py ================================================ # Tests for task queries from agents_api.autogen.openapi_model import ( CreateOrUpdateTaskRequest, CreateTaskRequest, PatchTaskRequest, Task, UpdateTaskRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.tasks.create_or_update_task import create_or_update_task from agents_api.queries.tasks.create_task import create_task from agents_api.queries.tasks.delete_task import delete_task from agents_api.queries.tasks.get_task import get_task from agents_api.queries.tasks.list_tasks import list_tasks from agents_api.queries.tasks.patch_task import patch_task from agents_api.queries.tasks.update_task import update_task from fastapi import HTTPException from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import pg_dsn, test_agent, test_developer_id, test_task @test("query: create task sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that a task can be successfully created.""" pool = await create_db_pool(dsn=dsn) task = await create_task( developer_id=developer_id, agent_id=agent.id, task_id=uuid7(), data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], ), connection_pool=pool, ) assert isinstance(task, Task) assert task.id is not None assert task.main is not None @test("query: create or update task sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that a task can be successfully created or updated.""" pool = await create_db_pool(dsn=dsn) task = await create_or_update_task( developer_id=developer_id, agent_id=agent.id, task_id=uuid7(), data=CreateTaskRequest( name="test task", description="test task about", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], ), connection_pool=pool, ) assert isinstance(task, Task) assert task.id is not None assert task.main is not None @test("query: get task sql - exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task): """Test that an existing task can be successfully retrieved.""" pool = await create_db_pool(dsn=dsn) # Then retrieve it result = await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert result is not None assert isinstance(result, Task), f"Result is not a Task, got {type(result)}" assert result.id == task.id assert result.name == "test task" assert result.description == "test task about" @test("query: get task sql - not exists") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that attempting to retrieve a non-existent task raises an error.""" pool = await create_db_pool(dsn=dsn) task_id = uuid7() with raises(HTTPException) as exc: await get_task( developer_id=developer_id, task_id=task_id, connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Task not found" in str(exc.raised.detail) @test("query: delete task sql - exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, task=test_task): """Test that a task can be successfully deleted.""" pool = await create_db_pool(dsn=dsn) # First verify task exists result = await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert result is not None assert result.id == task.id # Delete the task deleted = await delete_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert deleted is not None assert deleted.id == task.id # Verify task no longer exists with raises(HTTPException) as exc: await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Task not found" in str(exc.raised.detail) @test("query: delete task sql - not exists") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that attempting to delete a non-existent task raises an error.""" pool = await create_db_pool(dsn=dsn) task_id = uuid7() with raises(HTTPException) as exc: await delete_task( developer_id=developer_id, task_id=task_id, connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Task not found" in str(exc.raised.detail) # Add tests for list tasks @test("query: list tasks sql - with filters") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that tasks can be successfully filtered and retrieved.""" pool = await create_db_pool(dsn=dsn) result = await list_tasks( developer_id=developer_id, agent_id=agent.id, limit=10, offset=0, sort_by="updated_at", direction="asc", metadata_filter={"test": True}, connection_pool=pool, ) assert result is not None assert isinstance(result, list) assert all(isinstance(task, Task) for task in result) assert all(task.metadata.get("test") is True for task in result) @test("query: list tasks sql - no filters") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that a list of tasks can be successfully retrieved.""" pool = await create_db_pool(dsn=dsn) result = await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, ) assert result is not None, "Result is None" assert isinstance(result, list), f"Result is not a list, got {type(result)}" assert len(result) > 0, "Result is empty" assert all(isinstance(task, Task) for task in result), ( "Not all listed tasks are of type Task" ) @test("query: list tasks sql, invalid limit") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that listing tasks with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, limit=101, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" with raises(HTTPException) as exc: await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, limit=0, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list tasks sql, invalid offset") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that listing tasks with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, offset=-1, ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be >= 0" @test("query: list tasks sql, invalid sort by") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that listing tasks with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, sort_by="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list tasks sql, invalid sort direction") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that listing tasks with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_tasks( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, direction="invalid", ) assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: update task sql - exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, task=test_task): """Test that a task can be successfully updated.""" pool = await create_db_pool(dsn=dsn) updated = await update_task( developer_id=developer_id, task_id=task.id, agent_id=agent.id, data=UpdateTaskRequest( name="updated task", canonical_name="updated_task", description="updated task description", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], inherit_tools=False, metadata={"updated": True}, ), connection_pool=pool, ) assert updated is not None assert isinstance(updated, Task) assert updated.id == task.id # Verify task was updated updated_task = await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert updated_task.name == "updated task" assert updated_task.description == "updated task description" assert updated_task.metadata == {"updated": True} @test("query: update task sql - not exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that attempting to update a non-existent task raises an error.""" pool = await create_db_pool(dsn=dsn) task_id = uuid7() with raises(HTTPException) as exc: await update_task( developer_id=developer_id, task_id=task_id, agent_id=agent.id, data=UpdateTaskRequest( canonical_name="updated_task", name="updated task", description="updated task description", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], inherit_tools=False, ), connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Task not found" in str(exc.raised.detail) @test("query: patch task sql - exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that patching an existing task works correctly.""" pool = await create_db_pool(dsn=dsn) # Create initial task task = await create_task( developer_id=developer_id, agent_id=agent.id, data=CreateTaskRequest( canonical_name="test_task", name="test task", description="test task description", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"hi": "_"}}], inherit_tools=False, metadata={"initial": True}, ), connection_pool=pool, ) # Patch the task updated = await patch_task( developer_id=developer_id, task_id=task.id, agent_id=agent.id, data=PatchTaskRequest(name="patched task", metadata={"patched": True}), connection_pool=pool, ) assert updated is not None assert isinstance(updated, Task) assert updated.id == task.id # Verify task was patched correctly patched_task = await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) # Check that patched fields were updated assert patched_task.name == "patched task" assert patched_task.metadata == {"patched": True} # Check that non-patched fields remain unchanged assert patched_task.canonical_name == "test_task" assert patched_task.description == "test task description" @test("query: patch task sql - not exists") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that attempting to patch a non-existent task raises an error.""" pool = await create_db_pool(dsn=dsn) task_id = uuid7() with raises(HTTPException) as exc: await patch_task( developer_id=developer_id, task_id=task_id, agent_id=agent.id, data=PatchTaskRequest(name="patched task", metadata={"patched": True}), connection_pool=pool, ) assert exc.raised.status_code == 404 assert "Task not found" in str(exc.raised.detail) @test("query: get task with workflows and tools - no cartesian product") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that getting a task with both workflows and tools doesn't create duplicates.""" pool = await create_db_pool(dsn=dsn) # Create a task with workflows task = await create_task( developer_id=developer_id, agent_id=agent.id, task_id=uuid7(), data=CreateTaskRequest( name="test task with workflows", description="test task with multiple workflows and tools", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"result": "_"}}], tools=[ { "type": "function", "name": "workflow1", "function": {"name": "workflow1", "parameters": {"type": "object"}}, }, { "type": "function", "name": "workflow2", "function": {"name": "workflow2", "parameters": {"type": "object"}}, }, ], ), connection_pool=pool, ) # Get the task result = await get_task( developer_id=developer_id, task_id=task.id, connection_pool=pool, ) assert result is not None assert isinstance(result, Task) # Verify we have the correct number of tools (no duplicates) assert len(result.tools) == 2, f"Expected 2 tools, got {len(result.tools)}" tool_names = [tool.name for tool in result.tools] assert set(tool_names) == {"workflow1", "workflow2"}, "Tool names don't match" @test("query: get task filters tools by updated_at timestamp") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): """Test that tools not updated for the current task version are filtered out.""" pool = await create_db_pool(dsn=dsn) # Create a task v1 with a tool task_id = uuid7() canonical_name = "test_task_tool_lifecycle" # V1: Create task with tool_a await create_or_update_task( developer_id=developer_id, agent_id=agent.id, task_id=task_id, data=CreateOrUpdateTaskRequest( name="task v1", canonical_name=canonical_name, description="initial task version with tool", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"result": "v1"}}], tools=[ { "type": "function", "name": "tool_a", "function": { "name": "tool_a", "description": "Tool A", "parameters": {"type": "object"}, }, } ], ), connection_pool=pool, ) # Check v1 has the tool result_v1 = await get_task( developer_id=developer_id, task_id=task_id, connection_pool=pool, ) assert result_v1 is not None assert result_v1.version == 1 tool_names_v1 = [tool.name for tool in result_v1.tools] assert "tool_a" in tool_names_v1, "Tool A should be present in v1" assert len(result_v1.tools) == 1, f"Expected 1 tool in v1, got {len(result_v1.tools)}" # Wait to ensure different timestamps import asyncio await asyncio.sleep(0.1) # V2: Update to remove the tool await create_or_update_task( developer_id=developer_id, agent_id=agent.id, task_id=task_id, data=CreateOrUpdateTaskRequest( name="task v2", canonical_name=canonical_name, description="v2 without tool_a", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"result": "v2"}}], tools=[], # No tools in v2 inherit_tools=False, ), connection_pool=pool, ) # Check v2 - tool_a should be filtered out because its updated_at is older result_v2 = await get_task( developer_id=developer_id, task_id=task_id, connection_pool=pool, ) assert result_v2 is not None assert result_v2.version == 2 tool_names_v2 = [tool.name for tool in result_v2.tools] assert "tool_a" not in tool_names_v2, "Tool A should be filtered out in v2" assert len(result_v2.tools) == 0, f"Expected 0 tools in v2, got {len(result_v2.tools)}" # Wait to ensure different timestamps await asyncio.sleep(0.1) # V3: Re-add the same tool await create_or_update_task( developer_id=developer_id, agent_id=agent.id, task_id=task_id, data=CreateOrUpdateTaskRequest( name="task v3", canonical_name=canonical_name, description="v3 with tool_a re-added", input_schema={"type": "object", "additionalProperties": True}, main=[{"evaluate": {"result": "v3"}}], tools=[ { "type": "function", "name": "tool_a", "function": { "name": "tool_a", "description": "Tool A", "parameters": {"type": "object"}, }, } ], ), connection_pool=pool, ) # Check v3 - tool_a should be present again because it was updated result_v3 = await get_task( developer_id=developer_id, task_id=task_id, connection_pool=pool, ) assert result_v3 is not None assert result_v3.version == 3 tool_names_v3 = [tool.name for tool in result_v3.tools] assert "tool_a" in tool_names_v3, "Tool A should be present again in v3" assert len(result_v3.tools) == 1, f"Expected 1 tool in v3, got {len(result_v3.tools)}" ================================================ FILE: src/agents-api/tests/test_task_routes.py ================================================ # Tests for task routes import json from unittest.mock import patch from uuid import UUID from agents_api.autogen.openapi_model import ( ExecutionStatusEvent, Transition, ) from agents_api.env import api_key, api_key_header_name, multi_tenant_mode from agents_api.queries.executions.create_execution_transition import ( create_execution_transition, ) from fastapi.testclient import TestClient from uuid_extensions import uuid7 from ward import skip, test from .fixtures import ( CreateTransitionRequest, client, create_db_pool, make_request, pg_dsn, test_agent, test_developer_id, test_execution, test_execution_started, test_task, ) from .utils import patch_testing_temporal @test("route: unauthorized should fail") def _(client=client, agent=test_agent): data = { "name": "test user", "main": [ { "kind_": "evaluate", "evaluate": { "additionalProp1": "value1", }, }, ], } response = client.request( method="POST", url=f"/agents/{agent.id!s}/tasks", json=data, ) assert response.status_code == 403 @test("route: create task") def _(make_request=make_request, agent=test_agent): data = { "name": "test user", "main": [ { "kind_": "evaluate", "evaluate": { "additionalProp1": "value1", }, }, ], } response = make_request( method="POST", url=f"/agents/{agent.id!s}/tasks", json=data, ) assert response.status_code == 201 @test("route: create task execution") async def _(make_request=make_request, task=test_task): data = { "input": {}, "metadata": {}, } async with patch_testing_temporal(): response = make_request( method="POST", url=f"/tasks/{task.id!s}/executions", json=data, ) assert response.status_code == 201 @test("route: get execution not exists") def _(make_request=make_request): execution_id = str(uuid7()) response = make_request( method="GET", url=f"/executions/{execution_id}", ) assert response.status_code == 404 @test("route: get execution exists") def _(make_request=make_request, execution=test_execution): response = make_request( method="GET", url=f"/executions/{execution.id!s}", ) assert response.status_code == 200 @test("route: get task not exists") def _(make_request=make_request): task_id = str(uuid7()) response = make_request( method="GET", url=f"/tasks/{task_id}", ) assert response.status_code == 404 @test("route: get task exists") def _(make_request=make_request, task=test_task): response = make_request( method="GET", url=f"/tasks/{task.id!s}", ) assert response.status_code == 200 @test("route: list all execution transition") async def _(make_request=make_request, execution=test_execution_started): response = make_request( method="GET", url=f"/executions/{execution.id!s}/transitions", ) assert response.status_code == 200 response = response.json() transitions = response["items"] assert isinstance(transitions, list) assert len(transitions) > 0 @test("route: list a single execution transition") async def _( dsn=pg_dsn, make_request=make_request, execution=test_execution_started, developer_id=test_developer_id, ): pool = await create_db_pool(dsn=dsn) scope_id = uuid7() # Create a transition transition = await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=CreateTransitionRequest( type="step", output={}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "wf1", "step": 1, "scope_id": scope_id}, ), connection_pool=pool, ) response = make_request( method="GET", url=f"/executions/{execution.id!s}/transitions/{transition.id!s}", ) assert response.status_code == 200 response = response.json() assert isinstance(transition, Transition) assert str(transition.id) == response["id"] assert transition.type == response["type"] assert transition.output == response["output"] assert transition.current.workflow == response["current"]["workflow"] assert transition.current.step == response["current"]["step"] assert transition.next.workflow == response["next"]["workflow"] assert transition.next.step == response["next"]["step"] @test("route: list task executions") def _(make_request=make_request, execution=test_execution): response = make_request( method="GET", url=f"/tasks/{execution.task_id!s}/executions", ) assert response.status_code == 200 response = response.json() executions = response["items"] assert isinstance(executions, list) assert len(executions) > 0 @test("route: list tasks") def _(make_request=make_request, agent=test_agent): response = make_request( method="GET", url=f"/agents/{agent.id!s}/tasks", ) data = { "name": "test user", "main": [ { "kind_": "evaluate", "evaluate": { "additionalProp1": "value1", }, }, ], } response = make_request( method="POST", url=f"/agents/{agent.id!s}/tasks", json=data, ) assert response.status_code == 201 response = make_request( method="GET", url=f"/agents/{agent.id!s}/tasks", ) assert response.status_code == 200 response = response.json() tasks = response["items"] assert isinstance(tasks, list) assert len(tasks) > 0 # It's failing while getting the temporal client in # the `update_execution.py` route, but it's correctly # getting it in the `create_task_execution.py` route @skip("Temporal connection issue") @test("route: update execution") async def _(make_request=make_request, task=test_task): data = { "input": {}, "metadata": {}, } async with patch_testing_temporal(): response = make_request( method="POST", url=f"/tasks/{task.id!s}/executions", json=data, ) execution = response.json() data = { "status": "running", } execution_id = execution["id"] response = make_request( method="PUT", url=f"/executions/{execution_id}", json=data, ) assert response.status_code == 200 execution_id = response.json()["id"] response = make_request( method="GET", url=f"/executions/{execution_id}", ) assert response.status_code == 200 execution = response.json() assert execution["status"] == "running" @test("route: stream execution status SSE endpoint") def _( client: TestClient = client, test_execution_started=test_execution_started, test_developer_id=test_developer_id, ): # Mock SSE response data that simulates a progressing execution mock_sse_responses = [ ExecutionStatusEvent( execution_id=UUID("068306ff-e0f3-7fe9-8000-0013626a759a"), status="starting", updated_at="2025-05-23T12:54:24.565424Z", error=None, transition_count=1, metadata={}, ), ExecutionStatusEvent( execution_id=UUID("068306ff-e0f3-7fe9-8000-0013626a759a"), status="running", updated_at="2025-05-23T12:54:30.903484Z", error=None, transition_count=2, metadata={}, ), ExecutionStatusEvent( execution_id=UUID("068306ff-e0f3-7fe9-8000-0013626a759a"), status="succeeded", updated_at="2025-05-23T12:56:12.054067Z", error=None, transition_count=3, metadata={}, ), ] # Simple mock SSE server that immediately returns all events async def mock_sse_publisher(send_chan, *args, **kwargs): """Mock publisher that sends all events at once and then exits""" async with send_chan: for response in mock_sse_responses: await send_chan.send({"data": response.model_dump_json()}) execution = test_execution_started url = f"/executions/{execution.id}/status.stream" # Prepare authentication headers headers = {api_key_header_name: api_key} if multi_tenant_mode: headers["X-Developer-Id"] = str(test_developer_id) # Replace the execution_status_publisher with our simplified mock version with ( patch( "agents_api.routers.tasks.stream_execution_status.execution_status_publisher", mock_sse_publisher, ), client.stream("GET", url, headers=headers) as response, ): # Verify response headers and status code content_type = response.headers.get("content-type", "") assert content_type.startswith("text/event-stream"), ( f"Unexpected content type: {content_type}" ) assert response.status_code == 200 # Read and parse events from the stream received_events = [] max_attempts = 10 # Limit the number of attempts to avoid infinite loops # Read the stream with a limit on attempts for i, line in enumerate(response.iter_lines()): if line: event_line = line.decode() if isinstance(line, bytes | bytearray) else line if event_line.startswith("data:"): # Parse JSON payload payload = event_line[len("data:") :].strip() data = json.loads(payload) received_events.append(data) # Check if we've received all events or reached max attempts if len(received_events) >= len(mock_sse_responses) or i >= max_attempts: break # Ensure we close the connection response.close() # Verify we received the expected events assert len(received_events) == len(mock_sse_responses), ( f"Expected {len(mock_sse_responses)} events, got {len(received_events)}" ) # Verify the status progression assert received_events[0]["status"] == "starting" assert received_events[1]["status"] == "running" assert received_events[2]["status"] == "succeeded" # Verify other fields for i, event in enumerate(received_events): assert event["execution_id"] == "068306ff-e0f3-7fe9-8000-0013626a759a" assert isinstance(event["updated_at"], str) assert event["transition_count"] == i + 1 @test("route: stream execution status SSE endpoint - non-existing execution") def _(client: TestClient = client, test_developer_id=test_developer_id): # Create a random UUID for a non-existing execution non_existing_execution_id = uuid7() url = f"/executions/{non_existing_execution_id}/status.stream" # Prepare authentication headers headers = {api_key_header_name: api_key} if multi_tenant_mode: headers["X-Developer-Id"] = str(test_developer_id) # Make the request to the SSE endpoint - should return a 404 error response = client.get(url, headers=headers) # Verify response status code is 404 assert response.status_code == 404 # Parse the error response error_data = response.json() # Verify error structure assert "error" in error_data assert "message" in error_data["error"] assert "code" in error_data["error"] assert "type" in error_data["error"] # Verify specific error details assert f"Execution {non_existing_execution_id} not found" in error_data["error"]["message"] assert error_data["error"]["code"] == "http_404" assert error_data["error"]["type"] == "http_error" ================================================ FILE: src/agents-api/tests/test_task_validation.py ================================================ from agents_api.autogen.openapi_model import CreateTaskRequest from agents_api.common.utils.task_validation import validate_py_expression, validate_task from agents_api.env import enable_backwards_compatibility_for_syntax from ward import test @test("task_validation: Python expression validator detects syntax errors") def test_syntax_error_detection(): # Test with a syntax error expression = "$ 1 + )" result = validate_py_expression(expression) assert len(result["syntax_errors"]) > 0 assert "Syntax error" in result["syntax_errors"][0] @test("task_validation: Python expression validator detects undefined names") def test_undefined_name_detection(): # Test with undefined variable expression = "$ undefined_var + 10" result = validate_py_expression(expression) assert len(result["undefined_names"]) > 0 assert "Undefined name: 'undefined_var'" in result["undefined_names"] @test("task_validation: Python expression validator allows steps variable access") def test_allow_steps_var(): # Test with accessing steps expression = "$ steps[0].output" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) @test("task_validation: Python expression validator detects unsafe operations") def test_unsafe_operations_detection(): # Test with unsafe attribute access expression = "$ some_obj.dangerous_method()" result = validate_py_expression(expression) assert len(result["unsafe_operations"]) > 0 assert "Potentially unsafe attribute access" in result["unsafe_operations"][0] @test("task_validation: Python expression validator detects unsafe dunder attributes") def test_dunder_attribute_detection(): # Test with dangerous dunder attribute access expression = "$ obj.__class__" result = validate_py_expression(expression) assert len(result["unsafe_operations"]) > 0 assert ( "Potentially unsafe dunder attribute access: __class__" in result["unsafe_operations"][0] ) # Test with another dangerous dunder attribute expression = "$ obj.__import__('os')" result = validate_py_expression(expression) assert len(result["unsafe_operations"]) > 0 assert ( "Potentially unsafe dunder attribute access: __import__" in result["unsafe_operations"][0] ) @test("task_validation: Python expression validator detects potential runtime errors") def test_runtime_error_detection(): # Test division by zero expression = "$ 10 / 0" result = validate_py_expression(expression) assert len(result["potential_runtime_errors"]) > 0 assert "Division by zero" in result["potential_runtime_errors"][0] @test("task_validation: Python expression backwards_compatibility") def test_backwards_compatibility(): if enable_backwards_compatibility_for_syntax: # Test division by zero expression = "{{ 10 / 0 }}" result = validate_py_expression(expression) assert len(result["potential_runtime_errors"]) > 0 assert "Division by zero" in result["potential_runtime_errors"][0] @test("task_validation: Python expression validator accepts valid expressions") def test_valid_expression(): # Test a valid expression expression = "$ _.topic if hasattr(_, 'topic') else 'default'" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) @test("task_validation: Python expression validator handles special underscore variable") def test_underscore_allowed(): # Test that _ is allowed by default expression = "$ _.attribute" result = validate_py_expression(expression) assert all(len(issues) == 0 for issues in result.values()) invalid_task_dict = { "name": "Test Task", "description": "A task with invalid expressions", "inherit_tools": True, "tools": [], "main": [ { "evaluate": { "result": "$ 1 + )" # Syntax error } }, { "if": "$ undefined_var == True", # Undefined variable "then": {"evaluate": {"value": "$ 'valid'"}}, }, ], } valid_task_dict = { "name": "Test Task", "description": "A task with valid expressions", "inherit_tools": True, "tools": [], "main": [ { "evaluate": { "result": "$ 1 + 2" # Valid expression } }, { "if": "$ _ is not None", # Valid expression "then": {"evaluate": {"value": "$ str(_)"}}, }, ], } @test("task_validation: Task validator detects invalid Python expressions in tasks") def test_validation_of_task_with_invalid_expressions(): # Convert dict to CreateTaskRequest task = CreateTaskRequest.model_validate(invalid_task_dict) # Validate the task validation_result = validate_task(task) # Verify validation result assert not validation_result.is_valid assert len(validation_result.python_expression_issues) > 0 # Check that both issues were detected syntax_error_found = False undefined_var_found = False for issue in validation_result.python_expression_issues: if "Syntax error" in issue.message: syntax_error_found = True if "Undefined name: 'undefined_var'" in issue.message: undefined_var_found = True assert syntax_error_found assert undefined_var_found @test("task_validation: Task validator accepts valid Python expressions in tasks") def test_validation_of_valid_task(): # Convert dict to CreateTaskRequest task = CreateTaskRequest.model_validate(valid_task_dict) # Validate the task validation_result = validate_task(task) # Verify validation result assert validation_result.is_valid assert len(validation_result.python_expression_issues) == 0 @test("task_validation: Simple test of validation integration") def _(): # Create a simple valid task task_dict = { "name": "Simple Task", "description": "A task for basic test", "inherit_tools": True, "tools": [], "main": [{"evaluate": {"result": "$ 1 + 2"}}], } task = CreateTaskRequest.model_validate(task_dict) # Validate the task with the actual validator validation_result = validate_task(task) # Should be valid since the expression is correct assert validation_result.is_valid nested_task_with_error_dict = { "name": "Nested Error Task", "description": "A task with invalid expressions in nested steps", "inherit_tools": True, "tools": [], "main": [ { "if": "$ _ is not None", # Valid expression "then": { "evaluate": { "value": "$ undefined_nested_var" # Invalid: undefined variable } }, "else": { "if": "$ True", "then": { "evaluate": { "result": "$ 1 + )" # Invalid: syntax error } }, }, }, { "match": { "case": "$ _.type", "cases": [ { "case": "$ 'text'", "then": { "evaluate": { "value": "$ 1 / 0" # Invalid: division by zero } }, } ], } }, { "foreach": { "in": "$ range(3)", "do": { "evaluate": { "result": "$ unknown_func()" # Invalid: undefined function } }, } }, ], } @test("task_validation: Task validator can identify issues in if/else nested branches") def test_recursive_validation_of_if_else_branches(): """Verify that the task validator can identify issues in nested if/else blocks.""" # Manually set up an if step with a nested step structure step_with_nested_if = { "if": { # Note: Using this format for Pydantic validation "if": "$ True", # Valid expression "then": { "evaluate": { "value": "$ 1 + )" # Deliberate syntax error in nested step } }, } } # Convert to task spec format task_spec = {"workflows": [{"name": "main", "steps": [step_with_nested_if]}]} # Check task validation using the full validator from agents_api.common.utils.task_validation import validate_task_expressions validation_results = validate_task_expressions(task_spec) # Check that we found the issue in the nested structure assert "main" in validation_results, "No validation results for main workflow" assert "0" in validation_results["main"], "No validation results for step 0" # Check specifically for syntax error in a nested structure nested_error_found = False for issue in validation_results["main"]["0"]: if "Syntax error" in str(issue["issues"]): nested_error_found = True assert nested_error_found, "Did not detect syntax error in nested structure" @test("task_validation: Task validator can identify issues in match statement nested blocks") def test_recursive_validation_of_match_branches(): """Verify that the task validator can identify issues in nested match/case blocks.""" # Set up a match step with a nested error step_with_nested_match = { "match": { "case": "$ _.type", "cases": [ { "case": "$ 'text'", "then": { "evaluate": { "value": "$ undefined_var" # Deliberate undefined variable } }, } ], } } # Convert to task spec format task_spec = {"workflows": [{"name": "main", "steps": [step_with_nested_match]}]} # Check task validation using the full validator from agents_api.common.utils.task_validation import validate_task_expressions validation_results = validate_task_expressions(task_spec) # Check that we found the issue in the nested structure nested_error_found = False for issue in validation_results["main"]["0"]: if "undefined_var" in str(issue["expression"]) and "Undefined name" in str( issue["issues"] ): nested_error_found = True assert nested_error_found, "Did not detect undefined variable in nested case structure" @test("task_validation: Task validator can identify issues in foreach nested blocks") def test_recursive_validation_of_foreach_blocks(): """Verify that the task validator can identify issues in nested foreach blocks.""" # Set up a foreach step with a nested error step_with_nested_foreach = { "foreach": { "in": "$ range(3)", "do": { "evaluate": { "value": "$ unknown_func()" # Deliberate undefined function } }, } } # Convert to task spec format task_spec = {"workflows": [{"name": "main", "steps": [step_with_nested_foreach]}]} # Check task validation using the full validator from agents_api.common.utils.task_validation import validate_task_expressions validation_results = validate_task_expressions(task_spec) # Check that we found the issue in the nested structure nested_error_found = False for issue in validation_results["main"]["0"]: if "unknown_func()" in str(issue["expression"]) and "Undefined name" in str( issue["issues"] ): nested_error_found = True assert nested_error_found, "Did not detect undefined function in nested foreach structure" @test( "task_validation: Python expression validator correctly handles list comprehension variables" ) def test_list_comprehension_variables(): # Test with a list comprehension that uses a local variable expression = "$ [item['text'] for item in _['content']]" result = validate_py_expression(expression) # Should not have any undefined name issues for 'item' assert all(len(issues) == 0 for issues in result.values()), ( f"Found issues in valid list comprehension: {result}" ) @test("task_validation: Python expression validator detects unsupported features") def test_unsupported_features_detection(): # Test with a set comprehension (unsupported) expression = "$ {x for x in range(10)}" result = validate_py_expression(expression) # Should detect the set comprehension as unsupported assert len(result["unsupported_features"]) > 0 assert "Set comprehensions are not supported" in result["unsupported_features"][0] # Test with a lambda function (unsupported) expression = "$ (lambda x: x + 1)(5)" result = validate_py_expression(expression) # Should detect the lambda function as unsupported assert len(result["unsupported_features"]) > 0 assert "Lambda functions are not supported" in result["unsupported_features"][0] # Test with a walrus operator (unsupported) expression = "$ (x := 10) + x" result = validate_py_expression(expression) # Should detect the walrus operator as unsupported assert len(result["unsupported_features"]) > 0 assert ( "Assignment expressions (walrus operator) are not supported" in result["unsupported_features"][0] ) ================================================ FILE: src/agents-api/tests/test_tool_call_step.py ================================================ from uuid import UUID from agents_api.activities.task_steps.tool_call_step import ( construct_tool_call, generate_call_id, ) from agents_api.autogen.openapi_model import CreateToolRequest, SystemDef, Tool from ward import test @test("generate_call_id returns call ID with proper format") async def _(): # Generate a call ID call_id = generate_call_id() # Validate the call ID format assert call_id.startswith("call_") # The call_id should be call_ followed by 24 base64 characters assert len(call_id) == 29 # Should not have any padding character assert "=" not in call_id @test("construct_tool_call correctly formats function tool") async def _(): # Create a function tool tool = CreateToolRequest( name="test_function", type="function", function={ "description": "A test function", "parameters": {"type": "object", "properties": {"param1": {"type": "string"}}}, }, ) arguments = {"param1": "test_value"} call_id = "call_abc123" # Construct the tool call tool_call = construct_tool_call(tool, arguments, call_id) # Verify the structure assert tool_call["id"] == call_id assert tool_call["type"] == "function" assert tool_call["function"]["name"] == "test_function" assert tool_call["function"]["arguments"] == arguments @test("construct_tool_call correctly formats system tool") async def _(): # Create a system tool system_info = SystemDef( resource="doc", operation="get", resource_id=UUID("00000000-0000-0000-0000-000000000000"), subresource="doc", ) tool = CreateToolRequest(name="test_system", type="system", system=system_info) arguments = {"param1": "test_value"} call_id = "call_abc123" # Construct the tool call tool_call = construct_tool_call(tool, arguments, call_id) # Verify the structure assert tool_call["id"] == call_id assert tool_call["type"] == "system" assert tool_call["system"]["resource"] == "doc" assert tool_call["system"]["operation"] == "get" assert tool_call["system"]["resource_id"] == UUID("00000000-0000-0000-0000-000000000000") assert tool_call["system"]["subresource"] == "doc" assert tool_call["system"]["arguments"] == arguments @test("construct_tool_call works with Tool objects (not just CreateToolRequest)") async def _(): # Create a function Tool (not CreateToolRequest) tool = Tool( id=UUID("00000000-0000-0000-0000-000000000000"), name="test_function", type="function", function={ "description": "A test function", "parameters": {"type": "object", "properties": {"param1": {"type": "string"}}}, }, agent_id=UUID("00000000-0000-0000-0000-000000000000"), developer_id=UUID("00000000-0000-0000-0000-000000000000"), created_at="2023-01-01T00:00:00Z", updated_at="2023-01-01T00:00:00Z", ) arguments = {"param1": "test_value"} call_id = "call_abc123" # Construct the tool call tool_call = construct_tool_call(tool, arguments, call_id) # Verify the structure assert tool_call["id"] == call_id assert tool_call["type"] == "function" assert tool_call["function"]["name"] == "test_function" assert tool_call["function"]["arguments"] == arguments ================================================ FILE: src/agents-api/tests/test_tool_queries.py ================================================ # # Tests for tool queries from agents_api.autogen.openapi_model import ( CreateToolRequest, PatchToolRequest, Tool, UpdateToolRequest, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.tools.create_tools import create_tools from agents_api.queries.tools.delete_tool import delete_tool from agents_api.queries.tools.get_tool import get_tool from agents_api.queries.tools.list_tools import list_tools from agents_api.queries.tools.patch_tool import patch_tool from agents_api.queries.tools.update_tool import update_tool from ward import test from tests.fixtures import pg_dsn, test_agent, test_developer_id, test_tool @test("query: create tool") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): pool = await create_db_pool(dsn=dsn) function = { "name": "hello_world", "description": "A function that prints hello world", "parameters": {"type": "object", "properties": {}}, } tool = { "function": function, "name": "hello_world", "type": "function", } result = await create_tools( developer_id=developer_id, agent_id=agent.id, data=[CreateToolRequest(**tool)], connection_pool=pool, ) assert result is not None assert isinstance(result[0], Tool) @test("query: delete tool") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent): pool = await create_db_pool(dsn=dsn) function = { "name": "temp_temp", "description": "A function that prints hello world", "parameters": {"type": "object", "properties": {}}, } tool = { "function": function, "name": "temp_temp", "type": "function", } [tool, *_] = await create_tools( developer_id=developer_id, agent_id=agent.id, data=[CreateToolRequest(**tool)], connection_pool=pool, ) result = await delete_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, connection_pool=pool, ) assert result is not None @test("query: get tool") async def _(dsn=pg_dsn, developer_id=test_developer_id, tool=test_tool, agent=test_agent): pool = await create_db_pool(dsn=dsn) result = await get_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, connection_pool=pool, ) assert result is not None, "Result is None" @test("query: list tools") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, tool=test_tool): pool = await create_db_pool(dsn=dsn) result = await list_tools( developer_id=developer_id, agent_id=agent.id, connection_pool=pool, ) assert result is not None, "Result is None" assert len(result) > 0, "Result is empty" assert all(isinstance(tool, Tool) for tool in result), ( "Not all listed tools are of type Tool" ) @test("query: patch tool") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, tool=test_tool): pool = await create_db_pool(dsn=dsn) patch_data = PatchToolRequest( name="patched_tool", function={ "description": "A patched function that prints hello world", "parameters": {"param1": "value1"}, }, ) result = await patch_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, data=patch_data, connection_pool=pool, ) assert result is not None tool = await get_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, connection_pool=pool, ) assert tool.name == "patched_tool" assert tool.function.description == "A patched function that prints hello world" assert tool.function.parameters @test("query: update tool") async def _(dsn=pg_dsn, developer_id=test_developer_id, agent=test_agent, tool=test_tool): pool = await create_db_pool(dsn=dsn) update_data = UpdateToolRequest( name="updated_tool", description="An updated description", type="function", function={ "description": "An updated function that prints hello world", }, ) result = await update_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, data=update_data, connection_pool=pool, ) assert result is not None tool = await get_tool( developer_id=developer_id, agent_id=agent.id, tool_id=tool.id, connection_pool=pool, ) assert tool.name == "updated_tool" assert not tool.function.parameters ================================================ FILE: src/agents-api/tests/test_tool_runner.py ================================================ from unittest.mock import patch from agents_api.autogen.openapi_model import ( ApiCallDef, CreateToolRequest, DummyIntegrationDef, FunctionDef, SystemDef, ) from agents_api.common.utils.tool_runner import format_tool from ward import test @test("format_tool correctly formats function tool") async def _(): tool = CreateToolRequest( name="test_function", type="function", function=FunctionDef( parameters={"type": "object", "properties": {"param1": {"type": "string"}}}, ), description="A test function", ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "test_function" assert result["function"]["description"] == "A test function" assert result["function"]["parameters"]["properties"]["param1"]["type"] == "string" @test("format_tool correctly formats integration tool") async def _(): with patch("agents_api.clients.integrations.convert_to_openai_tool") as mock_convert: mock_convert.return_value = { "type": "function", "function": { "name": "slack", "description": "Send message to Slack", "parameters": {"type": "object"}, }, } tool = CreateToolRequest( name="dummy_integration", type="integration", integration=DummyIntegrationDef(provider="dummy", method="post_message"), ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "slack" mock_convert.assert_called_once_with(provider="dummy", method="post_message") @test("format_tool correctly formats api_call tool") async def _(): tool = CreateToolRequest( name="weather_api", type="api_call", description="Get weather data", api_call=ApiCallDef( method="GET", url="https://api.weather.com", params_schema={"type": "object", "properties": {"city": {"type": "string"}}}, ), ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "weather_api" assert result["function"]["description"] == "Get weather data" assert result["function"]["parameters"]["properties"]["city"]["type"] == "string" @test("format_tool handles missing description") async def _(): tool = CreateToolRequest( name="simple_function", type="function", function=FunctionDef(parameters={"type": "object"}), ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "simple_function" assert result["function"]["description"] is None assert result["function"]["parameters"]["type"] == "object" @test("format_tool correctly formats system tool") async def _(): # Use a real system definition that maps to an actual handler tool = CreateToolRequest( name="get_agent", type="system", description="Retrieve agent information", system=SystemDef( resource="agent", operation="get", ), ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "get_agent" assert result["function"]["description"] == "Retrieve agent information" # Check that parameters schema was generated from actual handler assert "properties" in result["function"]["parameters"] # The actual get_agent handler should have these parameters assert "agent_id" in result["function"]["parameters"]["properties"] # Check that the parameter has proper schema assert result["function"]["parameters"]["properties"]["agent_id"]["type"] == "string" assert result["function"]["parameters"]["properties"]["agent_id"]["format"] == "uuid" @test("format_tool uses handler docstring when no description provided") async def _(): # Use a real system definition without providing a description tool = CreateToolRequest( name="list_agents", type="system", # No description provided - should fallback to handler's docstring system=SystemDef( resource="agent", operation="list", ), ) result = await format_tool(tool) assert result["type"] == "function" assert result["function"]["name"] == "list_agents" # Should use handler's docstring when no description provided assert result["function"]["description"] is not None assert len(result["function"]["description"]) > 0 # The description should come from the actual handler's docstring assert "agent" in result["function"]["description"].lower() # Check that parameters schema was generated assert "properties" in result["function"]["parameters"] # List operations typically have pagination parameters assert "limit" in result["function"]["parameters"]["properties"] assert "offset" in result["function"]["parameters"]["properties"] ================================================ FILE: src/agents-api/tests/test_transitions_queries.py ================================================ """Tests for transitions queries.""" from datetime import timedelta from uuid import UUID from agents_api.autogen.openapi_model import CreateTransitionRequest from agents_api.clients.pg import create_db_pool from agents_api.common.utils.datetime import datetime, utcnow from agents_api.queries.executions import ( list_execution_inputs_data, list_execution_state_data, ) from agents_api.queries.executions.create_execution_transition import ( create_execution_transition, ) from asyncpg import Pool from uuid_extensions import uuid7 from ward import test from tests.fixtures import ( custom_scope_id, pg_dsn, test_developer_id, test_execution_started, test_task, ) @test("query: list execution inputs data") async def _( dsn=pg_dsn, developer_id=test_developer_id, scope_id=custom_scope_id, execution_started=test_execution_started, ): pool = await create_db_pool(dsn=dsn) execution = execution_started data = [] for i in range(10): data.append( CreateTransitionRequest( type="init_branch", output=i + 1, current={ "workflow": f"`main`[0].foreach[{max(0, i - 1)}]", "step": 0, "scope_id": scope_id, }, next={"workflow": f"`main`[0].foreach[{i}]", "step": 0, "scope_id": scope_id}, ) ) data.append( CreateTransitionRequest( type="finish_branch", output={"inside_foreach": f"inside foreach {i}"}, current={ "workflow": f"`main`[0].foreach[{i}]", "step": 0, "scope_id": scope_id, }, next=None, ) ) data.append( CreateTransitionRequest( type="step", output=[{"inside_foreach": "inside foreach"}], current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "main", "step": 1, "scope_id": scope_id}, ) ) data.append( CreateTransitionRequest( type="step", output={"inside_evaluate": "inside evaluate"}, current={"workflow": "main", "step": 1, "scope_id": scope_id}, next={"workflow": "main", "step": 2, "scope_id": scope_id}, ) ) data.append( CreateTransitionRequest( type="finish", output={"final_step": "final step"}, current={"workflow": "main", "step": 2, "scope_id": scope_id}, next=None, ) ) for transition in data: await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=transition, connection_pool=pool, ) transitions = await list_execution_inputs_data( execution_id=execution.id, scope_id=scope_id, direction="asc", connection_pool=pool, ) assert len(transitions) == 3 assert transitions[0].output == {} assert transitions[1].output == [{"inside_foreach": "inside foreach"}] assert transitions[2].output == {"inside_evaluate": "inside evaluate"} @test("query: list execution state data") async def _( dsn=pg_dsn, developer_id=test_developer_id, scope_id=custom_scope_id, execution_started=test_execution_started, ): pool = await create_db_pool(dsn=dsn) execution = execution_started data = [] data.append( CreateTransitionRequest( type="step", output={"set_step": "set step"}, current={"workflow": "main", "step": 0, "scope_id": scope_id}, next={"workflow": "main", "step": 1, "scope_id": scope_id}, metadata={"step_type": "SetStep"}, ) ) data.append( CreateTransitionRequest( type="finish", output={"final_step": "final step"}, current={"workflow": "main", "step": 1, "scope_id": scope_id}, next=None, ) ) for transition in data: await create_execution_transition( developer_id=developer_id, execution_id=execution.id, data=transition, connection_pool=pool, ) transitions = await list_execution_state_data( execution_id=execution.id, scope_id=scope_id, direction="asc", connection_pool=pool, ) assert len(transitions) == 1 assert transitions[0].output == {"set_step": "set step"} async def create_execution( pool: Pool, developer_id: UUID, task_id: UUID, created_at: datetime, ): execution_id = uuid7() create_execution_query = """ INSERT INTO executions ( developer_id, task_id, execution_id, input, metadata, task_version, created_at ) VALUES ( $1, $2, $3, $4, $5, 1, $6 ) RETURNING *; """ await pool.fetchrow( create_execution_query, str(developer_id), str(task_id), str(execution_id), {"test": "test"}, {}, created_at, ) return execution_id async def create_transition( pool: Pool, execution_id: UUID, type: str, current_step: dict, next_step: dict, output: dict, metadata: dict, created_at: datetime, ): create_execution_transition_query = """ INSERT INTO transitions ( execution_id, transition_id, type, step_label, current_step, next_step, output, task_token, metadata, created_at ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 ) RETURNING *; """ transition_id = uuid7() await pool.fetchrow( create_execution_transition_query, str(execution_id), str(transition_id), type, "label", current_step, next_step, output, None, metadata, created_at, ) @test("query: list execution inputs data: search_window") async def _( dsn=pg_dsn, developer_id=test_developer_id, scope_id=custom_scope_id, task=test_task, ): pool = await create_db_pool(dsn=dsn) execution_id = await create_execution( pool, developer_id, task.id, utcnow() - timedelta(weeks=1) ) await create_transition( pool, execution_id, "init", {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"init_step": "init step"}, {}, utcnow() - timedelta(weeks=1), ) await create_transition( pool, execution_id, "step", {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"workflow_name": "main", "step_index": 1, "scope_id": scope_id}, {"step_step": "step step"}, {}, utcnow() - timedelta(days=1), ) transitions_with_search_window = await list_execution_inputs_data( execution_id=execution_id, scope_id=scope_id, direction="asc", connection_pool=pool, search_window=timedelta(days=5), ) assert len(transitions_with_search_window) == 1 assert transitions_with_search_window[0].output == {"step_step": "step step"} transitions_without_search_window = await list_execution_inputs_data( execution_id=execution_id, scope_id=scope_id, direction="asc", connection_pool=pool ) assert len(transitions_without_search_window) == 2 assert transitions_without_search_window[0].output == {"init_step": "init step"} assert transitions_without_search_window[1].output == {"step_step": "step step"} @test("query: list execution state data: search_window") async def _( dsn=pg_dsn, developer_id=test_developer_id, scope_id=custom_scope_id, task=test_task, ): pool = await create_db_pool(dsn=dsn) execution_id = await create_execution( pool, developer_id, task.id, utcnow() - timedelta(weeks=1) ) await create_transition( pool, execution_id, "init", {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"init_step": "init step"}, {}, utcnow() - timedelta(weeks=1), ) await create_transition( pool, execution_id, "step", {"workflow_name": "main", "step_index": 0, "scope_id": scope_id}, {"workflow_name": "main", "step_index": 1, "scope_id": scope_id}, {"init_step": "init step"}, {"step_type": "SetStep"}, utcnow() - timedelta(weeks=1), ) await create_transition( pool, execution_id, "step", {"workflow_name": "main", "step_index": 1, "scope_id": scope_id}, {"workflow_name": "main", "step_index": 2, "scope_id": scope_id}, {"step_step": "step step"}, {"step_type": "SetStep"}, utcnow() - timedelta(days=1), ) transitions_with_search_window = await list_execution_state_data( execution_id=execution_id, scope_id=scope_id, direction="asc", connection_pool=pool, search_window=timedelta(days=5), ) assert len(transitions_with_search_window) == 1 assert transitions_with_search_window[0].output == {"step_step": "step step"} transitions_without_search_window = await list_execution_state_data( execution_id=execution_id, scope_id=scope_id, direction="asc", connection_pool=pool ) assert len(transitions_without_search_window) == 2 assert transitions_without_search_window[0].output == {"init_step": "init step"} assert transitions_without_search_window[1].output == {"step_step": "step step"} ================================================ FILE: src/agents-api/tests/test_usage_cost.py ================================================ """ Tests for the usage cost tracking functionality. """ import asyncio from datetime import UTC, datetime, timedelta from decimal import Decimal from agents_api.clients.pg import create_db_pool from agents_api.queries.developers.create_developer import create_developer from agents_api.queries.usage.create_usage_record import create_usage_record from agents_api.queries.usage.get_user_cost import get_usage_cost from uuid_extensions import uuid7 from ward import test from .fixtures import pg_dsn, test_developer_id @test("query: get_usage_cost returns zero cost when no usage records exist") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: """Test that get_usage_cost returns zero cost when no usage records exist.""" pool = await create_db_pool(dsn=dsn) # Calculate expected cost expected_cost = 0.0 # Get the usage cost cost_record = await get_usage_cost(developer_id=developer_id, connection_pool=pool) # Verify the record assert cost_record is not None, "Should have a cost record" assert cost_record["developer_id"] == developer_id assert "cost" in cost_record, "Should have a cost field" assert isinstance(cost_record["cost"], Decimal), "Cost should be a Decimal" assert cost_record["cost"] == expected_cost, ( f"Cost should be {expected_cost}, got {cost_record['cost']}" ) assert "month" in cost_record, "Should have a month field" assert isinstance(cost_record["month"], datetime), "Month should be a datetime" @test("query: get_usage_cost returns the correct cost when records exist") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: """Test that get_usage_cost returns the correct cost for a developer with usage records.""" pool = await create_db_pool(dsn=dsn) # Create some usage records for the developer record1 = await create_usage_record( developer_id=developer_id, model="gpt-4o-mini", prompt_tokens=1000, completion_tokens=2000, connection_pool=pool, ) record2 = await create_usage_record( developer_id=developer_id, model="gpt-4o-mini", prompt_tokens=500, completion_tokens=1500, connection_pool=pool, ) # Calculate expected cost expected_cost = record1[0]["cost"] + record2[0]["cost"] # Force the continuous aggregate to refresh await pool.execute("CALL refresh_continuous_aggregate('usage_cost_monthly', NULL, NULL)") # Give a small delay for the view to update await asyncio.sleep(0.1) # Get the usage cost cost_record = await get_usage_cost(developer_id=developer_id, connection_pool=pool) # Verify the record assert cost_record is not None, "Should have a cost record" assert cost_record["developer_id"] == developer_id assert "cost" in cost_record, "Should have a cost field" assert isinstance(cost_record["cost"], Decimal), "Cost should be a Decimal" assert cost_record["cost"] == expected_cost, ( f"Cost should be {expected_cost}, got {cost_record['cost']}" ) assert "month" in cost_record, "Should have a month field" assert isinstance(cost_record["month"], datetime), "Month should be a datetime" @test("query: get_usage_cost returns correct results for custom API usage") async def _(dsn=pg_dsn) -> None: """Test that get_usage_cost only includes non-custom API usage in the cost calculation.""" pool = await create_db_pool(dsn=dsn) # Create a new developer for this test dev_id = uuid7() email = f"test-{dev_id}@example.com" await create_developer( email=email, active=True, tags=["test"], settings={}, developer_id=dev_id, connection_pool=pool, ) # Create usage records with custom API await create_usage_record( developer_id=dev_id, model="gpt-4o-mini", prompt_tokens=1000, completion_tokens=2000, custom_api_used=True, # This shouldn't be counted in the cost connection_pool=pool, ) # Create usage records without custom API non_custom_cost = await create_usage_record( developer_id=dev_id, model="gpt-4o-mini", prompt_tokens=1000, completion_tokens=2000, custom_api_used=False, # This should be counted connection_pool=pool, ) # Calculate what the expected cost should be expected_cost = non_custom_cost[0]["cost"] # Force the continuous aggregate to refresh await pool.execute("CALL refresh_continuous_aggregate('usage_cost_monthly', NULL, NULL)") # Give a small delay for the view to update await asyncio.sleep(0.1) # Get the usage cost cost_record = await get_usage_cost(developer_id=dev_id, connection_pool=pool) # Verify the record assert cost_record is not None, "Should have a cost record" assert cost_record["developer_id"] == dev_id assert cost_record["cost"] == expected_cost, ( f"Cost should match expected: {expected_cost} but got {cost_record['cost']}" ) @test("query: get_usage_cost handles inactive developers correctly") async def _(dsn=pg_dsn) -> None: """Test that get_usage_cost correctly handles inactive developers.""" pool = await create_db_pool(dsn=dsn) # Create a new inactive developer dev_id = uuid7() email = f"test-{dev_id}@example.com" await create_developer( email=email, active=False, # Developer is inactive tags=["test"], settings={}, developer_id=dev_id, connection_pool=pool, ) # Create usage records for the inactive developer record = await create_usage_record( developer_id=dev_id, model="gpt-4o-mini", prompt_tokens=1000, completion_tokens=2000, connection_pool=pool, ) # Calculate expected cost expected_cost = record[0]["cost"] # Force the continuous aggregate to refresh await pool.execute("CALL refresh_continuous_aggregate('usage_cost_monthly', NULL, NULL)") # Give a small delay for the view to update await asyncio.sleep(0.1) # Get the usage cost cost_record = await get_usage_cost(developer_id=dev_id, connection_pool=pool) # Verify the record assert cost_record is not None, "Should have a cost record even for inactive developers" assert cost_record["developer_id"] == dev_id assert cost_record["active"] is False, "Developer should be marked as inactive" assert cost_record["cost"] == expected_cost, ( f"Cost should be {expected_cost}, got {cost_record['cost']}" ) @test("query: get_usage_cost sorts by month correctly and returns the most recent") async def _(dsn=pg_dsn) -> None: """Test that get_usage_cost returns the most recent month's cost when multiple months exist.""" pool = await create_db_pool(dsn=dsn) # Create a new developer for this test dev_id = uuid7() email = f"test-{dev_id}@example.com" await create_developer( email=email, active=True, tags=["test"], settings={}, developer_id=dev_id, connection_pool=pool, ) # Create usage records for different months - using timezone-aware datetimes now = datetime.now(UTC) current_month = datetime(now.year, now.month, 1, tzinfo=UTC) middle_month = current_month - timedelta(days=30) oldest_month = current_month - timedelta(days=60) # Create a cost for the current month current_cost_record = await create_usage_record( developer_id=dev_id, model="gpt-4o-mini", prompt_tokens=600, completion_tokens=1200, connection_pool=pool, ) current_cost = current_cost_record[0]["cost"] # Create a cost for the middle month (insert with timestamp) await pool.execute( """ INSERT INTO usage ( developer_id, model, prompt_tokens, completion_tokens, cost, created_at ) VALUES ($1, 'gpt-4o-mini', 400, 800, $2, $3) """, dev_id, Decimal("0.004000"), middle_month, ) # Create a cost for the oldest month await pool.execute( """ INSERT INTO usage ( developer_id, model, prompt_tokens, completion_tokens, cost, created_at ) VALUES ($1, 'gpt-4o-mini', 200, 400, $2, $3) """, dev_id, Decimal("0.002000"), oldest_month, ) # Force the continuous aggregate to refresh await pool.execute("CALL refresh_continuous_aggregate('usage_cost_monthly', NULL, NULL)") # Give a small delay for the view to update await asyncio.sleep(0.1) # Get the usage cost cost_record = await get_usage_cost(developer_id=dev_id, connection_pool=pool) # We expect the most recent month to be returned assert cost_record is not None, "Should have a cost record" assert cost_record["developer_id"] == dev_id # The month in the record should be close to the current month's date # Ensure both datetimes are timezone-aware record_month = cost_record["month"] month_diff = abs((record_month - current_month).total_seconds()) assert month_diff < 86400, "Month should be near the start of the current month" # The cost should match only the current month assert cost_record["cost"] == current_cost, ( f"Cost should match current month's usage only: expected {current_cost}, got {cost_record['cost']}" ) ================================================ FILE: src/agents-api/tests/test_usage_tracking.py ================================================ """ Tests for usage tracking functionality. """ from datetime import datetime from decimal import Decimal from unittest.mock import patch from agents_api.clients.pg import create_db_pool from agents_api.common.utils.usage import ( is_llama_based_model, track_embedding_usage, track_usage, ) from agents_api.queries.usage.create_usage_record import ( AVG_INPUT_COST_PER_TOKEN, AVG_OUTPUT_COST_PER_TOKEN, create_usage_record, ) from litellm import cost_per_token from litellm.utils import Message, ModelResponse, Usage, token_counter from ward import test from .fixtures import pg_dsn, test_developer_id @test("query: create_usage_record creates a record with correct parameters") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) response = await create_usage_record( developer_id=developer_id, model="gpt-4o-mini", prompt_tokens=100, completion_tokens=100, connection_pool=pool, ) assert len(response) == 1 record = response[0] assert record["developer_id"] == developer_id assert record["model"] == "gpt-4o-mini" assert record["prompt_tokens"] == 100 assert record["completion_tokens"] == 100 assert record["cost"] == Decimal("0.000075") assert record["estimated"] is False assert record["custom_api_used"] is False assert record["metadata"] == {} assert isinstance(record["created_at"], datetime) @test("query: create_usage_record handles different model names correctly") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) models = [ "gpt-4o-mini", "claude-3.5-sonnet", "claude-3.7-sonnet", "claude-3-haiku", "deepseek-chat", "gemini-1.5-pro", "gemini-1.5-pro-latest", "gemini-2.0-flash", "gemini-2.5-pro-preview-03-25", "mistral-large-2411", "meta-llama/llama-4-scout", "meta-llama/llama-4-maverick", "meta-llama/llama-4-maverick:free", "qwen/qwen-2.5-72b-instruct", "sao10k/l3.3-euryale-70b", "sao10k/l3.1-euryale-70b", ] for model in models: response = await create_usage_record( developer_id=developer_id, model=model, prompt_tokens=100, completion_tokens=100, connection_pool=pool, ) assert len(response) == 1 record = response[0] assert record["model"] == model @test("query: create_usage_record properly calculates costs") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) response = await create_usage_record( developer_id=developer_id, model="gpt-4o-mini", prompt_tokens=2041, completion_tokens=34198, connection_pool=pool, ) input_cost, completion_cost = cost_per_token( "gpt-4o-mini", prompt_tokens=2041, completion_tokens=34198 ) cost = input_cost + completion_cost cost = Decimal(str(cost)).quantize(Decimal("0.000001")) assert len(response) == 1 record = response[0] assert record["cost"] == cost @test("query: create_usage_record with custom API key") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) response = await create_usage_record( developer_id=developer_id, model="gpt-4o-mini", prompt_tokens=100, completion_tokens=100, custom_api_used=True, connection_pool=pool, ) input_cost, completion_cost = cost_per_token( "gpt-4o-mini", prompt_tokens=100, completion_tokens=100 ) cost = input_cost + completion_cost cost = Decimal(str(cost)).quantize(Decimal("0.000001")) assert len(response) == 1 record = response[0] assert record["custom_api_used"] is True assert record["cost"] == cost @test("query: create_usage_record with fallback pricing") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) response = await create_usage_record( developer_id=developer_id, model="meta-llama/llama-4-maverick:free", prompt_tokens=100, completion_tokens=100, connection_pool=pool, ) assert len(response) == 1 record = response[0] assert record["cost"] == Decimal("0.000000") assert record["estimated"] is True @test("query: create_usage_record with fallback pricing with model not in fallback pricing") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: pool = await create_db_pool(dsn=dsn) with patch("builtins.print") as mock_print: unknown_model = "unknown-model-name" response = await create_usage_record( developer_id=developer_id, model=unknown_model, prompt_tokens=100, completion_tokens=100, connection_pool=pool, ) actual_call = mock_print.call_args_list[-1].args[0] total_cost = AVG_INPUT_COST_PER_TOKEN * 100 + AVG_OUTPUT_COST_PER_TOKEN * 100 expected_call = ( f"No fallback pricing found for model {unknown_model}, using avg costs: {total_cost}" ) assert len(response) == 1 record = response[0] assert record["cost"] == Decimal(str(total_cost)).quantize(Decimal("0.000001")) assert record["estimated"] is True assert expected_call == actual_call @test("utils: track_usage with response.usage available") async def _(developer_id=test_developer_id) -> None: with patch("agents_api.common.utils.usage.create_usage_record") as mock_create_usage_record: response = ModelResponse( usage=Usage( prompt_tokens=100, completion_tokens=100, ), ) await track_usage( developer_id=developer_id, model="gpt-4o-mini", messages=[], response=response, ) call_args = mock_create_usage_record.call_args[1] assert call_args["prompt_tokens"] == 100 assert call_args["completion_tokens"] == 100 @test("utils: is_llama_based_model returns True for llama models") async def _() -> None: assert is_llama_based_model("llama-3.1-8b-instruct") is True assert is_llama_based_model("meta-llama/llama-4-maverick") is True assert is_llama_based_model("meta-llama/llama-4-maverick:free") is True assert is_llama_based_model("gpt-4o-mini") is False assert is_llama_based_model("claude-3.5-sonnet") is False assert is_llama_based_model("gemini-1.5-pro") is False assert is_llama_based_model("deepseek-chat") is False @test("utils: track_usage without response.usage") async def _(developer_id=test_developer_id) -> None: with patch("agents_api.common.utils.usage.create_usage_record") as mock_create_usage_record: response = ModelResponse( usage=None, choices=[ { "finish_reason": "stop", "index": 0, "message": Message(content="Hello, world!", role="assistant"), } ], ) response.usage = None messages = [{"role": "user", "content": "Hello, world!"}] prompt_tokens = token_counter(model="gpt-4o-mini", messages=messages) completion_tokens = token_counter( model="gpt-4o-mini", messages=[{"content": choice.message.content} for choice in response.choices], ) await track_usage( developer_id=developer_id, model="gpt-4o-mini", messages=messages, response=response, ) call_args = mock_create_usage_record.call_args[1] assert call_args["prompt_tokens"] == prompt_tokens assert call_args["completion_tokens"] == completion_tokens @test("utils: track_embedding_usage with response.usage") async def _(developer_id=test_developer_id) -> None: with patch("agents_api.common.utils.usage.create_usage_record") as mock_create_usage_record: response = ModelResponse( usage=Usage( prompt_tokens=150, completion_tokens=0, ), ) inputs = ["This is a test input for embedding"] await track_embedding_usage( developer_id=developer_id, model="text-embedding-3-large", inputs=inputs, response=response, ) call_args = mock_create_usage_record.call_args[1] assert call_args["prompt_tokens"] == 150 assert call_args["completion_tokens"] == 0 assert call_args["model"] == "text-embedding-3-large" @test("utils: track_embedding_usage without response.usage") async def _(developer_id=test_developer_id) -> None: with patch("agents_api.common.utils.usage.create_usage_record") as mock_create_usage_record: response = ModelResponse() response.usage = None inputs = ["First test input", "Second test input"] # Calculate expected tokens manually expected_tokens = sum( token_counter(model="text-embedding-3-large", text=input_text) for input_text in inputs ) await track_embedding_usage( developer_id=developer_id, model="text-embedding-3-large", inputs=inputs, response=response, ) call_args = mock_create_usage_record.call_args[1] assert call_args["prompt_tokens"] == expected_tokens assert call_args["completion_tokens"] == 0 assert call_args["model"] == "text-embedding-3-large" @test("utils: track_usage with llama model") async def _(dsn=pg_dsn, developer_id=test_developer_id) -> None: with patch("agents_api.queries.usage.create_usage_record.llama_model_multiplier", 0.5): pool = await create_db_pool(dsn=dsn) response = await create_usage_record( developer_id=developer_id, model="llama-3.1-8b-instruct", prompt_tokens=100, completion_tokens=100, is_llama_model=False, connection_pool=pool, ) assert len(response) == 1 record = response[0] record_cost_without_multiplier = record["cost"] response = await create_usage_record( developer_id=developer_id, model="llama-3.1-8b-instruct", prompt_tokens=100, completion_tokens=100, is_llama_model=True, connection_pool=pool, ) assert len(response) == 1 record = response[0] record_cost_with_multiplier = record["cost"] expected_cost = record_cost_without_multiplier * Decimal("0.5") tolerance = Decimal("0.000001") assert abs(record_cost_with_multiplier - expected_cost) <= tolerance ================================================ FILE: src/agents-api/tests/test_user_queries.py ================================================ """ This module contains tests for SQL query generation functions in the users module. Tests verify the SQL queries without actually executing them against a database. """ from uuid import UUID from agents_api.autogen.openapi_model import ( CreateOrUpdateUserRequest, CreateUserRequest, PatchUserRequest, ResourceDeletedResponse, UpdateUserRequest, User, ) from agents_api.clients.pg import create_db_pool from agents_api.queries.users import ( create_or_update_user, create_user, delete_user, get_user, list_users, patch_user, update_user, ) from fastapi.exceptions import HTTPException from uuid_extensions import uuid7 from ward import raises, test from tests.fixtures import pg_dsn, test_developer_id, test_project, test_user # Test UUIDs for consistent testing TEST_DEVELOPER_ID = UUID("123e4567-e89b-12d3-a456-426614174000") TEST_USER_ID = UUID("987e6543-e21b-12d3-a456-426614174000") @test("query: create user sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that a user can be successfully created.""" pool = await create_db_pool(dsn=dsn) user = await create_user( developer_id=developer_id, data=CreateUserRequest( name="test user", about="test user about", ), connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(user, User) assert user.id is not None assert user.name == "test user" assert user.about == "test user about" @test("query: create user with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that a user can be successfully created with a project.""" pool = await create_db_pool(dsn=dsn) user = await create_user( developer_id=developer_id, data=CreateUserRequest( name="test user with project", about="test user about", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(user, User) assert user.id is not None assert user.project == project.canonical_name @test("query: create user with invalid project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that creating a user with an invalid project raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await create_user( developer_id=developer_id, data=CreateUserRequest( name="test user with invalid project", about="test user about", project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: create or update user sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that a user can be successfully created or updated.""" pool = await create_db_pool(dsn=dsn) user = await create_or_update_user( developer_id=developer_id, user_id=uuid7(), data=CreateOrUpdateUserRequest( name="test user", about="test user about", ), connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(user, User) assert user.id is not None assert user.name == "test user" assert user.about == "test user about" @test("query: create or update user with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that a user can be successfully created or updated with a project.""" pool = await create_db_pool(dsn=dsn) user = await create_or_update_user( developer_id=developer_id, user_id=uuid7(), data=CreateOrUpdateUserRequest( name="test user with project", about="test user about", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(user, User) assert user.id is not None assert user.project == project.canonical_name @test("query: update user sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that an existing user's information can be successfully updated.""" pool = await create_db_pool(dsn=dsn) update_result = await update_user( user_id=user.id, developer_id=developer_id, data=UpdateUserRequest( name="updated user", about="updated user about", ), connection_pool=pool, ) # type: ignore[not-callable] assert update_result is not None assert isinstance(update_result, User) assert update_result.updated_at > user.created_at @test("query: update user with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user, project=test_project): """Test that an existing user's information can be successfully updated with a project.""" pool = await create_db_pool(dsn=dsn) update_result = await update_user( user_id=user.id, developer_id=developer_id, data=UpdateUserRequest( name="updated user with project", about="updated user about", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] # Verify the user was updated by listing all users users = await list_users( developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert users is not None assert isinstance(users, list) assert len(users) > 0 # Find the updated user in the list updated_user = next((u for u in users if u.id == user.id), None) assert updated_user is not None assert updated_user.name == "updated user with project" assert updated_user.project == project.canonical_name assert update_result is not None assert isinstance(update_result, User) assert update_result.updated_at > user.created_at assert update_result.project == project.canonical_name @test("query: update user, project does not exist") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that an existing user's information can be successfully updated with a project that does not exist.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await update_user( user_id=user.id, developer_id=developer_id, data=UpdateUserRequest( name="updated user with project", about="updated user about", project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: get user not exists sql") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that retrieving a non-existent user returns an empty result.""" user_id = uuid7() pool = await create_db_pool(dsn=dsn) with raises(Exception): await get_user( user_id=user_id, developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] @test("query: get user exists sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that retrieving an existing user returns the correct user information.""" pool = await create_db_pool(dsn=dsn) result = await get_user( user_id=user.id, developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert result is not None assert isinstance(result, User) @test("query: list users sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that listing users returns a collection of user information.""" pool = await create_db_pool(dsn=dsn) result = await list_users( developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert isinstance(result, list) assert len(result) >= 1 assert all(isinstance(user, User) for user in result) @test("query: list users with project filter sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, project=test_project): """Test that listing users with a project filter returns the correct users.""" pool = await create_db_pool(dsn=dsn) # First create a user with the specific project await create_user( developer_id=developer_id, data=CreateUserRequest( name="test user for project filter", about="test user about", project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] # Now fetch with project filter result = await list_users( developer_id=developer_id, project=project.canonical_name, connection_pool=pool ) # type: ignore[not-callable] assert isinstance(result, list) assert all(isinstance(user, User) for user in result) assert all(user.project == project.canonical_name for user in result) @test("query: list users sql, invalid limit") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing users with an invalid limit raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_users( developer_id=developer_id, limit=101, connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" with raises(HTTPException) as exc: await list_users( developer_id=developer_id, limit=0, connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Limit must be between 1 and 100" @test("query: list users sql, invalid offset") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing users with an invalid offset raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_users( developer_id=developer_id, connection_pool=pool, offset=-1, ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Offset must be non-negative" @test("query: list users sql, invalid sort by") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing users with an invalid sort by raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_users( developer_id=developer_id, connection_pool=pool, sort_by="invalid", ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort field" @test("query: list users sql, invalid sort direction") async def _(dsn=pg_dsn, developer_id=test_developer_id): """Test that listing users with an invalid sort direction raises an exception.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await list_users( developer_id=developer_id, connection_pool=pool, sort_by="created_at", direction="invalid", ) # type: ignore[not-callable] assert exc.raised.status_code == 400 assert exc.raised.detail == "Invalid sort direction" @test("query: patch user sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that a user can be successfully patched.""" pool = await create_db_pool(dsn=dsn) patch_result = await patch_user( developer_id=developer_id, user_id=user.id, data=PatchUserRequest( name="patched user", about="patched user about", metadata={"test": "metadata"}, ), connection_pool=pool, ) # type: ignore[not-callable] assert patch_result is not None assert isinstance(patch_result, User) assert patch_result.updated_at > user.created_at @test("query: patch user with project sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user, project=test_project): """Test that a user can be successfully patched with a project.""" pool = await create_db_pool(dsn=dsn) patch_result = await patch_user( developer_id=developer_id, user_id=user.id, data=PatchUserRequest( name="patched user with project", about="patched user about", metadata={"test": "metadata"}, project=project.canonical_name, ), connection_pool=pool, ) # type: ignore[not-callable] # Verify the user was updated by listing all users users = await list_users( developer_id=developer_id, connection_pool=pool, ) # type: ignore[not-callable] assert users is not None assert isinstance(users, list) assert len(users) > 0 # Find the updated user in the list updated_user = next((u for u in users if u.id == user.id), None) assert updated_user is not None assert updated_user.name == "patched user with project" assert updated_user.project == project.canonical_name assert patch_result is not None assert isinstance(patch_result, User) assert patch_result.updated_at > user.created_at assert patch_result.project == project.canonical_name @test("query: patch user, project does not exist") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that a user can be successfully patched with a project that does not exist.""" pool = await create_db_pool(dsn=dsn) with raises(HTTPException) as exc: await patch_user( developer_id=developer_id, user_id=user.id, data=PatchUserRequest( name="patched user with project", about="patched user about", metadata={"test": "metadata"}, project="invalid_project", ), connection_pool=pool, ) # type: ignore[not-callable] assert exc.raised.status_code == 404 assert "Project 'invalid_project' not found" in exc.raised.detail @test("query: delete user sql") async def _(dsn=pg_dsn, developer_id=test_developer_id, user=test_user): """Test that a user can be successfully deleted.""" pool = await create_db_pool(dsn=dsn) delete_result = await delete_user( developer_id=developer_id, user_id=user.id, connection_pool=pool, ) # type: ignore[not-callable] assert delete_result is not None assert isinstance(delete_result, ResourceDeletedResponse) # Verify the user no longer exists try: await get_user( developer_id=developer_id, user_id=user.id, connection_pool=pool, ) # type: ignore[not-callable] except Exception: pass else: assert False, "Expected an exception to be raised when retrieving a deleted user." ================================================ FILE: src/agents-api/tests/test_user_routes.py ================================================ # Tests for user routes from uuid_extensions import uuid7 from ward import test from tests.fixtures import client, make_request, test_project, test_user @test("route: unauthorized should fail") def _(client=client): data = { "name": "test user", "about": "test user about", } response = client.request( method="POST", url="/users", json=data, ) assert response.status_code == 403 @test("route: create user") def _(make_request=make_request): data = { "name": "test user", "about": "test user about", } response = make_request( method="POST", url="/users", json=data, ) assert response.status_code == 201 @test("route: create user with project") def _(make_request=make_request, project=test_project): data = { "name": "test user with project", "about": "test user about", "project": project.canonical_name, } response = make_request( method="POST", url="/users", json=data, ) assert response.status_code == 201 assert response.json()["project"] == project.canonical_name @test("route: get user not exists") def _(make_request=make_request): user_id = str(uuid7()) response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 404 @test("route: get user exists") def _(make_request=make_request, user=test_user): user_id = str(user.id) response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code != 404 @test("route: delete user") def _(make_request=make_request): data = { "name": "test user", "about": "test user about", } response = make_request( method="POST", url="/users", json=data, ) user_id = response.json()["id"] response = make_request( method="DELETE", url=f"/users/{user_id}", ) assert response.status_code == 202 response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 404 @test("route: update user") def _(make_request=make_request, user=test_user): data = { "name": "updated user", "about": "updated user about", } user_id = str(user.id) response = make_request( method="PUT", url=f"/users/{user_id}", json=data, ) assert response.status_code == 200 user_id = response.json()["id"] response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 200 user = response.json() assert user["name"] == "updated user" assert user["about"] == "updated user about" @test("route: update user with project") def _(make_request=make_request, user=test_user, project=test_project): data = { "name": "updated user with project", "about": "updated user about", "project": project.canonical_name, } user_id = str(user.id) response = make_request( method="PUT", url=f"/users/{user_id}", json=data, ) assert response.status_code == 200 user_id = response.json()["id"] response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 200 user = response.json() assert user["name"] == "updated user with project" assert user["about"] == "updated user about" assert user["project"] == project.canonical_name @test("query: patch user") def _(make_request=make_request, user=test_user): user_id = str(user.id) data = { "name": "patched user", "about": "patched user about", } response = make_request( method="PATCH", url=f"/users/{user_id}", json=data, ) assert response.status_code == 200 user_id = response.json()["id"] response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 200 user = response.json() assert user["name"] == "patched user" assert user["about"] == "patched user about" @test("query: patch user with project") def _(make_request=make_request, user=test_user, project=test_project): user_id = str(user.id) data = { "name": "patched user with project", "about": "patched user about", "project": project.canonical_name, } response = make_request( method="PATCH", url=f"/users/{user_id}", json=data, ) assert response.status_code == 200 user_id = response.json()["id"] response = make_request( method="GET", url=f"/users/{user_id}", ) assert response.status_code == 200 user = response.json() assert user["name"] == "patched user with project" assert user["about"] == "patched user about" assert user["project"] == project.canonical_name @test("query: list users") def _(make_request=make_request): response = make_request( method="GET", url="/users", ) assert response.status_code == 200 response = response.json() users = response["items"] assert isinstance(users, list) assert len(users) > 0 @test("query: list users with project filter") def _(make_request=make_request, project=test_project): # First create a user with the project data = { "name": "test user for project filter", "about": "test user about", "project": project.canonical_name, } make_request( method="POST", url="/users", json=data, ) # Then list users with project filter response = make_request( method="GET", url="/users", params={ "project": project.canonical_name, }, ) assert response.status_code == 200 response = response.json() users = response["items"] assert isinstance(users, list) assert len(users) > 0 assert any(user["project"] == project.canonical_name for user in users) @test("query: list users with right metadata filter") def _(make_request=make_request, user=test_user): response = make_request( method="GET", url="/users", params={ "metadata_filter": {"test": "test"}, }, ) assert response.status_code == 200 response = response.json() users = response["items"] assert isinstance(users, list) assert len(users) > 0 ================================================ FILE: src/agents-api/tests/test_validation_errors.py ================================================ """Tests for validation error handlers and suggestion generation in web.py.""" from agents_api.web import _format_location, _get_error_suggestions from ward import test from .fixtures import make_request @test("format_location: formats error location paths correctly") async def _(): """Test the _format_location function formats error locations correctly.""" # Test empty location assert _format_location([]) == "" # Test with 'body' prefix that should be removed assert _format_location(["body", "name"]) == "name" # Test with nested properties assert _format_location(["body", "user", "name"]) == "user.name" # Test with array indices assert _format_location(["body", "items", 0, "name"]) == "items[0].name" # Test more complex nesting assert ( _format_location(["body", "data", "users", 2, "addresses", 1, "street"]) == "data.users[2].addresses[1].street" ) @test("get_error_suggestions: generates helpful suggestions for missing fields") async def _(): """Test the _get_error_suggestions function generates useful suggestions for missing fields.""" error = {"type": "missing"} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "Add this required field" in suggestions["fix"] @test("get_error_suggestions: generates helpful suggestions for type errors") async def _(): """Test the _get_error_suggestions function generates useful suggestions for type errors.""" # String type error error = {"type": "type_error", "expected_type": "string"} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "string" in suggestions["fix"] assert suggestions["example"] == '"text value"' # Integer type error error = {"type": "type_error", "expected_type": "integer"} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "integer" in suggestions["fix"] assert suggestions["example"] == "42" @test("get_error_suggestions: generates helpful suggestions for string length errors") async def _(): """Test the _get_error_suggestions function generates useful suggestions for string length errors.""" # Min length error error = {"type": "value_error.str.min_length", "limit_value": 5} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "at least 5 characters" in suggestions["fix"] assert suggestions["example"] == "xxxxx" # Max length error error = {"type": "value_error.str.max_length", "limit_value": 10} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "note" in suggestions assert "at most 10 characters" in suggestions["fix"] @test("get_error_suggestions: generates helpful suggestions for number range errors") async def _(): """Test the _get_error_suggestions function generates useful suggestions for number range errors.""" # Min value error error = {"type": "value_error.number.not_ge", "limit_value": 5} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "greater than or equal to 5" in suggestions["fix"] assert suggestions["example"] == "5" # Max value error error = {"type": "value_error.number.not_le", "limit_value": 100} suggestions = _get_error_suggestions(error) assert "fix" in suggestions assert "example" in suggestions assert "less than or equal to 100" in suggestions["fix"] assert suggestions["example"] == "100" @test("validation_error_handler: returns formatted error response for validation errors") async def _(make_request=make_request): """Test that validation errors return a well-formatted error response with helpful suggestions.""" # Create an invalid request to trigger a validation error response = make_request( method="POST", url="/agents", json={ # Missing required 'name' field # 'name': 'Test Agent', "about": "Test agent description", "model": "invalid-model-id", # Invalid model ID "metadata": "not-an-object", # Type error, should be an object }, ) # Verify response has expected status code assert response.status_code == 422 # Verify response has the correct structure data = response.json() assert "error" in data assert "message" in data["error"] assert "details" in data["error"] assert "code" in data["error"] # Verify error details contain helpful suggestions details = data["error"]["details"] assert isinstance(details, list) assert len(details) > 0 # Check for at least one error with a fix suggestion has_fix = False for error in details: if "fix" in error: has_fix = True break assert has_fix, "Expected at least one error with a 'fix' suggestion" @test( "validation_error_suggestions: function generates helpful suggestions for all error types" ) async def _(): """Test that _get_error_suggestions handles all potential error types appropriately.""" from agents_api.web import _get_error_suggestions # Test a variety of error types to ensure they all return helpful suggestions error_types = [ "missing", "type_error", "value_error.missing", "value_error.extra", "value_error.const", "value_error.str.min_length", "value_error.str.max_length", "value_error.any_str.min_length", "value_error.any_str.max_length", "value_error.number.not_ge", "value_error.number.not_le", "value_error.number.not_gt", "value_error.number.not_lt", "enum", "json", "uuid", "datetime", "url", "email", ] # All these error types should generate non-empty suggestions for error_type in error_types: error = {"type": error_type} # Add additional info for specific error types if ( "limit_value" in error_type or "min_length" in error_type or "max_length" in error_type or "not_ge" in error_type or "not_le" in error_type or "not_gt" in error_type or "not_lt" in error_type ): error["limit_value"] = 10 elif "const" in error_type or "enum" in error_type: error["permitted"] = ["value1", "value2"] elif "expected_type" in error_type or error_type == "type_error": error["expected_type"] = "string" suggestions = _get_error_suggestions(error) # Each error type should generate at least some suggestions assert suggestions, f"No suggestions generated for error type: {error_type}" # At least the "fix" key should be present assert "fix" in suggestions, f"No 'fix' suggestion for error type: {error_type}" ================================================ FILE: src/agents-api/tests/test_workflow_helpers.py ================================================ import uuid from unittest.mock import AsyncMock, patch from agents_api.autogen.openapi_model import ( Agent, Execution, MapReduceStep, PromptItem, PromptStep, TaskSpecDef, TransitionTarget, Workflow, ) from agents_api.common.protocol.tasks import ( ExecutionInput, PartialTransition, StepContext, WorkflowResult, ) from agents_api.common.utils.datetime import utcnow from agents_api.workflows.task_execution.helpers import execute_map_reduce_step_parallel from ward import raises, test @test("execute_map_reduce_step_parallel: parallelism must be greater than 1") async def _(): async def _resp(): return "response" subworkflow_step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) step = MapReduceStep( kind_="map_reduce", map=subworkflow_step, over="$ [1, 2, 3]", parallelism=1, ) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), status="running", task_id=uuid.uuid4(), input={}, ), task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) with ( patch("agents_api.workflows.task_execution.helpers.workflow") as workflow, patch("agents_api.workflows.task_execution.helpers.continue_as_child"), # Also patch execute_map_reduce_step as it gets called when parallelism is 1 patch( "agents_api.workflows.task_execution.helpers.execute_map_reduce_step" ) as execute_map_reduce_step_mock, ): # This is the function that gets called when parallelism is 1 execute_map_reduce_step_mock.side_effect = AssertionError( "Parallelism must be greater than 1" ) # Mock run function that will be returned by lambda in continue_as_child run_mock = AsyncMock() # Mock lambda that creates child workflow or continue as new workflow.continue_as_new = run_mock workflow.execute_child_workflow.return_value = run_mock workflow.execute_activity.return_value = _resp() with raises(AssertionError): await execute_map_reduce_step_parallel( context=context, map_defn=step.map, execution_input=execution_input, items=["1", "2", "3"], current_input={}, parallelism=1, ) @test("execute_map_reduce_step_parallel: returned true") async def _(): async def _resp(): return "response" # Create the workflow results we'll use result1 = WorkflowResult( returned=False, state=PartialTransition(output="response 1"), ) result2 = WorkflowResult( returned=True, state=PartialTransition(output="response 2"), ) subworkflow_step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) step = MapReduceStep( kind_="map_reduce", map=subworkflow_step, over="$ [1, 2]", parallelism=100, ) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), status="running", task_id=uuid.uuid4(), input={}, ), task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) with ( patch("agents_api.workflows.task_execution.helpers.workflow") as workflow, patch( "agents_api.workflows.task_execution.helpers.continue_as_child" ) as continue_as_child_mock, ): # Mock continue_as_child directly to return our workflow results # First call returns result1, second call returns result2 continue_as_child_mock.side_effect = [result1, result2] workflow.execute_activity.return_value = _resp() result = await execute_map_reduce_step_parallel( context=context, map_defn=step.map, execution_input=execution_input, items=[1, 2], current_input={}, parallelism=100, ) workflow_result = WorkflowResult( returned=True, state=PartialTransition(output="response 2"), ) assert result == workflow_result @test("execute_map_reduce_step_parallel: returned false") async def _(): async def _resp(): return ["response 1", "response 2"] # Create the workflow results we'll use result1 = WorkflowResult( returned=False, state=PartialTransition(output="response 1"), ) result2 = WorkflowResult( returned=False, state=PartialTransition(output="response 2"), ) subworkflow_step = PromptStep(prompt=[PromptItem(content="hi there", role="user")]) step = MapReduceStep( kind_="map_reduce", map=subworkflow_step, over="$ [1, 2]", parallelism=100, ) execution_input = ExecutionInput( developer_id=uuid.uuid4(), agent=Agent( id=uuid.uuid4(), name="test agent", created_at=utcnow(), updated_at=utcnow(), ), agent_tools=[], arguments={}, execution=Execution( id=uuid.uuid4(), created_at=utcnow(), updated_at=utcnow(), status="running", task_id=uuid.uuid4(), input={}, ), task=TaskSpecDef( name="task1", tools=[], workflows=[Workflow(name="main", steps=[step])], ), ) context = StepContext( execution_input=execution_input, current_input={"current_input": "value 1"}, cursor=TransitionTarget( workflow="main", step=0, scope_id=uuid.uuid4(), ), ) with ( patch("agents_api.workflows.task_execution.helpers.workflow") as workflow, patch( "agents_api.workflows.task_execution.helpers.continue_as_child" ) as continue_as_child_mock, ): # Mock continue_as_child directly to return our workflow results # First call returns result1, second call returns result2 continue_as_child_mock.side_effect = [result1, result2] workflow.execute_activity.return_value = _resp() result = await execute_map_reduce_step_parallel( context=context, map_defn=step.map, execution_input=execution_input, items=[1, 2], current_input={}, parallelism=100, ) workflow_result = WorkflowResult( returned=False, state=PartialTransition(output=["response 1", "response 2"]), ) assert result == workflow_result ================================================ FILE: src/agents-api/tests/test_workflow_routes.py ================================================ # Tests for task queries from uuid_extensions import uuid7 from ward import test from tests.fixtures import make_request, test_agent from tests.utils import patch_testing_temporal @test("workflow route: evaluate step single") async def _( make_request=make_request, agent=test_agent, ): agent_id = str(agent.id) task_id = str(uuid7()) async with patch_testing_temporal(): task_data = { "name": "test task", "description": "test task about", "input_schema": {"type": "object", "additionalProperties": True}, "main": [{"evaluate": {"hello": '"world"'}}], } make_request( method="POST", url=f"/agents/{agent_id}/tasks/{task_id}", json=task_data, ).raise_for_status() execution_data = {"input": {"test": "input"}} make_request( method="POST", url=f"/tasks/{task_id}/executions", json=execution_data, ).raise_for_status() @test("workflow route: evaluate step single with yaml") async def _( make_request=make_request, agent=test_agent, ): agent_id = str(agent.id) async with patch_testing_temporal(): task_data = """ name: test task description: test task about input_schema: type: object additionalProperties: true main: - evaluate: hello: '"world"' """ result = ( make_request( method="POST", url=f"/agents/{agent_id}/tasks", content=task_data.encode("utf-8"), headers={"Content-Type": "text/yaml"}, ) .raise_for_status() .json() ) task_id = result["id"] execution_data = {"input": {"test": "input"}} make_request( method="POST", url=f"/tasks/{task_id}/executions", json=execution_data, ).raise_for_status() @test("workflow route: evaluate step single with yaml - nested") async def _( make_request=make_request, agent=test_agent, ): agent_id = str(agent.id) async with patch_testing_temporal(): task_data = """ name: test task description: test task about input_schema: type: object additionalProperties: true main: - evaluate: hello: '"world"' hello2: hello3: hello4: inputs[0]['test'] """ result = ( make_request( method="POST", url=f"/agents/{agent_id}/tasks", content=task_data.encode("utf-8"), headers={"Content-Type": "text/yaml"}, ) .raise_for_status() .json() ) task_id = result["id"] execution_data = {"input": {"test": "input"}} make_request( method="POST", url=f"/tasks/{task_id}/executions", json=execution_data, ).raise_for_status() @test("workflow route: create or update: evaluate step single with yaml") async def _( make_request=make_request, agent=test_agent, ): agent_id = str(agent.id) task_id = str(uuid7()) async with patch_testing_temporal(): task_data = """ name: test task description: test task about input_schema: type: object additionalProperties: true main: - evaluate: hello: '"world"' """ make_request( method="POST", url=f"/agents/{agent_id}/tasks/{task_id}", content=task_data.encode("utf-8"), headers={"Content-Type": "text/yaml"}, ).raise_for_status() execution_data = {"input": {"test": "input"}} make_request( method="POST", url=f"/tasks/{task_id}/executions", json=execution_data, ).raise_for_status() ================================================ FILE: src/agents-api/tests/utils.py ================================================ import asyncio import logging import math import os import subprocess from contextlib import asynccontextmanager, contextmanager from typing import Any from unittest.mock import patch from uuid import UUID import pgai from agents_api.autogen.openapi_model import Transition from agents_api.common.protocol.tasks import TransitionTarget, TransitionType from agents_api.common.utils.datetime import utcnow from agents_api.worker.codec import pydantic_data_converter from agents_api.worker.worker import create_worker from fastapi.testclient import TestClient from litellm.types.utils import ModelResponse from temporalio.testing import WorkflowEnvironment from testcontainers.core.container import DockerContainer from testcontainers.core.waiting_utils import wait_for_logs from testcontainers.localstack import LocalStackContainer from testcontainers.postgres import PostgresContainer from uuid_extensions import uuid7 # Replicated here to prevent circular import EMBEDDING_SIZE: int = 1024 def make_vector_with_similarity(n: int = EMBEDDING_SIZE, d: float = 0.5): """ Returns a list `v` of length `n` such that the cosine similarity between `v` and the all-ones vector of length `n` is approximately d. """ if not -1.0 <= d <= 1.0: msg = "d must lie in [-1, 1]." raise ValueError(msg) # Handle special cases exactly: if abs(d - 1.0) < 1e-12: # d ~ +1 return [1.0] * n if abs(d + 1.0) < 1e-12: # d ~ -1 return [-1.0] * n if abs(d) < 1e-12: # d ~ 0 v = [0.0] * n if n >= 2: v[0] = 1.0 v[1] = -1.0 return v sign_d = 1.0 if d >= 0 else -1.0 # Base part: sign(d)*[1,1,...,1] base = [sign_d] * n # Orthogonal unit vector u with sum(u)=0; for simplicity: # u = [1/sqrt(2), -1/sqrt(2), 0, 0, ..., 0] u = [0.0] * n if n >= 2: u[0] = 1.0 / math.sqrt(2) u[1] = -1.0 / math.sqrt(2) # (if n=1, there's no truly orthogonal vector to [1], so skip) # Solve for alpha: # alpha^2 = n*(1 - d^2)/d^2 alpha = math.sqrt(n * (1 - d * d)) / abs(d) # Construct v v = [0.0] * n for i in range(n): v[i] = base[i] + alpha * u[i] return v def generate_transition( execution_id: UUID = uuid7(), transition_id: UUID = uuid7(), type: TransitionType = "step", current_step: TransitionTarget = TransitionTarget( workflow="main", step=0, scope_id=uuid7(), ), next_step: TransitionTarget | None = None, task_token: str | None = None, output: Any = None, label: str | None = None, metadata: dict = {}, ): return Transition( execution_id=execution_id, id=transition_id, type=type, current=current_step, next=next_step, task_token=task_token, output=output, label=label, created_at=utcnow(), updated_at=utcnow(), metadata=metadata, ) @asynccontextmanager async def patch_testing_temporal(): # Set log level to ERROR to avoid spamming the console logger = logging.getLogger("temporalio") previous_log_level = logger.getEffectiveLevel() logger.setLevel(logging.ERROR) # Start a local Temporal environment async with await WorkflowEnvironment.start_time_skipping( data_converter=pydantic_data_converter, ) as env: # Create a worker with our workflows and start it worker = create_worker(client=env.client) env.worker_task = asyncio.create_task(worker.run()) # Mock the Temporal client mock_client = worker.client with patch("agents_api.clients.temporal.get_client") as mock_get_client: mock_get_client.return_value = mock_client # Yield the worker and the mock client <--- yield worker, mock_get_client # Shutdown the worker await worker.shutdown() # Reset log level logger.setLevel(previous_log_level) @asynccontextmanager async def patch_http_client_with_temporal(*, postgres_pool, developer_id): async with patch_testing_temporal() as (_worker, mock_get_client): from agents_api.env import api_key, api_key_header_name from agents_api.web import app client = TestClient(app=app) app.state.postgres_pool = postgres_pool def make_request(method, url, **kwargs): headers = kwargs.pop("headers", {}) headers = { **headers, "X-Developer-Id": str(developer_id), api_key_header_name: api_key, } return client.request(method, url, headers=headers, **kwargs) temporal_client = await mock_get_client() yield make_request, temporal_client @contextmanager def patch_embed_acompletion(output={"role": "assistant", "content": "Hello, world!"}): mock_model_response = ModelResponse( id="fake_id", choices=[ { "message": output, "tool_calls": [], "created_at": 1, "finish_reason": "stop", }, ], created=0, object="text_completion", usage={"total_tokens": 10, "prompt_tokens": 5, "completion_tokens": 5}, ) with ( patch("agents_api.clients.litellm.aembedding") as embed, patch("agents_api.clients.litellm.acompletion") as acompletion, ): embed.return_value = [[1.0] * EMBEDDING_SIZE] acompletion.return_value = mock_model_response yield embed, acompletion @contextmanager def patch_integration_service(output: dict = {"result": "ok"}): with patch( "agents_api.clients.integrations.run_integration_service", ) as run_integration_service: run_integration_service.return_value = output yield run_integration_service @contextmanager def get_pg_dsn(start_vectorizer: bool = False): with PostgresContainer("timescale/timescaledb-ha:pg17.6-ts2.22.1-all") as postgres: test_psql_url = postgres.get_connection_url() pg_dsn = f"postgres://{test_psql_url[22:]}?sslmode=disable" # Install pgai pgai.install(pg_dsn) # Migrate command = f"migrate -database '{pg_dsn}' -path ../memory-store/migrations/ up" process = subprocess.Popen(command, shell=True) process.wait() if not start_vectorizer: yield pg_dsn return # ELSE: with ( DockerContainer("timescale/pgai-vectorizer-worker:latest") .with_network(postgres._network) # noqa: SLF001 .with_env( "PGAI_VECTORIZER_WORKER_DB_URL", pg_dsn.replace("localhost", postgres.get_container_host_ip()), ) .with_env( "OPENAI_API_KEY", os.environ.get("OPENAI_API_KEY"), ) ) as vectorizer: wait_for_logs( vectorizer, "finished processing vectorizer", predicate_streams_and=True, raise_on_exit=True, timeout=10, ) print("Vectorizer worker started") yield pg_dsn @contextmanager def get_localstack(): with LocalStackContainer(image="localstack/localstack:s3-latest").with_services( "s3", ) as localstack: yield localstack ================================================ FILE: src/agents-api/uuid_extensions.pyi ================================================ """Local typing stub for the external ``uuid_extensions`` package. Only the parts actually used by this code-base are declared. We provide a more precise return type for :func:`uuid_extensions.uuid7` so that static type checkers (pytype / pyright) do not complain when the function is invoked with default arguments. The real implementation allows selecting an alternative output representation (str / int / bytes) via the ``as_type`` keyword. We model this behaviour with proper ``typing.overload`` definitions – when ``as_type`` is omitted or ``None`` the return value is a ``uuid.UUID`` which is how it is used across Julep. Note: This stub is *only* imported by the type-checker – the actual runtime module from the third-party package is still used. Keeping the stub here avoids having to sprinkle ``cast()`` calls throughout the code-base or wrap the function in a helper. """ from __future__ import annotations import datetime as _dt import uuid as _uuid from collections.abc import Callable from typing import Literal, overload __all__ = [ "check_timing_precision", "time_ns", "uuid7", "uuid7str", "uuid_to_datetime", ] # --------------------------------------------------------------------------- # Public helpers mirrored from the original package # --------------------------------------------------------------------------- def time_ns() -> int: # pragma: no cover – implementation lives upstream. """Return the current time in nanoseconds since Unix epoch.""" @overload def uuid7( ns: int | None = ..., *, as_type: None = ..., time_func: Callable[[], int] = ..., ) -> _uuid.UUID: ... @overload def uuid7( ns: int | None = ..., *, as_type: Literal["uuid"] = ..., time_func: Callable[[], int] = ..., ) -> _uuid.UUID: ... @overload def uuid7( ns: int | None = ..., *, as_type: Literal["str", "hex"] = ..., time_func: Callable[[], int] = ..., ) -> str: ... @overload def uuid7( ns: int | None = ..., *, as_type: Literal["int"] = ..., time_func: Callable[[], int] = ..., ) -> int: ... @overload def uuid7( ns: int | None = ..., *, as_type: Literal["bytes"] = ..., time_func: Callable[[], int] = ..., ) -> bytes: ... def uuid7(*args, **kwargs): # type: ignore[override] """Runtime implementation lives in the real package – stub only.""" def uuid7str(ns: int | None = ...) -> str: ... def check_timing_precision(timing_func: Callable[[], int] | None = ...) -> str: ... def uuid_to_datetime(value: _uuid.UUID) -> _dt.datetime: ... ================================================ FILE: src/analytics/AGENTS.md ================================================ # AGENTS.md - analytics This directory contains the Metabase analytics service for the Julep platform. Key Uses - Bash commands: - cd analytics - docker compose up analytics - docker buildx bake analytics - Core files: - `docker-compose.yml` for service deployment - `Dockerfile` for Metabase container - `README.md` for detailed documentation - Configuration guidelines: - Set `MEMORY_STORE_PASSWORD` for database access - Configure `JULEP_HOST` for proper URL generation - Uses same PostgreSQL instance as agents-api - Testing instructions: - Health check: `curl http://localhost:3001/api/health` - Access dashboard: `http://localhost:3001` or `https:///analytics` - Repository etiquette: - Don't commit Metabase database files - Keep sensitive configuration in environment variables - Developer environment: - Requires Docker and Docker Compose - Connects to memory-store PostgreSQL service - Unexpected behaviors: - First run shows setup wizard (this is normal) - Metabase creates its own database for metadata # Analytics Service ## Overview The analytics service provides business intelligence capabilities using Metabase, allowing users to create dashboards, run queries, and analyze data from the Julep platform's PostgreSQL database. ## Architecture - **Analytics Engine**: Metabase (open-source BI tool) - **Database**: Shared PostgreSQL instance with agents-api - **Routing**: Exposed via Traefik at `/analytics` path - **Authentication**: Metabase's built-in user management ## Key Components ### Metabase Configuration - **Application Database**: Stores Metabase metadata in PostgreSQL - **Data Source**: Connects to Julep's main PostgreSQL database - **Site URL**: Configured for proper link generation - **SSL**: Handled by Traefik gateway ### Environment Variables - `MEMORY_STORE_PASSWORD`: PostgreSQL password - `JULEP_HOST`: Host domain for URL configuration - `TAG`: Docker image tag for versioning ## Integration Points - **PostgreSQL**: Direct connection to memory-store service - **Traefik Gateway**: Reverse proxy with SSL termination - **Docker Network**: Shares julep-network with other services ## Security Features - User authentication via Metabase - SSL/TLS via Traefik - Database credentials in environment variables - Network isolation via Docker ## Development Workflow 1. Build image: `docker buildx bake analytics` 2. Deploy service: `docker compose up -d analytics` 3. Access dashboard: Navigate to `/analytics` 4. Complete setup wizard on first run 5. Connect to Julep database ## Monitoring - Health endpoint at `/api/health` - Container health checks every 30s - Logs available via Docker ## AIDEV-NOTE: Metabase service for Julep analytics and reporting ================================================ FILE: src/analytics/README.md ================================================ # Julep Analytics Service This service provides a Metabase analytics dashboard for the Julep platform, allowing users to visualize and analyze data from the PostgreSQL database. ## Overview The analytics service uses Metabase, an open-source business intelligence tool, to provide: - Interactive dashboards and visualizations - SQL query interface for data exploration - Scheduled reports and alerts - User access management ## Architecture - **Service**: Metabase (latest version) - **Database**: Connects to the same PostgreSQL instance as agents-api - **Routing**: Exposed via Traefik gateway at `/analytics` - **SSL**: Automatically handled by Traefik with Let's Encrypt ## Configuration ### Environment Variables - `MEMORY_STORE_PASSWORD`: Password for PostgreSQL connection (default: `julep_secure_password`) - `JULEP_HOST`: Host domain for the analytics URL (default: `localhost`) - `TAG`: Docker image tag (default: `dev`) ### Database Connection Metabase connects to the PostgreSQL database with: - Host: `memory-store` - Port: `5432` - Database: `postgres` (for Julep data), `metabase` (for Metabase metadata) - Username: `postgres` - Password: Value of `MEMORY_STORE_PASSWORD` ## Deployment ### Using Docker Compose ```bash # Deploy with other services docker compose --profile multi-tenant up -d # Deploy only analytics docker compose -f analytics/docker-compose.yml up -d ``` ### Building the Image ```bash # Using docker-bake docker buildx bake analytics # Using docker build docker build -t julepai/analytics:dev analytics/ ``` ## Access Once deployed, the analytics dashboard is available at: - Local: `http://localhost:3001` - Via Gateway: `https:///analytics` ### Initial Setup 1. Navigate to the analytics URL 2. Create an admin account 3. Connect to the Julep database: - Database Type: PostgreSQL - Host: `memory-store` - Port: `5432` - Database: `postgres` - Username: `postgres` - Password: (use `MEMORY_STORE_PASSWORD` value) ## Security - Authentication is handled by Metabase's built-in user management - SSL/TLS is provided by Traefik gateway - Database credentials are managed via environment variables - CORS headers are configured in Traefik ## Monitoring Health check endpoint: `http://analytics:3000/api/health` ## Development ### Local Development ```bash # Run Metabase locally docker run -d -p 3000:3000 \ -e MB_DB_TYPE=postgres \ -e MB_DB_HOST=localhost \ -e MB_DB_PORT=5432 \ -e MB_DB_DBNAME=metabase \ -e MB_DB_USER=postgres \ -e MB_DB_PASS=your_password \ --name metabase metabase/metabase ``` ### Customization To customize Metabase: 1. Modify environment variables in `docker-compose.yml` 2. Add custom plugins or themes via Dockerfile 3. Configure additional settings via Metabase admin panel ## Troubleshooting ### Common Issues 1. **Cannot connect to database** - Verify PostgreSQL is running - Check network connectivity between containers - Confirm credentials are correct 2. **Analytics not accessible via gateway** - Check Traefik configuration - Verify analytics service is healthy - Review gateway logs 3. **Metabase setup wizard appears** - This is normal on first run - Complete the setup to initialize Metabase ## AIDEV-NOTE: Analytics service integrated with existing Julep infrastructure ================================================ FILE: src/analytics/docker-compose.yml ================================================ name: julep-analytics services: analytics: image: metabase/metabase:latest container_name: julep-analytics profiles: - multi-tenant environment: # Metabase application database (for storing Metabase's own data) MB_DB_TYPE: postgres MB_DB_DBNAME: metabase MB_DB_PORT: 5432 MB_DB_USER: postgres MB_DB_PASS: ${METABASE_DB_PASSWORD:-metabase_secure_password} MB_DB_HOST: analytics-db # Metabase settings MB_SITE_URL: https://${JULEP_HOST:-localhost}/analytics MB_SITE_NAME: "Julep Analytics" MB_APPLICATION_NAME: "Julep Analytics" # AIDEV-NOTE: Metabase configured to use same postgres instance as agents-api ports: - "3001:3000" # Expose on different port to avoid conflicts restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s depends_on: analytics-db: condition: service_healthy analytics-db: image: postgres:latest container_name: julep-analytics-db profiles: - multi-tenant hostname: analytics-db restart: unless-stopped volumes: - analytics-db-data:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_DB=metabase - POSTGRES_PASSWORD=${METABASE_DB_PASSWORD:-metabase_secure_password} healthcheck: test: ['CMD-SHELL', 'pg_isready -U postgres -d metabase'] interval: 10s timeout: 5s retries: 5 volumes: analytics-db-data: external: true ================================================ FILE: src/blob-store/.gitignore ================================================ /s3.json ================================================ FILE: src/blob-store/AGENTS.md ================================================ # AGENTS.md - blob-store This directory contains the blob storage service configuration using SeaweedFS for S3-compatible object storage. Key Uses - Bash commands: - cd blob-store - docker-compose up seaweedfs - docker-compose -f docker-compose-ha.yml up # High availability mode - Core files: - `docker-compose.yml` for single-instance deployment - `docker-compose-ha.yml` for high-availability deployment - `entrypoint.sh` for container initialization - `s3.json.template` for S3 API configuration - Configuration guidelines: - Set `S3_ACCESS_KEY` and `S3_SECRET_KEY` environment variables - Use `DEBUG=true` for troubleshooting (prints config in logs) - Testing instructions: - Health check: `curl http://localhost:9333/cluster/healthz` - S3 API test: `curl http://localhost:8333/` - Repository etiquette: - Don't commit actual S3 credentials to version control - Developer environment: - Requires Docker and Docker Compose - Unexpected behaviors: - SeaweedFS data persists in named Docker volume `seaweedfs_data` # Blob Store Service ## Overview The blob-store service provides S3-compatible object storage using SeaweedFS, serving as the file storage backend for the Julep platform. It handles file uploads, downloads, and storage for agents, tasks, and user content. ## Architecture - **Storage Engine**: SeaweedFS distributed file system - **API Interface**: S3-compatible REST API - **Data Persistence**: Docker volume-backed storage - **Deployment**: Containerized with Docker Compose ## Key Components ### SeaweedFS Services - **Master**: Cluster coordination and metadata (port 9333) - **Volume**: Data storage and replication (port 28080) - **Filer**: File system interface (port 8888) - **S3 Gateway**: S3-compatible API (port 8333) ### Configuration Files - `s3.json.template`: S3 API configuration template - `entrypoint.sh`: Container startup script with validation - `docker-compose.yml`: Single-instance deployment - `docker-compose-ha.yml`: High-availability deployment ## Storage Features - S3-compatible API for seamless integration - Distributed storage with automatic replication - Horizontal scaling support - Built-in data integrity and consistency - Metrics endpoint for monitoring (port 9321) ## Environment Variables - `S3_ACCESS_KEY`: S3 API access key (required) - `S3_SECRET_KEY`: S3 API secret key (required) - `DEBUG`: Enable debug logging (optional, default: false) - `TAG`: Docker image tag (optional, default: dev) ## API Endpoints - `http://localhost:8333/`: S3-compatible API - `http://localhost:9333/cluster/healthz`: Health check - `http://localhost:8888/`: Filer web interface - `http://localhost:9321/metrics`: Prometheus metrics ## Deployment Modes 1. **Single Instance**: Basic deployment for development 2. **High Availability**: Multi-node deployment for production 3. **External Volume**: Persistent data storage across container restarts ## Integration Points - Used by `agents-api` for file storage via S3 client - Integrates with file upload/download endpoints - Supports large payload storage for Temporal workflows - Provides persistent storage for agent knowledge bases ## Monitoring - Health checks via HTTP endpoints - Prometheus metrics for storage and performance monitoring - Docker container health checks with automatic restart - Volume usage and replication status monitoring ================================================ FILE: src/blob-store/Dockerfile ================================================ # syntax=docker/dockerfile:1 # check=error=true FROM chrislusf/seaweedfs # Install envsubst ENV BUILD_DEPS="gettext" \ RUNTIME_DEPS="libintl" RUN set -x && \ apk add --update $RUNTIME_DEPS && \ apk add --virtual build_deps $BUILD_DEPS && \ cp /usr/bin/envsubst /usr/local/bin/envsubst && \ apk del build_deps # Expected environment variables: # - S3_ACCESS_KEY # - S3_SECRET_KEY COPY s3.json.template /s3.json.template COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ================================================ FILE: src/blob-store/docker-compose-ha.yml ================================================ name: julep-blob-store x-seaweedfs-base: &seaweedfs-base image: chrislusf/seaweedfs profiles: - blob-store services: seaweedfs-master: <<: *seaweedfs-base ports: - 9333:9333 - 19333:19333 command: "master -volumeSizeLimitMB=30000 -ip=seaweedfs-master -ip.bind=0.0.0.0 -port=9333 -metricsPort=9321 -raftBootstrap" healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:9333/cluster/healthz" ] interval: 60s retries: 6 timeout: 60s start_period: 30s start_interval: 10s seaweedfs-volume: <<: *seaweedfs-base ports: - 28080:28080 # Since 8080 is already used by agents-api, we use 28080 # - 18081:18080 command: 'volume -max=8 -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28080 -ip=seaweedfs-volume -metricsPort=9321 -preStopSeconds=3' healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28080/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy volumes: - seaweedfs_data:/data seaweedfs-volume2: <<: *seaweedfs-base ports: - 28081:28081 # - 18082:18081 command: 'volume -max=8 -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28081 -ip=seaweedfs-volume2 -metricsPort=9322 -preStopSeconds=3' healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28081/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy volumes: - seaweedfs_data2:/data seaweedfs-volume3: <<: *seaweedfs-base ports: - 28082:28082 # - 18083:18083 command: 'volume -max=8 -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28082 -ip=seaweedfs-volume3 -metricsPort=9323 -preStopSeconds=3' healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28082/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy volumes: - seaweedfs_data3:/data seaweedfs-volume4: <<: *seaweedfs-base ports: - 28083:28083 # - 18084:18084 command: 'volume -max=8 -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28083 -ip=seaweedfs-volume4 -metricsPort=9324 -preStopSeconds=3' healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28083/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy volumes: - seaweedfs_data4:/data # AIDEV-NOTE: Keep metricsPort unique when adding more volume replicas. seaweedfs-volume5: <<: *seaweedfs-base ports: - 28084:28084 # - 18085:18085 command: 'volume -max=8 -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28084 -ip=seaweedfs-volume5 -metricsPort=9325 -preStopSeconds=3' healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28084/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy volumes: - seaweedfs_data5:/data # AIDEV-NOTE: Align exposed ports with `seaweedfs` depends_on configuration. seaweedfs-filer: <<: *seaweedfs-base ports: - 8888:8888 - 18888:18888 command: 'filer -master="seaweedfs-master:9333" -ip.bind=0.0.0.0 -port=8888 -ip=seaweedfs-filer -metricsPort=9321' tty: true stdin_open: true healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:8888/healthz" ] interval: 60s retries: 6 timeout: 30s start_period: 30s start_interval: 10s depends_on: seaweedfs-master: condition: service_healthy seaweedfs-volume: condition: service_healthy seaweedfs: <<: *seaweedfs-base ports: - 8333:8333 command: 's3 -filer="seaweedfs-filer:8888" -ip.bind=0.0.0.0 -port=8333 -metricsPort=9321' depends_on: seaweedfs-master: condition: service_healthy seaweedfs-volume: condition: service_healthy seaweedfs-volume2: condition: service_healthy seaweedfs-volume3: condition: service_healthy seaweedfs-volume4: condition: service_healthy seaweedfs-volume5: condition: service_healthy seaweedfs-filer: condition: service_healthy volumes: seaweedfs_data: external: true seaweedfs_data2: external: true seaweedfs_data3: external: true seaweedfs_data4: external: true seaweedfs_data5: external: true ================================================ FILE: src/blob-store/docker-compose.yml ================================================ name: julep-blob-store services: seaweedfs: image: julepai/blob-store:${TAG:-dev} build: context: . dockerfile: Dockerfile profiles: - blob-store environment: - S3_ACCESS_KEY=${S3_ACCESS_KEY} - S3_SECRET_KEY=${S3_SECRET_KEY} - DEBUG=${DEBUG:-false} ports: - 9333:9333 # master port - 8333:8333 # s3 port - 8888:8888 # filer port - 28080:28080 # volume port # - 19333:19333 # master grpc port # - 18081:18080 # volume grpc port # - 18888:18888 # filer grpc port command: "-volume -volume.dir.idx /data -filer -s3 -dir=/data -ip=seaweedfs -ip.bind=0.0.0.0 -metricsPort=9321 -master.raftBootstrap=false -master.port=9333 -volume.port=28080 -volume.index=leveldb -filer.port=8888 -s3.port=8333" healthcheck: test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:9333/cluster/healthz" ] interval: 60s retries: 6 timeout: 60s start_period: 30s start_interval: 10s volumes: - seaweedfs_data:/data volumes: seaweedfs_data: external: true ================================================ FILE: src/blob-store/entrypoint.sh ================================================ #!/bin/sh set -e # Check the environment variables for var_name in S3_ACCESS_KEY S3_SECRET_KEY do if [ -z "`eval echo \\\$$var_name`" ]; then echo "Error: Environment variable '$var_name' is not set." exit 1 fi done # Generate the s3.json configuration file envsubst < /s3.json.template > /s3.json if [ "$DEBUG" = "true" ]; then echo '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' echo '@@@ Careful: Debug mode is enabled. @@@' echo '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' echo 'Printing s3.json:' cat /s3.json fi # Forward all arguments to the seaweedfs binary exec weed server -s3.config=/s3.json "$@" ================================================ FILE: src/blob-store/s3.json.template ================================================ { "identities": [ { "name": "anonymous", "actions": [ "Read" ] }, { "name": "julep", "credentials": [ { "accessKey": "${S3_ACCESS_KEY}", "secretKey": "${S3_SECRET_KEY}" } ], "actions": [ "Admin", "Read", "List", "Tagging", "Write" ] } ], "accounts": [ { "id" : "julep", "displayName": "Julep", "emailAddress": "developers@julep.ai" } ] } ================================================ FILE: src/cli/.gitignore ================================================ hello-world/ notebooks/ # Local database files temporal.db *.bak *.dat *.dir # jupyterlab stuff notebooks/Untitled*.ipynb .virtual_documents/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more # commonly ignored for libraries. # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock # pdm # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # PyCharm # JetBrains specific template is maintained in a separate JetBrains.gitignore that can # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ ================================================ FILE: src/cli/AGENTS.md ================================================ # AGENTS.md - cli This directory contains the Julep CLI implementation (`julep_cli`). Key Uses - Bash commands: - cd cli - source .venv/bin/activate - poe format - poe lint - poe typecheck - poe test - poe check - Core files and utilities: - `src/julep_cli/` contains command and subcommand handlers. - Code style guidelines: - Follows root `AGENTS.md` Python standards (FastAPI style not directly relevant). - CLI functions and flags use snake_case and kebab-case respectively. - Testing instructions: - Tests in `cli/tests/` using `ward` and `pytest`. - Run specific tests: `poe test --search "pattern" --fail-limit 1`. - Repository etiquette: - Version CLI via `julep.yaml` and bump in lockfile. - Developer environment: - Ensure `PYTHONPATH=$PWD` when invoking commands. - Unexpected behaviors: - Autogenerated CLI docs should be manually reviewed in `README.md`. # Julep CLI Architecture ## Overview The Julep CLI is a command-line interface tool for interacting with the Julep platform. It enables users to manage agents, tasks, tools, and execute tasks, providing a complete workflow from local development to platform integration. ## Core Components ### Entry Points and Application Structure - `app.py`: Main application entry point, initializes Typer app and subcommands - `wrapper.py`: Custom WrappedTyper implementation that provides interactive parameter prompting - `__main__.py`: Module entry point for direct execution ### Command Modules - `auth.py`: Authentication with the Julep platform - `agents.py`: CRUD operations for AI agents - `tasks.py`: CRUD operations for tasks - `tools.py`: CRUD operations for agent tools - `chat.py`: Interactive chat sessions with agents - `run.py`: Execute defined tasks with inputs - `executions.py`: Management of task executions - `logs.py`: Retrieve and display execution logs - `sync.py`: Synchronize local files with remote platform - `init.py`: Initialize new projects from templates - `importt.py`: Import entities from the platform - `ls.py`: List local project entities ### Models and Utilities - `models.py`: Pydantic models for CLI state and requests - `utils.py`: Common utility functions shared across modules ## Key Interfaces ### Project Structure - `julep.yaml`: Main project configuration file defining agents, tasks, and tools - `julep-lock.json`: Lock file tracking state between local and remote - `src/`: Directory structure for storing entity definitions ### Configuration Management - `~/.config/julep/config.yml`: User configuration with API keys and environment - `~/.config/julep/julep_state.db`: Persistent SQLite database for CLI state ## Workflow Patterns ### Project Initialization 1. User runs `julep init` with template name 2. CLI downloads template from repository 3. Files are extracted and verified (requires `julep.yaml`) 4. Project structure is displayed with README ### Synchronization System 1. `julep sync` parses local definitions and compares with lock file 2. Local-to-remote: Updates remote platform based on local changes 3. Remote-to-local: Updates local files based on remote changes 4. Supports watch mode for continuous synchronization 5. Conflict resolution with --force-local and --force-remote flags ### Entity Management 1. Create/update local entity definitions in YAML format 2. Reference between entities (agent → tasks, agent → tools) via templated IDs 3. Sync to remote platform with `julep sync` 4. Direct management via CLI commands (`agents create`, `tasks update`, etc.) ### Task Execution Flow 1. Define task in project 2. Run task using `julep run --task --input {...}` 3. Stream execution logs with `julep logs --execution-id --tail` 4. Chat with agents using `julep chat --agent ` ## Implementation Patterns ### Interactive CLI Design - Wrapped Typer app with custom parameter prompting - Rich console output with progress bars and styled text - Automatic parameter validation and conversion - Support for optional JSON input for complex types ### Error Handling - Consistent error presentation via error_console - Typed exceptions with meaningful messages - Progress indicators for long-running operations ### State Management - SQLite database for persisting CLI state across invocations - Lock file (julep-lock.json) for tracking remote synchronization - Environment-aware configuration with local and global settings ### Data Serialization - YAML for human-editable entity definitions - JSON for lock files and machine-readable data exchange - Support for both formats in output (--json flag) ## Client Interactions - Julep SDK used for all API communication - Rate limiting and error handling via SDK features - Authenticated via JWT tokens stored in config - Environment-aware (production, dev) endpoint selection ================================================ FILE: src/cli/README.md ================================================ # Julep CLI Specification The `julep` CLI tool provides a comprehensive command-line interface for interacting with the Julep platform. It enables authentication, management of agents, tasks, and tools, project initialization, synchronization, interaction with agents via chat, task execution, log retrieval, and more. This specification outlines the commands, options, and best practices to ensure a consistent and user-friendly experience. ## Table of Contents - [Julep CLI Specification](#julep-cli-specification) - [Table of Contents](#table-of-contents) - [Overview](#overview) - [Components](#components) - [Schema for `julep.yaml`](#schema-for-julepyaml) - [Schema for `julep-lock.json`](#schema-for-julep-lockjson) - [How the lock file is used](#how-the-lock-file-is-used) - [Version Control](#version-control) - [`relationships` Details](#relationships-details) - [How the CLI Should Use It](#how-the-cli-should-use-it) - [Installation](#installation) - [Configuration](#configuration) - [Commands](#commands) - [Authentication](#authentication) - [`julep auth`](#julep-auth) - [Agent Management](#agent-management) - [`julep agents`](#julep-agents) - [Subcommands](#subcommands) - [`julep agents create`](#julep-agents-create) - [`julep agents update`](#julep-agents-update) - [`julep agents delete`](#julep-agents-delete) - [`julep agents list`](#julep-agents-list) - [`julep agents get`](#julep-agents-get) - [Task Management](#task-management) - [`julep tasks`](#julep-tasks) - [Subcommands](#subcommands-1) - [`julep tasks create`](#julep-tasks-create) - [`julep tasks update`](#julep-tasks-update) - [`julep tasks delete`](#julep-tasks-delete) - [`julep tasks list`](#julep-tasks-list) - [Tool Management](#tool-management) - [`julep tools`](#julep-tools) - [Subcommands](#subcommands-2) - [`julep tools create`](#julep-tools-create) - [`julep tools update`](#julep-tools-update) - [`julep tools delete`](#julep-tools-delete) - [`julep tools list`](#julep-tools-list) - [Project Initialization](#project-initialization) - [`julep init`](#julep-init) - [Synchronization](#synchronization) - [`julep sync`](#julep-sync) - [Importing Agents](#importing-agents) - [`julep import`](#julep-import) - [Chat Interaction](#chat-interaction) - [`julep chat`](#julep-chat) - [Task Execution](#task-execution) - [`julep run`](#julep-run) - [Execution Management](#execution-management) - [`julep executions`](#julep-executions) - [Subcommands](#subcommands-3) - [`julep executions create`](#julep-executions-create) - [`julep executions list`](#julep-executions-list) - [`julep executions cancel`](#julep-executions-cancel) - [Log Retrieval](#log-retrieval) - [`julep logs`](#julep-logs) - [Project Assistant](#project-assistant) - [`julep assistant`](#julep-assistant) - [Common Commands](#common-commands) - [Version](#version) - [`julep --version`, `julep -v`](#julep---version-julep--v) - [Help](#help) - [`julep`, `julep --help`, `julep -h`](#julep-julep---help-julep--h) - [Global Options](#global-options) - [Standard Input/Output Handling](#standard-inputoutput-handling) - [Quiet Mode](#quiet-mode) - [Color Output](#color-output) --- ## Overview The `julep` CLI is designed to streamline interactions with the Julep platform, allowing developers to efficiently manage AI agents, tasks, tools, and projects directly from the terminal. It adheres to industry-standard CLI conventions, ensuring an intuitive and predictable user experience. For commands that output raw data (like `get`, `list`, etc.), the CLI will print/return YAML by default. If the `--json` flag is specified, the output will be in JSON format instead. ### Components There are 3 main components to the `julep` CLI: 1. The project management stuff (init, sync, etc.) 2. The static stuff (agents, tasks, tools, etc.) 3. The dynamic stuff (chat, run, logs, etc.) Different files that are important: - `~/.config/julep/config.yml`: The configuration file for the CLI. - `julep.yaml`: The configuration file for the project. - `julep-lock.json`: The lock file for the project that tracks server state. - `src/*.yaml`: The object definitions for the project (agents, tasks, tools, etc.). ### Schema for `julep.yaml` ```yaml agents: - definition: path/to/agent.yaml - definition: path/to/agent.yaml tasks: - agent_id: "{agents[0].id}" definition: path/to/task.yaml - agent_id: "{agents[1].id}" definition: path/to/task.yaml tools: - agent_id: "{agents[0].id}" definition: path/to/tool.yaml - agent_id: "{agents[1].id}" definition: path/to/tool.yaml ``` ### Schema for `julep-lock.json` ```json { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://example.com/julep-lock.schema.json", "title": "Julep Lockfile Schema", "type": "object", "properties": { "lockfile_version": { "type": "string", "description": "Version of the lockfile format." }, "updated_at": { "type": "string", "format": "date-time", "description": "Timestamp representing when the lockfile was last updated." }, "agents": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the agent definition file." }, "id": { "type": "string", "description": "Unique identifier of the agent from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "tasks": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the task definition file." }, "id": { "type": "string", "description": "Unique identifier of the task from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "tools": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the tool definition file." }, "id": { "type": "string", "description": "Unique identifier of the tool from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "relationships": { "type": "object", "properties": { "tasks": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the task." }, "agent_id": { "type": "string", "description": "Identifier of the associated agent." } }, "required": ["id", "agent_id"], "additionalProperties": false } }, "tools": { "type": "array", "items": { "type": "object", "properties": { "tool_id": { "type": "string", "description": "Identifier of the tool." }, "agent_id": { "type": "string", "description": "Identifier of the associated agent." } }, "required": ["id", "agent_id"], "additionalProperties": false } } }, "required": ["tasks", "tools"], "additionalProperties": false } }, "required": ["lockfile_version", "agents", "tasks", "tools", "relationships"], "additionalProperties": false } ``` **Example:** ```json { // Minimal versioning for the lock file's structure. // Bump if you ever change this schema in a backward-incompatible way. "lockfile_version": "0.1.0", // (Optional) Timestamp or ISO string representing when this lock was last updated. // "updated_at": "2025-01-27T14:13:52.123Z", // Agents, tasks, and tools sections store local definitions alongside remote IDs. "agents": [ { "path": "src/agents/awesome-agent.yaml", "id": "agent_123456", // The remote ID from the server "last_synced": "2025-01-27T14:13:52.123Z", "revision_hash": "abc123def456..." // Hash of local file for change detection } ], "tasks": [ { "path": "src/tasks/generate-story.yaml", "id": "task_789abcd", "last_synced": "2025-01-27T14:13:52.125Z", "revision_hash": "def456abc789..." } ], "tools": [ { "path": "src/tools/web_search.yaml", "id": "tool_xyz999", "last_synced": "2025-01-27T14:13:52.130Z", "revision_hash": "ghi678jkl012..." } ], // A separate section for relationships/"foreign key" references // so that tasks and tools can specify which agent they relate to. "relationships": { "tasks": [ { "id": "task_789abcd", "agent_id": "agent_123456" } ], "tools": [ { "id": "tool_xyz999", "agent_id": "agent_123456" } ] } } ``` ### How the lock file is used The `julep-lock.json` file serves several critical purposes: 1. **State Tracking**: It maintains a record of the remote server state, mapping local files to their remote counterparts by storing IDs and revision hashes. 2. **Change Detection**: The `revision_hash` field enables the CLI to detect when local files have changed and need to be synced. 3. **Relationship Management**: Through the `relationships` section, it tracks which tasks and tools are associated with which agents. 4. **Team Collaboration**: By checking the lock file into version control, team members can share the same remote state and avoid conflicts. #### Version Control The `julep-lock.json` file **should be committed to version control**. This is important because: - It ensures all team members are working with the same remote state - It prevents accidental creation of duplicate remote resources - It maintains consistent relationships between agents, tasks, and tools across the team - It enables tracking of remote state changes through version control history This is similar to how package managers like npm and yarn use lock files to ensure consistent dependencies across team members. #### `relationships` Details * `**tasks**`: An array where each item includes `id` and `agent_id`. * This is the CLI's record that _this remote task is associated with that remote agent._ * `**tools**`: Same pattern: a `id` references a remote tool, and `agent_id` references the remote agent. * You could expand the `relationships` object to store other relationships (e.g., task-tool references) if that's a thing in your system. You have the flexibility to break down relationships by type. #### How the CLI Should Use It **On** `**julep sync**`: 1. Parse `julep.yaml` plus any local `.yaml` definitions. 2. Compare to `julep-lock.json`: * If you find a definition that's **not** in the lock file, create it on the server. Then save the new `id` to the lock file. * If you see a definition in the lock file but the `revision_hash` changed, update it on the server. * If an entry is in the lock file but the file no longer exists locally, prompt the user to delete the remote definition (or do so automatically). 3. Do the same logic for tasks and tools. 4. Finally, examine or rebuild the `relationships` array by reading each local definition. If a local definition says "this task uses agent X," the CLI sets or updates the corresponding relationship in the lock file. --- ## Installation The `julep` CLI can be installed using pipx: ```bash pipx install julep-cli ``` This will install the CLI tool which can then be invoked using the `julep` command: ```bash julep --version ``` Note: While the package name is `julep-cli`, the installed command is simply `julep`. --- ## Configuration The CLI stores configuration data, such as the API key, in `~/.config/julep/config.yml`. After authentication, this file is created automatically. --- ## Commands > **Note**: This CLI is still in development and is not yet stable. Currently implemented commands include: > - [Authentication](#authentication) > - [Project Management](#project-management) > - [Task Execution](#task-execution) > - [Miscellaneous](#miscellaneous) ### Authentication Authenticate with the Julep platform by providing your API key. #### `julep auth` **Description:** Prompt the user to enter their API key and save it to the configuration file. **Usage:** ```bash julep auth ``` **Behavior:** 1. Prompts the user to input their API key. 2. Saves the API key to `~/.config/julep/config.yml`. **Options:** - `--api-key`, `-k`: Directly provide the API key without prompting. - `--environment`, `-e`: Set the environment to use. Defaults to `production`. **Example:** ```bash julep auth --api-key your_julep_api_key ``` --- ### Agent Management Manage AI agents within the Julep platform. #### `julep agents` **Description:** Parent command for managing agents. Includes subcommands to create, update, delete, and list agents. #### Subcommands 1. **Create an Agent** ##### `julep agents create` **Description:** Create a new AI agent. **Usage:** ```bash julep agents create --name "Agent Name" --model "Model Name" --about "Agent Description" ``` **Options:** - `--name`, `-n` (optional): Name of the agent. - `--model`, `-m` (optional): Model to be used by the agent (e.g., `gpt-4`). - `--about`, `-a` (optional): Description of the agent. - `--default-settings`, (optional): Default settings for the agent. Value is parsed as json. - `--metadata`, (optional): Metadata for the agent. Value is parsed as json. - `--instructions`, (optional): Instructions for the agent, repeat the option to add multiple. - `--definition`, `-d` (optional): Path to an agent definition file. Either provide a definition file or use the other options to create the agent. **Example:** ```bash julep agents create --name "Storyteller" --model "gpt-4" --about "An agent that crafts engaging stories." ``` 2. **Update an Agent** ##### `julep agents update` **Description:** Update an existing AI agent's details. **Usage:** ```bash julep agents update --id [--name "New Name"] [--model "New Model"] [--about "New Description"] [--metadata '{"key": "value"}'] [--instructions "Instruction 1"] [--instructions "Instruction 2"] ``` **Options:** - `--id`, (required): ID of the agent to update. - `--name`, `-n` (optional): New name for the agent. - `--model`, `-m` (optional): New model for the agent. - `--about`, `-a` (optional): New description for the agent. - `--metadata`, (optional): Metadata for the agent. Value is parsed as json. - `--default-settings`, (optional): Default settings for the agent. Value is parsed as json. - `--instructions`, (optional): Instructions for the agent, repeat the option to add multiple. **Example:** ```bash julep agents update --id abc123 --name "Creative Storyteller" --model "gpt-4.5" ``` 3. **Delete an Agent** ##### `julep agents delete` **Description:** Delete an existing AI agent. **Usage:** ```bash julep agents delete --id [--force] ``` **Behavior:** - If `--force` is not provided, the CLI will prompt for confirmation before deleting the agent. **Options:** - `--id`, (required): ID of the agent to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep agents delete --id abc123 ``` 4. **List Agents** ##### `julep agents list` **Description:** List all AI agents or filter based on metadata. **Usage:** ```bash julep agents list [--metadata-filter '{"key": "value"}'] [--json] ``` **Options:** - `--metadata-filter`, (optional): Filter agents based on specific criteria (JSON). - `--json`, (optional): Output the list in JSON format. **Example:** ```bash julep agents list --metadata-filter '{"model": "gpt-4"}' ``` 5. **Get an Agent** ##### `julep agents get` **Description:** Get an agent by its ID. **Usage:** ```bash julep agents get --id [--json] ``` **Options:** - `--json`, (optional): Output the agent in JSON format. **Example:** ```bash julep agents get --id abc123 ``` --- ### Task Management Manage tasks associated with AI agents. #### `julep tasks` **Description:** Parent command for managing tasks. Includes subcommands to create, update, delete, and list tasks. #### Subcommands 1. **Create a Task** ##### `julep tasks create` **Description:** Create a new task for an agent. **Usage:** ```bash julep tasks create --name "Task Name" --agent-id --definition "path/to/task.yaml" [--metadata '{"status": "beta"}'] [--inherit-tools] ``` **Options:** - `--agent-id`, `-a` (required): ID of the agent the task is associated with. - `--definition`, `-d` (required): Path to the task definition YAML file. - `--name`, `-n` (optional): Name of the task (if not provided, the name will be the file name of the definition). - `--description`, (optional): Description of the task (if not provided, the description will be the file name of the definition). - `--metadata`, (optional): Metadata for the task. Value is parsed as json. - `--inherit-tools`, (optional): Inherit tools from the associated agent. Defaults to false if not specified. If passed other options, they override the values in the definition file. **Example:** ```bash julep tasks create --name "Generate Story" --description "Writes a short story" --agent-id abc123 --definition ./tasks/generate_story.yaml --metadata '{"category":"fiction"}' ``` 2. **Update a Task** ##### `julep tasks update` **Description:** Update an existing task's details. **Usage:** ```bash julep tasks update --id [--name "New Name"] [--description "New Description"] [--definition "new/path/to/task.yaml"] [--metadata '{"status": "published"}'] [--inherit-tools true|false] ``` **Options:** - `--id`, (required): ID of the task to update. - `--name`, `-n` (optional): New name for the task. - `--description`, (optional): New description for the task. - `--definition`, `-d` (optional): Path to the updated task definition YAML file. - `--metadata`, (optional): Metadata for the task. Value is parsed as json. - `--inherit-tools`, (optional): Inherit tools from the associated agent (true/false). **Example:** ```bash julep tasks update --id task456 --name "Advanced Story Generation" --metadata '{"priority":"high"}' ``` 3. **Delete a Task** ##### `julep tasks delete` **Description:** Delete an existing task. **Usage:** ```bash julep tasks delete --id [--force] ``` **Options:** - `--id`, (required): ID of the task to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep tasks delete --id task456 ``` 4. **List Tasks** ##### `julep tasks list` **Description:** List all tasks or filter based on criteria. **Usage:** ```bash julep tasks list [--agent-id ] [--json] ``` **Options:** - `--agent-id`, `-a` (optional): Filter tasks by associated agent ID. - `--json`, (optional): Output the list in JSON format. **Example:** ```bash julep tasks list --agent-id abc123 ``` --- ### Tool Management Manage tools associated with AI agents. #### `julep tools` **Description:** Parent command for managing tools. Includes subcommands to create, update, delete, and list tools. #### Subcommands 1. **Create a Tool** ##### `julep tools create` **Description:** Create a new tool for an agent. **Usage:** ```bash julep tools create --name "Tool Name" --type --agent-id --definition "path/to/config.yaml" ``` **Options:** - `--agent-id`, `-a` (required): ID of the agent the tool is associated with. - `--definition`, `-d` (required): Path to the tool configuration YAML file. - `--name`, `-n` (optional): Name of the tool. If passed other options, they override the values in the definition file. **Example:** ```bash julep tools create --name "Web Search" --agent-id abc123 --definition ./tools/web_search.yaml ``` 2. **Update a Tool** ##### `julep tools update` **Description:** Update an existing tool's details. **Usage:** ```bash julep tools update --id [--name "New Name"] [--definition "new/path/to/config.yaml"] ``` **Options:** - `--id`, (required): ID of the tool to update. - `--definition`, `-d` (optional): Path to the updated tool configuration YAML file. - `--name`, `-n` (optional): New name for the tool. **Example:** ```bash julep tools update --id tool789 --name "Advanced Web Search" ``` 3. **Delete a Tool** ##### `julep tools delete` **Description:** Delete an existing tool. **Usage:** ```bash julep tools delete --id [--force] ``` **Options:** - `--id`, (required): ID of the tool to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep tools delete --id tool789 ``` 4. **List Tools** ##### `julep tools list` **Description:** List all tools or filter based on criteria. **Usage:** ```bash julep tools list [--agent-id ] [--json] ``` **Options:** - `--agent-id`, `-a` (optional): Filter tools by associated agent ID. - `--task-id`, `-t` (optional): Filter tools by associated task ID. - `--json`, (optional): Output the list in JSON format. One of `--agent-id` or `--task-id` must be provided. **Example:** ```bash julep tools list --agent-id abc123 ``` --- ### Project Initialization Initialize a new Julep project using predefined templates. #### `julep init` **Description:** Initialize a new Julep project by copying a template from the library repository. **Usage:** ```bash julep init --template= [--path=] ``` **Options:** - `--template`, `-t` (optional): Name of the template to use (defaults to `hello-world`). - `--path`, `-p` (optional): Destination directory for the initialized project (default: current directory). - `--yes`, `-y` (optional): Skip confirmation prompt. Confirm before copying the template to the destination directory. Then open the project README.md **Behavior:** 1. Copies the specified template folder from the `/library` repository to the destination directory. 2. Ensures the destination directory contains a `julep.yaml` file, validating it as a valid Julep package. --- ### Synchronization Synchronize local directories with Julep packages. #### `julep sync` **Description:** Synchronize the local Julep package with the Julep platform. **Usage:** ```bash julep sync --source= [--force-local] [--force-remote] [--watch] ``` **Options:** - `--source`, `-s` (required): Source directory containing the Julep package (must include `julep.yaml`). - `--force-local`, (optional): Force the local state to be overwritten by the remote state. - `--force-remote`, (optional): Force the remote state to be overwritten by the local state. - `--watch`, `-w` (optional): Watch the source directory for changes and synchronize automatically. **Behavior:** 1. Validates the presence of `julep.yaml` in the source directory. 2. Compares local and remote states: - If local is newer and no conflicts, updates remote - If remote is newer and no `--force-local` specified, raises an error with guidance - If `--force-local` specified, updates local to match remote - If `--force-remote` specified, updates remote to match local 3. Provides feedback on the synchronization status. --- ### Importing Agents Import an agent from the Julep platform. #### `julep import` **Description:** Import an agent from the Julep platform. **Usage:** ```bash julep import --id --output= ``` **Options:** - `--id`, (required): ID of the agent to import. - `--output`, `-o` (optional): Path to the directory to save the imported agent (defaults to the current directory). - `--yes`, `-y` (optional): Skip confirmation prompt. --- ### Chat Interaction Interact with a specific agent via chat. #### `julep chat` **Description:** Initiate an interactive chat session with a specified AI agent. **Usage:** ```bash julep chat --agent= ``` **Options:** - `--agent`, `-a` (required): ID or name of the agent to chat with. - `--situation`, `-s` (optional): Situation to chat about. - `--settings`, (optional): Chat settings (JSON string). **Example:** ```bash julep chat --agent "Storyteller" ``` **Behavior:** 1. Initiates an interactive terminal session. 2. Sends user inputs to the agent and displays responses in real-time. 3. Optionally loads and saves chat history based on provided options. --- ### Task Execution Execute specific tasks with provided inputs. #### `julep run` **Description:** Run a defined task with specified input parameters. **Usage:** ```bash julep run --task= --input='' ``` **Options:** - `--task`, `-t` (required): ID or name of the task to execute. - `--input`, (optional): JSON string representing the input for the task (defaults to `{}`). - `--input-file`, (optional): Path to a file containing the input for the task. - `--wait`, (optional): Wait for the task to complete before exiting, stream logs to stdout. **Example:** ```bash julep run --task "Generate Story" --input '{"idea": "A cat who learns to fly"}' ``` **Behavior:** 1. Submits the task for execution with the provided input. 2. If `--wait` is specified, waits for the task to complete and outputs the final result. **Error handling example:** ```bash julep run --task invalid-id --input '{}' # -> Error creating execution: Task not found ``` --- ### Execution Management Manage task executions. #### `julep executions` **Description:** Parent command for managing executions. Includes subcommands to create, list, and cancel executions. #### Subcommands 1. **Create an Execution** ##### `julep executions create` **Description:** Create a new execution for a task. **Usage:** ```bash julep executions create --task= --input='' ``` **Options:** - `--task`, `-t` (required): ID or name of the task to execute. - `--input`, (optional): JSON string representing the input for the task (defaults to `{}`). - `--input-file`, (optional): Path to a file containing the input for the task. **Example:** ```bash julep executions create --task "Generate Story" --input '{"idea": "A cat who learns to fly"}' ``` 2. **List Executions** ##### `julep executions list` **Description:** List all executions or filter based on criteria. **Usage:** ```bash julep executions list [--task-id ] [--json] ``` **Options:** - `--task-id`, `-t` (optional): Filter executions by associated task ID. - `--json`, (optional): Output the list in JSON format. **Example:** ```bash julep executions list --task-id abc123 ``` 3. **Cancel an Execution** ##### `julep executions cancel` **Description:** Cancel an existing execution. **Usage:** ```bash julep executions cancel --id ``` **Options:** - `--id`, (required): ID of the execution to cancel. **Example:** ```bash julep executions cancel --id exec123 ``` --- ### Log Retrieval Retrieve logs related to specific task executions. #### `julep logs` **Description:** Fetch and display logs for a particular task execution. **Usage:** ```bash julep logs --execution-id= ``` **Options:** - `--execution-id`, `-e` (required): ID of the task execution to retrieve logs for. - `--tail`, `-t` (optional): Continuously stream logs as they are generated. - `--since=`, `-s` (optional): Retrieve logs generated after the specified timestamp. - `--json`, (optional): Output the logs in JSON format. **Example:** ```bash julep logs --execution-id exec123 --tail ``` **Behavior:** 1. Fetches logs for the specified execution ID. 2. If `--tail` is used, streams logs in real-time. --- ### Project Assistant Initiate a guided setup for new Julep projects. #### `julep assistant` **Description:** `julep assistant` launches an interactive prompt (a "wizard" mode) that uses AI to interpret plain-English requests and transform them into valid `julep` CLI commands. Think of it as a chat-based REPL that helps you build and manage your Julep resources more intuitively. **Usage:** ```bash julep assistant ``` **Behavior:** 1. Opens a session where you can type natural language instructions (e.g., *"Create a GPT-4 agent named MarketingBot"*). 2. The assistant uses an LLM (Large Language Model) to suggest one or more CLI commands that match your request (e.g., `julep agents create --name "MarketingBot" --model "gpt-4"`). 3. Displays the suggested command(s) and prompts for confirmation: - **(Y)**: Run the command immediately, showing output in the same session. - **(n)**: Skip or cancel the suggestion. - **(edit)**: Manually revise the command prior to execution. 4. Returns to the prompt for follow-up instructions, giving you a conversational workflow (e.g., *"Now list all my tasks"*, *"Delete the agent I just created"*, etc.). **Example Session:** ``` $ julep assistant Welcome to Julep Assistant! Type your request in plain English, or type 'exit' to quit. assistant> Create a GPT-4 agent named MarketingBot Proposed command: julep agents create --name "MarketingBot" --model "gpt-4" Execute? (Y/n/edit) Y [Running command...] Agent created successfully (id: agent_654321) assistant> List all tasks Proposed command: julep tasks list Execute? (Y/n/edit) Y [Running command...] [No tasks found] assistant> exit ``` **Rationale & Benefits:** - **Simplifies Onboarding**: Users can manage agents, tasks, and tools with minimal knowledge of CLI flags and syntax. - **Conversational Guidance**: The assistant can ask clarifying questions if a request is ambiguous and recall recently created or updated resources. - **Expandable**: Future enhancements might include richer multi-step workflows, advanced editing, and deeper project insights (e.g., referencing `julep-lock.json` state). This feature is particularly useful for new users or those who want a quick, conversational way to build out a project without memorizing every `julep` subcommand. Simply type what you want in natural language, confirm or edit the generated commands, and let the assistant handle the rest. ### Common Commands #### Version ##### `julep --version`, `julep -v` **Description:** Display the version of the CLI. **Usage:** ```bash julep --version ``` #### Help ##### `julep`, `julep --help`, `julep -h` **Description:** Display help information for the CLI. **Usage:** ```bash julep --help ``` #### Global Options The following options can be used with any command: ##### Standard Input/Output Handling The CLI supports reading from standard input (stdin) and writing to standard output (stdout) for better integration with Unix-style pipelines and scripting: - Use `-` as a filename to read from stdin or write to stdout - Commands that accept file inputs (like `create` and `update`) can read from stdin - List/get commands can output directly to stdout for piping **Examples:** Reading definition from stdin: ```bash cat agent.yaml | julep agents create -d - # Read definition from stdin echo '{"name": "MyAgent"}' | julep agents create -i - # Read JSON from stdin ``` Piping between commands: ```bash julep agents get abc123 | julep agents create -d - # Clone an agent julep agents list | jq '.[] | select(.model=="gpt-4")' # Filter with jq ``` Writing output: ```bash julep agents list > agents.yaml # Save list to file julep agents get abc123 | ssh remote-host "julep agents create -d -" # Transfer to remote ``` **Behavior:** - Commands detect if stdin is a pipe or terminal - JSON/YAML format is auto-detected for stdin - Binary data is supported for applicable inputs - Exit codes follow Unix conventions (0=success, non-zero=error) ##### Quiet Mode `--quiet`, `-q`: Suppress all output except errors and explicitly requested data. Useful for scripting. **Example:** ```bash julep agents list --quiet # Only outputs the agent list, no status messages ``` ##### Color Output `--color`, `--no-color`: Enable or disable colored output. By default, color is: - Enabled for TTY (interactive terminal) sessions - Disabled for non-TTY sessions (pipes, redirects, etc.) - Disabled if NO_COLOR environment variable is set - Disabled if TERM=dumb The CLI will automatically detect these conditions and adjust color output accordingly. **Examples:** ```bash julep agents list --no-color # Force disable colored output julep agents list --color # Force enable colored output ``` **Environment Variables:** - `NO_COLOR`: Set this to any value to disable color output - `FORCE_COLOR`: Set this to any value to force color output ================================================ FILE: src/cli/cli-reference.md ================================================ # `julep` Command line interface for the Julep platform **Usage**: ```console $ julep [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--no-color`: Disable colored output [default: True] * `-q, --quiet`: Suppress all output except errors and explicitly requested data * `-v, --version`: Show version and exit * `--help`: Show this message and exit. **Commands**: * `tui`: Open Textual TUI. * `auth`: Authenticate with the Julep platform. * `chat`: Initiate an interactive chat session with... * `init`: Initialize a new Julep project by copying... * `logs`: Log the output of an execution. * `ls`: List synced entities in a julep source... * `run`: Run a defined task with specified input... * `sync`: Synchronize local package with Julep platform * `agents`: Manage AI agents * `tasks`: Manage tasks * `tools`: Manage tools * `import`: Import entities from the Julep platform * `executions`: Manage executions ## `julep tui` Open Textual TUI. **Usage**: ```console $ julep tui [OPTIONS] ``` **Options**: * `--help`: Show this message and exit. ## `julep auth` Authenticate with the Julep platform. Saves your API key to ~/.config/julep/config.yml for use with other commands. The API key can be found in your Julep account settings. **Usage**: ```console $ julep auth [OPTIONS] ``` **Options**: * `-k, --api-key TEXT`: Your Julep API key for authentication [env var: JULEP_API_KEY] * `-e, --environment TEXT`: Environment to use (defaults to production) [default: production] * `--help`: Show this message and exit. ## `julep chat` Initiate an interactive chat session with a specified AI agent. The chat session runs in the terminal, allowing real-time conversation with the agent. **Usage**: ```console $ julep chat [OPTIONS] ``` **Options**: * `-a, --agent TEXT`: ID or name of the agent to chat with [required] * `-s, --situation TEXT`: Situation to chat about * `--settings LOADS`: Chat settings as a JSON string * `--help`: Show this message and exit. ## `julep init` Initialize a new Julep project by copying a template from the library repository. This will: 1. Copy the specified template folder from the /library repository 2. Create a new project in the destination directory 3. Ensure the destination contains a valid julep.yaml file **Usage**: ```console $ julep init [OPTIONS] ``` **Options**: * `-t, --template TEXT`: Name of the template to use from the library repository [default: hello-world] * `-p, --path PATH`: Destination directory for the initialized project (default: current directory) * `-y, --yes`: Skip confirmation prompt * `--help`: Show this message and exit. ## `julep logs` Log the output of an execution. **Usage**: ```console $ julep logs [OPTIONS] ``` **Options**: * `-e, --execution-id TEXT`: ID of the execution to log [required] * `-t, --tail`: Whether to tail the logs * `--help`: Show this message and exit. ## `julep ls` List synced entities in a julep source project. **Usage**: ```console $ julep ls [OPTIONS] ``` **Options**: * `-s, --source PATH`: Path to list * `--help`: Show this message and exit. ## `julep run` Run a defined task with specified input parameters **Usage**: ```console $ julep run [OPTIONS] ``` **Options**: * `-t, --task TEXT`: ID or name of the task to execute [required] * `--input TEXT`: JSON string representing the input for the task (defaults to {}) * `--input-file PATH`: Path to a file containing the input for the task * `--wait`: Wait for the task to complete before exiting, stream logs to stdout * `--help`: Show this message and exit. ## `julep sync` Synchronize local package with Julep platform **Usage**: ```console $ julep sync [OPTIONS] ``` **Options**: * `-s, --source PATH`: Source directory containing julep.yaml * `--force-local`: Force local state to match remote * `--force-remote`: Force remote state to match local * `-d, --dry-run`: Simulate synchronization without making changes * `--help`: Show this message and exit. ## `julep agents` Manage AI agents **Usage**: ```console $ julep agents [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--help`: Show this message and exit. **Commands**: * `create`: Create a new AI agent. * `update`: Update an existing AI agent's details * `delete`: Delete an existing AI agent * `list`: List all AI agents or filter based on... * `get`: Get an agent by its ID ### `julep agents create` Create a new AI agent. Either provide a definition file or use the other options. **Usage**: ```console $ julep agents create [OPTIONS] ``` **Options**: * `-n, --name TEXT`: Name of the agent * `-m, --model TEXT`: Model to be used by the agent * `-a, --about TEXT`: Description of the agent * `--default-settings TEXT`: Default settings for the agent (JSON string) * `--metadata TEXT`: Metadata for the agent (JSON string) * `--instructions TEXT`: Instructions for the agent, can be specified multiple times * `-d, --definition TEXT`: Path to an agent definition file * `--help`: Show this message and exit. ### `julep agents update` Update an existing AI agent's details **Usage**: ```console $ julep agents update [OPTIONS] ``` **Options**: * `--id TEXT`: ID of the agent to update [required] * `-n, --name TEXT`: New name for the agent * `-m, --model TEXT`: New model for the agent * `-a, --about TEXT`: New description for the agent * `--metadata TEXT`: Metadata for the agent (JSON string) * `--default-settings TEXT`: Default settings for the agent (JSON string) * `--instructions TEXT`: Instructions for the agent, can be specified multiple times * `--help`: Show this message and exit. ### `julep agents delete` Delete an existing AI agent **Usage**: ```console $ julep agents delete [OPTIONS] ``` **Options**: * `--id TEXT`: ID of the agent to delete [required] * `-f, --force`: Force deletion without confirmation * `--help`: Show this message and exit. ### `julep agents list` List all AI agents or filter based on metadata **Usage**: ```console $ julep agents list [OPTIONS] ``` **Options**: * `--metadata-filter TEXT`: Filter agents based on metadata criteria (JSON string) * `--json`: Output the list in JSON format * `--help`: Show this message and exit. ### `julep agents get` Get an agent by its ID **Usage**: ```console $ julep agents get [OPTIONS] ``` **Options**: * `--id TEXT`: ID of the agent to retrieve [required] * `--json`: Output in JSON format * `--help`: Show this message and exit. ## `julep tasks` Manage tasks **Usage**: ```console $ julep tasks [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--help`: Show this message and exit. **Commands**: * `create`: Create a new task for an agent. * `update`: Update an existing task's details * `list`: List all tasks or filter based on criteria ### `julep tasks create` Create a new task for an agent. If other options are provided alongside the definition file, they will override values in the definition. **Usage**: ```console $ julep tasks create [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: ID of the agent the task is associated with [required] * `-d, --definition TEXT`: Path to the task definition YAML file [required] * `-n, --name TEXT`: Name of the task (if not provided, uses the definition file name) * `--description TEXT`: Description of the task (if not provided, uses the definition file name) * `--metadata TEXT`: JSON metadata for the task * `--inherit-tools`: Inherit tools from the associated agent * `--help`: Show this message and exit. ### `julep tasks update` Update an existing task's details **Usage**: ```console $ julep tasks update [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: ID of the agent the task is associated with [required] * `--id TEXT`: ID of the task to update [required] * `-n, --name TEXT`: New name for the task * `--description TEXT`: New description for the task * `-d, --definition TEXT`: Path to the updated task definition YAML file * `--metadata TEXT`: JSON metadata for the task * `--inherit-tools`: Inherit tools from the associated agent * `--help`: Show this message and exit. ### `julep tasks list` List all tasks or filter based on criteria **Usage**: ```console $ julep tasks list [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: Filter tasks by associated agent ID * `-j, --json`: Output the list in JSON format * `--help`: Show this message and exit. ## `julep tools` Manage tools **Usage**: ```console $ julep tools [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--help`: Show this message and exit. **Commands**: * `create`: Create a new tool for an agent. * `update`: Update an existing tool's details. * `delete`: Delete an existing tool. * `list`: List all tools or filter based on criteria. ### `julep tools create` Create a new tool for an agent. Requires either a definition file or direct parameters. If both are provided, command-line options override values from the definition file. **Usage**: ```console $ julep tools create [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: ID of the agent the tool is associated with [required] * `-d, --definition TEXT`: Path to the tool configuration YAML file [required] * `-n, --name TEXT`: Name of the tool (if not provided, uses filename from definition) * `--help`: Show this message and exit. ### `julep tools update` Update an existing tool's details. Updates can be made using either a definition file or direct parameters. If both are provided, command-line options override values from the definition file. **Usage**: ```console $ julep tools update [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: ID of the agent the tool is associated with [required] * `--id TEXT`: ID of the tool to update [required] * `-d, --definition TEXT`: Path to the updated tool configuration YAML file * `-n, --name TEXT`: New name for the tool * `--help`: Show this message and exit. ### `julep tools delete` Delete an existing tool. By default, prompts for confirmation unless --force is specified. **Usage**: ```console $ julep tools delete [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: ID of the agent the tool is associated with [required] * `--id TEXT`: ID of the tool to delete [required] * `-f, --force`: Force the deletion without prompting for confirmation * `--help`: Show this message and exit. ### `julep tools list` List all tools or filter based on criteria. Either --agent-id or --task-id must be provided to filter the tools list. **Usage**: ```console $ julep tools list [OPTIONS] ``` **Options**: * `-a, --agent-id TEXT`: Filter tools by associated agent ID * `--json`: Output the list in JSON format * `--help`: Show this message and exit. ## `julep import` Import entities from the Julep platform **Usage**: ```console $ julep import [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--help`: Show this message and exit. **Commands**: * `agent`: Import an agent from the Julep platform. ### `julep import agent` Import an agent from the Julep platform. **Usage**: ```console $ julep import agent [OPTIONS] ``` **Options**: * `-i, --id TEXT`: ID of the agent to import [required] * `-s, --source PATH`: Path to the source directory. Defaults to current working directory * `-o, --output PATH`: Path to save the imported agent. Defaults to <project_dir>/src/agents * `-y, --yes`: Skip confirmation prompt * `--help`: Show this message and exit. ## `julep executions` Manage executions **Usage**: ```console $ julep executions [OPTIONS] COMMAND [ARGS]... ``` **Options**: * `--help`: Show this message and exit. **Commands**: * `create`: Create a new execution. ### `julep executions create` Create a new execution. **Usage**: ```console $ julep executions create [OPTIONS] ``` **Options**: * `--task-id TEXT`: ID of the task to execute [required] * `--input TEXT`: Input for the execution [required] * `--help`: Show this message and exit. ================================================ FILE: src/cli/poe_tasks.toml ================================================ [tasks] format = "ruff format" lint = "ruff check" typecheck = "ty check" check = [ "lint", "format", "typecheck", ] [tasks.test] env = { JULEP_CLI_TESTING = "true", PYTHONPATH = "{PYTHONPATH}:." } cmd = "pytest tests/ -v" ================================================ FILE: src/cli/pyproject.toml ================================================ [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "julep-cli" version = "0.2.1-alpha0" description = "Julep CLI" readme = "README.md" requires-python = ">=3.11,<3.13" authors = [ { name = "Julep", email = "developers@julep.ai" }, ] dependencies = [ "anyio>=4.4.0", "beartype>=0.18.5", "environs>=10.3.0", "jsonschema>=4.22.0", "openai>=1.55.0", "pandas>=2.2.2", "pydantic[email]>=2.10.2", "uvloop>=0.21.0", "xxhash>=3.5.0", "unique-namer>=1.6.1", "typer>=0.15.1", "textual>=1.0.0", "trogon[typer]>=0.6.0", "typer-config[yaml]>=1.4.2", "julep>=2,<3", "questionary>=2.1.0", "db-sqlite3>=0.0.1", "stringcase>=1.2.0", "pyjwt>=2.10.1", "watchdog>=6.0.0", "requests>=2.32.3", ] [project.scripts] julep = "julep_cli:app" julep-cli = "julep_cli:app" # For backwards compatibility [dependency-groups] dev = [ "ipython>=8.30.0", "ipywidgets>=8.1.5", "jupyterlab>=4.3.1", "pip>=24.3.1", "poethepoet>=0.34,<1", "pyinstaller>=6.14,<7", "ruff>=0.11,<1", "textual-dev>=1.7.0", "ty>=0.0.1a8", "pytest>=8.0.0", "pytest-mock>=3.14.0", ] [tool.setuptools] py-modules = [ "julep_cli", ] [tool.setuptools.packages.find] where = ["src"] [tool.ty.src] root = "./src" [tool.ty.rules] invalid-argument-type = "ignore" invalid-assignment = "ignore" invalid-parameter-default = "ignore" invalid-type-form = "ignore" missing-argument = "ignore" no-matching-overload = "ignore" not-iterable = "ignore" possibly-unbound-attribute = "ignore" possibly-unbound-import = "ignore" redundant-cast = "ignore" unknown-argument = "ignore" unresolved-attribute = "ignore" unsupported-operator = "ignore" unused-ignore-comment = "ignore" ================================================ FILE: src/cli/spec.md ================================================ # Julep CLI Specification The `julep-cli` CLI tool provides a comprehensive command-line interface for interacting with the Julep platform. It enables authentication, management of agents, tasks, and tools, project initialization, synchronization, interaction with agents via chat, task execution, log retrieval, and more. This specification outlines the commands, options, and best practices to ensure a consistent and user-friendly experience. ## Table of Contents - [Julep CLI Specification](#julep-cli-specification) - [Table of Contents](#table-of-contents) - [Overview](#overview) - [Components](#components) - [Schema for `julep.yaml`](#schema-for-julepyaml) - [Schema for `julep-lock.json`](#schema-for-julep-lockjson) - [How the lock file is used](#how-the-lock-file-is-used) - [`relationships` Details](#relationships-details) - [How the CLI Should Use It](#how-the-cli-should-use-it) - [Installation](#installation) - [Configuration](#configuration) - [Commands](#commands) - [Authentication](#authentication) - [`julep auth`](#julep-auth) - [Agent Management](#agent-management) - [`julep agents`](#julep-agents) - [Subcommands](#subcommands) - [`julep agents create`](#julep-agents-create) - [`julep agents update`](#julep-agents-update) - [`julep agents delete`](#julep-agents-delete) - [`julep agents list`](#julep-agents-list) - [`julep agents get`](#julep-agents-get) - [Task Management](#task-management) - [`julep tasks`](#julep-tasks) - [Subcommands](#subcommands-1) - [`julep tasks create`](#julep-tasks-create) - [`julep tasks update`](#julep-tasks-update) - [`julep tasks delete`](#julep-tasks-delete) - [`julep tasks list`](#julep-tasks-list) - [`julep tasks get`](#julep-tasks-get) - [Tool Management](#tool-management) - [`julep tools`](#julep-tools) - [Subcommands](#subcommands-2) - [`julep tools create`](#julep-tools-create) - [`julep tools update`](#julep-tools-update) - [`julep tools delete`](#julep-tools-delete) - [`julep tools list`](#julep-tools-list) - [`julep tools get`](#julep-tools-get) - [Project Initialization](#project-initialization) - [`julep init`](#julep-init) - [Synchronization](#synchronization) - [`julep sync`](#julep-sync) - [Importing Agents](#importing-agents) - [`julep import`](#julep-import) - [Chat Interaction](#chat-interaction) - [`julep chat`](#julep-chat) - [Task Execution](#task-execution) - [`julep run`](#julep-run) - [Execution Management](#execution-management) - [`julep executions`](#julep-executions) - [Subcommands](#subcommands-3) - [`julep executions create`](#julep-executions-create) - [`julep executions list`](#julep-executions-list) - [`julep executions cancel`](#julep-executions-cancel) - [Log Retrieval](#log-retrieval) - [`julep logs`](#julep-logs) - [Project Wizard](#project-wizard) - [`julep assistant`](#julep-assistant) - [Common Commands](#common-commands) - [Version](#version) - [`julep --version`, `julep -v`](#julep---version-julep--v) - [Help](#help) - [`julep`, `julep --help`, `julep -h`](#julep-julep---help-julep--h) - [Global Options](#global-options) - [Standard Input/Output Handling](#standard-inputoutput-handling) - [Quiet Mode](#quiet-mode) - [Color Output](#color-output) --- ## Overview The `julep-cli` CLI is designed to streamline interactions with the Julep platform, allowing developers to efficiently manage AI agents, tasks, tools, and projects directly from the terminal. It adheres to industry-standard CLI conventions, ensuring an intuitive and predictable user experience. For commands that output raw data (like `get`, `list`, etc.), the CLI will print/return YAML by default. If the `--json` flag is specified, the output will be in JSON format instead. ### Components There are 3 main components to the `julep-cli` CLI: 1. The project management stuff (init, sync, etc.) 2. The static stuff (agents, tasks, tools, etc.) 3. The dynamic stuff (chat, run, logs, etc.) Different files that are important: - `~/.config/julep/config.yml`: The configuration file for the CLI. - `julep.yaml`: The configuration file for the project. - `julep-lock.json`: The lock file for the project that tracks server state. - `src/*.yaml`: The object definitions for the project (agents, tasks, tools, etc.). ### Schema for `julep.yaml` ```yaml agents: - definition: path/to/agent.yaml - definition: path/to/agent.yaml tasks: - agent_id: "{agents[0].id}" definition: path/to/task.yaml - agent_id: "{agents[1].id}" definition: path/to/task.yaml tools: - agent_id: "{agents[0].id}" definition: path/to/tool.yaml - agent_id: "{agents[1].id}" definition: path/to/tool.yaml ``` ### Schema for `julep-lock.json` ```json { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://example.com/julep-lock.schema.json", "title": "Julep Lockfile Schema", "type": "object", "properties": { "lockfile_version": { "type": "string", "description": "Version of the lockfile format." }, "updated_at": { "type": "string", "format": "date-time", "description": "Timestamp representing when the lockfile was last updated." }, "agents": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the agent definition file." }, "id": { "type": "string", "description": "Unique identifier of the agent from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "tasks": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the task definition file." }, "id": { "type": "string", "description": "Unique identifier of the task from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "tools": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "Path to the tool definition file." }, "id": { "type": "string", "description": "Unique identifier of the tool from the remote server." }, "last_synced": { "type": "string", "format": "date-time", "description": "Timestamp of the last synchronization with the remote server." }, "revision_hash": { "type": "string", "description": "Hash of the local file used for change detection." } }, "required": ["path", "id", "last_synced", "revision_hash"], "additionalProperties": false } }, "relationships": { "type": "object", "properties": { "tasks": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the task." }, "agent_id": { "type": "string", "description": "Identifier of the associated agent." } }, "required": ["id", "agent_id"], "additionalProperties": false } }, "tools": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the tool." }, "agent_id": { "type": "string", "description": "Identifier of the associated agent." } }, "required": ["id", "agent_id"], "additionalProperties": false } } }, "required": ["tasks", "tools"], "additionalProperties": false } }, "required": ["lockfile_version", "agents", "tasks", "tools", "relationships"], "additionalProperties": false } ``` **Example:** ```json { // Minimal versioning for the lock file's structure. // Bump if you ever change this schema in a backward-incompatible way. "lockfile_version": "0.1.0", // (Optional) Timestamp or ISO string representing when this lock was last updated. // "updated_at": "2025-01-27T14:13:52.123Z", // Agents, tasks, and tools sections store local definitions alongside remote IDs. "agents": [ { "path": "src/agents/awesome-agent.yaml", "id": "agent_123456", // The remote ID from the server "last_synced": "2025-01-27T14:13:52.123Z", "revision_hash": "abc123def456..." // Hash of local file for change detection } ], "tasks": [ { "path": "src/tasks/generate-story.yaml", "id": "task_789abcd", "last_synced": "2025-01-27T14:13:52.125Z", "revision_hash": "def456abc789..." } ], "tools": [ { "path": "src/tools/web_search.yaml", "id": "tool_xyz999", "last_synced": "2025-01-27T14:13:52.130Z", "revision_hash": "ghi678jkl012..." } ], // A separate section for relationships/"foreign key" references // so that tasks and tools can specify which agent they relate to. "relationships": { "tasks": [ { "id": "task_789abcd", "agent_id": "agent_123456" } ], "tools": [ { "id": "tool_xyz999", "agent_id": "agent_123456" } ] } } ``` ### How the lock file is used The `julep-lock.json` file serves several critical purposes: 1. **State Tracking**: It maintains a record of the remote server state, mapping local files to their remote counterparts by storing IDs and revision hashes. 2. **Change Detection**: The `revision_hash` field enables the CLI to detect when local files have changed and need to be synced. 3. **Relationship Management**: Through the `relationships` section, it tracks which tasks and tools are associated with which agents. 4. **Team Collaboration**: By checking the lock file into version control, team members can share the same remote state and avoid conflicts. #### Version Control The `julep-lock.json` file **should be committed to version control**. This is important because: - It ensures all team members are working with the same remote state - It prevents accidental creation of duplicate remote resources - It maintains consistent relationships between agents, tasks, and tools across the team - It enables tracking of remote state changes through version control history This is similar to how package managers like npm and yarn use lock files to ensure consistent dependencies across team members. #### `relationships` Details * `**tasks**`: An array where each item includes `id` and `agent_id`. * This is the CLI's record that _this remote task is associated with that remote agent._ * `**tools**`: Same pattern: a `id` references a remote tool, and `agent_id` references the remote agent. * You could expand the `relationships` object to store other relationships (e.g., task-tool references) if that's a thing in your system. You have the flexibility to break down relationships by type. #### How the CLI Should Use It **On** `**julep sync**`: 1. Parse `julep.yaml` plus any local `.yaml` definitions. 2. Compare to `julep-lock.json`: * If you find a definition that's **not** in the lock file, create it on the server. Then save the new `id` to the lock file. * If you see a definition in the lock file but the `revision_hash` changed, update it on the server. * If an entry is in the lock file but the file no longer exists locally, prompt the user to delete the remote definition (or do so automatically). 3. Do the same logic for tasks and tools. 4. Finally, examine or rebuild the `relationships` array by reading each local definition. If a local definition says "this task uses agent X," the CLI sets or updates the corresponding relationship in the lock file. --- ## Installation The `julep` CLI can be installed using pipx: ```bash pipx install julep-cli ``` This will install the CLI tool which can then be invoked using the `julep` command: ```bash julep --version ``` Note: While the package name is `julep-cli`, the installed command is simply `julep`. --- ## Configuration The CLI stores configuration data, such as the API key, in `~/.config/julep/config.yml`. After authentication, this file is created automatically. --- ## Commands ### Authentication Authenticate with the Julep platform by providing your API key. #### `julep auth` **Description:** Prompt the user to enter their API key and save it to the configuration file. **Usage:** ```bash julep auth ``` **Behavior:** 1. Prompts the user to input their API key. 2. Saves the API key to `~/.config/julep/config.yml`. **Options:** - `--api-key`, `-k`: Directly provide the API key without prompting. - `--environment`, `-e`: Set the environment to use. Defaults to `production`. **Example:** ```bash julep auth --api-key your_julep_api_key ``` --- ### Agent Management Manage AI agents within the Julep platform. #### `julep agents` **Description:** Parent command for managing agents. Includes subcommands to create, update, delete, and list agents. #### Subcommands 1. **Create an Agent** ##### `julep agents create` **Description:** Create a new AI agent. **Usage:** ```bash julep agents create --name "Agent Name" --model "Model Name" --about "Agent Description" ``` **Options:** - `--name`, `-n` (optional): Name of the agent. - `--model`, `-m` (optional): Model to be used by the agent (e.g., `gpt-4`). - `--about` (optional): Description of the agent. - `--default-settings` (optional): Default settings for the agent. Value is parsed as json. - `--metadata` (optional): Metadata for the agent. Value is parsed as json. - `--instructions` (optional): Instructions for the agent, repeat the option to add multiple. - `--definition`, `-d` (optional): Path to an agent definition file. - `--import-to` (optional): Import to project after creating. If inside a project then prompt user if they want to add. 2. **Update an Agent** ##### `julep agents update` **Description:** Update an existing AI agent's details. **Usage:** ```bash julep agents update --id [--name "New Name"] [--model "New Model"] [--about "New Description"] [--metadata '{"key": "value"}'] [--instructions "Instruction 1"] [--instructions "Instruction 2"] ``` **Options:** - `--id`, (required): ID of the agent to update. - `--name`, `-n` (optional): New name for the agent. - `--model`, `-m` (optional): New model for the agent. - `--about`, `-a` (optional): New description for the agent. - `--metadata` (optional): Metadata for the agent. Value is parsed as json. - `--default-settings` (optional): Default settings for the agent. Value is parsed as json. - `--instructions` (optional): Instructions for the agent, repeat the option to add multiple. **Example:** ```bash julep agents update --id abc123 --name "Creative Storyteller" --model "gpt-4.5" ``` 3. **Delete an Agent** ##### `julep agents delete` **Description:** Delete an existing AI agent. **Usage:** ```bash julep agents delete --id [--force] ``` **Behavior:** - If `--force` is not provided, the CLI will prompt for confirmation before deleting the agent. **Options:** - `--id`, (required): ID of the agent to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep agents delete --id abc123 ``` 4. **List Agents** ##### `julep agents list` **Description:** List all AI agents or filter based on metadata. **Usage:** ```bash julep agents list [--metadata-filter '{"key": "value"}'] [--json|-j] ``` **Options:** - `--metadata-filter`, (optional): Filter agents based on specific criteria (JSON). - `--json`, `-j` (optional): Output the list in JSON format. **Example:** ```bash julep agents list --metadata-filter '{"model": "gpt-4"}' ``` 5. **Get an Agent** ##### `julep agents get` **Description:** Get an agent by its ID. **Usage:** ```bash julep agents get --id [--json|-j] ``` **Options:** - `--json`, `-j` (optional): Output the agent in JSON format. **Example:** ```bash julep agents get --id abc123 ``` --- ### Task Management Manage tasks associated with AI agents. #### `julep tasks` **Description:** Parent command for managing tasks. Includes subcommands to create, update, delete, and list tasks. #### Subcommands 1. **Create a Task** ##### `julep tasks create` **Description:** Create a new task for an agent. **Usage:** ```bash julep tasks create --name "Task Name" --agent-id --definition "path/to/task.yaml" ``` **Options:** - `--name`, `-n` (optional): Name of the task. - `--agent-id`, `-a` (required): ID of the agent the task is associated with. - `--definition`, `-d` (required): Path to the task definition YAML file. - `--description` (optional): Description of the task. - `--metadata` (optional): Metadata for the task. Value is parsed as json. - `--inherit-tools` (optional): Inherit tools from the associated agent. Defaults to false. - `--import-to` (optional): Import to project after creating. 2. **Update a Task** ##### `julep tasks update` **Description:** Update an existing task's details. **Usage:** ```bash julep tasks update --id [--name "New Name"] [--agent-id ] [--definition "path/to/new_task.yaml"] [--description "New Description"] [--metadata '{"key": "value"}'] [--inherit-tools] ``` **Options:** - `--id`, (required): ID of the task to update. - `--name`, `-n` (optional): New name for the task. - `--agent-id`, `-a` (optional): New agent ID for the task. - `--definition`, `-d` (optional): Path to the new task definition YAML file. - `--description`, `-desc` (optional): New description for the task. - `--metadata`, (optional): Metadata for the task. Value is parsed as json. - `--inherit-tools`, `-it` (optional): Inherit tools from the associated agent. **Example:** ```bash julep tasks update --id abc123 --name "Updated Task Name" --agent-id def456 --definition "src/tasks/updated_task.yaml" --description "This is an updated task" --metadata '{"key": "value"}' --inherit-tools ``` 3. **Delete a Task** ##### `julep tasks delete` **Description:** Delete an existing task. **Usage:** ```bash julep tasks delete --id [--force] ``` **Behavior:** - If `--force` is not provided, the CLI will prompt for confirmation before deleting the task. **Options:** - `--id`, (required): ID of the task to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep tasks delete --id abc123 ``` 4. **List Tasks** ##### `julep tasks list` **Description:** List all tasks or filter based on metadata. **Usage:** ```bash julep tasks list [--metadata-filter '{"key": "value"}'] [--json|-j] ``` **Options:** - `--metadata-filter`, (optional): Filter tasks based on specific criteria (JSON). - `--json`, `-j` (optional): Output the list in JSON format. **Example:** ```bash julep tasks list --metadata-filter '{"agent_id": "agent_123456"}' ``` 5. **Get a Task** ##### `julep tasks get` **Description:** Get a task by its ID. **Usage:** ```bash julep tasks get --id [--json|-j] ``` **Options:** - `--json`, `-j` (optional): Output the task in JSON format. **Example:** ```bash julep tasks get --id abc123 ``` --- ### Tool Management Manage tools associated with AI agents. #### `julep tools` **Description:** Parent command for managing tools. Includes subcommands to create, update, delete, and list tools. #### Subcommands 1. **Create a Tool** ##### `julep tools create` **Description:** Create a new tool for an agent. **Usage:** ```bash julep tools create --name "Tool Name" --agent-id --definition "path/to/tool.yaml" ``` **Options:** - `--name`, `-n` (optional): Name of the tool. - `--agent-id`, `-a` (required): ID of the agent the tool is associated with. - `--definition`, `-d` (required): Path to the tool definition YAML file. - `--description` (optional): Description of the tool. - `--metadata` (optional): Metadata for the tool. Value is parsed as json. - `--import-to` (optional): Import to project after creating. 2. **Update a Tool** ##### `julep tools update` **Description:** Update an existing tool's details. **Usage:** ```bash julep tools update --id [--name "New Name"] [--agent-id ] [--definition "path/to/new_tool.yaml"] [--description "New Description"] [--metadata '{"key": "value"}'] ``` **Options:** - `--id`, (required): ID of the tool to update. - `--name`, `-n` (optional): New name for the tool. - `--agent-id`, `-a` (optional): New agent ID for the tool. - `--definition`, `-d` (optional): Path to the new tool definition YAML file. - `--description`, `-desc` (optional): New description for the tool. - `--metadata`, (optional): Metadata for the tool. Value is parsed as json. **Example:** ```bash julep tools update --id xyz789 --name "Updated Tool Name" --agent-id abc123 --definition "src/tools/updated_tool.yaml" --description "This is an updated tool" --metadata '{"key": "value"}' ``` 3. **Delete a Tool** ##### `julep tools delete` **Description:** Delete an existing tool. **Usage:** ```bash julep tools delete --id [--force] ``` **Behavior:** - If `--force` is not provided, the CLI will prompt for confirmation before deleting the tool. **Options:** - `--id`, (required): ID of the tool to delete. - `--force`, `-f` (optional): Force the deletion without prompting for confirmation. **Example:** ```bash julep tools delete --id xyz789 ``` 4. **List Tools** ##### `julep tools list` **Description:** List all tools or filter based on metadata. **Usage:** ```bash julep tools list [--metadata-filter '{"key": "value"}'] [--json|-j] ``` **Options:** - `--metadata-filter`, (optional): Filter tools based on specific criteria (JSON). - `--json`, `-j` (optional): Output the list in JSON format. **Example:** ```bash julep tools list --metadata-filter '{"agent_id": "agent_123456"}' ``` 5. **Get a Tool** ##### `julep tools get` **Description:** Get a tool by its ID. **Usage:** ```bash julep tools get --id [--json|-j] ``` **Options:** - `--json`, `-j` (optional): Output the tool in JSON format. **Example:** ```bash julep tools get --id xyz789 ``` --- ### Project Initialization #### `julep init` **Description:** Initialize a new project. **Usage:** ```bash julep init --name "Project Name" --description "Project Description" ``` **Options:** - `--name`, `-n` (required): Name of the project. - `--description`, `-desc` (optional): Description of the project. **Example:** ```bash julep init --name "My Project" --description "This is a project for managing AI agents" ``` --- ### Synchronization #### `julep sync` **Description:** Synchronize local project files with the remote server. **Usage:** ```bash julep sync [--force-local|-l] [--force-remote|-r] ``` **Behavior:** 1. Parses `julep.yaml` and any local `.yaml` definitions. 2. Compares to `julep-lock.json`. 3. Creates or updates remote resources based on local definitions. 4. Updates `julep-lock.json` with remote IDs and revision hashes. **Options:** - `--force`, `-f`: Force synchronization even if no changes are detected. - `--force-local`, `-l`: Force local files to take precedence in conflicts. - `--force-remote`, `-r`: Force remote state to take precedence in conflicts. **Example:** ```bash julep sync --force-local ``` --- ### Importing Agents #### `julep import` **Description:** Import agents from a remote server. **Usage:** ```bash julep import --id ``` **Options:** - `--id`, `-i` (required): ID of the agent to import. **Example:** ```bash julep import --id abc123 ``` --- ### Chat Interaction #### `julep chat` **Description:** Interact with an AI agent via chat. **Usage:** ```bash julep chat --agent-id ``` **Options:** - `--agent-id`, `-a` (required): ID of the agent to chat with. **Example:** ```bash julep chat --agent-id abc123 ``` --- ### Task Execution #### `julep run` **Description:** Execute a task. **Usage:** ```bash julep run --task-id [--input|-i '{"key": "value"}'] [--input-file path/to/input.json] ``` **Options:** - `--task-id`, `-t` (required): ID of the task to execute. - `--input`, `-i` (optional): JSON input data for the task. - `--input-file` (optional): Path to JSON file containing input data. **Example:** ```bash julep run --task-id abc123 --input '{"key": "value"}' --input-file src/inputs/input.json ``` ### Execution Management Manage task executions within the Julep platform. #### `julep executions` **Description:** Parent command for managing executions. Includes subcommands to create, list, and cancel executions. #### Subcommands 1. **Create an Execution** ##### `julep executions create` **Description:** Create a new execution of a task. **Usage:** ```bash julep executions create --task-id [--input|-i '{"key": "value"}'] [--input-file path/to/input.json] ``` **Options:** - `--task-id`, `-t` (required): ID of the task to execute. - `--input`, `-i` (optional): JSON input data for the task. - `--input-file` (optional): Path to JSON file containing input data. - `--async` (optional): Run the execution asynchronously. Returns immediately with execution ID. **Example:** ```bash julep executions create --task-id abc123 --input '{"prompt": "Tell me a story"}' ``` 2. **List Executions** ##### `julep executions list` **Description:** List executions, optionally filtered by task ID or status. **Usage:** ```bash julep executions list [--task-id ] [--status ] [--limit ] [--json|-j] ``` **Options:** - `--task-id`, `-t` (optional): Filter executions by task ID. - `--status`, `-s` (optional): Filter by status (running, completed, failed, cancelled). - `--limit`, `-l` (optional): Limit the number of executions returned. Default: 50. - `--json`, `-j` (optional): Output the list in JSON format. **Example:** ```bash julep executions list --task-id abc123 --status running --limit 10 ``` 3. **Cancel an Execution** ##### `julep executions cancel` **Description:** Cancel a running execution. **Usage:** ```bash julep executions cancel --execution-id [--force] ``` **Options:** - `--execution-id`, `-e` (required): ID of the execution to cancel. - `--force`, `-f` (optional): Force cancellation without confirmation. **Example:** ```bash julep executions cancel --execution-id xyz789 ``` ### Log Retrieval #### `julep logs` **Description:** Retrieve logs for a task or agent. **Usage:** ```bash julep logs --execution-id ``` **Options:** - `--execution-id`, `-e` (optional): ID of the execution to retrieve logs for. **Example:** ```bash julep logs --execution-id abc123 ``` --- ### Project Assistant #### `julep assistant` **Description:** `julep assistant` launches an interactive prompt (a "wizard" mode) that uses AI to interpret plain-English requests and transform them into valid `julep` CLI commands. Think of it as a chat-based REPL that helps you build and manage your Julep resources more intuitively. **Usage:** ```bash julep assistant ``` **Behavior:** 1. Opens a session where you can type natural language instructions (e.g., *"Create a GPT-4 agent named MarketingBot"*). 2. The assistant uses an LLM (Large Language Model) to suggest one or more CLI commands that match your request (e.g., `julep agents create --name "MarketingBot" --model "gpt-4"`). 3. Displays the suggested command(s) and prompts for confirmation: - **(Y)**: Run the command immediately, showing output in the same session. - **(n)**: Skip or cancel the suggestion. - **(edit)**: Manually revise the command prior to execution. 4. Returns to the prompt for follow-up instructions, giving you a conversational workflow (e.g., *"Now list all my tasks"*, *"Delete the agent I just created"*, etc.). **Example Session:** ``` $ julep assistant Welcome to Julep Assistant! Type your request in plain English, or type 'exit' to quit. assistant> Create a GPT-4 agent named MarketingBot Proposed command: julep agents create --name "MarketingBot" --model "gpt-4" Execute? (Y/n/edit) Y [Running command...] Agent created successfully (id: agent_654321) assistant> List all tasks Proposed command: julep tasks list Execute? (Y/n/edit) Y [Running command...] [No tasks found] assistant> exit ``` **Rationale & Benefits:** - **Simplifies Onboarding**: Users can manage agents, tasks, and tools with minimal knowledge of CLI flags and syntax. - **Conversational Guidance**: The assistant can ask clarifying questions if a request is ambiguous and recall recently created or updated resources. - **Expandable**: Future enhancements might include richer multi-step workflows, advanced editing, and deeper project insights (e.g., referencing `julep-lock.json` state). This feature is particularly useful for new users or those who want a quick, conversational way to build out a project without memorizing every `julep` subcommand. Simply type what you want in natural language, confirm or edit the generated commands, and let the assistant handle the rest. --- ### Common Commands #### Version ##### `julep --version`, `julep -v` **Description:** Display the version of the CLI. **Usage:** ```bash julep --version ``` #### Help ##### `julep`, `julep --help`, `julep -h` **Description:** Display help information for the CLI. **Usage:** ```bash julep --help ``` #### Global Options The following options can be used with any command: ##### Standard Input/Output Handling The CLI supports reading from standard input (stdin) and writing to standard output (stdout) for better integration with Unix-style pipelines and scripting: - Use `-` as a filename to read from stdin or write to stdout - Commands that accept file inputs (like `create` and `update`) can read from stdin - List/get commands can output directly to stdout for piping **Examples:** Reading definition from stdin: ```bash cat agent.yaml | julep agents create -d - # Read definition from stdin echo '{"name": "MyAgent"}' | julep agents create -i - # Read JSON from stdin ``` Piping between commands: ```bash julep agents get abc123 | julep agents create -d - # Clone an agent julep agents list | jq '.[] | select(.model=="gpt-4")' # Filter with jq ``` Writing output: ```bash julep agents list > agents.yaml # Save list to file julep agents get abc123 | ssh remote-host "julep agents create -d -" # Transfer to remote ``` **Behavior:** - Commands detect if stdin is a pipe or terminal - JSON/YAML format is auto-detected for stdin - Binary data is supported for applicable inputs - Exit codes follow Unix conventions (0=success, non-zero=error) ##### Quiet Mode `--quiet`, `-q`: Suppress all output except errors and explicitly requested data. Useful for scripting. **Example:** ```bash julep agents list --quiet # Only outputs the agent list, no status messages ``` ##### Color Output `--color`, `--no-color`: Enable or disable colored output. By default, color is: - Enabled for TTY (interactive terminal) sessions - Disabled for non-TTY sessions (pipes, redirects, etc.) - Disabled if NO_COLOR environment variable is set - Disabled if TERM=dumb The CLI will automatically detect these conditions and adjust color output accordingly. **Examples:** ```bash julep agents list --no-color # Force disable colored output julep agents list --color # Force enable colored output ``` **Environment Variables:** - `NO_COLOR`: Set this to any value to disable color output - `FORCE_COLOR`: Set this to any value to force color output --- ================================================ FILE: src/cli/src/julep_cli/__init__.py ================================================ from .agents import agents_app as agents_app from .app import app from .auth import auth from .chat import chat from .executions import executions_app as executions_app from .importt import importt from .init import init from .logs import logs from .ls import ls from .run import run from .sync import sync from .tasks import tasks_app as tasks_app from .tools import tools_app as tools_app from .utils import get_config, save_config __all__ = [ "app", "auth", "chat", "executions_app", "get_config", "importt", "init", "logs", "ls", "run", "save_config", "sync", ] ================================================ FILE: src/cli/src/julep_cli/__main__.py ================================================ try: from julep_cli.app import app except ImportError: from .app import app if __name__ == "__main__": app() ================================================ FILE: src/cli/src/julep_cli/agents.py ================================================ import json from typing import Annotated import typer from rich.box import HEAVY_HEAD from rich.progress import Progress, SpinnerColumn, TextColumn from rich.table import Table from rich.text import Text from .app import agents_app, console, error_console from .utils import DateTimeEncoder, get_julep_client SINGLE_AGENT_TABLE_WIDTH = 100 SINGLE_AGENT_COLUMN_WIDTH = 50 @agents_app.command() def create( name: Annotated[str | None, typer.Option("--name", "-n", help="Name of the agent")] = None, model: Annotated[ str | None, typer.Option("--model", "-m", help="Model to be used by the agent"), ] = None, about: Annotated[ str | None, typer.Option("--about", "-a", help="Description of the agent"), ] = None, default_settings: Annotated[ str | None, typer.Option("--default-settings", help="Default settings for the agent (JSON string)"), ] = None, metadata: Annotated[ str | None, typer.Option("--metadata", help="Metadata for the agent (JSON string)"), ] = None, instructions: Annotated[ list[str], typer.Option( "--instructions", help="Instructions for the agent, can be specified multiple times", ), ] = [], definition: Annotated[ str | None, typer.Option("--definition", "-d", help="Path to an agent definition file"), ] = None, ): """Create a new AI agent. Either provide a definition file or use the other options.""" if definition: # TODO: implement definition file parsing error_console.print("Passing definition file is not implemented yet", highlight=True) raise typer.Exit(1) # Validate that either definition is provided or name/model if not definition and not (name and model): error_console.print( "Error: Must provide either a definition file or name and model", highlight=True, ) raise typer.Exit(1) try: if metadata: json.loads(metadata) if default_settings: json.loads(default_settings) except json.JSONDecodeError as e: error_console.print(f"Error parsing JSON: {e}", highlight=True) raise typer.Exit(1) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: try: create_agent_task = progress.add_task("Creating agent...", start=False) progress.start_task(create_agent_task) agent = client.agents.create( name=name, model=model, about=about, default_settings=default_settings, metadata=metadata, instructions=instructions, ) except Exception as e: error_console.print(f"Error creating agent: {e}", style="bold red", highlight=True) raise typer.Exit(1) console.print(Text(f"Agent created successfully. Agent ID: {agent.id}", style="bold green")) @agents_app.command() def update( id: Annotated[str, typer.Option("--id", help="ID of the agent to update")], name: Annotated[ str | None, typer.Option("--name", "-n", help="New name for the agent"), ] = None, model: Annotated[ str | None, typer.Option("--model", "-m", help="New model for the agent"), ] = None, about: Annotated[ str | None, typer.Option("--about", "-a", help="New description for the agent"), ] = None, metadata: Annotated[ str | None, typer.Option("--metadata", help="Metadata for the agent (JSON string)"), ] = None, default_settings: Annotated[ str | None, typer.Option("--default-settings", help="Default settings for the agent (JSON string)"), ] = None, instructions: Annotated[ list[str], typer.Option( "--instructions", help="Instructions for the agent, can be specified multiple times", ), ] = [], ): """Update an existing AI agent's details""" try: metadata_dict = json.loads(metadata) if metadata else {} settings_dict = json.loads(default_settings) if default_settings else {} except json.JSONDecodeError as e: error_console.print(f"Error parsing JSON: {e}", highlight=True) raise typer.Exit(1) updates = { k: v for k, v in { "name": name, "model": model, "about": about, "metadata": metadata_dict if metadata else None, "default_settings": settings_dict if default_settings else None, "instructions": instructions if instructions else None, }.items() if v is not None } if not updates: error_console.print("No updates provided", highlight=True) raise typer.Exit(1) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: update_agent_task = progress.add_task("Updating agent...", start=False) progress.start_task(update_agent_task) client.agents.update(agent_id=id, **updates) except Exception as e: error_console.print(f"Error updating agent: {e}", highlight=True) raise typer.Exit(1) console.print(Text("Agent updated successfully.", style="bold green"), highlight=True) @agents_app.command() def delete( id: Annotated[str, typer.Option("--id", help="ID of the agent to delete")], force: Annotated[ bool, typer.Option( "--force", "-f", help="Force deletion without confirmation", ), ] = False, ): """Delete an existing AI agent""" if not force: confirm = typer.confirm(f"Are you sure you want to delete agent '{id}'?") if not confirm: error_console.print("Operation cancelled", highlight=True) raise typer.Exit(1) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: delete_agent_task = progress.add_task("Deleting agent...", start=False) progress.start_task(delete_agent_task) client.agents.delete(id) except Exception as e: error_console.print(f"Error deleting agent: {e}", highlight=True) raise typer.Exit(1) console.print(Text("Agent deleted successfully.", style="bold green", highlight=True)) @agents_app.command() def list( metadata_filter: Annotated[ str | None, typer.Option( "--metadata-filter", help="Filter agents based on metadata criteria (JSON string)", ), ] = None, json_output: Annotated[ bool, typer.Option("--json", help="Output the list in JSON format"), ] = False, ): """List all AI agents or filter based on metadata""" try: json.loads(metadata_filter) if metadata_filter else {} except json.JSONDecodeError as e: typer.echo(f"Error parsing metadata filter JSON: {e}") raise typer.Exit(1) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: list_agents_task = progress.add_task(description="Fetching agents", total=None) progress.start_task(list_agents_task) agents = client.agents.list(metadata_filter=metadata_filter).items except Exception as e: error_console.print( Text(f"Error fetching agents: {e}", style="bold red", highlight=True), ) raise typer.Exit(1) if json_output: typer.echo([agent.model_dump_json(indent=2) for agent in agents]) return # Table format output agent_table = Table( title=Text("Available Agents:", style="bold underline magenta"), box=HEAVY_HEAD, # border between cells show_lines=True, # Adds lines between rows show_header=True, header_style="bold magenta", width=140, ) agent_table.add_column("Name", style="cyan", width=25) agent_table.add_column("About", style="cyan", width=50) agent_table.add_column("Model", style="yellow", width=25) agent_table.add_column("ID", style="green", width=40) for agent in agents: agent_table.add_row(agent.name, agent.about, agent.model, agent.id) console.print(agent_table, highlight=True) @agents_app.command() def get( id: Annotated[str, typer.Option("--id", help="ID of the agent to retrieve")], json_output: Annotated[ bool, typer.Option( "--json", help="Output in JSON format", is_flag=True, show_default=True, ), ] = False, ): """Get an agent by its ID""" client = get_julep_client() agent = None with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: get_agent_task = progress.add_task("Retrieving agent...", start=False) progress.start_task(get_agent_task) agent = client.agents.get(id) except Exception as e: error_console.print(f"Error retrieving agent: {e}", highlight=True) raise typer.Exit(1) console.print(Text("Agent retrieved successfully.", style="bold green"), highlight=True) if json_output: console.print( json.dumps(agent.model_dump(), indent=2, cls=DateTimeEncoder), highlight=True, ) return # Create a table for agent details agent_table = Table( title=Text("Agent Details:", style="bold underline magenta"), header_style="bold magenta", width=SINGLE_AGENT_TABLE_WIDTH, ) agent_table.add_column("Key", style="green", width=SINGLE_AGENT_COLUMN_WIDTH) agent_table.add_column("Value", style="cyan", width=SINGLE_AGENT_COLUMN_WIDTH * 2) for key, value in agent.model_dump().items(): agent_table.add_row(key, str(value)) console.print(agent_table, highlight=True) ================================================ FILE: src/cli/src/julep_cli/app.py ================================================ import time from typing import Annotated from dateutil import tz from rich.console import Console from trogon.typer import init_tui from typer import Exit, Option from .wrapper import WrappedTyper # Global state console = Console() error_console = Console(stderr=True, style="bold red") local_tz = tz.gettz(time.tzname[time.daylight]) # Initialize typer app with -h as an alias for help app = WrappedTyper( name="julep", help="Command line interface for the Julep platform", no_args_is_help=True, pretty_exceptions_short=True, context_settings={"help_option_names": ["-h", "--help"]}, ) init_tui(app) # Initialize subcommands with help alias too agents_app = WrappedTyper( help="Manage AI agents", context_settings={"help_option_names": ["-h", "--help"]}, ) tasks_app = WrappedTyper( help="Manage tasks", context_settings={"help_option_names": ["-h", "--help"]}, ) tools_app = WrappedTyper( help="Manage tools", context_settings={"help_option_names": ["-h", "--help"]}, ) executions_app = WrappedTyper( help="Manage executions", context_settings={"help_option_names": ["-h", "--help"]}, ) app.add_typer(agents_app, name="agents") app.add_typer(tasks_app, name="tasks") app.add_typer(tools_app, name="tools") app.add_typer(executions_app, name="executions") # Version command def version_callback(value: bool): if value: from importlib.metadata import version try: v = version("julep-cli") console.print(f"julep CLI version [green]{v}[/green]", highlight=True) except: error_console.print("[red]julep CLI version unknown[/red]", highlight=True) raise Exit(1) raise Exit(1) def no_color_callback(value: bool) -> bool: global console, error_console if value: console = Console(color_system=None) error_console = Console(color_system=None, stderr=True) return value def quiet_callback(value: bool) -> bool: console.quiet = value return value @app.callback() def main( no_color: Annotated[ bool, Option( "--no-color", help="Disable colored output", callback=no_color_callback, is_eager=True, ), ] = not bool(console.color_system), quiet: Annotated[ bool, Option( "--quiet", "-q", help="Suppress all output except errors and explicitly requested data", callback=quiet_callback, is_eager=True, ), ] = False, version: Annotated[ bool, Option( "--version", "-v", help="Show version and exit", callback=version_callback, is_eager=True, ), ] = False, ): """ Julep CLI - Command line interface for the Julep platform """ ================================================ FILE: src/cli/src/julep_cli/auth.py ================================================ from enum import StrEnum from typing import Annotated import jwt from rich.progress import Progress, SpinnerColumn, TextColumn from rich.text import Text from typer import Exit, Option from .app import app, console, error_console from .utils import get_config, get_julep_client, save_config current_config = get_config() current_environment = current_config.get("environment") or "production" subdomain = "dev" if current_environment == "dev" else "api" api_endpoint = f"https://{subdomain}.julep.ai" dashboard_url = f"https://dashboard{'-dev' if current_environment == 'dev' else ''}.julep.ai" class Environment(StrEnum): production = "production" dev = "dev" def is_valid_jwt(token: str) -> bool: """Check if a string is a valid JWT format.""" try: # Decode without verifying signature jwt.decode(token, options={"verify_signature": False}) return True except (ValueError, jwt.DecodeError): return False @app.command() def auth( environment: Annotated[ Environment, Option( "--environment", "-e", help="Environment", envvar="JULEP_ENVIRONMENT", ), {"default": current_environment}, # Used inside the questionary prompt ], api_key: Annotated[ str, Option( "--api-key", "-k", help=f"See {dashboard_url}", envvar="JULEP_API_KEY", ), {"validate": lambda x: x is not None and is_valid_jwt(x)}, ], verify: Annotated[ bool, Option(help="Verify the API key"), ] = True, ): """ Authenticate with the Julep platform. Saves your API key to ~/.config/julep/config.yml for use with other commands. The API key can be found in your Julep account settings. """ if not api_key: error_console.print("[red]No API key provided[/red]", highlight=True) raise Exit(1) config = get_config() config["environment"] = str(environment) config["api_key"] = api_key if verify: with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: verify_task = progress.add_task("Verifying API key...", start=False) progress.start_task(verify_task) try: client = get_julep_client(**config) client.agents.list(limit=1) except Exception as e: progress.stop_task(verify_task) progress.stop() error_console.print( Text(f"Error verifying API key: {e}", style="bold red"), highlight=True, ) raise Exit(1) save_config(config) console.print( f"Successfully authenticated with [green]{environment}[/green] environment!", ) ================================================ FILE: src/cli/src/julep_cli/chat.py ================================================ import json from typing import Annotated import typer from rich.panel import Panel from rich.progress import Progress, SpinnerColumn, TextColumn from rich.text import Text from .app import app, console, error_console from .utils import get_julep_client @app.command() def chat( agent: Annotated[ str, typer.Option( "--agent", "-a", help="ID the agent to chat with", ), ], situation: Annotated[ str | None, typer.Option("--situation", "-s", help="Situation to chat about"), ] = None, settings: Annotated[ str | None, typer.Option("--settings", help="Chat settings as a JSON string", parser=json.loads), ] = None, ): """ Initiate an interactive chat session with a specified AI agent. The chat session runs in the terminal, allowing real-time conversation with the agent. """ client = get_julep_client() try: agent = client.agents.get(agent_id=agent) except Exception as e: error_console.print(Text(f"Error: {e}", style="bold red"), highlight=True) raise typer.Exit(1) session = client.sessions.create(agent=agent.id, situation=situation) console.print( Panel( Text(f"Starting chat with agent '{agent.name}'", style="bold green"), title="Chat Session", ), ) while True: message = typer.prompt("You") with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, ) as progress: task = progress.add_task("Waiting for agent response...", start=False) progress.start_task(task) response = client.sessions.chat( session_id=session.id, messages=[ { "role": "user", "content": message, }, ], ) console.print( Panel( Text(response.choices[0].message.content, style="bold blue"), title="Agent Response", ), ) ================================================ FILE: src/cli/src/julep_cli/executions.py ================================================ import json from typing import Annotated import typer from julep import Client, Julep from rich.progress import Progress, SpinnerColumn, TextColumn from .app import console, error_console, executions_app from .utils import get_julep_client, persist_attribute @persist_attribute("execution_id", extractor=lambda exec_obj: exec_obj.id) def create_execution(client: Julep | Client, task_id: str, input_data: dict): """ Create an execution and persist its execution ID to the state database. """ return client.executions.create(task_id=task_id, input=input_data) @executions_app.command() def create( task_id: Annotated[str, typer.Option("--task-id", help="ID of the task to execute")], input: Annotated[str, typer.Option("--input", help="Input for the execution")], ): """ Create a new execution. """ client = get_julep_client() try: input_data = json.loads(input) except json.JSONDecodeError as e: error_console.print(f"[bold red]Invalid JSON input: {e}[/bold red]", highlight=True) raise typer.Exit(1) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: task = progress.add_task("Creating execution...", start=False) progress.start_task(task) try: execution = create_execution(client, task_id, input_data) except Exception as e: error_console.print(f"[bold red]Error creating execution: {e}[/bold red]") raise typer.Exit(1) console.print( f"[bold blue]Execution created successfully![/bold blue]\n[green]Execution ID: {execution.id}[/green]", ) ================================================ FILE: src/cli/src/julep_cli/importt.py ================================================ import datetime import hashlib from pathlib import Path from typing import Annotated import typer from julep.types.agent import Agent from rich.progress import Progress, SpinnerColumn, TextColumn from rich.table import Table from rich.text import Text from .app import app, console, error_console, local_tz from .models import LockedEntity from .utils import ( add_agent_to_julep_yaml, add_entity_to_lock_file, get_entity_from_lock_file, get_julep_client, update_existing_entity_in_lock_file, update_yaml_for_existing_entity, ) @app.command(name="import") def importt( id: Annotated[str, typer.Option("--id", help="ID of the agent to import")], agent: Annotated[ bool, typer.Option( "--agent", "-a", help="Import an agent", ), ] = False, task: Annotated[ bool, typer.Option( "--task", "-t", help="Import a task", ), ] = False, tools: Annotated[ bool, typer.Option( "--tool", "-l", help="Import a tool", ), ] = False, source: Annotated[ Path, typer.Option( "--source", "-s", help="Path to the source directory. Defaults to current working directory", ), ] = Path.cwd(), output: Annotated[ Path | None, typer.Option( "--output", "-o", help="Path to save the imported agent. Defaults to /src/agents", ), ] = None, yes: Annotated[ bool, typer.Option( "--yes", "-y", help="Skip confirmation prompt", ), ] = False, ): """Import entities from the Julep platform. Currently only agents are supported.""" output = output or source / "src/agents" if not (source / "julep-lock.json").exists(): error_console.print( Text( "Error: 'julep-lock.json' not found in the source directory. Please run 'julep sync' to sync your project and create a lock file.", style="bold red", ), ) raise typer.Exit(1) # if tools or task is provided, we need to import the tool or task if tools or task: error_console.print( Text("Error: Tools and tasks are not supported yet.", style="bold red"), highlight=True, ) raise typer.Exit(1) # if agent is not provided, we need to print help if not agent: error_console.print( Text("Error: Agent is required.", style="bold red"), highlight=True, ) raise typer.Exit(1) client = get_julep_client() # Importing an existing agent if locked_agent := get_entity_from_lock_file(type="agent", id=id, project_dir=source): console.print( Text(f"Agent '{id}' already exists in the lock file", style="bold yellow"), highlight=True, ) confirm = typer.confirm( f"Do you want to overwrite the existing agent in the lock file and {locked_agent.path}?", ) if not confirm: console.print(Text("Operation cancelled", style="bold red"), highlight=True) raise typer.Exit(1) console.print(Text("Overwriting existing agent...", style="bold blue"), highlight=True) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: fetch_task = progress.add_task("Fetching agent from remote...", start=False) progress.start_task(fetch_task) remote_agent: Agent = client.agents.get(agent_id=id) except Exception as e: error_console.print( Text( f"Error fetching agent from remote: {e}", style="bold red", ), highlight=True, ) raise typer.Exit(1) # Create a table to display agent data table = Table(title="Agent Data") table.add_column("Field", style="cyan", no_wrap=True) table.add_column("Value", style="magenta") # Populate the table with agent data for key, value in remote_agent.model_dump().items(): table.add_row(key, str(value)) console.print(table, highlight=True) agent_yaml_path = source / locked_agent.path with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: update_task = progress.add_task( f"Updating agent in '{agent_yaml_path}'...", start=False, ) progress.start_task(update_task) update_yaml_for_existing_entity( agent_yaml_path, remote_agent.model_dump(exclude={"id", "created_at", "updated_at"}), ) except Exception as e: error_console.print( Text( f"Error updating agent in '{agent_yaml_path}': {e}", style="bold red", ), highlight=True, ) raise typer.Exit(1) console.print(Text("Updated successfully.", style="bold green"), highlight=True) console.print( Text(f"Updating agent '{id}' in lock file...", style="bold blue"), highlight=True, ) update_existing_entity_in_lock_file( type="agent", new_entity=LockedEntity( path=str(agent_yaml_path.relative_to(source)), id=id, last_synced=datetime.datetime.now(tz=local_tz).isoformat( timespec="milliseconds", ), revision_hash=hashlib.sha256( remote_agent.model_dump_json().encode(), ).hexdigest(), ), project_dir=source, ) console.print( Text( f"Agent '{id}' imported successfully to '{agent_yaml_path}'", style="bold green", ), highlight=True, ) return # Importing a new agent (doesn't exist in lock file) if not yes: confirm = typer.confirm(f"Are you sure you want to import agent '{id}' to '{output}'?") if not confirm: console.print(Text("Operation cancelled", style="bold red"), highlight=True) raise typer.Exit(1) try: client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: fetch_task = progress.add_task("Fetching agent from remote...", start=False) progress.start_task(fetch_task) remote_agent: Agent = client.agents.get(agent_id=id) except Exception as e: error_console.print( Text(f"Error fetching agent from remote: {e}", style="bold red"), ) raise typer.Exit(1) # Create a table to display agent data table = Table(title="Agent Data") table.add_column("Field", style="cyan", no_wrap=True) table.add_column("Value", style="magenta") # Populate the table with agent data for key, value in remote_agent.model_dump().items(): table.add_row(key, str(value)) console.print(table, highlight=True) # Ensure output is an absolute path relative to source. # If the user provided a relative output value, treat it as subpath of the source. if not output.is_absolute(): output = source / output agent_name = remote_agent.name.lower().replace(" ", "_") # If the provided output has a .yaml suffix, treat it as the target file; # otherwise, generate a file name based on the agent name. if output.suffix == ".yaml": agent_yaml_path: Path = output else: agent_yaml_path: Path = output / f"{agent_name}.yaml" # Ensure that the parent directory exists agent_yaml_path.parent.mkdir(parents=True, exist_ok=True) typer.echo(f"Adding agent '{remote_agent.name}' to '{agent_yaml_path}'...") update_yaml_for_existing_entity( agent_yaml_path, remote_agent.model_dump(exclude={"id", "created_at", "updated_at"}), ) typer.echo(f"Agent '{id}' imported successfully to '{agent_yaml_path}'") add_agent_to_julep_yaml( source, { "definition": str(agent_yaml_path.relative_to(source)), }, ) typer.echo(f"Adding agent '{id}' to lock file...") add_entity_to_lock_file( type="agent", new_entity=LockedEntity( path=str(agent_yaml_path.relative_to(source)), id=remote_agent.id, last_synced=datetime.datetime.now(tz=local_tz).isoformat( timespec="milliseconds", ), revision_hash=hashlib.sha256( remote_agent.model_dump_json().encode(), ).hexdigest(), ), project_dir=source, ) console.print( Text( f"Agent '{id}' imported successfully to '{agent_yaml_path}' and added to lock file", style="bold green", ), highlight=True, ) except Exception as e: error_console.print( Text(f"Error importing agent: {e}", style="bold red"), highlight=True, ) raise typer.Exit(1) # If no agent ID is provided, print help and exit if not id: typer.echo(app.get_help()) raise typer.Exit(1) ================================================ FILE: src/cli/src/julep_cli/init.py ================================================ import io import shutil import zipfile from pathlib import Path from typing import Annotated import requests import typer from rich.markdown import Markdown from rich.panel import Panel from rich.text import Text from rich.tree import Tree from .app import app, console, error_console @app.command() def init( template: Annotated[ str, typer.Option( "--template", "-t", help="Name of the template to use from the library repository (or 'empty' for an empty project)", ), ] = "hello-world", path: Annotated[ Path, typer.Option( "--path", "-p", help="Destination directory for the initialized project (default: current directory)", ), ] = Path.cwd(), yes: Annotated[ bool, typer.Option( "--yes", "-y", help="Skip confirmation prompt", ), ] = False, ): """ Initialize a new Julep project. This command downloads a predefined template from the library repository. The default template is "hello-world". Steps performed: 1. Downloads and extracts the specified template folder. 2. Validates that a 'julep.yaml' file exists. 3. Displays a directory tree of the created project. 4. Prints instructions to change directory into the project, and optionally opens a new shell there. """ if not yes: proceed = typer.confirm( f"This will initialize a new Julep project in '{path}' with template '{template}'. Proceed?", default=True, ) if not proceed: console.print(Text("Initialization cancelled.", style="bold red"), highlight=True) raise typer.Exit branch = "main" repo_url = "https://github.com/julep-ai/library" template_url = f"{repo_url}/archive/refs/heads/{branch}.zip" try: console.print(Text("Downloading template...", style="bold cyan")) response = requests.get(template_url) response.raise_for_status() with zipfile.ZipFile(io.BytesIO(response.content)) as z: repo_prefix = f"library-{branch}/" template_folder = f"{repo_prefix}{template}/" found = any(info.filename.startswith(template_folder) for info in z.infolist()) if not found: error_console.print( Text(f"Template '{template}' not found in repository", style="bold red"), highlight=True, ) raise typer.Exit(1) for file_info in z.infolist(): if file_info.filename.startswith(template_folder): z.extract(file_info, path) library_repo_prefix = path / f"library-{branch}" extracted_template_path = library_repo_prefix / template final_destination = path / template # Warn the user if final_destination exists and is not empty (files will be merged) if final_destination.exists() and any(final_destination.iterdir()): if not yes: proceed_existing = typer.confirm( f"Warning: The directory '{final_destination}' already exists and is not empty. Merging files may cause accidental data loss. Do you want to proceed?", default=False, ) if not proceed_existing: console.print( Text("Initialization cancelled.", style="bold red"), highlight=True, ) raise typer.Exit(1) else: console.print( Text( f"Warning: The directory '{final_destination}' already exists and is not empty. Files will be merged.", style="bold yellow", ), highlight=True, ) final_destination.mkdir(parents=True, exist_ok=True) shutil.copytree(extracted_template_path, final_destination, dirs_exist_ok=True) shutil.rmtree(library_repo_prefix) except requests.exceptions.RequestException as e: error_console.print( Text(f"Failed to download template: {e}", style="bold red"), highlight=True, ) raise typer.Exit(1) except zipfile.BadZipFile as e: error_console.print( Text(f"Failed to extract template: {e}", style="bold red"), highlight=True, ) raise typer.Exit(1) julep_yaml = final_destination / "julep.yaml" if not julep_yaml.exists(): error_console.print( Text("Error: 'julep.yaml' not found in the project directory", style="bold red"), highlight=True, ) raise typer.Exit(1) console.print( Text( f"Successfully initialized new Julep project with template '{template}' in {path}", style="bold green", ), highlight=True, ) def print_directory_tree(directory: Path) -> None: tree = Tree(f":open_file_folder: [bold]{directory.name}") def add_tree(branch, path: Path): for item in sorted(path.iterdir(), key=lambda x: x.name): if item.is_dir(): subtree = branch.add(f":open_file_folder: [bold]{item.name}/") add_tree(subtree, item) else: branch.add(item.name) add_tree(tree, directory) console.print(tree) print_directory_tree(final_destination) cd_instruction = f"cd {final_destination.resolve()}" console.print( Text(f"To start working on your project, run: {cd_instruction}", style="bold green"), highlight=True, ) # Python runs as a separate process, and any directory changes it makes only apply to that process. # Once the script exits, the original shell remains unchanged. # The only way to persist a directory change is by running cd directly in the shell. # if typer.confirm("Would you like to change to the project directory?", default=False): # try: # # Change current working directory to the final destination # os.chdir(final_destination) # console.print( # Text(f"Changed working directory to {final_destination.resolve()}", style="bold green") # ) # # Launch an interactive shell in the project directory. # # This will spawn a child shell, and when you exit it, you'll return here. # shell = os.environ.get("SHELL") # if shell: # subprocess.run([shell]) # else: # subprocess.run("/bin/sh") # except Exception as e: # error_console.print( # Text(f"Failed to change directory and launch shell: {e}", style="bold red") # ) # get the readme file readme_path = final_destination / "README.md" if readme_path.exists(): readme_content = readme_path.read_text() markdown = Markdown(readme_content) console.print( Panel(markdown, title=Text("Project README", style="bold blue")), highlight=True, ) ================================================ FILE: src/cli/src/julep_cli/logs.py ================================================ import json from typing import Annotated, ClassVar import typer from julep.resources.executions.transitions import Transition from rich.box import HEAVY from rich.progress import Progress, SpinnerColumn, TextColumn from rich.table import Table from rich.text import Text # New imports for Textual Log TUI functionality from textual.app import App from textual.binding import Binding from textual.widgets import Header, Static from textual.widgets import Log as TextLog from .app import app, console, error_console from .utils import get_julep_client, manage_db_attribute # New TUI app using Textual's Log widget to display transitions in tailing mode class TransitionLogApp(App): # Add a binding for Ctrl+C to quit BINDINGS: ClassVar[list[Binding]] = [ Binding( "ctrl+c", "quit", "Quit", tooltip="Quit the app and return to the command prompt.", show=False, priority=True, ), ] TITLE = "Transition Log" def __init__(self, client, execution_id, initial_transitions, **kwargs): # Set the app title so Header() can pick it up super().__init__(**kwargs) self.client = client self.execution_id = execution_id self.transitions = initial_transitions self.log_widget = None def compose(self): # Yield a header; Header() will display the app's title (set above) yield Header() # Create the Log widget self.log_widget = TextLog(highlight=True) yield self.log_widget # Add a footer with an exit message yield Static("Press Ctrl+C to exit") async def on_mount(self) -> None: # Display the initial transitions in reversed order for transition in reversed(self.transitions): self.log_widget.write( f"{transition.type}:\n{json.dumps(transition.output, indent=4)}\n\n", ) # Set up a periodic callback every 1 second to check for new transitions self.set_interval(1, self.fetch_new_transitions) async def fetch_new_transitions(self) -> None: fetched_transitions = self.client.executions.transitions.list( execution_id=self.execution_id, ).items # Calculate the number of new transitions delta = len(fetched_transitions) - len(self.transitions) if delta > 0: new_transitions = fetched_transitions[:delta] for transition in reversed(new_transitions): self.log_widget.write( f"{transition.type}:\n{json.dumps(transition.output, indent=4)}\n\n", ) self.transitions = fetched_transitions # If a terminal state is reached, display a final message and keep the app open. if ( self.transitions and self.transitions[0].type in ["finish", "cancelled", "error"] and not hasattr(self, "_completion_message_shown") ): self.log_widget.write("\nExecution complete.") self._completion_message_shown = True @app.command() def logs( execution_id: Annotated[ str | None, typer.Option("--execution-id", "-e", help="ID of the execution to log"), ] = None, tailing: Annotated[ bool, typer.Option("--tail", "-t", help="Whether to tail the logs"), ] = False, ): """ Log the output of an execution. """ # Update or fetch the execution_id from the database execution_id = manage_db_attribute("execution_id", execution_id) transitions_table = Table( title="Execution Transitions", box=HEAVY, # border between cells show_lines=True, # Adds lines between rows show_header=True, header_style="bold magenta", ) transitions_table.add_column( "Transition Type", style="bold cyan", no_wrap=True, justify="center", vertical="middle", ) transitions_table.add_column( "Transition Output", style="green", ) def display_transitions(transitions: list[Transition]): for transition in reversed(transitions): transitions_table.add_row(transition.type, json.dumps(transition.output, indent=4)) console.print(transitions_table, highlight=True) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: fetch_transitions = progress.add_task( description="Fetching transitions", total=None, ) progress.start_task(fetch_transitions) transitions = client.executions.transitions.list(execution_id=execution_id).items except Exception as e: error_console.print( Text(f"Error fetching transitions: {e}", style="bold red"), highlight=True, ) raise typer.Exit(1) display_transitions(transitions) if tailing: # Instead of reprinting the table repeatedly, # we launch the Textual TUI that uses a Log widget to display transitions. TransitionLogApp( client=client, execution_id=execution_id, initial_transitions=transitions, ).run() ================================================ FILE: src/cli/src/julep_cli/ls.py ================================================ from pathlib import Path from typing import Annotated import typer import yaml from rich.table import Table from rich.text import Text from .app import app, console from .models import LockFileContents from .utils import get_lock_file MIN_TABLE_WIDTH = 200 @app.command() def ls( source: Annotated[ Path, typer.Option( "--source", "-s", help="Path to list", ), ] = Path.cwd(), ): """ List synced entities in a julep source project. """ lock_file: LockFileContents = get_lock_file(source) if lock_file.agents: agents_table = Table( title=Text("Agents:", style="bold underline magenta"), header_style="bold magenta", min_width=MIN_TABLE_WIDTH, ) agents_table.add_column("Name", style="green") agents_table.add_column("About", style="green") agents_table.add_column("Model", style="green") agents_table.add_column("Definition File", style="yellow") agents_table.add_column("ID", style="cyan", no_wrap=True) for agent in lock_file.agents: agent_yaml_contents: dict = yaml.safe_load(Path(source / agent.path).read_text()) agent_yaml_contents["id"] = agent.id agents_table.add_row( agent_yaml_contents.get("name", "N/A"), agent_yaml_contents.get("about", "N/A"), agent_yaml_contents.get("model", "N/A"), str(agent.path), str(agent_yaml_contents["id"]), ) console.print(agents_table, highlight=True) if lock_file.tasks: tasks_table = Table( title=Text("Tasks:", style="bold underline magenta"), header_style="bold magenta", min_width=MIN_TABLE_WIDTH, ) tasks_table.add_column("Name", style="green") tasks_table.add_column("Description", style="green") tasks_table.add_column("Definition File", style="yellow") tasks_table.add_column("ID", style="cyan", no_wrap=True) for task in lock_file.tasks: task_yaml_contents: dict = yaml.safe_load(Path(source / task.path).read_text()) tasks_table.add_row( task_yaml_contents.get("name", "N/A"), task_yaml_contents.get("description", "N/A"), str(task.path), str(task.id), ) console.print(tasks_table, highlight=True) if lock_file.tools: tools_table = Table( title=Text("Tools:", style="bold underline magenta"), header_style="bold magenta", min_width=MIN_TABLE_WIDTH, ) tools_table.add_column("Name", style="green") tools_table.add_column("Description", style="green") tools_table.add_column("Definition File", style="yellow") tools_table.add_column("ID", style="cyan", no_wrap=True) for tool in lock_file.tools: tool_yaml_contents: dict = yaml.safe_load(Path(source / tool.path).read_text()) tools_table.add_row( tool_yaml_contents.get("name", "N/A"), tool_yaml_contents.get("description", "N/A"), str(tool.path), str(tool.id), ) console.print(tools_table, highlight=True) ================================================ FILE: src/cli/src/julep_cli/models.py ================================================ from typing import Annotated, Any, Literal from pydantic import BaseModel, ConfigDict, Field, StrictBool class CreateAgentRequest(BaseModel): """ Payload for creating an agent """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: Any | None = None """ Default settings for all sessions created by this agent """ class CreateToolRequest(BaseModel): """ Payload for creating a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: Any | None = None # TODO: Change to FunctionDef """ The function to call """ integration: ( # TODO: Change to available integrations Any | None ) = None """ The integration to call """ system: Any | None = None # TODO: Change to SystemDef """ The system to call """ api_call: Any | None = None # TODO: Change to ApiCallDef """ The API call to make """ computer_20241022: Any | None = None # TODO: Change to Computer20241022Def """ (Alpha) Anthropic new tools """ text_editor_20241022: Any | None = None # TODO: Change to TextEditor20241022Def bash_20241022: Any | None = None # TODO: Change to Bash20241022Def class CreateTaskRequest(BaseModel): """ Payload for creating a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ Any # TODO: Change to Task steps ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[CreateToolRequest] = [] # TODO: Change to TaskTool """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class LockedEntity(BaseModel): """ A locked entity is information about an entity (agent | task | tool) that has been created on the Julep platform """ path: str """ The path to the yaml file that defines the entity """ id: str """ The ID of the entity """ last_synced: str """ The last time the entity was synced with the remote Julep platform """ revision_hash: str """ The revision hash of the entity (sha256 of the yaml file contents) """ class TaskAgentRelationship(BaseModel): id: str """ The ID of the task """ agent_id: str """ The ID of the agent """ class ToolAgentRelationship(BaseModel): id: str """ The ID of the tool """ agent_id: str """ The ID of the agent """ class Relationships(BaseModel): """ The relationships between agents, tasks, and tools """ tasks: list[TaskAgentRelationship] = [] """ The tasks that have been created on the Julep platform """ tools: list[ToolAgentRelationship] = [] """ The tools that have been created on the Julep platform """ class LockFileContents(BaseModel): """ Schema for the julep-lock.json file """ lockfile_version: str = "0.1.0" """ The version of the lock file """ agents: list[LockedEntity] = [] """ The agents that have been created on the Julep platform """ tasks: list[LockedEntity] = [] """ The tasks that have been created on the Julep platform """ tools: list[LockedEntity] = [] """ The tools that have been created on the Julep platform """ relationships: Relationships | None = None """ The relationships between agents, tasks, and tools """ ================================================ FILE: src/cli/src/julep_cli/run.py ================================================ import json from pathlib import Path from typing import Annotated from uuid import UUID import julep import typer from rich.progress import Progress, SpinnerColumn, TextColumn from .app import app, console, error_console from .executions import create_execution from .logs import logs from .utils import get_julep_client @app.command() def run( task: Annotated[ UUID, typer.Option( "--task", "-t", help="ID of the task to execute", ), ], input: Annotated[ str | None, typer.Option( "--input", help="JSON string representing the input for the task (defaults to {})", ), ] = None, input_file: Annotated[ Path | None, typer.Option( "--input-file", help="Path to a file containing the input for the task", ), ] = None, wait: Annotated[ bool, typer.Option( "--wait", help="Wait for the task to complete before exiting, stream logs to stdout", ), ] = False, ): """Run a defined task with specified input parameters""" # Parse input task_input = {} if input and input_file: msg = "Cannot specify both --input and --input-file" raise typer.BadParameter(msg) if input: try: task_input = json.loads(input) if not isinstance(task_input, dict): msg = "Input must be a JSON object (dictionary)" raise typer.BadParameter(msg) except json.JSONDecodeError as e: msg = f"Input must be valid JSON: {e}" raise typer.BadParameter(msg) elif input_file: try: with open(input_file) as f: task_input = json.load(f) if not isinstance(task_input, dict): msg = "Input file must contain a JSON object (dictionary)" raise typer.BadParameter(msg) except FileNotFoundError as e: msg = f"Input file not found: {e}" raise typer.BadParameter(msg) except json.JSONDecodeError as e: msg = f"Input file must be valid JSON: {e}" raise typer.BadParameter(msg) client = get_julep_client() # AIDEV-NOTE: Execute task via Julep API and surface errors clearly with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: run_task = progress.add_task("Creating execution...", start=False) progress.start_task(run_task) execution = create_execution(client, str(task), task_input) except Exception as e: error_console.print( f"[bold red]Error creating execution: {e}[/bold red]", highlight=True, ) raise typer.Exit(1) console.print( f"Execution created successfully! Execution ID: {execution.id}", ) # AIDEV-NOTE: Execute task via Julep API with specific error handling for different failure types with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: run_task = progress.add_task("Creating execution...", start=False) progress.start_task(run_task) execution = create_execution(client, str(task), task_input) except julep.NotFoundError as e: error_console.print( f"[bold red]Task not found: {e}[/bold red]", highlight=True, ) raise typer.Exit(1) except Exception as e: error_console.print( f"[bold red]Error creating execution: {e}[/bold red]", highlight=True, ) raise typer.Exit(1) console.print( f"Execution created successfully! Execution ID: {execution.id}", ) if wait: logs(execution_id=execution.id, tailing=True) ================================================ FILE: src/cli/src/julep_cli/sync.py ================================================ import hashlib import json import threading import time from contextlib import suppress from datetime import UTC, datetime from pathlib import Path from typing import Annotated import julep import typer import yaml from julep.types import Agent, Task from rich.panel import Panel from rich.progress import Progress, SpinnerColumn, TextColumn from rich.text import Text from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer from .app import app, console, error_console, local_tz from .models import ( CreateAgentRequest, CreateTaskRequest, CreateToolRequest, LockedEntity, LockFileContents, Relationships, TaskAgentRelationship, ToolAgentRelationship, ) from .utils import ( get_agent_id_from_expression, get_julep_client, get_julep_yaml, get_lock_file, get_related_agent_id, update_entity_force_remote, write_lock_file, ) @app.command() def sync( source: Annotated[ Path, typer.Option( "--source", "-s", help="Source directory containing julep.yaml", ), ] = Path.cwd(), force_local: Annotated[ bool, typer.Option( "--force-local", help="Force local state to match remote", ), ] = False, force_remote: Annotated[ bool, typer.Option( "--force-remote", help="Force remote state to match local", ), ] = False, dry_run: Annotated[ bool, typer.Option( "--dry-run", "-d", help="Simulate synchronization without making changes", ), ] = False, watch: Annotated[ bool, typer.Option( "--watch", "-w", help=( "Watch for changes and synchronize automatically. Note: when watch mode is enabled, " "only local-to-remote sync (force-local) is supported. Use --force-remote only with watch mode turned off." ), ), ] = False, ): """Synchronize local package with Julep platform. Note: When watch mode is enabled, local changes are continuously synced to remote (i.e. the process works as 'force-local' and --force-remote is ignored). """ # set the lock file path lock_file_path = source / "julep-lock.json" # if dry_run is true, we print a dry run message if dry_run: console.print(Text("Dry run - no changes will be made", style="bold yellow")) return # if force_local is false and force_remote is false and lock file does not exist, we set force_local to true if not force_local and not force_remote and not lock_file_path.exists(): force_local = True # if watch is true and force_remote is true, we raise an error if watch and force_remote: error_console.print( Text("Error: Cannot use both --watch and --force-remote", style="bold red"), ) raise typer.Exit(1) # When watch mode is enabled, force a local sync and disable remote forcing. if watch: if force_remote: error_console.print( Text("Error: Cannot use both --watch and --force-remote", style="bold red"), ) raise typer.Exit(1) console.print( Text( "Watch mode enabled. Forcing local sync and disabling force_remote.", style="bold green", ), ) force_local = True force_remote = False # Wrap the sync logic in an inner function to allow re-running on file changes. def perform_sync_logic(): try: client = get_julep_client() except Exception as e: error_console.print(Text(f"Error initializing Julep client: {e}", style="bold red")) if not watch: raise typer.Exit(1) return # Branch A: If forcing local sync and no lock file exists if force_local and not lock_file_path.exists(): locked_agents: list[LockedEntity] = [] locked_tasks: list[LockedEntity] = [] locked_tools: list[LockedEntity] = [] relationships: Relationships = Relationships() julep_yaml_content = get_julep_yaml(source) agents: list[dict] = julep_yaml_content.get("agents", []) tasks: list[dict] = julep_yaml_content.get("tasks", []) tools: list[dict] = julep_yaml_content.get("tools", []) if agents or tasks or tools: console.print( Panel( Text( "Found the following new entities in julep.yaml:", style="bold cyan", ), ), ) from rich.table import Table if agents: table = Table(title="Agents", show_header=False, title_style="bold magenta") table.add_column("Definition", style="dim", width=50) for agent in agents: table.add_row(agent.get("definition")) console.print(table, highlight=True) if tasks: table = Table(title="Tasks", show_header=False, title_style="bold cyan") table.add_column("Definition", style="dim", width=50) for task in tasks: table.add_row(task.get("definition")) console.print(table, highlight=True) if tools: table = Table(title="Tools", show_header=False, title_style="bold green") table.add_column("Definition", style="dim", width=50) for tool in tools: table.add_row(tool.get("definition")) console.print(table, highlight=True) else: console.print(Text("No new entities found in julep.yaml", style="bold yellow")) return if agents: for agent in agents: agent_yaml_path: Path = source / agent.pop("definition") agent_yaml_content = yaml.safe_load(agent_yaml_path.read_text()) agent_request_hash = hashlib.sha256( json.dumps(agent_yaml_content).encode(), ).hexdigest() agent_request = CreateAgentRequest(**agent_yaml_content, **agent) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Creating agents on remote...", start=False, ) progress.start_task(sync_task) created_agent = client.agents.create( **agent_request.model_dump(exclude_unset=True, exclude_none=True), ) locked_agents.append( LockedEntity( path=str(agent_yaml_path.relative_to(source)), id=created_agent.id, last_synced=created_agent.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=agent_request_hash, ), ) console.print( Text("All agents were successfully created on remote", style="bold green"), ) if tasks: for task in tasks: task_yaml_path: Path = source / task.pop("definition") agent_id = get_agent_id_from_expression(task.pop("agent_id"), locked_agents) task_yaml_content = yaml.safe_load(task_yaml_path.read_text()) task_request_hash = hashlib.sha256( json.dumps(task_yaml_content).encode(), ).hexdigest() task_request = CreateTaskRequest(**task_yaml_content, **task) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Creating tasks on remote...", start=False, ) progress.start_task(sync_task) created_task = client.tasks.create( agent_id=agent_id, **task_request.model_dump(exclude_unset=True, exclude_none=True), ) relationships.tasks.append( TaskAgentRelationship(id=created_task.id, agent_id=agent_id), ) locked_tasks.append( LockedEntity( path=str(task_yaml_path.relative_to(source)), id=created_task.id, last_synced=created_task.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=task_request_hash, ), ) console.print( Text("All tasks were successfully created on remote", style="bold blue"), ) if tools: for tool in tools: tool_yaml_path: Path = source / tool.pop("definition") tool_yaml_content = yaml.safe_load(tool_yaml_path.read_text()) tool_request_hash = hashlib.sha256( json.dumps(tool_yaml_content).encode(), ).hexdigest() tool_request = CreateToolRequest(**tool_yaml_content, **tool) agent_id = get_agent_id_from_expression(tool.pop("agent_id"), locked_agents) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Creating tools on remote...", start=False, ) progress.start_task(sync_task) created_tool = client.agents.tools.create( agent_id=agent_id, **tool_request.model_dump(exclude_unset=True, exclude_none=True), ) relationships.tools.append( ToolAgentRelationship(id=created_tool.id, agent_id=agent_id), ) locked_tools.append( LockedEntity( path=str(tool_yaml_path.relative_to(source)), id=created_tool.id, last_synced=created_tool.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=tool_request_hash, ), ) console.print( Text("All tools were successfully created on remote", style="bold magenta"), ) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task("Writing lock file...", start=False) progress.start_task(sync_task) write_lock_file( source, LockFileContents( agents=locked_agents, tasks=locked_tasks, tools=locked_tools, relationships=relationships, ), ) console.print(Text("Synchronization complete", style="bold green")) return # Branch B: Force local update when lock file exists if force_local and lock_file_path.exists(): found_changes = False lock_file = get_lock_file(source) julep_yaml_content = get_julep_yaml(source) agents_julep_yaml = julep_yaml_content.get("agents", []) tasks_julep_yaml = julep_yaml_content.get("tasks", []) tools_julep_yaml = julep_yaml_content.get("tools", []) # Update agents for agent_julep_yaml in agents_julep_yaml: agent_yaml_def_path: Path = Path(agent_julep_yaml.get("definition")) agent_yaml_content = yaml.safe_load((source / agent_yaml_def_path).read_text()) found_in_lock = False for i in range(len(lock_file.agents)): agent_julep_lock = lock_file.agents[i] if agent_julep_lock.path == str(agent_yaml_def_path): found_in_lock = True agent_yaml_content_hash = hashlib.sha256( json.dumps(agent_yaml_content).encode(), ).hexdigest() agent_julep_lock_hash = agent_julep_lock.revision_hash if agent_yaml_content_hash != agent_julep_lock_hash: found_changes = True console.print( Text( f"Agent {agent_yaml_def_path} has changed, updating on remote...", style="bold yellow", ), ) agent_request = CreateAgentRequest( **agent_yaml_content, **agent_julep_yaml, ) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Updating agent on remote...", start=False, ) progress.start_task(sync_task) try: client.agents.create_or_update( agent_id=agent_julep_lock.id, **agent_request.model_dump( exclude_unset=True, exclude_none=True, ), ) except Exception as e: error_console.print( f"\n[bold red]Error updating agent: {e}[/bold red]", ) raise typer.Exit(1) console.print( Text( f"Agent {agent_yaml_def_path} updated successfully", style="bold blue", ), ) updated_at = client.agents.get(agent_julep_lock.id).updated_at lock_file.agents[i] = LockedEntity( path=agent_julep_lock.path, id=agent_julep_lock.id, last_synced=updated_at.isoformat(timespec="milliseconds") + "Z", revision_hash=agent_yaml_content_hash, ) break if not found_in_lock: console.print( Text( f"Agent {agent_yaml_def_path} not found in lock file.", style="bold yellow", ), ) agent_request_hash = hashlib.sha256( json.dumps(agent_yaml_content).encode(), ).hexdigest() agent_request = CreateAgentRequest(**agent_yaml_content, **agent_julep_yaml) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Creating agent on remote...", start=False, ) progress.start_task(sync_task) created_agent = client.agents.create( **agent_request.model_dump(exclude_unset=True, exclude_none=True), ) console.print( Text( f"Agent {agent_yaml_def_path} created successfully on remote", style="bold blue", ), ) lock_file.agents.append( LockedEntity( path=str(agent_yaml_def_path), id=created_agent.id, last_synced=created_agent.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=agent_request_hash, ), ) # Update tasks for task_julep_yaml in tasks_julep_yaml: task_yaml_def_path: Path = Path(task_julep_yaml.get("definition")) task_yaml_content = yaml.safe_load((source / task_yaml_def_path).read_text()) found_in_lock = False for i in range(len(lock_file.tasks)): task_julep_lock = lock_file.tasks[i] if task_julep_lock.path == str(task_yaml_def_path): found_in_lock = True task_yaml_content_hash = hashlib.sha256( json.dumps(task_yaml_content).encode(), ).hexdigest() task_julep_lock_hash = task_julep_lock.revision_hash if task_yaml_content_hash != task_julep_lock_hash: console.print( Text( f"Task {task_yaml_def_path} has changed, updating on remote...", style="bold yellow", ), ) found_changes = True task_request = CreateTaskRequest(**{ **task_yaml_content, **task_julep_yaml, }) agent_id = get_related_agent_id( task_julep_lock.id, lock_file.relationships.tasks, ) if not agent_id: error_console.print( Text( f"Task {task_yaml_def_path} has no related agent. Please check the lock file and julep.yaml for consistency.", style="bold red", ), ) raise typer.Exit(1) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Updating task on remote...", start=False, ) progress.start_task(sync_task) client.tasks.create_or_update( task_id=task_julep_lock.id, agent_id=agent_id, **task_request.model_dump( exclude_unset=True, exclude_none=True, ), ) console.print( Text( f"Task {task_yaml_def_path} updated successfully", style="bold blue", ), ) updated_at = client.tasks.get(task_julep_lock.id).updated_at lock_file.tasks[i] = LockedEntity( path=task_julep_lock.path, id=task_julep_lock.id, last_synced=updated_at.isoformat(timespec="milliseconds") + "Z", revision_hash=task_yaml_content_hash, ) break if not found_in_lock: console.print( Text( f"Task {task_yaml_def_path} not found in lock file, creating new task...", style="bold yellow", ), ) task_request_hash = hashlib.sha256( json.dumps(task_yaml_content).encode(), ).hexdigest() agent_id = get_agent_id_from_expression( task_julep_yaml.pop("agent_id"), lock_file.agents, ) task_request = CreateTaskRequest(**task_yaml_content, **task_julep_yaml) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task("Creating task on remote...", start=False) progress.start_task(sync_task) created_task = client.tasks.create( agent_id=agent_id, **task_request.model_dump(exclude_unset=True, exclude_none=True), ) lock_file.tasks.append( LockedEntity( path=str(task_yaml_def_path), id=created_task.id, last_synced=created_task.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=task_request_hash, ), ) lock_file.relationships.tasks.append( TaskAgentRelationship(id=created_task.id, agent_id=agent_id), ) console.print( Text( f"Task {task_yaml_def_path} created successfully on remote", style="bold blue", ), ) # Update tools for tool_julep_yaml in tools_julep_yaml: tool_yaml_def_path: Path = Path(tool_julep_yaml.get("definition")) tool_yaml_content = yaml.safe_load((source / tool_yaml_def_path).read_text()) found_in_lock = False for i in range(len(lock_file.tools)): tool_julep_lock = lock_file.tools[i] if tool_julep_lock.path == str(tool_yaml_def_path): found_in_lock = True tool_yaml_content_hash = hashlib.sha256( json.dumps(tool_yaml_content).encode(), ).hexdigest() tool_julep_lock_hash = tool_julep_lock.revision_hash if tool_yaml_content_hash != tool_julep_lock_hash: found_changes = True console.print( Text( f"Tool {tool_yaml_def_path} has changed, updating on remote...", style="bold yellow", ), highlight=True, ) tool_request = CreateToolRequest( **tool_yaml_content, **tool_julep_yaml, ) agent_id = get_related_agent_id( tool_julep_lock.id, lock_file.relationships.tools, ) if not agent_id: error_console.print( Text( f"Tool {tool_yaml_def_path} has no related agent. Please check the lock file and julep.yaml for consistency.", style="bold red", ), highlight=True, ) raise typer.Exit(1) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task( "Updating tool on remote...", start=False, ) progress.start_task(sync_task) client.agents.tools.update( tool_id=tool_julep_lock.id, agent_id=agent_id, **tool_request.model_dump( exclude_unset=True, exclude_none=True, ), ) console.print( Text( f"Tool {tool_yaml_def_path} updated successfully", style="bold blue", ), highlight=True, ) lock_file.tools[i] = LockedEntity( path=tool_julep_lock.path, id=tool_julep_lock.id, last_synced=datetime.now(tz=local_tz).isoformat( timespec="milliseconds", ) + "Z", revision_hash=tool_yaml_content_hash, ) break if not found_in_lock: console.print( Text( f"Tool {tool_yaml_def_path} not found in lock file, creating new tool...", style="bold yellow", ), highlight=True, ) tool_request_hash = hashlib.sha256( json.dumps(tool_yaml_content).encode(), ).hexdigest() agent_id = get_agent_id_from_expression( tool_julep_yaml.pop("agent_id"), lock_file.agents, ) tool_request = CreateToolRequest(**tool_yaml_content, **tool_julep_yaml) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task("Creating tool on remote...", start=False) progress.start_task(sync_task) created_tool = client.agents.tools.create( agent_id=agent_id, **tool_request.model_dump(exclude_unset=True, exclude_none=True), ) lock_file.tools.append( LockedEntity( path=str(tool_yaml_def_path), id=created_tool.id, last_synced=created_tool.created_at.isoformat( timespec="milliseconds", ) + "Z", revision_hash=tool_request_hash, ), ) lock_file.relationships.tools.append( ToolAgentRelationship(id=created_tool.id, agent_id=agent_id), ) console.print( Text( f"Tool {tool_yaml_def_path} created successfully on remote", style="bold blue", ), highlight=True, ) if found_changes: with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: sync_task = progress.add_task("Writing lock file...", start=False) progress.start_task(sync_task) write_lock_file(source, lock_file) console.print( Text("Synchronization complete", style="bold green"), highlight=True, ) return console.print( Text("No changes detected. Everything is up to date.", style="bold green"), ) return # Branch C: Remote-to-local sync (when force_local is not used) lock_file = get_lock_file(source) detected_changes = False with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: sync_task = progress.add_task("Syncing agents...", start=False) progress.start_task(sync_task) remote_agents: list[Agent] = [] agents_update_happened = False for locked_agent in lock_file.agents: try: remote_agent = client.agents.get(locked_agent.id) remote_agents.append(remote_agent) except julep.NotFoundError: error_console.print( Text( f"Agent {locked_agent.id} not found on remote. It will be removed from the lock file.", style="bold red", ), highlight=True, ) console.print( Text( "- If you wish to create it again, please run `julep sync --force-local`", style="bold yellow", ), highlight=True, ) console.print( Text( f"- If this was intentional, please remove it from julep.yaml and delete the corresponding {locked_agent.path} file", style="bold yellow", ), highlight=True, ) lock_file.agents.remove(locked_agent) for i in range(len(lock_file.agents)): remote_agent, local_agent = remote_agents[i], lock_file.agents[i] assert remote_agent.id == local_agent.id last_synced_dt = datetime.fromisoformat( local_agent.last_synced.rstrip("Z"), ).replace(tzinfo=UTC) if remote_agent.updated_at > last_synced_dt: detected_changes = True progress.stop() wants_to_update = force_remote or typer.confirm( f"Agent {local_agent.path} has changed on remote. Do you want to update it locally?", ) progress.start() if wants_to_update: lock_file.agents[i] = update_entity_force_remote( entity=local_agent, remote_entity=remote_agent, source=source, ) agents_update_happened = True if agents_update_happened: console.print( Text("Agents updated successfully", style="bold green"), highlight=True, ) else: console.print(Text("No agents updated", style="bold yellow"), highlight=True) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: sync_task = progress.add_task("Syncing tasks...", start=False) progress.start_task(sync_task) remote_tasks: list[Task] = [] tasks_update_happened = False for locked_task in lock_file.tasks: try: remote_task = client.tasks.get(locked_task.id) remote_tasks.append(remote_task) except julep.NotFoundError: error_console.print( Text( f"Task {locked_task.id} not found on remote. It will be removed from the lock file.", style="bold red", ), highlight=True, ) console.print( Text( "- If you wish to create it again, please run `julep sync --force-local`", style="bold yellow", ), ) console.print( Text( f"- If this was intentional, please remove it from julep.yaml and delete the corresponding {locked_task.path} file", style="bold yellow", ), ) lock_file.tasks.remove(locked_task) raise typer.Exit(1) for i in range(len(lock_file.tasks)): remote_task, local_task = remote_tasks[i], lock_file.tasks[i] assert remote_task.id == local_task.id last_synced_dt = datetime.fromisoformat( local_task.last_synced.rstrip("Z"), ).replace(tzinfo=UTC) if remote_task.updated_at > last_synced_dt: detected_changes = True progress.stop() wants_to_update = force_remote or typer.confirm( f"Task {local_task.path} has changed on remote. Do you want to update it locally?", ) progress.start() if wants_to_update: lock_file.tasks[i] = update_entity_force_remote( entity=local_task, remote_entity=remote_task, source=source, ) tasks_update_happened = True if tasks_update_happened: console.print(Text("Tasks updated successfully", style="bold green")) else: console.print(Text("No tasks updated", style="bold yellow")) if agents_update_happened or tasks_update_happened: with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: write_lock_task = progress.add_task("Writing lock file...", start=False) progress.start_task(write_lock_task) write_lock_file(source, lock_file) console.print(Text("Synchronization complete", style="bold green"), highlight=True) elif detected_changes: console.print( Text("No updates were made. Synchronization complete.", style="bold green"), highlight=True, ) else: console.print( Text("No changes detected. Everything is up to date.", style="bold green"), highlight=True, ) return if watch: console.print( Text("Starting watch mode. Monitoring YAML changes...", style="bold green"), ) # Run initial sync perform_sync_logic() # Debounced event handler to avoid rapid repeat syncs. class DebouncedYamlEventHandler(FileSystemEventHandler): def __init__(self, debounce_interval, callback): super().__init__() self.debounce_interval = debounce_interval self.callback = callback self.timer = None def _trigger_sync(self): self.timer = None with suppress(Exception): self.callback() def on_modified(self, event): if event.src_path.endswith((".yaml", ".yml")): console.print( Text( f"Change detected in {event.src_path}.\nSynchronizing...", style="yellow", ), ) if self.timer: self.timer.cancel() self.timer = threading.Timer(self.debounce_interval, self._trigger_sync) self.timer.start() def on_created(self, event): if event.src_path.endswith((".yaml", ".yml")): console.print( Text( f"New file {event.src_path} detected.\nSynchronizing...", style="yellow", ), ) if self.timer: self.timer.cancel() self.timer = threading.Timer(self.debounce_interval, self._trigger_sync) self.timer.start() observer = Observer() # Set debounce_interval in seconds (e.g., 1.0 second) observer.schedule( DebouncedYamlEventHandler(1.0, perform_sync_logic), str(source), recursive=True, ) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() return perform_sync_logic() return ================================================ FILE: src/cli/src/julep_cli/tasks.py ================================================ import json from pathlib import Path from typing import Annotated import typer import yaml from rich.box import HEAVY_HEAD from rich.progress import Progress, SpinnerColumn, TextColumn from rich.table import Table from rich.text import Text from .app import console, error_console, tasks_app from .utils import DateTimeEncoder, get_julep_client @tasks_app.command() def create( agent_id: Annotated[ str, typer.Option("--agent-id", "-a", help="ID of the agent the task is associated with"), ], definition: Annotated[ str, typer.Option("--definition", "-d", help="Path to the task definition YAML file"), ], name: Annotated[ str | None, typer.Option( "--name", "-n", help="Name of the task (if not provided, uses the definition file name)", ), ] = None, description: Annotated[ str | None, typer.Option( "--description", help="Description of the task (if not provided, uses the definition file name)", ), ] = None, metadata: Annotated[ str | None, typer.Option("--metadata", help="JSON metadata for the task"), ] = None, inherit_tools: Annotated[ bool, typer.Option("--inherit-tools", help="Inherit tools from the associated agent"), ] = False, ): """Create a new task for an agent. If other options are provided alongside the definition file, they will override values in the definition. """ try: metadata_dict = json.loads(metadata) if metadata else {} except json.JSONDecodeError as e: error_console.print(f"Error parsing JSON: {e}", style="bold red", highlight=True) raise typer.Exit(1) client = get_julep_client() task_yaml_contents = yaml.safe_load(Path(definition).read_text()) # Override values from the definition file with the provided options if name: task_yaml_contents["name"] = name if description: task_yaml_contents["description"] = description if metadata: task_yaml_contents["metadata"] = metadata_dict if inherit_tools is True: task_yaml_contents["inherit_tools"] = True elif inherit_tools is False: task_yaml_contents["inherit_tools"] = False with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: try: create_task_task = progress.add_task("Creating task...", start=False) progress.start_task(create_task_task) task = client.tasks.create( agent_id=agent_id, **task_yaml_contents, ) except Exception as e: error_console.print(f"Error creating task: {e}", style="bold red", highlight=True) raise typer.Exit(1) console.print(Text(f"Task created successfully. Task ID: {task.id}", style="bold green")) @tasks_app.command() def update( agent_id: Annotated[ str, typer.Option("--agent-id", "-a", help="ID of the agent the task is associated with"), ], task_id: Annotated[str, typer.Option("--id", help="ID of the task to update")], name: Annotated[ str | None, typer.Option("--name", "-n", help="New name for the task"), ] = None, description: Annotated[ str | None, typer.Option("--description", help="New description for the task"), ] = None, definition: Annotated[ str | None, typer.Option( "--definition", "-d", help="Path to the updated task definition YAML file", ), ] = None, metadata: Annotated[ str | None, typer.Option("--metadata", help="JSON metadata for the task"), ] = None, inherit_tools: Annotated[ bool | None, typer.Option("--inherit-tools", help="Inherit tools from the associated agent"), ] = None, ): """Update an existing task's details""" try: metadata_dict = json.loads(metadata) if metadata else {} except json.JSONDecodeError as e: error_console.print(f"Error parsing JSON: {e}", style="bold red", highlight=True) raise typer.Exit(1) task_yaml_contents = yaml.safe_load(Path(definition).read_text()) if name: task_yaml_contents["name"] = name if description: task_yaml_contents["description"] = description if metadata: task_yaml_contents["metadata"] = metadata_dict if inherit_tools is True: task_yaml_contents["inherit_tools"] = True elif inherit_tools is False: task_yaml_contents["inherit_tools"] = False client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: try: update_task_task = progress.add_task("Updating task...", start=False) progress.start_task(update_task_task) client.tasks.create_or_update( agent_id=agent_id, task_id=task_id, **task_yaml_contents, ) except Exception as e: error_console.print(f"Error updating task: {e}", style="bold red", highlight=True) raise typer.Exit(1) console.print(Text("Task updated successfully.", style="bold green"), highlight=True) @tasks_app.command() def list( agent_id: Annotated[ str | None, typer.Option("--agent-id", "-a", help="Filter tasks by associated agent ID"), ] = None, json_output: Annotated[ bool, typer.Option("--json", "-j", help="Output the list in JSON format"), ] = False, ): """List all tasks or filter based on criteria""" client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: try: list_tasks_task = progress.add_task(description="Fetching tasks", total=None) progress.start_task(list_tasks_task) tasks = client.tasks.list(agent_id=agent_id).items except Exception as e: error_console.print(Text(f"Error fetching tasks: {e}", style="bold red")) raise typer.Exit(1) if json_output: console.print( json.dumps([task.model_dump() for task in tasks], indent=2, cls=DateTimeEncoder), highlight=True, ) return # Table format output tasks_table = Table( title=Text("Available Tasks:", style="bold underline magenta"), box=HEAVY_HEAD, # border between cells show_lines=True, # Adds lines between rows show_header=True, header_style="bold magenta", width=150, ) tasks_table.add_column("Name", style="cyan", width=40) tasks_table.add_column("Description", style="yellow", width=50) tasks_table.add_column("ID", style="green", width=40) for task in tasks: tasks_table.add_row(task.name, task.description, task.id) console.print(tasks_table, highlight=True) ================================================ FILE: src/cli/src/julep_cli/tools.py ================================================ import json from pathlib import Path from typing import Annotated import typer import yaml from rich.box import HEAVY_HEAD from rich.progress import Progress, SpinnerColumn, TextColumn from rich.table import Table from rich.text import Text from .app import console, error_console, tools_app from .utils import get_julep_client @tools_app.command() def create( agent_id: Annotated[ str, typer.Option("--agent-id", "-a", help="ID of the agent the tool is associated with"), ], definition: Annotated[ str, typer.Option("--definition", "-d", help="Path to the tool configuration YAML file"), ], name: Annotated[ str | None, typer.Option( "--name", "-n", help="Name of the tool (if not provided, uses filename from definition)", ), ] = None, ): """Create a new tool for an agent. Requires either a definition file or direct parameters. If both are provided, command-line options override values from the definition file. """ client = get_julep_client() tool_yaml_contents = yaml.safe_load(Path(definition).read_text()) if name: tool_yaml_contents["name"] = name with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), ) as progress: try: create_tool_task = progress.add_task(description="Creating tool", total=None) progress.start_task(create_tool_task) tool = client.agents.tools.create(agent_id=agent_id, **tool_yaml_contents) except Exception as e: error_console.print(f"Error creating tool: {e}", highlight=True) raise typer.Exit(1) console.print( Text(f"Tool created successfully. Tool ID: {tool.id}", style="bold green"), highlight=True, ) @tools_app.command() def update( agent_id: Annotated[ str, typer.Option("--agent-id", "-a", help="ID of the agent the tool is associated with"), ], tool_id: Annotated[str, typer.Option("--id", help="ID of the tool to update")], definition: Annotated[ str | None, typer.Option( "--definition", "-d", help="Path to the updated tool configuration YAML file", ), ] = None, name: Annotated[ str | None, typer.Option("--name", "-n", help="New name for the tool"), ] = None, ): """Update an existing tool's details. Updates can be made using either a definition file or direct parameters. If both are provided, command-line options override values from the definition file. """ client = get_julep_client() tool_yaml_contents = yaml.safe_load(Path(definition).read_text()) if definition else {} if name: tool_yaml_contents["name"] = name if not tool_yaml_contents: error_console.print( "Error: No tool name or definition provided", style="bold red", highlight=True, ) raise typer.Exit(1) with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: update_tool_task = progress.add_task("Updating tool...", start=False) progress.start_task(update_tool_task) client.agents.tools.update(agent_id=agent_id, tool_id=tool_id, **tool_yaml_contents) except Exception as e: error_console.print(f"Error updating tool: {e}", style="bold red", highlight=True) raise typer.Exit(1) console.print(Text("Tool updated successfully.", style="bold green"), highlight=True) @tools_app.command() def delete( agent_id: Annotated[ str, typer.Option("--agent-id", "-a", help="ID of the agent the tool is associated with"), ], tool_id: Annotated[str, typer.Option("--id", help="ID of the tool to delete")], force: Annotated[ bool, typer.Option( "--force", "-f", help="Force the deletion without prompting for confirmation", ), ] = False, ): """Delete an existing tool. By default, prompts for confirmation unless --force is specified. """ if not force: confirm = typer.confirm(f"Are you sure you want to delete tool '{tool_id}'?") if not confirm: typer.echo("Operation cancelled") return client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True, console=console, ) as progress: try: delete_tool_task = progress.add_task("Deleting tool...", start=False) progress.start_task(delete_tool_task) client.agents.tools.delete(agent_id=agent_id, tool_id=tool_id) except Exception as e: error_console.print(f"Error deleting tool: {e}", style="bold red", highlight=True) raise typer.Exit(1) console.print(Text("Tool deleted successfully.", style="bold green"), highlight=True) @tools_app.command() def list( agent_id: Annotated[ str | None, typer.Option("--agent-id", "-a", help="Filter tools by associated agent ID"), ] = None, json_output: Annotated[ bool, typer.Option("--json", help="Output the list in JSON format"), ] = False, ): """List all tools or filter based on criteria. Either --agent-id or --task-id must be provided to filter the tools list. """ if not agent_id: typer.echo("Error: --agent-id must be provided") raise typer.Exit(1) client = get_julep_client() with Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, ) as progress: try: list_tools_task = progress.add_task("Listing tools...", start=False) progress.start_task(list_tools_task) tools = client.agents.tools.list(agent_id=agent_id) except Exception as e: error_console.print(f"Error listing tools: {e}", style="bold red", highlight=True) raise typer.Exit(1) if json_output: typer.echo(json.dumps(tools, indent=2)) return tools_table = Table( title=Text("Available Tools:", style="bold underline magenta"), box=HEAVY_HEAD, # border between cells show_lines=True, # Adds lines between rows show_header=True, header_style="bold magenta", width=130, ) tools_table.add_column("ID", style="green") tools_table.add_column("Name", style="cyan") tools_table.add_column("Type", style="yellow") tools_table.add_column("Description", style="yellow") for tool in tools: tools_table.add_row(tool.id, tool.name, tool.type, tool.description) console.print(tools_table, highlight=True) ================================================ FILE: src/cli/src/julep_cli/utils.py ================================================ import hashlib import json import os import sqlite3 from collections.abc import Callable from datetime import datetime from pathlib import Path from typing import Any import typer import yaml from julep import Julep from julep.types import Agent, Task from rich.text import Text from .app import console, error_console from .models import ( CreateAgentRequest, LockedEntity, LockFileContents, TaskAgentRelationship, ToolAgentRelationship, ) CONFIG_DIR = Path.home() / ".config" / "julep" CONFIG_FILE_NAME = "config.yml" class DateTimeEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.isoformat() return super().default(obj) def get_config(config_dir: Path = CONFIG_DIR) -> dict: """Get configuration from config file""" if not (config_dir / CONFIG_FILE_NAME).exists(): return {} with open(config_dir / CONFIG_FILE_NAME) as f: return yaml.safe_load(f) or {} def get_julep_yaml(source: Path) -> dict: """Get the julep.yaml file from the source directory""" if not (source / "julep.yaml").exists(): typer.echo("Error: julep.yaml not found in source directory") raise typer.Exit(1) with open(source / "julep.yaml") as f: return yaml.safe_load(f) def write_julep_yaml(source: Path, julep_yaml_contents: dict): """Write the julep.yaml file""" with open(source / "julep.yaml", "w") as f: yaml.dump(julep_yaml_contents, f) def save_config(config: dict, config_dir: Path = CONFIG_DIR): """Save configuration to config file""" config_dir.mkdir(parents=True, exist_ok=True) with open(config_dir / CONFIG_FILE_NAME, "w") as f: yaml.dump(config, f) def get_julep_client(*, api_key: str | None = None, environment: str | None = None) -> Julep: """Get a Julep client""" # Initialize the Julep client api_key = api_key or get_config().get("api_key") or os.getenv("JULEP_API_KEY") if not api_key: error_console.print( Text( "Error: JULEP_API_KEY env var not set.", style="bold red", ), ) console.print( Text( "To set the API key, run `julep auth`", ), ) raise typer.Exit(1) # Get environment from config.yml or default to production environment = ( environment or get_config().get("environment") or os.getenv("JULEP_ENVIRONMENT") ) if not environment: console.print( Text( "JULEP_ENVIRONMENT env var not set. Defaulting to production.", ), ) return Julep(api_key=api_key, environment=environment or "production", max_retries=0) def create_lock_file(source: Path): lock_file = source / "julep-lock.json" if not lock_file.exists(): lock_file.touch() return lock_file typer.echo("julep-lock.json already exists in source directory") raise typer.Exit(1) def get_lock_file(project_dir: Path = Path.cwd()) -> LockFileContents: """ Get the lock file from the project directory. If no project directory is provided, it will default to the current working directory. """ lock_file = project_dir / "julep-lock.json" if not lock_file.exists(): typer.echo("Error: julep-lock.json not found in source directory") raise typer.Exit(1) lock_file_contents = lock_file.read_text() return LockFileContents(**json.loads(lock_file_contents)) def fetch_all_remote_agents(client: Julep) -> list[CreateAgentRequest]: """Fetch all agents from the Julep platform""" i = 0 agents: list[CreateAgentRequest] = [] while True: new_agents = client.agents.list(limit=100, offset=i).items if len(new_agents) == 0: break agents.extend( CreateAgentRequest(**agent.model_dump(exclude_none=True, exclude_unset=True)) for agent in new_agents ) i += 100 return agents def fetch_all_local_agents(source: Path) -> list[tuple[CreateAgentRequest, Path]]: """Fetch all agents from the local source directory based on the julep.yaml file""" local_agents: list[tuple[CreateAgentRequest, Path]] = [] julep_yaml_content = get_julep_yaml(source) agents = julep_yaml_content.get("agents", []) for agent in agents: agent_path = source / agent.pop("definition") local_agents.append(( CreateAgentRequest(**yaml.safe_load(agent_path.read_text()), **agent), agent_path, )) return local_agents def write_lock_file(project_dir: Path, content: LockFileContents): lock_file_path = project_dir / "julep-lock.json" lock_file_contents = content.model_dump_json(indent=2) lock_file_path.write_text(lock_file_contents) def get_entity_from_lock_file( type: str, id: str, project_dir: Path = Path.cwd(), ) -> LockedEntity | None: """ Get the contents of lock file """ lock_file = get_lock_file(project_dir) # Adding an s to match the plural form of the key in lock file (agent -> agents) entities: list[LockedEntity] = getattr(lock_file, type + "s", []) matched = [entity for entity in entities if entity.id == id] if len(matched) > 1: typer.echo(f"Error: Multiple {type}s with id '{id}' found in lock file") raise typer.Exit(1) if not matched: return None return matched[0] def update_existing_entity_in_lock_file( type: str, new_entity: LockedEntity, project_dir: Path = Path.cwd(), ): found = False lock_file = get_lock_file(project_dir) entities: list[LockedEntity] = getattr(lock_file, type + "s", []) for i in range(len(entities)): if entities[i].id == new_entity.id: entities[i] = new_entity found = True break if not found: # typer.echo( # f"Error: Cannot update{type} with id '{new_entity.get('id')}' because it was not found in lock file", # err=True, # ) error_console.print( Text( f"Error: Cannot update{type} with id '{new_entity.get('id')}' because it was not found in lock file", style="bold red", ), highlight=True, ) raise typer.Exit(1) setattr(lock_file, type + "s", entities) write_lock_file(project_dir, lock_file) def add_entity_to_lock_file( type: str, new_entity: LockedEntity, project_dir: Path = Path.cwd(), ): """ Add a new entity to the lock file """ lock_file = get_lock_file(project_dir) entities: list[LockedEntity] = getattr(lock_file, type + "s", []) entities.append(new_entity) setattr(lock_file, type + "s", entities) write_lock_file(project_dir, lock_file) def update_yaml_for_existing_entity(path: Path, data: dict): """Update the yaml file for an existing entity""" with open(path, "w") as f: yaml.dump(data, f) def add_agent_to_julep_yaml(source: Path, agent_data: dict): """Add a new entity to the julep.yaml file""" julep_yaml_contents = get_julep_yaml(source) julep_yaml_contents["agents"].append(agent_data) write_julep_yaml(source, julep_yaml_contents) def get_related_agent_id( id: str, relationships_list: list[TaskAgentRelationship] | list[ToolAgentRelationship], ): for relationship in relationships_list: if relationship.id == id: return relationship.agent_id return None def create_locked_entity( relative_path: Path, source: Path, id: str, last_synced: datetime, content_to_hash: dict, ) -> LockedEntity: return LockedEntity( path=str(relative_path.relative_to(source)), id=id, last_synced=last_synced.isoformat(timespec="microseconds") + "Z", revision_hash=hashlib.sha256(json.dumps(content_to_hash).encode()).hexdigest(), ) def get_agent_id_from_expression(expression: str, locked_agents: list[LockedEntity]) -> str: """ Get the agent ID from an expression in julep.yaml Example: if `expression` is `{agents[0].id}` then the function will return the id of the first agent in the lock file """ if not locked_agents: msg = "No locked agents passed to get_agent_id_from_expression" raise ValueError(msg) return eval(f'f"{expression}"', {"agents": locked_agents}) def update_entity_force_remote( entity: LockedEntity, remote_entity: Agent | Task, source: Path, ) -> LockedEntity: """ Updates a local entity's yaml file with the remote entity's data and returns an updated `LockedEntity` with synced timestamp and hash """ local_agent_yaml_path: Path = source / entity.path entity_new_yaml_content = remote_entity.model_dump( exclude={"id", "created_at", "updated_at"}, exclude_none=True, exclude_unset=True, ) update_yaml_for_existing_entity(local_agent_yaml_path, entity_new_yaml_content) return create_locked_entity( source=source, relative_path=local_agent_yaml_path, id=remote_entity.id, last_synced=remote_entity.updated_at, content_to_hash=entity_new_yaml_content, ) # NEW DATABASE FUNCTIONS & DECORATOR FOR PERSISTING ATTRIBUTES # Path to the SQLite database file in the Julep config directory STATE_DB_PATH = CONFIG_DIR / "julep_state.db" def get_state_db_connection() -> sqlite3.Connection: """ Get a SQLite connection to the state database. This creates the CONFIG_DIR if it doesn't exist. """ CONFIG_DIR.mkdir(parents=True, exist_ok=True) return sqlite3.connect(str(STATE_DB_PATH)) def init_state_db(): """ Initialize the state database with the 'attributes' table if it does not exist. The table stores key-value pairs, with the key as a unique identifier. """ conn = get_state_db_connection() with conn: conn.execute(""" CREATE TABLE IF NOT EXISTS attributes ( key TEXT PRIMARY KEY, value TEXT ) """) conn.close() def persist_attribute(key: str, extractor: Callable[[Any], Any] | None = None): """ A decorator that persists an attribute from a function's return value into a SQLite database located in the ~/.config/julep/ directory. Parameters: key (str): The name of the attribute to store (e.g., "execution_id"). extractor (Callable[[Any], Any], optional): A function that extracts the value from the function's return value. If not provided, the decorator will attempt to extract: - If the return value is a dict and contains 'key', it uses that. - Otherwise, if the return value has an attribute with the name 'key', it uses that. Usage Example: @persist_attribute("execution_id", extractor=lambda execution: execution.id) def create_execution(client, task_id, input_data): return client.executions.create(task_id=task_id, input=input_data) The attribute is stored as a string in the 'attributes' table. """ def decorator(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) value = None if extractor is not None: value = extractor(result) else: # Attempt default extraction if isinstance(result, dict) and key in result: value = result[key] elif hasattr(result, key): value = getattr(result, key) if value is not None: init_state_db() # Ensure the database and table exist conn = get_state_db_connection() with conn: conn.execute( "INSERT OR REPLACE INTO attributes (key, value) VALUES (?, ?)", (key, str(value)), ) conn.close() return result return wrapper return decorator # NEW FUNCTION TO FETCH/UPDATE ATTRIBUTE VALUES FROM/TO DATABASE def manage_db_attribute(key: str, current_value: str | None = None) -> str: """ If current_value is None, fetch the attribute from the SQLite state database. If a value is provided, update the database with that value. The state database file will only be created/initialized when a value is provided for update. Returns the fetched or provided value. """ if current_value is None: # Fetch scenario: DO NOT create the database if it doesn't exist. if not STATE_DB_PATH.exists(): error_console.print( Text( f"Error: No saved value for '{key}' found because the state database does not exist. Please provide one.", style="bold red", ), highlight=True, ) raise typer.Exit(1) conn = get_state_db_connection() cursor = conn.cursor() try: cursor.execute("SELECT value FROM attributes WHERE key=?", (key,)) except sqlite3.OperationalError as e: error_console.print( Text( f"Error: The state database is not properly initialized: {e}", style="bold red", ), highlight=True, ) conn.close() raise typer.Exit(1) row = cursor.fetchone() if row: value = row[0] else: error_console.print( Text( f"Error: No saved value for '{key}' found in the database, please provide one.", style="bold red", ), highlight=True, ) conn.close() raise typer.Exit(1) conn.close() return value # Update scenario: create the DB and table if they don't already exist, then update. init_state_db() conn = get_state_db_connection() cursor = conn.cursor() cursor.execute( "INSERT OR REPLACE INTO attributes (key, value) VALUES (?, ?)", (key, current_value), ) conn.commit() conn.close() return current_value ================================================ FILE: src/cli/src/julep_cli/wrapper.py ================================================ import inspect import typing from collections.abc import Callable from enum import Enum, StrEnum from typing import Annotated, Any, Protocol import questionary import typer from click.exceptions import MissingParameter, UsageError from stringcase import titlecase from typer import Typer class ExceptionWithContext(Protocol): __context__: UsageError def get_command_signature(error: UsageError) -> inspect.Signature: """Extracts the function signature from the callback of a UsageError's command.""" return inspect.signature(error.cmd.callback) def bind_arguments(signature: inspect.Signature, params: dict) -> inspect.BoundArguments: """Binds provided parameters to the given signature and applies default values.""" bound = signature.bind_partial(**params) bound.apply_defaults() return bound def make_validator(func: Callable[[Any], Any]) -> Callable[[Any], bool]: def validate(value: Any) -> bool: try: func(value) return True except Exception: return False return validate def build_prompt( parameter: typer.Argument, meta: tuple[typing.Any, ...], expected_type: type, ) -> questionary.Question: """Prepares a questionary prompt based on the parameter metadata and expected type. Args: parameter: Typer argument parameter. meta: Tuple of type specifications and additional metadata. expected_type: Expected type for the parameter. Returns: A questionary.Question object for prompting the user. """ # Section: Build prompt header prompt_message = titlecase(parameter.human_readable_name.lower()) # Section: Append type indicator to prompt message if not issubclass(expected_type, str | StrEnum | bool): prompt_message += f" [{expected_type.__name__}]" # Section: Extract additional keyword arguments from metadata kwargs = meta[2] if meta and len(meta) == 3 and isinstance(meta[2], dict) else {} kwargs["default"] = kwargs.get("default") or parameter.default question_type = questionary.text # Section: Add instruction based on parameter help kwargs["instruction"] = kwargs.get("instruction") or ( f"({parameter.help})" if parameter.help else "" ) # Section: Handle multiline input if kwargs.get("multiline", False): kwargs["instruction"] += "\n(Press Alt+Enter or Esc then Enter to submit)\n" # Section: Configure prompt for Enum types if issubclass(expected_type, Enum): question_type = questionary.select kwargs["choices"] = choices = [e.value for e in expected_type] kwargs["default"] = kwargs["default"] or choices[0] if len(choices) >= 6: question_type = questionary.autocomplete prompt_message += f" [{len(choices)} options]" kwargs["complete_style"] = "MULTI_COLUMN" del kwargs["instruction"] # Section: Use confirmation prompt for booleans elif expected_type is bool: question_type = questionary.confirm kwargs["default"] = kwargs["default"] or False prompt_message += " (Y/n)" if kwargs["default"] else " (y/N)" else: # Section: Set default validation if not provided kwargs["validate"] = kwargs.get("validate") or make_validator(expected_type) # Section: Finalize instruction formatting if kwargs.get("instruction"): kwargs["instruction"] += " " if kwargs["default"] is None: del kwargs["default"] return question_type(prompt_message, **kwargs) def prompt_for_missing_parameter(error: UsageError) -> None: """Prompts for missing parameters and re-invokes the command after receiving input.""" # Section: Unwrap nested error if applicable if not isinstance(error, MissingParameter) and hasattr(error, "__context__"): error = getattr(error, "__context__") # Section: Reraise if error is not a MissingParameter if not isinstance(error, MissingParameter): raise error # Section: Retrieve command signature and context signature = get_command_signature(error) ctx = error.ctx command = error.cmd # Section: Extract missing parameter details missing_param = error.param parameter_details = signature.parameters[missing_param.name] param_annotation = parameter_details.annotation type_args = typing.get_args(param_annotation) # Section: Determine expected type from annotation if len(type_args) >= 2 and isinstance(type_args[0], type): [expected_type, *_] = type_args else: expected_type = param_annotation or str # Section: Build and display prompt for missing parameter prompt = build_prompt(missing_param, type_args, expected_type) user_input = prompt.ask(patch_stdout=True) # Section: Bind user input to parameters bound = bind_arguments(signature, ctx.params | {missing_param.name: user_input}) cmd_args = [] # Section: Construct command arguments from bound parameters for param_item in ctx.command.params: if param_item.name not in bound.arguments: continue # Retrieve option flag [option_flag, *_] = param_item.to_info_dict()["opts"] is_option = isinstance(param_item, typer.core.TyperOption) value = bound.arguments[param_item.name] param_type = bound.signature.parameters[param_item.name].annotation param_type = getattr(param_type, "__origin__", param_type) # Section: Process option parameters if is_option: if param_type is bool: prefix = "no-" if not value else "" cmd_args.append(f"--{prefix}{option_flag[2:]}") else: cmd_args.append(option_flag) cmd_args.append(value) else: cmd_args.append(value) # Section: Reinvoke the command with updated arguments try: return command.main(map(str, cmd_args), standalone_mode=False) except BaseException as new_error: return prompt_for_missing_parameter(new_error) class WrappedTyper(Typer): """Custom Typer subclass that handles missing parameters via interactive prompts.""" def __call__(self, *args, **kwargs): """Invokes the Typer app and handles missing parameters gracefully.""" # Section: Attempt to run the Typer app and catch errors try: return super().__call__(*args, **{**kwargs, "standalone_mode": False}) except BaseException as error: return prompt_for_missing_parameter(error) def command(self, *args, **kwargs): """Decorator for registering commands with the Typer application.""" return super().command(*args, **kwargs) if __name__ == "__main__": # Example usage of WrappedTyper with an example command. from enum import StrEnum # Define an example enumeration for neural network types class NeuralNetwork(StrEnum): simple = "simple" conv = "conv" lstm = "lstm" b_simple = "b_simple" b_conv = "b_conv" b_lstm = "b_lstm" c_simple = "c_simple" c_conv = "c_conv" c_lstm = "c_lstm" app = WrappedTyper() @app.command() def hello( name: str, age: int, address: Annotated[ str, typer.Argument(help="The address to use"), {"multiline": True}, ], network: Annotated[ NeuralNetwork, typer.Argument(help="The neural network to use"), ], wait: Annotated[ bool, typer.Option(help="Wait for the task to complete"), {"default": True}, ], ): """Example command that prints provided input arguments.""" # Section: Print provided input arguments print(name) print(age) print(address) print(network) print(wait) app() ================================================ FILE: src/cli/tests/__init__.py ================================================ ================================================ FILE: src/cli/tests/test_auth.py ================================================ from pathlib import Path from unittest.mock import patch from julep_cli import app from typer.testing import CliRunner def create_runner(env: dict | None = None): env = env or {} return CliRunner(env=env) mock_config_dir = Path("/tmp/mock/.config/julep") def test_auth_command_should_save_api_key_when_provided_via_command_line(): test_api_key = "test-api-key-123" runner = create_runner() with ( patch("julep_cli.auth.save_config") as mock_save, patch("julep_cli.auth.get_julep_client") as mock_client, patch("julep_cli.auth.get_config") as mock_get_config, ): # Mock config to return empty dict mock_get_config.return_value = {} # Mock the client to simulate successful authentication mock_client.return_value.agents.list.return_value = [] result = runner.invoke( app, ["auth", "--api-key", test_api_key, "--environment", "production", "--no-verify"], ) assert result.exit_code == 0 assert "Successfully authenticated with production environment!" in result.stdout mock_save.assert_called_once_with({ "environment": "production", "api_key": test_api_key, }) def test_auth_command_should_use_api_key_from_environment_if_not_provided(): test_api_key = "test-env-api-key-456" runner = create_runner({"JULEP_API_KEY": test_api_key}) with ( patch("julep_cli.auth.save_config") as mock_save, patch("julep_cli.auth.get_julep_client") as mock_client, patch("julep_cli.auth.get_config") as mock_get_config, ): # Mock config to return empty dict mock_get_config.return_value = {} # Mock the client to simulate successful authentication mock_client.return_value.agents.list.return_value = [] result = runner.invoke(app, ["auth", "--environment", "production", "--no-verify"]) assert result.exit_code == 0 assert "Successfully authenticated with production environment!" in result.stdout mock_save.assert_called_once_with({ "environment": "production", "api_key": test_api_key, }) def test_auth_command_should_fail_when_no_api_key_is_provided(): runner = create_runner() with patch("julep_cli.auth.get_config") as mock_get_config: # Mock config to return empty dict mock_get_config.return_value = {} result = runner.invoke(app, ["auth", "--environment", "production"]) # Typer exits with code 2 for missing required options when using the CLI runner assert result.exit_code == 2 assert "Error" in result.stderr or "Missing option" in result.stderr def test_auth_command_with_environment_dev(): test_api_key = "test-dev-key-789" runner = create_runner() with ( patch("julep_cli.auth.save_config") as mock_save, patch("julep_cli.auth.get_julep_client") as mock_client, patch("julep_cli.auth.get_config") as mock_get_config, ): # Mock config to return empty dict mock_get_config.return_value = {} # Mock the client to simulate successful authentication mock_client.return_value.agents.list.return_value = [] result = runner.invoke( app, ["auth", "--api-key", test_api_key, "--environment", "dev", "--no-verify"] ) assert result.exit_code == 0 assert "Successfully authenticated with dev environment!" in result.stdout mock_save.assert_called_once_with({"environment": "dev", "api_key": test_api_key}) def test_auth_command_with_verification(): test_api_key = "test-verify-key-101" runner = create_runner() with ( patch("julep_cli.auth.save_config") as mock_save, patch("julep_cli.auth.get_julep_client") as mock_client, patch("julep_cli.auth.get_config") as mock_get_config, ): # Mock config to return empty dict mock_get_config.return_value = {} # Mock the client to simulate successful authentication mock_client.return_value.agents.list.return_value = [] result = runner.invoke( app, ["auth", "--api-key", test_api_key, "--environment", "production"] ) assert result.exit_code == 0 assert "Successfully authenticated with production environment!" in result.stdout assert "Verifying API key" in result.stdout # Progress spinner text mock_save.assert_called_once_with({ "environment": "production", "api_key": test_api_key, }) def test_auth_command_verification_fails(): # Use a valid JWT format for testing test_api_key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" runner = create_runner() with ( patch("julep_cli.auth.get_julep_client") as mock_client, patch("julep_cli.auth.get_config") as mock_get_config, ): # Mock config to return empty dict mock_get_config.return_value = {} # Mock the client to simulate failed authentication mock_client.return_value.agents.list.side_effect = Exception("Invalid API key") result = runner.invoke( app, ["auth", "--api-key", test_api_key, "--environment", "production"] ) assert result.exit_code == 1 assert "Error verifying API key" in result.stderr def test_auth_command_invalid_jwt_format(): invalid_api_key = "not-a-jwt" runner = create_runner() with patch("julep_cli.auth.get_config") as mock_get_config: # Mock config to return empty dict mock_get_config.return_value = {} # Since the validation is done inside the command through the wrapper's prompting, # and 'not-a-jwt' is not a valid JWT, the command will fail validation result = runner.invoke( app, ["auth", "--api-key", invalid_api_key, "--environment", "production"] ) # The JWT validation happens during verification assert result.exit_code == 1 assert ( "Error verifying API key" in result.stderr and "invalid token format" in result.stderr ) ================================================ FILE: src/feature-flags/docker-compose.yml ================================================ version: '3.8' services: unleash-db: image: postgres:16 profiles: ["feature-flags"] environment: POSTGRES_DB: ${UNLEASH_DB_NAME:-unleash} POSTGRES_USER: ${UNLEASH_DB_USER:-unleash} POSTGRES_PASSWORD: ${UNLEASH_DB_PASSWORD:-unleash_password} volumes: - unleash_db_data:/var/lib/postgresql/data ports: # Host port 5433 maps to container port 5432 - "${UNLEASH_DB_PORT:-5433}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${UNLEASH_DB_USER:-unleash}"] interval: 10s timeout: 5s retries: 5 unleash: image: unleashorg/unleash-server:latest profiles: ["feature-flags"] environment: DATABASE_URL: postgres://${UNLEASH_DB_USER:-unleash}:${UNLEASH_DB_PASSWORD:-unleash_password}@unleash-db:5432/${UNLEASH_DB_NAME:-unleash} DATABASE_SSL: "false" LOG_LEVEL: ${UNLEASH_LOG_LEVEL:-info} INIT_FRONTEND_API_TOKENS: ${UNLEASH_FRONTEND_TOKEN:-default:development.unleash-insecure-frontend-api-token} INIT_CLIENT_API_TOKENS: ${UNLEASH_API_TOKEN:-default:development.unleash-insecure-api-token} INIT_ADMIN_API_TOKENS: ${UNLEASH_ADMIN_TOKEN:-*:*.unleash-insecure-admin-api-token} UNLEASH_URL: ${UNLEASH_URL:-http://localhost:4242} AUTH_TYPE: ${UNLEASH_AUTH_TYPE:-open-source} AUTH_ENABLE_API_TOKEN: "true" ports: # Bind only to localhost - not publicly accessible - "${UNLEASH_PORT:-4242}:4242" depends_on: unleash-db: condition: service_healthy healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4242/health"] interval: 30s timeout: 10s retries: 5 start_period: 30s volumes: unleash_db_data: external: true ================================================ FILE: src/feature-flags/env.example ================================================ # Julep Feature Flags Service Configuration # Copy this file to .env and customize the values # Unleash Database Configuration UNLEASH_DB_NAME=unleash UNLEASH_DB_USER=unleash UNLEASH_DB_PASSWORD=unleash_password UNLEASH_DB_PORT=5433 # Unleash Server Configuration UNLEASH_PORT=4242 UNLEASH_URL=http://localhost:4242/api UNLEASH_LOG_LEVEL=info # API Tokens (Change these in production!) UNLEASH_API_TOKEN=default:development.unleash-insecure-api-token UNLEASH_FRONTEND_TOKEN=default:development.unleash-insecure-frontend-api-token # Admin Security (Change these in production!) UNLEASH_ADMIN_TOKEN=*:*.unleash-insecure-admin-api-token UNLEASH_AUTH_TYPE=open-source # For agents-api integration UNLEASH_APP_NAME=agents-api # Environment for feature flag context DEPLOYMENT_ENV=development ================================================ FILE: src/gateway/AGENTS.md ================================================ # AGENTS.md - gateway This directory contains the API gateway service using Traefik for routing and middleware. Key Uses - Bash commands: - cd gateway - docker-compose up gateway - Core files: - `docker-compose.yml` for container deployment - `traefik.yml.template` for Traefik configuration template - `entrypoint.sh` for container initialization - `Dockerfile` for custom Traefik image - Configuration guidelines: - Set `JWT_SHARED_KEY` for authentication - Configure `AGENTS_API_URL` for backend routing - Set SSL/TLS environment variables for HTTPS - Testing instructions: - Health check: `curl http://localhost:80/api/healthz` - API docs: `curl http://localhost:80/api/docs` - Repository etiquette: - Don't commit JWT keys or certificates to version control - Developer environment: - Requires Docker and Docker Compose - LetsEncrypt volume for SSL certificates - Unexpected behaviors: - Routes have priority ordering for path matching - JWT plugin requires custom Traefik build # Gateway Service ## Overview The gateway service provides a unified entry point for the Julep platform using Traefik as a reverse proxy. It handles routing, authentication, CORS, SSL termination, and load balancing for all platform services. ## Architecture - **Proxy Engine**: Traefik reverse proxy with dynamic configuration - **Authentication**: JWT-based authentication middleware - **SSL/TLS**: Let's Encrypt automatic certificate management - **Load Balancing**: Service discovery and health checking ## Key Components ### Traefik Configuration - **Routers**: Route definition and rule matching - **Middlewares**: Request/response processing pipeline - **Services**: Backend service configuration - **Entrypoints**: Port and protocol listeners ### Routing Rules - `/api/*` → agents-api service (with JWT auth) - `/api/temporal/*` → agents-api internal endpoints - `/api/docs` → API documentation (no auth) - `/api/healthz` → Health check endpoint - `/tasks-ui/*` → Temporal UI service - `/v1/graphql` → Hasura GraphQL endpoint - `/` → Redirect to API documentation ### Middleware Chain 1. **CORS Headers**: Cross-origin resource sharing 2. **JWT Authentication**: Token validation and user identification 3. **Header Injection**: API key and developer headers 4. **Path Stripping**: Clean URLs for backend services ## Environment Variables - `JWT_SHARED_KEY`: Shared secret for JWT validation (required) - `AGENTS_API_URL`: Backend API service URL (default: http://agents-api-multi-tenant:8080) - `TEMPORAL_UI_PUBLIC_URL`: Temporal UI service URL - `HASURA_URL`: Hasura GraphQL service URL - `AGENTS_API_KEY`: API key for backend authentication - `TRAEFIK_LOG_LEVEL`: Logging verbosity (default: INFO) - `GATEWAY_PORT`: Gateway listening port (default: 80) ## Security Features - JWT token validation with HS512 algorithm - API key injection for backend services - CORS policy enforcement - SSL/TLS termination with automatic certificates - Request rate limiting and health checks ## Service Discovery - **Agents API**: Main platform API with authentication - **Temporal UI**: Workflow monitoring interface - **Hasura**: GraphQL API for data access - **Internal APIs**: System-level endpoints ## SSL/TLS Configuration - Let's Encrypt ACME challenge for automatic certificates - Certificate storage in persistent volume - HTTPS redirect and HSTS headers - Configurable domains and certificate resolvers ## Monitoring & Observability - Health check endpoints on all routes - Access logs with request/response details - Metrics endpoint (localhost:8082) for Prometheus - Service health checking and automatic failover ## Development Features - File watching for configuration reloads - Debug logging for troubleshooting - Local development without SSL - Hot reload for template changes ## Custom Plugins - **JWT Plugin**: Custom authentication middleware - **Header Manipulation**: Dynamic header injection - **Path Rewriting**: URL transformation for backends ## Integration Points - Frontend applications connect via gateway - Backend services receive authenticated requests - Monitoring systems scrape metrics - SSL certificates managed automatically ================================================ FILE: src/gateway/Dockerfile ================================================ # syntax=docker/dockerfile:1 # check=error=true FROM alpine/git ARG PLUGIN_MODULE=github.com/julep-ai/traefik-jwt-plugin ARG PLUGIN_GIT_REPO=https://github.com/julep-ai/traefik-jwt-plugin.git ARG PLUGIN_GIT_BRANCH=main RUN git clone ${PLUGIN_GIT_REPO} /plugins-local/src/${PLUGIN_MODULE} \ --depth 1 --single-branch --branch ${PLUGIN_GIT_BRANCH} ################# # TODO: Upgrade to Traefik v3 FROM traefik:v2.11 ENV GATEWAY_PORT=80 ENV AGENTS_API_URL="" # Expected environment variables: # JWT_SHARED_KEY="" # AGENTS_API_KEY="" # AGENTS_API_KEY_HEADER_NAME="Authorization" COPY --from=0 /plugins-local /plugins-local RUN apk add gettext RUN mkdir -p /etc/traefik COPY traefik.yml.template /etc/traefik/ COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ================================================ FILE: src/gateway/docker-compose.yml ================================================ name: julep-gateway services: gateway: image: julepai/gateway:${TAG:-dev} environment: - GATEWAY_PORT=80 - JWT_SHARED_KEY=${JWT_SHARED_KEY} - AGENTS_API_URL=${AGENTS_API_URL:-http://agents-api-multi-tenant:8080} - TEMPORAL_UI_PUBLIC_URL=${TEMPORAL_UI_PUBLIC_URL:-http://temporal-ui-public:8080} - HASURA_URL=${HASURA_URL:-http://hasura:8080} - AGENTS_API_KEY=${AGENTS_API_KEY} - AGENTS_API_KEY_HEADER_NAME=${AGENTS_API_KEY_HEADER_NAME:-Authorization} - TRAEFIK_LOG_LEVEL=${TRAEFIK_LOG_LEVEL:-INFO} - ANALYTICS_URL=${ANALYTICS_URL:-http://analytics:3000} container_name: gateway profiles: - multi-tenant depends_on: agents-api-multi-tenant: condition: service_started build: context: . dockerfile: Dockerfile ports: # - 443:443 - 80:80 restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: memory: 1G command: # - --entrypoints.web.address=:443 # - --entrypoints.web.http.tls.domains[0].main=dev.julep.ai # - --entrypoints.web.http.tls.certResolver=letsencrypt # - --certificatesresolvers.letsencrypt.acme.email=developers@julep.ai # - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json # - --certificatesresolvers.letsencrypt.acme.tlschallenge=true volumes: - ./letsencrypt:/letsencrypt develop: watch: - action: sync+restart path: ./entrypoint.sh target: /entrypoint.sh - action: rebuild path: ./traefik.yml.template target: /etc/traefik/traefik.yml.template - action: rebuild path: Dockerfile ================================================ FILE: src/gateway/entrypoint.sh ================================================ #!/bin/sh # Check the environment variables AGENTS_API_URL=${AGENTS_API_URL:-http://agents-api:8080} AGENTS_API_KEY_HEADER_NAME=${AGENTS_API_KEY_HEADER_NAME:-Authorization} GATEWAY_PORT=${GATEWAY_PORT:-80} TEMPORAL_UI_PUBLIC_URL=${TEMPORAL_UI_PUBLIC_URL:-http://temporal-ui-public:8080} HASURA_URL=${HASURA_URL:-http://hasura:8080} for var_name in JWT_SHARED_KEY AGENTS_API_KEY do if [ -z "`eval echo \\\$$var_name`" ]; then echo "Error: Environment variable '$var_name' is not set." exit 1 fi done # Generate the Traefik configuration file envsubst < /etc/traefik/traefik.yml.template > /etc/traefik/traefik.yml # Forward all arguments to the traefik binary exec traefik "$@" ================================================ FILE: src/gateway/letsencrypt/.gitignore ================================================ *.json ================================================ FILE: src/gateway/letsencrypt/.gitkeep ================================================ ================================================ FILE: src/gateway/traefik.yml.template ================================================ providers: file: filename: "/etc/traefik/traefik.yml" enable: true entryPoints: web: address: ":$GATEWAY_PORT" # Should only be available via localhost metrics: address: 127.0.0.1:8082 ping: true accesslog: true log: level: $TRAEFIK_LOG_LEVEL http: routers: agents-api-internal: entryPoints: - web rule: Path(`/api/temporal/{path:.*}`) middlewares: - corsHeaders - agents-api-strip-prefix-api service: service-agents-api priority: 2 # Higher priority than the general agents-api route agents-api: entryPoints: - web rule: Path(`/api{path:.*}`) middlewares: - agents-api-chain - agents-api-strip-prefix-api - corsHeaders service: service-agents-api priority: 1 agents-api-docs: entryPoints: - web rule: Path(`/api/{path:swagger|redoc|docs|scalar|openapi.json}`) middlewares: - agents-api-strip-prefix-api service: service-agents-api priority: 2 agents-api-healthz: entryPoints: - web rule: Path(`/api/healthz`) middlewares: - agents-api-strip-prefix-api service: service-agents-api priority: 3 agents-api-redirect-to-docs: entryPoints: - web rule: Path(`/`) middlewares: - agents-api-redirect-to-docs service: service-agents-api priority: 3 temporal-ui-public: entryPoints: - web rule: PathPrefix(`/tasks-ui{path:.*}`) middlewares: - corsHeaders - temporal-ui-strip-prefix service: service-temporal-ui-public priority: 1 temporal-ui-public-assets: entryPoints: - web rule: PathPrefix(`/_app`) middlewares: - corsHeaders service: service-temporal-ui-public priority: 2 hasura: entryPoints: - web rule: PathPrefix(`/v1/graphql`) middlewares: - corsHeaders service: service-hasura priority: 3 # Handle direct /app/ routes (when Metabase generates URLs without /analytics prefix) # ONLY accessible via iframe from dashboard analytics-app-direct: entryPoints: - web rule: PathPrefix(`/app/`) middlewares: - corsHeaders - analytics-cache-headers service: service-analytics priority: 5 # Handle double /app/ pattern for Metabase static assets # ONLY accessible via iframe from dashboard analytics-app-double-assets: entryPoints: - web rule: PathRegexp(`^/analytics/app/app/(dist|fonts|img|css)/(.*)`) middlewares: - corsHeaders - analytics-cache-headers - analytics-strip-app-double service: service-analytics priority: 4 # Metabase static assets - keep /analytics prefix since Metabase is configured for it # ONLY accessible via iframe from dashboard analytics-static-assets: entryPoints: - web rule: PathRegexp(`^/analytics/(dist|fonts|img|css|app/dist|app/fonts|app/img|app/css)/(.*)`) middlewares: - corsHeaders - analytics-cache-headers service: service-analytics priority: 3 # Redirect /analytics to /analytics/ (without trailing slash to with trailing slash) analytics-redirect: entryPoints: - web rule: Path(`/analytics`) middlewares: - analytics-redirect-with-slash service: service-analytics priority: 2 # General Analytics/Metabase proxy - strip /analytics prefix for backend requests # ONLY accessible via iframe from dashboard analytics: entryPoints: - web rule: PathPrefix(`/analytics/`) middlewares: - corsHeaders - analytics-strip-prefix service: service-analytics priority: 1 middlewares: corsHeaders: headers: accessControlAllowMethods: "*" accessControlAllowHeaders: "*" accessControlAllowOriginList: "*" addVaryHeader: true agents-api-redirect-to-docs: redirectRegex: regex: "^(.*)$" replacement: "/api/docs" agents-api-add-headers: headers: customrequestheaders: $AGENTS_API_KEY_HEADER_NAME: $AGENTS_API_KEY agents-api-chain: chain: middlewares: - api-jwt-auth - agents-api-add-headers agents-api-strip-prefix-api: stripprefix: prefixes: - /api forceSlash: false api-jwt-auth: plugin: jwt: Alg: HS512 OpaAllowField: allow OpaBody: true PayloadFields: - exp - iat Required: true Keys: - $JWT_SHARED_KEY JwtHeaders: X-Developer-Id: sub OpaHttpStatusField: allow_status_code temporal-ui-strip-prefix: stripprefix: prefixes: - /tasks-ui forceSlash: false analytics-strip-prefix: stripprefix: prefixes: - /analytics forceSlash: false analytics-strip-app-double: replacepathregex: regex: "^/analytics/app/app/(.*)" replacement: "/app/$1" analytics-cache-headers: headers: customresponseheaders: Cache-Control: "public, max-age=86400" analytics-redirect-with-slash: redirectRegex: regex: "^/analytics$" replacement: "/analytics/" services: service-agents-api: loadBalancer: passHostHeader: false servers: - url: $AGENTS_API_URL service-temporal-ui-public: loadBalancer: passHostHeader: false servers: - url: $TEMPORAL_UI_PUBLIC_URL service-hasura: loadBalancer: passHostHeader: false servers: - url: $HASURA_URL service-analytics: loadBalancer: passHostHeader: false servers: - url: $ANALYTICS_URL experimental: localPlugins: jwt: moduleName: github.com/julep-ai/traefik-jwt-plugin ### TODO: Enable after testing # metrics: # prometheus: # addEntryPointsLabels: true # addRoutersLabels: true # addServicesLabels: true # entryPoint: metrics # headerLabels: # apiuser: Authorization ================================================ FILE: src/hasura/docker-compose.yml ================================================ version: '3.8' services: hasura: image: hasura/graphql-engine:v2.33.0 profiles: - multi-tenant ports: - "8086:8080" environment: HASURA_GRAPHQL_DATABASE_URL: ${PG_DSN:-postgres://postgres:postgres@memory-store:5432/postgres?sslmode=disable} HASURA_GRAPHQL_SERVER_PORT: 8080 HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_DEV_MODE: "true" HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_ADMIN_SECRET:-hasura} HASURA_GRAPHQL_UNAUTHORIZED_ROLE: "anonymous" HASURA_GRAPHQL_JWT_SECRET: ${HASURA_JWT_SECRET:-{"type":"HS512", "key":"${JWT_SHARED_KEY:-secret}", "allowed_skew":${JWT_ALLOWED_SKEW:-0}, "claims_map":${HASURA_CLAIMS_MAP}}} HASURA_GRAPHQL_CORS_DOMAIN: "*" restart: unless-stopped depends_on: - memory-store healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:8080/healthz"] interval: 30s timeout: 5s retries: 3 start_period: 10s ================================================ FILE: src/hasura/metadata/hasura_metadata_2025_04_07_16_21_57_118.json ================================================ { "resource_version": 21, "metadata": { "version": 3, "sources": [ { "name": "default", "kind": "postgres", "tables": [ { "table": { "name": "agents", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "tasks", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } }, { "name": "tools", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "tools", "schema": "public" } } } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "instructions", "canonical_name", "default_settings", "metadata", "about", "default_system_template", "model", "name", "created_at", "updated_at", "agent_id", "developer_id" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "name", "about", "instructions", "model", "metadata", "default_settings", "default_system_template" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "developers", "schema": "public" }, "array_relationships": [ { "name": "agents", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "agents", "schema": "public" } } } }, { "name": "docs", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "docs", "schema": "public" } } } }, { "name": "executions", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "executions", "schema": "public" } } } }, { "name": "files", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "files", "schema": "public" } } } }, { "name": "sessions", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "sessions", "schema": "public" } } } }, { "name": "users", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "users", "schema": "public" } } } } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "developer_id", "email", "active", "tags", "settings", "created_at", "updated_at" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "doc_owners", "schema": "public" } }, { "table": { "name": "docs", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "docs_embeddings_stores", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "doc_id": "doc_id", "index": "index" }, "insertion_order": null, "remote_table": { "name": "docs_embeddings_store", "schema": "public" } } } } ] }, { "table": { "name": "docs_embeddings", "schema": "public" } }, { "table": { "name": "docs_embeddings_store", "schema": "public" }, "object_relationships": [ { "name": "doc", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "doc_id": "doc_id", "index": "index" }, "insertion_order": null, "remote_table": { "name": "docs", "schema": "public" } } } } ] }, { "table": { "name": "embeddings_cache", "schema": "public" } }, { "table": { "name": "entries", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "foreign_key_constraint_on": "session_id" } } ] }, { "table": { "name": "entry_relations", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "foreign_key_constraint_on": "session_id" } } ] }, { "table": { "name": "executions", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } }, { "name": "task", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "task_version": "version" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } } ], "array_relationships": [ { "name": "temporal_executions_lookups", "using": { "foreign_key_constraint_on": { "column": "execution_id", "table": { "name": "temporal_executions_lookup", "schema": "public" } } } }, { "name": "transitions", "using": { "foreign_key_constraint_on": { "column": "execution_id", "table": { "name": "transitions", "schema": "public" } } } } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "task_id", "task_version", "execution_id", "input", "metadata", "created_at" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "file_owners", "schema": "public" }, "object_relationships": [ { "name": "file", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "file_id": "file_id" }, "insertion_order": null, "remote_table": { "name": "files", "schema": "public" } } } } ] }, { "table": { "name": "files", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } }, { "name": "file_owner", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "file_id": "file_id" }, "insertion_order": null, "remote_table": { "name": "file_owners", "schema": "public" } } } } ] }, { "table": { "name": "latest_executions", "schema": "public" }, "select_permissions": [ { "role": "user", "permission": { "columns": [ "task_id", "task_version", "execution_id", "input", "metadata", "created_at", "updated_at", "status", "error", "transition_count", "output", "current_step", "next_step", "step_label", "transition_metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "latest_transitions", "schema": "public" } }, { "table": { "name": "session_lookup", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "session_id": "session_id" }, "insertion_order": null, "remote_table": { "name": "sessions", "schema": "public" } } } } ] }, { "table": { "name": "sessions", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "entries", "using": { "foreign_key_constraint_on": { "column": "session_id", "table": { "name": "entries", "schema": "public" } } } }, { "name": "entry_relations", "using": { "foreign_key_constraint_on": { "column": "session_id", "table": { "name": "entry_relations", "schema": "public" } } } }, { "name": "session_lookups", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "session_id": "session_id" }, "insertion_order": null, "remote_table": { "name": "session_lookup", "schema": "public" } } } } ] }, { "table": { "name": "tasks", "schema": "public" }, "object_relationships": [ { "name": "agent", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "agents", "schema": "public" } } } } ], "array_relationships": [ { "name": "executions", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "task_version" }, "insertion_order": null, "remote_table": { "name": "executions", "schema": "public" } } } }, { "name": "workflows", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "version" }, "insertion_order": null, "remote_table": { "name": "workflows", "schema": "public" } } } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [ "agent_id", "task_id", "version", "name", "description", "input_schema", "inherit_tools", "metadata" ] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "canonical_name", "agent_id", "task_id", "version", "name", "description", "input_schema", "inherit_tools", "created_at", "updated_at", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "agent_id", "version", "name", "description", "input_schema", "inherit_tools", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "temporal_executions_lookup", "schema": "public" }, "object_relationships": [ { "name": "execution", "using": { "foreign_key_constraint_on": "execution_id" } } ] }, { "table": { "name": "tools", "schema": "public" }, "object_relationships": [ { "name": "agent", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "agents", "schema": "public" } } } } ] }, { "table": { "name": "transitions", "schema": "public" }, "object_relationships": [ { "name": "execution", "using": { "foreign_key_constraint_on": "execution_id" } } ] }, { "table": { "name": "users", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [ "created_at", "updated_at" ] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "user_id", "name", "about", "created_at", "updated_at", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "name", "about", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "workflows", "schema": "public" }, "object_relationships": [ { "name": "task", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "version" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } } ] } ], "configuration": { "connection_info": { "database_url": { "from_env": "HASURA_GRAPHQL_DATABASE_URL" }, "isolation_level": "read-committed", "pool_settings": { "connection_lifetime": 600, "idle_timeout": 180, "max_connections": 50, "retries": 1 }, "use_prepared_statements": true } } } ] } } ================================================ FILE: src/hasura/metadata/hasura_metadata_2025_04_24_14_57_23_154.json ================================================ { "resource_version": 4, "metadata": { "version": 3, "sources": [ { "name": "default", "kind": "postgres", "tables": [ { "table": { "name": "agents", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "tasks", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } }, { "name": "tools", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "tools", "schema": "public" } } } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "instructions", "canonical_name", "default_settings", "metadata", "about", "default_system_template", "model", "name", "created_at", "updated_at", "agent_id", "developer_id" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "name", "about", "instructions", "model", "metadata", "default_settings", "default_system_template" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "developers", "schema": "public" }, "array_relationships": [ { "name": "agents", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "agents", "schema": "public" } } } }, { "name": "docs", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "docs", "schema": "public" } } } }, { "name": "executions", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "executions", "schema": "public" } } } }, { "name": "files", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "files", "schema": "public" } } } }, { "name": "sessions", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "sessions", "schema": "public" } } } }, { "name": "users", "using": { "foreign_key_constraint_on": { "column": "developer_id", "table": { "name": "users", "schema": "public" } } } } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "developer_id", "email", "active", "tags", "settings", "created_at", "updated_at" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "doc_owners", "schema": "public" } }, { "table": { "name": "docs", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "docs_embeddings_stores", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "doc_id": "doc_id", "index": "index" }, "insertion_order": null, "remote_table": { "name": "docs_embeddings_store", "schema": "public" } } } } ] }, { "table": { "name": "docs_embeddings", "schema": "public" } }, { "table": { "name": "docs_embeddings_store", "schema": "public" }, "object_relationships": [ { "name": "doc", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "doc_id": "doc_id", "index": "index" }, "insertion_order": null, "remote_table": { "name": "docs", "schema": "public" } } } } ] }, { "table": { "name": "embeddings_cache", "schema": "public" } }, { "table": { "name": "entries", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "foreign_key_constraint_on": "session_id" } } ] }, { "table": { "name": "entry_relations", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "foreign_key_constraint_on": "session_id" } } ] }, { "table": { "name": "executions", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } }, { "name": "task", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "task_version": "version" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } } ], "array_relationships": [ { "name": "temporal_executions_lookups", "using": { "foreign_key_constraint_on": { "column": "execution_id", "table": { "name": "temporal_executions_lookup", "schema": "public" } } } }, { "name": "transitions", "using": { "foreign_key_constraint_on": { "column": "execution_id", "table": { "name": "transitions", "schema": "public" } } } } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "task_id", "task_version", "execution_id", "input", "metadata", "created_at" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "file_owners", "schema": "public" }, "object_relationships": [ { "name": "file", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "file_id": "file_id" }, "insertion_order": null, "remote_table": { "name": "files", "schema": "public" } } } } ] }, { "table": { "name": "files", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } }, { "name": "file_owner", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "file_id": "file_id" }, "insertion_order": null, "remote_table": { "name": "file_owners", "schema": "public" } } } } ] }, { "table": { "name": "latest_executions", "schema": "public" }, "select_permissions": [ { "role": "user", "permission": { "columns": [ "task_id", "task_version", "execution_id", "input", "metadata", "created_at", "updated_at", "status", "error", "transition_count", "output", "current_step", "next_step", "step_label", "transition_metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "latest_transitions", "schema": "public" } }, { "table": { "name": "session_lookup", "schema": "public" }, "object_relationships": [ { "name": "session", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "session_id": "session_id" }, "insertion_order": null, "remote_table": { "name": "sessions", "schema": "public" } } } } ] }, { "table": { "name": "sessions", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "array_relationships": [ { "name": "entries", "using": { "foreign_key_constraint_on": { "column": "session_id", "table": { "name": "entries", "schema": "public" } } } }, { "name": "entry_relations", "using": { "foreign_key_constraint_on": { "column": "session_id", "table": { "name": "entry_relations", "schema": "public" } } } }, { "name": "session_lookups", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "session_id": "session_id" }, "insertion_order": null, "remote_table": { "name": "session_lookup", "schema": "public" } } } } ] }, { "table": { "name": "tasks", "schema": "public" }, "object_relationships": [ { "name": "agent", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "agents", "schema": "public" } } } } ], "array_relationships": [ { "name": "executions", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "task_version" }, "insertion_order": null, "remote_table": { "name": "executions", "schema": "public" } } } }, { "name": "workflows", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "version" }, "insertion_order": null, "remote_table": { "name": "workflows", "schema": "public" } } } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [ "agent_id", "task_id", "version", "name", "description", "input_schema", "inherit_tools", "metadata" ] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "canonical_name", "agent_id", "task_id", "version", "name", "description", "input_schema", "inherit_tools", "created_at", "updated_at", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "agent_id", "version", "name", "description", "input_schema", "inherit_tools", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "temporal_executions_lookup", "schema": "public" }, "object_relationships": [ { "name": "execution", "using": { "foreign_key_constraint_on": "execution_id" } } ] }, { "table": { "name": "tools", "schema": "public" }, "object_relationships": [ { "name": "agent", "using": { "manual_configuration": { "column_mapping": { "agent_id": "agent_id", "developer_id": "developer_id" }, "insertion_order": null, "remote_table": { "name": "agents", "schema": "public" } } } } ] }, { "table": { "name": "transitions", "schema": "public" }, "object_relationships": [ { "name": "execution", "using": { "foreign_key_constraint_on": "execution_id" } } ] }, { "table": { "name": "users", "schema": "public" }, "object_relationships": [ { "name": "developer", "using": { "foreign_key_constraint_on": "developer_id" } } ], "insert_permissions": [ { "role": "user", "permission": { "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "columns": [ "created_at", "updated_at" ] }, "comment": "" } ], "select_permissions": [ { "role": "user", "permission": { "columns": [ "developer_id", "user_id", "name", "about", "created_at", "updated_at", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "update_permissions": [ { "role": "user", "permission": { "columns": [ "name", "about", "metadata" ], "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } }, "check": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ], "delete_permissions": [ { "role": "user", "permission": { "filter": { "developer_id": { "_eq": "X-Hasura-User-Id" } } }, "comment": "" } ] }, { "table": { "name": "workflows", "schema": "public" }, "object_relationships": [ { "name": "task", "using": { "manual_configuration": { "column_mapping": { "developer_id": "developer_id", "task_id": "task_id", "version": "version" }, "insertion_order": null, "remote_table": { "name": "tasks", "schema": "public" } } } } ] } ], "configuration": { "connection_info": { "database_url": { "from_env": "HASURA_GRAPHQL_DATABASE_URL" }, "isolation_level": "read-committed", "pool_settings": { "connection_lifetime": 600, "idle_timeout": 180, "max_connections": 50, "retries": 1 }, "use_prepared_statements": true } } } ] } } ================================================ FILE: src/integrations-service/.dockerignore ================================================ Dockerfile *.pyc *.pyo *.pyd __pycache__ .pytest_cache .venv ================================================ FILE: src/integrations-service/.python-version ================================================ 3.12 ================================================ FILE: src/integrations-service/AGENTS.md ================================================ # AGENTS.md - integrations-service This directory provides adapters and routers for external service integrations. Key Uses - Bash commands: - cd integrations-service - source .venv/bin/activate - poe format - poe lint - poe test - poe check - Core directories: - `integrations/` for integration modules and routers. - `tests/mocks/` for service mocks. - Code style guidelines: - Follows root Python standards (async httpx clients, ruff formatting). - Testing instructions: - Use pytest for integration tests. - Mock external services with fixtures in `tests/mocks/`. - Repository etiquette: - Document external API versions and schema changes. - Developer environment: - Set env vars in `.env` for service credentials. - Unexpected behaviors: - Watch for rate limits; configure retry logic. # Integrations Service Architecture ## Overview The integrations-service is a FastAPI-based microservice that provides a unified API for executing various external integrations. It serves as a bridge between the Julep platform and third-party services, APIs, and tools. ## Key Components ### Core Framework - `web.py` - FastAPI application setup with router registration - `providers.py` - Registry of all available integration providers - `models/base_models.py` - Core models defining provider structure - `utils/execute_integration.py` - Unified execution framework for all integrations ### Provider Model - `BaseProvider` - Core model defining integration interface - `BaseProviderMethod` - Defines methods (operations) available on a provider - `ProviderInfo` - Metadata about the integration (URL, docs, icon) - Each provider has setup, arguments, methods, and outputs ### Integration Types 1. Web Services - `brave` - Brave search engine integration - `algolia` - Algolia search service - `wikipedia` - Wikipedia content retrieval - `arxiv` - arXiv research papers search 2. Browser/UI Automation - `browserbase` - Cloud browser infrastructure - `remote_browser` - Remote browser control via Playwright - `spider` - Web scraping/crawling 3. Media Processing - `ffmpeg` - Video/audio processing - `cloudinary` - Cloud media management - `llama_parse` - Document parsing - `unstructured` - Document parsing/extraction 4. Communications - `email` - Email sending capabilities - `mailgun` - Mailgun email service integration - `weather` - Weather information - `mcp` - Model Context Protocol client (stdio/http) ### API Structure - `/execute/{provider}` - Execute default method for a provider - `/execute/{provider}/{method}` - Execute specific method on a provider - `/integrations` - List all available integrations - `/integrations/{provider}` - Get provider details - `/integrations/{provider}/tool` - Get provider as OpenAI tool format ## Integration Patterns 1. **Provider Registration** - Define in `providers.py` with setup, methods, arguments - Register in `available_providers` dictionary 2. **Method Implementation** - Each provider has method implementations in `utils/integrations/` - Methods use `@beartype` for type validation and `@retry` for resilience - Async execution with consistent error handling - MCP specifics: - `mcp.list_tools` connects to the server and returns dynamic tool metadata - `mcp.call_tool` invokes a named MCP tool with JSON arguments - Supports `stdio` (via `command`/`args`) and `http` (via `http_url`/`http_headers`) 3. **Dynamic Loading** - Provider modules loaded using `importlib` based on provider name - Methods called via `getattr` to match the requested operation 4. **OpenAI Tool Conversion** - Integrations can be converted to OpenAI tool format - Function schemas automatically generated from Pydantic models ## Type Hierarchies - `ExecutionSetup` - Union of all provider setup types - `ExecutionArguments` - Union of all method argument types - `ExecutionResponse` - Union of all possible response types ## Security Patterns - Environment variables for sensitive configuration - API keys not hardcoded (fallback to env vars) - API key validation and service-appropriate authentication ## Error Handling - Consistent error format via custom exception handlers - Retry mechanisms with exponential backoff - Structured error responses with `ExecutionError` ## Testing - Mock implementations in `tests/mocks/` - Provider execution tests in `test_provider_execution.py` - Provider definition tests in `test_providers.py` ================================================ FILE: src/integrations-service/Dockerfile ================================================ # syntax=docker/dockerfile:1 # check=error=true FROM python:3.12-slim WORKDIR /app # Install system dependencies and FFmpeg with all required libraries RUN apt-get update && apt-get install -y \ ffmpeg \ libavcodec-extra \ libavformat-dev \ libavutil-dev \ libswscale-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY --from=ghcr.io/astral-sh/uv:0.5.5 /uv /uvx /bin/ COPY .python-version pyproject.toml uv.lock ./ RUN \ uv sync --frozen --all-extras --no-group dev --color never --python-preference system COPY . ./ # Set proper signal handling ENV PYTHONUNBUFFERED=1 ENV GUNICORN_CMD_ARGS="--capture-output --enable-stdio-inheritance" # Run the application with proper signal handling ENTRYPOINT ["uv", "run", "gunicorn", "integrations.web:app", "-c", "gunicorn_conf.py"] ================================================ FILE: src/integrations-service/README.md ================================================ ================================================ FILE: src/integrations-service/docker-compose.yml ================================================ name: julep-integrations # Shared environment variables x--shared-environment: &shared-environment INTEGRATIONS_SERVICE_PORT: ${INTEGRATIONS_SERVICE_PORT:-8000} BROWSERBASE_API_KEY: ${BROWSERBASE_API_KEY} BROWSERBASE_PROJECT_ID: ${BROWSERBASE_PROJECT_ID} OPENWEATHER_API_KEY: ${OPENWEATHER_API_KEY} SPIDER_API_KEY: ${SPIDER_API_KEY} BRAVE_API_KEY: ${BRAVE_API_KEY} LLAMA_API_KEY: ${LLAMA_API_KEY} CLOUDINARY_API_KEY: ${CLOUDINARY_API_KEY} CLOUDINARY_API_SECRET: ${CLOUDINARY_API_SECRET} CLOUDINARY_CLOUD_NAME: ${CLOUDINARY_CLOUD_NAME} MAILGUN_PASSWORD: ${MAILGUN_PASSWORD} UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY} SENTRY_DSN: ${INTEGRATIONS_SENTRY_DSN} ALGOLIA_API_KEY: ${ALGOLIA_API_KEY} ALGOLIA_APPLICATION_ID: ${ALGOLIA_APPLICATION_ID} MAILGUN_API_KEY: ${MAILGUN_API_KEY} GUNICORN_CPU_DIVISOR: ${GUNICORN_CPU_DIVISOR:-4} GUNICORN_WORKERS: ${GUNICORN_WORKERS} JULEP_GOOGLE_SHEETS_SERVICE_ACCOUNT_JSON: ${JULEP_GOOGLE_SHEETS_SERVICE_ACCOUNT_JSON} services: integrations: image: julepai/integrations:${TAG:-dev} build: platforms: - linux/amd64 context: . dockerfile: Dockerfile environment: <<: *shared-environment ports: - "${INTEGRATIONS_SERVICE_PORT:-8000}:${INTEGRATIONS_SERVICE_PORT:-8000}" # map host to container port develop: watch: - action: sync+restart path: ./ target: /app/ ignore: - ./**/*.pyc - action: rebuild path: uv.lock - action: rebuild path: Dockerfile ================================================ FILE: src/integrations-service/gunicorn_conf.py ================================================ import os from integrations.env import gunicorn_workers TESTING = os.getenv("TESTING", "false").lower() == "true" DEBUG = os.getenv("DEBUG", "false").lower() == "true" AGENTS_API_DEBUG = os.getenv("AGENTS_API_DEBUG", "false").lower() == "true" # Gunicorn config variables workers = gunicorn_workers if not (TESTING or AGENTS_API_DEBUG or DEBUG) else 1 worker_class = "uvicorn.workers.UvicornWorker" bind = "0.0.0.0:8000" keepalive = 120 timeout = 120 errorlog = "-" accesslog = "-" loglevel = "info" graceful_timeout = 30 max_requests = 1000 max_requests_jitter = 50 preload_app = False def when_ready(server): """Run when server is ready to handle requests.""" # Ensure proper permissions for any required directories for directory in ["logs", "run"]: path = os.path.join(os.getcwd(), directory) if not os.path.exists(path): os.makedirs(path, mode=0o755) def on_starting(server): """Run when server starts.""" server.log.setup(server.app.cfg) def worker_exit(server, worker): """Clean up on worker exit.""" server.log.info(f"Worker {worker.pid} exiting gracefully") ================================================ FILE: src/integrations-service/integrations/__init__.py ================================================ ================================================ FILE: src/integrations-service/integrations/__main__.py ================================================ from .web import main if __name__ == "__main__": main() ================================================ FILE: src/integrations-service/integrations/autogen/Agents.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class Agent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' """ Default system template for all sessions created by this agent """ class CreateAgentRequest(BaseModel): """ Payload for creating a agent (and associated documents) """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' """ Default system template for all sessions created by this agent """ class CreateOrUpdateAgentRequest(CreateAgentRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' """ Default system template for all sessions created by this agent """ class ListModelsResponse(BaseModel): """ Response for the list models endpoint """ model_config = ConfigDict( populate_by_name=True, ) models: list[ModelInfo] """ List of available models """ class ModelInfo(BaseModel): """ Model information returned by the model list endpoint """ model_config = ConfigDict( populate_by_name=True, ) id: str """ The ID/name of the model """ class PatchAgentRequest(BaseModel): """ Payload for patching a agent """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' """ Default system template for all sessions created by this agent """ class UpdateAgentRequest(BaseModel): """ Payload for updating a agent """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[str, Field(max_length=255, min_length=1)] """ Name of the agent """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the agent """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the agent """ about: str = "" """ About the agent """ model: str = "" """ Model name to use (gpt-4-turbo, gemini-nano etc) """ instructions: str | list[str] = [] """ Instructions for the agent """ default_settings: dict[str, Any] | None = None """ Default settings for all sessions created by this agent """ default_system_template: str = '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}' """ Default system template for all sessions created by this agent """ ================================================ FILE: src/integrations-service/integrations/autogen/Chat.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Common import LogitBias from .Docs import DocReference from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, CreateToolRequest, NamedToolChoice, ) class BaseChatOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) index: int finish_reason: Literal["stop", "length", "content_filter", "tool_calls"] = "stop" """ The reason the model stopped generating tokens """ logprobs: LogProbResponse | None = None """ The log probabilities of tokens """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = None """ The tool calls generated by the model """ class BaseChatResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) usage: CompletionUsage | None = None """ Usage statistics for the completion request """ jobs: Annotated[list[UUID], Field(json_schema_extra={"readOnly": True})] = [] """ Background job IDs that may have been spawned from this interaction. """ docs: Annotated[list[DocReference], Field(json_schema_extra={"readOnly": True})] = [] """ Documents referenced for this request (for citation purposes). """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class BaseTokenLogProb(BaseModel): model_config = ConfigDict( populate_by_name=True, ) token: str logprob: float """ The log probability of the token """ bytes: list[int] | None = None class ChatInputData(BaseModel): model_config = ConfigDict( populate_by_name=True, ) messages: Annotated[list[Message], Field(min_length=1)] """ A list of new input messages comprising the conversation so far. """ tools: list[CreateToolRequest] | None = None """ (Advanced) List of tools that are provided in addition to agent's default set of tools. """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ Can be one of existing tools given to the agent earlier or the ones provided in this request. """ class ChatOutputChunk(BaseChatOutput): """ Streaming chat completion output """ model_config = ConfigDict( populate_by_name=True, ) delta: Delta """ The message generated by the model """ class ChunkChatResponse(BaseChatResponse): model_config = ConfigDict( populate_by_name=True, ) choices: list[ChatOutputChunk] """ The deltas generated by the model """ class CompletionUsage(BaseModel): """ Usage statistics for the completion request """ model_config = ConfigDict( populate_by_name=True, ) completion_tokens: Annotated[int | None, Field(json_schema_extra={"readOnly": True})] = None """ Number of tokens in the generated completion """ prompt_tokens: Annotated[int | None, Field(json_schema_extra={"readOnly": True})] = None """ Number of tokens in the prompt """ total_tokens: Annotated[int | None, Field(json_schema_extra={"readOnly": True})] = None """ Total number of tokens used in the request (prompt + completion) """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Literal["text"] = "text" """ The type (fixed to 'text') """ ContentItem = Content class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source ContentItemModel1 = Content ContentItemModel2 = ContentItemModel ContentItemModel3 = Content ContentItemModel4 = ContentItemModel ContentItemModel5 = Content ContentItemModel6 = ContentItemModel class ContentModel(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] ContentModel1 = Content class ContentModel2(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] ContentModel3 = Content class ContentModel4(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel3] | list[ContentItemModel4] ContentModel5 = Content class ContentModel6(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel5] | list[ContentItemModel6] class ContentModel7(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class Delta(BaseModel): """ The message generated by the model """ model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[ContentModel1 | ContentModel7 | ContentModel2] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class LogProbResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: Annotated[list[TokenLogProb] | None, Field(...)] """ The log probabilities of the tokens """ class Message(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[Content | ContentModel7 | ContentModel] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class MessageChatResponse(BaseChatResponse): model_config = ConfigDict( populate_by_name=True, ) choices: list[SingleChatOutput | MultipleChatOutput] """ The deltas generated by the model """ class MessageModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ str | list[str] | list[ContentModel3 | ContentModel7 | ContentModel4] | None, Field(...), ] = None """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ created_at: Annotated[AwareDatetime | None, Field(json_schema_extra={"readOnly": True})] = ( None ) """ When this resource was created as UTC date-time """ id: Annotated[UUID | None, Field(json_schema_extra={"readOnly": True})] = None class MultipleChatOutput(BaseChatOutput): """ The output returned by the model. Note that, depending on the model provider, they might return more than one message. """ model_config = ConfigDict( populate_by_name=True, ) messages: Annotated[ list[MessageModel], Field(json_schema_extra={"readOnly": True}, min_length=1) ] class RenderResponse(ChatInputData): model_config = ConfigDict( populate_by_name=True, ) docs: Annotated[list[DocReference], Field(json_schema_extra={"readOnly": True})] = [] """ Documents referenced for this request (for citation purposes). """ class SchemaCompletionResponseFormat(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_schema"] = "json_schema" """ The format of the response """ json_schema: dict[str, Any] """ The schema of the response """ class SimpleCompletionResponseFormat(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["text", "json_object"] = "text" """ The format of the response """ class SingleChatOutput(BaseChatOutput): """ The output returned by the model. Note that, depending on the model provider, they might return more than one message. """ model_config = ConfigDict( populate_by_name=True, ) message: MessageModel class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str class TokenLogProb(BaseTokenLogProb): model_config = ConfigDict( populate_by_name=True, ) top_logprobs: Annotated[ list[BaseTokenLogProb], Field(json_schema_extra={"readOnly": True}, min_length=1), ] """ The log probabilities of the tokens """ class ChatInput(ChatInputData): model_config = ConfigDict( populate_by_name=True, ) remember: Annotated[StrictBool, Field(json_schema_extra={"readOnly": True})] = False """ DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) """ recall: StrictBool = True """ Whether previous memories and docs should be recalled or not """ save: StrictBool = True """ Whether this interaction should be stored in the session history or not """ model: Annotated[ str | None, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = None """ Identifier of the model to be used """ stream: StrictBool = False """ Indicates if the server should stream the response as it's generated """ stop: Annotated[list[str], Field(max_length=4)] = [] """ Up to 4 sequences where the API will stop generating further tokens. """ seed: Annotated[int | None, Field(ge=-1, le=1000)] = None """ If specified, the system will make a best effort to sample deterministically for that particular seed value """ max_tokens: Annotated[int | None, Field(ge=1)] = None """ The maximum number of tokens to generate in the chat completion """ logit_bias: dict[str, LogitBias] | None = None """ Modify the likelihood of specified tokens appearing in the completion """ response_format: SimpleCompletionResponseFormat | SchemaCompletionResponseFormat | None = ( None ) """ Response format (set to `json_object` to restrict output to JSON) """ agent: UUID | None = None """ Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) """ repetition_penalty: Annotated[float | None, Field(ge=0.0, le=2.0)] = None """ Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ length_penalty: Annotated[float | None, Field(ge=0.0, le=2.0)] = None """ Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. """ min_p: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Minimum probability compared to leading token to be considered """ frequency_penalty: Annotated[float | None, Field(ge=-2.0, le=2.0)] = None """ Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ presence_penalty: Annotated[float | None, Field(ge=-2.0, le=2.0)] = None """ Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. """ temperature: Annotated[float | None, Field(ge=0.0, le=5.0)] = None """ What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. """ top_p: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. """ metadata: dict[str, Any] | None = None auto_run_tools: StrictBool = False """ Whether to automatically run tools and send the results back to the model (requires tools or agents with tools). """ recall_tools: StrictBool = True """ Whether to include tool requests and responses when recalling messages. """ ================================================ FILE: src/integrations-service/integrations/autogen/Common.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel class Content(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=30000)] """ Contents of a document """ class JinjaTemplate(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str """ A valid jinja template. """ class Limit(RootModel[int]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[int, Field(ge=1, lt=1000)] """ Limit the number of results """ class LogitBias(RootModel[float]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[float, Field(ge=-100.0, le=100.0)] class Offset(RootModel[int]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[int, Field(ge=0)] """ Offset to apply to the results """ class PyExpression(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str """ A simple python expression compatible with SimpleEval. """ class ResourceDeletedResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: UUID """ ID of deleted resource """ deleted_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was deleted as UTC date-time """ jobs: Annotated[list[UUID], Field(json_schema_extra={"readOnly": True})] = [] """ IDs (if any) of jobs created as part of this request """ class StepLabel(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] """ A valid step label """ class Uuid(RootModel[UUID]): model_config = ConfigDict( populate_by_name=True, ) root: UUID ================================================ FILE: src/integrations-service/integrations/autogen/Docs.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Common import Content class BulkDeleteDocsRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ delete_all: StrictBool = False """ Delete all docs """ class CreateDocRequest(BaseModel): """ Payload for creating a doc """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None title: Annotated[str, Field(max_length=800)] """ Title describing what this document contains """ content: Content | list[Content] """ Contents of the document. Each string is limited to 30k characters. """ embed_instruction: str | None = None """ Instruction for the embedding model. """ class Doc(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ title: Annotated[str, Field(max_length=800)] """ Title describing what this document contains """ content: str | list[str] """ Contents of the document """ embeddings: Annotated[ list[float] | list[list[float]] | None, Field(json_schema_extra={"readOnly": True}), ] = None """ Embeddings for the document """ modality: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Modality of the document """ language: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Language of the document """ embedding_model: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Embedding model used for the document """ embedding_dimensions: Annotated[int | None, Field(json_schema_extra={"readOnly": True})] = ( None ) """ Dimensions of the embedding model """ class DocOwner(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: UUID role: Literal["user", "agent"] class DocReference(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None owner: DocOwner """ The owner of this document. """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] """ ID of the document """ title: str | None = None snippet: Snippet distance: float | None = None class DocSearchResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) docs: list[DocReference] """ The documents that were found """ time: Annotated[float, Field(gt=0.0)] """ The time taken to search in seconds """ class EmbedQueryResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) vectors: list[list[float]] """ The embedded vectors """ class HybridDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ text: str """ Text to use in the search """ lang: str = "en-US" """ The language to be used for text search. Support for other languages coming soon. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. """ vector: list[float] """ Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ k_multiplier: Annotated[int, Field(ge=1, le=10)] = 5 """ The k_multiplier to control how many intermediate results to fetch before final scoring """ class MultipleEmbedQueryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: Annotated[list[str], Field(max_length=100, min_length=1)] """ Texts to embed """ embed_instruction: str = "" """ Instruction for the embedding model. """ class SingleEmbedQueryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str """ Text to embed """ embed_instruction: str = "" """ Instruction for the embedding model. """ class Snippet(BaseModel): model_config = ConfigDict( populate_by_name=True, ) index: int content: str embedding: list[float] | None = None class TextOnlyDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ text: str """ Text to use in the search """ lang: str = "en-US" """ The language to be used for text search. Support for other languages coming soon. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. """ class VectorDocSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ vector: list[float] """ Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ ================================================ FILE: src/integrations-service/integrations/autogen/Entries.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, Tool, ToolResponse, ) class BaseEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ ChatML role (system|assistant|user|tool) """ name: str | None = None content: ( list[Content | ContentModel3 | ContentModel] | Tool | ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 | str | ToolResponse | list[ list[ContentModel1 | ContentModel3 | ContentModel2] | Tool | ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 | str | ToolResponse ] ) source: Literal[ "api_request", "api_response", "tool_request", "tool_response", "internal", "summarizer", "meta", ] tokenizer: str token_count: int model: str = "gpt-4o-mini" tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = None """ Tool calls generated by the model. """ tool_call_id: str | None = None """ The tool call id of the tool call this message is a response to """ timestamp: AwareDatetime """ This is the time that this event refers to. """ class ChatMLRole(RootModel[Literal["user", "assistant", "system", "tool"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["user", "assistant", "system", "tool"] """ ChatML role (system|assistant|user|tool) """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Literal["text"] = "text" """ The type (fixed to 'text') """ ContentItem = Content class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source ContentItemModel1 = Content ContentItemModel2 = ContentItemModel class ContentModel(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] ContentModel1 = Content class ContentModel2(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] class ContentModel3(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class Entry(BaseEntry): model_config = ConfigDict( populate_by_name=True, ) created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class History(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: list[Entry] relations: list[Relation] session_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ class ImageDetail(RootModel[Literal["low", "high", "auto"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["low", "high", "auto"] """ Image detail level """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class Relation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) head: UUID relation: str tail: UUID class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str ================================================ FILE: src/integrations-service/integrations/autogen/Executions.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateExecutionRequest(BaseModel): """ Payload for creating an execution """ model_config = ConfigDict( populate_by_name=True, ) input: dict[str, Any] """ The input to the execution """ output: Any | None = None """ The output of the execution if it succeeded """ error: str | None = None """ The error of the execution if it failed """ transition_count: int | None = None """ The number of transitions in this execution """ metadata: dict[str, Any] | None = None class Execution(BaseModel): model_config = ConfigDict( populate_by_name=True, ) task_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] """ The ID of the task that the execution is running """ status: Annotated[ Literal[ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled", ], Field(json_schema_extra={"readOnly": True}), ] """ The status of the execution """ input: dict[str, Any] """ The input to the execution """ output: Any | None = None """ The output of the execution if it succeeded """ error: str | None = None """ The error of the execution if it failed """ transition_count: int | None = None """ The number of transitions in this execution """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class TaskTokenResumeExecutionRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal["running"] = "running" input: dict[str, Any] | None = None """ The input to resume the execution with """ class TransitionEvent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal[ "init", "init_branch", "finish", "finish_branch", "wait", "resume", "error", "step", "cancelled", ], Field(json_schema_extra={"readOnly": True}), ] output: Annotated[Any, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ class TransitionTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) workflow: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ For Unicode character safety See: https://unicode.org/reports/tr31/ See: https://www.unicode.org/reports/tr39/#Identifier_Characters """ step: int scope_id: UUID class UpdateExecutionRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal[ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled", ] class ResumeExecutionRequest(UpdateExecutionRequest): model_config = ConfigDict( populate_by_name=True, ) status: Literal["running"] = "running" input: dict[str, Any] | None = None """ The input to resume the execution with """ class StopExecutionRequest(UpdateExecutionRequest): model_config = ConfigDict( populate_by_name=True, ) status: Literal["cancelled"] = "cancelled" reason: str | None = None """ The reason for stopping the execution """ class Transition(TransitionEvent): model_config = ConfigDict( populate_by_name=True, ) execution_id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] current: Annotated[TransitionTarget, Field(json_schema_extra={"readOnly": True})] next: Annotated[TransitionTarget | None, Field(json_schema_extra={"readOnly": True})] step_label: Annotated[ str | None, Field( json_schema_extra={"readOnly": True}, max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$", ), ] = None """ A valid step label """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None ================================================ FILE: src/integrations-service/integrations/autogen/Files.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateFileRequest(BaseModel): """ Payload for creating a file """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ Name of the file """ description: str = "" """ Description of the file """ mime_type: str | None = None """ MIME type of the file """ content: str """ Base64 encoded content of the file """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the file """ class File(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] """ Name of the file """ description: str = "" """ Description of the file """ mime_type: str | None = None """ MIME type of the file """ content: str """ Base64 encoded content of the file """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the file """ size: Annotated[int, Field(ge=1, json_schema_extra={"readOnly": True})] """ Size of the file in bytes """ hash: Annotated[str, Field(json_schema_extra={"readOnly": True})] """ Hash of the file """ ================================================ FILE: src/integrations-service/integrations/autogen/Jobs.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool class JobStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the job """ reason: str = "" """ Reason for the current state of the job """ has_progress: StrictBool = False """ Whether this Job supports progress updates """ progress: Annotated[float, Field(ge=0.0, le=100.0)] = 0 """ Progress percentage """ state: Literal[ "pending", "in_progress", "retrying", "succeeded", "aborted", "failed", "unknown", ] = "pending" """ Current state of the job """ ================================================ FILE: src/integrations-service/integrations/autogen/Projects.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateProjectRequest(BaseModel): """ Payload for creating a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class PatchProjectRequest(BaseModel): """ Payload for patching a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ Display name of the project """ class Project(BaseModel): """ Project model """ model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class UpdateProjectRequest(BaseModel): """ Payload for updating a project """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ class CreateOrUpdateProjectRequest(CreateProjectRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID metadata: dict[str, Any] | None = None canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Canonical name of the project (unique per developer) """ name: Annotated[str, Field(max_length=255, min_length=1)] """ Display name of the project """ ================================================ FILE: src/integrations-service/integrations/autogen/Responses.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from pydantic import BaseModel, ConfigDict, Field, RootModel, StrictBool class BaseTool(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: str class Click(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["click"] = "click" """ Specifies the event type. For a click action, this property is always set to `click`. """ button: Literal["left", "right", "wheel", "back", "forward"] """ Indicates which mouse button was pressed during the click. One of `left`, `right`, `wheel`, `back`, or `forward`. """ x: int """ The x-coordinate where the click occurred. """ y: int """ The y-coordinate where the click occurred. """ class ComputerScreenshotImage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_screenshot"] = "computer_screenshot" """ Specifies the event type. For a computer screenshot, this property is always set to `computer_screenshot`. """ image_url: str | None = None """ The URL of the screenshot image. """ file_id: str | None = None """ The identifier of an uploaded file that contains the screenshot. """ class ComputerTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_use_preview"] = "computer_use_preview" """ The type of the computer use tool. Always `computer_use_preview`. """ display_width: float """ The width of the computer display. """ display_height: float """ The height of the computer display. """ environment: Literal["mac", "windows", "ubuntu", "browser"] """ The type of computer environment to control. """ class ComputerToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_call"] = "computer_call" """ The type of the computer call. Always `computer_call`. """ id: str """ The unique ID of the computer call. """ call_id: str """ An identifier used when responding to the tool call with output. """ action: Click | DoubleClick | Drag | KeyPress | Move | Screenshot | Scroll | Type | Wait """ The action to perform. """ pending_safety_checks: list[ComputerToolCallSafetyCheck] """ The pending safety checks for the computer call. """ status: Literal["in_progress", "completed", "incomplete"] """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class ComputerToolCallOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_call_output"] = "computer_call_output" """ The type of the computer tool call output. Always `computer_call_output`. """ id: str | None = None """ The ID of the computer tool call output. """ call_id: str """ The ID of the computer tool call that produced the output. """ acknowledged_safety_checks: list[ComputerToolCallSafetyCheck] | None = None """ The safety checks reported by the API that have been acknowledged by the developer. """ output: ComputerScreenshotImage """ The output screenshot image. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the message input. One of `in_progress`, `completed`, or `incomplete`. Populated when input items are returned via API. """ class ComputerToolCallOutputResource(ComputerToolCallOutput): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the computer call tool output. """ class ComputerToolCallSafetyCheck(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The ID of the pending safety check. """ code: str """ The type of the pending safety check. """ message: str """ Details about the pending safety check. """ class Coordinate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) x: int """ The x-coordinate. """ y: int """ The y-coordinate. """ class CreateResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) model: str input: ( str | list[ EasyInputMessage | Item | InputMessageResource | OutputMessage | FileSearchToolCall | ComputerToolCall | ComputerToolCallOutputResource | WebSearchToolCall | FunctionToolCall | FunctionToolCallOutputResource ] ) include: ( list[ Literal[ "file_search_call.results", "message.input_image.image_url", "computer_call_output.output.image_url", ] ] | None ) = None parallel_tool_calls: StrictBool = True store: StrictBool = True stream: StrictBool = False max_tokens: int | None = None temperature: float = 1 top_p: float = 1 n: int | None = None stop: str | list[str] | None = None presence_penalty: float | None = None frequency_penalty: float | None = None logit_bias: dict[str, Any] | None = None user: str | None = None instructions: str | None = None previous_response_id: str | None = None reasoning: Reasoning | None = None text: Text | None = None tool_choice: Literal["auto", "none"] | ToolChoice | None = None tools: list[FunctionTool | WebSearchTool | FileSearchTool | ComputerTool] | None = None truncation: Literal["disabled", "auto"] | None = None metadata: dict[str, Any] | None = None class DoubleClick(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["double_click"] = "double_click" """ Specifies the event type. For a double click action, this property is always set to `double_click`. """ x: int """ The x-coordinate where the double click occurred. """ y: int """ The y-coordinate where the double click occurred. """ class Drag(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["drag"] = "drag" """ Specifies the event type. For a drag action, this property is always set to `drag`. """ path: list[Coordinate] """ An array of coordinates representing the path of the drag action. """ class EasyInputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "developer"] """ The role of the message input. One of `user`, `assistant`, `system`, or `developer`. """ content: str | list[InputText | InputImage | InputFile] """ Text, image, or audio input to the model, used to generate a response. Can also contain previous assistant responses. """ type: Literal["message"] = "message" """ The type of the message input. Always `message`. """ class FileCitation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_citation"] = "file_citation" """ The type of the file citation. Always `file_citation`. """ index: int """ The index of the file in the list of files. """ file_id: str """ The ID of the file. """ class FilePath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_path"] = "file_path" """ The type of the file path. Always `file_path`. """ file_id: str """ The ID of the file. """ index: int """ The index of the file in the list of files. """ class FileSearchTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["file_search"] = "file_search" filters: Any | None = None max_num_results: int | None = None ranking_options: RankingOptions | None = None vector_store_ids: list[str] class FileSearchToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the file search tool call. """ type: Literal["file_search_call"] = "file_search_call" """ The type of the file search tool call. Always `file_search_call`. """ status: Literal["in_progress", "searching", "completed", "incomplete", "failed"] """ The status of the file search tool call. One of `in_progress`, `searching`, `incomplete` or `failed` """ queries: list[str] """ The queries used to search for files. """ results: list[Result] | None = None """ The results of the file search tool call. """ class Function(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class FunctionTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" name: str description: str | None = None parameters: dict[str, Any] strict: StrictBool | None = None class FunctionToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the function tool call. """ type: Literal["function_call"] = "function_call" """ The type of the function tool call. Always `function_call`. """ call_id: str """ The unique ID of the function tool call generated by the model. """ name: str """ The name of the function to run. """ arguments: str """ A JSON string of the arguments to pass to the function. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class FunctionToolCallOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None """ The unique ID of the function tool call output. Populated when this item is returned via API. """ type: Literal["function_call_output"] = "function_call_output" """ The type of the function tool call output. Always `function_call_output`. """ call_id: str """ The unique ID of the function tool call generated by the model. """ output: str """ A JSON string of the output of the function tool call. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class FunctionToolCallOutputResource(FunctionToolCallOutput): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None """ The unique ID of the function call tool output. """ class IncompleteDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reason: Literal["max_output_tokens", "content_filter"] class InputFile(BaseModel): """ A file input to the model. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_file"] = "input_file" """ The type of the input item. Always `input_file`. """ file_id: str | None = None """ The ID of the file to be sent to the model. """ filename: str | None = None """ The name of the file to be sent to the model. """ file_data: str | None = None """ The content of the file to be sent to the model. """ class InputImage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_image"] = "input_image" """ The type of the input item. Always `input_image`. """ image_url: str | None = None """ The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL. """ file_id: str | None = None """ The ID of the file to be sent to the model. """ detail: Literal["high", "low", "auto"] = "auto" """ The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`. Defaults to `auto`. """ class InputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["message"] = "message" role: Literal["user", "assistant", "system", "developer"] status: Literal["in_progress", "completed", "incomplete"] content: list[InputText | InputImage | InputFile] class InputMessageResource(InputMessage): model_config = ConfigDict( populate_by_name=True, ) id: str class InputText(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["input_text"] = "input_text" """ The type of the input item. Always `input_text`. """ text: str """ The text input to the model. """ class InputTokensDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cached_tokens: int class Item(BaseModel): """ An item representing part of the context for the response to be generated by the model. Can contain text, images, and audio inputs, as well as previous assistant responses and tool call outputs. """ model_config = ConfigDict( populate_by_name=True, ) type: str class KeyPress(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["keypress"] = "keypress" """ Specifies the event type. For a keypress action, this property is always set to `keypress`. """ keys: list[str] """ The combination of keys the model is requesting to be pressed. This is an array of strings, each representing a key. """ class Move(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["move"] = "move" """ Specifies the event type. For a move action, this property is always set to `move`. """ x: int """ The x-coordinate to move to. """ y: int """ The y-coordinate to move to. """ class OutputMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str type: Literal["message"] = "message" role: Literal["user", "assistant", "system", "developer"] status: Literal["in_progress", "completed", "incomplete"] content: list[OutputText | Refusal] class OutputText(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["output_text"] = "output_text" """ The type of the output text. Always `output_text`. """ text: str """ The text output from the model. """ annotations: list[FileCitation | UrlCitation | FilePath] """ The annotations of the text output. """ class OutputTokensDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reasoning_tokens: int class RankingOptions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ranker: Literal["auto"] | None = None score_threshold: float | None = None class Reasoning(BaseModel): """ Reasoning configuration options for o-series models. """ model_config = ConfigDict( populate_by_name=True, ) effort: Literal["low", "medium", "high"] """ Constraint effort on reasoning models. """ generate_summary: Literal["concise", "detailed"] | None = None """ A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. One of `concise` or `detailed`. """ class ReasoningContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["reasoning_summary"] = "reasoning_summary" """ The type of the object. Always `text`. """ text: str """ A short summary of the reasoning used by the model when generating the response. """ class ReasoningItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["reasoning"] = "reasoning" """ The type of the object. Always `reasoning`. """ id: str """ The unique identifier of the reasoning content. """ content: list[ReasoningContent] """ Reasoning text contents. """ status: Literal["in_progress", "completed", "incomplete"] | None = None """ The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. """ class Refusal(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["refusal"] = "refusal" """ The type of the refusal. Always `refusal`. """ refusal: str """ The refusal explanation from the model. """ class Response(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str object: Literal["response"] = "response" created_at: int status: Literal["completed", "failed", "in_progress", "incomplete"] error: ResponseError | None = None incomplete_details: IncompleteDetails | None = None instructions: str | None = None max_output_tokens: int | None = None model: str output: list[ OutputMessage | FileSearchToolCall | FunctionToolCall | WebSearchToolCall | ComputerToolCall | ReasoningItem ] parallel_tool_calls: StrictBool = True previous_response_id: str | None = None reasoning: Reasoning | None = None store: StrictBool = True temperature: float = 1 text: Text | None = None tool_choice: ToolChoiceTypes | ToolChoiceFunction | Literal["auto", "none", "required"] tools: list[FunctionTool | WebSearchTool | FileSearchTool | ComputerTool] top_p: float = 1 truncation: Literal["disabled", "auto"] usage: ResponseUsage user: str | None = None metadata: dict[str, Any] class ResponseError(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str type: str param: str | None = None code: str | None = None class ResponseFormatJsonObject(BaseModel): """ JSON object response format. An older method of generating JSON responses. Using `json_schema` is recommended for models that support it. Note that the model will not generate JSON without a system or user message instructing it to do so. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_object"] = "json_object" """ The type of response format being defined. Always `json_object`. """ class ResponseFormatText(BaseModel): """ Default response format. Used to generate text responses. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["text"] = "text" """ The type of response format being defined. Always `text`. """ class ResponseUsage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) input_tokens: int input_tokens_details: InputTokensDetails output_tokens: int output_tokens_details: OutputTokensDetails total_tokens: int class Result(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_id: str """ The unique ID of the file. """ text: str """ The text that was retrieved from the file. """ filename: str """ The name of the file. """ attributes: VectorStoreFileAttributes """ The attributes of the file. """ score: float """ The relevance score of the file - a value between 0 and 1. """ class Screenshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["screenshot"] = "screenshot" """ Specifies the event type. For a screenshot action, this property is always set to `screenshot`. """ class Scroll(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["scroll"] = "scroll" """ Specifies the event type. For a scroll action, this property is always set to `scroll`. """ x: int """ The x-coordinate where the scroll occurred. """ y: int """ The y-coordinate where the scroll occurred. """ scroll_x: int """ The horizontal scroll distance. """ scroll_y: int """ The vertical scroll distance. """ class Text(BaseModel): model_config = ConfigDict( populate_by_name=True, ) format: ResponseFormatText | TextResponseFormatJsonSchema | ResponseFormatJsonObject class TextResponseFormatJsonSchema(BaseModel): """ JSON Schema response format. Used to generate structured JSON responses. Learn more about [Structured Outputs](/docs/guides/structured-outputs). """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["json_schema"] = "json_schema" """ The type of response format being defined. Always `json_schema`. """ description: str | None = None """ A description of what the response format is for, used by the model to determine how to respond in the format. """ name: str | None = None """ The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. """ schema_: Annotated[dict[str, Any], Field(alias="schema")] """ The JSON schema that defines the structure of the response. """ strict: StrictBool = False """ Whether to enable strict schema adherence when generating the output. If set to true, the model will always follow the exact schema defined in the `schema` field. Only a subset of JSON Schema is supported when `strict` is `true`. To learn more, read the [Structured Outputs guide](/docs/guides/structured-outputs). """ class ToolChoice(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" function: Function class ToolChoiceFunction(BaseModel): """ Use this option to force the model to call a specific function. """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" """ For function calling, the type is always `function`. """ name: str """ The name of the function to call. """ class ToolChoiceTypes(BaseModel): """ Indicates that the model should use a built-in tool to generate a response. [Learn more about built-in tools](/docs/guides/tools). """ model_config = ConfigDict( populate_by_name=True, ) type: Literal[ "file_search", "web_search_preview", "computer_use_preview", "web_search_preview_2025_03_11", ] """ The type of hosted tool the model should to use. Learn more about [built-in tools](/docs/guides/tools). Allowed values are: - `file_search` - `web_search_preview` - `computer_use_preview` """ class Type(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["type"] = "type" """ Specifies the event type. For a type action, this property is always set to `type`. """ text: str """ The text to type. """ class UrlCitation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) url: str """ The URL of the web resource. """ title: str """ The title of the web resource. """ type: Literal["url_citation"] = "url_citation" """ The type of the URL citation. Always `url_citation`. """ start_index: int """ The index of the first character of the URL citation in the message. """ end_index: int """ The index of the last character of the URL citation in the message. """ class UserLocation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["approximate"] = "approximate" city: str | None = None country: str | None = None region: str | None = None timezone: str | None = None class VectorStoreFileAttributes(BaseModel): """ Set of key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters, booleans, or numbers. """ model_config = ConfigDict( populate_by_name=True, ) properties: dict[str, VectorStoreFileAttributesString | StrictBool | float] """ Key-value pairs where keys are strings with max length 64 and values are strings with max length 512, booleans, or numbers. """ class VectorStoreFileAttributesString(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[str, Field(max_length=512)] class Wait(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["wait"] = "wait" """ Specifies the event type. For a wait action, this property is always set to `wait`. """ class WebSearchTool(BaseTool): model_config = ConfigDict( populate_by_name=True, ) type: Literal["web_search_preview"] = "web_search_preview" domains: list[str] | None = None search_context_size: Literal["small", "medium", "large"] | None = None user_location: UserLocation | None = None class WebSearchToolCall(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str """ The unique ID of the web search tool call. """ type: Literal["web_search_call"] = "web_search_call" """ The type of the web search tool call. Always `web_search_call`. """ status: Literal["in_progress", "searching", "completed", "failed"] """ The status of the web search tool call. """ ================================================ FILE: src/integrations-service/integrations/autogen/Secrets.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateSecretRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: str """ Name of the secret """ description: str | None = None """ Description of what the secret is used for """ value: str """ The decrypted secret value """ class Secret(BaseModel): """ A secret that can be used in tasks and sessions """ model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None name: str """ Name of the secret """ description: str | None = None """ Description of what the secret is used for """ value: str """ The decrypted secret value """ UpdateSecretRequest = CreateSecretRequest ================================================ FILE: src/integrations-service/integrations/autogen/Sessions.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool class BaseDocSearch(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: Annotated[int, Field(ge=1, le=50)] = 10 """ The limit of documents to return """ lang: str = "en-US" """ The language to be used for text-only search. Support for other languages coming soon. """ metadata_filter: dict[str, Any] = {} """ Metadata filter to apply to the search """ num_search_messages: Annotated[int, Field(ge=1, le=50)] = 4 """ The number of search messages to use for the search. """ max_query_length: Annotated[int, Field(ge=100, le=10000)] = 1000 """ The maximum query length to use for the search. """ include_embeddings: StrictBool = True """ Whether to include embeddings in the response """ BaseDocSearchUpdate = BaseDocSearch class CreateSessionRequest(BaseModel): """ Payload for creating a session """ model_config = ConfigDict( populate_by_name=True, ) user: UUID | None = None """ User ID of user associated with this session """ users: list[UUID] | None = None agent: UUID | None = None """ Agent ID of agent associated with this session """ agents: list[UUID] | None = None situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class HybridDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["hybrid"] = "hybrid" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ k_multiplier: Annotated[int, Field(ge=0)] = 7 """ The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring """ class HybridDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["hybrid"] = "hybrid" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ alpha: Annotated[float, Field(ge=0.0, le=1.0)] = 0.5 """ The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ k_multiplier: Annotated[int, Field(ge=0)] = 7 """ The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring """ class PatchSessionRequest(BaseModel): """ Payload for patching a session """ model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: ( VectorDocSearchUpdate | TextOnlyDocSearchUpdate | HybridDocSearchUpdate | None ) = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class Session(BaseModel): model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ summary: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None """ Summary (null at the beginning) - generated automatically after every interaction """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ kind: str | None = None """ Discriminator property for Session. """ class SingleAgentMultiUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID users: Annotated[list[UUID], Field(min_length=2)] class SingleAgentNoUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID class SingleAgentSingleUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agent: UUID user: UUID class TextOnlyDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["text"] = "text" """ The mode to use for the search. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ class TextOnlyDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["text"] = "text" """ The mode to use for the search. """ trigram_similarity_threshold: Annotated[float | None, Field(ge=0.0, le=1.0)] = None """ The trigram_similarity_threshold cutoff level """ class UpdateSessionRequest(BaseModel): """ Payload for updating a session """ model_config = ConfigDict( populate_by_name=True, ) situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class VectorDocSearch(BaseDocSearch): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["vector"] = "vector" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ class VectorDocSearchUpdate(BaseDocSearchUpdate): model_config = ConfigDict( populate_by_name=True, ) mode: Literal["vector"] = "vector" """ The mode to use for the search. """ confidence: Annotated[float, Field(ge=-1.0, le=1.0)] = 0.5 """ The confidence cutoff level """ mmr_strength: Annotated[float, Field(ge=0.0, lt=1.0)] = 0.5 """ MMR Strength (mmr_strength = 1 - mmr_lambda) """ class CreateOrUpdateSessionRequest(CreateSessionRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID user: UUID | None = None """ User ID of user associated with this session """ users: list[UUID] | None = None agent: UUID | None = None """ Agent ID of agent associated with this session """ agents: list[UUID] | None = None situation: str | None = None """ Session situation """ system_template: str | None = None """ A specific system prompt template that sets the background for this session """ render_templates: StrictBool = True """ Render system and assistant message content as jinja templates """ token_budget: int | None = None """ Threshold value for the adaptive context functionality """ context_overflow: Literal["truncate", "adaptive"] | None = None """ Action to start on context window overflow """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. """ forward_tool_calls: StrictBool = False """ Whether to forward tool calls to the model """ recall_options: VectorDocSearch | TextOnlyDocSearch | HybridDocSearch | None = None """ Recall options for the session """ metadata: dict[str, Any] | None = None class MultiAgentMultiUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] users: Annotated[list[UUID], Field(min_length=2)] class MultiAgentNoUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] class MultiAgentSingleUserSession(Session): model_config = ConfigDict( populate_by_name=True, ) agents: Annotated[list[UUID], Field(min_length=2)] user: UUID ================================================ FILE: src/integrations-service/integrations/autogen/Tasks.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Tools import ( ChosenBash20241022, ChosenComputer20241022, ChosenFunctionCall, ChosenTextEditor20241022, CreateToolRequest, NamedToolChoice, ) class CaseThen(BaseModel): model_config = ConfigDict( populate_by_name=True, ) case: Literal["_"] | str """ The condition to evaluate """ then: ( EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep ) """ The steps to run if the condition is true """ class CaseThenUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) case: Literal["_"] | str """ The condition to evaluate """ then: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep ) """ The steps to run if the condition is true """ class Content(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str """ A valid jinja template. """ type: Literal["text"] = "text" """ The type (fixed to 'text') """ ContentItem = Content class ContentItemModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["image"] = "image" source: Source ContentItemModel1 = Content ContentItemModel2 = ContentItemModel class ContentModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: ImageUrl """ The image URL """ type: Literal["image_url"] = "image_url" """ The type (fixed to 'image_url') """ class ContentModel1(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItem] | list[ContentItemModel] ContentModel2 = Content ContentModel3 = ContentModel class ContentModel4(BaseModel): """ Anthropic image content part """ model_config = ConfigDict( populate_by_name=True, ) tool_use_id: str type: Literal["tool_result"] = "tool_result" content: list[ContentItemModel1] | list[ContentItemModel2] class CreateTaskRequest(BaseModel): """ Payload for creating a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class Else(BaseModel): """ The steps to run if the condition is false """ model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["map_reduce"], Field(json_schema_extra={"readOnly": True})] = ( "map_reduce" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ElseModel(BaseModel): """ The steps to run if the condition is false """ model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ErrorWorkflowStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["error"], Field(json_schema_extra={"readOnly": True})] = "error" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ error: str """ The error message """ class EvaluateStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["evaluate"], Field(json_schema_extra={"readOnly": True})] = ( "evaluate" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ evaluate: dict[str, dict[str, Any] | str] """ The expression to evaluate """ class ForeachDo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) in_: Annotated[str, Field(alias="in")] """ The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. """ do: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ class ForeachDoUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) in_: Annotated[str, Field(alias="in")] """ The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. """ do: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ class ForeachStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["foreach"], Field(json_schema_extra={"readOnly": True})] = ( "foreach" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ foreach: ForeachDo """ The steps to run for each iteration """ class ForeachStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ foreach: ForeachDoUpdateItem """ The steps to run for each iteration """ class GetStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["get"], Field(json_schema_extra={"readOnly": True})] = "get" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ get: str """ The key to get """ class IfElseWorkflowStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["if_else"], Field(json_schema_extra={"readOnly": True})] = ( "if_else" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ if_: Annotated[str, Field(alias="if")] """ The condition to evaluate """ then: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Then ) """ The steps to run if the condition is true """ else_: Annotated[ WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Else | None, Field(alias="else"), ] = None """ The steps to run if the condition is false """ class IfElseWorkflowStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ if_: Annotated[str, Field(alias="if")] """ The condition to evaluate """ then: ( WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | ThenModel ) """ The steps to run if the condition is true """ else_: Annotated[ WaitForInputStep | EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | ElseModel | None, Field(alias="else"), ] = None """ The steps to run if the condition is false """ class ImageUrl(BaseModel): """ The image URL """ model_config = ConfigDict( populate_by_name=True, ) url: str """ Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) """ detail: Literal["low", "high", "auto"] = "auto" """ The detail level of the image """ class LogStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["log"], Field(json_schema_extra={"readOnly": True})] = "log" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ log: str """ The value to log """ class Main(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["map_reduce"], Field(json_schema_extra={"readOnly": True})] = ( "map_reduce" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class MainModel(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ParallelStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["parallel"], Field(json_schema_extra={"readOnly": True})] = ( "parallel" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ parallel: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep ], Field(max_length=100), ] """ The steps to run in parallel. Max concurrency will depend on the platform. """ class ParallelStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ parallel: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ], Field(max_length=100), ] """ The steps to run in parallel. Max concurrency will depend on the platform. """ class PatchTaskRequest(BaseModel): """ Payload for patching a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=255, min_length=1)] = None """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStepUpdateItem | SwitchStepUpdateItem | ForeachStepUpdateItem | ParallelStepUpdateItem | MainModel ] | None, Field(min_length=1), ] = None """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class PromptItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: Literal["user", "assistant", "system", "tool"] """ The role of the message """ tool_call_id: str | None = None content: Annotated[ list[str] | list[Content | ContentModel | ContentModel1] | str | None, Field(...), ] """ The content parts of the message """ name: str | None = None """ Name """ tool_calls: ( list[ ChosenFunctionCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ] | None ) = [] """ Tool calls generated by the model. """ class PromptStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["prompt"], Field(json_schema_extra={"readOnly": True})] = "prompt" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ prompt: list[PromptItem] | str """ The prompt to run """ tools: Literal["all"] | list[ToolRef | CreateToolRequest] = "all" """ The tools to use for the prompt """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ The tool choice for the prompt """ settings: dict[str, Any] | None = None """ Settings for the prompt """ unwrap: StrictBool = False """ Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. """ disable_cache: StrictBool = False """ Whether to disable caching for the prompt step """ class PromptStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ prompt: list[PromptItem] | str """ The prompt to run """ tools: Literal["all"] | list[ToolRefUpdateItem | CreateToolRequest] = "all" """ The tools to use for the prompt """ tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None """ The tool choice for the prompt """ settings: dict[str, Any] | None = None """ Settings for the prompt """ unwrap: StrictBool = False """ Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` """ auto_run_tools: StrictBool = False """ Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. """ disable_cache: StrictBool = False """ Whether to disable caching for the prompt step """ class ReturnStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["return"], Field(json_schema_extra={"readOnly": True})] = "return" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ return_: Annotated[ dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str], Field(alias="return"), ] """ The value to return """ class SetStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["set"], Field(json_schema_extra={"readOnly": True})] = "set" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ set: dict[str, dict[str, Any] | str] """ The value to set """ class SleepFor(BaseModel): model_config = ConfigDict( populate_by_name=True, ) seconds: Annotated[int, Field(ge=0, le=60)] = 0 """ The number of seconds to sleep for """ minutes: Annotated[int, Field(ge=0, le=60)] = 0 """ The number of minutes to sleep for """ hours: Annotated[int, Field(ge=0, le=24)] = 0 """ The number of hours to sleep for """ days: Annotated[int, Field(ge=0, le=30)] = 0 """ The number of days to sleep for """ class SleepStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["sleep"], Field(json_schema_extra={"readOnly": True})] = "sleep" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ sleep: SleepFor """ The duration to sleep for (max 31 days) """ class Source(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["base64"] = "base64" media_type: str data: str """ A valid jinja template. """ class SwitchStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["switch"], Field(json_schema_extra={"readOnly": True})] = "switch" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ switch: Annotated[list[CaseThen], Field(min_length=1)] """ The cond tree """ class SwitchStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ switch: Annotated[list[CaseThenUpdateItem], Field(min_length=1)] """ The cond tree """ class Task(BaseModel): """ Object describing a Task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ metadata: dict[str, Any] | None = None class TaskTool(CreateToolRequest): model_config = ConfigDict( populate_by_name=True, ) inherited: Annotated[StrictBool, Field(json_schema_extra={"readOnly": True})] = False """ Read-only: Whether the tool was inherited or not. Only applies within tasks. """ class Then(BaseModel): """ The steps to run if the condition is true """ model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["map_reduce"], Field(json_schema_extra={"readOnly": True})] = ( "map_reduce" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ over: str """ The variable to iterate over """ map: EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ThenModel(BaseModel): """ The steps to run if the condition is true """ model_config = ConfigDict( populate_by_name=True, ) label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ kind_: str | None = None """ Discriminator property for BaseWorkflowStep. """ over: str """ The variable to iterate over """ map: ( EvaluateStep | ToolCallStep | PromptStepUpdateItem | GetStep | SetStep | LogStep | YieldStep ) """ The steps to run for each iteration """ reduce: str | None = None """ The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. """ initial: Any = [] """ The initial value of the reduce expression """ parallelism: Annotated[int | None, Field(ge=1, le=100)] = None """ Whether to run the reduce expression in parallel and how many items to run in each batch """ class ToolCallStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["tool_call"], Field(json_schema_extra={"readOnly": True})] = ( "tool_call" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ tool: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ The tool to run """ arguments: dict[str, Any] | Literal["_"] = "_" """ The input parameters for the tool (defaults to last step output) """ class ToolRef(BaseModel): """ Reference to a tool """ model_config = ConfigDict( populate_by_name=True, ) ref: ToolRefById | ToolRefByName class ToolRefById(BaseModel): """ Reference to a tool by id """ model_config = ConfigDict( populate_by_name=True, ) id: str | None = None class ToolRefByName(BaseModel): """ Reference to a tool by name """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] = None """ Valid python identifier names """ class ToolRefUpdateItem(BaseModel): """ Reference to a tool """ model_config = ConfigDict( populate_by_name=True, ) class UpdateTaskRequest(BaseModel): """ Payload for updating a task """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=255, min_length=1)] """ The name of the task. """ canonical_name: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ The canonical name of the task. """ description: str = "" """ The description of the task. """ main: Annotated[ list[ EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | Main ], Field(min_length=1), ] """ The entrypoint of the task. """ input_schema: dict[str, Any] | None = None """ The schema for the input to the task. `null` means all inputs are valid. """ tools: list[TaskTool] = [] """ Tools defined specifically for this task not included in the Agent itself. """ inherit_tools: StrictBool = False """ Whether to inherit tools from the parent agent or not. Defaults to false. """ metadata: dict[str, Any] | None = None class WaitForInputInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) info: dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str] """ Any additional info or data """ class WaitForInputStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["wait_for_input"], Field(json_schema_extra={"readOnly": True})] = ( "wait_for_input" ) """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ wait_for_input: WaitForInputInfo """ Any additional info or data """ class YieldStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[Literal["yield"], Field(json_schema_extra={"readOnly": True})] = "yield" """ The kind of step """ label: Annotated[str | None, Field(max_length=120, pattern="^[^0-9]|^[0-9]+[^0-9].*$")] = ( None ) """ The label of this step for referencing it from other steps """ workflow: str """ The subworkflow to run. VALIDATION: Should resolve to a defined subworkflow. """ arguments: ( dict[str, list[str] | dict[str, str] | list[dict[str, str]] | str] | Literal["_"] ) = "_" """ The input parameters for the subworkflow (defaults to last step output) """ IfElseWorkflowStep.model_rebuild() IfElseWorkflowStepUpdateItem.model_rebuild() ================================================ FILE: src/integrations-service/integrations/autogen/Tools.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any, Literal from uuid import UUID from pydantic import ( AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field, StrictBool, ) class AlgoliaSearchArguments(BaseModel): """ Arguments for Algolia Search """ model_config = ConfigDict( populate_by_name=True, ) index_name: str """ The index name to search """ query: str """ The query to search for """ attributes_to_retrieve: list[str] | None = None """ Optional attributes to retrieve """ hits_per_page: Annotated[int, Field(ge=1, le=1000)] = 10 """ Maximum number of hits to return """ class AlgoliaSearchArgumentsUpdate(BaseModel): """ Arguments for Algolia Search """ model_config = ConfigDict( populate_by_name=True, ) index_name: str | None = None """ The index name to search """ query: str | None = None """ The query to search for """ attributes_to_retrieve: list[str] | None = None """ Optional attributes to retrieve """ hits_per_page: Annotated[int, Field(ge=1, le=1000)] = 10 """ Maximum number of hits to return """ class AlgoliaSetup(BaseModel): """ Integration definition for Algolia """ model_config = ConfigDict( populate_by_name=True, ) algolia_application_id: str """ The Algolia Application ID """ algolia_api_key: str """ The Algolia API Key """ class AlgoliaSetupUpdate(BaseModel): """ Integration definition for Algolia """ model_config = ConfigDict( populate_by_name=True, ) algolia_application_id: str | None = None """ The Algolia Application ID """ algolia_api_key: str | None = None """ The Algolia API Key """ class ApiCallDef(BaseModel): """ API call definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal[ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ] """ The HTTP method to use """ url: AnyUrl """ The URL to call """ schema_: Annotated[dict[str, Any] | None, Field(alias="schema")] = None """ The schema of the response """ headers: dict[str, str] | None = None """ The headers to send with the request """ secrets: dict[str, SecretRef] | None = None """ Secret references to use in templates (available only at setup time, not during execution) """ content: str | None = None """ The content as base64 to send with the request """ data: dict[str, Any] | None = None """ The data to send as form data """ files: dict[str, Any] | None = None """ The data to send as files data """ json_: Annotated[dict[str, Any] | None, Field(alias="json")] = None """ JSON body to send with the request """ cookies: dict[str, str] | None = None """ Cookies """ params: str | dict[str, Any] | None = None """ The parameters to send with the request """ params_schema: ParameterSchema | None = None """ The schema of the parameters """ follow_redirects: StrictBool | None = None """ Follow redirects """ timeout: int | None = None """ The timeout for the request """ include_response_content: StrictBool = True """ Whether to include the content in the response """ class ApiCallDefUpdate(BaseModel): """ API call definition """ model_config = ConfigDict( populate_by_name=True, ) method: ( Literal[ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE", ] | None ) = None """ The HTTP method to use """ url: AnyUrl | None = None """ The URL to call """ schema_: Annotated[dict[str, Any] | None, Field(alias="schema")] = None """ The schema of the response """ headers: dict[str, str] | None = None """ The headers to send with the request """ secrets: dict[str, SecretRefUpdate] | None = None """ Secret references to use in templates (available only at setup time, not during execution) """ content: str | None = None """ The content as base64 to send with the request """ data: dict[str, Any] | None = None """ The data to send as form data """ files: dict[str, Any] | None = None """ The data to send as files data """ json_: Annotated[dict[str, Any] | None, Field(alias="json")] = None """ JSON body to send with the request """ cookies: dict[str, str] | None = None """ Cookies """ params: str | dict[str, Any] | None = None """ The parameters to send with the request """ params_schema: ParameterSchemaUpdate | None = None """ The schema of the parameters """ follow_redirects: StrictBool | None = None """ Follow redirects """ timeout: int | None = None """ The timeout for the request """ include_response_content: StrictBool = True """ Whether to include the content in the response """ class ArxivSearchArguments(BaseModel): """ Arguments for Arxiv Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query for searching with Arxiv """ id_list: list[str] | None = None """ The list of Arxiv IDs to search with """ max_results: Annotated[int, Field(ge=1, le=300000)] = 5 """ The maximum number of results to return """ download_pdf: StrictBool = False """ The download the pdf of the results """ sort_by: Literal["relevance", "lastUpdatedDate", "submittedDate"] = "relevance" """ The sort criterion for the results """ sort_order: Literal["ascending", "descending"] = "descending" """ The sort order for the results """ class ArxivSearchArgumentsUpdate(BaseModel): """ Arguments for Arxiv Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query for searching with Arxiv """ id_list: list[str] | None = None """ The list of Arxiv IDs to search with """ max_results: Annotated[int, Field(ge=1, le=300000)] = 5 """ The maximum number of results to return """ download_pdf: StrictBool = False """ The download the pdf of the results """ sort_by: Literal["relevance", "lastUpdatedDate", "submittedDate"] = "relevance" """ The sort criterion for the results """ sort_order: Literal["ascending", "descending"] = "descending" """ The sort order for the results """ class BaseChosenToolCall(BaseModel): """ The response tool value generated by the model """ model_config = ConfigDict( populate_by_name=True, ) type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) """ function: FunctionCallOption | None = None integration: Any | None = None system: Any | None = None api_call: Any | None = None computer_20241022: ChosenComputer20241022 | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: ChosenTextEditor20241022 | None = None bash_20241022: ChosenBash20241022 | None = None id: Annotated[str | None, Field(json_schema_extra={"readOnly": True})] = None class BaseIntegrationDef(BaseModel): """ Integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal[ "dummy", "weather", "wikipedia", "spider", "brave", "browserbase", "email", "mailgun", "remote_browser", "llama_parse", "ffmpeg", "cloudinary", "arxiv", "unstructured", "algolia", "mcp", "google_sheets", ] """ The provider of the integration """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters the integration accepts """ arguments: Any | None = None """ The arguments to pre-apply to the integration call """ class BaseIntegrationDefUpdate(BaseModel): """ Integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: ( Literal[ "dummy", "weather", "wikipedia", "spider", "brave", "browserbase", "email", "mailgun", "remote_browser", "llama_parse", "ffmpeg", "cloudinary", "arxiv", "unstructured", "algolia", "mcp", "google_sheets", ] | None ) = None """ The provider of the integration """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters the integration accepts """ arguments: Any | None = None """ The arguments to pre-apply to the integration call """ class Bash20241022Def(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["bash_20241022"] = "bash_20241022" name: str = "bash" Bash20241022DefUpdate = Bash20241022Def class BraveIntegrationDef(BaseIntegrationDef): """ Brave integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["brave"] = "brave" """ The provider must be "brave" """ method: str | None = None """ The specific method of the integration to call """ setup: BraveSearchSetup | None = None """ The setup parameters for Brave """ arguments: BraveSearchArguments | None = None """ The arguments for Brave Search """ class BraveIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Brave integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["brave"] = "brave" """ The provider must be "brave" """ method: str | None = None """ The specific method of the integration to call """ setup: BraveSearchSetupUpdate | None = None """ The setup parameters for Brave """ arguments: BraveSearchArgumentsUpdate | None = None """ The arguments for Brave Search """ class BraveSearchArguments(BaseModel): """ Arguments for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query for searching with Brave """ class BraveSearchArgumentsUpdate(BaseModel): """ Arguments for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query for searching with Brave """ class BraveSearchSetup(BaseModel): """ Integration definition for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) brave_api_key: str """ The api key for Brave Search """ class BraveSearchSetupUpdate(BaseModel): """ Integration definition for Brave Search """ model_config = ConfigDict( populate_by_name=True, ) brave_api_key: str | None = None """ The api key for Brave Search """ class BrowserbaseCompleteSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str status: Literal["REQUEST_RELEASE"] = "REQUEST_RELEASE" class BrowserbaseCompleteSessionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None status: Literal["REQUEST_RELEASE"] = "REQUEST_RELEASE" class BrowserbaseContextArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str, Field(alias="projectId")] """ The Project ID. Can be found in Settings. """ class BrowserbaseContextArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str | None, Field(alias="projectId")] = None """ The Project ID. Can be found in Settings. """ class BrowserbaseCreateSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str | None, Field(alias="projectId")] = None """ The Project ID. Can be found in Settings. """ extension_id: Annotated[str | None, Field(alias="extensionId")] = None """ The installed Extension ID. See Install Extension from GitHub. """ browser_settings: Annotated[dict[str, Any], Field(alias="browserSettings")] = {} """ Browser settings """ timeout: int = 3600 """ Duration in seconds after which the session will automatically end. Defaults to the Project's defaultTimeout. """ keep_alive: Annotated[StrictBool, Field(alias="keepAlive")] = False """ Set to true to keep the session alive even after disconnections. This is available on the Startup plan only. """ proxies: StrictBool | list[dict[str, Any]] = False """ Proxy configuration. Can be true for default proxy, or an array of proxy configurations. """ class BrowserbaseExtensionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) repository_name: Annotated[str, Field(alias="repositoryName")] """ The GitHub repository name. """ ref: str | None = None """ Ref to install from a branch or tag. """ class BrowserbaseExtensionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) repository_name: Annotated[str | None, Field(alias="repositoryName")] = None """ The GitHub repository name. """ ref: str | None = None """ Ref to install from a branch or tag. """ class BrowserbaseGetSessionArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str class BrowserbaseGetSessionArgumentsUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str | None = None BrowserbaseGetSessionLiveUrlsArguments = BrowserbaseGetSessionArguments BrowserbaseGetSessionLiveUrlsArgumentsUpdate = BrowserbaseGetSessionArgumentsUpdate class BrowserbaseListSessionsArguments(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: Literal["RUNNING", "ERROR", "TIMED_OUT", "COMPLETED"] | None = None """ The status of the sessions to list (Available options: RUNNING, ERROR, TIMED_OUT, COMPLETED) """ class BrowserbaseSetup(BaseModel): """ The setup parameters for the browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str """ API key for the browserbase integration """ project_id: str """ The project ID. Can be found in Settings. """ api_url: str | None = None """ The API URL. Defaults to https://www.browserbase.com """ connect_url: str | None = None """ The connect URL. Defaults to wss://connect.browserbase.com """ class BrowserbaseSetupUpdate(BaseModel): """ The setup parameters for the browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str | None = None """ API key for the browserbase integration """ project_id: str | None = None """ The project ID. Can be found in Settings. """ api_url: str | None = None """ The API URL. Defaults to https://www.browserbase.com """ connect_url: str | None = None """ The connect URL. Defaults to wss://connect.browserbase.com """ class ChosenBash20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str | None = None """ The bash command to run """ restart: StrictBool = False """ Whether to restart the tool """ class ChosenComputer20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: Literal[ "key", "type", "cursor_position", "mouse_move", "left_click", "right_click", "middle_click", "double_click", "screenshot", ] """ The action to perform """ text: str | None = None """ The text to type """ coordinate: list[int] | None = None """ The (x, y) pixel coordinate to move the cursor to """ class ChosenFunctionCall(BaseChosenToolCall): model_config = ConfigDict( populate_by_name=True, ) type: Literal["function"] = "function" function: FunctionCallOption """ The function to call """ class ChosenTextEditor20241022(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: Literal["str_replace", "insert", "view", "undo_edit"] """ The command to run """ path: str """ The path to the file """ file_text: str | None = None """ The content of the file to be created """ insert_line: int | None = None """ The line to insert the new string after """ new_str: str | None = None """ The new string to insert """ old_str: str | None = None """ The string in the file to replace """ view_range: list[int] | None = None """ The line range to view """ class CloudinaryEditArguments(BaseModel): """ Arguments for Cloudinary media edit """ model_config = ConfigDict( populate_by_name=True, ) public_id: str """ The file Public ID in Cloudinary """ transformation: list[dict[str, Any]] """ The transformation to apply to the file """ return_base64: StrictBool = False """ Return base64 encoded file """ class CloudinaryEditArgumentsUpdate(BaseModel): """ Arguments for Cloudinary media edit """ model_config = ConfigDict( populate_by_name=True, ) public_id: str | None = None """ The file Public ID in Cloudinary """ transformation: list[dict[str, Any]] | None = None """ The transformation to apply to the file """ return_base64: StrictBool = False """ Return base64 encoded file """ class CloudinarySetup(BaseModel): """ Setup parameters for Cloudinary integration """ model_config = ConfigDict( populate_by_name=True, ) cloudinary_api_key: str """ The API key for Cloudinary """ cloudinary_api_secret: str """ The API secret for Cloudinary """ cloudinary_cloud_name: str """ The Cloud name for Cloudinary """ params: dict[str, Any] | None = None """ Additional parameters for the Cloudinary API """ class CloudinarySetupUpdate(BaseModel): """ Setup parameters for Cloudinary integration """ model_config = ConfigDict( populate_by_name=True, ) cloudinary_api_key: str | None = None """ The API key for Cloudinary """ cloudinary_api_secret: str | None = None """ The API secret for Cloudinary """ cloudinary_cloud_name: str | None = None """ The Cloud name for Cloudinary """ params: dict[str, Any] | None = None """ Additional parameters for the Cloudinary API """ class CloudinaryUploadArguments(BaseModel): """ Arguments for Cloudinary media upload """ model_config = ConfigDict( populate_by_name=True, ) file: str """ The URL of the file upload """ return_base64: StrictBool = False """ Return base64 encoded file """ public_id: str | None = None """ Optional public ID for the uploaded file """ upload_params: dict[str, Any] | None = None """ Optional upload parameters """ class CloudinaryUploadArgumentsUpdate(BaseModel): """ Arguments for Cloudinary media upload """ model_config = ConfigDict( populate_by_name=True, ) file: str | None = None """ The URL of the file upload """ return_base64: StrictBool = False """ Return base64 encoded file """ public_id: str | None = None """ Optional public ID for the uploaded file """ upload_params: dict[str, Any] | None = None """ Optional upload parameters """ class Computer20241022Def(BaseModel): """ Anthropic new tools """ model_config = ConfigDict( populate_by_name=True, ) type: Literal["computer_20241022"] = "computer_20241022" name: str = "computer" display_width_px: Annotated[int, Field(ge=600)] = 1024 """ The display width in pixels """ display_height_px: Annotated[int, Field(ge=400)] = 768 """ The display height in pixels """ display_number: Annotated[int, Field(ge=1, le=10)] = 1 """ The display number to use """ Computer20241022DefUpdate = Computer20241022Def class CreateToolRequest(BaseModel): """ Payload for creating a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None class DummyIntegrationDef(BaseIntegrationDef): model_config = ConfigDict( populate_by_name=True, ) provider: Literal["dummy"] = "dummy" class DummyIntegrationDefUpdate(BaseIntegrationDefUpdate): model_config = ConfigDict( populate_by_name=True, ) provider: Literal["dummy"] = "dummy" class EmailArguments(BaseModel): """ Arguments for Email sending """ model_config = ConfigDict( populate_by_name=True, ) to: str """ The email address to send the email to """ from_: Annotated[str, Field(alias="from")] """ The email address to send the email from """ subject: str """ The subject of the email """ body: str """ The body of the email """ class EmailArgumentsUpdate(BaseModel): """ Arguments for Email sending """ model_config = ConfigDict( populate_by_name=True, ) to: str | None = None """ The email address to send the email to """ from_: Annotated[str | None, Field(alias="from")] = None """ The email address to send the email from """ subject: str | None = None """ The subject of the email """ body: str | None = None """ The body of the email """ class EmailIntegrationDef(BaseIntegrationDef): """ Email integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["email"] = "email" """ The provider must be "email" """ method: str | None = None """ The specific method of the integration to call """ setup: EmailSetup | None = None """ The setup parameters for Email """ arguments: EmailArguments | None = None """ The arguments for Email sending """ class EmailIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Email integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["email"] = "email" """ The provider must be "email" """ method: str | None = None """ The specific method of the integration to call """ setup: EmailSetupUpdate | None = None """ The setup parameters for Email """ arguments: EmailArgumentsUpdate | None = None """ The arguments for Email sending """ class EmailSetup(BaseModel): """ Setup parameters for Email integration """ model_config = ConfigDict( populate_by_name=True, ) host: str """ The host of the email server """ port: int """ The port of the email server """ user: str """ The username of the email server """ password: str """ The password of the email server """ class EmailSetupUpdate(BaseModel): """ Setup parameters for Email integration """ model_config = ConfigDict( populate_by_name=True, ) host: str | None = None """ The host of the email server """ port: int | None = None """ The port of the email server """ user: str | None = None """ The username of the email server """ password: str | None = None """ The password of the email server """ class FfmpegIntegrationDef(BaseIntegrationDef): """ Ffmpeg integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["ffmpeg"] = "ffmpeg" """ The provider must be "ffmpeg" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Ffmpeg """ arguments: FfmpegSearchArguments | None = None """ The arguments for Ffmpeg Search """ class FfmpegIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Ffmpeg integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["ffmpeg"] = "ffmpeg" """ The provider must be "ffmpeg" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Ffmpeg """ arguments: FfmpegSearchArgumentsUpdate | None = None """ The arguments for Ffmpeg Search """ class FfmpegSearchArguments(BaseModel): """ Arguments for Ffmpeg CMD """ model_config = ConfigDict( populate_by_name=True, ) cmd: str """ The bash command string """ file: str | list[str] | None = None """ The base64 string of the file """ class FfmpegSearchArgumentsUpdate(BaseModel): """ Arguments for Ffmpeg CMD """ model_config = ConfigDict( populate_by_name=True, ) cmd: str | None = None """ The bash command string """ file: str | list[str] | None = None """ The base64 string of the file """ class FunctionCallOption(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str """ The name of the function """ arguments: str | None = None """ The parameters to pass to the function """ class FunctionDef(BaseModel): """ Function definition """ model_config = ConfigDict( populate_by_name=True, ) name: Any | None = None """ DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. """ description: Any | None = None """ DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. """ parameters: dict[str, Any] | None = None """ The parameters the function accepts """ class GoogleSheetsAppendArguments(BaseModel): """ Arguments for appending values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to append to """ range: str """ The A1 notation of the range to start appending from """ values: list[list] """ The values to append (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "INSERT_ROWS" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsAppendArgumentsUpdate(BaseModel): """ Arguments for appending values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to append to """ range: str | None = None """ The A1 notation of the range to start appending from """ values: list[list] | None = None """ The values to append (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "INSERT_ROWS" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsBatchReadArguments(BaseModel): """ Arguments for batch reading values from multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to read from """ ranges: list[str] """ The A1 notation of the ranges to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = "FORMATTED_STRING" """ How dates, times, and durations should be represented """ class GoogleSheetsBatchReadArgumentsUpdate(BaseModel): """ Arguments for batch reading values from multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to read from """ ranges: list[str] | None = None """ The A1 notation of the ranges to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = "FORMATTED_STRING" """ How dates, times, and durations should be represented """ class GoogleSheetsBatchWriteArguments(BaseModel): """ Arguments for batch updating values in multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to write to """ data: list[GoogleSheetsValueRange] """ The data to write to each range """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsBatchWriteArgumentsUpdate(BaseModel): """ Arguments for batch updating values in multiple ranges """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to write to """ data: list[GoogleSheetsValueRange] | None = None """ The data to write to each range """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsClearArguments(BaseModel): """ Arguments for clearing values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to clear values from """ range: str """ The A1 notation of the range to clear """ class GoogleSheetsClearArgumentsUpdate(BaseModel): """ Arguments for clearing values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to clear values from """ range: str | None = None """ The A1 notation of the range to clear """ class GoogleSheetsIntegrationDef(BaseIntegrationDef): """ Google Sheets integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["google_sheets"] = "google_sheets" """ The provider must be "google_sheets" """ method: ( Literal[ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write", ] | None ) = None """ The specific method of the integration to call """ setup: GoogleSheetsSetup | None = None """ The setup parameters for Google Sheets """ arguments: ( GoogleSheetsReadArguments | GoogleSheetsWriteArguments | GoogleSheetsAppendArguments | GoogleSheetsClearArguments | GoogleSheetsBatchReadArguments | GoogleSheetsBatchWriteArguments | None ) = None """ The arguments for the method """ class GoogleSheetsIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Google Sheets integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["google_sheets"] = "google_sheets" """ The provider must be "google_sheets" """ method: ( Literal[ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write", ] | None ) = None """ The specific method of the integration to call """ setup: GoogleSheetsSetupUpdate | None = None """ The setup parameters for Google Sheets """ arguments: ( GoogleSheetsReadArgumentsUpdate | GoogleSheetsWriteArgumentsUpdate | GoogleSheetsAppendArgumentsUpdate | GoogleSheetsClearArgumentsUpdate | GoogleSheetsBatchReadArgumentsUpdate | GoogleSheetsBatchWriteArgumentsUpdate | None ) = None """ The arguments for the method """ class GoogleSheetsReadArguments(BaseModel): """ Arguments for reading values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to read from """ range: str """ The A1 notation of the range to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = "FORMATTED_STRING" """ How dates, times, and durations should be represented """ class GoogleSheetsReadArgumentsUpdate(BaseModel): """ Arguments for reading values from a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to read from """ range: str | None = None """ The A1 notation of the range to read """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension that results should use """ value_render_option: Literal["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"] = ( "FORMATTED_VALUE" ) """ How values should be represented in the output """ date_time_render_option: Literal["SERIAL_NUMBER", "FORMATTED_STRING"] = "FORMATTED_STRING" """ How dates, times, and durations should be represented """ class GoogleSheetsSetup(BaseModel): """ Setup parameters for Google Sheets integration """ model_config = ConfigDict( populate_by_name=True, ) use_julep_service: StrictBool """ Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. """ service_account_json: str | None = None """ Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. """ default_retry_count: Annotated[int, Field(ge=1, le=10)] = 3 """ Default number of retry attempts for API calls """ class GoogleSheetsSetupUpdate(BaseModel): """ Setup parameters for Google Sheets integration """ model_config = ConfigDict( populate_by_name=True, ) use_julep_service: StrictBool | None = None """ Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. """ service_account_json: str | None = None """ Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. """ default_retry_count: Annotated[int, Field(ge=1, le=10)] = 3 """ Default number of retry attempts for API calls """ class GoogleSheetsValueRange(BaseModel): """ Represents a range of values to write """ model_config = ConfigDict( populate_by_name=True, ) range: str """ The A1 notation of the range """ values: list[list] """ The values for the range (2D array) """ major_dimension: Literal["ROWS", "COLUMNS"] = "ROWS" """ The major dimension of the values """ class GoogleSheetsWriteArguments(BaseModel): """ Arguments for writing values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str """ The ID of the spreadsheet to write to """ range: str """ The A1 notation of the range to write to """ values: list[list] """ The values to write (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "OVERWRITE" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class GoogleSheetsWriteArgumentsUpdate(BaseModel): """ Arguments for writing values to a spreadsheet """ model_config = ConfigDict( populate_by_name=True, ) spreadsheet_id: str | None = None """ The ID of the spreadsheet to write to """ range: str | None = None """ The A1 notation of the range to write to """ values: list[list] | None = None """ The values to write (2D array) """ value_input_option: Literal["RAW", "USER_ENTERED"] = "USER_ENTERED" """ How the input data should be interpreted """ insert_data_option: Literal["OVERWRITE", "INSERT_ROWS"] = "OVERWRITE" """ How the input data should be inserted """ include_values_in_response: StrictBool = False """ Whether to include the values in the response """ class LlamaParseFetchArguments(BaseModel): """ Arguments for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | list[str] """ The base64 string of the file, which can be a single string or a list of strings """ params: dict[str, Any] | None = None """ Optional upload parameters """ base64: StrictBool = False """ The input file is base64 """ class LlamaParseFetchArgumentsUpdate(BaseModel): """ Arguments for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | list[str] | None = None """ The base64 string of the file, which can be a single string or a list of strings """ params: dict[str, Any] | None = None """ Optional upload parameters """ base64: StrictBool = False """ The input file is base64 """ class LlamaParseIntegrationDef(BaseIntegrationDef): """ LlamaParse integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["llama_parse"] = "llama_parse" """ The provider must be "LlamaParseSetup" """ method: str | None = None """ The specific method of the integration to call """ setup: LlamaParseSetup | None = None """ The setup parameters for LlamaParse """ arguments: LlamaParseFetchArguments | None = None """ The arguments for LlamaParse """ class LlamaParseIntegrationDefUpdate(BaseIntegrationDefUpdate): """ LlamaParse integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["llama_parse"] = "llama_parse" """ The provider must be "LlamaParseSetup" """ method: str | None = None """ The specific method of the integration to call """ setup: LlamaParseSetupUpdate | None = None """ The setup parameters for LlamaParse """ arguments: LlamaParseFetchArgumentsUpdate | None = None """ The arguments for LlamaParse """ class LlamaParseSetup(BaseModel): """ Setup parameters for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) llamaparse_api_key: str """ The API key for LlamaParse """ params: dict[str, Any] | None = None """ Optional upload parameters """ class LlamaParseSetupUpdate(BaseModel): """ Setup parameters for LlamaParse integration """ model_config = ConfigDict( populate_by_name=True, ) llamaparse_api_key: str | None = None """ The API key for LlamaParse """ params: dict[str, Any] | None = None """ Optional upload parameters """ class MailgunIntegrationDef(BaseIntegrationDef): """ Mailgun integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mailgun"] = "mailgun" """ The provider must be "mailgun" """ method: Literal["send_email"] | None = None """ The specific method of the integration to call """ setup: MailgunSetup | None = None """ The setup parameters for Mailgun """ arguments: MailgunSendEmailArguments | None = None """ The arguments for mailgun methods """ class MailgunIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Mailgun integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mailgun"] = "mailgun" """ The provider must be "mailgun" """ method: Literal["send_email"] | None = None """ The specific method of the integration to call """ setup: MailgunSetupUpdate | None = None """ The setup parameters for Mailgun """ arguments: MailgunSendEmailArgumentsUpdate | None = None """ The arguments for mailgun methods """ class MailgunSendEmailArguments(BaseModel): """ Arguments for mailgun.send_email method """ model_config = ConfigDict( populate_by_name=True, ) to: str """ The email address to send the email to """ from_: Annotated[str, Field(alias="from")] """ The email address to send the email from """ subject: str """ The subject of the email """ body: str """ The body of the email """ cc: str | None = None """ Optional carbon copy recipients (comma-separated email addresses) """ bcc: str | None = None """ Optional blind carbon copy recipients (comma-separated email addresses) """ class MailgunSendEmailArgumentsUpdate(BaseModel): """ Arguments for mailgun.send_email method """ model_config = ConfigDict( populate_by_name=True, ) to: str | None = None """ The email address to send the email to """ from_: Annotated[str | None, Field(alias="from")] = None """ The email address to send the email from """ subject: str | None = None """ The subject of the email """ body: str | None = None """ The body of the email """ cc: str | None = None """ Optional carbon copy recipients (comma-separated email addresses) """ bcc: str | None = None """ Optional blind carbon copy recipients (comma-separated email addresses) """ class MailgunSetup(BaseModel): """ Setup parameters for Mailgun integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str """ The API key for the Mailgun integration """ class MailgunSetupUpdate(BaseModel): """ Setup parameters for Mailgun integration """ model_config = ConfigDict( populate_by_name=True, ) api_key: str | None = None """ The API key for the Mailgun integration """ class McpCallToolArguments(BaseModel): """ Arguments to call a named tool on the MCP server """ model_config = ConfigDict( populate_by_name=True, ) tool_name: str """ The MCP tool name to invoke """ arguments: dict[str, Any] = {} """ JSON-serializable arguments to pass to the MCP tool """ timeout_seconds: int = 60 """ Optional per-call timeout in seconds """ class McpCallToolArgumentsUpdate(BaseModel): """ Arguments to call a named tool on the MCP server """ model_config = ConfigDict( populate_by_name=True, ) tool_name: str | None = None """ The MCP tool name to invoke """ arguments: dict[str, Any] = {} """ JSON-serializable arguments to pass to the MCP tool """ timeout_seconds: int = 60 """ Optional per-call timeout in seconds """ class McpIntegrationDef(BaseIntegrationDef): """ MCP integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mcp"] = "mcp" """ The provider must be "mcp" """ method: str | None = None """ The specific method of the integration to call """ setup: McpSetup | None = None """ The setup parameters for MCP """ arguments: McpCallToolArguments | McpListToolsArguments | None = None """ The arguments for MCP methods """ class McpIntegrationDefUpdate(BaseIntegrationDefUpdate): """ MCP integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["mcp"] = "mcp" """ The provider must be "mcp" """ method: str | None = None """ The specific method of the integration to call """ setup: McpSetupUpdate | None = None """ The setup parameters for MCP """ arguments: McpCallToolArgumentsUpdate | McpListToolsArgumentsUpdate | None = None """ The arguments for MCP methods """ class McpListToolsArguments(BaseModel): """ Arguments to list available tools """ model_config = ConfigDict( populate_by_name=True, ) dummy: str = "dummy" McpListToolsArgumentsUpdate = McpListToolsArguments class McpSetup(BaseModel): """ Setup parameters for MCP integration """ model_config = ConfigDict( populate_by_name=True, ) transport: Literal["sse", "http"] """ Transport used to connect to the MCP server """ command: str | None = None """ (stdio) Executable or command to launch the server """ args: list[str] = [] """ (stdio) Arguments for the server command """ cwd: str | None = None """ (stdio) Working directory for the server process """ env: dict[str, str] = {} """ (stdio) Environment variables for the server process """ http_url: AnyUrl | None = None """ (http) Base URL for the MCP server (usually ends with /mcp) """ http_headers: dict[str, str] = {} """ (http) Optional HTTP headers to include (e.g., Authorization) """ class McpSetupUpdate(BaseModel): """ Setup parameters for MCP integration """ model_config = ConfigDict( populate_by_name=True, ) transport: Literal["sse", "http"] | None = None """ Transport used to connect to the MCP server """ command: str | None = None """ (stdio) Executable or command to launch the server """ args: list[str] = [] """ (stdio) Arguments for the server command """ cwd: str | None = None """ (stdio) Working directory for the server process """ env: dict[str, str] = {} """ (stdio) Environment variables for the server process """ http_url: AnyUrl | None = None """ (http) Base URL for the MCP server (usually ends with /mcp) """ http_headers: dict[str, str] = {} """ (http) Optional HTTP headers to include (e.g., Authorization) """ class NamedToolChoice(BaseModel): model_config = ConfigDict( populate_by_name=True, ) function: FunctionCallOption | None = None class ParameterSchema(BaseModel): """ JSON Schema for API call parameters """ model_config = ConfigDict( populate_by_name=True, ) type: str = "object" """ Schema type (usually 'object') """ properties: dict[str, PropertyDefinition] """ Properties definition for parameters """ required: list[str] = [] """ List of required property names """ additional_properties: Annotated[StrictBool | None, Field(alias="additionalProperties")] = ( None ) """ Whether to allow additional properties """ class ParameterSchemaUpdate(BaseModel): """ JSON Schema for API call parameters """ model_config = ConfigDict( populate_by_name=True, ) type: str = "object" """ Schema type (usually 'object') """ properties: dict[str, PropertyDefinitionUpdate] | None = None """ Properties definition for parameters """ required: list[str] = [] """ List of required property names """ additional_properties: Annotated[StrictBool | None, Field(alias="additionalProperties")] = ( None ) """ Whether to allow additional properties """ class PatchToolRequest(BaseModel): """ Payload for patching a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str | None, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] = None """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: ( Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] | None ) = None """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDefUpdate | BraveIntegrationDefUpdate | EmailIntegrationDefUpdate | SpiderIntegrationDefUpdate | WikipediaIntegrationDefUpdate | WeatherIntegrationDefUpdate | MailgunIntegrationDefUpdate | BrowserbaseContextIntegrationDefUpdate | BrowserbaseExtensionIntegrationDefUpdate | BrowserbaseListSessionsIntegrationDefUpdate | BrowserbaseCreateSessionIntegrationDefUpdate | BrowserbaseGetSessionIntegrationDefUpdate | BrowserbaseCompleteSessionIntegrationDefUpdate | BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate | RemoteBrowserIntegrationDefUpdate | LlamaParseIntegrationDefUpdate | FfmpegIntegrationDefUpdate | CloudinaryUploadIntegrationDefUpdate | CloudinaryEditIntegrationDefUpdate | ArxivIntegrationDefUpdate | UnstructuredIntegrationDefUpdate | AlgoliaIntegrationDefUpdate | McpIntegrationDefUpdate | GoogleSheetsIntegrationDefUpdate | None ) = None """ The integration to call """ system: SystemDefUpdate | None = None """ The system to call """ api_call: ApiCallDefUpdate | None = None """ The API call to make """ computer_20241022: Computer20241022DefUpdate | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022DefUpdate | None = None bash_20241022: Bash20241022DefUpdate | None = None class PropertyDefinition(BaseModel): """ Property definition for parameter schema """ model_config = ConfigDict( populate_by_name=True, ) type: str """ Type of the property """ description: str | None = None """ Description of the property """ enum: list[str] | None = None """ Enum values if applicable """ items: PropertyDefinition | None = None """ Items definition for array types """ class PropertyDefinitionUpdate(BaseModel): """ Property definition for parameter schema """ model_config = ConfigDict( populate_by_name=True, ) type: str | None = None """ Type of the property """ description: str | None = None """ Description of the property """ enum: list[str] | None = None """ Enum values if applicable """ items: PropertyDefinitionUpdate | None = None """ Items definition for array types """ class RemoteBrowserArguments(BaseModel): """ The arguments for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ action: Literal[ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh", ] """ The action to perform """ text: str | None = None """ The text """ coordinate: list | None = None """ The coordinate to move the mouse to """ class RemoteBrowserArgumentsUpdate(BaseModel): """ The arguments for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ action: ( Literal[ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh", ] | None ) = None """ The action to perform """ text: str | None = None """ The text """ coordinate: list | None = None """ The coordinate to move the mouse to """ class RemoteBrowserIntegrationDef(BaseIntegrationDef): """ The integration definition for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["remote_browser"] = "remote_browser" setup: RemoteBrowserSetup method: Literal["perform_action"] = "perform_action" arguments: RemoteBrowserArguments | None = None class RemoteBrowserIntegrationDefUpdate(BaseIntegrationDefUpdate): """ The integration definition for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["remote_browser"] = "remote_browser" setup: RemoteBrowserSetup | None = None method: Literal["perform_action"] = "perform_action" arguments: RemoteBrowserArgumentsUpdate | None = None class RemoteBrowserSetup(BaseModel): """ The setup parameters for the remote browser """ model_config = ConfigDict( populate_by_name=True, ) connect_url: str | None = None """ The connection URL for the remote browser """ width: int | None = None """ The width of the browser """ height: int | None = None """ The height of the browser """ class SecretRef(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str """ The name of the secret to reference """ class SecretRefUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str | None = None """ The name of the secret to reference """ class SpiderFetchArguments(BaseModel): """ Arguments for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) url: AnyUrl """ The URL to fetch data from """ content_type: Literal[ "application/json", "text/csv", "application/xml", "application/jsonl" ] = "application/json" """ The content type to return """ params: dict[str, Any] | None = None """ Additional parameters for the Spider API """ class SpiderFetchArgumentsUpdate(BaseModel): """ Arguments for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) url: AnyUrl | None = None """ The URL to fetch data from """ content_type: Literal[ "application/json", "text/csv", "application/xml", "application/jsonl" ] = "application/json" """ The content type to return """ params: dict[str, Any] | None = None """ Additional parameters for the Spider API """ class SpiderIntegrationDef(BaseIntegrationDef): """ Spider integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["spider"] = "spider" """ The provider must be "spider" """ method: Literal["crawl", "links", "screenshot", "search"] | None = None """ The specific method of the integration to call """ setup: SpiderSetup | None = None """ The setup parameters for Spider """ arguments: SpiderFetchArguments | None = None """ The arguments for Spider """ class SpiderIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Spider integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["spider"] = "spider" """ The provider must be "spider" """ method: Literal["crawl", "links", "screenshot", "search"] | None = None """ The specific method of the integration to call """ setup: SpiderSetupUpdate | None = None """ The setup parameters for Spider """ arguments: SpiderFetchArgumentsUpdate | None = None """ The arguments for Spider """ class SpiderSetup(BaseModel): """ Setup parameters for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) spider_api_key: str """ The API key for Spider """ class SpiderSetupUpdate(BaseModel): """ Setup parameters for Spider integration """ model_config = ConfigDict( populate_by_name=True, ) spider_api_key: str | None = None """ The API key for Spider """ class SystemDef(BaseModel): """ System definition """ model_config = ConfigDict( populate_by_name=True, ) resource: Literal["agent", "user", "task", "execution", "doc", "session", "job"] """ Resource is the name of the resource to use """ operation: Literal[ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list", ] """ Operation is the name of the operation to perform """ resource_id: UUID | None = None """ Resource id (if applicable) """ subresource: Literal["tool", "doc", "execution", "transition"] | None = None """ Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ The arguments to pre-apply to the system call """ class SystemDefUpdate(BaseModel): """ System definition """ model_config = ConfigDict( populate_by_name=True, ) resource: Literal["agent", "user", "task", "execution", "doc", "session", "job"] | None = ( None ) """ Resource is the name of the resource to use """ operation: ( Literal[ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list", ] | None ) = None """ Operation is the name of the operation to perform """ resource_id: UUID | None = None """ Resource id (if applicable) """ subresource: Literal["tool", "doc", "execution", "transition"] | None = None """ Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ The arguments to pre-apply to the system call """ class TextEditor20241022Def(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Literal["text_editor_20241022"] = "text_editor_20241022" name: str = "str_replace_editor" TextEditor20241022DefUpdate = TextEditor20241022Def class Tool(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] class ToolResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str output: dict[str, Any] """ The output of the tool """ class UnstructuredIntegrationDef(BaseIntegrationDef): """ Unstructured integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["unstructured"] = "unstructured" """ The provider must be "unstructured" """ method: str | None = None """ The specific method of the integration to call """ setup: UnstructuredSetup | None = None """ The setup parameters for Unstructured """ arguments: UnstructuredPartitionArguments | None = None """ The arguments for Unstructured """ class UnstructuredIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Unstructured integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["unstructured"] = "unstructured" """ The provider must be "unstructured" """ method: str | None = None """ The specific method of the integration to call """ setup: UnstructuredSetupUpdate | None = None """ The setup parameters for Unstructured """ arguments: UnstructuredPartitionArgumentsUpdate | None = None """ The arguments for Unstructured """ class UnstructuredPartitionArguments(BaseModel): """ Arguments for Unstructured partition integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str """ The base64 string of the file, which can be a single string or a list of strings """ partition_params: dict[str, Any] | None = None """ Additional partition parameters """ class UnstructuredPartitionArgumentsUpdate(BaseModel): """ Arguments for Unstructured partition integration """ model_config = ConfigDict( populate_by_name=True, ) filename: str | None = None """ File Name. If not provided, a random name will be generated. """ file: str | None = None """ The base64 string of the file, which can be a single string or a list of strings """ partition_params: dict[str, Any] | None = None """ Additional partition parameters """ class UnstructuredSetup(BaseModel): """ Setup parameters for Unstructured integration """ model_config = ConfigDict( populate_by_name=True, ) unstructured_api_key: str """ The API key for Unstructured.io """ server_url: str | None = None """ Optional server endpoint URL """ server: str | None = None """ The server by name to use for all methods """ url_params: dict[str, Any] | None = None """ Parameters to optionally template the server URL with """ retry_config: dict[str, Any] | None = None """ The retry configuration to use for all supported methods """ timeout_ms: int | None = None """ Optional request timeout applied to each operation in milliseconds """ class UnstructuredSetupUpdate(BaseModel): """ Setup parameters for Unstructured integration """ model_config = ConfigDict( populate_by_name=True, ) unstructured_api_key: str | None = None """ The API key for Unstructured.io """ server_url: str | None = None """ Optional server endpoint URL """ server: str | None = None """ The server by name to use for all methods """ url_params: dict[str, Any] | None = None """ Parameters to optionally template the server URL with """ retry_config: dict[str, Any] | None = None """ The retry configuration to use for all supported methods """ timeout_ms: int | None = None """ Optional request timeout applied to each operation in milliseconds """ class UpdateToolRequest(BaseModel): """ Payload for updating a tool """ model_config = ConfigDict( populate_by_name=True, ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ type: Literal[ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022", ] """ Type of the tool """ description: str | None = None """ Description of the tool """ function: FunctionDef | None = None """ The function to call """ integration: ( DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef | None ) = None """ The integration to call """ system: SystemDef | None = None """ The system to call """ api_call: ApiCallDef | None = None """ The API call to make """ computer_20241022: Computer20241022Def | None = None """ (Alpha) Anthropic new tools """ text_editor_20241022: TextEditor20241022Def | None = None bash_20241022: Bash20241022Def | None = None class WeatherGetArguments(BaseModel): """ Arguments for Weather """ model_config = ConfigDict( populate_by_name=True, ) location: str """ The location for which to fetch weather data """ class WeatherGetArgumentsUpdate(BaseModel): """ Arguments for Weather """ model_config = ConfigDict( populate_by_name=True, ) location: str | None = None """ The location for which to fetch weather data """ class WeatherIntegrationDef(BaseIntegrationDef): """ Weather integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["weather"] = "weather" """ The provider must be "weather" """ method: str | None = None """ The specific method of the integration to call """ setup: WeatherSetup | None = None """ The setup parameters for Weather """ arguments: WeatherGetArguments | None = None """ The arguments for Weather """ class WeatherIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Weather integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["weather"] = "weather" """ The provider must be "weather" """ method: str | None = None """ The specific method of the integration to call """ setup: WeatherSetupUpdate | None = None """ The setup parameters for Weather """ arguments: WeatherGetArgumentsUpdate | None = None """ The arguments for Weather """ class WeatherSetup(BaseModel): """ Integration definition for Weather """ model_config = ConfigDict( populate_by_name=True, ) openweathermap_api_key: str """ The api key for OpenWeatherMap """ class WeatherSetupUpdate(BaseModel): """ Integration definition for Weather """ model_config = ConfigDict( populate_by_name=True, ) openweathermap_api_key: str | None = None """ The api key for OpenWeatherMap """ class WikipediaIntegrationDef(BaseIntegrationDef): """ Wikipedia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["wikipedia"] = "wikipedia" """ The provider must be "wikipedia" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Wikipedia """ arguments: WikipediaSearchArguments | None = None """ The arguments for Wikipedia Search """ class WikipediaIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Wikipedia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["wikipedia"] = "wikipedia" """ The provider must be "wikipedia" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Wikipedia """ arguments: WikipediaSearchArgumentsUpdate | None = None """ The arguments for Wikipedia Search """ class WikipediaSearchArguments(BaseModel): """ Arguments for Wikipedia Search """ model_config = ConfigDict( populate_by_name=True, ) query: str """ The search query string """ load_max_docs: Annotated[int, Field(ge=1, le=10)] = 2 """ Maximum number of documents to load """ class WikipediaSearchArgumentsUpdate(BaseModel): """ Arguments for Wikipedia Search """ model_config = ConfigDict( populate_by_name=True, ) query: str | None = None """ The search query string """ load_max_docs: Annotated[int, Field(ge=1, le=10)] = 2 """ Maximum number of documents to load """ class AlgoliaIntegrationDef(BaseIntegrationDef): """ Algolia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["algolia"] = "algolia" """ The provider must be "algolia" """ method: str | None = None """ The specific method of the integration to call """ setup: AlgoliaSetup | None = None """ The setup parameters for Algolia """ arguments: AlgoliaSearchArguments | None = None """ The arguments for Algolia """ class AlgoliaIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Algolia integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["algolia"] = "algolia" """ The provider must be "algolia" """ method: str | None = None """ The specific method of the integration to call """ setup: AlgoliaSetupUpdate | None = None """ The setup parameters for Algolia """ arguments: AlgoliaSearchArgumentsUpdate | None = None """ The arguments for Algolia """ class ArxivIntegrationDef(BaseIntegrationDef): """ Arxiv integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["arxiv"] = "arxiv" """ The provider must be "arxiv" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Arxiv """ arguments: ArxivSearchArguments | None = None """ The arguments for Arxiv Search """ class ArxivIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Arxiv integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["arxiv"] = "arxiv" """ The provider must be "arxiv" """ method: str | None = None """ The specific method of the integration to call """ setup: Any | None = None """ The setup parameters for Arxiv """ arguments: ArxivSearchArgumentsUpdate | None = None """ The arguments for Arxiv Search """ class BaseBrowserbaseIntegrationDef(BaseIntegrationDef): """ The base definition for a browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["browserbase"] = "browserbase" setup: BrowserbaseSetup | None = None method: ( Literal[ "get_live_urls", "list_sessions", "create_session", "get_session", "complete_session", "get_connect_url", "install_extension_from_github", "create_context", "get_session_downloads", "get_logs", "get_recordings", ] | None ) = None arguments: Any | None = None class BaseBrowserbaseIntegrationDefUpdate(BaseIntegrationDefUpdate): """ The base definition for a browserbase integration """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["browserbase"] = "browserbase" setup: BrowserbaseSetupUpdate | None = None method: ( Literal[ "get_live_urls", "list_sessions", "create_session", "get_session", "complete_session", "get_connect_url", "install_extension_from_github", "create_context", "get_session_downloads", "get_logs", "get_recordings", ] | None ) = None arguments: Any | None = None class BaseCloudinaryIntegrationDef(BaseIntegrationDef): """ Base Cloudinary integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["cloudinary"] = "cloudinary" setup: CloudinarySetup | None = None method: Literal["media_upload", "media_edit"] | None = None class BaseCloudinaryIntegrationDefUpdate(BaseIntegrationDefUpdate): """ Base Cloudinary integration definition """ model_config = ConfigDict( populate_by_name=True, ) provider: Literal["cloudinary"] = "cloudinary" setup: CloudinarySetupUpdate | None = None method: Literal["media_upload", "media_edit"] | None = None class BrowserbaseCompleteSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase complete session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["complete_session"] = "complete_session" arguments: BrowserbaseCompleteSessionArguments | None = None class BrowserbaseCompleteSessionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase complete session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["complete_session"] = "complete_session" arguments: BrowserbaseCompleteSessionArgumentsUpdate | None = None class BrowserbaseContextIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase context provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_context"] = "create_context" """ The specific method of the integration to call """ arguments: BrowserbaseContextArguments | None = None """ The arguments for the method """ class BrowserbaseContextIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase context provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_context"] = "create_context" """ The specific method of the integration to call """ arguments: BrowserbaseContextArgumentsUpdate | None = None """ The arguments for the method """ class BrowserbaseCreateSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase create session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_session"] = "create_session" arguments: BrowserbaseCreateSessionArguments | None = None """ The arguments for the method """ class BrowserbaseCreateSessionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase create session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["create_session"] = "create_session" arguments: BrowserbaseCreateSessionArguments | None = None """ The arguments for the method """ class BrowserbaseExtensionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase extension provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["install_extension_from_github"] | None = None """ The specific method of the integration to call """ arguments: BrowserbaseExtensionArguments | None = None """ The arguments for the method """ class BrowserbaseExtensionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase extension provider """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["install_extension_from_github"] | None = None """ The specific method of the integration to call """ arguments: BrowserbaseExtensionArgumentsUpdate | None = None """ The arguments for the method """ class BrowserbaseGetSessionIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase get session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_session"] = "get_session" arguments: BrowserbaseGetSessionArguments | None = None class BrowserbaseGetSessionIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase get session integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_session"] = "get_session" arguments: BrowserbaseGetSessionArgumentsUpdate | None = None class BrowserbaseGetSessionLiveUrlsIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase get session live urls integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_live_urls"] = "get_live_urls" arguments: BrowserbaseGetSessionLiveUrlsArguments | None = None class BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase get session live urls integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["get_live_urls"] = "get_live_urls" arguments: BrowserbaseGetSessionLiveUrlsArgumentsUpdate | None = None class BrowserbaseListSessionsIntegrationDef(BaseBrowserbaseIntegrationDef): """ browserbase list sessions integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["list_sessions"] = "list_sessions" """ The specific method of the integration to call """ arguments: BrowserbaseListSessionsArguments | None = None """ The arguments for the method """ class BrowserbaseListSessionsIntegrationDefUpdate(BaseBrowserbaseIntegrationDefUpdate): """ browserbase list sessions integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["list_sessions"] = "list_sessions" """ The specific method of the integration to call """ arguments: BrowserbaseListSessionsArguments | None = None """ The arguments for the method """ class CloudinaryEditIntegrationDef(BaseCloudinaryIntegrationDef): """ Cloudinary edit integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_edit"] = "media_edit" arguments: CloudinaryEditArguments | None = None class CloudinaryEditIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpdate): """ Cloudinary edit integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_edit"] = "media_edit" arguments: CloudinaryEditArgumentsUpdate | None = None class CloudinaryUploadIntegrationDef(BaseCloudinaryIntegrationDef): """ Cloudinary upload integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_upload"] = "media_upload" arguments: CloudinaryUploadArguments | None = None class CloudinaryUploadIntegrationDefUpdate(BaseCloudinaryIntegrationDefUpdate): """ Cloudinary upload integration definition """ model_config = ConfigDict( populate_by_name=True, ) method: Literal["media_upload"] = "media_upload" arguments: CloudinaryUploadArgumentsUpdate | None = None PropertyDefinition.model_rebuild() PropertyDefinitionUpdate.model_rebuild() ================================================ FILE: src/integrations-service/integrations/autogen/Users.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml from __future__ import annotations from typing import Annotated, Any from uuid import UUID from pydantic import AwareDatetime, BaseModel, ConfigDict, Field class CreateUserRequest(BaseModel): """ Payload for creating a user (and associated documents) """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class PatchUserRequest(BaseModel): """ Payload for patching a user """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class UpdateUserRequest(BaseModel): """ Payload for updating a user """ model_config = ConfigDict( populate_by_name=True, ) metadata: dict[str, Any] | None = None name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class User(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time """ updated_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was updated as UTC date-time """ name: Annotated[ str, Field( max_length=120, pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", ), ] = "" """ Name of the user """ about: str = "" """ About the user """ project: Annotated[ str | None, Field(max_length=255, min_length=1, pattern="^[a-zA-Z][a-zA-Z0-9_]*$"), ] = None """ Project canonical name of the user """ class CreateOrUpdateUserRequest(CreateUserRequest): model_config = ConfigDict( populate_by_name=True, ) id: UUID ================================================ FILE: src/integrations-service/integrations/autogen/__init__.py ================================================ # generated by datamodel-codegen: # filename: openapi-1.0.0.yaml ================================================ FILE: src/integrations-service/integrations/env.py ================================================ import multiprocessing from environs import Env # Initialize the Env object for environment variable parsing. env = Env() env.read_env() # Read .env file, if it exists # Load environment variables browserbase_api_key = env.str("BROWSERBASE_API_KEY", default=None) browserbase_project_id = env.str("BROWSERBASE_PROJECT_ID", default=None) openweather_api_key = env.str("OPENWEATHER_API_KEY", default=None) spider_api_key = env.str("SPIDER_API_KEY", default=None) brave_api_key = env.str("BRAVE_API_KEY", default=None) llama_api_key = env.str("LLAMA_API_KEY", default=None) cloudinary_api_key = env.str("CLOUDINARY_API_KEY", default=None) cloudinary_api_secret = env.str("CLOUDINARY_API_SECRET", default=None) cloudinary_cloud_name = env.str("CLOUDINARY_CLOUD_NAME", default=None) mailgun_password = env.str("MAILGUN_PASSWORD", default=None) mailgun_api_key = env.str("MAILGUN_API_KEY", default=None) sentry_dsn: str = env.str("SENTRY_DSN", default=None) unstructured_api_key = env.str("UNSTRUCTURED_API_KEY", default=None) algolia_api_key = env.str("ALGOLIA_API_KEY", default=None) algolia_application_id = env.str("ALGOLIA_APPLICATION_ID", default=None) julep_google_sheets_service_account_json = env.str( "JULEP_GOOGLE_SHEETS_SERVICE_ACCOUNT_JSON", default=None ) # Gunicorn gunicorn_cpu_divisor: int = env.int("GUNICORN_CPU_DIVISOR", default=4) raw_workers: str | None = env.str("GUNICORN_WORKERS", default=None) if raw_workers and raw_workers.strip(): gunicorn_workers: int = int(raw_workers) else: gunicorn_workers: int = max(multiprocessing.cpu_count() // gunicorn_cpu_divisor, 1) ================================================ FILE: src/integrations-service/integrations/models/__init__.py ================================================ from .algolia import AlgoliaSearchOutput as AlgoliaSearchOutput from .arxiv import ( ArxivSearchOutput as ArxivSearchOutput, ) from .arxiv import ( ArxivSearchResult as ArxivSearchResult, ) from .base_models import ( BaseOutput as BaseOutput, ) from .base_models import ( BaseProvider as BaseProvider, ) from .base_models import ( BaseProviderMethod as BaseProviderMethod, ) from .base_models import ( ProviderInfo as ProviderInfo, ) from .brave import ( BraveSearchOutput as BraveSearchOutput, ) from .brave import ( SearchResult as SearchResult, ) from .browserbase import ( BrowserbaseCompleteSessionOutput as BrowserbaseCompleteSessionOutput, ) from .browserbase import ( BrowserbaseCreateSessionOutput as BrowserbaseCreateSessionOutput, ) from .browserbase import ( BrowserbaseExtensionOutput as BrowserbaseExtensionOutput, ) from .browserbase import ( BrowserbaseGetSessionLiveUrlsOutput as BrowserbaseGetSessionLiveUrlsOutput, ) from .browserbase import ( BrowserbaseGetSessionOutput as BrowserbaseGetSessionOutput, ) from .browserbase import ( BrowserbaseListSessionsOutput as BrowserbaseListSessionsOutput, ) from .cloudinary import ( CloudinaryEditOutput as CloudinaryEditOutput, ) from .cloudinary import ( CloudinaryUploadOutput as CloudinaryUploadOutput, ) from .email import EmailOutput as EmailOutput from .ffmpeg import FfmpegSearchOutput as FfmpegSearchOutput from .google_sheets import ( GoogleSheetsBatchReadOutput as GoogleSheetsBatchReadOutput, ) from .google_sheets import ( GoogleSheetsBatchWriteOutput as GoogleSheetsBatchWriteOutput, ) from .google_sheets import ( GoogleSheetsClearOutput as GoogleSheetsClearOutput, ) from .google_sheets import ( GoogleSheetsReadOutput as GoogleSheetsReadOutput, ) from .google_sheets import ( GoogleSheetsUpdateResponse as GoogleSheetsUpdateResponse, ) from .google_sheets import ( GoogleSheetsValueRangeOutput as GoogleSheetsValueRangeOutput, ) from .google_sheets import ( GoogleSheetsWriteOutput as GoogleSheetsWriteOutput, ) from .llama_parse import LlamaParseFetchOutput as LlamaParseFetchOutput from .mailgun import MailgunSendEmailOutput as MailgunSendEmailOutput from .mcp import ( McpListToolsOutput as McpListToolsOutput, ) from .mcp import ( McpToolCallOutput as McpToolCallOutput, ) from .remote_browser import RemoteBrowserOutput as RemoteBrowserOutput from .spider import ( SpiderOutput as SpiderOutput, ) from .spider import ( SpiderResponse as SpiderResponse, ) from .unstructured import ( UnstructuredParseOutput as UnstructuredParseOutput, ) from .weather import WeatherGetOutput as WeatherGetOutput from .wikipedia import WikipediaSearchOutput as WikipediaSearchOutput ================================================ FILE: src/integrations-service/integrations/models/algolia.py ================================================ from typing import Any from pydantic import ConfigDict, Field from .base_models import BaseOutput class AlgoliaSearchOutput(BaseOutput): """Output model for Algolia search""" model_config = ConfigDict(extra="allow") hits: list[Any] | None = Field(description="The search results") metadata: dict[str, Any] | None = Field(description="Additional metadata from the search") ================================================ FILE: src/integrations-service/integrations/models/arxiv.py ================================================ from pydantic import BaseModel, Field from .base_models import BaseOutput class ArxivSearchResult(BaseModel): entry_id: str | None = None title: str | None = None updated: str | None = None published: str | None = None authors: list[str] | None = None summary: str | None = None comment: str | None = None journal_ref: str | None = None doi: str | None = None primary_category: str | None = None categories: list[str] | None = None links: list[str] | None = None pdf_url: str | None = None pdf_downloaded: dict | None = None class ArxivSearchOutput(BaseOutput): result: list[ArxivSearchResult] = Field(..., description="A list of search results") ================================================ FILE: src/integrations-service/integrations/models/base_models.py ================================================ from typing import Annotated from pydantic import BaseModel, Field from pydantic_core import Url IdentifierName = Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] class BaseOutput(BaseModel): ... class ProviderInfo(BaseModel): url: Url | None = None docs: Url | None = None icon: Url | None = None friendly_name: str class BaseProviderMethod(BaseModel): method: IdentifierName description: str arguments: type[BaseModel] output: type[BaseOutput] class BaseProvider(BaseModel): provider: IdentifierName setup: type[BaseModel] | None methods: list[BaseProviderMethod] info: ProviderInfo ================================================ FILE: src/integrations-service/integrations/models/brave.py ================================================ from pydantic import BaseModel, Field from .base_models import BaseOutput class SearchResult(BaseModel): title: str link: str snippet: str class BraveSearchOutput(BaseOutput): result: list[SearchResult] = Field(..., description="A list of search results") ================================================ FILE: src/integrations-service/integrations/models/browserbase.py ================================================ from typing import Literal from browserbase.types import Session from browserbase.types.session_live_urls import SessionLiveURLs from pydantic import AnyUrl, Field from .base_models import BaseOutput class BrowserbaseListSessionsOutput(BaseOutput): sessions: list[Session] = Field(..., description="The list of sessions") class BrowserbaseCreateSessionOutput(BaseOutput): id: str = Field(..., description="Unique identifier for the session") connect_url: str | None = Field(None, description="The connection URL for the session") createdAt: str | None = Field( None, description="Timestamp indicating when the session was created", ) projectId: str | None = Field(None, description="The Project ID linked to the Session") startedAt: str | None = Field(None, description="Timestamp when the session started") endedAt: str | None = Field(None, description="Timestamp when the session ended") expiresAt: str | None = Field( None, description="Timestamp when the session is set to expire", ) status: Literal["RUNNING", "ERROR", "TIMED_OUT", "COMPLETED"] | None = Field( None, description="Current status of the session", ) proxyBytes: int | None = Field(None, description="Bytes used via the Proxy") avgCpuUsage: int | None = Field(None, description="CPU used by the Session") memoryUsage: int | None = Field(None, description="Memory used by the Session") keepAlive: bool | None = Field( None, description="Indicates if the Session was created to be kept alive upon disconnections", ) contextId: str | None = Field( None, description="Optional. The Context linked to the Session.", ) class BrowserbaseGetSessionOutput(BaseOutput): id: str = Field(..., description="Unique identifier for the session") createdAt: str | None = Field( None, description="Timestamp indicating when the session was created", ) projectId: str | None = Field(None, description="The Project ID linked to the Session") startedAt: str | None = Field(None, description="Timestamp when the session started") endedAt: str | None = Field(None, description="Timestamp when the session ended") expiresAt: str | None = Field( None, description="Timestamp when the session is set to expire", ) status: Literal["RUNNING", "ERROR", "TIMED_OUT", "COMPLETED"] | None = Field( None, description="Current status of the session", ) proxyBytes: int | None = Field(None, description="Bytes used via the Proxy") avgCpuUsage: int | None = Field(None, description="CPU used by the Session") memoryUsage: int | None = Field(None, description="Memory used by the Session") keepAlive: bool | None = Field( None, description="Indicates if the Session was created to be kept alive upon disconnections", ) contextId: str | None = Field( None, description="Optional. The Context linked to the Session.", ) class BrowserbaseCompleteSessionOutput(BaseOutput): success: bool = Field( ..., description="Indicates if the session was completed successfully", ) class BrowserbaseExtensionOutput(BaseOutput): id: str = Field(..., description="Unique identifier for the extension") class PageInfo(BaseOutput): id: str | None = Field(None, description="Unique identifier for the page") url: AnyUrl | None = Field(None, description="URL of the page") faviconUrl: AnyUrl | None = Field(None, description="URL for the page's favicon") title: str | None = Field(None, description="Title of the page") debuggerUrl: AnyUrl | None = Field( None, description="URL to access the debugger for this page", ) debuggerFullscreenUrl: AnyUrl | None = Field( None, description="URL to access the debugger in fullscreen for this page", ) class BrowserbaseGetSessionLiveUrlsOutput(BaseOutput): urls: SessionLiveURLs = Field(..., description="The live URLs for the session") class BrowserbaseContextOutput(BaseOutput): id: str = Field(..., description="Unique identifier for the context") uploadUrl: str | None = Field(None, description="The upload URL for the context") publicKey: str | None = Field(None, description="The public key for the context") cipherAlgorithm: str | None = Field( None, description="The cipher algorithm for the context", ) initializationVectorSize: int | None = Field( None, description="The size of the initialization vector", ) ================================================ FILE: src/integrations-service/integrations/models/cloudinary.py ================================================ from pydantic import Field from .base_models import BaseOutput class CloudinaryUploadOutput(BaseOutput): url: str = Field(..., description="The URL of the uploaded file") public_id: str = Field(..., description="The public ID of the uploaded file") base64: str | None = Field( None, description="The base64 encoded file if return_base64 is true", ) meta_data: dict | None = Field( None, description="Additional metadata from the upload response", ) class CloudinaryEditOutput(BaseOutput): transformed_url: str = Field(..., description="The transformed URL") base64: str | None = Field( None, description="The base64 encoded file if return_base64 is true", ) ================================================ FILE: src/integrations-service/integrations/models/email.py ================================================ from pydantic import Field from .base_models import BaseOutput class EmailOutput(BaseOutput): success: bool = Field(..., description="Whether the email was sent successfully") ================================================ FILE: src/integrations-service/integrations/models/execution.py ================================================ from pydantic import BaseModel from ..autogen.Tools import ( # Arguments AlgoliaSearchArguments, # Setup AlgoliaSetup, ArxivSearchArguments, BraveSearchArguments, BraveSearchSetup, BrowserbaseCompleteSessionArguments, BrowserbaseContextArguments, BrowserbaseCreateSessionArguments, BrowserbaseExtensionArguments, BrowserbaseGetSessionArguments, BrowserbaseGetSessionLiveUrlsArguments, BrowserbaseListSessionsArguments, BrowserbaseSetup, CloudinaryEditArguments, CloudinarySetup, CloudinaryUploadArguments, EmailArguments, EmailSetup, FfmpegSearchArguments, GoogleSheetsAppendArguments, GoogleSheetsBatchReadArguments, GoogleSheetsBatchWriteArguments, GoogleSheetsClearArguments, GoogleSheetsReadArguments, GoogleSheetsSetup, GoogleSheetsWriteArguments, LlamaParseFetchArguments, LlamaParseSetup, MailgunSendEmailArguments, MailgunSetup, McpCallToolArguments, McpListToolsArguments, McpSetup, RemoteBrowserArguments, RemoteBrowserSetup, SpiderFetchArguments, SpiderSetup, UnstructuredPartitionArguments, UnstructuredSetup, WeatherGetArguments, WeatherSetup, WikipediaSearchArguments, ) from .algolia import AlgoliaSearchOutput from .arxiv import ArxivSearchOutput from .brave import BraveSearchOutput from .browserbase import ( BrowserbaseCompleteSessionOutput, BrowserbaseContextOutput, BrowserbaseCreateSessionOutput, BrowserbaseExtensionOutput, BrowserbaseGetSessionLiveUrlsOutput, BrowserbaseGetSessionOutput, BrowserbaseListSessionsOutput, ) from .cloudinary import CloudinaryEditOutput, CloudinaryUploadOutput from .email import EmailOutput from .ffmpeg import FfmpegSearchOutput from .google_sheets import ( GoogleSheetsBatchReadOutput, GoogleSheetsBatchWriteOutput, GoogleSheetsClearOutput, GoogleSheetsReadOutput, GoogleSheetsValueRangeOutput, GoogleSheetsWriteOutput, ) from .llama_parse import LlamaParseFetchOutput from .mailgun import MailgunSendEmailOutput from .mcp import McpListToolsOutput, McpToolCallOutput from .remote_browser import RemoteBrowserOutput from .spider import SpiderOutput from .unstructured import UnstructuredParseOutput from .weather import WeatherGetOutput from .wikipedia import WikipediaSearchOutput class ExecutionError(BaseModel): error: str """ The error message of the integration execution """ # Setup configurations ExecutionSetup = ( AlgoliaSetup | BraveSearchSetup | BrowserbaseSetup | CloudinarySetup | EmailSetup | LlamaParseSetup | MailgunSetup | RemoteBrowserSetup | SpiderSetup | UnstructuredSetup | WeatherSetup | McpSetup | GoogleSheetsSetup ) # Argument configurations ExecutionArguments = ( AlgoliaSearchArguments | ArxivSearchArguments | BraveSearchArguments | BrowserbaseCompleteSessionArguments | BrowserbaseContextArguments | BrowserbaseCreateSessionArguments | BrowserbaseExtensionArguments | BrowserbaseListSessionsArguments | BrowserbaseGetSessionArguments | BrowserbaseGetSessionLiveUrlsArguments | CloudinaryUploadArguments | CloudinaryEditArguments | EmailArguments | FfmpegSearchArguments | LlamaParseFetchArguments | MailgunSendEmailArguments | RemoteBrowserArguments | SpiderFetchArguments | UnstructuredPartitionArguments | WeatherGetArguments | WikipediaSearchArguments | McpCallToolArguments | McpListToolsArguments | GoogleSheetsReadArguments | GoogleSheetsWriteArguments | GoogleSheetsAppendArguments | GoogleSheetsClearArguments | GoogleSheetsBatchReadArguments | GoogleSheetsBatchWriteArguments ) ExecutionResponse = ( WeatherGetOutput | EmailOutput | WikipediaSearchOutput | BraveSearchOutput | BrowserbaseCreateSessionOutput | BrowserbaseGetSessionOutput | BrowserbaseGetSessionLiveUrlsOutput | BrowserbaseCompleteSessionOutput | BrowserbaseContextOutput | BrowserbaseExtensionOutput | BrowserbaseListSessionsOutput | RemoteBrowserOutput | LlamaParseFetchOutput | FfmpegSearchOutput | MailgunSendEmailOutput | CloudinaryEditOutput | CloudinaryUploadOutput | ExecutionError | ArxivSearchOutput | SpiderOutput | UnstructuredParseOutput | AlgoliaSearchOutput | McpToolCallOutput | McpListToolsOutput | GoogleSheetsReadOutput | GoogleSheetsWriteOutput | GoogleSheetsClearOutput | GoogleSheetsBatchReadOutput | GoogleSheetsBatchWriteOutput | GoogleSheetsValueRangeOutput ) class ExecutionRequest(BaseModel): setup: ExecutionSetup | None """ The setup parameters the integration accepts (such as API keys) """ arguments: ExecutionArguments | None """ The arguments to pass to the integration """ ================================================ FILE: src/integrations-service/integrations/models/ffmpeg.py ================================================ from pydantic import Field from .base_models import BaseOutput class FfmpegSearchOutput(BaseOutput): fileoutput: str | None = Field(None, description="The output file from the Ffmpeg command") result: bool = Field(..., description="Whether the Ffmpeg command was successful") mime_type: str | None = Field(None, description="The MIME type of the output file") ================================================ FILE: src/integrations-service/integrations/models/google_sheets.py ================================================ from typing import Any from pydantic import ConfigDict, Field from .base_models import BaseOutput class GoogleSheetsReadOutput(BaseOutput): """Output model for reading values from Google Sheets""" model_config = ConfigDict(extra="allow") range: str = Field(description="The range that was read") major_dimension: str = Field(description="The major dimension of the values") values: list[list[Any]] = Field(description="The values read from the spreadsheet") class GoogleSheetsWriteOutput(BaseOutput): """Output model for writing/appending values to Google Sheets""" model_config = ConfigDict(extra="allow") spreadsheet_id: str = Field(description="The spreadsheet ID that was updated") updated_range: str | None = Field(default=None, description="The range that was updated") updated_rows: int | None = Field(default=None, description="The number of rows updated") updated_columns: int | None = Field( default=None, description="The number of columns updated" ) updated_cells: int | None = Field(default=None, description="The number of cells updated") updated_values: list[list[Any]] | None = Field( default=None, description="The values that were written (if requested)" ) class GoogleSheetsClearOutput(BaseOutput): """Output model for clearing values from Google Sheets""" model_config = ConfigDict(extra="allow") spreadsheet_id: str = Field(description="The spreadsheet ID that was cleared") cleared_range: str = Field(description="The range that was cleared") class GoogleSheetsValueRangeOutput(BaseOutput): """Represents a range of values that was read""" model_config = ConfigDict(extra="allow") range: str = Field(description="The range that was read") major_dimension: str = Field(description="The major dimension of the values") values: list[list[Any]] = Field(description="The values read from the range") class GoogleSheetsBatchReadOutput(BaseOutput): """Output model for batch reading from Google Sheets""" model_config = ConfigDict(extra="allow") spreadsheet_id: str = Field(description="The spreadsheet ID that was read") value_ranges: list[GoogleSheetsValueRangeOutput] = Field( description="The value ranges that were read" ) class GoogleSheetsUpdateResponse(BaseOutput): """Details about a single range update in batch operations""" model_config = ConfigDict(extra="allow") updated_range: str | None = Field(default=None, description="The range that was updated") updated_rows: int | None = Field(default=None, description="The number of rows updated") updated_columns: int | None = Field( default=None, description="The number of columns updated" ) updated_cells: int | None = Field(default=None, description="The number of cells updated") class GoogleSheetsBatchWriteOutput(BaseOutput): """Output model for batch writing to Google Sheets""" model_config = ConfigDict(extra="allow") spreadsheet_id: str = Field(description="The spreadsheet ID that was updated") total_updated_sheets: int | None = Field( default=None, description="Total number of sheets updated" ) total_updated_rows: int | None = Field( default=None, description="Total number of rows updated" ) total_updated_columns: int | None = Field( default=None, description="Total number of columns updated" ) total_updated_cells: int | None = Field( default=None, description="Total number of cells updated" ) responses: list[GoogleSheetsUpdateResponse] | None = Field( default=None, description="Details about each range that was updated" ) ================================================ FILE: src/integrations-service/integrations/models/llama_parse.py ================================================ from llama_index.core.schema import Document from pydantic import Field from .base_models import BaseOutput class LlamaParseFetchOutput(BaseOutput): documents: list[Document] = Field(..., description="The documents returned from the spider") ================================================ FILE: src/integrations-service/integrations/models/mailgun.py ================================================ from pydantic import Field from .base_models import BaseOutput class MailgunSendEmailOutput(BaseOutput): success: bool = Field(..., description="Whether the email was sent successfully") error: str | None = Field( None, description="The error message if the email was not sent successfully" ) ================================================ FILE: src/integrations-service/integrations/models/mcp.py ================================================ from typing import Any from pydantic import Field from .base_models import BaseOutput class McpToolCallOutput(BaseOutput): text: str | None = Field( default=None, description="Concatenated textual content, if any was returned.", ) structured: dict[str, Any] | list[Any] | None = Field( default=None, description="Structured content returned by the server, if present.", ) content: list[dict[str, Any]] = Field( default_factory=list, description="Raw content items as returned by MCP (best-effort JSON form).", ) is_error: bool = Field( default=False, description="Whether the server indicated an error for this call.", ) class McpToolInfo(BaseOutput): name: str description: str | None = None input_schema: dict[str, Any] | None = None class McpListToolsOutput(BaseOutput): tools: list[McpToolInfo] ================================================ FILE: src/integrations-service/integrations/models/remote_browser.py ================================================ from pydantic import Field from .base_models import BaseOutput class RemoteBrowserOutput(BaseOutput): output: str | None = Field(None, description="The output of the action") error: str | None = Field(None, description="The error of the action") base64_image: str | None = Field(None, description="The base64 encoded image of the action") system: str | None = Field(None, description="The system output of the action") ================================================ FILE: src/integrations-service/integrations/models/spider.py ================================================ from typing import Any from pydantic import BaseModel, Field from .base_models import BaseOutput class SpiderResponse(BaseModel): content: str | list[str] | None = None error: str | None = None status: int | None = None costs: dict[Any, Any] | None = None url: str | None = None class SpiderOutput(BaseOutput): result: list[SpiderResponse] = Field(..., description="The responses from the spider") ================================================ FILE: src/integrations-service/integrations/models/unstructured.py ================================================ from typing import Any from .base_models import BaseOutput class UnstructuredParseOutput(BaseOutput): content_type: str status_code: int csv_elements: str | None = None content: list[dict[str, Any]] | None = None ================================================ FILE: src/integrations-service/integrations/models/weather.py ================================================ from pydantic import Field from .base_models import BaseOutput class WeatherGetOutput(BaseOutput): result: str = Field(..., description="The weather data for the specified location") ================================================ FILE: src/integrations-service/integrations/models/wikipedia.py ================================================ from langchain_core.documents import Document from pydantic import Field from .base_models import BaseOutput class WikipediaSearchOutput(BaseOutput): documents: list[Document] = Field( ..., description="The documents returned from the Wikipedia search", ) ================================================ FILE: src/integrations-service/integrations/providers.py ================================================ from .autogen.Tools import ( AlgoliaSearchArguments, AlgoliaSetup, ArxivSearchArguments, BraveSearchArguments, BraveSearchSetup, BrowserbaseCompleteSessionArguments, BrowserbaseCreateSessionArguments, BrowserbaseExtensionArguments, BrowserbaseGetSessionArguments, BrowserbaseGetSessionLiveUrlsArguments, BrowserbaseListSessionsArguments, BrowserbaseSetup, CloudinaryEditArguments, CloudinarySetup, CloudinaryUploadArguments, EmailArguments, EmailSetup, FfmpegSearchArguments, GoogleSheetsAppendArguments, GoogleSheetsBatchReadArguments, GoogleSheetsBatchWriteArguments, GoogleSheetsClearArguments, GoogleSheetsReadArguments, GoogleSheetsSetup, GoogleSheetsWriteArguments, LlamaParseFetchArguments, LlamaParseSetup, MailgunSendEmailArguments, MailgunSetup, McpCallToolArguments, McpListToolsArguments, McpSetup, RemoteBrowserArguments, RemoteBrowserSetup, SpiderFetchArguments, SpiderSetup, UnstructuredPartitionArguments, UnstructuredSetup, WeatherGetArguments, WeatherSetup, WikipediaSearchArguments, ) from .models import ( AlgoliaSearchOutput, ArxivSearchOutput, BaseProvider, BaseProviderMethod, BraveSearchOutput, BrowserbaseCompleteSessionOutput, BrowserbaseCreateSessionOutput, BrowserbaseExtensionOutput, BrowserbaseGetSessionLiveUrlsOutput, BrowserbaseGetSessionOutput, BrowserbaseListSessionsOutput, CloudinaryEditOutput, CloudinaryUploadOutput, EmailOutput, FfmpegSearchOutput, GoogleSheetsBatchReadOutput, GoogleSheetsBatchWriteOutput, GoogleSheetsClearOutput, GoogleSheetsReadOutput, GoogleSheetsWriteOutput, LlamaParseFetchOutput, MailgunSendEmailOutput, McpListToolsOutput, McpToolCallOutput, ProviderInfo, RemoteBrowserOutput, SpiderOutput, UnstructuredParseOutput, WeatherGetOutput, WikipediaSearchOutput, ) wikipedia = BaseProvider( provider="wikipedia", setup=None, methods=[ BaseProviderMethod( method="search", description="Search for a page on Wikipedia", arguments=WikipediaSearchArguments, output=WikipediaSearchOutput, ), ], info=ProviderInfo( url="https://www.wikipedia.org/", docs="https://www.wikipedia.org/wiki/Main_Page", icon="https://www.wikipedia.org/static/favicon/wikipedia.ico", friendly_name="Wikipedia", ), ) weather = BaseProvider( provider="weather", setup=WeatherSetup, methods=[ BaseProviderMethod( method="get", description="Get the current weather for a city", arguments=WeatherGetArguments, output=WeatherGetOutput, ), ], info=ProviderInfo( url="https://www.weatherapi.com/", docs="https://www.weatherapi.com/docs/", icon="https://www.weatherapi.com/favicon.ico", friendly_name="Weather API", ), ) spider = BaseProvider( provider="spider", setup=SpiderSetup, methods=[ BaseProviderMethod( method="crawl", description="Crawl a website and extract data", arguments=SpiderFetchArguments, output=SpiderOutput, ), BaseProviderMethod( method="links", description="Extract all links from the webpage", arguments=SpiderFetchArguments, output=SpiderOutput, ), BaseProviderMethod( method="screenshot", description="Take a screenshot of the webpage", arguments=SpiderFetchArguments, output=SpiderOutput, ), BaseProviderMethod( method="search", description="Search content within the webpage", arguments=SpiderFetchArguments, output=SpiderOutput, ), ], info=ProviderInfo( url="https://spider.com/", docs="https://spider.com/docs/", icon="https://spider.com/favicon.ico", friendly_name="Spider", ), ) brave = BaseProvider( provider="brave", setup=BraveSearchSetup, methods=[ BaseProviderMethod( method="search", description="Search with Brave", arguments=BraveSearchArguments, output=BraveSearchOutput, ), ], info=ProviderInfo( url="https://brave.com/", docs="https://brave.com/docs/", icon="https://brave.com/favicon.ico", friendly_name="Brave Search", ), ) llama_parse = BaseProvider( provider="llama_parse", setup=LlamaParseSetup, methods=[ BaseProviderMethod( method="parse", description="Parse and extract the files", arguments=LlamaParseFetchArguments, output=LlamaParseFetchOutput, ), ], info=ProviderInfo( friendly_name="LlamaParse", url="https://www.llamaindex.ai/", docs="https://docs.cloud.llamaindex.ai/llamaparse/getting_started", icon="https://www.llamaindex.ai/favicon.ico", ), ) email = BaseProvider( provider="email", setup=EmailSetup, methods=[ BaseProviderMethod( method="send", description="Send an email", arguments=EmailArguments, output=EmailOutput, ), ], info=ProviderInfo( friendly_name="Email", ), ) browserbase = BaseProvider( provider="browserbase", setup=BrowserbaseSetup, methods=[ BaseProviderMethod( method="list_sessions", description="List sessions in Browserbase", arguments=BrowserbaseListSessionsArguments, output=BrowserbaseListSessionsOutput, ), BaseProviderMethod( method="create_session", description="Create a session in Browserbase", arguments=BrowserbaseCreateSessionArguments, output=BrowserbaseCreateSessionOutput, ), BaseProviderMethod( method="get_session", description="Get a session in Browserbase", arguments=BrowserbaseGetSessionArguments, output=BrowserbaseGetSessionOutput, ), BaseProviderMethod( method="complete_session", description="Complete a session in Browserbase", arguments=BrowserbaseCompleteSessionArguments, output=BrowserbaseCompleteSessionOutput, ), BaseProviderMethod( method="get_live_urls", description="Get sessions' live urls in Browserbase", arguments=BrowserbaseGetSessionLiveUrlsArguments, output=BrowserbaseGetSessionLiveUrlsOutput, ), BaseProviderMethod( method="install_extension_from_github", description="Install an extension from GitHub to the browserbase context", arguments=BrowserbaseExtensionArguments, output=BrowserbaseExtensionOutput, ), ], info=ProviderInfo( friendly_name="BrowserBase", url="https://browserbase.com/", docs="https://browserbase.com/docs/", icon="https://browserbase.com/favicon.ico", ), ) remote_browser = BaseProvider( provider="remote_browser", setup=RemoteBrowserSetup, methods=[ BaseProviderMethod( method="perform_action", description="Perform an action in the browser", arguments=RemoteBrowserArguments, output=RemoteBrowserOutput, ), ], info=ProviderInfo( friendly_name="Remote Browser", url="https://playwright.dev/", docs="https://playwright.dev/docs/", icon="https://playwright.dev/favicon.ico", ), ) ffmpeg = BaseProvider( provider="ffmpeg", setup=None, methods=[ BaseProviderMethod( method="bash_cmd", description="Run FFmpeg bash command", arguments=FfmpegSearchArguments, output=FfmpegSearchOutput, ), ], info=ProviderInfo( url="https://ffmpeg.org/", docs="https://ffmpeg.org/documentation.html", icon="https://upload.wikimedia.org/wikipedia/commons/5/5f/FFmpeg_Logo_new.svg", friendly_name="Ffmpeg", ), ) cloudinary = BaseProvider( provider="cloudinary", setup=CloudinarySetup, methods=[ BaseProviderMethod( method="media_edit", description="Edit media in Cloudinary", arguments=CloudinaryEditArguments, output=CloudinaryEditOutput, ), BaseProviderMethod( method="media_upload", description="Upload media to Cloudinary", arguments=CloudinaryUploadArguments, output=CloudinaryUploadOutput, ), ], info=ProviderInfo( url="https://cloudinary.com/", docs="https://cloudinary.com/documentation/python_quickstart", icon="https://cloudinary.com/favicon.ico", friendly_name="Cloudinary", ), ) arxiv = BaseProvider( provider="arxiv", setup=None, methods=[ BaseProviderMethod( method="search", description="Search in Arxiv", arguments=ArxivSearchArguments, output=ArxivSearchOutput, ), ], info=ProviderInfo( url="https://pypi.org/project/arxiv/", docs="https://info.arxiv.org/help/api/index.html", icon="https://arxiv.com/favicon.ico", friendly_name="Arxiv Search", ), ) unstructured = BaseProvider( provider="unstructured", setup=UnstructuredSetup, methods=[ BaseProviderMethod( method="parse", description="Parse documents into structured elements", arguments=UnstructuredPartitionArguments, output=UnstructuredParseOutput, ), ], info=ProviderInfo( url="https://unstructured.io/", docs="https://docs.unstructured.io/", icon="https://unstructured.io/favicon.ico", friendly_name="Unstructured.io", ), ) algolia = BaseProvider( provider="algolia", setup=AlgoliaSetup, methods=[ BaseProviderMethod( method="search", description="Search for content in an Algolia index", arguments=AlgoliaSearchArguments, output=AlgoliaSearchOutput, ), ], info=ProviderInfo( url="https://www.algolia.com/", docs="https://www.algolia.com/doc/", icon="https://www.algolia.com/favicon.ico", friendly_name="Algolia Search", ), ) mailgun = BaseProvider( provider="mailgun", setup=MailgunSetup, methods=[ BaseProviderMethod( method="send_email", description="Send an email", arguments=MailgunSendEmailArguments, output=MailgunSendEmailOutput, ), ], info=ProviderInfo( friendly_name="Mailgun", url="https://www.mailgun.com/", docs="https://documentation.mailgun.com/", icon="https://www.mailgun.com/favicon.ico", ), ) # MCP provider: dynamic protocol-backed tool execution mcp = BaseProvider( provider="mcp", setup=McpSetup, methods=[ BaseProviderMethod( method="list_tools", description="List tools exposed by an MCP server", arguments=McpListToolsArguments, output=McpListToolsOutput, ), BaseProviderMethod( method="call_tool", description="Call a named tool on an MCP server", arguments=McpCallToolArguments, output=McpToolCallOutput, ), ], info=ProviderInfo( friendly_name="Model Context Protocol", url="https://modelcontextprotocol.io/", docs="https://spec.modelcontextprotocol.io/", icon="https://modelcontextprotocol.io/favicon.ico", ), ) google_sheets = BaseProvider( provider="google_sheets", setup=GoogleSheetsSetup, methods=[ BaseProviderMethod( method="read_values", description="Read values from a specific range in a Google Sheets spreadsheet", arguments=GoogleSheetsReadArguments, output=GoogleSheetsReadOutput, ), BaseProviderMethod( method="write_values", description="Write or update values in a specific range in a Google Sheets spreadsheet", arguments=GoogleSheetsWriteArguments, output=GoogleSheetsWriteOutput, ), BaseProviderMethod( method="append_values", description="Append new rows of data to a Google Sheets spreadsheet", arguments=GoogleSheetsAppendArguments, output=GoogleSheetsWriteOutput, ), BaseProviderMethod( method="clear_values", description="Clear values from a specific range in a Google Sheets spreadsheet", arguments=GoogleSheetsClearArguments, output=GoogleSheetsClearOutput, ), BaseProviderMethod( method="batch_read", description="Read values from multiple ranges in a Google Sheets spreadsheet", arguments=GoogleSheetsBatchReadArguments, output=GoogleSheetsBatchReadOutput, ), BaseProviderMethod( method="batch_write", description="Write values to multiple ranges in a Google Sheets spreadsheet", arguments=GoogleSheetsBatchWriteArguments, output=GoogleSheetsBatchWriteOutput, ), ], info=ProviderInfo( url="https://sheets.google.com/", docs="https://developers.google.com/sheets/api", icon="https://www.gstatic.com/images/branding/product/1x/sheets_2020q4_48dp.png", friendly_name="Google Sheets", ), ) available_providers: dict[str, BaseProvider] = { "wikipedia": wikipedia, "weather": weather, "spider": spider, "brave": brave, "email": email, "browserbase": browserbase, "remote_browser": remote_browser, "llama_parse": llama_parse, "ffmpeg": ffmpeg, "cloudinary": cloudinary, "arxiv": arxiv, "unstructured": unstructured, "algolia": algolia, "mailgun": mailgun, "mcp": mcp, "google_sheets": google_sheets, } ================================================ FILE: src/integrations-service/integrations/routers/__init__.py ================================================ ================================================ FILE: src/integrations-service/integrations/routers/execution/__init__.py ================================================ from .execute import execute as execute ================================================ FILE: src/integrations-service/integrations/routers/execution/execute.py ================================================ from fastapi import HTTPException from ...models.base_models import IdentifierName from ...models.execution import ExecutionRequest, ExecutionResponse from ...utils.execute_integration import execute_integration from .router import router @router.post("/execute/{provider}", tags=["execution"]) async def execute_default( provider: IdentifierName, data: ExecutionRequest, ) -> ExecutionResponse: try: return await execute_integration( provider=provider, arguments=data.arguments, setup=data.setup, ) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.post("/execute/{provider}/{method}", tags=["execution"]) async def execute( provider: IdentifierName, method: IdentifierName, data: ExecutionRequest, ) -> ExecutionResponse: try: return await execute_integration( provider=provider, arguments=data.arguments, setup=data.setup, method=method, ) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) ================================================ FILE: src/integrations-service/integrations/routers/execution/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/integrations-service/integrations/routers/integrations/__init__.py ================================================ from .get_integration import get_integration as get_integration from .get_integration_tool import get_integration_tool as get_integration_tool from .get_integrations import get_integrations as get_integrations ================================================ FILE: src/integrations-service/integrations/routers/integrations/get_integration.py ================================================ from fastapi import HTTPException from ... import providers as available_providers from ...models.base_models import BaseProvider from .router import router @router.get("/integrations/{provider}", tags=["integration"]) async def get_integration(provider: str) -> dict: integration: BaseProvider | None = getattr(available_providers, provider, None) if integration is None: raise HTTPException(status_code=404, detail="Integration not found") return { "provider": integration.provider, "setup": integration.setup.model_json_schema() if integration.setup else None, "methods": [ { "method": m.method, "description": m.description, "arguments": m.arguments.model_json_schema(), "output": m.output.model_json_schema(), } for m in integration.methods ], "info": integration.info.model_dump_json(), } ================================================ FILE: src/integrations-service/integrations/routers/integrations/get_integration_tool.py ================================================ from fastapi import HTTPException from ...models.base_models import BaseProvider, BaseProviderMethod from .router import router def convert_to_openai_tool( provider: BaseProvider, method: BaseProviderMethod | None = None, ) -> dict: method = method or provider.methods[0] name = f"{provider.provider}_{method.method}" description = method.description arguments = method.arguments.model_json_schema() return { "type": "function", "function": { "name": name, "description": description, "parameters": arguments, }, } @router.get("/integrations/{provider}/tool", tags=["integration_tool"]) @router.get("/integrations/{provider}/{method}/tool", tags=["integration_tool"]) async def get_integration_tool(provider: str, method: str | None = None): from ...providers import available_providers provider_obj: BaseProvider | None = available_providers.get(provider, None) if not provider_obj: raise HTTPException(status_code=404, detail="Integration not found") if method: for m in provider_obj.methods: if m.method == method: return convert_to_openai_tool(provider_obj, m) else: return convert_to_openai_tool(provider_obj) raise HTTPException(status_code=404, detail="Integration not found") ================================================ FILE: src/integrations-service/integrations/routers/integrations/get_integrations.py ================================================ from ...providers import available_providers from .router import router @router.get("/integrations", tags=["integrations"]) async def get_integrations() -> list[dict]: return [ { "provider": p.provider, "setup": p.setup.model_json_schema() if p.setup else None, "methods": [ { "method": m.method, "description": m.description, "arguments": m.arguments.model_json_schema(), "output": m.output.model_json_schema(), } for m in p.methods ], "info": { "url": p.info.url, "docs": p.info.docs, "icon": p.info.icon, "friendly_name": p.info.friendly_name, }, } for p in available_providers.values() ] ================================================ FILE: src/integrations-service/integrations/routers/integrations/router.py ================================================ from fastapi import APIRouter router: APIRouter = APIRouter() ================================================ FILE: src/integrations-service/integrations/utils/__init__.py ================================================ ================================================ FILE: src/integrations-service/integrations/utils/execute_integration.py ================================================ import importlib from beartype import beartype from fastapi import HTTPException from .. import providers as available_providers from ..models.base_models import BaseProvider, IdentifierName from ..models.execution import ( ExecutionArguments, ExecutionError, ExecutionResponse, ExecutionSetup, ) @beartype async def execute_integration( *, provider: IdentifierName, method: IdentifierName | None = None, setup: ExecutionSetup | None = None, arguments: ExecutionArguments, ) -> ExecutionResponse: provider_obj = getattr(available_providers, provider, None) if not provider_obj or not isinstance(provider_obj, BaseProvider): raise HTTPException(status_code=400, detail=f"Unknown provider: {provider}") method = method or provider_obj.methods[0].method method_config = next((m for m in provider_obj.methods if m.method == method), None) if not method_config: raise HTTPException( status_code=400, detail=f"Unknown method: {method} for provider: {provider}", ) provider_module = importlib.import_module( f"integrations.utils.integrations.{provider_obj.provider}", package="integrations", ) if setup is not None and provider_obj.setup and not isinstance(setup, provider_obj.setup): setup = provider_obj.setup(**setup.model_dump()) arguments = ( method_config.arguments(**arguments.model_dump()) if not isinstance(arguments, method_config.arguments) else arguments ) try: return await getattr(provider_module, method)( **({"setup": setup} if setup else {}), arguments=arguments, ) except BaseException as e: return ExecutionError(error=str(e)) ================================================ FILE: src/integrations-service/integrations/utils/integrations/__init__.py ================================================ ================================================ FILE: src/integrations-service/integrations/utils/integrations/algolia.py ================================================ import json from algoliasearch.search.client import SearchClient from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import AlgoliaSearchArguments, AlgoliaSetup from ...models import AlgoliaSearchOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def search(setup: AlgoliaSetup, arguments: AlgoliaSearchArguments) -> AlgoliaSearchOutput: """ Searches for content in an Algolia index asynchronously. """ api_key = setup.algolia_api_key application_id = setup.algolia_application_id # Build the search request search_params = { "indexName": arguments.index_name, "query": arguments.query, "hitsPerPage": arguments.hits_per_page, } # Add attributes to retrieve if provided if arguments.attributes_to_retrieve is not None: search_params["attributesToRetrieve"] = arguments.attributes_to_retrieve # Finalize the search request search_request = {"requests": [search_params]} # Initialize the Algolia client async with SearchClient(application_id, api_key) as client: result = json.loads((await client.search(search_request)).to_json()) # Extract results safely and get the first result if available results = result.get("results", []) first_result = results[0] if results else {} # Extract hits directly from first_result hits = first_result.get("hits", []) # Build metadata dict with all relevant information metadata = { "query": arguments.query, "nbHits": first_result.get("nbHits", 0), "page": first_result.get("page", 0), "nbPages": first_result.get("nbPages", 0), "processingTimeMS": first_result.get("processingTimeMS", 0), } # Return with appropriate hits based on whether results were found return AlgoliaSearchOutput( hits=hits, metadata=metadata, ) ================================================ FILE: src/integrations-service/integrations/utils/integrations/arxiv.py ================================================ import base64 import tempfile import arxiv from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import ArxivSearchArguments from ...models import ArxivSearchOutput, ArxivSearchResult @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def search(arguments: ArxivSearchArguments) -> ArxivSearchOutput: """ Searches Arxiv with the provided query. Args: arguments (ArxivSearchArguments): The search parameters including query, maximum results, sorting criteria, and download options. Returns: ArxivSearchOutput: The search results wrapped in an output object. """ client = arxiv.Client() sort_criterion = { "submittedDate": arxiv.SortCriterion.SubmittedDate, "lastUpdatedDate": arxiv.SortCriterion.LastUpdatedDate, }.get(arguments.sort_by, arxiv.SortCriterion.Relevance) sort_order = ( arxiv.SortOrder.Descending if arguments.sort_order == "descending" else arxiv.SortOrder.Ascending ) search = arxiv.Search( query=arguments.query, max_results=arguments.max_results, sort_by=sort_criterion, sort_order=sort_order, ) results = [] search_results = client.results(search) def create_arxiv_search_result(result, pdf_content=None): return ArxivSearchResult( entry_id=result.entry_id, title=result.title, authors=[author.name for author in result.authors], summary=result.summary.replace("\n", ""), published=result.published.strftime("%Y-%m-%d %H:%M:%S"), updated=result.updated.strftime("%Y-%m-%d %H:%M:%S"), comment=result.comment, journal_ref=result.journal_ref, doi=result.doi, primary_category=result.primary_category, categories=result.categories, links=[link.href for link in result.links], pdf_url=result.pdf_url, pdf_downloaded={ "base64": pdf_content, "mime_type": "application/pdf", "title": result.title, } if pdf_content else None, ) if arguments.download_pdf: for result in search_results: with tempfile.TemporaryDirectory() as temp_dir: result.download_pdf(dirpath=temp_dir, filename=f"{result.title}.pdf") with open(f"{temp_dir}/{result.title}.pdf", "rb") as pdf_file: pdf_content = base64.b64encode(pdf_file.read()).decode("utf-8") results.append(create_arxiv_search_result(result, pdf_content)) else: results.extend(create_arxiv_search_result(result) for result in search_results) return ArxivSearchOutput(result=results) ================================================ FILE: src/integrations-service/integrations/utils/integrations/brave.py ================================================ import json from beartype import beartype from langchain_community.tools import BraveSearch from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import BraveSearchArguments, BraveSearchSetup from ...models import BraveSearchOutput, SearchResult @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def search(setup: BraveSearchSetup, arguments: BraveSearchArguments) -> BraveSearchOutput: """ Searches Brave Search with the provided query. """ tool = BraveSearch.from_api_key(api_key=setup.brave_api_key, search_kwargs={"count": 3}) result = tool.run(arguments.query) try: parsed_result = [SearchResult(**item) for item in json.loads(result)] except json.JSONDecodeError as e: msg = "Malformed JSON response from Brave Search" raise ValueError(msg) from e return BraveSearchOutput(result=parsed_result) ================================================ FILE: src/integrations-service/integrations/utils/integrations/browserbase.py ================================================ import asyncio import contextlib import os import tempfile import httpx from beartype import beartype from browserbase import Browserbase from browserbase.types.session import Session from browserbase.types.session_create_params import BrowserSettings from browserbase.types.session_live_urls import SessionLiveURLs from pydantic import TypeAdapter from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import ( BrowserbaseCompleteSessionArguments, BrowserbaseCreateSessionArguments, BrowserbaseExtensionArguments, BrowserbaseGetSessionArguments, BrowserbaseGetSessionLiveUrlsArguments, BrowserbaseListSessionsArguments, BrowserbaseSetup, ) from ...models import ( BrowserbaseCompleteSessionOutput, BrowserbaseCreateSessionOutput, BrowserbaseGetSessionLiveUrlsOutput, BrowserbaseGetSessionOutput, BrowserbaseListSessionsOutput, ) from ...models.browserbase import BrowserbaseExtensionOutput def get_browserbase_client(setup: BrowserbaseSetup) -> Browserbase: return Browserbase( api_key=setup.api_key, ) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def list_sessions( setup: BrowserbaseSetup, arguments: BrowserbaseListSessionsArguments, ) -> BrowserbaseListSessionsOutput: client = get_browserbase_client(setup) try: # Add status filter if provided params = {} if hasattr(arguments, "status") and arguments.status: params["status"] = arguments.status sessions: list[Session] = client.sessions.list(**params) return BrowserbaseListSessionsOutput(sessions=sessions) except Exception as e: print(f"Error listing sessions: {e}") raise @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def create_session( setup: BrowserbaseSetup, arguments: BrowserbaseCreateSessionArguments, ) -> BrowserbaseCreateSessionOutput: client = get_browserbase_client(setup) # Convert browser settings using TypeAdapter browser_settings = TypeAdapter(BrowserSettings).validate_python(arguments.browser_settings) # Create session parameters create_params = { "project_id": arguments.project_id or setup.project_id, "browser_settings": browser_settings, } # Only add extension_id if it's provided and not None/empty if arguments.extension_id: create_params["extension_id"] = arguments.extension_id # Changed to use sessions.create() with direct parameters session = client.sessions.create(**create_params) # Convert datetime fields to ISO format strings return BrowserbaseCreateSessionOutput( id=session.id, connect_url=session.connect_url, createdAt=session.created_at.isoformat() if session.created_at else None, projectId=session.project_id, startedAt=session.started_at.isoformat() if session.started_at else None, endedAt=session.ended_at.isoformat() if session.ended_at else None, expiresAt=session.expires_at.isoformat() if session.expires_at else None, status=session.status, proxyBytes=session.proxy_bytes, avgCpuUsage=session.avg_cpu_usage, memoryUsage=session.memory_usage, keepAlive=session.keep_alive, contextId=session.context_id, ) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def get_session( setup: BrowserbaseSetup, arguments: BrowserbaseGetSessionArguments, ) -> BrowserbaseGetSessionOutput: client = get_browserbase_client(setup) # Changed from get_session() to sessions.retrieve() session = client.sessions.retrieve(id=arguments.id) return BrowserbaseGetSessionOutput( id=session.id, createdAt=session.created_at.isoformat() if session.created_at else None, projectId=session.project_id, startedAt=session.started_at.isoformat() if session.started_at else None, endedAt=session.ended_at.isoformat() if session.ended_at else None, expiresAt=session.expires_at.isoformat() if session.expires_at else None, status=session.status, proxyBytes=session.proxy_bytes, avgCpuUsage=session.avg_cpu_usage, memoryUsage=session.memory_usage, keepAlive=session.keep_alive, contextId=session.context_id, ) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def complete_session( setup: BrowserbaseSetup, arguments: BrowserbaseCompleteSessionArguments, ) -> BrowserbaseCompleteSessionOutput: client = get_browserbase_client(setup) try: # Changed to use sessions.update() with REQUEST_RELEASE status client.sessions.update( id=arguments.id, status="REQUEST_RELEASE", project_id=setup.project_id, ) except Exception: return BrowserbaseCompleteSessionOutput(success=False) return BrowserbaseCompleteSessionOutput(success=True) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def get_live_urls( setup: BrowserbaseSetup, arguments: BrowserbaseGetSessionLiveUrlsArguments, ) -> BrowserbaseGetSessionLiveUrlsOutput: """Get the live URLs for a session.""" client = get_browserbase_client(setup) try: # Use the debug() method to get live URLs urls: SessionLiveURLs = await asyncio.to_thread(client.sessions.debug, id=arguments.id) return BrowserbaseGetSessionLiveUrlsOutput(urls=urls) except Exception as e: print(f"Error getting debug URLs: {e}") raise @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def install_extension_from_github( setup: BrowserbaseSetup, arguments: BrowserbaseExtensionArguments, ) -> BrowserbaseExtensionOutput: """Download and install an extension from GitHub to the user's Browserbase account.""" try: github_url = f"https://github.com/{arguments.repository_name}/archive/refs/tags/{arguments.ref}.zip" async with httpx.AsyncClient(timeout=600) as client: # Download the extension zip try: response = await client.get(github_url, follow_redirects=True) response.raise_for_status() except httpx.HTTPError as e: print(f"Error downloading extension from GitHub: {e}") raise with tempfile.NamedTemporaryFile( delete=True, delete_on_close=False, suffix=".zip", ) as tmp_file: tmp_file.write(response.content) tmp_file_path = tmp_file.name upload_url = "https://api.browserbase.com/v1/extensions" headers = { "X-BB-API-Key": setup.api_key, } try: with open(tmp_file_path, "rb") as f: files = {"file": f} upload_response = await client.post( upload_url, headers=headers, files=files, ) upload_response.raise_for_status() except httpx.HTTPError as e: print(f"Error uploading extension to Browserbase: {e}") if hasattr(e, "response") and e.response is not None: print(f"Response content: {e.response.text}") raise # Delete the temporary file with contextlib.suppress(FileNotFoundError): os.remove(tmp_file_path) return BrowserbaseExtensionOutput(id=upload_response.json()["id"]) except Exception as e: print(f"Unexpected error in install_extension_from_github: {e}") raise ================================================ FILE: src/integrations-service/integrations/utils/integrations/cloudinary.py ================================================ import base64 import uuid import aiohttp import cloudinary import cloudinary.uploader from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import ( CloudinaryEditArguments, CloudinarySetup, CloudinaryUploadArguments, ) from ...models.cloudinary import CloudinaryEditOutput, CloudinaryUploadOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def media_upload( setup: CloudinarySetup, arguments: CloudinaryUploadArguments, ) -> CloudinaryUploadOutput: """ Upload media to Cloudinary. """ api_key = setup.cloudinary_api_key api_secret = setup.cloudinary_api_secret cloud_name = setup.cloudinary_cloud_name try: # Configure Cloudinary with credentials cloudinary.config( cloud_name=cloud_name, api_key=api_key, api_secret=api_secret, **(setup.params or {}), ) # Upload the file upload_params = arguments.upload_params or {} upload_params["public_id"] = ( arguments.public_id if arguments.public_id else str(uuid.uuid4()) ) result = cloudinary.uploader.upload(arguments.file, **upload_params) meta_data = { key: value for key, value in result.items() if key not in ["secure_url", "public_id"] } if arguments.return_base64: async with ( aiohttp.ClientSession() as session, session.get(result["secure_url"]) as response, ): if response.status == 200: content = await response.read() base64_encoded = base64.b64encode(content).decode("utf-8") result["base64"] = base64_encoded else: msg = f"Failed to download file from URL: {result['secure_url']}" raise RuntimeError(msg) return CloudinaryUploadOutput( url=result["secure_url"], public_id=result["public_id"], meta_data=meta_data, base64=result["base64"] if arguments.return_base64 else None, ) except cloudinary.exceptions.Error as e: msg = f"Cloudinary error occurred: {e}" raise RuntimeError(msg) except Exception as e: msg = f"An unexpected error occurred: {e}" raise RuntimeError(msg) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def media_edit( setup: CloudinarySetup, arguments: CloudinaryEditArguments, ) -> CloudinaryEditOutput: """ Edit media in Cloudinary. """ api_key = setup.cloudinary_api_key api_secret = setup.cloudinary_api_secret cloud_name = setup.cloudinary_cloud_name try: # Configure Cloudinary with credentials cloudinary.config( cloud_name=cloud_name, api_key=api_key, api_secret=api_secret, **(setup.params or {}), ) # Generate transformed URL transformed_url = cloudinary.utils.cloudinary_url( arguments.public_id, transformation=arguments.transformation, ) if not transformed_url or not transformed_url[0]: return CloudinaryEditOutput( transformed_url="The transformation failed", base64=None, ) if arguments.return_base64: async with ( aiohttp.ClientSession() as session, session.get(transformed_url[0]) as response, ): if response.status == 200: content = await response.read() base64_encoded = base64.b64encode(content).decode("utf-8") transformed_url_base64 = base64_encoded else: msg = f"Failed to download file from URL: {transformed_url[0]}" raise RuntimeError(msg) return CloudinaryEditOutput( transformed_url=transformed_url[0], base64=transformed_url_base64 if arguments.return_base64 else None, ) except cloudinary.exceptions.Error as e: msg = f"Cloudinary error occurred: {e}" raise RuntimeError(msg) except Exception as e: msg = f"An unexpected error occurred: {e}" raise RuntimeError(msg) ================================================ FILE: src/integrations-service/integrations/utils/integrations/email.py ================================================ import asyncio from email.message import EmailMessage from smtplib import SMTP import aiosmtplib from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import EmailArguments, EmailSetup from ...models import EmailOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def send(setup: EmailSetup, arguments: EmailArguments) -> EmailOutput: """ Sends an email with the provided details using async SMTP. """ # AIDEV-NOTE: Using aiosmtplib for async email sending to prevent timeout issues message = EmailMessage() # AIDEV-NOTE: Enhanced HTML detection and proper charset setting for HTML emails # Check if body contains HTML tags to determine content type html_indicators = [ "", " tuple[bool, str]: """Cached synchronous implementation of format validation""" signatures = { # Video formats b"\x66\x74\x79\x70\x69\x73\x6f\x6d": "video/mp4", # MP4 b"\x66\x74\x79\x70\x4d\x53\x4e\x56": "video/mp4", # MP4 b"\x00\x00\x00\x1c\x66\x74\x79\x70": "video/mp4", # MP4 b"\x1a\x45\xdf\xa3": "video/webm", # WebM b"\x00\x00\x01\x00": "video/avi", # AVI b"\x30\x26\xb2\x75": "video/wmv", # WMV # Audio formats b"\x49\x44\x33": "audio/mpeg", # MP3 b"\xff\xfb": "audio/mpeg", # MP3 b"\x52\x49\x46\x46": "audio/wav", # WAV b"\x4f\x67\x67\x53": "audio/ogg", # OGG b"\x66\x4c\x61\x43": "audio/flac", # FLAC # Image formats b"\xff\xd8\xff": "image/jpeg", # JPEG b"\x89\x50\x4e\x47": "image/png", # PNG b"\x47\x49\x46": "image/gif", # GIF b"\x49\x49\x2a\x00": "image/tiff", # TIFF b"\x42\x4d": "image/bmp", # BMP } for signature, mime_type in signatures.items(): if binary_prefix.startswith(signature): return True, mime_type return False, "application/octet-stream" async def validate_format(binary_data: bytes) -> tuple[bool, str]: """Validate file format using file signatures""" # Only check first 16 bytes for efficiency binary_prefix = binary_data[:16] return _sync_validate_format(binary_prefix) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def bash_cmd(arguments: FfmpegSearchArguments) -> FfmpegSearchOutput: """Execute a FFmpeg bash command using base64-encoded input data.""" try: # Decode base64 input try: if isinstance(arguments.file, str): input_data = [base64.b64decode(arguments.file)] # Convert single str to list elif isinstance(arguments.file, list): input_data = [base64.b64decode(file) for file in arguments.file] else: msg = "Invalid file input" raise ValueError(msg) except Exception: return FfmpegSearchOutput( fileoutput="Error: Invalid base64 input", result=False, mime_type=None, ) # Validate input format if not isinstance(input_data, list): return FfmpegSearchOutput( fileoutput="Error: Input data must be a list", result=False, mime_type=None, ) for data in input_data: is_valid, input_mime = await validate_format(data) if not is_valid: return FfmpegSearchOutput( fileoutput="Error: Unsupported input file format", result=False, mime_type=None, ) # Create temporary directory temp_dir = tempfile.mkdtemp() # Get the output filename from the last argument of the FFmpeg command cmd_parts = arguments.cmd.split() output_filename = cmd_parts[-1] # e.g., "output.mp4" output_path = os.path.join(temp_dir, output_filename) # Modify FFmpeg command for i, part in enumerate(cmd_parts): if part == "-i" and i + 1 < len(cmd_parts): cmd_parts[i + 1] = "pipe:0" cmd_parts[-1] = output_path # Replace the last argument with full output path cmd = " ".join(cmd_parts) # Execute FFmpeg process = await asyncio.create_subprocess_shell( cmd, stdin=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) # Ensure stdin is available (will satisfy type checker) if process.stdin is None: msg = "Failed to open stdin pipe for FFmpeg process" raise RuntimeError(msg) # Write each decoded image to FFmpeg's stdin for image_data in input_data: process.stdin.write(image_data) # Send image to stdin await process.stdin.drain() # Ensure smooth streaming # Close stdin to signal end of input process.stdin.close() # Process FFmpeg output stdout, stderr = await process.communicate() success = process.returncode == 0 if success and os.path.exists(output_path): # Read the output file with open(output_path, "rb") as f: output_data = f.read() # Convert to base64 output_base64 = base64.b64encode(output_data).decode("utf-8") _, output_mime = await validate_format(output_data) # Clean up shutil.rmtree(temp_dir) return FfmpegSearchOutput( fileoutput=output_base64, result=True, mime_type=output_mime, ) # Clean up in case of failure shutil.rmtree(temp_dir) error_msg = stderr.decode() if stderr else "Unknown error occurred" return FfmpegSearchOutput( fileoutput=f"Error: FFmpeg processing failed - {error_msg}", result=False, mime_type=None, ) except Exception as e: # Clean up in case of exception if "temp_dir" in locals(): shutil.rmtree(temp_dir) return FfmpegSearchOutput(fileoutput=f"Error: {e!s}", result=False, mime_type=None) ================================================ FILE: src/integrations-service/integrations/utils/integrations/google_sheets.py ================================================ import base64 import json from beartype import beartype from google.oauth2 import service_account from googleapiclient.discovery import build from googleapiclient.errors import HttpError from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import ( GoogleSheetsAppendArguments, GoogleSheetsBatchReadArguments, GoogleSheetsBatchWriteArguments, GoogleSheetsClearArguments, GoogleSheetsReadArguments, GoogleSheetsSetup, GoogleSheetsWriteArguments, ) from ...env import julep_google_sheets_service_account_json from ...models import ( GoogleSheetsBatchReadOutput, GoogleSheetsBatchWriteOutput, GoogleSheetsClearOutput, GoogleSheetsReadOutput, GoogleSheetsUpdateResponse, GoogleSheetsValueRangeOutput, GoogleSheetsWriteOutput, ) def get_sheets_service(setup: GoogleSheetsSetup): """ Create and return a Google Sheets service object using authentication credentials. Args: setup: The GoogleSheetsSetup containing authentication credentials Returns: A Google Sheets service object Raises: ValueError: If authentication configuration is invalid RuntimeError: If Julep's service account is not configured """ if setup.use_julep_service: # Use Julep's built-in service account julep_service_account = julep_google_sheets_service_account_json if not julep_service_account: msg = ( "Julep's Google Sheets service account is not configured. " "Please contact support or use your own service account by setting " "use_julep_service=false and providing service_account_json." ) raise RuntimeError(msg) service_account_json = julep_service_account else: # Use user-provided service account if not setup.service_account_json: msg = ( "service_account_json is required when use_julep_service is false. " "Either provide your own service account JSON (base64 encoded) or " "set use_julep_service=true to use Julep's built-in service account." ) raise ValueError(msg) service_account_json = setup.service_account_json # Decode and use the service account JSON try: # Add padding if missing missing_padding = len(service_account_json) % 4 if missing_padding: service_account_json += "=" * (4 - missing_padding) creds_dict = json.loads(base64.b64decode(service_account_json)) except Exception as e: msg = f"Failed to decode service account JSON: {e!s}" raise ValueError(msg) from e creds = service_account.Credentials.from_service_account_info( creds_dict, scopes=["https://www.googleapis.com/auth/spreadsheets"], ) # Build and return the sheets service return build("sheets", "v4", credentials=creds) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def read_values( setup: GoogleSheetsSetup, arguments: GoogleSheetsReadArguments ) -> GoogleSheetsReadOutput: """ Read values from a specific range in a Google Sheets spreadsheet. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsReadArguments with spreadsheet ID and range Returns: GoogleSheetsReadOutput with the values read from the spreadsheet """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Call the Sheets API to read values result = ( sheet.values() .get( spreadsheetId=arguments.spreadsheet_id, range=arguments.range, majorDimension=arguments.major_dimension, valueRenderOption=arguments.value_render_option, dateTimeRenderOption=arguments.date_time_render_option, ) .execute() ) # Extract values and metadata values = result.get("values", []) range_str = result.get("range", arguments.range) major_dimension = result.get("majorDimension", arguments.major_dimension) return GoogleSheetsReadOutput( range=range_str, major_dimension=major_dimension, values=values, ) except HttpError as error: msg = f"An error occurred while reading from Google Sheets: {error}" raise RuntimeError(msg) from error @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def write_values( setup: GoogleSheetsSetup, arguments: GoogleSheetsWriteArguments ) -> GoogleSheetsWriteOutput: """ Write or update values in a specific range in a Google Sheets spreadsheet. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsWriteArguments with spreadsheet ID, range, and values Returns: GoogleSheetsWriteOutput with information about the update """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Prepare the request body body = {"values": arguments.values} # Call the Sheets API to update values result = ( sheet.values() .update( spreadsheetId=arguments.spreadsheet_id, range=arguments.range, valueInputOption=arguments.value_input_option, body=body, includeValuesInResponse=arguments.include_values_in_response, responseValueRenderOption=( "FORMATTED_VALUE" if arguments.include_values_in_response else None ), ) .execute() ) # Extract update information return GoogleSheetsWriteOutput( spreadsheet_id=arguments.spreadsheet_id, updated_range=result.get("updatedRange"), updated_rows=result.get("updatedRows"), updated_columns=result.get("updatedColumns"), updated_cells=result.get("updatedCells"), updated_values=( result.get("updatedData", {}).get("values") if arguments.include_values_in_response else None ), ) except HttpError as error: msg = f"An error occurred while writing to Google Sheets: {error}" raise RuntimeError(msg) from error @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def append_values( setup: GoogleSheetsSetup, arguments: GoogleSheetsAppendArguments ) -> GoogleSheetsWriteOutput: """ Append new rows of data to a Google Sheets spreadsheet. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsAppendArguments with spreadsheet ID, range, and values Returns: GoogleSheetsWriteOutput with information about the append operation """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Prepare the request body body = {"values": arguments.values} # Call the Sheets API to append values result = ( sheet.values() .append( spreadsheetId=arguments.spreadsheet_id, range=arguments.range, valueInputOption=arguments.value_input_option, insertDataOption=arguments.insert_data_option, body=body, includeValuesInResponse=arguments.include_values_in_response, responseValueRenderOption=( "FORMATTED_VALUE" if arguments.include_values_in_response else None ), ) .execute() ) # Extract update information updates = result.get("updates", {}) return GoogleSheetsWriteOutput( spreadsheet_id=arguments.spreadsheet_id, updated_range=updates.get("updatedRange"), updated_rows=updates.get("updatedRows"), updated_columns=updates.get("updatedColumns"), updated_cells=updates.get("updatedCells"), updated_values=( updates.get("updatedData", {}).get("values") if arguments.include_values_in_response else None ), ) except HttpError as error: msg = f"An error occurred while appending to Google Sheets: {error}" raise RuntimeError(msg) from error @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def clear_values( setup: GoogleSheetsSetup, arguments: GoogleSheetsClearArguments ) -> GoogleSheetsClearOutput: """ Clear values from a specific range in a Google Sheets spreadsheet. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsClearArguments with spreadsheet ID and range Returns: GoogleSheetsClearOutput with information about the clear operation """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Call the Sheets API to clear values result = ( sheet.values() .clear( spreadsheetId=arguments.spreadsheet_id, range=arguments.range, body={}, ) .execute() ) # Extract clear information return GoogleSheetsClearOutput( spreadsheet_id=arguments.spreadsheet_id, cleared_range=result.get("clearedRange", arguments.range), ) except HttpError as error: msg = f"An error occurred while clearing Google Sheets: {error}" raise RuntimeError(msg) from error @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def batch_read( setup: GoogleSheetsSetup, arguments: GoogleSheetsBatchReadArguments ) -> GoogleSheetsBatchReadOutput: """ Read values from multiple ranges in a Google Sheets spreadsheet in a single request. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsBatchReadArguments with spreadsheet ID and ranges Returns: GoogleSheetsBatchReadOutput with the values read from all specified ranges """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Call the Sheets API to batch get values result = ( sheet.values() .batchGet( spreadsheetId=arguments.spreadsheet_id, ranges=arguments.ranges, majorDimension=arguments.major_dimension, valueRenderOption=arguments.value_render_option, dateTimeRenderOption=arguments.date_time_render_option, ) .execute() ) # Extract value ranges value_ranges = [ GoogleSheetsValueRangeOutput( range=value_range.get("range", ""), major_dimension=value_range.get("majorDimension", arguments.major_dimension), values=value_range.get("values", []), ) for value_range in result.get("valueRanges", []) ] return GoogleSheetsBatchReadOutput( spreadsheet_id=arguments.spreadsheet_id, value_ranges=value_ranges, ) except HttpError as error: msg = f"An error occurred during batch read from Google Sheets: {error}" raise RuntimeError(msg) from error @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def batch_write( setup: GoogleSheetsSetup, arguments: GoogleSheetsBatchWriteArguments ) -> GoogleSheetsBatchWriteOutput: """ Write values to multiple ranges in a Google Sheets spreadsheet in a single request. Args: setup: The GoogleSheetsSetup containing authentication credentials arguments: The GoogleSheetsBatchWriteArguments with spreadsheet ID and data Returns: GoogleSheetsBatchWriteOutput with information about all updates """ try: service = get_sheets_service(setup) sheet = service.spreadsheets() # Prepare the value ranges for the request value_ranges = [] for data_item in arguments.data: value_range = { "range": data_item.range, "values": data_item.values, } if data_item.major_dimension: value_range["majorDimension"] = data_item.major_dimension value_ranges.append(value_range) # Prepare the request body body = { "valueInputOption": arguments.value_input_option, "data": value_ranges, "includeValuesInResponse": arguments.include_values_in_response, } if arguments.include_values_in_response: body["responseValueRenderOption"] = "FORMATTED_VALUE" # Call the Sheets API to batch update values result = ( sheet.values() .batchUpdate( spreadsheetId=arguments.spreadsheet_id, body=body, ) .execute() ) # Extract update information responses = [ GoogleSheetsUpdateResponse( updated_range=response.get("updatedRange"), updated_rows=response.get("updatedRows"), updated_columns=response.get("updatedColumns"), updated_cells=response.get("updatedCells"), ) for response in result.get("responses", []) ] return GoogleSheetsBatchWriteOutput( spreadsheet_id=arguments.spreadsheet_id, total_updated_sheets=result.get("totalUpdatedSheets"), total_updated_rows=result.get("totalUpdatedRows"), total_updated_columns=result.get("totalUpdatedColumns"), total_updated_cells=result.get("totalUpdatedCells"), responses=responses, ) except HttpError as error: msg = f"An error occurred during batch write to Google Sheets: {error}" raise RuntimeError(msg) from error ================================================ FILE: src/integrations-service/integrations/utils/integrations/llama_parse.py ================================================ import base64 import uuid from beartype import beartype from llama_parse import LlamaParse from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import LlamaParseFetchArguments, LlamaParseSetup from ...models import LlamaParseFetchOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def parse( setup: LlamaParseSetup, arguments: LlamaParseFetchArguments, ) -> LlamaParseFetchOutput: """ Parse and extract content from files using LlamaParse. """ api_key = setup.llamaparse_api_key # get the additional params params = ( {**setup.params, **arguments.params} if setup.params and arguments.params else setup.params or arguments.params ) parser = LlamaParse( api_key=api_key, # Use the local variable instead **(params or {}), ) if isinstance(arguments.file, str) and arguments.base64: extra_info = {"file_name": arguments.filename or str(uuid.uuid4())} # Parse the document (decode inline) documents = await parser.aload_data( base64.b64decode(arguments.file), extra_info=extra_info, ) else: extra_info = {"file_name": arguments.filename} if arguments.filename else None # Parse the document (decode inline) documents = await parser.aload_data(arguments.file, extra_info=extra_info) return LlamaParseFetchOutput(documents=documents) ================================================ FILE: src/integrations-service/integrations/utils/integrations/mailgun.py ================================================ import re import aiohttp from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import MailgunSendEmailArguments, MailgunSetup from ...models import MailgunSendEmailOutput def validate_email(email: str) -> bool: """ Validates an email address using a regex pattern. """ pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" return bool(re.match(pattern, email)) def validate_email_list(emails: str) -> bool: """ Validates a comma-separated list of email addresses. """ if not emails: return True for email in emails.split(","): email = email.strip() if email and not validate_email(email): return False return True @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(3), ) async def send_email( setup: MailgunSetup, arguments: MailgunSendEmailArguments ) -> MailgunSendEmailOutput: """ Sends an email with the provided details using the Mailgun API. """ # Validate email addresses if not validate_email(arguments.from_): return MailgunSendEmailOutput( success=False, error=f"Invalid sender email address: {arguments.from_}" ) if not validate_email(arguments.to): return MailgunSendEmailOutput( success=False, error=f"Invalid recipient email address: {arguments.to}" ) if arguments.cc and not validate_email_list(arguments.cc): return MailgunSendEmailOutput( success=False, error=f"Invalid CC email address(es): {arguments.cc}" ) if arguments.bcc and not validate_email_list(arguments.bcc): return MailgunSendEmailOutput( success=False, error=f"Invalid BCC email address(es): {arguments.bcc}" ) domain = arguments.from_.split("@")[-1] # Extract domain from from_ address (e.g. "test@example.com" -> "email.example.com") if not domain.startswith("email."): domain = "email." + domain # Use API key from setup api_key = setup.api_key # API URL url = f"https://api.mailgun.net/v3/{domain}/messages" # Prepare payload data = { "from": arguments.from_, "to": arguments.to, "subject": arguments.subject, "text": arguments.body, } # Add CC and BCC if provided if arguments.cc: data["cc"] = arguments.cc if arguments.bcc: data["bcc"] = arguments.bcc # Make API request async with aiohttp.ClientSession() as session: auth = aiohttp.BasicAuth("api", api_key) async with session.post(url, data=data, auth=auth) as response: if response.status in (200, 201, 202): return MailgunSendEmailOutput(success=True) error_text = await response.text() return MailgunSendEmailOutput( success=False, error=f"Email was not sent successfully: {error_text}" ) ================================================ FILE: src/integrations-service/integrations/utils/integrations/mcp.py ================================================ """ MCP (Model Context Protocol) Integration for Julep This module provides a native MCP client integration that allows Julep agents to: 1. Connect to MCP servers using HTTP or SSE (Server-Sent Events) transports 2. Dynamically discover available tools from the server 3. Execute tools with proper error handling and retry logic The MCP integration enables Julep to interface with external tools and services through a standardized protocol, making it extensible without hardcoding specific integrations. Transport Options: - HTTP: Standard request-response pattern using streamablehttp_client - SSE: Server-Sent Events for streaming responses using dedicated sse_client Note: Both transports require mcp>=1.8.0. The HTTP transport uses streamablehttp_client which supports both regular HTTP and streaming responses. The SSE transport uses a dedicated sse_client for proper event stream handling. Stdio transport has been removed for security reasons. """ from __future__ import annotations import asyncio import contextlib import importlib.metadata import sys from contextlib import AsyncExitStack from types import TracebackType from typing import Any from beartype import beartype from packaging import version from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import McpCallToolArguments, McpListToolsArguments, McpSetup from ...models import McpListToolsOutput, McpToolCallOutput def _ensure_mcp_available() -> None: """ Check if the MCP SDK is installed and available. This is a runtime check to provide clear error messages if the MCP dependency is missing, rather than cryptic import errors later. """ try: import mcp # noqa: F401 except Exception as e: # pragma: no cover - import path validation msg = ( "The 'mcp' Python package is required for MCP integration. " "Add 'mcp' to integrations-service dependencies and install it." ) raise RuntimeError(msg) from e # Module-level dynamic import for MCP clients with version check try: mcp_version = importlib.metadata.version("mcp") if version.parse(mcp_version) < version.parse("1.8.0"): msg = ( f"Your installed 'mcp' SDK version {mcp_version} does not support required transports. " f"Required: mcp>=1.8.0. Please update with: pip install 'mcp>=1.8.0'." ) raise RuntimeError(msg) from mcp.client.sse import sse_client from mcp.client.streamable_http import streamablehttp_client except ImportError as e: msg = ( f"MCP transports require mcp>=1.8.0. Underlying import error: {e}. " f"Please update with: pip install 'mcp>=1.8.0'." ) raise RuntimeError(msg) from e @retry( wait=wait_exponential(multiplier=1, min=4, max=16), reraise=True, stop=stop_after_attempt(5), ) async def _connect_session(setup: McpSetup): """ Create and initialize an MCP client session for the given setup. This function establishes connections to MCP servers using either: - streamablehttp_client for HTTP transport (standard request/response) - sse_client for SSE transport (Server-Sent Events streaming) The session management pattern ensures proper cleanup of resources. Args: setup: MCP setup configuration with transport type and connection details Returns: tuple: (session, aclose) where session is the active MCP client and aclose is an async cleanup function that must be called when done Raises: ValueError: If required configuration is missing or transport type is unknown RuntimeError: If connection to the MCP server fails """ _ensure_mcp_available() from mcp import ClientSession transport = setup.transport if transport in ("http", "sse"): if not setup.http_url: msg = f"McpSetup.http_url is required for {transport} transport" raise ValueError(msg) headers = setup.http_headers or {} if transport == "sse": # SSE transport uses the dedicated sse_client for proper event stream handling headers = { **headers, "Accept": "text/event-stream", "Cache-Control": "no-cache", } client_ctx = sse_client(str(setup.http_url), headers=headers) else: # HTTP transport uses streamablehttp_client client_ctx = streamablehttp_client(str(setup.http_url), headers=headers) stack = AsyncExitStack() closed = False stage = "transport" # AsyncExitStack keeps MCP client cleanup on the same task to avoid cancel-scope errors. try: result = await stack.enter_async_context(client_ctx) stage = "session" if isinstance(result, tuple): read, write = result[:2] else: read = result write = result session = await stack.enter_async_context(ClientSession(read, write)) stage = "initialize" await session.initialize() except Exception as e: with contextlib.suppress(Exception): await stack.__aexit__(type(e), e, e.__traceback__) error_msg: str if stage == "transport": error_msg = ( f"Failed to connect to {transport.upper()} endpoint {setup.http_url}: {e}" ) else: error_msg = f"Failed to establish {transport.upper()} connection to {setup.http_url}: {e}" raise RuntimeError(error_msg) from e async def aclose( exc_type: type[BaseException] | None = None, exc: BaseException | None = None, tb: TracebackType | None = None, ) -> None: nonlocal closed if closed: return closed = True if exc_type is None and exc is None and tb is None: exc_type, exc, tb = sys.exc_info() with contextlib.suppress(Exception): await stack.__aexit__(exc_type, exc, tb) return session, aclose msg = f"Unknown MCP transport: {transport}" raise ValueError(msg) def _serialize_content_item(item: Any) -> dict[str, Any]: """ Best-effort conversion of MCP content item to JSON-serializable dict. MCP servers can return various content types (text, images, structured data). This function normalizes them into a consistent format that can be serialized to JSON and passed back through our API. The fallback chain ensures we never lose data, even if it's in an unexpected format. """ try: # Most MCP SDK objects support model_dump() for Pydantic-style serialization return item.model_dump() # type: ignore[attr-defined] except Exception: try: # Fallback to dict conversion for simpler objects return dict(item) except Exception: # Last resort: string representation to preserve some information return {"repr": repr(item)} @beartype @retry( wait=wait_exponential(multiplier=1, min=1, max=8), reraise=True, stop=stop_after_attempt(1), ) async def list_tools(setup: McpSetup, arguments: McpListToolsArguments) -> McpListToolsOutput: """ Discover available tools from an MCP server. This is the key innovation of MCP integration - instead of hardcoding tools, we dynamically discover what's available from any MCP server. This makes Julep infinitely extensible - just point it at a new MCP server and all its tools become available to your agents automatically. The retry logic handles transient network issues, especially important for remote HTTP-based MCP servers. Args: setup: MCP connection configuration (transport type, URL, headers) arguments: Arguments for listing tools (currently unused, reserved for future filtering) Returns: McpListToolsOutput: List of discovered tools with their names, descriptions, and schemas Raises: RuntimeError: If connection to the MCP server fails ValueError: If configuration is invalid """ # AIDEV-NOTE: Debug logging for MCP tool discovery - remove in production session, aclose = await _connect_session(setup) try: # Query the MCP server for its tool catalog tools = await session.list_tools() # Transform MCP tool format to Julep's internal format # Extract the essential fields that Julep needs to present tools to agents out = [ { "name": t.name, "description": getattr(t, "description", None), "input_schema": getattr(t, "inputSchema", None), # JSON Schema for validation } for t in tools.tools ] return McpListToolsOutput(tools=out) # type: ignore[arg-type] finally: await aclose() @beartype @retry( wait=wait_exponential(multiplier=1, min=1, max=8), reraise=True, stop=stop_after_attempt(3), ) async def call_tool(setup: McpSetup, arguments: McpCallToolArguments) -> McpToolCallOutput: """ Execute a specific tool on an MCP server with the provided arguments. This allows Julep agents to call any tool exposed by an MCP server without knowing its implementation details. The tool could be running Python, Node.js, Rust, or any language - MCP abstracts that away. Key features: - Automatic retry on failure (network issues, timeouts) - Timeout support for long-running tools - Response normalization for consistent handling Args: setup: MCP connection configuration (transport type, URL, headers) arguments: Contains tool_name, arguments dict, and optional timeout_seconds Returns: McpToolCallOutput: Normalized tool response with: - text: Concatenated text content from the response - structured: Any structured data returned by the tool - content: Raw content items as JSON-serializable dicts - is_error: Whether the tool execution resulted in an error Raises: asyncio.TimeoutError: If the tool execution exceeds the specified timeout RuntimeError: If connection to the MCP server fails ValueError: If configuration is invalid """ # AIDEV-NOTE: Debug logging for MCP tool execution - remove in production session, aclose = await _connect_session(setup) try: # Enforce timeout per call if provided async def _invoke(): return await session.call_tool( arguments.tool_name, arguments=arguments.arguments or {} ) if arguments.timeout_seconds and arguments.timeout_seconds > 0: result = await asyncio.wait_for(_invoke(), timeout=arguments.timeout_seconds) else: result = await _invoke() # Normalize result content text_parts: list[str] = [] content_items: list[dict[str, Any]] = [] structured = getattr(result, "structuredContent", None) is_error = getattr(result, "isError", False) try: from mcp import types as mcp_types # type: ignore except Exception: mcp_types = None # type: ignore for item in getattr(result, "content", []) or []: # Extract text content if type info is available if mcp_types is not None and isinstance( item, getattr(mcp_types, "TextContent", ()) ): text = getattr(item, "text", None) if text: text_parts.append(text) elif hasattr(item, "text") and item.text: text_parts.append(item.text) content_items.append(_serialize_content_item(item)) return McpToolCallOutput( text="\n".join(text_parts) if text_parts else None, structured=structured, # type: ignore[arg-type] content=content_items, is_error=bool(is_error), ) finally: await aclose() ================================================ FILE: src/integrations-service/integrations/utils/integrations/remote_browser.py ================================================ import base64 import json from functools import partial from io import BytesIO from pathlib import Path from typing import Any from beartype import beartype from PIL import Image from playwright.async_api import ( Browser, BrowserContext, Keyboard, Mouse, Page, PlaywrightContextManager, async_playwright, ) from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import RemoteBrowserArguments, RemoteBrowserSetup from ...models import RemoteBrowserOutput CURSOR_PATH = Path(__file__).parent / "assets" / "cursor-small.png" class PlaywrightActions: """Class to handle browser automation actions using Playwright.""" browser: Browser page: Page context: BrowserContext mouse: Mouse keyboard: Keyboard width: int | None height: int | None def __init__( self, browser: Browser, width: int | None = None, height: int | None = None, ) -> None: self.browser = browser self.context = self.browser.contexts[0] self.page = self.context.pages[0] self.mouse = self.page.mouse self.keyboard = self.page.keyboard self.width, self.height = width, height async def _is_initialized(self) -> bool: """Check if the page is initialized""" return bool( await self._execute_javascript(""" window.$$julep$$_initialized """), ) async def initialize(self, debug: bool = False) -> None: if debug: self.page.on("console", lambda msg: print(msg.text)) if self.width and self.height: current_width, current_height = await self._get_screen_size() if current_width != self.width or current_height != self.height: await self._set_screen_size(self.width, self.height) # Install mouse move event listener init_script = """ // Update mouse coordinates on mouse move // but only on the top document if (window === window.parent) window.addEventListener( 'DOMContentLoaded', () => { const updateMouseCoordinates = (event) => { window.mouseX = event.clientX; window.mouseY = event.clientY; }; if (!window.$$julep$$_mouseListenerInitialized) { window.addEventListener('mousemove', updateMouseCoordinates); window.addEventListener('mouseup', updateMouseCoordinates); window.addEventListener('mousedown', updateMouseCoordinates); window.addEventListener('click', updateMouseCoordinates); window.addEventListener('dblclick', updateMouseCoordinates); window.$$julep$$_mouseListenerInitialized = true; } } ); """ await self.page.add_init_script(init_script) await self.page.evaluate(init_script) await self._reset_mouse() async def _reset_mouse(self) -> None: # Wait for the page to be fully loaded await self._wait_for_load() if not await self._is_initialized(): await self.page.mouse.move(self.width // 2, self.height // 2) await self.page.evaluate(""" window.$$julep$$_initialized = true; """) # @staticmethod # def _with_error_and_screenshot(f): # @wraps(f) # async def wrapper(self: "PlaywrightActions", *args, **kwargs): # try: # result: RemoteBrowserOutput = await f(self, *args, **kwargs) # await self._wait_for_load() # screenshot: RemoteBrowserOutput = await self.take_screenshot() # return RemoteBrowserOutput( # output=result.output, # base64_image=screenshot.base64_image, # system=result.system or f.__name__, # ) # except Exception as e: # return RemoteBrowserOutput(error=str(e)) # return wrapper async def _get_screen_size(self) -> tuple[int, int]: """Get the current browser viewport size""" viewport: dict[str, int] | None = self.page.viewport_size if viewport is None: return (0, 0) return (viewport["width"], viewport["height"]) async def _set_screen_size(self, width: int, height: int) -> None: """Set the current browser viewport size""" await self.page.set_viewport_size({"width": width, "height": height}) async def _wait_for_load(self, event: str = "domcontentloaded", timeout: int = 0) -> None: """Wait for document to be fully loaded""" await self.page.wait_for_load_state(event, timeout=timeout) async def _execute_javascript(self, script: str, *args) -> Any: """Execute JavaScript code and return the result""" return await self.page.evaluate(script, *args) async def _set_window_vars(self, variables: dict[str, Any]) -> None: """Set variables in the window scope""" json_str = json.dumps(variables) script = """ const vars = JSON.parse(arguments[0]); for (const [key, value] of Object.entries(vars)) { window[key] = value; } """ await self._execute_javascript(script, json_str) async def _get_mouse_coordinates(self) -> tuple[int, int]: """Get current mouse coordinates""" result = await self._execute_javascript(""" [window.mouseX, window.mouseY] """) return result[0], result[1] async def _get_element_coordinates(self, selector: str) -> tuple[int, int]: """Get the coordinates of an element""" element = await self.page.query_selector(selector) if element: box = await element.bounding_box() return (box["x"], box["y"]) msg = f"Element not found: {selector}" raise Exception(msg) def _overlay_cursor(self, screenshot_bytes: bytes, x: int, y: int) -> bytes: """Overlay the cursor image on the screenshot at the specified coordinates.""" # Load the screenshot from bytes screenshot = Image.open(BytesIO(screenshot_bytes)).convert("RGBA") # Load the cursor image cursor = Image.open( "./integrations/utils/integrations/assets/cursor-small.png", ).convert("RGBA") # Create a copy of the screenshot to overlay the cursor combined = screenshot.copy() combined.paste(cursor, (x, y), cursor) # Save the combined image to bytes output = BytesIO() combined.save(output, format="PNG") return output.getvalue() # --- # Actions async def navigate(self, url: str) -> RemoteBrowserOutput: """Navigate to a specific URL""" await self.page.goto(url) await self._reset_mouse() return RemoteBrowserOutput( output=url, ) async def refresh(self) -> RemoteBrowserOutput: """Refresh the current page""" await self.page.reload() await self._reset_mouse() return RemoteBrowserOutput( output="Refreshed page", ) async def cursor_position(self) -> RemoteBrowserOutput: """Get current mouse coordinates""" x, y = await self._get_mouse_coordinates() return RemoteBrowserOutput( output=f"X={x}, Y={y}", ) async def press_key(self, key_combination: str) -> RemoteBrowserOutput: """Press a key or key combination""" # Split combination into individual keys keys = key_combination.split("+") keys = [ "Enter" if k == "Return" else "Control" if k == "ctrl" else "PageDown" if k == "Page_Down" else k for k in keys ] # Press modifier keys first for key in keys[:-1]: await self.page.keyboard.down(key) # Press and release the last key await self.page.keyboard.press(keys[-1]) # Release modifier keys in reverse order for key in reversed(keys[:-1]): await self.page.keyboard.up(key) return RemoteBrowserOutput( output=f"Pressed {key_combination}", ) async def type_text(self, text: str) -> RemoteBrowserOutput: """Type a string of text""" await self.page.keyboard.type(text) return RemoteBrowserOutput( output=f"Typed {text}", ) async def mouse_move(self, coordinate: tuple[int, int]) -> RemoteBrowserOutput: """Move mouse to specified coordinates""" await self.mouse.move(*coordinate) return RemoteBrowserOutput( output=f"Moved mouse to {coordinate}", ) async def left_click(self) -> RemoteBrowserOutput: """Perform left mouse click""" x, y = await self._get_mouse_coordinates() await self.mouse.click(x, y) return RemoteBrowserOutput( output="Left clicked", ) async def left_click_drag(self, coordinate: tuple[int, int]) -> RemoteBrowserOutput: """Click and drag to specified coordinates""" await self.mouse.down() await self.mouse.move(*coordinate) await self.mouse.up() return RemoteBrowserOutput( output=f"Left clicked and dragged to {coordinate}", ) async def right_click(self) -> RemoteBrowserOutput: """Perform right mouse click""" x, y = await self._get_mouse_coordinates() await self.mouse.click(x, y, button="right") return RemoteBrowserOutput( output="Right clicked", ) async def middle_click(self) -> RemoteBrowserOutput: """Perform middle mouse click""" x, y = await self._get_mouse_coordinates() await self.mouse.click(x, y, button="middle") return RemoteBrowserOutput( output="Middle clicked", ) async def double_click(self) -> RemoteBrowserOutput: """Perform double click""" x, y = await self._get_mouse_coordinates() await self.mouse.dblclick(x, y) return RemoteBrowserOutput( output="Double clicked", ) async def take_screenshot(self, filename: str | None = None) -> RemoteBrowserOutput: """Take a screenshot of the current browser window""" try: screenshot = await self.page.screenshot() except Exception as e: return RemoteBrowserOutput(error=str(e), system="take_screenshot") x, y = await self._get_mouse_coordinates() screenshot = self._overlay_cursor(screenshot, x, y) if filename: with open(filename, "wb") as f: f.write(screenshot) encoded = base64.b64encode(screenshot).decode("utf-8") return RemoteBrowserOutput( base64_image=f"data:image/png;base64,{encoded}", system="take_screenshot", ) async def perform_action( self, action: str, coordinate: tuple[int, int] | None = None, text: str | None = None, ) -> RemoteBrowserOutput: """Perform a specified automation action""" try: actions = { # Anthropic "key": partial(self.press_key, text), "type": partial(self.type_text, text), "mouse_move": partial(self.mouse_move, coordinate), "left_click": self.left_click, "left_click_drag": partial(self.left_click_drag, coordinate), "right_click": self.right_click, "middle_click": self.middle_click, "double_click": self.double_click, "screenshot": self.take_screenshot, "cursor_position": self.cursor_position, # # Additional "navigate": partial(self.navigate, text), "refresh": self.refresh, } if action not in actions: msg = f"Invalid action: {action}" raise ValueError(msg) return await actions[action]() except Exception as e: msg = f"Error performing action {action}: {e!s}" raise Exception(msg) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def perform_action( setup: RemoteBrowserSetup, arguments: RemoteBrowserArguments, ) -> RemoteBrowserOutput: p: PlaywrightContextManager = await async_playwright().start() connect_url = setup.connect_url if setup.connect_url else arguments.connect_url browser = await p.chromium.connect_over_cdp(connect_url) automation = PlaywrightActions(browser, width=setup.width, height=setup.height) await automation.initialize() return await automation.perform_action( action=arguments.action, coordinate=arguments.coordinate, text=arguments.text, ) ================================================ FILE: src/integrations-service/integrations/utils/integrations/spider.py ================================================ from beartype import beartype from spider import AsyncSpider from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import SpiderFetchArguments, SpiderSetup from ...models import SpiderOutput, SpiderResponse @beartype def create_spider_response(pages: list[dict]) -> list[SpiderResponse]: return [ SpiderResponse( url=page.get("url"), content=(page.get("content")), error=page.get("error"), status=page.get("status"), costs=page.get("costs"), ) for page in pages ] @beartype async def execute_spider_method( method_name: str, setup: SpiderSetup, arguments: SpiderFetchArguments, ) -> SpiderOutput: api_key = setup.spider_api_key # Initialize the final result list final_result = [] # Initialize the results variable results = None try: async with AsyncSpider(api_key=api_key) as spider_client: async for result in getattr(spider_client, method_name)( url=str(arguments.url), params=arguments.params, stream=False, content_type=arguments.content_type, ): results = result if results is None: msg = "No results found" raise ValueError(msg) final_result = create_spider_response(results) except Exception as e: # Log the exception or handle it as needed msg = f"Error executing spider method '{method_name}': {e}" raise RuntimeError(msg) return SpiderOutput(result=final_result) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def crawl(setup: SpiderSetup, arguments: SpiderFetchArguments) -> SpiderOutput: """ Crawl a website and extract data. """ return await execute_spider_method("crawl_url", setup, arguments) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def links(setup: SpiderSetup, arguments: SpiderFetchArguments) -> SpiderOutput: """ Extract all links from the webpage. """ return await execute_spider_method("links", setup, arguments) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def screenshot(setup: SpiderSetup, arguments: SpiderFetchArguments) -> SpiderOutput: """ Take a screenshot of the webpage. """ return await execute_spider_method("screenshot", setup, arguments) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def search(setup: SpiderSetup, arguments: SpiderFetchArguments) -> SpiderOutput: """ Search content within the webpage. """ return await execute_spider_method("search", setup, arguments) ================================================ FILE: src/integrations-service/integrations/utils/integrations/unstructured.py ================================================ import base64 import uuid from typing import Any import unstructured_client from beartype import beartype from tenacity import retry, stop_after_attempt, wait_exponential from unstructured_client.models import operations, shared from ...autogen.Tools import UnstructuredPartitionArguments, UnstructuredSetup from ...models import UnstructuredParseOutput def to_unstructured_strategy( value: Any, default: shared.Strategy | None = None ) -> shared.Strategy | None: """ Convert a user-provided strategy (string/enum) to unstructured_client.models.shared.Strategy. Accepts common aliases and ignores case, spaces, and dashes. Returns `default` if value is None or unrecognized. """ if value is None: return default if isinstance(value, shared.Strategy): return value s = str(value).strip().lower().replace("-", "_").replace(" ", "_") aliases = { "hires": "hi_res", "hires_ocr": "hi_res", "highres": "hi_res", "high_res": "hi_res", "ocr": "ocr_only", "ocronly": "ocr_only", "od": "od_only", "odonly": "od_only", "object_detection_only": "od_only", } s = aliases.get(s, s) mapping = { "fast": shared.Strategy.FAST, "hi_res": shared.Strategy.HI_RES, "auto": shared.Strategy.AUTO, "ocr_only": shared.Strategy.OCR_ONLY, "od_only": shared.Strategy.OD_ONLY, "vlm": shared.Strategy.VLM, } return mapping.get(s, default) @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def parse( setup: UnstructuredSetup, arguments: UnstructuredPartitionArguments, ) -> UnstructuredParseOutput: """ Parse documents into structured elements using Unstructured.io. """ # AIDEV-NOTE: Extract and convert strategy/chunking_strategy explicitly for proper API handling params = ( arguments.partition_params if hasattr(arguments, "partition_params") and arguments.partition_params else {} ) # Extract strategy and chunking_strategy for explicit handling # AIDEV-NOTE: Use .get() instead of .pop() to avoid mutating params on retries strategy = to_unstructured_strategy(params.get("strategy", None)) chunking_strategy = params.get("chunking_strategy", None) api_key = setup.unstructured_api_key # Create a new client with all available parameters client = unstructured_client.UnstructuredClient( api_key_auth=api_key, server_url=setup.server_url, server=setup.server, url_params=setup.url_params, timeout_ms=setup.timeout_ms, ) # Decode the base64 encoded file try: decoded_file = base64.b64decode(arguments.file) except Exception as e: msg = f"Failed to decode base64 encoded file: {e}" raise RuntimeError(msg) # Process file # Build partition parameters with explicit strategy and chunking_strategy partition_params = { "files": shared.Files( content=decoded_file, file_name=arguments.filename or f"{uuid.uuid4()}.txt", ), } # Add strategy and chunking_strategy explicitly if provided if strategy is not None: partition_params["strategy"] = strategy if chunking_strategy is not None: partition_params["chunking_strategy"] = chunking_strategy # Spread the rest of the parameters (excluding strategy and chunking_strategy) partition_params.update({ k: v for k, v in params.items() if k not in ["strategy", "chunking_strategy"] }) req = operations.PartitionRequest( partition_parameters=shared.PartitionParameters(**partition_params) ) try: # Make the API call result = await client.general.partition_async(request=req) return UnstructuredParseOutput( content_type=result.content_type, status_code=result.status_code, csv_elements=result.csv_elements or None, content=result.elements or None, ) except Exception as e: # Return error information instead of raising HTTP exception msg = f"Error executing Unstructured method: {e}" raise RuntimeError(msg) ================================================ FILE: src/integrations-service/integrations/utils/integrations/weather.py ================================================ from beartype import beartype from langchain_community.utilities import OpenWeatherMapAPIWrapper from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import WeatherGetArguments, WeatherSetup from ...models import WeatherGetOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def get(setup: WeatherSetup, arguments: WeatherGetArguments) -> WeatherGetOutput: """ Fetches weather data for a specified location using OpenWeatherMap API. """ location = arguments.location weather = OpenWeatherMapAPIWrapper(openweathermap_api_key=setup.openweathermap_api_key) result = weather.run(location) return WeatherGetOutput(result=result) ================================================ FILE: src/integrations-service/integrations/utils/integrations/wikipedia.py ================================================ from beartype import beartype from langchain_community.document_loaders import WikipediaLoader from tenacity import retry, stop_after_attempt, wait_exponential from ...autogen.Tools import WikipediaSearchArguments from ...models import WikipediaSearchOutput @beartype @retry( wait=wait_exponential(multiplier=1, min=4, max=10), reraise=True, stop=stop_after_attempt(4), ) async def search( arguments: WikipediaSearchArguments, ) -> WikipediaSearchOutput: """ Searches Wikipedia for a given query and returns formatted results. """ query = arguments.query load_max_docs = arguments.load_max_docs loader = WikipediaLoader(query=query, load_max_docs=load_max_docs) documents = loader.load() return WikipediaSearchOutput(documents=documents) ================================================ FILE: src/integrations-service/integrations/web.py ================================================ import asyncio import logging import os from collections.abc import Callable from typing import Any import sentry_sdk import uvicorn import uvloop from fastapi import FastAPI, Request, status from fastapi.exceptions import HTTPException, RequestValidationError from fastapi.middleware.gzip import GZipMiddleware from fastapi.responses import JSONResponse from .env import sentry_dsn from .routers.execution.router import router as execution_router from .routers.integrations.router import router as integrations_router if not sentry_dsn: print("Sentry DSN not found. Sentry will not be enabled.") else: sentry_sdk.init( dsn=sentry_dsn, enable_tracing=True, ) app: FastAPI = FastAPI( title="Integrations Service", docs_url="/docs", redoc_url="/redoc", openapi_url="/openapi.json", default_response_class=JSONResponse, ) # Add GZIP compression app.add_middleware(GZipMiddleware, minimum_size=1000) # Add routers app.include_router(integrations_router) app.include_router(execution_router) # Optimize event loop policy asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) logger: logging.Logger = logging.getLogger(__name__) def make_exception_handler(status: int) -> Callable[[Any, Any], Any]: """ Creates a custom exception handler for the application. Parameters: - status (int): The HTTP status code to return for this exception. Returns: A callable exception handler that logs the exception and returns a JSON response with the specified status code. """ async def _handler(request: Request, exc): exc_str = f"{exc}".replace("\n", " ").replace(" ", " ") logger.exception(exc) content = {"status_code": status, "message": exc_str, "data": None} return JSONResponse(content=content, status_code=status) return _handler def register_exceptions(app: FastAPI) -> None: """ Registers custom exception handlers for the FastAPI application. Parameters: - app (FastAPI): The FastAPI application instance to register the exception handlers for. """ app.add_exception_handler( RequestValidationError, make_exception_handler(status.HTTP_422_UNPROCESSABLE_ENTITY), ) @app.exception_handler(HTTPException) async def http_exception_handler(request, exc: HTTPException): # pylint: disable=unused-argument return JSONResponse( status_code=exc.status_code, content={"error": {"message": str(exc)}}, ) def main( host="0.0.0.0", port=8000, backlog=4096, timeout_keep_alive=30, workers=None, log_level="info", reload=bool(os.environ.get("RELOAD")), ) -> None: print(f"Reload: {reload}") uvicorn.run( "integrations.web:app", host=host, port=port, log_level=log_level, timeout_keep_alive=timeout_keep_alive, backlog=backlog, workers=workers, reload=reload, ) ================================================ FILE: src/integrations-service/poe_tasks.toml ================================================ [tasks] format = "ruff format" lint = "ruff check" typecheck = "pytype --config pytype.toml" check = [ "lint", "format", "typecheck", ] test = "pytest" codegen = """ datamodel-codegen \ --input ../openapi.yaml \ --input-file-type openapi \ --output integrations/autogen/ \ --output-model-type pydantic_v2.BaseModel \ --strict-types bool \ --strict-nullable \ --allow-population-by-field-name \ --field-include-all-keys \ --reuse-model \ --snake-case-field \ --enum-field-as-literal all \ --field-constraints \ --use-operation-id-as-name \ --use-schema-description \ --use-field-description \ --use-annotated \ --use-default \ --use-unique-items-as-set \ --use-subclass-enum \ --use-union-operator \ --use-one-literal-as-default \ --use-double-quotes \ --use-exact-imports \ --use-standard-collections \ --use-non-positive-negative-number-constrained-types \ --target-python-version 3.12 \ --treat-dot-as-module \ --use-title-as-name \ --collapse-root-models \ --output-datetime-class AwareDatetime \ --openapi-scopes schemas \ --keep-model-order \ --disable-timestamp""" ================================================ FILE: src/integrations-service/pyproject.toml ================================================ [project] name = "integrations" version = "1.0.0" description = "julep integrations service" readme = "README.md" requires-python = ">=3.12,<3.13" dependencies = [ "langchain-community~=0.3.0", "fastapi~=0.115.0", "sse-starlette>=2.0.0", "uvicorn~=0.30.6", "langchain~=0.3.0", "pydantic[email]>=2.11.2,<3.0.0", "duckduckgo-search~=6.2.13", "openai~=1.47.1", "tweepy~=4.14.0", "wikipedia~=1.4.0", "fire~=0.6.0", "pyowm~=3.3.0", "spider-client~=0.0.70", "browserbase>=1.0.5", "setuptools~=75.1.0", "beartype~=0.19.0", "tenacity>=8.2.0,<8.4.0", "gunicorn~=23.0.0", "uvloop~=0.21.0", "selenium~=4.25.0", "playwright~=1.48.0", "httpx~=0.27.2", "pillow~=11.0.0", "llama-index~=0.11.22", "llama-parse~=0.5.13", "cloudinary~=1.41.0", "environs~=11.2.1", "arxiv~=2.1.3", "sentry-sdk[flask]>=2.19.0", "unstructured-client==0.42.3", "algoliasearch>=4.14.0", "mcp>=1.8.0", "google-api-python-client>=2.181.0", "google-auth>=2.40.3", "google-auth-oauthlib>=1.2.2", "google-auth-httplib2>=0.2.0", "aiosmtplib>=3.0.1", ] [dependency-groups] dev = [ "datamodel-code-generator>=0.26.3", "poethepoet>=0.31.1", "pyright>=1.1.389", "pytest>=8.3.3", "pytest-asyncio>=0.24.0", "pytest-cov>=6.0.0", "pytype>=2024.10.11", "ruff>=0.9.0", ] [tool.pytest.ini_options] asyncio_mode = "auto" ================================================ FILE: src/integrations-service/pytest.ini ================================================ [pytest] pythonpath = . testpaths = tests python_files = test_*.py python_classes = Test* python_functions = test_* ================================================ FILE: src/integrations-service/pytype.toml ================================================ # NOTE: All relative paths are relative to the location of this file. [tool.pytype] # Space-separated list of files or directories to exclude. exclude = [ ] # Space-separated list of files or directories to process. inputs = [ '.', ] # Keep going past errors to analyze as many files as possible. keep_going = true # Run N jobs in parallel. When 'auto' is used, this will be equivalent to the # number of CPUs on the host system. jobs = 'auto' # All pytype output goes here. output = '.pytype' # Platform (e.g., "linux", "win32") that the target code runs on. platform = 'linux' # Paths to source code directories, separated by ':'. pythonpath = '.' # Python version (major.minor) of the target code. python_version = '3.12' # Don't allow None to match bool. This flag is temporary and will be removed # once this behavior is enabled by default. none_is_not_bool = true # Variables initialized as None retain their None binding. This flag is # temporary and will be removed once this behavior is enabled by default. strict_none_binding = true # Space-separated list of error names to ignore. disable = [ 'pyi-error', ] # -------------- # Optional flags # -------------- # Bind 'self' in methods with non-transparent decorators. This flag is temporary # and will be removed once this behavior is enabled by default. bind_decorated_methods = false # Enable parameter count checks for overriding methods with renamed arguments. # This flag is temporary and will be removed once this behavior is enabled by # default. overriding_renamed_parameter_count_checks = false # Opt-in: Do not allow Any as a return type. no_return_any = false # Opt-in: Require decoration with @typing.override when overriding a method or # nested class attribute of a parent class. require_override_decorator = false ================================================ FILE: src/integrations-service/tests/__init__.py ================================================ # Empty file to make the tests directory a Python package ================================================ FILE: src/integrations-service/tests/conftest.py ================================================ from unittest.mock import patch import pytest from integrations.providers import available_providers from .mocks.brave import MockBraveSearchClient from .mocks.email import MockEmailClient from .mocks.llama_parse import MockLlamaParseClient from .mocks.spider import MockSpiderClient from .mocks.weather import MockWeatherClient from .mocks.wikipedia import MockWikipediaClient @pytest.fixture(autouse=True) def mock_external_services(): """Automatically mock all external service clients""" with ( patch("langchain_community.tools.BraveSearch", MockBraveSearchClient), patch("smtplib.SMTP", MockEmailClient), patch("langchain_community.document_loaders.SpiderLoader", MockSpiderClient), patch("langchain_community.utilities.OpenWeatherMapAPIWrapper", MockWeatherClient), patch("langchain_community.document_loaders.WikipediaLoader", MockWikipediaClient), patch("llama_parse.LlamaParse", MockLlamaParseClient), ): yield @pytest.fixture def providers(): """Fixture that provides access to all available integration providers""" return available_providers @pytest.fixture def wikipedia_provider(): """Fixture that provides access to the Wikipedia provider""" return available_providers["wikipedia"] @pytest.fixture def weather_provider(): """Fixture that provides access to the Weather provider""" return available_providers["weather"] @pytest.fixture def spider_provider(): """Fixture that provides access to the Spider provider""" return available_providers["spider"] @pytest.fixture def brave_provider(): """Fixture that provides access to the Brave provider""" return available_providers["brave"] @pytest.fixture def email_provider(): """Fixture that provides access to the Email provider""" return available_providers["email"] @pytest.fixture def llama_parse_provider(): """Fixture that provides access to the LlamaParse provider""" return available_providers["llama_parse"] ================================================ FILE: src/integrations-service/tests/mocks/__init__.py ================================================ """Mock implementations of external integration libraries""" ================================================ FILE: src/integrations-service/tests/mocks/brave.py ================================================ """Mock implementation of Brave Search API client""" class MockBraveSearchClient: def __init__(self, api_key: str): self.api_key = api_key def search(self, query: str) -> str: """Mock search that returns a fixed response""" return f"Mock Brave search results for: {query}" class MockBraveSearchException(Exception): """Mock exception for Brave Search errors""" ================================================ FILE: src/integrations-service/tests/mocks/email.py ================================================ """Mock implementation of email client""" class MockEmailClient: def __init__(self, host: str, port: int, user: str, password: str): self.host = host self.port = port self.user = user self.password = password def send(self, to: str, from_: str, subject: str, body: str) -> bool: """Mock email sending that always succeeds""" return True class MockEmailException(Exception): """Mock exception for email errors""" ================================================ FILE: src/integrations-service/tests/mocks/llama_parse.py ================================================ """Mock implementation of llama parse client""" from llama_index.core.schema import Document class MockLlamaParseClient: def __init__(self, api_key: str, result_type: str, num_workers: int, language: str): self.api_key = api_key self.result_type = result_type self.num_workers = num_workers self.language = language async def aload_data(self, file_content: bytes, extra_info: dict) -> list[dict]: """Mock loading data that returns fixed documents""" return [ Document(page_content="Mock document content 1", metadata=extra_info), Document(page_content="Mock document content 2", metadata=extra_info), ] class MockLlamaParseException(Exception): """Mock exception for llama parse errors""" ================================================ FILE: src/integrations-service/tests/mocks/spider.py ================================================ """Mock implementation of web spider client""" from langchain_core.documents import Document from pydantic import AnyUrl class MockSpiderClient: def __init__(self, api_key: str): self.api_key = api_key def crawl(self, url: AnyUrl, mode: str = "scrape") -> list[Document]: """Mock crawl that returns fixed documents""" return [ Document(page_content="Mock crawled content 1", metadata={"source": str(url)}), Document(page_content="Mock crawled content 2", metadata={"source": str(url)}), ] class MockSpiderException(Exception): """Mock exception for spider errors""" ================================================ FILE: src/integrations-service/tests/mocks/weather.py ================================================ """Mock implementation of weather API client""" class MockWeatherClient: def __init__(self, api_key: str): self.api_key = api_key def get_weather(self, location: str) -> str: """Mock weather lookup that returns fixed data""" return f"Mock weather data for {location}: Sunny, 72°F" class MockWeatherException(Exception): """Mock exception for weather API errors""" ================================================ FILE: src/integrations-service/tests/mocks/wikipedia.py ================================================ """Mock implementation of Wikipedia API client""" from langchain_core.documents import Document class MockWikipediaClient: def __init__(self, query: str, load_max_docs: int = 2): """Mock Wikipedia search that returns fixed documents""" self.result = [ Document( page_content=f"Mock Wikipedia content about {query}", metadata={"source": f"wikipedia/{query}"}, ) for _ in range(load_max_docs) ] def load(self, *args, **kwargs) -> list[Document]: return self.result class MockWikipediaException(Exception): """Mock exception for Wikipedia API errors""" ================================================ FILE: src/integrations-service/tests/test_mcp.py ================================================ from types import SimpleNamespace from unittest.mock import patch import pytest from integrations.models import BaseProvider from integrations.providers import available_providers from integrations.utils.execute_integration import execute_integration from integrations.utils.integrations import mcp as mcp_utils @pytest.mark.asyncio async def test_mcp_provider_in_registry(): assert "mcp" in available_providers provider = available_providers["mcp"] assert isinstance(provider, BaseProvider) methods = {m.method for m in provider.methods} assert {"list_tools", "call_tool"}.issubset(methods) @pytest.mark.asyncio async def test_mcp_list_tools_exec(monkeypatch): # Patch connector to avoid requiring real MCP server class FakeSession: async def initialize(self): # pragma: no cover - not used pass async def list_tools(self): return SimpleNamespace( tools=[ SimpleNamespace( name="echo", description="Echo tool", inputSchema={"type": "object"} ), SimpleNamespace(name="ping", description="Ping tool", inputSchema=None), ] ) async def __aexit__(self, *_): # pragma: no cover - not used return None async def fake_connect(_setup): async def aclose(): return None return FakeSession(), aclose monkeypatch.setattr(mcp_utils, "_connect_session", fake_connect) # Build arguments via autogen classes at runtime from integrations.autogen.Tools import McpListToolsArguments, McpSetup setup = McpSetup(transport="http", http_url="http://localhost:9999/mcp") args = McpListToolsArguments() result = await execute_integration( provider="mcp", method="list_tools", setup=setup, arguments=args, ) assert hasattr(result, "tools") assert len(result.tools) == 2 assert {t.name for t in result.tools} == {"echo", "ping"} @pytest.mark.asyncio async def test_mcp_call_tool_exec(monkeypatch): # Patch connector and session.call_tool class FakeCallResult: def __init__(self): self.content = [SimpleNamespace(kind="text", text="hello"), {"json": True}] self.structuredContent = {"ok": True} self.isError = False class FakeSession: async def call_tool(self, tool_name: str, arguments): assert tool_name == "echo" return FakeCallResult() async def fake_connect(_setup): async def aclose(): return None return FakeSession(), aclose monkeypatch.setattr(mcp_utils, "_connect_session", fake_connect) from integrations.autogen.Tools import McpCallToolArguments, McpSetup setup = McpSetup(transport="http", http_url="http://localhost:9999/mcp") args = McpCallToolArguments(tool_name="echo", arguments={"value": "hi"}) result = await execute_integration( provider="mcp", method="call_tool", setup=setup, arguments=args, ) # We expect normalized fields present assert result.is_error is False assert result.structured == {"ok": True} assert isinstance(result.content, list) assert len(result.content) >= 1 from unittest.mock import AsyncMock import pytest from integrations.autogen.Tools import McpCallToolArguments, McpListToolsArguments, McpSetup @pytest.mark.asyncio @patch("integrations.utils.integrations.mcp.streamablehttp_client") async def test_http_session_management(mock_client): """ Test that HTTP transport uses streamablehttp_client correctly """ setup = McpSetup(transport="http", http_url="http://test.example/mcp") # Mock the async context manager mock_ctx = AsyncMock() mock_read = AsyncMock() mock_write = AsyncMock() mock_ctx.__aenter__.return_value = (mock_read, mock_write, None) mock_ctx.__aexit__.return_value = None mock_client.return_value = mock_ctx # Mock ClientSession initialization mock_session = AsyncMock() mock_session.initialize = AsyncMock() mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock() with patch("mcp.ClientSession") as MockClientSession: MockClientSession.return_value = mock_session # Trigger the connection from integrations.utils.integrations.mcp import _connect_session _session, aclose = await _connect_session(setup) # Verify streamablehttp_client was called for HTTP transport mock_client.assert_called_once_with("http://test.example/mcp", headers={}) # Verify session was created and initialized MockClientSession.assert_called_once_with(mock_read, mock_write) mock_session.initialize.assert_awaited_once() # Verify cleanup function exists assert callable(aclose) await aclose() @pytest.mark.asyncio @patch("mcp.ClientSession") @patch("integrations.utils.integrations.mcp.streamablehttp_client") async def test_http_connection_retry_logic(mock_client, mock_session_cls): """ Test that HTTP connection uses retry logic """ setup = McpSetup(transport="http", http_url="http://test.example/mcp") # Mock successful connection mock_ctx = AsyncMock() mock_read = AsyncMock() mock_write = AsyncMock() mock_ctx.__aenter__.return_value = (mock_read, mock_write) mock_ctx.__aexit__.return_value = None mock_client.return_value = mock_ctx # Mock ClientSession mock_session = AsyncMock() mock_session.initialize = AsyncMock() mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock() mock_session_cls.return_value = mock_session from integrations.utils.integrations.mcp import _connect_session # Test that connection works session, aclose = await _connect_session(setup) assert session is not None assert callable(aclose) # Verify streamablehttp_client was called mock_client.assert_called_once() # Clean up await aclose() def test_mcp_sdk_version_check(): """ Test that missing MCP SDK raises proper error message """ # Test that _ensure_mcp_available provides clear error if mcp is missing from integrations.utils.integrations.mcp import _ensure_mcp_available with ( patch("builtins.__import__", side_effect=ImportError("mcp not found")), pytest.raises(RuntimeError, match=r"The 'mcp' Python package is required"), ): _ensure_mcp_available() @pytest.mark.parametrize("transport", ["http", "sse"]) def test_mcp_setup_transport_validation(transport): """ Test that McpSetup accepts valid transport types (http and sse) """ from integrations.autogen.Tools import McpSetup # Valid transports should not raise validation errors setup = McpSetup(transport=transport) assert setup.transport == transport assert setup.transport in ["http", "sse"] def test_mcp_setup_invalid_transport(): """ Test that invalid transport types raise validation error """ from integrations.autogen.Tools import McpSetup from pydantic import ValidationError # Invalid transport should raise validation error with pytest.raises(ValidationError, match="Input should be 'sse' or 'http'"): McpSetup(transport="invalid") @pytest.mark.asyncio async def test_mcp_tool_response_normalization(): """ Test that MCP tool responses are properly normalized """ from integrations.autogen.Tools import McpSetup from integrations.models import McpToolCallOutput setup = McpSetup(transport="http", http_url="http://test.example/mcp") args = McpCallToolArguments(tool_name="test_tool", arguments={"test": "data"}) # Mock the entire connection and tool call with patch("integrations.utils.integrations.mcp._connect_session") as mock_connect: mock_session = AsyncMock() mock_result = SimpleNamespace( content=[ SimpleNamespace(text="Hello world"), {"structured": True}, SimpleNamespace(text="Second message"), ], structuredContent={"key": "value"}, isError=False, ) mock_session.call_tool.return_value = mock_result mock_acontext = AsyncMock() mock_connect.return_value = (mock_session, mock_acontext) from integrations.utils.integrations.mcp import call_tool result = await call_tool(setup, args) # Verify normalization assert isinstance(result, McpToolCallOutput) assert result.text == "Hello world\nSecond message" assert result.structured == {"key": "value"} assert result.is_error is False assert len(result.content) == 3 assert "Hello world" in str(result.content[0]) assert "structured" in str(result.content[1]) assert "Second message" in str(result.content[2]) @pytest.mark.asyncio async def test_mcp_list_tools_integration(): """ Test end-to-end tool discovery integration """ from integrations.autogen.Tools import McpSetup from integrations.models import McpListToolsOutput setup = McpSetup(transport="http", http_url="http://test.example/mcp") args = McpListToolsArguments() # Mock connection and session with patch("integrations.utils.integrations.mcp._connect_session") as mock_connect: mock_session = AsyncMock() mock_tools = SimpleNamespace( tools=[ SimpleNamespace( name="tool1", description="First tool", inputSchema={"type": "object"} ), SimpleNamespace(name="tool2", description="Second tool", inputSchema=None), ] ) mock_session.list_tools.return_value = mock_tools mock_acontext = AsyncMock() mock_connect.return_value = (mock_session, mock_acontext) from integrations.utils.integrations.mcp import list_tools result = await list_tools(setup, args) # Verify integration works end-to-end assert isinstance(result, McpListToolsOutput) assert len(result.tools) == 2 assert result.tools[0].name == "tool1" assert result.tools[0].description == "First tool" assert result.tools[1].name == "tool2" assert result.tools[1].input_schema is None @pytest.mark.asyncio async def test_mcp_timeout_handling(): """ Test that tool calls respect timeout_seconds parameter """ from unittest.mock import AsyncMock from integrations.autogen.Tools import McpSetup setup = McpSetup(transport="http", http_url="http://test.example/mcp") args = McpCallToolArguments( tool_name="slow_tool", arguments={"data": "test"}, timeout_seconds=5, # 5 second timeout ) with patch("integrations.utils.integrations.mcp._connect_session") as mock_connect: mock_session = AsyncMock() mock_session.call_tool = AsyncMock( side_effect=AsyncMock( return_value=SimpleNamespace(content=[], structuredContent={}, isError=False) ) ) mock_acontext = AsyncMock() mock_connect.return_value = (mock_session, mock_acontext) from asyncio import wait_for from integrations.utils.integrations.mcp import call_tool # Should complete without timeout result = await wait_for(call_tool(setup, args), timeout=10) # Verify timeout was respected (no exception) assert result is not None mock_session.call_tool.assert_awaited_once() # The asyncio.wait_for in call_tool should have used timeout_seconds=5 @pytest.mark.asyncio async def test_mcp_sse_transport_connection(): """ Test that SSE transport establishes connection with proper headers """ from integrations.autogen.Tools import McpSetup from integrations.utils.integrations.mcp import _connect_session setup = McpSetup(transport="sse", http_url="http://test.example/sse") with patch("integrations.utils.integrations.mcp.sse_client") as mock_client: mock_ctx = AsyncMock() mock_read = AsyncMock() mock_write = AsyncMock() mock_ctx.__aenter__.return_value = (mock_read, mock_write, None) mock_ctx.__aexit__.return_value = None mock_client.return_value = mock_ctx mock_session = AsyncMock() mock_session.initialize = AsyncMock() mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock() with patch("mcp.ClientSession", return_value=mock_session): _session, aclose = await _connect_session(setup) # Verify SSE-specific headers were added call_args = mock_client.call_args headers = call_args[1]["headers"] assert "Accept" in headers assert headers["Accept"] == "text/event-stream" assert "Cache-Control" in headers assert headers["Cache-Control"] == "no-cache" # Verify session was properly initialized mock_session.initialize.assert_awaited_once() # Clean up await aclose() @pytest.mark.asyncio async def test_mcp_sse_connection_error_handling(): """ Test that SSE connection failures provide clear error messages """ from integrations.autogen.Tools import McpSetup from integrations.utils.integrations.mcp import _connect_session setup = McpSetup(transport="sse", http_url="http://test.example/sse") with patch("integrations.utils.integrations.mcp.sse_client") as mock_client: mock_ctx = AsyncMock() mock_read = AsyncMock() mock_write = AsyncMock() mock_ctx.__aenter__.return_value = (mock_read, mock_write, None) mock_ctx.__aexit__.return_value = None mock_client.return_value = mock_ctx mock_session = AsyncMock() # Simulate connection failure mock_session.initialize = AsyncMock(side_effect=Exception("Connection refused")) mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock() with ( patch("mcp.ClientSession", return_value=mock_session), pytest.raises( RuntimeError, match=r"Failed to establish SSE connection.*Connection refused" ), ): await _connect_session(setup) ================================================ FILE: src/integrations-service/tests/test_mcp_sse_server.py ================================================ #!/usr/bin/env python3 """ Simple MCP SSE server for testing the SSE transport implementation. This server implements the MCP protocol with SSE transport according to the specification. It provides basic tools for testing purposes. To run this server: python tests/test_mcp_sse_server.py Then connect to it using: http://localhost:8001/sse """ import asyncio import json import logging import uuid from collections.abc import AsyncIterator from contextlib import asynccontextmanager from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from sse_starlette.sse import EventSourceResponse logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan manager.""" logger.info("MCP SSE test server starting on http://localhost:8001") yield logger.info("MCP SSE test server shutting down") app = FastAPI(lifespan=lifespan) # Add CORS middleware for testing app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Session storage for stateful operations sessions = {} async def sse_generator(request: Request) -> AsyncIterator[dict]: """Generate SSE events for the MCP protocol.""" session_id = str(uuid.uuid4()) sessions[session_id] = {"initialized": False} # Send initial endpoint event to tell client where to POST messages yield { "event": "endpoint", "data": json.dumps({ "url": f"http://localhost:8001/messages/{session_id}", "method": "POST", }), } # Keep connection alive with periodic pings try: while True: await asyncio.sleep(30) # Send ping every 30 seconds if await request.is_disconnected(): break yield { "event": "ping", "data": json.dumps({"timestamp": asyncio.get_event_loop().time()}), } finally: # Clean up session sessions.pop(session_id, None) logger.info(f"SSE connection closed for session {session_id}") @app.get("/sse") async def sse_endpoint(request: Request): """SSE endpoint for MCP protocol.""" logger.info("New SSE connection established") return EventSourceResponse(sse_generator(request)) @app.post("/messages/{session_id}") async def message_endpoint(session_id: str, request: Request): """Handle MCP JSON-RPC messages.""" body = await request.json() logger.info(f"Received message for session {session_id}: {body}") method = body.get("method") id_ = body.get("id") # Handle MCP protocol methods if method == "initialize": sessions[session_id]["initialized"] = True return { "jsonrpc": "2.0", "id": id_, "result": { "protocolVersion": "2024-11-05", "capabilities": {"tools": {"listChanged": False}}, "serverInfo": {"name": "test-mcp-sse-server", "version": "1.0.0"}, }, } if method == "tools/list": if not sessions.get(session_id, {}).get("initialized"): return { "jsonrpc": "2.0", "id": id_, "error": {"code": -32002, "message": "Session not initialized"}, } return { "jsonrpc": "2.0", "id": id_, "result": { "tools": [ { "name": "test_echo", "description": "Echo back the input message", "inputSchema": { "type": "object", "properties": {"message": {"type": "string"}}, "required": ["message"], }, }, { "name": "test_add", "description": "Add two numbers", "inputSchema": { "type": "object", "properties": {"a": {"type": "number"}, "b": {"type": "number"}}, "required": ["a", "b"], }, }, ] }, } if method == "tools/call": if not sessions.get(session_id, {}).get("initialized"): return { "jsonrpc": "2.0", "id": id_, "error": {"code": -32002, "message": "Session not initialized"}, } params = body.get("params", {}) tool_name = params.get("name") arguments = params.get("arguments", {}) if tool_name == "test_echo": message = arguments.get("message", "") return { "jsonrpc": "2.0", "id": id_, "result": {"content": [{"type": "text", "text": f"Echo: {message}"}]}, } if tool_name == "test_add": a = arguments.get("a", 0) b = arguments.get("b", 0) return { "jsonrpc": "2.0", "id": id_, "result": {"content": [{"type": "text", "text": f"Result: {a + b}"}]}, } return { "jsonrpc": "2.0", "id": id_, "error": {"code": -32601, "message": f"Unknown tool: {tool_name}"}, } return { "jsonrpc": "2.0", "id": id_, "error": {"code": -32601, "message": f"Method not found: {method}"}, } @app.get("/health") async def health(): """Health check endpoint.""" return {"status": "ok", "server": "test-mcp-sse-server"} if __name__ == "__main__": import uvicorn uvicorn.run( app, host="0.0.0.0", port=8001, log_level="info", ) ================================================ FILE: src/integrations-service/tests/test_provider_execution.py ================================================ """Tests for provider execution using mocks""" import pytest from integrations.autogen.Tools import ( WikipediaSearchArguments, ) from integrations.utils.execute_integration import execute_integration @pytest.mark.asyncio async def test_weather_get_mock(wikipedia_provider): """Test wikipedia lookup with mock client""" query = "London" result = await execute_integration( provider="wikipedia", method="search", arguments=WikipediaSearchArguments(query=query), ) assert len(result.documents) > 0 assert any((query in doc.page_content) for doc in result.documents) # @pytest.mark.asyncio # async def test_weather_get_direct(): # """Test weather lookup with mock client""" # raise NotImplementedError # def test_weather_get_mock(weather_provider): # """Test weather lookup with mock client""" # raise NotImplementedError # def test_spider_crawl(spider_provider): # """Test web crawling with mock client""" # raise NotImplementedError # def test_brave_search(brave_provider): # """Test Brave search with mock client""" # raise NotImplementedError # def test_email_send(email_provider): # """Test email sending with mock client""" # raise NotImplementedError ================================================ FILE: src/integrations-service/tests/test_providers.py ================================================ from integrations.models import BaseProvider, BaseProviderMethod, ProviderInfo def test_available_providers(providers): """Test that the available providers dictionary is properly structured""" assert isinstance(providers, dict) assert all(isinstance(key, str) for key in providers) assert all(isinstance(value, BaseProvider) for value in providers.values()) def test_provider_structure(providers): """Test that each provider has the required attributes""" for provider in providers.values(): assert isinstance(provider.provider, str) assert isinstance(provider.methods, list) assert all(isinstance(method, BaseProviderMethod) for method in provider.methods) assert isinstance(provider.info, ProviderInfo) def test_wikipedia_provider(wikipedia_provider): """Test Wikipedia provider specific configuration""" assert wikipedia_provider.provider == "wikipedia" assert wikipedia_provider.setup is None assert len(wikipedia_provider.methods) == 1 assert wikipedia_provider.methods[0].method == "search" def test_weather_provider(weather_provider): """Test Weather provider specific configuration""" assert weather_provider.provider == "weather" assert weather_provider.setup is not None assert len(weather_provider.methods) == 1 assert weather_provider.methods[0].method == "get" def test_llama_parse_provider(llama_parse_provider): """Test LlamaParse provider specific configuration""" assert llama_parse_provider.provider == "llama_parse" assert llama_parse_provider.setup is not None assert len(llama_parse_provider.methods) == 1 assert llama_parse_provider.methods[0].method == "parse" ================================================ FILE: src/integrations-service/tests/working_mcp_sse_server.py ================================================ #!/usr/bin/env python3 """ A working MCP SSE server that properly implements the protocol. Based on the FastMCP framework patterns. To run: python tests/working_mcp_sse_server.py Then connect at: http://localhost:8080/sse """ import asyncio import logging import os from datetime import UTC, datetime from typing import Any from mcp import Tool from mcp.server import Server from mcp.server.sse import sse_server # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Create MCP server instance mcp_server = Server("working-mcp-sse") @mcp_server.list_tools() async def list_tools() -> list[Tool]: """List available tools""" return [ Tool( name="get_time", description="Get the current time", inputSchema={ "type": "object", "properties": { "timezone": { "type": "string", "description": "Timezone (e.g., 'UTC', 'EST', 'PST')", "default": "UTC", } }, "required": [], }, ), Tool( name="echo", description="Echo back a message", inputSchema={ "type": "object", "properties": {"message": {"type": "string", "description": "Message to echo"}}, "required": ["message"], }, ), Tool( name="calculate", description="Perform basic arithmetic", inputSchema={ "type": "object", "properties": { "operation": { "type": "string", "enum": ["add", "subtract", "multiply", "divide"], "description": "Operation to perform", }, "a": {"type": "number", "description": "First number"}, "b": {"type": "number", "description": "Second number"}, }, "required": ["operation", "a", "b"], }, ), Tool( name="list_files", description="List files in the current directory", inputSchema={ "type": "object", "properties": { "path": { "type": "string", "description": "Directory path (default: current)", "default": ".", }, "pattern": { "type": "string", "description": "File pattern (e.g., '*.txt')", "default": "*", }, }, "required": [], }, ), ] @mcp_server.call_tool() async def call_tool(name: str, arguments: dict[str, Any]) -> list: """Execute a tool""" logger.info(f"Tool called: {name} with args: {arguments}") if name == "get_time": tz_name = arguments.get("timezone", "UTC") current_time = datetime.now(tz=UTC).isoformat() return [{"type": "text", "text": f"Current time ({tz_name}): {current_time}"}] if name == "echo": message = arguments.get("message", "") return [{"type": "text", "text": f"Echo: {message}"}] if name == "calculate": operation = arguments.get("operation") a = arguments.get("a", 0) b = arguments.get("b", 0) result = 0 if operation == "add": result = a + b elif operation == "subtract": result = a - b elif operation == "multiply": result = a * b elif operation == "divide": if b != 0: result = a / b else: return [{"type": "text", "text": "Error: Division by zero"}] return [{"type": "text", "text": f"Result of {a} {operation} {b} = {result}"}] if name == "list_files": import glob path = arguments.get("path", ".") pattern = arguments.get("pattern", "*") try: files = glob.glob(os.path.join(path, pattern))[:20] # Limit to 20 files file_list = "\n".join(files) if files else "No files found" return [{"type": "text", "text": f"Files in {path}/{pattern}:\n{file_list}"}] except Exception as e: return [{"type": "text", "text": f"Error listing files: {e}"}] else: return [{"type": "text", "text": f"Unknown tool: {name}"}] async def main(): """Start the SSE server""" host = "0.0.0.0" port = 8080 logger.info(f"Starting MCP SSE server on http://{host}:{port}/sse") logger.info("Tools available: get_time, echo, calculate, list_files") # Start SSE server using MCP SDK async with sse_server(mcp_server, host=host, port=port, endpoint="/sse"): logger.info(f"Server running. Connect at: http://localhost:{port}/sse") logger.info("Press Ctrl+C to stop") # Keep server running try: await asyncio.Future() # Run forever until interrupted except KeyboardInterrupt: logger.info("Shutting down server...") if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: logger.info("Server stopped") ================================================ FILE: src/llm-proxy/.dockerignore ================================================ !.keys ================================================ FILE: src/llm-proxy/.gitignore ================================================ .keys ================================================ FILE: src/llm-proxy/AGENTS.md ================================================ # AGENTS.md - llm-proxy This directory contains the LLM proxy service using LiteLLM for unified model access. Key Uses - Bash commands: - cd llm-proxy - docker-compose --profile self-hosted-db up # With local database - docker-compose --profile managed-db up # With external database - Core files: - `docker-compose.yml` for service deployment - `litellm-config.yaml` for model configuration - `.keys/` directory for API key files (gitignored) - Configuration guidelines: - Set API keys for each model provider via environment variables - Configure `LITELLM_MASTER_KEY` for proxy authentication - Set database and Redis URLs for persistence and caching - Testing instructions: - Health check: `curl http://localhost:4000/health` - Model list: `curl http://localhost:4000/models` - Chat completion: `curl -X POST http://localhost:4000/chat/completions` - Repository etiquette: - Don't commit API keys or secrets to version control - Store keys in `.keys/` directory or environment variables - Developer environment: - Requires Docker and Docker Compose - Optional: PostgreSQL and Redis services - Unexpected behaviors: - Model routing uses simple-shuffle strategy - Caching enabled by default with Redis backend # LLM Proxy Service ## Overview The LLM proxy service provides unified access to multiple Large Language Model providers through a single OpenAI-compatible API using LiteLLM. It handles model routing, caching, rate limiting, and request/response transformation. ## Architecture - **Proxy Engine**: LiteLLM with OpenAI-compatible API - **Model Router**: Load balancing across multiple providers - **Caching Layer**: Redis-based response caching - **Database**: PostgreSQL for logging and analytics - **Workers**: Multi-worker deployment for performance ## Key Components ### LiteLLM Configuration - **Model List**: Centralized model definitions and routing - **Router Settings**: Load balancing and fallback strategies - **Cache Settings**: Redis configuration for response caching - **General Settings**: Authentication and database configuration ### Supported Providers 1. **OpenAI**: GPT-4, GPT-4 Turbo, GPT-4o, o1, o3 models 2. **Anthropic**: Claude 3.5 Sonnet, Claude 3 Opus/Sonnet/Haiku 3. **Google**: Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 2.5 Pro Preview 4. **Groq**: Llama 3.1 70B/8B models 5. **OpenRouter**: Mistral, Qwen, DeepSeek, Meta Llama models 6. **Cerebras**: Llama 3.1/3.3/4 Scout models 7. **Voyage**: Embedding models 8. **Local Models**: Text embeddings inference service ### Model Categories - **Paid Models**: Premium models requiring API keys and billing - **Free Models**: Models with free tiers or no cost - **Embedding Models**: Text embedding and vector generation ## Environment Variables - `LITELLM_MASTER_KEY`: Master authentication key for the proxy - `DATABASE_URL`: PostgreSQL connection string for logging - `REDIS_URL`: Redis connection string for caching - **Provider API Keys**: - `OPENAI_API_KEY` - `ANTHROPIC_API_KEY` - `GEMINI_API_KEY` - `GROQ_API_KEY` - `OPENROUTER_API_KEY` - `VOYAGE_API_KEY` - `CEREBRAS_API_KEY` - And others for additional providers ## Deployment Profiles 1. **Self-hosted DB**: Complete local deployment with PostgreSQL and Redis 2. **Managed DB**: Use external database and Redis services 3. **Development**: File watching for configuration hot reload ## API Features - **OpenAI Compatibility**: Drop-in replacement for OpenAI API - **Model Routing**: Automatic selection and load balancing - **Response Caching**: Redis-based caching with configurable TTL - **Request Logging**: Comprehensive logging to database - **Error Handling**: Automatic retries and fallback routing - **Rate Limiting**: Per-user and per-model rate limits ### Router Configuration - **Strategy**: Simple shuffle for load distribution - **Retries**: 3 attempts with exponential backoff - **Fallback**: Automatic failover to alternative models - **Health Checks**: Model availability monitoring ### Caching System - **Backend**: Redis with namespace separation - **Key Strategy**: Request content and parameters - **TTL**: Configurable cache expiration - **Namespace**: `litellm_caching` for organization ## Performance Features - **Multi-worker**: 8 workers for concurrent request handling - **Connection Pooling**: Database and Redis connection reuse - **Async Processing**: Non-blocking request handling - **Resource Limits**: Memory and CPU constraints ## Monitoring & Observability - Health check endpoints for service monitoring - Request/response logging to PostgreSQL - Performance metrics and analytics - Model usage tracking and billing - Error rates and latency monitoring ## Integration Points - **Agents API**: Primary consumer for model requests - **Chat Service**: Real-time conversation handling - **Task Execution**: Model calls during workflow steps - **Embedding Service**: Vector generation for document search ## Security Features - Master key authentication for API access - Per-user API key management - Request validation and sanitization - Rate limiting and abuse prevention - Audit logging for compliance ## Development Tools - Configuration hot reload during development - Debug logging for troubleshooting - Model testing endpoints - Performance profiling capabilities ================================================ FILE: src/llm-proxy/docker-compose.yml ================================================ name: julep-llm-proxy x--litellm-base: &litellm-base image: ghcr.io/berriai/litellm-database:main-v1.74.9-stable restart: unless-stopped hostname: litellm ports: - 4000:4000 volumes: - ./litellm-config.yaml:/app/config.yaml - .keys:/app/.keys:ro environment: - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} - DATABASE_URL=${LITELLM_DATABASE_URL:-postgresql://${LITELLM_POSTGRES_USER:-llmproxy}:${LITELLM_POSTGRES_PASSWORD}@${LITELLM_POSTGRES_HOST:-litellm-db}:${LITELLM_POSTGRES_PORT:-5432}/${LITELLM_POSTGRES_DB:-litellm}?sslmode=${LITELLM_POSTGRES_SSLMODE:-prefer_ssl}} - REDIS_URL=${LITELLM_REDIS_URL:-${LITELLM_REDIS_PROTOCOL:-redis}://${LITELLM_REDIS_USER:-default}:${LITELLM_REDIS_PASSWORD:-${LITELLM_REDIS_PASSWORD}}@${LITELLM_REDIS_HOST:-litellm-redis}:${LITELLM_REDIS_PORT:-6379}} - GEMINI_API_KEY=${GEMINI_API_KEY} - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - BEDROCK_API_KEY=${BEDROCK_API_KEY} - GROQ_API_KEY=${GROQ_API_KEY} - VOYAGE_API_KEY=${VOYAGE_API_KEY} - CEREBRAS_API_KEY=${CEREBRAS_API_KEY} - CLOUDFLARE_API_KEY=${CLOUDFLARE_API_KEY:-} - CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID:-} - NVIDIA_NIM_API_KEY=${NVIDIA_NIM_API_KEY:-} - GITHUB_API_KEY=${GITHUB_API_KEY:-} - GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS:-} - AWS_REGION_NAME=${AWS_REGION_NAME:-us-east-1} command: [ "--config", "/app/config.yaml", "--port", "4000", "--num_workers", "8", "--telemetry", "False" ] develop: watch: - action: sync+restart path: ./litellm-config.yaml target: /app/config.yaml services: litellm-managed: <<: *litellm-base profiles: - managed-db litellm: <<: *litellm-base profiles: - self-hosted-db platform: linux/amd64 depends_on: - litellm-db - litellm-redis litellm-db: image: postgres:16 restart: unless-stopped volumes: - litellm-db-data:/var/lib/postgresql/data profiles: - self-hosted-db environment: - POSTGRES_DB=${LITELLM_POSTGRES_DB:-litellm} - POSTGRES_USER=${LITELLM_POSTGRES_USER:-llmproxy} - POSTGRES_PASSWORD=${LITELLM_POSTGRES_PASSWORD} healthcheck: test: [ "CMD-SHELL", "pg_isready -d ${LITELLM_POSTGRES_DB:-litellm} -U ${LITELLM_POSTGRES_USER:-llmproxy}" ] interval: 1s timeout: 5s retries: 10 litellm-redis: image: redis/redis-stack-server restart: unless-stopped profiles: - self-hosted-db environment: REDIS_ARGS: --requirepass ${LITELLM_REDIS_PASSWORD} volumes: - litellm-redis-data:/data volumes: litellm-db-data: litellm-redis-data: ================================================ FILE: src/llm-proxy/litellm-config.yaml ================================================ environment_variables: NO_DOCS: "true" model_list: # -*= Paid models =*- # ------------------- # Gemini models - model_name: gemini-1.5-pro litellm_params: model: gemini/gemini-1.5-pro api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-1.5-pro-latest litellm_params: model: gemini/gemini-1.5-pro-latest api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-2.0-flash litellm_params: model: gemini/gemini-2.0-flash api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-2.5-pro-preview-03-25 litellm_params: model: gemini/gemini-2.5-pro-preview-03-25 api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-2.5-pro-preview-06-05 litellm_params: model: gemini/gemini-2.5-pro-preview-06-05 api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-2.5-pro litellm_params: model: gemini/gemini-2.5-pro api_key: os.environ/GEMINI_API_KEY tags: ["paid"] - model_name: gemini-2.5-flash litellm_params: model: gemini/gemini-2.5-flash api_key: os.environ/GEMINI_API_KEY tags: ["paid"] # OpenAI models - model_name: "gpt-4-turbo" litellm_params: model: "openai/gpt-4-turbo" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-4o" litellm_params: model: "openai/gpt-4o" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: o1-mini litellm_params: model: openai/o1-mini api_key: os.environ/OPENAI_API_KEY tags: ["paid"] - model_name: o1-preview litellm_params: model: openai/o1-preview api_key: os.environ/OPENAI_API_KEY tags: ["paid"] - model_name: o1 litellm_params: model: openai/o1 api_key: os.environ/OPENAI_API_KEY tags: ["paid"] - model_name: o3-mini litellm_params: model: openai/o3-mini api_key: os.environ/OPENAI_API_KEY tags: ["paid"] - model_name: "gpt-4.1" litellm_params: model: "openai/gpt-4.1" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-4.1-mini" litellm_params: model: "openai/gpt-4.1-mini" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-4.1-nano" litellm_params: model: "openai/gpt-4.1-nano" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "o4-mini" litellm_params: model: "openai/o4-mini" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY # GPT-5 models - model_name: "gpt-5" litellm_params: model: "openai/gpt-5" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-mini" litellm_params: model: "openai/gpt-5-mini" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-nano" litellm_params: model: "openai/gpt-5-nano" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-chat" litellm_params: model: "openai/gpt-5-chat" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-chat-latest" litellm_params: model: "openai/gpt-5-chat-latest" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-2025-08-07" litellm_params: model: "openai/gpt-5-2025-08-07" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-mini-2025-08-07" litellm_params: model: "openai/gpt-5-mini-2025-08-07" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY - model_name: "gpt-5-nano-2025-08-07" litellm_params: model: "openai/gpt-5-nano-2025-08-07" tags: ["paid"] api_key: os.environ/OPENAI_API_KEY # TODO: uncomment after integrating litellm.image_generation # - model_name: "gpt-image-1" # litellm_params: # model: "openai/gpt-image-1" # tags: ["paid"] # api_key: os.environ/OPENAI_API_KEY # Anthropic models - model_name: "claude-3.5-sonnet-20240620" litellm_params: model: "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3.5-sonnet" litellm_params: model: "bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3.5-sonnet-20241022" litellm_params: model: "bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY # - model_name: "claude-3-opus" # Model unavailable # litellm_params: # model: "bedrock/us.anthropic.claude-3-opus-20240229-v1:0" # tags: ["paid"] # api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3-sonnet" # Litellm/Anthropic removed support for this model litellm_params: model: "bedrock/us.anthropic.claude-3-sonnet-20240229-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3-haiku" litellm_params: model: "bedrock/us.anthropic.claude-3-haiku-20240307-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3.5-haiku" litellm_params: model: "bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-3.7-sonnet" litellm_params: model: "bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-sonnet-4" litellm_params: model: "bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-opus-4" litellm_params: model: "bedrock/us.anthropic.claude-opus-4-20250514-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-opus-4-1" litellm_params: model: "bedrock/us.anthropic.claude-opus-4-1-20250805-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-sonnet-4-5" litellm_params: model: "bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY - model_name: "claude-haiku-4-5" litellm_params: model: "bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0" tags: ["paid"] api_key: os.environ/BEDROCK_API_KEY # Groq models # - model_name: "llama-3.1-70b" # `llama-3.1-70b-versatile` has been decommissioned and is no longer supported # litellm_params: # model: "groq/llama-3.1-70b-versatile" # tags: ["paid"] # api_key: os.environ/GROQ_API_KEY - model_name: "llama-3.1-8b" litellm_params: model: "groq/llama-3.1-8b-instant" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "meta-llama/Llama-Guard-4-12B" litellm_params: model: "groq/meta-llama/Llama-Guard-4-12B" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "gemma2-9b-it" litellm_params: model: "groq/gemma2-9b-it" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "llama-3.1-8b-instant" litellm_params: model: "groq/llama-3.1-8b-instant" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "llama-3.3-70b-versatile" litellm_params: model: "groq/llama-3.3-70b-versatile" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "deepseek-r1-distill-llama-70b" litellm_params: model: "groq/deepseek-r1-distill-llama-70b" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "meta-llama/llama-4-maverick-17b-128e-instruct" litellm_params: model: "groq/meta-llama/llama-4-maverick-17b-128e-instruct" tags: ["paid"] api_key: os.environ/GROQ_API_KEY - model_name: "meta-llama/llama-4-scout-17b-16e-instruct" litellm_params: model: "groq/meta-llama/llama-4-scout-17b-16e-instruct" tags: ["paid"] api_key: os.environ/GROQ_API_KEY # - model_name: "mistral-saba-24b" # Discontinued # litellm_params: # model: "groq/mistral-saba-24b" # tags: ["paid"] # api_key: os.environ/GROQ_API_KEY # - model_name: "qwen-qwq-32b" # Discontinued # litellm_params: # model: "groq/qwen-qwq-32b" # tags: ["paid"] # api_key: os.environ/GROQ_API_KEY - model_name: "qwen/qwen3-32b" litellm_params: model: "groq/qwen/qwen3-32b" tags: ["paid"] api_key: os.environ/GROQ_API_KEY # OpenRouter models - model_name: "mistral-large-2411" litellm_params: model: "openrouter/mistralai/mistral-large-2411" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "qwen-2.5-72b-instruct" litellm_params: model: "openrouter/qwen/qwen-2.5-72b-instruct" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "eva-llama-3.33-70b" litellm_params: model: "openrouter/eva-unit-01/eva-llama-3.33-70b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "l3.1-euryale-70b" litellm_params: model: "openrouter/sao10k/l3.1-euryale-70b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "l3.3-euryale-70b" litellm_params: model: "openrouter/sao10k/l3.3-euryale-70b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "magnum-v4-72b" litellm_params: model: "openrouter/anthracite-org/magnum-v4-72b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "eva-qwen-2.5-72b" litellm_params: model: "openrouter/eva-unit-01/eva-qwen-2.5-72b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "hermes-3-llama-3.1-70b" litellm_params: model: "openrouter/nousresearch/hermes-3-llama-3.1-70b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "deepseek-chat" litellm_params: model: "openrouter/deepseek/deepseek-chat" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "openrouter/meta-llama/llama-4-scout" litellm_params: model: "openrouter/meta-llama/llama-4-scout" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "openrouter/meta-llama/llama-4-scout:free" litellm_params: model: "openrouter/meta-llama/llama-4-scout:free" api_key: os.environ/OPENROUTER_API_KEY tags: ["free"] - model_name: "openrouter/meta-llama/llama-4-maverick" litellm_params: model: "openrouter/meta-llama/llama-4-maverick" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "openrouter/meta-llama/llama-4-maverick:free" litellm_params: model: "openrouter/meta-llama/llama-4-maverick:free" api_key: os.environ/OPENROUTER_API_KEY tags: ["free"] - model_name: "amazon/nova-lite-v1" litellm_params: model: "openrouter/amazon/nova-lite-v1" api_key: os.environ/AMAZON_API_KEY tags: ["paid"] - model_name: "amazon/nova-micro-v1" litellm_params: model: "openrouter/amazon/nova-micro-v1" api_key: os.environ/AMAZON_API_KEY tags: ["paid"] - model_name: "amazon/nova-pro-v1" litellm_params: model: "openrouter/amazon/nova-pro-v1" api_key: os.environ/AMAZON_API_KEY tags: ["paid"] - model_name: "perplexity/sonar-deep-research" litellm_params: model: "openrouter/perplexity/sonar-deep-research" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "perplexity/sonar" litellm_params: model: "openrouter/perplexity/sonar" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "perplexity/sonar-pro" litellm_params: model: "openrouter/perplexity/sonar-pro" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "perplexity/sonar-reasoning-pro" litellm_params: model: "openrouter/perplexity/sonar-reasoning-pro" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "perplexity/sonar-reasoning" litellm_params: model: "openrouter/perplexity/sonar-reasoning" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] # Cerebras Models (OpenRouter) - model_name: "meta-llama/llama-3.1-8b-instruct" litellm_params: model: "openrouter/meta-llama/llama-3.1-8b-instruct" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "meta-llama/llama-3.3-70b-instruct" litellm_params: model: "openrouter/meta-llama/llama-3.3-70b-instruct" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "meta-llama/llama-4-scout" litellm_params: model: "openrouter/meta-llama/llama-4-scout" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "deepseek/deepseek-r1-distill-llama-70b" litellm_params: model: "openrouter/deepseek/deepseek-r1-distill-llama-70b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] - model_name: "deepseek/deepseek-r1-distill-qwen-32b" litellm_params: model: "openrouter/deepseek/deepseek-r1-distill-qwen-32b" api_key: os.environ/OPENROUTER_API_KEY tags: ["paid"] # -*= Embedding models =*- # ------------------------ - model_name: text-embedding-3-large litellm_params: model: "openai/text-embedding-3-large" api_key: os.environ/OPENAI_API_KEY tags: ["paid"] - model_name: voyage-multilingual-2 litellm_params: model: "voyage/voyage-multilingual-2" api_key: os.environ/VOYAGE_API_KEY tags: ["paid"] - model_name: voyage-3 litellm_params: model: "voyage/voyage-3" api_key: os.environ/VOYAGE_API_KEY tags: ["paid"] - model_name: Alibaba-NLP/gte-large-en-v1.5 litellm_params: model: openai/Alibaba-NLP/gte-large-en-v1.5 api_base: http://text-embeddings-inference tags: ["free"] - model_name: BAAI/bge-m3 litellm_params: model: openai/BAAI/bge-m3 api_base: http://text-embeddings-inference tags: ["free"] - model_name: vertex_ai/text-embedding-004 litellm_params: model: vertex_ai/text-embedding-004 # vertex_project: os.environ/GOOGLE_PROJECT_ID # vertex_location: os.environ/VERTEX_LOCATION # -*= Free models =*- # ------------------- - model_name: gpt-4o-mini litellm_params: model: openai/gpt-4o-mini api_key: os.environ/OPENAI_API_KEY tags: ["free"] # https://github.com/BerriAI/litellm/blob/main/litellm/__init__.py litellm_settings: num_retries: 3 request_timeout: 180 allowed_fails: 3 cooldown_time: 30 drop_params: true modify_params: true telemetry: false retry: true add_function_to_prompt: true set_verbose: false cache: true cache_params: # set cache params for redis type: redis namespace: "litellm_caching" host: os.environ/LITELLM_REDIS_HOST port: os.environ/LITELLM_REDIS_PORT password: os.environ/LITELLM_REDIS_PASSWORD router_settings: routing_strategy: simple-shuffle num_retries: 3 general_settings: master_key: os.environ/LITELLM_MASTER_KEY database_url: os.environ/LITELLM_DATABASE_URL enforce_user_param: true ================================================ FILE: src/memory-store/.gitignore ================================================ tmp/ *.pyc ================================================ FILE: src/memory-store/AGENTS.md ================================================ # AGENTS.md - memory-store This directory contains PostgreSQL and TimescaleDB schema definitions and migrations for the `memory-store` service. Key Uses - Bash commands: - cd memory-store - poe check - Core directories: - `migrations/` for database schema changes. - Code style guidelines: - SQL formatted to 96 chars per line. - Follow naming conventions for hypertables. - Testing instructions: - Run `poe test` if tests exist. - Validate SQL with `poe check`. - Repository etiquette: - Increment migration version per change. - Developer environment: - Configure `DATABASE_URL` in `.env`. - Unexpected behaviors: - TimescaleDB hypertable creation nuances. # Memory Store ## Overview Memory-store is Julep's PostgreSQL-based persistent storage layer for agents, sessions, tasks, and related data. It uses TimescaleDB with advanced vector search capabilities for document storage and retrieval. ## Architecture - **Database**: TimescaleDB (PostgreSQL extension) with vector search capabilities - **Vector Search**: Uses pgvector, vectorscale and OpenAI embeddings for semantic search - **Migrations**: Uses golang-migrate for schema management - **Hypertables**: Time-series optimized tables for transitions and execution data ## Key Components ### Core Data Models - `developers`: Root entity for multi-tenancy - `projects`: Organizational units for grouping related resources - `users`: End-users who interact with agents - `agents`: AI agent configurations with model settings and instructions - `tools`: Functionality exposed to agents (API integrations, etc.) - `tasks`: Workflow definitions for agent execution - `workflows`: Step-by-step execution plans for tasks - `sessions`: Conversation contexts for users and agents - `executions`: Task execution instances - `transitions`: State transitions in workflow execution (hypertable) - `files`: Stored files for agent consumption - `docs`: Knowledge base documents for agents with vector embeddings ### Search Capabilities - **Vector Search**: Semantic similarity using OpenAI embeddings (1024 dimensions) - **Text Search**: Full-text search with tsquery and trigram matching - **Hybrid Search**: Combined vector and text search with configurable weights - **Multiple Languages**: Support for various languages with specialized text configurations ### Schema Design Patterns 1. **Timescale Hypertables**: Time-partitioned tables for high-volume data 2. **Compound Keys**: (developer_id, entity_id) pattern for multi-tenancy 3. **JSON Metadata**: Flexible metadata fields as JSONB type 4. **Triggers**: Automatic timestamp and validation management 5. **Domain Validation**: Constraints and triggers enforce data integrity 6. **Deferred Constraints**: Handles circular references between tools and tasks ## Search Implementation - **Text-based**: Uses tsvector/tsquery with custom language configurations and unaccent - **Vector-based**: Uses pgvector with DiskANN indexing for ANN (Approximate Nearest Neighbor) search - **Hybrid Search**: Distribution-Based Score Fusion (DBSF) for combining text and vector scores - **Document Processing**: Recursive chunking with smart separators to handle large documents ## Optimization Features - **GIN Indexes**: For JSONB metadata and full-text search - **Trigram Indexes**: For fuzzy text matching - **Compression**: For large text fields and hypertables - **Partitioning**: Time-based and hash-based for transitions table - **Continuous Views**: For derived data like execution status ## Technical Details 1. **Connection String**: `postgres://postgres:PASSWORD@0.0.0.0:5432/postgres?sslmode=disable` 2. **Text Processing**: Uses unaccent, pg_trgm, and language-specific dictionaries 3. **Vectorization**: Uses TimescaleDB's pgai vectorizer-worker service 4. **Migration Path**: Sequential migrations for incremental schema updates 5. **State Machine**: Strict transition validation with defined state flows ## Docker Components - `memory-store`: TimescaleDB container with vector extensions - `vectorizer-worker`: Processes document embedding generation - `migration`: Applies DB schema migrations ## Migration Patterns - Migration numbers (000001 to 000032+) represent sequential schema evolution - Each migration has reversible up/down scripts for safe deployments - Progressive enhancement pattern with feature flags and backward compatibility ================================================ FILE: src/memory-store/Dockerfile.migrations ================================================ FROM migrate/migrate:latest # Copy migrations from local directory COPY migrations/ /migrations/ # Set the working directory WORKDIR / # Default command (can be overridden) ENTRYPOINT ["migrate"] CMD ["-path", "/migrations", "-database", "postgres://postgres:obviously_not_a_safe_password@memory-store:5432/postgres?sslmode=disable", "up"] ================================================ FILE: src/memory-store/README.md ================================================ ### prototyping flow: 1. Install `migrate` (golang-migrate) 2. In a separate window, `docker compose up db vectorizer-worker` to start db instances 3. `cd memory-store` and `migrate -database "postgres://postgres:postgres@0.0.0.0:5432/postgres?sslmode=disable" -path ./migrations up` to apply the migrations 4. `pip install --user -U pgcli` 5. `pgcli "postgres://postgres:postgres@localhost:5432/postgres"` For creating a migration: `migrate -database "postgres://postgres:postgres@0.0.0.0:5432/postgres?sslmode=disable" -path migrations create -ext sql -seq -dir migrations switch_to_hypercore` ================================================ FILE: src/memory-store/docker-compose.yml ================================================ name: pgai services: memory-store: image: timescale/timescaledb-ha:pg17.6-ts2.22.1-all environment: - POSTGRES_PASSWORD=${MEMORY_STORE_PASSWORD:-julep_secure_password} - OPENAI_API_KEY=${OPENAI_API_KEY:?OPENAI_API_KEY is required} ports: - "5432:5432" volumes: - memory_store_data:/home/postgres/pgdata/data # TODO: Fix this to install pgaudit # entrypoint: [] # command: >- # sed -r -i "s/[#]*\s*(shared_preload_libraries)\s*=\s*'(.*)'/\1 = 'pgaudit,\2'/;s/,'/'/" /home/postgres/pgdata/data/postgresql.conf # && exec /docker-entrypoint.sh healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres || exit 1"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped vectorizer-worker: image: timescale/pgai-vectorizer-worker:v0.10.5 environment: - PGAI_VECTORIZER_WORKER_DB_URL=postgres://postgres:${MEMORY_STORE_PASSWORD:-julep_secure_password}@memory-store:5432/postgres - OPENAI_API_KEY=${OPENAI_API_KEY:?OPENAI_API_KEY is required} command: [ "--poll-interval", "5s" ] depends_on: memory-store: condition: service_healthy restart: unless-stopped deploy: resources: limits: memory: 1G migration: image: migrate/migrate:latest volumes: - ./migrations:/migrations command: [ "-path", "/migrations", "-database", "postgres://postgres:${MEMORY_STORE_PASSWORD:-postgres}@memory-store:5432/postgres?sslmode=disable" , "up"] restart: "no" develop: watch: - path: ./migrations target: ./migrations action: sync+restart depends_on: memory-store: condition: service_healthy volumes: memory_store_data: external: true ================================================ FILE: src/memory-store/migrations/000001_initial.down.sql ================================================ BEGIN; -- Drop the update_updated_at_column function DROP FUNCTION IF EXISTS update_updated_at_column (); -- Drop misc extensions DROP EXTENSION IF EXISTS "uuid-ossp" CASCADE; DROP EXTENSION IF EXISTS citext CASCADE; DROP EXTENSION IF EXISTS btree_gist CASCADE; DROP EXTENSION IF EXISTS btree_gin CASCADE; -- Drop timescale's pgai extensions DROP EXTENSION IF EXISTS ai CASCADE; DROP EXTENSION IF EXISTS vectorscale CASCADE; DROP EXTENSION IF EXISTS vector CASCADE; -- Drop timescaledb extensions DROP EXTENSION IF EXISTS timescaledb_toolkit CASCADE; DROP EXTENSION IF EXISTS timescaledb CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000001_initial.up.sql ================================================ BEGIN; -- init timescaledb CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; CREATE EXTENSION IF NOT EXISTS timescaledb_toolkit CASCADE; -- add timescale's pgai extension CREATE EXTENSION IF NOT EXISTS vector CASCADE; CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE; CREATE EXTENSION IF NOT EXISTS ai CASCADE; -- add misc extensions (for indexing etc) CREATE EXTENSION IF NOT EXISTS btree_gin CASCADE; CREATE EXTENSION IF NOT EXISTS btree_gist CASCADE; CREATE EXTENSION IF NOT EXISTS citext CASCADE; CREATE EXTENSION IF NOT EXISTS "uuid-ossp" CASCADE; -- Create function to update the updated_at timestamp CREATE OR REPLACE FUNCTION update_updated_at_column () RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; COMMENT ON FUNCTION update_updated_at_column () IS 'Trigger function to automatically update updated_at timestamp'; COMMIT; ================================================ FILE: src/memory-store/migrations/000002_developers.down.sql ================================================ -- Drop the table (this will automatically drop associated indexes and triggers) DROP TABLE IF EXISTS developers CASCADE; -- Note: The update_updated_at_column() function is not dropped as it might be used by other tables ================================================ FILE: src/memory-store/migrations/000002_developers.up.sql ================================================ BEGIN; -- Create developers table CREATE TABLE IF NOT EXISTS developers ( developer_id UUID NOT NULL, email TEXT NOT NULL CONSTRAINT ct_developers_email_format CHECK ( email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$' ), active BOOLEAN NOT NULL DEFAULT TRUE, tags TEXT[] DEFAULT ARRAY[]::TEXT[], settings JSONB NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_developers PRIMARY KEY (developer_id), CONSTRAINT uq_developers_email UNIQUE (email), CONSTRAINT ct_settings_is_object CHECK (jsonb_typeof(settings) = 'object') ); -- Create sorted index on developer_id (optimized for UUID v7) CREATE INDEX IF NOT EXISTS idx_developers_id_sorted ON developers (developer_id DESC) INCLUDE ( email, active, tags, settings, created_at, updated_at ) WHERE active = TRUE; -- Create index on email CREATE INDEX IF NOT EXISTS idx_developers_email ON developers (email); -- Create GIN index for tags array CREATE INDEX IF NOT EXISTS idx_developers_tags ON developers USING GIN (tags); -- Create trigger to automatically update updated_at DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trg_developers_updated_at') THEN CREATE TRIGGER trg_developers_updated_at BEFORE UPDATE ON developers FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Add comment to table COMMENT ON TABLE developers IS 'Stores developer information including their settings and tags'; COMMIT; ================================================ FILE: src/memory-store/migrations/000003_users.down.sql ================================================ BEGIN; -- Drop trigger first DROP TRIGGER IF EXISTS update_users_updated_at ON users; -- Drop indexes DROP INDEX IF EXISTS users_metadata_gin_idx; -- Drop foreign key constraint ALTER TABLE IF EXISTS users DROP CONSTRAINT IF EXISTS users_developer_id_fkey; -- Finally drop the table DROP TABLE IF EXISTS users; COMMIT; ================================================ FILE: src/memory-store/migrations/000003_users.up.sql ================================================ BEGIN; -- Create users table if it doesn't exist CREATE TABLE IF NOT EXISTS users ( developer_id UUID NOT NULL, user_id UUID NOT NULL, name TEXT NOT NULL, about TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT pk_users PRIMARY KEY (developer_id, user_id) ); -- Create foreign key constraint and index if they don't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'users_developer_id_fkey' ) THEN ALTER TABLE users ADD CONSTRAINT users_developer_id_fkey FOREIGN KEY (developer_id) REFERENCES developers(developer_id); END IF; END $$; -- Create a GIN index on the entire metadata column if it doesn't exist CREATE INDEX IF NOT EXISTS users_metadata_gin_idx ON users USING GIN (metadata); -- Create trigger if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'update_users_updated_at' ) THEN CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Add comment to table (comments are idempotent by default) COMMENT ON TABLE users IS 'Stores user information linked to developers'; COMMIT; ================================================ FILE: src/memory-store/migrations/000004_agents.down.sql ================================================ BEGIN; -- Drop trigger first DROP TRIGGER IF EXISTS trg_agents_updated_at ON agents; -- Drop indexes DROP INDEX IF EXISTS idx_agents_metadata; -- Drop table (this will automatically drop associated constraints) DROP TABLE IF EXISTS agents CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000004_agents.up.sql ================================================ BEGIN; -- Create agents table CREATE TABLE IF NOT EXISTS agents ( developer_id UUID NOT NULL, agent_id UUID NOT NULL, canonical_name citext NOT NULL CONSTRAINT ct_agents_canonical_name_length CHECK ( length(canonical_name) >= 1 AND length(canonical_name) <= 255 ), name TEXT NOT NULL CONSTRAINT ct_agents_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), about TEXT CONSTRAINT ct_agents_about_length CHECK ( about IS NULL OR length(about) <= 5000 ), instructions TEXT[] DEFAULT ARRAY[]::TEXT[], model TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, default_settings JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT pk_agents PRIMARY KEY (developer_id, agent_id), CONSTRAINT uq_agents_canonical_name_unique UNIQUE (developer_id, canonical_name), -- per developer CONSTRAINT ct_agents_canonical_name_valid_identifier CHECK (canonical_name ~ '^[a-zA-Z][a-zA-Z0-9_]*$'), CONSTRAINT ct_agents_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT ct_agents_default_settings_is_object CHECK (jsonb_typeof(default_settings) = 'object') ); -- Create foreign key constraint and index on developer_id ALTER TABLE agents DROP CONSTRAINT IF EXISTS fk_agents_developer, ADD CONSTRAINT fk_agents_developer FOREIGN KEY (developer_id) REFERENCES developers (developer_id); -- Create a GIN index on the entire metadata column CREATE INDEX IF NOT EXISTS idx_agents_metadata ON agents USING GIN (metadata); -- Create trigger to automatically update updated_at CREATE OR REPLACE TRIGGER trg_agents_updated_at BEFORE UPDATE ON agents FOR EACH ROW EXECUTE FUNCTION update_updated_at_column (); -- Add comment to table COMMENT ON TABLE agents IS 'Stores AI agent configurations and metadata for developers'; COMMIT; ================================================ FILE: src/memory-store/migrations/000005_files.down.sql ================================================ BEGIN; -- Drop file_owners table and its dependencies DROP TRIGGER IF EXISTS trg_validate_file_owner ON file_owners; DROP FUNCTION IF EXISTS validate_file_owner(); DROP TABLE IF EXISTS file_owners; -- Drop files table and its dependencies DROP TRIGGER IF EXISTS trg_files_updated_at ON files; DROP TABLE IF EXISTS files; COMMIT; ================================================ FILE: src/memory-store/migrations/000005_files.up.sql ================================================ BEGIN; -- Create files table CREATE TABLE IF NOT EXISTS files ( developer_id UUID NOT NULL, file_id UUID NOT NULL, name TEXT NOT NULL CONSTRAINT ct_files_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), description TEXT DEFAULT NULL CONSTRAINT ct_files_description_length CHECK ( description IS NULL OR length(description) <= 1000 ), mime_type TEXT DEFAULT NULL CONSTRAINT ct_files_mime_type_length CHECK ( mime_type IS NULL OR length(mime_type) <= 127 ), size BIGINT NOT NULL CONSTRAINT ct_files_size_positive CHECK (size > 0), hash BYTEA NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_files PRIMARY KEY (developer_id, file_id) ); -- Create foreign key constraint and index if they don't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_files_developer') THEN ALTER TABLE files ADD CONSTRAINT fk_files_developer FOREIGN KEY (developer_id) REFERENCES developers(developer_id); END IF; END $$; -- Create trigger if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trg_files_updated_at') THEN CREATE TRIGGER trg_files_updated_at BEFORE UPDATE ON files FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Create the file_owners table CREATE TABLE IF NOT EXISTS file_owners ( developer_id UUID NOT NULL, file_id UUID NOT NULL, owner_type TEXT NOT NULL, -- 'user' or 'agent' owner_id UUID NOT NULL, CONSTRAINT pk_file_owners PRIMARY KEY (developer_id, file_id), CONSTRAINT fk_file_owners_file FOREIGN KEY (developer_id, file_id) REFERENCES files (developer_id, file_id), CONSTRAINT ct_file_owners_owner_type CHECK (owner_type IN ('user', 'agent')) ); -- Create indexes CREATE INDEX IF NOT EXISTS idx_file_owners_owner ON file_owners (developer_id, owner_type, owner_id); -- Create function to validate owner reference CREATE OR REPLACE FUNCTION validate_file_owner() RETURNS TRIGGER AS $$ BEGIN IF NEW.owner_type = 'user' THEN IF NOT EXISTS ( SELECT 1 FROM users WHERE developer_id = NEW.developer_id AND user_id = NEW.owner_id ) THEN RAISE EXCEPTION 'Invalid user reference'; END IF; ELSIF NEW.owner_type = 'agent' THEN IF NOT EXISTS ( SELECT 1 FROM agents WHERE developer_id = NEW.developer_id AND agent_id = NEW.owner_id ) THEN RAISE EXCEPTION 'Invalid agent reference'; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger for validation CREATE TRIGGER trg_validate_file_owner BEFORE INSERT OR UPDATE ON file_owners FOR EACH ROW EXECUTE FUNCTION validate_file_owner(); COMMIT; ================================================ FILE: src/memory-store/migrations/000006_docs.down.sql ================================================ BEGIN; -- Drop doc_owners table and its dependencies DROP TRIGGER IF EXISTS trg_validate_doc_owner ON doc_owners; DROP FUNCTION IF EXISTS validate_doc_owner(); DROP INDEX IF EXISTS idx_doc_owners_owner; DROP TABLE IF EXISTS doc_owners CASCADE; -- Drop docs table and its dependencies DROP TRIGGER IF EXISTS trg_docs_search_tsv ON docs; DROP TRIGGER IF EXISTS trg_docs_updated_at ON docs; DROP FUNCTION IF EXISTS docs_update_search_tsv(); -- Drop indexes DROP INDEX IF EXISTS idx_docs_content_trgm; DROP INDEX IF EXISTS idx_docs_title_trgm; DROP INDEX IF EXISTS idx_docs_search_tsv; DROP INDEX IF EXISTS idx_docs_metadata; -- Drop docs table DROP TABLE IF EXISTS docs CASCADE; -- Drop language validation function DROP FUNCTION IF EXISTS is_valid_language(text); COMMIT; ================================================ FILE: src/memory-store/migrations/000006_docs.up.sql ================================================ BEGIN; -- Create function to validate language (make it OR REPLACE) CREATE OR REPLACE FUNCTION is_valid_language (lang text) RETURNS boolean AS $$ BEGIN RETURN EXISTS ( SELECT 1 FROM pg_ts_config WHERE cfgname::text = lang ); END; $$ LANGUAGE plpgsql; -- Create docs table CREATE TABLE IF NOT EXISTS docs ( developer_id UUID NOT NULL, doc_id UUID NOT NULL, title TEXT NOT NULL, content TEXT NOT NULL, index INTEGER NOT NULL, modality TEXT NOT NULL, embedding_model TEXT NOT NULL, embedding_dimensions INTEGER NOT NULL, language TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT pk_docs PRIMARY KEY (developer_id, doc_id, index), CONSTRAINT ct_docs_embedding_dimensions_positive CHECK (embedding_dimensions > 0), CONSTRAINT ct_docs_valid_modality CHECK (modality IN ('text', 'image', 'mixed')), CONSTRAINT ct_docs_index_positive CHECK (index >= 0), CONSTRAINT ct_docs_valid_language CHECK (is_valid_language (language)), CONSTRAINT ct_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object') ); -- Create foreign key constraint if not exists (using DO block for safety) DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'fk_docs_developer' ) THEN ALTER TABLE docs ADD CONSTRAINT fk_docs_developer FOREIGN KEY (developer_id) REFERENCES developers(developer_id); END IF; END $$; -- Create trigger if not exists DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_docs_updated_at' ) THEN CREATE TRIGGER trg_docs_updated_at BEFORE UPDATE ON docs FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Create the doc_owners table CREATE TABLE IF NOT EXISTS doc_owners ( developer_id UUID NOT NULL, doc_id UUID NOT NULL, owner_type TEXT NOT NULL, -- 'user' or 'agent' owner_id UUID NOT NULL, CONSTRAINT pk_doc_owners PRIMARY KEY (developer_id, doc_id), -- TODO: Ensure that doc exists (this constraint is not working) -- CONSTRAINT fk_doc_owners_doc FOREIGN KEY (developer_id, doc_id) REFERENCES docs (developer_id, doc_id), CONSTRAINT ct_doc_owners_owner_type CHECK (owner_type IN ('user', 'agent')) ); -- Create indexes CREATE INDEX IF NOT EXISTS idx_doc_owners_owner ON doc_owners (developer_id, owner_type, owner_id); -- Create function to validate owner reference CREATE OR REPLACE FUNCTION validate_doc_owner () RETURNS TRIGGER AS $$ BEGIN IF NEW.owner_type = 'user' THEN IF NOT EXISTS ( SELECT 1 FROM users WHERE developer_id = NEW.developer_id AND user_id = NEW.owner_id ) THEN RAISE EXCEPTION 'Invalid user reference'; END IF; ELSIF NEW.owner_type = 'agent' THEN IF NOT EXISTS ( SELECT 1 FROM agents WHERE developer_id = NEW.developer_id AND agent_id = NEW.owner_id ) THEN RAISE EXCEPTION 'Invalid agent reference'; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger for validation CREATE TRIGGER trg_validate_doc_owner BEFORE INSERT OR UPDATE ON doc_owners FOR EACH ROW EXECUTE FUNCTION validate_doc_owner (); -- Create indexes if not exists CREATE INDEX IF NOT EXISTS idx_docs_metadata ON docs USING GIN (metadata); -- Enable necessary PostgreSQL extensions CREATE EXTENSION IF NOT EXISTS unaccent; CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS dict_int CASCADE; CREATE EXTENSION IF NOT EXISTS dict_xsyn CASCADE; CREATE EXTENSION IF NOT EXISTS fuzzystrmatch CASCADE; -- Configure text search for all supported languages DO $$ DECLARE lang text; BEGIN BEGIN FOR lang IN (SELECT cfgname FROM pg_ts_config WHERE cfgname IN ( 'arabic', 'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'greek', 'hungarian', 'indonesian', 'irish', 'italian', 'lithuanian', 'nepali', 'norwegian', 'portuguese', 'romanian', 'russian', 'spanish', 'swedish', 'tamil', 'turkish' )) LOOP -- Configure integer dictionary EXECUTE format('ALTER TEXT SEARCH CONFIGURATION %I ALTER MAPPING FOR int, uint WITH intdict', lang); -- Configure synonym and stemming EXECUTE format('ALTER TEXT SEARCH CONFIGURATION %I ALTER MAPPING FOR asciihword, hword_asciipart, hword, hword_part, word, asciiword WITH xsyn, %I_stem', lang, lang); END LOOP; EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during altering search configurations: %, %', SQLSTATE, SQLERRM; END; END $$; -- Add the search_tsv column if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'docs' AND column_name = 'search_tsv' ) THEN ALTER TABLE docs ADD COLUMN search_tsv tsvector; END IF; END $$; -- Create function to update tsvector CREATE OR REPLACE FUNCTION docs_update_search_tsv () RETURNS trigger AS $$ BEGIN NEW.search_tsv := setweight(to_tsvector(NEW.language::regconfig, unaccent(coalesce(NEW.title, ''))), 'A') || setweight(to_tsvector(NEW.language::regconfig, unaccent(coalesce(NEW.content, ''))), 'B'); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger if not exists DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_docs_search_tsv' ) THEN CREATE TRIGGER trg_docs_search_tsv BEFORE INSERT OR UPDATE OF title, content, language ON docs FOR EACH ROW EXECUTE FUNCTION docs_update_search_tsv(); END IF; END $$; -- Create indexes if not exists CREATE INDEX IF NOT EXISTS idx_docs_search_tsv ON docs USING GIN (search_tsv); CREATE INDEX IF NOT EXISTS idx_docs_title_trgm ON docs USING GIN (title gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_docs_content_trgm ON docs USING GIN (content gin_trgm_ops); -- Update existing rows (if any) UPDATE docs SET search_tsv = setweight( to_tsvector( language::regconfig, unaccent (coalesce(title, '')) ), 'A' ) || setweight( to_tsvector( language::regconfig, unaccent (coalesce(content, '')) ), 'B' ) WHERE search_tsv IS NULL; COMMIT; ================================================ FILE: src/memory-store/migrations/000007_ann.down.sql ================================================ BEGIN; DO $$ DECLARE vectorizer_id INTEGER; BEGIN SELECT id INTO vectorizer_id FROM ai.vectorizer WHERE source_table = 'docs'; -- Drop the vectorizer if it exists IF vectorizer_id IS NOT NULL THEN PERFORM ai.drop_vectorizer(vectorizer_id, drop_all => true); END IF; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000007_ann.up.sql ================================================ /* * VECTOR SIMILARITY SEARCH WITH DISKANN (Complexity: 8/10) * Uses TimescaleDB's vectorizer to convert text into high-dimensional vectors for semantic search. * Implements DiskANN (Disk-based Approximate Nearest Neighbor) for efficient similarity search at scale. * Includes smart text chunking to handle large documents while preserving context and semantic meaning. */ -- Create vector similarity search index using diskann and timescale vectorizer SELECT ai.create_vectorizer ( 'public.docs'::regclass, name => 'docs_vectorizer', grant_to => ai.grant_to('postgres'), destination => ai.destination_table( target_schema => 'public', target_table => 'docs_embeddings_store', view_name => 'docs_embeddings' ), loading => ai.loading_column('content'), embedding => ai.embedding_openai ('text-embedding-3-large', 1024, 'document'), -- need to parameterize this -- actual chunking is managed by the docs table -- this is to prevent running out of context window chunking => ai.chunking_recursive_character_text_splitter ( -- chunk_column => 'content', chunk_size => 30000, -- 30k characters ~= 7.5k tokens chunk_overlap => 600, -- 600 characters ~= 150 tokens separators => ARRAY[ -- tries separators in order -- markdown headers E'\n#', E'\n##', E'\n###', E'\n---', E'\n***', -- html tags E'', -- Split on major document sections E'
', -- Split on div boundaries E'', E'

', -- Split on paragraphs E'
', -- Split on line breaks -- other separators E'\n\n', -- paragraphs '. ', '? ', '! ', '; ', -- sentences (note space after punctuation) E'\n', -- line breaks ' ' -- words (last resort) ] ), scheduling => ai.scheduling_timescaledb (), indexing => ai.indexing_diskann (), formatting => ai.formatting_python_template (E'Title: $title\n\n$chunk'), processing => ai.processing_default (), enqueue_existing => TRUE ); ================================================ FILE: src/memory-store/migrations/000008_tools.down.sql ================================================ BEGIN; -- Drop table and all its dependent objects (indexes, constraints, triggers) DROP TABLE IF EXISTS tools CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000008_tools.up.sql ================================================ BEGIN; -- Create tools table if it doesn't exist CREATE TABLE IF NOT EXISTS tools ( developer_id UUID NOT NULL, agent_id UUID NOT NULL, tool_id UUID NOT NULL, task_id UUID DEFAULT NULL, type TEXT NOT NULL CONSTRAINT ct_tools_type_length CHECK ( length(type) >= 1 AND length(type) <= 255 ), name TEXT NOT NULL CONSTRAINT ct_tools_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), description TEXT CONSTRAINT ct_tools_description_length CHECK ( description IS NULL OR length(description) <= 1000 ), spec JSONB NOT NULL, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_tools PRIMARY KEY (developer_id, agent_id, tool_id), CONSTRAINT ct_unique_name_per_agent UNIQUE (agent_id, name, task_id), CONSTRAINT ct_spec_is_object CHECK (jsonb_typeof(spec) = 'object') ); -- Create sorted index on task_id if it doesn't exist CREATE INDEX IF NOT EXISTS idx_tools_task_id_sorted ON tools (task_id DESC) WHERE task_id IS NOT NULL; -- Create foreign key constraint and index if they don't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'fk_tools_agent' ) THEN ALTER TABLE tools ADD CONSTRAINT fk_tools_agent FOREIGN KEY (developer_id, agent_id) REFERENCES agents(developer_id, agent_id) ON DELETE CASCADE; END IF; END $$; -- Drop trigger if exists and recreate DROP TRIGGER IF EXISTS trg_tools_updated_at ON tools; CREATE TRIGGER trg_tools_updated_at BEFORE UPDATE ON tools FOR EACH ROW EXECUTE FUNCTION update_updated_at_column (); -- Add comment to table COMMENT ON TABLE tools IS 'Stores tool configurations and specifications for AI agents'; COMMIT; ================================================ FILE: src/memory-store/migrations/000009_sessions.down.sql ================================================ BEGIN; -- Drop triggers first DROP TRIGGER IF EXISTS trg_validate_participant_before_update ON session_lookup; DROP TRIGGER IF EXISTS trg_validate_participant_before_insert ON session_lookup; -- Drop the validation function DROP FUNCTION IF EXISTS validate_participant (); -- Drop session_lookup table and its indexes DROP TABLE IF EXISTS session_lookup; -- Drop sessions table and its indexes DROP TRIGGER IF EXISTS trg_sessions_updated_at ON sessions; DROP INDEX IF EXISTS idx_sessions_metadata; DROP TABLE IF EXISTS sessions CASCADE; -- Drop the enum type DROP TYPE IF EXISTS participant_type; COMMIT; ================================================ FILE: src/memory-store/migrations/000009_sessions.up.sql ================================================ BEGIN; -- Create sessions table if it doesn't exist CREATE TABLE IF NOT EXISTS sessions ( developer_id UUID NOT NULL, session_id UUID NOT NULL, situation TEXT, system_template TEXT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, render_templates BOOLEAN NOT NULL DEFAULT TRUE, token_budget INTEGER, context_overflow TEXT, forward_tool_calls BOOLEAN, recall_options JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT pk_sessions PRIMARY KEY (developer_id, session_id), CONSTRAINT uq_sessions_session_id UNIQUE (session_id), CONSTRAINT ct_sessions_token_budget_positive CHECK ( token_budget IS NULL OR token_budget > 0 ), CONSTRAINT ct_sessions_context_overflow_valid CHECK ( context_overflow IS NULL OR context_overflow IN ('truncate', 'adaptive') ), CONSTRAINT ct_sessions_system_template_not_empty CHECK (length(trim(system_template)) > 0), CONSTRAINT ct_sessions_situation_not_empty CHECK ( situation IS NULL OR length(trim(situation)) > 0 ), CONSTRAINT ct_sessions_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT ct_sessions_recall_options_is_object CHECK (jsonb_typeof(recall_options) = 'object') ); CREATE INDEX IF NOT EXISTS idx_sessions_metadata ON sessions USING GIN (metadata); -- Create foreign key if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'fk_sessions_developer' ) THEN ALTER TABLE sessions ADD CONSTRAINT fk_sessions_developer FOREIGN KEY (developer_id) REFERENCES developers(developer_id); END IF; END $$; -- Create trigger if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_sessions_updated_at' ) THEN CREATE TRIGGER trg_sessions_updated_at BEFORE UPDATE ON sessions FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Create participant_type enum if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'participant_type') THEN CREATE TYPE participant_type AS ENUM ('user', 'agent'); END IF; END $$; -- Create session_lookup table if it doesn't exist CREATE TABLE IF NOT EXISTS session_lookup ( developer_id UUID NOT NULL, session_id UUID NOT NULL, participant_type participant_type NOT NULL, participant_id UUID NOT NULL, PRIMARY KEY ( developer_id, session_id, participant_type, participant_id ), FOREIGN KEY (developer_id, session_id) REFERENCES sessions (developer_id, session_id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_session_lookup_by_participant ON session_lookup (developer_id, participant_type, participant_id); -- Create or replace the validation function CREATE OR REPLACE FUNCTION validate_participant () RETURNS trigger AS $$ BEGIN IF NEW.participant_type = 'user' THEN PERFORM 1 FROM users WHERE developer_id = NEW.developer_id AND user_id = NEW.participant_id; IF NOT FOUND THEN RAISE EXCEPTION 'Invalid participant_id: % for participant_type user', NEW.participant_id; END IF; ELSIF NEW.participant_type = 'agent' THEN PERFORM 1 FROM agents WHERE developer_id = NEW.developer_id AND agent_id = NEW.participant_id; IF NOT FOUND THEN RAISE EXCEPTION 'Invalid participant_id: % for participant_type agent', NEW.participant_id; END IF; ELSE RAISE EXCEPTION 'Unknown participant_type: %', NEW.participant_type; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create triggers if they don't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_validate_participant_before_insert' ) THEN CREATE TRIGGER trg_validate_participant_before_insert BEFORE INSERT ON session_lookup FOR EACH ROW EXECUTE FUNCTION validate_participant(); END IF; IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_validate_participant_before_update' ) THEN CREATE TRIGGER trg_validate_participant_before_update BEFORE UPDATE ON session_lookup FOR EACH ROW EXECUTE FUNCTION validate_participant(); END IF; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000010_tasks.down.sql ================================================ BEGIN; -- Drop the foreign key constraint from tools table if it exists DO $$ BEGIN IF EXISTS ( SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'fk_tools_task_id' ) THEN ALTER TABLE tools DROP CONSTRAINT fk_tools_task_id; END IF; END $$; -- Drop the workflows table first since it depends on tasks DROP TABLE IF EXISTS workflows CASCADE; -- Drop the tasks table and all its dependent objects (CASCADE will handle indexes, triggers, and constraints) DROP TABLE IF EXISTS tasks CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000010_tasks.up.sql ================================================ BEGIN; /* * DEFERRED FOREIGN KEY CONSTRAINTS (Complexity: 6/10) * Uses PostgreSQL's deferred constraints to handle complex relationships between tasks and tools tables. * Constraints are checked at transaction commit rather than immediately, allowing circular references. * This enables more flexible data loading patterns while maintaining referential integrity. */ -- Create tasks table if it doesn't exist CREATE TABLE IF NOT EXISTS tasks ( developer_id UUID NOT NULL, canonical_name CITEXT NOT NULL CONSTRAINT ct_tasks_canonical_name_length CHECK ( length(canonical_name) >= 1 AND length(canonical_name) <= 255 ), agent_id UUID NOT NULL, task_id UUID NOT NULL, "version" INTEGER NOT NULL DEFAULT 1, name TEXT NOT NULL CONSTRAINT ct_tasks_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), description TEXT DEFAULT NULL CONSTRAINT ct_tasks_description_length CHECK ( description IS NULL OR length(description) <= 1000 ), input_schema JSONB NOT NULL, inherit_tools BOOLEAN DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB DEFAULT '{}'::JSONB, CONSTRAINT pk_tasks PRIMARY KEY (developer_id, task_id, "version"), CONSTRAINT uq_tasks_canonical_name_unique UNIQUE (developer_id, canonical_name, "version"), CONSTRAINT fk_tasks_agent FOREIGN KEY (developer_id, agent_id) REFERENCES agents (developer_id, agent_id) ON DELETE CASCADE, CONSTRAINT ct_tasks_canonical_name_valid_identifier CHECK (canonical_name ~ '^[a-zA-Z][a-zA-Z0-9_]*$'), CONSTRAINT ct_tasks_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT ct_tasks_input_schema_is_object CHECK (jsonb_typeof(input_schema) = 'object'), CONSTRAINT ct_tasks_version_positive CHECK ("version" > 0) ); -- Create sorted index on task_id if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_tasks_id_sorted') THEN CREATE INDEX idx_tasks_id_sorted ON tasks (task_id DESC); END IF; END $$; -- Create index on canonical_name if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_tasks_canonical_name') THEN CREATE INDEX idx_tasks_canonical_name ON tasks (developer_id DESC, canonical_name); END IF; END $$; -- Create a GIN index on metadata if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_tasks_metadata') THEN CREATE INDEX idx_tasks_metadata ON tasks USING GIN (metadata); END IF; END $$; -- Create function to validate owner reference CREATE OR REPLACE FUNCTION validate_tool_task() RETURNS TRIGGER AS $$ BEGIN IF NEW.task_id IS NOT NULL THEN IF NOT EXISTS ( SELECT 1 FROM tasks WHERE developer_id = NEW.developer_id AND task_id = NEW.task_id ) THEN RAISE EXCEPTION 'Invalid task reference'; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger for validation CREATE TRIGGER trg_validate_tool_task BEFORE INSERT OR UPDATE ON tools FOR EACH ROW EXECUTE FUNCTION validate_tool_task(); -- Create updated_at trigger if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_trigger WHERE tgname = 'trg_tasks_updated_at' ) THEN CREATE TRIGGER trg_tasks_updated_at BEFORE UPDATE ON tasks FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); END IF; END $$; -- Add comment to table (comments are idempotent by default) COMMENT ON TABLE tasks IS 'Stores tasks associated with AI agents for developers'; -- Create 'workflows' table CREATE TABLE IF NOT EXISTS workflows ( developer_id UUID NOT NULL, task_id UUID NOT NULL, "version" INTEGER NOT NULL, name TEXT NOT NULL CONSTRAINT ct_workflows_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), step_idx INTEGER NOT NULL CONSTRAINT ct_workflows_step_idx_positive CHECK (step_idx >= 0), step_type TEXT NOT NULL CONSTRAINT ct_workflows_step_type_length CHECK ( length(step_type) >= 1 AND length(step_type) <= 255 ), step_definition JSONB NOT NULL CONSTRAINT ct_workflows_step_definition_valid CHECK (jsonb_typeof(step_definition) = 'object'), CONSTRAINT pk_workflows PRIMARY KEY (developer_id, task_id, "version", name, step_idx), CONSTRAINT fk_workflows_tasks FOREIGN KEY (developer_id, task_id, "version") REFERENCES tasks (developer_id, task_id, "version") ON DELETE CASCADE ); -- Add comment to 'workflows' table COMMENT ON TABLE workflows IS 'Stores normalized workflows for tasks'; COMMIT; ================================================ FILE: src/memory-store/migrations/000011_executions.down.sql ================================================ BEGIN; DROP TABLE IF EXISTS executions CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000011_executions.up.sql ================================================ BEGIN; -- Create executions table if it doesn't exist CREATE TABLE IF NOT EXISTS executions ( developer_id UUID NOT NULL, task_id UUID NOT NULL, task_version INTEGER NOT NULL, execution_id UUID NOT NULL, input JSONB NOT NULL, -- NOTE: These will be generated using continuous aggregates from transitions -- status TEXT DEFAULT 'pending', -- output JSONB DEFAULT NULL, -- error TEXT DEFAULT NULL, -- updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_executions PRIMARY KEY (execution_id), CONSTRAINT fk_executions_developer FOREIGN KEY (developer_id) REFERENCES developers (developer_id), CONSTRAINT fk_executions_task FOREIGN KEY (developer_id, task_id, task_version) REFERENCES tasks (developer_id, task_id, "version"), CONSTRAINT ct_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object') ); -- Create index on developer_id CREATE INDEX IF NOT EXISTS idx_executions_developer_id ON executions (developer_id); -- Create index on task_id CREATE INDEX IF NOT EXISTS idx_executions_task_id ON executions (task_id, task_version); -- Create a GIN index on the metadata column CREATE INDEX IF NOT EXISTS idx_executions_metadata ON executions USING GIN (metadata); -- Add comment to table (comments are idempotent by default) COMMENT ON TABLE executions IS 'Stores executions associated with AI agents for developers'; COMMIT; ================================================ FILE: src/memory-store/migrations/000012_transitions.down.sql ================================================ BEGIN; -- Drop foreign key constraint if exists ALTER TABLE IF EXISTS transitions DROP CONSTRAINT IF EXISTS fk_transitions_execution; -- Drop indexes if they exist DROP INDEX IF EXISTS idx_transitions_metadata; DROP INDEX IF EXISTS idx_transitions_label; DROP INDEX IF EXISTS idx_transitions_next; DROP INDEX IF EXISTS idx_transitions_current; DROP INDEX IF EXISTS transitions_created_at_idx; -- Drop the transitions table (this will also remove it from hypertables) DO $$ BEGIN BEGIN DELETE FROM transitions; EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during deleting all from transitions: %, %', SQLSTATE, SQLERRM; END; END $$; DROP TABLE IF EXISTS transitions; -- Drop custom types if they exist DROP TYPE IF EXISTS transition_cursor; DROP TYPE IF EXISTS transition_type; -- Drop the trigger and function for transition validation DROP TRIGGER IF EXISTS validate_transition ON transitions; DROP FUNCTION IF EXISTS check_valid_transition (); COMMIT; ================================================ FILE: src/memory-store/migrations/000012_transitions.up.sql ================================================ BEGIN; /* * CUSTOM TYPES AND ENUMS WITH COMPLEX CONSTRAINTS (Complexity: 7/10) * Creates custom composite type transition_cursor to track workflow state and enum type for transition states. * Uses compound primary key combining timestamps and UUIDs for efficient time-series operations. * Implements complex indexing strategy optimized for various query patterns (current state, next state, labels). */ -- Create transition type enum if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'transition_type') THEN CREATE TYPE transition_type AS ENUM ( 'init', 'finish', 'init_branch', 'finish_branch', 'wait', 'resume', 'error', 'step', 'cancelled' ); END IF; END $$; -- Create transition cursor type if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'transition_cursor') THEN CREATE TYPE transition_cursor AS ( workflow_name TEXT, step_index INT ); END IF; END $$; -- Create transitions table if it doesn't exist CREATE TABLE IF NOT EXISTS transitions ( created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, execution_id UUID NOT NULL, transition_id UUID NOT NULL, type transition_type NOT NULL, step_label TEXT DEFAULT NULL, current_step transition_cursor NOT NULL, next_step transition_cursor DEFAULT NULL, output JSONB, task_token TEXT DEFAULT NULL, metadata JSONB DEFAULT '{}'::JSONB, CONSTRAINT pk_transitions PRIMARY KEY (created_at, execution_id, transition_id), CONSTRAINT ct_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object') ); -- Convert to hypertable if not already SELECT create_hypertable ( 'transitions', by_range ('created_at', INTERVAL '1 day'), if_not_exists => TRUE ); SELECT add_dimension ( 'transitions', by_hash ('execution_id', 2), if_not_exists => TRUE ); -- Create indexes if they don't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_metadata') THEN CREATE INDEX idx_transitions_metadata ON transitions USING GIN (metadata); END IF; IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_label') THEN CREATE UNIQUE INDEX idx_transitions_label ON transitions USING btree (execution_id, step_label, created_at DESC) WHERE (step_label IS NOT NULL); END IF; IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_next') THEN CREATE UNIQUE INDEX idx_transitions_next ON transitions USING btree (execution_id, next_step, created_at DESC) WHERE (next_step IS NOT NULL); END IF; IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_current') THEN CREATE UNIQUE INDEX idx_transitions_current ON transitions USING btree (execution_id, current_step, created_at DESC); END IF; END $$; -- Add foreign key constraint if it doesn't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_transitions_execution') THEN ALTER TABLE transitions ADD CONSTRAINT fk_transitions_execution FOREIGN KEY (execution_id) REFERENCES executions(execution_id) ON DELETE CASCADE; END IF; END $$; -- Add comment to table COMMENT ON TABLE transitions IS 'Stores transitions associated with AI agents for developers'; -- Create a trigger function that checks for valid transitions CREATE OR REPLACE FUNCTION check_valid_transition () RETURNS trigger AS $$ DECLARE previous_type transition_type; valid_next_types transition_type[]; BEGIN -- Get the latest transition_type for this execution_id SELECT t.type INTO previous_type FROM transitions t WHERE t.execution_id = NEW.execution_id ORDER BY t.created_at DESC LIMIT 1; IF previous_type IS NULL THEN -- If there is no previous transition, allow only 'init' or 'init_branch' IF NEW.type NOT IN ('init', 'init_branch', 'error', 'cancelled') THEN RAISE EXCEPTION 'First transition must be init / init_branch / error / cancelled, got %', NEW.type; END IF; ELSE -- Define the valid_next_types array based on previous_type CASE previous_type WHEN 'init' THEN valid_next_types := ARRAY['wait', 'error', 'step', 'cancelled', 'init_branch', 'finish']; WHEN 'init_branch' THEN valid_next_types := ARRAY['wait', 'error', 'step', 'cancelled', 'init_branch', 'finish_branch', 'finish']; WHEN 'wait' THEN valid_next_types := ARRAY['resume', 'step', 'cancelled', 'finish', 'finish_branch']; WHEN 'resume' THEN valid_next_types := ARRAY['wait', 'error', 'cancelled', 'step', 'finish', 'finish_branch', 'init_branch']; WHEN 'step' THEN valid_next_types := ARRAY['wait', 'error', 'cancelled', 'step', 'finish', 'finish_branch', 'init_branch']; WHEN 'finish_branch' THEN valid_next_types := ARRAY['wait', 'error', 'cancelled', 'step', 'finish', 'init_branch', 'finish_branch']; WHEN 'finish' THEN valid_next_types := ARRAY[]::transition_type[]; -- No valid next transitions WHEN 'error' THEN valid_next_types := ARRAY[]::transition_type[]; -- No valid next transitions WHEN 'cancelled' THEN valid_next_types := ARRAY[]::transition_type[]; -- No valid next transitions ELSE RAISE EXCEPTION 'Unknown previous transition type: %', previous_type; END CASE; IF NOT NEW.type = ANY(valid_next_types) THEN RAISE EXCEPTION 'Invalid transition from % to %', previous_type, NEW.type; END IF; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create a trigger on the transitions table CREATE OR REPLACE TRIGGER validate_transition BEFORE INSERT ON transitions FOR EACH ROW EXECUTE FUNCTION check_valid_transition (); COMMIT; ================================================ FILE: src/memory-store/migrations/000013_executions_continuous_view.down.sql ================================================ BEGIN; -- Drop the continuous aggregate policy DO $$ BEGIN BEGIN SELECT remove_continuous_aggregate_policy ('latest_transitions'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_continuous_aggregate_policy(latest_transitions): %, %', SQLSTATE, SQLERRM; END; END $$; -- Drop the views DROP VIEW IF EXISTS latest_executions; DROP MATERIALIZED VIEW IF EXISTS latest_transitions; -- Drop the helper function DROP FUNCTION IF EXISTS to_text (transition_type); COMMIT; ================================================ FILE: src/memory-store/migrations/000013_executions_continuous_view.up.sql ================================================ BEGIN; /* * CONTINUOUS AGGREGATES WITH STATE AGGREGATION (Complexity: 9/10) * This is a TimescaleDB feature that automatically maintains a real-time summary of the transitions table. * It uses special aggregation functions like state_agg() to track state changes and last() to get most recent values. * The view updates every 10 minutes and can serve both historical and real-time data (materialized_only = FALSE). */ -- create a function to convert transition_type to text (needed coz ::text is stable not immutable) CREATE OR REPLACE function to_text (transition_type) RETURNS text AS $$ select $1 $$ STRICT IMMUTABLE LANGUAGE sql; -- create a continuous view that aggregates the transitions table CREATE MATERIALIZED VIEW IF NOT EXISTS latest_transitions WITH ( timescaledb.continuous, timescaledb.materialized_only = FALSE ) AS SELECT time_bucket ('1 day', t.created_at) AS bucket, t.execution_id, last (t.transition_id, t.created_at) AS transition_id, count(*) AS total_transitions, state_agg (t.created_at, to_text (t.type)) AS state, max(t.created_at) AS created_at, last (t.type, t.created_at) AS type, last (t.step_label, t.created_at) AS step_label, last (t.current_step, t.created_at) AS current_step, last (t.next_step, t.created_at) AS next_step, last (t.output, t.created_at) AS output, last (t.task_token, t.created_at) AS task_token, last (t.metadata, t.created_at) AS metadata, last (e.task_id, e.created_at) AS task_id, last (e.task_version, e.created_at) AS task_version, last (w.step_definition, e.created_at) AS step_definition FROM transitions t JOIN executions e ON t.execution_id = e.execution_id JOIN workflows w ON e.task_id = w.task_id AND e.task_version = w.version AND w.step_idx = (t.current_step).step_index AND w.name = (t.current_step).workflow_name GROUP BY bucket, t.execution_id WITH no data; SELECT add_continuous_aggregate_policy ( 'latest_transitions', start_offset => NULL, end_offset => INTERVAL '10 minutes', schedule_interval => INTERVAL '10 minutes' ); -- Create a view that combines executions with their latest transitions CREATE OR REPLACE VIEW latest_executions AS SELECT e.developer_id, e.task_id, e.task_version, e.execution_id, e.input, e.metadata, e.created_at, coalesce(lt.created_at, e.created_at) AS updated_at, CASE WHEN lt.type::text IS NULL THEN 'queued' WHEN lt.type::text = 'init' THEN 'starting' WHEN lt.type::text = 'init_branch' THEN 'running' WHEN lt.type::text = 'wait' THEN 'awaiting_input' WHEN lt.type::text = 'resume' THEN 'running' WHEN lt.type::text = 'step' THEN 'running' WHEN lt.type::text = 'finish' THEN 'succeeded' WHEN lt.type::text = 'finish_branch' THEN 'running' WHEN lt.type::text = 'error' THEN 'failed' WHEN lt.type::text = 'cancelled' THEN 'cancelled' ELSE 'queued' END AS status, CASE WHEN lt.type::text = 'error' THEN lt.output ->> 'error' ELSE NULL END AS error, coalesce(lt.total_transitions, 0) AS total_transitions, coalesce(lt.output, '{}'::jsonb) AS output, lt.current_step, lt.next_step, lt.step_definition, lt.step_label, lt.task_token, lt.metadata AS transition_metadata FROM executions e LEFT JOIN latest_transitions lt ON e.execution_id = lt.execution_id; COMMIT; ================================================ FILE: src/memory-store/migrations/000014_temporal_lookup.down.sql ================================================ BEGIN; DROP TABLE IF EXISTS temporal_executions_lookup CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000014_temporal_lookup.up.sql ================================================ BEGIN; -- Create temporal_executions_lookup table CREATE TABLE IF NOT EXISTS temporal_executions_lookup ( execution_id UUID NOT NULL, id TEXT NOT NULL, run_id TEXT, first_execution_run_id TEXT, result_run_id TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_temporal_executions_lookup PRIMARY KEY (execution_id, id), CONSTRAINT fk_temporal_executions_lookup_execution FOREIGN KEY (execution_id) REFERENCES executions (execution_id) ON DELETE CASCADE ); -- Add comment to table COMMENT ON TABLE temporal_executions_lookup IS 'Stores temporal workflow execution lookup data for AI agent executions'; COMMIT; ================================================ FILE: src/memory-store/migrations/000015_entries.down.sql ================================================ BEGIN; DROP TRIGGER IF EXISTS trg_optimized_update_token_count_after ON entries; DROP FUNCTION IF EXISTS optimized_update_token_count_after; -- Drop foreign key constraint if it exists ALTER TABLE IF EXISTS entries DROP CONSTRAINT IF EXISTS fk_entries_session; -- Drop indexes DROP INDEX IF EXISTS idx_entries_by_session; -- Drop the hypertable (this will also drop the table) DROP TABLE IF EXISTS entries; -- Drop the function DROP FUNCTION IF EXISTS all_jsonb_elements_are_objects; -- Drop the enum type DROP TYPE IF EXISTS chat_role; COMMIT; ================================================ FILE: src/memory-store/migrations/000015_entries.up.sql ================================================ BEGIN; -- Create chat_role enum CREATE TYPE chat_role AS ENUM( 'user', 'assistant', 'tool', 'system', 'developer' ); -- Create a custom function that checks if `content` is non-empty -- and that every JSONB element in the array is an 'object'. CREATE OR REPLACE FUNCTION all_jsonb_elements_are_objects (content jsonb[]) RETURNS boolean AS $$ DECLARE elem jsonb; BEGIN -- Check each element in the `content` array FOREACH elem IN ARRAY content LOOP IF jsonb_typeof(elem) <> 'object' THEN RETURN false; END IF; END LOOP; RETURN true; END; $$ LANGUAGE plpgsql IMMUTABLE; CREATE TABLE IF NOT EXISTS entries ( session_id UUID NOT NULL, entry_id UUID NOT NULL, source TEXT NOT NULL, role chat_role NOT NULL, event_type TEXT NOT NULL DEFAULT 'message.create', name TEXT, content JSONB[] NOT NULL, tool_call_id TEXT DEFAULT NULL, tool_calls JSONB[] DEFAULT NULL, model TEXT NOT NULL, token_count INTEGER DEFAULT NULL, tokenizer TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, timestamp TIMESTAMPTZ NOT NULL, CONSTRAINT pk_entries PRIMARY KEY (session_id, entry_id, created_at), CONSTRAINT ct_content_is_array_of_objects CHECK (all_jsonb_elements_are_objects (content)) ); -- Convert to hypertable if not already SELECT create_hypertable ( 'entries', by_range ('created_at', INTERVAL '1 day'), if_not_exists => TRUE ); SELECT add_dimension ( 'entries', by_hash ('session_id', 2), if_not_exists => TRUE ); -- Create indexes for efficient querying CREATE INDEX IF NOT EXISTS idx_entries_by_session ON entries (session_id DESC); -- Add foreign key constraint to sessions table DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'fk_entries_session' ) THEN ALTER TABLE entries ADD CONSTRAINT fk_entries_session FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE; END IF; END $$; -- TODO: We should consider using a timescale background job to update the token count -- instead of a trigger. -- https://docs.timescale.com/use-timescale/latest/user-defined-actions/create-and-register/ CREATE OR REPLACE FUNCTION optimized_update_token_count_after () RETURNS TRIGGER AS $$ DECLARE calc_token_count INTEGER; BEGIN -- Compute token_count outside the UPDATE statement for clarity and potential optimization calc_token_count := cardinality( ai.openai_tokenize( 'gpt-4o', -- FIXME: Use `NEW.model` array_to_string(NEW.content::TEXT[], ' ') ) ); -- Perform the update only if token_count differs IF calc_token_count <> NEW.token_count THEN UPDATE entries SET token_count = calc_token_count WHERE entry_id = NEW.entry_id; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; -- FIXME: This trigger is causing the slow performance of the create_entries query -- -- We should consider using a timescale background job to update the token count -- instead of a trigger. -- https://docs.timescale.com/use-timescale/latest/user-defined-actions/create-and-register/ -- -- CREATE TRIGGER trg_optimized_update_token_count_after -- AFTER INSERT -- OR -- UPDATE ON entries FOR EACH ROW -- EXECUTE FUNCTION optimized_update_token_count_after (); -- Add trigger to update parent session's updated_at CREATE OR REPLACE FUNCTION update_session_updated_at () RETURNS TRIGGER AS $$ BEGIN UPDATE sessions SET updated_at = CURRENT_TIMESTAMP WHERE session_id = NEW.session_id; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_update_session_updated_at AFTER INSERT OR UPDATE ON entries FOR EACH ROW EXECUTE FUNCTION update_session_updated_at (); COMMIT; ================================================ FILE: src/memory-store/migrations/000016_entry_relations.down.sql ================================================ BEGIN; -- Drop trigger first DROP TRIGGER IF EXISTS trg_enforce_leaf_nodes ON entry_relations; -- Drop function DROP FUNCTION IF EXISTS enforce_leaf_nodes (); -- Drop the table and its constraints DROP TABLE IF EXISTS entry_relations CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000016_entry_relations.up.sql ================================================ BEGIN; -- Create citext extension if not exists CREATE EXTENSION IF NOT EXISTS citext; -- Create entry_relations table CREATE TABLE IF NOT EXISTS entry_relations ( session_id UUID NOT NULL, head UUID NOT NULL, relation CITEXT NOT NULL, tail UUID NOT NULL, is_leaf BOOLEAN NOT NULL DEFAULT FALSE, CONSTRAINT pk_entry_relations PRIMARY KEY (session_id, head, relation, tail) ); -- Add foreign key constraint to sessions table DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'fk_entry_relations_session' ) THEN ALTER TABLE entry_relations ADD CONSTRAINT fk_entry_relations_session FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE; END IF; END $$; -- Create indexes for efficient querying CREATE INDEX idx_entry_relations_leaf ON entry_relations (session_id, is_leaf); CREATE OR REPLACE FUNCTION auto_update_leaf_status() RETURNS TRIGGER AS $$ BEGIN -- Set is_leaf = false for any existing rows that will now have this new relation as a child UPDATE entry_relations SET is_leaf = false WHERE session_id = NEW.session_id AND tail = NEW.head; -- Set is_leaf for the new row based on whether it has any children NEW.is_leaf := NOT EXISTS ( SELECT 1 FROM entry_relations WHERE session_id = NEW.session_id AND head = NEW.tail ); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_auto_update_leaf_status BEFORE INSERT OR UPDATE ON entry_relations FOR EACH ROW EXECUTE FUNCTION auto_update_leaf_status(); COMMIT; ================================================ FILE: src/memory-store/migrations/000017_compression.down.sql ================================================ BEGIN; DO $$ BEGIN BEGIN SELECT remove_compression_policy ('entries'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_compression_policy(entries): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT remove_compression_policy ('transitions'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_compression_policy(transitions): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE entries SET (timescaledb.compress = FALSE); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during unsetting entries.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE transitions SET (timescaledb.compress = FALSE); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during unsetting transitions.compress: %, %', SQLSTATE, SQLERRM; END; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000017_compression.up.sql ================================================ /* * MULTI-DIMENSIONAL HYPERTABLES WITH COMPRESSION (Complexity: 8/10) * TimescaleDB's advanced feature that partitions data by both time (created_at) and space (session_id/execution_id). * Automatically compresses data older than 7 days to save storage while maintaining query performance. * Uses segment_by to group related rows and order_by to optimize decompression speed. */ BEGIN; DO $$ BEGIN BEGIN ALTER TABLE entries SET ( timescaledb.compress = TRUE, timescaledb.compress_segmentby = 'session_id', timescaledb.compress_orderby = 'created_at DESC, entry_id DESC' ); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during entries.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT add_compression_policy ('entries', INTERVAL '7 days'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during add_compression_policy(entries): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE transitions SET ( timescaledb.compress = TRUE, timescaledb.compress_segmentby = 'execution_id', timescaledb.compress_orderby = 'created_at DESC, transition_id DESC' ); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during transitions.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT add_compression_policy ('transitions', INTERVAL '7 days'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during add_compression_policy(transitions): %, %', SQLSTATE, SQLERRM; END; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000018_doc_search.down.sql ================================================ BEGIN; -- Drop the embed and search hybrid function DROP FUNCTION IF EXISTS embed_and_search_hybrid; -- Drop the hybrid search function DROP FUNCTION IF EXISTS search_hybrid; -- Drop the text search function DROP FUNCTION IF EXISTS search_by_text; -- Drop the combined embed and search function DROP FUNCTION IF EXISTS embed_and_search_by_vector; -- Drop the search function DROP FUNCTION IF EXISTS search_by_vector; -- Drop the doc_search_result type DROP TYPE IF EXISTS doc_search_result; -- Drop the embed_with_cache function DROP FUNCTION IF EXISTS embed_with_cache; -- Drop the embeddings cache table DROP TABLE IF EXISTS embeddings_cache CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000018_doc_search.up.sql ================================================ BEGIN; -- Create unlogged table for caching embeddings CREATE UNLOGGED TABLE IF NOT EXISTS embeddings_cache ( model_input_md5 TEXT NOT NULL, embedding vector (1024) NOT NULL, CONSTRAINT pk_embeddings_cache PRIMARY KEY (model_input_md5) ); -- Add comment explaining table purpose COMMENT ON TABLE embeddings_cache IS 'Unlogged table that caches embedding requests to avoid duplicate API calls'; CREATE OR REPLACE function embed_with_cache ( _provider text, _model text, _input_text text, _input_type text DEFAULT NULL, _api_key text DEFAULT NULL, _api_key_name text DEFAULT NULL ) returns vector (1024) language plpgsql AS $$ -- Try to get cached embedding first declare cached_embedding vector(1024); model_input_md5 text; begin if _provider != 'openai' then raise exception 'Only openai provider is supported'; end if; model_input_md5 := md5(_provider || '++' || _model || '++' || _input_text || '++' || _input_type); select embedding into cached_embedding from embeddings_cache c where c.model_input_md5 = model_input_md5; if found then return cached_embedding; end if; -- Not found in cache, call AI embedding function cached_embedding := ai.openai_embed( _model, _input_text, _input_type, _api_key, _api_key_name ); -- Cache the result insert into embeddings_cache ( model_input_md5, embedding ) values ( model_input_md5, cached_embedding ) on conflict (model_input_md5) do update set embedding = cached_embedding; return cached_embedding; end; $$; -- Create a type for the search results if it doesn't exist DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_type WHERE typname = 'doc_search_result' ) THEN CREATE TYPE doc_search_result AS ( developer_id uuid, doc_id uuid, index integer, title text, content text, distance float, embedding vector(1024), metadata jsonb, owner_type text, owner_id uuid ); END IF; END $$; -- Create the search function CREATE OR REPLACE FUNCTION search_by_vector ( developer_id UUID, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE search_threshold float; owner_filter_sql text; metadata_filter_sql text; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF confidence < 0 OR confidence > 1 THEN RAISE EXCEPTION 'confidence must be between 0 and 1'; END IF; IF owner_types IS NOT NULL AND owner_ids IS NOT NULL AND array_length(owner_types, 1) != array_length(owner_ids, 1) AND array_length(owner_types, 1) <= 0 THEN RAISE EXCEPTION 'owner_types and owner_ids arrays must have the same length'; END IF; -- Calculate search threshold from confidence search_threshold := 1.0 - confidence; -- Build owner filter SQL owner_filter_sql := ' AND ( doc_owners.owner_id = ANY($5::uuid[]) AND doc_owners.owner_type = ANY($4::text[]) )'; -- Build metadata filter SQL if provided IF metadata_filter IS NOT NULL THEN metadata_filter_sql := 'AND d.metadata @> $6'; ELSE metadata_filter_sql := ''; END IF; -- Return search results RETURN QUERY EXECUTE format( 'WITH ranked_docs AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, (1 - (d.embedding <=> $1)) as distance, d.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs_embeddings d LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $7 AND 1 - (d.embedding <=> $1) >= $2 %s %s ORDER BY (1 - (d.embedding <=> $1)) DESC LIMIT ($3 * 4) -- Get more candidates than needed ) SELECT DISTINCT ON (doc_id) * FROM ranked_docs ORDER BY doc_id, distance DESC LIMIT $3', owner_filter_sql, metadata_filter_sql ) USING query_embedding, search_threshold, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; -- Add helpful comment COMMENT ON FUNCTION search_by_vector IS 'Search documents by vector similarity with configurable confidence threshold and filtering options'; -- Create the combined embed and search function CREATE OR REPLACE FUNCTION embed_and_search_by_vector ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE query_embedding vector(1024); BEGIN -- First generate embedding for the query text query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Then perform the search using the generated embedding RETURN QUERY SELECT * FROM search_by_vector( developer_id, query_embedding, owner_types, owner_ids, k, confidence, metadata_filter ); END; $$; COMMENT ON FUNCTION embed_and_search_by_vector IS 'Convenience function that combines text embedding and vector search in one call'; -- Create the text search function CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE owner_filter_sql text; metadata_filter_sql text; ts_query tsquery; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF owner_types IS NOT NULL AND owner_ids IS NOT NULL AND array_length(owner_types, 1) != array_length(owner_ids, 1) AND array_length(owner_types, 1) <= 0 THEN RAISE EXCEPTION 'owner_types and owner_ids arrays must have the same length'; END IF; -- Convert search query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); -- Build owner filter SQL owner_filter_sql := ' AND ( doc_owners.owner_id = ANY($4::uuid[]) AND doc_owners.owner_type = ANY($3::text[]) )'; -- Build metadata filter SQL if provided IF metadata_filter IS NOT NULL THEN metadata_filter_sql := 'AND d.metadata @> $5'; ELSE metadata_filter_sql := ''; END IF; -- Return search results RETURN QUERY EXECUTE format( 'WITH ranked_docs AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as distance, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $6 AND d.search_tsv @@ $1 %s %s ) SELECT DISTINCT ON (doc_id) * FROM ranked_docs ORDER BY doc_id, distance DESC LIMIT $2', owner_filter_sql, metadata_filter_sql ) USING ts_query, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; COMMENT ON FUNCTION search_by_text IS 'Search documents using full-text search with configurable language and filtering options'; -- Function to calculate mean of an array CREATE OR REPLACE FUNCTION array_mean (arr FLOAT[]) RETURNS float AS $$ SELECT avg(v) FROM unnest(arr) v; $$ LANGUAGE SQL; -- Function to calculate standard deviation of an array CREATE OR REPLACE FUNCTION array_stddev (arr FLOAT[]) RETURNS float AS $$ SELECT stddev(v) FROM unnest(arr) v; $$ LANGUAGE SQL; -- DBSF normalization function CREATE OR REPLACE FUNCTION dbsf_normalize (scores FLOAT[]) RETURNS FLOAT[] AS $$ DECLARE m float; sd float; m3d float; m_3d float; BEGIN -- Handle edge cases IF array_length(scores, 1) < 2 THEN RETURN scores; END IF; -- Calculate statistics sd := array_stddev(scores); IF sd = 0 THEN RETURN scores; END IF; m := array_mean(scores); m3d := 3 * sd + m; m_3d := m - 3 * sd; -- Apply normalization RETURN array( SELECT (s - m_3d) / (m3d - m_3d) FROM unnest(scores) s ); END; $$ LANGUAGE plpgsql; -- Hybrid search function combining text and vector search CREATE OR REPLACE FUNCTION search_hybrid ( developer_id UUID, query_text text, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, -- Weight for embedding results confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english' ) RETURNS SETOF doc_search_result AS $$ DECLARE text_weight float; embedding_weight float; intermediate_limit integer; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; text_weight := 1.0 - alpha; embedding_weight := alpha; -- Get more intermediate results than final to allow for better fusion intermediate_limit := k * 4; RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id, query_text, owner_types, owner_ids, search_language, intermediate_limit, -- Use larger intermediate limit metadata_filter ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id, query_embedding, owner_types, owner_ids, intermediate_limit, -- Use larger intermediate limit confidence, metadata_filter ) ), all_results AS ( SELECT DISTINCT doc_id, title, content, metadata, embedding, index, owner_type, owner_id FROM ( SELECT * FROM text_results UNION SELECT * FROM embedding_results ) combined ), scores AS ( SELECT r.doc_id, r.title, r.content, r.metadata, r.embedding, r.index, r.owner_type, r.owner_id, COALESCE(t.distance, 0.0) as text_score, COALESCE(e.distance, 0.0) as embedding_score, RANK() OVER (ORDER BY COALESCE(t.distance, 0.0) DESC) as text_rank, RANK() OVER (ORDER BY COALESCE(e.distance, 0.0) DESC) as embedding_rank FROM all_results r LEFT JOIN text_results t ON r.doc_id = t.doc_id LEFT JOIN embedding_results e ON r.doc_id = e.doc_id ), normalized_scores AS ( SELECT *, unnest(dbsf_normalize(array_agg(text_score) OVER ())) as norm_text_score, unnest(dbsf_normalize(array_agg(embedding_score) OVER ())) as norm_embedding_score FROM scores ) SELECT developer_id, doc_id, index, title, content, 1.0 - (text_weight * norm_text_score + embedding_weight * norm_embedding_score) as distance, embedding, metadata, owner_type, owner_id FROM normalized_scores ORDER BY distance ASC LIMIT k; END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; -- Convenience function that handles embedding generation CREATE OR REPLACE FUNCTION embed_and_search_hybrid ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english', embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL ) RETURNS SETOF doc_search_result AS $$ DECLARE query_embedding vector(1024); BEGIN -- Generate embedding for query text query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Perform hybrid search RETURN QUERY SELECT * FROM search_hybrid( developer_id, query_text, query_embedding, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language ); END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION embed_and_search_hybrid IS 'Convenience function that combines text embedding generation and hybrid search in one call'; COMMIT; ================================================ FILE: src/memory-store/migrations/000019_system_developer.down.sql ================================================ BEGIN; -- Remove the system developer DELETE FROM docs WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM executions WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM tasks WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM agents WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM users WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM "sessions" WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; -- Remove the system developer DELETE FROM developers WHERE developer_id = '00000000-0000-0000-0000-000000000000'::uuid; COMMIT; ================================================ FILE: src/memory-store/migrations/000019_system_developer.up.sql ================================================ BEGIN; -- Insert system developer with all zeros UUID INSERT INTO developers ( developer_id, email, active, tags, settings ) VALUES ( '00000000-0000-0000-0000-000000000000', 'system@internal.julep.ai', true, ARRAY['system', 'paid'], '{}'::jsonb ) ON CONFLICT (developer_id) DO NOTHING; COMMIT; ================================================ FILE: src/memory-store/migrations/000020_executions_task_cascade.down.sql ================================================ BEGIN; -- Remove cascading foreign key constraint ALTER TABLE executions DROP CONSTRAINT IF EXISTS fk_executions_task; -- Restore original foreign key without cascading behavior ALTER TABLE executions ADD CONSTRAINT fk_executions_task FOREIGN KEY (developer_id, task_id, task_version) REFERENCES tasks (developer_id, task_id, "version"); COMMIT; ================================================ FILE: src/memory-store/migrations/000020_executions_task_cascade.up.sql ================================================ BEGIN; -- Temporarily remove foreign key to modify its behavior ALTER TABLE executions DROP CONSTRAINT IF EXISTS fk_executions_task; -- Recreate foreign key with cascading deletes ALTER TABLE executions ADD CONSTRAINT fk_executions_task FOREIGN KEY (developer_id, task_id, task_version) REFERENCES tasks (developer_id, task_id, "version") ON DELETE CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000021_fix_toolname_contraint.down.sql ================================================ BEGIN; -- Drop the updated unique constraint ALTER TABLE tools DROP CONSTRAINT IF EXISTS ct_unique_name_per_agent; -- Restore the original unique constraint (without developer_id) ALTER TABLE tools ADD CONSTRAINT ct_unique_name_per_agent UNIQUE (agent_id, name, task_id); COMMIT; ================================================ FILE: src/memory-store/migrations/000021_fix_toolname_contraint.up.sql ================================================ BEGIN; -- Drop the existing unique constraint ALTER TABLE tools DROP CONSTRAINT IF EXISTS ct_unique_name_per_agent; -- Add the new unique constraint including developer_id ALTER TABLE tools ADD CONSTRAINT ct_unique_name_per_agent UNIQUE (developer_id, agent_id, name, task_id); COMMIT; ================================================ FILE: src/memory-store/migrations/000022_vector_search.down.sql ================================================ BEGIN; DROP FUNCTION IF EXISTS search_by_vector; COMMIT; ================================================ FILE: src/memory-store/migrations/000022_vector_search.up.sql ================================================ BEGIN; CREATE OR REPLACE FUNCTION search_by_vector ( developer_id UUID, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, confidence float DEFAULT 0.0, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE search_threshold float; owner_filter_sql text; metadata_filter_sql text; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF confidence < -1 OR confidence > 1 THEN RAISE EXCEPTION 'confidence must be between -1 and 1'; END IF; IF owner_types IS NOT NULL AND owner_ids IS NOT NULL AND array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids arrays must have the same length'; END IF; -- Calculate search threshold from confidence search_threshold := 1.0 - confidence; -- Build owner filter SQL owner_filter_sql := ' AND ( doc_owners.owner_id = ANY($5::uuid[]) AND doc_owners.owner_type = ANY($4::text[]) )'; -- Build metadata filter SQL if provided IF metadata_filter IS NOT NULL THEN metadata_filter_sql := 'AND d.metadata @> $6'; ELSE metadata_filter_sql := ''; END IF; -- Return search results RETURN QUERY EXECUTE format( 'WITH ranked_docs AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, (d.embedding <=> $1) as distance, d.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs_embeddings d LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $7 AND (d.embedding <=> $1) <= $2 %s %s ORDER BY (d.embedding <=> $1) ASC LIMIT ($3 * 4) -- Get more candidates than needed ) SELECT DISTINCT ON (doc_id) * FROM ranked_docs ORDER BY doc_id, distance ASC LIMIT $3', owner_filter_sql, metadata_filter_sql ) USING query_embedding, search_threshold, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000023_update_strings_length_constraints.down.sql ================================================ BEGIN; -- Drop the updated constraints ALTER TABLE agents DROP CONSTRAINT IF EXISTS ct_agents_about_length; ALTER TABLE tools DROP CONSTRAINT IF EXISTS ct_tools_description_length; ALTER TABLE files DROP CONSTRAINT IF EXISTS ct_files_description_length; ALTER TABLE tasks DROP CONSTRAINT IF EXISTS ct_tasks_description_length; -- Restore original constraints ALTER TABLE tools ADD CONSTRAINT ct_tools_description_length CHECK ( description IS NULL OR length(description) <= 1000 ); ALTER TABLE files ADD CONSTRAINT ct_files_description_length CHECK ( description IS NULL OR length(description) <= 1000 ); ALTER TABLE tasks ADD CONSTRAINT ct_tasks_description_length CHECK ( description IS NULL OR length(description) <= 1000 ); ALTER TABLE agents ADD CONSTRAINT ct_agents_about_length CHECK ( about IS NULL OR length(about) <= 5000 ); COMMIT; ================================================ FILE: src/memory-store/migrations/000023_update_strings_length_constraints.up.sql ================================================ BEGIN; -- Drop existing constraints ALTER TABLE agents DROP CONSTRAINT IF EXISTS ct_agents_about_length; ALTER TABLE tools DROP CONSTRAINT IF EXISTS ct_tools_description_length; ALTER TABLE files DROP CONSTRAINT IF EXISTS ct_files_description_length; ALTER TABLE tasks DROP CONSTRAINT IF EXISTS ct_tasks_description_length; -- Add new constraints with updated length ALTER TABLE agents ADD CONSTRAINT ct_agents_about_length CHECK ( about IS NULL OR length(about) <= 16000 ); ALTER TABLE tools ADD CONSTRAINT ct_tools_description_length CHECK ( description IS NULL OR length(description) <= 16000 ); ALTER TABLE files ADD CONSTRAINT ct_files_description_length CHECK ( description IS NULL OR length(description) <= 16000 ); ALTER TABLE tasks ADD CONSTRAINT ct_tasks_description_length CHECK ( description IS NULL OR length(description) <= 16000 ); COMMIT; ================================================ FILE: src/memory-store/migrations/000024_hybrid_search.down.sql ================================================ BEGIN; DROP FUNCTION IF EXISTS search_hybrid; COMMIT; ================================================ FILE: src/memory-store/migrations/000024_hybrid_search.up.sql ================================================ BEGIN; -- Hybrid search function combining text and vector search CREATE OR REPLACE FUNCTION search_hybrid ( developer_id UUID, query_text text, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, -- Weight for embedding results confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english' ) RETURNS SETOF doc_search_result AS $$ DECLARE text_weight float; embedding_weight float; intermediate_limit integer; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; text_weight := 1.0 - alpha; embedding_weight := alpha; -- Get more intermediate results than final to allow for better fusion intermediate_limit := k * 4; RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id, query_text, owner_types, owner_ids, search_language, intermediate_limit, -- Use larger intermediate limit metadata_filter ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id, query_embedding, owner_types, owner_ids, intermediate_limit, -- Use larger intermediate limit confidence, metadata_filter ) ), all_results AS ( SELECT DISTINCT doc_id, title, content, metadata, embedding, index, owner_type, owner_id FROM ( SELECT * FROM text_results UNION SELECT * FROM embedding_results ) combined ), scores AS ( SELECT r.doc_id, r.title, r.content, r.metadata, r.embedding, r.index, r.owner_type, r.owner_id, COALESCE(t.distance, 0.0) as text_score, COALESCE(e.distance, 0.0) as embedding_score, RANK() OVER (ORDER BY COALESCE(t.distance, 0.0) DESC) as text_rank, RANK() OVER (ORDER BY COALESCE(e.distance, 0.0) DESC) as embedding_rank FROM all_results r LEFT JOIN text_results t ON r.doc_id = t.doc_id LEFT JOIN embedding_results e ON r.doc_id = e.doc_id ), normalized_scores AS ( SELECT s.*, normalized_text_scores[row_number() OVER (ORDER BY s.doc_id)] as norm_text_score, normalized_embedding_scores[row_number() OVER (ORDER BY s.doc_id)] as norm_embedding_score FROM scores s, (SELECT dbsf_normalize(array_agg(text_score ORDER BY doc_id)) as normalized_text_scores, dbsf_normalize(array_agg(embedding_score ORDER BY doc_id)) as normalized_embedding_scores FROM scores) n ) SELECT developer_id, doc_id, index, title, content, 1.0 - (text_weight * norm_text_score + embedding_weight * norm_embedding_score) as distance, embedding, metadata, owner_type, owner_id FROM normalized_scores ORDER BY distance ASC LIMIT k; END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; COMMIT; ================================================ FILE: src/memory-store/migrations/000025_default_system_template.down.sql ================================================ BEGIN; -- First remove the new column and its constraint from agents table ALTER TABLE agents DROP CONSTRAINT ct_agents_default_system_template_not_empty; ALTER TABLE agents DROP COLUMN default_system_template; -- Then restore the original constraint on sessions table ALTER TABLE sessions DROP CONSTRAINT ct_sessions_system_template_not_empty; ALTER TABLE sessions ADD CONSTRAINT ct_sessions_system_template_not_empty CHECK ( length(trim(system_template)) > 0 ); COMMIT; ================================================ FILE: src/memory-store/migrations/000025_default_system_template.up.sql ================================================ BEGIN; -- First drop the old constraint from sessions table ALTER TABLE sessions DROP CONSTRAINT ct_sessions_system_template_not_empty; -- Add the corrected constraint to sessions table ALTER TABLE sessions ADD CONSTRAINT ct_sessions_system_template_not_empty CHECK ( system_template IS NULL OR length(trim(system_template)) > 0 ); -- Add the non-nullable column and its constraint to agents table ALTER TABLE agents ADD COLUMN default_system_template TEXT NOT NULL DEFAULT '{%- if agent.name -%}\nYou are {{agent.name}}.{{" "}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{" "}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{" "}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{"---"}}\n {%- endfor -%}\n{%- endif -%}'; ALTER TABLE agents ADD CONSTRAINT ct_agents_default_system_template_not_empty CHECK ( length(trim(default_system_template)) > 0 ); COMMIT; ================================================ FILE: src/memory-store/migrations/000026_transition_cursor.down.sql ================================================ BEGIN; -- Drop the check constraint first ALTER TABLE transitions DROP CONSTRAINT ct_transition_cursor_scope_id_not_null; -- Remove the scope field from the transition_cursor type ALTER TYPE transition_cursor DROP ATTRIBUTE scope_id; COMMIT; ================================================ FILE: src/memory-store/migrations/000026_transition_cursor.up.sql ================================================ BEGIN; -- Decompress any existing compressed chunks SELECT decompress_chunk(c, true) FROM show_chunks('transitions') c; -- Temporarily disable compression ALTER TABLE transitions SET (timescaledb.compress = false); -- Add the scope field to the transition_cursor type ALTER TYPE transition_cursor ADD ATTRIBUTE scope_id UUID; -- Update all existing rows to set the default scope_id UPDATE transitions SET current_step.scope_id = '00000000-0000-0000-0000-000000000000'::UUID WHERE (current_step).scope_id IS NULL; UPDATE transitions SET next_step.scope_id = '00000000-0000-0000-0000-000000000000'::UUID WHERE (next_step).workflow_name IS NOT NULL AND (next_step).scope_id IS NULL; -- Add a check constraint to ensure scope_id is not null for future inserts/updates ALTER TABLE transitions ADD CONSTRAINT ct_transition_cursor_scope_id_not_null CHECK ((current_step).scope_id IS NOT NULL AND (next_step IS NULL OR (next_step).scope_id IS NOT NULL)); -- Re-enable compression ALTER TABLE transitions SET (timescaledb.compress = true); COMMIT; ================================================ FILE: src/memory-store/migrations/000027_add_postgraphile.down.sql ================================================ BEGIN; COMMENT ON TABLE public.entries IS ''; COMMENT ON TABLE public.transitions IS ''; REVOKE ALL ON ALL TABLES IN SCHEMA public FROM postgraphile; ALTER TABLE developers DISABLE ROW LEVEL SECURITY; ALTER TABLE agents DISABLE ROW LEVEL SECURITY; ALTER TABLE users DISABLE ROW LEVEL SECURITY; ALTER TABLE files DISABLE ROW LEVEL SECURITY; ALTER TABLE file_owners DISABLE ROW LEVEL SECURITY; ALTER TABLE docs DISABLE ROW LEVEL SECURITY; ALTER TABLE doc_owners DISABLE ROW LEVEL SECURITY; ALTER TABLE tools DISABLE ROW LEVEL SECURITY; ALTER TABLE sessions DISABLE ROW LEVEL SECURITY; ALTER TABLE session_lookup DISABLE ROW LEVEL SECURITY; ALTER TABLE tasks DISABLE ROW LEVEL SECURITY; ALTER TABLE workflows DISABLE ROW LEVEL SECURITY; ALTER TABLE executions DISABLE ROW LEVEL SECURITY; ALTER TABLE temporal_executions_lookup DISABLE ROW LEVEL SECURITY; ALTER TABLE entry_relations DISABLE ROW LEVEL SECURITY; DROP POLICY IF EXISTS access_users ON postgraphile_auth.users; DROP POLICY access_developers_policy ON developers; DROP POLICY access_agents_policy ON agents; DROP POLICY access_users_policy ON users; DROP POLICY access_files_policy ON files; DROP POLICY access_file_owners_policy ON file_owners; DROP POLICY access_docs_policy ON docs; DROP POLICY access_doc_owners_policy ON doc_owners; DROP POLICY access_tools_policy ON tools; DROP POLICY access_sessions_policy ON sessions; DROP POLICY access_session_lookup_policy ON session_lookup; DROP POLICY access_tasks_policy ON tasks; DROP POLICY access_workflows_policy ON workflows; DROP POLICY access_executions_policy ON executions; DROP POLICY access_temporal_executions_lookup_policy ON temporal_executions_lookup; DROP POLICY access_entry_relations_policy ON entry_relations; DROP TABLE IF EXISTS postgraphile_auth.users; DROP FUNCTION IF EXISTS authenticate; DROP FUNCTION current_developer_id; DROP FUNCTION current_developer_id_by_execution_id; DROP FUNCTION current_developer_id_by_session_id; DROP TYPE IF EXISTS jwt_token; DROP ROLE IF EXISTS postgraphile; DROP ROLE IF EXISTS no_access_role; DROP EXTENSION IF EXISTS pgcrypto; DROP SCHEMA IF EXISTS postgraphile_auth; COMMIT; ================================================ FILE: src/memory-store/migrations/000027_add_postgraphile.up.sql ================================================ BEGIN; CREATE SCHEMA IF NOT EXISTS postgraphile_auth; CREATE EXTENSION IF NOT EXISTS pgcrypto; DO $do$ BEGIN IF EXISTS ( SELECT FROM pg_catalog.pg_roles WHERE rolname = 'postgraphile') THEN RAISE NOTICE 'Role "postgraphile" already exists. Skipping.'; ELSE CREATE ROLE postgraphile; END IF; END $do$; DO $do$ BEGIN IF EXISTS ( SELECT FROM pg_catalog.pg_roles WHERE rolname = 'no_access_role') THEN RAISE NOTICE 'Role "no_access_role" already exists. Skipping.'; ELSE CREATE ROLE no_access_role; END IF; END $do$; DO $$ BEGIN -- Check if the type already exists IF NOT EXISTS ( SELECT 1 FROM pg_type t JOIN pg_namespace n ON t.typnamespace = n.oid WHERE t.typname = 'jwt_token' ) THEN -- Create the type if it does not exist CREATE TYPE jwt_token AS ( role text, exp integer, developer_id UUID ); END IF; END $$; CREATE TABLE IF NOT EXISTS postgraphile_auth.users( developer_id UUID NOT NULL, email TEXT NOT NULL CONSTRAINT ct_developers_email_format CHECK ( email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$' ), password_hash text ); GRANT SELECT ON postgraphile_auth.users TO no_access_role; GRANT SELECT ON postgraphile_auth.users TO postgraphile; CREATE OR REPLACE FUNCTION current_developer_id() returns UUID as $$ select nullif(current_setting('jwt.claims.developer_id', true), '')::UUID; $$ language sql stable; CREATE POLICY access_users ON postgraphile_auth.users FOR SELECT TO postgraphile USING (developer_id = current_developer_id()); CREATE OR REPLACE FUNCTION authenticate( email text, password text ) returns jwt_token as $$ declare account postgraphile_auth.users; begin select a.* into account from postgraphile_auth.users as a where a.email = authenticate.email; if account.password_hash = crypt(password, account.password_hash) then return ( 'postgraphile', extract(epoch from now() + interval '7 days'), account.developer_id )::jwt_token; else return null; end if; end; $$ language plpgsql strict security definer; GRANT EXECUTE ON FUNCTION authenticate(text, text) TO no_access_role, postgraphile; CREATE OR REPLACE FUNCTION current_developer_id_by_execution_id(p_execution_id UUID) RETURNS UUID AS $$ DECLARE v_developer_id UUID; BEGIN SELECT developer_id INTO v_developer_id FROM executions WHERE execution_id = p_execution_id; RETURN v_developer_id; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION current_developer_id_by_session_id(p_session_id UUID) RETURNS UUID AS $$ DECLARE v_developer_id UUID; BEGIN SELECT developer_id INTO v_developer_id FROM sessions WHERE session_id = p_session_id; RETURN v_developer_id; END; $$ LANGUAGE plpgsql; GRANT ALL ON ALL TABLES IN SCHEMA public TO postgraphile; ALTER TABLE developers ENABLE ROW LEVEL SECURITY; ALTER TABLE agents ENABLE ROW LEVEL SECURITY; ALTER TABLE users ENABLE ROW LEVEL SECURITY; ALTER TABLE files ENABLE ROW LEVEL SECURITY; ALTER TABLE file_owners ENABLE ROW LEVEL SECURITY; ALTER TABLE docs ENABLE ROW LEVEL SECURITY; ALTER TABLE doc_owners ENABLE ROW LEVEL SECURITY; ALTER TABLE tools ENABLE ROW LEVEL SECURITY; ALTER TABLE sessions ENABLE ROW LEVEL SECURITY; ALTER TABLE session_lookup ENABLE ROW LEVEL SECURITY; ALTER TABLE tasks ENABLE ROW LEVEL SECURITY; ALTER TABLE workflows ENABLE ROW LEVEL SECURITY; ALTER TABLE executions ENABLE ROW LEVEL SECURITY; ALTER TABLE temporal_executions_lookup ENABLE ROW LEVEL SECURITY; ALTER TABLE entry_relations ENABLE ROW LEVEL SECURITY; CREATE POLICY access_developers_policy ON developers FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_agents_policy ON agents FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_users_policy ON users FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_files_policy ON files FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_file_owners_policy ON file_owners FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_docs_policy ON docs FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_doc_owners_policy ON doc_owners FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_tools_policy ON tools FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_sessions_policy ON sessions FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_session_lookup_policy ON session_lookup FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_tasks_policy ON tasks FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_workflows_policy ON workflows FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_executions_policy ON executions FOR ALL TO postgraphile USING (developer_id = current_developer_id()) WITH CHECK (developer_id = current_developer_id()); CREATE POLICY access_temporal_executions_lookup_policy ON temporal_executions_lookup FOR ALL TO postgraphile USING (execution_id = current_developer_id_by_execution_id(execution_id)) WITH CHECK (execution_id = current_developer_id_by_execution_id(execution_id)); CREATE POLICY access_entry_relations_policy ON entry_relations FOR ALL TO postgraphile USING (session_id = current_developer_id_by_session_id(session_id)) WITH CHECK (session_id = current_developer_id_by_session_id(session_id)); COMMENT ON TABLE public.entries IS '@omit'; COMMENT ON TABLE public.transitions IS '@omit'; REVOKE ALL ON public.entries FROM postgraphile; REVOKE ALL ON public.transitions FROM postgraphile; COMMIT; ================================================ FILE: src/memory-store/migrations/000028_new_hybrid_search_implementation.down.sql ================================================ DROP FUNCTION IF EXISTS search_hybrid; CREATE OR REPLACE FUNCTION search_hybrid ( developer_id UUID, query_text text, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, -- Weight for embedding results confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english' ) RETURNS SETOF doc_search_result AS $$ DECLARE text_weight float; embedding_weight float; intermediate_limit integer; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; text_weight := 1.0 - alpha; embedding_weight := alpha; -- Get more intermediate results than final to allow for better fusion intermediate_limit := k * 4; RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id, query_text, owner_types, owner_ids, search_language, intermediate_limit, -- Use larger intermediate limit metadata_filter ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id, query_embedding, owner_types, owner_ids, intermediate_limit, -- Use larger intermediate limit confidence, metadata_filter ) ), all_results AS ( SELECT DISTINCT doc_id, title, content, metadata, embedding, index, owner_type, owner_id FROM ( SELECT * FROM text_results UNION SELECT * FROM embedding_results ) combined ), scores AS ( SELECT r.doc_id, r.title, r.content, r.metadata, r.embedding, r.index, r.owner_type, r.owner_id, COALESCE(t.distance, 0.0) as text_score, COALESCE(e.distance, 0.0) as embedding_score, RANK() OVER (ORDER BY COALESCE(t.distance, 0.0) DESC) as text_rank, RANK() OVER (ORDER BY COALESCE(e.distance, 0.0) DESC) as embedding_rank FROM all_results r LEFT JOIN text_results t ON r.doc_id = t.doc_id LEFT JOIN embedding_results e ON r.doc_id = e.doc_id ), normalized_scores AS ( SELECT *, unnest(dbsf_normalize(array_agg(text_score) OVER ())) as norm_text_score, unnest(dbsf_normalize(array_agg(embedding_score) OVER ())) as norm_embedding_score FROM scores ) SELECT developer_id, doc_id, index, title, content, 1.0 - (text_weight * norm_text_score + embedding_weight * norm_embedding_score) as distance, embedding, metadata, owner_type, owner_id FROM normalized_scores ORDER BY distance ASC LIMIT k; END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; ================================================ FILE: src/memory-store/migrations/000028_new_hybrid_search_implementation.up.sql ================================================ DROP FUNCTION search_hybrid(uuid,text,vector,text[],uuid[],integer,double precision,double precision,jsonb,text); CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector(1024), p_owner_types TEXT[], p_owner_ids UUID[], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english' ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * 4; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( p_developer_id, p_query_text, p_owner_types, p_owner_ids, p_search_language, intermediate_limit, p_metadata_filter ) ), embedding_results AS ( SELECT * FROM search_by_vector( p_developer_id, p_query_embedding, p_owner_types, p_owner_ids, intermediate_limit, p_confidence, p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; ================================================ FILE: src/memory-store/migrations/000029_duplicate_doc_prevention.down.sql ================================================ BEGIN; -- Drop the duplicate doc owner check trigger DROP TRIGGER IF EXISTS trg_check_duplicate_doc_owner ON doc_owners; -- Drop the trigger function DROP FUNCTION IF EXISTS check_duplicate_doc_owner(); -- Drop the content hash trigger DROP TRIGGER IF EXISTS trg_docs_content_hash ON docs; -- Drop the content hash function DROP FUNCTION IF EXISTS docs_update_content_hash(); -- Drop the hash generation function DROP FUNCTION IF EXISTS generate_content_hash(TEXT, TEXT); -- Drop the index DROP INDEX IF EXISTS idx_docs_content_hash; -- Remove the content_hash column ALTER TABLE docs DROP COLUMN IF EXISTS content_hash; COMMIT; ================================================ FILE: src/memory-store/migrations/000029_duplicate_doc_prevention.up.sql ================================================ BEGIN; -- Add content_hash column to docs table ALTER TABLE docs ADD COLUMN IF NOT EXISTS content_hash TEXT; -- Create index on content_hash for fast lookups CREATE INDEX IF NOT EXISTS idx_docs_content_hash ON docs (developer_id, content_hash); -- Create a function to generate hash from title and content CREATE OR REPLACE FUNCTION generate_content_hash(title TEXT, content TEXT) RETURNS TEXT AS $$ BEGIN -- Use MD5 hash of combined title and content -- This provides a good balance between performance and collision avoidance RETURN MD5(COALESCE(title, '') || '|' || COALESCE(content, '')); END; $$ LANGUAGE plpgsql IMMUTABLE; -- Create trigger function to set content_hash on insert/update CREATE OR REPLACE FUNCTION docs_update_content_hash() RETURNS TRIGGER AS $$ BEGIN NEW.content_hash := generate_content_hash(NEW.title, NEW.content); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger to update content_hash automatically CREATE TRIGGER trg_docs_content_hash BEFORE INSERT OR UPDATE OF title, content ON docs FOR EACH ROW EXECUTE FUNCTION docs_update_content_hash(); -- Update the content_hash for existing records UPDATE docs SET content_hash = generate_content_hash(title, content) WHERE content_hash IS NULL; -- Create function to check for duplicate docs by owner BEFORE assigning ownership CREATE OR REPLACE FUNCTION check_duplicate_doc_owner() RETURNS TRIGGER AS $$ DECLARE v_content_hash TEXT; v_doc_exists BOOLEAN; BEGIN -- First get the content hash of the document being assigned SELECT content_hash INTO v_content_hash FROM docs WHERE developer_id = NEW.developer_id AND doc_id = NEW.doc_id; -- If we can't find the document, let the insertion proceed -- (There should be a foreign key constraint, but it's commented out in the original SQL) IF v_content_hash IS NULL THEN RETURN NEW; END IF; -- Check if this owner already has a document with the same content hash SELECT EXISTS ( SELECT 1 FROM docs d JOIN doc_owners o ON d.developer_id = o.developer_id AND d.doc_id = o.doc_id WHERE d.developer_id = NEW.developer_id AND d.content_hash = v_content_hash AND o.owner_type = NEW.owner_type AND o.owner_id = NEW.owner_id AND o.doc_id != NEW.doc_id -- Exclude the current document ) INTO v_doc_exists; -- If a document with the same content already exists for this owner, reject the insertion IF v_doc_exists THEN RAISE EXCEPTION 'Document with similar content already exists for this owner (type: %, id: %)', NEW.owner_type, NEW.owner_id; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger to check for duplicates when assigning ownership CREATE TRIGGER trg_check_duplicate_doc_owner BEFORE INSERT ON doc_owners FOR EACH ROW EXECUTE FUNCTION check_duplicate_doc_owner(); COMMIT; ================================================ FILE: src/memory-store/migrations/000030_add_unaccent_search_config.down.sql ================================================ -- Restore the original search_tsv function CREATE OR REPLACE FUNCTION docs_update_search_tsv() RETURNS trigger AS $$ BEGIN NEW.search_tsv := setweight(to_tsvector('english', coalesce(NEW.title, '')), 'A') || setweight(to_tsvector('english', coalesce(NEW.content, '')), 'B'); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Restore the search_by_text function to use 'english' as the default configuration CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE owner_filter_sql text := ''; metadata_filter_sql text := ''; ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; IF array_length(owner_types, 1) > 0 THEN owner_filter_sql := 'AND (doc_owners.owner_type = ANY($3) AND doc_owners.owner_id = ANY($4))'; END IF; IF metadata_filter IS NOT NULL AND jsonb_typeof(metadata_filter) = 'object' AND jsonb_array_length(metadata_filter) > 0 THEN metadata_filter_sql := 'AND d.metadata @> $5'; END IF; ts_query := websearch_to_tsquery(search_language::regconfig, query_text); RETURN QUERY EXECUTE format( 'SELECT d.developer_id as developer_id, d.doc_id as doc_id, d.index as index, d.title as title, d.content as content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as distance, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $6 AND d.search_tsv @@ $1 %s %s ORDER BY distance DESC LIMIT $2', owner_filter_sql, metadata_filter_sql ) USING ts_query, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; -- Update existing docs back to the original text search configuration UPDATE docs SET search_tsv = setweight(to_tsvector('english', coalesce(title, '')), 'A') || setweight(to_tsvector('english', coalesce(content, '')), 'B'); -- Drop the custom text search configuration DROP TEXT SEARCH CONFIGURATION IF EXISTS english_unaccent; ================================================ FILE: src/memory-store/migrations/000030_add_unaccent_search_config.up.sql ================================================ -- Make sure unaccent extension is installed CREATE EXTENSION IF NOT EXISTS unaccent; -- Create a custom text search configuration based on English that uses unaccent CREATE TEXT SEARCH CONFIGURATION english_unaccent (COPY = english); -- Set the unaccent dictionary before the english stem dictionary ALTER TEXT SEARCH CONFIGURATION english_unaccent ALTER MAPPING FOR hword, hword_part, word WITH unaccent, english_stem; -- Update the search_tsv function to use this configuration CREATE OR REPLACE FUNCTION docs_update_search_tsv() RETURNS trigger AS $$ BEGIN NEW.search_tsv := setweight(to_tsvector('english_unaccent', coalesce(NEW.title, '')), 'A') || setweight(to_tsvector('english_unaccent', coalesce(NEW.content, '')), 'B'); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Update the search_by_text function to use english_unaccent configuration CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE owner_filter_sql text := ''; metadata_filter_sql text := ''; ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; IF array_length(owner_types, 1) > 0 THEN owner_filter_sql := 'AND (doc_owners.owner_type = ANY($3) AND doc_owners.owner_id = ANY($4))'; END IF; IF metadata_filter IS NOT NULL AND jsonb_typeof(metadata_filter) = 'object' AND jsonb_array_length(metadata_filter) > 0 THEN metadata_filter_sql := 'AND d.metadata @> $5'; END IF; ts_query := websearch_to_tsquery(search_language::regconfig, query_text); RETURN QUERY EXECUTE format( 'SELECT d.developer_id as developer_id, d.doc_id as doc_id, d.index as index, d.title as title, d.content as content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as distance, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $6 AND d.search_tsv @@ $1 %s %s ORDER BY distance DESC LIMIT $2', owner_filter_sql, metadata_filter_sql ) USING ts_query, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; -- Update existing docs with the new text search configuration UPDATE docs SET search_tsv = setweight(to_tsvector('english_unaccent', coalesce(title, '')), 'A') || setweight(to_tsvector('english_unaccent', coalesce(content, '')), 'B'); ================================================ FILE: src/memory-store/migrations/000031_add_trigram_search.down.sql ================================================ DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[]); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text, float, integer); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[]); CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector(1024), p_owner_types TEXT[], p_owner_ids UUID[], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english' ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * 4; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( p_developer_id, p_query_text, p_owner_types, p_owner_ids, p_search_language, intermediate_limit, p_metadata_filter ) ), embedding_results AS ( SELECT * FROM search_by_vector( p_developer_id, p_query_embedding, p_owner_types, p_owner_ids, intermediate_limit, p_confidence, p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; DROP FUNCTION IF EXISTS embed_and_search_hybrid; -- Revert the embed_and_search_hybrid function to its original form CREATE OR REPLACE FUNCTION embed_and_search_hybrid ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english_unaccent', embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL ) RETURNS SETOF doc_search_result AS $$ DECLARE query_embedding vector(1024); BEGIN -- Get embedding for the query query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Call the search_hybrid function with the embedding RETURN QUERY SELECT * FROM search_hybrid( developer_id, query_text, query_embedding, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language ); END; $$ LANGUAGE plpgsql; ================================================ FILE: src/memory-store/migrations/000031_add_trigram_search.up.sql ================================================ -- Enable the pg_trgm extension if not already enabled CREATE EXTENSION IF NOT EXISTS pg_trgm; -- Add trigram indexes if not already present CREATE INDEX IF NOT EXISTS idx_docs_title_trgm ON docs USING GIN (title gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_docs_content_trgm ON docs USING GIN (content gin_trgm_ops); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[]); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); RETURN QUERY EXECUTE 'WITH tsv_results AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as tsv_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND d.search_tsv @@ $1 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trigram_results AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, GREATEST( similarity(d.title, $6), similarity(d.content, $6) )::double precision as trigram_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND GREATEST( similarity(d.title, $6), similarity(d.content, $6) ) > $7 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) AND NOT EXISTS ( SELECT 1 FROM tsv_results tr WHERE tr.doc_id = d.doc_id AND tr.index = d.index ) ), combined_results AS ( SELECT *, tsv_score as score, 1 as source FROM tsv_results UNION ALL SELECT *, trigram_score as score, 2 as source FROM trigram_results ) SELECT developer_id, doc_id, index, title, content, score as distance, embedding, metadata, owner_type, owner_id FROM combined_results ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END; $$; DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text, float, integer); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer); DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[]); -- Update the hybrid search function to use trigram similarity as well CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector (1024), p_owner_types TEXT[], p_owner_ids UUID [], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, -- Weight for embedding results p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english_unaccent', p_similarity_threshold float DEFAULT 0.6, k_multiplier integer DEFAULT 5 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * k_multiplier; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id => p_developer_id, query_text => p_query_text, owner_types => p_owner_types, owner_ids => p_owner_ids, search_language => p_search_language, k => intermediate_limit, metadata_filter => p_metadata_filter, similarity_threshold => p_similarity_threshold ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id => p_developer_id, query_embedding => p_query_embedding, owner_types => p_owner_types, owner_ids => p_owner_ids, k => intermediate_limit, confidence => p_confidence, metadata_filter => p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search using Distribution-Based Score Fusion (DBSF)'; DROP FUNCTION IF EXISTS embed_and_search_hybrid; -- Update the embed_and_search_hybrid function to use the updated search_hybrid function CREATE OR REPLACE FUNCTION embed_and_search_hybrid ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english_unaccent', embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result AS $$ DECLARE query_embedding vector(1024); BEGIN -- Get embedding for the query query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Call the search_hybrid function with the embedding RETURN QUERY SELECT * FROM search_hybrid( developer_id, query_text, query_embedding, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language, similarity_threshold ); END; $$ LANGUAGE plpgsql; ================================================ FILE: src/memory-store/migrations/000032_enhance_trigram_search.down.sql ================================================ -- Drop the comprehensive similarity function DROP FUNCTION IF EXISTS comprehensive_similarity; -- Drop the word similarity function DROP FUNCTION IF EXISTS fuzzy_word_similarity; -- Drop the enhanced similarity function DROP FUNCTION IF EXISTS enhanced_similarity; -- Drop the additional indexes we created DROP INDEX IF EXISTS idx_docs_lookup; DROP INDEX IF EXISTS idx_doc_owners_search; -- Restore the original search_by_text function from 000031 DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[]); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); RETURN QUERY EXECUTE 'WITH tsv_results AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as tsv_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND d.search_tsv @@ $1 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trigram_results AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, GREATEST( similarity(d.title, $6), similarity(d.content, $6) )::double precision as trigram_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND GREATEST( similarity(d.title, $6), similarity(d.content, $6) ) > $7 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) AND NOT EXISTS ( SELECT 1 FROM tsv_results tr WHERE tr.doc_id = d.doc_id AND tr.index = d.index ) ), combined_results AS ( SELECT *, tsv_score as score, 1 as source FROM tsv_results UNION ALL SELECT *, trigram_score as score, 2 as source FROM trigram_results ) SELECT developer_id, doc_id, index, title, content, score as distance, embedding, metadata, owner_type, owner_id FROM combined_results ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END; $$; COMMENT ON FUNCTION search_by_text IS 'Search documents using full-text search with configurable language and filtering options'; ================================================ FILE: src/memory-store/migrations/000032_enhance_trigram_search.up.sql ================================================ -- Add fuzzystrmatch extension if not already enabled CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; -- Add Levenshtein-enhanced similarity function CREATE OR REPLACE FUNCTION enhanced_similarity(text1 text, text2 text) RETURNS float AS $$ DECLARE trgm_sim float := similarity(text1, text2); lev_dist int; norm_lev float; BEGIN -- Only compute Levenshtein for reasonable length strings (performance) IF length(text1) <= 50 AND length(text2) <= 50 THEN lev_dist := levenshtein_less_equal(text1, text2, 3); -- Handle case where edit distance exceeds threshold (returns NULL) IF lev_dist IS NULL THEN RETURN trgm_sim; -- Fall back to trigram similarity END IF; norm_lev := 1.0 - LEAST(lev_dist::float / 5.0, 1.0); -- Combine scores (70% trigram, 30% levenshtein) RETURN 0.7 * trgm_sim + 0.3 * norm_lev; ELSE -- For longer strings, just use trigram similarity RETURN trgm_sim; END IF; END; $$ LANGUAGE plpgsql; -- Add word-level similarity function CREATE OR REPLACE FUNCTION fuzzy_word_similarity(text1 text, text2 text) RETURNS float AS $$ DECLARE words1 text[]; words2 text[]; i int; j int; best_match float; match_sum float := 0; word_count int := 0; BEGIN -- Split into words words1 := regexp_split_to_array(lower(text1), '\s+'); words2 := regexp_split_to_array(lower(text2), '\s+'); -- For each meaningful word in query IF words1 IS NOT NULL AND words2 IS NOT NULL THEN FOR i IN 1..array_length(words1, 1) LOOP -- Only process meaningful words (longer than 2 chars) IF length(words1[i]) > 2 THEN best_match := 0; -- Find best match in target content FOR j IN 1..array_length(words2, 1) LOOP IF length(words2[j]) > 2 THEN best_match := GREATEST(best_match, similarity(words1[i], words2[j])); END IF; END LOOP; match_sum := match_sum + best_match; word_count := word_count + 1; END IF; END LOOP; -- Return average word similarity IF word_count > 0 THEN RETURN match_sum / word_count; END IF; END IF; RETURN 0; END; $$ LANGUAGE plpgsql; -- Create a comprehensive similarity function that combines approaches CREATE OR REPLACE FUNCTION comprehensive_similarity(title text, content text, query text) RETURNS float AS $$ DECLARE -- Get trigram score (highest between title and content) trgm_sim float := GREATEST( enhanced_similarity(title, query), enhanced_similarity(content, query) ); -- Get word-level score word_sim float := GREATEST( fuzzy_word_similarity(title, query), fuzzy_word_similarity(content, query) ); -- Weight factor based on query length - shorter queries need more help word_weight float := CASE WHEN length(query) < 10 THEN 0.4 WHEN length(query) < 20 THEN 0.3 ELSE 0.2 END; -- Complementary weight for trigram trgm_weight float := 1.0 - word_weight; BEGIN -- Weight the different approaches RETURN trgm_weight * trgm_sim + word_weight * word_sim; END; $$ LANGUAGE plpgsql; -- Create additional indexes for improved search performance CREATE INDEX IF NOT EXISTS idx_docs_lookup ON docs (developer_id, doc_id, index); CREATE INDEX IF NOT EXISTS idx_doc_owners_search ON doc_owners (doc_id, developer_id, owner_type, owner_id); -- Update search_by_text function to use comprehensive similarity DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text); DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[]); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); RETURN QUERY EXECUTE 'WITH tsv_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision as tsv_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND d.search_tsv @@ $1 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trigram_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, comprehensive_similarity(d.title, d.content, $6)::double precision as trigram_score, e.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $2 AND comprehensive_similarity(d.title, d.content, $6) > $7 AND (array_length($3, 1) IS NULL OR doc_owners.owner_type = ANY($3)) AND (array_length($4, 1) IS NULL OR doc_owners.owner_id = ANY($4)) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) AND NOT EXISTS ( SELECT 1 FROM tsv_results tr WHERE tr.doc_id = d.doc_id AND tr.index = d.index ) ), combined_results AS MATERIALIZED ( SELECT *, tsv_score as score, 1 as source FROM tsv_results UNION ALL SELECT *, trigram_score as score, 2 as source FROM trigram_results ) SELECT developer_id, doc_id, index, title, content, score as distance, embedding, metadata, owner_type, owner_id FROM combined_results ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END; $$; COMMENT ON FUNCTION search_by_text IS 'Search documents using full-text search and enhanced fuzzy matching with configurable language and filtering options'; -- No need to modify the search_hybrid function as it will automatically use the updated search_by_text function ================================================ FILE: src/memory-store/migrations/000033_fix_latest_transitions.down.sql ================================================ BEGIN; /* * REVERT FIX FOR LATEST_TRANSITIONS CONTINUOUS AGGREGATE * * This migration reverts the fix for the latest_transitions continuous aggregate view. * We restore the original view definition from migration 000013. */ -- Drop existing continuous aggregate policy DO $$ BEGIN BEGIN SELECT remove_continuous_aggregate_policy('latest_transitions'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_continuous_aggregate_policy(latest_transitions): %, %', SQLSTATE, SQLERRM; END; END $$; -- Drop the existing views DROP VIEW IF EXISTS latest_executions; DROP MATERIALIZED VIEW IF EXISTS latest_transitions; -- Create a continuous view that aggregates the transitions table with the original workflows join CREATE MATERIALIZED VIEW IF NOT EXISTS latest_transitions WITH ( timescaledb.continuous, timescaledb.materialized_only = FALSE ) AS SELECT time_bucket ('1 day', t.created_at) AS bucket, t.execution_id, last (t.transition_id, t.created_at) AS transition_id, count(*) AS transition_count, max(t.created_at) AS created_at, last (t.type, t.created_at) AS type, last (t.step_label, t.created_at) AS step_label, last (t.current_step, t.created_at) AS current_step, last (t.next_step, t.created_at) AS next_step, last (t.output, t.created_at) AS output, last (t.task_token, t.created_at) AS task_token, last (t.metadata, t.created_at) AS metadata, last (e.task_id, e.created_at) AS task_id, last (e.task_version, e.created_at) AS task_version, last (w.step_definition, e.created_at) AS step_definition FROM transitions t JOIN executions e ON t.execution_id = e.execution_id JOIN workflows w ON e.task_id = w.task_id AND e.task_version = w.version AND w.step_idx = (t.current_step).step_index AND w.name = (t.current_step).workflow_name GROUP BY bucket, t.execution_id WITH no data; -- Add the continuous aggregate policy SELECT add_continuous_aggregate_policy ( 'latest_transitions', start_offset => NULL, end_offset => INTERVAL '10 minutes', schedule_interval => INTERVAL '10 minutes' ); -- Recreate the latest_executions view with step_definition CREATE OR REPLACE VIEW latest_executions AS SELECT e.developer_id, e.task_id, e.task_version, e.execution_id, e.input, e.metadata, e.created_at, coalesce(lt.created_at, e.created_at) AS updated_at, CASE WHEN lt.type::text IS NULL THEN 'queued' WHEN lt.type::text = 'init' THEN 'starting' WHEN lt.type::text = 'init_branch' THEN 'running' WHEN lt.type::text = 'wait' THEN 'awaiting_input' WHEN lt.type::text = 'resume' THEN 'running' WHEN lt.type::text = 'step' THEN 'running' WHEN lt.type::text = 'finish' THEN 'succeeded' WHEN lt.type::text = 'finish_branch' THEN 'running' WHEN lt.type::text = 'error' THEN 'failed' WHEN lt.type::text = 'cancelled' THEN 'cancelled' ELSE 'queued' END AS status, CASE WHEN lt.type::text = 'error' THEN lt.output ->> 'error' ELSE NULL END AS error, coalesce(lt.transition_count, 0) AS transition_count, coalesce(lt.output, '{}'::jsonb) AS output, lt.current_step, lt.next_step, lt.step_definition, lt.step_label, lt.task_token, lt.metadata AS transition_metadata FROM executions e LEFT JOIN latest_transitions lt ON e.execution_id = lt.execution_id; COMMIT; ================================================ FILE: src/memory-store/migrations/000033_fix_latest_transitions.up.sql ================================================ BEGIN; /* * FIX FOR LATEST_TRANSITIONS CONTINUOUS AGGREGATE * * This migration fixes an issue with the latest_transitions continuous aggregate view * where the join on the workflows table was causing empty rows when transitions were of * type 'finish' or 'error' since there's no step definition available for these states. * * We remove the join on the workflows table and the step_definition column from the view. */ -- Drop existing continuous aggregate policy DO $$ BEGIN BEGIN SELECT remove_continuous_aggregate_policy('latest_transitions'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_continuous_aggregate_policy(latest_transitions): %, %', SQLSTATE, SQLERRM; END; END $$; -- Drop the existing views DROP VIEW IF EXISTS latest_executions; DROP MATERIALIZED VIEW IF EXISTS latest_transitions; -- Create a continuous view that aggregates the transitions table without the workflows join CREATE MATERIALIZED VIEW IF NOT EXISTS latest_transitions WITH ( timescaledb.continuous, timescaledb.materialized_only = FALSE ) AS SELECT time_bucket ('1 day', t.created_at) AS bucket, t.execution_id, last (t.transition_id, t.created_at) AS transition_id, count(*) AS transition_count, max(t.created_at) AS created_at, last (t.type, t.created_at) AS type, last (t.step_label, t.created_at) AS step_label, last (t.current_step, t.created_at) AS current_step, last (t.next_step, t.created_at) AS next_step, last (t.output, t.created_at) AS output, last (t.task_token, t.created_at) AS task_token, last (t.metadata, t.created_at) AS metadata, last (e.task_id, e.created_at) AS task_id, last (e.task_version, e.created_at) AS task_version FROM transitions t JOIN executions e ON t.execution_id = e.execution_id GROUP BY bucket, t.execution_id WITH no data; -- Add the continuous aggregate policy SELECT add_continuous_aggregate_policy ( 'latest_transitions', start_offset => NULL, end_offset => INTERVAL '10 minutes', schedule_interval => INTERVAL '10 minutes' ); -- Recreate the latest_executions view without step_definition CREATE OR REPLACE VIEW latest_executions AS SELECT e.developer_id, e.task_id, e.task_version, e.execution_id, e.input, e.metadata, e.created_at, coalesce(lt.created_at, e.created_at) AS updated_at, CASE WHEN lt.type::text IS NULL THEN 'queued' WHEN lt.type::text = 'init' THEN 'starting' WHEN lt.type::text = 'init_branch' THEN 'running' WHEN lt.type::text = 'wait' THEN 'awaiting_input' WHEN lt.type::text = 'resume' THEN 'running' WHEN lt.type::text = 'step' THEN 'running' WHEN lt.type::text = 'finish' THEN 'succeeded' WHEN lt.type::text = 'finish_branch' THEN 'running' WHEN lt.type::text = 'error' THEN 'failed' WHEN lt.type::text = 'cancelled' THEN 'cancelled' ELSE 'queued' END AS status, CASE WHEN lt.type::text = 'error' THEN lt.output ->> 'error' ELSE NULL END AS error, coalesce(lt.transition_count, 0) AS transition_count, coalesce(lt.output, '{}'::jsonb) AS output, lt.current_step, lt.next_step, lt.step_label, lt.task_token, lt.metadata AS transition_metadata FROM executions e LEFT JOIN latest_transitions lt ON e.execution_id = lt.execution_id; COMMIT; ================================================ FILE: src/memory-store/migrations/000034_switch_to_hypercore.down.sql ================================================ BEGIN; DO $$ BEGIN BEGIN SELECT remove_compression_policy ('entries'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_compression_policy(entries): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT remove_compression_policy ('transitions'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during remove_compression_policy(transitions): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE entries SET (timescaledb.compress = FALSE); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during unsetting entries.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE transitions SET (timescaledb.compress = FALSE); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during unsetting transitions.compress: %, %', SQLSTATE, SQLERRM; END; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000034_switch_to_hypercore.up.sql ================================================ BEGIN; DO $$ BEGIN BEGIN ALTER TABLE entries SET ( timescaledb.compress = TRUE, timescaledb.compress_segmentby = 'session_id', timescaledb.compress_orderby = 'created_at DESC, entry_id DESC', timescaledb.compress_chunk_time_interval = '28 days' ); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during entries.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT add_compression_policy ('entries', INTERVAL '7 days'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during add_compression_policy(entries): %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN ALTER TABLE transitions SET ( timescaledb.compress = TRUE, timescaledb.compress_segmentby = 'execution_id', timescaledb.compress_orderby = 'created_at DESC, transition_id DESC', timescaledb.compress_chunk_time_interval = '28 days' ); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during transitions.compress: %, %', SQLSTATE, SQLERRM; END; END $$; DO $$ BEGIN BEGIN SELECT add_compression_policy ('transitions', INTERVAL '7 days'); EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during add_compression_policy(transitions): %, %', SQLSTATE, SQLERRM; END; END $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000035_enhanced_indices.down.sql ================================================ ---- Transitions -- Drop new indices DO $$ BEGIN DROP index if exists idx_transitions_execution_id; DROP index if exists idx_executions_created_at_covering; DROP index if exists idx_transitions_created_at; END $$; -- Temporarily disable compression (for unique index creation) -- ALTER TABLE transitions SET (timescaledb.compress = false); -- COMMENTED OUT TO AVOID DECOMRESSING AND COMPRESSING THE TABLE -- Restore old indices DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_metadata') THEN CREATE INDEX idx_transitions_metadata ON transitions USING GIN (metadata); END IF; -- IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_label') THEN -- CREATE UNIQUE INDEX idx_transitions_label ON transitions USING btree (execution_id, step_label, created_at DESC) -- WHERE (step_label IS NOT NULL); -- END IF; -- IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_next') THEN -- CREATE UNIQUE INDEX idx_transitions_next ON transitions USING btree (execution_id, next_step, created_at DESC) -- WHERE (next_step IS NOT NULL); -- END IF; -- IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_transitions_current') THEN -- CREATE UNIQUE INDEX idx_transitions_current ON transitions USING btree (execution_id, current_step, created_at DESC); -- END IF; IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'transitions_created_at_idx') THEN CREATE INDEX transitions_created_at_idx ON transitions USING btree (created_at DESC); END IF; END $$; -- Re-enable compression -- ALTER TABLE transitions SET (timescaledb.compress = true); ---- Entries -- Drop new indices DO $$ BEGIN DROP index if exists idx_entries_session_id; DROP index if exists idx_entries_created_at; DROP index if exists idx_sessions_created_at_covering; END $$; -- Restore old indices DO $$ BEGIN CREATE INDEX IF NOT EXISTS idx_entries_by_session ON entries (session_id DESC); CREATE INDEX IF NOT EXISTS entries_created_at_idx ON entries USING btree (created_at DESC); END $$; ================================================ FILE: src/memory-store/migrations/000035_enhanced_indices.up.sql ================================================ ---- Transitions -- Drop old indices DO $$ BEGIN DROP index if exists idx_transitions_label; DROP index if exists idx_transitions_metadata; DROP index if exists idx_transitions_next; DROP index if exists idx_transitions_current; DROP index if exists transitions_created_at_idx; END $$; -- Create new indices DO $$ BEGIN CREATE INDEX if not exists idx_transitions_execution_id ON transitions USING btree (created_at DESC, execution_id DESC); CREATE INDEX if not exists idx_transitions_created_at ON transitions USING btree (created_at DESC); CREATE INDEX if not exists idx_executions_created_at_covering ON executions (created_at DESC) INCLUDE (execution_id); END $$; ---- Entries -- Drop old indices DO $$ BEGIN DROP index if exists idx_entries_by_session; DROP index if exists entries_created_at_idx; END $$; -- Create new indices DO $$ BEGIN CREATE INDEX if not exists idx_entries_session_id ON entries (created_at DESC, session_id DESC); CREATE INDEX if not exists idx_entries_created_at ON entries (created_at DESC); CREATE INDEX if not exists idx_sessions_created_at_covering ON sessions (created_at DESC) INCLUDE (session_id); END $$; ================================================ FILE: src/memory-store/migrations/000036_usage.down.sql ================================================ BEGIN; -- Drop the usage table (this will also remove it from hypertables) DO $$ BEGIN BEGIN DELETE FROM usage; EXCEPTION WHEN others THEN RAISE NOTICE 'An error occurred during deleting all from usage: %, %', SQLSTATE, SQLERRM; END; END $$; DROP TABLE IF EXISTS usage; COMMIT; ================================================ FILE: src/memory-store/migrations/000036_usage.up.sql ================================================ BEGIN; -- Create usage table to track token usage and costs CREATE TABLE IF NOT EXISTS usage ( developer_id UUID NOT NULL, model TEXT NOT NULL, prompt_tokens INTEGER NOT NULL CONSTRAINT ct_usage_prompt_tokens_positive CHECK (prompt_tokens >= 0), completion_tokens INTEGER NOT NULL CONSTRAINT ct_usage_completion_tokens_positive CHECK (completion_tokens >= 0), cost NUMERIC(10, 6) NOT NULL CONSTRAINT ct_usage_cost_positive CHECK (cost >= 0), estimated BOOLEAN NOT NULL DEFAULT FALSE, custom_api_used BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT fk_usage_developer FOREIGN KEY (developer_id) REFERENCES developers(developer_id), CONSTRAINT ct_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object') ); -- Convert to hypertable for time-series data SELECT create_hypertable ( 'usage', by_range ('created_at', INTERVAL '1 day'), if_not_exists => TRUE ); SELECT add_dimension ( 'usage', by_hash ('developer_id', 2), if_not_exists => TRUE ); -- Create indexes for common query patterns CREATE INDEX IF NOT EXISTS idx_usage_developer_model ON usage (developer_id, model, created_at DESC); CREATE INDEX IF NOT EXISTS idx_usage_model ON usage (model, created_at DESC); CREATE INDEX IF NOT EXISTS idx_usage_metadata ON usage USING GIN (metadata); -- Add comment to table COMMENT ON TABLE usage IS 'Tracks token usage and costs by developer and model'; COMMIT; ================================================ FILE: src/memory-store/migrations/000037_speed_up_search.down.sql ================================================ BEGIN; -- Reset work_mem to default (or a reasonable value) RESET work_mem; -- Drop indexes created in the up migration DROP INDEX IF EXISTS idx_doc_owners_agent_lookup; DROP INDEX IF EXISTS idx_doc_owners_lookup; -- Reset statistics ALTER TABLE docs ALTER COLUMN title SET STATISTICS 100; ALTER TABLE docs ALTER COLUMN content SET STATISTICS 100; -- Reset index settings ALTER INDEX idx_docs_metadata SET (fastupdate=on); ALTER INDEX idx_docs_search_tsv SET (fastupdate=on); ALTER INDEX idx_docs_title_trgm SET (fastupdate=on); ALTER INDEX idx_docs_content_trgm SET (fastupdate=on); END; ================================================ FILE: src/memory-store/migrations/000037_speed_up_search.up.sql ================================================ BEGIN; alter table docs drop constraint if exists pk_docs CASCADE; alter table docs drop constraint if exists uq_docs_dev_doc_idx; alter table docs add constraint pk_docs primary key (developer_id, doc_id, index, created_at); alter table docs drop constraint if exists uq_doc_index; alter table docs add constraint uq_doc_index unique (doc_id, index, created_at); SELECT create_hypertable ( 'docs', by_range ('created_at', INTERVAL '1 day'), if_not_exists => TRUE, migrate_data => TRUE ); alter index idx_docs_metadata set (fastupdate=off); alter index idx_docs_search_tsv set (fastupdate=off); alter index idx_docs_title_trgm set (fastupdate=off); alter index idx_docs_content_trgm set (fastupdate=off); ALTER TABLE docs ALTER COLUMN title SET STATISTICS 1000; ALTER TABLE docs ALTER COLUMN content SET STATISTICS 1000; CREATE INDEX idx_doc_owners_lookup ON doc_owners(owner_type, owner_id, doc_id); SET work_mem = '32MB'; CREATE INDEX idx_doc_owners_agent_lookup ON doc_owners(owner_type, owner_id, doc_id); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); SET work_mem = '32MB'; RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS tsv_score, NULL::double precision AS trigram_score, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at, /* Mark source=1 for FTS */ 1 AS source FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trgm_candidates AS MATERIALIZED ( /* * Get docs that fail the FTS pass but pass a broad trigram test * i.e. (title % :search_text) or (content % :search_text) * so it can use your GIN/GIST trigram indexes. */ SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, d.search_tsv, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2::uuid AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) -- A broad trigram match (index-friendly): AND (d.title %> $6 OR d.content %> $6) -- Exclude anything that was already in the FTS set: AND NOT EXISTS ( SELECT 1 FROM fts_results f WHERE f.doc_id = d.doc_id AND f.index = d.index ) ), trgm_scored AS ( /* * Only now do the heavy comprehensive_similarity check, * but only for these trigram candidates. */ SELECT t.developer_id, t.doc_id, t.index, t.title, t.content, NULL::double precision AS tsv_score, comprehensive_similarity(t.title, t.content, $6)::double precision AS trigram_score, t.embedding, t.metadata, t.owner_type, t.owner_id, t.updated_at, 2 AS source FROM trgm_candidates t WHERE comprehensive_similarity(t.title, t.content, $6) > $7 ), combined AS ( /* * Union the two sets: * - FTS matches (fts_results) => "score" is tsv_score * - Trigram-only matches => "score" is trigram_score */ SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM fts_results UNION ALL SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM trgm_scored ) SELECT * FROM combined ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END; $$; END; ================================================ FILE: src/memory-store/migrations/000038_usage_cost_monthly.down.sql ================================================ BEGIN; -- Remove the continuous aggregate policy SELECT remove_continuous_aggregate_policy('usage_cost_monthly'); -- Drop the view DROP VIEW IF EXISTS developer_cost_monthly; -- Drop the continuous aggregate with CASCADE to remove any dependent objects (like the index) DROP MATERIALIZED VIEW IF EXISTS usage_cost_monthly CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000038_usage_cost_monthly.up.sql ================================================ -- Create continuous aggregate for monthly cost per developer with real-time data CREATE MATERIALIZED VIEW usage_cost_monthly WITH (timescaledb.continuous, timescaledb.materialized_only=false) AS SELECT developer_id, time_bucket('1 month', created_at) AS bucket_start, SUM(cost) FILTER (WHERE NOT custom_api_used) AS monthly_cost FROM usage GROUP BY developer_id, bucket_start WITH NO DATA; -- Create index for efficient querying CREATE INDEX IF NOT EXISTS idx_usage_cost_monthly_developer ON usage_cost_monthly (developer_id, bucket_start DESC); -- Set up continuous aggregate policy to refresh every minute -- The refresh window must cover at least two buckets (months in this case) SELECT add_continuous_aggregate_policy( 'usage_cost_monthly', start_offset => INTERVAL '3 months', end_offset => INTERVAL '0 minute', schedule_interval => INTERVAL '30 seconds' ); -- Create view that joins with developers table for easy querying CREATE OR REPLACE VIEW developer_cost_monthly AS SELECT m.bucket_start, d.developer_id, d.active, d.tags, m.monthly_cost FROM usage_cost_monthly AS m JOIN developers AS d USING (developer_id); ================================================ FILE: src/memory-store/migrations/000039_projects.down.sql ================================================ BEGIN; -- Drop triggers DROP TRIGGER IF EXISTS trg_prevent_default_project_deletion ON projects; DROP TRIGGER IF EXISTS trg_create_default_project ON developers; -- Drop functions DROP FUNCTION IF EXISTS prevent_default_project_deletion(); DROP FUNCTION IF EXISTS create_default_project(); -- Drop views DROP VIEW IF EXISTS project_docs; DROP VIEW IF EXISTS project_executions; DROP VIEW IF EXISTS project_tasks; DROP VIEW IF EXISTS project_sessions; -- Drop indexes DROP INDEX IF EXISTS idx_project_files_file; DROP INDEX IF EXISTS idx_project_users_user; DROP INDEX IF EXISTS idx_project_agents_agent; DROP INDEX IF EXISTS idx_projects_metadata; DROP INDEX IF EXISTS idx_projects_developer_id; -- Drop association tables DROP TABLE IF EXISTS project_files; DROP TABLE IF EXISTS project_users; DROP TABLE IF EXISTS project_agents; -- Drop main table DROP TABLE IF EXISTS projects; COMMIT; ================================================ FILE: src/memory-store/migrations/000039_projects.up.sql ================================================ BEGIN; -- Create projects table CREATE TABLE IF NOT EXISTS projects ( project_id UUID NOT NULL, developer_id UUID NOT NULL, canonical_name CITEXT NOT NULL CONSTRAINT ct_projects_canonical_name_length CHECK ( length(canonical_name) >= 1 AND length(canonical_name) <= 255 ), name TEXT NOT NULL CONSTRAINT ct_projects_name_length CHECK ( length(name) >= 1 AND length(name) <= 255 ), created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB NOT NULL DEFAULT '{}'::JSONB, CONSTRAINT pk_projects PRIMARY KEY (project_id), CONSTRAINT uq_projects_developer_canonical_name UNIQUE (developer_id, canonical_name), CONSTRAINT ct_projects_canonical_name_valid_identifier CHECK (canonical_name ~ '^[a-zA-Z][a-zA-Z0-9_]*$'), CONSTRAINT ct_projects_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT fk_projects_developer FOREIGN KEY (developer_id) REFERENCES developers (developer_id) ); -- Create project_agents association table CREATE TABLE IF NOT EXISTS project_agents ( project_id UUID NOT NULL, developer_id UUID NOT NULL, agent_id UUID NOT NULL, CONSTRAINT pk_project_agents PRIMARY KEY (project_id, agent_id), CONSTRAINT fk_project_agents_project FOREIGN KEY (project_id) REFERENCES projects (project_id) ON DELETE RESTRICT, CONSTRAINT fk_project_agents_agent FOREIGN KEY (developer_id, agent_id) REFERENCES agents (developer_id, agent_id) ON DELETE CASCADE ); -- Create project_users association table CREATE TABLE IF NOT EXISTS project_users ( project_id UUID NOT NULL, developer_id UUID NOT NULL, user_id UUID NOT NULL, CONSTRAINT pk_project_users PRIMARY KEY (project_id, user_id), CONSTRAINT fk_project_users_project FOREIGN KEY (project_id) REFERENCES projects (project_id) ON DELETE RESTRICT, CONSTRAINT fk_project_users_user FOREIGN KEY (developer_id, user_id) REFERENCES users (developer_id, user_id) ON DELETE CASCADE ); -- Create project_files association table CREATE TABLE IF NOT EXISTS project_files ( project_id UUID NOT NULL, developer_id UUID NOT NULL, file_id UUID NOT NULL, CONSTRAINT pk_project_files PRIMARY KEY (project_id, file_id), CONSTRAINT fk_project_files_project FOREIGN KEY (project_id) REFERENCES projects (project_id) ON DELETE RESTRICT, CONSTRAINT fk_project_files_file FOREIGN KEY (developer_id, file_id) REFERENCES files (developer_id, file_id) ON DELETE CASCADE ); -- Create project_sessions view CREATE OR REPLACE VIEW project_sessions AS WITH sessions_with_projects AS ( -- Sessions with agent participants that are in projects SELECT DISTINCT s.session_id, s.developer_id, p.project_id FROM sessions s JOIN session_lookup sl ON s.session_id = sl.session_id AND sl.participant_type = 'agent' JOIN project_agents pa ON pa.developer_id = s.developer_id AND pa.agent_id = sl.participant_id JOIN projects p ON pa.project_id = p.project_id UNION -- Sessions with user participants that are in projects SELECT DISTINCT s.session_id, s.developer_id, p.project_id FROM sessions s JOIN session_lookup sl ON s.session_id = sl.session_id AND sl.participant_type = 'user' JOIN project_users pu ON pu.developer_id = s.developer_id AND pu.user_id = sl.participant_id JOIN projects p ON pu.project_id = p.project_id ) SELECT s.session_id, s.developer_id, sp.project_id, p.canonical_name AS project_canonical_name, s.situation, s.system_template, s.metadata, s.render_templates, s.token_budget, s.context_overflow, s.forward_tool_calls, s.recall_options, s.created_at, s.updated_at FROM sessions s JOIN sessions_with_projects sp ON s.session_id = sp.session_id AND s.developer_id = sp.developer_id JOIN projects p ON sp.project_id = p.project_id; -- Create project_tasks view CREATE OR REPLACE VIEW project_tasks AS SELECT t.task_id, t.developer_id, p.project_id, p.canonical_name AS project_canonical_name, t.agent_id, t.canonical_name, t.name, t.description, t.input_schema, t.inherit_tools, t.metadata, t.created_at, t.updated_at, t.version FROM tasks t JOIN agents a ON t.developer_id = a.developer_id AND t.agent_id = a.agent_id JOIN project_agents pa ON a.developer_id = pa.developer_id AND a.agent_id = pa.agent_id JOIN projects p ON pa.project_id = p.project_id; -- Create project_executions view CREATE OR REPLACE VIEW project_executions AS SELECT e.execution_id, e.developer_id, p.project_id, p.canonical_name AS project_canonical_name, e.task_id, e.task_version, e.input, e.metadata, e.created_at FROM executions e JOIN tasks t ON e.developer_id = t.developer_id AND e.task_id = t.task_id AND e.task_version = t.version JOIN agents a ON t.developer_id = a.developer_id AND t.agent_id = a.agent_id JOIN project_agents pa ON a.developer_id = pa.developer_id AND a.agent_id = pa.agent_id JOIN projects p ON pa.project_id = p.project_id; -- Create project_docs view CREATE OR REPLACE VIEW project_docs AS WITH doc_owner_groups AS ( SELECT doc_id, developer_id, array_agg(owner_id) as owner_ids FROM doc_owners GROUP BY doc_id, developer_id ), docs_with_projects AS ( -- Docs owned by agents that are in projects SELECT DISTINCT d.doc_id, d.developer_id, p.project_id FROM docs d JOIN doc_owner_groups dog ON d.doc_id = dog.doc_id AND d.developer_id = dog.developer_id JOIN project_agents pa ON pa.developer_id = d.developer_id AND pa.agent_id = ANY(dog.owner_ids) JOIN projects p ON pa.project_id = p.project_id UNION -- Docs owned by users that are in projects SELECT DISTINCT d.doc_id, d.developer_id, p.project_id FROM docs d JOIN doc_owner_groups dog ON d.doc_id = dog.doc_id AND d.developer_id = dog.developer_id JOIN project_users pu ON pu.developer_id = d.developer_id AND pu.user_id = ANY(dog.owner_ids) JOIN projects p ON pu.project_id = p.project_id ) SELECT d.doc_id, d.developer_id, dp.project_id, p.canonical_name AS project_canonical_name, d.title, d.content, d.metadata, d.created_at, d.updated_at, dog.owner_ids FROM docs d JOIN docs_with_projects dp ON d.doc_id = dp.doc_id AND d.developer_id = dp.developer_id JOIN projects p ON dp.project_id = p.project_id LEFT JOIN doc_owner_groups dog ON d.doc_id = dog.doc_id AND d.developer_id = dog.developer_id; -- Create indexes CREATE INDEX IF NOT EXISTS idx_projects_developer_id ON projects (developer_id); CREATE INDEX IF NOT EXISTS idx_projects_metadata ON projects USING GIN (metadata); CREATE INDEX IF NOT EXISTS idx_project_agents_agent ON project_agents (developer_id, agent_id); CREATE INDEX IF NOT EXISTS idx_project_users_user ON project_users (developer_id, user_id); CREATE INDEX IF NOT EXISTS idx_project_files_file ON project_files (developer_id, file_id); -- Create trigger to automatically update updated_at for projects CREATE OR REPLACE TRIGGER trg_projects_updated_at BEFORE UPDATE ON projects FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Create function to create default project for new developers CREATE OR REPLACE FUNCTION create_default_project() RETURNS TRIGGER AS $$ BEGIN INSERT INTO projects ( project_id, developer_id, canonical_name, name, metadata ) VALUES ( gen_random_uuid(), NEW.developer_id, 'default', 'Default Project', jsonb_build_object( 'is_default', true, 'description', 'Default project containing all existing resources' ) ); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger to create default project on new developer CREATE TRIGGER trg_create_default_project AFTER INSERT ON developers FOR EACH ROW EXECUTE FUNCTION create_default_project(); -- Create function to prevent deletion of default projects CREATE OR REPLACE FUNCTION prevent_default_project_deletion() RETURNS TRIGGER AS $$ BEGIN IF OLD.canonical_name = 'default' THEN RAISE EXCEPTION 'Cannot delete default project'; END IF; RETURN OLD; END; $$ LANGUAGE plpgsql; -- Create trigger to prevent deletion of default projects CREATE TRIGGER trg_prevent_default_project_deletion BEFORE DELETE ON projects FOR EACH ROW EXECUTE FUNCTION prevent_default_project_deletion(); -- Add comments to tables COMMENT ON TABLE projects IS 'Stores project configurations and metadata for developers'; COMMENT ON TABLE project_agents IS 'Associates agents with projects'; COMMENT ON TABLE project_users IS 'Associates users with projects'; COMMENT ON TABLE project_files IS 'Associates files with projects'; -- Create default project for each existing developer INSERT INTO projects (project_id, developer_id, canonical_name, name, metadata) SELECT gen_random_uuid(), developer_id, 'default', 'Default Project', jsonb_build_object( 'is_default', true, 'description', 'Default project containing all existing resources' ) FROM developers ON CONFLICT (developer_id, canonical_name) DO NOTHING; -- Associate all existing agents with their developer's default project INSERT INTO project_agents (project_id, developer_id, agent_id) SELECT p.project_id, a.developer_id, a.agent_id FROM agents a JOIN projects p ON a.developer_id = p.developer_id AND p.canonical_name = 'default' ON CONFLICT (project_id, agent_id) DO NOTHING; -- Associate all existing users with their developer's default project INSERT INTO project_users (project_id, developer_id, user_id) SELECT p.project_id, u.developer_id, u.user_id FROM users u JOIN projects p ON u.developer_id = p.developer_id AND p.canonical_name = 'default' ON CONFLICT (project_id, user_id) DO NOTHING; -- Associate all existing files with their developer's default project INSERT INTO project_files (project_id, developer_id, file_id) SELECT p.project_id, f.developer_id, f.file_id FROM files f JOIN projects p ON f.developer_id = p.developer_id AND p.canonical_name = 'default' ON CONFLICT (project_id, file_id) DO NOTHING; COMMIT; ================================================ FILE: src/memory-store/migrations/000040_add_secrets.down.sql ================================================ BEGIN; -- Drop trigger for automatically updating 'updated_at' DROP TRIGGER IF EXISTS update_secrets_timestamp_trigger ON secrets; -- Drop trigger function for automatically updating 'updated_at' DROP FUNCTION IF EXISTS update_secrets_timestamp(); -- Drop encryption/decryption functions DROP FUNCTION IF EXISTS decrypt_secret; DROP FUNCTION IF EXISTS encrypt_secret; DROP INDEX IF EXISTS idx_secrets_metadata; DROP INDEX IF EXISTS idx_secrets_name; DROP INDEX IF EXISTS idx_secrets_developer_id; DROP TABLE IF EXISTS secrets; COMMIT; ================================================ FILE: src/memory-store/migrations/000040_add_secrets.up.sql ================================================ BEGIN; -- Create secrets table with encryption at rest CREATE TABLE IF NOT EXISTS secrets ( secret_id UUID NOT NULL, developer_id UUID NOT NULL, name TEXT NOT NULL, description TEXT, value_encrypted BYTEA NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB DEFAULT '{}'::jsonb, CONSTRAINT pk_secrets PRIMARY KEY (developer_id, secret_id), CONSTRAINT uq_secrets_unique UNIQUE(developer_id, name), CONSTRAINT ct_secrets_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT ct_secrets_canonical_name_valid_identifier CHECK (name ~ '^[a-zA-Z][a-zA-Z0-9_]*$') ); CREATE OR REPLACE FUNCTION update_secrets_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER update_secrets_timestamp_trigger BEFORE UPDATE ON secrets FOR EACH ROW EXECUTE FUNCTION update_secrets_timestamp(); -- Add indexes CREATE INDEX IF NOT EXISTS idx_secrets_developer_id ON secrets(developer_id); CREATE INDEX IF NOT EXISTS idx_secrets_name ON secrets(name); CREATE INDEX IF NOT EXISTS idx_secrets_metadata ON secrets USING gin(metadata); -- Add encryption/decryption functions using pgcrypto CREATE OR REPLACE FUNCTION encrypt_secret( p_value TEXT, p_key TEXT ) RETURNS BYTEA AS $$ BEGIN RETURN pgp_sym_encrypt( p_value, p_key, 'cipher-algo=aes256' ); END; $$ LANGUAGE plpgsql SECURITY DEFINER; CREATE OR REPLACE FUNCTION decrypt_secret( p_encrypted_value BYTEA, p_key TEXT ) RETURNS TEXT AS $$ BEGIN RETURN pgp_sym_decrypt( p_encrypted_value, p_key ); END; $$ LANGUAGE plpgsql SECURITY DEFINER; COMMIT; ================================================ FILE: src/memory-store/migrations/000041_non_null_forward_tool_calls.down.sql ================================================ -- Remove the not null constraint ALTER TABLE sessions ALTER COLUMN forward_tool_calls DROP NOT NULL; -- Remove the comment COMMENT ON COLUMN sessions.forward_tool_calls IS NULL; ================================================ FILE: src/memory-store/migrations/000041_non_null_forward_tool_calls.up.sql ================================================ -- Update existing null values to false UPDATE sessions SET forward_tool_calls = false WHERE forward_tool_calls IS NULL; -- Make the column not null ALTER TABLE sessions ALTER COLUMN forward_tool_calls SET NOT NULL; -- Add comment to explain the change COMMENT ON COLUMN sessions.forward_tool_calls IS 'Whether to forward tool calls directly to the model. Default is false.'; ================================================ FILE: src/memory-store/migrations/000042_add_api_keys.down.sql ================================================ BEGIN; -- Drop helper functions DROP FUNCTION IF EXISTS decrypt_api_key(BYTEA, TEXT); DROP FUNCTION IF EXISTS encrypt_api_key(TEXT, TEXT); -- Drop trigger and function DROP TRIGGER IF EXISTS update_api_keys_timestamp_trigger ON api_keys; DROP FUNCTION IF EXISTS update_api_keys_timestamp(); -- Drop table DROP TABLE IF EXISTS api_keys CASCADE; COMMIT; ================================================ FILE: src/memory-store/migrations/000042_add_api_keys.up.sql ================================================ BEGIN; -- Create api_keys table with encryption for api_key_encrypted (following secrets pattern) CREATE TABLE IF NOT EXISTS api_keys ( api_key_id UUID NOT NULL, developer_id UUID NOT NULL, api_key_encrypted BYTEA NOT NULL, name TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, metadata JSONB DEFAULT '{}'::jsonb, deleted_at TIMESTAMPTZ DEFAULT NULL, CONSTRAINT pk_api_keys PRIMARY KEY (developer_id, api_key_id), CONSTRAINT ct_api_keys_metadata_is_object CHECK (jsonb_typeof(metadata) = 'object'), CONSTRAINT ct_api_keys_name_valid_identifier CHECK (name ~ '^[a-zA-Z][a-zA-Z0-9_]*$'), CONSTRAINT fk_api_keys_developer FOREIGN KEY (developer_id) REFERENCES developers(developer_id) ); -- Create partial unique index instead of constraint with WHERE clause CREATE UNIQUE INDEX IF NOT EXISTS uq_api_keys_developer_id_name ON api_keys (developer_id, name) WHERE deleted_at IS NULL; -- Create trigger function for updated_at CREATE OR REPLACE FUNCTION update_api_keys_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger CREATE TRIGGER update_api_keys_timestamp_trigger BEFORE UPDATE ON api_keys FOR EACH ROW EXECUTE FUNCTION update_api_keys_timestamp(); -- Add indexes CREATE INDEX IF NOT EXISTS idx_api_keys_developer_id ON api_keys(developer_id); CREATE INDEX IF NOT EXISTS idx_api_keys_name ON api_keys(name); CREATE INDEX IF NOT EXISTS idx_api_keys_metadata ON api_keys USING gin(metadata); CREATE INDEX IF NOT EXISTS idx_api_keys_deleted_at ON api_keys(deleted_at) WHERE deleted_at IS NULL; -- Helper functions for encryption/decryption (following secrets pattern) CREATE OR REPLACE FUNCTION encrypt_api_key( p_value TEXT, p_key TEXT ) RETURNS BYTEA AS $$ BEGIN RETURN pgp_sym_encrypt( p_value, p_key, 'cipher-algo=aes256' ); END; $$ LANGUAGE plpgsql SECURITY DEFINER; CREATE OR REPLACE FUNCTION decrypt_api_key( p_encrypted_value BYTEA, p_key TEXT ) RETURNS TEXT AS $$ BEGIN RETURN pgp_sym_decrypt( p_encrypted_value, p_key ); END; $$ LANGUAGE plpgsql SECURITY DEFINER; -- Add comment to table COMMENT ON TABLE api_keys IS 'Stores API keys with encryption for developers'; COMMIT; ================================================ FILE: src/memory-store/migrations/000043_optional_trigram_search.down.sql ================================================ -- Revert trigram similarity threshold to non-nullable with default 0.6 -- Revert search_by_text to original with non-nullable similarity_threshold DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT 0.6 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); SET work_mem = '32MB'; RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS tsv_score, NULL::double precision AS trigram_score, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at, /* Mark source=1 for FTS */ 1 AS source FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trgm_candidates AS MATERIALIZED ( /* * Get docs that fail the FTS pass but pass a broad trigram test * i.e. (title % :search_text) or (content % :search_text) * so it can use your GIN/GIST trigram indexes. */ SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, d.search_tsv, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2::uuid AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) -- A broad trigram match (index-friendly): AND (d.title %> $6 OR d.content %> $6) -- Exclude anything that was already in the FTS set: AND NOT EXISTS ( SELECT 1 FROM fts_results f WHERE f.doc_id = d.doc_id AND f.index = d.index ) ), trgm_scored AS ( /* * Only now do the heavy comprehensive_similarity check, * but only for these trigram candidates. */ SELECT t.developer_id, t.doc_id, t.index, t.title, t.content, NULL::double precision AS tsv_score, comprehensive_similarity(t.title, t.content, $6)::double precision AS trigram_score, t.embedding, t.metadata, t.owner_type, t.owner_id, t.updated_at, 2 AS source FROM trgm_candidates t WHERE comprehensive_similarity(t.title, t.content, $6) > $7 ), combined AS ( /* * Union the two sets: * - FTS matches (fts_results) => "score" is tsv_score * - Trigram-only matches => "score" is trigram_score */ SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM fts_results UNION ALL SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM trgm_scored ) SELECT * FROM combined ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END; $$; -- Revert search_hybrid to original with non-nullable similarity_threshold DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text, float, integer); CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector (1024), p_owner_types TEXT[], p_owner_ids UUID [], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, -- Weight for embedding results p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english_unaccent', p_similarity_threshold float DEFAULT 0.6, k_multiplier integer DEFAULT 5 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * k_multiplier; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id => p_developer_id, query_text => p_query_text, owner_types => p_owner_types, owner_ids => p_owner_ids, search_language => p_search_language, k => intermediate_limit, metadata_filter => p_metadata_filter, similarity_threshold => p_similarity_threshold ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id => p_developer_id, query_embedding => p_query_embedding, owner_types => p_owner_types, owner_ids => p_owner_ids, k => intermediate_limit, confidence => p_confidence, metadata_filter => p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMENT ON FUNCTION search_by_text IS 'Search documents using full-text search and enhanced fuzzy matching with configurable language and filtering options'; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search with configurable weights and filtering options'; -- Revert embed_and_search_hybrid to original with non-nullable similarity_threshold DROP FUNCTION IF EXISTS embed_and_search_hybrid; CREATE OR REPLACE FUNCTION embed_and_search_hybrid ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english_unaccent', embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL, similarity_threshold float DEFAULT 0.6 -- Reverted back to 0.6 default ) RETURNS SETOF doc_search_result AS $$ DECLARE query_embedding vector(1024); BEGIN -- Get embedding for the query query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Call the search_hybrid function with the embedding RETURN QUERY SELECT * FROM search_hybrid( developer_id, query_text, query_embedding, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language, similarity_threshold ); END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION embed_and_search_hybrid IS 'Convenience function that combines text embedding generation and hybrid search in one call'; ================================================ FILE: src/memory-store/migrations/000043_optional_trigram_search.up.sql ================================================ -- Make trigram similarity threshold optional in search functions -- This allows disabling trigram search by passing NULL -- Update search_by_text to handle NULL similarity_threshold DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, float); CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT NULL -- Changed to NULL default ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); SET work_mem = '32MB'; -- If similarity_threshold is NULL, only do full-text search IF similarity_threshold IS NULL THEN RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS score, e.embedding, d.metadata, o.owner_type, o.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ) SELECT developer_id, doc_id, index, title, content, score AS distance, embedding, metadata, owner_type, owner_id FROM fts_results ORDER BY score DESC LIMIT $6' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, k; ELSE -- Original behavior with trigram search RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS tsv_score, NULL::double precision AS trigram_score, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at, /* Mark source=1 for FTS */ 1 AS source FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trgm_candidates AS MATERIALIZED ( /* * Get docs that fail the FTS pass but pass a broad trigram test * i.e. (title % :search_text) or (content % :search_text) * so it can use your GIN/GIST trigram indexes. */ SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, d.search_tsv, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2::uuid AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) -- A broad trigram match (index-friendly): AND (d.title %> $6 OR d.content %> $6) -- Exclude anything that was already in the FTS set: AND NOT EXISTS ( SELECT 1 FROM fts_results f WHERE f.doc_id = d.doc_id AND f.index = d.index ) ), trgm_scored AS ( /* * Only now do the heavy comprehensive_similarity check, * but only for these trigram candidates. */ SELECT t.developer_id, t.doc_id, t.index, t.title, t.content, NULL::double precision AS tsv_score, comprehensive_similarity(t.title, t.content, $6)::double precision AS trigram_score, t.embedding, t.metadata, t.owner_type, t.owner_id, t.updated_at, 2 AS source FROM trgm_candidates t WHERE comprehensive_similarity(t.title, t.content, $6) > $7 ), combined AS ( /* * Union the two sets: * - FTS matches (fts_results) => "score" is tsv_score * - Trigram-only matches => "score" is trigram_score */ SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM fts_results UNION ALL SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM trgm_scored ) SELECT * FROM combined ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END IF; END; $$; -- Update search_hybrid to pass NULL similarity_threshold correctly DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, float, float, jsonb, text, float, integer); CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector (1024), p_owner_types TEXT[], p_owner_ids UUID [], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, -- Weight for embedding results p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english_unaccent', p_similarity_threshold float DEFAULT NULL, -- Changed to NULL default k_multiplier integer DEFAULT 5 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * k_multiplier; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id => p_developer_id, query_text => p_query_text, owner_types => p_owner_types, owner_ids => p_owner_ids, search_language => p_search_language, k => intermediate_limit, metadata_filter => p_metadata_filter, similarity_threshold => p_similarity_threshold ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id => p_developer_id, query_embedding => p_query_embedding, owner_types => p_owner_types, owner_ids => p_owner_ids, k => intermediate_limit, confidence => p_confidence, metadata_filter => p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMENT ON FUNCTION search_by_text IS 'Search documents using full-text search with optional trigram fuzzy matching. Pass NULL similarity_threshold to disable trigram search.'; COMMENT ON FUNCTION search_hybrid IS 'Hybrid search combining text and vector search with optional trigram fuzzy matching. Pass NULL similarity_threshold to disable trigram search in text component.'; -- Update embed_and_search_hybrid to use NULL similarity_threshold default DROP FUNCTION IF EXISTS embed_and_search_hybrid; CREATE OR REPLACE FUNCTION embed_and_search_hybrid ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, alpha float DEFAULT 0.7, confidence float DEFAULT 0.5, metadata_filter jsonb DEFAULT NULL, search_language text DEFAULT 'english_unaccent', embedding_provider text DEFAULT 'openai', embedding_model text DEFAULT 'text-embedding-3-large', input_type text DEFAULT 'query', api_key text DEFAULT NULL, api_key_name text DEFAULT NULL, similarity_threshold float DEFAULT NULL -- Changed to NULL default ) RETURNS SETOF doc_search_result AS $$ DECLARE query_embedding vector(1024); BEGIN -- Get embedding for the query query_embedding := embed_with_cache( embedding_provider, embedding_model, query_text, input_type, api_key, api_key_name ); -- Call the search_hybrid function with the embedding RETURN QUERY SELECT * FROM search_hybrid( developer_id, query_text, query_embedding, owner_types, owner_ids, k, alpha, confidence, metadata_filter, search_language, similarity_threshold ); END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION embed_and_search_hybrid IS 'Convenience function that combines text embedding generation and hybrid search with optional trigram fuzzy matching. Pass NULL similarity_threshold to disable trigram search in text component.'; ================================================ FILE: src/memory-store/migrations/000044_search_optimize.down.sql ================================================ BEGIN; DROP INDEX IF EXISTS idx_docs_embeddings_store_diskann_labels; DROP INDEX IF EXISTS idx_doc_owners_owner_dev_doc; ALTER TABLE docs_embeddings_store DROP COLUMN IF EXISTS developer_labels; DROP FUNCTION IF EXISTS public.uuid_to_smallint_labels(uuid); -- AIDEV-NOTE: restore legacy docs vectorizer config if we swapped it during the up migration. DO $$ DECLARE v_new_id integer; BEGIN SELECT id INTO v_new_id FROM ai.vectorizer WHERE source_schema = 'public' AND source_table = 'docs' AND coalesce(config -> 'destination' ->> 'target_table', '') = 'docs_embeddings_store' ORDER BY id DESC LIMIT 1; IF v_new_id IS NOT NULL THEN PERFORM ai.drop_vectorizer(v_new_id, drop_all => true); PERFORM ai.create_vectorizer( 'public.docs'::regclass, name => 'docs_vectorizer', grant_to => ai.grant_to('postgres'), destination => ai.destination_table( target_schema => 'public', view_name => 'docs_embeddings' ), loading => ai.loading_column('content'), embedding => ai.embedding_openai('text-embedding-3-large', 1024, 'document'), chunking => ai.chunking_recursive_character_text_splitter( chunk_size => 30000, chunk_overlap => 600, separators => ARRAY[ E'\n#', E'\n##', E'\n###', E'\n---', E'\n***', E'', E'
', E'', E'

', E'
', E'\n\n', '. ', '? ', '! ', '; ', E'\n', ' ' ] ), scheduling => ai.scheduling_timescaledb(), indexing => ai.indexing_diskann(), formatting => ai.formatting_python_template(E'Title: $title\n\n$chunk'), processing => ai.processing_default(), enqueue_existing => TRUE, if_not_exists => TRUE ); END IF; END; $$; -- Restore prior search_by_text implementation. CREATE OR REPLACE FUNCTION search_by_text ( developer_id UUID, query_text text, owner_types TEXT[], owner_ids UUID[], search_language text DEFAULT 'english_unaccent', k integer DEFAULT 3, metadata_filter jsonb DEFAULT NULL, similarity_threshold float DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; -- Convert query to tsquery ts_query := websearch_to_tsquery(search_language::regconfig, query_text); SET work_mem = '32MB'; -- If similarity_threshold is NULL, only do full-text search IF similarity_threshold IS NULL THEN RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS score, e.embedding, d.metadata, o.owner_type, o.owner_id FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ) SELECT developer_id, doc_id, index, title, content, score AS distance, embedding, metadata, owner_type, owner_id FROM fts_results ORDER BY score DESC LIMIT $6' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, k; ELSE -- Original behavior with trigram search RETURN QUERY EXECUTE 'WITH fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, $1, 32)::double precision AS tsv_score, NULL::double precision AS trigram_score, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at, /* Mark source=1 for FTS */ 1 AS source FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2 -- Must pass FTS AND d.search_tsv @@ $1 -- Filter by owners if needed AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) ), trgm_candidates AS MATERIALIZED ( /* * Get docs that fail the FTS pass but pass a broad trigram test * i.e. (title % :search_text) or (content % :search_text) * so it can use your GIN/GIST trigram indexes. */ SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, d.search_tsv, e.embedding, d.metadata, o.owner_type, o.owner_id, d.updated_at FROM docs d LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index LEFT JOIN doc_owners o ON d.doc_id = o.doc_id WHERE d.developer_id = $2::uuid AND o.owner_type = ANY($3) AND o.owner_id = ANY($4::uuid[]) AND (($5)::jsonb IS NULL OR d.metadata @> ($5)::jsonb) -- A broad trigram match (index-friendly): AND (d.title %> $6 OR d.content %> $6) -- Exclude anything that was already in the FTS set: AND NOT EXISTS ( SELECT 1 FROM fts_results f WHERE f.doc_id = d.doc_id AND f.index = d.index ) ), trgm_scored AS ( /* * Only now do the heavy comprehensive_similarity check, * but only for these trigram candidates. */ SELECT t.developer_id, t.doc_id, t.index, t.title, t.content, NULL::double precision AS tsv_score, comprehensive_similarity(t.title, t.content, $6)::double precision AS trigram_score, t.embedding, t.metadata, t.owner_type, t.owner_id, t.updated_at, 2 AS source FROM trgm_candidates t WHERE comprehensive_similarity(t.title, t.content, $6) > $7 ), combined AS ( /* * Union the two sets: * - FTS matches (fts_results) => "score" is tsv_score * - Trigram-only matches => "score" is trigram_score */ SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM fts_results UNION ALL SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM trgm_scored ) SELECT * FROM combined ORDER BY score DESC LIMIT $8' USING ts_query, developer_id, owner_types, owner_ids, metadata_filter, query_text, similarity_threshold, k; END IF; END; $$; -- Restore prior search_by_vector implementation. CREATE OR REPLACE FUNCTION search_by_vector ( developer_id UUID, query_embedding vector (1024), owner_types TEXT[], owner_ids UUID [], k integer DEFAULT 3, confidence float DEFAULT 0.0, metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE search_threshold float; owner_filter_sql text; metadata_filter_sql text; BEGIN -- Input validation IF k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF confidence < -1 OR confidence > 1 THEN RAISE EXCEPTION 'confidence must be between -1 and 1'; END IF; IF owner_types IS NOT NULL AND owner_ids IS NOT NULL AND array_length(owner_types, 1) != array_length(owner_ids, 1) THEN RAISE EXCEPTION 'owner_types and owner_ids arrays must have the same length'; END IF; -- Calculate search threshold from confidence search_threshold := 1.0 - confidence; -- Build owner filter SQL owner_filter_sql := ' AND ( doc_owners.owner_id = ANY($5::uuid[]) AND doc_owners.owner_type = ANY($4::text[]) )'; -- Build metadata filter SQL if provided IF metadata_filter IS NOT NULL THEN metadata_filter_sql := 'AND d.metadata @> $6'; ELSE metadata_filter_sql := ''; END IF; -- Return search results RETURN QUERY EXECUTE format( 'WITH ranked_docs AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, (d.embedding <=> $1) as distance, d.embedding, d.metadata, doc_owners.owner_type, doc_owners.owner_id FROM docs_embeddings d LEFT JOIN doc_owners ON d.doc_id = doc_owners.doc_id WHERE d.developer_id = $7 AND (d.embedding <=> $1) <= $2 %s %s ORDER BY (d.embedding <=> $1) ASC LIMIT ($3 * 4) -- Get more candidates than needed ) SELECT DISTINCT ON (doc_id) * FROM ranked_docs ORDER BY doc_id, distance ASC LIMIT $3', owner_filter_sql, metadata_filter_sql ) USING query_embedding, search_threshold, k, owner_types, owner_ids, metadata_filter, developer_id; END; $$; -- Restore prior search_hybrid implementation. CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector (1024), p_owner_types TEXT[], p_owner_ids UUID [], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english_unaccent', p_similarity_threshold float DEFAULT NULL, k_multiplier integer DEFAULT 5 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * k_multiplier; BEGIN /* 1) Get top-N results from text search. 2) Get top-N results from vector search. 3) UNION them and pick the highest-distance row per doc_id (DISTINCT ON). 4) Join those rows back to each sub-result to get text_score and embedding_score. 5) Aggregate text & embedding scores once, dbsf_normalize once, then map them back by row_number. */ RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( developer_id => p_developer_id, query_text => p_query_text, owner_types => p_owner_types, owner_ids => p_owner_ids, search_language => p_search_language, k => intermediate_limit, metadata_filter => p_metadata_filter, similarity_threshold => p_similarity_threshold ) ), embedding_results AS ( SELECT * FROM search_by_vector( developer_id => p_developer_id, query_embedding => p_query_embedding, owner_types => p_owner_types, owner_ids => p_owner_ids, k => intermediate_limit, confidence => p_confidence, metadata_filter => p_metadata_filter ) ), -- UNION both sets, pick highest distance row per doc_id all_results AS ( SELECT DISTINCT ON (doc_id) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, distance DESC ), -- Gather text_score & embedding_score for each doc scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id ), -- Give each row a stable ordering scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER (ORDER BY s.doc_id) AS rn FROM scores s ), -- Aggregate all text/embedding scores into arrays aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), -- Normalize once for each array normed_arrays AS ( SELECT dbsf_normalize(text_scores) AS norm_text_scores, dbsf_normalize(embedding_scores) AS norm_embedding_scores FROM aggregated ), -- Join normalized arrays back using row_number final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * norm_text_scores[s.rn] + embedding_weight * norm_embedding_scores[s.rn] ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMIT; ================================================ FILE: src/memory-store/migrations/000044_search_optimize.up.sql ================================================ BEGIN; -- Performance for this migration only SET LOCAL max_parallel_maintenance_workers = 4; SET LOCAL maintenance_work_mem = '6GB'; SET LOCAL max_parallel_workers = 5; SET LOCAL statement_timeout = '0'; -- Ensure vectorscale is at least 0.8.0 so label-prefiltered DiskANN indexes are supported. DO $$ DECLARE v_version text; v_numeric int[]; BEGIN SELECT extversion INTO v_version FROM pg_extension WHERE extname = 'vectorscale'; IF v_version IS NULL THEN RAISE EXCEPTION 'vectorscale extension is not installed; install >= 0.8.0 before running this migration.'; END IF; v_numeric := string_to_array(regexp_replace(v_version, '[^0-9\.]', '', 'g'), '.')::int[]; IF coalesce(v_numeric[1], 0) < 0 OR (coalesce(v_numeric[1], 0) = 0 AND coalesce(v_numeric[2], 0) < 8) OR (coalesce(v_numeric[1], 0) = 0 AND coalesce(v_numeric[2], 0) = 8 AND coalesce(v_numeric[3], 0) < 0) THEN EXECUTE 'ALTER EXTENSION vectorscale UPDATE TO ''0.8.0'''; SELECT extversion INTO v_version FROM pg_extension WHERE extname = 'vectorscale'; v_numeric := string_to_array(regexp_replace(v_version, '[^0-9\.]', '', 'g'), '.')::int[]; IF coalesce(v_numeric[1], 0) < 0 OR (coalesce(v_numeric[1], 0) = 0 AND coalesce(v_numeric[2], 0) < 8) OR (coalesce(v_numeric[1], 0) = 0 AND coalesce(v_numeric[2], 0) = 8 AND coalesce(v_numeric[3], 0) < 0) THEN RAISE EXCEPTION 'vectorscale extension version % does not support label-aware DiskANN indexes; upgrade to >= 0.8.0.', v_version; END IF; END IF; END; $$; --- -- AIDEV-NOTE: pgai 0.6+ needs the refreshed docs vectorizer config; rebuild it if an older one is present. --- DO $$ --- DECLARE --- v_old_id integer; --- v_old_config jsonb; --- BEGIN --- SELECT id, config --- INTO v_old_id, v_old_config --- FROM ai.vectorizer --- WHERE source_schema = 'public' --- AND source_table = 'docs' --- ORDER BY id DESC --- LIMIT 1; --- --- IF v_old_id IS NOT NULL --- AND coalesce(v_old_config -> 'destination' ->> 'target_table', '') <> 'docs_embeddings_store' THEN --- PERFORM ai.drop_vectorizer(v_old_id, drop_all => true); --- END IF; --- --- IF NOT EXISTS ( --- SELECT 1 --- FROM ai.vectorizer --- WHERE source_schema = 'public' --- AND source_table = 'docs' --- AND coalesce(config -> 'destination' ->> 'target_table', '') = 'docs_embeddings_store' --- ) THEN --- PERFORM ai.create_vectorizer ( --- 'public.docs'::regclass, --- name => 'docs_vectorizer', --- -- grant_to => ai.grant_to('postgres'), --- destination => ai.destination_table( --- target_schema => 'public', --- target_table => 'docs_embeddings_store', --- view_name => 'docs_embeddings' --- ), --- loading => ai.loading_column('content'), --- embedding => ai.embedding_openai('text-embedding-3-large', 1024, 'document'), --- chunking => ai.chunking_recursive_character_text_splitter( --- chunk_size => 30000, --- chunk_overlap => 600, --- separators => ARRAY[ --- E'\n#', --- E'\n##', --- E'\n###', --- E'\n---', --- E'\n***', --- E'', --- E'', --- E'', --- E'

', --- E'
', --- E'\n\n', --- '. ', --- '? ', --- '! ', --- '; ', --- E'\n', --- ' ' --- ] --- ), --- scheduling => ai.scheduling_timescaledb(), --- indexing => ai.indexing_diskann(), --- formatting => ai.formatting_python_template(E'Title: $title\n\n$chunk'), --- processing => ai.processing_default(), --- enqueue_existing => FALSE, --- if_not_exists => TRUE --- ); --- END IF; --- END; --- $$; -- Drop any existing DiskANN indexes so we can recreate them with label support. DO $$ DECLARE idx_record record; BEGIN FOR idx_record IN SELECT indexname FROM pg_indexes WHERE schemaname = 'public' AND tablename = 'docs_embeddings_store' AND indexdef ILIKE '%USING diskann%' LOOP EXECUTE format('DROP INDEX IF EXISTS %I', idx_record.indexname); END LOOP; END; $$; -- Provide a helper for converting UUIDs into vectorscale label arrays when the extension doesn't supply one. CREATE OR REPLACE FUNCTION public.uuid_to_smallint_labels(p_uuid uuid) RETURNS smallint[] LANGUAGE plpgsql IMMUTABLE STRICT AS $$ DECLARE bytes bytea := uuid_send(p_uuid); labels smallint[] := ARRAY[]::smallint[]; combined integer; i integer; BEGIN IF bytes IS NULL THEN RETURN NULL; END IF; FOR i IN 0..7 LOOP combined := get_byte(bytes, i * 2) * 256 + get_byte(bytes, i * 2 + 1); combined := (combined % 32767) + 1; -- map into 1..32767 labels := array_append(labels, combined::smallint); END LOOP; RETURN labels; END; $$; -- Persist developer labels on the embeddings store so DiskANN can pre-filter candidates. ALTER TABLE docs_embeddings_store ADD COLUMN IF NOT EXISTS developer_labels smallint[] GENERATED ALWAYS AS (uuid_to_smallint_labels(developer_id)) STORED; CREATE INDEX IF NOT EXISTS idx_docs_embeddings_store_diskann_labels ON docs_embeddings_store USING diskann (embedding vector_cosine_ops, developer_labels) WITH (num_neighbors = 50); -- Support owner filters by pairing owner type/id with developer/doc for selectivity. CREATE INDEX IF NOT EXISTS idx_doc_owners_owner_dev_doc ON doc_owners (owner_type, owner_id, developer_id, doc_id); -- Replace search_by_text to tighten owner/developer filters and avoid session-wide GUC changes. DROP FUNCTION IF EXISTS search_by_text(UUID, text, TEXT[], UUID[], text, integer, jsonb, double precision); CREATE OR REPLACE FUNCTION search_by_text ( p_developer_id UUID, p_query_text text, p_owner_types TEXT[], p_owner_ids UUID[], p_search_language text DEFAULT 'english_unaccent', p_k integer DEFAULT 3, p_metadata_filter jsonb DEFAULT NULL, p_similarity_threshold float DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE ts_query tsquery; BEGIN IF p_k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF COALESCE(array_length(p_owner_types, 1), 0) <> COALESCE(array_length(p_owner_ids, 1), 0) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; ts_query := websearch_to_tsquery(p_search_language::regconfig, p_query_text); PERFORM set_config('work_mem', '32MB', true); IF p_similarity_threshold IS NULL THEN RETURN QUERY WITH owner_filter AS ( SELECT owner_type, owner_id FROM unnest( COALESCE(p_owner_types, ARRAY[]::text[]), COALESCE(p_owner_ids, ARRAY[]::uuid[]) ) AS of(owner_type, owner_id) ), fts_results AS ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, ts_query, 32)::double precision AS score, e.embedding, d.metadata, of.owner_type, of.owner_id FROM docs d JOIN doc_owners o ON o.developer_id = d.developer_id AND o.doc_id = d.doc_id JOIN owner_filter of ON of.owner_type = o.owner_type AND of.owner_id = o.owner_id LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index WHERE d.developer_id = p_developer_id AND d.search_tsv @@ ts_query AND (p_metadata_filter IS NULL OR d.metadata @> p_metadata_filter) ) SELECT developer_id, doc_id, index, title, content, score AS distance, embedding, metadata, owner_type, owner_id FROM fts_results ORDER BY score DESC LIMIT p_k; ELSE RETURN QUERY WITH owner_filter AS ( SELECT owner_type, owner_id FROM unnest( COALESCE(p_owner_types, ARRAY[]::text[]), COALESCE(p_owner_ids, ARRAY[]::uuid[]) ) AS of(owner_type, owner_id) ), fts_results AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, ts_rank_cd(d.search_tsv, ts_query, 32)::double precision AS tsv_score, NULL::double precision AS trigram_score, e.embedding, d.metadata, of.owner_type, of.owner_id, d.updated_at, 1 AS source FROM docs d JOIN doc_owners o ON o.developer_id = d.developer_id AND o.doc_id = d.doc_id JOIN owner_filter of ON of.owner_type = o.owner_type AND of.owner_id = o.owner_id LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index WHERE d.developer_id = p_developer_id AND d.search_tsv @@ ts_query AND (p_metadata_filter IS NULL OR d.metadata @> p_metadata_filter) ), trgm_candidates AS MATERIALIZED ( SELECT d.developer_id, d.doc_id, d.index, d.title, d.content, d.search_tsv, e.embedding, d.metadata, of.owner_type, of.owner_id, d.updated_at FROM docs d JOIN doc_owners o ON o.developer_id = d.developer_id AND o.doc_id = d.doc_id JOIN owner_filter of ON of.owner_type = o.owner_type AND of.owner_id = o.owner_id LEFT JOIN docs_embeddings e ON e.developer_id = d.developer_id AND e.doc_id = d.doc_id AND e.index = d.index WHERE d.developer_id = p_developer_id AND (p_metadata_filter IS NULL OR d.metadata @> p_metadata_filter) AND (d.title %> p_query_text OR d.content %> p_query_text) AND NOT EXISTS ( SELECT 1 FROM fts_results f WHERE f.doc_id = d.doc_id AND f.index = d.index AND f.owner_type = of.owner_type AND f.owner_id = of.owner_id ) ), trgm_scored AS ( SELECT t.developer_id, t.doc_id, t.index, t.title, t.content, NULL::double precision AS tsv_score, comprehensive_similarity(t.title, t.content, p_query_text)::double precision AS trigram_score, t.embedding, t.metadata, t.owner_type, t.owner_id, t.updated_at, 2 AS source FROM trgm_candidates t WHERE comprehensive_similarity(t.title, t.content, p_query_text) > p_similarity_threshold ), combined AS ( SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM fts_results UNION ALL SELECT developer_id, doc_id, index, title, content, COALESCE(tsv_score, trigram_score) AS score, embedding, metadata, owner_type, owner_id FROM trgm_scored ) SELECT * FROM combined ORDER BY score DESC LIMIT p_k; END IF; END; $$; -- Replace search_by_vector to use label-prefiltered DiskANN results and precise owner pairing. DROP FUNCTION IF EXISTS search_by_vector(UUID, vector, TEXT[], UUID[], integer, double precision, jsonb); CREATE OR REPLACE FUNCTION search_by_vector ( p_developer_id UUID, p_query_embedding vector(1024), p_owner_types TEXT[], p_owner_ids UUID[], p_k integer DEFAULT 3, p_confidence float DEFAULT 0.0, p_metadata_filter jsonb DEFAULT NULL ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE search_threshold float; label_filter smallint[]; candidate_limit integer; BEGIN IF p_k <= 0 THEN RAISE EXCEPTION 'k must be greater than 0'; END IF; IF p_confidence < -1 OR p_confidence > 1 THEN RAISE EXCEPTION 'confidence must be between -1 and 1'; END IF; IF COALESCE(array_length(p_owner_types, 1), 0) <> COALESCE(array_length(p_owner_ids, 1), 0) THEN RAISE EXCEPTION 'owner_types and owner_ids must be the same length'; END IF; search_threshold := 1.0 - p_confidence; label_filter := uuid_to_smallint_labels(p_developer_id); candidate_limit := GREATEST(p_k * 8, 40); PERFORM set_config('enable_seqscan', 'off', true); PERFORM set_config('enable_bitmapscan', 'off', true); RETURN QUERY WITH owner_filter AS ( SELECT owner_type, owner_id FROM unnest( COALESCE(p_owner_types, ARRAY[]::text[]), COALESCE(p_owner_ids, ARRAY[]::uuid[]) ) AS of(owner_type, owner_id) ), candidates AS ( SELECT emb.developer_id, emb.doc_id, emb.index, emb.embedding, (emb.embedding <=> p_query_embedding) AS distance FROM docs_embeddings_store emb WHERE emb.developer_labels && label_filter ORDER BY distance ASC LIMIT candidate_limit ), enriched AS ( SELECT cand.developer_id, cand.doc_id, cand.index, cand.embedding, cand.distance, d.title, d.content, d.metadata, of.owner_type, of.owner_id FROM candidates cand JOIN docs d ON d.developer_id = cand.developer_id AND d.doc_id = cand.doc_id AND d.index = cand.index JOIN doc_owners o ON o.developer_id = cand.developer_id AND o.doc_id = cand.doc_id JOIN owner_filter of ON of.owner_type = o.owner_type AND of.owner_id = o.owner_id WHERE cand.developer_id = p_developer_id AND (p_metadata_filter IS NULL OR d.metadata @> p_metadata_filter) ) SELECT DISTINCT ON (doc_id, owner_type, owner_id, index) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM enriched WHERE p_confidence <= -1 OR distance <= search_threshold ORDER BY doc_id, owner_type, owner_id, index, distance LIMIT p_k; END; $$; -- Update search_hybrid to align with the refined text/vector functions. DROP FUNCTION IF EXISTS search_hybrid(UUID, text, vector, TEXT[], UUID[], integer, double precision, double precision, jsonb, text, double precision, integer); CREATE OR REPLACE FUNCTION search_hybrid ( p_developer_id UUID, p_query_text text, p_query_embedding vector (1024), p_owner_types TEXT[], p_owner_ids UUID [], p_k integer DEFAULT 3, p_alpha float DEFAULT 0.7, p_confidence float DEFAULT 0.5, p_metadata_filter jsonb DEFAULT NULL, p_search_language text DEFAULT 'english_unaccent', p_similarity_threshold float DEFAULT NULL, p_k_multiplier integer DEFAULT 5 ) RETURNS SETOF doc_search_result LANGUAGE plpgsql AS $$ DECLARE text_weight float := 1.0 - p_alpha; embedding_weight float := p_alpha; intermediate_limit integer := p_k * p_k_multiplier; BEGIN RETURN QUERY WITH text_results AS ( SELECT * FROM search_by_text( p_developer_id, p_query_text, p_owner_types, p_owner_ids, p_search_language, intermediate_limit, p_metadata_filter, p_similarity_threshold ) ), embedding_results AS ( SELECT * FROM search_by_vector( p_developer_id, p_query_embedding, p_owner_types, p_owner_ids, intermediate_limit, p_confidence, p_metadata_filter ) ), all_results AS ( SELECT DISTINCT ON (doc_id, owner_type, owner_id, index) developer_id, doc_id, index, title, content, distance, embedding, metadata, owner_type, owner_id FROM ( SELECT * FROM text_results UNION ALL SELECT * FROM embedding_results ) combined ORDER BY doc_id, owner_type, owner_id, index, distance DESC ), scores AS ( SELECT a.developer_id, a.doc_id, a.index, a.title, a.content, a.embedding, a.metadata, a.owner_type, a.owner_id, COALESCE(t.distance, 0.0) AS text_score, COALESCE(e.distance, 0.0) AS embedding_score FROM all_results a LEFT JOIN text_results t ON a.doc_id = t.doc_id AND a.index = t.index AND a.owner_type = t.owner_type AND a.owner_id = t.owner_id LEFT JOIN embedding_results e ON a.doc_id = e.doc_id AND a.index = e.index AND a.owner_type = e.owner_type AND a.owner_id = e.owner_id ), scores_ordered AS ( SELECT s.*, ROW_NUMBER() OVER ( ORDER BY s.doc_id, s.owner_type, s.owner_id, s.index ) AS rn FROM scores s ), aggregated AS ( SELECT array_agg(text_score ORDER BY rn) AS text_scores, array_agg(embedding_score ORDER BY rn) AS embedding_scores FROM scores_ordered ), normed_arrays AS ( SELECT COALESCE(dbsf_normalize(text_scores), ARRAY[]::double precision[]) AS norm_text_scores, COALESCE(dbsf_normalize(embedding_scores), ARRAY[]::double precision[]) AS norm_embedding_scores FROM aggregated ), final AS ( SELECT s.developer_id, s.doc_id, s.index, s.title, s.content, 1.0 - ( text_weight * COALESCE(norm_text_scores[s.rn], 0.0) + embedding_weight * COALESCE(norm_embedding_scores[s.rn], 0.0) ) AS distance, s.embedding, s.metadata, s.owner_type, s.owner_id FROM scores_ordered s CROSS JOIN normed_arrays ORDER BY distance ASC LIMIT p_k ) SELECT * FROM final; END; $$; COMMIT; ================================================ FILE: src/monitoring/AGENTS.md ================================================ # AGENTS.md - monitoring This directory contains monitoring and observability stack using Prometheus, Grafana, and Portainer. Key Uses - Bash commands: - cd monitoring - docker-compose --profile multi-tenant up # Full monitoring stack - docker-compose --profile monitor up # Portainer only - Core files: - `docker-compose.yml` for monitoring services - `prometheus/config/prometheus.yml` for metrics collection - `grafana/provisioning/` for dashboards and data sources - `grafana/dashboard.yaml` for dashboard configuration - Configuration guidelines: - Set `GRAFANA_ADMIN_PASSWORD` for secure access - Configure Prometheus targets in `prometheus.yml` - Add custom dashboards to `grafana/provisioning/dashboards/` - Testing instructions: - Grafana UI: `http://localhost:3000` (admin/password) - Portainer UI: `http://localhost:8383` (admin/password) - Prometheus targets: Check service discovery and health - Repository etiquette: - Don't commit admin passwords to version control - Use external volumes for data persistence - Developer environment: - Requires Docker and Docker Compose - External volumes for persistent data storage - Unexpected behaviors: - Grafana provisions dashboards automatically on startup - Prometheus scrapes require service network connectivity # Monitoring Service ## Overview The monitoring service provides comprehensive observability for the Julep platform using Prometheus for metrics collection, Grafana for visualization, and Portainer for container management. It enables real-time monitoring, alerting, and performance analysis. ## Architecture - **Metrics Collection**: Prometheus with multi-target scraping - **Visualization**: Grafana with pre-configured dashboards - **Container Management**: Portainer for Docker monitoring - **Data Persistence**: External volumes for metric storage ## Key Components ### Prometheus - **Purpose**: Metrics collection and time-series database - **Targets**: Agents API, Worker, Temporal services - **Scrape Interval**: 5-second collection frequency - **Storage**: External volume for metric persistence ### Grafana - **Purpose**: Metrics visualization and dashboarding - **Port**: 3000 (HTTP interface) - **Authentication**: Configurable admin credentials - **Provisioning**: Automatic dashboard and datasource setup ### Portainer - **Purpose**: Docker container management and monitoring - **Port**: 8383 (localhost only) - **Access**: Web-based container management interface - **Security**: Admin credentials required ## Pre-configured Dashboards ### Temporal Monitoring - **Advanced Visibility**: Detailed workflow metrics - **Cluster Monitoring**: Kubernetes-specific dashboards - **History Service**: Historical data analysis - **Matching Service**: Task matching performance - **Worker Service**: Worker node monitoring ### Service-specific Dashboards - **Server General**: Overall server performance - **SDK General**: Client SDK metrics - **SDK Java**: Java-specific SDK monitoring - **Frontend Service**: UI service performance - **Requests Metrics**: API request analysis - **Queries Metrics**: Database query performance ## Environment Variables - `GRAFANA_ADMIN_PASSWORD`: Admin password for Grafana (default: julep_grafana_admin) - `GRAFANA_ADMIN_USER`: Admin username for Grafana (default: admin) - `PORTAINER_ADMIN_USER`: Admin username for Portainer - `PORTAINER_ADMIN_PASSWORD`: Admin password for Portainer ## Deployment Profiles 1. **Multi-tenant**: Full monitoring stack with Prometheus and Grafana 2. **Monitor**: Portainer-only deployment for container management ## Metrics Collection ### Scrape Targets - **Agents API**: Main API service metrics (port 8080) - **Worker**: Background worker metrics (port 14000) - **Temporal**: Workflow engine metrics (port 15000) ### Metrics Categories - **Request Metrics**: HTTP request rates, latencies, errors - **System Metrics**: CPU, memory, disk usage - **Application Metrics**: Custom business logic metrics - **Database Metrics**: Query performance and connection pools ## Data Persistence - **Prometheus Data**: External volume `prometheus_data` - **Grafana Data**: External volume `grafana_data` - **Portainer Data**: External volume `portainer_data` ## Alerting Configuration - **Alertmanagers**: Configurable alert routing - **Evaluation Interval**: 5-second rule evaluation - **Notification Channels**: Email, Slack, webhooks - **Alert Rules**: Custom alerting conditions ## Dashboard Features - **Real-time Metrics**: Live data visualization - **Historical Analysis**: Time-based trend analysis - **Multi-service Views**: Cross-service correlation - **Custom Queries**: PromQL query interface - **Export/Import**: Dashboard portability ## Security Features - **Authentication**: Admin credential protection - **Network Isolation**: Service-specific network access - **Read-only Access**: Optional viewer accounts - **Data Encryption**: Transport-level security ## Integration Points - **Agents API**: Exposes `/metrics` endpoint for Prometheus - **Temporal**: Provides workflow and activity metrics - **Worker Services**: Background job monitoring - **Infrastructure**: System-level resource monitoring ## Operational Procedures - **Health Checks**: Automated service health monitoring - **Data Retention**: Configurable metric retention policies - **Backup/Restore**: Volume-based data backup - **Scaling**: Horizontal scaling for high-volume metrics ## Troubleshooting - **Service Discovery**: Check Prometheus targets page - **Dashboard Loading**: Verify Grafana provisioning logs - **Data Missing**: Confirm scrape target connectivity - **Performance**: Monitor Prometheus resource usage ================================================ FILE: src/monitoring/README.md ================================================ # Compose sample ### Prometheus & Grafana Project structure: ``` ├── README.md ├── docker-compose.yml ├── grafana │ └── provisioning │ └── datasources │ └── datasource.yml └── prometheus └── config └── prometheus.yml ``` The docker compose file defines a stack with two services `prometheus` and `grafana`. When deploying the stack, docker compose maps port the default ports for each service to the equivalent ports on the host in order to inspect easier the web interface of each service. Make sure the ports 9090 and 3000 on the host are not already in use. ## Deploy with docker compose ``` $ docker volume create grafana_data $ docker volume create prometheus_data $ docker compose up -d Creating network "prometheus-grafana_default" with the default driver Creating volume "prometheus-grafana_prom_data" with default driver ... Creating grafana ... done Creating prometheus ... done Attaching to prometheus, grafana ``` ## Expected result Listing containers must show two containers running and the port mapping as below: ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dbdec637814f prom/prometheus "/bin/prometheus --c…" 8 minutes ago Up 8 minutes 0.0.0.0:9090->9090/tcp prometheus 79f667cb7dc2 grafana/grafana "/run.sh" 8 minutes ago Up 8 minutes 0.0.0.0:3000->3000/tcp grafana ``` Navigate to `http://localhost:3000` in your web browser and use the login credentials specified in the compose file to access Grafana. It is already configured with prometheus as the default datasource. ![page](output.jpg) Navigate to `http://localhost:9090` in your web browser to access directly the web interface of prometheus. Stop and remove the containers. Use `-v` to remove the volumes if looking to erase all data. ``` $ docker compose down -v ``` ================================================ FILE: src/monitoring/docker-compose.yml ================================================ name: julep-monitoring services: prometheus: image: prom/prometheus container_name: prometheus profiles: - multi-tenant volumes: - ./prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus depends_on: agents-api-multi-tenant: condition: service_started command: - '--config.file=/etc/prometheus/prometheus.yml' grafana: image: grafana/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-julep_grafana_admin} - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin} container_name: grafana ports: - 3000:3000 volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/provisioning/dashboards:/var/lib/grafana/dashboards - ./grafana/dashboard.yaml:/etc/grafana/provisioning/dashboards/main.yaml profiles: - multi-tenant restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "http://localhost:3000"] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: memory: 1G portainer: image: portainer/portainer-ce:latest container_name: portainer ports: - 127.0.0.1:8383:9000 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - portainer_data:/data environment: - ADMIN_USERNAME=${PORTAINER_ADMIN_USER} - ADMIN_PASSWORD=${PORTAINER_ADMIN_PASSWORD} profiles: - monitor restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "http://localhost:9000"] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: memory: 1G volumes: prometheus_data: external: true grafana_data: external: true portainer_data: external: true ================================================ FILE: src/monitoring/grafana/dashboard.yaml ================================================ apiVersion: 1 providers: - name: "Dashboard provider" orgId: 1 type: file disableDeletion: false updateIntervalSeconds: 10 allowUiUpdates: false options: path: /var/lib/grafana/dashboards foldersFromFilesStructure: true ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/advanced-visibility-specific.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": false, "tags": [], "type": "dashboard" }, "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "iteration": 1635487590639, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 2, "panels": [], "title": "Task processor", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum(rate(task_requests{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "exemplar": true, "expr": "sum(rate(task_errors{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Visibility Task Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:65", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:66", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, "hiddenSeries": false, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(task_errors_discarded{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "discarded", "refId": "A" }, { "exemplar": true, "expr": "sum (rate(task_errors_limit_exceeded_counter{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Visibility Errors Breakdown", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:94", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:95", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 9 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_requests{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Visibility Task By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:123", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:124", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 9 }, "hiddenSeries": false, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_errors{operation=~\"Visibility.*\"}[1m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Visibility Task Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:152", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:153", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 17 }, "hiddenSeries": false, "id": 20, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(task_attempt_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Visibility Task Attempt Stats", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:193", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:194", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 25 }, "hiddenSeries": false, "id": 22, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum by (operation) (rate(task_latency_processing_sum{operation=~\"Visibility.*\"}[1m]))) / (sum by (operation) (rate(task_latency_processing_count{operation=~\"Visibility.*\"}[1m])))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Avg Visibility Task Processing Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:234", "format": "s", "label": null, "logBase": 1, "max": "0.8", "min": null, "show": true }, { "$$hashKey": "object:235", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 25 }, "hiddenSeries": false, "id": 24, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.50, sum(rate(task_latency_processing_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P50 Visibility Task Processing Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:259", "format": "s", "label": null, "logBase": 1, "max": "0.8", "min": null, "show": true }, { "$$hashKey": "object:260", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 25 }, "hiddenSeries": false, "id": 26, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(task_latency_processing_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Visibility Task Processing Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:284", "format": "s", "label": null, "logBase": 1, "max": "3.2", "min": null, "show": true }, { "$$hashKey": "object:285", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 34 }, "hiddenSeries": false, "id": 28, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum by (operation) (rate(task_latency_sum{operation=~\"Visibility.*\"}[1m]))) / (sum by (operation) (rate(task_latency_count{operation=~\"Visibility.*\"}[1m])))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Avg Visibility Task Overall Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:309", "format": "s", "label": null, "logBase": 1, "max": "1.6", "min": null, "show": true }, { "$$hashKey": "object:310", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 34 }, "hiddenSeries": false, "id": 30, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.50, sum(rate(task_latency_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P50 Visibility Task Overall Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:334", "format": "s", "label": null, "logBase": 1, "max": "1.6", "min": null, "show": true }, { "$$hashKey": "object:335", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 34 }, "hiddenSeries": false, "id": 32, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(task_latency_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Visibility Task Overall Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:359", "format": "s", "label": null, "logBase": 1, "max": "6.4", "min": null, "show": true }, { "$$hashKey": "object:360", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 43 }, "hiddenSeries": false, "id": 34, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum by (operation) (rate(task_latency_queue_sum{operation=~\"Visibility.*\"}[1m]))) / (sum by (operation) (rate(task_latency_queue_count{operation=~\"Visibility.*\"}[1m])))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Avg Visibility Task E2E Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:384", "format": "s", "label": null, "logBase": 1, "max": "1.6", "min": null, "show": true }, { "$$hashKey": "object:385", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 43 }, "hiddenSeries": false, "id": 36, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.50, sum(rate(task_latency_queue_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P50 Visibility Task E2E Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": "1.6", "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 43 }, "hiddenSeries": false, "id": 38, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(task_latency_processing_bucket{operation=~\"Visibility.*\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Visibility Task E2E Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": "6.4", "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 52 }, "id": 12, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 0, "y": 53 }, "hiddenSeries": false, "id": 40, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum (rate(visibility_persistence_requests{visibility_type=\"standard_visibility\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "exemplar": true, "expr": "sum (rate(visibility_persistence_errors{visibility_type=\"standard_visibility\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:634", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:635", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 53 }, "hiddenSeries": false, "id": 44, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum(rate(visibility_persistence_invalid_argument{visibility_type=\"standard_visibility\"}[1m]))", "interval": "", "legendFormat": "invalid argument", "refId": "A" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_resource_exhausted{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "resource exhausted", "refId": "B" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_condition_failed{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "condition failed", "refId": "C" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_timeout{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "timeout", "refId": "D" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_not_found{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "not found", "refId": "E" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_internal{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "internal", "refId": "F" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_unavailable{visibility_type=\"standard_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "unavailable", "refId": "G" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 0, "y": 63 }, "hiddenSeries": false, "id": 46, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum by (operation) (rate(visibility_persistence_requests{visibility_type=\"standard_visibility\"}[1m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": "", "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 63 }, "hiddenSeries": false, "id": 48, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum by (operation) (rate(visibility_persistence_errors{visibility_type=\"standard_visibility\"}[1m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 73 }, "hiddenSeries": false, "id": 56, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum by (operation) (rate(visibility_persistence_latency_sum{visibility_type=\"standard_visibility\"}[1m]))) / (sum by (operation) (rate(visibility_persistence_latency_count{visibility_type=\"standard_visibility\"}[1m])))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Avg Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 83 }, "hiddenSeries": false, "id": 60, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.50, sum(rate(visibility_persistence_latency_bucket{visibility_type=\"standard_visibility\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P50 Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 93 }, "hiddenSeries": false, "id": 66, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(visibility_persistence_latency_bucket{visibility_type=\"standard_visibility\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Standard persistence", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 53 }, "id": 10, "panels": [], "title": "Advanced persistence (Elasticsearch)", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 0, "y": 54 }, "hiddenSeries": false, "id": 42, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum (rate(visibility_persistence_requests{visibility_type=\"advanced_visibility\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "exemplar": true, "expr": "sum (rate(visibility_persistence_errors{visibility_type=\"advanced_visibility\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:409", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:410", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 54 }, "hiddenSeries": false, "id": 52, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum(rate(visibility_persistence_invalid_argument{visibility_type=\"advanced_visibility\"}[1m]))", "interval": "", "legendFormat": "invalid argument", "refId": "A" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_resource_exhausted{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "resource exhausted", "refId": "B" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_condition_failed{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "condition failed", "refId": "C" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_timeout{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "timeout", "refId": "D" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_not_found{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "not found", "refId": "E" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_internal{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "internal", "refId": "F" }, { "exemplar": true, "expr": "sum(rate(visibility_persistence_unavailable{visibility_type=\"advanced_visibility\"}[1m]))", "hide": false, "interval": "", "legendFormat": "unavailable", "refId": "G" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:465", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:466", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 0, "y": 64 }, "hiddenSeries": false, "id": 50, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum by (operation) (rate(visibility_persistence_requests{visibility_type=\"advanced_visibility\"}[1m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:494", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:495", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": "", "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 64 }, "hiddenSeries": false, "id": 54, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum by (operation) (rate(visibility_persistence_errors{visibility_type=\"advanced_visibility\"}[1m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:523", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:524", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 74 }, "hiddenSeries": false, "id": 58, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum by (operation) (rate(visibility_persistence_latency_sum{visibility_type=\"advanced_visibility\"}[1m]))) / (sum by (operation) (rate(visibility_persistence_latency_count{visibility_type=\"advanced_visibility\"}[1m])))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Avg Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:560", "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:561", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 84 }, "hiddenSeries": false, "id": 62, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.50, sum(rate(visibility_persistence_latency_bucket{visibility_type=\"advanced_visibility\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P50 Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:589", "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:590", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 94 }, "hiddenSeries": false, "id": 64, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(visibility_persistence_latency_bucket{visibility_type=\"advanced_visibility\"}[1m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:706", "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:707", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 104 }, "id": 8, "panels": [], "title": "Elasticsearch bulk processor", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 105 }, "hiddenSeries": false, "id": 68, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_requests{service=\"$service\"}[1m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_errors{service=\"$service\"}[1m])) by (http_status, le)", "interval": "", "legendFormat": "{{http_status}} errors", "refId": "B" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_retries{service=\"$service\"}[1m])) by (http_status, le)", "interval": "", "legendFormat": "{{http_status}} retryable errors", "refId": "C" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_corrupted_data{service=\"$service\"}[1m]))", "interval": "", "legendFormat": "corrupted data errors", "refId": "D" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_deadlock{service=\"$service\"}[1m]))", "interval": "", "legendFormat": "deadlock", "refId": "E" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_bulk_processor_duplicate_request{service=\"$service\"}[1m]))", "hide": false, "interval": "", "legendFormat": "duplicate request warning", "refId": "F" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:735", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:736", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": "", "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 105 }, "hiddenSeries": false, "id": 72, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_bulk_size_bucket{service=\"$service\"}[1m])) by (le))*1000", "interval": "", "legendFormat": "bulk size", "refId": "A" }, { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_queued_requests_bucket{service=\"$service\"}[1m])) by (le))*1000", "hide": false, "interval": "", "legendFormat": "queued requests", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Bulk Size/Queued Requests", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2445", "format": "none", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:2446", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": "", "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 113 }, "hiddenSeries": false, "id": 74, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_request_latency_bucket{service=\"$service\"}[1m])) by (le))", "hide": false, "interval": "", "legendFormat": "request latency", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 Total Request Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2501", "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:2502", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": "", "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 113 }, "hiddenSeries": false, "id": 70, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_wait_add_latency_bucket{service=\"$service\"}[1m])) by (le))", "interval": "", "legendFormat": "wait add latency", "refId": "A" }, { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_wait_start_latency_bucket{service=\"$service\"}[1m])) by (le))", "hide": false, "interval": "", "legendFormat": "wait start latency", "refId": "B" }, { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(elasticsearch_bulk_processor_commit_latency_bucket{service=\"$service\"}[1m])) by (le))", "hide": false, "interval": "", "legendFormat": "commit latency", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "P95 WaitAdd/WaitStart/Commit Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2501", "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:2502", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 121 }, "id": 14, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 122 }, "hiddenSeries": false, "id": 76, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum (rate(elasticsearch_document_parse_failures_counter{service=\"$service\"}[1m]))", "interval": "", "legendFormat": "doc parse errors", "refId": "A" }, { "exemplar": true, "expr": "sum (rate(elasticsearch_document_generate_failures_counter{service=\"$service\"}[1m]))", "interval": "", "legendFormat": "doc generate errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Doc Generate/Parse Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2727", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:2728", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 122 }, "hiddenSeries": false, "id": 78, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.1.5", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "add_search_attributes_workflow_success{service=\"$service\"}", "interval": "", "legendFormat": "success", "refId": "A" }, { "exemplar": true, "expr": "add_search_attributes_workflow_failure{service=\"$service\"}", "interval": "", "legendFormat": "errors", "refId": "B" }, { "exemplar": true, "expr": "add_search_attributes_failures{service=\"$service\"}", "hide": false, "interval": "", "legendFormat": "activity errors", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Add Search Attributes Workflow", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2727", "format": "none", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:2728", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Elasticsearch miscellaneous", "type": "row" } ], "refresh": false, "schemaVersion": 30, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Visibility", "uid": "gVq0CdNnk", "version": 4 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/clustermonitoring-kubernetes.json ================================================ { "annotations": { "list": [ { "$$hashKey": "object:218", "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "description": "This dashboard provides cluster admins with the ability to monitor nodes and identify workload bottlenecks. It can be deployed with PSPs enabled using the following helm chart - https://github.com/pivotal-cf/charts-grafana", "editable": true, "gnetId": 10000, "graphTooltip": 0, "id": 5, "iteration": 1596213608810, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 34, "panels": [], "repeat": null, "title": "Summary", "type": "row" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "editable": true, "error": false, "format": "percent", "gauge": { "maxValue": 100, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 5, "w": 8, "x": 0, "y": 1 }, "height": "180px", "id": 4, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (container_memory_working_set_bytes{id=\"/\",kubernetes_io_hostname=~\"^$Node$\"}) / sum (machine_memory_bytes{kubernetes_io_hostname=~\"^$Node$\"}) * 100", "format": "time_series", "interval": "10s", "intervalFactor": 1, "refId": "A", "step": 10 } ], "thresholds": "65, 90", "title": "Cluster memory usage", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "percent", "gauge": { "maxValue": 100, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 5, "w": 8, "x": 8, "y": 1 }, "height": "180px", "id": 6, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (rate (container_cpu_usage_seconds_total{id=\"/\",kubernetes_io_hostname=~\"^$Node$\"}[$interval])) / sum (machine_cpu_cores{kubernetes_io_hostname=~\"^$Node$\"}) * 100", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "", "refId": "A", "step": 10 } ], "thresholds": "65, 90", "title": "Cluster CPU usage ($interval avg)", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "percent", "gauge": { "maxValue": 100, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 5, "w": 8, "x": 16, "y": 1 }, "height": "180px", "id": 7, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (container_fs_usage_bytes{id=\"/\"}) / sum (container_fs_limit_bytes{id=\"/\"}) * 100", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "", "metric": "", "refId": "A", "step": 10 } ], "thresholds": "65, 90", "title": "Cluster filesystem usage", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 0, "y": 6 }, "height": "1px", "id": 9, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "20%", "prefix": "", "prefixFontSize": "20%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (container_memory_working_set_bytes{id=\"/\",kubernetes_io_hostname=~\"^$Node$\"})", "format": "time_series", "interval": "10s", "intervalFactor": 1, "refId": "A", "step": 10 } ], "thresholds": "", "title": "Used", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 4, "y": 6 }, "height": "1px", "id": 10, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (machine_memory_bytes{kubernetes_io_hostname=~\"^$Node$\"})", "format": "time_series", "interval": "10s", "intervalFactor": 1, "refId": "A", "step": 10 } ], "thresholds": "", "title": "Total", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 8, "y": 6 }, "height": "1px", "id": 11, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " cores", "postfixFontSize": "30%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (rate (container_cpu_usage_seconds_total{id=\"/\",kubernetes_io_hostname=~\"^$Node$\"}[$interval]))", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "", "refId": "A", "step": 10 } ], "thresholds": "", "title": "Used", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 12, "y": 6 }, "height": "1px", "id": 12, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " cores", "postfixFontSize": "30%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (machine_cpu_cores{kubernetes_io_hostname=~\"^$Node$\"})", "format": "time_series", "interval": "10s", "intervalFactor": 1, "refId": "A", "step": 10 } ], "thresholds": "", "title": "Total", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 16, "y": 6 }, "height": "1px", "id": 13, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (container_fs_usage_bytes{id=\"/\"})", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "", "refId": "A", "step": 10 } ], "thresholds": "", "title": "Used", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "format": "bytes", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "gridPos": { "h": 3, "w": 4, "x": 20, "y": 6 }, "height": "1px", "id": 14, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum (container_fs_limit_bytes{id=\"/\"})", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "", "refId": "A", "step": 10 } ], "thresholds": "", "title": "Total", "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, "id": 35, "panels": [], "repeat": null, "title": "Memory", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "fill": 0, "fillGradient": 0, "grid": {}, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 25, "legend": { "alignAsTable": true, "avg": true, "current": true, "hideEmpty": false, "max": false, "min": false, "rightSide": true, "show": true, "sideWidth": 200, "sort": "current", "sortDesc": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": true, "steppedLine": false, "targets": [ { "expr": "sum (container_memory_working_set_bytes{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\"}) by (pod)", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "{{ pod }}", "metric": "container_memory_usage:sort_desc", "refId": "A", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Container memory usage", "tooltip": { "msResolution": false, "shared": true, "sort": 2, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 17 }, "id": 37, "panels": [], "title": "CPU", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "TemporalMetrics", "decimals": 3, "editable": true, "error": false, "fill": 0, "fillGradient": 0, "grid": {}, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 18 }, "height": "", "hiddenSeries": false, "id": 17, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": false, "min": false, "rightSide": true, "show": true, "sort": "current", "sortDesc": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": true, "steppedLine": false, "targets": [ { "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\"}[$interval])) by (container)", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "{{ container }}", "metric": "container_cpu", "refId": "A", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Container CPU usage ($interval avg)", "tooltip": { "msResolution": true, "shared": true, "sort": 2, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "none", "label": "cores", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 25 }, "id": 33, "panels": [], "repeat": null, "title": "Network I/O", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { "h": 5, "w": 24, "x": 0, "y": 26 }, "height": "200px", "hiddenSeries": false, "id": 32, "legend": { "alignAsTable": false, "avg": true, "current": true, "max": false, "min": false, "rightSide": false, "show": false, "sideWidth": 200, "sort": "current", "sortDesc": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "connected", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate (container_network_receive_bytes_total{kubernetes_io_hostname=~\"^$Node$\"}[$interval]))", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "Received", "metric": "network", "refId": "A", "step": 10 }, { "expr": "- sum (rate (container_network_transmit_bytes_total{kubernetes_io_hostname=~\"^$Node$\"}[$interval]))", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "Sent", "metric": "network", "refId": "B", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Network I/O pressure", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "TemporalMetrics", "decimals": 2, "editable": true, "error": false, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 31 }, "hiddenSeries": false, "id": 16, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": false, "min": false, "rightSide": true, "show": true, "sideWidth": 200, "sort": "current", "sortDesc": true, "total": false, "values": true }, "lines": true, "linewidth": 2, "links": [], "nullPointMode": "connected", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate (container_network_receive_bytes_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\"}[$interval])) by (container)", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "-> {{ container }}", "metric": "network", "refId": "A", "step": 10 }, { "expr": "- sum (rate (container_network_transmit_bytes_total{image!=\"\",name=~\"^k8s_.*\",kubernetes_io_hostname=~\"^$Node$\"}[$interval])) by (container)", "format": "time_series", "interval": "10s", "intervalFactor": 1, "legendFormat": "<- {{ container }}", "metric": "network", "refId": "B", "step": 10 } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Container network I/O ($interval avg)", "tooltip": { "msResolution": false, "shared": true, "sort": 2, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } } ], "refresh": "10s", "schemaVersion": 22, "style": "dark", "tags": [ "kubernetes" ], "templating": { "list": [ { "auto": true, "auto_count": 20, "auto_min": "2m", "current": { "selected": false, "text": "auto", "value": "$__auto_interval_interval" }, "hide": 2, "label": null, "name": "interval", "options": [ { "selected": true, "text": "auto", "value": "$__auto_interval_interval" }, { "selected": false, "text": "1m", "value": "1m" }, { "selected": false, "text": "10m", "value": "10m" }, { "selected": false, "text": "30m", "value": "30m" }, { "selected": false, "text": "1h", "value": "1h" }, { "selected": false, "text": "6h", "value": "6h" }, { "selected": false, "text": "12h", "value": "12h" }, { "selected": false, "text": "1d", "value": "1d" }, { "selected": false, "text": "7d", "value": "7d" }, { "selected": false, "text": "14d", "value": "14d" }, { "selected": false, "text": "30d", "value": "30d" } ], "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", "refresh": 2, "skipUrlSync": false, "type": "interval" }, { "current": { "selected": false, "text": "default", "value": "default" }, "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "datasource", "options": [], "query": "prometheus", "refresh": 1, "regex": "", "skipUrlSync": false, "type": "datasource" }, { "allValue": ".*", "current": { "selected": false, "text": "All", "value": "$__all" }, "datasource": "TemporalMetrics", "definition": "", "hide": 0, "includeAll": true, "index": -1, "label": null, "multi": false, "name": "Node", "options": [], "query": "label_values(kubernetes_io_hostname)", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false } ] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "timezone": "browser", "title": "Cluster Monitoring for Kubernetes", "uid": "JABGX_-mz", "variables": { "list": [] }, "version": 2 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/frontend-service-specific.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 7, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 7, "panels": [], "title": "Frontend", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(service_requests{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(service_errors{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 1 }, "hiddenSeries": false, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_requests{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_errors_entity_not_found{service_name=\"frontend\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Entity Not Found", "refId": "A" }, { "expr": "sum(rate(service_errors_execution_already_started{service_name=\"frontend\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Execution Already Started", "refId": "B" }, { "expr": "sum(rate(service_errors_resource_exhausted{service_name=\"frontend\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Resource Exhausted", "refId": "C" }, { "expr": "sum by (__name__) (rate({__name__=~\"service_errors_.*\", service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "{{ $__name__ }}", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(service_latency_bucket{service_name=\"frontend\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 19 }, "id": 11, "panels": [], "title": "Persistence", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 10, "x": 0, "y": 20 }, "hiddenSeries": false, "id": 9, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(persistence_requests{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(persistence_errors{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 10, "y": 20 }, "hiddenSeries": false, "id": 13, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(persistence_requests{service_name=\"frontend\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 17, "y": 20 }, "hiddenSeries": false, "id": 14, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 30 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(persistence_latency_bucket{service_name=\"frontend\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 40 }, "id": 20, "panels": [], "title": "History Client", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 9, "x": 0, "y": 41 }, "hiddenSeries": false, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(client_requests{service_name=\"frontend\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(client_errors{service_name=\"frontend\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 7, "x": 9, "y": 41 }, "hiddenSeries": false, "id": 21, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_requests{service_name=\"frontend\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 41 }, "hiddenSeries": false, "id": 22, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_errors{service_name=\"frontend\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 50 }, "hiddenSeries": false, "id": 24, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(client_latency_bucket{service_name=\"frontend\", service_role=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 59 }, "id": 27, "panels": [], "title": "Matching Client", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 9, "x": 0, "y": 60 }, "hiddenSeries": false, "id": 25, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(client_requests{service_name=\"frontend\", service_role=\"matching\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(client_errors{service_name=\"frontend\", service_role=\"matching\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 7, "x": 9, "y": 60 }, "hiddenSeries": false, "id": 28, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_requests{service_name=\"frontend\", service_role=\"matching\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 60 }, "hiddenSeries": false, "id": 29, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_errors{service_name=\"frontend\", service_role=\"matching\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 69 }, "hiddenSeries": false, "id": 30, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(client_latency_bucket{service_name=\"frontend\", service_role=\"matching\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "refresh": false, "schemaVersion": 22, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ] }, "timezone": "", "title": "Frontend Service Dashboard", "uid": "SxRYJXZMz", "variables": { "list": [] }, "version": 3 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/history-service-specific.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 8, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 7, "panels": [], "title": "History Service", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 7, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(service_requests{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(service_errors{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 7, "y": 1 }, "hiddenSeries": false, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_requests{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 13, "y": 1 }, "hiddenSeries": false, "id": 50, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate({__name__=~\"service_errors_.*\", service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 5, "x": 19, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_errors_entity_not_found{service_name=\"history\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Entity Not Found", "refId": "A" }, { "expr": "sum(rate(service_errors_execution_already_started{service_name=\"history\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Execution Already Started", "refId": "B" }, { "expr": "sum(rate(service_errors_resource_exhausted{service_name=\"history\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Resource Exhausted", "refId": "C" }, { "expr": "sum by (__name__) (rate({__name__=~\"service_errors_.*\", service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "{{ $__name__ }}", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(service_latency_bucket{service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 19 }, "id": 55, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 0, "y": 4 }, "hiddenSeries": false, "id": 52, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(task_requests{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(task_errors{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 6, "y": 4 }, "hiddenSeries": false, "id": 53, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_requests{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 12, "y": 4 }, "hiddenSeries": false, "id": 57, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_errors{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 18, "y": 4 }, "hiddenSeries": false, "id": 60, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(task_errors_discarded{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "discarded", "refId": "A" }, { "expr": "sum (rate(task_errors_limit_exceeded_counter{operation=~\"TransferActive.*\"}[5m]))", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Errors Breakdown", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 13 }, "hiddenSeries": false, "id": 59, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_processing_bucket{operation=~\"TransferActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Processing Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 22 }, "hiddenSeries": false, "id": 61, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_bucket{operation=~\"TransferActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Total Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 22 }, "hiddenSeries": false, "id": 63, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_queue_bucket{operation=~\"TransferActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Queue Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 22 }, "hiddenSeries": false, "id": 62, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_attempt_bucket{operation=~\"TransferActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "hide": true, "interval": "", "legendFormat": "{{ operation }}", "refId": "A" }, { "expr": "sum by (operation) (rate(task_attempt_sum[5m]))", "hide": true, "interval": "", "legendFormat": "", "refId": "B" }, { "expr": "histogram_quantile(100, sum(rate(task_attempt_bucket{operation=\"TransferActiveTaskCommand\"}[5m])) by (le))", "format": "time_series", "hide": true, "instant": false, "interval": "", "intervalFactor": 1, "legendFormat": "", "refId": "C" }, { "expr": "histogram_quantile(0.95, sum(rate(task_attempt_bucket{operation=\"TransferActiveTaskCommand\", service_name=\"history\"}[5m])) by (operation, le))", "hide": true, "interval": "", "legendFormat": "", "refId": "D" }, { "expr": "sum(rate(task_attempt_bucket{operation=\"TransferActiveTaskCommand\", service_name=\"history\"}[5m])) by (le)", "interval": "", "legendFormat": "", "refId": "E" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Transfer Task Attempt Stats", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "ns", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Transfer Tasks Processing", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 20 }, "id": 84, "panels": [], "title": "Timer Tasks Processing", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 0, "y": 21 }, "hiddenSeries": false, "id": 76, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(task_requests{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(task_errors{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 6, "y": 21 }, "hiddenSeries": false, "id": 78, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_requests{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 12, "y": 21 }, "hiddenSeries": false, "id": 80, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(task_errors{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 18, "y": 21 }, "hiddenSeries": false, "id": 82, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(task_errors_discarded{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "discarded", "refId": "A" }, { "expr": "sum (rate(task_errors_limit_exceeded_counter{operation=~\"TimerActive.*\"}[5m]))", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Errors Breakdown", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 30 }, "hiddenSeries": false, "id": 86, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_processing_bucket{operation=~\"TimerActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Processing Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 39 }, "hiddenSeries": false, "id": 88, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_bucket{operation=~\"TimerActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Total Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 39 }, "hiddenSeries": false, "id": 90, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_latency_queue_bucket{operation=~\"TimerActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Queue Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 39 }, "hiddenSeries": false, "id": 92, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(task_attempt_bucket{operation=~\"TimerActive.*\", service_name=\"history\"}[5m])) by (operation, le))", "hide": true, "interval": "", "legendFormat": "{{ operation }}", "refId": "A" }, { "expr": "sum by (operation) (rate(task_attempt_sum[5m]))", "hide": true, "interval": "", "legendFormat": "", "refId": "B" }, { "expr": "histogram_quantile(100, sum(rate(task_attempt_bucket{operation=\"TimerActiveTaskCommand\"}[5m])) by (le))", "format": "time_series", "hide": true, "instant": false, "interval": "", "intervalFactor": 1, "legendFormat": "", "refId": "C" }, { "expr": "histogram_quantile(0.95, sum(rate(task_attempt_bucket{operation=\"TimerActiveTaskCommand\", service_name=\"history\"}[5m])) by (operation, le))", "hide": true, "interval": "", "legendFormat": "", "refId": "D" }, { "expr": "sum(rate(task_attempt_bucket{operation=\"TimerActiveTaskCommand\", service_name=\"history\"}[5m])) by (le)", "interval": "", "legendFormat": "", "refId": "E" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Active Timer Task Attempt Stats", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "ns", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 48 }, "id": 96, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 49 }, "hiddenSeries": false, "id": 94, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation)(rate(cache_requests{cache_type=\"mutablestate\"}[5m]))", "hide": false, "interval": "", "legendFormat": "{{operation}} - requests", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Cache Requests By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 49 }, "hiddenSeries": false, "id": 101, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation)(rate(cache_miss{cache_type=\"mutablestate\"}[5m]))", "interval": "", "legendFormat": "{{operation}} - cache_miss", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Cache Miss By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 57 }, "hiddenSeries": false, "id": 100, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"mutablestate\", operation!~\"HistoryCacheGetCurrentExecution\"}[5m]))", "hide": false, "interval": "", "legendFormat": "cache_requests", "refId": "B" }, { "expr": "sum(rate(cache_errors{cache_type=\"mutablestate\", operation!~\"HistoryCacheGetCurrentExecution\"}[5m]))", "interval": "", "legendFormat": "cache_failures", "refId": "C" }, { "expr": "sum(rate(cache_miss{cache_type=\"mutablestate\", operation!~\"HistoryCacheGetCurrentExecution\"}[5m]))", "interval": "", "legendFormat": "cache_miss", "refId": "D" }, { "expr": "sum(rate(acquire_lock_failed{cache_type=\"mutablestate\", operation!~\"HistoryCacheGetCurrentExecution\"}[5m]))", "interval": "", "legendFormat": "acquire_lock_failed", "refId": "E" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Cache", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 57 }, "hiddenSeries": false, "id": 97, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(cache_latency_bucket{cache_type=\"mutablestate\", operation!~\"HistoryCacheGetCurrentExecution\"}[5m])) by (le))", "interval": "", "legendFormat": "latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Cache Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 65 }, "hiddenSeries": false, "id": 98, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"mutablestate\", operation=\"HistoryCacheGetCurrentExecution\"}[5m]))", "hide": false, "interval": "", "legendFormat": "requests", "refId": "B" }, { "expr": "sum(rate(cache_errors{cache_type=\"mutablestate\", operation=\"HistoryCacheGetCurrentExecution\"}[5m]))", "interval": "", "legendFormat": "failures", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Load Counts", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 65 }, "hiddenSeries": false, "id": 99, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(cache_latency_bucket{cache_type=\"mutablestate\", operation=\"HistoryCacheGetCurrentExecution\"}[5m])) by (le))", "interval": "", "legendFormat": "latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Mutable State Load Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 73 }, "hiddenSeries": false, "id": 103, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreate\"}[5m]))", "hide": false, "interval": "", "legendFormat": "cache_requests", "refId": "B" }, { "expr": "sum(rate(cache_errors{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreate\"}[5m]))", "interval": "", "legendFormat": "cache_errors", "refId": "A" }, { "expr": "sum(rate(cache_miss{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreate\"}[5m]))", "interval": "", "legendFormat": "cache_miss", "refId": "C" }, { "expr": "sum(rate(acquire_lock_failed{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreate\"}[5m]))", "interval": "", "legendFormat": "acquire_lock_failed", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "GetOrCreate", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 73 }, "hiddenSeries": false, "id": 102, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreateCurrent\"}[5m]))", "hide": false, "interval": "", "legendFormat": "cache_requests", "refId": "B" }, { "expr": "sum(rate(cache_errors{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreateCurrent\"}[5m]))", "interval": "", "legendFormat": "cache_errors", "refId": "A" }, { "expr": "sum(rate(cache_miss{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreateCurrent\"}[5m]))", "interval": "", "legendFormat": "cache_miss", "refId": "C" }, { "expr": "sum(rate(acquire_lock_failed{cache_type=\"mutablestate\", operation=\"HistoryCacheGetOrCreateCurrent\"}[5m]))", "interval": "", "legendFormat": "acquire_lock_failed", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "GetOrCreateCurrent", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Mutable State Cache", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 49 }, "id": 107, "panels": [], "title": "Events Cache", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 50 }, "hiddenSeries": false, "id": 115, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation)(rate(cache_requests{cache_type=\"events\"}[5m]))", "interval": "", "legendFormat": "", "refId": "A" }, { "expr": "sum by (operation) (rate(cache_miss{cache_type=\"events\"}[5m]))", "interval": "", "legendFormat": "{{ operation }} - cache_miss", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Events Cache - Overview", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 58 }, "hiddenSeries": false, "id": 105, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation)(rate(cache_requests{cache_type=\"events\", operation=\"EventsCacheGetEvent\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum by (operation)(rate(cache_miss{cache_type=\"events\", operation=\"EventsCacheGetEvent\"}[5m]))", "interval": "", "legendFormat": "cache_miss", "refId": "B" }, { "expr": "sum by (operation)(rate(cache_errors{cache_type=\"events\", operation=\"EventsCacheGetEvent\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Get Events", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 58 }, "hiddenSeries": false, "id": 109, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(cache_latency_bucket{cache_type=\"events\", operation=\"EventsCacheGetEvent\"}[5m])) by (le))", "interval": "", "legendFormat": "latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Get Events Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 66 }, "hiddenSeries": false, "id": 110, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"events\", operation=\"EventsCachePutEvent\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Put Events", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 66 }, "hiddenSeries": false, "id": 111, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(cache_latency_bucket{cache_type=\"events\", operation=\"EventsCachePutEvent\"}[5m])) by (le))", "interval": "", "legendFormat": "latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Put Events Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 74 }, "hiddenSeries": false, "id": 112, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(cache_requests{cache_type=\"events\", operation=\"EventsCacheGetFromStore\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Get Events From Store", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 74 }, "hiddenSeries": false, "id": 113, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(cache_latency_bucket{cache_type=\"events\", operation=\"EventsCacheGetFromStore\"}[5m])) by (le))", "interval": "", "legendFormat": "latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Get Events From Store Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 82 }, "id": 119, "panels": [], "title": "Workflow Task Insights", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 83 }, "hiddenSeries": false, "id": 117, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (commandType) (rate(command{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "interval": "", "legendFormat": "{{commandType}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 91 }, "hiddenSeries": false, "id": 128, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_requests{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "hide": false, "interval": "", "legendFormat": "commands_complete", "refId": "A" }, { "expr": "sum(rate(complete_workflow_task_sticky_enabled_count{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "hide": false, "interval": "", "legendFormat": "sticky_tasks", "refId": "B" }, { "expr": "sum(rate(complete_workflow_task_sticky_disabled_count{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "interval": "", "legendFormat": "non_sticky_tasks", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sticky Vs Non Sticky", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 91 }, "hiddenSeries": false, "id": 121, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(failed_workflow_tasks{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "interval": "", "legendFormat": "failed", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Failed Workflow Task", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 99 }, "hiddenSeries": false, "id": 122, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(empty_completion_commands{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "interval": "", "legendFormat": "empty_decision", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Empty Workflow Tasks", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 99 }, "hiddenSeries": false, "id": 123, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(multiple_completion_commands{service_name=\"history\", operation=\"RespondWorkflowTaskCompleted\"}[5m]))", "interval": "", "legendFormat": "empty_workflow", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Multiple Complete Workflows", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 107 }, "id": 127, "panels": [], "title": "Mutable State Insights", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 108 }, "hiddenSeries": false, "id": 125, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(stale_mutable_state{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Stale Mutable State", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 116 }, "id": 67, "panels": [], "title": "Shard Controller", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 117 }, "hiddenSeries": false, "id": 65, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(acquire_shards_count[5m]))", "interval": "", "legendFormat": "acquire", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Acquire Shards Count", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 117 }, "hiddenSeries": false, "id": 69, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(acquire_shards_latency_bucket{service_name=\"history\"}[5m])) by (le))", "interval": "", "legendFormat": "acquire_latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Acquire Shards Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 125 }, "hiddenSeries": false, "id": 71, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(shard_closed_count[5m]))", "interval": "", "legendFormat": "shards_closed", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Shards Closed", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 125 }, "hiddenSeries": false, "id": 73, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(sharditem_created_count[5m]))", "interval": "", "legendFormat": "item_created", "refId": "A" }, { "expr": "sum(rate(sharditem_removed_count[5m]))", "interval": "", "legendFormat": "item_removed", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Shard Item Counts", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 133 }, "hiddenSeries": false, "id": 74, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(sharditem_acquisition_latency{service_name=\"history\"}[5m])) by (le))", "interval": "", "legendFormat": "acquire_latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Shard Item Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 141 }, "id": 11, "panels": [], "title": "Persistence", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 10, "x": 0, "y": 142 }, "hiddenSeries": false, "id": 9, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(persistence_requests{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(persistence_errors{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 10, "y": 142 }, "hiddenSeries": false, "id": 13, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(persistence_requests{service_name=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 17, "y": 142 }, "hiddenSeries": false, "id": 14, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 152 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(persistence_latency_bucket{service_name=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "refresh": false, "schemaVersion": 22, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ] }, "timezone": "", "title": "History Service Dashboards", "uid": "0WdRDEVMk", "variables": { "list": [] }, "version": 1 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/main.yaml ================================================ ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/matching-service-specific.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 17, "links": [], "panels": [ { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 7, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(service_requests{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(service_errors{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 8, "y": 1 }, "hiddenSeries": false, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_requests{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_errors_entity_not_found{service_name=\"matching\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Entity Not Found", "refId": "A" }, { "expr": "sum(rate(service_errors_execution_already_started{service_name=\"matching\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Execution Already Started", "refId": "B" }, { "expr": "sum(rate(service_errors_resource_exhausted{service_name=\"matching\"}[5m]))", "hide": false, "interval": "", "legendFormat": "Resource Exhausted", "refId": "C" }, { "expr": "sum by (__name__) (rate({__name__=~\"service_errors_.*\", service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "{{ $__name__ }}", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(service_latency_bucket{service_name=\"matching\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Matching", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 1 }, "id": 28, "panels": [], "title": "Tasks", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 2 }, "hiddenSeries": false, "id": 26, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(poll_success[5m]))", "interval": "", "legendFormat": "Success", "refId": "A" }, { "expr": "sum(rate(poll_timeouts[5m]))", "interval": "", "legendFormat": "Timeouts", "refId": "B" }, { "expr": "sum(rate(poll_success_sync[5m]))", "interval": "", "legendFormat": "Sync Matches", "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Polls", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 2 }, "hiddenSeries": false, "id": 30, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(sync_throttle_count[5m]))", "interval": "", "legendFormat": "Throttle", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Throttled Requests", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 43, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(syncmatch_latency_bucket{service_name=~\"matching\"}[5m])) by (operation, le))", "hide": false, "interval": "", "legendFormat": "sync - {{operation}}", "refId": "A" }, { "expr": "", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sync Match - Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, "hiddenSeries": false, "id": 44, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(asyncmatch_latency_bucket{service_name=~\"matching\"}[5m])) by (operation, le))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "A" }, { "expr": "", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Async Match - Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 18 }, "hiddenSeries": false, "id": 41, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(forwarded[5m]))", "interval": "", "legendFormat": "forwarded_api_calls", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Forwarded Calls", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 25 }, "hiddenSeries": false, "id": 46, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(local_to_local_matches[5m])) ", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Local To Local Match", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 25 }, "hiddenSeries": false, "id": 47, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(local_to_remote_matches[5m])) ", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Local To Remote Match", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 33 }, "hiddenSeries": false, "id": 48, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(remote_to_local_matches[5m])) ", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Remote To Local Match", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 33 }, "hiddenSeries": false, "id": 49, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(remote_to_remote_matches[5m])) ", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Remote To Remote Match", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 41 }, "id": 34, "panels": [], "title": "Tasklist Manager", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 42 }, "hiddenSeries": false, "id": 32, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(lease_requests[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(lease_failures[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Lease Request Vs Failures", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 42 }, "hiddenSeries": false, "id": 39, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(tasks_expired[5m]))", "interval": "", "legendFormat": "expired_tasks", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Expired Tasks", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 50 }, "hiddenSeries": false, "id": 37, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(sync_throttle_count[5m]))", "interval": "", "legendFormat": "sync_throttle", "refId": "A" }, { "expr": "sum(rate(buffer_throttle_count[5m]))", "interval": "", "legendFormat": "buffer_throttle", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Throttle", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 50 }, "hiddenSeries": false, "id": 35, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(condition_failed_errors[5m]))", "interval": "", "legendFormat": "condition_failed", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Error Breakdown", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 58 }, "id": 11, "panels": [], "title": "Persistence", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 10, "x": 0, "y": 59 }, "hiddenSeries": false, "id": 9, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(persistence_requests{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(persistence_errors{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 10, "y": 59 }, "hiddenSeries": false, "id": 13, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(persistence_requests{service_name=\"matching\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 17, "y": 59 }, "hiddenSeries": false, "id": 14, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors Break Down", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 69 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(persistence_latency_bucket{service_name=\"matching\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 79 }, "id": 20, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 9, "x": 0, "y": 3 }, "hiddenSeries": false, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(client_requests{service_name=\"matching\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(client_errors{service_name=\"matching\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Vs Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 7, "x": 9, "y": 3 }, "hiddenSeries": false, "id": 21, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_requests{service_name=\"matching\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 3 }, "hiddenSeries": false, "id": 22, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_errors{service_name=\"matching\", service_role=\"history\"}[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Errors By Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 12 }, "hiddenSeries": false, "id": 24, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(client_latency_bucket{service_name=\"matching\", service_role=\"history\"}[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "History Client", "type": "row" } ], "refresh": false, "schemaVersion": 22, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ] }, "timezone": "", "title": "Matching Service Dashboard", "uid": "wuh-8uZGk", "variables": { "list": [] }, "version": 4 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/queries-metrics.json ================================================ { "__inputs": [ { "name": "DS_PROMETHEUS", "label": "Prometheus", "description": "", "type": "datasource", "pluginId": "prometheus", "pluginName": "Prometheus" } ], "__requires": [ { "type": "grafana", "id": "grafana", "name": "Grafana", "version": "8.0.0" }, { "type": "panel", "id": "graph", "name": "Graph", "version": "" }, { "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "1.0.0" } ], "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "description": "Dashboard to monitor database query performance", "editable": true, "gnetId": null, "graphTooltip": 0, "id": null, "links": [], "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 0 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThresholds": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(db_query_counter_total[$__rate_interval]))", "interval": "", "legendFormat": "{{endpoint}} {{method}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "DB Query Rate", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Queries per second", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 0 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThresholds": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(db_query_latency_summary_sum[$__rate_interval])) / sum(rate(db_query_latency_summary_count[$__rate_interval]))", "interval": "", "legendFormat": "Avg", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "DB Query Latency Summary", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": "Latency (ms)", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "datasource": "agents-api", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 9 }, "id": 6, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi", "sort": "none" } }, "targets": [ { "expr": "histogram_quantile(0.5, rate(db_query_latency_hist_bucket[$__rate_interval]))", "interval": "", "legendFormat": "P50", "refId": "A" }, { "expr": "histogram_quantile(0.9, rate(db_query_latency_hist_bucket[$__rate_interval]))", "interval": "", "legendFormat": "P90", "refId": "B" }, { "expr": "histogram_quantile(0.99, rate(db_query_latency_hist_bucket[$__rate_interval]))", "interval": "", "legendFormat": "P99", "refId": "C" } ], "title": "DB Query Latency Histogram", "type": "timeseries" }, { "datasource": "agents-api", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 9 }, "id": 8, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi", "sort": "none" } }, "targets": [ { "expr": "sum(rate(db_query_latency_hist_sum[$__rate_interval])) / sum(rate(db_query_latency_hist_count[$__rate_interval]))", "interval": "", "legendFormat": "Avg", "refId": "A" } ], "title": "DB Query Average Latency", "type": "timeseries" } ], "refresh": "5s", "schemaVersion": 36, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "DB Query Performance Dashboard", "uid": "db-query-performance", "version": 1 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/requests-metrics.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "agents-api", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 1, "links": [], "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fill": 1, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 0 }, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket[$__rate_interval])) by (le))", "interval": "", "legendFormat": "50th Percentile", "refId": "A" }, { "expr": "histogram_quantile(0.90, sum(rate(http_request_duration_seconds_bucket[$__rate_interval])) by (le))", "interval": "", "legendFormat": "90th Percentile", "refId": "B" }, { "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[$__rate_interval])) by (le))", "interval": "", "legendFormat": "95th Percentile", "refId": "C" }, { "expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[$__rate_interval])) by (le))", "interval": "", "legendFormat": "99th Percentile", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Latency Percentiles", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fill": 1, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 0 }, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(http_request_duration_seconds_sum[$__rate_interval])) / sum(rate(http_request_duration_seconds_count[$__rate_interval]))", "interval": "", "legendFormat": "Average Latency", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Latency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fill": 1, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 9 }, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(http_requests_total[$__rate_interval]))", "interval": "", "legendFormat": "Total Requests", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Request Frequency", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Requests/s", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fill": 1, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 18 }, "id": 7, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(http_requests_total)", "interval": "", "legendFormat": "Total Requests", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Total Requests Count", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Total Requests", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "agents-api", "fill": 1, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 27 }, "id": 8, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(http_requests_total{status=~\"4..\"}[$__rate_interval]))", "interval": "", "legendFormat": "4xx Errors", "refId": "A" }, { "expr": "sum(rate(http_requests_total{status=~\"5..\"}[$__rate_interval]))", "interval": "", "legendFormat": "5xx Errors", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "HTTP Errors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Errors/s", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "refresh": "5s", "schemaVersion": 36, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "FastAPI Request Latency, Count, and HTTP Errors", "uid": "fastapi-latency-count", "version": 1 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/sdk-general.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 7, "iteration": 1601313172987, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 8, "panels": [], "title": "RPC Overview ($Namespace)", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 8, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(temporal_request{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(temporal_request_failure{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "failures", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Requests Vs Failures", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 8, "y": 1 }, "hiddenSeries": false, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) ((rate(temporal_request{namespace=~\"$Namespace\"}[5m])))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "RPC Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 9, "x": 15, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(temporal_request_failure{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "RPC Failures Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 11 }, "hiddenSeries": false, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum by (namespace, operation, le) (rate(temporal_request_latency_bucket{namespace=~\"$Namespace\"}[5m])))", "interval": "", "legendFormat": "{{ namespace }} - {{ operation }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "RPC Latencies ($Namespace)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 20 }, "id": 12, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 2 }, "hiddenSeries": false, "id": 10, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(temporal_workflow_completed{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "success", "refId": "A" }, { "expr": "sum(rate(temporal_workflow_failed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "failed", "refId": "B" }, { "expr": "sum(rate(temporal_workflow_canceled{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "canceled", "refId": "C" }, { "expr": "sum(rate(temporal_workflow_continue_as_new{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "continued_as_new", "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Completion", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 2 }, "hiddenSeries": false, "id": 15, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_endtoend_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow End-To-End Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_completed{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Success By Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, "hiddenSeries": false, "id": 17, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_failed{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Failures By Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Workflows", "type": "row" }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 21 }, "id": 20, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 12 }, "hiddenSeries": false, "id": 21, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_task_queue_poll_succeed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Throughput By WorkflowType", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 12 }, "hiddenSeries": false, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_workflow_task_queue_poll_succeed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Throughput By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 20 }, "hiddenSeries": false, "id": 14, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_workflow_task_queue_poll_empty{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "Empty Poll - {{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Empty Polls", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, "hiddenSeries": false, "id": 22, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_schedule_to_start_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Backlog By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, "hiddenSeries": false, "id": 23, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_schedule_to_start_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Backlog By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 36 }, "hiddenSeries": false, "id": 28, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_workflow_task_execution_failed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Failed By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 36 }, "hiddenSeries": false, "id": 29, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_task_execution_failed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Failed By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 44 }, "hiddenSeries": false, "id": 25, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_execution_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Execution Latency By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 44 }, "hiddenSeries": false, "id": 24, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_execution_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Execution Latency By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 52 }, "hiddenSeries": false, "id": 27, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_replay_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Replay Latency By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 52 }, "hiddenSeries": false, "id": 26, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_replay_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Workflow Task Replay Latency By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Workflow Task Processing", "type": "row" }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 22 }, "id": 42, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 38, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_activity_execution_latency_count{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity Throughput By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, "hiddenSeries": false, "id": 40, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, activity_type) (rate(temporal_activity_execution_latency_count{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity Throughput By Activity Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 9 }, "hiddenSeries": false, "id": 44, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace, activity_type) (rate(temporal_activity_execution_failed{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Failed Activity by Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 18 }, "hiddenSeries": false, "id": 46, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_execution_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, activity_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity Execution Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 18 }, "hiddenSeries": false, "id": 48, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_endtoend_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, activity_type, le))", "interval": "", "legendFormat": "", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity End-To-End Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Activities", "type": "row" }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 }, "id": 34, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, "hiddenSeries": false, "id": 31, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_activity_poll_no_task{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Empty Activity Polls By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, "hiddenSeries": false, "id": 32, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_schedule_to_start_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity Task Backlog By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurationms", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 14 }, "hiddenSeries": false, "id": 36, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_schedule_to_start_latency_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, activity_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Activity Task Backlog By Activity Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "dtdurationms", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Activity Task Processing", "type": "row" }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 24 }, "id": 57, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 9, "x": 0, "y": 6 }, "hiddenSeries": false, "id": 50, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_sticky_cache_hit{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sticky Cache Hit", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 7, "x": 9, "y": 6 }, "hiddenSeries": false, "id": 52, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_sticky_cache_miss{namespace=~\"Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sticky Cache Miss", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 6 }, "hiddenSeries": false, "id": 53, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (rate(temporal_sticky_cache_total_forced_eviction{namespace=~\"Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sticky Cache Forced Eviction", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 14 }, "hiddenSeries": false, "id": 55, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (namespace) (temporal_sticky_cache_size)", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Sticky Cache Size", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } } ], "title": "Sticky Cache", "type": "row" } ], "schemaVersion": 22, "style": "dark", "tags": [], "templating": { "list": [ { "allValue": ".*", "current": { "selected": true, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "label": null, "multi": false, "name": "Namespace", "options": [ { "selected": true, "text": "All", "value": "$__all" } ], "skipUrlSync": false, "type": "custom" }, { "allValue": ".*", "current": { "selected": true, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "label": null, "multi": false, "name": "WorkflowType", "options": [ { "selected": true, "text": "All", "value": "$__all" } ], "skipUrlSync": false, "type": "custom" } ] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ] }, "timezone": "", "title": "SDK Metrics", "variables": { "list": [] }, "version": 2 } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/sdk-java.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "datasource", "uid": "grafana" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": false, "tags": [], "type": "dashboard" }, "type": "dashboard" } ] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 11, "links": [], "liveNow": false, "panels": [ { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 8, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "RPC Overview ($Namespace)", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 8, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_request_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "requests", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_request_failure_total{namespace=\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "failures", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Requests Vs Failures", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:147", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:148", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 7, "x": 8, "y": 1 }, "hiddenSeries": false, "id": 5, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (operation) ((rate(temporal_request_total{namespace=~\"$Namespace\"}[5m])))", "interval": "", "legendFormat": "{{ operation }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "RPC Requests Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:307", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:308", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 9, "x": 15, "y": 1 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (operation) (rate(temporal_request_failure_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ operation }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "RPC Failures Per Operation", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:388", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:389", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 11 }, "hiddenSeries": false, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum by (namespace, operation, le) (rate(temporal_request_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])))", "interval": "", "legendFormat": "{{ namespace }} - {{ operation }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "RPC Latencies ($Namespace)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:548", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:549", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 20 }, "id": 12, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "Workflows", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 21 }, "hiddenSeries": false, "id": 10, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_workflow_completed_total{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "success", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_workflow_failed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "failed", "range": true, "refId": "B" }, { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_workflow_canceled_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "canceled", "range": true, "refId": "C" }, { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum(rate(temporal_workflow_continue_as_new_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "continued_as_new", "range": true, "refId": "D" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Completion", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:629", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:630", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 21 }, "hiddenSeries": false, "id": 15, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_endtoend_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Workflow End-To-End Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:710", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:711", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 29 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_completed_total{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Success By Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:791", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:792", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 29 }, "hiddenSeries": false, "id": 17, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_failed_total{namespace=~\"$Namespace\"}[5m]))", "hide": false, "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Failures By Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:872", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:873", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 37 }, "id": 20, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "Workflow Task Processing", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 38 }, "hiddenSeries": false, "id": 21, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_task_queue_poll_succeed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ workflow_type }}", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Throughput By WorkflowType", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:668", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:669", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 38 }, "hiddenSeries": false, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_workflow_task_queue_poll_succeed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Throughput By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:757", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:758", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 46 }, "hiddenSeries": false, "id": 14, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_workflow_task_queue_poll_empty_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "Empty Poll - {{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Empty Polls", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:846", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:847", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 54 }, "hiddenSeries": false, "id": 22, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_schedule_to_start_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Backlog By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:959", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:960", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 54 }, "hiddenSeries": false, "id": 23, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_schedule_to_start_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Backlog By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:1040", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:1041", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 62 }, "hiddenSeries": false, "id": 28, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_workflow_task_execution_failed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Failed By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:1200", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:1201", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 62 }, "hiddenSeries": false, "id": 29, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, workflow_type) (rate(temporal_workflow_task_execution_failed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Failed By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:1281", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:1282", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 70 }, "hiddenSeries": false, "id": 25, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_execution_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Execution Latency By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:1522", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:1523", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 70 }, "hiddenSeries": false, "id": 24, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_execution_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Execution Latency By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:1362", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:1363", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 78 }, "hiddenSeries": false, "id": 27, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_replay_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Replay Latency By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2109", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2110", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 78 }, "hiddenSeries": false, "id": 26, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_workflow_task_replay_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, workflow_type, le))", "interval": "", "legendFormat": "{{ namespace }} -- {{ workflow_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Task Replay Latency By Workflow Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2190", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2191", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 86 }, "id": 42, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "Activities", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 87 }, "hiddenSeries": false, "id": 38, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_activity_execution_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Activity Throughput By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2271", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2272", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 87 }, "hiddenSeries": false, "id": 40, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, activity_type) (rate(temporal_activity_execution_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Activity Throughput By Activity Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2352", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2353", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 95 }, "hiddenSeries": false, "id": 44, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace, activity_type) (rate(temporal_activity_execution_failed_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Failed Activity by Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2433", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2434", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 104 }, "hiddenSeries": false, "id": 46, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_execution_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, activity_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Activity Execution Latencies", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2830", "format": "dtdurations", "logBase": 1, "show": true }, { "$$hashKey": "object:2831", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 104 }, "hiddenSeries": false, "id": 36, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_schedule_to_start_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, activity_type, le))", "interval": "", "legendFormat": "{{ namespace }} - {{ activity_type }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Activity Task Backlog By Activity Type", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3241", "format": "dtdurationms", "logBase": 1, "show": true }, { "$$hashKey": "object:3242", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 112 }, "id": 34, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "Activity Task Processing", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 113 }, "hiddenSeries": false, "id": 31, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_activity_poll_no_task_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Empty Activity Polls By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:2996", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:2997", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 113 }, "hiddenSeries": false, "id": 32, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "histogram_quantile(0.95, sum(rate(temporal_activity_schedule_to_start_latency_seconds_bucket{namespace=~\"$Namespace\"}[5m])) by (namespace, le))", "interval": "", "legendFormat": "", "range": true, "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Activity Task Backlog By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3160", "format": "dtdurationms", "logBase": 1, "show": true }, { "$$hashKey": "object:3161", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 121 }, "id": 57, "panels": [], "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "refId": "A" } ], "title": "Sticky Cache", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 9, "x": 0, "y": 122 }, "hiddenSeries": false, "id": 50, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_sticky_cache_hit_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Sticky Cache Hit", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3322", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:3323", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 7, "x": 9, "y": 122 }, "hiddenSeries": false, "id": 52, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_sticky_cache_miss_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Sticky Cache Miss", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3403", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:3404", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 122 }, "hiddenSeries": false, "id": 53, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "editorMode": "code", "expr": "sum by (namespace) (rate(temporal_sticky_cache_total_forced_eviction_total{namespace=~\"$Namespace\"}[5m]))", "interval": "", "legendFormat": "{{ namespace }}", "range": true, "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Sticky Cache Forced Eviction", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3484", "format": "short", "logBase": 1, "show": true }, { "$$hashKey": "object:3485", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 130 }, "hiddenSeries": false, "id": 55, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "9.1.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "datasource": { "type": "prometheus", "uid": "xRvuMWd4z" }, "expr": "sum by (namespace) (temporal_sticky_cache_size)", "interval": "", "legendFormat": "{{ namespace }}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Sticky Cache Size", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } } ], "schemaVersion": 37, "style": "dark", "tags": [], "templating": { "list": [ { "current": { "selected": true, "text": "default", "value": "default" }, "hide": 0, "includeAll": false, "multi": false, "name": "Datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, "regex": "", "skipUrlSync": false, "type": "datasource" }, { "current": { "selected": false, "text": [ "" ], "value": [ "" ] }, "datasource": { "type": "prometheus", "uid": "${Datasource}" }, "definition": "label_values(namespace)", "hide": 0, "includeAll": false, "multi": true, "name": "Namespace", "options": [], "query": { "query": "label_values(namespace)", "refId": "StandardVariableQuery" }, "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "type": "query" }, { "allValue": ".*", "current": { "selected": false, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "multi": false, "name": "WorkflowType", "options": [ { "selected": true, "text": "All", "value": "$__all" } ], "query": "", "skipUrlSync": false, "type": "custom" } ] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ] }, "timezone": "", "title": "SDK Metrics (Java)", "uid": "whtBuu0Vk", "version": 42, "weekStart": "" } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/server-general.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": false, "tags": [], "type": "dashboard" }, "type": "dashboard" } ] }, "description": "Temporal Server Metrics Dashboard", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 2, "iteration": 1642627344913, "links": [], "liveNow": false, "panels": [ { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 70, "panels": [], "title": "Temporal Actions", "type": "row" }, { "datasource": null, "description": "", "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 0 }, "id": 68, "options": { "alertThreshold": true }, "targets": [ { "datasource": null, "editorMode": "code", "expr": "sum(rate(service_requests{service_name=\"frontend\",operation=~\"QueryWorkflow|RecordActivityTaskHeartbeat|RecordActivityTaskHeartbeatById|ResetWorkflowExecution|StartWorkflowExecution|SignalWorkflowExecution|SignalWithStartWorkflowExecution|CreateSchedule|UpdateSchedule|DeleteSchedule|PatchSchedule|UpdateWorkflowExecution|RespondActivityTaskCompleted|RespondActivityTaskFailed\"}[1m])) + (sum (rate(start_timer_command{service_name=\"history\"}[1m])) OR on() vector(0)) + (sum (rate(signal_external_workflow_command{service_name=\"history\"}[1m])) OR on() vector(0)) + (sum (rate(record_marker_command{service_name=\"history\"}[1m])) + sum (rate(continue_as_new_command{service_name=\"history\"}[1m]))OR on() vector(0)) + (sum (rate(signal_external_workflow_command{service_name=\"history\"}[1m]))OR on() vector(0)) + 2 * (sum (rate(child_workflow_command{service_name=\"history\"}[1m]))OR on() vector(0)) + (sum (rate(upsert_workflow_search_attributes_command{service_name=\"history\"}[1m]))OR on() vector(0)) + (sum (rate(modify_workflow_properties_command{service_name=\"history\"}[1m]))OR on() vector(0))", "legendFormat": "OSS v1.16 And Older", "range": true, "refId": "A" }, { "datasource": null, "editorMode": "code", "expr": "sum(rate(action{service_name=\"frontend\"}[1m]))", "hide": false, "legendFormat": "OSS v1.17 And Newer", "range": true, "refId": "B" } ], "title": "Actions", "type": "graph" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 11, "panels": [], "title": "Temporal", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "100 - (sum(rate(service_errors[2m]) OR on() vector(0)) / sum(rate(service_requests[2m])) * 100)", "interval": "", "legendFormat": "availability", "refId": "C" } ], "thresholds": [], "timeRegions": [], "title": "Service Availability (Based on Frontend Calls)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 1 }, "hiddenSeries": false, "id": 6, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "100 - (sum (rate(persistence_errors[2m]) OR on() vector(0)) /sum (rate(persistence_requests[2m])) * 100)", "interval": "", "legendFormat": "availability", "refId": "C" } ], "thresholds": [], "timeRegions": [], "title": "Persistence Availability", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 6, "x": 0, "y": 10 }, "hiddenSeries": false, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_requests{operation=~\"StartWorkflowExecution|SignalWorkflowExecution|SignalWithStartWorkflowExecution\"}[2m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "External Events", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 6, "x": 6, "y": 10 }, "hiddenSeries": false, "id": 7, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_requests{ operation=\"AddWorkflowTask\"}[2m]))", "interval": "", "legendFormat": "Scheduled", "refId": "A" }, { "expr": "sum(rate(service_requests{ operation=\"RecordWorkflowTaskStarted\"}[2m]))", "interval": "", "legendFormat": "Started", "refId": "B" }, { "expr": "sum(rate(service_requests{ operation=\"RespondWorkflowTaskCompleted\"}[2m]))", "interval": "", "legendFormat": "Completed", "refId": "C" }, { "expr": "sum(rate(service_requests{ operation=\"RespondWorkflowTaskFailed\"}[2m]))", "interval": "", "legendFormat": "Failed", "refId": "D" }, { "expr": "sum(rate(schedule_to_start_timeout{ operation=\"TimerActiveTaskWorkflowTimeout\"}[2m]))", "interval": "", "legendFormat": "Sticky Task Queue Timeout", "refId": "E" }, { "expr": "sum(rate(start_to_close_timeout{ operation=\"TimerActiveTaskWorkflowTimeout\"}[2m]))", "interval": "", "legendFormat": "Workflow Task Timeout", "refId": "F" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Tasks", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 6, "x": 12, "y": 10 }, "hiddenSeries": false, "id": 8, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_requests{operation=\"AddActivityTask\"}[2m]))", "interval": "", "legendFormat": "Scheduled", "refId": "A" }, { "expr": "sum(rate(service_requests{operation=\"RecordActivityTaskStarted\"}[2m]))", "interval": "", "legendFormat": "Started", "refId": "B" }, { "expr": "sum(rate(service_requests{operation=~\"RespondActivityTaskCompleted|RespondActivityTaskFailed|RespondActivityTaskCanceled\"}[2m]))", "interval": "", "legendFormat": "Completed", "refId": "C" } ], "thresholds": [], "timeRegions": [], "title": "Activities", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 6, "x": 18, "y": 10 }, "hiddenSeries": false, "id": 9, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "thresholds": [], "timeRegions": [], "title": "Pollers", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 20 }, "hiddenSeries": false, "id": 63, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(membership_changed_count[2m]))", "hide": false, "interval": "", "legendFormat": "membership_changed", "refId": "A" }, { "expr": "sum(rate(sharditem_created_count[2m]))", "hide": false, "interval": "", "legendFormat": "shard_item_created", "refId": "B" }, { "expr": "sum(rate(sharditem_removed_count[2m]))", "hide": false, "interval": "", "legendFormat": "shard_item_removed", "refId": "C" }, { "expr": "sum(rate(shard_closed_count[2m]))", "hide": false, "interval": "", "legendFormat": "shard_closed", "refId": "D" } ], "thresholds": [], "timeRegions": [], "title": "Shard Rebalancing", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 20 }, "hiddenSeries": false, "id": 65, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "numshards_gauge", "format": "time_series", "instant": false, "interval": "", "intervalFactor": 1, "legendFormat": "{{ kubernetes_pod_name }}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Shard Distribution", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 0, "y": 28 }, "hiddenSeries": false, "id": 54, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_service_type) (restarts)", "interval": "", "legendFormat": "{{ temporal_service_type }}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Restarts", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 6, "y": 28 }, "hiddenSeries": false, "id": 55, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "num_goroutines", "interval": "", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Goroutines", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 12, "y": 28 }, "hiddenSeries": false, "id": 56, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "memory_allocated", "interval": "", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Memory Allocated", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 18, "y": 28 }, "hiddenSeries": false, "id": 58, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "memory_heap", "interval": "", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Memory Heap", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 0, "y": 36 }, "hiddenSeries": false, "id": 57, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "memory_stack", "interval": "", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Memory Stack", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 6, "y": 36 }, "hiddenSeries": false, "id": 59, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (kubernetes_pod_name) (rate(memory_num_gc[5m]))", "interval": "", "legendFormat": "{{kubernetes_pod_name}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "GC Counter", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 12, "y": 36 }, "hiddenSeries": false, "id": 61, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(memory_gc_pause_ms_bucket[5m])) by (kubernetes_pod_name, le))", "hide": false, "interval": "", "legendFormat": "{{ kubernetes_pod_name }}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "GC Pause", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 18, "y": 36 }, "hiddenSeries": false, "id": 66, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.3.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum(rate(state_transition_count_count[1m]))", "hide": false, "interval": "", "legendFormat": "state transition", "refId": "A" }, { "exemplar": true, "expr": "sum(rate(sharditem_created_count[1m]))", "hide": false, "interval": "", "legendFormat": "shard_item_created", "refId": "B" }, { "expr": "sum(rate(sharditem_removed_count[2m]))", "hide": false, "interval": "", "legendFormat": "shard_item_removed", "refId": "C" }, { "expr": "sum(rate(shard_closed_count[2m]))", "hide": false, "interval": "", "legendFormat": "shard_closed", "refId": "D" } ], "thresholds": [], "timeRegions": [], "title": "State Transition", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:277", "format": "short", "logBase": 2, "show": true }, { "$$hashKey": "object:278", "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "collapsed": true, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 45 }, "id": 48, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 2 }, "hiddenSeries": false, "id": 45, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(workflow_success{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "success", "refId": "A" }, { "expr": "sum(rate(workflow_failed{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "failed", "refId": "B" }, { "expr": "sum(rate(workflow_timeout{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "timedout", "refId": "C" }, { "expr": "sum(rate(workflow_terminate{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "terminate", "refId": "D" }, { "expr": "sum(rate(workflow_cancel{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "cancelled", "refId": "E" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Completion Overview", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 12 }, "hiddenSeries": false, "id": 52, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_namespace) (rate(workflow_success{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "{{ temporal_namespace }} ", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Success By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 12 }, "hiddenSeries": false, "id": 46, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_namespace) (rate(workflow_failed{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "{{ temporal_namespace }} ", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Failed By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 20 }, "hiddenSeries": false, "id": 49, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_namespace) (rate(workflow_timeout{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "{{ temporal_namespace }} ", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Timedout By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 20 }, "hiddenSeries": false, "id": 50, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_namespace) (rate(workflow_terminate{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "{{ temporal_namespace }} ", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Terminate By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, "hiddenSeries": false, "id": 51, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (temporal_namespace) (rate(workflow_cancel{ operation=\"CompletionStats\"}[5m]))", "interval": "", "legendFormat": "{{ temporal_namespace }} ", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Workflow Cancelled By Namespace", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } } ], "title": "Workflow Completion Stats", "type": "row" }, { "collapsed": true, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 46 }, "id": 23, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 0, "y": 3 }, "hiddenSeries": false, "id": 21, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(service_requests[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(service_errors[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Service RequestsVs Errors ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 6, "y": 3 }, "hiddenSeries": false, "id": 25, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_requests[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Service Requests Per Operation ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 12, "y": 3 }, "hiddenSeries": false, "id": 27, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(service_errors_entity_not_found[5m]) OR on() vector(0))", "hide": false, "interval": "", "legendFormat": "Entity Not Found", "refId": "A" }, { "expr": "sum(rate(service_errors_execution_already_started[5m]) OR on() vector(0))", "hide": false, "interval": "", "legendFormat": "Execution Already Started", "refId": "B" }, { "expr": "sum(rate(service_errors_resource_exhausted[5m]) OR on() vector(0))", "hide": false, "interval": "", "legendFormat": "Resource Exhausted", "refId": "C" }, { "expr": "sum by (__name__) (rate({__name__=~\"service_errors_.*\"}[5m]))", "hide": true, "interval": "", "legendFormat": "{{ $__name__ }}", "refId": "D" } ], "thresholds": [], "timeRegions": [], "title": "Service Errors Break Down ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 6, "x": 18, "y": 3 }, "hiddenSeries": false, "id": 43, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(service_errors[5m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Service Errors By Operation ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 12 }, "hiddenSeries": false, "id": 29, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(service_latency_bucket[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Service Latency ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } } ], "title": "Overview - $Service", "type": "row" }, { "collapsed": true, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 47 }, "id": 15, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 8, "x": 0, "y": 48 }, "hiddenSeries": false, "id": 13, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum (rate(persistence_requests[5m]) OR on() vector(0))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum (rate(persistence_errors[5m]) OR on() vector(0))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Persistence Requests Vs Errors ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 8, "x": 8, "y": 48 }, "hiddenSeries": false, "id": 16, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": " sum by (operation) (rate(persistence_requests[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Persistence Requests Per Operation ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 8, "x": 16, "y": 48 }, "hiddenSeries": false, "id": 17, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(persistence_errors[5m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Persistence Errors By Operation ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fieldConfig": { "defaults": { "links": [] }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 58 }, "hiddenSeries": false, "id": 19, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "connected", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(persistence_latency_bucket[1m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Persistence Latency ($Service)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } } ], "title": "Persistence - $Service", "type": "row" }, { "collapsed": true, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 48 }, "id": 33, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 9, "x": 0, "y": 61 }, "hiddenSeries": false, "id": 31, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(client_requests[5m]))", "interval": "", "legendFormat": "requests", "refId": "A" }, { "expr": "sum(rate(client_errors[5m]))", "interval": "", "legendFormat": "errors", "refId": "B" } ], "thresholds": [], "timeRegions": [], "title": "Requests Vs Errors ($Service -> $Client)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 7, "x": 9, "y": 61 }, "hiddenSeries": false, "id": 35, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_requests[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Client Requests Per Operation ($Service -> $Client)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 8, "x": 16, "y": 61 }, "hiddenSeries": false, "id": 37, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum by (operation) (rate(client_errors[5m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Errors By Operation ($Service -> $Client)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "short", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 70 }, "hiddenSeries": false, "id": 39, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "dataLinks": [] }, "percentage": false, "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(client_latency_bucket[5m])) by (operation, le))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeRegions": [], "title": "Client Latency ($Service -> $Client)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "show": true, "values": [] }, "yaxes": [ { "format": "dtdurations", "logBase": 1, "show": true }, { "format": "short", "logBase": 1, "show": true } ], "yaxis": { "align": false } } ], "title": "Service Client - $Client", "type": "row" } ], "refresh": false, "schemaVersion": 34, "style": "dark", "tags": [], "templating": { "list": [ { "current": { "selected": true, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "multi": false, "name": "Service", "options": [ { "selected": true, "text": "All", "value": "$__all" }, { "selected": false, "text": "frontend", "value": "frontend" }, { "selected": false, "text": "history", "value": "history" }, { "selected": false, "text": "matching", "value": "matching" }, { "selected": false, "text": "worker", "value": "worker" } ], "query": "frontend,history,matching,worker", "skipUrlSync": false, "type": "custom" }, { "current": { "selected": true, "text": "All", "value": "$__all" }, "hide": 0, "includeAll": true, "multi": false, "name": "Client", "options": [ { "selected": true, "text": "All", "value": "$__all" }, { "selected": false, "text": "frontend", "value": "frontend" }, { "selected": false, "text": "history", "value": "history" }, { "selected": false, "text": "matching", "value": "matching" } ], "query": "frontend,history,matching", "skipUrlSync": false, "type": "custom" } ] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h" ] }, "timezone": "", "title": "Temporal Server Metrics", "version": 1, "weekStart": "" } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/temporal_cloud.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "datasource", "uid": "grafana" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": false, "tags": [], "type": "dashboard" }, "type": "dashboard" } ] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": null, "links": [], "liveNow": false, "panels": [ { "collapsed": false, "datasource": { "type": "datasource", "uid": "grafana" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 17, "panels": [], "targets": [ { "datasource": { "type": "datasource", "uid": "grafana" }, "refId": "A" } ], "title": "State Transitions", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 1 }, "id": 2, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_state_transition_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "State Transitions", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 12, "y": 1 }, "id": 10, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_state_transition_count{temporal_namespace=~\"$temporal_namespace\"}[30d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "30 Day State Transitions", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 16, "y": 1 }, "id": 14, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_state_transition_count{temporal_namespace=~\"$temporal_namespace\"}[7d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "7 Day State Transitions", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 20, "y": 1 }, "id": 15, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_state_transition_count{temporal_namespace=~\"$temporal_namespace\"}[1d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "1 Day State Transitions", "type": "stat" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 10 }, "id": 29, "panels": [], "title": "Actions", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 11 }, "id": 31, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_total_action_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "instant": false, "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Actions", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 12, "y": 11 }, "id": 32, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_total_action_count{temporal_namespace=~\"$temporal_namespace\"}[30d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "30 Days Actions", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 16, "y": 11 }, "id": 33, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_total_action_count{temporal_namespace=~\"$temporal_namespace\"}[7d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "7 Days Actions", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "continuous-GrYlRd" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 20, "y": 11 }, "id": 34, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "auto" }, "pluginVersion": "9.1.4", "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(increase(temporal_cloud_v0_total_action_count{temporal_namespace=~\"$temporal_namespace\"}[1d])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "1 Day Actions", "type": "stat" }, { "collapsed": false, "datasource": { "type": "datasource", "uid": "grafana" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 20 }, "id": 21, "panels": [], "targets": [ { "datasource": { "type": "datasource", "uid": "grafana" }, "refId": "A" } ], "title": "Workflows Overview", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 21 }, "id": 4, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_workflow_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Workflow Success", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 21 }, "id": 41, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_workflow_timeout_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Workflow Timeouts", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 30 }, "id": 12, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_workflow_failed_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Workflow Failed", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 30 }, "id": 13, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_workflow_continued_as_new_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Workflow Continued as New", "type": "timeseries" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 39 }, "id": 40, "panels": [], "title": "Schedules", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 40 }, "id": 11, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_schedule_action_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Successful Schedule Actions", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 12, "y": 40 }, "id": 42, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_schedule_buffer_overruns_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Schedule Buffer Overruns", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 16, "y": 40 }, "id": 43, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_schedule_missed_catchup_window_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Schedule Missed Catchup Windows", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 4, "x": 20, "y": 40 }, "id": 44, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_schedule_rate_limited_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Schedules Rate Limited", "type": "timeseries" }, { "collapsed": false, "datasource": { "type": "datasource", "uid": "grafana" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 49 }, "id": 19, "panels": [], "targets": [ { "datasource": { "type": "datasource", "uid": "grafana" }, "refId": "A" } ], "title": "Temporal Service Requests", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 50 }, "id": 6, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_frontend_service_request_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace,operation)", "interval": "", "legendFormat": "{{temporal_namespace}} - {{operation}}", "range": true, "refId": "A" } ], "title": "Frontend Service Requests", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 50 }, "id": 8, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_frontend_service_error_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace,operation)", "interval": "", "legendFormat": "{{temporal_namespace}} - {{operation}}", "refId": "A" } ], "title": "Frontend Service Errors", "type": "timeseries" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 59 }, "id": 36, "panels": [], "title": "Temporal Service Latency", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 10, "w": 8, "x": 0, "y": 60 }, "id": 30, "options": { "legend": { "calcs": [ "lastNotNull", "mean", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.5, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"StartWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "legendFormat": "{{ temporal_namespace }} - 50th Percentile", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.99, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"StartWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "hide": false, "legendFormat": "{{ temporal_namespace }} - 99th Percentile", "range": true, "refId": "B" } ], "title": "StartWorkflowExecution Latency", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 10, "w": 8, "x": 8, "y": 60 }, "id": 1, "options": { "legend": { "calcs": [ "lastNotNull", "mean", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.5, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"SignalWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "legendFormat": "{{ temporal_namespace }} - 50th Percentile", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.99, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"SignalWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "hide": false, "legendFormat": "{{ temporal_namespace }} - 99th Percentile", "range": true, "refId": "B" } ], "title": "SignalWorkflowExecution Latency", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 10, "w": 8, "x": 16, "y": 60 }, "id": 35, "options": { "legend": { "calcs": [ "lastNotNull", "mean", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.5, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"SignalWithStartWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "legendFormat": "{{ temporal_namespace }} - 50th Percentile", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "expr": "histogram_quantile(0.99, sum(rate(temporal_cloud_v0_service_latency_bucket{temporal_namespace=~\"$temporal_namespace\", operation=\"SignalWithStartWorkflowExecution\"}[$__rate_interval])) by (temporal_namespace, operation, le))", "hide": false, "legendFormat": "{{ temporal_namespace }} - 99th Percentile", "range": true, "refId": "B" } ], "title": "SignalWithStartWorkflowExecution Latency", "type": "timeseries" }, { "collapsed": false, "datasource": { "type": "datasource", "uid": "grafana" }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 70 }, "id": 23, "panels": [], "targets": [ { "datasource": { "type": "datasource", "uid": "grafana" }, "refId": "A" } ], "title": "Workers and Tasks", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 71 }, "id": 24, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_poll_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Worker Poll Success", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 71 }, "id": 26, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_poll_timeout_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Worker Poll Timeout", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 80 }, "id": 25, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": true, "expr": "sum(rate(temporal_cloud_v0_poll_success_sync_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Worker Poll Success Sync", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 80 }, "id": 27, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "exemplar": false, "expr": "sum(rate(temporal_cloud_v0_poll_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace) - sum(rate(temporal_cloud_v0_poll_success_sync_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval])) by (temporal_namespace)", "interval": "", "legendFormat": "{{temporal_namespace}}", "refId": "A" } ], "title": "Worker Poll Success Async", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "percentunit" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 0, "y": 89 }, "id": 37, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": true, "expr": "sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_sync_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n/\nsum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Sync Match Rate", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "description": "", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 89 }, "id": 38, "options": { "legend": { "calcs": [ "lastNotNull", "min", "max" ], "displayMode": "table", "placement": "bottom", "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, "editorMode": "code", "exemplar": true, "expr": "(\n (\n sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n +\n sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_sync_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n )\n /\n (\n (\n sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n +\n sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_success_sync_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n )\n +\n sum by(temporal_namespace) (\n rate(\n temporal_cloud_v0_poll_timeout_count{temporal_namespace=~\"$temporal_namespace\"}[$__rate_interval]\n )\n )\n )\n)", "interval": "", "legendFormat": "{{temporal_namespace}}", "range": true, "refId": "A" } ], "title": "Poll Success Rate", "type": "timeseries" } ], "refresh": false, "schemaVersion": 37, "style": "dark", "tags": [], "templating": { "list": [ { "current": { "selected": true, "text": "default", "value": "default" }, "hide": 0, "includeAll": false, "label": "datasource", "multi": false, "name": "datasource", "options": [], "query": "prometheus", "queryValue": "", "refresh": 1, "regex": "", "skipUrlSync": false, "type": "datasource" }, { "current": {}, "datasource": { "type": "prometheus", "uid": "${datasource}" }, "definition": "label_values(temporal_namespace)", "hide": 0, "includeAll": false, "multi": true, "name": "temporal_namespace", "options": [], "query": { "query": "label_values(temporal_namespace)", "refId": "StandardVariableQuery" }, "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "type": "query" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Temporal Cloud External Metrics", "version": 1, "weekStart": "" } ================================================ FILE: src/monitoring/grafana/provisioning/dashboards/worker-service-specific.json ================================================ { "annotations": { "list": [ { "builtIn": 1, "datasource": "-- Grafana --", "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "gnetId": null, "graphTooltip": 0, "id": 41, "iteration": 1631839148204, "links": [], "panels": [ { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 27, "panels": [], "title": "General", "type": "row" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${datasource}", "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 24, "x": 0, "y": 1 }, "hiddenSeries": false, "id": 12, "legend": { "alignAsTable": true, "avg": false, "current": true, "hideEmpty": false, "hideZero": false, "max": false, "min": false, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": false }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "(sum without (instance, pod) (started)) - (sum without (instance, pod) (stopped or started*0))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Scavengers running", "tooltip": { "shared": true, "sort": 2, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, "id": 20, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod) (rate(executor_done[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "B" } ], "title": "Completed scan tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, "id": 25, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod) (rate(executor_dropped[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "C" } ], "title": "Dropped tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 }, "id": 24, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod) (rate(executor_err[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "D" } ], "title": "Failed tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 }, "id": 23, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod) (rate(executor_deferred[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "E" } ], "title": "Deferred tasks", "type": "timeseries" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 24 }, "id": 14, "panels": [], "title": "Executions scavenger", "type": "row" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 25 }, "id": 16, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(scavenger_validation_requests[10m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "B" } ], "title": "Validation Requests", "type": "timeseries" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${datasource}", "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 33 }, "hiddenSeries": false, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(scavenger_validation_failures[5m]))", "hide": false, "interval": "", "legendFormat": "{{failure}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "DetailedErrors", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${datasource}", "description": "Might stuck until scavenger rerun in case of worker crash.", "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 33 }, "hiddenSeries": false, "id": 10, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "options": { "alertThreshold": true }, "percentage": false, "pluginVersion": "8.0.4", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(executions_outstanding)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "ExecutionsLeftToScan", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 41 }, "id": 29, "panels": [ { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 6, "w": 24, "x": 0, "y": 3 }, "id": 31, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(taskqueue_outstanding)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "B" } ], "title": "Outstanding scavenger tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 9 }, "id": 34, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(taskqueue_processed)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "D" } ], "title": "Processed taskqueue tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 9 }, "id": 35, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(taskqueue_deleted)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "C" } ], "title": "Deleted taskqueue tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 17 }, "id": 33, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(task_processed)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "E" } ], "title": "Processed tasks", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 17 }, "id": 32, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(task_deleted)", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "F" } ], "title": "Deleted tasks", "type": "timeseries" } ], "title": "TaskQueue scavenger", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 42 }, "id": 37, "panels": [], "title": "History scavenger", "type": "row" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 43 }, "id": 38, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(scavenger_success[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "title": "Success", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 43 }, "id": 39, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(scavenger_skips[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "C" } ], "title": "Skips", "type": "timeseries" }, { "datasource": "${datasource}", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 6, "w": 24, "x": 0, "y": 51 }, "id": 40, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(scavenger_errors[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "B" } ], "title": "Errors", "type": "timeseries" }, { "collapsed": true, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 57 }, "id": 42, "panels": [ { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 5 }, "id": 44, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod) (rate(add_search_attributes_failures[1m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "title": "Add search attributes failure count", "type": "timeseries" } ], "title": "Search attributes", "type": "row" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 58 }, "id": 57, "panels": [], "title": "Batcher", "type": "row" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 59 }, "id": 59, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(batcher_processor_requests[1m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "title": "Requests", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 59 }, "id": 60, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(batcher_processor_errors[1m]))", "interval": "", "legendFormat": "", "refId": "A" } ], "title": "Errors", "type": "timeseries" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 67 }, "id": 54, "panels": [], "title": "Parent close policy processor", "type": "row" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 68 }, "id": 52, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(parent_close_policy_processor_requests[1m]))", "interval": "", "legendFormat": "{{operation}}-{{temporal_namespace}}", "refId": "A" } ], "title": "Requests", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 68 }, "id": 55, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(parent_close_policy_processor_errors[5m]))", "interval": "", "legendFormat": "{{operation}}-{{temporal_namespace}}", "refId": "A" } ], "title": "Errors", "type": "timeseries" }, { "collapsed": false, "datasource": null, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 76 }, "id": 62, "panels": [], "title": "Replicator", "type": "row" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 77 }, "id": 63, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(namespace_replication_dlq_enqueue_requests[1m]))", "interval": "", "legendFormat": "{{operation}}-{{temporal_namespace}}", "refId": "A" } ], "title": "Dlq Enqueue Requests", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 77 }, "id": 66, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(replicator_dlq_enqueue_fails[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "E" } ], "title": "DLQ enqueue fails", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 85 }, "id": 65, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(replicator_messages[1m]))", "interval": "", "legendFormat": "{{operation}}", "refId": "A" } ], "title": "Messages", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 85 }, "id": 67, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(replicator_messages_dropped[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "D" }, { "exemplar": true, "expr": "sum without (instance, pod)(rate(replicator_dlq_enqueue_fails[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "E" } ], "title": "Messages Dropped", "type": "timeseries" }, { "datasource": null, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 93 }, "id": 68, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }, "targets": [ { "exemplar": true, "expr": "sum without (instance, pod)(rate(replicator_errors[1m]))", "hide": false, "interval": "", "legendFormat": "{{operation}}", "refId": "C" } ], "title": "Errors", "type": "timeseries" } ], "refresh": "", "schemaVersion": 30, "style": "dark", "tags": [], "templating": { "list": [] }, "time": { "from": "now-15m", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Worker Service Dashboard", "uid": "wDIPo8Snz", "version": 16 } ================================================ FILE: src/monitoring/grafana/provisioning/datasources/datasource.yml ================================================ datasources: - access: 'proxy' editable: true is_default: true name: 'agents-api' org_id: 1 type: 'prometheus' url: 'http://prometheus:9090' version: 1 ================================================ FILE: src/monitoring/prometheus/config/prometheus.yml ================================================ global: scrape_interval: 5s scrape_timeout: 3s evaluation_interval: 5s alerting: alertmanagers: - follow_redirects: true enable_http2: true scheme: http timeout: 10s api_version: v2 static_configs: - targets: [] scrape_configs: - job_name: agents-api honor_timestamps: true scrape_interval: 5s scrape_timeout: 3s metrics_path: /metrics scheme: http follow_redirects: true static_configs: - targets: ['agents-api-multi-tenant:8080', 'worker:14000', 'temporal:15000'] ================================================ FILE: src/scheduler/AGENTS.md ================================================ # AGENTS.md - scheduler This directory contains the Temporal workflow engine configuration for distributed task execution. Key Uses - Bash commands: - cd scheduler - docker-compose --profile self-hosted-db up # With local PostgreSQL - docker-compose --profile managed-db up # With external database - docker-compose --profile temporal-ui up # Web UI for monitoring - docker-compose --profile temporal-ui-public up # Public read-only UI - Core files: - `docker-compose.yml` for Temporal services - `dynamicconfig/temporal-postgres.yaml` for runtime configuration - `cert/` directory for TLS certificates - Configuration guidelines: - Set `TEMPORAL_POSTGRES_PASSWORD` for database authentication - Configure `TEMPORAL_ADDRESS` for service discovery - Adjust `dynamicconfig` for performance tuning - Testing instructions: - Temporal UI: `http://localhost:9000` (full access) - Public UI: `http://localhost:9001` (read-only) - Health check: Connect to Temporal gRPC endpoint - Repository etiquette: - Don't commit database passwords or certificates - Use external volumes for data persistence - Developer environment: - Requires Docker and Docker Compose - PostgreSQL for workflow state persistence - Unexpected behaviors: - Auto-setup includes database schema initialization - UI codec endpoint requires agents-api integration # Scheduler Service ## Overview The scheduler service provides distributed workflow orchestration using Temporal, enabling durable execution of complex, long-running tasks with built-in retry logic, state management, and fault tolerance. ## Architecture - **Workflow Engine**: Temporal server with PostgreSQL persistence - **UI Components**: Web interface for workflow monitoring - **Database**: PostgreSQL for workflow state and history - **Configuration**: Dynamic runtime configuration system ## Key Components ### Temporal Server - **Image**: temporalio/auto-setup:1.25.2 with automatic schema setup - **Features**: Workflow execution, activity coordination, timers - **Persistence**: PostgreSQL-backed state storage - **Metrics**: Prometheus endpoint on port 15000 ### Temporal UI - **Standard UI**: Full-featured workflow monitoring (port 9000) - **Public UI**: Read-only interface for external access (port 9001) - **Features**: Workflow visualization, execution history, debugging ### PostgreSQL Database - **Purpose**: Workflow state and history persistence - **Configuration**: High connection limit (1000) for concurrent workflows - **Health Checks**: Automated readiness verification - **Persistence**: External volume for data durability ## Environment Variables - `TEMPORAL_POSTGRES_PASSWORD`: Database password (required) - `TEMPORAL_POSTGRES_DB`: Database name (default: temporal) - `TEMPORAL_POSTGRES_HOST`: Database host (default: temporal-db) - `TEMPORAL_POSTGRES_USER`: Database user (default: temporal) - `TEMPORAL_ADDRESS`: Temporal server address (default: temporal:7233) - `TEMPORAL_LOG_LEVEL`: Logging verbosity (default: info) ### TLS Configuration - `TEMPORAL_POSTGRES_TLS_ENABLED`: Enable database TLS - `TEMPORAL_POSTGRES_TLS_DISABLE_HOST_VERIFICATION`: Skip hostname verification - Certificate files in `/cert/` directory ## Deployment Profiles 1. **Self-hosted DB**: Complete local deployment with PostgreSQL 2. **Managed DB**: Use external PostgreSQL service 3. **Temporal UI**: Full-featured workflow monitoring interface 4. **Temporal UI Public**: Read-only public access interface ## Dynamic Configuration ### Performance Tuning - **Matching RPS**: 600 requests per second (reduced from 1200) - **Blob Size Limit**: 4MB maximum payload size - **History Size Limit**: 100MB workflow history limit - **History Count Limit**: 102400 events per workflow ### Concurrency Limits - **Pending Activities**: 4000 maximum concurrent activities - **Child Executions**: 4000 maximum nested workflows - **Batch Operations**: 10000 executions per batch - **Concurrent Batches**: 100 per namespace ## Workflow Features - **Durable Execution**: Workflows survive system failures - **Activity Retries**: Automatic retry with exponential backoff - **Timers and Delays**: Built-in scheduling capabilities - **Signal Handling**: External event processing - **Child Workflows**: Nested workflow execution - **Continue-as-New**: Long-running workflow optimization ## Monitoring & Observability - **Prometheus Metrics**: Comprehensive workflow and system metrics - **Workflow Visibility**: Real-time execution status - **History Tracking**: Complete audit trail of workflow execution - **Search Attributes**: Custom metadata for workflow queries ### UI Features - **Workflow List**: Browse and filter workflows - **Execution Details**: Step-by-step execution visualization - **Task Queues**: Monitor worker capacity and utilization - **Namespaces**: Multi-tenant workflow isolation - **Cluster Information**: System health and configuration ## Integration Points - **Agents API**: Executes workflows via Temporal client - **Worker Processes**: Handle activity execution - **Codec Endpoint**: Custom payload encoding/decoding - **Monitoring**: Metrics collection via Prometheus ## Security Features - **TLS Encryption**: Database and service communication - **Namespace Isolation**: Multi-tenant security boundaries - **Authentication**: Database credential management - **Certificate Management**: Custom CA and client certificates ## Operational Procedures - **Schema Management**: Automatic database schema setup - **Backup/Restore**: PostgreSQL-based data backup - **Scaling**: Horizontal scaling for high workflow volumes - **Maintenance**: Rolling updates and configuration changes ## Development Features - **Auto-setup**: Automatic database initialization - **Local Development**: Self-contained deployment - **Hot Configuration**: Dynamic config reload without restart - **Debug Interface**: Detailed workflow execution logs ## Advanced Configuration - **Custom Search Attributes**: Metadata indexing for queries - **Archival**: Historical workflow data management - **Rate Limiting**: Request throttling and load control - **Multi-cluster**: Cross-region workflow replication ## Troubleshooting - **Health Checks**: Database and service connectivity - **Log Analysis**: Structured logging for debugging - **Metrics Monitoring**: Performance and error tracking - **UI Diagnostics**: Visual workflow execution analysis ================================================ FILE: src/scheduler/cert/.gitignore ================================================ *.crt *.key *.pem *.csr *.pem *.key *.crt *.csr *.pem ================================================ FILE: src/scheduler/docker-compose.yml ================================================ name: julep-scheduler x--temporal-base: &temporal-base image: temporalio/auto-setup:1.25.2 hostname: temporal environment: - POSTGRES_PWD=${TEMPORAL_POSTGRES_PASSWORD} - POSTGRES_DB=${TEMPORAL_POSTGRES_DB:-temporal} - POSTGRES_SEEDS=${TEMPORAL_POSTGRES_HOST:-temporal-db} - DB_HOST=${TEMPORAL_POSTGRES_HOST:-temporal-db} - DB_PORT=${TEMPORAL_POSTGRES_PORT:-5432} - POSTGRES_USER=${TEMPORAL_POSTGRES_USER:-temporal} - TEMPORAL_ADDRESS=${TEMPORAL_ADDRESS:-temporal:7233} - POSTGRES_TLS_ENABLED=${TEMPORAL_POSTGRES_TLS_ENABLED:-false} - POSTGRES_TLS_CA_FILE=/cert/ca.crt - SQL_TLS_ENABLED=${TEMPORAL_POSTGRES_TLS_ENABLED:-false} - SQL_CA=/cert/ca.crt - POSTGRES_TLS_DISABLE_HOST_VERIFICATION=${TEMPORAL_POSTGRES_TLS_DISABLE_HOST_VERIFICATION:-false} - VISIBILITY_DBNAME=${TEMPORAL_VISIBILITY_DBNAME:-temporal_visibility} - SKIP_SCHEMA_SETUP=${TEMPORAL_SKIP_SCHEMA_SETUP:-false} - SKIP_DB_CREATE=${TEMPORAL_SKIP_DB_CREATE:-false} - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/temporal-postgres.yaml - DB=postgres12 - LOG_LEVEL=${TEMPORAL_LOG_LEVEL:-info} - PROMETHEUS_ENDPOINT=0.0.0.0:15000 volumes: - ./dynamicconfig:/etc/temporal/config/dynamicconfig - ./cert:/cert services: temporal-managed: <<: *temporal-base profiles: - managed-db temporal: <<: *temporal-base profiles: - self-hosted-db depends_on: - temporal-db temporal-db: image: postgres:16 restart: unless-stopped command: -c 'max_connections=1000' volumes: - temporal-db-data:/var/lib/postgresql/data profiles: - self-hosted-db environment: - POSTGRES_DB=${TEMPORAL_POSTGRES_DB:-temporal} - POSTGRES_USER=${TEMPORAL_POSTGRES_USER:-temporal} - POSTGRES_PASSWORD=${TEMPORAL_POSTGRES_PASSWORD} healthcheck: test: [ "CMD-SHELL", "pg_isready -d ${TEMPORAL_POSTGRES_DB:-temporal} -U ${TEMPORAL_POSTGRES_USER:-temporal}" ] interval: 1s timeout: 5s retries: 10 temporal-ui: image: temporalio/ui:latest profiles: - temporal-ui environment: # See: https://github.com/temporalio/ui-server/blob/main/docker/config-template.yaml - TEMPORAL_ADDRESS=${TEMPORAL_ADDRESS:-temporal:7233} # Note: Not setting it enables all origins # - TEMPORAL_CORS_ORIGINS=${TEMPORAL_CORS_ORIGINS:-http://localhost:3000} - TEMPORAL_CODEC_ENDPOINT=http://localhost/api/temporal - TEMPORAL_UI_ENABLED=true - TEMPORAL_FEEDBACK_URL=https://github.com/julep-ai/julep - TEMPORAL_NOTIFY_ON_NEW_VERSION=false - TEMPORAL_CSRF_COOKIE_INSECURE=true # - TEMPORAL_HIDE_LOGS=true # - TEMPORAL_BANNER_TEXT=gagagaga # - TEMPORAL_DISABLE_WRITE_ACTIONS=true # - TEMPORAL_HIDE_WORKFLOW_QUERY_ERRORS=true # - TEMPORAL_REFRESH_WORKFLOW_COUNTS_DISABLED=true - TEMPORAL_OPEN_API_ENABLED=true ports: - 9000:8080 # Since 8080 is already used by agents-api temporal-ui-public: image: temporalio/ui:latest profiles: - temporal-ui-public environment: # See: https://github.com/temporalio/ui-server/blob/main/docker/config-template.yaml - TEMPORAL_ADDRESS=${TEMPORAL_ADDRESS:-temporal:7233} - TEMPORAL_CODEC_ENDPOINT=http://localhost/api/temporal - TEMPORAL_UI_ENABLED=true - TEMPORAL_FEEDBACK_URL=https://github.com/julep-ai/julep - TEMPORAL_NOTIFY_ON_NEW_VERSION=false - TEMPORAL_CSRF_COOKIE_INSECURE=true - TEMPORAL_DISABLE_WRITE_ACTIONS=true - TEMPORAL_OPEN_API_ENABLED=true - TEMPORAL_UI_BASE_PATH=/tasks-ui - TEMPORAL_UI_PUBLIC_PATH=/tasks-ui ports: - 9001:8080 # Since 8080 is already used by agents-api volumes: temporal-db-data: external: true ================================================ FILE: src/scheduler/dynamicconfig/temporal-postgres.yaml ================================================ limit.maxIDLength: - value: 255 constraints: {} system.forceSearchAttributesCacheRefreshOnRead: - value: false constraints: {} matching.rps: - value: 600 # default 1200 constraints: {} limit.blobSize.error: - value: 4194304 # default 2*1024*1024 constraints: {} limit.historySize.error: - value: 104857600 # default 50*1024*1024 constraints: {} limit.historyCount.error: - value: 102400 # default 50*1024 constraints: {} limit.numPendingActivities.error: - value: 4000 # default 2000 constraints: {} limit.numPendingChildExecutions.error: - value: 4000 # default 2000 constraints: {} frontend.MaxExecutionCountBatchOperationPerNamespace: - value: 10000 constraints: {} frontend.MaxConcurrentBatchOperationPerNamespace: - value: 100 constraints: {} # worker.ScannerMaxConcurrentWorkflowTaskExecutionSize (10 default), worker.ParentCloseMaxConcurrentWorkflowTaskExecutionSize (1000 default) (reduce?) # worker.ScannerMaxConcurrentActivityExecutionSize (10 default), worker.ParentCloseMaxConcurrentActivityExecutionSize (1000 default) (reduce?) ================================================ FILE: src/schemas/create_agent_request.json ================================================ { "$defs": { "Agent": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name" ], "title": "Agent", "type": "object" }, "AlgoliaIntegrationDef": { "description": "Algolia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "algolia", "default": "algolia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSetup" }, { "type": "null" } ] } }, "title": "AlgoliaIntegrationDef", "type": "object" }, "AlgoliaIntegrationDefUpdate": { "description": "Algolia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "algolia", "default": "algolia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSetupUpdate" }, { "type": "null" } ] } }, "title": "AlgoliaIntegrationDefUpdate", "type": "object" }, "AlgoliaSearchArguments": { "description": "Arguments for Algolia Search", "properties": { "attributes_to_retrieve": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Attributes To Retrieve" }, "hits_per_page": { "default": 10, "maximum": 1000.0, "minimum": 1.0, "title": "Hits Per Page", "type": "integer" }, "index_name": { "title": "Index Name", "type": "string" }, "query": { "title": "Query", "type": "string" } }, "required": [ "index_name", "query" ], "title": "AlgoliaSearchArguments", "type": "object" }, "AlgoliaSearchArgumentsUpdate": { "description": "Arguments for Algolia Search", "properties": { "attributes_to_retrieve": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Attributes To Retrieve" }, "hits_per_page": { "default": 10, "maximum": 1000.0, "minimum": 1.0, "title": "Hits Per Page", "type": "integer" }, "index_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Index Name" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "AlgoliaSearchArgumentsUpdate", "type": "object" }, "AlgoliaSetup": { "description": "Integration definition for Algolia", "properties": { "algolia_api_key": { "title": "Algolia Api Key", "type": "string" }, "algolia_application_id": { "title": "Algolia Application Id", "type": "string" } }, "required": [ "algolia_application_id", "algolia_api_key" ], "title": "AlgoliaSetup", "type": "object" }, "AlgoliaSetupUpdate": { "description": "Integration definition for Algolia", "properties": { "algolia_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Algolia Api Key" }, "algolia_application_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Algolia Application Id" } }, "title": "AlgoliaSetupUpdate", "type": "object" }, "ApiCallDef-Input": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "title": "Method", "type": "string" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchema-Input" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRef" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "method", "url" ], "title": "ApiCallDef", "type": "object" }, "ApiCallDef-Output": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "title": "Method", "type": "string" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchema-Output" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRef" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "method", "url" ], "title": "ApiCallDef", "type": "object" }, "ApiCallDefUpdate": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "anyOf": [ { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchemaUpdate" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRefUpdate" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Url" } }, "title": "ApiCallDefUpdate", "type": "object" }, "ArxivIntegrationDef": { "description": "Arxiv integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/ArxivSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "arxiv", "default": "arxiv", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "ArxivIntegrationDef", "type": "object" }, "ArxivIntegrationDefUpdate": { "description": "Arxiv integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/ArxivSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "arxiv", "default": "arxiv", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "ArxivIntegrationDefUpdate", "type": "object" }, "ArxivSearchArguments": { "description": "Arguments for Arxiv Search", "properties": { "download_pdf": { "default": false, "title": "Download Pdf", "type": "boolean" }, "id_list": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Id List" }, "max_results": { "default": 5, "maximum": 300000.0, "minimum": 1.0, "title": "Max Results", "type": "integer" }, "query": { "title": "Query", "type": "string" }, "sort_by": { "default": "relevance", "enum": [ "relevance", "lastUpdatedDate", "submittedDate" ], "title": "Sort By", "type": "string" }, "sort_order": { "default": "descending", "enum": [ "ascending", "descending" ], "title": "Sort Order", "type": "string" } }, "required": [ "query" ], "title": "ArxivSearchArguments", "type": "object" }, "ArxivSearchArgumentsUpdate": { "description": "Arguments for Arxiv Search", "properties": { "download_pdf": { "default": false, "title": "Download Pdf", "type": "boolean" }, "id_list": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Id List" }, "max_results": { "default": 5, "maximum": 300000.0, "minimum": 1.0, "title": "Max Results", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" }, "sort_by": { "default": "relevance", "enum": [ "relevance", "lastUpdatedDate", "submittedDate" ], "title": "Sort By", "type": "string" }, "sort_order": { "default": "descending", "enum": [ "ascending", "descending" ], "title": "Sort Order", "type": "string" } }, "title": "ArxivSearchArgumentsUpdate", "type": "object" }, "BaseTokenLogProb": { "properties": { "bytes": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Bytes" }, "logprob": { "title": "Logprob", "type": "number" }, "token": { "title": "Token", "type": "string" } }, "required": [ "token", "logprob" ], "title": "BaseTokenLogProb", "type": "object" }, "Bash20241022Def": { "properties": { "name": { "default": "bash", "title": "Name", "type": "string" }, "type": { "const": "bash_20241022", "default": "bash_20241022", "title": "Type", "type": "string" } }, "title": "Bash20241022Def", "type": "object" }, "Bash20241022DefUpdate": { "properties": { "name": { "default": "bash", "title": "Name", "type": "string" }, "type": { "const": "bash_20241022", "default": "bash_20241022", "title": "Type", "type": "string" } }, "title": "Bash20241022DefUpdate", "type": "object" }, "BraveIntegrationDef": { "description": "Brave integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BraveSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "brave", "default": "brave", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BraveSearchSetup" }, { "type": "null" } ] } }, "title": "BraveIntegrationDef", "type": "object" }, "BraveIntegrationDefUpdate": { "description": "Brave integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BraveSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "brave", "default": "brave", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BraveSearchSetupUpdate" }, { "type": "null" } ] } }, "title": "BraveIntegrationDefUpdate", "type": "object" }, "BraveSearchArguments": { "description": "Arguments for Brave Search", "properties": { "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "BraveSearchArguments", "type": "object" }, "BraveSearchArgumentsUpdate": { "description": "Arguments for Brave Search", "properties": { "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "BraveSearchArgumentsUpdate", "type": "object" }, "BraveSearchSetup": { "description": "Integration definition for Brave Search", "properties": { "brave_api_key": { "title": "Brave Api Key", "type": "string" } }, "required": [ "brave_api_key" ], "title": "BraveSearchSetup", "type": "object" }, "BraveSearchSetupUpdate": { "description": "Integration definition for Brave Search", "properties": { "brave_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Brave Api Key" } }, "title": "BraveSearchSetupUpdate", "type": "object" }, "BrowserbaseCompleteSessionArguments": { "properties": { "id": { "title": "Id", "type": "string" }, "status": { "const": "REQUEST_RELEASE", "default": "REQUEST_RELEASE", "title": "Status", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseCompleteSessionArguments", "type": "object" }, "BrowserbaseCompleteSessionArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" }, "status": { "const": "REQUEST_RELEASE", "default": "REQUEST_RELEASE", "title": "Status", "type": "string" } }, "title": "BrowserbaseCompleteSessionArgumentsUpdate", "type": "object" }, "BrowserbaseCompleteSessionIntegrationDef": { "description": "browserbase complete session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCompleteSessionArguments" }, { "type": "null" } ] }, "method": { "const": "complete_session", "default": "complete_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseCompleteSessionIntegrationDef", "type": "object" }, "BrowserbaseCompleteSessionIntegrationDefUpdate": { "description": "browserbase complete session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCompleteSessionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "complete_session", "default": "complete_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseCompleteSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseContextArguments": { "properties": { "projectId": { "title": "Projectid", "type": "string" } }, "required": [ "projectId" ], "title": "BrowserbaseContextArguments", "type": "object" }, "BrowserbaseContextArgumentsUpdate": { "properties": { "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Projectid" } }, "title": "BrowserbaseContextArgumentsUpdate", "type": "object" }, "BrowserbaseContextIntegrationDef": { "description": "browserbase context provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseContextArguments" }, { "type": "null" } ] }, "method": { "const": "create_context", "default": "create_context", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseContextIntegrationDef", "type": "object" }, "BrowserbaseContextIntegrationDefUpdate": { "description": "browserbase context provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseContextArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "create_context", "default": "create_context", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseContextIntegrationDefUpdate", "type": "object" }, "BrowserbaseCreateSessionArguments": { "properties": { "browserSettings": { "default": {}, "title": "Browsersettings", "type": "object" }, "extensionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Extensionid" }, "keepAlive": { "default": false, "title": "Keepalive", "type": "boolean" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Projectid" }, "proxies": { "anyOf": [ { "type": "boolean" }, { "items": { "type": "object" }, "type": "array" } ], "default": false, "title": "Proxies" }, "timeout": { "default": 3600, "title": "Timeout", "type": "integer" } }, "title": "BrowserbaseCreateSessionArguments", "type": "object" }, "BrowserbaseCreateSessionIntegrationDef": { "description": "browserbase create session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCreateSessionArguments" }, { "type": "null" } ] }, "method": { "const": "create_session", "default": "create_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseCreateSessionIntegrationDef", "type": "object" }, "BrowserbaseCreateSessionIntegrationDefUpdate": { "description": "browserbase create session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCreateSessionArguments" }, { "type": "null" } ] }, "method": { "const": "create_session", "default": "create_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseCreateSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseExtensionArguments": { "properties": { "ref": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ref" }, "repositoryName": { "title": "Repositoryname", "type": "string" } }, "required": [ "repositoryName" ], "title": "BrowserbaseExtensionArguments", "type": "object" }, "BrowserbaseExtensionArgumentsUpdate": { "properties": { "ref": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ref" }, "repositoryName": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Repositoryname" } }, "title": "BrowserbaseExtensionArgumentsUpdate", "type": "object" }, "BrowserbaseExtensionIntegrationDef": { "description": "browserbase extension provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseExtensionArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "install_extension_from_github", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseExtensionIntegrationDef", "type": "object" }, "BrowserbaseExtensionIntegrationDefUpdate": { "description": "browserbase extension provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseExtensionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "install_extension_from_github", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseExtensionIntegrationDefUpdate", "type": "object" }, "BrowserbaseGetSessionArguments": { "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseGetSessionArguments", "type": "object" }, "BrowserbaseGetSessionArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "BrowserbaseGetSessionArgumentsUpdate", "type": "object" }, "BrowserbaseGetSessionIntegrationDef": { "description": "browserbase get session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionArguments" }, { "type": "null" } ] }, "method": { "const": "get_session", "default": "get_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionIntegrationDef", "type": "object" }, "BrowserbaseGetSessionIntegrationDefUpdate": { "description": "browserbase get session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "get_session", "default": "get_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseGetSessionLiveUrlsArguments": { "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseGetSessionLiveUrlsArguments", "type": "object" }, "BrowserbaseGetSessionLiveUrlsArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "BrowserbaseGetSessionLiveUrlsArgumentsUpdate", "type": "object" }, "BrowserbaseGetSessionLiveUrlsIntegrationDef": { "description": "browserbase get session live urls integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsArguments" }, { "type": "null" } ] }, "method": { "const": "get_live_urls", "default": "get_live_urls", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionLiveUrlsIntegrationDef", "type": "object" }, "BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate": { "description": "browserbase get session live urls integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "get_live_urls", "default": "get_live_urls", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate", "type": "object" }, "BrowserbaseListSessionsArguments": { "properties": { "status": { "anyOf": [ { "enum": [ "RUNNING", "ERROR", "TIMED_OUT", "COMPLETED" ], "type": "string" }, { "type": "null" } ], "title": "Status" } }, "title": "BrowserbaseListSessionsArguments", "type": "object" }, "BrowserbaseListSessionsIntegrationDef": { "description": "browserbase list sessions integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseListSessionsArguments" }, { "type": "null" } ] }, "method": { "const": "list_sessions", "default": "list_sessions", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseListSessionsIntegrationDef", "type": "object" }, "BrowserbaseListSessionsIntegrationDefUpdate": { "description": "browserbase list sessions integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseListSessionsArguments" }, { "type": "null" } ] }, "method": { "const": "list_sessions", "default": "list_sessions", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseListSessionsIntegrationDefUpdate", "type": "object" }, "BrowserbaseSetup": { "description": "The setup parameters for the browserbase integration", "properties": { "api_key": { "title": "Api Key", "type": "string" }, "api_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Url" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "project_id": { "title": "Project Id", "type": "string" } }, "required": [ "api_key", "project_id" ], "title": "BrowserbaseSetup", "type": "object" }, "BrowserbaseSetupUpdate": { "description": "The setup parameters for the browserbase integration", "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key" }, "api_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Url" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "project_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Project Id" } }, "title": "BrowserbaseSetupUpdate", "type": "object" }, "BulkDeleteDocsRequest": { "properties": { "delete_all": { "default": false, "title": "Delete All", "type": "boolean" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" } }, "title": "BulkDeleteDocsRequest", "type": "object" }, "CaseThen-Input": { "properties": { "case": { "anyOf": [ { "const": "_", "type": "string" }, { "type": "string" } ], "title": "Case" }, "then": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" } ], "title": "Then" } }, "required": [ "case", "then" ], "title": "CaseThen", "type": "object" }, "CaseThen-Output": { "properties": { "case": { "anyOf": [ { "const": "_", "type": "string" }, { "type": "string" } ], "title": "Case" }, "then": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" } ], "title": "Then" } }, "required": [ "case", "then" ], "title": "CaseThen", "type": "object" }, "ChatInput": { "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "frequency_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": -2.0, "type": "number" }, { "type": "null" } ], "title": "Frequency Penalty" }, "length_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Length Penalty" }, "logit_bias": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/LogitBias" }, "type": "object" }, { "type": "null" } ], "title": "Logit Bias" }, "max_tokens": { "anyOf": [ { "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Max Tokens" }, "messages": { "items": { "$ref": "#/$defs/Message-Input" }, "minItems": 1, "title": "Messages", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "min_p": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Min P" }, "model": { "anyOf": [ { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "type": "string" }, { "type": "null" } ], "title": "Model" }, "presence_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": -2.0, "type": "number" }, { "type": "null" } ], "title": "Presence Penalty" }, "recall": { "default": true, "title": "Recall", "type": "boolean" }, "recall_tools": { "default": true, "title": "Recall Tools", "type": "boolean" }, "remember": { "default": false, "readOnly": true, "title": "Remember", "type": "boolean" }, "repetition_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Repetition Penalty" }, "response_format": { "anyOf": [ { "$ref": "#/$defs/SimpleCompletionResponseFormat" }, { "$ref": "#/$defs/SchemaCompletionResponseFormat" }, { "type": "null" } ], "title": "Response Format" }, "save": { "default": true, "title": "Save", "type": "boolean" }, "seed": { "anyOf": [ { "maximum": 1000.0, "minimum": -1.0, "type": "integer" }, { "type": "null" } ], "title": "Seed" }, "stop": { "default": [], "items": { "type": "string" }, "maxItems": 4, "title": "Stop", "type": "array" }, "stream": { "default": false, "title": "Stream", "type": "boolean" }, "temperature": { "anyOf": [ { "maximum": 5.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Temperature" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "items": { "$ref": "#/$defs/agents_api__autogen__Tools__CreateToolRequest-Input" }, "type": "array" }, { "type": "null" } ], "title": "Tools" }, "top_p": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Top P" } }, "required": [ "messages" ], "title": "ChatInput", "type": "object" }, "ChatOutputChunk": { "description": "Streaming chat completion output", "properties": { "delta": { "$ref": "#/$defs/Delta" }, "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "delta" ], "title": "ChatOutputChunk", "type": "object" }, "ChosenBash20241022": { "properties": { "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "restart": { "default": false, "title": "Restart", "type": "boolean" } }, "title": "ChosenBash20241022", "type": "object" }, "ChosenComputer20241022": { "properties": { "action": { "enum": [ "key", "type", "cursor_position", "mouse_move", "left_click", "right_click", "middle_click", "double_click", "screenshot" ], "title": "Action", "type": "string" }, "coordinate": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "required": [ "action" ], "title": "ChosenComputer20241022", "type": "object" }, "ChosenFunctionCall": { "properties": { "api_call": { "anyOf": [ {}, { "type": "null" } ], "title": "Api Call" }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenComputer20241022" }, { "type": "null" } ] }, "function": { "$ref": "#/$defs/FunctionCallOption" }, "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Id" }, "integration": { "anyOf": [ {}, { "type": "null" } ], "title": "Integration" }, "system": { "anyOf": [ {}, { "type": "null" } ], "title": "System" }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "type": "null" } ] }, "type": { "const": "function", "default": "function", "title": "Type", "type": "string" } }, "required": [ "function" ], "title": "ChosenFunctionCall", "type": "object" }, "ChosenTextEditor20241022": { "properties": { "command": { "enum": [ "str_replace", "insert", "view", "undo_edit" ], "title": "Command", "type": "string" }, "file_text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File Text" }, "insert_line": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Insert Line" }, "new_str": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "New Str" }, "old_str": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Old Str" }, "path": { "title": "Path", "type": "string" }, "view_range": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "View Range" } }, "required": [ "command", "path" ], "title": "ChosenTextEditor20241022", "type": "object" }, "ChunkChatResponse": { "properties": { "choices": { "items": { "$ref": "#/$defs/ChatOutputChunk" }, "title": "Choices", "type": "array" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" }, "usage": { "anyOf": [ { "$ref": "#/$defs/CompletionUsage" }, { "type": "null" } ] } }, "required": [ "created_at", "id", "choices" ], "title": "ChunkChatResponse", "type": "object" }, "CloudinaryEditArguments": { "description": "Arguments for Cloudinary media edit", "properties": { "public_id": { "title": "Public Id", "type": "string" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "transformation": { "items": { "type": "object" }, "title": "Transformation", "type": "array" } }, "required": [ "public_id", "transformation" ], "title": "CloudinaryEditArguments", "type": "object" }, "CloudinaryEditArgumentsUpdate": { "description": "Arguments for Cloudinary media edit", "properties": { "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "transformation": { "anyOf": [ { "items": { "type": "object" }, "type": "array" }, { "type": "null" } ], "title": "Transformation" } }, "title": "CloudinaryEditArgumentsUpdate", "type": "object" }, "CloudinaryEditIntegrationDef": { "description": "Cloudinary edit integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryEditArguments" }, { "type": "null" } ] }, "method": { "const": "media_edit", "default": "media_edit", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetup" }, { "type": "null" } ] } }, "title": "CloudinaryEditIntegrationDef", "type": "object" }, "CloudinaryEditIntegrationDefUpdate": { "description": "Cloudinary edit integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryEditArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "media_edit", "default": "media_edit", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetupUpdate" }, { "type": "null" } ] } }, "title": "CloudinaryEditIntegrationDefUpdate", "type": "object" }, "CloudinarySetup": { "description": "Setup parameters for Cloudinary integration", "properties": { "cloudinary_api_key": { "title": "Cloudinary Api Key", "type": "string" }, "cloudinary_api_secret": { "title": "Cloudinary Api Secret", "type": "string" }, "cloudinary_cloud_name": { "title": "Cloudinary Cloud Name", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "cloudinary_api_key", "cloudinary_api_secret", "cloudinary_cloud_name" ], "title": "CloudinarySetup", "type": "object" }, "CloudinarySetupUpdate": { "description": "Setup parameters for Cloudinary integration", "properties": { "cloudinary_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Api Key" }, "cloudinary_api_secret": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Api Secret" }, "cloudinary_cloud_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Cloud Name" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "CloudinarySetupUpdate", "type": "object" }, "CloudinaryUploadArguments": { "description": "Arguments for Cloudinary media upload", "properties": { "file": { "title": "File", "type": "string" }, "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "upload_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Upload Params" } }, "required": [ "file" ], "title": "CloudinaryUploadArguments", "type": "object" }, "CloudinaryUploadArgumentsUpdate": { "description": "Arguments for Cloudinary media upload", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File" }, "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "upload_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Upload Params" } }, "title": "CloudinaryUploadArgumentsUpdate", "type": "object" }, "CloudinaryUploadIntegrationDef": { "description": "Cloudinary upload integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryUploadArguments" }, { "type": "null" } ] }, "method": { "const": "media_upload", "default": "media_upload", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetup" }, { "type": "null" } ] } }, "title": "CloudinaryUploadIntegrationDef", "type": "object" }, "CloudinaryUploadIntegrationDefUpdate": { "description": "Cloudinary upload integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryUploadArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "media_upload", "default": "media_upload", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetupUpdate" }, { "type": "null" } ] } }, "title": "CloudinaryUploadIntegrationDefUpdate", "type": "object" }, "CompletionUsage": { "description": "Usage statistics for the completion request", "properties": { "completion_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Completion Tokens" }, "prompt_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Prompt Tokens" }, "total_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Total Tokens" } }, "title": "CompletionUsage", "type": "object" }, "Computer20241022Def": { "description": "Anthropic new tools", "properties": { "display_height_px": { "default": 768, "minimum": 400.0, "title": "Display Height Px", "type": "integer" }, "display_number": { "default": 1, "maximum": 10.0, "minimum": 1.0, "title": "Display Number", "type": "integer" }, "display_width_px": { "default": 1024, "minimum": 600.0, "title": "Display Width Px", "type": "integer" }, "name": { "default": "computer", "title": "Name", "type": "string" }, "type": { "const": "computer_20241022", "default": "computer_20241022", "title": "Type", "type": "string" } }, "title": "Computer20241022Def", "type": "object" }, "Computer20241022DefUpdate": { "description": "Anthropic new tools", "properties": { "display_height_px": { "default": 768, "minimum": 400.0, "title": "Display Height Px", "type": "integer" }, "display_number": { "default": 1, "maximum": 10.0, "minimum": 1.0, "title": "Display Number", "type": "integer" }, "display_width_px": { "default": 1024, "minimum": 600.0, "title": "Display Width Px", "type": "integer" }, "name": { "default": "computer", "title": "Name", "type": "string" }, "type": { "const": "computer_20241022", "default": "computer_20241022", "title": "Type", "type": "string" } }, "title": "Computer20241022DefUpdate", "type": "object" }, "Content-Output": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "ContentItem": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItem", "type": "object" }, "ContentItemModel": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel", "type": "object" }, "ContentItemModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItemModel1", "type": "object" }, "ContentItemModel2": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel2", "type": "object" }, "ContentItemModel3": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItemModel3", "type": "object" }, "ContentItemModel4": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel4", "type": "object" }, "ContentModel1-Input": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel1", "type": "object" }, "ContentModel4": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel3" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel4" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel4", "type": "object" }, "ContentModel7": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel7", "type": "object" }, "CreateAgentRequest": { "description": "Payload for creating a agent (and associated documents)", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "CreateAgentRequest", "type": "object" }, "CreateDocRequest": { "description": "Payload for creating a doc", "properties": { "content": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Common__Content" }, { "items": { "$ref": "#/$defs/agents_api__autogen__Common__Content" }, "type": "array" } ], "title": "Content" }, "embed_instruction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Embed Instruction" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "title": { "maxLength": 800, "title": "Title", "type": "string" } }, "required": [ "title", "content" ], "title": "CreateDocRequest", "type": "object" }, "CreateExecutionRequest": { "description": "Payload for creating an execution", "properties": { "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "input": { "title": "Input", "type": "object" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "output": { "anyOf": [ {}, { "type": "null" } ], "title": "Output" }, "transition_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Transition Count" } }, "required": [ "input" ], "title": "CreateExecutionRequest", "type": "object" }, "CreateFileRequest": { "description": "Payload for creating a file", "properties": { "content": { "title": "Content", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "mime_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Mime Type" }, "name": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name", "content" ], "title": "CreateFileRequest", "type": "object" }, "CreateOrUpdateAgentRequest": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "CreateOrUpdateAgentRequest", "type": "object" }, "CreateOrUpdateSessionRequest": { "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "agents": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Agents" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "user": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "User" }, "users": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Users" } }, "title": "CreateOrUpdateSessionRequest", "type": "object" }, "CreateOrUpdateUserRequest": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "CreateOrUpdateUserRequest", "type": "object" }, "CreateProjectRequest": { "description": "Payload for creating a project", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "CreateProjectRequest", "type": "object" }, "CreateSecretRequest": { "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "name", "value" ], "title": "CreateSecretRequest", "type": "object" }, "CreateSessionRequest": { "description": "Payload for creating a session", "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "agents": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Agents" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "user": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "User" }, "users": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Users" } }, "title": "CreateSessionRequest", "type": "object" }, "CreateTaskRequest": { "additionalProperties": true, "description": "Payload for creating a task", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "description": { "default": "", "title": "Description", "type": "string" }, "inherit_tools": { "default": false, "title": "Inherit Tools", "type": "boolean" }, "input_schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input Schema" }, "main": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Main-Input" } ] }, "minItems": 1, "title": "Main", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "tools": { "default": [], "items": { "$ref": "#/$defs/TaskTool-Input" }, "title": "Tools", "type": "array" } }, "required": [ "name", "main" ], "title": "CreateTaskRequest", "type": "object" }, "CreateToolRequest-Output": { "description": "Payload for creating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" }, "CreateUserRequest": { "description": "Payload for creating a user (and associated documents)", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "CreateUserRequest", "type": "object" }, "Delta": { "description": "The message generated by the model", "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel1" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel2" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Delta", "type": "object" }, "Doc": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "title": "Content" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "embedding_dimensions": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Embedding Dimensions" }, "embedding_model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Embedding Model" }, "embeddings": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, { "type": "null" } ], "readOnly": true, "title": "Embeddings" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "language": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Language" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "modality": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Modality" }, "title": { "maxLength": 800, "title": "Title", "type": "string" } }, "required": [ "id", "created_at", "title", "content" ], "title": "Doc", "type": "object" }, "DocOwner": { "properties": { "id": { "format": "uuid", "title": "Id", "type": "string" }, "role": { "enum": [ "user", "agent" ], "title": "Role", "type": "string" } }, "required": [ "id", "role" ], "title": "DocOwner", "type": "object" }, "DocReference": { "properties": { "distance": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Distance" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "owner": { "$ref": "#/$defs/DocOwner" }, "snippet": { "$ref": "#/$defs/Snippet" }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Title" } }, "required": [ "owner", "id", "snippet" ], "title": "DocReference", "type": "object" }, "DocSearchResponse": { "properties": { "docs": { "items": { "$ref": "#/$defs/DocReference" }, "title": "Docs", "type": "array" }, "time": { "exclusiveMinimum": 0.0, "title": "Time", "type": "number" } }, "required": [ "docs", "time" ], "title": "DocSearchResponse", "type": "object" }, "DummyIntegrationDef": { "properties": { "arguments": { "anyOf": [ {}, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "dummy", "default": "dummy", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "DummyIntegrationDef", "type": "object" }, "DummyIntegrationDefUpdate": { "properties": { "arguments": { "anyOf": [ {}, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "dummy", "default": "dummy", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "DummyIntegrationDefUpdate", "type": "object" }, "Else-Input": { "description": "The steps to run if the condition is false", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Else", "type": "object" }, "Else-Output": { "description": "The steps to run if the condition is false", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Else", "type": "object" }, "EmailArguments": { "description": "Arguments for Email sending", "properties": { "body": { "title": "Body", "type": "string" }, "from": { "title": "From", "type": "string" }, "subject": { "title": "Subject", "type": "string" }, "to": { "title": "To", "type": "string" } }, "required": [ "to", "from", "subject", "body" ], "title": "EmailArguments", "type": "object" }, "EmailArgumentsUpdate": { "description": "Arguments for Email sending", "properties": { "body": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Body" }, "from": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "From" }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subject" }, "to": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "To" } }, "title": "EmailArgumentsUpdate", "type": "object" }, "EmailIntegrationDef": { "description": "Email integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/EmailArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "email", "default": "email", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/EmailSetup" }, { "type": "null" } ] } }, "title": "EmailIntegrationDef", "type": "object" }, "EmailIntegrationDefUpdate": { "description": "Email integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/EmailArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "email", "default": "email", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/EmailSetupUpdate" }, { "type": "null" } ] } }, "title": "EmailIntegrationDefUpdate", "type": "object" }, "EmailSetup": { "description": "Setup parameters for Email integration", "properties": { "host": { "title": "Host", "type": "string" }, "password": { "title": "Password", "type": "string" }, "port": { "title": "Port", "type": "integer" }, "user": { "title": "User", "type": "string" } }, "required": [ "host", "port", "user", "password" ], "title": "EmailSetup", "type": "object" }, "EmailSetupUpdate": { "description": "Setup parameters for Email integration", "properties": { "host": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Host" }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" }, "port": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Port" }, "user": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "User" } }, "title": "EmailSetupUpdate", "type": "object" }, "EmbedQueryResponse": { "properties": { "vectors": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Vectors", "type": "array" } }, "required": [ "vectors" ], "title": "EmbedQueryResponse", "type": "object" }, "Entry": { "properties": { "content": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel3" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel" } ] }, "type": "array" }, { "$ref": "#/$defs/Tool" }, { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "string" }, { "$ref": "#/$defs/ToolResponse" }, { "items": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel1" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel3" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel2" } ] }, "type": "array" }, { "$ref": "#/$defs/Tool" }, { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "string" }, { "$ref": "#/$defs/ToolResponse" } ] }, "type": "array" } ], "title": "Content" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "model": { "default": "gpt-4o-mini", "title": "Model", "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "source": { "enum": [ "api_request", "api_response", "tool_request", "tool_response", "internal", "summarizer", "meta" ], "title": "Source", "type": "string" }, "timestamp": { "format": "date-time", "title": "Timestamp", "type": "string" }, "token_count": { "title": "Token Count", "type": "integer" }, "tokenizer": { "title": "Tokenizer", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "role", "content", "source", "tokenizer", "token_count", "timestamp", "created_at", "id" ], "title": "Entry", "type": "object" }, "ErrorWorkflowStep": { "properties": { "error": { "title": "Error", "type": "string" }, "kind_": { "const": "error", "default": "error", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "error" ], "title": "ErrorWorkflowStep", "type": "object" }, "EvaluateStep": { "properties": { "evaluate": { "additionalProperties": { "anyOf": [ { "type": "object" }, { "type": "string" } ] }, "title": "Evaluate", "type": "object" }, "kind_": { "const": "evaluate", "default": "evaluate", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "evaluate" ], "title": "EvaluateStep", "type": "object" }, "Execution": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "input": { "title": "Input", "type": "object" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "output": { "anyOf": [ {}, { "type": "null" } ], "title": "Output" }, "status": { "enum": [ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled" ], "readOnly": true, "title": "Status", "type": "string" }, "task_id": { "format": "uuid", "readOnly": true, "title": "Task Id", "type": "string" }, "transition_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Transition Count" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "task_id", "status", "input", "created_at", "updated_at", "id" ], "title": "Execution", "type": "object" }, "FfmpegIntegrationDef": { "description": "Ffmpeg integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/FfmpegSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "ffmpeg", "default": "ffmpeg", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "FfmpegIntegrationDef", "type": "object" }, "FfmpegIntegrationDefUpdate": { "description": "Ffmpeg integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/FfmpegSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "ffmpeg", "default": "ffmpeg", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "FfmpegIntegrationDefUpdate", "type": "object" }, "FfmpegSearchArguments": { "description": "Arguments for Ffmpeg CMD", "properties": { "cmd": { "title": "Cmd", "type": "string" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" } }, "required": [ "cmd" ], "title": "FfmpegSearchArguments", "type": "object" }, "FfmpegSearchArgumentsUpdate": { "description": "Arguments for Ffmpeg CMD", "properties": { "cmd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cmd" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" } }, "title": "FfmpegSearchArgumentsUpdate", "type": "object" }, "File": { "properties": { "content": { "title": "Content", "type": "string" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "hash": { "readOnly": true, "title": "Hash", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "mime_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Mime Type" }, "name": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "size": { "minimum": 1.0, "readOnly": true, "title": "Size", "type": "integer" } }, "required": [ "id", "created_at", "name", "content", "size", "hash" ], "title": "File", "type": "object" }, "ForeachDo-Input": { "properties": { "do": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Do" }, "in": { "title": "In", "type": "string" } }, "required": [ "in", "do" ], "title": "ForeachDo", "type": "object" }, "ForeachDo-Output": { "properties": { "do": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Do" }, "in": { "title": "In", "type": "string" } }, "required": [ "in", "do" ], "title": "ForeachDo", "type": "object" }, "ForeachStep-Input": { "properties": { "foreach": { "$ref": "#/$defs/ForeachDo-Input" }, "kind_": { "const": "foreach", "default": "foreach", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "foreach" ], "title": "ForeachStep", "type": "object" }, "ForeachStep-Output": { "properties": { "foreach": { "$ref": "#/$defs/ForeachDo-Output" }, "kind_": { "const": "foreach", "default": "foreach", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "foreach" ], "title": "ForeachStep", "type": "object" }, "FunctionCallOption": { "properties": { "arguments": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Arguments" }, "name": { "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "FunctionCallOption", "type": "object" }, "FunctionDef": { "description": "Function definition", "properties": { "description": { "anyOf": [ {}, { "type": "null" } ], "title": "Description" }, "name": { "anyOf": [ {}, { "type": "null" } ], "title": "Name" }, "parameters": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Parameters" } }, "title": "FunctionDef", "type": "object" }, "GetStep": { "properties": { "get": { "title": "Get", "type": "string" }, "kind_": { "const": "get", "default": "get", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "get" ], "title": "GetStep", "type": "object" }, "GoogleSheetsAppendArguments": { "description": "Arguments for appending values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "INSERT_ROWS", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "spreadsheet_id", "range", "values" ], "title": "GoogleSheetsAppendArguments", "type": "object" }, "GoogleSheetsAppendArgumentsUpdate": { "description": "Arguments for appending values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "INSERT_ROWS", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "anyOf": [ { "items": { "items": {}, "type": "array" }, "type": "array" }, { "type": "null" } ], "title": "Values" } }, "title": "GoogleSheetsAppendArgumentsUpdate", "type": "object" }, "GoogleSheetsBatchReadArguments": { "description": "Arguments for batch reading values from multiple ranges", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "ranges": { "items": { "type": "string" }, "title": "Ranges", "type": "array" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "required": [ "spreadsheet_id", "ranges" ], "title": "GoogleSheetsBatchReadArguments", "type": "object" }, "GoogleSheetsBatchReadArgumentsUpdate": { "description": "Arguments for batch reading values from multiple ranges", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "ranges": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Ranges" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "title": "GoogleSheetsBatchReadArgumentsUpdate", "type": "object" }, "GoogleSheetsBatchWriteArguments": { "description": "Arguments for batch updating values in multiple ranges", "properties": { "data": { "items": { "$ref": "#/$defs/GoogleSheetsValueRange" }, "title": "Data", "type": "array" }, "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" } }, "required": [ "spreadsheet_id", "data" ], "title": "GoogleSheetsBatchWriteArguments", "type": "object" }, "GoogleSheetsBatchWriteArgumentsUpdate": { "description": "Arguments for batch updating values in multiple ranges", "properties": { "data": { "anyOf": [ { "items": { "$ref": "#/$defs/GoogleSheetsValueRange" }, "type": "array" }, { "type": "null" } ], "title": "Data" }, "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" } }, "title": "GoogleSheetsBatchWriteArgumentsUpdate", "type": "object" }, "GoogleSheetsClearArguments": { "description": "Arguments for clearing values from a spreadsheet", "properties": { "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" } }, "required": [ "spreadsheet_id", "range" ], "title": "GoogleSheetsClearArguments", "type": "object" }, "GoogleSheetsClearArgumentsUpdate": { "description": "Arguments for clearing values from a spreadsheet", "properties": { "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" } }, "title": "GoogleSheetsClearArgumentsUpdate", "type": "object" }, "GoogleSheetsIntegrationDef-Input": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArguments" }, { "$ref": "#/$defs/GoogleSheetsWriteArguments" }, { "$ref": "#/$defs/GoogleSheetsAppendArguments" }, { "$ref": "#/$defs/GoogleSheetsClearArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetup" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDef", "type": "object" }, "GoogleSheetsIntegrationDef-Output": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArguments" }, { "$ref": "#/$defs/GoogleSheetsWriteArguments" }, { "$ref": "#/$defs/GoogleSheetsAppendArguments" }, { "$ref": "#/$defs/GoogleSheetsClearArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetup" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDef", "type": "object" }, "GoogleSheetsIntegrationDefUpdate": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsWriteArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsAppendArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsClearArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArgumentsUpdate" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetupUpdate" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDefUpdate", "type": "object" }, "GoogleSheetsReadArguments": { "description": "Arguments for reading values from a spreadsheet", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "required": [ "spreadsheet_id", "range" ], "title": "GoogleSheetsReadArguments", "type": "object" }, "GoogleSheetsReadArgumentsUpdate": { "description": "Arguments for reading values from a spreadsheet", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "title": "GoogleSheetsReadArgumentsUpdate", "type": "object" }, "GoogleSheetsSetup": { "description": "Setup parameters for Google Sheets integration", "properties": { "default_retry_count": { "default": 3, "maximum": 10.0, "minimum": 1.0, "title": "Default Retry Count", "type": "integer" }, "service_account_json": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Service Account Json" }, "use_julep_service": { "title": "Use Julep Service", "type": "boolean" } }, "required": [ "use_julep_service" ], "title": "GoogleSheetsSetup", "type": "object" }, "GoogleSheetsSetupUpdate": { "description": "Setup parameters for Google Sheets integration", "properties": { "default_retry_count": { "default": 3, "maximum": 10.0, "minimum": 1.0, "title": "Default Retry Count", "type": "integer" }, "service_account_json": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Service Account Json" }, "use_julep_service": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Use Julep Service" } }, "title": "GoogleSheetsSetupUpdate", "type": "object" }, "GoogleSheetsValueRange": { "description": "Represents a range of values to write", "properties": { "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "title": "Range", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "range", "values" ], "title": "GoogleSheetsValueRange", "type": "object" }, "GoogleSheetsWriteArguments": { "description": "Arguments for writing values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "OVERWRITE", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "spreadsheet_id", "range", "values" ], "title": "GoogleSheetsWriteArguments", "type": "object" }, "GoogleSheetsWriteArgumentsUpdate": { "description": "Arguments for writing values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "OVERWRITE", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "anyOf": [ { "items": { "items": {}, "type": "array" }, "type": "array" }, { "type": "null" } ], "title": "Values" } }, "title": "GoogleSheetsWriteArgumentsUpdate", "type": "object" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/$defs/ValidationError" }, "title": "Detail", "type": "array" } }, "title": "HTTPValidationError", "type": "object" }, "History": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "entries": { "items": { "$ref": "#/$defs/Entry" }, "title": "Entries", "type": "array" }, "relations": { "items": { "$ref": "#/$defs/Relation" }, "title": "Relations", "type": "array" }, "session_id": { "format": "uuid", "readOnly": true, "title": "Session Id", "type": "string" } }, "required": [ "entries", "relations", "session_id", "created_at" ], "title": "History", "type": "object" }, "HybridDocSearch": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 7, "minimum": 0.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "hybrid", "default": "hybrid", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "HybridDocSearch", "type": "object" }, "HybridDocSearchRequest": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 5, "maximum": 10.0, "minimum": 1.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "text": { "title": "Text", "type": "string" }, "trigram_similarity_threshold": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Trigram Similarity Threshold" }, "vector": { "items": { "type": "number" }, "title": "Vector", "type": "array" } }, "required": [ "text", "vector" ], "title": "HybridDocSearchRequest", "type": "object" }, "HybridDocSearchUpdate": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 7, "minimum": 0.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "hybrid", "default": "hybrid", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "HybridDocSearchUpdate", "type": "object" }, "IfElseWorkflowStep-Input": { "properties": { "else": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Else-Input" }, { "type": "null" } ], "title": "Else" }, "if": { "title": "If", "type": "string" }, "kind_": { "const": "if_else", "default": "if_else", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "then": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Then-Input" } ], "title": "Then" } }, "required": [ "if", "then" ], "title": "IfElseWorkflowStep", "type": "object" }, "IfElseWorkflowStep-Output": { "properties": { "else": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Else-Output" }, { "type": "null" } ], "title": "Else" }, "if": { "title": "If", "type": "string" }, "kind_": { "const": "if_else", "default": "if_else", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "then": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Then-Output" } ], "title": "Then" } }, "required": [ "if", "then" ], "title": "IfElseWorkflowStep", "type": "object" }, "ImageUrl": { "description": "The image URL", "properties": { "detail": { "default": "auto", "enum": [ "low", "high", "auto" ], "title": "Detail", "type": "string" }, "url": { "title": "Url", "type": "string" } }, "required": [ "url" ], "title": "ImageUrl", "type": "object" }, "JobStatus": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "has_progress": { "default": false, "title": "Has Progress", "type": "boolean" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "progress": { "default": 0, "maximum": 100.0, "minimum": 0.0, "title": "Progress", "type": "number" }, "reason": { "default": "", "title": "Reason", "type": "string" }, "state": { "default": "pending", "enum": [ "pending", "in_progress", "retrying", "succeeded", "aborted", "failed", "unknown" ], "title": "State", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "JobStatus", "type": "object" }, "ListModelsResponse": { "description": "Response for the list models endpoint", "properties": { "models": { "items": { "$ref": "#/$defs/ModelInfo" }, "title": "Models", "type": "array" } }, "required": [ "models" ], "title": "ListModelsResponse", "type": "object" }, "ListResponse_Agent_": { "properties": { "items": { "items": { "$ref": "#/$defs/Agent" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Agent]", "type": "object" }, "ListResponse_Doc_": { "properties": { "items": { "items": { "$ref": "#/$defs/Doc" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Doc]", "type": "object" }, "ListResponse_Execution_": { "properties": { "items": { "items": { "$ref": "#/$defs/Execution" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Execution]", "type": "object" }, "ListResponse_Project_": { "properties": { "items": { "items": { "$ref": "#/$defs/Project" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Project]", "type": "object" }, "ListResponse_ResourceDeletedResponse_": { "properties": { "items": { "items": { "$ref": "#/$defs/ResourceDeletedResponse" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[ResourceDeletedResponse]", "type": "object" }, "ListResponse_Session_": { "properties": { "items": { "items": { "$ref": "#/$defs/Session" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Session]", "type": "object" }, "ListResponse_Task_": { "properties": { "items": { "items": { "$ref": "#/$defs/Task" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Task]", "type": "object" }, "ListResponse_Tool_": { "properties": { "items": { "items": { "$ref": "#/$defs/Tool" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Tool]", "type": "object" }, "ListResponse_Transition_": { "properties": { "items": { "items": { "$ref": "#/$defs/Transition" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Transition]", "type": "object" }, "ListResponse_User_": { "properties": { "items": { "items": { "$ref": "#/$defs/User" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[User]", "type": "object" }, "LlamaParseFetchArguments": { "description": "Arguments for LlamaParse integration", "properties": { "base64": { "default": false, "title": "Base64", "type": "boolean" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "file" ], "title": "LlamaParseFetchArguments", "type": "object" }, "LlamaParseFetchArgumentsUpdate": { "description": "Arguments for LlamaParse integration", "properties": { "base64": { "default": false, "title": "Base64", "type": "boolean" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "LlamaParseFetchArgumentsUpdate", "type": "object" }, "LlamaParseIntegrationDef": { "description": "LlamaParse integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/LlamaParseFetchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "llama_parse", "default": "llama_parse", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/LlamaParseSetup" }, { "type": "null" } ] } }, "title": "LlamaParseIntegrationDef", "type": "object" }, "LlamaParseIntegrationDefUpdate": { "description": "LlamaParse integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/LlamaParseFetchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "llama_parse", "default": "llama_parse", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/LlamaParseSetupUpdate" }, { "type": "null" } ] } }, "title": "LlamaParseIntegrationDefUpdate", "type": "object" }, "LlamaParseSetup": { "description": "Setup parameters for LlamaParse integration", "properties": { "llamaparse_api_key": { "title": "Llamaparse Api Key", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "llamaparse_api_key" ], "title": "LlamaParseSetup", "type": "object" }, "LlamaParseSetupUpdate": { "description": "Setup parameters for LlamaParse integration", "properties": { "llamaparse_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Llamaparse Api Key" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "LlamaParseSetupUpdate", "type": "object" }, "LogProbResponse": { "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/TokenLogProb" }, "type": "array" }, { "type": "null" } ], "title": "Content" } }, "required": [ "content" ], "title": "LogProbResponse", "type": "object" }, "LogStep": { "properties": { "kind_": { "const": "log", "default": "log", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "log": { "title": "Log", "type": "string" } }, "required": [ "log" ], "title": "LogStep", "type": "object" }, "LogitBias": { "maximum": 100.0, "minimum": -100.0, "title": "LogitBias", "type": "number" }, "MailgunIntegrationDef": { "description": "Mailgun integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/MailgunSendEmailArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "send_email", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mailgun", "default": "mailgun", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/MailgunSetup" }, { "type": "null" } ] } }, "title": "MailgunIntegrationDef", "type": "object" }, "MailgunIntegrationDefUpdate": { "description": "Mailgun integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/MailgunSendEmailArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "send_email", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mailgun", "default": "mailgun", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/MailgunSetupUpdate" }, { "type": "null" } ] } }, "title": "MailgunIntegrationDefUpdate", "type": "object" }, "MailgunSendEmailArguments": { "description": "Arguments for mailgun.send_email method", "properties": { "bcc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bcc" }, "body": { "title": "Body", "type": "string" }, "cc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cc" }, "from": { "title": "From", "type": "string" }, "subject": { "title": "Subject", "type": "string" }, "to": { "title": "To", "type": "string" } }, "required": [ "to", "from", "subject", "body" ], "title": "MailgunSendEmailArguments", "type": "object" }, "MailgunSendEmailArgumentsUpdate": { "description": "Arguments for mailgun.send_email method", "properties": { "bcc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bcc" }, "body": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Body" }, "cc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cc" }, "from": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "From" }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subject" }, "to": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "To" } }, "title": "MailgunSendEmailArgumentsUpdate", "type": "object" }, "MailgunSetup": { "description": "Setup parameters for Mailgun integration", "properties": { "api_key": { "title": "Api Key", "type": "string" } }, "required": [ "api_key" ], "title": "MailgunSetup", "type": "object" }, "MailgunSetupUpdate": { "description": "Setup parameters for Mailgun integration", "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key" } }, "title": "MailgunSetupUpdate", "type": "object" }, "Main-Input": { "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Main", "type": "object" }, "Main-Output": { "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Main", "type": "object" }, "McpCallToolArguments": { "description": "Arguments to call a named tool on the MCP server", "properties": { "arguments": { "default": {}, "title": "Arguments", "type": "object" }, "timeout_seconds": { "default": 60, "title": "Timeout Seconds", "type": "integer" }, "tool_name": { "title": "Tool Name", "type": "string" } }, "required": [ "tool_name" ], "title": "McpCallToolArguments", "type": "object" }, "McpCallToolArgumentsUpdate": { "description": "Arguments to call a named tool on the MCP server", "properties": { "arguments": { "default": {}, "title": "Arguments", "type": "object" }, "timeout_seconds": { "default": 60, "title": "Timeout Seconds", "type": "integer" }, "tool_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Name" } }, "title": "McpCallToolArgumentsUpdate", "type": "object" }, "McpIntegrationDef": { "description": "MCP integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/McpCallToolArguments" }, { "$ref": "#/$defs/McpListToolsArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mcp", "default": "mcp", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/McpSetup" }, { "type": "null" } ] } }, "title": "McpIntegrationDef", "type": "object" }, "McpIntegrationDefUpdate": { "description": "MCP integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/McpCallToolArgumentsUpdate" }, { "$ref": "#/$defs/McpListToolsArgumentsUpdate" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mcp", "default": "mcp", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/McpSetupUpdate" }, { "type": "null" } ] } }, "title": "McpIntegrationDefUpdate", "type": "object" }, "McpListToolsArguments": { "description": "Arguments to list available tools", "properties": { "dummy": { "default": "dummy", "title": "Dummy", "type": "string" } }, "title": "McpListToolsArguments", "type": "object" }, "McpListToolsArgumentsUpdate": { "description": "Arguments to list available tools", "properties": { "dummy": { "default": "dummy", "title": "Dummy", "type": "string" } }, "title": "McpListToolsArgumentsUpdate", "type": "object" }, "McpSetup": { "description": "Setup parameters for MCP integration", "properties": { "args": { "default": [], "items": { "type": "string" }, "title": "Args", "type": "array" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "cwd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cwd" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "http_headers": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Http Headers", "type": "object" }, "http_url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Http Url" }, "transport": { "enum": [ "sse", "http" ], "title": "Transport", "type": "string" } }, "required": [ "transport" ], "title": "McpSetup", "type": "object" }, "McpSetupUpdate": { "description": "Setup parameters for MCP integration", "properties": { "args": { "default": [], "items": { "type": "string" }, "title": "Args", "type": "array" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "cwd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cwd" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "http_headers": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Http Headers", "type": "object" }, "http_url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Http Url" }, "transport": { "anyOf": [ { "enum": [ "sse", "http" ], "type": "string" }, { "type": "null" } ], "title": "Transport" } }, "title": "McpSetupUpdate", "type": "object" }, "Message-Input": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__Content" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel-Input" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Message", "type": "object" }, "Message-Output": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel-Output" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Message", "type": "object" }, "MessageChatResponse": { "properties": { "choices": { "items": { "anyOf": [ { "$ref": "#/$defs/SingleChatOutput" }, { "$ref": "#/$defs/MultipleChatOutput" } ] }, "title": "Choices", "type": "array" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" }, "usage": { "anyOf": [ { "$ref": "#/$defs/CompletionUsage" }, { "type": "null" } ] } }, "required": [ "created_at", "id", "choices" ], "title": "MessageChatResponse", "type": "object" }, "MessageModel": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel3" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/ContentModel4" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "created_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Created At" }, "id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Id" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "MessageModel", "type": "object" }, "MetadataFilter": { "additionalProperties": true, "properties": {}, "title": "MetadataFilter", "type": "object" }, "ModelInfo": { "description": "Model information returned by the model list endpoint", "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "ModelInfo", "type": "object" }, "MultipleChatOutput": { "description": "The output returned by the model. Note that, depending on the model provider, they might return more than one message.", "properties": { "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "messages": { "items": { "$ref": "#/$defs/MessageModel" }, "minItems": 1, "readOnly": true, "title": "Messages", "type": "array" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "messages" ], "title": "MultipleChatOutput", "type": "object" }, "MultipleEmbedQueryRequest": { "properties": { "embed_instruction": { "default": "", "title": "Embed Instruction", "type": "string" }, "text": { "items": { "type": "string" }, "maxItems": 100, "minItems": 1, "title": "Text", "type": "array" } }, "required": [ "text" ], "title": "MultipleEmbedQueryRequest", "type": "object" }, "NamedToolChoice": { "properties": { "function": { "anyOf": [ { "$ref": "#/$defs/FunctionCallOption" }, { "type": "null" } ] } }, "title": "NamedToolChoice", "type": "object" }, "ParallelStep-Input": { "properties": { "kind_": { "const": "parallel", "default": "parallel", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "parallel": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ] }, "maxItems": 100, "title": "Parallel", "type": "array" } }, "required": [ "parallel" ], "title": "ParallelStep", "type": "object" }, "ParallelStep-Output": { "properties": { "kind_": { "const": "parallel", "default": "parallel", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "parallel": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ] }, "maxItems": 100, "title": "Parallel", "type": "array" } }, "required": [ "parallel" ], "title": "ParallelStep", "type": "object" }, "ParameterSchema-Input": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "additionalProperties": { "$ref": "#/$defs/PropertyDefinition-Input" }, "title": "Properties", "type": "object" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "required": [ "properties" ], "title": "ParameterSchema", "type": "object" }, "ParameterSchema-Output": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "additionalProperties": { "$ref": "#/$defs/PropertyDefinition-Output" }, "title": "Properties", "type": "object" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "required": [ "properties" ], "title": "ParameterSchema", "type": "object" }, "ParameterSchemaUpdate": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/PropertyDefinitionUpdate" }, "type": "object" }, { "type": "null" } ], "title": "Properties" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "title": "ParameterSchemaUpdate", "type": "object" }, "PatchAgentRequest": { "description": "Payload for patching a agent", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Name" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "PatchAgentRequest", "type": "object" }, "PatchSessionRequest": { "description": "Payload for patching a session", "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearchUpdate" }, { "$ref": "#/$defs/TextOnlyDocSearchUpdate" }, { "$ref": "#/$defs/HybridDocSearchUpdate" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" } }, "title": "PatchSessionRequest", "type": "object" }, "PatchToolRequest": { "description": "Payload for patching a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDefUpdate" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022DefUpdate" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022DefUpdate" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDefUpdate" }, { "$ref": "#/$defs/BraveIntegrationDefUpdate" }, { "$ref": "#/$defs/EmailIntegrationDefUpdate" }, { "$ref": "#/$defs/SpiderIntegrationDefUpdate" }, { "$ref": "#/$defs/WikipediaIntegrationDefUpdate" }, { "$ref": "#/$defs/WeatherIntegrationDefUpdate" }, { "$ref": "#/$defs/MailgunIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDefUpdate" }, { "$ref": "#/$defs/LlamaParseIntegrationDefUpdate" }, { "$ref": "#/$defs/FfmpegIntegrationDefUpdate" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDefUpdate" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDefUpdate" }, { "$ref": "#/$defs/ArxivIntegrationDefUpdate" }, { "$ref": "#/$defs/UnstructuredIntegrationDefUpdate" }, { "$ref": "#/$defs/AlgoliaIntegrationDefUpdate" }, { "$ref": "#/$defs/McpIntegrationDefUpdate" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDefUpdate" }, { "type": "null" } ], "title": "Integration" }, "name": { "anyOf": [ { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "type": "string" }, { "type": "null" } ], "title": "Name" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDefUpdate" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022DefUpdate" }, { "type": "null" } ] }, "type": { "anyOf": [ { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "type": "string" }, { "type": "null" } ], "title": "Type" } }, "title": "PatchToolRequest", "type": "object" }, "PatchUserRequest": { "description": "Payload for patching a user", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "PatchUserRequest", "type": "object" }, "Project": { "description": "Project model", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name" ], "title": "Project", "type": "object" }, "PromptItem-Input": { "properties": { "content": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Tasks__Content" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel" }, { "$ref": "#/$defs/ContentModel1-Input" } ] }, "type": "array" }, { "type": "string" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role", "content" ], "title": "PromptItem", "type": "object" }, "PromptItem-Output": { "properties": { "content": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel1-Output" } ] }, "type": "array" }, { "type": "string" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role", "content" ], "title": "PromptItem", "type": "object" }, "PromptStep-Input": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "disable_cache": { "default": false, "title": "Disable Cache", "type": "boolean" }, "kind_": { "const": "prompt", "default": "prompt", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "prompt": { "anyOf": [ { "items": { "$ref": "#/$defs/PromptItem-Input" }, "type": "array" }, { "type": "string" } ], "title": "Prompt" }, "settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Settings" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "const": "all", "type": "string" }, { "items": { "anyOf": [ { "$ref": "#/$defs/ToolRef" }, { "$ref": "#/$defs/agents_api__autogen__Tools__CreateToolRequest-Input" } ] }, "type": "array" } ], "default": "all", "title": "Tools" }, "unwrap": { "default": false, "title": "Unwrap", "type": "boolean" } }, "required": [ "prompt" ], "title": "PromptStep", "type": "object" }, "PromptStep-Output": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "disable_cache": { "default": false, "title": "Disable Cache", "type": "boolean" }, "kind_": { "const": "prompt", "default": "prompt", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "prompt": { "anyOf": [ { "items": { "$ref": "#/$defs/PromptItem-Output" }, "type": "array" }, { "type": "string" } ], "title": "Prompt" }, "settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Settings" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "const": "all", "type": "string" }, { "items": { "anyOf": [ { "$ref": "#/$defs/ToolRef" }, { "$ref": "#/$defs/CreateToolRequest-Output" } ] }, "type": "array" } ], "default": "all", "title": "Tools" }, "unwrap": { "default": false, "title": "Unwrap", "type": "boolean" } }, "required": [ "prompt" ], "title": "PromptStep", "type": "object" }, "PropertyDefinition-Input": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinition-Input" }, { "type": "null" } ] }, "type": { "title": "Type", "type": "string" } }, "required": [ "type" ], "title": "PropertyDefinition", "type": "object" }, "PropertyDefinition-Output": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinition-Output" }, { "type": "null" } ] }, "type": { "title": "Type", "type": "string" } }, "required": [ "type" ], "title": "PropertyDefinition", "type": "object" }, "PropertyDefinitionUpdate": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinitionUpdate" }, { "type": "null" } ] }, "type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Type" } }, "title": "PropertyDefinitionUpdate", "type": "object" }, "Relation": { "properties": { "head": { "format": "uuid", "title": "Head", "type": "string" }, "relation": { "title": "Relation", "type": "string" }, "tail": { "format": "uuid", "title": "Tail", "type": "string" } }, "required": [ "head", "relation", "tail" ], "title": "Relation", "type": "object" }, "RemoteBrowserArguments": { "description": "The arguments for the remote browser", "properties": { "action": { "enum": [ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh" ], "title": "Action", "type": "string" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "coordinate": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "required": [ "action" ], "title": "RemoteBrowserArguments", "type": "object" }, "RemoteBrowserArgumentsUpdate": { "description": "The arguments for the remote browser", "properties": { "action": { "anyOf": [ { "enum": [ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh" ], "type": "string" }, { "type": "null" } ], "title": "Action" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "coordinate": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "title": "RemoteBrowserArgumentsUpdate", "type": "object" }, "RemoteBrowserIntegrationDef": { "description": "The integration definition for the remote browser", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserArguments" }, { "type": "null" } ] }, "method": { "const": "perform_action", "default": "perform_action", "title": "Method", "type": "string" }, "provider": { "const": "remote_browser", "default": "remote_browser", "title": "Provider", "type": "string" }, "setup": { "$ref": "#/$defs/RemoteBrowserSetup" } }, "required": [ "setup" ], "title": "RemoteBrowserIntegrationDef", "type": "object" }, "RemoteBrowserIntegrationDefUpdate": { "description": "The integration definition for the remote browser", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "perform_action", "default": "perform_action", "title": "Method", "type": "string" }, "provider": { "const": "remote_browser", "default": "remote_browser", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserSetup" }, { "type": "null" } ] } }, "title": "RemoteBrowserIntegrationDefUpdate", "type": "object" }, "RemoteBrowserSetup": { "description": "The setup parameters for the remote browser", "properties": { "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "height": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Height" }, "width": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Width" } }, "title": "RemoteBrowserSetup", "type": "object" }, "RenderResponse": { "properties": { "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "messages": { "items": { "$ref": "#/$defs/Message-Output" }, "minItems": 1, "title": "Messages", "type": "array" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "items": { "$ref": "#/$defs/CreateToolRequest-Output" }, "type": "array" }, { "type": "null" } ], "title": "Tools" } }, "required": [ "messages" ], "title": "RenderResponse", "type": "object" }, "ResourceDeletedResponse": { "properties": { "deleted_at": { "format": "date-time", "readOnly": true, "title": "Deleted At", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" } }, "required": [ "id", "deleted_at" ], "title": "ResourceDeletedResponse", "type": "object" }, "ResumeExecutionRequest": { "properties": { "input": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input" }, "status": { "const": "running", "default": "running", "title": "Status", "type": "string" } }, "title": "ResumeExecutionRequest", "type": "object" }, "ReturnStep": { "properties": { "kind_": { "const": "return", "default": "return", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "return": { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "title": "Return", "type": "object" } }, "required": [ "return" ], "title": "ReturnStep", "type": "object" }, "SchemaCompletionResponseFormat": { "properties": { "json_schema": { "title": "Json Schema", "type": "object" }, "type": { "const": "json_schema", "default": "json_schema", "title": "Type", "type": "string" } }, "required": [ "json_schema" ], "title": "SchemaCompletionResponseFormat", "type": "object" }, "Secret": { "description": "A secret that can be used in tasks and sessions", "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name", "value" ], "title": "Secret", "type": "object" }, "SecretRef": { "properties": { "name": { "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "SecretRef", "type": "object" }, "SecretRefUpdate": { "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" } }, "title": "SecretRefUpdate", "type": "object" }, "Session": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "kind": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Kind" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "summary": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Summary" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "Session", "type": "object" }, "SetStep": { "properties": { "kind_": { "const": "set", "default": "set", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "set": { "additionalProperties": { "anyOf": [ { "type": "object" }, { "type": "string" } ] }, "title": "Set", "type": "object" } }, "required": [ "set" ], "title": "SetStep", "type": "object" }, "SimpleCompletionResponseFormat": { "properties": { "type": { "default": "text", "enum": [ "text", "json_object" ], "title": "Type", "type": "string" } }, "title": "SimpleCompletionResponseFormat", "type": "object" }, "SingleChatOutput": { "description": "The output returned by the model. Note that, depending on the model provider, they might return more than one message.", "properties": { "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "message": { "$ref": "#/$defs/MessageModel" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "message" ], "title": "SingleChatOutput", "type": "object" }, "SingleEmbedQueryRequest": { "properties": { "embed_instruction": { "default": "", "title": "Embed Instruction", "type": "string" }, "text": { "title": "Text", "type": "string" } }, "required": [ "text" ], "title": "SingleEmbedQueryRequest", "type": "object" }, "SleepFor": { "properties": { "days": { "default": 0, "maximum": 30.0, "minimum": 0.0, "title": "Days", "type": "integer" }, "hours": { "default": 0, "maximum": 24.0, "minimum": 0.0, "title": "Hours", "type": "integer" }, "minutes": { "default": 0, "maximum": 60.0, "minimum": 0.0, "title": "Minutes", "type": "integer" }, "seconds": { "default": 0, "maximum": 60.0, "minimum": 0.0, "title": "Seconds", "type": "integer" } }, "title": "SleepFor", "type": "object" }, "SleepStep": { "properties": { "kind_": { "const": "sleep", "default": "sleep", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "sleep": { "$ref": "#/$defs/SleepFor" } }, "required": [ "sleep" ], "title": "SleepStep", "type": "object" }, "Snippet": { "properties": { "content": { "title": "Content", "type": "string" }, "embedding": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "title": "Embedding" }, "index": { "title": "Index", "type": "integer" } }, "required": [ "index", "content" ], "title": "Snippet", "type": "object" }, "Source": { "properties": { "data": { "title": "Data", "type": "string" }, "media_type": { "title": "Media Type", "type": "string" }, "type": { "const": "base64", "default": "base64", "title": "Type", "type": "string" } }, "required": [ "media_type", "data" ], "title": "Source", "type": "object" }, "SpiderFetchArguments": { "description": "Arguments for Spider integration", "properties": { "content_type": { "default": "application/json", "enum": [ "application/json", "text/csv", "application/xml", "application/jsonl" ], "title": "Content Type", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "url" ], "title": "SpiderFetchArguments", "type": "object" }, "SpiderFetchArgumentsUpdate": { "description": "Arguments for Spider integration", "properties": { "content_type": { "default": "application/json", "enum": [ "application/json", "text/csv", "application/xml", "application/jsonl" ], "title": "Content Type", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" }, "url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Url" } }, "title": "SpiderFetchArgumentsUpdate", "type": "object" }, "SpiderIntegrationDef": { "description": "Spider integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/SpiderFetchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "enum": [ "crawl", "links", "screenshot", "search" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "spider", "default": "spider", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/SpiderSetup" }, { "type": "null" } ] } }, "title": "SpiderIntegrationDef", "type": "object" }, "SpiderIntegrationDefUpdate": { "description": "Spider integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/SpiderFetchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "enum": [ "crawl", "links", "screenshot", "search" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "spider", "default": "spider", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/SpiderSetupUpdate" }, { "type": "null" } ] } }, "title": "SpiderIntegrationDefUpdate", "type": "object" }, "SpiderSetup": { "description": "Setup parameters for Spider integration", "properties": { "spider_api_key": { "title": "Spider Api Key", "type": "string" } }, "required": [ "spider_api_key" ], "title": "SpiderSetup", "type": "object" }, "SpiderSetupUpdate": { "description": "Setup parameters for Spider integration", "properties": { "spider_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spider Api Key" } }, "title": "SpiderSetupUpdate", "type": "object" }, "StopExecutionRequest": { "properties": { "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason" }, "status": { "const": "cancelled", "default": "cancelled", "title": "Status", "type": "string" } }, "title": "StopExecutionRequest", "type": "object" }, "SwitchStep-Input": { "properties": { "kind_": { "const": "switch", "default": "switch", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "switch": { "items": { "$ref": "#/$defs/CaseThen-Input" }, "minItems": 1, "title": "Switch", "type": "array" } }, "required": [ "switch" ], "title": "SwitchStep", "type": "object" }, "SwitchStep-Output": { "properties": { "kind_": { "const": "switch", "default": "switch", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "switch": { "items": { "$ref": "#/$defs/CaseThen-Output" }, "minItems": 1, "title": "Switch", "type": "array" } }, "required": [ "switch" ], "title": "SwitchStep", "type": "object" }, "SystemDef": { "description": "System definition", "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Arguments" }, "operation": { "enum": [ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list" ], "title": "Operation", "type": "string" }, "resource": { "enum": [ "agent", "user", "task", "execution", "doc", "session", "job" ], "title": "Resource", "type": "string" }, "resource_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Resource Id" }, "subresource": { "anyOf": [ { "enum": [ "tool", "doc", "execution", "transition" ], "type": "string" }, { "type": "null" } ], "title": "Subresource" } }, "required": [ "resource", "operation" ], "title": "SystemDef", "type": "object" }, "SystemDefUpdate": { "description": "System definition", "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Arguments" }, "operation": { "anyOf": [ { "enum": [ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list" ], "type": "string" }, { "type": "null" } ], "title": "Operation" }, "resource": { "anyOf": [ { "enum": [ "agent", "user", "task", "execution", "doc", "session", "job" ], "type": "string" }, { "type": "null" } ], "title": "Resource" }, "resource_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Resource Id" }, "subresource": { "anyOf": [ { "enum": [ "tool", "doc", "execution", "transition" ], "type": "string" }, { "type": "null" } ], "title": "Subresource" } }, "title": "SystemDefUpdate", "type": "object" }, "Task": { "additionalProperties": true, "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "inherit_tools": { "default": false, "title": "Inherit Tools", "type": "boolean" }, "input_schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input Schema" }, "main": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Main-Output" } ] }, "minItems": 1, "title": "Main", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "tools": { "default": [], "items": { "$ref": "#/$defs/TaskTool-Output" }, "title": "Tools", "type": "array" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "name", "main", "id", "created_at", "updated_at" ], "title": "Task", "type": "object" }, "TaskTool-Input": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "inherited": { "default": false, "readOnly": true, "title": "Inherited", "type": "boolean" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "TaskTool", "type": "object" }, "TaskTool-Output": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "inherited": { "default": false, "readOnly": true, "title": "Inherited", "type": "boolean" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "TaskTool", "type": "object" }, "TextEditor20241022Def": { "properties": { "name": { "default": "str_replace_editor", "title": "Name", "type": "string" }, "type": { "const": "text_editor_20241022", "default": "text_editor_20241022", "title": "Type", "type": "string" } }, "title": "TextEditor20241022Def", "type": "object" }, "TextEditor20241022DefUpdate": { "properties": { "name": { "default": "str_replace_editor", "title": "Name", "type": "string" }, "type": { "const": "text_editor_20241022", "default": "text_editor_20241022", "title": "Type", "type": "string" } }, "title": "TextEditor20241022DefUpdate", "type": "object" }, "TextOnlyDocSearch": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mode": { "const": "text", "default": "text", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "TextOnlyDocSearch", "type": "object" }, "TextOnlyDocSearchRequest": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "text": { "title": "Text", "type": "string" }, "trigram_similarity_threshold": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Trigram Similarity Threshold" } }, "required": [ "text" ], "title": "TextOnlyDocSearchRequest", "type": "object" }, "TextOnlyDocSearchUpdate": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mode": { "const": "text", "default": "text", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "TextOnlyDocSearchUpdate", "type": "object" }, "Then-Input": { "description": "The steps to run if the condition is true", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Then", "type": "object" }, "Then-Output": { "description": "The steps to run if the condition is true", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Then", "type": "object" }, "TokenLogProb": { "properties": { "bytes": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Bytes" }, "logprob": { "title": "Logprob", "type": "number" }, "token": { "title": "Token", "type": "string" }, "top_logprobs": { "items": { "$ref": "#/$defs/BaseTokenLogProb" }, "minItems": 1, "readOnly": true, "title": "Top Logprobs", "type": "array" } }, "required": [ "token", "logprob", "top_logprobs" ], "title": "TokenLogProb", "type": "object" }, "Tool": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "name", "type", "created_at", "updated_at", "id" ], "title": "Tool", "type": "object" }, "ToolCallStep": { "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "const": "_", "type": "string" } ], "default": "_", "title": "Arguments" }, "kind_": { "const": "tool_call", "default": "tool_call", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "tool": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Tool", "type": "string" } }, "required": [ "tool" ], "title": "ToolCallStep", "type": "object" }, "ToolRef": { "description": "Reference to a tool", "properties": { "ref": { "anyOf": [ { "$ref": "#/$defs/ToolRefById" }, { "$ref": "#/$defs/ToolRefByName" } ], "title": "Ref" } }, "required": [ "ref" ], "title": "ToolRef", "type": "object" }, "ToolRefById": { "description": "Reference to a tool by id", "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "ToolRefById", "type": "object" }, "ToolRefByName": { "description": "Reference to a tool by name", "properties": { "name": { "anyOf": [ { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "type": "string" }, { "type": "null" } ], "title": "Name" } }, "title": "ToolRefByName", "type": "object" }, "ToolResponse": { "properties": { "id": { "title": "Id", "type": "string" }, "output": { "title": "Output", "type": "object" } }, "required": [ "id", "output" ], "title": "ToolResponse", "type": "object" }, "Transition": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "current": { "$ref": "#/$defs/TransitionTarget", "readOnly": true }, "execution_id": { "format": "uuid", "readOnly": true, "title": "Execution Id", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "next": { "anyOf": [ { "$ref": "#/$defs/TransitionTarget" }, { "type": "null" } ], "readOnly": true }, "output": { "readOnly": true, "title": "Output" }, "step_label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Step Label" }, "type": { "enum": [ "init", "init_branch", "finish", "finish_branch", "wait", "resume", "error", "step", "cancelled" ], "readOnly": true, "title": "Type", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "type", "output", "created_at", "updated_at", "execution_id", "current", "next", "id" ], "title": "Transition", "type": "object" }, "TransitionTarget": { "properties": { "scope_id": { "format": "uuid", "title": "Scope Id", "type": "string" }, "step": { "title": "Step", "type": "integer" }, "workflow": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Workflow", "type": "string" } }, "required": [ "workflow", "step", "scope_id" ], "title": "TransitionTarget", "type": "object" }, "UnstructuredIntegrationDef": { "description": "Unstructured integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/UnstructuredPartitionArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "unstructured", "default": "unstructured", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/UnstructuredSetup" }, { "type": "null" } ] } }, "title": "UnstructuredIntegrationDef", "type": "object" }, "UnstructuredIntegrationDefUpdate": { "description": "Unstructured integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/UnstructuredPartitionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "unstructured", "default": "unstructured", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/UnstructuredSetupUpdate" }, { "type": "null" } ] } }, "title": "UnstructuredIntegrationDefUpdate", "type": "object" }, "UnstructuredPartitionArguments": { "description": "Arguments for Unstructured partition integration", "properties": { "file": { "title": "File", "type": "string" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "partition_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Partition Params" } }, "required": [ "file" ], "title": "UnstructuredPartitionArguments", "type": "object" }, "UnstructuredPartitionArgumentsUpdate": { "description": "Arguments for Unstructured partition integration", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "partition_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Partition Params" } }, "title": "UnstructuredPartitionArgumentsUpdate", "type": "object" }, "UnstructuredSetup": { "description": "Setup parameters for Unstructured integration", "properties": { "retry_config": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Retry Config" }, "server": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server" }, "server_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server Url" }, "timeout_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout Ms" }, "unstructured_api_key": { "title": "Unstructured Api Key", "type": "string" }, "url_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Url Params" } }, "required": [ "unstructured_api_key" ], "title": "UnstructuredSetup", "type": "object" }, "UnstructuredSetupUpdate": { "description": "Setup parameters for Unstructured integration", "properties": { "retry_config": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Retry Config" }, "server": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server" }, "server_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server Url" }, "timeout_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout Ms" }, "unstructured_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Unstructured Api Key" }, "url_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Url Params" } }, "title": "UnstructuredSetupUpdate", "type": "object" }, "UpdateAgentRequest": { "description": "Payload for updating a agent", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "UpdateAgentRequest", "type": "object" }, "UpdateSecretRequest": { "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "name", "value" ], "title": "UpdateSecretRequest", "type": "object" }, "UpdateSessionRequest": { "description": "Payload for updating a session", "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" } }, "title": "UpdateSessionRequest", "type": "object" }, "UpdateToolRequest": { "description": "Payload for updating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "UpdateToolRequest", "type": "object" }, "UpdateUserRequest": { "description": "Payload for updating a user", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "UpdateUserRequest", "type": "object" }, "User": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "User", "type": "object" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "title": "Location", "type": "array" }, "msg": { "title": "Message", "type": "string" }, "type": { "title": "Error Type", "type": "string" } }, "required": [ "loc", "msg", "type" ], "title": "ValidationError", "type": "object" }, "VectorDocSearch": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "vector", "default": "vector", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" } }, "title": "VectorDocSearch", "type": "object" }, "VectorDocSearchRequest": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "vector": { "items": { "type": "number" }, "title": "Vector", "type": "array" } }, "required": [ "vector" ], "title": "VectorDocSearchRequest", "type": "object" }, "VectorDocSearchUpdate": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "vector", "default": "vector", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" } }, "title": "VectorDocSearchUpdate", "type": "object" }, "WaitForInputInfo": { "properties": { "info": { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "title": "Info", "type": "object" } }, "required": [ "info" ], "title": "WaitForInputInfo", "type": "object" }, "WaitForInputStep": { "properties": { "kind_": { "const": "wait_for_input", "default": "wait_for_input", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "wait_for_input": { "$ref": "#/$defs/WaitForInputInfo" } }, "required": [ "wait_for_input" ], "title": "WaitForInputStep", "type": "object" }, "WeatherGetArguments": { "description": "Arguments for Weather", "properties": { "location": { "title": "Location", "type": "string" } }, "required": [ "location" ], "title": "WeatherGetArguments", "type": "object" }, "WeatherGetArgumentsUpdate": { "description": "Arguments for Weather", "properties": { "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Location" } }, "title": "WeatherGetArgumentsUpdate", "type": "object" }, "WeatherIntegrationDef": { "description": "Weather integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WeatherGetArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "weather", "default": "weather", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/WeatherSetup" }, { "type": "null" } ] } }, "title": "WeatherIntegrationDef", "type": "object" }, "WeatherIntegrationDefUpdate": { "description": "Weather integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WeatherGetArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "weather", "default": "weather", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/WeatherSetupUpdate" }, { "type": "null" } ] } }, "title": "WeatherIntegrationDefUpdate", "type": "object" }, "WeatherSetup": { "description": "Integration definition for Weather", "properties": { "openweathermap_api_key": { "title": "Openweathermap Api Key", "type": "string" } }, "required": [ "openweathermap_api_key" ], "title": "WeatherSetup", "type": "object" }, "WeatherSetupUpdate": { "description": "Integration definition for Weather", "properties": { "openweathermap_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Openweathermap Api Key" } }, "title": "WeatherSetupUpdate", "type": "object" }, "WikipediaIntegrationDef": { "description": "Wikipedia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WikipediaSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "wikipedia", "default": "wikipedia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "WikipediaIntegrationDef", "type": "object" }, "WikipediaIntegrationDefUpdate": { "description": "Wikipedia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WikipediaSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "wikipedia", "default": "wikipedia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "WikipediaIntegrationDefUpdate", "type": "object" }, "WikipediaSearchArguments": { "description": "Arguments for Wikipedia Search", "properties": { "load_max_docs": { "default": 2, "maximum": 10.0, "minimum": 1.0, "title": "Load Max Docs", "type": "integer" }, "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "WikipediaSearchArguments", "type": "object" }, "WikipediaSearchArgumentsUpdate": { "description": "Arguments for Wikipedia Search", "properties": { "load_max_docs": { "default": 2, "maximum": 10.0, "minimum": 1.0, "title": "Load Max Docs", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "WikipediaSearchArgumentsUpdate", "type": "object" }, "YieldStep": { "properties": { "arguments": { "anyOf": [ { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "type": "object" }, { "const": "_", "type": "string" } ], "default": "_", "title": "Arguments" }, "kind_": { "const": "yield", "default": "yield", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "workflow": { "title": "Workflow", "type": "string" } }, "required": [ "workflow" ], "title": "YieldStep", "type": "object" }, "agents_api__autogen__Chat__Content": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "agents_api__autogen__Chat__ContentModel-Input": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Chat__ContentModel-Output": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Chat__ContentModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Chat__ContentModel2": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel1" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel2" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel2", "type": "object" }, "agents_api__autogen__Chat__ContentModel3": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel3", "type": "object" }, "agents_api__autogen__Common__Content": { "maxLength": 30000, "title": "Content", "type": "string" }, "agents_api__autogen__Entries__ContentModel": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Entries__ContentModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Entries__ContentModel2": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel1" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel2" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel2", "type": "object" }, "agents_api__autogen__Entries__ContentModel3": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel3", "type": "object" }, "agents_api__autogen__Tasks__Content": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "agents_api__autogen__Tasks__ContentModel": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Tasks__ContentModel1-Output": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Tools__CreateToolRequest-Input": { "description": "Payload for creating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" }, "agents_api__autogen__openapi_model__CreateToolRequest": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" } }, "description": "Payload for creating a agent (and associated documents)", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "CreateAgentRequest", "type": "object" } ================================================ FILE: src/schemas/create_task_request.json ================================================ { "$defs": { "Agent": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name" ], "title": "Agent", "type": "object" }, "AlgoliaIntegrationDef": { "description": "Algolia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "algolia", "default": "algolia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSetup" }, { "type": "null" } ] } }, "title": "AlgoliaIntegrationDef", "type": "object" }, "AlgoliaIntegrationDefUpdate": { "description": "Algolia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "algolia", "default": "algolia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/AlgoliaSetupUpdate" }, { "type": "null" } ] } }, "title": "AlgoliaIntegrationDefUpdate", "type": "object" }, "AlgoliaSearchArguments": { "description": "Arguments for Algolia Search", "properties": { "attributes_to_retrieve": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Attributes To Retrieve" }, "hits_per_page": { "default": 10, "maximum": 1000.0, "minimum": 1.0, "title": "Hits Per Page", "type": "integer" }, "index_name": { "title": "Index Name", "type": "string" }, "query": { "title": "Query", "type": "string" } }, "required": [ "index_name", "query" ], "title": "AlgoliaSearchArguments", "type": "object" }, "AlgoliaSearchArgumentsUpdate": { "description": "Arguments for Algolia Search", "properties": { "attributes_to_retrieve": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Attributes To Retrieve" }, "hits_per_page": { "default": 10, "maximum": 1000.0, "minimum": 1.0, "title": "Hits Per Page", "type": "integer" }, "index_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Index Name" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "AlgoliaSearchArgumentsUpdate", "type": "object" }, "AlgoliaSetup": { "description": "Integration definition for Algolia", "properties": { "algolia_api_key": { "title": "Algolia Api Key", "type": "string" }, "algolia_application_id": { "title": "Algolia Application Id", "type": "string" } }, "required": [ "algolia_application_id", "algolia_api_key" ], "title": "AlgoliaSetup", "type": "object" }, "AlgoliaSetupUpdate": { "description": "Integration definition for Algolia", "properties": { "algolia_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Algolia Api Key" }, "algolia_application_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Algolia Application Id" } }, "title": "AlgoliaSetupUpdate", "type": "object" }, "ApiCallDef-Input": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "title": "Method", "type": "string" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchema-Input" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRef" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "method", "url" ], "title": "ApiCallDef", "type": "object" }, "ApiCallDef-Output": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "title": "Method", "type": "string" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchema-Output" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRef" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "method", "url" ], "title": "ApiCallDef", "type": "object" }, "ApiCallDefUpdate": { "description": "API call definition", "properties": { "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Content" }, "cookies": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Cookies" }, "data": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Data" }, "files": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Files" }, "follow_redirects": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Follow Redirects" }, "headers": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "title": "Headers" }, "include_response_content": { "default": true, "title": "Include Response Content", "type": "boolean" }, "json": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Json" }, "method": { "anyOf": [ { "enum": [ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "params": { "anyOf": [ { "type": "string" }, { "type": "object" }, { "type": "null" } ], "title": "Params" }, "params_schema": { "anyOf": [ { "$ref": "#/$defs/ParameterSchemaUpdate" }, { "type": "null" } ] }, "schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Schema" }, "secrets": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/SecretRefUpdate" }, "type": "object" }, { "type": "null" } ], "title": "Secrets" }, "timeout": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout" }, "url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Url" } }, "title": "ApiCallDefUpdate", "type": "object" }, "ArxivIntegrationDef": { "description": "Arxiv integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/ArxivSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "arxiv", "default": "arxiv", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "ArxivIntegrationDef", "type": "object" }, "ArxivIntegrationDefUpdate": { "description": "Arxiv integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/ArxivSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "arxiv", "default": "arxiv", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "ArxivIntegrationDefUpdate", "type": "object" }, "ArxivSearchArguments": { "description": "Arguments for Arxiv Search", "properties": { "download_pdf": { "default": false, "title": "Download Pdf", "type": "boolean" }, "id_list": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Id List" }, "max_results": { "default": 5, "maximum": 300000.0, "minimum": 1.0, "title": "Max Results", "type": "integer" }, "query": { "title": "Query", "type": "string" }, "sort_by": { "default": "relevance", "enum": [ "relevance", "lastUpdatedDate", "submittedDate" ], "title": "Sort By", "type": "string" }, "sort_order": { "default": "descending", "enum": [ "ascending", "descending" ], "title": "Sort Order", "type": "string" } }, "required": [ "query" ], "title": "ArxivSearchArguments", "type": "object" }, "ArxivSearchArgumentsUpdate": { "description": "Arguments for Arxiv Search", "properties": { "download_pdf": { "default": false, "title": "Download Pdf", "type": "boolean" }, "id_list": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Id List" }, "max_results": { "default": 5, "maximum": 300000.0, "minimum": 1.0, "title": "Max Results", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" }, "sort_by": { "default": "relevance", "enum": [ "relevance", "lastUpdatedDate", "submittedDate" ], "title": "Sort By", "type": "string" }, "sort_order": { "default": "descending", "enum": [ "ascending", "descending" ], "title": "Sort Order", "type": "string" } }, "title": "ArxivSearchArgumentsUpdate", "type": "object" }, "BaseTokenLogProb": { "properties": { "bytes": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Bytes" }, "logprob": { "title": "Logprob", "type": "number" }, "token": { "title": "Token", "type": "string" } }, "required": [ "token", "logprob" ], "title": "BaseTokenLogProb", "type": "object" }, "Bash20241022Def": { "properties": { "name": { "default": "bash", "title": "Name", "type": "string" }, "type": { "const": "bash_20241022", "default": "bash_20241022", "title": "Type", "type": "string" } }, "title": "Bash20241022Def", "type": "object" }, "Bash20241022DefUpdate": { "properties": { "name": { "default": "bash", "title": "Name", "type": "string" }, "type": { "const": "bash_20241022", "default": "bash_20241022", "title": "Type", "type": "string" } }, "title": "Bash20241022DefUpdate", "type": "object" }, "BraveIntegrationDef": { "description": "Brave integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BraveSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "brave", "default": "brave", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BraveSearchSetup" }, { "type": "null" } ] } }, "title": "BraveIntegrationDef", "type": "object" }, "BraveIntegrationDefUpdate": { "description": "Brave integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BraveSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "brave", "default": "brave", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BraveSearchSetupUpdate" }, { "type": "null" } ] } }, "title": "BraveIntegrationDefUpdate", "type": "object" }, "BraveSearchArguments": { "description": "Arguments for Brave Search", "properties": { "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "BraveSearchArguments", "type": "object" }, "BraveSearchArgumentsUpdate": { "description": "Arguments for Brave Search", "properties": { "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "BraveSearchArgumentsUpdate", "type": "object" }, "BraveSearchSetup": { "description": "Integration definition for Brave Search", "properties": { "brave_api_key": { "title": "Brave Api Key", "type": "string" } }, "required": [ "brave_api_key" ], "title": "BraveSearchSetup", "type": "object" }, "BraveSearchSetupUpdate": { "description": "Integration definition for Brave Search", "properties": { "brave_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Brave Api Key" } }, "title": "BraveSearchSetupUpdate", "type": "object" }, "BrowserbaseCompleteSessionArguments": { "properties": { "id": { "title": "Id", "type": "string" }, "status": { "const": "REQUEST_RELEASE", "default": "REQUEST_RELEASE", "title": "Status", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseCompleteSessionArguments", "type": "object" }, "BrowserbaseCompleteSessionArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" }, "status": { "const": "REQUEST_RELEASE", "default": "REQUEST_RELEASE", "title": "Status", "type": "string" } }, "title": "BrowserbaseCompleteSessionArgumentsUpdate", "type": "object" }, "BrowserbaseCompleteSessionIntegrationDef": { "description": "browserbase complete session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCompleteSessionArguments" }, { "type": "null" } ] }, "method": { "const": "complete_session", "default": "complete_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseCompleteSessionIntegrationDef", "type": "object" }, "BrowserbaseCompleteSessionIntegrationDefUpdate": { "description": "browserbase complete session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCompleteSessionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "complete_session", "default": "complete_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseCompleteSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseContextArguments": { "properties": { "projectId": { "title": "Projectid", "type": "string" } }, "required": [ "projectId" ], "title": "BrowserbaseContextArguments", "type": "object" }, "BrowserbaseContextArgumentsUpdate": { "properties": { "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Projectid" } }, "title": "BrowserbaseContextArgumentsUpdate", "type": "object" }, "BrowserbaseContextIntegrationDef": { "description": "browserbase context provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseContextArguments" }, { "type": "null" } ] }, "method": { "const": "create_context", "default": "create_context", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseContextIntegrationDef", "type": "object" }, "BrowserbaseContextIntegrationDefUpdate": { "description": "browserbase context provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseContextArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "create_context", "default": "create_context", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseContextIntegrationDefUpdate", "type": "object" }, "BrowserbaseCreateSessionArguments": { "properties": { "browserSettings": { "default": {}, "title": "Browsersettings", "type": "object" }, "extensionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Extensionid" }, "keepAlive": { "default": false, "title": "Keepalive", "type": "boolean" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Projectid" }, "proxies": { "anyOf": [ { "type": "boolean" }, { "items": { "type": "object" }, "type": "array" } ], "default": false, "title": "Proxies" }, "timeout": { "default": 3600, "title": "Timeout", "type": "integer" } }, "title": "BrowserbaseCreateSessionArguments", "type": "object" }, "BrowserbaseCreateSessionIntegrationDef": { "description": "browserbase create session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCreateSessionArguments" }, { "type": "null" } ] }, "method": { "const": "create_session", "default": "create_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseCreateSessionIntegrationDef", "type": "object" }, "BrowserbaseCreateSessionIntegrationDefUpdate": { "description": "browserbase create session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseCreateSessionArguments" }, { "type": "null" } ] }, "method": { "const": "create_session", "default": "create_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseCreateSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseExtensionArguments": { "properties": { "ref": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ref" }, "repositoryName": { "title": "Repositoryname", "type": "string" } }, "required": [ "repositoryName" ], "title": "BrowserbaseExtensionArguments", "type": "object" }, "BrowserbaseExtensionArgumentsUpdate": { "properties": { "ref": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ref" }, "repositoryName": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Repositoryname" } }, "title": "BrowserbaseExtensionArgumentsUpdate", "type": "object" }, "BrowserbaseExtensionIntegrationDef": { "description": "browserbase extension provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseExtensionArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "install_extension_from_github", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseExtensionIntegrationDef", "type": "object" }, "BrowserbaseExtensionIntegrationDefUpdate": { "description": "browserbase extension provider", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseExtensionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "install_extension_from_github", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseExtensionIntegrationDefUpdate", "type": "object" }, "BrowserbaseGetSessionArguments": { "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseGetSessionArguments", "type": "object" }, "BrowserbaseGetSessionArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "BrowserbaseGetSessionArgumentsUpdate", "type": "object" }, "BrowserbaseGetSessionIntegrationDef": { "description": "browserbase get session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionArguments" }, { "type": "null" } ] }, "method": { "const": "get_session", "default": "get_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionIntegrationDef", "type": "object" }, "BrowserbaseGetSessionIntegrationDefUpdate": { "description": "browserbase get session integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "get_session", "default": "get_session", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionIntegrationDefUpdate", "type": "object" }, "BrowserbaseGetSessionLiveUrlsArguments": { "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "BrowserbaseGetSessionLiveUrlsArguments", "type": "object" }, "BrowserbaseGetSessionLiveUrlsArgumentsUpdate": { "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "BrowserbaseGetSessionLiveUrlsArgumentsUpdate", "type": "object" }, "BrowserbaseGetSessionLiveUrlsIntegrationDef": { "description": "browserbase get session live urls integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsArguments" }, { "type": "null" } ] }, "method": { "const": "get_live_urls", "default": "get_live_urls", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionLiveUrlsIntegrationDef", "type": "object" }, "BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate": { "description": "browserbase get session live urls integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "get_live_urls", "default": "get_live_urls", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate", "type": "object" }, "BrowserbaseListSessionsArguments": { "properties": { "status": { "anyOf": [ { "enum": [ "RUNNING", "ERROR", "TIMED_OUT", "COMPLETED" ], "type": "string" }, { "type": "null" } ], "title": "Status" } }, "title": "BrowserbaseListSessionsArguments", "type": "object" }, "BrowserbaseListSessionsIntegrationDef": { "description": "browserbase list sessions integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseListSessionsArguments" }, { "type": "null" } ] }, "method": { "const": "list_sessions", "default": "list_sessions", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetup" }, { "type": "null" } ] } }, "title": "BrowserbaseListSessionsIntegrationDef", "type": "object" }, "BrowserbaseListSessionsIntegrationDefUpdate": { "description": "browserbase list sessions integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseListSessionsArguments" }, { "type": "null" } ] }, "method": { "const": "list_sessions", "default": "list_sessions", "title": "Method", "type": "string" }, "provider": { "const": "browserbase", "default": "browserbase", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/BrowserbaseSetupUpdate" }, { "type": "null" } ] } }, "title": "BrowserbaseListSessionsIntegrationDefUpdate", "type": "object" }, "BrowserbaseSetup": { "description": "The setup parameters for the browserbase integration", "properties": { "api_key": { "title": "Api Key", "type": "string" }, "api_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Url" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "project_id": { "title": "Project Id", "type": "string" } }, "required": [ "api_key", "project_id" ], "title": "BrowserbaseSetup", "type": "object" }, "BrowserbaseSetupUpdate": { "description": "The setup parameters for the browserbase integration", "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key" }, "api_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Url" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "project_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Project Id" } }, "title": "BrowserbaseSetupUpdate", "type": "object" }, "BulkDeleteDocsRequest": { "properties": { "delete_all": { "default": false, "title": "Delete All", "type": "boolean" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" } }, "title": "BulkDeleteDocsRequest", "type": "object" }, "CaseThen-Input": { "properties": { "case": { "anyOf": [ { "const": "_", "type": "string" }, { "type": "string" } ], "title": "Case" }, "then": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" } ], "title": "Then" } }, "required": [ "case", "then" ], "title": "CaseThen", "type": "object" }, "CaseThen-Output": { "properties": { "case": { "anyOf": [ { "const": "_", "type": "string" }, { "type": "string" } ], "title": "Case" }, "then": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" } ], "title": "Then" } }, "required": [ "case", "then" ], "title": "CaseThen", "type": "object" }, "ChatInput": { "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "frequency_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": -2.0, "type": "number" }, { "type": "null" } ], "title": "Frequency Penalty" }, "length_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Length Penalty" }, "logit_bias": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/LogitBias" }, "type": "object" }, { "type": "null" } ], "title": "Logit Bias" }, "max_tokens": { "anyOf": [ { "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Max Tokens" }, "messages": { "items": { "$ref": "#/$defs/Message-Input" }, "minItems": 1, "title": "Messages", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "min_p": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Min P" }, "model": { "anyOf": [ { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "type": "string" }, { "type": "null" } ], "title": "Model" }, "presence_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": -2.0, "type": "number" }, { "type": "null" } ], "title": "Presence Penalty" }, "recall": { "default": true, "title": "Recall", "type": "boolean" }, "recall_tools": { "default": true, "title": "Recall Tools", "type": "boolean" }, "remember": { "default": false, "readOnly": true, "title": "Remember", "type": "boolean" }, "repetition_penalty": { "anyOf": [ { "maximum": 2.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Repetition Penalty" }, "response_format": { "anyOf": [ { "$ref": "#/$defs/SimpleCompletionResponseFormat" }, { "$ref": "#/$defs/SchemaCompletionResponseFormat" }, { "type": "null" } ], "title": "Response Format" }, "save": { "default": true, "title": "Save", "type": "boolean" }, "seed": { "anyOf": [ { "maximum": 1000.0, "minimum": -1.0, "type": "integer" }, { "type": "null" } ], "title": "Seed" }, "stop": { "default": [], "items": { "type": "string" }, "maxItems": 4, "title": "Stop", "type": "array" }, "stream": { "default": false, "title": "Stream", "type": "boolean" }, "temperature": { "anyOf": [ { "maximum": 5.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Temperature" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "items": { "$ref": "#/$defs/agents_api__autogen__Tools__CreateToolRequest-Input" }, "type": "array" }, { "type": "null" } ], "title": "Tools" }, "top_p": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Top P" } }, "required": [ "messages" ], "title": "ChatInput", "type": "object" }, "ChatOutputChunk": { "description": "Streaming chat completion output", "properties": { "delta": { "$ref": "#/$defs/Delta" }, "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "delta" ], "title": "ChatOutputChunk", "type": "object" }, "ChosenBash20241022": { "properties": { "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "restart": { "default": false, "title": "Restart", "type": "boolean" } }, "title": "ChosenBash20241022", "type": "object" }, "ChosenComputer20241022": { "properties": { "action": { "enum": [ "key", "type", "cursor_position", "mouse_move", "left_click", "right_click", "middle_click", "double_click", "screenshot" ], "title": "Action", "type": "string" }, "coordinate": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "required": [ "action" ], "title": "ChosenComputer20241022", "type": "object" }, "ChosenFunctionCall": { "properties": { "api_call": { "anyOf": [ {}, { "type": "null" } ], "title": "Api Call" }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenComputer20241022" }, { "type": "null" } ] }, "function": { "$ref": "#/$defs/FunctionCallOption" }, "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Id" }, "integration": { "anyOf": [ {}, { "type": "null" } ], "title": "Integration" }, "system": { "anyOf": [ {}, { "type": "null" } ], "title": "System" }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "type": "null" } ] }, "type": { "const": "function", "default": "function", "title": "Type", "type": "string" } }, "required": [ "function" ], "title": "ChosenFunctionCall", "type": "object" }, "ChosenTextEditor20241022": { "properties": { "command": { "enum": [ "str_replace", "insert", "view", "undo_edit" ], "title": "Command", "type": "string" }, "file_text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File Text" }, "insert_line": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Insert Line" }, "new_str": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "New Str" }, "old_str": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Old Str" }, "path": { "title": "Path", "type": "string" }, "view_range": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "View Range" } }, "required": [ "command", "path" ], "title": "ChosenTextEditor20241022", "type": "object" }, "ChunkChatResponse": { "properties": { "choices": { "items": { "$ref": "#/$defs/ChatOutputChunk" }, "title": "Choices", "type": "array" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" }, "usage": { "anyOf": [ { "$ref": "#/$defs/CompletionUsage" }, { "type": "null" } ] } }, "required": [ "created_at", "id", "choices" ], "title": "ChunkChatResponse", "type": "object" }, "CloudinaryEditArguments": { "description": "Arguments for Cloudinary media edit", "properties": { "public_id": { "title": "Public Id", "type": "string" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "transformation": { "items": { "type": "object" }, "title": "Transformation", "type": "array" } }, "required": [ "public_id", "transformation" ], "title": "CloudinaryEditArguments", "type": "object" }, "CloudinaryEditArgumentsUpdate": { "description": "Arguments for Cloudinary media edit", "properties": { "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "transformation": { "anyOf": [ { "items": { "type": "object" }, "type": "array" }, { "type": "null" } ], "title": "Transformation" } }, "title": "CloudinaryEditArgumentsUpdate", "type": "object" }, "CloudinaryEditIntegrationDef": { "description": "Cloudinary edit integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryEditArguments" }, { "type": "null" } ] }, "method": { "const": "media_edit", "default": "media_edit", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetup" }, { "type": "null" } ] } }, "title": "CloudinaryEditIntegrationDef", "type": "object" }, "CloudinaryEditIntegrationDefUpdate": { "description": "Cloudinary edit integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryEditArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "media_edit", "default": "media_edit", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetupUpdate" }, { "type": "null" } ] } }, "title": "CloudinaryEditIntegrationDefUpdate", "type": "object" }, "CloudinarySetup": { "description": "Setup parameters for Cloudinary integration", "properties": { "cloudinary_api_key": { "title": "Cloudinary Api Key", "type": "string" }, "cloudinary_api_secret": { "title": "Cloudinary Api Secret", "type": "string" }, "cloudinary_cloud_name": { "title": "Cloudinary Cloud Name", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "cloudinary_api_key", "cloudinary_api_secret", "cloudinary_cloud_name" ], "title": "CloudinarySetup", "type": "object" }, "CloudinarySetupUpdate": { "description": "Setup parameters for Cloudinary integration", "properties": { "cloudinary_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Api Key" }, "cloudinary_api_secret": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Api Secret" }, "cloudinary_cloud_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cloudinary Cloud Name" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "CloudinarySetupUpdate", "type": "object" }, "CloudinaryUploadArguments": { "description": "Arguments for Cloudinary media upload", "properties": { "file": { "title": "File", "type": "string" }, "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "upload_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Upload Params" } }, "required": [ "file" ], "title": "CloudinaryUploadArguments", "type": "object" }, "CloudinaryUploadArgumentsUpdate": { "description": "Arguments for Cloudinary media upload", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File" }, "public_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Public Id" }, "return_base64": { "default": false, "title": "Return Base64", "type": "boolean" }, "upload_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Upload Params" } }, "title": "CloudinaryUploadArgumentsUpdate", "type": "object" }, "CloudinaryUploadIntegrationDef": { "description": "Cloudinary upload integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryUploadArguments" }, { "type": "null" } ] }, "method": { "const": "media_upload", "default": "media_upload", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetup" }, { "type": "null" } ] } }, "title": "CloudinaryUploadIntegrationDef", "type": "object" }, "CloudinaryUploadIntegrationDefUpdate": { "description": "Cloudinary upload integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/CloudinaryUploadArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "media_upload", "default": "media_upload", "title": "Method", "type": "string" }, "provider": { "const": "cloudinary", "default": "cloudinary", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/CloudinarySetupUpdate" }, { "type": "null" } ] } }, "title": "CloudinaryUploadIntegrationDefUpdate", "type": "object" }, "CompletionUsage": { "description": "Usage statistics for the completion request", "properties": { "completion_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Completion Tokens" }, "prompt_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Prompt Tokens" }, "total_tokens": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Total Tokens" } }, "title": "CompletionUsage", "type": "object" }, "Computer20241022Def": { "description": "Anthropic new tools", "properties": { "display_height_px": { "default": 768, "minimum": 400.0, "title": "Display Height Px", "type": "integer" }, "display_number": { "default": 1, "maximum": 10.0, "minimum": 1.0, "title": "Display Number", "type": "integer" }, "display_width_px": { "default": 1024, "minimum": 600.0, "title": "Display Width Px", "type": "integer" }, "name": { "default": "computer", "title": "Name", "type": "string" }, "type": { "const": "computer_20241022", "default": "computer_20241022", "title": "Type", "type": "string" } }, "title": "Computer20241022Def", "type": "object" }, "Computer20241022DefUpdate": { "description": "Anthropic new tools", "properties": { "display_height_px": { "default": 768, "minimum": 400.0, "title": "Display Height Px", "type": "integer" }, "display_number": { "default": 1, "maximum": 10.0, "minimum": 1.0, "title": "Display Number", "type": "integer" }, "display_width_px": { "default": 1024, "minimum": 600.0, "title": "Display Width Px", "type": "integer" }, "name": { "default": "computer", "title": "Name", "type": "string" }, "type": { "const": "computer_20241022", "default": "computer_20241022", "title": "Type", "type": "string" } }, "title": "Computer20241022DefUpdate", "type": "object" }, "Content-Output": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "ContentItem": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItem", "type": "object" }, "ContentItemModel": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel", "type": "object" }, "ContentItemModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItemModel1", "type": "object" }, "ContentItemModel2": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel2", "type": "object" }, "ContentItemModel3": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentItemModel3", "type": "object" }, "ContentItemModel4": { "properties": { "source": { "$ref": "#/$defs/Source" }, "type": { "const": "image", "default": "image", "title": "Type", "type": "string" } }, "required": [ "source" ], "title": "ContentItemModel4", "type": "object" }, "ContentModel1-Input": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel1", "type": "object" }, "ContentModel4": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel3" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel4" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel4", "type": "object" }, "ContentModel7": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel7", "type": "object" }, "CreateAgentRequest": { "description": "Payload for creating a agent (and associated documents)", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "CreateAgentRequest", "type": "object" }, "CreateDocRequest": { "description": "Payload for creating a doc", "properties": { "content": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Common__Content" }, { "items": { "$ref": "#/$defs/agents_api__autogen__Common__Content" }, "type": "array" } ], "title": "Content" }, "embed_instruction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Embed Instruction" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "title": { "maxLength": 800, "title": "Title", "type": "string" } }, "required": [ "title", "content" ], "title": "CreateDocRequest", "type": "object" }, "CreateExecutionRequest": { "description": "Payload for creating an execution", "properties": { "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "input": { "title": "Input", "type": "object" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "output": { "anyOf": [ {}, { "type": "null" } ], "title": "Output" }, "transition_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Transition Count" } }, "required": [ "input" ], "title": "CreateExecutionRequest", "type": "object" }, "CreateFileRequest": { "description": "Payload for creating a file", "properties": { "content": { "title": "Content", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "mime_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Mime Type" }, "name": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name", "content" ], "title": "CreateFileRequest", "type": "object" }, "CreateOrUpdateAgentRequest": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "CreateOrUpdateAgentRequest", "type": "object" }, "CreateOrUpdateSessionRequest": { "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "agents": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Agents" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "user": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "User" }, "users": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Users" } }, "title": "CreateOrUpdateSessionRequest", "type": "object" }, "CreateOrUpdateUserRequest": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "CreateOrUpdateUserRequest", "type": "object" }, "CreateProjectRequest": { "description": "Payload for creating a project", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "CreateProjectRequest", "type": "object" }, "CreateSecretRequest": { "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "name", "value" ], "title": "CreateSecretRequest", "type": "object" }, "CreateSessionRequest": { "description": "Payload for creating a session", "properties": { "agent": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Agent" }, "agents": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Agents" }, "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "user": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "User" }, "users": { "anyOf": [ { "items": { "format": "uuid", "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Users" } }, "title": "CreateSessionRequest", "type": "object" }, "CreateTaskRequest": { "additionalProperties": true, "description": "Payload for creating a task", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "description": { "default": "", "title": "Description", "type": "string" }, "inherit_tools": { "default": false, "title": "Inherit Tools", "type": "boolean" }, "input_schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input Schema" }, "main": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Main-Input" } ] }, "minItems": 1, "title": "Main", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "tools": { "default": [], "items": { "$ref": "#/$defs/TaskTool-Input" }, "title": "Tools", "type": "array" } }, "required": [ "name", "main" ], "title": "CreateTaskRequest", "type": "object" }, "CreateToolRequest-Output": { "description": "Payload for creating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" }, "CreateUserRequest": { "description": "Payload for creating a user (and associated documents)", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "CreateUserRequest", "type": "object" }, "Delta": { "description": "The message generated by the model", "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel1" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel2" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Delta", "type": "object" }, "Doc": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "title": "Content" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "embedding_dimensions": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "readOnly": true, "title": "Embedding Dimensions" }, "embedding_model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Embedding Model" }, "embeddings": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, { "type": "null" } ], "readOnly": true, "title": "Embeddings" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "language": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Language" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "modality": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Modality" }, "title": { "maxLength": 800, "title": "Title", "type": "string" } }, "required": [ "id", "created_at", "title", "content" ], "title": "Doc", "type": "object" }, "DocOwner": { "properties": { "id": { "format": "uuid", "title": "Id", "type": "string" }, "role": { "enum": [ "user", "agent" ], "title": "Role", "type": "string" } }, "required": [ "id", "role" ], "title": "DocOwner", "type": "object" }, "DocReference": { "properties": { "distance": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Distance" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "owner": { "$ref": "#/$defs/DocOwner" }, "snippet": { "$ref": "#/$defs/Snippet" }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Title" } }, "required": [ "owner", "id", "snippet" ], "title": "DocReference", "type": "object" }, "DocSearchResponse": { "properties": { "docs": { "items": { "$ref": "#/$defs/DocReference" }, "title": "Docs", "type": "array" }, "time": { "exclusiveMinimum": 0.0, "title": "Time", "type": "number" } }, "required": [ "docs", "time" ], "title": "DocSearchResponse", "type": "object" }, "DummyIntegrationDef": { "properties": { "arguments": { "anyOf": [ {}, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "dummy", "default": "dummy", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "DummyIntegrationDef", "type": "object" }, "DummyIntegrationDefUpdate": { "properties": { "arguments": { "anyOf": [ {}, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "dummy", "default": "dummy", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "DummyIntegrationDefUpdate", "type": "object" }, "Else-Input": { "description": "The steps to run if the condition is false", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Else", "type": "object" }, "Else-Output": { "description": "The steps to run if the condition is false", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Else", "type": "object" }, "EmailArguments": { "description": "Arguments for Email sending", "properties": { "body": { "title": "Body", "type": "string" }, "from": { "title": "From", "type": "string" }, "subject": { "title": "Subject", "type": "string" }, "to": { "title": "To", "type": "string" } }, "required": [ "to", "from", "subject", "body" ], "title": "EmailArguments", "type": "object" }, "EmailArgumentsUpdate": { "description": "Arguments for Email sending", "properties": { "body": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Body" }, "from": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "From" }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subject" }, "to": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "To" } }, "title": "EmailArgumentsUpdate", "type": "object" }, "EmailIntegrationDef": { "description": "Email integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/EmailArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "email", "default": "email", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/EmailSetup" }, { "type": "null" } ] } }, "title": "EmailIntegrationDef", "type": "object" }, "EmailIntegrationDefUpdate": { "description": "Email integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/EmailArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "email", "default": "email", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/EmailSetupUpdate" }, { "type": "null" } ] } }, "title": "EmailIntegrationDefUpdate", "type": "object" }, "EmailSetup": { "description": "Setup parameters for Email integration", "properties": { "host": { "title": "Host", "type": "string" }, "password": { "title": "Password", "type": "string" }, "port": { "title": "Port", "type": "integer" }, "user": { "title": "User", "type": "string" } }, "required": [ "host", "port", "user", "password" ], "title": "EmailSetup", "type": "object" }, "EmailSetupUpdate": { "description": "Setup parameters for Email integration", "properties": { "host": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Host" }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" }, "port": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Port" }, "user": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "User" } }, "title": "EmailSetupUpdate", "type": "object" }, "EmbedQueryResponse": { "properties": { "vectors": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Vectors", "type": "array" } }, "required": [ "vectors" ], "title": "EmbedQueryResponse", "type": "object" }, "Entry": { "properties": { "content": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel3" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel" } ] }, "type": "array" }, { "$ref": "#/$defs/Tool" }, { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "string" }, { "$ref": "#/$defs/ToolResponse" }, { "items": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel1" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel3" }, { "$ref": "#/$defs/agents_api__autogen__Entries__ContentModel2" } ] }, "type": "array" }, { "$ref": "#/$defs/Tool" }, { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" }, { "type": "string" }, { "$ref": "#/$defs/ToolResponse" } ] }, "type": "array" } ], "title": "Content" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "model": { "default": "gpt-4o-mini", "title": "Model", "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "source": { "enum": [ "api_request", "api_response", "tool_request", "tool_response", "internal", "summarizer", "meta" ], "title": "Source", "type": "string" }, "timestamp": { "format": "date-time", "title": "Timestamp", "type": "string" }, "token_count": { "title": "Token Count", "type": "integer" }, "tokenizer": { "title": "Tokenizer", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "role", "content", "source", "tokenizer", "token_count", "timestamp", "created_at", "id" ], "title": "Entry", "type": "object" }, "ErrorWorkflowStep": { "properties": { "error": { "title": "Error", "type": "string" }, "kind_": { "const": "error", "default": "error", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "error" ], "title": "ErrorWorkflowStep", "type": "object" }, "EvaluateStep": { "properties": { "evaluate": { "additionalProperties": { "anyOf": [ { "type": "object" }, { "type": "string" } ] }, "title": "Evaluate", "type": "object" }, "kind_": { "const": "evaluate", "default": "evaluate", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "evaluate" ], "title": "EvaluateStep", "type": "object" }, "Execution": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "input": { "title": "Input", "type": "object" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "output": { "anyOf": [ {}, { "type": "null" } ], "title": "Output" }, "status": { "enum": [ "queued", "starting", "running", "awaiting_input", "succeeded", "failed", "cancelled" ], "readOnly": true, "title": "Status", "type": "string" }, "task_id": { "format": "uuid", "readOnly": true, "title": "Task Id", "type": "string" }, "transition_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Transition Count" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "task_id", "status", "input", "created_at", "updated_at", "id" ], "title": "Execution", "type": "object" }, "FfmpegIntegrationDef": { "description": "Ffmpeg integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/FfmpegSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "ffmpeg", "default": "ffmpeg", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "FfmpegIntegrationDef", "type": "object" }, "FfmpegIntegrationDefUpdate": { "description": "Ffmpeg integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/FfmpegSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "ffmpeg", "default": "ffmpeg", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "FfmpegIntegrationDefUpdate", "type": "object" }, "FfmpegSearchArguments": { "description": "Arguments for Ffmpeg CMD", "properties": { "cmd": { "title": "Cmd", "type": "string" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" } }, "required": [ "cmd" ], "title": "FfmpegSearchArguments", "type": "object" }, "FfmpegSearchArgumentsUpdate": { "description": "Arguments for Ffmpeg CMD", "properties": { "cmd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cmd" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" } }, "title": "FfmpegSearchArgumentsUpdate", "type": "object" }, "File": { "properties": { "content": { "title": "Content", "type": "string" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "hash": { "readOnly": true, "title": "Hash", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "mime_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Mime Type" }, "name": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "size": { "minimum": 1.0, "readOnly": true, "title": "Size", "type": "integer" } }, "required": [ "id", "created_at", "name", "content", "size", "hash" ], "title": "File", "type": "object" }, "ForeachDo-Input": { "properties": { "do": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Do" }, "in": { "title": "In", "type": "string" } }, "required": [ "in", "do" ], "title": "ForeachDo", "type": "object" }, "ForeachDo-Output": { "properties": { "do": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Do" }, "in": { "title": "In", "type": "string" } }, "required": [ "in", "do" ], "title": "ForeachDo", "type": "object" }, "ForeachStep-Input": { "properties": { "foreach": { "$ref": "#/$defs/ForeachDo-Input" }, "kind_": { "const": "foreach", "default": "foreach", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "foreach" ], "title": "ForeachStep", "type": "object" }, "ForeachStep-Output": { "properties": { "foreach": { "$ref": "#/$defs/ForeachDo-Output" }, "kind_": { "const": "foreach", "default": "foreach", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "foreach" ], "title": "ForeachStep", "type": "object" }, "FunctionCallOption": { "properties": { "arguments": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Arguments" }, "name": { "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "FunctionCallOption", "type": "object" }, "FunctionDef": { "description": "Function definition", "properties": { "description": { "anyOf": [ {}, { "type": "null" } ], "title": "Description" }, "name": { "anyOf": [ {}, { "type": "null" } ], "title": "Name" }, "parameters": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Parameters" } }, "title": "FunctionDef", "type": "object" }, "GetStep": { "properties": { "get": { "title": "Get", "type": "string" }, "kind_": { "const": "get", "default": "get", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" } }, "required": [ "get" ], "title": "GetStep", "type": "object" }, "GoogleSheetsAppendArguments": { "description": "Arguments for appending values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "INSERT_ROWS", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "spreadsheet_id", "range", "values" ], "title": "GoogleSheetsAppendArguments", "type": "object" }, "GoogleSheetsAppendArgumentsUpdate": { "description": "Arguments for appending values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "INSERT_ROWS", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "anyOf": [ { "items": { "items": {}, "type": "array" }, "type": "array" }, { "type": "null" } ], "title": "Values" } }, "title": "GoogleSheetsAppendArgumentsUpdate", "type": "object" }, "GoogleSheetsBatchReadArguments": { "description": "Arguments for batch reading values from multiple ranges", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "ranges": { "items": { "type": "string" }, "title": "Ranges", "type": "array" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "required": [ "spreadsheet_id", "ranges" ], "title": "GoogleSheetsBatchReadArguments", "type": "object" }, "GoogleSheetsBatchReadArgumentsUpdate": { "description": "Arguments for batch reading values from multiple ranges", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "ranges": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Ranges" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "title": "GoogleSheetsBatchReadArgumentsUpdate", "type": "object" }, "GoogleSheetsBatchWriteArguments": { "description": "Arguments for batch updating values in multiple ranges", "properties": { "data": { "items": { "$ref": "#/$defs/GoogleSheetsValueRange" }, "title": "Data", "type": "array" }, "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" } }, "required": [ "spreadsheet_id", "data" ], "title": "GoogleSheetsBatchWriteArguments", "type": "object" }, "GoogleSheetsBatchWriteArgumentsUpdate": { "description": "Arguments for batch updating values in multiple ranges", "properties": { "data": { "anyOf": [ { "items": { "$ref": "#/$defs/GoogleSheetsValueRange" }, "type": "array" }, { "type": "null" } ], "title": "Data" }, "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" } }, "title": "GoogleSheetsBatchWriteArgumentsUpdate", "type": "object" }, "GoogleSheetsClearArguments": { "description": "Arguments for clearing values from a spreadsheet", "properties": { "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" } }, "required": [ "spreadsheet_id", "range" ], "title": "GoogleSheetsClearArguments", "type": "object" }, "GoogleSheetsClearArgumentsUpdate": { "description": "Arguments for clearing values from a spreadsheet", "properties": { "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" } }, "title": "GoogleSheetsClearArgumentsUpdate", "type": "object" }, "GoogleSheetsIntegrationDef-Input": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArguments" }, { "$ref": "#/$defs/GoogleSheetsWriteArguments" }, { "$ref": "#/$defs/GoogleSheetsAppendArguments" }, { "$ref": "#/$defs/GoogleSheetsClearArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetup" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDef", "type": "object" }, "GoogleSheetsIntegrationDef-Output": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArguments" }, { "$ref": "#/$defs/GoogleSheetsWriteArguments" }, { "$ref": "#/$defs/GoogleSheetsAppendArguments" }, { "$ref": "#/$defs/GoogleSheetsClearArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArguments" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetup" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDef", "type": "object" }, "GoogleSheetsIntegrationDefUpdate": { "description": "Google Sheets integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsReadArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsWriteArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsAppendArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsClearArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsBatchReadArgumentsUpdate" }, { "$ref": "#/$defs/GoogleSheetsBatchWriteArgumentsUpdate" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "enum": [ "read_values", "write_values", "append_values", "clear_values", "batch_read", "batch_write" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "google_sheets", "default": "google_sheets", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/GoogleSheetsSetupUpdate" }, { "type": "null" } ] } }, "title": "GoogleSheetsIntegrationDefUpdate", "type": "object" }, "GoogleSheetsReadArguments": { "description": "Arguments for reading values from a spreadsheet", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "required": [ "spreadsheet_id", "range" ], "title": "GoogleSheetsReadArguments", "type": "object" }, "GoogleSheetsReadArgumentsUpdate": { "description": "Arguments for reading values from a spreadsheet", "properties": { "date_time_render_option": { "default": "FORMATTED_STRING", "enum": [ "SERIAL_NUMBER", "FORMATTED_STRING" ], "title": "Date Time Render Option", "type": "string" }, "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_render_option": { "default": "FORMATTED_VALUE", "enum": [ "FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA" ], "title": "Value Render Option", "type": "string" } }, "title": "GoogleSheetsReadArgumentsUpdate", "type": "object" }, "GoogleSheetsSetup": { "description": "Setup parameters for Google Sheets integration", "properties": { "default_retry_count": { "default": 3, "maximum": 10.0, "minimum": 1.0, "title": "Default Retry Count", "type": "integer" }, "service_account_json": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Service Account Json" }, "use_julep_service": { "title": "Use Julep Service", "type": "boolean" } }, "required": [ "use_julep_service" ], "title": "GoogleSheetsSetup", "type": "object" }, "GoogleSheetsSetupUpdate": { "description": "Setup parameters for Google Sheets integration", "properties": { "default_retry_count": { "default": 3, "maximum": 10.0, "minimum": 1.0, "title": "Default Retry Count", "type": "integer" }, "service_account_json": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Service Account Json" }, "use_julep_service": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Use Julep Service" } }, "title": "GoogleSheetsSetupUpdate", "type": "object" }, "GoogleSheetsValueRange": { "description": "Represents a range of values to write", "properties": { "major_dimension": { "default": "ROWS", "enum": [ "ROWS", "COLUMNS" ], "title": "Major Dimension", "type": "string" }, "range": { "title": "Range", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "range", "values" ], "title": "GoogleSheetsValueRange", "type": "object" }, "GoogleSheetsWriteArguments": { "description": "Arguments for writing values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "OVERWRITE", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "title": "Range", "type": "string" }, "spreadsheet_id": { "title": "Spreadsheet Id", "type": "string" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "items": { "items": {}, "type": "array" }, "title": "Values", "type": "array" } }, "required": [ "spreadsheet_id", "range", "values" ], "title": "GoogleSheetsWriteArguments", "type": "object" }, "GoogleSheetsWriteArgumentsUpdate": { "description": "Arguments for writing values to a spreadsheet", "properties": { "include_values_in_response": { "default": false, "title": "Include Values In Response", "type": "boolean" }, "insert_data_option": { "default": "OVERWRITE", "enum": [ "OVERWRITE", "INSERT_ROWS" ], "title": "Insert Data Option", "type": "string" }, "range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Range" }, "spreadsheet_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spreadsheet Id" }, "value_input_option": { "default": "USER_ENTERED", "enum": [ "RAW", "USER_ENTERED" ], "title": "Value Input Option", "type": "string" }, "values": { "anyOf": [ { "items": { "items": {}, "type": "array" }, "type": "array" }, { "type": "null" } ], "title": "Values" } }, "title": "GoogleSheetsWriteArgumentsUpdate", "type": "object" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/$defs/ValidationError" }, "title": "Detail", "type": "array" } }, "title": "HTTPValidationError", "type": "object" }, "History": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "entries": { "items": { "$ref": "#/$defs/Entry" }, "title": "Entries", "type": "array" }, "relations": { "items": { "$ref": "#/$defs/Relation" }, "title": "Relations", "type": "array" }, "session_id": { "format": "uuid", "readOnly": true, "title": "Session Id", "type": "string" } }, "required": [ "entries", "relations", "session_id", "created_at" ], "title": "History", "type": "object" }, "HybridDocSearch": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 7, "minimum": 0.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "hybrid", "default": "hybrid", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "HybridDocSearch", "type": "object" }, "HybridDocSearchRequest": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 5, "maximum": 10.0, "minimum": 1.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "text": { "title": "Text", "type": "string" }, "trigram_similarity_threshold": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Trigram Similarity Threshold" }, "vector": { "items": { "type": "number" }, "title": "Vector", "type": "array" } }, "required": [ "text", "vector" ], "title": "HybridDocSearchRequest", "type": "object" }, "HybridDocSearchUpdate": { "properties": { "alpha": { "default": 0.5, "maximum": 1.0, "minimum": 0.0, "title": "Alpha", "type": "number" }, "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "k_multiplier": { "default": 7, "minimum": 0.0, "title": "K Multiplier", "type": "integer" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "hybrid", "default": "hybrid", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "HybridDocSearchUpdate", "type": "object" }, "IfElseWorkflowStep-Input": { "properties": { "else": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Else-Input" }, { "type": "null" } ], "title": "Else" }, "if": { "title": "If", "type": "string" }, "kind_": { "const": "if_else", "default": "if_else", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "then": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Then-Input" } ], "title": "Then" } }, "required": [ "if", "then" ], "title": "IfElseWorkflowStep", "type": "object" }, "IfElseWorkflowStep-Output": { "properties": { "else": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Else-Output" }, { "type": "null" } ], "title": "Else" }, "if": { "title": "If", "type": "string" }, "kind_": { "const": "if_else", "default": "if_else", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "then": { "anyOf": [ { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Then-Output" } ], "title": "Then" } }, "required": [ "if", "then" ], "title": "IfElseWorkflowStep", "type": "object" }, "ImageUrl": { "description": "The image URL", "properties": { "detail": { "default": "auto", "enum": [ "low", "high", "auto" ], "title": "Detail", "type": "string" }, "url": { "title": "Url", "type": "string" } }, "required": [ "url" ], "title": "ImageUrl", "type": "object" }, "JobStatus": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "has_progress": { "default": false, "title": "Has Progress", "type": "boolean" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "progress": { "default": 0, "maximum": 100.0, "minimum": 0.0, "title": "Progress", "type": "number" }, "reason": { "default": "", "title": "Reason", "type": "string" }, "state": { "default": "pending", "enum": [ "pending", "in_progress", "retrying", "succeeded", "aborted", "failed", "unknown" ], "title": "State", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "JobStatus", "type": "object" }, "ListModelsResponse": { "description": "Response for the list models endpoint", "properties": { "models": { "items": { "$ref": "#/$defs/ModelInfo" }, "title": "Models", "type": "array" } }, "required": [ "models" ], "title": "ListModelsResponse", "type": "object" }, "ListResponse_Agent_": { "properties": { "items": { "items": { "$ref": "#/$defs/Agent" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Agent]", "type": "object" }, "ListResponse_Doc_": { "properties": { "items": { "items": { "$ref": "#/$defs/Doc" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Doc]", "type": "object" }, "ListResponse_Execution_": { "properties": { "items": { "items": { "$ref": "#/$defs/Execution" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Execution]", "type": "object" }, "ListResponse_Project_": { "properties": { "items": { "items": { "$ref": "#/$defs/Project" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Project]", "type": "object" }, "ListResponse_ResourceDeletedResponse_": { "properties": { "items": { "items": { "$ref": "#/$defs/ResourceDeletedResponse" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[ResourceDeletedResponse]", "type": "object" }, "ListResponse_Session_": { "properties": { "items": { "items": { "$ref": "#/$defs/Session" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Session]", "type": "object" }, "ListResponse_Task_": { "properties": { "items": { "items": { "$ref": "#/$defs/Task" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Task]", "type": "object" }, "ListResponse_Tool_": { "properties": { "items": { "items": { "$ref": "#/$defs/Tool" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Tool]", "type": "object" }, "ListResponse_Transition_": { "properties": { "items": { "items": { "$ref": "#/$defs/Transition" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[Transition]", "type": "object" }, "ListResponse_User_": { "properties": { "items": { "items": { "$ref": "#/$defs/User" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "ListResponse[User]", "type": "object" }, "LlamaParseFetchArguments": { "description": "Arguments for LlamaParse integration", "properties": { "base64": { "default": false, "title": "Base64", "type": "boolean" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "file" ], "title": "LlamaParseFetchArguments", "type": "object" }, "LlamaParseFetchArgumentsUpdate": { "description": "Arguments for LlamaParse integration", "properties": { "base64": { "default": false, "title": "Base64", "type": "boolean" }, "file": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "LlamaParseFetchArgumentsUpdate", "type": "object" }, "LlamaParseIntegrationDef": { "description": "LlamaParse integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/LlamaParseFetchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "llama_parse", "default": "llama_parse", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/LlamaParseSetup" }, { "type": "null" } ] } }, "title": "LlamaParseIntegrationDef", "type": "object" }, "LlamaParseIntegrationDefUpdate": { "description": "LlamaParse integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/LlamaParseFetchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "llama_parse", "default": "llama_parse", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/LlamaParseSetupUpdate" }, { "type": "null" } ] } }, "title": "LlamaParseIntegrationDefUpdate", "type": "object" }, "LlamaParseSetup": { "description": "Setup parameters for LlamaParse integration", "properties": { "llamaparse_api_key": { "title": "Llamaparse Api Key", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "required": [ "llamaparse_api_key" ], "title": "LlamaParseSetup", "type": "object" }, "LlamaParseSetupUpdate": { "description": "Setup parameters for LlamaParse integration", "properties": { "llamaparse_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Llamaparse Api Key" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" } }, "title": "LlamaParseSetupUpdate", "type": "object" }, "LogProbResponse": { "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/TokenLogProb" }, "type": "array" }, { "type": "null" } ], "title": "Content" } }, "required": [ "content" ], "title": "LogProbResponse", "type": "object" }, "LogStep": { "properties": { "kind_": { "const": "log", "default": "log", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "log": { "title": "Log", "type": "string" } }, "required": [ "log" ], "title": "LogStep", "type": "object" }, "LogitBias": { "maximum": 100.0, "minimum": -100.0, "title": "LogitBias", "type": "number" }, "MailgunIntegrationDef": { "description": "Mailgun integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/MailgunSendEmailArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "send_email", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mailgun", "default": "mailgun", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/MailgunSetup" }, { "type": "null" } ] } }, "title": "MailgunIntegrationDef", "type": "object" }, "MailgunIntegrationDefUpdate": { "description": "Mailgun integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/MailgunSendEmailArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "const": "send_email", "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mailgun", "default": "mailgun", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/MailgunSetupUpdate" }, { "type": "null" } ] } }, "title": "MailgunIntegrationDefUpdate", "type": "object" }, "MailgunSendEmailArguments": { "description": "Arguments for mailgun.send_email method", "properties": { "bcc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bcc" }, "body": { "title": "Body", "type": "string" }, "cc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cc" }, "from": { "title": "From", "type": "string" }, "subject": { "title": "Subject", "type": "string" }, "to": { "title": "To", "type": "string" } }, "required": [ "to", "from", "subject", "body" ], "title": "MailgunSendEmailArguments", "type": "object" }, "MailgunSendEmailArgumentsUpdate": { "description": "Arguments for mailgun.send_email method", "properties": { "bcc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Bcc" }, "body": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Body" }, "cc": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cc" }, "from": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "From" }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subject" }, "to": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "To" } }, "title": "MailgunSendEmailArgumentsUpdate", "type": "object" }, "MailgunSetup": { "description": "Setup parameters for Mailgun integration", "properties": { "api_key": { "title": "Api Key", "type": "string" } }, "required": [ "api_key" ], "title": "MailgunSetup", "type": "object" }, "MailgunSetupUpdate": { "description": "Setup parameters for Mailgun integration", "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key" } }, "title": "MailgunSetupUpdate", "type": "object" }, "Main-Input": { "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Main", "type": "object" }, "Main-Output": { "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Main", "type": "object" }, "McpCallToolArguments": { "description": "Arguments to call a named tool on the MCP server", "properties": { "arguments": { "default": {}, "title": "Arguments", "type": "object" }, "timeout_seconds": { "default": 60, "title": "Timeout Seconds", "type": "integer" }, "tool_name": { "title": "Tool Name", "type": "string" } }, "required": [ "tool_name" ], "title": "McpCallToolArguments", "type": "object" }, "McpCallToolArgumentsUpdate": { "description": "Arguments to call a named tool on the MCP server", "properties": { "arguments": { "default": {}, "title": "Arguments", "type": "object" }, "timeout_seconds": { "default": 60, "title": "Timeout Seconds", "type": "integer" }, "tool_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Name" } }, "title": "McpCallToolArgumentsUpdate", "type": "object" }, "McpIntegrationDef": { "description": "MCP integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/McpCallToolArguments" }, { "$ref": "#/$defs/McpListToolsArguments" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mcp", "default": "mcp", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/McpSetup" }, { "type": "null" } ] } }, "title": "McpIntegrationDef", "type": "object" }, "McpIntegrationDefUpdate": { "description": "MCP integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/McpCallToolArgumentsUpdate" }, { "$ref": "#/$defs/McpListToolsArgumentsUpdate" }, { "type": "null" } ], "title": "Arguments" }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "mcp", "default": "mcp", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/McpSetupUpdate" }, { "type": "null" } ] } }, "title": "McpIntegrationDefUpdate", "type": "object" }, "McpListToolsArguments": { "description": "Arguments to list available tools", "properties": { "dummy": { "default": "dummy", "title": "Dummy", "type": "string" } }, "title": "McpListToolsArguments", "type": "object" }, "McpListToolsArgumentsUpdate": { "description": "Arguments to list available tools", "properties": { "dummy": { "default": "dummy", "title": "Dummy", "type": "string" } }, "title": "McpListToolsArgumentsUpdate", "type": "object" }, "McpSetup": { "description": "Setup parameters for MCP integration", "properties": { "args": { "default": [], "items": { "type": "string" }, "title": "Args", "type": "array" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "cwd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cwd" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "http_headers": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Http Headers", "type": "object" }, "http_url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Http Url" }, "transport": { "enum": [ "sse", "http" ], "title": "Transport", "type": "string" } }, "required": [ "transport" ], "title": "McpSetup", "type": "object" }, "McpSetupUpdate": { "description": "Setup parameters for MCP integration", "properties": { "args": { "default": [], "items": { "type": "string" }, "title": "Args", "type": "array" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "cwd": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cwd" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "http_headers": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Http Headers", "type": "object" }, "http_url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Http Url" }, "transport": { "anyOf": [ { "enum": [ "sse", "http" ], "type": "string" }, { "type": "null" } ], "title": "Transport" } }, "title": "McpSetupUpdate", "type": "object" }, "Message-Input": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__Content" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel-Input" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Message", "type": "object" }, "Message-Output": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel-Output" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "Message", "type": "object" }, "MessageChatResponse": { "properties": { "choices": { "items": { "anyOf": [ { "$ref": "#/$defs/SingleChatOutput" }, { "$ref": "#/$defs/MultipleChatOutput" } ] }, "title": "Choices", "type": "array" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" }, "usage": { "anyOf": [ { "$ref": "#/$defs/CompletionUsage" }, { "type": "null" } ] } }, "required": [ "created_at", "id", "choices" ], "title": "MessageChatResponse", "type": "object" }, "MessageModel": { "properties": { "content": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Chat__ContentModel3" }, { "$ref": "#/$defs/ContentModel7" }, { "$ref": "#/$defs/ContentModel4" } ] }, "type": "array" }, { "type": "null" } ], "title": "Content" }, "created_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Created At" }, "id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Id" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role" ], "title": "MessageModel", "type": "object" }, "MetadataFilter": { "additionalProperties": true, "properties": {}, "title": "MetadataFilter", "type": "object" }, "ModelInfo": { "description": "Model information returned by the model list endpoint", "properties": { "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "ModelInfo", "type": "object" }, "MultipleChatOutput": { "description": "The output returned by the model. Note that, depending on the model provider, they might return more than one message.", "properties": { "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "messages": { "items": { "$ref": "#/$defs/MessageModel" }, "minItems": 1, "readOnly": true, "title": "Messages", "type": "array" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "messages" ], "title": "MultipleChatOutput", "type": "object" }, "MultipleEmbedQueryRequest": { "properties": { "embed_instruction": { "default": "", "title": "Embed Instruction", "type": "string" }, "text": { "items": { "type": "string" }, "maxItems": 100, "minItems": 1, "title": "Text", "type": "array" } }, "required": [ "text" ], "title": "MultipleEmbedQueryRequest", "type": "object" }, "NamedToolChoice": { "properties": { "function": { "anyOf": [ { "$ref": "#/$defs/FunctionCallOption" }, { "type": "null" } ] } }, "title": "NamedToolChoice", "type": "object" }, "ParallelStep-Input": { "properties": { "kind_": { "const": "parallel", "default": "parallel", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "parallel": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ] }, "maxItems": 100, "title": "Parallel", "type": "array" } }, "required": [ "parallel" ], "title": "ParallelStep", "type": "object" }, "ParallelStep-Output": { "properties": { "kind_": { "const": "parallel", "default": "parallel", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "parallel": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ] }, "maxItems": 100, "title": "Parallel", "type": "array" } }, "required": [ "parallel" ], "title": "ParallelStep", "type": "object" }, "ParameterSchema-Input": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "additionalProperties": { "$ref": "#/$defs/PropertyDefinition-Input" }, "title": "Properties", "type": "object" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "required": [ "properties" ], "title": "ParameterSchema", "type": "object" }, "ParameterSchema-Output": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "additionalProperties": { "$ref": "#/$defs/PropertyDefinition-Output" }, "title": "Properties", "type": "object" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "required": [ "properties" ], "title": "ParameterSchema", "type": "object" }, "ParameterSchemaUpdate": { "description": "JSON Schema for API call parameters", "properties": { "additionalProperties": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Additionalproperties" }, "properties": { "anyOf": [ { "additionalProperties": { "$ref": "#/$defs/PropertyDefinitionUpdate" }, "type": "object" }, { "type": "null" } ], "title": "Properties" }, "required": { "default": [], "items": { "type": "string" }, "title": "Required", "type": "array" }, "type": { "default": "object", "title": "Type", "type": "string" } }, "title": "ParameterSchemaUpdate", "type": "object" }, "PatchAgentRequest": { "description": "Payload for patching a agent", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Name" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "PatchAgentRequest", "type": "object" }, "PatchSessionRequest": { "description": "Payload for patching a session", "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearchUpdate" }, { "$ref": "#/$defs/TextOnlyDocSearchUpdate" }, { "$ref": "#/$defs/HybridDocSearchUpdate" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" } }, "title": "PatchSessionRequest", "type": "object" }, "PatchToolRequest": { "description": "Payload for patching a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDefUpdate" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022DefUpdate" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022DefUpdate" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDefUpdate" }, { "$ref": "#/$defs/BraveIntegrationDefUpdate" }, { "$ref": "#/$defs/EmailIntegrationDefUpdate" }, { "$ref": "#/$defs/SpiderIntegrationDefUpdate" }, { "$ref": "#/$defs/WikipediaIntegrationDefUpdate" }, { "$ref": "#/$defs/WeatherIntegrationDefUpdate" }, { "$ref": "#/$defs/MailgunIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDefUpdate" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDefUpdate" }, { "$ref": "#/$defs/LlamaParseIntegrationDefUpdate" }, { "$ref": "#/$defs/FfmpegIntegrationDefUpdate" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDefUpdate" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDefUpdate" }, { "$ref": "#/$defs/ArxivIntegrationDefUpdate" }, { "$ref": "#/$defs/UnstructuredIntegrationDefUpdate" }, { "$ref": "#/$defs/AlgoliaIntegrationDefUpdate" }, { "$ref": "#/$defs/McpIntegrationDefUpdate" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDefUpdate" }, { "type": "null" } ], "title": "Integration" }, "name": { "anyOf": [ { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "type": "string" }, { "type": "null" } ], "title": "Name" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDefUpdate" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022DefUpdate" }, { "type": "null" } ] }, "type": { "anyOf": [ { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "type": "string" }, { "type": "null" } ], "title": "Type" } }, "title": "PatchToolRequest", "type": "object" }, "PatchUserRequest": { "description": "Payload for patching a user", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "PatchUserRequest", "type": "object" }, "Project": { "description": "Project model", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name" ], "title": "Project", "type": "object" }, "PromptItem-Input": { "properties": { "content": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/agents_api__autogen__Tasks__Content" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel" }, { "$ref": "#/$defs/ContentModel1-Input" } ] }, "type": "array" }, { "type": "string" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role", "content" ], "title": "PromptItem", "type": "object" }, "PromptItem-Output": { "properties": { "content": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "items": { "anyOf": [ { "$ref": "#/$defs/Content-Output" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel" }, { "$ref": "#/$defs/agents_api__autogen__Tasks__ContentModel1-Output" } ] }, "type": "array" }, { "type": "string" }, { "type": "null" } ], "title": "Content" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "role": { "enum": [ "user", "assistant", "system", "tool" ], "title": "Role", "type": "string" }, "tool_call_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Call Id" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "default": [], "title": "Tool Calls" } }, "required": [ "role", "content" ], "title": "PromptItem", "type": "object" }, "PromptStep-Input": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "disable_cache": { "default": false, "title": "Disable Cache", "type": "boolean" }, "kind_": { "const": "prompt", "default": "prompt", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "prompt": { "anyOf": [ { "items": { "$ref": "#/$defs/PromptItem-Input" }, "type": "array" }, { "type": "string" } ], "title": "Prompt" }, "settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Settings" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "const": "all", "type": "string" }, { "items": { "anyOf": [ { "$ref": "#/$defs/ToolRef" }, { "$ref": "#/$defs/agents_api__autogen__Tools__CreateToolRequest-Input" } ] }, "type": "array" } ], "default": "all", "title": "Tools" }, "unwrap": { "default": false, "title": "Unwrap", "type": "boolean" } }, "required": [ "prompt" ], "title": "PromptStep", "type": "object" }, "PromptStep-Output": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "disable_cache": { "default": false, "title": "Disable Cache", "type": "boolean" }, "kind_": { "const": "prompt", "default": "prompt", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "prompt": { "anyOf": [ { "items": { "$ref": "#/$defs/PromptItem-Output" }, "type": "array" }, { "type": "string" } ], "title": "Prompt" }, "settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Settings" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "const": "all", "type": "string" }, { "items": { "anyOf": [ { "$ref": "#/$defs/ToolRef" }, { "$ref": "#/$defs/CreateToolRequest-Output" } ] }, "type": "array" } ], "default": "all", "title": "Tools" }, "unwrap": { "default": false, "title": "Unwrap", "type": "boolean" } }, "required": [ "prompt" ], "title": "PromptStep", "type": "object" }, "PropertyDefinition-Input": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinition-Input" }, { "type": "null" } ] }, "type": { "title": "Type", "type": "string" } }, "required": [ "type" ], "title": "PropertyDefinition", "type": "object" }, "PropertyDefinition-Output": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinition-Output" }, { "type": "null" } ] }, "type": { "title": "Type", "type": "string" } }, "required": [ "type" ], "title": "PropertyDefinition", "type": "object" }, "PropertyDefinitionUpdate": { "description": "Property definition for parameter schema", "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "enum": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Enum" }, "items": { "anyOf": [ { "$ref": "#/$defs/PropertyDefinitionUpdate" }, { "type": "null" } ] }, "type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Type" } }, "title": "PropertyDefinitionUpdate", "type": "object" }, "Relation": { "properties": { "head": { "format": "uuid", "title": "Head", "type": "string" }, "relation": { "title": "Relation", "type": "string" }, "tail": { "format": "uuid", "title": "Tail", "type": "string" } }, "required": [ "head", "relation", "tail" ], "title": "Relation", "type": "object" }, "RemoteBrowserArguments": { "description": "The arguments for the remote browser", "properties": { "action": { "enum": [ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh" ], "title": "Action", "type": "string" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "coordinate": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "required": [ "action" ], "title": "RemoteBrowserArguments", "type": "object" }, "RemoteBrowserArgumentsUpdate": { "description": "The arguments for the remote browser", "properties": { "action": { "anyOf": [ { "enum": [ "key", "type", "mouse_move", "left_click", "left_click_drag", "right_click", "middle_click", "double_click", "screenshot", "cursor_position", "navigate", "refresh" ], "type": "string" }, { "type": "null" } ], "title": "Action" }, "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "coordinate": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "title": "Coordinate" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Text" } }, "title": "RemoteBrowserArgumentsUpdate", "type": "object" }, "RemoteBrowserIntegrationDef": { "description": "The integration definition for the remote browser", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserArguments" }, { "type": "null" } ] }, "method": { "const": "perform_action", "default": "perform_action", "title": "Method", "type": "string" }, "provider": { "const": "remote_browser", "default": "remote_browser", "title": "Provider", "type": "string" }, "setup": { "$ref": "#/$defs/RemoteBrowserSetup" } }, "required": [ "setup" ], "title": "RemoteBrowserIntegrationDef", "type": "object" }, "RemoteBrowserIntegrationDefUpdate": { "description": "The integration definition for the remote browser", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserArgumentsUpdate" }, { "type": "null" } ] }, "method": { "const": "perform_action", "default": "perform_action", "title": "Method", "type": "string" }, "provider": { "const": "remote_browser", "default": "remote_browser", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/RemoteBrowserSetup" }, { "type": "null" } ] } }, "title": "RemoteBrowserIntegrationDefUpdate", "type": "object" }, "RemoteBrowserSetup": { "description": "The setup parameters for the remote browser", "properties": { "connect_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connect Url" }, "height": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Height" }, "width": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Width" } }, "title": "RemoteBrowserSetup", "type": "object" }, "RenderResponse": { "properties": { "docs": { "default": [], "items": { "$ref": "#/$defs/DocReference" }, "readOnly": true, "title": "Docs", "type": "array" }, "messages": { "items": { "$ref": "#/$defs/Message-Output" }, "minItems": 1, "title": "Messages", "type": "array" }, "tool_choice": { "anyOf": [ { "enum": [ "auto", "none" ], "type": "string" }, { "$ref": "#/$defs/NamedToolChoice" }, { "type": "null" } ], "title": "Tool Choice" }, "tools": { "anyOf": [ { "items": { "$ref": "#/$defs/CreateToolRequest-Output" }, "type": "array" }, { "type": "null" } ], "title": "Tools" } }, "required": [ "messages" ], "title": "RenderResponse", "type": "object" }, "ResourceDeletedResponse": { "properties": { "deleted_at": { "format": "date-time", "readOnly": true, "title": "Deleted At", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "jobs": { "default": [], "items": { "format": "uuid", "type": "string" }, "readOnly": true, "title": "Jobs", "type": "array" } }, "required": [ "id", "deleted_at" ], "title": "ResourceDeletedResponse", "type": "object" }, "ResumeExecutionRequest": { "properties": { "input": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input" }, "status": { "const": "running", "default": "running", "title": "Status", "type": "string" } }, "title": "ResumeExecutionRequest", "type": "object" }, "ReturnStep": { "properties": { "kind_": { "const": "return", "default": "return", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "return": { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "title": "Return", "type": "object" } }, "required": [ "return" ], "title": "ReturnStep", "type": "object" }, "SchemaCompletionResponseFormat": { "properties": { "json_schema": { "title": "Json Schema", "type": "object" }, "type": { "const": "json_schema", "default": "json_schema", "title": "Type", "type": "string" } }, "required": [ "json_schema" ], "title": "SchemaCompletionResponseFormat", "type": "object" }, "Secret": { "description": "A secret that can be used in tasks and sessions", "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "id", "created_at", "updated_at", "name", "value" ], "title": "Secret", "type": "object" }, "SecretRef": { "properties": { "name": { "title": "Name", "type": "string" } }, "required": [ "name" ], "title": "SecretRef", "type": "object" }, "SecretRefUpdate": { "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" } }, "title": "SecretRefUpdate", "type": "object" }, "Session": { "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "kind": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Kind" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "summary": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Summary" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "Session", "type": "object" }, "SetStep": { "properties": { "kind_": { "const": "set", "default": "set", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "set": { "additionalProperties": { "anyOf": [ { "type": "object" }, { "type": "string" } ] }, "title": "Set", "type": "object" } }, "required": [ "set" ], "title": "SetStep", "type": "object" }, "SimpleCompletionResponseFormat": { "properties": { "type": { "default": "text", "enum": [ "text", "json_object" ], "title": "Type", "type": "string" } }, "title": "SimpleCompletionResponseFormat", "type": "object" }, "SingleChatOutput": { "description": "The output returned by the model. Note that, depending on the model provider, they might return more than one message.", "properties": { "finish_reason": { "default": "stop", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "Finish Reason", "type": "string" }, "index": { "title": "Index", "type": "integer" }, "logprobs": { "anyOf": [ { "$ref": "#/$defs/LogProbResponse" }, { "type": "null" } ] }, "message": { "$ref": "#/$defs/MessageModel" }, "tool_calls": { "anyOf": [ { "items": { "anyOf": [ { "$ref": "#/$defs/ChosenFunctionCall" }, { "$ref": "#/$defs/ChosenComputer20241022" }, { "$ref": "#/$defs/ChosenTextEditor20241022" }, { "$ref": "#/$defs/ChosenBash20241022" } ] }, "type": "array" }, { "type": "null" } ], "title": "Tool Calls" } }, "required": [ "index", "message" ], "title": "SingleChatOutput", "type": "object" }, "SingleEmbedQueryRequest": { "properties": { "embed_instruction": { "default": "", "title": "Embed Instruction", "type": "string" }, "text": { "title": "Text", "type": "string" } }, "required": [ "text" ], "title": "SingleEmbedQueryRequest", "type": "object" }, "SleepFor": { "properties": { "days": { "default": 0, "maximum": 30.0, "minimum": 0.0, "title": "Days", "type": "integer" }, "hours": { "default": 0, "maximum": 24.0, "minimum": 0.0, "title": "Hours", "type": "integer" }, "minutes": { "default": 0, "maximum": 60.0, "minimum": 0.0, "title": "Minutes", "type": "integer" }, "seconds": { "default": 0, "maximum": 60.0, "minimum": 0.0, "title": "Seconds", "type": "integer" } }, "title": "SleepFor", "type": "object" }, "SleepStep": { "properties": { "kind_": { "const": "sleep", "default": "sleep", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "sleep": { "$ref": "#/$defs/SleepFor" } }, "required": [ "sleep" ], "title": "SleepStep", "type": "object" }, "Snippet": { "properties": { "content": { "title": "Content", "type": "string" }, "embedding": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "title": "Embedding" }, "index": { "title": "Index", "type": "integer" } }, "required": [ "index", "content" ], "title": "Snippet", "type": "object" }, "Source": { "properties": { "data": { "title": "Data", "type": "string" }, "media_type": { "title": "Media Type", "type": "string" }, "type": { "const": "base64", "default": "base64", "title": "Type", "type": "string" } }, "required": [ "media_type", "data" ], "title": "Source", "type": "object" }, "SpiderFetchArguments": { "description": "Arguments for Spider integration", "properties": { "content_type": { "default": "application/json", "enum": [ "application/json", "text/csv", "application/xml", "application/jsonl" ], "title": "Content Type", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" }, "url": { "format": "uri", "minLength": 1, "title": "Url", "type": "string" } }, "required": [ "url" ], "title": "SpiderFetchArguments", "type": "object" }, "SpiderFetchArgumentsUpdate": { "description": "Arguments for Spider integration", "properties": { "content_type": { "default": "application/json", "enum": [ "application/json", "text/csv", "application/xml", "application/jsonl" ], "title": "Content Type", "type": "string" }, "params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Params" }, "url": { "anyOf": [ { "format": "uri", "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Url" } }, "title": "SpiderFetchArgumentsUpdate", "type": "object" }, "SpiderIntegrationDef": { "description": "Spider integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/SpiderFetchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "enum": [ "crawl", "links", "screenshot", "search" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "spider", "default": "spider", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/SpiderSetup" }, { "type": "null" } ] } }, "title": "SpiderIntegrationDef", "type": "object" }, "SpiderIntegrationDefUpdate": { "description": "Spider integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/SpiderFetchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "enum": [ "crawl", "links", "screenshot", "search" ], "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "spider", "default": "spider", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/SpiderSetupUpdate" }, { "type": "null" } ] } }, "title": "SpiderIntegrationDefUpdate", "type": "object" }, "SpiderSetup": { "description": "Setup parameters for Spider integration", "properties": { "spider_api_key": { "title": "Spider Api Key", "type": "string" } }, "required": [ "spider_api_key" ], "title": "SpiderSetup", "type": "object" }, "SpiderSetupUpdate": { "description": "Setup parameters for Spider integration", "properties": { "spider_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Spider Api Key" } }, "title": "SpiderSetupUpdate", "type": "object" }, "StopExecutionRequest": { "properties": { "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason" }, "status": { "const": "cancelled", "default": "cancelled", "title": "Status", "type": "string" } }, "title": "StopExecutionRequest", "type": "object" }, "SwitchStep-Input": { "properties": { "kind_": { "const": "switch", "default": "switch", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "switch": { "items": { "$ref": "#/$defs/CaseThen-Input" }, "minItems": 1, "title": "Switch", "type": "array" } }, "required": [ "switch" ], "title": "SwitchStep", "type": "object" }, "SwitchStep-Output": { "properties": { "kind_": { "const": "switch", "default": "switch", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "switch": { "items": { "$ref": "#/$defs/CaseThen-Output" }, "minItems": 1, "title": "Switch", "type": "array" } }, "required": [ "switch" ], "title": "SwitchStep", "type": "object" }, "SystemDef": { "description": "System definition", "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Arguments" }, "operation": { "enum": [ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list" ], "title": "Operation", "type": "string" }, "resource": { "enum": [ "agent", "user", "task", "execution", "doc", "session", "job" ], "title": "Resource", "type": "string" }, "resource_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Resource Id" }, "subresource": { "anyOf": [ { "enum": [ "tool", "doc", "execution", "transition" ], "type": "string" }, { "type": "null" } ], "title": "Subresource" } }, "required": [ "resource", "operation" ], "title": "SystemDef", "type": "object" }, "SystemDefUpdate": { "description": "System definition", "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Arguments" }, "operation": { "anyOf": [ { "enum": [ "create", "update", "patch", "create_or_update", "embed", "change_status", "search", "chat", "history", "delete", "get", "list" ], "type": "string" }, { "type": "null" } ], "title": "Operation" }, "resource": { "anyOf": [ { "enum": [ "agent", "user", "task", "execution", "doc", "session", "job" ], "type": "string" }, { "type": "null" } ], "title": "Resource" }, "resource_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Resource Id" }, "subresource": { "anyOf": [ { "enum": [ "tool", "doc", "execution", "transition" ], "type": "string" }, { "type": "null" } ], "title": "Subresource" } }, "title": "SystemDefUpdate", "type": "object" }, "Task": { "additionalProperties": true, "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "inherit_tools": { "default": false, "title": "Inherit Tools", "type": "boolean" }, "input_schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input Schema" }, "main": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Output" }, { "$ref": "#/$defs/SwitchStep-Output" }, { "$ref": "#/$defs/ForeachStep-Output" }, { "$ref": "#/$defs/ParallelStep-Output" }, { "$ref": "#/$defs/Main-Output" } ] }, "minItems": 1, "title": "Main", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "tools": { "default": [], "items": { "$ref": "#/$defs/TaskTool-Output" }, "title": "Tools", "type": "array" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "name", "main", "id", "created_at", "updated_at" ], "title": "Task", "type": "object" }, "TaskTool-Input": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "inherited": { "default": false, "readOnly": true, "title": "Inherited", "type": "boolean" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "TaskTool", "type": "object" }, "TaskTool-Output": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "inherited": { "default": false, "readOnly": true, "title": "Inherited", "type": "boolean" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "TaskTool", "type": "object" }, "TextEditor20241022Def": { "properties": { "name": { "default": "str_replace_editor", "title": "Name", "type": "string" }, "type": { "const": "text_editor_20241022", "default": "text_editor_20241022", "title": "Type", "type": "string" } }, "title": "TextEditor20241022Def", "type": "object" }, "TextEditor20241022DefUpdate": { "properties": { "name": { "default": "str_replace_editor", "title": "Name", "type": "string" }, "type": { "const": "text_editor_20241022", "default": "text_editor_20241022", "title": "Type", "type": "string" } }, "title": "TextEditor20241022DefUpdate", "type": "object" }, "TextOnlyDocSearch": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mode": { "const": "text", "default": "text", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "TextOnlyDocSearch", "type": "object" }, "TextOnlyDocSearchRequest": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "text": { "title": "Text", "type": "string" }, "trigram_similarity_threshold": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "title": "Trigram Similarity Threshold" } }, "required": [ "text" ], "title": "TextOnlyDocSearchRequest", "type": "object" }, "TextOnlyDocSearchUpdate": { "properties": { "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mode": { "const": "text", "default": "text", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" }, "trigram_similarity_threshold": { "default": 0.6, "maximum": 1.0, "minimum": 0.0, "title": "Trigram Similarity Threshold", "type": "number" } }, "title": "TextOnlyDocSearchUpdate", "type": "object" }, "Then-Input": { "description": "The steps to run if the condition is true", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Then", "type": "object" }, "Then-Output": { "description": "The steps to run if the condition is true", "properties": { "initial": { "default": [], "title": "Initial" }, "kind_": { "const": "map_reduce", "default": "map_reduce", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "map": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Output" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" } ], "title": "Map" }, "over": { "title": "Over", "type": "string" }, "parallelism": { "anyOf": [ { "maximum": 100.0, "minimum": 1.0, "type": "integer" }, { "type": "null" } ], "title": "Parallelism" }, "reduce": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reduce" } }, "required": [ "over", "map" ], "title": "Then", "type": "object" }, "TokenLogProb": { "properties": { "bytes": { "anyOf": [ { "items": { "type": "integer" }, "type": "array" }, { "type": "null" } ], "title": "Bytes" }, "logprob": { "title": "Logprob", "type": "number" }, "token": { "title": "Token", "type": "string" }, "top_logprobs": { "items": { "$ref": "#/$defs/BaseTokenLogProb" }, "minItems": 1, "readOnly": true, "title": "Top Logprobs", "type": "array" } }, "required": [ "token", "logprob", "top_logprobs" ], "title": "TokenLogProb", "type": "object" }, "Tool": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Output" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Output" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "name", "type", "created_at", "updated_at", "id" ], "title": "Tool", "type": "object" }, "ToolCallStep": { "properties": { "arguments": { "anyOf": [ { "type": "object" }, { "const": "_", "type": "string" } ], "default": "_", "title": "Arguments" }, "kind_": { "const": "tool_call", "default": "tool_call", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "tool": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Tool", "type": "string" } }, "required": [ "tool" ], "title": "ToolCallStep", "type": "object" }, "ToolRef": { "description": "Reference to a tool", "properties": { "ref": { "anyOf": [ { "$ref": "#/$defs/ToolRefById" }, { "$ref": "#/$defs/ToolRefByName" } ], "title": "Ref" } }, "required": [ "ref" ], "title": "ToolRef", "type": "object" }, "ToolRefById": { "description": "Reference to a tool by id", "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" } }, "title": "ToolRefById", "type": "object" }, "ToolRefByName": { "description": "Reference to a tool by name", "properties": { "name": { "anyOf": [ { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "type": "string" }, { "type": "null" } ], "title": "Name" } }, "title": "ToolRefByName", "type": "object" }, "ToolResponse": { "properties": { "id": { "title": "Id", "type": "string" }, "output": { "title": "Output", "type": "object" } }, "required": [ "id", "output" ], "title": "ToolResponse", "type": "object" }, "Transition": { "properties": { "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "current": { "$ref": "#/$defs/TransitionTarget", "readOnly": true }, "execution_id": { "format": "uuid", "readOnly": true, "title": "Execution Id", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "next": { "anyOf": [ { "$ref": "#/$defs/TransitionTarget" }, { "type": "null" } ], "readOnly": true }, "output": { "readOnly": true, "title": "Output" }, "step_label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "readOnly": true, "title": "Step Label" }, "type": { "enum": [ "init", "init_branch", "finish", "finish_branch", "wait", "resume", "error", "step", "cancelled" ], "readOnly": true, "title": "Type", "type": "string" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "type", "output", "created_at", "updated_at", "execution_id", "current", "next", "id" ], "title": "Transition", "type": "object" }, "TransitionTarget": { "properties": { "scope_id": { "format": "uuid", "title": "Scope Id", "type": "string" }, "step": { "title": "Step", "type": "integer" }, "workflow": { "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Workflow", "type": "string" } }, "required": [ "workflow", "step", "scope_id" ], "title": "TransitionTarget", "type": "object" }, "UnstructuredIntegrationDef": { "description": "Unstructured integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/UnstructuredPartitionArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "unstructured", "default": "unstructured", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/UnstructuredSetup" }, { "type": "null" } ] } }, "title": "UnstructuredIntegrationDef", "type": "object" }, "UnstructuredIntegrationDefUpdate": { "description": "Unstructured integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/UnstructuredPartitionArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "unstructured", "default": "unstructured", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/UnstructuredSetupUpdate" }, { "type": "null" } ] } }, "title": "UnstructuredIntegrationDefUpdate", "type": "object" }, "UnstructuredPartitionArguments": { "description": "Arguments for Unstructured partition integration", "properties": { "file": { "title": "File", "type": "string" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "partition_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Partition Params" } }, "required": [ "file" ], "title": "UnstructuredPartitionArguments", "type": "object" }, "UnstructuredPartitionArgumentsUpdate": { "description": "Arguments for Unstructured partition integration", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "File" }, "filename": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Filename" }, "partition_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Partition Params" } }, "title": "UnstructuredPartitionArgumentsUpdate", "type": "object" }, "UnstructuredSetup": { "description": "Setup parameters for Unstructured integration", "properties": { "retry_config": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Retry Config" }, "server": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server" }, "server_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server Url" }, "timeout_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout Ms" }, "unstructured_api_key": { "title": "Unstructured Api Key", "type": "string" }, "url_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Url Params" } }, "required": [ "unstructured_api_key" ], "title": "UnstructuredSetup", "type": "object" }, "UnstructuredSetupUpdate": { "description": "Setup parameters for Unstructured integration", "properties": { "retry_config": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Retry Config" }, "server": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server" }, "server_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Server Url" }, "timeout_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Timeout Ms" }, "unstructured_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Unstructured Api Key" }, "url_params": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Url Params" } }, "title": "UnstructuredSetupUpdate", "type": "object" }, "UpdateAgentRequest": { "description": "Payload for updating a agent", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "default_settings": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Default Settings" }, "default_system_template": { "default": "{%- if agent.name -%}\nYou are {{agent.name}}.{{\" \"}}\n{%- endif -%}\n\n{%- if agent.about -%}\nAbout you: {{agent.about}}.{{\" \"}}\n{%- endif -%}\n\n{%- if user -%}\nYou are talking to a user\n {%- if user.name -%}{{\" \"}} and their name is {{user.name}}\n {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%}\n {%- endif -%}\n{%- endif -%}\n\n{{NEWLINE}}\n\n{%- if session.situation -%}\nSituation: {{session.situation}}\n{%- endif -%}\n\n{{NEWLINE+NEWLINE}}\n\n{%- if agent.instructions -%}\nInstructions:{{NEWLINE}}\n {%- if agent.instructions is string -%}\n {{agent.instructions}}{{NEWLINE}}\n {%- else -%}\n {%- for instruction in agent.instructions -%}\n - {{instruction}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{NEWLINE}}\n{%- endif -%}\n\n{%- if docs -%}\nRelevant documents:{{NEWLINE}}\n {%- for doc in docs -%}\n {{doc.title}}{{NEWLINE}}\n {%- if doc.content is string -%}\n {{doc.content}}{{NEWLINE}}\n {%- else -%}\n {%- for snippet in doc.content -%}\n {{snippet}}{{NEWLINE}}\n {%- endfor -%}\n {%- endif -%}\n {{\"---\"}}\n {%- endfor -%}\n{%- endif -%}", "title": "Default System Template", "type": "string" }, "instructions": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "default": [], "title": "Instructions" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "model": { "default": "", "title": "Model", "type": "string" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "required": [ "name" ], "title": "UpdateAgentRequest", "type": "object" }, "UpdateSecretRequest": { "properties": { "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "title": "Name", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "name", "value" ], "title": "UpdateSecretRequest", "type": "object" }, "UpdateSessionRequest": { "description": "Payload for updating a session", "properties": { "auto_run_tools": { "default": false, "title": "Auto Run Tools", "type": "boolean" }, "context_overflow": { "anyOf": [ { "enum": [ "truncate", "adaptive" ], "type": "string" }, { "type": "null" } ], "title": "Context Overflow" }, "forward_tool_calls": { "default": false, "title": "Forward Tool Calls", "type": "boolean" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "recall_options": { "anyOf": [ { "$ref": "#/$defs/VectorDocSearch" }, { "$ref": "#/$defs/TextOnlyDocSearch" }, { "$ref": "#/$defs/HybridDocSearch" }, { "type": "null" } ], "title": "Recall Options" }, "render_templates": { "default": true, "title": "Render Templates", "type": "boolean" }, "situation": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Situation" }, "system_template": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "System Template" }, "token_budget": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Token Budget" } }, "title": "UpdateSessionRequest", "type": "object" }, "UpdateToolRequest": { "description": "Payload for updating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "UpdateToolRequest", "type": "object" }, "UpdateUserRequest": { "description": "Payload for updating a user", "properties": { "about": { "default": "", "title": "About", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" } }, "title": "UpdateUserRequest", "type": "object" }, "User": { "properties": { "about": { "default": "", "title": "About", "type": "string" }, "created_at": { "format": "date-time", "readOnly": true, "title": "Created At", "type": "string" }, "id": { "format": "uuid", "readOnly": true, "title": "Id", "type": "string" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "default": "", "maxLength": 120, "pattern": "^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", "title": "Name", "type": "string" }, "project": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Project" }, "updated_at": { "format": "date-time", "readOnly": true, "title": "Updated At", "type": "string" } }, "required": [ "id", "created_at", "updated_at" ], "title": "User", "type": "object" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "title": "Location", "type": "array" }, "msg": { "title": "Message", "type": "string" }, "type": { "title": "Error Type", "type": "string" } }, "required": [ "loc", "msg", "type" ], "title": "ValidationError", "type": "object" }, "VectorDocSearch": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "vector", "default": "vector", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" } }, "title": "VectorDocSearch", "type": "object" }, "VectorDocSearchRequest": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "vector": { "items": { "type": "number" }, "title": "Vector", "type": "array" } }, "required": [ "vector" ], "title": "VectorDocSearchRequest", "type": "object" }, "VectorDocSearchUpdate": { "properties": { "confidence": { "default": 0.5, "maximum": 1.0, "minimum": -1.0, "title": "Confidence", "type": "number" }, "include_embeddings": { "default": true, "title": "Include Embeddings", "type": "boolean" }, "lang": { "default": "en-US", "title": "Lang", "type": "string" }, "limit": { "default": 10, "maximum": 50.0, "minimum": 1.0, "title": "Limit", "type": "integer" }, "max_query_length": { "default": 1000, "maximum": 10000.0, "minimum": 100.0, "title": "Max Query Length", "type": "integer" }, "metadata_filter": { "default": {}, "title": "Metadata Filter", "type": "object" }, "mmr_strength": { "default": 0.5, "exclusiveMaximum": 1.0, "minimum": 0.0, "title": "Mmr Strength", "type": "number" }, "mode": { "const": "vector", "default": "vector", "title": "Mode", "type": "string" }, "num_search_messages": { "default": 4, "maximum": 50.0, "minimum": 1.0, "title": "Num Search Messages", "type": "integer" } }, "title": "VectorDocSearchUpdate", "type": "object" }, "WaitForInputInfo": { "properties": { "info": { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "title": "Info", "type": "object" } }, "required": [ "info" ], "title": "WaitForInputInfo", "type": "object" }, "WaitForInputStep": { "properties": { "kind_": { "const": "wait_for_input", "default": "wait_for_input", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "wait_for_input": { "$ref": "#/$defs/WaitForInputInfo" } }, "required": [ "wait_for_input" ], "title": "WaitForInputStep", "type": "object" }, "WeatherGetArguments": { "description": "Arguments for Weather", "properties": { "location": { "title": "Location", "type": "string" } }, "required": [ "location" ], "title": "WeatherGetArguments", "type": "object" }, "WeatherGetArgumentsUpdate": { "description": "Arguments for Weather", "properties": { "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Location" } }, "title": "WeatherGetArgumentsUpdate", "type": "object" }, "WeatherIntegrationDef": { "description": "Weather integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WeatherGetArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "weather", "default": "weather", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/WeatherSetup" }, { "type": "null" } ] } }, "title": "WeatherIntegrationDef", "type": "object" }, "WeatherIntegrationDefUpdate": { "description": "Weather integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WeatherGetArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "weather", "default": "weather", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ { "$ref": "#/$defs/WeatherSetupUpdate" }, { "type": "null" } ] } }, "title": "WeatherIntegrationDefUpdate", "type": "object" }, "WeatherSetup": { "description": "Integration definition for Weather", "properties": { "openweathermap_api_key": { "title": "Openweathermap Api Key", "type": "string" } }, "required": [ "openweathermap_api_key" ], "title": "WeatherSetup", "type": "object" }, "WeatherSetupUpdate": { "description": "Integration definition for Weather", "properties": { "openweathermap_api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Openweathermap Api Key" } }, "title": "WeatherSetupUpdate", "type": "object" }, "WikipediaIntegrationDef": { "description": "Wikipedia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WikipediaSearchArguments" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "wikipedia", "default": "wikipedia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "WikipediaIntegrationDef", "type": "object" }, "WikipediaIntegrationDefUpdate": { "description": "Wikipedia integration definition", "properties": { "arguments": { "anyOf": [ { "$ref": "#/$defs/WikipediaSearchArgumentsUpdate" }, { "type": "null" } ] }, "method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Method" }, "provider": { "const": "wikipedia", "default": "wikipedia", "title": "Provider", "type": "string" }, "setup": { "anyOf": [ {}, { "type": "null" } ], "title": "Setup" } }, "title": "WikipediaIntegrationDefUpdate", "type": "object" }, "WikipediaSearchArguments": { "description": "Arguments for Wikipedia Search", "properties": { "load_max_docs": { "default": 2, "maximum": 10.0, "minimum": 1.0, "title": "Load Max Docs", "type": "integer" }, "query": { "title": "Query", "type": "string" } }, "required": [ "query" ], "title": "WikipediaSearchArguments", "type": "object" }, "WikipediaSearchArgumentsUpdate": { "description": "Arguments for Wikipedia Search", "properties": { "load_max_docs": { "default": 2, "maximum": 10.0, "minimum": 1.0, "title": "Load Max Docs", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query" } }, "title": "WikipediaSearchArgumentsUpdate", "type": "object" }, "YieldStep": { "properties": { "arguments": { "anyOf": [ { "additionalProperties": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "additionalProperties": { "type": "string" }, "type": "object" }, { "items": { "additionalProperties": { "type": "string" }, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "type": "object" }, { "const": "_", "type": "string" } ], "default": "_", "title": "Arguments" }, "kind_": { "const": "yield", "default": "yield", "readOnly": true, "title": "Kind", "type": "string" }, "label": { "anyOf": [ { "maxLength": 120, "pattern": "^[^0-9]|^[0-9]+[^0-9].*$", "type": "string" }, { "type": "null" } ], "title": "Label" }, "workflow": { "title": "Workflow", "type": "string" } }, "required": [ "workflow" ], "title": "YieldStep", "type": "object" }, "agents_api__autogen__Chat__Content": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "agents_api__autogen__Chat__ContentModel-Input": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Chat__ContentModel-Output": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Chat__ContentModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Chat__ContentModel2": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel1" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel2" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel2", "type": "object" }, "agents_api__autogen__Chat__ContentModel3": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel3", "type": "object" }, "agents_api__autogen__Common__Content": { "maxLength": 30000, "title": "Content", "type": "string" }, "agents_api__autogen__Entries__ContentModel": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Entries__ContentModel1": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Entries__ContentModel2": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItemModel1" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel2" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel2", "type": "object" }, "agents_api__autogen__Entries__ContentModel3": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel3", "type": "object" }, "agents_api__autogen__Tasks__Content": { "properties": { "text": { "title": "Text", "type": "string" }, "type": { "const": "text", "default": "text", "title": "Type", "type": "string" } }, "required": [ "text" ], "title": "Content", "type": "object" }, "agents_api__autogen__Tasks__ContentModel": { "properties": { "image_url": { "$ref": "#/$defs/ImageUrl" }, "type": { "const": "image_url", "default": "image_url", "title": "Type", "type": "string" } }, "required": [ "image_url" ], "title": "ContentModel", "type": "object" }, "agents_api__autogen__Tasks__ContentModel1-Output": { "description": "Anthropic image content part", "properties": { "content": { "anyOf": [ { "items": { "$ref": "#/$defs/ContentItem" }, "type": "array" }, { "items": { "$ref": "#/$defs/ContentItemModel" }, "type": "array" } ], "title": "Content" }, "tool_use_id": { "title": "Tool Use Id", "type": "string" }, "type": { "const": "tool_result", "default": "tool_result", "title": "Type", "type": "string" } }, "required": [ "tool_use_id", "content" ], "title": "ContentModel1", "type": "object" }, "agents_api__autogen__Tools__CreateToolRequest-Input": { "description": "Payload for creating a tool", "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" }, "agents_api__autogen__openapi_model__CreateToolRequest": { "properties": { "api_call": { "anyOf": [ { "$ref": "#/$defs/ApiCallDef-Input" }, { "type": "null" } ] }, "bash_20241022": { "anyOf": [ { "$ref": "#/$defs/Bash20241022Def" }, { "type": "null" } ] }, "computer_20241022": { "anyOf": [ { "$ref": "#/$defs/Computer20241022Def" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "function": { "anyOf": [ { "$ref": "#/$defs/FunctionDef" }, { "type": "null" } ] }, "integration": { "anyOf": [ { "$ref": "#/$defs/DummyIntegrationDef" }, { "$ref": "#/$defs/BraveIntegrationDef" }, { "$ref": "#/$defs/EmailIntegrationDef" }, { "$ref": "#/$defs/SpiderIntegrationDef" }, { "$ref": "#/$defs/WikipediaIntegrationDef" }, { "$ref": "#/$defs/WeatherIntegrationDef" }, { "$ref": "#/$defs/MailgunIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseContextIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseExtensionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseListSessionsIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCreateSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseCompleteSessionIntegrationDef" }, { "$ref": "#/$defs/BrowserbaseGetSessionLiveUrlsIntegrationDef" }, { "$ref": "#/$defs/RemoteBrowserIntegrationDef" }, { "$ref": "#/$defs/LlamaParseIntegrationDef" }, { "$ref": "#/$defs/FfmpegIntegrationDef" }, { "$ref": "#/$defs/CloudinaryUploadIntegrationDef" }, { "$ref": "#/$defs/CloudinaryEditIntegrationDef" }, { "$ref": "#/$defs/ArxivIntegrationDef" }, { "$ref": "#/$defs/UnstructuredIntegrationDef" }, { "$ref": "#/$defs/AlgoliaIntegrationDef" }, { "$ref": "#/$defs/McpIntegrationDef" }, { "$ref": "#/$defs/GoogleSheetsIntegrationDef-Input" }, { "type": "null" } ], "title": "Integration" }, "name": { "maxLength": 40, "pattern": "^[^\\W0-9]\\w*$", "title": "Name", "type": "string" }, "system": { "anyOf": [ { "$ref": "#/$defs/SystemDef" }, { "type": "null" } ] }, "text_editor_20241022": { "anyOf": [ { "$ref": "#/$defs/TextEditor20241022Def" }, { "type": "null" } ] }, "type": { "enum": [ "function", "integration", "system", "api_call", "computer_20241022", "text_editor_20241022", "bash_20241022" ], "title": "Type", "type": "string" } }, "required": [ "name", "type" ], "title": "CreateToolRequest", "type": "object" } }, "additionalProperties": true, "description": "Payload for creating a task", "properties": { "canonical_name": { "anyOf": [ { "maxLength": 255, "minLength": 1, "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", "type": "string" }, { "type": "null" } ], "title": "Canonical Name" }, "description": { "default": "", "title": "Description", "type": "string" }, "inherit_tools": { "default": false, "title": "Inherit Tools", "type": "boolean" }, "input_schema": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Input Schema" }, "main": { "items": { "anyOf": [ { "$ref": "#/$defs/EvaluateStep" }, { "$ref": "#/$defs/ToolCallStep" }, { "$ref": "#/$defs/PromptStep-Input" }, { "$ref": "#/$defs/GetStep" }, { "$ref": "#/$defs/SetStep" }, { "$ref": "#/$defs/LogStep" }, { "$ref": "#/$defs/YieldStep" }, { "$ref": "#/$defs/ReturnStep" }, { "$ref": "#/$defs/SleepStep" }, { "$ref": "#/$defs/ErrorWorkflowStep" }, { "$ref": "#/$defs/WaitForInputStep" }, { "$ref": "#/$defs/IfElseWorkflowStep-Input" }, { "$ref": "#/$defs/SwitchStep-Input" }, { "$ref": "#/$defs/ForeachStep-Input" }, { "$ref": "#/$defs/ParallelStep-Input" }, { "$ref": "#/$defs/Main-Input" } ] }, "minItems": 1, "title": "Main", "type": "array" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "name": { "maxLength": 255, "minLength": 1, "title": "Name", "type": "string" }, "tools": { "default": [], "items": { "$ref": "#/$defs/TaskTool-Input" }, "title": "Tools", "type": "array" } }, "required": [ "name", "main" ], "title": "CreateTaskRequest", "type": "object" } ================================================ FILE: src/schemas/walk.jq ================================================ # Define a recursive walk function that applies f to every value. def walk(f): . as $in | if type == "object" then reduce keys[] as $key ({}; . + { ($key): ($in[$key] | walk(f)) }) elif type == "array" then map( walk(f) ) else . end | f; # Save the whole document as $root so we can look up definitions. . as $root | .components.schemas[$target] + {"$defs": $root.components.schemas} | walk( if type=="string" and startswith("#/components/schema") then . | sub("components/schemas"; "$defs") else . end ) ================================================ FILE: src/scripts/__init__.py ================================================ ================================================ FILE: src/scripts/generate_changelog.py ================================================ # Standard library imports import json import logging import os import re import sys import time from pathlib import Path from typing import Any import yaml # Third-party imports from julep import Client # Configure logging with timestamp, level, and message format logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") # Constants and configurations HTML_TAGS_PATTERN = re.compile(r"(<[^>]+>)") # Regex pattern to match HTML tags REQUIRED_ENV_VARS = [ "AGENT_UUID", "TASK_UUID", "JULEP_API_KEY", ] # List of required environment variables def load_template(filename: str) -> str: """Load template content from file""" return Path(f"./scripts/templates/{filename}").read_text(encoding="utf-8") def run_task(pr_data: str) -> str: """ Execute the changelog generation task using Julep API. Args: pr_data (str): Formatted PR data to process Returns: str: Generated changelog content Raises: ValueError: If required environment variables are missing Exception: If task execution fails """ # Validate env vars with list comprehension if missing_vars := [var for var in REQUIRED_ENV_VARS if not os.environ.get(var)]: msg = f"Missing required environment variables: {', '.join(missing_vars)}" raise ValueError(msg) client = Client(api_key=os.environ["JULEP_API_KEY"], environment="production") # Use context manager for file operations with Path("./scripts/templates/changelog.yaml").open(encoding="utf-8") as f: task_description = yaml.safe_load(f) # Create or update the AI agent client.agents.create_or_update( agent_id=os.environ["AGENT_UUID"], name="Changelog Generator", about="An AI assistant that can generate a changelog from a list of PRs.", model="gpt-4o", ) # Create or update the task configuration client.tasks.create_or_update( task_id=os.environ["TASK_UUID"], agent_id=os.environ["AGENT_UUID"], **task_description, ) # Create a new execution instance execution = client.executions.create( task_id=os.environ["TASK_UUID"], input={"pr_data": str(pr_data)}, ) # Wait for task completion using context manager for proper resource cleanup with client: while (result := client.executions.get(execution.id)).status not in [ "succeeded", "failed", ]: time.sleep(3) if result.status != "succeeded": raise Exception(result.error) return result.output def preserve_and_update_changelog(new_changelog: str, source: str = "./CHANGELOG.md") -> None: """ Save the generated changelog while preserving HTML content. Args: new_changelog (str): The new changelog content to save source (str): Path to the changelog file (default: 'CHANGELOG.md') """ path = Path(source) path.parent.mkdir(parents=True, exist_ok=True) # Load existing changelog if it exists, otherwise use header template if path.exists(): existing_content = path.read_text(encoding="utf-8") # Find the end of the div tag div_end = existing_content.find("") + len("") # Insert new changelog after the div content = f"{existing_content[:div_end]}{new_changelog}{existing_content[div_end:]}" else: html_content = load_template("header.html") content = f"{html_content}\n\n{new_changelog}" path.write_text(content, encoding="utf-8") def is_html_tag(segment: str) -> bool: """ Check if a given string segment is an HTML tag. Args: segment (str): String to check Returns: bool: True if segment is an HTML tag, False otherwise """ return re.fullmatch(HTML_TAGS_PATTERN, segment) is not None def process_body(body: str) -> str: """ Process PR body text by removing HTML tags and special markers. Args: body (str): PR description body text Returns: str: Cleaned and processed body text """ if not body: return "" # Remove HTML tags and clean up the text segments = [seg for seg in re.split(HTML_TAGS_PATTERN, body) if not is_html_tag(seg)] processed_body = "".join(segments) return processed_body.replace(">", "").replace("[!IMPORTANT]", "").strip() def process_pr_data(pr_data: str) -> str: """ Generate changelog entries from PR data. Args: pr_data (str): JSON string containing PR information Returns: str: Formatted changelog entries """ prs: list[dict[str, Any]] = json.loads(pr_data) # Use list comprehension with f-strings entries = [ f"""- PR #{pr["number"]}: {pr["title"]} Author: {pr["author"]} Body: {process_body(pr.get("body", ""))} """ for pr in prs ] return "\n".join(entries) def main(pr_data: str) -> None: """ Main function to orchestrate changelog generation process. Args: pr_data (str): JSON string containing PR information Raises: Exception: If any step in the process fails """ try: logging.info("Processing PR data...") processed_pr_data = process_pr_data(pr_data) logging.info("Running task...") final_changelog = run_task(processed_pr_data) logging.info("Saving changelog...") preserve_and_update_changelog(final_changelog) logging.info("Successfully saved changelog to CHANGELOG.md") # delete the pr_data.json file os.remove("pr_data.json") logging.info("Deleted pr_data.json file") except Exception as e: logging.error(f"Failed to generate changelog: {e!s}") raise # Script entry point if __name__ == "__main__": try: # Read PR data from JSON file with open("pr_data.json") as file: pr_data = file.read() main(pr_data) except Exception as e: logging.error(f"Script failed: {e!s}") sys.exit(1) ================================================ FILE: src/scripts/generate_jwt.py ================================================ from datetime import UTC, datetime, timedelta import jwt dev_secret = "" prod_secret = "" test_secret = "your-supersupersecret-jwt-token-with-at-least-32-characters-long" encoded_jwt = jwt.encode( { "sub": "097720c5-ab84-438c-b8b0-68e0eabd31ff", "email": "e@mail.com", "iat": datetime.now(UTC), # Specify timezone "exp": datetime.now(UTC) + timedelta(days=100), # Specify timezone }, test_secret, algorithm="HS512", ) print(encoded_jwt) ================================================ FILE: src/scripts/generate_openapi_code.sh ================================================ #!/usr/bin/env bash # Turn on echo command set -x # Exit on error set -e uv_run () { uvx \ --with ruff --with datamodel-code-generator \ --from ${2:-poethepoet} \ $1 } codegen_then_format () { uv_run 'poe codegen' && \ uv_run 'poe format' && \ uv_run 'poe lint' || exit 0 } generate_json_schema_local () { \cat openapi.yaml | yq -o json | jq -f src/schemas/walk.jq --arg target "${1}" > $2 } generate_json_schema () { curl -sL http://dev.julep.ai/api/openapi.json | jq -f src/schemas/walk.jq --arg target "${1}" > $2 } cd src/typespec/ && \ tsp compile . cd - generate_json_schema CreateTaskRequest src/schemas/create_task_request.json generate_json_schema CreateAgentRequest src/schemas/create_agent_request.json cd src/agents-api && \ codegen_then_format cd - cd src/integrations-service && \ codegen_then_format cd - ================================================ FILE: src/scripts/readme_translator.py ================================================ import logging import re from functools import partial from pathlib import Path import parmapper from deep_translator import GoogleTranslator # Configure logging logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") HTML_TAGS_PATTERN = r"(<[^>]+>)" CODEBLOCK_PATTERN = r"(```[\s\S]*?```|\n)" def create_translator(target: str) -> GoogleTranslator: """ Create a translator for a given target language. """ return GoogleTranslator(source="en", target=target) def is_html_tag(segment: str) -> bool: """Check if the segment is an HTML tag.""" return re.fullmatch(HTML_TAGS_PATTERN, segment) is not None def is_special_character(segment: str) -> bool: """Check if the segment consists of special characters only.""" return re.fullmatch(r'^[!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~]+$', segment) is not None def translate_sub_segment(translator: GoogleTranslator, sub_segment: str) -> str: """Translate a single sub-segment.""" try: translated = translator.translate(sub_segment) return translated if translated else sub_segment except Exception as e: logging.error(f"Error translating segment '{sub_segment}': {e}") return sub_segment def translate_segment(translator: GoogleTranslator, segment: str) -> str: """ Translate a given raw HTML content using the provided translator, preserving HTML tags and newlines. """ if re.fullmatch(CODEBLOCK_PATTERN, segment) or segment == "\n": return segment segments = re.split(HTML_TAGS_PATTERN, segment) translated_segments = [] for sub_segment in segments: if is_html_tag(sub_segment) or is_special_character(sub_segment): translated_segments.append(sub_segment) else: translated_segments.append(translate_sub_segment(translator, sub_segment)) return "".join(translated_segments) def translate_readme(source: str, target: str) -> str: """ Translate a README file from source to target language, preserving code blocks and newlines. """ file_content = Path(source).read_text(encoding="utf-8") translator = create_translator(target) segments = re.split(CODEBLOCK_PATTERN, file_content) segment_translation = partial(translate_segment, translator) translated_segments = list(parmapper.parmap(segment_translation, segments)) return "".join(translated_segments) def save_translated_readme(translated_content: str, lang: str) -> None: """ Save the translated README content to a file. """ filename = f"./.github/README-{lang.split('-')[-1].upper()}.md" with open(filename, "w", encoding="utf-8") as file: file.write(translated_content) def main() -> None: """ Main function to translate README.md to multiple languages. """ source_file = "README.md" destination_langs = ["zh-CN", "ja", "fr"] for lang in destination_langs: logging.info(f"Translating to {lang}...") translated_readme = translate_readme(source_file, lang) save_translated_readme(translated_readme, lang) logging.info(f"Saved translated README for {lang}.") if __name__ == "__main__": main() ================================================ FILE: src/scripts/sync_model_docs.py ================================================ #!/usr/bin/env python3 """ Sync model information from litellm-config.yaml to documentation. This script reads the configured models from litellm-config.yaml, fetches pricing/feature data from LiteLLM's GitHub repository, and updates the supported-models.mdx file. The pricing data is fetched from: https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json """ import json from pathlib import Path from typing import Dict, List, Any, Optional, Tuple import re import yaml import urllib.request import urllib.error # Cost tier classification based on input token price def classify_cost_tier(input_cost_per_token: float) -> str: """Classify model cost tier based on input token cost.""" if input_cost_per_token == 0: return "Free" elif input_cost_per_token < 0.0000005: # $0.50 per 1M tokens return "Budget" elif input_cost_per_token < 0.000002: # $2.00 per 1M tokens return "Standard" elif input_cost_per_token < 0.00001: # $10.00 per 1M tokens return "Premium" else: return "Enterprise" def normalize_model_name(model_name: str) -> str: """Normalize model name to match between configs.""" # Remove provider prefixes normalized = re.sub(r'^(openai/|gemini/|anthropic/|groq/|openrouter/|cerebras/|voyage/|vertex_ai/)', '', model_name) # Handle special cases if normalized.startswith("claude-"): # Convert claude names to match pricing file format normalized = normalized.replace("claude-3-5-", "claude-3.5-") normalized = normalized.replace("claude-3-7-", "claude-3.7-") return normalized def find_model_in_pricing_data(model_name: str, litellm_model: str, pricing_data: Dict) -> Optional[Dict]: """Find model in pricing data using various matching strategies.""" # Direct matches to try candidates = [ model_name, litellm_model, normalize_model_name(model_name), normalize_model_name(litellm_model), ] # Add provider-specific variations if "/" in litellm_model: provider, model_part = litellm_model.split("/", 1) candidates.extend([ model_part, f"{provider}/{normalize_model_name(model_part)}", ]) # Try each candidate for candidate in candidates: if candidate in pricing_data: return pricing_data[candidate] # Try partial matching for specific patterns for key in pricing_data: if any(candidate in key or key in candidate for candidate in candidates): return pricing_data[key] return None def extract_models_from_config(config_path: Path) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: """Extract model configurations from litellm-config.yaml.""" with open(config_path, 'r') as f: config = yaml.safe_load(f) models = [] embedding_models = [] for model_config in config.get('model_list', []): model_name = model_config.get('model_name', '') litellm_params = model_config.get('litellm_params', {}) litellm_model = litellm_params.get('model', '') tags = litellm_params.get('tags', []) # Check if it's an embedding model is_embedding = ('embedding' in model_name.lower() or 'embedding' in litellm_model.lower() or model_name.startswith('text-embedding') or model_name.startswith('voyage') or '/bge-' in litellm_model or '/gte-' in litellm_model) model_data = { 'name': model_name, 'litellm_model': litellm_model, 'provider': litellm_model.split('/')[0] if '/' in litellm_model else 'unknown', 'is_free': 'free' in tags, 'tags': tags } if is_embedding: embedding_models.append(model_data) else: models.append(model_data) return models, embedding_models def enrich_model_data(models: List[Dict], pricing_data: Dict) -> List[Dict]: """Enrich model data with pricing and feature information.""" enriched = [] for model in models: model_info = find_model_in_pricing_data(model['name'], model['litellm_model'], pricing_data) if model_info: model['context_window'] = model_info.get('max_input_tokens', model_info.get('max_tokens', 'Unknown')) model['max_output'] = model_info.get('max_output_tokens', 'Unknown') model['supports_tools'] = model_info.get('supports_function_calling', False) model['supports_vision'] = model_info.get('supports_vision', False) model['supports_audio'] = model_info.get('supports_audio_input', False) or model_info.get('supports_audio_output', False) model['supports_prompt_caching'] = model_info.get('supports_prompt_caching', False) # Calculate cost tier input_cost = model_info.get('input_cost_per_token', 0) model['cost_tier'] = classify_cost_tier(input_cost) else: # Default values for models not in pricing data model['context_window'] = 'Unknown' model['max_output'] = 'Unknown' model['supports_tools'] = False model['supports_vision'] = False model['supports_audio'] = False model['supports_prompt_caching'] = False model['cost_tier'] = 'Unknown' enriched.append(model) return enriched def generate_model_table(models: List[Dict]) -> str: """Generate markdown table for models grouped by provider.""" # Group models by provider providers = {} provider_map = { 'openai': 'OpenAI', 'anthropic': 'Anthropic', 'gemini': 'Google', 'groq': 'Groq', 'openrouter': 'OpenRouter', 'cerebras': 'Cerebras', 'unknown': 'Anthropic' # Claude models show as unknown } for model in models: provider_key = model['provider'].lower() provider_name = provider_map.get(provider_key, provider_key.title()) # Special handling for models if model['name'].startswith('claude'): provider_name = 'Anthropic' elif model['name'].startswith('amazon/'): provider_name = 'Amazon Nova' if provider_name not in providers: providers[provider_name] = [] providers[provider_name].append(model) # Define provider order to match existing doc provider_order = ['Anthropic', 'Google', 'OpenAI', 'Groq', 'OpenRouter', 'Cerebras', 'Amazon Nova'] tables = [] for provider in provider_order: if provider not in providers: continue provider_models = sorted(providers[provider], key=lambda x: x['name']) # Generate markdown table matching existing format table = f"\n### {provider}\n\n" table += f"Here are the {provider} models supported by Julep:\n\n" table += "| Model Name | Context Window | Max Output | Tool Calling | Vision | Audio | Caching | Cost Tier |\n" table += "|------------|----------------|------------|--------------|--------|-------|---------|----------|\n" for model in provider_models: # Format context window if isinstance(model['context_window'], int): if model['context_window'] >= 1000000: context = f"{model['context_window'] // 1000000}M tokens" elif model['context_window'] >= 1000: context = f"{model['context_window'] // 1000}K tokens" else: context = f"{model['context_window']} tokens" else: context = "Unknown" # Format max output if isinstance(model['max_output'], int): if model['max_output'] >= 1000000: max_out = f"{model['max_output'] // 1000000}M tokens" elif model['max_output'] >= 1000: max_out = f"{model['max_output'] // 1000}K tokens" else: max_out = f"{model['max_output']} tokens" else: max_out = "Unknown" # Format boolean support columns tools = "✅" if model['supports_tools'] else "❌" if model['supports_tools'] is False else "?" vision = "✅" if model['supports_vision'] else "❌" audio = "✅" if model['supports_audio'] else "❌" caching = "✅" if model['supports_prompt_caching'] else "❌" table += f"| {model['name']} | {context} | {max_out} | {tools} | {vision} | {audio} | {caching} | {model['cost_tier']} |\n" tables.append(table) # Add any remaining providers not in the order remaining = [p for p in providers if p not in provider_order] for provider in sorted(remaining): provider_models = sorted(providers[provider], key=lambda x: x['name']) table = f"\n### {provider}\n\n" table += f"Here are the {provider} models supported by Julep:\n\n" table += "| Model Name | Context Window | Max Output | Tool Calling | Vision | Audio | Caching | Cost Tier |\n" table += "|------------|----------------|------------|--------------|--------|-------|---------|----------|\n" for model in provider_models: if isinstance(model['context_window'], int): if model['context_window'] >= 1000000: context = f"{model['context_window'] // 1000000}M tokens" elif model['context_window'] >= 1000: context = f"{model['context_window'] // 1000}K tokens" else: context = f"{model['context_window']} tokens" else: context = "Unknown" # Format max output if isinstance(model['max_output'], int): if model['max_output'] >= 1000000: max_out = f"{model['max_output'] // 1000000}M tokens" elif model['max_output'] >= 1000: max_out = f"{model['max_output'] // 1000}K tokens" else: max_out = f"{model['max_output']} tokens" else: max_out = "Unknown" # Format boolean support columns tools = "✅" if model['supports_tools'] else "❌" if model['supports_tools'] is False else "?" vision = "✅" if model['supports_vision'] else "❌" audio = "✅" if model['supports_audio'] else "❌" caching = "✅" if model['supports_prompt_caching'] else "❌" table += f"| {model['name']} | {context} | {max_out} | {tools} | {vision} | {audio} | {caching} | {model['cost_tier']} |\n" tables.append(table) return "\n".join(tables) def generate_embedding_table(embedding_models: List[Dict]) -> str: """Generate markdown table for embedding models.""" if not embedding_models: return "" table = "\n### Embedding\n\n" table += "Here are the embedding models supported by Julep:\n\n" table += "| Model Name | Embedding Dimensions |\n" table += "|------------|---------------------|\n" for model in sorted(embedding_models, key=lambda x: x['name']): # All embedding models in Julep use 1024 dimensions as noted in the original doc dimensions = "1024" table += f"| {model['name']} | {dimensions} |\n" table += "\n\n" table += "Though the models mentioned above support different embedding dimensions, Julep uses fixed 1024 dimensions for all embedding models for now. We plan to support different dimensions in the future.\n" table += "\n" return table def update_documentation(doc_path: Path, model_section: str): """Update the documentation file with new model information.""" with open(doc_path, 'r') as f: content = f.read() # Find the Available Models section available_models_start = content.find("## Available Models") if available_models_start == -1: print("Error: Could not find '## Available Models' section") return # Find where to stop - look for the next ## section after Available Models # This could be "## Supported Parameters" or any other section next_major_section = content.find("\n## ", available_models_start + 1) if next_major_section == -1: # If no next section found, replace to end of file end_marker = len(content) else: end_marker = next_major_section # Extract the part before models before_models = content[:available_models_start] # Find where the actual model listings start # Look for the first provider heading (could be ### or #) import re # Find the first provider section (### Anthropic, ### Google, etc.) first_provider_match = re.search(r'\n###?\s+(Anthropic|Google|OpenAI|Groq|OpenRouter|Cerebras|Amazon)', content[available_models_start:end_marker]) if first_provider_match: models_content_start = available_models_start + first_provider_match.start() else: # If no provider found, look for where tip/info boxes end # Find the last or tag last_tip = content.rfind("", available_models_start, end_marker) last_info = content.rfind("", available_models_start, end_marker) last_tag = max(last_tip, last_info) if last_tag > -1: # Find the newline after the tag newline_after = content.find("\n", last_tag) models_content_start = newline_after + 1 else: # Fallback: just use some offset after the section header models_content_start = available_models_start + len("## Available Models\n\n") # Extract the header part (with info/tip boxes) models_header = content[available_models_start:models_content_start] # Extract the part after models after_models = content[end_marker:] # Construct new content new_content = before_models + models_header + model_section + after_models with open(doc_path, 'w') as f: f.write(new_content) def fetch_pricing_data() -> Dict: """Fetch pricing data from LiteLLM GitHub repository.""" url = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json" try: print(f"Fetching pricing data from {url}...") with urllib.request.urlopen(url) as response: data = json.loads(response.read().decode()) print("✅ Successfully fetched pricing data") return data except urllib.error.URLError as e: print(f"❌ Error fetching pricing data: {e}") raise except json.JSONDecodeError as e: print(f"❌ Error parsing pricing data: {e}") raise def main(): """Main function to sync model documentation.""" # Define paths - handle different execution contexts script_path = Path(__file__).resolve() # Check if we're in src/scripts or being run from elsewhere if script_path.parent.name == "scripts" and script_path.parent.parent.name == "src": # Running from src/scripts/ project_root = script_path.parent.parent.parent else: # Running from somewhere else, try to find project root current = script_path.parent while current != current.parent: if (current / "src" / "llm-proxy").exists(): project_root = current break current = current.parent else: # Fallback to relative paths project_root = Path.cwd() config_path = project_root / "src" / "llm-proxy" / "litellm-config.yaml" doc_path = project_root / "documentation" / "integrations" / "supported-models.mdx" # Check files exist if not config_path.exists(): print(f"Error: Config file not found at {config_path}") return 1 if not doc_path.exists(): print(f"Error: Documentation file not found at {doc_path}") return 1 # Fetch pricing data from GitHub try: pricing_data = fetch_pricing_data() except Exception as e: print(f"Failed to fetch pricing data: {e}") return 1 # Extract and enrich model data print("Extracting models from litellm config...") models, embedding_models = extract_models_from_config(config_path) print(f"Found {len(models)} models and {len(embedding_models)} embedding models") print("Enriching model data with pricing information...") enriched_models = enrich_model_data(models, pricing_data) # Generate documentation print("Generating model documentation...") model_section = generate_model_table(enriched_models) embedding_section = generate_embedding_table(embedding_models) # Combine sections full_section = model_section + "\n" + embedding_section # Update documentation file print("Updating documentation file...") update_documentation(doc_path, full_section) print("✅ Documentation updated successfully!") # Print summary cost_tiers = {} for model in enriched_models: tier = model['cost_tier'] cost_tiers[tier] = cost_tiers.get(tier, 0) + 1 print("\nModel Summary:") print(f"Total models: {len(enriched_models)}") print(f"Embedding models: {len(embedding_models)}") for tier, count in sorted(cost_tiers.items()): print(f" {tier}: {count} models") return 0 if __name__ == "__main__": exit(main()) ================================================ FILE: src/scripts/templates/changelog.yaml ================================================ name: Changelog Generator description: Generates a changelog from a list of PRs. main: - prompt: - role: system content: | $ f''' # AI Agent Prompt for Generating a Structured and Engaging Changelog Generate a **detailed** and **engaging changelog** based on information from the PR comment, title, author, and any additional context. Your goal is to make the changelog both **informative** and **appealing** to the user. ## 🔄 Steps to Generate the Changelog: ### 1. **Extract Relevant Information** 📋 Gather all the important details from the following sources: - **PR Title**: What is the overall summary of the change? - **PR Comment**: Any detailed description of the changes and reasons for the change. - **PR Author**: Who made the change? (Include name or GitHub handle) - **Additional Context**: Include any extra context or notes provided for a clearer understanding of the changes. ### 2. **Organize the Content** 🗂️ Structure the changelog into **clear sections**. These sections should be: - **Features** ✨: New functionalities or major additions. - **Fixes** 🔧: Bug fixes or issue resolutions. - **Improvements** 📈: Enhancements or optimizations made. - **Performance Enhancements** 🚀: Changes that improve speed, efficiency, or scalability. - **Breaking Changes** 💥: Changes that could potentially break backward compatibility. ### 3. **Condense the Changes** 📝 For each line, try to include: - A **concise but clear description** of what has changed. - The **benefit** or **impact** on the user experience. ### 4. **Engage the User** 🗣️ Write in a conversational and engaging tone. Try to: - Highlight the **key updates** and their **user impact**. - Encourage users to **take action** if necessary (e.g., “Please upgrade to this version to experience the new feature!”). ### 5. **Format the Changelog** 🖋️ Make sure the changelog is visually clear and easy to read: - Use **bullet points** for each change. - Apply **headings** for sections like "Features", "Fixes", etc. - Use **emojis** to visually separate and highlight sections. ### 6. **Output Format** 🗒️ The final changelog should follow this format: - **Title**: "Julep AI Changelog for {{datetime.datetime.now().strftime('%d %B %Y')}}" - **Sections**: Include only the following 10 lines: - Features ✨: Brief overview of major new functionalities - Features ✨: Brief overview of minor new functionalities - Fixes 🔧: Summary of critical bug fixes - Fixes 🔧: Summary of minor bug fixes - Improvements 📈: Overview of major enhancements - Improvements 📈: Overview of minor enhancements - Performance 🚀: Key performance improvements - Performance 🚀: Secondary performance improvements - Breaking Changes 💥: Critical breaking changes - Breaking Changes 💥: Other breaking changes The output should be concise, clear and engaging. Use markdown formatting and emojis to make it visually appealing. The output should not have more than 10 pointers in total. The output should not have more than 100 words in total. ### Example Output: # **Changelog for {datetime.datetime.now().strftime('%d %B %Y')}** ✨ - **Major Feature**: Added real-time analytics dashboard for live data visualization ✨ - **Minor Feature**: Introduced new export options for custom reports ✨ - **Critical Fix**: Resolved data export failures for large datasets 🔧 - **Minor Fix**: Fixed UI alignment issues in the sidebar 🔧 - **Major Enhancement**: Search functionality now 20% faster 📈 - **Minor Enhancement**: Improved error messages for better clarity 📈 - **Key Performance**: Optimized data compression reducing storage by 30% 🚀 - **Secondary Performance**: Reduced API response times by 15% 🚀 - **Critical Breaking**: Legacy API (v1) deprecation next month 💥 - **Other Breaking**: Updated authentication flow requires token refresh 💥 ''' - role: user content: | $ f''' Here is the PR data: {steps[0].input.pr_data} ''' unwrap: true ================================================ FILE: src/scripts/templates/header.html ================================================
julep

Get API Key   Documentation

NPM Version   PyPI - Version   Docker Image Version   GitHub License

Discord · 𝕏 · LinkedIn

================================================ FILE: src/typespec/.gitignore ================================================ # Ignore everything in tsp-output tsp-output/**/*.* # Don't ignore the openapi3 directory !tsp-output/@typespec/openapi3/ # But don't ignore openapi-*.yaml files in tsp-output/@typespec/openapi3/ !tsp-output/@typespec/openapi3/openapi-*.yaml ================================================ FILE: src/typespec/AGENTS.md ================================================ # AGENTS.md - typespec This directory contains TypeSpec definitions for APIs and code generation. Key Uses - Bash commands: - cd typespec - poe codegen - Core directories: - `agents/`, `tasks/`, `tools/`, `sessions/`, etc. define domain models. - Code style guidelines: - Use discriminated unions with `kind_` property. - Apply mixins (HasId, HasTimestamps, HasMetadata) consistently. - Testing instructions: - Validate specs: `tsp compile` - Regenerate OpenAPI models: `bash scripts/generate_openapi_code.sh` - Repository etiquette: - Do NOT edit generated code in `autogen/`. - Developer environment: - Ensure `@typespec/openapi3` plugin is installed. - Unexpected behaviors: - Alias conflicts (e.g., `if_`) require manual resolution. # TypeSpec Architecture Documentation ## Overview TypeSpec is a structured language for defining API contracts that serves as the source of truth for the Julep API. It generates OpenAPI specifications which are used to create client SDKs, validate implementations, and generate server-side models. ## Core Structure - TypeSpec definitions organized by domain resources - Each domain has `models.tsp`, `endpoints.tsp`, and `main.tsp` - Common components for reuse across domains - Generates OpenAPI 3.0 YAML specifications ## Domain Resources - **projects**: Organizational units for grouping related resources - **agents**: AI agent definitions with instructions and configuration - **tasks**: Workflow definitions with steps, conditionals, and tool integration - **tools**: Capabilities that agents can use (functions, integrations, system resources) - **sessions**: Conversation containers with context management - **entries**: Message structure and history tracking - **executions**: Task execution state tracking with transitions - **docs**: Document storage and retrieval with vector search - **files**: File storage and management - **users**: User management and authentication - **chat**: Interaction flow and model parameters ## Step Types - **Tool-based**: ToolCallStep, PromptStep, EvaluateStep - **Flow control**: IfElseStep, SwitchStep, ParallelStep, ForeachStep, MapReduceStep - **Data manipulation**: GetStep, SetStep, LogStep - **Terminal**: ReturnStep, ErrorStep, WaitForInputStep ## Scalar Types - **Identifiers**: uuid, canonicalName, displayName, validPythonIdentifier - **Expressions**: PyExpression (SimpleEval-compatible), JinjaTemplate - **Pagination**: limit, offset, sortBy, sortDirection - **Content**: mimeType, yaml, json, eventStream ## Tool Integrations - **Search/Knowledge**: Wikipedia, Brave, arXiv, Algolia - **Web Browsing**: BrowserBase, Spider, RemoteBrowser - **Media Processing**: FFmpeg, Cloudinary, Unstructured, LlamaParse - **Communication**: Email, Weather - **System Tools**: Anthropic specialized tools (computer, text_editor, bash) ## API Patterns - RESTful resource endpoints with consistent CRUD operations - Parent-child resource relationships - Discriminated union types with `kind_` property - Rich expression support with Python evaluation - Streaming responses for real-time interactions - Authentication via API keys ## Integration Points - Sessions contain Entries (conversation history) - Chat uses Session context - Executions run Tasks - Tasks use Tools for capabilities - Agents define available Tasks and Tools ## Code Generation Pipeline 1. TypeSpec definitions (.tsp files) 2. TypeSpec compiler (`tsp compile`) 3. OpenAPI specification (YAML) 4. Pydantic models via datamodel-codegen 5. Post-processing fixes 6. Schema extraction for specific models ## Key Concepts - Discriminated unions for type safety - Expression language for dynamic behavior - Parent-child resource hierarchies - Common mixins (HasId, HasTimestamps, HasMetadata) - Tool composability for flexible agent capabilities ================================================ FILE: src/typespec/agents/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "./models.tsp"; using TypeSpec.Http; using Common; namespace Agents; // // AGENT ENDPOINTS // interface Endpoints extends LimitOffsetPagination, CreateEndpoint, CreateOrUpdateEndpoint, UpdateEndpoint, PatchEndpoint, DeleteEndpoint<"Delete Agent by id">, GetEndpoint { @route("models") @get @doc("List all available models") listModels(): ListModelsResponse; } ================================================ FILE: src/typespec/agents/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Agents; // // AGENTS // ================================================ FILE: src/typespec/agents/models.tsp ================================================ import "@typespec/http"; import "../common"; import "../chat"; using TypeSpec.Http; using Common; using Chat; namespace Agents; // // AGENT MODELS // model Agent { ...HasId; ...HasMetadata; ...HasTimestamps; /** Name of the agent */ name: displayName; /** Project canonical name of the agent */ project?: canonicalName; /** Canonical name of the agent */ canonical_name?: canonicalName; /** About the agent */ about: string = ""; /** Model name to use (gpt-4-turbo, gemini-nano etc) */ "model": string = ""; /** Instructions for the agent */ instructions: string | string[] = #[]; /** Default settings for all sessions created by this agent */ default_settings?: Record; /** Default system template for all sessions created by this agent */ default_system_template: string = defaultSessionSystemMessage; } /** Payload for updating a agent */ @withVisibility("create", "update") model UpdateAgentRequest { ...Agent; } /** Payload for patching a agent */ model PatchAgentRequest is UpdateAgentRequest {} /** Payload for creating a agent (and associated documents) */ @withVisibility("create") model CreateAgentRequest { ...UpdateAgentRequest; } model CreateOrUpdateAgentRequest extends CreateAgentRequest { @path id: uuid; ...UpdateAgentRequest; } /** Model information returned by the model list endpoint */ model ModelInfo { /** The ID/name of the model */ id: string; } /** Response for the list models endpoint */ model ListModelsResponse { /** List of available models */ models: ModelInfo[]; } ================================================ FILE: src/typespec/chat/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "../sessions"; import "./models.tsp"; using TypeSpec.Http; using Common; using Sessions; namespace Chat; // // CHAT ENDPOINTS // interface Endpoints { @post @doc("Generate a response from the model") generate( @path @doc("The session ID") id: uuid; @header @doc("Custom API key") "X-Custom-Api-Key"?: string; @bodyRoot @doc("Request to generate a response from the model") body: ChatInput; ): { @statusCode _: "200"; @bodyRoot @doc("Response from the model") body: ChatResponse; } | { @statusCode _: "200"; @header @doc("Content type for streaming responses") "content-type": "text/event-stream"; @bodyRoot @doc("Streaming response from the model") body: ChunkChatResponse; }; } interface RenderEndpoints { @post @doc("Render system prompt for the session") render( @path @doc("The session ID") id: uuid; @bodyRoot @doc("Request to render the system prompt for the session") body: ChatInput; ): { @statusCode _: "200"; @bodyRoot @doc("Response from the model") body: RenderResponse; }; } ================================================ FILE: src/typespec/chat/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Chat; // // CHAT // ================================================ FILE: src/typespec/chat/models.tsp ================================================ import "@typespec/http"; import "../common"; import "../docs"; import "../entries"; import "../tools"; using TypeSpec.Http; using Common; using Docs; using Entries; using Tools; namespace Chat; // // CHAT MODELS // /** * The reason the model stopped generating tokens. This will be `stop` * if the model hit a natural stop point or a provided stop sequence, * `length` if the maximum number of tokens specified in the request * was reached, `content_filter` if content was omitted due to a flag * from our content filters, `tool_calls` if the model called a tool. */ enum FinishReason { stop, length, content_filter, tool_calls, } /** Determines how the session accesses history and memories */ model MemoryAccessOptions { /** DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) */ @visibility("read") // DISABLED remember: boolean = false; /** Whether previous memories and docs should be recalled or not */ recall: boolean = true; /** Whether this interaction should be stored in the session history or not */ save: boolean = true; } model SimpleCompletionResponseFormat { /** The format of the response */ type: "text" | "json_object" = "text"; } model SchemaCompletionResponseFormat { /** The format of the response */ type: "json_schema" = "json_schema"; /** The schema of the response */ json_schema: Record; } alias CompletionResponseFormat = SimpleCompletionResponseFormat | SchemaCompletionResponseFormat; model CommonChatSettings { /** Identifier of the model to be used */ `model`?: identifierSafeUnicode; /** Indicates if the server should stream the response as it's generated */ stream: boolean = false; /** Up to 4 sequences where the API will stop generating further tokens. */ @maxItems(4) stop: string[] = #[]; /** If specified, the system will make a best effort to sample deterministically for that particular seed value */ @minValue(-1) @maxValue(1000) seed?: int16; /** The maximum number of tokens to generate in the chat completion */ @minValue(1) max_tokens?: uint32; /** Modify the likelihood of specified tokens appearing in the completion */ logit_bias?: Record; /** Response format (set to `json_object` to restrict output to JSON) */ response_format?: CompletionResponseFormat; /** Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) */ agent?: uuid; } model OpenAISettings { /** Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. */ @minValue(-2) @maxValue(2) frequency_penalty?: float32; /** Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. */ @minValue(-2) @maxValue(2) presence_penalty?: float32; /** What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. */ @minValue(0) @maxValue(5) temperature?: float32; /** Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. */ @minValue(0) @maxValue(1) top_p?: float32; } model vLLMSettings { /** Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. */ @minValue(0) @maxValue(2) repetition_penalty?: float32; /** Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. */ @minValue(0) @maxValue(2) length_penalty?: float32; /** Minimum probability compared to leading token to be considered */ @minValue(0) @maxValue(1) min_p?: float32; } alias DefaultChatSettings = Record; alias ChatSettings = Record; model InputDefaultChatSettings extends OpenAISettings { ...vLLMSettings; } model InputChatSettings extends InputDefaultChatSettings { ...CommonChatSettings; } /** Usage statistics for the completion request */ model CompletionUsage { /** Number of tokens in the generated completion */ @visibility("read") completion_tokens?: uint32; /** Number of tokens in the prompt */ @visibility("read") prompt_tokens?: uint32; /** Total number of tokens used in the request (prompt + completion) */ @visibility("read") total_tokens?: uint32; } model ChatInputData { /** A list of new input messages comprising the conversation so far. */ @minItems(1) messages: InputChatMLMessage[]; /** (Advanced) List of tools that are provided in addition to agent's default set of tools. */ tools: CreateToolRequest[] | null = null; /** Can be one of existing tools given to the agent earlier or the ones provided in this request. */ tool_choice?: ToolChoiceOption; } model ChatInput extends ChatInputData { ...MemoryAccessOptions; ...InputChatSettings; ...HasMetadata; /** Whether to automatically run tools and send the results back to the model (requires tools or agents with tools). */ auto_run_tools: boolean = false; /** Whether to include tool requests and responses when recalling messages. */ recall_tools: boolean = true; } model BaseTokenLogProb { token: string; /** The log probability of the token */ logprob: float32; bytes?: uint16[]; } model TokenLogProb extends BaseTokenLogProb { /** The log probabilities of the tokens */ @visibility("read") @minItems(1) top_logprobs: BaseTokenLogProb[]; } model LogProbResponse { /** The log probabilities of the tokens */ content: TokenLogProb[] | null; } model BaseChatOutput { index: uint32; /** The reason the model stopped generating tokens */ finish_reason: FinishReason = FinishReason.stop; /** The log probabilities of tokens */ logprobs?: LogProbResponse; /** The tool calls generated by the model */ tool_calls?: ChosenToolCall[]; } /** The output returned by the model. Note that, depending on the model provider, they might return more than one message. */ // TODO: Need to add support for tool calls model SingleChatOutput extends BaseChatOutput { message: ChatMLMessage; } /** The output returned by the model. Note that, depending on the model provider, they might return more than one message. */ model MultipleChatOutput extends BaseChatOutput { @visibility("read") @minItems(1) messages: ChatMLMessage[]; } alias ChatOutput = SingleChatOutput | MultipleChatOutput; /** Streaming chat completion output */ model ChatOutputChunk extends BaseChatOutput { /** The message generated by the model */ delta: InputChatMLMessage; } model BaseChatResponse { /** Usage statistics for the completion request */ usage?: CompletionUsage; /** Background job IDs that may have been spawned from this interaction. */ @visibility("read") jobs: uuid[] = #[]; /** Documents referenced for this request (for citation purposes). */ @visibility("read") docs: DocReference[] = #[]; ...HasCreatedAt; ...HasId; } model ChunkChatResponse extends BaseChatResponse { @header contentType: eventStream; /** The deltas generated by the model */ choices: ChatOutputChunk[]; } model MessageChatResponse extends BaseChatResponse { @header contentType: json; /** The deltas generated by the model */ choices: ChatOutput[]; } alias ChatResponse = ChunkChatResponse | MessageChatResponse; model RenderResponse extends ChatInputData { /** Documents referenced for this request (for citation purposes). */ @visibility("read") docs: DocReference[] = #[]; } ================================================ FILE: src/typespec/common/constants.tsp ================================================ namespace Common; // // COMMON CONSTANTS // const defaultSessionSystemMessage: string = """ {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} """; ================================================ FILE: src/typespec/common/interfaces.tsp ================================================ import "@typespec/http"; import "@typespec/sse"; import "./scalars.tsp"; import "./types.tsp"; using TypeSpec.Http; using TypeSpec.SSE; namespace Common; // // COMMON INTERFACES // interface LimitOffsetPagination< Type, DocString extends valueof string = "List resources (paginated)" > { @get @doc(DocString) list(...PaginationOptions): { items: Type[]; }; } interface CreateEndpoint< CreateType, Type, DocString extends valueof string = "Create a new resource" > { @post @doc(DocString) create(...CreateType): { @statusCode _: "201"; @body @doc("Details of the resource created along with ID") body: Type; }; } interface CreateOrUpdateEndpoint< CreateOrUpdateType, Type, DocString extends valueof string = "Create or update a resource (ID is required in payload; existing resource will be overwritten)" > { @post @doc(DocString) createOrUpdate(...CreateOrUpdateType): { @statusCode _: "200"; @body @doc("Details of the resource updated along with ID") body: Type; }; } interface UpdateEndpoint< UpdateType, Type, DocString extends valueof string = "Update resource by id (overwrite existing values)" > { @put @doc(DocString) update( @path @doc("ID of the resource") id: uuid, ...UpdateType, ): { @statusCode _: "200"; @body @doc("Details of the resource updated along with ID") body: Type; }; } interface PatchEndpoint< PatchType, Type, DocString extends valueof string = "Patch resource by its id (merge changes with existing values)" > { @patch @doc(DocString) patch( @path @doc("ID of the resource") id: uuid, ...PatchType, ): { @statusCode _: "200"; @body @doc("Details of the resource patched along with ID") body: Type; }; } interface GetEndpoint< Type, DocString extends valueof string = "Get resource by id" > { @get @doc(DocString) get( @path @doc("ID of the resource") id: uuid, ): Type; } interface DeleteEndpoint { @delete @doc(DocString) delete( @path @doc("ID of the resource") id: uuid, ): { @statusCode _: "202"; @body @doc("Details of the resource deleted along with ID") body: ResourceDeletedResponse; }; } interface ChildLimitOffsetPagination< T, DocString extends valueof string = "List items owned by the given parent" > { @get @doc(DocString) list( @path @doc("ID of parent") id: uuid, ...PaginationOptions, ): { items: T[]; }; } interface ChildCreateEndpoint< CreateType, Type, DocString extends valueof string = "Create a new resource owned by the given parent" > { @post @doc(DocString) create( @path @doc("ID of parent resource") id: uuid, ...CreateType, ): { @statusCode _: "201"; @body @doc("Details of the resource created along with ID") body: Type; }; } interface ChildCreateOrUpdateEndpoint< CreateOrUpdateType, Type, DocString extends valueof string = "Create or update a resource owned by the given parent" > { @post @doc(DocString) createOrUpdate( @path @doc("ID of parent resource") parent_id: uuid, ...CreateOrUpdateType, ): { @statusCode _: "200"; @body @doc("Details of the resource updated along with ID") body: Type; }; } interface ChildDeleteEndpoint { @delete @doc(DocString) delete( @path @doc("ID of parent resource") id: uuid, @path @doc("ID of the resource to be deleted") child_id: uuid, ): { @statusCode _: "202"; @body @doc("Details of the resource deleted along with ID") body: ResourceDeletedResponse; }; } interface ChildUpdateEndpoint< UpdateType, Type, DocString extends valueof string = "Update a resource owned by the given parent using its id" > { @put @doc(DocString) update( @path @doc("ID of parent resource") id: uuid, @path @doc("ID of the resource to be updated") child_id: uuid, ...UpdateType, ): { @statusCode _: "200"; @body @doc("Details of the resource updated along with ID") body: Type; }; } interface ChildPatchEndpoint< PatchType, Type, DocString extends valueof string = "Patch a resource owned by the given parent using its id" > { @patch @doc(DocString) patch( @path @doc("ID of parent resource") id: uuid, @path @doc("ID of the resource to be patched") child_id: uuid, ...PatchType, ): { @statusCode _: "200"; @body @doc("Details of the resource patched along with ID") body: Type; }; } interface ChildStreamEndpoint< T, DocString extends valueof string = "Stream events emitted by the parent" > { @get @doc(DocString) stream( @path @doc("ID of parent") id: uuid, @query @doc("Next page token") next_token: string | null = null, ): SSEStream>; } ================================================ FILE: src/typespec/common/main.tsp ================================================ import "./constants.tsp"; import "./interfaces.tsp"; import "./mixins.tsp"; import "./scalars.tsp"; import "./types.tsp"; namespace Common; // // COMMON // ================================================ FILE: src/typespec/common/mixins.tsp ================================================ import "./scalars.tsp"; import "./types.tsp"; namespace Common; // // COMMON MIXINS // model HasCreatedAtOptional { /** When this resource was created as UTC date-time */ @visibility("read") created_at?: utcDateTime; } model HasCreatedAt { /** When this resource was created as UTC date-time */ @visibility("read") created_at: utcDateTime; } model HasUpdatedAt { /** When this resource was updated as UTC date-time */ @visibility("read") updated_at: utcDateTime; } model HasDeletedAt { /** When this resource was deleted as UTC date-time */ @visibility("read") deleted_at: utcDateTime; } model HasTimestamps { ...HasCreatedAt; ...HasUpdatedAt; } model HasIdOptional { @visibility("read") id?: uuid; } model HasId { @visibility("read") @key id: uuid; } /** (Optional) Metadata for a resource */ model HasMetadata { metadata?: Metadata; } model HasJobs { /** IDs (if any) of jobs created as part of this request */ @visibility("read") jobs: uuid[] = #[]; } ================================================ FILE: src/typespec/common/scalars.tsp ================================================ namespace Common; // // COMMON SCALARS // @format("uuid") scalar uuid extends string; alias concreteType = numeric | string | boolean | null; /** * For Unicode character safety * See: https://unicode.org/reports/tr31/ * See: https://www.unicode.org/reports/tr39/#Identifier_Characters */ @maxLength(120) @pattern("^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$") scalar identifierSafeUnicode extends string; /** Valid mime types */ @maxLength(120) @pattern("^(application|audio|font|example|image|message|model|multipart|text|video|x-(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+))\\/([0-9A-Za-z!#$%&'*+.^_`|~-]+)$") scalar mimeType extends string; /** Valid python identifier names */ @pattern("^[^\\W0-9]\\w*$") @maxLength(40) scalar validPythonIdentifier extends string; /** A valid step label */ @maxLength(120) @pattern("^[^0-9]|^[0-9]+[^0-9].*$") scalar stepLabel extends string; /** Limit the number of results */ @minValue(1) @maxValueExclusive(1000) scalar limit extends uint16; /** Offset to apply to the results */ @minValue(0) scalar offset extends uint32; /** Sort by a field */ alias sortBy = "created_at" | "updated_at"; /** Sort direction */ alias sortDirection = "asc" | "desc"; /** Contents of a document */ @maxLength(30000) scalar content extends string; @minValue(-100.0) @maxValue(100.0) scalar logit_bias extends float32; /** YAML Mime Type; see: https://stackoverflow.com/questions/332129/yaml-media-type */ alias yaml = "application/yaml" | "text/x-yaml" | "text/yaml"; alias json = "application/json"; alias eventStream = "text/event-stream"; /** Different possible sources that can produce new entries */ alias entrySource = | "api_request" | "api_response" | "tool_request" | "tool_response" | "internal" | "summarizer" | "meta"; /** A simple python expression compatible with SimpleEval. */ scalar PyExpression extends string; /** A valid jinja template. */ scalar JinjaTemplate extends string; /** * For canonical names (machine-friendly identifiers) * Must start with a letter and can only contain letters, numbers, and underscores */ @minLength(1) @maxLength(255) @pattern("^[a-zA-Z][a-zA-Z0-9_]*$") scalar canonicalName extends string; /** * For display names * Must be between 1 and 255 characters */ @minLength(1) @maxLength(255) scalar displayName extends string; ================================================ FILE: src/typespec/common/types.tsp ================================================ import "@typespec/events"; import "@typespec/http"; import "@typespec/openapi"; using TypeSpec.Events; using TypeSpec.Http; using TypeSpec.OpenAPI; namespace Common; // // COMMON TYPES // alias Metadata = Record; alias MetadataFilter = Record; model ResourceDeletedResponse { @doc("ID of deleted resource") id: uuid; ...HasDeletedAt; ...HasJobs; } model BulkResourceDeletedResponse { @doc("IDs of deleted resources") ids: uuid[]; ...HasDeletedAt; ...HasJobs; } model PaginationOptions { @query @doc("Limit the number of items returned") limit: limit = 100, @query @doc("Offset the items returned") offset: offset = 0, /** Sort by a field */ @query sort_by: sortBy = "created_at", /** Sort direction */ @query direction: sortDirection = "asc", /** Object to filter results by metadata */ @query metadata_filter: Record = #{}, } @events union StreamEvent { T; } ================================================ FILE: src/typespec/docs/endpoints.tsp ================================================ import "@typespec/http"; import "../agents"; import "../common"; import "../users"; import "./models.tsp"; using TypeSpec.Http; using Agents; using Common; using Users; namespace Docs; // // DOCS ENDPOINTS // interface UserEndpoints extends ChildDeleteEndpoint<"Delete a Doc for this User">, ChildCreateEndpoint { @get @doc("List Docs owned by a User") list( @path @doc("ID of parent") id: uuid, ...PaginationOptions, @query @doc("Whether to include embeddings in the response") include_embeddings?: boolean = true, ): { items: Doc[]; }; } interface AgentEndpoints extends ChildDeleteEndpoint<"Delete a Doc for this Agent">, ChildCreateEndpoint { @get @doc("List Docs owned by an Agent") list( @path @doc("ID of parent") id: uuid, ...PaginationOptions, @query @doc("Whether to include embeddings in the response") include_embeddings?: boolean = true, ): { items: Doc[]; }; } interface IndividualDocEndpoints { @get @doc("Get Doc by id") get( @path @doc("ID of the resource") id: uuid, @query @doc("Whether to include embeddings in the response") include_embeddings?: boolean = true, ): Doc; } interface SearchEndpoints { @doc(DocString) @post search( @path @doc("ID of the parent") id: uuid, body: DocSearchRequest, ): DocSearchResponse; } interface BulkDeleteEndpoints { @doc(DocString) @delete deleteBulk( @path @doc("ID of the parent") id: uuid, ...BulkDeleteDocsRequest, ): { @statusCode _: "202"; @body @doc("Details of the resource deleted along with ID") body: ResourceDeletedResponse[]; }; } interface EmbedEndpoints { @doc("Embed a query for search") @post embed(body: EmbedQueryRequest): EmbedQueryResponse; } ================================================ FILE: src/typespec/docs/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Docs; // // DOCS // ================================================ FILE: src/typespec/docs/models.tsp ================================================ import "../agents"; import "../common"; import "../users"; using Agents; using Common; using Users; namespace Docs; // // DOCS MODELS // model Doc { ...HasId; ...HasMetadata; ...HasCreatedAt; /** Title describing what this document contains */ @maxLength(800) title: string; /** Contents of the document */ content: string | string[]; /** Embeddings for the document */ @visibility("read") embeddings: float32[] | float32[][] | null = null; @visibility("read") /** Modality of the document */ modality?: string; @visibility("read") /** Language of the document */ language?: string; @visibility("read") /** Embedding model used for the document */ embedding_model?: string; @visibility("read") /** Dimensions of the embedding model */ embedding_dimensions?: uint16; } /** Payload for creating a doc */ @withVisibility("create") model CreateDocRequest { ...HasId; ...HasMetadata; ...HasCreatedAt; /** Title describing what this document contains */ @maxLength(800) title: string; /** Contents of the document. Each string is limited to 30k characters. */ content: content | content[]; /** Instruction for the embedding model. */ embed_instruction: string | null = null; } model DocOwner { id: User.id | Agent.id; role: "user" | "agent"; } model Snippet { index: uint16; content: string; embedding?: float[]; } model DocReference { ...HasMetadata; /** The owner of this document. */ owner: DocOwner; /** ID of the document */ id: Doc.id; title?: string; snippet: Snippet; distance: float | null = null; } model SingleEmbedQueryRequest { /** Text to embed */ text: string; /** Instruction for the embedding model. */ embed_instruction: string = ""; } model MultipleEmbedQueryRequest { /** Texts to embed */ @minItems(1) @maxItems(100) text: string[]; /** Instruction for the embedding model. */ embed_instruction: string = ""; } alias EmbedQueryRequest = SingleEmbedQueryRequest | MultipleEmbedQueryRequest; model EmbedQueryResponse { /** The embedded vectors */ vectors: float[][]; } // Base search parameters common to all search types model BaseSearchParams { /** The limit of documents to return */ @minValue(1) @maxValue(50) limit: uint16 = 10; /** Metadata filter to apply to the search */ metadata_filter: MetadataFilter = #{}; /** Whether to include embeddings in the response */ include_embeddings: boolean = true; } // Text search specific parameters model TextSearchParams { /** Text to use in the search */ text: string; /** The language to be used for text search. Support for other languages coming soon. */ lang: string = "en-US"; /** Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. */ @minValue(0) @maxValue(1) trigram_similarity_threshold: float | null = null; } // Vector search specific parameters model VectorSearchParams { /** Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. */ vector: float[]; /** The confidence cutoff level */ @minValue(-1) @maxValue(1) confidence: float = 0.5; /** MMR Strength (mmr_strength = 1 - mmr_lambda) */ @minValue(0) @maxValueExclusive(1) mmr_strength?: float = 0.5; } // Hybrid search parameters model HybridSearchParams { /** The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; */ @minValue(0) @maxValue(1) alpha: float = 0.5; /** The k_multiplier to control how many intermediate results to fetch before final scoring */ @minValue(1) @maxValue(10) k_multiplier: int8 = 5; } // Composed search request models model TextOnlyDocSearchRequest { ...BaseSearchParams; ...TextSearchParams; vector?: never; } model VectorDocSearchRequest { ...BaseSearchParams; ...VectorSearchParams; text?: never; } model HybridDocSearchRequest { ...BaseSearchParams; ...TextSearchParams; ...VectorSearchParams; ...HybridSearchParams; } alias DocSearchRequest = VectorDocSearchRequest | TextOnlyDocSearchRequest | HybridDocSearchRequest; model DocSearchResponse { /** The documents that were found */ docs: DocReference[]; /** The time taken to search in seconds */ @minValueExclusive(0) time: float; } model BulkDeleteDocsRequest { /** Metadata filter to apply to the search */ metadata_filter: MetadataFilter = #{}; /** Delete all docs */ delete_all: boolean = false; } ================================================ FILE: src/typespec/entries/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "../sessions"; import "./models.tsp"; using TypeSpec.Http; using Common; using Sessions; namespace Entries; // // ENTRY ENDPOINTS // interface Endpoints extends DeleteEndpoint<"Clear the history of a Session (resets the Session)"> { @get @doc("Get history of a Session") history( @path @doc("ID of parent") id: uuid, ): History; } ================================================ FILE: src/typespec/entries/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Entries; // // ENTRIES // ================================================ FILE: src/typespec/entries/models.tsp ================================================ import "../common"; import "../sessions"; import "../tools"; using Common; using Sessions; using Tools; namespace Entries; // // ENTRY MODELS // /** Image detail level */ enum ImageDetail { low, high, auto, } /** ChatML role (system|assistant|user|tool) */ enum ChatMLRole { user, assistant, system, tool, } model ImageURL { /** Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) */ url: T; /** The detail level of the image */ detail: ImageDetail = ImageDetail.auto; } model ChatMLTextContentPart { text: T; /** The type (fixed to 'text') */ type: "text" = "text"; } model ChatMLImageContentPart { /** The image URL */ image_url: ImageURL; /** The type (fixed to 'image_url') */ type: "image_url" = "image_url"; } model ChatMLAnthropicImageSource { type: "base64" = "base64"; media_type: string; data: T; } model ChatMLAnthropicImageContentPart { type: "image" = "image"; source: ChatMLAnthropicImageSource; } /** Anthropic image content part */ model ChatMLAnthropicContentPart { tool_use_id: string; type: "tool_result" = "tool_result"; content: ChatMLTextContentPart[] | ChatMLAnthropicImageContentPart[]; } alias ChatMLContentPart = ChatMLTextContentPart | ChatMLImageContentPart | ChatMLAnthropicContentPart; model ChatMLMessage { /** The role of the message */ role: ChatMLRole; tool_call_id?: string; /** The content parts of the message */ content: T | T[] | ChatMLContentPart[] | null; /** Name */ name?: string; /** Tool calls generated by the model. */ tool_calls?: ChosenToolCall[] | null = #[]; ...HasCreatedAtOptional; ...HasIdOptional; } @withVisibility("create") model InputChatMLMessage { ...ChatMLMessage; } alias EntryContent = ChatMLContentPart[] | Tool | ChosenToolCall | string | ToolResponse; model BaseEntry { role: ChatMLRole; name: string | null = null; content: EntryContent | EntryContent[]; source: entrySource; tokenizer: string; token_count: uint16; "model": string = "gpt-4o-mini"; /** Tool calls generated by the model. */ tool_calls?: ChosenToolCall[] | null = null; /** The tool call id of the tool call this message is a response to */ tool_call_id?: string | null = null; /** This is the time that this event refers to. */ timestamp: utcDateTime; } model Entry extends BaseEntry { /** This is the time it was added to the database */ ...HasCreatedAt; ...HasId; } model Relation { head: uuid; relation: string; tail: uuid; } model History { entries: Entry[]; relations: Relation[]; session_id: Session.id; ...HasCreatedAt; } ================================================ FILE: src/typespec/executions/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "./models.tsp"; using TypeSpec.Http; using Common; namespace Executions; // // EXECUTION ENDPOINTS // interface Endpoints extends GetEndpoint, UpdateEndpoint< UpdateExecutionRequest, Execution, "Update an existing Execution" > {} interface PublicEndpoints { @post @useAuth([]) @doc("Resume an execution with a task token") resumeWithTaskToken( @header contentType: json, // Uses a query parameter `task_token` to get the task token // See `TaskTokenResumeExecutionRequest` for more details @bodyRoot @doc("Request to resume an execution with a task token") body: TaskTokenResumeExecutionRequest, ): { @statusCode _: "200"; @body @doc("Response of resuming the execution with the ID found") body: Execution; }; } interface TaskEndpoints extends ChildCreateEndpoint< CreateExecutionRequest, Execution, "Create an execution for the given task" >, ChildLimitOffsetPagination< Execution, "List executions of the given task" > {} interface TransitionEndpoints extends ChildLimitOffsetPagination< { transitions: Transition[], }, "List the Transitions of an Execution by id" > {} interface TransitionStreamEndpoints extends ChildStreamEndpoint< TransitionEvent, "Stream events emitted by the given execution" > {} interface ExecutionStatusStreamEndpoints extends ChildStreamEndpoint< ExecutionStatusEvent, "Stream the status of an execution" > {} ================================================ FILE: src/typespec/executions/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Executions; // // EXECUTIONS // ================================================ FILE: src/typespec/executions/models.tsp ================================================ import "@typespec/http"; import "../common"; import "../tasks"; using TypeSpec.Http; using Common; using Tasks; namespace Executions; // // EXECUTION MODELS // /** The status of an execution */ alias ExecutionStatus = ( /** The execution is queued and waiting to start */ | "queued" /** The execution is starting */ | "starting" /** The execution is running */ | "running" /** The execution is awaiting input */ | "awaiting_input" /** The execution has succeeded */ | "succeeded" /** The execution has failed */ | "failed" /** The execution has been cancelled by the user */ | "cancelled" ); model Execution { /** The ID of the task that the execution is running */ @visibility("read") task_id: Task.id; /** The status of the execution */ @visibility("read") status: ExecutionStatus; /** The input to the execution */ input: Record; /** The output of the execution if it succeeded */ output?: unknown; /** The error of the execution if it failed */ error?: string; /** The number of transitions in this execution */ transition_count?: uint8; ...HasTimestamps; ...HasMetadata; ...HasId; } model ExecutionStatusEvent { /** The ID of the execution */ execution_id: Execution.id; /** The status of the execution */ status: ExecutionStatus; /** The updated_at timestamp of the execution */ updated_at: string; /** The error of the execution if it failed */ error?: string; /** The number of transitions in this execution */ transition_count?: uint8; /** The metadata of the execution */ ...HasMetadata } /** Payload for creating an execution */ @withVisibility("create") model CreateExecutionRequest { ...Execution; } @discriminator("status") model UpdateExecutionRequest { status: ExecutionStatus; } model StopExecutionRequest extends UpdateExecutionRequest { status: "cancelled" = "cancelled"; /** The reason for stopping the execution */ reason: string | null = null; } model ResumeExecutionRequest extends UpdateExecutionRequest { status: "running" = "running"; /** The input to resume the execution with */ input?: Record; } model TaskTokenResumeExecutionRequest { status: "running" = "running"; /** A Task Token is a unique identifier for a specific Task Execution. */ @query task_token: string; /** The input to resume the execution with */ input?: Record; } /* - finish - wait - error - step - cancelled */ alias TransitionType = ( | "init" | "init_branch" | "finish" | "finish_branch" | "wait" | "resume" | "error" | "step" | "cancelled" ); model TransitionTarget { workflow: identifierSafeUnicode; step: uint16; scope_id: uuid; } model TransitionEvent { @visibility("read") type: TransitionType; @visibility("read") output: unknown; ...HasTimestamps; } model Transition extends TransitionEvent { @visibility("read") execution_id: Execution.id; @visibility("read") current: TransitionTarget; @visibility("read") next: TransitionTarget | null; @visibility("read") step_label?: stepLabel; ...HasId; ...HasMetadata; } ================================================ FILE: src/typespec/files/endpoints.tsp ================================================ import "../common"; import "./models.tsp"; using Common; namespace Files; // // FILE ENDPOINTS // interface Endpoints extends GetEndpoint, CreateEndpoint {} ================================================ FILE: src/typespec/files/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Files; // // FILES // ================================================ FILE: src/typespec/files/models.tsp ================================================ import "../common"; using Common; namespace Files; // // FILE MODELS // model File { ...HasId; ...HasCreatedAt; /** Name of the file */ name: identifierSafeUnicode; /** Description of the file */ description: string = ""; /** MIME type of the file */ mime_type: mimeType | null = null; /** Base64 encoded content of the file */ content: string; /** Project canonical name of the file */ project?: canonicalName; /** Size of the file in bytes */ @visibility("read") @minValue(1) size: uint64; /** Hash of the file */ @visibility("read") hash: string; } /** Payload for creating a file */ @withVisibility("create") model CreateFileRequest { ...File; } ================================================ FILE: src/typespec/jobs/endpoints.tsp ================================================ import "../common"; import "./models.tsp"; using Common; namespace Jobs; // // JOB ENDPOINTS // interface Endpoints extends GetEndpoint< JobStatus, "Get the status of an existing Job by its id" > {} ================================================ FILE: src/typespec/jobs/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Jobs; // // JOBS // ================================================ FILE: src/typespec/jobs/models.tsp ================================================ import "../common"; using Common; namespace Jobs; // // JOB MODELS // /** Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed) */ enum JobState { pending, in_progress, retrying, succeeded, aborted, failed, "unknown", } model JobStatus { ...HasId; ...HasTimestamps; /** Name of the job */ name: identifierSafeUnicode = identifierSafeUnicode(""); /** Reason for the current state of the job */ reason: string = ""; /** Whether this Job supports progress updates */ has_progress: boolean = false; /** Progress percentage */ @minValue(0) @maxValue(100) progress: float32 = 0.0; /** Current state of the job */ state: JobState = JobState.pending; } ================================================ FILE: src/typespec/main.tsp ================================================ import "@typespec/http"; import "@typespec/openapi"; import "@typespec/versioning"; import "./agents"; import "./chat"; import "./docs"; import "./entries"; import "./executions"; import "./files"; import "./jobs"; import "./sessions"; import "./tasks"; import "./tools"; import "./users"; import "./versions.tsp"; import "./responses"; import "./projects"; import "./secrets"; using TypeSpec.Http; using TypeSpec.OpenAPI; using TypeSpec.Versioning; using Versions; // // MAIN // /** Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. */ @service({ name: "julep-api", title: "Julep API", }) @versioned(ApiVersions) @info({ termsOfService: "https://julep.ai/terms", contact: { name: "Julep AI", url: "https://julep.ai", email: "developers@julep.ai", }, license: { name: "Apache 2.0", url: "https://www.apache.org/licenses/LICENSE-2.0.html", }, }) @externalDocs("https://docs.julep.ai", "Julep API documentation") @server( "https://{serverEnv}.julep.ai/api", "The julep cloud service endpoint", { @doc("The environment to use") serverEnv?: "api" | "dev" = "api", } ) @useAuth( ApiKeyAuth | ApiKeyAuth< ApiKeyLocation.header, "X-Auth-Key" > ) namespace Api { @route("/agents") interface AgentsRoute extends Agents.Endpoints {} @route("/agents/{id}/docs") interface AgentDocsRoute extends Docs.AgentEndpoints, Docs.BulkDeleteEndpoints<"Bulk delete Docs owned by an Agent"> {} @route("/agents/{id}/search") interface AgentsDocsSearchRoute extends Docs.SearchEndpoints<"Search Docs owned by an Agent"> {} @route("/agents/{id}/tools") interface AgentToolsRoute extends Tools.AgentEndpoints {} @route("/responses") interface ResponsesRoute extends Responses.ResponsesEndpoints {} @route("/users") interface UsersRoute extends Users.Endpoints {} @route("/users/{id}/docs") interface UserDocsRoute extends Docs.UserEndpoints, Docs.BulkDeleteEndpoints<"Bulk delete Docs owned by a User"> {} @route("/users/{id}/search") interface UserDocsSearchRoute extends Docs.SearchEndpoints<"Search Docs owned by a User"> {} @route("/sessions") interface SessionsRoute extends Sessions.Endpoints {} @route("/sessions/{id}/history") interface HistoryRoute extends Entries.Endpoints {} @route("/sessions/{id}/chat") interface ChatRoute extends Chat.Endpoints {} @route("/sessions/{id}/render") interface RenderRoute extends Chat.RenderEndpoints {} @route("/embed") interface EmbedRoute extends Docs.EmbedEndpoints {} @route("/docs") interface IndividualDocsRoute extends Docs.IndividualDocEndpoints {} @route("/tasks") interface TasksGetRoute extends Tasks.GetEndpoints {} @route("/agents/{id}/tasks") interface TasksRoute extends Tasks.Endpoints {} @route("/agents/{parent_id}/tasks") interface TasksCreateOrUpdateRoute extends Tasks.CreateOrUpdateEndpoints {} @route("/tasks/{id}/executions") interface TaskExecutionsRoute extends Executions.TaskEndpoints {} @route("/executions") interface ExecutionsRoute extends Executions.Endpoints, Executions.PublicEndpoints {} @route("/executions/{id}/transitions") interface ExecutionTransitionsRoute extends Executions.TransitionEndpoints {} @route("/executions/{id}/transitions.stream") interface ExecutionTransitionsStreamRoute extends Executions.TransitionStreamEndpoints {} @route("/executions/{id}/status.stream") interface ExecutionStatusStreamRoute extends Executions.ExecutionStatusStreamEndpoints {} @route("/jobs") interface JobRoute extends Jobs.Endpoints {} @route("/files") interface FilesRoute extends Files.Endpoints {} @route("/projects") interface ProjectsRoute extends Projects.Endpoints {} @route("/secrets") interface DeveloperSecretsRoute extends Secrets.DeveloperSecretsEndpoints {} @route("/agents/{id}/secrets") interface AgentSecretsRoute extends Secrets.AgentSecretsEndpoints {} } ================================================ FILE: src/typespec/package.json ================================================ { "name": "julep-typespec", "version": "0.4.0", "type": "module", "dependencies": { "@typespec/compiler": "0.61.x", "@typespec/events": "0.61.x", "@typespec/http": "0.61.x", "@typespec/openapi": "0.61.x", "@typespec/openapi3": "0.61.x", "@typespec/rest": "0.61.x", "@typespec/sse": "0.61.x", "@typespec/versioning": "0.61.x" }, "private": true } ================================================ FILE: src/typespec/projects/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "./models.tsp"; using TypeSpec.Http; using Common; namespace Projects; // // PROJECT ENDPOINTS // interface Endpoints extends LimitOffsetPagination, CreateEndpoint, CreateOrUpdateEndpoint, UpdateEndpoint, PatchEndpoint, DeleteEndpoint<"Delete Project by id">, GetEndpoint { } ================================================ FILE: src/typespec/projects/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Projects; // // PROJECTS // ================================================ FILE: src/typespec/projects/models.tsp ================================================ import "@typespec/http"; import "../common"; using TypeSpec.Http; using Common; namespace Projects; // // PROJECT MODELS // @doc("Project model") model Project { ...HasId; ...HasMetadata; ...HasTimestamps; @doc("Canonical name of the project (unique per developer)") canonical_name?: canonicalName; @doc("Display name of the project") name: displayName; } /** Payload for updating a project */ @withVisibility("create", "update") model UpdateProjectRequest { ...Project; } /** Payload for patching a project */ model PatchProjectRequest is UpdateProjectRequest {} /** Payload for creating a project */ @withVisibility("create") model CreateProjectRequest { ...UpdateProjectRequest; } model CreateOrUpdateProjectRequest extends CreateProjectRequest { @path id: uuid; ...UpdateProjectRequest; } ================================================ FILE: src/typespec/responses/endpoints.tsp ================================================ import "@typespec/http"; import "./models.tsp"; import "../common"; using TypeSpec.Http; using Common; namespace Responses; interface ResponsesEndpoints extends GetResponsesEndpoints, CreateResponsesEndpoints {} interface CreateResponsesEndpoints { @doc("Creates a model response. Provide text or image inputs to generate text or JSON outputs.") @post createResponse( @body body: CreateResponse ): Response; } interface GetResponsesEndpoints { @get @doc("Get a response by id") getResponse( @path @doc("ID of the response") id: string, @query @doc("Specify additional output data to include in the model response") include?: Includable[]; ): Response; } ================================================ FILE: src/typespec/responses/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Responses; // // RESPONSES // ================================================ FILE: src/typespec/responses/models.tsp ================================================ import "@typespec/http"; import "../common"; using Common; namespace Responses; // Common response properties model ResponseProperties { instructions?: string; previous_response_id?: string; reasoning?: { effort?: "low" | "medium" | "high"; summary?: string; }; text?: { format?: { type: "text" | "json_object"; }; }; tool_choice?: "auto" | "none" | { type: "function"; function: { name: string; }; }; tools?: Tool[]; truncation?: "disabled" | "auto"; metadata?: Record; } // Model for creating a response model CreateResponse { `model`: string; input: string | InputItem[]; include?: Includable[]; parallel_tool_calls?: boolean = true; store?: boolean = true; stream?: boolean = false; max_tokens?: int32; temperature?: float = 1.0; top_p?: float = 1.0; n?: int32; stop?: string | string[]; presence_penalty?: float; frequency_penalty?: float; logit_bias?: Record; user?: string; instructions?: string; previous_response_id?: string; reasoning?: Reasoning; text?: { format: TextResponseFormatConfiguration; }; tool_choice?: "auto" | "none" | { type: "function"; function: { name: string; }; }; tools?: Tool[]; truncation?: "disabled" | "auto"; metadata?: Record; } alias TextResponseFormatConfiguration = ResponseFormatText | TextResponseFormatJsonSchema | ResponseFormatJsonObject; @doc(""" JSON object response format. An older method of generating JSON responses. Using `json_schema` is recommended for models that support it. Note that the model will not generate JSON without a system or user message instructing it to do so. """) model ResponseFormatJsonObject { @doc("The type of response format being defined. Always `json_object`.") type: "json_object"; } alias ResponseFormatJsonSchemaSchema = Record; @doc("JSON Schema response format. Used to generate structured JSON responses. Learn more about [Structured Outputs](/docs/guides/structured-outputs).") model TextResponseFormatJsonSchema { @doc("The type of response format being defined. Always `json_schema`.") type: "json_schema"; @doc("A description of what the response format is for, used by the model to determine how to respond in the format.") description?: string; @doc("The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.") name?: string; @doc("The JSON schema that defines the structure of the response.") schema: ResponseFormatJsonSchemaSchema; @doc("Whether to enable strict schema adherence when generating the output. If set to true, the model will always follow the exact schema defined in the `schema` field. Only a subset of JSON Schema is supported when `strict` is `true`. To learn more, read the [Structured Outputs guide](/docs/guides/structured-outputs).") strict?: boolean = false; } @doc("Default response format. Used to generate text responses.") model ResponseFormatText { @doc("The type of response format being defined. Always `text`.") type: "text"; } @doc("Constraint effort on reasoning models.") enum ReasoningEffort { low, medium, high, } @doc("Reasoning configuration options for o-series models.") model Reasoning { effort: ReasoningEffort; @doc("A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. One of `concise` or `detailed`.") generate_summary?: "concise" | "detailed"; } enum ToolChoiceOptions { auto, none, required, } @doc(""" Indicates that the model should use a built-in tool to generate a response. [Learn more about built-in tools](/docs/guides/tools). """) model ToolChoiceTypes { @doc(""" The type of hosted tool the model should to use. Learn more about [built-in tools](/docs/guides/tools). Allowed values are: - `file_search` - `web_search_preview` - `computer_use_preview` """) type: "file_search" | "web_search_preview" | "computer_use_preview" | "web_search_preview_2025_03_11"; } @doc("Use this option to force the model to call a specific function.") model ToolChoiceFunction { @doc("For function calling, the type is always `function`.") type: "function"; @doc("The name of the function to call.") name: string; } enum ResponseStatus { completed, failed, in_progress, incomplete, } // Model for response model Response { id: string; object: "response"; created_at: int32; status: ResponseStatus; error?: ResponseError; incomplete_details?: { reason: "max_output_tokens" | "content_filter"; }; instructions?: string; max_output_tokens?: int32; `model`: string; output: OutputItem[]; parallel_tool_calls: boolean = true; previous_response_id?: string; reasoning?: Reasoning; store?: boolean = true; temperature: float = 1.0; text?: { format: TextResponseFormatConfiguration; }; tool_choice: ToolChoiceOptions | ToolChoiceTypes | ToolChoiceFunction; tools: Tool[]; top_p: float = 1.0; truncation: "disabled" | "auto"; usage: ResponseUsage; user?: string; metadata: Record; } // Model for response usage information model ResponseUsage { input_tokens: int32; input_tokens_details: { cached_tokens: int32; }; output_tokens: int32; output_tokens_details: { reasoning_tokens: int32; }; total_tokens: int32; } // Model for response error model ResponseError { message: string; type: string; param?: string; code?: string; } // Model for output items in a response union OutputItem { OutputMessage, FileSearchToolCall, FunctionToolCall, WebSearchToolCall, ComputerToolCall, ReasoningItem } // Model for reasoning item model ReasoningItem { @doc("The type of the object. Always `reasoning`.") type: "reasoning"; @doc("The unique identifier of the reasoning content.") id: string; @doc("Reasoning text contents.") content: ReasoningContent[]; @doc("The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API.") status?: "in_progress" | "completed" | "incomplete"; } // Model for reasoning content model ReasoningContent { @doc("The type of the object. Always `text`.") type: "reasoning_summary"; @doc("A short summary of the reasoning used by the model when generating the response.") text: string; } // File search call output item model FileSearchCallOutputItem { type: "file_search_call"; id: string; status: "completed" | "in_progress"; queries: string[]; results?: unknown; } // Content part in a message // @discriminator("type") model ContentPart { type: string; } // Text content part model TextContentPart extends ContentPart { type: "output_text"; text: string; annotations: Annotation[]; } alias Annotation = FileCitation | UrlCitation | FilePath; // File citation model FileCitation { @doc("The type of the file citation. Always `file_citation`.") type: "file_citation"; @doc("The index of the file in the list of files.") index: int32; @doc("The ID of the file.") file_id: string; } // URL citation model UrlCitation { @doc("The URL of the web resource.") url: string; @doc("The title of the web resource.") title: string; @doc("The type of the URL citation. Always `url_citation`.") type: "url_citation"; @doc("The index of the first character of the URL citation in the message.") start_index: int32; @doc("The index of the last character of the URL citation in the message.") end_index: int32; } model FilePath { @doc("The type of the file path. Always `file_path`.") type: "file_path"; @doc("The ID of the file.") file_id: string; @doc("The index of the file in the list of files.") index: int32; } enum MessageRole { user, assistant, system, developer, } union InputItem { EasyInputMessage, Item, ItemReference } // Item model @doc("An item representing part of the context for the response to be generated by the model. Can contain text, images, and audio inputs, as well as previous assistant responses and tool call outputs.") model Item { // Add the necessary properties for Item type: string; // Additional properties would go here } // Item reference model @doc("Content item used to generate a response.") union ItemReference { InputMessageResource, OutputMessage, FileSearchToolCall, ComputerToolCall, ComputerToolCallOutputResource, WebSearchToolCall, FunctionToolCall, FunctionToolCallOutputResource } // Content item in an input // @discriminator("type") model InputContentItem { type: string; } // Includable item for response creation field "include" enum Includable { "file_search_call.results", "message.input_image.image_url", "computer_call_output.output.image_url" } model BaseTool { type: string; } // Tool for response creation // @discriminator("type") union Tool { FunctionTool, WebSearchTool, FileSearchTool, ComputerTool } // Function tool model FunctionTool extends BaseTool { type: "function"; name: string; description?: string; parameters: Record; strict?: boolean; } // Web search tool model WebSearchTool extends BaseTool { type: "web_search_preview"; domains?: string[]; search_context_size?: "small" | "medium" | "large"; user_location?: { type: "approximate"; city?: string; country?: string; region?: string; timezone?: string; }; } // File search tool model FileSearchTool extends BaseTool { type: "file_search"; filters?: unknown; max_num_results?: int32; ranking_options?: { ranker?: "auto"; score_threshold?: float; }; vector_store_ids: string[]; } // Computer tool model ComputerTool extends BaseTool { @doc("The type of the computer use tool. Always `computer_use_preview`.") type: "computer_use_preview"; @doc("The width of the computer display.") display_width: float32; @doc("The height of the computer display.") display_height: float32; @doc("The type of computer environment to control.") environment: "mac" | "windows" | "ubuntu" | "browser"; } model InputText { @doc("The type of the input item. Always `input_text`.") type: "input_text"; @doc("The text input to the model.") text: string; } model InputImage { @doc("The type of the input item. Always `input_image`.") type: "input_image"; @doc("The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL.") image_url?: string; @doc("The ID of the file to be sent to the model.") file_id?: string; @doc("The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`. Defaults to `auto`.") detail: "high" | "low" | "auto" = "auto"; } @doc("A file input to the model.") model InputFile { @doc("The type of the input item. Always `input_file`.") type: "input_file"; @doc("The ID of the file to be sent to the model.") file_id?: string; @doc("The name of the file to be sent to the model.") filename?: string; @doc("The content of the file to be sent to the model.") file_data?: string; } alias InputContent = InputText | InputImage | InputFile; // A list of one or many input items to the model, containing different content types model InputMessageContentList is InputContent[]; enum MessageStatus { in_progress, completed, incomplete, } // Input message model InputMessage { type: "message"; role: MessageRole; status: MessageStatus; content: InputMessageContentList; } model OutputMessage { id: string; type: "message"; role: MessageRole; status: MessageStatus; content: OutputContent[]; } // A refusal from the model model Refusal { @doc("The type of the refusal. Always `refusal`.") type: "refusal"; @doc("The refusal explanation from the model.") refusal: string; } model OutputText { @doc("The type of the output text. Always `output_text`.") type: "output_text"; @doc("The text output from the model.") text: string; @doc("The annotations of the text output.") annotations: Annotation[]; } alias OutputContent = OutputText | Refusal; // Easy input message model model EasyInputMessage { @doc("The role of the message input. One of `user`, `assistant`, `system`, or `developer`.") role: MessageRole; @doc("Text, image, or audio input to the model, used to generate a response. Can also contain previous assistant responses.") content: string | InputMessageContentList; @doc("The type of the message input. Always `message`.") type: "message"; } // Input message resource model InputMessageResource extends InputMessage { id: string; } @maxLength(512) scalar VectorStoreFileAttributesString extends string; @doc("Set of key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters, booleans, or numbers.") model VectorStoreFileAttributes { @doc("Key-value pairs where keys are strings with max length 64 and values are strings with max length 512, booleans, or numbers.") properties: Record; } // File search tool call model FileSearchToolCall { @doc("The unique ID of the file search tool call.") id: string; @doc("The type of the file search tool call. Always `file_search_call`.") type: "file_search_call"; @doc("The status of the file search tool call. One of `in_progress`, `searching`, `incomplete` or `failed`") status: "in_progress" | "searching" | "completed" | "incomplete" | "failed"; @doc("The queries used to search for files.") queries: string[]; @doc("The results of the file search tool call.") results?: { @doc("The unique ID of the file.") file_id: string; @doc("The text that was retrieved from the file.") text: string; @doc("The name of the file.") filename: string; @doc("The attributes of the file.") attributes: VectorStoreFileAttributes; @doc("The relevance score of the file - a value between 0 and 1.") score: float32; }[]; } model ComputerToolCallSafetyCheck { @doc("The ID of the pending safety check.") id: string; @doc("The type of the pending safety check.") code: string; @doc("Details about the pending safety check.") message: string; } model Click { @doc("Specifies the event type. For a click action, this property is always set to `click`.") type: "click" = "click"; @doc("Indicates which mouse button was pressed during the click. One of `left`, `right`, `wheel`, `back`, or `forward`.") button: "left" | "right" | "wheel" | "back" | "forward"; @doc("The x-coordinate where the click occurred.") x: int32; @doc("The y-coordinate where the click occurred.") y: int32; } model DoubleClick { @doc("Specifies the event type. For a double click action, this property is always set to `double_click`.") type: "double_click" = "double_click"; @doc("The x-coordinate where the double click occurred.") x: int32; @doc("The y-coordinate where the double click occurred.") y: int32; } model Coordinate { @doc("The x-coordinate.") x: int32; @doc("The y-coordinate.") y: int32; } model Drag { @doc("Specifies the event type. For a drag action, this property is always set to `drag`.") type: "drag" = "drag"; @doc("An array of coordinates representing the path of the drag action.") path: Coordinate[]; } model KeyPress { @doc("Specifies the event type. For a keypress action, this property is always set to `keypress`.") type: "keypress" = "keypress"; @doc("The combination of keys the model is requesting to be pressed. This is an array of strings, each representing a key.") keys: string[]; } model Move { @doc("Specifies the event type. For a move action, this property is always set to `move`.") type: "move" = "move"; @doc("The x-coordinate to move to.") x: int32; @doc("The y-coordinate to move to.") y: int32; } model Screenshot { @doc("Specifies the event type. For a screenshot action, this property is always set to `screenshot`.") type: "screenshot" = "screenshot"; } model Scroll { @doc("Specifies the event type. For a scroll action, this property is always set to `scroll`.") type: "scroll" = "scroll"; @doc("The x-coordinate where the scroll occurred.") x: int32; @doc("The y-coordinate where the scroll occurred.") y: int32; @doc("The horizontal scroll distance.") scroll_x: int32; @doc("The vertical scroll distance.") scroll_y: int32; } model Type { @doc("Specifies the event type. For a type action, this property is always set to `type`.") type: "type" = "type"; @doc("The text to type.") text: string; } model Wait { @doc("Specifies the event type. For a wait action, this property is always set to `wait`.") type: "wait" = "wait"; } alias ComputerAction = Click | DoubleClick | Drag | KeyPress | Move | Screenshot | Scroll | Type | Wait; // Computer tool call model ComputerToolCall { @doc("The type of the computer call. Always `computer_call`.") type: "computer_call"; @doc("The unique ID of the computer call.") id: string; @doc("An identifier used when responding to the tool call with output.") call_id: string; @doc("The action to perform.") action: ComputerAction; @doc("The pending safety checks for the computer call.") pending_safety_checks: ComputerToolCallSafetyCheck[]; @doc("The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API.") status: "in_progress" | "completed" | "incomplete"; } model ComputerScreenshotImage { @doc("Specifies the event type. For a computer screenshot, this property is always set to `computer_screenshot`.") type: "computer_screenshot"; @doc("The URL of the screenshot image.") image_url?: string; @doc("The identifier of an uploaded file that contains the screenshot.") file_id?: string; } model ComputerToolCallOutput { @doc("The type of the computer tool call output. Always `computer_call_output`.") type: "computer_call_output"; @doc("The ID of the computer tool call output.") id?: string; @doc("The ID of the computer tool call that produced the output.") call_id: string; @doc("The safety checks reported by the API that have been acknowledged by the developer.") acknowledged_safety_checks?: ComputerToolCallSafetyCheck[]; @doc("The output screenshot image.") output: ComputerScreenshotImage; @doc("The status of the message input. One of `in_progress`, `completed`, or `incomplete`. Populated when input items are returned via API.") status?: MessageStatus; } // Computer tool call output resource model ComputerToolCallOutputResource extends ComputerToolCallOutput { @doc("The unique ID of the computer call tool output.") id: string; } enum WebSearchStatus { in_progress, searching, completed, failed, } // Web search tool call model WebSearchToolCall { @doc("The unique ID of the web search tool call.") id: string; @doc("The type of the web search tool call. Always `web_search_call`.") type: "web_search_call"; @doc("The status of the web search tool call.") status: WebSearchStatus; } model FunctionToolCallOutput { @doc("The unique ID of the function tool call output. Populated when this item is returned via API.") id?: string; @doc("The type of the function tool call output. Always `function_call_output`.") type: "function_call_output"; @doc("The unique ID of the function tool call generated by the model.") call_id: string; @doc("A JSON string of the output of the function tool call.") output: string; @doc("The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API.") status?: "in_progress" | "completed" | "incomplete"; } // Function tool call model FunctionToolCall { @doc("The unique ID of the function tool call.") id: string; @doc("The type of the function tool call. Always `function_call`.") type: "function_call"; @doc("The unique ID of the function tool call generated by the model.") call_id: string; @doc("The name of the function to run.") name: string; @doc("A JSON string of the arguments to pass to the function.") arguments: string; @doc("The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API.") status?: "in_progress" | "completed" | "incomplete"; } // Function tool call output resource model FunctionToolCallOutputResource extends FunctionToolCallOutput { @doc("The unique ID of the function call tool output.") // NOTE: OpenAI's schema doesn't have this as optional. However, this is optional as we're // mapping to `completion` format, which doesn't have `id` (fc_aaa) ids for function tool calls. id?: string; } alias ItemResource = InputMessageResource | OutputMessage | FileSearchToolCall | ComputerToolCall | ComputerToolCallOutputResource | WebSearchToolCall | FunctionToolCall | FunctionToolCallOutputResource; model ResponseItemList { @doc("The type of object returned, must be `list`.") object: "list"; @doc("A list of items used to generate this response.") data: ItemResource[]; @doc("Whether there are more items available.") has_more: boolean; @doc("The ID of the first item in the list.") first_id: string; @doc("The ID of the last item in the list.") last_id: string; } ================================================ FILE: src/typespec/secrets/endpoints.tsp ================================================ import "@typespec/http"; import "./models.tsp"; import "../common"; using TypeSpec.Http; using Common; namespace Secrets; // // SECRET ENDPOINTS // interface DeveloperSecretsEndpoints extends ChildLimitOffsetPagination, ChildCreateEndpoint, ChildUpdateEndpoint, ChildDeleteEndpoint<"Delete a secret by id"> {} interface AgentSecretsEndpoints extends ChildLimitOffsetPagination, ChildCreateEndpoint, ChildUpdateEndpoint, ChildDeleteEndpoint<"Delete a secret by id"> {} ================================================ FILE: src/typespec/secrets/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Secrets; // // SECRETS // ================================================ FILE: src/typespec/secrets/models.tsp ================================================ import "../common"; using Common; namespace Secrets; // // SECRET MODELS // /** A secret that can be used in tasks and sessions */ model Secret { ...HasId; ...HasTimestamps; ...HasMetadata; /** Name of the secret */ name: string; /** Description of what the secret is used for */ description?: string; /** The decrypted secret value */ value: string; } @withVisibility("create", "update") model UpdateSecretRequest { ...Secret; } @withVisibility("create") model CreateSecretRequest { ...UpdateSecretRequest; } model PatchSecretRequest is UpdateSecretRequest {} ================================================ FILE: src/typespec/sessions/endpoints.tsp ================================================ import "../common"; import "./models.tsp"; using Common; namespace Sessions; // // SESSION ENDPOINTS // interface Endpoints extends LimitOffsetPagination, CreateEndpoint, CreateOrUpdateEndpoint, UpdateEndpoint, PatchEndpoint, DeleteEndpoint<"Delete a session by its id">, GetEndpoint {} ================================================ FILE: src/typespec/sessions/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Sessions; // // SESSIONS // ================================================ FILE: src/typespec/sessions/models.tsp ================================================ import "@typespec/http"; import "../common"; using TypeSpec.Http; using Common; namespace Sessions; // // SESSION MODELS // model BaseDocSearch { /** The limit of documents to return */ @minValue(1) @maxValue(50) limit: uint16 = 10; /** The language to be used for text-only search. Support for other languages coming soon. */ lang: string = "en-US"; /** Metadata filter to apply to the search */ metadata_filter: MetadataFilter = #{}; /** The number of search messages to use for the search. */ @minValue(1) @maxValue(50) num_search_messages: uint32 = 4; /** The maximum query length to use for the search. */ @minValue(100) @maxValue(10000) max_query_length: uint32 = 1000; /** Whether to include embeddings in the response */ include_embeddings: boolean = true; } model VectorDocSearch extends BaseDocSearch { /** The mode to use for the search. */ mode: "vector" = "vector"; /** The confidence cutoff level */ @minValue(-1) @maxValue(1) confidence: float = 0.5; /** MMR Strength (mmr_strength = 1 - mmr_lambda) */ @minValue(0) @maxValueExclusive(1) mmr_strength?: float = 0.5; } model TextOnlyDocSearch extends BaseDocSearch { /** The mode to use for the search. */ mode: "text" = "text"; /** The trigram_similarity_threshold cutoff level */ // AIDEV-NOTE: Null default keeps trigram search disabled unless explicitly toggled. @minValue(0) @maxValue(1) trigram_similarity_threshold?: float | null = null; } model HybridDocSearch extends BaseDocSearch { /** The mode to use for the search. */ mode: "hybrid" = "hybrid"; /** The confidence cutoff level */ @minValue(-1) @maxValue(1) confidence: float = 0.5; /** The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; */ @minValue(0) @maxValue(1) alpha: float = 0.5; /** MMR Strength (mmr_strength = 1 - mmr_lambda) */ @minValue(0) @maxValueExclusive(1) mmr_strength?: float = 0.5; /** The trigram_similarity_threshold cutoff level */ // AIDEV-NOTE: Null default keeps trigram search disabled unless explicitly toggled. @minValue(0) @maxValue(1) trigram_similarity_threshold?: float | null = null; /** The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring */ @minValue(0) k_multiplier: int8 = 7; } alias DocSearch = VectorDocSearch | TextOnlyDocSearch | HybridDocSearch; enum ContextOverflowType { /** Truncate the context from the top except the system prompt. */ truncate, /** Automatically summarizes, clips and merges messages in the background to compress the context. */ adaptive, } @discriminator("kind") model Session { @visibility("none") kind: ( | "single_agent_no_user" | "single_agent_single_user" | "single_agent_multi_user" | "multi_agent_no_user" | "multi_agent_single_user" | "multi_agent_multi_user" ); /** User ID of user associated with this session */ @visibility("create") user?: uuid; @visibility("create") users?: uuid[]; /** Agent ID of agent associated with this session */ @visibility("create") agent?: uuid; @visibility("create") agents?: uuid[]; /** Session situation */ situation: string | null = null; /** A specific system prompt template that sets the background for this session */ system_template?: string; /** Summary (null at the beginning) - generated automatically after every interaction */ @visibility("read") summary: string | null = null; /** Render system and assistant message content as jinja templates */ render_templates: boolean = true; /** Threshold value for the adaptive context functionality */ token_budget: uint16 | null = null; /** Action to start on context window overflow */ context_overflow: ContextOverflowType | null = null; /** Whether to auto-run the tool and send the tool results to the model when available. * (default: false for sessions, true for tasks) * * If a tool call is made, the tool's output will be sent back to the model as the model's input. * If a tool call is not made, the model's output will be returned as is. */ auto_run_tools: boolean = false; /** Whether to forward tool calls to the model */ forward_tool_calls: boolean = false; /** Recall options for the session */ recall_options?: DocSearch | null = null; ...HasId; ...HasMetadata; ...HasTimestamps; } model SingleAgentNoUserSession extends Session { @visibility("none") kind: "single_agent_no_user" = "single_agent_no_user"; user?: never; users?: never; agents?: never; agent: uuid; } model SingleAgentSingleUserSession extends Session { @visibility("none") kind: "single_agent_single_user" = "single_agent_single_user"; users?: never; agents?: never; agent: uuid; user: uuid; } model SingleAgentMultiUserSession extends Session { @visibility("none") kind: "single_agent_multi_user" = "single_agent_multi_user"; user?: never; agents?: never; agent: uuid; @minItems(2) users: uuid[]; } model MultiAgentNoUserSession extends Session { @visibility("none") kind: "multi_agent_no_user" = "multi_agent_no_user"; user?: never; users?: never; agent?: never; @minItems(2) agents: uuid[]; } model MultiAgentSingleUserSession extends Session { @visibility("none") kind: "multi_agent_single_user" = "multi_agent_single_user"; users?: never; agent?: never; @minItems(2) agents: uuid[]; user: uuid; } model MultiAgentMultiUserSession extends Session { @visibility("none") kind: "multi_agent_multi_user" = "multi_agent_multi_user"; user?: never; agent?: never; @minItems(2) agents: uuid[]; @minItems(2) users: uuid[]; } /** Payload for updating a session */ @withVisibility("update") model UpdateSessionRequest { ...Session; } /** Payload for patching a session */ model PatchSessionRequest is UpdateSessionRequest {} /** Payload for creating a session */ @withVisibility("create") model CreateSessionRequest { ...Session; } @withVisibility("create", "update") model CreateOrUpdateSessionRequest extends CreateSessionRequest { @path id: uuid; ...CreateSessionRequest; } ================================================ FILE: src/typespec/tasks/endpoints.tsp ================================================ import "@typespec/http"; import "../common"; import "../executions"; import "./models.tsp"; using TypeSpec.Http; using Common; using Executions; namespace Tasks; // // TASK ENDPOINTS // interface GetEndpoints extends GetEndpoint {} interface CreateOrUpdateEndpoints { @post @doc("Create or update a task") createOrUpdate( @header contentType: yaml | json, @path @doc("ID of the agent") parent_id: uuid, ...CreateOrUpdateTaskRequest, ): { @statusCode _: "201"; @body @doc("Details of the task updated along with ID") body: Task; }; } interface Endpoints extends ChildUpdateEndpoint< UpdateTaskRequest, Task, "Update an existing task (overwrite existing values)" >, ChildPatchEndpoint< PatchTaskRequest, Task, "Update an existing task (merges with existing values)" >, ChildDeleteEndpoint<"Delete a task by its id">, ChildLimitOffsetPagination { @post @doc("Create a new task") create( @header contentType: yaml | json, @path @doc("ID of parent resource") id: uuid, ...CreateTaskRequest, ): { @statusCode _: "201"; @body @doc("Details of the task created") body: Task; }; } ================================================ FILE: src/typespec/tasks/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Tasks; // // TASKS // ================================================ FILE: src/typespec/tasks/models.tsp ================================================ import "@typespec/http"; import "../common"; import "../tools"; import "./steps.tsp"; using TypeSpec.Http; using Common; using Tools; namespace Tasks; // // TASK MODELS // model Workflow { @key name: validPythonIdentifier; /** The steps in the workflow */ @minItems(1) steps: WorkflowStep[]; } model TaskTool extends CreateToolRequest { /** Read-only: Whether the tool was inherited or not. Only applies within tasks. */ @visibility("read") inherited?: boolean = false; } /** Reference to a tool by id */ model ToolRefById { @visibility("read", "create") id?: string; } /** Reference to a tool by name */ model ToolRefByName { @visibility("read", "create") name?: validPythonIdentifier; } /** Reference to a tool */ model ToolRef { @visibility("read", "create") ref: ToolRefById | ToolRefByName; } /** Object describing a Task */ model Task { /** The name of the task. */ @visibility("read", "create", "update") name: displayName; /** The canonical name of the task. */ canonical_name?: canonicalName; /** The description of the task. */ description: string = ""; /** The entrypoint of the task. */ @minItems(1) main: WorkflowStep[]; /** The schema for the input to the task. `null` means all inputs are valid. */ input_schema: Record | null = null; /** Tools defined specifically for this task not included in the Agent itself. */ tools: TaskTool[] = #[]; /** Whether to inherit tools from the parent agent or not. Defaults to false. */ inherit_tools: boolean = false; ...HasId; ...HasTimestamps; ...HasMetadata; ...Record; } /** Payload for updating a task */ @withVisibility("update") model UpdateTaskRequest { ...Task; } /** Payload for patching a task */ model PatchTaskRequest is UpdateTaskRequest; /** Payload for creating a task */ @withVisibility("create") model CreateTaskRequest { ...Task; } model CreateOrUpdateTaskRequest { @path id: uuid; ...CreateTaskRequest; } ================================================ FILE: src/typespec/tasks/step_kind.tsp ================================================ namespace Tasks; // // STEP KINDS // alias WorkflowStepKind = //////////////////// /// Common steps /// //////////////////// | /** A step that runs a tool */ "tool_call" | /** A step that runs a prompt */ "prompt" | /** A step that evaluates an expression */ "evaluate" | /** A step that signals that it needs more input before resuming */ "wait_for_input" | /** log step */ "log" //////////////////////// /// Doc search steps /// //////////////////////// | /** A step that can embed text */ "embed" | /** A step that can search for documents (in the agents doc store only) */ "search" /////////////////////// /// Key-value steps /// /////////////////////// | /** set step */ "set" | /** get step */ "get" /////////////////////// /// Iteration steps /// /////////////////////// | /** foreach step */ "foreach" | /** map_reduce step */ "map_reduce" | /** parallel step */ "parallel" ///////////////////////// /// Conditional steps /// ///////////////////////// | /** switch step */ "switch" | /** A step that runs a conditional */ "if_else" ////////////////////////// /// Other control flow /// ////////////////////////// | /** sleep step */ "sleep" | /** return step */ "return" | /** A step that runs a subworkflow */ "yield" | /** Throw an error */ "error"; ================================================ FILE: src/typespec/tasks/steps.tsp ================================================ import "@typespec/http"; import "../chat"; import "../common"; import "../docs"; import "../entries"; import "../tools"; import "./step_kind.tsp"; using TypeSpec.Http; using Chat; using Common; using Docs; using Entries; using Tools; namespace Tasks; // // STEP DEFINITIONS // /** A simple python expression evaluated at runtime that is expected to return type T. */ alias TypedExpression = PyExpression; /** A python expression that takes an accumulator `results` and an input item `_` and reduces them. */ alias ReduceExpression> = TypedExpression; /** A string->string object where the values are python expressions that get evaluated to give a final object. */ alias ExpressionObject = Record | TypedExpression[] | Record> | Record>[]>; alias NestedExpression = Record | ExpressionObject | ExpressionObject[]>; /** Nested expression object. */ alias NestedExpressionObject = NestedExpression | NestedExpression[]; @discriminator("kind_") model BaseWorkflowStep { /** The kind of step */ @visibility("read") kind_: (typeof T); /** The label of this step for referencing it from other steps */ label?: stepLabel; } alias SequentialWorkflowStep = | WaitForInputStep | MappableWorkflowStep; alias MappableWorkflowStep = | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep; alias NonConditionalWorkflowStep = | MappableWorkflowStep | ReturnStep | SleepStep | ErrorWorkflowStep | WaitForInputStep; alias ConditionalStep = IfElseWorkflowStep | SwitchStep; alias IterationStep = ForeachStep | ParallelStep | MapReduceStep; alias WorkflowStep = NonConditionalWorkflowStep | ConditionalStep | IterationStep; alias CreateWorkflowStep = WorkflowStep; //////////////////// /// Common steps /// //////////////////// model ToolCallStep extends BaseWorkflowStep<"tool_call"> { @visibility("read") kind_: "tool_call" = "tool_call"; ...ToolCallStepDef; } model ToolCallStepDef { /** The tool to run */ tool: validPythonIdentifier; /** The input parameters for the tool (defaults to last step output) */ arguments: Record | "_" = "_"; } model PromptStep extends BaseWorkflowStep<"prompt"> { @visibility("read") kind_: "prompt" = "prompt"; ...PromptStepDef; } model PromptStepDef { /** The prompt to run */ prompt: JinjaTemplate | InputChatMLMessage[]; /** The tools to use for the prompt */ tools: "all" | (ToolRef | CreateToolRequest)[] = "all"; /** The tool choice for the prompt */ tool_choice?: ToolChoiceOption; /** Settings for the prompt */ settings?: ChatSettings; /** Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` */ unwrap?: boolean = false; /** Whether to auto-run the tool and send the tool results to the model when available. * (default: false) * * If a tool call is made, the tool's output will be used as the model's input. * If a tool call is not made, the model's output will be used as the next step's input. */ auto_run_tools: boolean = false; /** Whether to disable caching for the prompt step */ disable_cache: boolean = false; } model EvaluateStep extends BaseWorkflowStep<"evaluate"> { @visibility("read") kind_: "evaluate" = "evaluate"; ...EvaluateStepDef; } model EvaluateStepDef { /** The expression to evaluate */ evaluate: Record | Record>; } model WaitForInputStep extends BaseWorkflowStep<"wait_for_input"> { @visibility("read") kind_: "wait_for_input" = "wait_for_input"; ...WaitForInputStepDef; } model WaitForInputInfo { /** Any additional info or data */ info: ExpressionObject; } model WaitForInputStepDef { /** Any additional info or data */ wait_for_input: WaitForInputInfo; } model LogStep extends BaseWorkflowStep<"log"> { @visibility("read") kind_: "log" = "log"; ...LogStepDef; } model LogStepDef { /** The value to log */ log: JinjaTemplate; } /////////////////////// /// Key-value steps /// /////////////////////// model GetStep extends BaseWorkflowStep<"get"> { @visibility("read") kind_: "get" = "get"; ...GetStepDef; } model GetStepDef { /** The key to get */ get: string; } model SetStep extends BaseWorkflowStep<"set"> { @visibility("read") kind_: "set" = "set"; ...SetStepDef; } model SetStepDef { /** The value to set */ set: Record | Record>; } /////////////////////// /// Iteration steps /// /////////////////////// model ParallelStep extends BaseWorkflowStep<"parallel"> { @visibility("read") kind_: "parallel" = "parallel"; ...ParallelStepDef; } model ParallelStepDef { /** The steps to run in parallel. Max concurrency will depend on the platform. */ @maxItems(100) parallel: MappableWorkflowStep[]; } model ForeachDo { /** The variable to iterate over. * VALIDATION: Should NOT return more than 1000 elements. */ in: TypedExpression>; /** The steps to run for each iteration */ do: SequentialWorkflowStep; } model ForeachStep extends BaseWorkflowStep<"foreach"> { @visibility("read") kind_: "foreach" = "foreach"; ...ForeachStepDef; } model ForeachStepDef { /** The steps to run for each iteration */ foreach: ForeachDo; } model MapReduceStep> extends BaseWorkflowStep<"map_reduce"> { @visibility("read") kind_: "map_reduce" = "map_reduce"; /** The variable to iterate over */ over: TypedExpression>; /** The steps to run for each iteration */ map: MappableWorkflowStep; /** The expression to reduce the results. * If not provided, the results are collected and returned as a list. * A special parameter named `results` is the accumulator and `_` is the current value. */ reduce?: ReduceExpression; /** The initial value of the reduce expression */ initial?: unknown = #[]; /** Whether to run the reduce expression in parallel and how many items to run in each batch */ @minValue(1) @maxValue(100) parallelism?: uint16; } ///////////////////////// /// Conditional steps /// ///////////////////////// model IfElseWorkflowStep extends BaseWorkflowStep<"if_else"> { @visibility("read") kind_: "if_else" = "if_else"; ...IfElseWorkflowStepDef; } model IfElseWorkflowStepDef { /** The condition to evaluate */ `if`: TypedExpression; /** The steps to run if the condition is true */ then: WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | MapReduceStep; /** The steps to run if the condition is false */ `else`: WaitForInputStep | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep | IfElseWorkflowStep | SwitchStep | ForeachStep | ParallelStep | MapReduceStep | null = null; } model CaseThen { /** The condition to evaluate */ case: TypedExpression | "_"; // To support '_' as a value /** The steps to run if the condition is true */ then: NonConditionalWorkflowStep; } model SwitchStep extends BaseWorkflowStep<"switch"> { @visibility("read") kind_: "switch" = "switch"; ...SwitchStepDef; } model SwitchStepDef { /** The cond tree */ @minItems(1) switch: CaseThen[]; } ////////////////////////// /// Other control flow /// ////////////////////////// model YieldStep extends BaseWorkflowStep<"yield"> { @visibility("read") kind_: "yield" = "yield"; ...YieldStepDef; } model YieldStepDef { /** The subworkflow to run. * VALIDATION: Should resolve to a defined subworkflow. */ workflow: string; /** The input parameters for the subworkflow (defaults to last step output) */ arguments: ExpressionObject | "_" = "_"; } model ErrorWorkflowStep extends BaseWorkflowStep<"error"> { @visibility("read") kind_: "error" = "error"; ...ErrorWorkflowStepDef; } model ErrorWorkflowStepDef { /** The error message */ error: string; } model SleepFor { /** The number of seconds to sleep for */ @minValue(0) @maxValue(60) seconds: uint16 = 0; /** The number of minutes to sleep for */ @minValue(0) @maxValue(60) minutes: uint16 = 0; /** The number of hours to sleep for */ @minValue(0) @maxValue(24) hours: uint16 = 0; /** The number of days to sleep for */ @minValue(0) @maxValue(30) days: uint16 = 0; } model SleepStep extends BaseWorkflowStep<"sleep"> { @visibility("read") kind_: "sleep" = "sleep"; ...SleepStepDef; } model SleepStepDef { /** The duration to sleep for (max 31 days) */ sleep: SleepFor; } model ReturnStep extends BaseWorkflowStep<"return"> { @visibility("read") kind_: "return" = "return"; ...ReturnStepDef; } model ReturnStepDef { /** The value to return */ `return`: ExpressionObject; } ================================================ FILE: src/typespec/tools/algolia.tsp ================================================ import "../common"; using Common; namespace Tools; /** Integration definition for Algolia */ model AlgoliaSetup { /** The Algolia Application ID */ algolia_application_id: string; /** The Algolia API Key */ algolia_api_key: string; } /** Arguments for Algolia Search */ model AlgoliaSearchArguments { /** The index name to search */ index_name: string; /** The query to search for */ query: string; /** Optional attributes to retrieve */ attributes_to_retrieve?: string[]; /** Maximum number of hits to return */ @minValue(1) @maxValue(1000) hits_per_page?: int32 = 10; } /** Algolia integration definition */ model AlgoliaIntegrationDef extends BaseIntegrationDef { /** The provider must be "algolia" */ provider: "algolia" = "algolia"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Algolia */ setup?: AlgoliaSetup; /** The arguments for Algolia */ arguments?: AlgoliaSearchArguments; } /** Algolia Provider Card */ model AlgoliaProviderCard extends BaseProviderCard { provider: "algolia" = "algolia"; setup: AlgoliaSetup; methods: ProviderMethod[] = #[ #{ method: "search", description: "Search for content in an Algolia index", } ]; info: ProviderInfo = #{ url: "https://www.algolia.com/", docs: "https://www.algolia.com/doc/", icon: "https://www.algolia.com/favicon.ico", friendly_name: "Algolia Search", }; } /** Algolia Search Output */ model AlgoliaSearchOutput { /** The search results */ hits: unknown[]; /** Additional metadata from the search */ metadata: unknown; } ================================================ FILE: src/typespec/tools/anthropic.tsp ================================================ import "../common"; using Common; namespace Tools; /** * Anthropic new tools */ model Computer20241022Def { type: "computer_20241022" = "computer_20241022"; name?: string = "computer"; /** The display width in pixels */ @minValue(600) display_width_px: uint16 = 1024; /** The display height in pixels */ @minValue(400) display_height_px: uint16 = 768; /** The display number to use */ @minValue(1) @maxValue(10) display_number?: uint16 = 1; } model TextEditor20241022Def { type: "text_editor_20241022" = "text_editor_20241022"; name?: string = "str_replace_editor"; } model Bash20241022Def { type: "bash_20241022" = "bash_20241022"; name?: string = "bash"; } enum Computer20241022Action { /** Press a key or key-combination on the keyboard */ key, /** Type a string of text on the keyboard */ type, /** Get the current (x, y) pixel coordinate of the cursor on the screen */ cursor_position, /** Move the cursor to a specified (x, y) pixel coordinate on the screen */ mouse_move, /** Click the left mouse button */ left_click, /** Click the right mouse button */ right_click, /** Click the middle mouse button */ middle_click, /** Double-click the left mouse button */ double_click, /** Take a screenshot of the screen */ screenshot, } model ChosenComputer20241022 { /** The action to perform */ action: Computer20241022Action; /** The text to type */ text?: string; /** The (x, y) pixel coordinate to move the cursor to */ coordinate?: uint16[]; } model ChosenTextEditor20241022 { /** The command to run */ command: "str_replace" | "insert" | "view" | "undo_edit"; /** The path to the file */ path: string; /** The content of the file to be created */ file_text?: string; /** The line to insert the new string after */ insert_line?: uint16; /** The new string to insert */ new_str?: string; /** The string in the file to replace */ old_str?: string; /** The line range to view */ view_range?: uint16[]; } model ChosenBash20241022 { /** The bash command to run */ command?: string; /** Whether to restart the tool */ restart?: boolean = false; } ================================================ FILE: src/typespec/tools/arxiv.tsp ================================================ import "../common"; using Common; namespace Tools; /** Arguments for Arxiv Search */ model ArxivSearchArguments { /** The search query for searching with Arxiv */ query: string; /** The list of Arxiv IDs to search with */ id_list?: Array; /** The maximum number of results to return */ @minValue(1) @maxValue(300000) max_results?: int16 = 5; /** The download the pdf of the results */ download_pdf?: boolean = false; /** The sort criterion for the results */ sort_by?: "relevance" | "lastUpdatedDate" | "submittedDate" = "relevance"; /** The sort order for the results */ sort_order?: "ascending" | "descending" = "descending"; } /** Arxiv integration definition */ model ArxivIntegrationDef extends BaseIntegrationDef { /** The provider must be "arxiv" */ provider: "arxiv" = "arxiv"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Arxiv */ setup?: null = null; /** The arguments for Arxiv Search */ arguments?: ArxivSearchArguments; } /** The result of the Arxiv Search */ model ArxivSearchOutput { result: string; } model ArxivProviderCard extends BaseProviderCard { provider: "arxiv" = "arxiv"; setup: null = null; methods: ProviderMethod[] = #[ #{ method: "search", description: "Search with Arxiv", } ]; info: ProviderInfo = #{ url: "https://pypi.org/project/arxiv/", docs: "https://info.arxiv.org/help/api/index.html", icon: "https://arxiv.com/favicon.ico", friendly_name: "Arxiv Search", }; } ================================================ FILE: src/typespec/tools/brave.tsp ================================================ import "../common"; using Common; namespace Tools; /** Integration definition for Brave Search */ model BraveSearchSetup { /** The api key for Brave Search */ brave_api_key: string; } /** Arguments for Brave Search */ model BraveSearchArguments { /** The search query for searching with Brave */ query: string; } /** Brave integration definition */ model BraveIntegrationDef extends BaseIntegrationDef { /** The provider must be "brave" */ provider: "brave" = "brave"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Brave */ setup?: BraveSearchSetup; /** The arguments for Brave Search */ arguments?: BraveSearchArguments; } /** The result of the Brave Search */ model BraveSearchOutput { result: string; } model BraveProviderCard extends BaseProviderCard { provider: "brave" = "brave"; setup: BraveSearchSetup; methods: ProviderMethod[] = #[ #{ method: "search", description: "Search with Brave", } ]; info: ProviderInfo = #{ url: "https://brave.com/", docs: "https://brave.com/docs/", icon: "https://brave.com/favicon.ico", friendly_name: "Brave Search", }; } ================================================ FILE: src/typespec/tools/browserbase/contexts.tsp ================================================ import "../../common"; using Common; namespace Tools; // TODO: Implement these /** browserbase context provider */ model BrowserbaseContextIntegrationDef extends BaseBrowserbaseIntegrationDef { /** The specific method of the integration to call */ method?: "create_context" = "create_context"; /** The arguments for the method */ arguments?: BrowserbaseContextArguments; } model BrowserbaseContextArguments { /** The Project ID. Can be found in Settings. */ projectId: string; } model BrowserbaseContextOutput { id: string; uploadUrl?: url; publicKey?: string; cipherAlgorithm?: string; initializationVectorSize?: uint16; } ================================================ FILE: src/typespec/tools/browserbase/extensions.tsp ================================================ import "../../common"; using Common; namespace Tools; /** browserbase extension provider */ model BrowserbaseExtensionIntegrationDef extends BaseBrowserbaseIntegrationDef { /** The specific method of the integration to call */ method?: "install_extension_from_github"; /** The arguments for the method */ arguments?: BrowserbaseExtensionArguments; } model BrowserbaseExtensionArguments { /** The GitHub repository name. */ repositoryName: string; /** Ref to install from a branch or tag. */ ref?: string; } model BrowserbaseExtensionOutput { /** The installed Extension ID. */ id: string; } ================================================ FILE: src/typespec/tools/browserbase/main.tsp ================================================ import "../../common"; import "./contexts.tsp"; import "./extensions.tsp"; import "./sessions.tsp"; namespace Tools; using Common; alias BrowserbaseMethod = | /** Get live URLs from the browserbase context */ "get_live_urls" | /** List the sessions in the browserbase context */ "list_sessions" | /** Create a new session in the browserbase context */ "create_session" | /** Get a session from the browserbase context */ "get_session" | /** Complete a session in the browserbase context */ "complete_session" | /** Get the connection URL for a session */ "get_connect_url" | /** Install an extension from GitHub to the browserbase context */ "install_extension_from_github" | // TODO: Implement these /** Create a new browserbase context */ "create_context" | /** Get session downloads from the browserbase context */ "get_session_downloads" | /** Get logs from the browserbase context */ "get_logs" | /** Get recordings from the browserbase context */ "get_recordings"; /** The setup parameters for the browserbase integration */ model BrowserbaseSetup { /** API key for the browserbase integration */ api_key: string; /** The project ID. Can be found in Settings. */ project_id: string; /** The API URL. Defaults to https://www.browserbase.com */ api_url?: string; /** The connect URL. Defaults to wss://connect.browserbase.com */ connect_url?: string; } /** The base definition for a browserbase integration */ model BaseBrowserbaseIntegrationDef extends BaseIntegrationDef { provider: "browserbase" = "browserbase"; setup?: BrowserbaseSetup; method?: BrowserbaseMethod; arguments?: unknown; } alias BrowserbaseIntegrationDef = BrowserbaseContextIntegrationDef | BrowserbaseExtensionIntegrationDef | BrowserbaseSessionIntegrationDef; alias BrowserbaseArguments = BrowserbaseSessionArguments | BrowserbaseContextArguments | BrowserbaseExtensionArguments; alias BrowserbaseOutput = BrowserbaseSessionOutput | BrowserbaseContextOutput | BrowserbaseExtensionOutput; model BrowserbaseProviderCard extends BaseProviderCard { provider: "browserbase" = "browserbase"; setup: BrowserbaseSetup; methods: ProviderMethod[] = #[ #{ method: "list_sessions", description: "List the sessions in the browserbase context", }, #{ method: "create_session", description: "Create a new session in the browserbase context", }, #{ method: "get_session", description: "Get a session from the browserbase context", }, #{ method: "complete_session", description: "Complete a session in the browserbase context", }, #{ method: "get_live_urls", description: "Get live URLs from the browserbase context", }, #{ method: "install_extension_from_github", description: "Install an extension from GitHub to the browserbase context", }, #{ method: "get_connect_url", description: "Get the connection URL for a session", } ]; } ================================================ FILE: src/typespec/tools/browserbase/sessions.tsp ================================================ import "../../common"; using Common; namespace Tools; alias BrowserbaseSessionMethod = | /** Get live URLs from the browserbase context */ "get_live_urls" | /** List the sessions in the browserbase context */ "list_sessions" | /** Create a new session in the browserbase context */ "create_session" | /** Get a session from the browserbase context */ "get_session" | /** Complete a session in the browserbase context */ "complete_session" | /** Get the connection URL for a session */ "get_connect_url" | // TODO: Implement these "get_session_downloads" | "get_logs" | "get_recordings"; alias BrowserbaseSessionIntegrationDef = | BrowserbaseListSessionsIntegrationDef | BrowserbaseCreateSessionIntegrationDef | BrowserbaseGetSessionIntegrationDef | BrowserbaseCompleteSessionIntegrationDef | BrowserbaseGetSessionLiveUrlsIntegrationDef; // // TODO: Implement these // | BrowserbaseCreateSessionUploadsIntegrationDef // | BrowserbaseGetSessionDownloadsIntegrationDef // | BrowserbaseGetLogsIntegrationDef // | BrowserbaseGetRecordingsIntegrationDef alias BrowserbaseSessionArguments = | BrowserbaseListSessionsArguments | BrowserbaseCreateSessionArguments | BrowserbaseGetSessionArguments | BrowserbaseCompleteSessionArguments | BrowserbaseGetSessionLiveUrlsArguments; // // TODO: Implement these // | BrowserbaseCreateSessionUploadsArguments // | BrowserbaseGetSessionDownloadsArguments // | BrowserbaseGetLogsArguments // | BrowserbaseGetRecordingsArguments alias BrowserbaseSessionOutput = | BrowserbaseListSessionsOutput | BrowserbaseCreateSessionOutput | BrowserbaseGetSessionOutput | BrowserbaseCompleteSessionOutput | BrowserbaseGetSessionLiveUrlsOutput; // // TODO: Implement these // | BrowserbaseGetSessionDownloadsOutput // | BrowserbaseGetLogsOutput // | BrowserbaseGetRecordingsOutput /** browserbase list sessions integration definition */ model BrowserbaseListSessionsIntegrationDef extends BaseBrowserbaseIntegrationDef { /** The specific method of the integration to call */ method: "list_sessions" = "list_sessions"; /** The arguments for the method */ arguments?: BrowserbaseListSessionsArguments; } model BrowserbaseListSessionsArguments { /** The status of the sessions to list (Available options: RUNNING, ERROR, TIMED_OUT, COMPLETED) */ status?: "RUNNING" | "ERROR" | "TIMED_OUT" | "COMPLETED"; } alias BrowserbaseListSessionsOutput = { id: string; createdAt?: string; updatedAt?: string; projectId?: string; startedAt?: string; endedAt?: string; expiresAt?: string; status?: "RUNNING" | "ERROR" | "TIMED_OUT" | "COMPLETED"; proxyBytes?: uint64; avgCpuUsage?: uint64; memoryUsage?: uint64; keepAlive?: boolean; contextId?: string; }[]; /** browserbase create session integration definition */ model BrowserbaseCreateSessionIntegrationDef extends BaseBrowserbaseIntegrationDef { method: "create_session" = "create_session"; /** The arguments for the method */ arguments?: BrowserbaseCreateSessionArguments; } model BrowserbaseCreateSessionArguments { /** The Project ID. Can be found in Settings. */ projectId?: string; /** The installed Extension ID. See Install Extension from GitHub. */ extensionId?: string; /** Browser settings */ browserSettings?: Record = #{}; /** Duration in seconds after which the session will automatically end. Defaults to the Project's defaultTimeout. */ timeout?: uint16 = 3600; /** Set to true to keep the session alive even after disconnections. This is available on the Startup plan only. */ keepAlive?: boolean = false; /** Proxy configuration. Can be true for default proxy, or an array of proxy configurations. */ proxies?: boolean | Record[] = false; } model BrowserbaseCreateSessionOutput { id: string; connectionUrl?: string; createdAt?: string; projectId?: string; startedAt?: string; endedAt?: string; expiresAt?: string; status?: "RUNNING" | "ERROR" | "TIMED_OUT" | "COMPLETED"; proxyBytes?: uint64; avgCpuUsage?: uint64; memoryUsage?: uint64; keepAlive?: boolean; contextId?: string; } /** browserbase get session integration definition */ model BrowserbaseGetSessionIntegrationDef extends BaseBrowserbaseIntegrationDef { method: "get_session" = "get_session"; arguments?: BrowserbaseGetSessionArguments; } model BrowserbaseGetSessionArguments { id: string; } model BrowserbaseGetSessionOutput { id: string; connectionUrl?: string; createdAt?: string; projectId?: string; startedAt?: string; endedAt?: string; expiresAt?: string; status?: "RUNNING" | "ERROR" | "TIMED_OUT" | "COMPLETED"; proxyBytes?: uint64; avgCpuUsage?: uint64; memoryUsage?: uint64; keepAlive?: boolean; contextId?: string; } /** browserbase complete session integration definition */ model BrowserbaseCompleteSessionIntegrationDef extends BaseBrowserbaseIntegrationDef { method: "complete_session" = "complete_session"; arguments?: BrowserbaseCompleteSessionArguments; } model BrowserbaseCompleteSessionArguments { id: string; status?: "REQUEST_RELEASE" = "REQUEST_RELEASE"; } model BrowserbaseCompleteSessionOutput { success: boolean; } /** browserbase get session live urls integration definition */ model BrowserbaseGetSessionLiveUrlsIntegrationDef extends BaseBrowserbaseIntegrationDef { method: "get_live_urls" = "get_live_urls"; arguments?: BrowserbaseGetSessionLiveUrlsArguments; } model BrowserbaseGetSessionLiveUrlsArguments { id: string; } model BrowserbaseGetSessionLiveUrlsOutput { debuggerFullscreenUrl?: url; debuggerUrl?: url; wsUrl?: url; pages: { id?: string; url?: url; faviconUrl?: url; title?: string; debuggerUrl?: url; debuggerFullscreenUrl?: url; }[] = #[]; } ================================================ FILE: src/typespec/tools/cloudinary.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for Cloudinary integration */ model CloudinarySetup { /** The API key for Cloudinary */ cloudinary_api_key: string; /** The API secret for Cloudinary */ cloudinary_api_secret: string; /** The Cloud name for Cloudinary */ cloudinary_cloud_name: string; /** Additional parameters for the Cloudinary API */ params?: Record; } alias CloudinaryMethod = | /** Upload media to Cloudinary */ "media_upload" | /** Edit media in Cloudinary */ "media_edit"; /** Arguments for Cloudinary media upload */ model CloudinaryUploadArguments { /** The URL of the file upload */ file: string; /** Return base64 encoded file */ return_base64: boolean = false; /** Optional public ID for the uploaded file */ public_id?: string; /** Optional upload parameters */ upload_params?: Record; } /** Arguments for Cloudinary media edit */ model CloudinaryEditArguments { /** The file Public ID in Cloudinary */ public_id: string; /** The transformation to apply to the file */ transformation: Array>; /** Return base64 encoded file */ return_base64: boolean = false; } /** Base Cloudinary integration definition */ model BaseCloudinaryIntegrationDef extends BaseIntegrationDef { provider: "cloudinary" = "cloudinary"; setup?: CloudinarySetup; method?: CloudinaryMethod; } /** Cloudinary upload integration definition */ model CloudinaryUploadIntegrationDef extends BaseCloudinaryIntegrationDef { method: "media_upload" = "media_upload"; arguments?: CloudinaryUploadArguments; } /** Cloudinary edit integration definition */ model CloudinaryEditIntegrationDef extends BaseCloudinaryIntegrationDef { method: "media_edit" = "media_edit"; arguments?: CloudinaryEditArguments; } alias CloudinaryIntegrationDef = CloudinaryUploadIntegrationDef | CloudinaryEditIntegrationDef; /** Output for Cloudinary upload */ model CloudinaryUploadOutput { /** The URL of the uploaded file */ url: string; /** The public ID of the uploaded file */ public_id: string; /** The base64 encoded file */ base64?: string; /** The metadata of the uploaded file */ metadata: Record; } /** Output for Cloudinary edit */ model CloudinaryEditOutput { /** The transformed URL from Cloudinary */ transformed_url: string; /** The base64 encoded file */ base64?: string; } alias CloudinaryOutput = CloudinaryUploadOutput | CloudinaryEditOutput; /** Cloudinary Provider Card */ model CloudinaryProviderCard extends BaseProviderCard { provider: "cloudinary" = "cloudinary"; setup: CloudinarySetup; methods: ProviderMethod[] = #[ #{ method: "media_upload", description: "Upload media to Cloudinary", }, #{ method: "media_edit", description: "Edit media in Cloudinary", } ]; info: ProviderInfo = #{ url: "https://cloudinary.com/", docs: "https://cloudinary.com/documentation/python_quickstart", icon: "https://cloudinary.com/favicon.ico", friendly_name: "Cloudinary", }; } ================================================ FILE: src/typespec/tools/email.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for Email integration */ model EmailSetup { /** The host of the email server */ host: string; /** The port of the email server */ port: int32; /** The username of the email server */ user: string; /** The password of the email server */ password: string; } /** Arguments for Email sending */ model EmailArguments { /** The email address to send the email to */ to: string; /** The email address to send the email from */ from: string; /** The subject of the email */ subject: string; /** The body of the email */ body: string; } /** Email integration definition */ model EmailIntegrationDef extends BaseIntegrationDef { /** The provider must be "email" */ provider: "email" = "email"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Email */ setup?: EmailSetup; /** The arguments for Email sending */ arguments?: EmailArguments; } /** Email Provider Card */ model EmailProviderCard extends BaseProviderCard { provider: "email" = "email"; setup: EmailSetup; methods: ProviderMethod[] = #[ #{ method: "send", description: "Send an email", } ]; info: ProviderInfo = #{ url: "https://emailservice.com/", docs: "https://emailservice.com/docs/", icon: "https://emailservice.com/favicon.ico", friendly_name: "Email Service", }; } /** Email Output */ model EmailOutput { /** Whether the email was sent successfully */ success: boolean; } ================================================ FILE: src/typespec/tools/endpoints.tsp ================================================ import "../common"; import "../agents"; import "./models.tsp"; using Common; using Agents; namespace Tools; // // TOOL ENDPOINTS // interface AgentEndpoints extends ChildLimitOffsetPagination, ChildCreateEndpoint, ChildUpdateEndpoint, ChildPatchEndpoint, ChildDeleteEndpoint<"Delete an existing tool by id"> {} ================================================ FILE: src/typespec/tools/ffmpeg.tsp ================================================ import "../common"; using Common; namespace Tools; /** Arguments for Ffmpeg CMD */ model FfmpegSearchArguments { /** The bash command string */ cmd: string; /** The base64 string of the file*/ file?: string | Array; } /** Ffmpeg integration definition */ model FfmpegIntegrationDef extends BaseIntegrationDef { /** The provider must be "ffmpeg" */ provider: "ffmpeg" = "ffmpeg"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Ffmpeg */ setup?: null = null; /** The arguments for Ffmpeg Search */ arguments?: FfmpegSearchArguments; } /** Ffmpeg Provider Card */ model FfmpegProviderCard extends BaseProviderCard { provider: "ffmpeg" = "ffmpeg"; setup: null = null; methods: ProviderMethod[] = #[ #{ method: "bash_cmd", description: "Run FFmpeg bash command", } ]; info: ProviderInfo = #{ url: "https://ffmpeg.org/", docs: "https://ffmpeg.org/documentation.html", icon: "https://upload.wikimedia.org/wikipedia/commons/5/5f/FFmpeg_Logo_new.svg", friendly_name: "Ffmpeg", }; } /** Ffmpeg Search Output */ model FfmpegSearchOutput { /** The documents returned from the Ffmpeg search */ file: string; result: boolean; mime_type: string; } ================================================ FILE: src/typespec/tools/google_sheets.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for Google Sheets integration */ model GoogleSheetsSetup { /** * Whether to use Julep's built-in Google Sheets service account. * If true, no credentials needed. If false, service_account_json is required. */ use_julep_service: boolean; /** * Base64 encoded service account JSON for authentication. * Required when use_julep_service is false. * Users can provide their own service account for better isolation and quota management. */ service_account_json?: string; /** Default number of retry attempts for API calls */ @minValue(1) @maxValue(10) default_retry_count?: uint8 = 3; } /** Arguments for reading values from a spreadsheet */ model GoogleSheetsReadArguments { /** The ID of the spreadsheet to read from */ spreadsheet_id: string; /** The A1 notation of the range to read */ range: string; /** The major dimension that results should use */ major_dimension?: "ROWS" | "COLUMNS" = "ROWS"; /** How values should be represented in the output */ value_render_option?: "FORMATTED_VALUE" | "UNFORMATTED_VALUE" | "FORMULA" = "FORMATTED_VALUE"; /** How dates, times, and durations should be represented */ date_time_render_option?: "SERIAL_NUMBER" | "FORMATTED_STRING" = "FORMATTED_STRING"; } /** Arguments for writing values to a spreadsheet */ model GoogleSheetsWriteArguments { /** The ID of the spreadsheet to write to */ spreadsheet_id: string; /** The A1 notation of the range to write to */ range: string; /** The values to write (2D array) */ values: unknown[][]; /** How the input data should be interpreted */ value_input_option?: "RAW" | "USER_ENTERED" = "USER_ENTERED"; /** How the input data should be inserted */ insert_data_option?: "OVERWRITE" | "INSERT_ROWS" = "OVERWRITE"; /** Whether to include the values in the response */ include_values_in_response?: boolean = false; } /** Arguments for appending values to a spreadsheet */ model GoogleSheetsAppendArguments { /** The ID of the spreadsheet to append to */ spreadsheet_id: string; /** The A1 notation of the range to start appending from */ range: string; /** The values to append (2D array) */ values: unknown[][]; /** How the input data should be interpreted */ value_input_option?: "RAW" | "USER_ENTERED" = "USER_ENTERED"; /** How the input data should be inserted */ insert_data_option?: "OVERWRITE" | "INSERT_ROWS" = "INSERT_ROWS"; /** Whether to include the values in the response */ include_values_in_response?: boolean = false; } /** Arguments for clearing values from a spreadsheet */ model GoogleSheetsClearArguments { /** The ID of the spreadsheet to clear values from */ spreadsheet_id: string; /** The A1 notation of the range to clear */ range: string; } /** Arguments for batch reading values from multiple ranges */ model GoogleSheetsBatchReadArguments { /** The ID of the spreadsheet to read from */ spreadsheet_id: string; /** The A1 notation of the ranges to read */ ranges: string[]; /** The major dimension that results should use */ major_dimension?: "ROWS" | "COLUMNS" = "ROWS"; /** How values should be represented in the output */ value_render_option?: "FORMATTED_VALUE" | "UNFORMATTED_VALUE" | "FORMULA" = "FORMATTED_VALUE"; /** How dates, times, and durations should be represented */ date_time_render_option?: "SERIAL_NUMBER" | "FORMATTED_STRING" = "FORMATTED_STRING"; } /** Arguments for batch updating values in multiple ranges */ model GoogleSheetsBatchWriteArguments { /** The ID of the spreadsheet to write to */ spreadsheet_id: string; /** The data to write to each range */ data: GoogleSheetsValueRange[]; /** How the input data should be interpreted */ value_input_option?: "RAW" | "USER_ENTERED" = "USER_ENTERED"; /** Whether to include the values in the response */ include_values_in_response?: boolean = false; } /** Represents a range of values to write */ model GoogleSheetsValueRange { /** The A1 notation of the range */ range: string; /** The values for the range (2D array) */ values: unknown[][]; /** The major dimension of the values */ major_dimension?: "ROWS" | "COLUMNS" = "ROWS"; } alias GoogleSheetsMethod = | /** Read values from a specific range */ "read_values" | /** Write values to a specific range */ "write_values" | /** Append values to a spreadsheet */ "append_values" | /** Clear values from a range */ "clear_values" | /** Read values from multiple ranges */ "batch_read" | /** Write values to multiple ranges */ "batch_write"; /** Google Sheets integration definition */ model GoogleSheetsIntegrationDef extends BaseIntegrationDef { /** The provider must be "google_sheets" */ provider: "google_sheets" = "google_sheets"; /** The specific method of the integration to call */ method?: GoogleSheetsMethod; /** The setup parameters for Google Sheets */ setup?: GoogleSheetsSetup; /** The arguments for the method */ arguments?: GoogleSheetsReadArguments | GoogleSheetsWriteArguments | GoogleSheetsAppendArguments | GoogleSheetsClearArguments | GoogleSheetsBatchReadArguments | GoogleSheetsBatchWriteArguments; } /** Google Sheets Provider Card */ model GoogleSheetsProviderCard extends BaseProviderCard { provider: "google_sheets" = "google_sheets"; setup: GoogleSheetsSetup; methods: ProviderMethod[] = #[ #{ method: "read_values", description: "Read values from a specific range in a Google Sheets spreadsheet", }, #{ method: "write_values", description: "Write or update values in a specific range in a Google Sheets spreadsheet", }, #{ method: "append_values", description: "Append new rows of data to a Google Sheets spreadsheet", }, #{ method: "clear_values", description: "Clear values from a specific range in a Google Sheets spreadsheet", }, #{ method: "batch_read", description: "Read values from multiple ranges in a Google Sheets spreadsheet", }, #{ method: "batch_write", description: "Write values to multiple ranges in a Google Sheets spreadsheet", } ]; info: ProviderInfo = #{ url: "https://sheets.google.com/", docs: "https://developers.google.com/sheets/api", icon: "https://www.gstatic.com/images/branding/product/1x/sheets_2020q4_48dp.png", friendly_name: "Google Sheets", }; } /** Output for reading values from Google Sheets */ model GoogleSheetsReadOutput { /** The range that was read */ range: string; /** The major dimension of the values */ major_dimension: string; /** The values read from the spreadsheet */ values: unknown[][]; } /** Output for writing/appending values to Google Sheets */ model GoogleSheetsWriteOutput { /** The spreadsheet ID that was updated */ spreadsheet_id: string; /** The range that was updated */ updated_range?: string; /** The number of rows updated */ updated_rows?: int32; /** The number of columns updated */ updated_columns?: int32; /** The number of cells updated */ updated_cells?: int32; /** The values that were written (if requested) */ updated_values?: unknown[][]; } /** Output for clearing values from Google Sheets */ model GoogleSheetsClearOutput { /** The spreadsheet ID that was cleared */ spreadsheet_id: string; /** The range that was cleared */ cleared_range: string; } /** Output for batch reading from Google Sheets */ model GoogleSheetsBatchReadOutput { /** The spreadsheet ID that was read */ spreadsheet_id: string; /** The value ranges that were read */ value_ranges: GoogleSheetsValueRangeOutput[]; } /** Represents a range of values that was read */ model GoogleSheetsValueRangeOutput { /** The range that was read */ range: string; /** The major dimension of the values */ major_dimension: string; /** The values read from the range */ values: unknown[][]; } /** Output for batch writing to Google Sheets */ model GoogleSheetsBatchWriteOutput { /** The spreadsheet ID that was updated */ spreadsheet_id: string; /** Total number of sheets updated */ total_updated_sheets?: int32; /** Total number of rows updated */ total_updated_rows?: int32; /** Total number of columns updated */ total_updated_columns?: int32; /** Total number of cells updated */ total_updated_cells?: int32; /** Details about each range that was updated */ responses?: GoogleSheetsUpdateResponse[]; } /** Details about a single range update */ model GoogleSheetsUpdateResponse { /** The range that was updated */ updated_range?: string; /** The number of rows updated */ updated_rows?: int32; /** The number of columns updated */ updated_columns?: int32; /** The number of cells updated */ updated_cells?: int32; } ================================================ FILE: src/typespec/tools/llama_parse.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for LlamaParse integration */ model LlamaParseSetup { /** The API key for LlamaParse */ llamaparse_api_key: string; /** Optional upload parameters */ params?: Record; } /** Arguments for LlamaParse integration */ model LlamaParseFetchArguments { /** File Name. If not provided, a random name will be generated. */ filename?: string; /** The base64 string of the file, which can be a single string or a list of strings */ file: string | Array; /** Optional upload parameters */ params?: Record; /** The input file is base64 */ base64?: boolean = false; } /** LlamaParse integration definition */ model LlamaParseIntegrationDef extends BaseIntegrationDef { /** The provider must be "LlamaParseSetup" */ provider: "llama_parse" = "llama_parse"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for LlamaParse */ setup?: LlamaParseSetup; /** The arguments for LlamaParse */ arguments?: LlamaParseFetchArguments; } /** LlamaParse Provider Card */ model LlamaParseProviderCard extends BaseProviderCard { provider: "llama_parse" = "llama_parse"; setup: LlamaParseSetup; methods: ProviderMethod[] = #[ #{ method: "parse", description: "Parse and Extract the Files", } ]; info: ProviderInfo = #{ url: "https://www.llamaindex.ai/", docs: "https://docs.cloud.llamaindex.ai/llamaparse/getting_started", icon: "https://www.llamaindex.ai/favicon.ico", friendly_name: "LlamaParse", }; } /** Represents a document with text content */ model LlamaParseDocument { // Using string for now since we need to represent langchain Document text: string; metadata: Record; } /** LlamaParse Fetch Output */ model LlamaParseFetchOutput { /** The documents returned from the LlamaParse */ documents: LlamaParseDocument[]; } ================================================ FILE: src/typespec/tools/mailgun.tsp ================================================ import "../common"; import "./models.tsp"; using Common; namespace Tools; /** Setup parameters for Mailgun integration */ model MailgunSetup { /** The API key for the Mailgun integration */ api_key: string; } alias MailgunMethod = "send_email"; /** Arguments for mailgun.send_email method */ model MailgunSendEmailArguments { /** The email address to send the email to */ to: string; /** The email address to send the email from */ from: string; /** The subject of the email */ subject: string; /** The body of the email */ body: string; /** Optional carbon copy recipients (comma-separated email addresses) */ cc?: string; /** Optional blind carbon copy recipients (comma-separated email addresses) */ bcc?: string; } alias MailgunArguments = MailgunSendEmailArguments; /** Mailgun integration definition */ model MailgunIntegrationDef extends BaseIntegrationDef { /** The provider must be "mailgun" */ provider: "mailgun" = "mailgun"; /** The specific method of the integration to call */ method?: MailgunMethod; /** The setup parameters for Mailgun */ setup?: MailgunSetup; /** The arguments for mailgun methods */ arguments?: MailgunArguments; } /** Mailgun Provider Card */ model MailgunProviderCard extends BaseProviderCard { provider: "mailgun" = "mailgun"; setup: MailgunSetup; methods: ProviderMethod[] = #[ #{ method: "send_email", description: "Send an email using Mailgun", } ]; info: ProviderInfo = #{ url: "https://www.mailgun.com/", docs: "https://documentation.mailgun.com/", icon: "https://mailgun.com/favicon.ico", friendly_name: "Mailgun", }; } /** mailgun.send_email method Output */ model MailgunSendEmailOutput { /** Whether the email was sent successfully */ success: boolean; /** The error message if the email was not sent successfully */ error?: string; } ================================================ FILE: src/typespec/tools/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; import "./anthropic.tsp"; import "./brave.tsp"; import "./email.tsp"; import "./spider.tsp"; import "./weather.tsp"; import "./wikipedia.tsp"; import "./browserbase"; import "./remote_browser.tsp"; import "./llama_parse.tsp"; import "./ffmpeg.tsp"; import "./cloudinary.tsp"; import "./arxiv.tsp"; import "./unstructured.tsp"; import "./algolia.tsp"; import "./mcp.tsp"; import "./google_sheets.tsp"; namespace Tools; // // TOOLS // ================================================ FILE: src/typespec/tools/mcp.tsp ================================================ import "../common"; using Common; namespace Tools; /** Transport type for MCP servers */ alias McpTransport = ("sse" | "http"); /** Setup parameters for MCP integration */ model McpSetup { /** Transport used to connect to the MCP server */ transport: McpTransport; /** (stdio) Executable or command to launch the server */ command?: string; /** (stdio) Arguments for the server command */ args?: string[] = #[]; /** (stdio) Working directory for the server process */ cwd?: string; /** (stdio) Environment variables for the server process */ env?: Record = #{}; /** (http) Base URL for the MCP server (usually ends with /mcp) */ http_url?: url; /** (http) Optional HTTP headers to include (e.g., Authorization) */ http_headers?: Record = #{}; } /** Arguments to call a named tool on the MCP server */ model McpCallToolArguments { /** The MCP tool name to invoke */ tool_name: string; /** JSON-serializable arguments to pass to the MCP tool */ arguments?: Record = #{}; /** Optional per-call timeout in seconds */ timeout_seconds?: uint16 = 60; } /** Arguments to list available tools */ model McpListToolsArguments {dummy: string = "dummy";} /** A single MCP tool description */ model McpToolInfo { name: string; description?: string; /** JSON Schema for the tool input parameters, if provided by the server */ input_schema?: Record; } /** Output for listing tools from an MCP server */ model McpListToolsOutput { tools: McpToolInfo[]; } /** Output for an MCP tool call */ model McpToolCallOutput { /** Concatenated textual content, if any was returned */ text?: string | null = null; /** Structured content returned by the server, if present */ structured?: Record | null = null; /** Raw content items as returned by MCP (best-effort JSON form) */ content?: Record[] = #[]; /** Whether the server indicated an error for this call */ is_error?: boolean = false; } /** MCP integration definition */ model McpIntegrationDef extends BaseIntegrationDef { /** The provider must be "mcp" */ provider: "mcp" = "mcp"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for MCP */ setup?: McpSetup; /** The arguments for MCP methods */ arguments?: McpCallToolArguments | McpListToolsArguments; } /** MCP Provider Card */ model McpProviderCard extends BaseProviderCard { provider: "mcp" = "mcp"; setup: McpSetup; methods: ProviderMethod[] = #[ #{ method: "list_tools", description: "List tools exposed by an MCP server", }, #{ method: "call_tool", description: "Call a named tool on an MCP server", } ]; info: ProviderInfo = #{ url: "https://modelcontextprotocol.io/", docs: "https://spec.modelcontextprotocol.io/", icon: "https://modelcontextprotocol.io/favicon.ico", friendly_name: "Model Context Protocol", }; } ================================================ FILE: src/typespec/tools/models.tsp ================================================ import "../common"; import "./algolia.tsp"; import "./arxiv.tsp"; import "./brave.tsp"; import "./browserbase"; import "./cloudinary.tsp"; import "./ffmpeg.tsp"; import "./google_sheets.tsp"; import "./llama_parse.tsp"; import "./mailgun.tsp"; import "./remote_browser.tsp"; import "./spider.tsp"; import "./unstructured.tsp"; import "./weather.tsp"; import "./wikipedia.tsp"; import "./mcp.tsp"; using Common; namespace Tools; // // TOOL MODELS // // TODO: Split these into different files /** A valid HTTP method */ alias httpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "CONNECT" | "TRACE"; /** Integration provider name */ alias integrationProvider = ( | "dummy" | "weather" | "wikipedia" | "spider" | "brave" | "browserbase" | "email" | "mailgun" | "remote_browser" | "llama_parse" | "ffmpeg" | "cloudinary" | "arxiv" | "unstructured" | "algolia" | "mcp" | "google_sheets" ); enum ToolType { /** A tool that emulates a function call */ function, /** A tool that uses one of the Julep integrations */ integration, /** A tool that uses a system resource */ system, /** A tool that makes an API call */ api_call, /** (Alpha) Anthropic new tools */ computer_20241022, text_editor_20241022, bash_20241022, } /** The parameters the functions accepts, described as a JSON Schema object. */ alias FunctionParameters = Record; alias ToolOutput = Record; alias ToolChoiceOption = "auto" | "none" | NamedToolChoice; model SecretRef { /** The name of the secret to reference */ name: string; } /** Function definition */ model FunctionDef { /** DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. */ name?: null = null; /** DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. */ description?: null = null; /** The parameters the function accepts */ parameters?: FunctionParameters; } /** Integration definition */ @discriminator("provider") model BaseIntegrationDef { /** The provider of the integration */ provider: integrationProvider; /** The specific method of the integration to call */ method?: string; /** The setup parameters the integration accepts */ setup?: unknown; /** The arguments to pre-apply to the integration call */ arguments?: unknown; } model DummyIntegrationDef extends BaseIntegrationDef { provider: "dummy" = "dummy"; } model BaseProviderCard { provider: integrationProvider; setup: unknown; methods: ProviderMethod[]; info: ProviderInfo; } model ProviderMethod { method: string; description?: string; arguments?: Arguments; output?: Output; } model ProviderInfo { url?: url; docs?: url; icon?: url; friendly_name?: string; } alias IntegrationDef = ( | DummyIntegrationDef | BraveIntegrationDef | EmailIntegrationDef | SpiderIntegrationDef | WikipediaIntegrationDef | WeatherIntegrationDef | MailgunIntegrationDef | BrowserbaseIntegrationDef | RemoteBrowserIntegrationDef | LlamaParseIntegrationDef | FfmpegIntegrationDef | CloudinaryIntegrationDef | ArxivIntegrationDef | UnstructuredIntegrationDef | AlgoliaIntegrationDef | McpIntegrationDef | GoogleSheetsIntegrationDef ); // // SYSTEM TOOL MODELS // alias resourceType = ( | "agent" | "user" | "task" | "execution" | "doc" | "session" | "job" ); alias subresourceType = ( | "tool" | "doc" | "execution" | "transition" ); alias operationType = ( | "create" | "update" | "patch" | "create_or_update" | "embed" | "change_status" | "search" | "chat" | "history" | "delete" | "get" | "list" ); // TODO: Add granular definitions for each system call /** System definition */ model SystemDef { /** Resource is the name of the resource to use */ resource: resourceType; /** Operation is the name of the operation to perform */ operation: operationType; /** Resource id (if applicable) */ resource_id?: uuid; /** Sub-resource type (if applicable) */ subresource?: subresourceType; /** The arguments to pre-apply to the system call */ arguments?: FunctionParameters; } /** JSON Schema for API call parameters */ model ParameterSchema { /** Schema type (usually 'object') */ type: string = "object"; /** Properties definition for parameters */ properties: Record; /** List of required property names */ required?: string[] = #[]; /** Whether to allow additional properties */ additionalProperties?: boolean; } /** Property definition for parameter schema */ model PropertyDefinition { /** Type of the property */ type: string; /** Description of the property */ description?: string; /** Enum values if applicable */ `enum`?: string[]; /** Items definition for array types */ items?: PropertyDefinition; } /** API call definition */ model ApiCallDef { /** The HTTP method to use */ method: httpMethod; /** The URL to call */ url: url; /** The schema of the response */ schema?: Record; /** The headers to send with the request */ headers?: Record; /** Secret references to use in templates (available only at setup time, not during execution) */ secrets?: Record; /** The content as base64 to send with the request */ content?: string; /** The data to send as form data */ data?: Record; /** The data to send as files data */ files?: Record; /** JSON body to send with the request */ json?: Record; /** Cookies */ cookies?: Record; /** The parameters to send with the request */ params?: string | Record; /** The schema of the parameters */ params_schema?: ParameterSchema; /** Follow redirects */ follow_redirects?: boolean; /** The timeout for the request */ timeout?: uint8; /** Whether to include the content in the response */ include_response_content?: boolean = true; } model Tool { /** Name of the tool (must be unique for this agent and a valid python identifier string )*/ name: validPythonIdentifier; /** Type of the tool */ type: ToolType; /** Description of the tool */ description?: string; /** The function to call */ function?: FunctionDef; /** The integration to call */ integration?: IntegrationDef; /** The system to call */ system?: SystemDef; /** The API call to make */ api_call?: ApiCallDef; /** (Alpha) Anthropic new tools */ computer_20241022?: Computer20241022Def; text_editor_20241022?: TextEditor20241022Def; bash_20241022?: Bash20241022Def; ...HasTimestamps; ...HasId; } model FunctionCallOption { /** The name of the function */ name: string; /** The parameters to pass to the function */ arguments?: string; // May be a JSON string } model NamedToolChoice { function?: FunctionCallOption; integration?: never; system?: never; api_call?: never; } model ToolResponse { @key id: string; /** The output of the tool */ output: ToolOutput; } /** Payload for creating a tool */ @withVisibility("create") model CreateToolRequest { ...Tool; } /** Payload for updating a tool */ @withVisibility("update") model UpdateToolRequest { ...Tool; } /** Payload for patching a tool */ model PatchToolRequest is UpdateToolRequest {} /** The response tool value generated by the model */ model BaseChosenToolCall { /** Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) */ type: ToolType; function?: FunctionCallOption; integration?: unknown; // ChosenIntegrationCall system?: unknown; // ChosenSystemCall api_call?: unknown; // ChosenApiCall /** (Alpha) Anthropic new tools */ computer_20241022?: ChosenComputer20241022; text_editor_20241022?: ChosenTextEditor20241022; bash_20241022?: ChosenBash20241022; @visibility("read") id?: string; } model ChosenFunctionCall extends BaseChosenToolCall { type: ToolType.function; /** The function to call */ function: FunctionCallOption; } alias ChosenToolCall = ( | ChosenFunctionCall // | ChosenIntegrationCall // | ChosenSystemCall // | ChosenApiCall | ChosenComputer20241022 | ChosenTextEditor20241022 | ChosenBash20241022 ); ================================================ FILE: src/typespec/tools/remote_browser.tsp ================================================ import "../common"; using Common; namespace Tools; alias RemoteBrowserAction = | /** Press a key */ "key" | /** Type text */ "type" | /** Move the mouse to a coordinate */ "mouse_move" | /** Left click */ "left_click" | /** Left click and drag */ "left_click_drag" | /** Right click */ "right_click" | /** Middle click */ "middle_click" | /** Double click */ "double_click" | /** Take a screenshot */ "screenshot" | /** Get the cursor position */ "cursor_position" | /** Navigate to a URL */ "navigate" | /** Refresh the page */ "refresh"; /** The setup parameters for the remote browser */ model RemoteBrowserSetup { /** The connection URL for the remote browser */ connect_url?: string; /** The width of the browser */ width?: uint16; /** The height of the browser */ height?: uint16; } /** The arguments for the remote browser */ model RemoteBrowserArguments { /** The connection URL for the remote browser */ connect_url?: string; /** The action to perform */ action: RemoteBrowserAction; /** The text */ text?: string; /** The coordinate to move the mouse to */ coordinate?: [uint16, uint16]; } /** The output of the remote browser */ model RemoteBrowserOutput { /** The output of the action */ output: string | null = null; /** The error of the action */ error: string | null = null; /** The base64 encoded image of the action */ base64_image: string | null = null; /** The system output of the action */ system: string | null = null; } /** The integration definition for the remote browser */ model RemoteBrowserIntegrationDef extends BaseIntegrationDef { provider: "remote_browser" = "remote_browser"; setup: RemoteBrowserSetup; method: "perform_action" = "perform_action"; arguments?: RemoteBrowserArguments; } model RemoteBrowserProviderCard extends BaseProviderCard { provider: "remote_browser" = "remote_browser"; setup: RemoteBrowserSetup; methods: ProviderMethod[] = #[ #{ method: "perform_action", description: "Perform an action in the remote browser", } ]; info: ProviderInfo = #{ url: "https://playwright.dev/", docs: "https://playwright.dev/docs/api/class-page", icon: "https://playwright.dev/favicon.ico", friendly_name: "Playwright", }; } ================================================ FILE: src/typespec/tools/spider.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for Spider integration */ model SpiderSetup { /** The API key for Spider */ spider_api_key: string; } /** Arguments for Spider integration */ model SpiderFetchArguments { /** The URL to fetch data from */ url: url; /** The content type to return */ content_type?: "application/json" | "text/csv" | "application/xml" | "application/jsonl" = "application/json"; /** Additional parameters for the Spider API */ params?: Record; } alias SpiderMethod = | /** Crawl a website and extract data */ "crawl" | /** Retrieve links from the specified URL. */ "links" | /** Take a screenshot of the specified URL. */ "screenshot" | /** Perform a search and gather a list of websites to start crawling and collect resources. */ "search"; /** Spider integration definition */ model SpiderIntegrationDef extends BaseIntegrationDef { /** The provider must be "spider" */ provider: "spider" = "spider"; /** The specific method of the integration to call */ method?: SpiderMethod; /** The setup parameters for Spider */ setup?: SpiderSetup; /** The arguments for Spider */ arguments?: SpiderFetchArguments; } /** Spider Provider Card */ model SpiderProviderCard extends BaseProviderCard { provider: "spider" = "spider"; setup: SpiderSetup; methods: ProviderMethod[] = #[ #{ method: "crawl", description: "Crawl a website and extract data", } ]; info: ProviderInfo = #{ url: "https://spider.com/", docs: "https://spider.com/docs/", icon: "https://spider.com/favicon.ico", friendly_name: "Spider", }; } /** Spider Fetch Output */ model SpiderFetchOutput { /** The documents returned from the spider */ documents: SpiderDocument[]; } /** Represents a document with text content */ model SpiderDocument { // Using string for now since we need to represent langchain Document page_content: string; metadata: Record; } ================================================ FILE: src/typespec/tools/unstructured.tsp ================================================ import "../common"; using Common; namespace Tools; /** Setup parameters for Unstructured integration */ model UnstructuredSetup { /** The API key for Unstructured.io */ unstructured_api_key: string; /** Optional server endpoint URL */ server_url?: string; /** The server by name to use for all methods */ server?: string; /** Parameters to optionally template the server URL with */ url_params?: Record; /** The retry configuration to use for all supported methods */ retry_config?: Record; /** Optional request timeout applied to each operation in milliseconds */ timeout_ms?: int16; } /** Arguments for Unstructured partition integration */ model UnstructuredPartitionArguments { /** File Name. If not provided, a random name will be generated. */ filename?: string; /** The base64 string of the file, which can be a single string or a list of strings */ file: string; /** Additional partition parameters */ partition_params?: Record; } /** Unstructured integration definition */ model UnstructuredIntegrationDef extends BaseIntegrationDef { /** The provider must be "unstructured" */ provider: "unstructured" = "unstructured"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Unstructured */ setup?: UnstructuredSetup; /** The arguments for Unstructured */ arguments?: UnstructuredPartitionArguments; } /** Unstructured Provider Card */ model UnstructuredProviderCard extends BaseProviderCard { provider: "unstructured" = "unstructured"; setup: UnstructuredSetup; methods: ProviderMethod[] = #[ #{ method: "partition", description: "Partition documents into structured elements", } ]; info: ProviderInfo = #{ url: "https://unstructured.io/", docs: "https://docs.unstructured.io/", icon: "https://unstructured.io/favicon.ico", friendly_name: "Unstructured.io", }; } /** Represents a document element from Unstructured */ model UnstructuredElement { /** The type of element */ element_type: string; /** The text content of the element */ text: string; /** Metadata about the element */ metadata: Record; } /** Unstructured Partition Output */ model UnstructuredPartitionOutput { /** The elements returned from Unstructured */ elements: UnstructuredElement[]; } ================================================ FILE: src/typespec/tools/weather.tsp ================================================ import "../common"; using Common; namespace Tools; /** Integration definition for Weather */ model WeatherSetup { /** The api key for OpenWeatherMap */ openweathermap_api_key: string; } /** Arguments for Weather */ model WeatherGetArguments { /** The location for which to fetch weather data */ location: string; } /** Weather integration definition */ model WeatherIntegrationDef extends BaseIntegrationDef { /** The provider must be "weather" */ provider: "weather" = "weather"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Weather */ setup?: WeatherSetup; /** The arguments for Weather */ arguments?: WeatherGetArguments; } /** Weather Provider Card */ model WeatherProviderCard extends BaseProviderCard { provider: "weather" = "weather"; setup: WeatherSetup; methods: ProviderMethod[] = #[ #{ method: "get", description: "Get the current weather for a city", } ]; info: ProviderInfo = #{ url: "https://www.weatherapi.com/", docs: "https://www.weatherapi.com/docs/", icon: "https://www.weatherapi.com/favicon.ico", friendly_name: "Weather API", }; } /** Weather Get Output */ model WeatherGetOutput { /** The weather data for the specified location */ result: string; } ================================================ FILE: src/typespec/tools/wikipedia.tsp ================================================ import "../common"; using Common; namespace Tools; /** Arguments for Wikipedia Search */ model WikipediaSearchArguments { /** The search query string */ query: string; /** Maximum number of documents to load */ @minValue(1) @maxValue(10) load_max_docs: uint8 = 2; } /** Wikipedia integration definition */ model WikipediaIntegrationDef extends BaseIntegrationDef { /** The provider must be "wikipedia" */ provider: "wikipedia" = "wikipedia"; /** The specific method of the integration to call */ method?: string; /** The setup parameters for Wikipedia */ setup?: null = null; /** The arguments for Wikipedia Search */ arguments?: WikipediaSearchArguments; } /** Wikipedia Provider Card */ model WikipediaProviderCard extends BaseProviderCard { provider: "wikipedia" = "wikipedia"; setup: null = null; methods: ProviderMethod[] = #[ #{ method: "search", description: "Search for a page on Wikipedia", } ]; info: ProviderInfo = #{ url: "https://www.wikipedia.org/", docs: "https://www.wikipedia.org/wiki/Main_Page", icon: "https://www.wikipedia.org/static/favicon/wikipedia.ico", friendly_name: "Wikipedia", }; } /** Represents a document with text content */ model WikipediaDocument { // Using string for now since we need to represent langchain Document page_content: string; metadata: Record; } /** Wikipedia Search Output */ model WikipediaSearchOutput { /** The documents returned from the Wikipedia search */ documents: WikipediaDocument[]; } ================================================ FILE: src/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml ================================================ openapi: 3.0.0 info: title: Julep API termsOfService: https://julep.ai/terms contact: name: Julep AI url: https://julep.ai email: developers@julep.ai license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html description: Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. version: 1.0.0 externalDocs: url: https://docs.julep.ai description: Julep API documentation tags: [] paths: /agents: get: operationId: AgentsRoute_list description: List Agents (paginated) parameters: - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Agents.Agent' required: - items post: operationId: AgentsRoute_create description: Create a new Agent parameters: [] responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Agents.Agent' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Agents.CreateAgentRequest' /agents/models: get: operationId: AgentsRoute_listModels description: List all available models parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Agents.ListModelsResponse' /agents/{id}: post: operationId: AgentsRoute_createOrUpdate description: Create or update an Agent parameters: - $ref: '#/components/parameters/Agents.CreateOrUpdateAgentRequest.id' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Agents.Agent' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Agents.UpdateAgentRequest' put: operationId: AgentsRoute_update description: Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Agents.Agent' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Agents.UpdateAgentRequest' patch: operationId: AgentsRoute_patch description: Update an existing Agent by id (merges with existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Agents.Agent' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Agents.PatchAgentRequest' delete: operationId: AgentsRoute_delete description: Delete Agent by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' get: operationId: AgentsRoute_get description: Get an Agent by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Agents.Agent' /agents/{id}/docs: post: operationId: AgentDocsRoute_create description: Create a Doc for this Agent parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Docs.Doc' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Docs.CreateDocRequest' get: operationId: AgentDocsRoute_list description: List Docs owned by an Agent parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' - name: include_embeddings in: query required: false description: Whether to include embeddings in the response schema: type: boolean default: true explode: false responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Docs.Doc' required: - items delete: operationId: AgentDocsRoute_deleteBulk description: Bulk delete Docs owned by an Agent parameters: - name: id in: path required: true description: ID of the parent schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: type: array items: $ref: '#/components/schemas/Common.ResourceDeletedResponse' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Docs.BulkDeleteDocsRequest' /agents/{id}/docs/{child_id}: delete: operationId: AgentDocsRoute_delete description: Delete a Doc for this Agent parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /agents/{id}/search: post: operationId: AgentsDocsSearchRoute_search description: Search Docs owned by an Agent parameters: - name: id in: path required: true description: ID of the parent schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Docs.DocSearchResponse' requestBody: required: true content: application/json: schema: type: object properties: body: anyOf: - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' required: - body /agents/{id}/secrets: get: operationId: AgentSecretsRoute_list description: List secrets (paginated) parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Secrets.Secret' required: - items post: operationId: AgentSecretsRoute_create description: Create a new secret parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Secrets.Secret' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Secrets.CreateSecretRequest' /agents/{id}/secrets/{child_id}: put: operationId: AgentSecretsRoute_update description: Update an existing secret by id (overwrites existing values) parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be updated schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Secrets.Secret' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Secrets.UpdateSecretRequest' delete: operationId: AgentSecretsRoute_delete description: Delete a secret by id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /agents/{id}/tasks: get: operationId: TasksRoute_list description: List tasks (paginated) parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Tasks.Task' required: - items post: operationId: TasksRoute_create description: Create a new task parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Tasks.Task' requestBody: required: true content: application/yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' text/x-yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' text/yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' application/json: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' /agents/{id}/tasks/{child_id}: put: operationId: TasksRoute_update description: Update an existing task (overwrite existing values) parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be updated schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Tasks.Task' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Tasks.UpdateTaskRequest' patch: operationId: TasksRoute_patch description: Update an existing task (merges with existing values) parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be patched schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Tasks.Task' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Tasks.PatchTaskRequest' delete: operationId: TasksRoute_delete description: Delete a task by its id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /agents/{id}/tools: get: operationId: AgentToolsRoute_list description: List tools of the given agent parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Tools.Tool' required: - items post: operationId: AgentToolsRoute_create description: Create a new resource owned by the given parent parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: type: string enum: - Create a new tool for this agent requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Agents.CreateAgentRequest' /agents/{id}/tools/{child_id}: put: operationId: AgentToolsRoute_update description: Update a resource owned by the given parent using its id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be updated schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: type: string enum: - Update an existing tool (overwrite existing values) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Tools.UpdateToolRequest' patch: operationId: AgentToolsRoute_patch description: Patch a resource owned by the given parent using its id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be patched schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: type: string enum: - Update an existing tool (merges with existing values) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Tools.PatchToolRequest' delete: operationId: AgentToolsRoute_delete description: Delete an existing tool by id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /agents/{parent_id}/tasks/{id}: post: operationId: TasksCreateOrUpdateRoute_createOrUpdate description: Create or update a task parameters: - name: parent_id in: path required: true description: ID of the agent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Tasks.CreateOrUpdateTaskRequest.id' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Tasks.Task' requestBody: required: true content: application/yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' text/x-yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' text/yaml: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' application/json: schema: $ref: '#/components/schemas/Tasks.CreateTaskRequest' /docs/{id}: get: operationId: IndividualDocsRoute_get description: Get Doc by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' - name: include_embeddings in: query required: false description: Whether to include embeddings in the response schema: type: boolean default: true explode: false responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Docs.Doc' /embed: post: operationId: EmbedRoute_embed description: Embed a query for search parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Docs.EmbedQueryResponse' requestBody: required: true content: application/json: schema: type: object properties: body: anyOf: - $ref: '#/components/schemas/Docs.SingleEmbedQueryRequest' - $ref: '#/components/schemas/Docs.MultipleEmbedQueryRequest' required: - body /executions: post: operationId: ExecutionsRoute_resumeWithTaskToken description: Resume an execution with a task token parameters: - name: task_token in: query required: true description: A Task Token is a unique identifier for a specific Task Execution. schema: type: string explode: false responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Executions.Execution' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Executions.TaskTokenResumeExecutionRequest' description: Request to resume an execution with a task token security: - {} /executions/{id}: get: operationId: ExecutionsRoute_get description: Get an Execution by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Executions.Execution' put: operationId: ExecutionsRoute_update description: Update an existing Execution parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Executions.Execution' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Executions.UpdateExecutionRequest' /executions/{id}/status.stream: get: operationId: ExecutionStatusStreamRoute_stream description: Stream the status of an execution parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - name: next_token in: query required: true description: Next page token schema: type: string nullable: true default: null explode: false responses: '200': description: The request has succeeded. content: text/event-stream: schema: type: string /executions/{id}/transitions: get: operationId: ExecutionTransitionsRoute_list description: List the Transitions of an Execution by id parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: type: object properties: transitions: type: array items: $ref: '#/components/schemas/Executions.Transition' required: - transitions required: - items /executions/{id}/transitions.stream: get: operationId: ExecutionTransitionsStreamRoute_stream description: Stream events emitted by the given execution parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - name: next_token in: query required: true description: Next page token schema: type: string nullable: true default: null explode: false responses: '200': description: The request has succeeded. content: text/event-stream: schema: type: string /files: post: operationId: FilesRoute_create description: Create a new File parameters: [] responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Files.File' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Files.CreateFileRequest' /files/{id}: get: operationId: FilesRoute_get description: Get a File by its id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Files.File' /jobs/{id}: get: operationId: JobRoute_get description: Get the status of an existing Job by its id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Jobs.JobStatus' /projects: get: operationId: ProjectsRoute_list description: List Projects (paginated) parameters: - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Projects.Project' required: - items post: operationId: ProjectsRoute_create description: Create a new Project parameters: [] responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Projects.Project' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Projects.CreateProjectRequest' /projects/{id}: post: operationId: ProjectsRoute_createOrUpdate description: Create or update a Project parameters: - $ref: '#/components/parameters/Projects.CreateOrUpdateProjectRequest.id' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Projects.Project' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Projects.UpdateProjectRequest' put: operationId: ProjectsRoute_update description: Update an existing Project by id (overwrites existing values; use PATCH for merging instead) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Projects.Project' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Projects.UpdateProjectRequest' patch: operationId: ProjectsRoute_patch description: Update an existing Project by id (merges with existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Projects.Project' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Projects.PatchProjectRequest' delete: operationId: ProjectsRoute_delete description: Delete Project by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' get: operationId: ProjectsRoute_get description: Get a Project by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Projects.Project' /responses: post: operationId: ResponsesRoute_createResponse description: Creates a model response. Provide text or image inputs to generate text or JSON outputs. parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Responses.Response' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Responses.CreateResponse' /responses/{id}: get: operationId: ResponsesRoute_getResponse description: Get a response by id parameters: - name: id in: path required: true description: ID of the response schema: type: string - name: include in: query required: false description: Specify additional output data to include in the model response schema: type: array items: $ref: '#/components/schemas/Responses.Includable' explode: false responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Responses.Response' /secrets/{id}: get: operationId: DeveloperSecretsRoute_list description: List secrets (paginated) parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Secrets.Secret' required: - items post: operationId: DeveloperSecretsRoute_create description: Create a new secret parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Secrets.Secret' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Secrets.CreateSecretRequest' /secrets/{id}/{child_id}: put: operationId: DeveloperSecretsRoute_update description: Update an existing secret by id (overwrites existing values) parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be updated schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Secrets.Secret' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Secrets.UpdateSecretRequest' delete: operationId: DeveloperSecretsRoute_delete description: Delete a secret by id parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /sessions: get: operationId: SessionsRoute_list description: List sessions (paginated) parameters: - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Sessions.Session' required: - items post: operationId: SessionsRoute_create description: Create a new session parameters: [] responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Sessions.Session' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Sessions.CreateSessionRequest' /sessions/{id}: post: operationId: SessionsRoute_createOrUpdate description: Create or update a session parameters: - $ref: '#/components/parameters/Sessions.CreateOrUpdateSessionRequest.id' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Sessions.Session' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Sessions.CreateSessionRequest' put: operationId: SessionsRoute_update description: Update an existing session by its id (overwrites all existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Sessions.Session' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Sessions.UpdateSessionRequest' patch: operationId: SessionsRoute_patch description: Update an existing session by its id (merges with existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Sessions.Session' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Sessions.PatchSessionRequest' delete: operationId: SessionsRoute_delete description: Delete a session by its id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' get: operationId: SessionsRoute_get description: Get a session by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Sessions.Session' /sessions/{id}/chat: post: operationId: ChatRoute_generate description: Generate a response from the model parameters: - name: id in: path required: true description: The session ID schema: $ref: '#/components/schemas/Common.uuid' - name: x-custom-api-key in: header required: false description: Custom API key schema: type: string responses: '200': description: The request has succeeded. content: application/json: schema: anyOf: - $ref: '#/components/schemas/Chat.ChunkChatResponse' - $ref: '#/components/schemas/Chat.MessageChatResponse' text/event-stream: schema: $ref: '#/components/schemas/Chat.ChunkChatResponse' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Chat.ChatInput' description: Request to generate a response from the model /sessions/{id}/history: delete: operationId: HistoryRoute_delete description: Clear the history of a Session (resets the Session) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' get: operationId: HistoryRoute_history description: Get history of a Session parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Entries.History' /sessions/{id}/render: post: operationId: RenderRoute_render description: Render system prompt for the session parameters: - name: id in: path required: true description: The session ID schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Chat.RenderResponse' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Chat.ChatInput' description: Request to render the system prompt for the session /tasks/{id}: get: operationId: TasksGetRoute_get description: Get a task by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Tasks.Task' /tasks/{id}/executions: post: operationId: TaskExecutionsRoute_create description: Create an execution for the given task parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Executions.Execution' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Executions.CreateExecutionRequest' get: operationId: TaskExecutionsRoute_list description: List executions of the given task parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Executions.Execution' required: - items /users: get: operationId: UsersRoute_list description: List users (paginated) parameters: - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Users.User' required: - items post: operationId: UsersRoute_create description: Create a new user parameters: [] responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Users.User' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Users.CreateUserRequest' /users/{id}: post: operationId: UsersRoute_createOrUpdate description: Create or update a user parameters: - $ref: '#/components/parameters/Users.CreateOrUpdateUserRequest' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Users.User' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Users.CreateUserRequest' put: operationId: UsersRoute_update description: Update an existing user by id (overwrite existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Users.User' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Users.UpdateUserRequest' patch: operationId: UsersRoute_patch description: Update an existing user by id (merge with existing values) parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Users.User' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Users.PatchUserRequest' delete: operationId: UsersRoute_delete description: Delete a user by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' get: operationId: UsersRoute_get description: Get a user by id parameters: - name: id in: path required: true description: ID of the resource schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Users.User' /users/{id}/docs: post: operationId: UserDocsRoute_create description: Create a Doc for this User parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' responses: '201': description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: $ref: '#/components/schemas/Docs.Doc' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Docs.CreateDocRequest' get: operationId: UserDocsRoute_list description: List Docs owned by a User parameters: - name: id in: path required: true description: ID of parent schema: $ref: '#/components/schemas/Common.uuid' - $ref: '#/components/parameters/Common.PaginationOptions.limit' - $ref: '#/components/parameters/Common.PaginationOptions.offset' - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' - $ref: '#/components/parameters/Common.PaginationOptions.direction' - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' - name: include_embeddings in: query required: false description: Whether to include embeddings in the response schema: type: boolean default: true explode: false responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: items: type: array items: $ref: '#/components/schemas/Docs.Doc' required: - items delete: operationId: UserDocsRoute_deleteBulk description: Bulk delete Docs owned by a User parameters: - name: id in: path required: true description: ID of the parent schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: type: array items: $ref: '#/components/schemas/Common.ResourceDeletedResponse' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Docs.BulkDeleteDocsRequest' /users/{id}/docs/{child_id}: delete: operationId: UserDocsRoute_delete description: Delete a Doc for this User parameters: - name: id in: path required: true description: ID of parent resource schema: $ref: '#/components/schemas/Common.uuid' - name: child_id in: path required: true description: ID of the resource to be deleted schema: $ref: '#/components/schemas/Common.uuid' responses: '202': description: The request has been accepted for processing, but processing has not yet completed. content: application/json: schema: $ref: '#/components/schemas/Common.ResourceDeletedResponse' /users/{id}/search: post: operationId: UserDocsSearchRoute_search description: Search Docs owned by a User parameters: - name: id in: path required: true description: ID of the parent schema: $ref: '#/components/schemas/Common.uuid' responses: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/Docs.DocSearchResponse' requestBody: required: true content: application/json: schema: type: object properties: body: anyOf: - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' required: - body security: - ApiKeyAuth: [] - ApiKeyAuth_: [] components: parameters: Agents.CreateOrUpdateAgentRequest.id: name: id in: path required: true schema: $ref: '#/components/schemas/Common.uuid' Common.PaginationOptions.direction: name: direction in: query required: true description: Sort direction schema: type: string enum: - asc - desc default: asc explode: false Common.PaginationOptions.limit: name: limit in: query required: true description: Limit the number of items returned schema: $ref: '#/components/schemas/Common.limit' default: 100 explode: false Common.PaginationOptions.metadata_filter: name: metadata_filter in: query required: true description: Object to filter results by metadata schema: type: object additionalProperties: {} default: {} explode: false Common.PaginationOptions.offset: name: offset in: query required: true description: Offset the items returned schema: $ref: '#/components/schemas/Common.offset' default: 0 explode: false Common.PaginationOptions.sort_by: name: sort_by in: query required: true description: Sort by a field schema: type: string enum: - created_at - updated_at default: created_at explode: false Projects.CreateOrUpdateProjectRequest.id: name: id in: path required: true schema: $ref: '#/components/schemas/Common.uuid' Sessions.CreateOrUpdateSessionRequest.id: name: id in: path required: true schema: $ref: '#/components/schemas/Common.uuid' Tasks.CreateOrUpdateTaskRequest.id: name: id in: path required: true schema: $ref: '#/components/schemas/Common.uuid' Users.CreateOrUpdateUserRequest: name: id in: path required: true schema: $ref: '#/components/schemas/Common.uuid' schemas: Agents.Agent: type: object required: - id - created_at - updated_at - name - about - model - instructions - default_system_template properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Name of the agent project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the agent canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the agent about: type: string description: About the agent default: '' model: type: string description: Model name to use (gpt-4-turbo, gemini-nano etc) default: '' instructions: anyOf: - type: string - type: array items: type: string description: Instructions for the agent default: [] default_settings: type: object additionalProperties: {} description: Default settings for all sessions created by this agent default_system_template: type: string description: Default system template for all sessions created by this agent default: |- {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} Agents.CreateAgentRequest: type: object required: - name - about - model - instructions - default_system_template properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Name of the agent project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the agent canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the agent about: type: string description: About the agent default: '' model: type: string description: Model name to use (gpt-4-turbo, gemini-nano etc) default: '' instructions: anyOf: - type: string - type: array items: type: string description: Instructions for the agent default: [] default_settings: type: object additionalProperties: {} description: Default settings for all sessions created by this agent default_system_template: type: string description: Default system template for all sessions created by this agent default: |- {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} description: Payload for creating a agent (and associated documents) Agents.CreateOrUpdateAgentRequest: type: object required: - id - name - about - model - instructions - default_system_template properties: id: $ref: '#/components/schemas/Common.uuid' metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Name of the agent project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the agent canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the agent about: type: string description: About the agent default: '' model: type: string description: Model name to use (gpt-4-turbo, gemini-nano etc) default: '' instructions: anyOf: - type: string - type: array items: type: string description: Instructions for the agent default: [] default_settings: type: object additionalProperties: {} description: Default settings for all sessions created by this agent default_system_template: type: string description: Default system template for all sessions created by this agent default: |- {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} allOf: - $ref: '#/components/schemas/Agents.CreateAgentRequest' Agents.ListModelsResponse: type: object required: - models properties: models: type: array items: $ref: '#/components/schemas/Agents.ModelInfo' description: List of available models description: Response for the list models endpoint Agents.ModelInfo: type: object required: - id properties: id: type: string description: The ID/name of the model description: Model information returned by the model list endpoint Agents.PatchAgentRequest: type: object properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Name of the agent project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the agent canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the agent about: type: string description: About the agent default: '' model: type: string description: Model name to use (gpt-4-turbo, gemini-nano etc) default: '' instructions: anyOf: - type: string - type: array items: type: string description: Instructions for the agent default: [] default_settings: type: object additionalProperties: {} description: Default settings for all sessions created by this agent default_system_template: type: string description: Default system template for all sessions created by this agent default: |- {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} description: Payload for patching a agent Agents.UpdateAgentRequest: type: object required: - name - about - model - instructions - default_system_template properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Name of the agent project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the agent canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the agent about: type: string description: About the agent default: '' model: type: string description: Model name to use (gpt-4-turbo, gemini-nano etc) default: '' instructions: anyOf: - type: string - type: array items: type: string description: Instructions for the agent default: [] default_settings: type: object additionalProperties: {} description: Default settings for all sessions created by this agent default_system_template: type: string description: Default system template for all sessions created by this agent default: |- {%- if agent.name -%} You are {{agent.name}}.{{" "}} {%- endif -%} {%- if agent.about -%} About you: {{agent.about}}.{{" "}} {%- endif -%} {%- if user -%} You are talking to a user {%- if user.name -%}{{" "}} and their name is {{user.name}} {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} {%- endif -%} {%- endif -%} {{NEWLINE}} {%- if session.situation -%} Situation: {{session.situation}} {%- endif -%} {{NEWLINE+NEWLINE}} {%- if agent.instructions -%} Instructions:{{NEWLINE}} {%- if agent.instructions is string -%} {{agent.instructions}}{{NEWLINE}} {%- else -%} {%- for instruction in agent.instructions -%} - {{instruction}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{NEWLINE}} {%- endif -%} {%- if docs -%} Relevant documents:{{NEWLINE}} {%- for doc in docs -%} {{doc.title}}{{NEWLINE}} {%- if doc.content is string -%} {{doc.content}}{{NEWLINE}} {%- else -%} {%- for snippet in doc.content -%} {{snippet}}{{NEWLINE}} {%- endfor -%} {%- endif -%} {{"---"}} {%- endfor -%} {%- endif -%} description: Payload for updating a agent Chat.BaseChatOutput: type: object required: - index - finish_reason properties: index: type: integer format: uint32 finish_reason: allOf: - $ref: '#/components/schemas/Chat.FinishReason' description: The reason the model stopped generating tokens default: stop logprobs: allOf: - $ref: '#/components/schemas/Chat.LogProbResponse' description: The log probabilities of tokens tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' description: The tool calls generated by the model Chat.BaseChatResponse: type: object required: - jobs - docs - created_at - id properties: usage: allOf: - $ref: '#/components/schemas/Chat.CompletionUsage' description: Usage statistics for the completion request jobs: type: array items: $ref: '#/components/schemas/Common.uuid' description: Background job IDs that may have been spawned from this interaction. default: [] readOnly: true docs: type: array items: $ref: '#/components/schemas/Docs.DocReference' description: Documents referenced for this request (for citation purposes). default: [] readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true Chat.BaseTokenLogProb: type: object required: - token - logprob properties: token: type: string logprob: type: number format: float description: The log probability of the token bytes: type: array items: type: integer format: uint16 Chat.ChatInput: type: object required: - remember - recall - save - stream - stop - auto_run_tools - recall_tools properties: remember: type: boolean description: 'DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release)' default: false readOnly: true recall: type: boolean description: Whether previous memories and docs should be recalled or not default: true save: type: boolean description: Whether this interaction should be stored in the session history or not default: true model: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Identifier of the model to be used stream: type: boolean description: Indicates if the server should stream the response as it's generated default: false stop: type: array items: type: string maxItems: 4 description: Up to 4 sequences where the API will stop generating further tokens. default: [] seed: type: integer format: int16 minimum: -1 maximum: 1000 description: If specified, the system will make a best effort to sample deterministically for that particular seed value max_tokens: type: integer format: uint32 minimum: 1 description: The maximum number of tokens to generate in the chat completion logit_bias: type: object additionalProperties: $ref: '#/components/schemas/Common.logit_bias' description: Modify the likelihood of specified tokens appearing in the completion response_format: anyOf: - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' description: Response format (set to `json_object` to restrict output to JSON) agent: allOf: - $ref: '#/components/schemas/Common.uuid' description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) repetition_penalty: type: number format: float minimum: 0 maximum: 2 description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. length_penalty: type: number format: float minimum: 0 maximum: 2 description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. min_p: type: number format: float minimum: 0 maximum: 1 description: Minimum probability compared to leading token to be considered frequency_penalty: type: number format: float minimum: -2 maximum: 2 description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. presence_penalty: type: number format: float minimum: -2 maximum: 2 description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. temperature: type: number format: float minimum: 0 maximum: 5 description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. top_p: type: number format: float minimum: 0 maximum: 1 description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. metadata: type: object additionalProperties: {} auto_run_tools: type: boolean description: Whether to automatically run tools and send the results back to the model (requires tools or agents with tools). default: false recall_tools: type: boolean description: Whether to include tool requests and responses when recalling messages. default: true allOf: - $ref: '#/components/schemas/Chat.ChatInputData' Chat.ChatInputData: type: object required: - messages - tools properties: messages: type: array items: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - type: string - type: array items: type: string - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] minItems: 1 description: A list of new input messages comprising the conversation so far. tools: type: array items: $ref: '#/components/schemas/Tools.CreateToolRequest' nullable: true description: (Advanced) List of tools that are provided in addition to agent's default set of tools. default: null tool_choice: anyOf: - type: string enum: - auto - none - $ref: '#/components/schemas/Tools.NamedToolChoice' description: Can be one of existing tools given to the agent earlier or the ones provided in this request. Chat.ChatOutputChunk: type: object required: - delta properties: delta: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - type: string - type: array items: type: string - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] description: The message generated by the model allOf: - $ref: '#/components/schemas/Chat.BaseChatOutput' description: Streaming chat completion output Chat.ChunkChatResponse: type: object required: - choices properties: choices: type: array items: $ref: '#/components/schemas/Chat.ChatOutputChunk' description: The deltas generated by the model allOf: - $ref: '#/components/schemas/Chat.BaseChatResponse' Chat.CompletionUsage: type: object properties: completion_tokens: type: integer format: uint32 description: Number of tokens in the generated completion readOnly: true prompt_tokens: type: integer format: uint32 description: Number of tokens in the prompt readOnly: true total_tokens: type: integer format: uint32 description: Total number of tokens used in the request (prompt + completion) readOnly: true description: Usage statistics for the completion request Chat.FinishReason: type: string enum: - stop - length - content_filter - tool_calls description: |- The reason the model stopped generating tokens. This will be `stop` if the model hit a natural stop point or a provided stop sequence, `length` if the maximum number of tokens specified in the request was reached, `content_filter` if content was omitted due to a flag from our content filters, `tool_calls` if the model called a tool. Chat.LogProbResponse: type: object required: - content properties: content: type: array items: $ref: '#/components/schemas/Chat.TokenLogProb' nullable: true description: The log probabilities of the tokens Chat.MessageChatResponse: type: object required: - choices properties: choices: type: array items: anyOf: - $ref: '#/components/schemas/Chat.SingleChatOutput' - $ref: '#/components/schemas/Chat.MultipleChatOutput' description: The deltas generated by the model allOf: - $ref: '#/components/schemas/Chat.BaseChatResponse' Chat.MultipleChatOutput: type: object required: - messages properties: messages: type: array items: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - type: string - type: array items: type: string - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true minItems: 1 readOnly: true allOf: - $ref: '#/components/schemas/Chat.BaseChatOutput' description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. Chat.RenderResponse: type: object required: - docs properties: docs: type: array items: $ref: '#/components/schemas/Docs.DocReference' description: Documents referenced for this request (for citation purposes). default: [] readOnly: true allOf: - $ref: '#/components/schemas/Chat.ChatInputData' Chat.SchemaCompletionResponseFormat: type: object required: - type - json_schema properties: type: type: string enum: - json_schema description: The format of the response default: json_schema json_schema: type: object additionalProperties: {} description: The schema of the response Chat.SimpleCompletionResponseFormat: type: object required: - type properties: type: type: string enum: - text - json_object description: The format of the response default: text Chat.SingleChatOutput: type: object required: - message properties: message: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - type: string - type: array items: type: string - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true allOf: - $ref: '#/components/schemas/Chat.BaseChatOutput' description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. Chat.TokenLogProb: type: object required: - top_logprobs properties: top_logprobs: type: array items: $ref: '#/components/schemas/Chat.BaseTokenLogProb' minItems: 1 description: The log probabilities of the tokens readOnly: true allOf: - $ref: '#/components/schemas/Chat.BaseTokenLogProb' Common.JinjaTemplate: type: string description: A valid jinja template. Common.PyExpression: type: string description: A simple python expression compatible with SimpleEval. Common.ResourceDeletedResponse: type: object required: - id - deleted_at - jobs properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' description: ID of deleted resource deleted_at: type: string format: date-time description: When this resource was deleted as UTC date-time readOnly: true jobs: type: array items: $ref: '#/components/schemas/Common.uuid' description: IDs (if any) of jobs created as part of this request default: [] readOnly: true Common.canonicalName: type: string minLength: 1 maxLength: 255 pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ description: |- For canonical names (machine-friendly identifiers) Must start with a letter and can only contain letters, numbers, and underscores Common.content: type: string maxLength: 30000 description: Contents of a document Common.displayName: type: string minLength: 1 maxLength: 255 description: |- For display names Must be between 1 and 255 characters Common.identifierSafeUnicode: type: string maxLength: 120 pattern: ^[\p{L}\p{Nl}\p{Pattern_Syntax}\p{Pattern_White_Space}]+[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Pattern_Syntax}\p{Pattern_White_Space}]*$ description: |- For Unicode character safety See: https://unicode.org/reports/tr31/ See: https://www.unicode.org/reports/tr39/#Identifier_Characters Common.limit: type: integer format: uint16 minimum: 1 maximum: 1000 exclusiveMaximum: true description: Limit the number of results Common.logit_bias: type: number format: float minimum: -100 maximum: 100 Common.mimeType: type: string maxLength: 120 pattern: ^(application|audio|font|example|image|message|model|multipart|text|video|x-(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+))\/([0-9A-Za-z!#$%&'*+.^_`|~-]+)$ description: Valid mime types Common.offset: type: integer format: uint32 minimum: 0 description: Offset to apply to the results Common.stepLabel: type: string maxLength: 120 pattern: ^[^0-9]|^[0-9]+[^0-9].*$ description: A valid step label Common.uuid: type: string format: uuid Common.validPythonIdentifier: type: string maxLength: 40 pattern: ^[^\W0-9]\w*$ description: Valid python identifier names Docs.BulkDeleteDocsRequest: type: object required: - metadata_filter - delete_all properties: metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} delete_all: type: boolean description: Delete all docs default: false Docs.CreateDocRequest: type: object required: - title - content - embed_instruction properties: metadata: type: object additionalProperties: {} title: type: string maxLength: 800 description: Title describing what this document contains content: anyOf: - $ref: '#/components/schemas/Common.content' - type: array items: $ref: '#/components/schemas/Common.content' description: Contents of the document. Each string is limited to 30k characters. embed_instruction: type: string nullable: true description: Instruction for the embedding model. default: null description: Payload for creating a doc Docs.Doc: type: object required: - id - created_at - title - content - embeddings properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true title: type: string maxLength: 800 description: Title describing what this document contains content: anyOf: - type: string - type: array items: type: string description: Contents of the document embeddings: anyOf: - type: array items: type: number format: float - type: array items: type: array items: type: number format: float nullable: true description: Embeddings for the document default: null readOnly: true modality: type: string description: Modality of the document readOnly: true language: type: string description: Language of the document readOnly: true embedding_model: type: string description: Embedding model used for the document readOnly: true embedding_dimensions: type: integer format: uint16 description: Dimensions of the embedding model readOnly: true Docs.DocOwner: type: object required: - id - role properties: id: anyOf: - allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true - allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true role: type: string enum: - user - agent Docs.DocReference: type: object required: - owner - id - snippet - distance properties: metadata: type: object additionalProperties: {} owner: allOf: - $ref: '#/components/schemas/Docs.DocOwner' description: The owner of this document. id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true description: ID of the document title: type: string snippet: $ref: '#/components/schemas/Docs.Snippet' distance: type: number nullable: true default: null Docs.DocSearchResponse: type: object required: - docs - time properties: docs: type: array items: $ref: '#/components/schemas/Docs.DocReference' description: The documents that were found time: type: number minimum: 0 exclusiveMinimum: true description: The time taken to search in seconds Docs.EmbedQueryResponse: type: object required: - vectors properties: vectors: type: array items: type: array items: type: number description: The embedded vectors Docs.HybridDocSearchRequest: type: object required: - limit - metadata_filter - include_embeddings - text - lang - trigram_similarity_threshold - vector - confidence - alpha - k_multiplier properties: limit: type: integer format: uint16 minimum: 1 maximum: 50 description: The limit of documents to return default: 10 metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} include_embeddings: type: boolean description: Whether to include embeddings in the response default: true text: type: string description: Text to use in the search lang: type: string description: The language to be used for text search. Support for other languages coming soon. default: en-US trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. default: null vector: type: array items: type: number description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 alpha: type: number minimum: 0 maximum: 1 description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; default: 0.5 k_multiplier: type: integer format: int8 minimum: 1 maximum: 10 description: The k_multiplier to control how many intermediate results to fetch before final scoring default: 5 Docs.MultipleEmbedQueryRequest: type: object required: - text - embed_instruction properties: text: type: array items: type: string minItems: 1 maxItems: 100 description: Texts to embed embed_instruction: type: string description: Instruction for the embedding model. default: '' Docs.SingleEmbedQueryRequest: type: object required: - text - embed_instruction properties: text: type: string description: Text to embed embed_instruction: type: string description: Instruction for the embedding model. default: '' Docs.Snippet: type: object required: - index - content properties: index: type: integer format: uint16 content: type: string embedding: type: array items: type: number Docs.TextOnlyDocSearchRequest: type: object required: - limit - metadata_filter - include_embeddings - text - lang - trigram_similarity_threshold properties: limit: type: integer format: uint16 minimum: 1 maximum: 50 description: The limit of documents to return default: 10 metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} include_embeddings: type: boolean description: Whether to include embeddings in the response default: true text: type: string description: Text to use in the search lang: type: string description: The language to be used for text search. Support for other languages coming soon. default: en-US trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: Trigram similarity threshold for fuzzy matching. Set to null to disable trigram search. default: null Docs.VectorDocSearchRequest: type: object required: - limit - metadata_filter - include_embeddings - vector - confidence properties: limit: type: integer format: uint16 minimum: 1 maximum: 50 description: The limit of documents to return default: 10 metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} include_embeddings: type: boolean description: Whether to include embeddings in the response default: true vector: type: array items: type: number description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 Entries.BaseEntry: type: object required: - role - name - content - source - tokenizer - token_count - model - timestamp properties: role: $ref: '#/components/schemas/Entries.ChatMLRole' name: type: string nullable: true default: null content: anyOf: - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part - $ref: '#/components/schemas/Tools.Tool' - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' - type: string - $ref: '#/components/schemas/Tools.ToolResponse' - type: array items: anyOf: - type: array items: anyOf: - type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: type: string type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: type: string description: Anthropic image content part - $ref: '#/components/schemas/Tools.Tool' - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' - type: string - $ref: '#/components/schemas/Tools.ToolResponse' source: type: string enum: - api_request - api_response - tool_request - tool_response - internal - summarizer - meta tokenizer: type: string token_count: type: integer format: uint16 model: type: string default: gpt-4o-mini tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: null tool_call_id: type: string nullable: true description: The tool call id of the tool call this message is a response to default: null timestamp: type: string format: date-time description: This is the time that this event refers to. Entries.ChatMLRole: type: string enum: - user - assistant - system - tool description: ChatML role (system|assistant|user|tool) Entries.Entry: type: object required: - created_at - id properties: created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true allOf: - $ref: '#/components/schemas/Entries.BaseEntry' Entries.History: type: object required: - entries - relations - session_id - created_at properties: entries: type: array items: $ref: '#/components/schemas/Entries.Entry' relations: type: array items: $ref: '#/components/schemas/Entries.Relation' session_id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true Entries.ImageDetail: type: string enum: - low - high - auto description: Image detail level Entries.Relation: type: object required: - head - relation - tail properties: head: $ref: '#/components/schemas/Common.uuid' relation: type: string tail: $ref: '#/components/schemas/Common.uuid' Executions.CreateExecutionRequest: type: object required: - input properties: input: type: object additionalProperties: {} description: The input to the execution output: description: The output of the execution if it succeeded error: type: string description: The error of the execution if it failed transition_count: type: integer format: uint8 description: The number of transitions in this execution metadata: type: object additionalProperties: {} description: Payload for creating an execution Executions.Execution: type: object required: - task_id - status - input - created_at - updated_at - id properties: task_id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true description: The ID of the task that the execution is running status: type: string enum: - queued - starting - running - awaiting_input - succeeded - failed - cancelled description: The status of the execution readOnly: true input: type: object additionalProperties: {} description: The input to the execution output: description: The output of the execution if it succeeded error: type: string description: The error of the execution if it failed transition_count: type: integer format: uint8 description: The number of transitions in this execution created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true metadata: type: object additionalProperties: {} id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true Executions.ResumeExecutionRequest: type: object required: - status properties: status: type: string enum: - running default: running input: type: object additionalProperties: {} description: The input to resume the execution with allOf: - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' Executions.StopExecutionRequest: type: object required: - status - reason properties: status: type: string enum: - cancelled default: cancelled reason: type: string nullable: true description: The reason for stopping the execution default: null allOf: - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' Executions.TaskTokenResumeExecutionRequest: type: object required: - status properties: status: type: string enum: - running default: running input: type: object additionalProperties: {} description: The input to resume the execution with Executions.Transition: type: object required: - execution_id - current - next - id properties: execution_id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true current: allOf: - $ref: '#/components/schemas/Executions.TransitionTarget' readOnly: true next: type: object allOf: - $ref: '#/components/schemas/Executions.TransitionTarget' nullable: true readOnly: true step_label: allOf: - $ref: '#/components/schemas/Common.stepLabel' readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} allOf: - $ref: '#/components/schemas/Executions.TransitionEvent' Executions.TransitionEvent: type: object required: - type - output - created_at - updated_at properties: type: type: string enum: - init - init_branch - finish - finish_branch - wait - resume - error - step - cancelled readOnly: true output: readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true Executions.TransitionTarget: type: object required: - workflow - step - scope_id properties: workflow: $ref: '#/components/schemas/Common.identifierSafeUnicode' step: type: integer format: uint16 scope_id: $ref: '#/components/schemas/Common.uuid' Executions.UpdateExecutionRequest: type: object required: - status properties: status: type: string enum: - queued - starting - running - awaiting_input - succeeded - failed - cancelled discriminator: propertyName: status mapping: cancelled: '#/components/schemas/Executions.StopExecutionRequest' running: '#/components/schemas/Executions.ResumeExecutionRequest' Files.CreateFileRequest: type: object required: - name - description - mime_type - content properties: name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the file description: type: string description: Description of the file default: '' mime_type: oneOf: - $ref: '#/components/schemas/Common.mimeType' nullable: true description: MIME type of the file default: null content: type: string description: Base64 encoded content of the file project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the file description: Payload for creating a file Files.File: type: object required: - id - created_at - name - description - mime_type - content - size - hash properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the file description: type: string description: Description of the file default: '' mime_type: oneOf: - $ref: '#/components/schemas/Common.mimeType' nullable: true description: MIME type of the file default: null content: type: string description: Base64 encoded content of the file project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the file size: type: integer format: uint64 minimum: 1 description: Size of the file in bytes readOnly: true hash: type: string description: Hash of the file readOnly: true InputMessageContentList: type: array items: anyOf: - $ref: '#/components/schemas/Responses.InputText' - $ref: '#/components/schemas/Responses.InputImage' - $ref: '#/components/schemas/Responses.InputFile' Jobs.JobState: type: string enum: - pending - in_progress - retrying - succeeded - aborted - failed - unknown description: 'Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed)' Jobs.JobStatus: type: object required: - id - created_at - updated_at - name - reason - has_progress - progress - state properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the job default: '' reason: type: string description: Reason for the current state of the job default: '' has_progress: type: boolean description: Whether this Job supports progress updates default: false progress: type: number format: float minimum: 0 maximum: 100 description: Progress percentage default: 0 state: allOf: - $ref: '#/components/schemas/Jobs.JobState' description: Current state of the job default: pending Projects.CreateOrUpdateProjectRequest: type: object required: - id - name properties: id: $ref: '#/components/schemas/Common.uuid' metadata: type: object additionalProperties: {} canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the project (unique per developer) name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Display name of the project allOf: - $ref: '#/components/schemas/Projects.CreateProjectRequest' Projects.CreateProjectRequest: type: object required: - name properties: metadata: type: object additionalProperties: {} canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the project (unique per developer) name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Display name of the project description: Payload for creating a project Projects.PatchProjectRequest: type: object properties: metadata: type: object additionalProperties: {} canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the project (unique per developer) name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Display name of the project description: Payload for patching a project Projects.Project: type: object required: - id - created_at - updated_at - name properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the project (unique per developer) name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Display name of the project description: Project model Projects.UpdateProjectRequest: type: object required: - name properties: metadata: type: object additionalProperties: {} canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Canonical name of the project (unique per developer) name: allOf: - $ref: '#/components/schemas/Common.displayName' description: Display name of the project description: Payload for updating a project Responses.BaseTool: type: object required: - type properties: type: type: string Responses.Click: type: object required: - type - button - x - y properties: type: type: string enum: - click description: Specifies the event type. For a click action, this property is always set to `click`. default: click button: type: string enum: - left - right - wheel - back - forward description: Indicates which mouse button was pressed during the click. One of `left`, `right`, `wheel`, `back`, or `forward`. x: type: integer format: int32 description: The x-coordinate where the click occurred. y: type: integer format: int32 description: The y-coordinate where the click occurred. Responses.ComputerScreenshotImage: type: object required: - type properties: type: type: string enum: - computer_screenshot description: Specifies the event type. For a computer screenshot, this property is always set to `computer_screenshot`. image_url: type: string description: The URL of the screenshot image. file_id: type: string description: The identifier of an uploaded file that contains the screenshot. Responses.ComputerTool: type: object required: - type - display_width - display_height - environment properties: type: type: string enum: - computer_use_preview description: The type of the computer use tool. Always `computer_use_preview`. display_width: type: number format: float description: The width of the computer display. display_height: type: number format: float description: The height of the computer display. environment: type: string enum: - mac - windows - ubuntu - browser description: The type of computer environment to control. allOf: - $ref: '#/components/schemas/Responses.BaseTool' Responses.ComputerToolCall: type: object required: - type - id - call_id - action - pending_safety_checks - status properties: type: type: string enum: - computer_call description: The type of the computer call. Always `computer_call`. id: type: string description: The unique ID of the computer call. call_id: type: string description: An identifier used when responding to the tool call with output. action: anyOf: - $ref: '#/components/schemas/Responses.Click' - $ref: '#/components/schemas/Responses.DoubleClick' - $ref: '#/components/schemas/Responses.Drag' - $ref: '#/components/schemas/Responses.KeyPress' - $ref: '#/components/schemas/Responses.Move' - $ref: '#/components/schemas/Responses.Screenshot' - $ref: '#/components/schemas/Responses.Scroll' - $ref: '#/components/schemas/Responses.Type' - $ref: '#/components/schemas/Responses.Wait' description: The action to perform. pending_safety_checks: type: array items: $ref: '#/components/schemas/Responses.ComputerToolCallSafetyCheck' description: The pending safety checks for the computer call. status: type: string enum: - in_progress - completed - incomplete description: The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. Responses.ComputerToolCallOutput: type: object required: - type - call_id - output properties: type: type: string enum: - computer_call_output description: The type of the computer tool call output. Always `computer_call_output`. id: type: string description: The ID of the computer tool call output. call_id: type: string description: The ID of the computer tool call that produced the output. acknowledged_safety_checks: type: array items: $ref: '#/components/schemas/Responses.ComputerToolCallSafetyCheck' description: The safety checks reported by the API that have been acknowledged by the developer. output: allOf: - $ref: '#/components/schemas/Responses.ComputerScreenshotImage' description: The output screenshot image. status: allOf: - $ref: '#/components/schemas/Responses.MessageStatus' description: The status of the message input. One of `in_progress`, `completed`, or `incomplete`. Populated when input items are returned via API. Responses.ComputerToolCallOutputResource: type: object required: - id properties: id: type: string description: The unique ID of the computer call tool output. allOf: - $ref: '#/components/schemas/Responses.ComputerToolCallOutput' Responses.ComputerToolCallSafetyCheck: type: object required: - id - code - message properties: id: type: string description: The ID of the pending safety check. code: type: string description: The type of the pending safety check. message: type: string description: Details about the pending safety check. Responses.Coordinate: type: object required: - x - y properties: x: type: integer format: int32 description: The x-coordinate. y: type: integer format: int32 description: The y-coordinate. Responses.CreateResponse: type: object required: - model - input properties: model: type: string input: anyOf: - type: string - type: array items: $ref: '#/components/schemas/Responses.InputItem' include: type: array items: $ref: '#/components/schemas/Responses.Includable' parallel_tool_calls: type: boolean default: true store: type: boolean default: true stream: type: boolean default: false max_tokens: type: integer format: int32 temperature: type: number default: 1 top_p: type: number default: 1 n: type: integer format: int32 stop: anyOf: - type: string - type: array items: type: string presence_penalty: type: number frequency_penalty: type: number logit_bias: type: object additionalProperties: {} user: type: string instructions: type: string previous_response_id: type: string reasoning: $ref: '#/components/schemas/Responses.Reasoning' text: type: object properties: format: anyOf: - $ref: '#/components/schemas/Responses.ResponseFormatText' - $ref: '#/components/schemas/Responses.TextResponseFormatJsonSchema' - $ref: '#/components/schemas/Responses.ResponseFormatJsonObject' required: - format tool_choice: anyOf: - type: string enum: - auto - none - type: object properties: type: type: string enum: - function function: type: object properties: name: type: string required: - name required: - type - function tools: type: array items: $ref: '#/components/schemas/Responses.Tool' truncation: type: string enum: - disabled - auto metadata: type: object additionalProperties: {} Responses.DoubleClick: type: object required: - type - x - y properties: type: type: string enum: - double_click description: Specifies the event type. For a double click action, this property is always set to `double_click`. default: double_click x: type: integer format: int32 description: The x-coordinate where the double click occurred. y: type: integer format: int32 description: The y-coordinate where the double click occurred. Responses.Drag: type: object required: - type - path properties: type: type: string enum: - drag description: Specifies the event type. For a drag action, this property is always set to `drag`. default: drag path: type: array items: $ref: '#/components/schemas/Responses.Coordinate' description: An array of coordinates representing the path of the drag action. Responses.EasyInputMessage: type: object required: - role - content - type properties: role: allOf: - $ref: '#/components/schemas/Responses.MessageRole' description: The role of the message input. One of `user`, `assistant`, `system`, or `developer`. content: anyOf: - type: string - $ref: '#/components/schemas/InputMessageContentList' description: Text, image, or audio input to the model, used to generate a response. Can also contain previous assistant responses. type: type: string enum: - message description: The type of the message input. Always `message`. Responses.FileCitation: type: object required: - type - index - file_id properties: type: type: string enum: - file_citation description: The type of the file citation. Always `file_citation`. index: type: integer format: int32 description: The index of the file in the list of files. file_id: type: string description: The ID of the file. Responses.FilePath: type: object required: - type - file_id - index properties: type: type: string enum: - file_path description: The type of the file path. Always `file_path`. file_id: type: string description: The ID of the file. index: type: integer format: int32 description: The index of the file in the list of files. Responses.FileSearchTool: type: object required: - type - vector_store_ids properties: type: type: string enum: - file_search filters: {} max_num_results: type: integer format: int32 ranking_options: type: object properties: ranker: type: string enum: - auto score_threshold: type: number vector_store_ids: type: array items: type: string allOf: - $ref: '#/components/schemas/Responses.BaseTool' Responses.FileSearchToolCall: type: object required: - id - type - status - queries properties: id: type: string description: The unique ID of the file search tool call. type: type: string enum: - file_search_call description: The type of the file search tool call. Always `file_search_call`. status: type: string enum: - in_progress - searching - completed - incomplete - failed description: The status of the file search tool call. One of `in_progress`, `searching`, `incomplete` or `failed` queries: type: array items: type: string description: The queries used to search for files. results: type: array items: type: object properties: file_id: type: string description: The unique ID of the file. text: type: string description: The text that was retrieved from the file. filename: type: string description: The name of the file. attributes: allOf: - $ref: '#/components/schemas/Responses.VectorStoreFileAttributes' description: The attributes of the file. score: type: number format: float description: The relevance score of the file - a value between 0 and 1. required: - file_id - text - filename - attributes - score description: The results of the file search tool call. Responses.FunctionTool: type: object required: - type - name - parameters properties: type: type: string enum: - function name: type: string description: type: string parameters: type: object additionalProperties: {} strict: type: boolean allOf: - $ref: '#/components/schemas/Responses.BaseTool' Responses.FunctionToolCall: type: object required: - id - type - call_id - name - arguments properties: id: type: string description: The unique ID of the function tool call. type: type: string enum: - function_call description: The type of the function tool call. Always `function_call`. call_id: type: string description: The unique ID of the function tool call generated by the model. name: type: string description: The name of the function to run. arguments: type: string description: A JSON string of the arguments to pass to the function. status: type: string enum: - in_progress - completed - incomplete description: The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. Responses.FunctionToolCallOutput: type: object required: - type - call_id - output properties: id: type: string description: The unique ID of the function tool call output. Populated when this item is returned via API. type: type: string enum: - function_call_output description: The type of the function tool call output. Always `function_call_output`. call_id: type: string description: The unique ID of the function tool call generated by the model. output: type: string description: A JSON string of the output of the function tool call. status: type: string enum: - in_progress - completed - incomplete description: The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. Responses.FunctionToolCallOutputResource: type: object properties: id: type: string description: The unique ID of the function call tool output. allOf: - $ref: '#/components/schemas/Responses.FunctionToolCallOutput' Responses.Includable: type: string enum: - file_search_call.results - message.input_image.image_url - computer_call_output.output.image_url Responses.InputFile: type: object required: - type properties: type: type: string enum: - input_file description: The type of the input item. Always `input_file`. file_id: type: string description: The ID of the file to be sent to the model. filename: type: string description: The name of the file to be sent to the model. file_data: type: string description: The content of the file to be sent to the model. description: A file input to the model. Responses.InputImage: type: object required: - type - detail properties: type: type: string enum: - input_image description: The type of the input item. Always `input_image`. image_url: type: string description: The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL. file_id: type: string description: The ID of the file to be sent to the model. detail: type: string enum: - high - low - auto description: The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`. Defaults to `auto`. default: auto Responses.InputItem: anyOf: - $ref: '#/components/schemas/Responses.EasyInputMessage' - $ref: '#/components/schemas/Responses.Item' - $ref: '#/components/schemas/Responses.ItemReference' Responses.InputMessage: type: object required: - type - role - status - content properties: type: type: string enum: - message role: $ref: '#/components/schemas/Responses.MessageRole' status: $ref: '#/components/schemas/Responses.MessageStatus' content: $ref: '#/components/schemas/InputMessageContentList' Responses.InputMessageResource: type: object required: - id properties: id: type: string allOf: - $ref: '#/components/schemas/Responses.InputMessage' Responses.InputText: type: object required: - type - text properties: type: type: string enum: - input_text description: The type of the input item. Always `input_text`. text: type: string description: The text input to the model. Responses.Item: type: object required: - type properties: type: type: string description: An item representing part of the context for the response to be generated by the model. Can contain text, images, and audio inputs, as well as previous assistant responses and tool call outputs. Responses.ItemReference: anyOf: - $ref: '#/components/schemas/Responses.InputMessageResource' - $ref: '#/components/schemas/Responses.OutputMessage' - $ref: '#/components/schemas/Responses.FileSearchToolCall' - $ref: '#/components/schemas/Responses.ComputerToolCall' - $ref: '#/components/schemas/Responses.ComputerToolCallOutputResource' - $ref: '#/components/schemas/Responses.WebSearchToolCall' - $ref: '#/components/schemas/Responses.FunctionToolCall' - $ref: '#/components/schemas/Responses.FunctionToolCallOutputResource' description: Content item used to generate a response. Responses.KeyPress: type: object required: - type - keys properties: type: type: string enum: - keypress description: Specifies the event type. For a keypress action, this property is always set to `keypress`. default: keypress keys: type: array items: type: string description: The combination of keys the model is requesting to be pressed. This is an array of strings, each representing a key. Responses.MessageRole: type: string enum: - user - assistant - system - developer Responses.MessageStatus: type: string enum: - in_progress - completed - incomplete Responses.Move: type: object required: - type - x - y properties: type: type: string enum: - move description: Specifies the event type. For a move action, this property is always set to `move`. default: move x: type: integer format: int32 description: The x-coordinate to move to. y: type: integer format: int32 description: The y-coordinate to move to. Responses.OutputItem: anyOf: - $ref: '#/components/schemas/Responses.OutputMessage' - $ref: '#/components/schemas/Responses.FileSearchToolCall' - $ref: '#/components/schemas/Responses.FunctionToolCall' - $ref: '#/components/schemas/Responses.WebSearchToolCall' - $ref: '#/components/schemas/Responses.ComputerToolCall' - $ref: '#/components/schemas/Responses.ReasoningItem' Responses.OutputMessage: type: object required: - id - type - role - status - content properties: id: type: string type: type: string enum: - message role: $ref: '#/components/schemas/Responses.MessageRole' status: $ref: '#/components/schemas/Responses.MessageStatus' content: type: array items: anyOf: - $ref: '#/components/schemas/Responses.OutputText' - $ref: '#/components/schemas/Responses.Refusal' Responses.OutputText: type: object required: - type - text - annotations properties: type: type: string enum: - output_text description: The type of the output text. Always `output_text`. text: type: string description: The text output from the model. annotations: type: array items: anyOf: - $ref: '#/components/schemas/Responses.FileCitation' - $ref: '#/components/schemas/Responses.UrlCitation' - $ref: '#/components/schemas/Responses.FilePath' description: The annotations of the text output. Responses.Reasoning: type: object required: - effort properties: effort: $ref: '#/components/schemas/Responses.ReasoningEffort' generate_summary: type: string enum: - concise - detailed description: A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. One of `concise` or `detailed`. description: Reasoning configuration options for o-series models. Responses.ReasoningContent: type: object required: - type - text properties: type: type: string enum: - reasoning_summary description: The type of the object. Always `text`. text: type: string description: A short summary of the reasoning used by the model when generating the response. Responses.ReasoningEffort: type: string enum: - low - medium - high description: Constraint effort on reasoning models. Responses.ReasoningItem: type: object required: - type - id - content properties: type: type: string enum: - reasoning description: The type of the object. Always `reasoning`. id: type: string description: The unique identifier of the reasoning content. content: type: array items: $ref: '#/components/schemas/Responses.ReasoningContent' description: Reasoning text contents. status: type: string enum: - in_progress - completed - incomplete description: The status of the item. One of `in_progress`, `completed`, or `incomplete`. Populated when items are returned via API. Responses.Refusal: type: object required: - type - refusal properties: type: type: string enum: - refusal description: The type of the refusal. Always `refusal`. refusal: type: string description: The refusal explanation from the model. Responses.Response: type: object required: - id - object - created_at - status - model - output - parallel_tool_calls - temperature - tool_choice - tools - top_p - truncation - usage - metadata properties: id: type: string object: type: string enum: - response created_at: type: integer format: int32 status: $ref: '#/components/schemas/Responses.ResponseStatus' error: $ref: '#/components/schemas/Responses.ResponseError' incomplete_details: type: object properties: reason: type: string enum: - max_output_tokens - content_filter required: - reason instructions: type: string max_output_tokens: type: integer format: int32 model: type: string output: type: array items: $ref: '#/components/schemas/Responses.OutputItem' parallel_tool_calls: type: boolean default: true previous_response_id: type: string reasoning: $ref: '#/components/schemas/Responses.Reasoning' store: type: boolean default: true temperature: type: number default: 1 text: type: object properties: format: anyOf: - $ref: '#/components/schemas/Responses.ResponseFormatText' - $ref: '#/components/schemas/Responses.TextResponseFormatJsonSchema' - $ref: '#/components/schemas/Responses.ResponseFormatJsonObject' required: - format tool_choice: anyOf: - $ref: '#/components/schemas/Responses.ToolChoiceOptions' - $ref: '#/components/schemas/Responses.ToolChoiceTypes' - $ref: '#/components/schemas/Responses.ToolChoiceFunction' tools: type: array items: $ref: '#/components/schemas/Responses.Tool' top_p: type: number default: 1 truncation: type: string enum: - disabled - auto usage: $ref: '#/components/schemas/Responses.ResponseUsage' user: type: string metadata: type: object additionalProperties: {} Responses.ResponseError: type: object required: - message - type properties: message: type: string type: type: string param: type: string code: type: string Responses.ResponseFormatJsonObject: type: object required: - type properties: type: type: string enum: - json_object description: The type of response format being defined. Always `json_object`. description: |- JSON object response format. An older method of generating JSON responses. Using `json_schema` is recommended for models that support it. Note that the model will not generate JSON without a system or user message instructing it to do so. Responses.ResponseFormatText: type: object required: - type properties: type: type: string enum: - text description: The type of response format being defined. Always `text`. description: Default response format. Used to generate text responses. Responses.ResponseStatus: type: string enum: - completed - failed - in_progress - incomplete Responses.ResponseUsage: type: object required: - input_tokens - input_tokens_details - output_tokens - output_tokens_details - total_tokens properties: input_tokens: type: integer format: int32 input_tokens_details: type: object properties: cached_tokens: type: integer format: int32 required: - cached_tokens output_tokens: type: integer format: int32 output_tokens_details: type: object properties: reasoning_tokens: type: integer format: int32 required: - reasoning_tokens total_tokens: type: integer format: int32 Responses.Screenshot: type: object required: - type properties: type: type: string enum: - screenshot description: Specifies the event type. For a screenshot action, this property is always set to `screenshot`. default: screenshot Responses.Scroll: type: object required: - type - x - y - scroll_x - scroll_y properties: type: type: string enum: - scroll description: Specifies the event type. For a scroll action, this property is always set to `scroll`. default: scroll x: type: integer format: int32 description: The x-coordinate where the scroll occurred. y: type: integer format: int32 description: The y-coordinate where the scroll occurred. scroll_x: type: integer format: int32 description: The horizontal scroll distance. scroll_y: type: integer format: int32 description: The vertical scroll distance. Responses.TextResponseFormatJsonSchema: type: object required: - type - schema properties: type: type: string enum: - json_schema description: The type of response format being defined. Always `json_schema`. description: type: string description: A description of what the response format is for, used by the model to determine how to respond in the format. name: type: string description: The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. schema: type: object additionalProperties: {} description: The JSON schema that defines the structure of the response. strict: type: boolean description: Whether to enable strict schema adherence when generating the output. If set to true, the model will always follow the exact schema defined in the `schema` field. Only a subset of JSON Schema is supported when `strict` is `true`. To learn more, read the [Structured Outputs guide](/docs/guides/structured-outputs). default: false description: JSON Schema response format. Used to generate structured JSON responses. Learn more about [Structured Outputs](/docs/guides/structured-outputs). Responses.Tool: anyOf: - $ref: '#/components/schemas/Responses.FunctionTool' - $ref: '#/components/schemas/Responses.WebSearchTool' - $ref: '#/components/schemas/Responses.FileSearchTool' - $ref: '#/components/schemas/Responses.ComputerTool' Responses.ToolChoiceFunction: type: object required: - type - name properties: type: type: string enum: - function description: For function calling, the type is always `function`. name: type: string description: The name of the function to call. description: Use this option to force the model to call a specific function. Responses.ToolChoiceOptions: type: string enum: - auto - none - required Responses.ToolChoiceTypes: type: object required: - type properties: type: type: string enum: - file_search - web_search_preview - computer_use_preview - web_search_preview_2025_03_11 description: |- The type of hosted tool the model should to use. Learn more about [built-in tools](/docs/guides/tools). Allowed values are: - `file_search` - `web_search_preview` - `computer_use_preview` description: |- Indicates that the model should use a built-in tool to generate a response. [Learn more about built-in tools](/docs/guides/tools). Responses.Type: type: object required: - type - text properties: type: type: string enum: - type description: Specifies the event type. For a type action, this property is always set to `type`. default: type text: type: string description: The text to type. Responses.UrlCitation: type: object required: - url - title - type - start_index - end_index properties: url: type: string description: The URL of the web resource. title: type: string description: The title of the web resource. type: type: string enum: - url_citation description: The type of the URL citation. Always `url_citation`. start_index: type: integer format: int32 description: The index of the first character of the URL citation in the message. end_index: type: integer format: int32 description: The index of the last character of the URL citation in the message. Responses.VectorStoreFileAttributes: type: object required: - properties properties: properties: type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Responses.VectorStoreFileAttributesString' - type: boolean - type: number description: Key-value pairs where keys are strings with max length 64 and values are strings with max length 512, booleans, or numbers. description: Set of key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format, and querying for objects via API or the dashboard. Keys are strings with a maximum length of 64 characters. Values are strings with a maximum length of 512 characters, booleans, or numbers. Responses.VectorStoreFileAttributesString: type: string maxLength: 512 Responses.Wait: type: object required: - type properties: type: type: string enum: - wait description: Specifies the event type. For a wait action, this property is always set to `wait`. default: wait Responses.WebSearchStatus: type: string enum: - in_progress - searching - completed - failed Responses.WebSearchTool: type: object required: - type properties: type: type: string enum: - web_search_preview domains: type: array items: type: string search_context_size: type: string enum: - small - medium - large user_location: type: object properties: type: type: string enum: - approximate city: type: string country: type: string region: type: string timezone: type: string required: - type allOf: - $ref: '#/components/schemas/Responses.BaseTool' Responses.WebSearchToolCall: type: object required: - id - type - status properties: id: type: string description: The unique ID of the web search tool call. type: type: string enum: - web_search_call description: The type of the web search tool call. Always `web_search_call`. status: allOf: - $ref: '#/components/schemas/Responses.WebSearchStatus' description: The status of the web search tool call. Secrets.CreateSecretRequest: type: object required: - name - value properties: metadata: type: object additionalProperties: {} name: type: string description: Name of the secret description: type: string description: Description of what the secret is used for value: type: string description: The decrypted secret value Secrets.Secret: type: object required: - id - created_at - updated_at - name - value properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true metadata: type: object additionalProperties: {} name: type: string description: Name of the secret description: type: string description: Description of what the secret is used for value: type: string description: The decrypted secret value description: A secret that can be used in tasks and sessions Secrets.UpdateSecretRequest: type: object required: - name - value properties: metadata: type: object additionalProperties: {} name: type: string description: Name of the secret description: type: string description: Description of what the secret is used for value: type: string description: The decrypted secret value Sessions.BaseDocSearch: type: object required: - limit - lang - metadata_filter - num_search_messages - max_query_length - include_embeddings properties: limit: type: integer format: uint16 minimum: 1 maximum: 50 description: The limit of documents to return default: 10 lang: type: string description: The language to be used for text-only search. Support for other languages coming soon. default: en-US metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} num_search_messages: type: integer format: uint32 minimum: 1 maximum: 50 description: The number of search messages to use for the search. default: 4 max_query_length: type: integer format: uint32 minimum: 100 maximum: 10000 description: The maximum query length to use for the search. default: 1000 include_embeddings: type: boolean description: Whether to include embeddings in the response default: true Sessions.BaseDocSearchUpdate: type: object properties: limit: type: integer format: uint16 minimum: 1 maximum: 50 description: The limit of documents to return default: 10 lang: type: string description: The language to be used for text-only search. Support for other languages coming soon. default: en-US metadata_filter: type: object additionalProperties: {} description: Metadata filter to apply to the search default: {} num_search_messages: type: integer format: uint32 minimum: 1 maximum: 50 description: The number of search messages to use for the search. default: 4 max_query_length: type: integer format: uint32 minimum: 100 maximum: 10000 description: The maximum query length to use for the search. default: 1000 include_embeddings: type: boolean description: Whether to include embeddings in the response default: true Sessions.ContextOverflowType: type: string enum: - truncate - adaptive Sessions.CreateOrUpdateSessionRequest: type: object required: - id - situation - render_templates - token_budget - context_overflow - auto_run_tools - forward_tool_calls properties: id: $ref: '#/components/schemas/Common.uuid' user: allOf: - $ref: '#/components/schemas/Common.uuid' description: User ID of user associated with this session users: type: array items: $ref: '#/components/schemas/Common.uuid' agent: allOf: - $ref: '#/components/schemas/Common.uuid' description: Agent ID of agent associated with this session agents: type: array items: $ref: '#/components/schemas/Common.uuid' situation: type: string nullable: true description: Session situation default: null system_template: type: string description: A specific system prompt template that sets the background for this session render_templates: type: boolean description: Render system and assistant message content as jinja templates default: true token_budget: type: integer format: uint16 nullable: true description: Threshold value for the adaptive context functionality default: null context_overflow: oneOf: - $ref: '#/components/schemas/Sessions.ContextOverflowType' nullable: true description: Action to start on context window overflow default: null auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. default: false forward_tool_calls: type: boolean description: Whether to forward tool calls to the model default: false recall_options: anyOf: - $ref: '#/components/schemas/Sessions.VectorDocSearch' - $ref: '#/components/schemas/Sessions.TextOnlyDocSearch' - $ref: '#/components/schemas/Sessions.HybridDocSearch' nullable: true description: Recall options for the session default: null metadata: type: object additionalProperties: {} allOf: - $ref: '#/components/schemas/Sessions.CreateSessionRequest' Sessions.CreateSessionRequest: type: object required: - situation - render_templates - token_budget - context_overflow - auto_run_tools - forward_tool_calls properties: user: allOf: - $ref: '#/components/schemas/Common.uuid' description: User ID of user associated with this session users: type: array items: $ref: '#/components/schemas/Common.uuid' agent: allOf: - $ref: '#/components/schemas/Common.uuid' description: Agent ID of agent associated with this session agents: type: array items: $ref: '#/components/schemas/Common.uuid' situation: type: string nullable: true description: Session situation default: null system_template: type: string description: A specific system prompt template that sets the background for this session render_templates: type: boolean description: Render system and assistant message content as jinja templates default: true token_budget: type: integer format: uint16 nullable: true description: Threshold value for the adaptive context functionality default: null context_overflow: oneOf: - $ref: '#/components/schemas/Sessions.ContextOverflowType' nullable: true description: Action to start on context window overflow default: null auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. default: false forward_tool_calls: type: boolean description: Whether to forward tool calls to the model default: false recall_options: anyOf: - $ref: '#/components/schemas/Sessions.VectorDocSearch' - $ref: '#/components/schemas/Sessions.TextOnlyDocSearch' - $ref: '#/components/schemas/Sessions.HybridDocSearch' nullable: true description: Recall options for the session default: null metadata: type: object additionalProperties: {} description: Payload for creating a session Sessions.HybridDocSearch: type: object required: - mode - confidence - alpha - k_multiplier properties: mode: type: string enum: - hybrid description: The mode to use for the search. default: hybrid confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 alpha: type: number minimum: 0 maximum: 1 description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: The trigram_similarity_threshold cutoff level default: null k_multiplier: type: integer format: int8 minimum: 0 description: The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring default: 7 allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearch' Sessions.HybridDocSearchUpdate: type: object properties: mode: type: string enum: - hybrid description: The mode to use for the search. default: hybrid confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 alpha: type: number minimum: 0 maximum: 1 description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: The trigram_similarity_threshold cutoff level default: null k_multiplier: type: integer format: int8 minimum: 0 description: The k_multiplier cutoff level to control how many intermediate results to fetch before final scoring default: 7 allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearchUpdate' Sessions.MultiAgentMultiUserSession: type: object required: - agents - users properties: agents: type: array items: $ref: '#/components/schemas/Common.uuid' minItems: 2 users: type: array items: $ref: '#/components/schemas/Common.uuid' minItems: 2 allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.MultiAgentNoUserSession: type: object required: - agents properties: agents: type: array items: $ref: '#/components/schemas/Common.uuid' minItems: 2 allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.MultiAgentSingleUserSession: type: object required: - agents - user properties: agents: type: array items: $ref: '#/components/schemas/Common.uuid' minItems: 2 user: $ref: '#/components/schemas/Common.uuid' allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.PatchSessionRequest: type: object properties: situation: type: string nullable: true description: Session situation default: null system_template: type: string description: A specific system prompt template that sets the background for this session render_templates: type: boolean description: Render system and assistant message content as jinja templates default: true token_budget: type: integer format: uint16 nullable: true description: Threshold value for the adaptive context functionality default: null context_overflow: oneOf: - $ref: '#/components/schemas/Sessions.ContextOverflowType' nullable: true description: Action to start on context window overflow default: null auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. default: false forward_tool_calls: type: boolean description: Whether to forward tool calls to the model default: false recall_options: anyOf: - $ref: '#/components/schemas/Sessions.VectorDocSearchUpdate' - $ref: '#/components/schemas/Sessions.TextOnlyDocSearchUpdate' - $ref: '#/components/schemas/Sessions.HybridDocSearchUpdate' nullable: true description: Recall options for the session default: null metadata: type: object additionalProperties: {} description: Payload for patching a session Sessions.Session: type: object required: - situation - summary - render_templates - token_budget - context_overflow - auto_run_tools - forward_tool_calls - id - created_at - updated_at properties: situation: type: string nullable: true description: Session situation default: null system_template: type: string description: A specific system prompt template that sets the background for this session summary: type: string nullable: true description: Summary (null at the beginning) - generated automatically after every interaction default: null readOnly: true render_templates: type: boolean description: Render system and assistant message content as jinja templates default: true token_budget: type: integer format: uint16 nullable: true description: Threshold value for the adaptive context functionality default: null context_overflow: oneOf: - $ref: '#/components/schemas/Sessions.ContextOverflowType' nullable: true description: Action to start on context window overflow default: null auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. default: false forward_tool_calls: type: boolean description: Whether to forward tool calls to the model default: false recall_options: anyOf: - $ref: '#/components/schemas/Sessions.VectorDocSearch' - $ref: '#/components/schemas/Sessions.TextOnlyDocSearch' - $ref: '#/components/schemas/Sessions.HybridDocSearch' nullable: true description: Recall options for the session default: null id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true kind: type: string description: Discriminator property for Session. discriminator: propertyName: kind mapping: single_agent_no_user: '#/components/schemas/Sessions.SingleAgentNoUserSession' single_agent_single_user: '#/components/schemas/Sessions.SingleAgentSingleUserSession' single_agent_multi_user: '#/components/schemas/Sessions.SingleAgentMultiUserSession' multi_agent_no_user: '#/components/schemas/Sessions.MultiAgentNoUserSession' multi_agent_single_user: '#/components/schemas/Sessions.MultiAgentSingleUserSession' multi_agent_multi_user: '#/components/schemas/Sessions.MultiAgentMultiUserSession' Sessions.SingleAgentMultiUserSession: type: object required: - agent - users properties: agent: $ref: '#/components/schemas/Common.uuid' users: type: array items: $ref: '#/components/schemas/Common.uuid' minItems: 2 allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.SingleAgentNoUserSession: type: object required: - agent properties: agent: $ref: '#/components/schemas/Common.uuid' allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.SingleAgentSingleUserSession: type: object required: - agent - user properties: agent: $ref: '#/components/schemas/Common.uuid' user: $ref: '#/components/schemas/Common.uuid' allOf: - $ref: '#/components/schemas/Sessions.Session' Sessions.TextOnlyDocSearch: type: object required: - mode properties: mode: type: string enum: - text description: The mode to use for the search. default: text trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: The trigram_similarity_threshold cutoff level default: null allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearch' Sessions.TextOnlyDocSearchUpdate: type: object properties: mode: type: string enum: - text description: The mode to use for the search. default: text trigram_similarity_threshold: type: number nullable: true minimum: 0 maximum: 1 description: The trigram_similarity_threshold cutoff level default: null allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearchUpdate' Sessions.UpdateSessionRequest: type: object required: - situation - render_templates - token_budget - context_overflow - auto_run_tools - forward_tool_calls properties: situation: type: string nullable: true description: Session situation default: null system_template: type: string description: A specific system prompt template that sets the background for this session render_templates: type: boolean description: Render system and assistant message content as jinja templates default: true token_budget: type: integer format: uint16 nullable: true description: Threshold value for the adaptive context functionality default: null context_overflow: oneOf: - $ref: '#/components/schemas/Sessions.ContextOverflowType' nullable: true description: Action to start on context window overflow default: null auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false for sessions, true for tasks) If a tool call is made, the tool's output will be sent back to the model as the model's input. If a tool call is not made, the model's output will be returned as is. default: false forward_tool_calls: type: boolean description: Whether to forward tool calls to the model default: false recall_options: anyOf: - $ref: '#/components/schemas/Sessions.VectorDocSearch' - $ref: '#/components/schemas/Sessions.TextOnlyDocSearch' - $ref: '#/components/schemas/Sessions.HybridDocSearch' nullable: true description: Recall options for the session default: null metadata: type: object additionalProperties: {} description: Payload for updating a session Sessions.VectorDocSearch: type: object required: - mode - confidence properties: mode: type: string enum: - vector description: The mode to use for the search. default: vector confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearch' Sessions.VectorDocSearchUpdate: type: object properties: mode: type: string enum: - vector description: The mode to use for the search. default: vector confidence: type: number minimum: -1 maximum: 1 description: The confidence cutoff level default: 0.5 mmr_strength: type: number minimum: 0 maximum: 1 exclusiveMaximum: true description: MMR Strength (mmr_strength = 1 - mmr_lambda) default: 0.5 allOf: - $ref: '#/components/schemas/Sessions.BaseDocSearchUpdate' Tasks.CaseThen: type: object required: - case - then properties: case: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: string enum: - _ description: The condition to evaluate then: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' description: The steps to run if the condition is true Tasks.CaseThenUpdateItem: type: object required: - case - then properties: case: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: string enum: - _ description: The condition to evaluate then: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' description: The steps to run if the condition is true Tasks.CreateTaskRequest: type: object required: - name - description - main - input_schema - tools - inherit_tools properties: name: allOf: - $ref: '#/components/schemas/Common.displayName' description: The name of the task. canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: The canonical name of the task. description: type: string description: The description of the task. default: '' main: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ minItems: 1 description: The entrypoint of the task. input_schema: type: object additionalProperties: {} nullable: true description: The schema for the input to the task. `null` means all inputs are valid. default: null tools: type: array items: $ref: '#/components/schemas/Tasks.TaskTool' description: Tools defined specifically for this task not included in the Agent itself. default: [] inherit_tools: type: boolean description: Whether to inherit tools from the parent agent or not. Defaults to false. default: false metadata: type: object additionalProperties: {} additionalProperties: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ description: Payload for creating a task Tasks.ErrorWorkflowStep: type: object required: - kind_ - error properties: kind_: type: string enum: - error default: error readOnly: true error: type: string description: The error message allOf: - type: object required: - kind_ properties: kind_: type: string enum: - error description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.EvaluateStep: type: object required: - kind_ - evaluate properties: kind_: type: string enum: - evaluate default: evaluate readOnly: true evaluate: type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: object additionalProperties: {} description: The expression to evaluate allOf: - type: object required: - kind_ properties: kind_: type: string enum: - evaluate description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.ForeachDo: type: object required: - in - do properties: in: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. do: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration Tasks.ForeachDoUpdateItem: type: object required: - in - do properties: in: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The variable to iterate over. VALIDATION: Should NOT return more than 1000 elements. do: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration Tasks.ForeachStep: type: object required: - kind_ - foreach properties: kind_: type: string enum: - foreach default: foreach readOnly: true foreach: allOf: - $ref: '#/components/schemas/Tasks.ForeachDo' description: The steps to run for each iteration allOf: - type: object required: - kind_ properties: kind_: type: string enum: - foreach description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.ForeachStepUpdateItem: type: object required: - foreach properties: foreach: allOf: - $ref: '#/components/schemas/Tasks.ForeachDoUpdateItem' description: The steps to run for each iteration allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ mapping: {} Tasks.GetStep: type: object required: - kind_ - get properties: kind_: type: string enum: - get default: get readOnly: true get: type: string description: The key to get allOf: - type: object required: - kind_ properties: kind_: type: string enum: - get description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.IfElseWorkflowStep: type: object required: - kind_ - if - then - else properties: kind_: type: string enum: - if_else default: if_else readOnly: true if: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The condition to evaluate then: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ description: The steps to run if the condition is true else: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ nullable: true description: The steps to run if the condition is false default: null allOf: - type: object required: - kind_ properties: kind_: type: string enum: - if_else description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.IfElseWorkflowStepUpdateItem: type: object required: - if - then - else properties: if: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The condition to evaluate then: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' - type: object required: - over - map properties: over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ description: The steps to run if the condition is true else: anyOf: - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' - type: object required: - over - map properties: over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ nullable: true description: The steps to run if the condition is false default: null allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ mapping: {} Tasks.LogStep: type: object required: - kind_ - log properties: kind_: type: string enum: - log default: log readOnly: true log: allOf: - $ref: '#/components/schemas/Common.JinjaTemplate' description: The value to log allOf: - type: object required: - kind_ properties: kind_: type: string enum: - log description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.ParallelStep: type: object required: - kind_ - parallel properties: kind_: type: string enum: - parallel default: parallel readOnly: true parallel: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' maxItems: 100 description: The steps to run in parallel. Max concurrency will depend on the platform. allOf: - type: object required: - kind_ properties: kind_: type: string enum: - parallel description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.ParallelStepUpdateItem: type: object required: - parallel properties: parallel: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' maxItems: 100 description: The steps to run in parallel. Max concurrency will depend on the platform. allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ mapping: {} Tasks.PatchTaskRequest: type: object properties: name: allOf: - $ref: '#/components/schemas/Common.displayName' description: The name of the task. canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: The canonical name of the task. description: type: string description: The description of the task. default: '' main: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' - type: object required: - over - map properties: over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ minItems: 1 description: The entrypoint of the task. input_schema: type: object additionalProperties: {} nullable: true description: The schema for the input to the task. `null` means all inputs are valid. default: null tools: type: array items: $ref: '#/components/schemas/Tasks.TaskTool' description: Tools defined specifically for this task not included in the Agent itself. default: [] inherit_tools: type: boolean description: Whether to inherit tools from the parent agent or not. Defaults to false. default: false metadata: type: object additionalProperties: {} additionalProperties: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' - type: object required: - over - map properties: over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ description: Payload for patching a task Tasks.PromptStep: type: object required: - kind_ - prompt - tools - auto_run_tools - disable_cache properties: kind_: type: string enum: - prompt default: prompt readOnly: true prompt: anyOf: - $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: anyOf: - type: object required: - text - type properties: text: $ref: '#/components/schemas/Common.JinjaTemplate' type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: $ref: '#/components/schemas/Common.JinjaTemplate' type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: $ref: '#/components/schemas/Common.JinjaTemplate' description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] description: The prompt to run tools: anyOf: - type: string enum: - all - type: array items: anyOf: - $ref: '#/components/schemas/Tasks.ToolRef' - $ref: '#/components/schemas/Tools.CreateToolRequest' description: The tools to use for the prompt default: all tool_choice: anyOf: - type: string enum: - auto - none - $ref: '#/components/schemas/Tools.NamedToolChoice' description: The tool choice for the prompt settings: type: object additionalProperties: {} description: Settings for the prompt unwrap: type: boolean description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` default: false auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. default: false disable_cache: type: boolean description: Whether to disable caching for the prompt step default: false allOf: - type: object required: - kind_ properties: kind_: type: string enum: - prompt description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.PromptStepUpdateItem: type: object required: - prompt - tools - auto_run_tools - disable_cache properties: prompt: anyOf: - $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: type: object required: - role - content properties: role: allOf: - $ref: '#/components/schemas/Entries.ChatMLRole' description: The role of the message tool_call_id: type: string content: anyOf: - $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: $ref: '#/components/schemas/Common.JinjaTemplate' - type: array items: anyOf: - type: object required: - text - type properties: text: $ref: '#/components/schemas/Common.JinjaTemplate' type: type: string enum: - text description: The type (fixed to 'text') default: text - type: object required: - image_url - type properties: image_url: type: object required: - url - detail properties: url: type: string description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) detail: allOf: - $ref: '#/components/schemas/Entries.ImageDetail' description: The detail level of the image default: auto description: The image URL type: type: string enum: - image_url description: The type (fixed to 'image_url') default: image_url - type: object required: - tool_use_id - type - content properties: tool_use_id: type: string type: type: string enum: - tool_result default: tool_result content: anyOf: - type: array items: type: object required: - text - type properties: text: $ref: '#/components/schemas/Common.JinjaTemplate' type: type: string enum: - text description: The type (fixed to 'text') default: text - type: array items: type: object required: - type - source properties: type: type: string enum: - image default: image source: type: object required: - type - media_type - data properties: type: type: string enum: - base64 default: base64 media_type: type: string data: $ref: '#/components/schemas/Common.JinjaTemplate' description: Anthropic image content part nullable: true description: The content parts of the message name: type: string description: Name tool_calls: type: array items: anyOf: - $ref: '#/components/schemas/Tools.ChosenFunctionCall' - $ref: '#/components/schemas/Tools.ChosenComputer20241022' - $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' - $ref: '#/components/schemas/Tools.ChosenBash20241022' nullable: true description: Tool calls generated by the model. default: [] description: The prompt to run tools: anyOf: - type: string enum: - all - type: array items: anyOf: - $ref: '#/components/schemas/Tasks.ToolRefUpdateItem' - $ref: '#/components/schemas/Tools.CreateToolRequest' description: The tools to use for the prompt default: all tool_choice: anyOf: - type: string enum: - auto - none - $ref: '#/components/schemas/Tools.NamedToolChoice' description: The tool choice for the prompt settings: type: object additionalProperties: {} description: Settings for the prompt unwrap: type: boolean description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` default: false auto_run_tools: type: boolean description: |- Whether to auto-run the tool and send the tool results to the model when available. (default: false) If a tool call is made, the tool's output will be used as the model's input. If a tool call is not made, the model's output will be used as the next step's input. default: false disable_cache: type: boolean description: Whether to disable caching for the prompt step default: false allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ mapping: {} Tasks.ReturnStep: type: object required: - kind_ - return properties: kind_: type: string enum: - return default: return readOnly: true return: type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: array items: $ref: '#/components/schemas/Common.PyExpression' - type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' - type: array items: type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' description: The value to return allOf: - type: object required: - kind_ properties: kind_: type: string enum: - return description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.SetStep: type: object required: - kind_ - set properties: kind_: type: string enum: - set default: set readOnly: true set: type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: object additionalProperties: {} description: The value to set allOf: - type: object required: - kind_ properties: kind_: type: string enum: - set description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.SleepFor: type: object required: - seconds - minutes - hours - days properties: seconds: type: integer format: uint16 minimum: 0 maximum: 60 description: The number of seconds to sleep for default: 0 minutes: type: integer format: uint16 minimum: 0 maximum: 60 description: The number of minutes to sleep for default: 0 hours: type: integer format: uint16 minimum: 0 maximum: 24 description: The number of hours to sleep for default: 0 days: type: integer format: uint16 minimum: 0 maximum: 30 description: The number of days to sleep for default: 0 Tasks.SleepStep: type: object required: - kind_ - sleep properties: kind_: type: string enum: - sleep default: sleep readOnly: true sleep: allOf: - $ref: '#/components/schemas/Tasks.SleepFor' description: The duration to sleep for (max 31 days) allOf: - type: object required: - kind_ properties: kind_: type: string enum: - sleep description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.SwitchStep: type: object required: - kind_ - switch properties: kind_: type: string enum: - switch default: switch readOnly: true switch: type: array items: $ref: '#/components/schemas/Tasks.CaseThen' minItems: 1 description: The cond tree allOf: - type: object required: - kind_ properties: kind_: type: string enum: - switch description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.SwitchStepUpdateItem: type: object required: - switch properties: switch: type: array items: $ref: '#/components/schemas/Tasks.CaseThenUpdateItem' minItems: 1 description: The cond tree allOf: - type: object properties: label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps kind_: type: string description: Discriminator property for BaseWorkflowStep. discriminator: propertyName: kind_ mapping: {} Tasks.Task: type: object required: - name - description - main - input_schema - tools - inherit_tools - id - created_at - updated_at properties: name: allOf: - $ref: '#/components/schemas/Common.displayName' description: The name of the task. canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: The canonical name of the task. description: type: string description: The description of the task. default: '' main: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ minItems: 1 description: The entrypoint of the task. input_schema: type: object additionalProperties: {} nullable: true description: The schema for the input to the task. `null` means all inputs are valid. default: null tools: type: array items: $ref: '#/components/schemas/Tasks.TaskTool' description: Tools defined specifically for this task not included in the Agent itself. default: [] inherit_tools: type: boolean description: Whether to inherit tools from the parent agent or not. Defaults to false. default: false id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true metadata: type: object additionalProperties: {} additionalProperties: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ description: Object describing a Task Tasks.TaskTool: type: object properties: inherited: type: boolean description: 'Read-only: Whether the tool was inherited or not. Only applies within tasks.' default: false readOnly: true allOf: - $ref: '#/components/schemas/Tools.CreateToolRequest' Tasks.ToolCallStep: type: object required: - kind_ - tool - arguments properties: kind_: type: string enum: - tool_call default: tool_call readOnly: true tool: allOf: - $ref: '#/components/schemas/Common.validPythonIdentifier' description: The tool to run arguments: anyOf: - type: object additionalProperties: {} - type: string enum: - _ description: The input parameters for the tool (defaults to last step output) default: _ allOf: - type: object required: - kind_ properties: kind_: type: string enum: - tool_call description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.ToolRef: type: object required: - ref properties: ref: anyOf: - $ref: '#/components/schemas/Tasks.ToolRefById' - $ref: '#/components/schemas/Tasks.ToolRefByName' description: Reference to a tool Tasks.ToolRefById: type: object properties: id: type: string description: Reference to a tool by id Tasks.ToolRefByName: type: object properties: name: $ref: '#/components/schemas/Common.validPythonIdentifier' description: Reference to a tool by name Tasks.ToolRefUpdateItem: type: object description: Reference to a tool Tasks.UpdateTaskRequest: type: object required: - name - description - main - input_schema - tools - inherit_tools properties: name: allOf: - $ref: '#/components/schemas/Common.displayName' description: The name of the task. canonical_name: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: The canonical name of the task. description: type: string description: The description of the task. default: '' main: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ minItems: 1 description: The entrypoint of the task. input_schema: type: object additionalProperties: {} nullable: true description: The schema for the input to the task. `null` means all inputs are valid. default: null tools: type: array items: $ref: '#/components/schemas/Tasks.TaskTool' description: Tools defined specifically for this task not included in the Agent itself. default: [] inherit_tools: type: boolean description: Whether to inherit tools from the parent agent or not. Defaults to false. default: false metadata: type: object additionalProperties: {} additionalProperties: type: array items: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' - $ref: '#/components/schemas/Tasks.ReturnStep' - $ref: '#/components/schemas/Tasks.SleepStep' - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' - $ref: '#/components/schemas/Tasks.WaitForInputStep' - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' - $ref: '#/components/schemas/Tasks.SwitchStep' - $ref: '#/components/schemas/Tasks.ForeachStep' - $ref: '#/components/schemas/Tasks.ParallelStep' - type: object required: - kind_ - over - map properties: kind_: type: string enum: - map_reduce default: map_reduce readOnly: true over: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: The variable to iterate over map: anyOf: - $ref: '#/components/schemas/Tasks.EvaluateStep' - $ref: '#/components/schemas/Tasks.ToolCallStep' - $ref: '#/components/schemas/Tasks.PromptStep' - $ref: '#/components/schemas/Tasks.GetStep' - $ref: '#/components/schemas/Tasks.SetStep' - $ref: '#/components/schemas/Tasks.LogStep' - $ref: '#/components/schemas/Tasks.YieldStep' description: The steps to run for each iteration reduce: allOf: - $ref: '#/components/schemas/Common.PyExpression' description: |- The expression to reduce the results. If not provided, the results are collected and returned as a list. A special parameter named `results` is the accumulator and `_` is the current value. initial: description: The initial value of the reduce expression default: [] parallelism: type: integer format: uint16 minimum: 1 maximum: 100 description: Whether to run the reduce expression in parallel and how many items to run in each batch allOf: - type: object required: - kind_ properties: kind_: type: string enum: - map_reduce description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ description: Payload for updating a task Tasks.WaitForInputInfo: type: object required: - info properties: info: type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: array items: $ref: '#/components/schemas/Common.PyExpression' - type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' - type: array items: type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' description: Any additional info or data Tasks.WaitForInputStep: type: object required: - kind_ - wait_for_input properties: kind_: type: string enum: - wait_for_input default: wait_for_input readOnly: true wait_for_input: allOf: - $ref: '#/components/schemas/Tasks.WaitForInputInfo' description: Any additional info or data allOf: - type: object required: - kind_ properties: kind_: type: string enum: - wait_for_input description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tasks.YieldStep: type: object required: - kind_ - workflow - arguments properties: kind_: type: string enum: - yield default: yield readOnly: true workflow: type: string description: |- The subworkflow to run. VALIDATION: Should resolve to a defined subworkflow. arguments: anyOf: - type: object additionalProperties: anyOf: - $ref: '#/components/schemas/Common.PyExpression' - type: array items: $ref: '#/components/schemas/Common.PyExpression' - type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' - type: array items: type: object additionalProperties: $ref: '#/components/schemas/Common.PyExpression' - type: string enum: - _ description: The input parameters for the subworkflow (defaults to last step output) default: _ allOf: - type: object required: - kind_ properties: kind_: type: string enum: - yield description: The kind of step readOnly: true label: allOf: - $ref: '#/components/schemas/Common.stepLabel' description: The label of this step for referencing it from other steps discriminator: propertyName: kind_ mapping: {} Tools.AlgoliaIntegrationDef: type: object required: - provider properties: provider: type: string enum: - algolia description: The provider must be "algolia" default: algolia method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.AlgoliaSetup' description: The setup parameters for Algolia arguments: allOf: - $ref: '#/components/schemas/Tools.AlgoliaSearchArguments' description: The arguments for Algolia allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Algolia integration definition Tools.AlgoliaIntegrationDefUpdate: type: object properties: provider: type: string enum: - algolia description: The provider must be "algolia" default: algolia method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.AlgoliaSetupUpdate' description: The setup parameters for Algolia arguments: allOf: - $ref: '#/components/schemas/Tools.AlgoliaSearchArgumentsUpdate' description: The arguments for Algolia allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Algolia integration definition Tools.AlgoliaSearchArguments: type: object required: - index_name - query properties: index_name: type: string description: The index name to search query: type: string description: The query to search for attributes_to_retrieve: type: array items: type: string description: Optional attributes to retrieve hits_per_page: type: integer format: int32 minimum: 1 maximum: 1000 description: Maximum number of hits to return default: 10 description: Arguments for Algolia Search Tools.AlgoliaSearchArgumentsUpdate: type: object properties: index_name: type: string description: The index name to search query: type: string description: The query to search for attributes_to_retrieve: type: array items: type: string description: Optional attributes to retrieve hits_per_page: type: integer format: int32 minimum: 1 maximum: 1000 description: Maximum number of hits to return default: 10 description: Arguments for Algolia Search Tools.AlgoliaSetup: type: object required: - algolia_application_id - algolia_api_key properties: algolia_application_id: type: string description: The Algolia Application ID algolia_api_key: type: string description: The Algolia API Key description: Integration definition for Algolia Tools.AlgoliaSetupUpdate: type: object properties: algolia_application_id: type: string description: The Algolia Application ID algolia_api_key: type: string description: The Algolia API Key description: Integration definition for Algolia Tools.ApiCallDef: type: object required: - method - url properties: method: type: string enum: - GET - POST - PUT - DELETE - PATCH - HEAD - OPTIONS - CONNECT - TRACE description: The HTTP method to use url: type: string format: uri description: The URL to call schema: type: object additionalProperties: {} description: The schema of the response headers: type: object additionalProperties: type: string description: The headers to send with the request secrets: type: object additionalProperties: $ref: '#/components/schemas/Tools.SecretRef' description: Secret references to use in templates (available only at setup time, not during execution) content: type: string description: The content as base64 to send with the request data: type: object additionalProperties: {} description: The data to send as form data files: type: object additionalProperties: {} description: The data to send as files data json: type: object additionalProperties: {} description: JSON body to send with the request cookies: type: object additionalProperties: type: string description: Cookies params: anyOf: - type: string - type: object additionalProperties: {} description: The parameters to send with the request params_schema: allOf: - $ref: '#/components/schemas/Tools.ParameterSchema' description: The schema of the parameters follow_redirects: type: boolean description: Follow redirects timeout: type: integer format: uint8 description: The timeout for the request include_response_content: type: boolean description: Whether to include the content in the response default: true description: API call definition Tools.ApiCallDefUpdate: type: object properties: method: type: string enum: - GET - POST - PUT - DELETE - PATCH - HEAD - OPTIONS - CONNECT - TRACE description: The HTTP method to use url: type: string format: uri description: The URL to call schema: type: object additionalProperties: {} description: The schema of the response headers: type: object additionalProperties: type: string description: The headers to send with the request secrets: type: object additionalProperties: $ref: '#/components/schemas/Tools.SecretRefUpdate' description: Secret references to use in templates (available only at setup time, not during execution) content: type: string description: The content as base64 to send with the request data: type: object additionalProperties: {} description: The data to send as form data files: type: object additionalProperties: {} description: The data to send as files data json: type: object additionalProperties: {} description: JSON body to send with the request cookies: type: object additionalProperties: type: string description: Cookies params: anyOf: - type: string - type: object additionalProperties: {} description: The parameters to send with the request params_schema: allOf: - $ref: '#/components/schemas/Tools.ParameterSchemaUpdate' description: The schema of the parameters follow_redirects: type: boolean description: Follow redirects timeout: type: integer format: uint8 description: The timeout for the request include_response_content: type: boolean description: Whether to include the content in the response default: true description: API call definition Tools.ArxivIntegrationDef: type: object required: - provider properties: provider: type: string enum: - arxiv description: The provider must be "arxiv" default: arxiv method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Arxiv default: null arguments: allOf: - $ref: '#/components/schemas/Tools.ArxivSearchArguments' description: The arguments for Arxiv Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Arxiv integration definition Tools.ArxivIntegrationDefUpdate: type: object properties: provider: type: string enum: - arxiv description: The provider must be "arxiv" default: arxiv method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Arxiv default: null arguments: allOf: - $ref: '#/components/schemas/Tools.ArxivSearchArgumentsUpdate' description: The arguments for Arxiv Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Arxiv integration definition Tools.ArxivSearchArguments: type: object required: - query properties: query: type: string description: The search query for searching with Arxiv id_list: type: array items: type: string description: The list of Arxiv IDs to search with max_results: type: integer format: int16 minimum: 1 maximum: 300000 description: The maximum number of results to return default: 5 download_pdf: type: boolean description: The download the pdf of the results default: false sort_by: type: string enum: - relevance - lastUpdatedDate - submittedDate description: The sort criterion for the results default: relevance sort_order: type: string enum: - ascending - descending description: The sort order for the results default: descending description: Arguments for Arxiv Search Tools.ArxivSearchArgumentsUpdate: type: object properties: query: type: string description: The search query for searching with Arxiv id_list: type: array items: type: string description: The list of Arxiv IDs to search with max_results: type: integer format: int16 minimum: 1 maximum: 300000 description: The maximum number of results to return default: 5 download_pdf: type: boolean description: The download the pdf of the results default: false sort_by: type: string enum: - relevance - lastUpdatedDate - submittedDate description: The sort criterion for the results default: relevance sort_order: type: string enum: - ascending - descending description: The sort order for the results default: descending description: Arguments for Arxiv Search Tools.BaseBrowserbaseIntegrationDef: type: object required: - provider properties: provider: type: string enum: - browserbase default: browserbase setup: $ref: '#/components/schemas/Tools.BrowserbaseSetup' method: type: string enum: - get_live_urls - list_sessions - create_session - get_session - complete_session - get_connect_url - install_extension_from_github - create_context - get_session_downloads - get_logs - get_recordings arguments: {} allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: The base definition for a browserbase integration Tools.BaseBrowserbaseIntegrationDefUpdate: type: object properties: provider: type: string enum: - browserbase default: browserbase setup: $ref: '#/components/schemas/Tools.BrowserbaseSetupUpdate' method: type: string enum: - get_live_urls - list_sessions - create_session - get_session - complete_session - get_connect_url - install_extension_from_github - create_context - get_session_downloads - get_logs - get_recordings arguments: {} allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: The base definition for a browserbase integration Tools.BaseChosenToolCall: type: object required: - type properties: type: allOf: - $ref: '#/components/schemas/Tools.ToolType' description: Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) function: $ref: '#/components/schemas/Tools.FunctionCallOption' integration: {} system: {} api_call: {} computer_20241022: allOf: - $ref: '#/components/schemas/Tools.ChosenComputer20241022' description: (Alpha) Anthropic new tools text_editor_20241022: $ref: '#/components/schemas/Tools.ChosenTextEditor20241022' bash_20241022: $ref: '#/components/schemas/Tools.ChosenBash20241022' id: type: string readOnly: true description: The response tool value generated by the model Tools.BaseCloudinaryIntegrationDef: type: object required: - provider properties: provider: type: string enum: - cloudinary default: cloudinary setup: $ref: '#/components/schemas/Tools.CloudinarySetup' method: type: string enum: - media_upload - media_edit allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Base Cloudinary integration definition Tools.BaseCloudinaryIntegrationDefUpdate: type: object properties: provider: type: string enum: - cloudinary default: cloudinary setup: $ref: '#/components/schemas/Tools.CloudinarySetupUpdate' method: type: string enum: - media_upload - media_edit allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Base Cloudinary integration definition Tools.BaseIntegrationDef: type: object required: - provider properties: provider: type: string enum: - dummy - weather - wikipedia - spider - brave - browserbase - email - mailgun - remote_browser - llama_parse - ffmpeg - cloudinary - arxiv - unstructured - algolia - mcp - google_sheets description: The provider of the integration method: type: string description: The specific method of the integration to call setup: description: The setup parameters the integration accepts arguments: description: The arguments to pre-apply to the integration call discriminator: propertyName: provider mapping: brave: '#/components/schemas/Tools.BraveIntegrationDef' email: '#/components/schemas/Tools.EmailIntegrationDef' spider: '#/components/schemas/Tools.SpiderIntegrationDef' wikipedia: '#/components/schemas/Tools.WikipediaIntegrationDef' weather: '#/components/schemas/Tools.WeatherIntegrationDef' mailgun: '#/components/schemas/Tools.MailgunIntegrationDef' browserbase: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' remote_browser: '#/components/schemas/Tools.RemoteBrowserIntegrationDef' llama_parse: '#/components/schemas/Tools.LlamaParseIntegrationDef' ffmpeg: '#/components/schemas/Tools.FfmpegIntegrationDef' cloudinary: '#/components/schemas/Tools.BaseCloudinaryIntegrationDef' arxiv: '#/components/schemas/Tools.ArxivIntegrationDef' unstructured: '#/components/schemas/Tools.UnstructuredIntegrationDef' algolia: '#/components/schemas/Tools.AlgoliaIntegrationDef' mcp: '#/components/schemas/Tools.McpIntegrationDef' google_sheets: '#/components/schemas/Tools.GoogleSheetsIntegrationDef' description: Integration definition Tools.BaseIntegrationDefUpdate: type: object properties: provider: type: string enum: - dummy - weather - wikipedia - spider - brave - browserbase - email - mailgun - remote_browser - llama_parse - ffmpeg - cloudinary - arxiv - unstructured - algolia - mcp - google_sheets description: The provider of the integration method: type: string description: The specific method of the integration to call setup: description: The setup parameters the integration accepts arguments: description: The arguments to pre-apply to the integration call discriminator: propertyName: provider mapping: brave: '#/components/schemas/Tools.BraveIntegrationDefUpdate' email: '#/components/schemas/Tools.EmailIntegrationDefUpdate' spider: '#/components/schemas/Tools.SpiderIntegrationDefUpdate' wikipedia: '#/components/schemas/Tools.WikipediaIntegrationDefUpdate' weather: '#/components/schemas/Tools.WeatherIntegrationDefUpdate' mailgun: '#/components/schemas/Tools.MailgunIntegrationDefUpdate' browserbase: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' remote_browser: '#/components/schemas/Tools.RemoteBrowserIntegrationDefUpdate' llama_parse: '#/components/schemas/Tools.LlamaParseIntegrationDefUpdate' ffmpeg: '#/components/schemas/Tools.FfmpegIntegrationDefUpdate' cloudinary: '#/components/schemas/Tools.BaseCloudinaryIntegrationDefUpdate' arxiv: '#/components/schemas/Tools.ArxivIntegrationDefUpdate' unstructured: '#/components/schemas/Tools.UnstructuredIntegrationDefUpdate' algolia: '#/components/schemas/Tools.AlgoliaIntegrationDefUpdate' mcp: '#/components/schemas/Tools.McpIntegrationDefUpdate' google_sheets: '#/components/schemas/Tools.GoogleSheetsIntegrationDefUpdate' description: Integration definition Tools.Bash20241022Def: type: object required: - type properties: type: type: string enum: - bash_20241022 default: bash_20241022 name: type: string default: bash Tools.Bash20241022DefUpdate: type: object properties: type: type: string enum: - bash_20241022 default: bash_20241022 name: type: string default: bash Tools.BraveIntegrationDef: type: object required: - provider properties: provider: type: string enum: - brave description: The provider must be "brave" default: brave method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.BraveSearchSetup' description: The setup parameters for Brave arguments: allOf: - $ref: '#/components/schemas/Tools.BraveSearchArguments' description: The arguments for Brave Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Brave integration definition Tools.BraveIntegrationDefUpdate: type: object properties: provider: type: string enum: - brave description: The provider must be "brave" default: brave method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.BraveSearchSetupUpdate' description: The setup parameters for Brave arguments: allOf: - $ref: '#/components/schemas/Tools.BraveSearchArgumentsUpdate' description: The arguments for Brave Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Brave integration definition Tools.BraveSearchArguments: type: object required: - query properties: query: type: string description: The search query for searching with Brave description: Arguments for Brave Search Tools.BraveSearchArgumentsUpdate: type: object properties: query: type: string description: The search query for searching with Brave description: Arguments for Brave Search Tools.BraveSearchSetup: type: object required: - brave_api_key properties: brave_api_key: type: string description: The api key for Brave Search description: Integration definition for Brave Search Tools.BraveSearchSetupUpdate: type: object properties: brave_api_key: type: string description: The api key for Brave Search description: Integration definition for Brave Search Tools.BrowserbaseCompleteSessionArguments: type: object required: - id properties: id: type: string status: type: string enum: - REQUEST_RELEASE default: REQUEST_RELEASE Tools.BrowserbaseCompleteSessionArgumentsUpdate: type: object properties: id: type: string status: type: string enum: - REQUEST_RELEASE default: REQUEST_RELEASE Tools.BrowserbaseCompleteSessionIntegrationDef: type: object required: - method properties: method: type: string enum: - complete_session default: complete_session arguments: $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionArguments' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase complete session integration definition Tools.BrowserbaseCompleteSessionIntegrationDefUpdate: type: object properties: method: type: string enum: - complete_session default: complete_session arguments: $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase complete session integration definition Tools.BrowserbaseContextArguments: type: object required: - projectId properties: projectId: type: string description: The Project ID. Can be found in Settings. Tools.BrowserbaseContextArgumentsUpdate: type: object properties: projectId: type: string description: The Project ID. Can be found in Settings. Tools.BrowserbaseContextIntegrationDef: type: object properties: method: type: string enum: - create_context description: The specific method of the integration to call default: create_context arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseContextArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase context provider Tools.BrowserbaseContextIntegrationDefUpdate: type: object properties: method: type: string enum: - create_context description: The specific method of the integration to call default: create_context arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseContextArgumentsUpdate' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase context provider Tools.BrowserbaseCreateSessionArguments: type: object properties: projectId: type: string description: The Project ID. Can be found in Settings. extensionId: type: string description: The installed Extension ID. See Install Extension from GitHub. browserSettings: type: object additionalProperties: {} description: Browser settings default: {} timeout: type: integer format: uint16 description: Duration in seconds after which the session will automatically end. Defaults to the Project's defaultTimeout. default: 3600 keepAlive: type: boolean description: Set to true to keep the session alive even after disconnections. This is available on the Startup plan only. default: false proxies: anyOf: - type: boolean - type: array items: type: object additionalProperties: {} description: Proxy configuration. Can be true for default proxy, or an array of proxy configurations. default: false Tools.BrowserbaseCreateSessionIntegrationDef: type: object required: - method properties: method: type: string enum: - create_session default: create_session arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase create session integration definition Tools.BrowserbaseCreateSessionIntegrationDefUpdate: type: object properties: method: type: string enum: - create_session default: create_session arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase create session integration definition Tools.BrowserbaseExtensionArguments: type: object required: - repositoryName properties: repositoryName: type: string description: The GitHub repository name. ref: type: string description: Ref to install from a branch or tag. Tools.BrowserbaseExtensionArgumentsUpdate: type: object properties: repositoryName: type: string description: The GitHub repository name. ref: type: string description: Ref to install from a branch or tag. Tools.BrowserbaseExtensionIntegrationDef: type: object properties: method: type: string enum: - install_extension_from_github description: The specific method of the integration to call arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseExtensionArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase extension provider Tools.BrowserbaseExtensionIntegrationDefUpdate: type: object properties: method: type: string enum: - install_extension_from_github description: The specific method of the integration to call arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseExtensionArgumentsUpdate' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase extension provider Tools.BrowserbaseGetSessionArguments: type: object required: - id properties: id: type: string Tools.BrowserbaseGetSessionArgumentsUpdate: type: object properties: id: type: string Tools.BrowserbaseGetSessionIntegrationDef: type: object required: - method properties: method: type: string enum: - get_session default: get_session arguments: $ref: '#/components/schemas/Tools.BrowserbaseGetSessionArguments' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase get session integration definition Tools.BrowserbaseGetSessionIntegrationDefUpdate: type: object properties: method: type: string enum: - get_session default: get_session arguments: $ref: '#/components/schemas/Tools.BrowserbaseGetSessionArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase get session integration definition Tools.BrowserbaseGetSessionLiveUrlsArguments: type: object required: - id properties: id: type: string Tools.BrowserbaseGetSessionLiveUrlsArgumentsUpdate: type: object properties: id: type: string Tools.BrowserbaseGetSessionLiveUrlsIntegrationDef: type: object required: - method properties: method: type: string enum: - get_live_urls default: get_live_urls arguments: $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsArguments' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase get session live urls integration definition Tools.BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate: type: object properties: method: type: string enum: - get_live_urls default: get_live_urls arguments: $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase get session live urls integration definition Tools.BrowserbaseListSessionsArguments: type: object properties: status: type: string enum: - RUNNING - ERROR - TIMED_OUT - COMPLETED description: 'The status of the sessions to list (Available options: RUNNING, ERROR, TIMED_OUT, COMPLETED)' Tools.BrowserbaseListSessionsIntegrationDef: type: object required: - method properties: method: type: string enum: - list_sessions description: The specific method of the integration to call default: list_sessions arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDef' description: browserbase list sessions integration definition Tools.BrowserbaseListSessionsIntegrationDefUpdate: type: object properties: method: type: string enum: - list_sessions description: The specific method of the integration to call default: list_sessions arguments: allOf: - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseBrowserbaseIntegrationDefUpdate' description: browserbase list sessions integration definition Tools.BrowserbaseSetup: type: object required: - api_key - project_id properties: api_key: type: string description: API key for the browserbase integration project_id: type: string description: The project ID. Can be found in Settings. api_url: type: string description: The API URL. Defaults to https://www.browserbase.com connect_url: type: string description: The connect URL. Defaults to wss://connect.browserbase.com description: The setup parameters for the browserbase integration Tools.BrowserbaseSetupUpdate: type: object properties: api_key: type: string description: API key for the browserbase integration project_id: type: string description: The project ID. Can be found in Settings. api_url: type: string description: The API URL. Defaults to https://www.browserbase.com connect_url: type: string description: The connect URL. Defaults to wss://connect.browserbase.com description: The setup parameters for the browserbase integration Tools.ChosenBash20241022: type: object properties: command: type: string description: The bash command to run restart: type: boolean description: Whether to restart the tool default: false Tools.ChosenComputer20241022: type: object required: - action properties: action: allOf: - $ref: '#/components/schemas/Tools.Computer20241022Action' description: The action to perform text: type: string description: The text to type coordinate: type: array items: type: integer format: uint16 description: The (x, y) pixel coordinate to move the cursor to Tools.ChosenFunctionCall: type: object required: - type - function properties: type: type: string enum: - function function: allOf: - $ref: '#/components/schemas/Tools.FunctionCallOption' description: The function to call allOf: - $ref: '#/components/schemas/Tools.BaseChosenToolCall' Tools.ChosenTextEditor20241022: type: object required: - command - path properties: command: type: string enum: - str_replace - insert - view - undo_edit description: The command to run path: type: string description: The path to the file file_text: type: string description: The content of the file to be created insert_line: type: integer format: uint16 description: The line to insert the new string after new_str: type: string description: The new string to insert old_str: type: string description: The string in the file to replace view_range: type: array items: type: integer format: uint16 description: The line range to view Tools.CloudinaryEditArguments: type: object required: - public_id - transformation - return_base64 properties: public_id: type: string description: The file Public ID in Cloudinary transformation: type: array items: type: object additionalProperties: {} description: The transformation to apply to the file return_base64: type: boolean description: Return base64 encoded file default: false description: Arguments for Cloudinary media edit Tools.CloudinaryEditArgumentsUpdate: type: object properties: public_id: type: string description: The file Public ID in Cloudinary transformation: type: array items: type: object additionalProperties: {} description: The transformation to apply to the file return_base64: type: boolean description: Return base64 encoded file default: false description: Arguments for Cloudinary media edit Tools.CloudinaryEditIntegrationDef: type: object required: - method properties: method: type: string enum: - media_edit default: media_edit arguments: $ref: '#/components/schemas/Tools.CloudinaryEditArguments' allOf: - $ref: '#/components/schemas/Tools.BaseCloudinaryIntegrationDef' description: Cloudinary edit integration definition Tools.CloudinaryEditIntegrationDefUpdate: type: object properties: method: type: string enum: - media_edit default: media_edit arguments: $ref: '#/components/schemas/Tools.CloudinaryEditArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseCloudinaryIntegrationDefUpdate' description: Cloudinary edit integration definition Tools.CloudinarySetup: type: object required: - cloudinary_api_key - cloudinary_api_secret - cloudinary_cloud_name properties: cloudinary_api_key: type: string description: The API key for Cloudinary cloudinary_api_secret: type: string description: The API secret for Cloudinary cloudinary_cloud_name: type: string description: The Cloud name for Cloudinary params: type: object additionalProperties: {} description: Additional parameters for the Cloudinary API description: Setup parameters for Cloudinary integration Tools.CloudinarySetupUpdate: type: object properties: cloudinary_api_key: type: string description: The API key for Cloudinary cloudinary_api_secret: type: string description: The API secret for Cloudinary cloudinary_cloud_name: type: string description: The Cloud name for Cloudinary params: type: object additionalProperties: {} description: Additional parameters for the Cloudinary API description: Setup parameters for Cloudinary integration Tools.CloudinaryUploadArguments: type: object required: - file - return_base64 properties: file: type: string description: The URL of the file upload return_base64: type: boolean description: Return base64 encoded file default: false public_id: type: string description: Optional public ID for the uploaded file upload_params: type: object additionalProperties: {} description: Optional upload parameters description: Arguments for Cloudinary media upload Tools.CloudinaryUploadArgumentsUpdate: type: object properties: file: type: string description: The URL of the file upload return_base64: type: boolean description: Return base64 encoded file default: false public_id: type: string description: Optional public ID for the uploaded file upload_params: type: object additionalProperties: {} description: Optional upload parameters description: Arguments for Cloudinary media upload Tools.CloudinaryUploadIntegrationDef: type: object required: - method properties: method: type: string enum: - media_upload default: media_upload arguments: $ref: '#/components/schemas/Tools.CloudinaryUploadArguments' allOf: - $ref: '#/components/schemas/Tools.BaseCloudinaryIntegrationDef' description: Cloudinary upload integration definition Tools.CloudinaryUploadIntegrationDefUpdate: type: object properties: method: type: string enum: - media_upload default: media_upload arguments: $ref: '#/components/schemas/Tools.CloudinaryUploadArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseCloudinaryIntegrationDefUpdate' description: Cloudinary upload integration definition Tools.Computer20241022Action: type: string enum: - key - type - cursor_position - mouse_move - left_click - right_click - middle_click - double_click - screenshot Tools.Computer20241022Def: type: object required: - type - display_width_px - display_height_px properties: type: type: string enum: - computer_20241022 default: computer_20241022 name: type: string default: computer display_width_px: type: integer format: uint16 minimum: 600 description: The display width in pixels default: 1024 display_height_px: type: integer format: uint16 minimum: 400 description: The display height in pixels default: 768 display_number: type: integer format: uint16 minimum: 1 maximum: 10 description: The display number to use default: 1 description: Anthropic new tools Tools.Computer20241022DefUpdate: type: object properties: type: type: string enum: - computer_20241022 default: computer_20241022 name: type: string default: computer display_width_px: type: integer format: uint16 minimum: 600 description: The display width in pixels default: 1024 display_height_px: type: integer format: uint16 minimum: 400 description: The display height in pixels default: 768 display_number: type: integer format: uint16 minimum: 1 maximum: 10 description: The display number to use default: 1 description: Anthropic new tools Tools.CreateToolRequest: type: object required: - name - type properties: name: allOf: - $ref: '#/components/schemas/Common.validPythonIdentifier' description: Name of the tool (must be unique for this agent and a valid python identifier string ) type: allOf: - $ref: '#/components/schemas/Tools.ToolType' description: Type of the tool description: type: string description: Description of the tool function: allOf: - $ref: '#/components/schemas/Tools.FunctionDef' description: The function to call integration: anyOf: - $ref: '#/components/schemas/Tools.DummyIntegrationDef' - $ref: '#/components/schemas/Tools.BraveIntegrationDef' - $ref: '#/components/schemas/Tools.EmailIntegrationDef' - $ref: '#/components/schemas/Tools.SpiderIntegrationDef' - $ref: '#/components/schemas/Tools.WikipediaIntegrationDef' - $ref: '#/components/schemas/Tools.WeatherIntegrationDef' - $ref: '#/components/schemas/Tools.MailgunIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseContextIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseExtensionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsIntegrationDef' - $ref: '#/components/schemas/Tools.RemoteBrowserIntegrationDef' - $ref: '#/components/schemas/Tools.LlamaParseIntegrationDef' - $ref: '#/components/schemas/Tools.FfmpegIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryUploadIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryEditIntegrationDef' - $ref: '#/components/schemas/Tools.ArxivIntegrationDef' - $ref: '#/components/schemas/Tools.UnstructuredIntegrationDef' - $ref: '#/components/schemas/Tools.AlgoliaIntegrationDef' - $ref: '#/components/schemas/Tools.McpIntegrationDef' - $ref: '#/components/schemas/Tools.GoogleSheetsIntegrationDef' description: The integration to call system: allOf: - $ref: '#/components/schemas/Tools.SystemDef' description: The system to call api_call: allOf: - $ref: '#/components/schemas/Tools.ApiCallDef' description: The API call to make computer_20241022: allOf: - $ref: '#/components/schemas/Tools.Computer20241022Def' description: (Alpha) Anthropic new tools text_editor_20241022: $ref: '#/components/schemas/Tools.TextEditor20241022Def' bash_20241022: $ref: '#/components/schemas/Tools.Bash20241022Def' description: Payload for creating a tool Tools.DummyIntegrationDef: type: object required: - provider properties: provider: type: string enum: - dummy default: dummy allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' Tools.DummyIntegrationDefUpdate: type: object properties: provider: type: string enum: - dummy default: dummy allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' Tools.EmailArguments: type: object required: - to - from - subject - body properties: to: type: string description: The email address to send the email to from: type: string description: The email address to send the email from subject: type: string description: The subject of the email body: type: string description: The body of the email description: Arguments for Email sending Tools.EmailArgumentsUpdate: type: object properties: to: type: string description: The email address to send the email to from: type: string description: The email address to send the email from subject: type: string description: The subject of the email body: type: string description: The body of the email description: Arguments for Email sending Tools.EmailIntegrationDef: type: object required: - provider properties: provider: type: string enum: - email description: The provider must be "email" default: email method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.EmailSetup' description: The setup parameters for Email arguments: allOf: - $ref: '#/components/schemas/Tools.EmailArguments' description: The arguments for Email sending allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Email integration definition Tools.EmailIntegrationDefUpdate: type: object properties: provider: type: string enum: - email description: The provider must be "email" default: email method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.EmailSetupUpdate' description: The setup parameters for Email arguments: allOf: - $ref: '#/components/schemas/Tools.EmailArgumentsUpdate' description: The arguments for Email sending allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Email integration definition Tools.EmailSetup: type: object required: - host - port - user - password properties: host: type: string description: The host of the email server port: type: integer format: int32 description: The port of the email server user: type: string description: The username of the email server password: type: string description: The password of the email server description: Setup parameters for Email integration Tools.EmailSetupUpdate: type: object properties: host: type: string description: The host of the email server port: type: integer format: int32 description: The port of the email server user: type: string description: The username of the email server password: type: string description: The password of the email server description: Setup parameters for Email integration Tools.FfmpegIntegrationDef: type: object required: - provider properties: provider: type: string enum: - ffmpeg description: The provider must be "ffmpeg" default: ffmpeg method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Ffmpeg default: null arguments: allOf: - $ref: '#/components/schemas/Tools.FfmpegSearchArguments' description: The arguments for Ffmpeg Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Ffmpeg integration definition Tools.FfmpegIntegrationDefUpdate: type: object properties: provider: type: string enum: - ffmpeg description: The provider must be "ffmpeg" default: ffmpeg method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Ffmpeg default: null arguments: allOf: - $ref: '#/components/schemas/Tools.FfmpegSearchArgumentsUpdate' description: The arguments for Ffmpeg Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Ffmpeg integration definition Tools.FfmpegSearchArguments: type: object required: - cmd properties: cmd: type: string description: The bash command string file: anyOf: - type: string - type: array items: type: string description: The base64 string of the file description: Arguments for Ffmpeg CMD Tools.FfmpegSearchArgumentsUpdate: type: object properties: cmd: type: string description: The bash command string file: anyOf: - type: string - type: array items: type: string description: The base64 string of the file description: Arguments for Ffmpeg CMD Tools.FunctionCallOption: type: object required: - name properties: name: type: string description: The name of the function arguments: type: string description: The parameters to pass to the function Tools.FunctionDef: type: object properties: name: nullable: true description: 'DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons.' default: null description: nullable: true description: 'DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons.' default: null parameters: type: object additionalProperties: {} description: The parameters the function accepts description: Function definition Tools.GoogleSheetsAppendArguments: type: object required: - spreadsheet_id - range - values properties: spreadsheet_id: type: string description: The ID of the spreadsheet to append to range: type: string description: The A1 notation of the range to start appending from values: type: array items: type: array items: {} description: The values to append (2D array) value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED insert_data_option: type: string enum: - OVERWRITE - INSERT_ROWS description: How the input data should be inserted default: INSERT_ROWS include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for appending values to a spreadsheet Tools.GoogleSheetsAppendArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to append to range: type: string description: The A1 notation of the range to start appending from values: type: array items: type: array items: {} description: The values to append (2D array) value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED insert_data_option: type: string enum: - OVERWRITE - INSERT_ROWS description: How the input data should be inserted default: INSERT_ROWS include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for appending values to a spreadsheet Tools.GoogleSheetsBatchReadArguments: type: object required: - spreadsheet_id - ranges properties: spreadsheet_id: type: string description: The ID of the spreadsheet to read from ranges: type: array items: type: string description: The A1 notation of the ranges to read major_dimension: type: string enum: - ROWS - COLUMNS description: The major dimension that results should use default: ROWS value_render_option: type: string enum: - FORMATTED_VALUE - UNFORMATTED_VALUE - FORMULA description: How values should be represented in the output default: FORMATTED_VALUE date_time_render_option: type: string enum: - SERIAL_NUMBER - FORMATTED_STRING description: How dates, times, and durations should be represented default: FORMATTED_STRING description: Arguments for batch reading values from multiple ranges Tools.GoogleSheetsBatchReadArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to read from ranges: type: array items: type: string description: The A1 notation of the ranges to read major_dimension: type: string enum: - ROWS - COLUMNS description: The major dimension that results should use default: ROWS value_render_option: type: string enum: - FORMATTED_VALUE - UNFORMATTED_VALUE - FORMULA description: How values should be represented in the output default: FORMATTED_VALUE date_time_render_option: type: string enum: - SERIAL_NUMBER - FORMATTED_STRING description: How dates, times, and durations should be represented default: FORMATTED_STRING description: Arguments for batch reading values from multiple ranges Tools.GoogleSheetsBatchWriteArguments: type: object required: - spreadsheet_id - data properties: spreadsheet_id: type: string description: The ID of the spreadsheet to write to data: type: array items: $ref: '#/components/schemas/Tools.GoogleSheetsValueRange' description: The data to write to each range value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for batch updating values in multiple ranges Tools.GoogleSheetsBatchWriteArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to write to data: type: array items: $ref: '#/components/schemas/Tools.GoogleSheetsValueRange' description: The data to write to each range value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for batch updating values in multiple ranges Tools.GoogleSheetsClearArguments: type: object required: - spreadsheet_id - range properties: spreadsheet_id: type: string description: The ID of the spreadsheet to clear values from range: type: string description: The A1 notation of the range to clear description: Arguments for clearing values from a spreadsheet Tools.GoogleSheetsClearArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to clear values from range: type: string description: The A1 notation of the range to clear description: Arguments for clearing values from a spreadsheet Tools.GoogleSheetsIntegrationDef: type: object required: - provider properties: provider: type: string enum: - google_sheets description: The provider must be "google_sheets" default: google_sheets method: type: string enum: - read_values - write_values - append_values - clear_values - batch_read - batch_write description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.GoogleSheetsSetup' description: The setup parameters for Google Sheets arguments: anyOf: - $ref: '#/components/schemas/Tools.GoogleSheetsReadArguments' - $ref: '#/components/schemas/Tools.GoogleSheetsWriteArguments' - $ref: '#/components/schemas/Tools.GoogleSheetsAppendArguments' - $ref: '#/components/schemas/Tools.GoogleSheetsClearArguments' - $ref: '#/components/schemas/Tools.GoogleSheetsBatchReadArguments' - $ref: '#/components/schemas/Tools.GoogleSheetsBatchWriteArguments' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Google Sheets integration definition Tools.GoogleSheetsIntegrationDefUpdate: type: object properties: provider: type: string enum: - google_sheets description: The provider must be "google_sheets" default: google_sheets method: type: string enum: - read_values - write_values - append_values - clear_values - batch_read - batch_write description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.GoogleSheetsSetupUpdate' description: The setup parameters for Google Sheets arguments: anyOf: - $ref: '#/components/schemas/Tools.GoogleSheetsReadArgumentsUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsWriteArgumentsUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsAppendArgumentsUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsClearArgumentsUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsBatchReadArgumentsUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsBatchWriteArgumentsUpdate' description: The arguments for the method allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Google Sheets integration definition Tools.GoogleSheetsReadArguments: type: object required: - spreadsheet_id - range properties: spreadsheet_id: type: string description: The ID of the spreadsheet to read from range: type: string description: The A1 notation of the range to read major_dimension: type: string enum: - ROWS - COLUMNS description: The major dimension that results should use default: ROWS value_render_option: type: string enum: - FORMATTED_VALUE - UNFORMATTED_VALUE - FORMULA description: How values should be represented in the output default: FORMATTED_VALUE date_time_render_option: type: string enum: - SERIAL_NUMBER - FORMATTED_STRING description: How dates, times, and durations should be represented default: FORMATTED_STRING description: Arguments for reading values from a spreadsheet Tools.GoogleSheetsReadArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to read from range: type: string description: The A1 notation of the range to read major_dimension: type: string enum: - ROWS - COLUMNS description: The major dimension that results should use default: ROWS value_render_option: type: string enum: - FORMATTED_VALUE - UNFORMATTED_VALUE - FORMULA description: How values should be represented in the output default: FORMATTED_VALUE date_time_render_option: type: string enum: - SERIAL_NUMBER - FORMATTED_STRING description: How dates, times, and durations should be represented default: FORMATTED_STRING description: Arguments for reading values from a spreadsheet Tools.GoogleSheetsSetup: type: object required: - use_julep_service properties: use_julep_service: type: boolean description: |- Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. service_account_json: type: string description: |- Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. default_retry_count: type: integer format: uint8 minimum: 1 maximum: 10 description: Default number of retry attempts for API calls default: 3 description: Setup parameters for Google Sheets integration Tools.GoogleSheetsSetupUpdate: type: object properties: use_julep_service: type: boolean description: |- Whether to use Julep's built-in Google Sheets service account. If true, no credentials needed. If false, service_account_json is required. service_account_json: type: string description: |- Base64 encoded service account JSON for authentication. Required when use_julep_service is false. Users can provide their own service account for better isolation and quota management. default_retry_count: type: integer format: uint8 minimum: 1 maximum: 10 description: Default number of retry attempts for API calls default: 3 description: Setup parameters for Google Sheets integration Tools.GoogleSheetsValueRange: type: object required: - range - values properties: range: type: string description: The A1 notation of the range values: type: array items: type: array items: {} description: The values for the range (2D array) major_dimension: type: string enum: - ROWS - COLUMNS description: The major dimension of the values default: ROWS description: Represents a range of values to write Tools.GoogleSheetsWriteArguments: type: object required: - spreadsheet_id - range - values properties: spreadsheet_id: type: string description: The ID of the spreadsheet to write to range: type: string description: The A1 notation of the range to write to values: type: array items: type: array items: {} description: The values to write (2D array) value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED insert_data_option: type: string enum: - OVERWRITE - INSERT_ROWS description: How the input data should be inserted default: OVERWRITE include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for writing values to a spreadsheet Tools.GoogleSheetsWriteArgumentsUpdate: type: object properties: spreadsheet_id: type: string description: The ID of the spreadsheet to write to range: type: string description: The A1 notation of the range to write to values: type: array items: type: array items: {} description: The values to write (2D array) value_input_option: type: string enum: - RAW - USER_ENTERED description: How the input data should be interpreted default: USER_ENTERED insert_data_option: type: string enum: - OVERWRITE - INSERT_ROWS description: How the input data should be inserted default: OVERWRITE include_values_in_response: type: boolean description: Whether to include the values in the response default: false description: Arguments for writing values to a spreadsheet Tools.LlamaParseFetchArguments: type: object required: - file properties: filename: type: string description: File Name. If not provided, a random name will be generated. file: anyOf: - type: string - type: array items: type: string description: The base64 string of the file, which can be a single string or a list of strings params: type: object additionalProperties: {} description: Optional upload parameters base64: type: boolean description: The input file is base64 default: false description: Arguments for LlamaParse integration Tools.LlamaParseFetchArgumentsUpdate: type: object properties: filename: type: string description: File Name. If not provided, a random name will be generated. file: anyOf: - type: string - type: array items: type: string description: The base64 string of the file, which can be a single string or a list of strings params: type: object additionalProperties: {} description: Optional upload parameters base64: type: boolean description: The input file is base64 default: false description: Arguments for LlamaParse integration Tools.LlamaParseIntegrationDef: type: object required: - provider properties: provider: type: string enum: - llama_parse description: The provider must be "LlamaParseSetup" default: llama_parse method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.LlamaParseSetup' description: The setup parameters for LlamaParse arguments: allOf: - $ref: '#/components/schemas/Tools.LlamaParseFetchArguments' description: The arguments for LlamaParse allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: LlamaParse integration definition Tools.LlamaParseIntegrationDefUpdate: type: object properties: provider: type: string enum: - llama_parse description: The provider must be "LlamaParseSetup" default: llama_parse method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.LlamaParseSetupUpdate' description: The setup parameters for LlamaParse arguments: allOf: - $ref: '#/components/schemas/Tools.LlamaParseFetchArgumentsUpdate' description: The arguments for LlamaParse allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: LlamaParse integration definition Tools.LlamaParseSetup: type: object required: - llamaparse_api_key properties: llamaparse_api_key: type: string description: The API key for LlamaParse params: type: object additionalProperties: {} description: Optional upload parameters description: Setup parameters for LlamaParse integration Tools.LlamaParseSetupUpdate: type: object properties: llamaparse_api_key: type: string description: The API key for LlamaParse params: type: object additionalProperties: {} description: Optional upload parameters description: Setup parameters for LlamaParse integration Tools.MailgunIntegrationDef: type: object required: - provider properties: provider: type: string enum: - mailgun description: The provider must be "mailgun" default: mailgun method: type: string enum: - send_email description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.MailgunSetup' description: The setup parameters for Mailgun arguments: allOf: - $ref: '#/components/schemas/Tools.MailgunSendEmailArguments' description: The arguments for mailgun methods allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Mailgun integration definition Tools.MailgunIntegrationDefUpdate: type: object properties: provider: type: string enum: - mailgun description: The provider must be "mailgun" default: mailgun method: type: string enum: - send_email description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.MailgunSetupUpdate' description: The setup parameters for Mailgun arguments: allOf: - $ref: '#/components/schemas/Tools.MailgunSendEmailArgumentsUpdate' description: The arguments for mailgun methods allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Mailgun integration definition Tools.MailgunSendEmailArguments: type: object required: - to - from - subject - body properties: to: type: string description: The email address to send the email to from: type: string description: The email address to send the email from subject: type: string description: The subject of the email body: type: string description: The body of the email cc: type: string description: Optional carbon copy recipients (comma-separated email addresses) bcc: type: string description: Optional blind carbon copy recipients (comma-separated email addresses) description: Arguments for mailgun.send_email method Tools.MailgunSendEmailArgumentsUpdate: type: object properties: to: type: string description: The email address to send the email to from: type: string description: The email address to send the email from subject: type: string description: The subject of the email body: type: string description: The body of the email cc: type: string description: Optional carbon copy recipients (comma-separated email addresses) bcc: type: string description: Optional blind carbon copy recipients (comma-separated email addresses) description: Arguments for mailgun.send_email method Tools.MailgunSetup: type: object required: - api_key properties: api_key: type: string description: The API key for the Mailgun integration description: Setup parameters for Mailgun integration Tools.MailgunSetupUpdate: type: object properties: api_key: type: string description: The API key for the Mailgun integration description: Setup parameters for Mailgun integration Tools.McpCallToolArguments: type: object required: - tool_name properties: tool_name: type: string description: The MCP tool name to invoke arguments: type: object additionalProperties: {} description: JSON-serializable arguments to pass to the MCP tool default: {} timeout_seconds: type: integer format: uint16 description: Optional per-call timeout in seconds default: 60 description: Arguments to call a named tool on the MCP server Tools.McpCallToolArgumentsUpdate: type: object properties: tool_name: type: string description: The MCP tool name to invoke arguments: type: object additionalProperties: {} description: JSON-serializable arguments to pass to the MCP tool default: {} timeout_seconds: type: integer format: uint16 description: Optional per-call timeout in seconds default: 60 description: Arguments to call a named tool on the MCP server Tools.McpIntegrationDef: type: object required: - provider properties: provider: type: string enum: - mcp description: The provider must be "mcp" default: mcp method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.McpSetup' description: The setup parameters for MCP arguments: anyOf: - $ref: '#/components/schemas/Tools.McpCallToolArguments' - $ref: '#/components/schemas/Tools.McpListToolsArguments' description: The arguments for MCP methods allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: MCP integration definition Tools.McpIntegrationDefUpdate: type: object properties: provider: type: string enum: - mcp description: The provider must be "mcp" default: mcp method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.McpSetupUpdate' description: The setup parameters for MCP arguments: anyOf: - $ref: '#/components/schemas/Tools.McpCallToolArgumentsUpdate' - $ref: '#/components/schemas/Tools.McpListToolsArgumentsUpdate' description: The arguments for MCP methods allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: MCP integration definition Tools.McpListToolsArguments: type: object required: - dummy properties: dummy: type: string default: dummy description: Arguments to list available tools Tools.McpListToolsArgumentsUpdate: type: object properties: dummy: type: string default: dummy description: Arguments to list available tools Tools.McpSetup: type: object required: - transport properties: transport: type: string enum: - sse - http description: Transport used to connect to the MCP server command: type: string description: (stdio) Executable or command to launch the server args: type: array items: type: string description: (stdio) Arguments for the server command default: [] cwd: type: string description: (stdio) Working directory for the server process env: type: object additionalProperties: type: string description: (stdio) Environment variables for the server process default: {} http_url: type: string format: uri description: (http) Base URL for the MCP server (usually ends with /mcp) http_headers: type: object additionalProperties: type: string description: (http) Optional HTTP headers to include (e.g., Authorization) default: {} description: Setup parameters for MCP integration Tools.McpSetupUpdate: type: object properties: transport: type: string enum: - sse - http description: Transport used to connect to the MCP server command: type: string description: (stdio) Executable or command to launch the server args: type: array items: type: string description: (stdio) Arguments for the server command default: [] cwd: type: string description: (stdio) Working directory for the server process env: type: object additionalProperties: type: string description: (stdio) Environment variables for the server process default: {} http_url: type: string format: uri description: (http) Base URL for the MCP server (usually ends with /mcp) http_headers: type: object additionalProperties: type: string description: (http) Optional HTTP headers to include (e.g., Authorization) default: {} description: Setup parameters for MCP integration Tools.NamedToolChoice: type: object properties: function: $ref: '#/components/schemas/Tools.FunctionCallOption' Tools.ParameterSchema: type: object required: - type - properties properties: type: type: string description: Schema type (usually 'object') default: object properties: type: object additionalProperties: $ref: '#/components/schemas/Tools.PropertyDefinition' description: Properties definition for parameters required: type: array items: type: string description: List of required property names default: [] additionalProperties: type: boolean description: Whether to allow additional properties description: JSON Schema for API call parameters Tools.ParameterSchemaUpdate: type: object properties: type: type: string description: Schema type (usually 'object') default: object properties: type: object additionalProperties: $ref: '#/components/schemas/Tools.PropertyDefinitionUpdate' description: Properties definition for parameters required: type: array items: type: string description: List of required property names default: [] additionalProperties: type: boolean description: Whether to allow additional properties description: JSON Schema for API call parameters Tools.PatchToolRequest: type: object properties: name: allOf: - $ref: '#/components/schemas/Common.validPythonIdentifier' description: Name of the tool (must be unique for this agent and a valid python identifier string ) type: allOf: - $ref: '#/components/schemas/Tools.ToolType' description: Type of the tool description: type: string description: Description of the tool function: allOf: - $ref: '#/components/schemas/Tools.FunctionDef' description: The function to call integration: anyOf: - $ref: '#/components/schemas/Tools.DummyIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BraveIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.EmailIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.SpiderIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.WikipediaIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.WeatherIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.MailgunIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseContextIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseExtensionIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.RemoteBrowserIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.LlamaParseIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.FfmpegIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.CloudinaryUploadIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.CloudinaryEditIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.ArxivIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.UnstructuredIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.AlgoliaIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.McpIntegrationDefUpdate' - $ref: '#/components/schemas/Tools.GoogleSheetsIntegrationDefUpdate' description: The integration to call system: allOf: - $ref: '#/components/schemas/Tools.SystemDefUpdate' description: The system to call api_call: allOf: - $ref: '#/components/schemas/Tools.ApiCallDefUpdate' description: The API call to make computer_20241022: allOf: - $ref: '#/components/schemas/Tools.Computer20241022DefUpdate' description: (Alpha) Anthropic new tools text_editor_20241022: $ref: '#/components/schemas/Tools.TextEditor20241022DefUpdate' bash_20241022: $ref: '#/components/schemas/Tools.Bash20241022DefUpdate' description: Payload for patching a tool Tools.PropertyDefinition: type: object required: - type properties: type: type: string description: Type of the property description: type: string description: Description of the property enum: type: array items: type: string description: Enum values if applicable items: allOf: - $ref: '#/components/schemas/Tools.PropertyDefinition' description: Items definition for array types description: Property definition for parameter schema Tools.PropertyDefinitionUpdate: type: object properties: type: type: string description: Type of the property description: type: string description: Description of the property enum: type: array items: type: string description: Enum values if applicable items: allOf: - $ref: '#/components/schemas/Tools.PropertyDefinitionUpdate' description: Items definition for array types description: Property definition for parameter schema Tools.RemoteBrowserArguments: type: object required: - action properties: connect_url: type: string description: The connection URL for the remote browser action: type: string enum: - key - type - mouse_move - left_click - left_click_drag - right_click - middle_click - double_click - screenshot - cursor_position - navigate - refresh description: The action to perform text: type: string description: The text coordinate: type: array items: {} description: The coordinate to move the mouse to description: The arguments for the remote browser Tools.RemoteBrowserArgumentsUpdate: type: object properties: connect_url: type: string description: The connection URL for the remote browser action: type: string enum: - key - type - mouse_move - left_click - left_click_drag - right_click - middle_click - double_click - screenshot - cursor_position - navigate - refresh description: The action to perform text: type: string description: The text coordinate: type: array items: {} description: The coordinate to move the mouse to description: The arguments for the remote browser Tools.RemoteBrowserIntegrationDef: type: object required: - provider - setup - method properties: provider: type: string enum: - remote_browser default: remote_browser setup: $ref: '#/components/schemas/Tools.RemoteBrowserSetup' method: type: string enum: - perform_action default: perform_action arguments: $ref: '#/components/schemas/Tools.RemoteBrowserArguments' allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: The integration definition for the remote browser Tools.RemoteBrowserIntegrationDefUpdate: type: object properties: provider: type: string enum: - remote_browser default: remote_browser setup: $ref: '#/components/schemas/Tools.RemoteBrowserSetup' method: type: string enum: - perform_action default: perform_action arguments: $ref: '#/components/schemas/Tools.RemoteBrowserArgumentsUpdate' allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: The integration definition for the remote browser Tools.RemoteBrowserSetup: type: object properties: connect_url: type: string description: The connection URL for the remote browser width: type: integer format: uint16 description: The width of the browser height: type: integer format: uint16 description: The height of the browser description: The setup parameters for the remote browser Tools.SecretRef: type: object required: - name properties: name: type: string description: The name of the secret to reference Tools.SecretRefUpdate: type: object properties: name: type: string description: The name of the secret to reference Tools.SpiderFetchArguments: type: object required: - url properties: url: type: string format: uri description: The URL to fetch data from content_type: type: string enum: - application/json - text/csv - application/xml - application/jsonl description: The content type to return default: application/json params: type: object additionalProperties: {} description: Additional parameters for the Spider API description: Arguments for Spider integration Tools.SpiderFetchArgumentsUpdate: type: object properties: url: type: string format: uri description: The URL to fetch data from content_type: type: string enum: - application/json - text/csv - application/xml - application/jsonl description: The content type to return default: application/json params: type: object additionalProperties: {} description: Additional parameters for the Spider API description: Arguments for Spider integration Tools.SpiderIntegrationDef: type: object required: - provider properties: provider: type: string enum: - spider description: The provider must be "spider" default: spider method: type: string enum: - crawl - links - screenshot - search description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.SpiderSetup' description: The setup parameters for Spider arguments: allOf: - $ref: '#/components/schemas/Tools.SpiderFetchArguments' description: The arguments for Spider allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Spider integration definition Tools.SpiderIntegrationDefUpdate: type: object properties: provider: type: string enum: - spider description: The provider must be "spider" default: spider method: type: string enum: - crawl - links - screenshot - search description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.SpiderSetupUpdate' description: The setup parameters for Spider arguments: allOf: - $ref: '#/components/schemas/Tools.SpiderFetchArgumentsUpdate' description: The arguments for Spider allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Spider integration definition Tools.SpiderSetup: type: object required: - spider_api_key properties: spider_api_key: type: string description: The API key for Spider description: Setup parameters for Spider integration Tools.SpiderSetupUpdate: type: object properties: spider_api_key: type: string description: The API key for Spider description: Setup parameters for Spider integration Tools.SystemDef: type: object required: - resource - operation properties: resource: type: string enum: - agent - user - task - execution - doc - session - job description: Resource is the name of the resource to use operation: type: string enum: - create - update - patch - create_or_update - embed - change_status - search - chat - history - delete - get - list description: Operation is the name of the operation to perform resource_id: allOf: - $ref: '#/components/schemas/Common.uuid' description: Resource id (if applicable) subresource: type: string enum: - tool - doc - execution - transition description: Sub-resource type (if applicable) arguments: type: object additionalProperties: {} description: The arguments to pre-apply to the system call description: System definition Tools.SystemDefUpdate: type: object properties: resource: type: string enum: - agent - user - task - execution - doc - session - job description: Resource is the name of the resource to use operation: type: string enum: - create - update - patch - create_or_update - embed - change_status - search - chat - history - delete - get - list description: Operation is the name of the operation to perform resource_id: allOf: - $ref: '#/components/schemas/Common.uuid' description: Resource id (if applicable) subresource: type: string enum: - tool - doc - execution - transition description: Sub-resource type (if applicable) arguments: type: object additionalProperties: {} description: The arguments to pre-apply to the system call description: System definition Tools.TextEditor20241022Def: type: object required: - type properties: type: type: string enum: - text_editor_20241022 default: text_editor_20241022 name: type: string default: str_replace_editor Tools.TextEditor20241022DefUpdate: type: object properties: type: type: string enum: - text_editor_20241022 default: text_editor_20241022 name: type: string default: str_replace_editor Tools.Tool: type: object required: - name - type - created_at - updated_at - id properties: name: allOf: - $ref: '#/components/schemas/Common.validPythonIdentifier' description: Name of the tool (must be unique for this agent and a valid python identifier string ) type: allOf: - $ref: '#/components/schemas/Tools.ToolType' description: Type of the tool description: type: string description: Description of the tool function: allOf: - $ref: '#/components/schemas/Tools.FunctionDef' description: The function to call integration: anyOf: - $ref: '#/components/schemas/Tools.DummyIntegrationDef' - $ref: '#/components/schemas/Tools.BraveIntegrationDef' - $ref: '#/components/schemas/Tools.EmailIntegrationDef' - $ref: '#/components/schemas/Tools.SpiderIntegrationDef' - $ref: '#/components/schemas/Tools.WikipediaIntegrationDef' - $ref: '#/components/schemas/Tools.WeatherIntegrationDef' - $ref: '#/components/schemas/Tools.MailgunIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseContextIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseExtensionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsIntegrationDef' - $ref: '#/components/schemas/Tools.RemoteBrowserIntegrationDef' - $ref: '#/components/schemas/Tools.LlamaParseIntegrationDef' - $ref: '#/components/schemas/Tools.FfmpegIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryUploadIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryEditIntegrationDef' - $ref: '#/components/schemas/Tools.ArxivIntegrationDef' - $ref: '#/components/schemas/Tools.UnstructuredIntegrationDef' - $ref: '#/components/schemas/Tools.AlgoliaIntegrationDef' - $ref: '#/components/schemas/Tools.McpIntegrationDef' - $ref: '#/components/schemas/Tools.GoogleSheetsIntegrationDef' description: The integration to call system: allOf: - $ref: '#/components/schemas/Tools.SystemDef' description: The system to call api_call: allOf: - $ref: '#/components/schemas/Tools.ApiCallDef' description: The API call to make computer_20241022: allOf: - $ref: '#/components/schemas/Tools.Computer20241022Def' description: (Alpha) Anthropic new tools text_editor_20241022: $ref: '#/components/schemas/Tools.TextEditor20241022Def' bash_20241022: $ref: '#/components/schemas/Tools.Bash20241022Def' created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true Tools.ToolResponse: type: object required: - id - output properties: id: type: string output: type: object additionalProperties: {} description: The output of the tool Tools.ToolType: type: string enum: - function - integration - system - api_call - computer_20241022 - text_editor_20241022 - bash_20241022 Tools.UnstructuredIntegrationDef: type: object required: - provider properties: provider: type: string enum: - unstructured description: The provider must be "unstructured" default: unstructured method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.UnstructuredSetup' description: The setup parameters for Unstructured arguments: allOf: - $ref: '#/components/schemas/Tools.UnstructuredPartitionArguments' description: The arguments for Unstructured allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Unstructured integration definition Tools.UnstructuredIntegrationDefUpdate: type: object properties: provider: type: string enum: - unstructured description: The provider must be "unstructured" default: unstructured method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.UnstructuredSetupUpdate' description: The setup parameters for Unstructured arguments: allOf: - $ref: '#/components/schemas/Tools.UnstructuredPartitionArgumentsUpdate' description: The arguments for Unstructured allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Unstructured integration definition Tools.UnstructuredPartitionArguments: type: object required: - file properties: filename: type: string description: File Name. If not provided, a random name will be generated. file: type: string description: The base64 string of the file, which can be a single string or a list of strings partition_params: type: object additionalProperties: {} description: Additional partition parameters description: Arguments for Unstructured partition integration Tools.UnstructuredPartitionArgumentsUpdate: type: object properties: filename: type: string description: File Name. If not provided, a random name will be generated. file: type: string description: The base64 string of the file, which can be a single string or a list of strings partition_params: type: object additionalProperties: {} description: Additional partition parameters description: Arguments for Unstructured partition integration Tools.UnstructuredSetup: type: object required: - unstructured_api_key properties: unstructured_api_key: type: string description: The API key for Unstructured.io server_url: type: string description: Optional server endpoint URL server: type: string description: The server by name to use for all methods url_params: type: object additionalProperties: {} description: Parameters to optionally template the server URL with retry_config: type: object additionalProperties: {} description: The retry configuration to use for all supported methods timeout_ms: type: integer format: int16 description: Optional request timeout applied to each operation in milliseconds description: Setup parameters for Unstructured integration Tools.UnstructuredSetupUpdate: type: object properties: unstructured_api_key: type: string description: The API key for Unstructured.io server_url: type: string description: Optional server endpoint URL server: type: string description: The server by name to use for all methods url_params: type: object additionalProperties: {} description: Parameters to optionally template the server URL with retry_config: type: object additionalProperties: {} description: The retry configuration to use for all supported methods timeout_ms: type: integer format: int16 description: Optional request timeout applied to each operation in milliseconds description: Setup parameters for Unstructured integration Tools.UpdateToolRequest: type: object required: - name - type properties: name: allOf: - $ref: '#/components/schemas/Common.validPythonIdentifier' description: Name of the tool (must be unique for this agent and a valid python identifier string ) type: allOf: - $ref: '#/components/schemas/Tools.ToolType' description: Type of the tool description: type: string description: Description of the tool function: allOf: - $ref: '#/components/schemas/Tools.FunctionDef' description: The function to call integration: anyOf: - $ref: '#/components/schemas/Tools.DummyIntegrationDef' - $ref: '#/components/schemas/Tools.BraveIntegrationDef' - $ref: '#/components/schemas/Tools.EmailIntegrationDef' - $ref: '#/components/schemas/Tools.SpiderIntegrationDef' - $ref: '#/components/schemas/Tools.WikipediaIntegrationDef' - $ref: '#/components/schemas/Tools.WeatherIntegrationDef' - $ref: '#/components/schemas/Tools.MailgunIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseContextIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseExtensionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseListSessionsIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCreateSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseCompleteSessionIntegrationDef' - $ref: '#/components/schemas/Tools.BrowserbaseGetSessionLiveUrlsIntegrationDef' - $ref: '#/components/schemas/Tools.RemoteBrowserIntegrationDef' - $ref: '#/components/schemas/Tools.LlamaParseIntegrationDef' - $ref: '#/components/schemas/Tools.FfmpegIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryUploadIntegrationDef' - $ref: '#/components/schemas/Tools.CloudinaryEditIntegrationDef' - $ref: '#/components/schemas/Tools.ArxivIntegrationDef' - $ref: '#/components/schemas/Tools.UnstructuredIntegrationDef' - $ref: '#/components/schemas/Tools.AlgoliaIntegrationDef' - $ref: '#/components/schemas/Tools.McpIntegrationDef' - $ref: '#/components/schemas/Tools.GoogleSheetsIntegrationDef' description: The integration to call system: allOf: - $ref: '#/components/schemas/Tools.SystemDef' description: The system to call api_call: allOf: - $ref: '#/components/schemas/Tools.ApiCallDef' description: The API call to make computer_20241022: allOf: - $ref: '#/components/schemas/Tools.Computer20241022Def' description: (Alpha) Anthropic new tools text_editor_20241022: $ref: '#/components/schemas/Tools.TextEditor20241022Def' bash_20241022: $ref: '#/components/schemas/Tools.Bash20241022Def' description: Payload for updating a tool Tools.WeatherGetArguments: type: object required: - location properties: location: type: string description: The location for which to fetch weather data description: Arguments for Weather Tools.WeatherGetArgumentsUpdate: type: object properties: location: type: string description: The location for which to fetch weather data description: Arguments for Weather Tools.WeatherIntegrationDef: type: object required: - provider properties: provider: type: string enum: - weather description: The provider must be "weather" default: weather method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.WeatherSetup' description: The setup parameters for Weather arguments: allOf: - $ref: '#/components/schemas/Tools.WeatherGetArguments' description: The arguments for Weather allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Weather integration definition Tools.WeatherIntegrationDefUpdate: type: object properties: provider: type: string enum: - weather description: The provider must be "weather" default: weather method: type: string description: The specific method of the integration to call setup: allOf: - $ref: '#/components/schemas/Tools.WeatherSetupUpdate' description: The setup parameters for Weather arguments: allOf: - $ref: '#/components/schemas/Tools.WeatherGetArgumentsUpdate' description: The arguments for Weather allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Weather integration definition Tools.WeatherSetup: type: object required: - openweathermap_api_key properties: openweathermap_api_key: type: string description: The api key for OpenWeatherMap description: Integration definition for Weather Tools.WeatherSetupUpdate: type: object properties: openweathermap_api_key: type: string description: The api key for OpenWeatherMap description: Integration definition for Weather Tools.WikipediaIntegrationDef: type: object required: - provider properties: provider: type: string enum: - wikipedia description: The provider must be "wikipedia" default: wikipedia method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Wikipedia default: null arguments: allOf: - $ref: '#/components/schemas/Tools.WikipediaSearchArguments' description: The arguments for Wikipedia Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDef' description: Wikipedia integration definition Tools.WikipediaIntegrationDefUpdate: type: object properties: provider: type: string enum: - wikipedia description: The provider must be "wikipedia" default: wikipedia method: type: string description: The specific method of the integration to call setup: nullable: true description: The setup parameters for Wikipedia default: null arguments: allOf: - $ref: '#/components/schemas/Tools.WikipediaSearchArgumentsUpdate' description: The arguments for Wikipedia Search allOf: - $ref: '#/components/schemas/Tools.BaseIntegrationDefUpdate' description: Wikipedia integration definition Tools.WikipediaSearchArguments: type: object required: - query - load_max_docs properties: query: type: string description: The search query string load_max_docs: type: integer format: uint8 minimum: 1 maximum: 10 description: Maximum number of documents to load default: 2 description: Arguments for Wikipedia Search Tools.WikipediaSearchArgumentsUpdate: type: object properties: query: type: string description: The search query string load_max_docs: type: integer format: uint8 minimum: 1 maximum: 10 description: Maximum number of documents to load default: 2 description: Arguments for Wikipedia Search Users.CreateOrUpdateUserRequest: type: object required: - id properties: id: $ref: '#/components/schemas/Common.uuid' allOf: - $ref: '#/components/schemas/Users.CreateUserRequest' Users.CreateUserRequest: type: object required: - name - about properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the user default: '' about: type: string description: About the user default: '' project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the user description: Payload for creating a user (and associated documents) Users.PatchUserRequest: type: object properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the user default: '' about: type: string description: About the user default: '' project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the user description: Payload for patching a user Users.UpdateUserRequest: type: object required: - name - about properties: metadata: type: object additionalProperties: {} name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the user default: '' about: type: string description: About the user default: '' project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the user description: Payload for updating a user Users.User: type: object required: - id - created_at - updated_at - name - about properties: id: allOf: - $ref: '#/components/schemas/Common.uuid' readOnly: true metadata: type: object additionalProperties: {} created_at: type: string format: date-time description: When this resource was created as UTC date-time readOnly: true updated_at: type: string format: date-time description: When this resource was updated as UTC date-time readOnly: true name: allOf: - $ref: '#/components/schemas/Common.identifierSafeUnicode' description: Name of the user default: '' about: type: string description: About the user default: '' project: allOf: - $ref: '#/components/schemas/Common.canonicalName' description: Project canonical name of the user securitySchemes: ApiKeyAuth: type: apiKey in: header name: Authorization ApiKeyAuth_: type: apiKey in: header name: X-Auth-Key servers: - url: https://{serverEnv}.julep.ai/api description: The julep cloud service endpoint variables: serverEnv: default: api description: The environment to use enum: - api - dev ================================================ FILE: src/typespec/tspconfig.yaml ================================================ emit: - "@typespec/openapi3" options: "@typespec/openapi3": file-type: yaml output-file: "openapi-{version}.yaml" new-line: lf omit-unreachable-types: true # openapi-versions: ["3.1.0"] ================================================ FILE: src/typespec/users/endpoints.tsp ================================================ import "../common"; import "./models.tsp"; using Common; namespace Users; // // USER ENDPOINTS // interface Endpoints extends LimitOffsetPagination, CreateEndpoint, CreateOrUpdateEndpoint, UpdateEndpoint, PatchEndpoint, DeleteEndpoint<"Delete a user by id">, GetEndpoint {} ================================================ FILE: src/typespec/users/main.tsp ================================================ import "./endpoints.tsp"; import "./models.tsp"; namespace Users; // // USERS // ================================================ FILE: src/typespec/users/models.tsp ================================================ import "@typespec/http"; import "../common"; using TypeSpec.Http; using Common; namespace Users; // // USER MODELS // model User { ...HasId; ...HasMetadata; ...HasTimestamps; /** Name of the user */ name: identifierSafeUnicode = identifierSafeUnicode(""); /** About the user */ about: string = ""; /** Project canonical name of the user */ project?: canonicalName; } /** Payload for updating a user */ @withVisibility("create", "update") model UpdateUserRequest { ...User; } /** Payload for patching a user */ model PatchUserRequest is UpdateUserRequest {} /** Payload for creating a user (and associated documents) */ model CreateUserRequest is UpdateUserRequest {} model CreateOrUpdateUserRequest extends CreateUserRequest { @path id: uuid; } ================================================ FILE: src/typespec/versions.tsp ================================================ namespace Versions; enum ApiVersions { v1_0: "1.0.0", }